@vellumai/web 0.10.0-staging.2 → 0.10.0-staging.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/{account-page-D5qDx37o.js → account-page-B5rB7loj.js} +1 -1
- package/dist/assets/{add-credits-modal-DpHTkxV2.js → add-credits-modal-BEX4_5jj.js} +1 -1
- package/dist/assets/{advanced-page-DWX9qbxa.js → advanced-page-9RUi4YCF.js} +1 -1
- package/dist/assets/{ai-page-Cp6X0S2W.js → ai-page-CZj92XF4.js} +1 -1
- package/dist/assets/{api-key-screen-DvV4RiY0.js → api-key-screen-CUKjlF2C.js} +1 -1
- package/dist/assets/{archive-page-B7i9-bc2.js → archive-page-YsBlmevd.js} +1 -1
- package/dist/assets/{billing-page-CMhUfBBf.js → billing-page-DgX2YBSA.js} +1 -1
- package/dist/assets/{bookmarks-page-BBlx8L6h.js → bookmarks-page-DRcIBBva.js} +1 -1
- package/dist/assets/{command-palette-yIWk_niH.js → command-palette-BXEAR93M.js} +1 -1
- package/dist/assets/{command-palette-window-page-CHu_bF8J.js → command-palette-window-page-5SP_Ft4Y.js} +1 -1
- package/dist/assets/{community-page-CiartSQX.js → community-page-D5-exeNr.js} +1 -1
- package/dist/assets/{contacts-page-route-C9IaBKKe.js → contacts-page-route-C9T-8Sdr.js} +1 -1
- package/dist/assets/{debug-page-DGQMqihK.js → debug-page-ClQetFUa.js} +1 -1
- package/dist/assets/{deploy-dialogs-DWIqIDdv.js → deploy-dialogs-BtpYB7B8.js} +1 -1
- package/dist/assets/{developer-page-ClPMK7n8.js → developer-page-DQs8SZ8K.js} +1 -1
- package/dist/assets/{devices-page-N9s-okC5.js → devices-page-VsRsz6XP.js} +1 -1
- package/dist/assets/{dictation-overlay-page-D_eJHI6R.js → dictation-overlay-page-C5HFJIsY.js} +1 -1
- package/dist/assets/{document-viewer-page-CmSYAtEc.js → document-viewer-page-BLBwWqM4.js} +1 -1
- package/dist/assets/{earn-credits-modal-OFm9gF2_.js → earn-credits-modal-Dig03UD-.js} +1 -1
- package/dist/assets/{emails-page-psWdsGCD.js → emails-page-D9R72EQW.js} +1 -1
- package/dist/assets/{file-editor-CKotrZYQ.js → file-editor-HQXiGdH-.js} +1 -1
- package/dist/assets/{general-page-CaAos_hp.js → general-page-CMr5RhNh.js} +1 -1
- package/dist/assets/{hatching-screen-CtgkoJwM.js → hatching-screen-BAzE4aGD.js} +1 -1
- package/dist/assets/{home-page-route-syOFwCBN.js → home-page-route-JenDSLBl.js} +1 -1
- package/dist/assets/{hosting-screen-Duoz3ECF.js → hosting-screen-dPfTLCnv.js} +1 -1
- package/dist/assets/{identity-page-route-gCgQUpAC.js → identity-page-route-r9ZgIw8g.js} +1 -1
- package/dist/assets/{index-LP2PV_QY.js → index-BiN-6kWM.js} +23 -23
- package/dist/assets/{inspect-page-CYszP4kv.js → inspect-page-2cNMjT4e.js} +1 -1
- package/dist/assets/{install-BK1MtTfb.js → install-CHMiF_Hw.js} +1 -1
- package/dist/assets/{integrations-page-8RrTqdmS.js → integrations-page-BiLM3QyR.js} +1 -1
- package/dist/assets/{intelligence-layout-DMxSxRZX.js → intelligence-layout-CjDxFKQO.js} +1 -1
- package/dist/assets/{keyboard-shortcuts-page-q_QkRUkC.js → keyboard-shortcuts-page-DIhG1FK_.js} +1 -1
- package/dist/assets/{library-detail-page-_lrynJRj.js → library-detail-page-CjeBxuMc.js} +1 -1
- package/dist/assets/{library-page-CKh1x82Q.js → library-page-BFIPthR_.js} +1 -1
- package/dist/assets/{login-page-CDtyRiaq.js → login-page-KDH0IZ6y.js} +1 -1
- package/dist/assets/{logout-page-vdgRWyPg.js → logout-page-DI7i4Hok.js} +1 -1
- package/dist/assets/{logs-layout-btcFTD4i.js → logs-layout-BEMQQY7S.js} +1 -1
- package/dist/assets/{mcp-page-DdG8hp_Z.js → mcp-page-B7tUTzT0.js} +1 -1
- package/dist/assets/{memory-router-playground-page-Bt_KJsxN.js → memory-router-playground-page-JdkTEwPy.js} +1 -1
- package/dist/assets/{mobile-sidebar-drawer-Cd68jgRD.js → mobile-sidebar-drawer-DuJUmy0b.js} +1 -1
- package/dist/assets/{notifications-page-BilkBeoP.js → notifications-page-CmOvbV59.js} +1 -1
- package/dist/assets/{oauth-complete-page-BC7UElNs.js → oauth-complete-page-R_1ODIIi.js} +1 -1
- package/dist/assets/{oauth-popup-complete-page-CiTNEvfk.js → oauth-popup-complete-page-YECuZtPs.js} +1 -1
- package/dist/assets/{pairing-page-Dc-5wQmY.js → pairing-page-BtaFWq0w.js} +1 -1
- package/dist/assets/{plugin-detail-page-CtWtIYBW.js → plugin-detail-page-D6Gve0qx.js} +1 -1
- package/dist/assets/{plugins-page-1vkkdBfG.js → plugins-page-DA-JrehF.js} +1 -1
- package/dist/assets/{prechat-route-CG8Qo2Tq.js → prechat-route-BhzvRsw3.js} +1 -1
- package/dist/assets/{privacy-page-rNHkqHfs.js → privacy-page-Yex5OJjZ.js} +1 -1
- package/dist/assets/{privacy-screen-Cck6z5wu.js → privacy-screen-ccjT4S0F.js} +1 -1
- package/dist/assets/{provider-callback-page-CrZXFWM7.js → provider-callback-page-BS-DqV_M.js} +1 -1
- package/dist/assets/{research-mock-page-D7-VpSBh.js → research-mock-page-D0-sKBpu.js} +1 -1
- package/dist/assets/{research-onboarding-route-DAPVTFHs.js → research-onboarding-route-ZTgUGnrN.js} +1 -1
- package/dist/assets/{review-terms-screen-C8XTIUYc.js → review-terms-screen-DLWgKysx.js} +1 -1
- package/dist/assets/{select-assistant-screen-PZqDGbI2.js → select-assistant-screen-LNX6PpzR.js} +1 -1
- package/dist/assets/{settings-layout-ByZKbs5J.js → settings-layout-BA0suokL.js} +1 -1
- package/dist/assets/{share-feedback-modal-CuxFlSR6.js → share-feedback-modal-CFgHvfgR.js} +1 -1
- package/dist/assets/{sidebar-tree-BZUv9ggX.js → sidebar-tree-DALLHIeG.js} +1 -1
- package/dist/assets/{signup-page-BWnAp0Bw.js → signup-page-13TRI3CC.js} +1 -1
- package/dist/assets/{skills-page-BAodqgt1.js → skills-page-DiopOlcy.js} +1 -1
- package/dist/assets/{sounds-page-hDPPoEEQ.js → sounds-page-DE47aZrz.js} +1 -1
- package/dist/assets/{step-indicator-dots-CwbobrxS.js → step-indicator-dots-BOKv1I4C.js} +1 -1
- package/dist/assets/{subagent-detail-panel-Db9feY1I.js → subagent-detail-panel-BdPp2LMK.js} +1 -1
- package/dist/assets/{system-events-page-DYi0jI1g.js → system-events-page-DcaF2EuX.js} +1 -1
- package/dist/assets/{tiptap-document-editor-DD5B0bf0.js → tiptap-document-editor-DjIQ9tCC.js} +1 -1
- package/dist/assets/{tool-detail-panel-DZf8WIS6.js → tool-detail-panel-C6uFi3_6.js} +1 -1
- package/dist/assets/{trace-page-DSDi-YYp.js → trace-page-4MU66DDM.js} +1 -1
- package/dist/assets/{upgrade-cancel-page-DHzkb9An.js → upgrade-cancel-page-D2-xTACq.js} +1 -1
- package/dist/assets/{upgrade-success-page-CIooZvxn.js → upgrade-success-page-DLjl6978.js} +1 -1
- package/dist/assets/{usage-page-XWL-WFaq.js → usage-page-CCBqWkRU.js} +1 -1
- package/dist/assets/{voice-page-BwA-ETwe.js → voice-page-VrJ7AZrg.js} +1 -1
- package/dist/assets/{weather-forecast-display-tzc5l6oR.js → weather-forecast-display-DKMPxDv5.js} +1 -1
- package/dist/assets/{welcome-screen-BkL_1qYq.js → welcome-screen-DVeLGZKg.js} +1 -1
- package/dist/assets/{workflow-detail-panel-DYQvTG3m.js → workflow-detail-panel-BgDWu3_4.js} +1 -1
- package/dist/assets/{workspace-page-t_8JOOXv.js → workspace-page-BlVlfXIt.js} +1 -1
- package/dist/index.html +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{o as e}from"./chunk-jRWAZmH_.js";import{r as t,s as n}from"./local-settings-lVNyIOJ_.js";import{t as r}from"./capture-error-B0wqOYKY.js";import{t as i}from"./react-DJZBPgpf.js";import{t as a}from"./button-D7s2Q_uG.js";import{d as o,h as s}from"./chunk-5KNZJZUH-DdS6bb-3.js";import{N as c,O as l,S as u,T as d,c as f,n as p}from"./QueryClientProvider-DKhXIxGb.js";import{a as m,c as h,d as g,i as _,l as v,o as y,r as b,s as x,t as S,u as C}from"./useQuery-B45lW1Kk.js";import{t as w}from"./jsx-runtime-CVSDxk6A.js";import{t as T}from"./card-BibIM9x3.js";import{t as E}from"./confirm-dialog-DbNUkFt6.js";import{t as D}from"./notice-G5Imd5pC.js";import{t as O}from"./popover-PnyzuDx3.js";import{t as k}from"./input-CwdmSRlD.js";import{n as A,t as j}from"./panel-item-BFOUNXY1.js";import{n as M}from"./toast-DLWkiWW6.js";import{t as N}from"./createLucideIcon-DIlBzeWM.js";import{t as P}from"./external-link-B3skagqt.js";import{t as F}from"./loader-circle-CTs38Ovl.js";import{t as I}from"./pencil-lwgMCqyH.js";import{t as L}from"./sparkles-B9QIWdq0.js";import{t as R}from"./x-Dz7msELe.js";import{Bt as ee,J as te,K as ne,Rt as re,Vt as z,X as ie,Y as ae,Z as B,q as oe,zt as se}from"./react-query.gen-DdB0sQgj.js";import{r as V}from"./api-errors-CwAGZ-xJ.js";import{N as ce}from"./auth-store-CrTf0uWL.js";import{r as le}from"./api-BSHLYsxJ.js";import{a as H}from"./routes-BKwsRssF.js";import{n as ue}from"./use-is-mobile-CvT53Qs1.js";import{$a as de,An as fe,Er as pe,I as me,It as he,Ki as U,L as W,Pt as ge,Tr as _e,_t as ve,aa as ye,at as be,dt as xe,gt as Se,ho as Ce,it as we,jn as Te,kn as G,lo as Ee,lt as K,mo as q,ot as De,pa as J,rt as Oe,st as ke,ut as Ae,v as je}from"./index-LP2PV_QY.js";function Me(e,t){let n=new Set(t);return e.filter(e=>!n.has(e))}function Ne(e,t,n){let r=e.slice(0);return r[t]=n,r}var Pe=class extends c{#e;#t;#n;#r;#i;#a;#o;#s;#c;#l=[];constructor(e,t,n){super(),this.#e=e,this.#r=n,this.#n=[],this.#i=[],this.#t=[],this.setQueries(t)}onSubscribe(){this.listeners.size===1&&this.#i.forEach(e=>{e.subscribe(t=>{this.#p(e,t)})})}onUnsubscribe(){this.listeners.size||this.destroy()}destroy(){this.listeners=new Set,this.#i.forEach(e=>{e.destroy()})}setQueries(e,t){this.#n=e,this.#r=t,f.batch(()=>{let e=this.#i,t=this.#f(this.#n);t.forEach(e=>e.observer.setOptions(e.defaultedQueryOptions));let n=t.map(e=>e.observer),r=n.map(e=>e.getCurrentResult()),i=e.length!==n.length,a=n.some((t,n)=>t!==e[n]),o=i||a,s=o?!0:r.some((e,t)=>{let n=this.#t[t];return!n||!l(e,n)});!o&&!s||(o&&(this.#l=t,this.#i=n),this.#t=r,this.hasListeners()&&(o&&(Me(e,n).forEach(e=>{e.destroy()}),Me(n,e).forEach(e=>{e.subscribe(t=>{this.#p(e,t)})})),this.#m()))})}getCurrentResult(){return this.#t}getQueries(){return this.#i.map(e=>e.getCurrentQuery())}getObservers(){return this.#i}getOptimisticResult(e,t){let n=this.#f(e),r=n.map(e=>e.observer.getOptimisticResult(e.defaultedQueryOptions)),i=n.map(e=>e.defaultedQueryOptions.queryHash);return[r,e=>this.#d(e??r,t,i),()=>this.#u(r,n)]}#u(e,t){return t.map((n,r)=>{let i=e[r];return n.defaultedQueryOptions.notifyOnChangeProps?i:n.observer.trackResult(i,e=>{t.forEach(t=>{t.observer.trackProp(e)})})})}#d(e,t,n){if(t){let r=this.#c,i=n!==void 0&&r!==void 0&&(r.length!==n.length||n.some((e,t)=>e!==r[t]));return(!this.#a||this.#t!==this.#s||i||t!==this.#o)&&(this.#o=t,this.#s=this.#t,n!==void 0&&(this.#c=n),this.#a=d(this.#a,t(e))),this.#a}return e}#f(e){let t=new Map;this.#i.forEach(e=>{let n=e.options.queryHash;if(!n)return;let r=t.get(n);r?r.push(e):t.set(n,[e])});let n=[];return e.forEach(e=>{let r=this.#e.defaultQueryOptions(e),i=t.get(r.queryHash)?.shift()??new g(this.#e,r);n.push({defaultedQueryOptions:r,observer:i})}),n}#p(e,t){let n=this.#i.indexOf(e);n!==-1&&(this.#t=Ne(this.#t,n,t),this.#m())}#m(){if(this.hasListeners()){let e=this.#a,t=this.#u(this.#t,this.#l);e!==this.#d(t,this.#r?.combine)&&f.batch(()=>{this.listeners.forEach(e=>{e(this.#t)})})}}},Y=e(i(),1);function Fe({queries:e,...t},n){let r=p(n),i=C(),a=v(),o=Y.useMemo(()=>e.map(e=>{let t=r.defaultQueryOptions(e);return t._optimisticResults=i?`isRestoring`:`optimistic`,t}),[e,r,i]);o.forEach(e=>{b(e),y(e,a,r.getQueryCache().get(e.queryHash))}),h(a);let[s]=Y.useState(()=>new Pe(r,o,t)),[c,l,d]=s.getOptimisticResult(o,t.combine),S=!i&&t.subscribed!==!1;Y.useSyncExternalStore(Y.useCallback(e=>S?s.subscribe(f.batchCalls(e)):u,[s,S]),()=>s.getCurrentResult(),()=>s.getCurrentResult()),Y.useEffect(()=>{s.setQueries(o,t)},[o,t,s]);let w=c.some((e,t)=>m(o[t],e))?c.flatMap((e,t)=>{let n=o[t];return n&&m(n,e)?_(n,new g(r,n),a):[]}):[];if(w.length>0)throw Promise.all(w);let T=c.find((e,t)=>{let n=o[t];return n&&x({result:e,errorResetBoundary:a,throwOnError:n.throwOnError,query:r.getQueryCache().get(n.queryHash),suspense:n.suspense})});if(T?.error)throw T.error;return l(d())}var Ie=N(`calendar-plus`,[[`path`,{d:`M16 19h6`,key:`xwg31i`}],[`path`,{d:`M16 2v4`,key:`4m81vk`}],[`path`,{d:`M19 16v6`,key:`tddt3s`}],[`path`,{d:`M21 12.598V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h8.5`,key:`1glfrc`}],[`path`,{d:`M3 10h18`,key:`8toen8`}],[`path`,{d:`M8 2v4`,key:`1cmpym`}]]);function Le({assistantId:e,providerKey:t,displayName:n,managedAvailable:r,connectionsQueryKey:i,allConnections:a}){let o=p(),s=ce(),c=(0,Y.useRef)(null),l=(0,Y.useRef)(null),u=(0,Y.useRef)(null),d=(0,Y.useRef)(null),[f,m]=(0,Y.useState)(!1),h=()=>{l.current=null,m(!1)},g=()=>{c.current&&!c.current.closed&&c.current.close(),c.current=null,u.current&&=(clearInterval(u.current),null),d.current&&=(clearTimeout(d.current),null)},_=(0,Y.useCallback)(e=>{if(e.type!==`vellum:oauth-complete`||!l.current||e.requestId!==l.current.requestId)return;let{oauthStatus:t,oauthCode:r}=e;if(g(),h(),t===`connected`)M.success(`${n} account connected.`),o.invalidateQueries({queryKey:i});else{let e=r?`Error: ${r}`:`Authorization failed`;M.error(`${n} ${e}`)}},[i,n,o]),v=(0,Y.useCallback)(async(e,n)=>{if(!r)return!1;for(let r=0;r<8;r+=1){r>0&&await be(750);try{if(o.invalidateQueries({queryKey:i}),we(await o.fetchQuery({...G({path:{assistant_id:e}}),staleTime:0}),t,n))return!0}catch{}}return!1},[i,r,t,o]);(0,Y.useEffect)(()=>{let e=e=>{let t=l.current;if(!t)return;let n=De(e,window.location.origin,t.requestId);n&&_(n)},t=e=>{let t=l.current;if(!t)return;let n=ke(e,t.requestId);n&&(_(n),window.localStorage.removeItem(K(t.requestId)))};return window.addEventListener(`message`,e),window.addEventListener(`storage`,t),()=>{window.removeEventListener(`message`,e),window.removeEventListener(`storage`,t)}},[_]),xe((0,Y.useCallback)(e=>{let t=l.current;t&&e.requestId===t.requestId&&_({type:`vellum:oauth-complete`,requestId:e.requestId,oauthStatus:e.oauthStatus,oauthProvider:e.oauthProvider,oauthCode:e.oauthCode})},[_])),(0,Y.useEffect)(()=>ve(()=>{let e=l.current;e&&(async()=>{let t=await v(e.platformAssistantId,e.baselineConnectionSignatures);l.current&&(h(),t&&M.success(`${n} account connected.`))})()}),[v,n]),(0,Y.useEffect)(()=>()=>{u.current&&clearInterval(u.current),d.current&&clearTimeout(d.current),c.current&&!c.current.closed&&c.current.close()},[]);let y=pe();return{handleConnect:(i=[])=>{if(!r)return;let f=crypto.randomUUID();m(!0);let p=async r=>{let c;try{c=await me(e)}catch(e){g(),h(),M.error(e instanceof Error?e.message:`Failed to start ${n} authorization.`);return}let u=Oe(await o.fetchQuery({...G({path:{assistant_id:c}}),staleTime:0}).catch(()=>c===e?a??[]:[]),t);l.current={requestId:f,provider:t,platformAssistantId:c,baselineConnectionSignatures:u},y.mutate({path:{assistant_id:c,provider:t},body:{requested_scopes:i,redirect_after_connect:`${H.account.oauth.popupComplete}?requestId=${f}${s?`&native=1`:``}`}},{onSuccess(e){if(s){Se(e.connect_url);return}r&&!r.closed?r.location.href=e.connect_url:l.current&&(g(),h(),M.error(`${n} connection failed: popup closed.`))},onError(e){g(),h();let t=V(e,void 0,`Failed to start ${n} authorization.`);M.error(t)}})};if(s){p(null);return}let b=window.open(``,`_blank`,`width=500,height=600`);if(b===null){h(),M.error(`Popup blocked. Please enable popups and try again.`);return}c.current=b,u.current=setInterval(()=>{c.current&&c.current.closed&&l.current&&!d.current&&(d.current=setTimeout(async()=>{d.current=null;let e=l.current;if(!e)return;let t=window.localStorage.getItem(K(e.requestId));if(t){let n=Ae(t);if(n&&n.requestId===e.requestId){_(n),window.localStorage.removeItem(K(e.requestId));return}}let r=await v(e.platformAssistantId,e.baselineConnectionSignatures);if(l.current){if(r){g(),h(),M.success(`${n} account connected.`);return}g(),h(),M.error(`${n} connection failed: authorization popup closed.`)}},1e3))},100),p(b)},oauthInProgress:f,startOAuthPending:y.isPending}}var X=w();function Re({displayName:e,providerKey:t,logoUrl:n,connections:r,connectionsLoading:i,startPending:o,oauthInProgress:s,disconnectingId:c,onConnect:l,onDisconnect:u,connectPresets:d=[]}){let f=o||s;return i?(0,X.jsx)(`div`,{className:`flex items-center justify-center py-10`,children:(0,X.jsx)(F,{className:`h-5 w-5 animate-spin text-[var(--content-disabled)]`})}):r.length===0?o||s?(0,X.jsxs)(`div`,{className:`flex flex-col items-center gap-3 py-10`,children:[(0,X.jsx)(W,{providerKey:t,displayName:e,logoUrl:n,size:48}),(0,X.jsxs)(`div`,{className:`flex items-center gap-2 text-body-medium-lighter text-[var(--content-tertiary)]`,children:[(0,X.jsx)(F,{className:`h-3.5 w-3.5 animate-spin`}),`Waiting for authorization...`]})]}):(0,X.jsxs)(`div`,{className:`flex flex-col items-center gap-3 py-10`,children:[(0,X.jsx)(W,{providerKey:t,displayName:e,logoUrl:n,size:48}),(0,X.jsx)(`p`,{className:`text-body-medium-default text-[var(--content-secondary)]`,children:`Connect Account to continue`}),(0,X.jsxs)(`div`,{className:`flex flex-col items-center gap-2`,children:[(0,X.jsx)(a,{variant:`primary`,size:`compact`,leftIcon:(0,X.jsx)(J,{}),onClick:()=>l(),disabled:f,children:`Connect Account`}),d.map(e=>(0,X.jsx)(a,{variant:`outlined`,size:`compact`,leftIcon:(0,X.jsx)(Ie,{}),onClick:()=>l(e.scopes),disabled:f,children:e.label},e.id))]})]}):(0,X.jsxs)(`div`,{className:`rounded-lg border border-[var(--border-base)]`,children:[(0,X.jsx)(`ul`,{className:`divide-y divide-[var(--border-base)]`,children:r.map(r=>{let i=c===r.id;return(0,X.jsxs)(`li`,{className:`flex items-center gap-3 px-4 py-3`,children:[(0,X.jsx)(W,{providerKey:t,displayName:e,logoUrl:n,size:20}),(0,X.jsx)(`span`,{className:`min-w-0 flex-1 truncate text-body-medium-default text-[var(--content-default)]`,children:r.account_label??`${e} Account`}),(0,X.jsx)(a,{variant:`dangerOutline`,size:`compact`,iconOnly:i?(0,X.jsx)(F,{className:`animate-spin`}):(0,X.jsx)(U,{}),onClick:()=>u(r),disabled:i,"aria-label":`Disconnect ${r.account_label??`${e} account`}`})]},r.id)})}),(0,X.jsx)(`div`,{className:`border-t border-[var(--border-base)] px-4 py-3 dark:border-[var(--border-base)]`,children:f?(0,X.jsxs)(`div`,{className:`flex items-center gap-2 text-body-medium-lighter text-[var(--content-tertiary)]`,children:[(0,X.jsx)(F,{className:`h-3.5 w-3.5 animate-spin`}),`Waiting for authorization...`]}):(0,X.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,X.jsx)(a,{variant:`primary`,size:`compact`,leftIcon:(0,X.jsx)(P,{}),onClick:()=>l(),disabled:f,children:`Connect account`}),d.map(e=>(0,X.jsx)(a,{variant:`outlined`,size:`compact`,leftIcon:(0,X.jsx)(Ie,{}),onClick:()=>l(e.scopes),disabled:f,children:e.label},e.id))]})})]})}function Z(e){return e.length>16?`${e.slice(0,12)}…${e.slice(-4)}`:e.length>8?`${e.slice(0,8)}…`:e}function ze(e){try{return new Date(e).toLocaleDateString(void 0,{year:`numeric`,month:`short`,day:`numeric`})}catch{return``}}function Be({assistantId:e,providerKey:t,displayName:n,logoUrl:r}){let i=p(),o=S({...te({path:{assistant_id:e},query:{provider_key:t}}),select:e=>e.apps}),s=S({...ie({path:{assistant_id:e,providerKey:t}}),select:e=>e.oauth_callback_url}),c=o.data??[],l=s.data??null,u=Fe({queries:c.map(t=>({...ne({path:{assistant_id:e,appId:t.id}}),select:e=>e.connections}))}),d={};c.forEach((e,t)=>{d[e.id]=u[t]?.data??[]});let f=ae({path:{assistant_id:e},query:{provider_key:t}}),m=ee({onSuccess:()=>{i.invalidateQueries({queryKey:f}),x(``),w(``),y(!1),M.success(`${n} OAuth app added.`)},onError:e=>{M.error(e.message||`Failed to create OAuth app`)}}),h=se({onSuccess:()=>{i.invalidateQueries({queryKey:f}),M.success(`OAuth app deleted.`)},onError:e=>{M.error(e.message||`Failed to delete OAuth app`)}}),g=re({onSuccess:e=>{`auth_url`in e&&(window.location.href=e.auth_url)},onError:e=>{M.error(e.message||`Failed to start OAuth flow`)}}),_=z(),[v,y]=(0,Y.useState)(!1),[b,x]=(0,Y.useState)(``),[C,w]=(0,Y.useState)(``),[D,O]=(0,Y.useState)(!1),[A,j]=(0,Y.useState)(null),[N,I]=(0,Y.useState)(null),L=m.isPending,R=h.isPending?h.variables?.path?.id??null:null,B=g.isPending?g.variables?.path?.appId??null:null,V=_.isPending?_.variables?.path?.id??null:null,ce=()=>{let n=b.trim(),r=C.trim();!n||!r||m.mutate({path:{assistant_id:e},body:{provider_key:t,client_id:n,client_secret:r}})},le=()=>{let t=A;j(null),t&&h.mutate({path:{assistant_id:e,id:t.id}})},H=t=>{g.mutate({path:{assistant_id:e,appId:t.id},body:{callback_transport:`gateway`,scopes:[]}})};return o.isLoading?(0,X.jsx)(`div`,{className:`flex items-center justify-center py-10`,children:(0,X.jsx)(F,{className:`h-5 w-5 animate-spin text-[var(--content-disabled)]`})}):(0,X.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[c.length===0||v?(0,X.jsx)(T.Root,{children:(0,X.jsxs)(T.Body,{className:`flex flex-col gap-3`,children:[(0,X.jsxs)(`div`,{className:`space-y-1`,children:[(0,X.jsx)(`p`,{className:`text-body-medium-default text-[var(--content-default)]`,children:c.length===0?`Add your own ${n} OAuth app`:`Add another ${n} OAuth app`}),(0,X.jsx)(`p`,{className:`text-body-small-default leading-relaxed text-[var(--content-tertiary)]`,children:`Credentials are stored encrypted on the assistant and are never sent to Vellum.`})]}),l?(0,X.jsxs)(`div`,{className:`space-y-1`,children:[(0,X.jsx)(`p`,{className:`text-body-small-default text-[var(--content-secondary)]`,children:`Redirect URL`}),(0,X.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,X.jsx)(k,{type:`text`,value:l,readOnly:!0,fullWidth:!0}),(0,X.jsx)(a,{type:`button`,variant:`outlined`,size:`compact`,onClick:()=>{navigator.clipboard.writeText(l).then(()=>{O(!0),M.success(`Copied to clipboard!`),setTimeout(()=>O(!1),2e3)})},"aria-label":D?`Copied`:`Copy redirect URL`,iconOnly:D?(0,X.jsx)(Ce,{"aria-hidden":!0}):(0,X.jsx)(de,{"aria-hidden":!0})})]}),(0,X.jsx)(`p`,{className:`text-body-small-default text-[var(--content-tertiary)]`,children:`Add this URL to your OAuth app's redirect settings.`})]}):null,(0,X.jsx)(k,{label:`Client ID`,type:`text`,value:b,onChange:e=>x(e.target.value),placeholder:`Enter your client ID`,fullWidth:!0}),(0,X.jsx)(k,{label:`Client Secret`,type:`password`,value:C,onChange:e=>w(e.target.value),placeholder:`Enter your client secret`,fullWidth:!0}),(0,X.jsxs)(`div`,{className:`flex items-center justify-end gap-2 pt-1`,children:[c.length>0?(0,X.jsx)(a,{type:`button`,variant:`outlined`,size:`compact`,onClick:()=>{y(!1),x(``),w(``)},disabled:L,children:`Cancel`}):null,(0,X.jsx)(a,{type:`button`,size:`compact`,onClick:ce,disabled:L||!b.trim()||!C.trim(),leftIcon:L?(0,X.jsx)(F,{className:`animate-spin`,"aria-hidden":!0}):(0,X.jsx)(J,{"aria-hidden":!0}),children:`Add App`})]})]})}):null,c.map(e=>{let i=d[e.id]??[],o=R===e.id,s=B===e.id;return(0,X.jsx)(T.Root,{children:(0,X.jsxs)(T.Body,{className:`flex flex-col gap-3`,children:[(0,X.jsxs)(`div`,{className:`flex items-start justify-between gap-2`,children:[(0,X.jsxs)(`div`,{className:`min-w-0 space-y-0.5`,children:[(0,X.jsx)(`p`,{className:`truncate text-body-medium-default text-[var(--content-default)]`,children:Z(e.client_id)}),(0,X.jsxs)(`p`,{className:`text-body-small-default text-[var(--content-tertiary)]`,children:[`Added `,ze(e.created_at)]})]}),(0,X.jsx)(a,{type:`button`,variant:`dangerOutline`,size:`compact`,onClick:()=>j(e),disabled:o,"aria-label":`Delete OAuth app ${Z(e.client_id)}`,iconOnly:o?(0,X.jsx)(F,{className:`animate-spin`,"aria-hidden":!0}):(0,X.jsx)(U,{"aria-hidden":!0})})]}),i.length>0?(0,X.jsx)(`ul`,{className:`divide-y divide-[var(--border-base)] overflow-hidden rounded-md border border-[var(--border-base)] dark:divide-[var(--border-base)] dark:border-[var(--border-base)]`,children:i.map(i=>{let o=V===i.id;return(0,X.jsxs)(`li`,{className:`flex items-center gap-3 px-3 py-2`,children:[(0,X.jsx)(W,{providerKey:t,displayName:n,logoUrl:r,size:18}),(0,X.jsx)(`span`,{className:`min-w-0 flex-1 truncate text-body-medium-lighter text-[var(--content-default)]`,children:i.account_info??`${n} Account`}),(0,X.jsx)(a,{type:`button`,variant:`dangerOutline`,size:`compact`,onClick:()=>I({appId:e.id,connection:i}),disabled:o,"aria-label":`Disconnect ${i.account_info??`${n} account`}`,iconOnly:o?(0,X.jsx)(F,{className:`animate-spin`,"aria-hidden":!0}):(0,X.jsx)(U,{"aria-hidden":!0})})]},i.id)})}):null,(0,X.jsx)(a,{type:`button`,size:`compact`,onClick:()=>H(e),disabled:s,className:`w-full`,leftIcon:s?(0,X.jsx)(F,{className:`animate-spin`,"aria-hidden":!0}):(0,X.jsx)(P,{"aria-hidden":!0}),children:s?`Waiting for authorization...`:`Connect account`})]})},e.id)}),c.length>0&&!v?(0,X.jsx)(a,{type:`button`,variant:`outlined`,size:`compact`,onClick:()=>y(!0),className:`w-full border-dashed`,leftIcon:(0,X.jsx)(J,{"aria-hidden":!0}),children:`Add Another App`}):null,(0,X.jsx)(E,{open:A!==null,title:`Delete OAuth app`,message:A?`Delete OAuth app '${Z(A.client_id)}'? This will disconnect all linked accounts.`:``,confirmLabel:`Delete`,destructive:!0,onConfirm:le,onCancel:()=>j(null)}),(0,X.jsx)(E,{open:N!==null,title:`Disconnect ${n}?`,message:N?`Disconnect ${N.connection.account_info??`${n} Account`}? You can reconnect later.`:``,confirmLabel:`Disconnect`,destructive:!0,onConfirm:()=>{let t=N;I(null),t&&_.mutate({path:{assistant_id:e,id:t.connection.id}},{onSuccess:()=>{let r=oe({path:{assistant_id:e,appId:t.appId}});i.invalidateQueries({queryKey:r}),i.invalidateQueries({queryKey:f}),M.success(`${n} account disconnected.`)},onError:e=>{M.error(e.message||`Failed to disconnect account`)}})},onCancel:()=>I(null)})]})}var Ve={};function He(e){return Ve[e]??[]}function Ue({assistantId:e,platformAssistantId:t,providerKey:n,displayName:r,description:i,logoUrl:o,platformGate:s,onClose:c}){let l=p(),u=s===`full`,d=!ge(),[f,m]=(0,Y.useState)(s===`gated`&&d?`your-own`:`managed`);(0,Y.useEffect)(()=>{!d&&f===`your-own`&&m(`managed`)},[d,f]);let[h,g]=(0,Y.useState)(null),[_,v]=(0,Y.useState)(null),y=fe({path:{assistant_id:t}}),{data:b,isLoading:x}=S({...G({path:{assistant_id:t}}),enabled:u}),C=(b??[]).filter(e=>e.provider===n&&e.connected),{handleConnect:w,oauthInProgress:T,startOAuthPending:D}=Le({assistantId:e,providerKey:n,displayName:r,managedAvailable:u,connectionsQueryKey:y,allConnections:b}),O={path:{assistant_id:t}},k=_e({onSuccess(e,t){M.success(`${r} account disconnected.`);let n=t.path.connection_id;Te(l,O,e=>e?.filter(e=>e.id!==n)),l.invalidateQueries({queryKey:y}),g(null)},onError(e){let t=V(e,void 0,`Failed to disconnect ${r} account.`);M.error(t),g(null)}});(0,Y.useEffect)(()=>{let e=e=>{e.key===`Escape`&&c()};document.addEventListener(`keydown`,e);let t=document.body.style.overflow;return document.body.style.overflow=`hidden`,()=>{document.removeEventListener(`keydown`,e),document.body.style.overflow=t}},[c]);let A=e=>{v(e)},j=()=>{let e=_;v(null),e&&(g(e.id),k.mutate({path:{assistant_id:t,connection_id:e.id}}))},N=i?`Configure ${r} OAuth for ${i}`:`Configure ${r} OAuth`;return(0,X.jsxs)(`div`,{className:`fixed inset-0 z-50 flex items-center justify-center bg-black/40 p-4`,children:[(0,X.jsxs)(`div`,{role:`dialog`,"aria-modal":`true`,"aria-labelledby":`integration-modal-title`,className:`flex w-full max-w-[520px] flex-col overflow-hidden rounded-xl bg-white shadow-xl dark:bg-[var(--surface-lift)]`,children:[(0,X.jsxs)(`div`,{className:`flex items-start justify-between gap-3 border-b border-[var(--border-base)] px-5 py-4 dark:border-[var(--border-base)]`,children:[(0,X.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,X.jsx)(W,{providerKey:n,displayName:r,logoUrl:o,size:32}),(0,X.jsxs)(`div`,{children:[(0,X.jsxs)(`h2`,{id:`integration-modal-title`,className:`text-title-small text-[var(--content-default)]`,children:[r,` OAuth`]}),(0,X.jsx)(`p`,{className:`text-body-small-default text-[var(--content-tertiary)]`,children:N})]})]}),(0,X.jsx)(a,{variant:`ghost`,size:`compact`,iconOnly:(0,X.jsx)(R,{}),"aria-label":`Close`,onClick:c})]}),(0,X.jsxs)(`div`,{className:`space-y-4 px-5 py-4`,children:[s!==`gated`&&d&&(0,X.jsxs)(`div`,{role:`tablist`,"aria-label":`OAuth mode`,className:`flex w-full rounded-md border border-[var(--border-base)] bg-[var(--surface-base)] p-0.5 dark:border-[var(--border-base)] dark:bg-[var(--surface-base)]/40`,children:[(0,X.jsx)(We,{active:f===`managed`,onClick:()=>m(`managed`),children:`Managed`}),(0,X.jsx)(We,{active:f===`your-own`,onClick:()=>m(`your-own`),children:`Your Own`})]}),f===`managed`&&s!==`gated`?s===`disabled`?(0,X.jsx)(je,{children:`Log in to the Vellum platform to manage OAuth connections.`}):(0,X.jsx)(Re,{displayName:r,providerKey:n,logoUrl:o,connections:C,connectionsLoading:x,startPending:D,oauthInProgress:T,disconnectingId:k.isPending?h:null,onConnect:w,onDisconnect:A,connectPresets:He(n)}):d?(0,X.jsx)(Be,{assistantId:e,providerKey:n,displayName:r,logoUrl:o}):null]}),(0,X.jsx)(`div`,{className:`flex justify-end border-t border-[var(--border-base)] px-5 py-3 dark:border-[var(--border-base)]`,children:(0,X.jsx)(a,{variant:`outlined`,size:`compact`,onClick:c,children:`Confirm`})})]}),(0,X.jsx)(E,{open:_!==null,title:`Disconnect ${r}?`,message:_?`Disconnect ${_.account_label??`${r} Account`}? You can reconnect later.`:``,confirmLabel:`Disconnect`,destructive:!0,onConfirm:j,onCancel:()=>v(null)})]})}function We({active:e,onClick:t,children:n}){return(0,X.jsx)(`button`,{type:`button`,role:`tab`,"aria-selected":e,onClick:t,className:`flex-1 cursor-pointer rounded-[5px] px-3 py-1.5 text-body-medium-default transition-colors ${e?`bg-white text-[var(--content-default)] shadow-sm dark:bg-[var(--surface-lift)] dark:text-[var(--content-default)]`:`text-[var(--content-secondary)] hover:text-[var(--content-default)] dark:text-[var(--content-disabled)] dark:hover:text-[var(--content-default)]`}`,children:n})}function Ge({platformAssistantId:e,providerKey:t,displayName:n,description:r,logoUrl:i,connection:o,platformGate:s,onConfigure:c}){let l=p(),u=!!o?.connected,[d,f]=(0,Y.useState)(!1),[m,h]=(0,Y.useState)(!1),g=ue(),_=fe({path:{assistant_id:e}}),v={path:{assistant_id:e}},y=_e({onSuccess(e,t){M.success(`${n} account disconnected.`);let r=t.path.connection_id;Te(l,v,e=>e?.filter(e=>e.id!==r)),l.invalidateQueries({queryKey:_})},onError(e){let t=V(e,void 0,`Failed to disconnect ${n} account.`);M.error(t)}}),b=()=>{o?.id&&h(!0)};return(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(T.Root,{children:(0,X.jsxs)(T.Body,{padding:`sm`,className:`flex items-center gap-4 px-4`,children:[(0,X.jsx)(W,{providerKey:t,displayName:n,logoUrl:i,size:32}),(0,X.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,X.jsx)(`p`,{className:`truncate text-title-small text-[var(--content-default)]`,children:n}),r&&(0,X.jsx)(`p`,{className:`truncate text-body-medium-lighter text-[var(--content-tertiary)]`,children:r})]}),u&&s===`full`?(0,X.jsx)(`div`,{className:`shrink-0`,children:(0,X.jsx)(Ke,{displayName:n,open:d,onOpenChange:f,onEditConnections:()=>{f(!1),c()},onDisable:()=>{f(!1),b()},disablePending:y.isPending,isMobile:g})}):(0,X.jsx)(a,{variant:`primary`,onClick:c,className:`shrink-0`,children:`Enable`})]})}),(0,X.jsx)(E,{open:m,title:`Disconnect ${n}?`,message:`Disconnect your ${n} account? You can reconnect it later.`,confirmLabel:`Disconnect`,destructive:!0,onConfirm:()=>{h(!1),o?.id&&y.mutate({path:{assistant_id:e,connection_id:o.id}})},onCancel:()=>h(!1)})]})}function Ke({displayName:e,open:t,onOpenChange:n,onEditConnections:r,onDisable:i,disablePending:o,isMobile:s}){return s?(0,X.jsxs)(A.Root,{open:t,onOpenChange:n,children:[(0,X.jsx)(A.Trigger,{asChild:!0,children:(0,X.jsx)(a,{variant:`outlined`,rightIcon:(0,X.jsx)(q,{}),"aria-haspopup":`menu`,"aria-expanded":t,children:`Configure`})}),(0,X.jsxs)(A.Content,{children:[(0,X.jsx)(A.Header,{children:(0,X.jsx)(A.Title,{children:e})}),(0,X.jsxs)(A.Body,{children:[(0,X.jsx)(j,{icon:I,label:`Edit connections`,onSelect:r}),(0,X.jsx)(j,{icon:o?F:Ee,label:`Disable`,onSelect:()=>{o||i()}})]})]})]}):(0,X.jsxs)(O.Root,{open:t,onOpenChange:n,children:[(0,X.jsx)(O.Trigger,{asChild:!0,children:(0,X.jsx)(a,{variant:`outlined`,rightIcon:(0,X.jsx)(q,{}),"aria-haspopup":`menu`,"aria-expanded":t,children:`Configure`})}),(0,X.jsxs)(O.Content,{align:`end`,sideOffset:4,role:`menu`,className:`w-56 overflow-hidden p-0`,children:[(0,X.jsx)(a,{type:`button`,role:`menuitem`,variant:`ghost`,onClick:r,className:`w-full justify-start rounded-none`,leftIcon:(0,X.jsx)(I,{"aria-hidden":!0}),children:`Edit connections`}),(0,X.jsx)(a,{type:`button`,role:`menuitem`,variant:`dangerGhost`,onClick:i,disabled:o,className:`w-full justify-start rounded-none`,leftIcon:o?(0,X.jsx)(F,{className:`animate-spin`,"aria-hidden":!0}):(0,X.jsx)(Ee,{"aria-hidden":!0}),children:`Disable`})]})]})}function qe(e,t){let[n,r]=(0,Y.useState)({platformAssistantId:null,isLoading:!1,error:null});return(0,Y.useEffect)(()=>{if(!t||!e){r({platformAssistantId:null,isLoading:!1,error:null});return}let n=!0;return r({platformAssistantId:null,isLoading:!0,error:null}),me(e).then(e=>{n&&r({platformAssistantId:e,isLoading:!1,error:null})}).catch(e=>{n&&r({platformAssistantId:null,isLoading:!1,error:e instanceof Error?e:Error(String(e))})}),()=>{n=!1}},[e,t]),n}var Je=`vellum:integrations:bannerDismissed`,Q=[{value:`all`,label:`All`},{value:`enabled`,label:`Enabled`},{value:`not-enabled`,label:`Not Enabled`}];function $(e,t){return e?.find(e=>e.provider===t)??null}function Ye(){let[e]=s(),i=o(),a=he(),[c,l]=(0,Y.useState)(null),[u,d]=(0,Y.useState)(!0),[f,p]=(0,Y.useState)(``),[m,h]=(0,Y.useState)(`all`),[g,_]=(0,Y.useState)(!1),[v,y]=(0,Y.useState)(!0),[b,x]=(0,Y.useState)(null);(0,Y.useEffect)(()=>{y(t(Je,`false`)===`true`)},[]);let C=()=>{y(!0),n(Je,`true`)};(0,Y.useEffect)(()=>{let e=!0;return(async()=>{try{let t=await le();e&&t.ok&&l(t.data)}catch(e){r(e,{context:`integrations.getAssistant`})}finally{e&&d(!1)}})(),()=>{e=!1}},[]);let{platformAssistantId:w,isLoading:T}=qe(c?.id,a===`full`),{data:E,isLoading:A,isError:j}=S({...B({path:{assistant_id:c?.id??``}}),select:e=>e.providers,enabled:!!c}),{data:N,isLoading:P}=S({...G({path:{assistant_id:w??``}}),enabled:!!w&&a===`full`});(0,Y.useEffect)(()=>{let t=e.get(`oauth_status`);if(!t)return;let n=e.get(`oauth_provider`),r=n?n.charAt(0).toUpperCase()+n.slice(1):null;if(t===`connected`)M.success(r?`${r} account connected successfully.`:`Account connected successfully.`);else if(t===`error`){let t=e.get(`oauth_code`)??`unknown`;M.error({denied:`Authorization was denied. Please try again.`,state_invalid:`Authorization state was invalid. Please try again.`,state_expired:`Authorization expired. Please try again.`,exchange_failed:`Failed to complete authorization. Please try again.`,identity_failed:`Failed to verify account identity. Please try again.`}[t]??(r?`Failed to connect ${r}.`:`Failed to connect. Please try again.`))}i(H.settings.integrations,{replace:!0})},[e,i]);let I=(0,Y.useMemo)(()=>E?.filter(e=>e.supports_managed_mode)??[],[E]),R=(0,Y.useMemo)(()=>{let e=f.trim().toLowerCase(),t=I.filter(t=>{if(!e)return!0;let n=(t.display_name??t.provider_key).toLowerCase(),r=(t.description??``).toLowerCase();return n.includes(e)||r.includes(e)});return m!==`all`&&(t=t.filter(e=>{let t=!!$(N,e.provider_key)?.connected;return m===`enabled`?t:!t})),[...t].sort((e,t)=>{let n=!!$(N,e.provider_key)?.connected;if(n!==!!$(N,t.provider_key)?.connected)return n?-1:1;let r=(e.display_name??e.provider_key).toLowerCase(),i=(t.display_name??t.provider_key).toLowerCase();return r.localeCompare(i)})},[I,N,f,m]),ee=u||A||P||T,te=Q.find(e=>e.value===m)?.label??`All`,ne=(()=>{if(f.trim())return`No integrations matched`;switch(m){case`enabled`:return`No Enabled Integrations`;case`not-enabled`:return`All Integrations Are Enabled`;default:return`No Integrations Available`}})(),re=(()=>{if(f.trim())return`No integrations matched "${f.trim()}"`;switch(m){case`enabled`:return`Connect an integration to get started.`;case`not-enabled`:return`All available integrations have been connected.`;default:return`Check your connection and try again.`}})(),z=(0,Y.useMemo)(()=>b?I.find(e=>e.provider_key===b)??null:null,[I,b]);return(0,X.jsxs)(`div`,{className:`space-y-4`,children:[!v&&(0,X.jsxs)(D,{tone:`info`,icon:(0,X.jsx)(L,{className:`h-3.5 w-3.5`}),onDismiss:C,children:[(0,X.jsx)(`span`,{className:`text-body-medium-default`,children:`Tip:`}),` You can enable integrations by mentioning them in chat.`]}),(0,X.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,X.jsx)(k,{type:`text`,value:f,onChange:e=>p(e.target.value),placeholder:`Search Integrations`,"aria-label":`Search integrations`,leftIcon:(0,X.jsx)(ye,{className:`h-3.5 w-3.5`,"aria-hidden":!0}),fullWidth:!0,wrapperClassName:`flex-1`}),(0,X.jsxs)(O.Root,{open:g,onOpenChange:_,children:[(0,X.jsx)(O.Trigger,{asChild:!0,children:(0,X.jsxs)(`button`,{type:`button`,"aria-haspopup":`listbox`,"aria-expanded":g,className:`flex w-36 cursor-pointer items-center justify-between gap-2 rounded-md border border-[var(--border-element)] bg-[var(--surface-lift)] px-3 py-1.5 text-body-medium-lighter text-[var(--content-default)] transition-colors hover:bg-[var(--ghost-hover)]`,children:[(0,X.jsx)(`span`,{children:te}),(0,X.jsx)(q,{className:`h-3.5 w-3.5`})]})}),(0,X.jsx)(O.Content,{align:`end`,sideOffset:4,className:`w-36 overflow-hidden p-0`,children:(0,X.jsx)(`div`,{role:`listbox`,children:Q.map(e=>{let t=e.value===m;return(0,X.jsx)(`button`,{type:`button`,role:`option`,"aria-selected":t,onClick:()=>{h(e.value),_(!1)},className:`flex w-full cursor-pointer items-center px-3 py-1.5 text-left hover:bg-[var(--ghost-hover)] ${t?`text-body-medium-default text-[var(--content-default)]`:`text-body-medium-lighter text-[var(--content-default)]`}`,children:e.label},e.value)})})})]})]}),(0,X.jsx)(`div`,{children:ee?(0,X.jsxs)(`div`,{className:`flex items-center gap-2 py-6 text-body-medium-lighter text-[var(--content-tertiary)]`,children:[(0,X.jsx)(F,{className:`h-4 w-4 animate-spin`}),(0,X.jsx)(`span`,{children:`Loading...`})]}):j?(0,X.jsx)(`p`,{className:`text-body-medium-lighter text-[var(--content-tertiary)]`,children:`Failed to load integrations. Please try again.`}):c?R.length===0?(0,X.jsxs)(`div`,{className:`flex flex-col items-center gap-2 rounded-lg border border-dashed border-[var(--border-element)] px-4 py-12 text-center`,children:[(0,X.jsx)(ye,{className:`h-6 w-6 text-[var(--content-disabled)]`}),(0,X.jsx)(`p`,{className:`text-body-medium-default text-[var(--content-default)]`,children:ne}),(0,X.jsx)(`p`,{className:`text-body-small-default text-[var(--content-tertiary)]`,children:re})]}):(0,X.jsx)(`div`,{className:`space-y-2`,children:R.map(e=>(0,X.jsx)(Ge,{platformAssistantId:w??c.id,providerKey:e.provider_key,displayName:e.display_name??e.provider_key,description:e.description,logoUrl:e.logo_url,connection:$(N,e.provider_key),platformGate:a,onConfigure:()=>x(e.provider_key)},e.provider_key))}):(0,X.jsx)(`p`,{className:`text-body-medium-lighter text-[var(--content-tertiary)]`,children:`No assistant found. Hatch an assistant to connect integrations.`})}),z&&c&&(0,X.jsx)(Ue,{assistantId:c.id,platformAssistantId:w??c.id,providerKey:z.provider_key,displayName:z.display_name??z.provider_key,description:z.description,logoUrl:z.logo_url,platformGate:a,onClose:()=>x(null)})]})}function Xe(){return(0,X.jsx)(`div`,{className:`space-y-6`,children:(0,X.jsx)(Y.Suspense,{children:(0,X.jsx)(Ye,{})})})}export{Xe as IntegrationsPage};
|
|
1
|
+
import{o as e}from"./chunk-jRWAZmH_.js";import{r as t,s as n}from"./local-settings-lVNyIOJ_.js";import{t as r}from"./capture-error-B0wqOYKY.js";import{t as i}from"./react-DJZBPgpf.js";import{t as a}from"./button-D7s2Q_uG.js";import{d as o,h as s}from"./chunk-5KNZJZUH-DdS6bb-3.js";import{N as c,O as l,S as u,T as d,c as f,n as p}from"./QueryClientProvider-DKhXIxGb.js";import{a as m,c as h,d as g,i as _,l as v,o as y,r as b,s as x,t as S,u as C}from"./useQuery-B45lW1Kk.js";import{t as w}from"./jsx-runtime-CVSDxk6A.js";import{t as T}from"./card-BibIM9x3.js";import{t as E}from"./confirm-dialog-DbNUkFt6.js";import{t as D}from"./notice-G5Imd5pC.js";import{t as O}from"./popover-PnyzuDx3.js";import{t as k}from"./input-CwdmSRlD.js";import{n as A,t as j}from"./panel-item-BFOUNXY1.js";import{n as M}from"./toast-DLWkiWW6.js";import{t as N}from"./createLucideIcon-DIlBzeWM.js";import{t as P}from"./external-link-B3skagqt.js";import{t as F}from"./loader-circle-CTs38Ovl.js";import{t as I}from"./pencil-lwgMCqyH.js";import{t as L}from"./sparkles-B9QIWdq0.js";import{t as R}from"./x-Dz7msELe.js";import{Bt as ee,J as te,K as ne,Rt as re,Vt as z,X as ie,Y as ae,Z as B,q as oe,zt as se}from"./react-query.gen-DdB0sQgj.js";import{r as V}from"./api-errors-CwAGZ-xJ.js";import{N as ce}from"./auth-store-CrTf0uWL.js";import{r as le}from"./api-BSHLYsxJ.js";import{a as H}from"./routes-BKwsRssF.js";import{n as ue}from"./use-is-mobile-CvT53Qs1.js";import{$a as de,An as fe,Er as pe,I as me,It as he,Ki as U,L as W,Pt as ge,Tr as _e,_t as ve,aa as ye,at as be,dt as xe,gt as Se,ho as Ce,it as we,jn as Te,kn as G,lo as Ee,lt as K,mo as q,ot as De,pa as J,rt as Oe,st as ke,ut as Ae,v as je}from"./index-BiN-6kWM.js";function Me(e,t){let n=new Set(t);return e.filter(e=>!n.has(e))}function Ne(e,t,n){let r=e.slice(0);return r[t]=n,r}var Pe=class extends c{#e;#t;#n;#r;#i;#a;#o;#s;#c;#l=[];constructor(e,t,n){super(),this.#e=e,this.#r=n,this.#n=[],this.#i=[],this.#t=[],this.setQueries(t)}onSubscribe(){this.listeners.size===1&&this.#i.forEach(e=>{e.subscribe(t=>{this.#p(e,t)})})}onUnsubscribe(){this.listeners.size||this.destroy()}destroy(){this.listeners=new Set,this.#i.forEach(e=>{e.destroy()})}setQueries(e,t){this.#n=e,this.#r=t,f.batch(()=>{let e=this.#i,t=this.#f(this.#n);t.forEach(e=>e.observer.setOptions(e.defaultedQueryOptions));let n=t.map(e=>e.observer),r=n.map(e=>e.getCurrentResult()),i=e.length!==n.length,a=n.some((t,n)=>t!==e[n]),o=i||a,s=o?!0:r.some((e,t)=>{let n=this.#t[t];return!n||!l(e,n)});!o&&!s||(o&&(this.#l=t,this.#i=n),this.#t=r,this.hasListeners()&&(o&&(Me(e,n).forEach(e=>{e.destroy()}),Me(n,e).forEach(e=>{e.subscribe(t=>{this.#p(e,t)})})),this.#m()))})}getCurrentResult(){return this.#t}getQueries(){return this.#i.map(e=>e.getCurrentQuery())}getObservers(){return this.#i}getOptimisticResult(e,t){let n=this.#f(e),r=n.map(e=>e.observer.getOptimisticResult(e.defaultedQueryOptions)),i=n.map(e=>e.defaultedQueryOptions.queryHash);return[r,e=>this.#d(e??r,t,i),()=>this.#u(r,n)]}#u(e,t){return t.map((n,r)=>{let i=e[r];return n.defaultedQueryOptions.notifyOnChangeProps?i:n.observer.trackResult(i,e=>{t.forEach(t=>{t.observer.trackProp(e)})})})}#d(e,t,n){if(t){let r=this.#c,i=n!==void 0&&r!==void 0&&(r.length!==n.length||n.some((e,t)=>e!==r[t]));return(!this.#a||this.#t!==this.#s||i||t!==this.#o)&&(this.#o=t,this.#s=this.#t,n!==void 0&&(this.#c=n),this.#a=d(this.#a,t(e))),this.#a}return e}#f(e){let t=new Map;this.#i.forEach(e=>{let n=e.options.queryHash;if(!n)return;let r=t.get(n);r?r.push(e):t.set(n,[e])});let n=[];return e.forEach(e=>{let r=this.#e.defaultQueryOptions(e),i=t.get(r.queryHash)?.shift()??new g(this.#e,r);n.push({defaultedQueryOptions:r,observer:i})}),n}#p(e,t){let n=this.#i.indexOf(e);n!==-1&&(this.#t=Ne(this.#t,n,t),this.#m())}#m(){if(this.hasListeners()){let e=this.#a,t=this.#u(this.#t,this.#l);e!==this.#d(t,this.#r?.combine)&&f.batch(()=>{this.listeners.forEach(e=>{e(this.#t)})})}}},Y=e(i(),1);function Fe({queries:e,...t},n){let r=p(n),i=C(),a=v(),o=Y.useMemo(()=>e.map(e=>{let t=r.defaultQueryOptions(e);return t._optimisticResults=i?`isRestoring`:`optimistic`,t}),[e,r,i]);o.forEach(e=>{b(e),y(e,a,r.getQueryCache().get(e.queryHash))}),h(a);let[s]=Y.useState(()=>new Pe(r,o,t)),[c,l,d]=s.getOptimisticResult(o,t.combine),S=!i&&t.subscribed!==!1;Y.useSyncExternalStore(Y.useCallback(e=>S?s.subscribe(f.batchCalls(e)):u,[s,S]),()=>s.getCurrentResult(),()=>s.getCurrentResult()),Y.useEffect(()=>{s.setQueries(o,t)},[o,t,s]);let w=c.some((e,t)=>m(o[t],e))?c.flatMap((e,t)=>{let n=o[t];return n&&m(n,e)?_(n,new g(r,n),a):[]}):[];if(w.length>0)throw Promise.all(w);let T=c.find((e,t)=>{let n=o[t];return n&&x({result:e,errorResetBoundary:a,throwOnError:n.throwOnError,query:r.getQueryCache().get(n.queryHash),suspense:n.suspense})});if(T?.error)throw T.error;return l(d())}var Ie=N(`calendar-plus`,[[`path`,{d:`M16 19h6`,key:`xwg31i`}],[`path`,{d:`M16 2v4`,key:`4m81vk`}],[`path`,{d:`M19 16v6`,key:`tddt3s`}],[`path`,{d:`M21 12.598V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h8.5`,key:`1glfrc`}],[`path`,{d:`M3 10h18`,key:`8toen8`}],[`path`,{d:`M8 2v4`,key:`1cmpym`}]]);function Le({assistantId:e,providerKey:t,displayName:n,managedAvailable:r,connectionsQueryKey:i,allConnections:a}){let o=p(),s=ce(),c=(0,Y.useRef)(null),l=(0,Y.useRef)(null),u=(0,Y.useRef)(null),d=(0,Y.useRef)(null),[f,m]=(0,Y.useState)(!1),h=()=>{l.current=null,m(!1)},g=()=>{c.current&&!c.current.closed&&c.current.close(),c.current=null,u.current&&=(clearInterval(u.current),null),d.current&&=(clearTimeout(d.current),null)},_=(0,Y.useCallback)(e=>{if(e.type!==`vellum:oauth-complete`||!l.current||e.requestId!==l.current.requestId)return;let{oauthStatus:t,oauthCode:r}=e;if(g(),h(),t===`connected`)M.success(`${n} account connected.`),o.invalidateQueries({queryKey:i});else{let e=r?`Error: ${r}`:`Authorization failed`;M.error(`${n} ${e}`)}},[i,n,o]),v=(0,Y.useCallback)(async(e,n)=>{if(!r)return!1;for(let r=0;r<8;r+=1){r>0&&await be(750);try{if(o.invalidateQueries({queryKey:i}),we(await o.fetchQuery({...G({path:{assistant_id:e}}),staleTime:0}),t,n))return!0}catch{}}return!1},[i,r,t,o]);(0,Y.useEffect)(()=>{let e=e=>{let t=l.current;if(!t)return;let n=De(e,window.location.origin,t.requestId);n&&_(n)},t=e=>{let t=l.current;if(!t)return;let n=ke(e,t.requestId);n&&(_(n),window.localStorage.removeItem(K(t.requestId)))};return window.addEventListener(`message`,e),window.addEventListener(`storage`,t),()=>{window.removeEventListener(`message`,e),window.removeEventListener(`storage`,t)}},[_]),xe((0,Y.useCallback)(e=>{let t=l.current;t&&e.requestId===t.requestId&&_({type:`vellum:oauth-complete`,requestId:e.requestId,oauthStatus:e.oauthStatus,oauthProvider:e.oauthProvider,oauthCode:e.oauthCode})},[_])),(0,Y.useEffect)(()=>ve(()=>{let e=l.current;e&&(async()=>{let t=await v(e.platformAssistantId,e.baselineConnectionSignatures);l.current&&(h(),t&&M.success(`${n} account connected.`))})()}),[v,n]),(0,Y.useEffect)(()=>()=>{u.current&&clearInterval(u.current),d.current&&clearTimeout(d.current),c.current&&!c.current.closed&&c.current.close()},[]);let y=pe();return{handleConnect:(i=[])=>{if(!r)return;let f=crypto.randomUUID();m(!0);let p=async r=>{let c;try{c=await me(e)}catch(e){g(),h(),M.error(e instanceof Error?e.message:`Failed to start ${n} authorization.`);return}let u=Oe(await o.fetchQuery({...G({path:{assistant_id:c}}),staleTime:0}).catch(()=>c===e?a??[]:[]),t);l.current={requestId:f,provider:t,platformAssistantId:c,baselineConnectionSignatures:u},y.mutate({path:{assistant_id:c,provider:t},body:{requested_scopes:i,redirect_after_connect:`${H.account.oauth.popupComplete}?requestId=${f}${s?`&native=1`:``}`}},{onSuccess(e){if(s){Se(e.connect_url);return}r&&!r.closed?r.location.href=e.connect_url:l.current&&(g(),h(),M.error(`${n} connection failed: popup closed.`))},onError(e){g(),h();let t=V(e,void 0,`Failed to start ${n} authorization.`);M.error(t)}})};if(s){p(null);return}let b=window.open(``,`_blank`,`width=500,height=600`);if(b===null){h(),M.error(`Popup blocked. Please enable popups and try again.`);return}c.current=b,u.current=setInterval(()=>{c.current&&c.current.closed&&l.current&&!d.current&&(d.current=setTimeout(async()=>{d.current=null;let e=l.current;if(!e)return;let t=window.localStorage.getItem(K(e.requestId));if(t){let n=Ae(t);if(n&&n.requestId===e.requestId){_(n),window.localStorage.removeItem(K(e.requestId));return}}let r=await v(e.platformAssistantId,e.baselineConnectionSignatures);if(l.current){if(r){g(),h(),M.success(`${n} account connected.`);return}g(),h(),M.error(`${n} connection failed: authorization popup closed.`)}},1e3))},100),p(b)},oauthInProgress:f,startOAuthPending:y.isPending}}var X=w();function Re({displayName:e,providerKey:t,logoUrl:n,connections:r,connectionsLoading:i,startPending:o,oauthInProgress:s,disconnectingId:c,onConnect:l,onDisconnect:u,connectPresets:d=[]}){let f=o||s;return i?(0,X.jsx)(`div`,{className:`flex items-center justify-center py-10`,children:(0,X.jsx)(F,{className:`h-5 w-5 animate-spin text-[var(--content-disabled)]`})}):r.length===0?o||s?(0,X.jsxs)(`div`,{className:`flex flex-col items-center gap-3 py-10`,children:[(0,X.jsx)(W,{providerKey:t,displayName:e,logoUrl:n,size:48}),(0,X.jsxs)(`div`,{className:`flex items-center gap-2 text-body-medium-lighter text-[var(--content-tertiary)]`,children:[(0,X.jsx)(F,{className:`h-3.5 w-3.5 animate-spin`}),`Waiting for authorization...`]})]}):(0,X.jsxs)(`div`,{className:`flex flex-col items-center gap-3 py-10`,children:[(0,X.jsx)(W,{providerKey:t,displayName:e,logoUrl:n,size:48}),(0,X.jsx)(`p`,{className:`text-body-medium-default text-[var(--content-secondary)]`,children:`Connect Account to continue`}),(0,X.jsxs)(`div`,{className:`flex flex-col items-center gap-2`,children:[(0,X.jsx)(a,{variant:`primary`,size:`compact`,leftIcon:(0,X.jsx)(J,{}),onClick:()=>l(),disabled:f,children:`Connect Account`}),d.map(e=>(0,X.jsx)(a,{variant:`outlined`,size:`compact`,leftIcon:(0,X.jsx)(Ie,{}),onClick:()=>l(e.scopes),disabled:f,children:e.label},e.id))]})]}):(0,X.jsxs)(`div`,{className:`rounded-lg border border-[var(--border-base)]`,children:[(0,X.jsx)(`ul`,{className:`divide-y divide-[var(--border-base)]`,children:r.map(r=>{let i=c===r.id;return(0,X.jsxs)(`li`,{className:`flex items-center gap-3 px-4 py-3`,children:[(0,X.jsx)(W,{providerKey:t,displayName:e,logoUrl:n,size:20}),(0,X.jsx)(`span`,{className:`min-w-0 flex-1 truncate text-body-medium-default text-[var(--content-default)]`,children:r.account_label??`${e} Account`}),(0,X.jsx)(a,{variant:`dangerOutline`,size:`compact`,iconOnly:i?(0,X.jsx)(F,{className:`animate-spin`}):(0,X.jsx)(U,{}),onClick:()=>u(r),disabled:i,"aria-label":`Disconnect ${r.account_label??`${e} account`}`})]},r.id)})}),(0,X.jsx)(`div`,{className:`border-t border-[var(--border-base)] px-4 py-3 dark:border-[var(--border-base)]`,children:f?(0,X.jsxs)(`div`,{className:`flex items-center gap-2 text-body-medium-lighter text-[var(--content-tertiary)]`,children:[(0,X.jsx)(F,{className:`h-3.5 w-3.5 animate-spin`}),`Waiting for authorization...`]}):(0,X.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,X.jsx)(a,{variant:`primary`,size:`compact`,leftIcon:(0,X.jsx)(P,{}),onClick:()=>l(),disabled:f,children:`Connect account`}),d.map(e=>(0,X.jsx)(a,{variant:`outlined`,size:`compact`,leftIcon:(0,X.jsx)(Ie,{}),onClick:()=>l(e.scopes),disabled:f,children:e.label},e.id))]})})]})}function Z(e){return e.length>16?`${e.slice(0,12)}…${e.slice(-4)}`:e.length>8?`${e.slice(0,8)}…`:e}function ze(e){try{return new Date(e).toLocaleDateString(void 0,{year:`numeric`,month:`short`,day:`numeric`})}catch{return``}}function Be({assistantId:e,providerKey:t,displayName:n,logoUrl:r}){let i=p(),o=S({...te({path:{assistant_id:e},query:{provider_key:t}}),select:e=>e.apps}),s=S({...ie({path:{assistant_id:e,providerKey:t}}),select:e=>e.oauth_callback_url}),c=o.data??[],l=s.data??null,u=Fe({queries:c.map(t=>({...ne({path:{assistant_id:e,appId:t.id}}),select:e=>e.connections}))}),d={};c.forEach((e,t)=>{d[e.id]=u[t]?.data??[]});let f=ae({path:{assistant_id:e},query:{provider_key:t}}),m=ee({onSuccess:()=>{i.invalidateQueries({queryKey:f}),x(``),w(``),y(!1),M.success(`${n} OAuth app added.`)},onError:e=>{M.error(e.message||`Failed to create OAuth app`)}}),h=se({onSuccess:()=>{i.invalidateQueries({queryKey:f}),M.success(`OAuth app deleted.`)},onError:e=>{M.error(e.message||`Failed to delete OAuth app`)}}),g=re({onSuccess:e=>{`auth_url`in e&&(window.location.href=e.auth_url)},onError:e=>{M.error(e.message||`Failed to start OAuth flow`)}}),_=z(),[v,y]=(0,Y.useState)(!1),[b,x]=(0,Y.useState)(``),[C,w]=(0,Y.useState)(``),[D,O]=(0,Y.useState)(!1),[A,j]=(0,Y.useState)(null),[N,I]=(0,Y.useState)(null),L=m.isPending,R=h.isPending?h.variables?.path?.id??null:null,B=g.isPending?g.variables?.path?.appId??null:null,V=_.isPending?_.variables?.path?.id??null:null,ce=()=>{let n=b.trim(),r=C.trim();!n||!r||m.mutate({path:{assistant_id:e},body:{provider_key:t,client_id:n,client_secret:r}})},le=()=>{let t=A;j(null),t&&h.mutate({path:{assistant_id:e,id:t.id}})},H=t=>{g.mutate({path:{assistant_id:e,appId:t.id},body:{callback_transport:`gateway`,scopes:[]}})};return o.isLoading?(0,X.jsx)(`div`,{className:`flex items-center justify-center py-10`,children:(0,X.jsx)(F,{className:`h-5 w-5 animate-spin text-[var(--content-disabled)]`})}):(0,X.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[c.length===0||v?(0,X.jsx)(T.Root,{children:(0,X.jsxs)(T.Body,{className:`flex flex-col gap-3`,children:[(0,X.jsxs)(`div`,{className:`space-y-1`,children:[(0,X.jsx)(`p`,{className:`text-body-medium-default text-[var(--content-default)]`,children:c.length===0?`Add your own ${n} OAuth app`:`Add another ${n} OAuth app`}),(0,X.jsx)(`p`,{className:`text-body-small-default leading-relaxed text-[var(--content-tertiary)]`,children:`Credentials are stored encrypted on the assistant and are never sent to Vellum.`})]}),l?(0,X.jsxs)(`div`,{className:`space-y-1`,children:[(0,X.jsx)(`p`,{className:`text-body-small-default text-[var(--content-secondary)]`,children:`Redirect URL`}),(0,X.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,X.jsx)(k,{type:`text`,value:l,readOnly:!0,fullWidth:!0}),(0,X.jsx)(a,{type:`button`,variant:`outlined`,size:`compact`,onClick:()=>{navigator.clipboard.writeText(l).then(()=>{O(!0),M.success(`Copied to clipboard!`),setTimeout(()=>O(!1),2e3)})},"aria-label":D?`Copied`:`Copy redirect URL`,iconOnly:D?(0,X.jsx)(Ce,{"aria-hidden":!0}):(0,X.jsx)(de,{"aria-hidden":!0})})]}),(0,X.jsx)(`p`,{className:`text-body-small-default text-[var(--content-tertiary)]`,children:`Add this URL to your OAuth app's redirect settings.`})]}):null,(0,X.jsx)(k,{label:`Client ID`,type:`text`,value:b,onChange:e=>x(e.target.value),placeholder:`Enter your client ID`,fullWidth:!0}),(0,X.jsx)(k,{label:`Client Secret`,type:`password`,value:C,onChange:e=>w(e.target.value),placeholder:`Enter your client secret`,fullWidth:!0}),(0,X.jsxs)(`div`,{className:`flex items-center justify-end gap-2 pt-1`,children:[c.length>0?(0,X.jsx)(a,{type:`button`,variant:`outlined`,size:`compact`,onClick:()=>{y(!1),x(``),w(``)},disabled:L,children:`Cancel`}):null,(0,X.jsx)(a,{type:`button`,size:`compact`,onClick:ce,disabled:L||!b.trim()||!C.trim(),leftIcon:L?(0,X.jsx)(F,{className:`animate-spin`,"aria-hidden":!0}):(0,X.jsx)(J,{"aria-hidden":!0}),children:`Add App`})]})]})}):null,c.map(e=>{let i=d[e.id]??[],o=R===e.id,s=B===e.id;return(0,X.jsx)(T.Root,{children:(0,X.jsxs)(T.Body,{className:`flex flex-col gap-3`,children:[(0,X.jsxs)(`div`,{className:`flex items-start justify-between gap-2`,children:[(0,X.jsxs)(`div`,{className:`min-w-0 space-y-0.5`,children:[(0,X.jsx)(`p`,{className:`truncate text-body-medium-default text-[var(--content-default)]`,children:Z(e.client_id)}),(0,X.jsxs)(`p`,{className:`text-body-small-default text-[var(--content-tertiary)]`,children:[`Added `,ze(e.created_at)]})]}),(0,X.jsx)(a,{type:`button`,variant:`dangerOutline`,size:`compact`,onClick:()=>j(e),disabled:o,"aria-label":`Delete OAuth app ${Z(e.client_id)}`,iconOnly:o?(0,X.jsx)(F,{className:`animate-spin`,"aria-hidden":!0}):(0,X.jsx)(U,{"aria-hidden":!0})})]}),i.length>0?(0,X.jsx)(`ul`,{className:`divide-y divide-[var(--border-base)] overflow-hidden rounded-md border border-[var(--border-base)] dark:divide-[var(--border-base)] dark:border-[var(--border-base)]`,children:i.map(i=>{let o=V===i.id;return(0,X.jsxs)(`li`,{className:`flex items-center gap-3 px-3 py-2`,children:[(0,X.jsx)(W,{providerKey:t,displayName:n,logoUrl:r,size:18}),(0,X.jsx)(`span`,{className:`min-w-0 flex-1 truncate text-body-medium-lighter text-[var(--content-default)]`,children:i.account_info??`${n} Account`}),(0,X.jsx)(a,{type:`button`,variant:`dangerOutline`,size:`compact`,onClick:()=>I({appId:e.id,connection:i}),disabled:o,"aria-label":`Disconnect ${i.account_info??`${n} account`}`,iconOnly:o?(0,X.jsx)(F,{className:`animate-spin`,"aria-hidden":!0}):(0,X.jsx)(U,{"aria-hidden":!0})})]},i.id)})}):null,(0,X.jsx)(a,{type:`button`,size:`compact`,onClick:()=>H(e),disabled:s,className:`w-full`,leftIcon:s?(0,X.jsx)(F,{className:`animate-spin`,"aria-hidden":!0}):(0,X.jsx)(P,{"aria-hidden":!0}),children:s?`Waiting for authorization...`:`Connect account`})]})},e.id)}),c.length>0&&!v?(0,X.jsx)(a,{type:`button`,variant:`outlined`,size:`compact`,onClick:()=>y(!0),className:`w-full border-dashed`,leftIcon:(0,X.jsx)(J,{"aria-hidden":!0}),children:`Add Another App`}):null,(0,X.jsx)(E,{open:A!==null,title:`Delete OAuth app`,message:A?`Delete OAuth app '${Z(A.client_id)}'? This will disconnect all linked accounts.`:``,confirmLabel:`Delete`,destructive:!0,onConfirm:le,onCancel:()=>j(null)}),(0,X.jsx)(E,{open:N!==null,title:`Disconnect ${n}?`,message:N?`Disconnect ${N.connection.account_info??`${n} Account`}? You can reconnect later.`:``,confirmLabel:`Disconnect`,destructive:!0,onConfirm:()=>{let t=N;I(null),t&&_.mutate({path:{assistant_id:e,id:t.connection.id}},{onSuccess:()=>{let r=oe({path:{assistant_id:e,appId:t.appId}});i.invalidateQueries({queryKey:r}),i.invalidateQueries({queryKey:f}),M.success(`${n} account disconnected.`)},onError:e=>{M.error(e.message||`Failed to disconnect account`)}})},onCancel:()=>I(null)})]})}var Ve={};function He(e){return Ve[e]??[]}function Ue({assistantId:e,platformAssistantId:t,providerKey:n,displayName:r,description:i,logoUrl:o,platformGate:s,onClose:c}){let l=p(),u=s===`full`,d=!ge(),[f,m]=(0,Y.useState)(s===`gated`&&d?`your-own`:`managed`);(0,Y.useEffect)(()=>{!d&&f===`your-own`&&m(`managed`)},[d,f]);let[h,g]=(0,Y.useState)(null),[_,v]=(0,Y.useState)(null),y=fe({path:{assistant_id:t}}),{data:b,isLoading:x}=S({...G({path:{assistant_id:t}}),enabled:u}),C=(b??[]).filter(e=>e.provider===n&&e.connected),{handleConnect:w,oauthInProgress:T,startOAuthPending:D}=Le({assistantId:e,providerKey:n,displayName:r,managedAvailable:u,connectionsQueryKey:y,allConnections:b}),O={path:{assistant_id:t}},k=_e({onSuccess(e,t){M.success(`${r} account disconnected.`);let n=t.path.connection_id;Te(l,O,e=>e?.filter(e=>e.id!==n)),l.invalidateQueries({queryKey:y}),g(null)},onError(e){let t=V(e,void 0,`Failed to disconnect ${r} account.`);M.error(t),g(null)}});(0,Y.useEffect)(()=>{let e=e=>{e.key===`Escape`&&c()};document.addEventListener(`keydown`,e);let t=document.body.style.overflow;return document.body.style.overflow=`hidden`,()=>{document.removeEventListener(`keydown`,e),document.body.style.overflow=t}},[c]);let A=e=>{v(e)},j=()=>{let e=_;v(null),e&&(g(e.id),k.mutate({path:{assistant_id:t,connection_id:e.id}}))},N=i?`Configure ${r} OAuth for ${i}`:`Configure ${r} OAuth`;return(0,X.jsxs)(`div`,{className:`fixed inset-0 z-50 flex items-center justify-center bg-black/40 p-4`,children:[(0,X.jsxs)(`div`,{role:`dialog`,"aria-modal":`true`,"aria-labelledby":`integration-modal-title`,className:`flex w-full max-w-[520px] flex-col overflow-hidden rounded-xl bg-white shadow-xl dark:bg-[var(--surface-lift)]`,children:[(0,X.jsxs)(`div`,{className:`flex items-start justify-between gap-3 border-b border-[var(--border-base)] px-5 py-4 dark:border-[var(--border-base)]`,children:[(0,X.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,X.jsx)(W,{providerKey:n,displayName:r,logoUrl:o,size:32}),(0,X.jsxs)(`div`,{children:[(0,X.jsxs)(`h2`,{id:`integration-modal-title`,className:`text-title-small text-[var(--content-default)]`,children:[r,` OAuth`]}),(0,X.jsx)(`p`,{className:`text-body-small-default text-[var(--content-tertiary)]`,children:N})]})]}),(0,X.jsx)(a,{variant:`ghost`,size:`compact`,iconOnly:(0,X.jsx)(R,{}),"aria-label":`Close`,onClick:c})]}),(0,X.jsxs)(`div`,{className:`space-y-4 px-5 py-4`,children:[s!==`gated`&&d&&(0,X.jsxs)(`div`,{role:`tablist`,"aria-label":`OAuth mode`,className:`flex w-full rounded-md border border-[var(--border-base)] bg-[var(--surface-base)] p-0.5 dark:border-[var(--border-base)] dark:bg-[var(--surface-base)]/40`,children:[(0,X.jsx)(We,{active:f===`managed`,onClick:()=>m(`managed`),children:`Managed`}),(0,X.jsx)(We,{active:f===`your-own`,onClick:()=>m(`your-own`),children:`Your Own`})]}),f===`managed`&&s!==`gated`?s===`disabled`?(0,X.jsx)(je,{children:`Log in to the Vellum platform to manage OAuth connections.`}):(0,X.jsx)(Re,{displayName:r,providerKey:n,logoUrl:o,connections:C,connectionsLoading:x,startPending:D,oauthInProgress:T,disconnectingId:k.isPending?h:null,onConnect:w,onDisconnect:A,connectPresets:He(n)}):d?(0,X.jsx)(Be,{assistantId:e,providerKey:n,displayName:r,logoUrl:o}):null]}),(0,X.jsx)(`div`,{className:`flex justify-end border-t border-[var(--border-base)] px-5 py-3 dark:border-[var(--border-base)]`,children:(0,X.jsx)(a,{variant:`outlined`,size:`compact`,onClick:c,children:`Confirm`})})]}),(0,X.jsx)(E,{open:_!==null,title:`Disconnect ${r}?`,message:_?`Disconnect ${_.account_label??`${r} Account`}? You can reconnect later.`:``,confirmLabel:`Disconnect`,destructive:!0,onConfirm:j,onCancel:()=>v(null)})]})}function We({active:e,onClick:t,children:n}){return(0,X.jsx)(`button`,{type:`button`,role:`tab`,"aria-selected":e,onClick:t,className:`flex-1 cursor-pointer rounded-[5px] px-3 py-1.5 text-body-medium-default transition-colors ${e?`bg-white text-[var(--content-default)] shadow-sm dark:bg-[var(--surface-lift)] dark:text-[var(--content-default)]`:`text-[var(--content-secondary)] hover:text-[var(--content-default)] dark:text-[var(--content-disabled)] dark:hover:text-[var(--content-default)]`}`,children:n})}function Ge({platformAssistantId:e,providerKey:t,displayName:n,description:r,logoUrl:i,connection:o,platformGate:s,onConfigure:c}){let l=p(),u=!!o?.connected,[d,f]=(0,Y.useState)(!1),[m,h]=(0,Y.useState)(!1),g=ue(),_=fe({path:{assistant_id:e}}),v={path:{assistant_id:e}},y=_e({onSuccess(e,t){M.success(`${n} account disconnected.`);let r=t.path.connection_id;Te(l,v,e=>e?.filter(e=>e.id!==r)),l.invalidateQueries({queryKey:_})},onError(e){let t=V(e,void 0,`Failed to disconnect ${n} account.`);M.error(t)}}),b=()=>{o?.id&&h(!0)};return(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(T.Root,{children:(0,X.jsxs)(T.Body,{padding:`sm`,className:`flex items-center gap-4 px-4`,children:[(0,X.jsx)(W,{providerKey:t,displayName:n,logoUrl:i,size:32}),(0,X.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,X.jsx)(`p`,{className:`truncate text-title-small text-[var(--content-default)]`,children:n}),r&&(0,X.jsx)(`p`,{className:`truncate text-body-medium-lighter text-[var(--content-tertiary)]`,children:r})]}),u&&s===`full`?(0,X.jsx)(`div`,{className:`shrink-0`,children:(0,X.jsx)(Ke,{displayName:n,open:d,onOpenChange:f,onEditConnections:()=>{f(!1),c()},onDisable:()=>{f(!1),b()},disablePending:y.isPending,isMobile:g})}):(0,X.jsx)(a,{variant:`primary`,onClick:c,className:`shrink-0`,children:`Enable`})]})}),(0,X.jsx)(E,{open:m,title:`Disconnect ${n}?`,message:`Disconnect your ${n} account? You can reconnect it later.`,confirmLabel:`Disconnect`,destructive:!0,onConfirm:()=>{h(!1),o?.id&&y.mutate({path:{assistant_id:e,connection_id:o.id}})},onCancel:()=>h(!1)})]})}function Ke({displayName:e,open:t,onOpenChange:n,onEditConnections:r,onDisable:i,disablePending:o,isMobile:s}){return s?(0,X.jsxs)(A.Root,{open:t,onOpenChange:n,children:[(0,X.jsx)(A.Trigger,{asChild:!0,children:(0,X.jsx)(a,{variant:`outlined`,rightIcon:(0,X.jsx)(q,{}),"aria-haspopup":`menu`,"aria-expanded":t,children:`Configure`})}),(0,X.jsxs)(A.Content,{children:[(0,X.jsx)(A.Header,{children:(0,X.jsx)(A.Title,{children:e})}),(0,X.jsxs)(A.Body,{children:[(0,X.jsx)(j,{icon:I,label:`Edit connections`,onSelect:r}),(0,X.jsx)(j,{icon:o?F:Ee,label:`Disable`,onSelect:()=>{o||i()}})]})]})]}):(0,X.jsxs)(O.Root,{open:t,onOpenChange:n,children:[(0,X.jsx)(O.Trigger,{asChild:!0,children:(0,X.jsx)(a,{variant:`outlined`,rightIcon:(0,X.jsx)(q,{}),"aria-haspopup":`menu`,"aria-expanded":t,children:`Configure`})}),(0,X.jsxs)(O.Content,{align:`end`,sideOffset:4,role:`menu`,className:`w-56 overflow-hidden p-0`,children:[(0,X.jsx)(a,{type:`button`,role:`menuitem`,variant:`ghost`,onClick:r,className:`w-full justify-start rounded-none`,leftIcon:(0,X.jsx)(I,{"aria-hidden":!0}),children:`Edit connections`}),(0,X.jsx)(a,{type:`button`,role:`menuitem`,variant:`dangerGhost`,onClick:i,disabled:o,className:`w-full justify-start rounded-none`,leftIcon:o?(0,X.jsx)(F,{className:`animate-spin`,"aria-hidden":!0}):(0,X.jsx)(Ee,{"aria-hidden":!0}),children:`Disable`})]})]})}function qe(e,t){let[n,r]=(0,Y.useState)({platformAssistantId:null,isLoading:!1,error:null});return(0,Y.useEffect)(()=>{if(!t||!e){r({platformAssistantId:null,isLoading:!1,error:null});return}let n=!0;return r({platformAssistantId:null,isLoading:!0,error:null}),me(e).then(e=>{n&&r({platformAssistantId:e,isLoading:!1,error:null})}).catch(e=>{n&&r({platformAssistantId:null,isLoading:!1,error:e instanceof Error?e:Error(String(e))})}),()=>{n=!1}},[e,t]),n}var Je=`vellum:integrations:bannerDismissed`,Q=[{value:`all`,label:`All`},{value:`enabled`,label:`Enabled`},{value:`not-enabled`,label:`Not Enabled`}];function $(e,t){return e?.find(e=>e.provider===t)??null}function Ye(){let[e]=s(),i=o(),a=he(),[c,l]=(0,Y.useState)(null),[u,d]=(0,Y.useState)(!0),[f,p]=(0,Y.useState)(``),[m,h]=(0,Y.useState)(`all`),[g,_]=(0,Y.useState)(!1),[v,y]=(0,Y.useState)(!0),[b,x]=(0,Y.useState)(null);(0,Y.useEffect)(()=>{y(t(Je,`false`)===`true`)},[]);let C=()=>{y(!0),n(Je,`true`)};(0,Y.useEffect)(()=>{let e=!0;return(async()=>{try{let t=await le();e&&t.ok&&l(t.data)}catch(e){r(e,{context:`integrations.getAssistant`})}finally{e&&d(!1)}})(),()=>{e=!1}},[]);let{platformAssistantId:w,isLoading:T}=qe(c?.id,a===`full`),{data:E,isLoading:A,isError:j}=S({...B({path:{assistant_id:c?.id??``}}),select:e=>e.providers,enabled:!!c}),{data:N,isLoading:P}=S({...G({path:{assistant_id:w??``}}),enabled:!!w&&a===`full`});(0,Y.useEffect)(()=>{let t=e.get(`oauth_status`);if(!t)return;let n=e.get(`oauth_provider`),r=n?n.charAt(0).toUpperCase()+n.slice(1):null;if(t===`connected`)M.success(r?`${r} account connected successfully.`:`Account connected successfully.`);else if(t===`error`){let t=e.get(`oauth_code`)??`unknown`;M.error({denied:`Authorization was denied. Please try again.`,state_invalid:`Authorization state was invalid. Please try again.`,state_expired:`Authorization expired. Please try again.`,exchange_failed:`Failed to complete authorization. Please try again.`,identity_failed:`Failed to verify account identity. Please try again.`}[t]??(r?`Failed to connect ${r}.`:`Failed to connect. Please try again.`))}i(H.settings.integrations,{replace:!0})},[e,i]);let I=(0,Y.useMemo)(()=>E?.filter(e=>e.supports_managed_mode)??[],[E]),R=(0,Y.useMemo)(()=>{let e=f.trim().toLowerCase(),t=I.filter(t=>{if(!e)return!0;let n=(t.display_name??t.provider_key).toLowerCase(),r=(t.description??``).toLowerCase();return n.includes(e)||r.includes(e)});return m!==`all`&&(t=t.filter(e=>{let t=!!$(N,e.provider_key)?.connected;return m===`enabled`?t:!t})),[...t].sort((e,t)=>{let n=!!$(N,e.provider_key)?.connected;if(n!==!!$(N,t.provider_key)?.connected)return n?-1:1;let r=(e.display_name??e.provider_key).toLowerCase(),i=(t.display_name??t.provider_key).toLowerCase();return r.localeCompare(i)})},[I,N,f,m]),ee=u||A||P||T,te=Q.find(e=>e.value===m)?.label??`All`,ne=(()=>{if(f.trim())return`No integrations matched`;switch(m){case`enabled`:return`No Enabled Integrations`;case`not-enabled`:return`All Integrations Are Enabled`;default:return`No Integrations Available`}})(),re=(()=>{if(f.trim())return`No integrations matched "${f.trim()}"`;switch(m){case`enabled`:return`Connect an integration to get started.`;case`not-enabled`:return`All available integrations have been connected.`;default:return`Check your connection and try again.`}})(),z=(0,Y.useMemo)(()=>b?I.find(e=>e.provider_key===b)??null:null,[I,b]);return(0,X.jsxs)(`div`,{className:`space-y-4`,children:[!v&&(0,X.jsxs)(D,{tone:`info`,icon:(0,X.jsx)(L,{className:`h-3.5 w-3.5`}),onDismiss:C,children:[(0,X.jsx)(`span`,{className:`text-body-medium-default`,children:`Tip:`}),` You can enable integrations by mentioning them in chat.`]}),(0,X.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,X.jsx)(k,{type:`text`,value:f,onChange:e=>p(e.target.value),placeholder:`Search Integrations`,"aria-label":`Search integrations`,leftIcon:(0,X.jsx)(ye,{className:`h-3.5 w-3.5`,"aria-hidden":!0}),fullWidth:!0,wrapperClassName:`flex-1`}),(0,X.jsxs)(O.Root,{open:g,onOpenChange:_,children:[(0,X.jsx)(O.Trigger,{asChild:!0,children:(0,X.jsxs)(`button`,{type:`button`,"aria-haspopup":`listbox`,"aria-expanded":g,className:`flex w-36 cursor-pointer items-center justify-between gap-2 rounded-md border border-[var(--border-element)] bg-[var(--surface-lift)] px-3 py-1.5 text-body-medium-lighter text-[var(--content-default)] transition-colors hover:bg-[var(--ghost-hover)]`,children:[(0,X.jsx)(`span`,{children:te}),(0,X.jsx)(q,{className:`h-3.5 w-3.5`})]})}),(0,X.jsx)(O.Content,{align:`end`,sideOffset:4,className:`w-36 overflow-hidden p-0`,children:(0,X.jsx)(`div`,{role:`listbox`,children:Q.map(e=>{let t=e.value===m;return(0,X.jsx)(`button`,{type:`button`,role:`option`,"aria-selected":t,onClick:()=>{h(e.value),_(!1)},className:`flex w-full cursor-pointer items-center px-3 py-1.5 text-left hover:bg-[var(--ghost-hover)] ${t?`text-body-medium-default text-[var(--content-default)]`:`text-body-medium-lighter text-[var(--content-default)]`}`,children:e.label},e.value)})})})]})]}),(0,X.jsx)(`div`,{children:ee?(0,X.jsxs)(`div`,{className:`flex items-center gap-2 py-6 text-body-medium-lighter text-[var(--content-tertiary)]`,children:[(0,X.jsx)(F,{className:`h-4 w-4 animate-spin`}),(0,X.jsx)(`span`,{children:`Loading...`})]}):j?(0,X.jsx)(`p`,{className:`text-body-medium-lighter text-[var(--content-tertiary)]`,children:`Failed to load integrations. Please try again.`}):c?R.length===0?(0,X.jsxs)(`div`,{className:`flex flex-col items-center gap-2 rounded-lg border border-dashed border-[var(--border-element)] px-4 py-12 text-center`,children:[(0,X.jsx)(ye,{className:`h-6 w-6 text-[var(--content-disabled)]`}),(0,X.jsx)(`p`,{className:`text-body-medium-default text-[var(--content-default)]`,children:ne}),(0,X.jsx)(`p`,{className:`text-body-small-default text-[var(--content-tertiary)]`,children:re})]}):(0,X.jsx)(`div`,{className:`space-y-2`,children:R.map(e=>(0,X.jsx)(Ge,{platformAssistantId:w??c.id,providerKey:e.provider_key,displayName:e.display_name??e.provider_key,description:e.description,logoUrl:e.logo_url,connection:$(N,e.provider_key),platformGate:a,onConfigure:()=>x(e.provider_key)},e.provider_key))}):(0,X.jsx)(`p`,{className:`text-body-medium-lighter text-[var(--content-tertiary)]`,children:`No assistant found. Hatch an assistant to connect integrations.`})}),z&&c&&(0,X.jsx)(Ue,{assistantId:c.id,platformAssistantId:w??c.id,providerKey:z.provider_key,displayName:z.display_name??z.provider_key,description:z.description,logoUrl:z.logo_url,platformGate:a,onClose:()=>x(null)})]})}function Xe(){return(0,X.jsx)(`div`,{className:`space-y-6`,children:(0,X.jsx)(Y.Suspense,{children:(0,X.jsx)(Ye,{})})})}export{Xe as IntegrationsPage};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{o as e}from"./chunk-jRWAZmH_.js";import{t}from"./react-DJZBPgpf.js";import{i as n,n as r,u as i}from"./chunk-5KNZJZUH-DdS6bb-3.js";import{t as a}from"./jsx-runtime-CVSDxk6A.js";import{t as o}from"./cn-DvW5mxZR.js";import{t as s}from"./typography-BscuIPxA.js";import"./src-D6Nu2Lol.js";import{a as c}from"./routes-BKwsRssF.js";import{n as l}from"./use-is-mobile-CvT53Qs1.js";import{t as u}from"./assistant-identity-store-BFaMpt_3.js";import{t as d}from"./assistant-feature-flag-store-D2CUHsmL.js";import{kt as f}from"./index-
|
|
1
|
+
import{o as e}from"./chunk-jRWAZmH_.js";import{t}from"./react-DJZBPgpf.js";import{i as n,n as r,u as i}from"./chunk-5KNZJZUH-DdS6bb-3.js";import{t as a}from"./jsx-runtime-CVSDxk6A.js";import{t as o}from"./cn-DvW5mxZR.js";import{t as s}from"./typography-BscuIPxA.js";import"./src-D6Nu2Lol.js";import{a as c}from"./routes-BKwsRssF.js";import{n as l}from"./use-is-mobile-CvT53Qs1.js";import{t as u}from"./assistant-identity-store-BFaMpt_3.js";import{t as d}from"./assistant-feature-flag-store-D2CUHsmL.js";import{kt as f}from"./index-BiN-6kWM.js";import{t as p}from"./page-shell-C0oiLAoY.js";var m=e(t(),1),h=a(),g=[{label:`Identity`,to:c.identity},{label:`Skills`,to:c.skills},{label:`Workspace`,to:c.workspace},{label:`Contacts`,to:c.contacts.root}],_={label:`Plugins`,to:c.plugins};function v(){let e=u.use.name(),t=d.use.hasHydrated(),a=d.use.externalPlugins(),{pathname:c}=i(),v=l(),y=f.use.setTopBarCenter();(0,m.useEffect)(()=>(y(v?(0,h.jsxs)(s,{variant:`body-medium-default`,className:`truncate text-[var(--content-secondary)]`,children:[`About `,e||`Assistant`]}):null),()=>{y(null)}),[v,e,y]);let b=t&&a?[g[0],_,...g.slice(1)]:g;return(0,h.jsxs)(p,{children:[(0,h.jsxs)(`h1`,{className:`mb-4 shrink-0 text-title-large text-[var(--content-default)] max-md:hidden`,children:[`About `,e||`Assistant`]}),(0,h.jsx)(`nav`,{className:`mb-4 flex shrink-0 items-center overflow-x-auto border-b border-[var(--border-base)]`,style:{scrollbarWidth:`none`,WebkitOverflowScrolling:`touch`},"aria-label":`About assistant sections`,children:b.map(({label:e,to:t})=>{let n=c===t||c.startsWith(t+`/`);return(0,h.jsx)(r,{to:t,className:o(`relative -mb-px inline-flex cursor-pointer items-center gap-1.5 border-b-2 border-transparent bg-transparent px-2.5 py-[7px]`,`text-body-medium-default whitespace-nowrap`,`text-[var(--content-secondary)] transition-colors`,`outline-none focus-visible:ring-2 focus-visible:ring-[var(--ring)] focus-visible:ring-offset-0`,`hover:bg-[var(--surface-hover)] hover:text-[var(--content-default)]`,n&&`border-[var(--border-active)] text-[var(--primary-active)]`,n&&`hover:bg-transparent`),children:e},t)})}),(0,h.jsx)(`div`,{className:`flex min-h-0 flex-1 flex-col overflow-y-auto`,children:(0,h.jsx)(n,{})})]})}export{v as IntelligenceLayout};
|
package/dist/assets/{keyboard-shortcuts-page-q_QkRUkC.js → keyboard-shortcuts-page-DIhG1FK_.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{o as e}from"./chunk-jRWAZmH_.js";import{t}from"./react-DJZBPgpf.js";import{t as n}from"./button-D7s2Q_uG.js";import{r}from"./chunk-5KNZJZUH-DdS6bb-3.js";import{t as i}from"./jsx-runtime-CVSDxk6A.js";import{t as a}from"./card-BibIM9x3.js";import{t as o}from"./notice-G5Imd5pC.js";import{t as s}from"./shortcut-keys-WNQqv5_X.js";import{t as c}from"./is-electron-BuSDabCt.js";import{t as l}from"./x-Dz7msELe.js";import{a as u}from"./routes-BKwsRssF.js";import{ca as d}from"./index-
|
|
1
|
+
import{o as e}from"./chunk-jRWAZmH_.js";import{t}from"./react-DJZBPgpf.js";import{t as n}from"./button-D7s2Q_uG.js";import{r}from"./chunk-5KNZJZUH-DdS6bb-3.js";import{t as i}from"./jsx-runtime-CVSDxk6A.js";import{t as a}from"./card-BibIM9x3.js";import{t as o}from"./notice-G5Imd5pC.js";import{t as s}from"./shortcut-keys-WNQqv5_X.js";import{t as c}from"./is-electron-BuSDabCt.js";import{t as l}from"./x-Dz7msELe.js";import{a as u}from"./routes-BKwsRssF.js";import{ca as d}from"./index-BiN-6kWM.js";var f=e(t(),1);async function p(){if(!c())return[];let e=window.vellum;return e?.hotkeys?e.hotkeys.get():[]}async function m(e,t){if(!c())return;let n=window.vellum;n?.hotkeys&&await n.hotkeys.set(e,t)}function h(e){if(!c())return()=>{};let t=window.vellum;return t?.hotkeys?t.hotkeys.onChange(e):()=>{}}var g={ArrowUp:`Up`,ArrowDown:`Down`,ArrowLeft:`Left`,ArrowRight:`Right`,Enter:`Return`,NumpadEnter:`Return`,Space:`Space`,Tab:`Tab`,Escape:`Escape`,Backspace:`Backspace`,Delete:`Delete`,Insert:`Insert`,Home:`Home`,End:`End`,PageUp:`PageUp`,PageDown:`PageDown`,Minus:`-`,Equal:`=`,BracketLeft:`[`,BracketRight:`]`,Backslash:`\\`,Semicolon:`;`,Quote:`'`,Backquote:"`",Comma:`,`,Period:`.`,Slash:`/`},_=new Set([`MetaLeft`,`MetaRight`,`ControlLeft`,`ControlRight`,`AltLeft`,`AltRight`,`ShiftLeft`,`ShiftRight`]),v=e=>{let t=e.code;return _.has(t)?null:/^Key[A-Z]$/.test(t)?t.slice(3):/^Digit[0-9]$/.test(t)?t.slice(5):/^Numpad[0-9]$/.test(t)?`num${t.slice(6)}`:/^F[0-9]{1,2}$/.test(t)?t:g[t]??null},y=e=>{let t=v(e);if(t===null)return null;let n=[];return e.metaKey&&n.push(`CmdOrCtrl`),e.ctrlKey&&n.push(`Control`),e.altKey&&n.push(`Alt`),e.shiftKey&&n.push(`Shift`),[...n,t].join(`+`)},b=(e,t,n)=>n===``?null:e.find(e=>e.key!==t&&e.accelerator===n)??null,x=i(),S=[{scope:`global`,title:`Global shortcuts`,description:`Work anywhere, even when Vellum is in the background.`},{scope:`menu`,title:`App shortcuts`,description:`Work while a Vellum window is focused.`}];function C({hotkey:e,recording:t,conflictLabel:r,onStartRecording:i,onCancelRecording:a,onReset:o,onRemove:c}){let u=e.accelerator===``,f=e.override!==null;return(0,x.jsxs)(`div`,{className:`flex items-center justify-between gap-3 py-2`,children:[(0,x.jsxs)(`div`,{className:`min-w-0`,children:[(0,x.jsx)(`div`,{className:`truncate text-body-medium-lighter text-[var(--content-default)]`,children:e.label}),r!==null&&(0,x.jsxs)(`div`,{className:`text-body-small-default text-[var(--system-negative-strong)]`,children:[`Already used by `,r]})]}),(0,x.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2`,children:[t?(0,x.jsx)(`span`,{className:`text-body-small-default text-[var(--content-secondary)]`,children:`Recording… press a shortcut, or Esc to cancel`}):u?(0,x.jsx)(`span`,{className:`text-body-small-default italic text-[var(--content-disabled)]`,children:`Disabled`}):(0,x.jsx)(s,{accelerator:e.accelerator}),t?(0,x.jsx)(n,{variant:`ghost`,size:`compact`,onClick:a,children:`Cancel`}):(0,x.jsx)(n,{variant:`outlined`,size:`compact`,onClick:i,"aria-label":`Record shortcut for ${e.label}`,children:`Record`}),(0,x.jsx)(n,{variant:`ghost`,size:`compact`,disabled:!f,leftIcon:(0,x.jsx)(d,{className:`h-3.5 w-3.5`}),onClick:o,"aria-label":`Reset ${e.label} to default`}),(0,x.jsx)(n,{variant:`ghost`,size:`compact`,disabled:u,leftIcon:(0,x.jsx)(l,{className:`h-3.5 w-3.5`}),onClick:c,"aria-label":`Remove ${e.label} binding`})]})]})}function w(){let[e,t]=(0,f.useState)([]),[n,i]=(0,f.useState)(null),[s,l]=(0,f.useState)(null),d=(0,f.useCallback)(()=>{p().then(t)},[]);(0,f.useEffect)(()=>(d(),h(t)),[d]);let g=(0,f.useCallback)(()=>{i(null),l(null)},[]);(0,f.useEffect)(()=>{if(n===null)return;let t=t=>{if(t.preventDefault(),t.stopPropagation(),t.code===`Escape`){g();return}let r=y(t);if(r===null)return;let i=b(e,n,r);if(i!==null){l({key:n,label:i.label});return}m(n,r).then(d),g()};return window.addEventListener(`keydown`,t,!0),()=>window.removeEventListener(`keydown`,t,!0)},[n,e,d,g]);let _=(0,f.useCallback)(e=>{l(null),i(e)},[]),v=(0,f.useCallback)(t=>{let n=b(e,t,e.find(e=>e.key===t)?.defaultAccelerator??``);if(n!==null){i(null),l({key:t,label:n.label});return}g(),m(t,null).then(d)},[e,d,g]),w=(0,f.useCallback)(e=>{g(),m(e,``).then(d)},[d,g]),T=(0,f.useMemo)(()=>S.map(t=>({...t,commands:e.filter(e=>e.rebindable&&e.scope===t.scope)})).filter(e=>e.commands.length>0),[e]);return c()?(0,x.jsxs)(`div`,{className:`space-y-4`,children:[(0,x.jsxs)(`div`,{children:[(0,x.jsx)(`h2`,{className:`text-title-medium text-[var(--content-default)]`,children:`Keyboard Shortcuts`}),(0,x.jsx)(`p`,{className:`text-body-medium-lighter text-[var(--content-secondary)]`,children:`Customize the shortcuts for Vellum's commands.`})]}),s!==null&&(0,x.jsxs)(o,{tone:`warning`,children:[`That shortcut is already used by `,s.label,`.`,` `,n===null?`Remove or change that binding before resetting.`:`Pick a different combination, or press Esc to cancel.`]}),T.map(e=>(0,x.jsxs)(a,{bordered:!0,children:[(0,x.jsxs)(`div`,{className:`mb-2`,children:[(0,x.jsx)(`div`,{className:`text-body-medium-emphasised text-[var(--content-default)]`,children:e.title}),(0,x.jsx)(`div`,{className:`text-body-small-default text-[var(--content-tertiary)]`,children:e.description})]}),(0,x.jsx)(`div`,{className:`divide-y divide-[var(--border-base)]`,children:e.commands.map(e=>(0,x.jsx)(C,{hotkey:e,recording:n===e.key,conflictLabel:s!==null&&s.key===e.key?s.label:null,onStartRecording:()=>_(e.key),onCancelRecording:g,onReset:()=>v(e.key),onRemove:()=>w(e.key)},e.key))})]},e.scope))]}):(0,x.jsx)(r,{replace:!0,to:u.settings.general})}export{w as KeyboardShortcutsPage};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{o as e}from"./chunk-jRWAZmH_.js";import{t}from"./react-DJZBPgpf.js";import{d as n,p as r}from"./chunk-5KNZJZUH-DdS6bb-3.js";import{t as i}from"./jsx-runtime-CVSDxk6A.js";import"./src-D6Nu2Lol.js";import{n as a}from"./toast-DLWkiWW6.js";import{t as o}from"./loader-circle-CTs38Ovl.js";import{n as s}from"./sdk.gen-Bew9wO5C.js";import{a as c}from"./routes-BKwsRssF.js";import{a as l}from"./viewer-store-CInCucV8.js";import{X as u,nt as d,r as f}from"./index-
|
|
1
|
+
import{o as e}from"./chunk-jRWAZmH_.js";import{t}from"./react-DJZBPgpf.js";import{d as n,p as r}from"./chunk-5KNZJZUH-DdS6bb-3.js";import{t as i}from"./jsx-runtime-CVSDxk6A.js";import"./src-D6Nu2Lol.js";import{n as a}from"./toast-DLWkiWW6.js";import{t as o}from"./loader-circle-CTs38Ovl.js";import{n as s}from"./sdk.gen-Bew9wO5C.js";import{a as c}from"./routes-BKwsRssF.js";import{a as l}from"./viewer-store-CInCucV8.js";import{X as u,nt as d,r as f}from"./index-BiN-6kWM.js";import{t as p}from"./use-active-assistant-id-512RohBL.js";var m=e(t(),1),h=i();function g(){let{appId:e}=r(),t=p(),i=n(),[g,_]=(0,m.useState)(null),[v,y]=(0,m.useState)(null),[b,x]=(0,m.useState)(!1),S=(0,m.useRef)(null);(0,m.useEffect)(()=>{if(e)return S.current=e,_(null),y(null),s({path:{assistant_id:t,id:e},throwOnError:!0}).then(({data:n})=>{S.current===e&&(l(t,n.appId,n.html),_({appId:n.appId,dirName:n.dirName,name:n.name,html:n.html}))}).catch(t=>{S.current===e&&y(t instanceof Error?t.message:`Failed to open app`)}),()=>{S.current=null}},[t,e]);let C=(0,m.useCallback)(()=>{i(c.library.root)},[i]),w=f(),T=(0,m.useCallback)(()=>{g&&w(g)},[g,w]),E=(0,m.useCallback)(async()=>{if(!(!g||b)){x(!0);try{await d(t,g.appId,g.name),a.success(`App exported`,{description:`${g.name}.vellum`})}catch(e){a.error(`Failed to share app`,{description:e instanceof Error?e.message:void 0})}finally{x(!1)}}},[t,g,b]);return e?v?(0,h.jsxs)(`div`,{className:`flex flex-1 flex-col items-center justify-center gap-4`,children:[(0,h.jsx)(`p`,{className:`text-body-medium-lighter text-[var(--content-tertiary)]`,children:v}),(0,h.jsx)(`button`,{type:`button`,onClick:C,className:`text-body-medium-default text-[var(--primary-base)] underline`,children:`Back to Library`})]}):g?(0,h.jsx)(u,{appId:g.appId,appName:g.name,html:g.html,assistantId:t,onClose:C,onEdit:T,onShare:E,isSharing:b,enableFullscreen:!0}):(0,h.jsx)(`div`,{className:`flex flex-1 items-center justify-center`,children:(0,h.jsx)(o,{className:`h-6 w-6 animate-spin text-[var(--content-tertiary)]`})}):null}export{g as LibraryDetailPage};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{o as e}from"./chunk-jRWAZmH_.js";import{t}from"./react-DJZBPgpf.js";import{t as n}from"./button-D7s2Q_uG.js";import{d as r}from"./chunk-5KNZJZUH-DdS6bb-3.js";import{n as i}from"./QueryClientProvider-DKhXIxGb.js";import{t as a}from"./useQuery-B45lW1Kk.js";import{t as o}from"./jsx-runtime-CVSDxk6A.js";import{t as s}from"./menu-BvyV91Np.js";import"./src-D6Nu2Lol.js";import{t as c}from"./confirm-dialog-DbNUkFt6.js";import{t as l}from"./input-CwdmSRlD.js";import{n as u,t as d}from"./panel-item-BFOUNXY1.js";import{n as f}from"./toast-DLWkiWW6.js";import{t as p}from"./arrow-up-BsbPgGtM.js";import{t as m}from"./globe-BV8ouh66.js";import{s as h,t as g}from"./sdk.gen-Bew9wO5C.js";import{C as _,n as v,t as y}from"./react-query.gen-DdB0sQgj.js";import{a as b}from"./routes-BKwsRssF.js";import{n as x}from"./use-is-mobile-CvT53Qs1.js";import{i as S,r as C}from"./viewer-store-CInCucV8.js";import{t as w}from"./misc-Bo3spjOe.js";import{Gi as T,Ki as E,Pa as D,Wa as O,Ya as k,_a as A,aa as j,bt as M,ga as N,nt as P,tt as F,vt as I,z as L}from"./index-LP2PV_QY.js";import{t as R}from"./deploy-dialogs-DWIqIDdv.js";import{t as z}from"./use-active-assistant-id-512RohBL.js";import{t as B}from"./page-shell-C0oiLAoY.js";import{t as V}from"./format-date-B6hTwbOM.js";var H=e(t(),1),U=o();function W({app:e,isDeleting:t,onConfirm:n,onCancel:r}){return(0,U.jsx)(c,{open:e!==null,title:`Delete app`,message:e?`"${e.name}" will be permanently removed.`:``,confirmLabel:t?`Deleting…`:`Delete`,destructive:!0,onConfirm:n,onCancel:r})}function G(e){return e===1?`1 word`:`${e} words`}function K({document:e,onOpen:t}){return(0,U.jsxs)(`div`,{className:`group relative flex flex-col gap-2`,children:[(0,U.jsxs)(`button`,{type:`button`,onClick:()=>t(e.surfaceId),className:w(`relative flex w-full cursor-pointer flex-col items-center justify-center gap-2 overflow-hidden rounded-xl border border-[var(--border-base)] bg-[var(--surface-base)]`,`aspect-[16/10]`,`outline-none focus-visible:ring-2 focus-visible:ring-[var(--ring)]`),children:[(0,U.jsx)(O,{size:34,className:`text-[var(--content-tertiary)]`}),(0,U.jsx)(`span`,{className:`text-body-small-default text-[var(--content-tertiary)]`,children:G(e.wordCount)})]}),(0,U.jsxs)(`button`,{type:`button`,onClick:()=>t(e.surfaceId),className:`flex cursor-pointer flex-col gap-0.5 px-0.5 text-left outline-none`,children:[(0,U.jsx)(`span`,{className:`truncate text-body-large-default text-[color:var(--content-emphasised)]`,children:e.title}),(0,U.jsx)(`span`,{className:`text-body-small-default text-[color:var(--content-tertiary)]`,children:V(new Date(e.updatedAt))})]})]})}function q({fileInputRef:e,isImporting:t,onImportBundle:r,onNewConversation:i}){return(0,U.jsxs)(`div`,{className:`flex h-full flex-col items-center justify-center gap-4 px-4 py-24`,children:[(0,U.jsx)(`input`,{ref:e,type:`file`,accept:`.vellum`,className:`hidden`,onChange:r}),(0,U.jsx)(`div`,{className:`flex h-16 w-16 items-center justify-center rounded-xl bg-[var(--surface-base)]`,children:(0,U.jsx)(D,{size:32,className:`text-[var(--content-tertiary)]`})}),(0,U.jsx)(`h2`,{className:`text-title-medium text-[var(--content-default)]`,children:`Your library is empty`}),(0,U.jsx)(`p`,{className:`max-w-md text-center text-body-medium-lighter text-[color:var(--content-tertiary)]`,children:`Ask your assistant to build something, or import a shared app`}),(0,U.jsxs)(`div`,{className:`flex flex-col items-center gap-3`,children:[i?(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(n,{variant:`primary`,size:`regular`,onClick:i,children:`New Conversation`}),(0,U.jsx)(`span`,{className:`text-body-small-default text-[color:var(--content-tertiary)]`,children:`or`})]}):null,(0,U.jsxs)(n,{variant:`outlined`,size:`regular`,onClick:()=>e.current?.click(),disabled:t,children:[t?(0,U.jsx)(`div`,{className:`h-4 w-4 animate-spin rounded-full border-2 border-current border-t-transparent`}):(0,U.jsx)(T,{size:14}),(0,U.jsx)(`span`,{className:`ml-1.5`,children:`Import .vellum File`})]})]})]})}function J({app:e,assistantId:t,isPinned:n,onOpen:r,onPin:i,onDelete:a,onDeploy:o,justImported:s,onAnimationEnd:c}){let[l,u]=(0,H.useState)(!1),d=(0,H.useCallback)(()=>S(t,e.id),[t,e.id]),p=(0,H.useCallback)(async()=>{if(!l){u(!0);try{await P(t,e.id,e.name),f.success(`App exported`,{description:`${e.name}.vellum`})}catch(e){f.error(`Failed to share app`,{description:e instanceof Error?e.message:void 0})}finally{u(!1)}}},[t,e.id,e.name,l]),[m,h]=(0,H.useState)(!1),g=x();return(0,U.jsxs)(`div`,{className:w(`group relative flex flex-col gap-2`,s&&`animate-[card-entrance_400ms_ease-out]`),onAnimationEnd:s?c:void 0,children:[(0,U.jsx)(`button`,{type:`button`,onClick:()=>r(e.id),className:w(`relative w-full cursor-pointer overflow-hidden rounded-xl`,`outline-none focus-visible:ring-2 focus-visible:ring-[var(--ring)]`),children:(0,U.jsx)(L,{name:e.name,icon:e.icon,loadHtml:d})}),(0,U.jsx)(`div`,{className:w(`absolute right-2 top-2 z-20 transition-opacity`,`max-md:opacity-100`,`md:group-hover:opacity-100 md:group-focus-within:opacity-100`,m?`opacity-100`:`md:opacity-0`),children:(0,U.jsx)(Y,{appName:e.name,isPinned:n,open:m,onOpenChange:h,onPin:()=>i(e),onDelete:a?()=>a(e):void 0,onShare:p,onDeploy:o,isMobile:g})}),(0,U.jsxs)(`button`,{type:`button`,onClick:()=>r(e.id),className:`flex cursor-pointer flex-col gap-0.5 px-0.5 text-left outline-none`,children:[(0,U.jsx)(`span`,{className:`truncate text-body-large-default text-[color:var(--content-emphasised)]`,children:e.name}),(0,U.jsx)(`span`,{className:`text-body-small-default text-[color:var(--content-tertiary)]`,children:V(new Date(e.createdAt))})]})]})}function Y({appName:e,isPinned:t,open:r,onOpenChange:i,onPin:a,onDelete:o,onShare:c,onDeploy:l,isMobile:f}){return f?(0,U.jsxs)(u.Root,{open:r,onOpenChange:i,children:[(0,U.jsx)(u.Trigger,{asChild:!0,children:(0,U.jsx)(n,{variant:`primary`,size:`compact`,iconOnly:(0,U.jsx)(k,{}),"aria-label":`App actions`,onClick:e=>e.stopPropagation()})}),(0,U.jsxs)(u.Content,{children:[(0,U.jsx)(u.Header,{className:`sr-only`,children:(0,U.jsx)(u.Title,{children:e})}),(0,U.jsxs)(u.Body,{className:`pt-0`,children:[(0,U.jsx)(d,{icon:t?A:N,label:t?`Unpin`:`Pin`,onSelect:()=>{i(!1),a()}}),c?(0,U.jsx)(d,{icon:p,label:(0,U.jsxs)(`span`,{className:`flex flex-col gap-0.5 overflow-visible whitespace-normal`,children:[(0,U.jsx)(`span`,{children:`Share`}),(0,U.jsx)(`span`,{className:`text-body-small-default text-[var(--content-tertiary)]`,children:`Export as .vellum file`})]}),onSelect:()=>{i(!1),c()}}):null,l?(0,U.jsx)(d,{icon:m,label:(0,U.jsxs)(`span`,{className:`flex flex-col gap-0.5 overflow-visible whitespace-normal`,children:[(0,U.jsx)(`span`,{children:`Deploy to Vercel`}),(0,U.jsx)(`span`,{className:`text-body-small-default text-[var(--content-tertiary)]`,children:`Publish as a static page`})]}),onSelect:()=>{i(!1),l()}}):null,o?(0,U.jsx)(d,{icon:E,label:`Delete`,onSelect:()=>{i(!1),o()}}):null]})]})]}):(0,U.jsxs)(s.Root,{open:r,onOpenChange:i,children:[(0,U.jsx)(s.Trigger,{asChild:!0,children:(0,U.jsx)(n,{variant:`primary`,size:`compact`,iconOnly:(0,U.jsx)(k,{}),"aria-label":`App actions`,onClick:e=>e.stopPropagation()})}),(0,U.jsxs)(s.Content,{align:`end`,sideOffset:4,children:[(0,U.jsx)(s.Item,{leftIcon:t?(0,U.jsx)(A,{size:14}):(0,U.jsx)(N,{size:14}),onSelect:()=>a(),className:`whitespace-nowrap`,children:t?`Unpin`:`Pin`}),c?(0,U.jsx)(s.Item,{leftIcon:(0,U.jsx)(p,{size:14}),onSelect:()=>c(),className:`whitespace-nowrap`,children:`Share`}):null,l?(0,U.jsx)(s.Item,{leftIcon:(0,U.jsx)(m,{size:14}),onSelect:()=>l(),className:`whitespace-nowrap`,children:`Deploy to Vercel`}):null,o?(0,U.jsx)(s.Item,{leftIcon:(0,U.jsx)(E,{size:14,className:`text-red-600`}),onSelect:()=>o(),className:`whitespace-nowrap text-red-600 data-[highlighted]:text-red-700`,children:`Delete`}):null]})]})}function X({title:e,apps:t,assistantId:n,pinnedAppIds:r,lastImportedAppId:i,onOpen:a,onPin:o,onDelete:s,onDeploy:c,onAnimationEnd:l}){return t.length===0?null:(0,U.jsxs)(`section`,{children:[(0,U.jsx)(`h2`,{className:`mb-4 text-body-small-emphasised text-[color:var(--content-secondary)]`,children:e}),(0,U.jsx)(`div`,{className:`grid grid-cols-[repeat(auto-fill,minmax(max(220px,calc((100%-6rem)/5)),1fr))] gap-6`,children:t.map(e=>(0,U.jsx)(J,{app:e,assistantId:n,isPinned:r.has(e.id),onOpen:a,onPin:o,onDelete:s,justImported:e.id===i,onAnimationEnd:l,onDeploy:c?()=>c(e.id):void 0},e.id))})]})}var Z=(e,t)=>t.updatedAt-e.updatedAt||t.createdAt-e.createdAt;function Q(e){let t=I.use.pinnedAppIds(),{data:n=[],isLoading:r,error:i}=a({...y({path:{assistant_id:e}}),select:e=>e.apps}),{data:o=[],isLoading:s,error:c}=a({..._({path:{assistant_id:e}}),select:e=>e.documents}),l=r||s,u=i&&c?i instanceof Error?i.message:`Failed to load library`:null,[d,f]=(0,H.useState)(``),p=(0,H.useMemo)(()=>{if(!d.trim())return n;let e=d.toLowerCase();return n.filter(t=>t.name.toLowerCase().includes(e)||t.description?.toLowerCase().includes(e))},[n,d]);return{apps:n,documents:o,filteredApps:p,pinnedApps:(0,H.useMemo)(()=>p.filter(e=>t.has(e.id)).sort(Z),[p,t]),recentApps:(0,H.useMemo)(()=>p.filter(e=>!t.has(e.id)).sort(Z),[p,t]),filteredDocuments:(0,H.useMemo)(()=>{if(!d.trim())return o;let e=d.toLowerCase();return o.filter(t=>t.title.toLowerCase().includes(e))},[o,d]),searchText:d,setSearchText:f,loading:l,error:u}}async function $(e,t){let{data:n,error:r,response:i}=await h({path:{assistant_id:e},body:t,bodySerializer:e=>e,headers:{"Content-Type":`application/octet-stream`},throwOnError:!1});if(!i||!i.ok){let e=(r&&typeof r==`object`&&`message`in r?r.message:null)??`Failed to import app.`;throw Error(e)}return n}function ee({assistantId:e,assistantName:t,title:r,onNewConversation:a,onOpenDocument:o,onOpenApp:s}){let c=i(),u=I.use.togglePin(),d=I.use.pinnedAppIds(),p=F.use.isDeploying(),{apps:m,documents:h,filteredApps:_,pinnedApps:y,recentApps:b,filteredDocuments:x,searchText:w,setSearchText:E,loading:D,error:O}=Q(e),[k,A]=(0,H.useState)(null),[M,N]=(0,H.useState)(!1),P=(0,H.useCallback)(async()=>{let t=k;if(!(!t||M)){N(!0);try{await g({path:{assistant_id:e,id:t.id},throwOnError:!0}),C(e,t.id),c.invalidateQueries({queryKey:v({path:{assistant_id:e}})}),d.has(t.id)&&u(t),A(null)}catch(e){f.error(e instanceof Error?e.message:`Failed to delete app`)}finally{N(!1)}}},[k,M,e,d,u,c]),L=(0,H.useCallback)(()=>{M||A(null)},[M]),z=(0,H.useRef)(null),[B,V]=(0,H.useState)(!1),G=(0,H.useCallback)(async t=>{let n=t.target.files?.[0];if(!(!n||B)){V(!0);try{let t=await $(e,n);await c.invalidateQueries({queryKey:v({path:{assistant_id:e}})}),f.success(t.name+` imported`),s(t.appId)}catch(e){f.error(e instanceof Error?e.message:`Failed to import app`)}finally{V(!1),z.current&&(z.current.value=``)}}},[e,B,c,s]),J=(0,H.useCallback)(async t=>{if(p)return;let n=m.find(e=>e.id===t)?.name??`this app`;try{let r=await S(e,t);F.getState().deployApp(e,t,n,r)}catch{F.getState().deployApp(e,t,n,``)}},[e,p,m]),Y=(0,H.useCallback)(e=>u(e),[u]);return D?(0,U.jsx)(`div`,{className:`flex h-full items-center justify-center`,children:(0,U.jsx)(`div`,{className:`h-6 w-6 animate-spin rounded-full border-2 border-[var(--border-base)] border-t-[var(--primary-base)]`,role:`status`,"aria-label":`Loading apps`})}):O?(0,U.jsxs)(`div`,{className:`flex h-full flex-col items-center justify-center gap-4 px-4`,children:[(0,U.jsx)(`p`,{className:`text-body-medium-lighter text-[var(--content-tertiary)]`,children:O}),(0,U.jsx)(`button`,{type:`button`,className:`rounded-lg bg-[var(--primary-base)] px-4 py-2 text-body-medium-default text-[var(--content-inset)] transition-colors hover:bg-[var(--primary-hover)]`,onClick:()=>window.location.reload(),children:`Retry`})]}):m.length===0&&h.length===0?(0,U.jsx)(q,{fileInputRef:z,isImporting:B,onImportBundle:G,onNewConversation:a?()=>a():void 0}):(0,U.jsxs)(`div`,{className:`flex h-full flex-col overflow-hidden`,children:[(0,U.jsxs)(`div`,{className:`mb-4 flex shrink-0 items-center justify-between gap-4`,children:[r?(0,U.jsx)(`h1`,{className:`text-title-large text-[var(--content-default)]`,children:r}):(0,U.jsx)(`span`,{}),(0,U.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,U.jsx)(`input`,{ref:z,type:`file`,accept:`.vellum`,className:`hidden`,onChange:G}),(0,U.jsxs)(n,{variant:`outlined`,size:`regular`,onClick:()=>z.current?.click(),disabled:B,children:[B?(0,U.jsx)(`div`,{className:`h-4 w-4 animate-spin rounded-full border-2 border-current border-t-transparent`}):(0,U.jsx)(T,{size:14}),(0,U.jsx)(`span`,{className:`ml-1.5`,children:`Import`})]})]})]}),(0,U.jsx)(`div`,{className:`mb-6 shrink-0`,children:(0,U.jsx)(l,{fullWidth:!0,type:`text`,placeholder:`Search your library`,value:w,onChange:e=>E(e.target.value),leftIcon:(0,U.jsx)(j,{size:16})})}),(0,U.jsx)(`div`,{className:`flex-1 overflow-y-auto`,children:_.length===0&&x.length===0?(0,U.jsxs)(`div`,{className:`flex flex-col items-center justify-center py-16`,children:[(0,U.jsx)(j,{size:32,className:`mb-4 text-[var(--content-tertiary)]`}),(0,U.jsxs)(`p`,{className:`text-body-medium-lighter text-[var(--content-tertiary)]`,children:[`No apps or documents matched “`,w,`”`]})]}):(0,U.jsxs)(`div`,{className:`flex flex-col gap-8`,children:[(0,U.jsx)(X,{title:`Pinned`,apps:y,assistantId:e,pinnedAppIds:d,onOpen:s,onPin:Y,onDelete:A,onDeploy:J}),(0,U.jsx)(X,{title:`Recents`,apps:b,assistantId:e,pinnedAppIds:d,onOpen:s,onPin:Y,onDelete:A,onDeploy:J}),x.length>0?(0,U.jsxs)(`section`,{children:[(0,U.jsx)(`h2`,{className:`mb-4 text-body-small-emphasised text-[color:var(--content-secondary)]`,children:`Documents`}),(0,U.jsx)(`div`,{className:`grid grid-cols-[repeat(auto-fill,minmax(max(220px,calc((100%-6rem)/5)),1fr))] gap-6`,children:x.map(e=>(0,U.jsx)(K,{document:e,onOpen:e=>{o&&o(e)}},e.surfaceId))})]}):null]})}),(0,U.jsx)(R,{assistantId:e,assistantName:t,onStartConversation:a}),(0,U.jsx)(W,{app:k,isDeleting:M,onConfirm:P,onCancel:L})]})}function te(){let e=z(),t=r();return(0,U.jsx)(B,{children:(0,U.jsx)(ee,{assistantId:e,title:`Library`,onNewConversation:(0,H.useCallback)(e=>{M(t,{prompt:e})},[t]),onOpenDocument:(0,H.useCallback)(e=>{t(b.document(e))},[t]),onOpenApp:(0,H.useCallback)(e=>{t(b.library.app(e))},[t])})})}export{te as LibraryPage};
|
|
1
|
+
import{o as e}from"./chunk-jRWAZmH_.js";import{t}from"./react-DJZBPgpf.js";import{t as n}from"./button-D7s2Q_uG.js";import{d as r}from"./chunk-5KNZJZUH-DdS6bb-3.js";import{n as i}from"./QueryClientProvider-DKhXIxGb.js";import{t as a}from"./useQuery-B45lW1Kk.js";import{t as o}from"./jsx-runtime-CVSDxk6A.js";import{t as s}from"./menu-BvyV91Np.js";import"./src-D6Nu2Lol.js";import{t as c}from"./confirm-dialog-DbNUkFt6.js";import{t as l}from"./input-CwdmSRlD.js";import{n as u,t as d}from"./panel-item-BFOUNXY1.js";import{n as f}from"./toast-DLWkiWW6.js";import{t as p}from"./arrow-up-BsbPgGtM.js";import{t as m}from"./globe-BV8ouh66.js";import{s as h,t as g}from"./sdk.gen-Bew9wO5C.js";import{C as _,n as v,t as y}from"./react-query.gen-DdB0sQgj.js";import{a as b}from"./routes-BKwsRssF.js";import{n as x}from"./use-is-mobile-CvT53Qs1.js";import{i as S,r as C}from"./viewer-store-CInCucV8.js";import{t as w}from"./misc-Bo3spjOe.js";import{Gi as T,Ki as E,Pa as D,Wa as O,Ya as k,_a as A,aa as j,bt as M,ga as N,nt as P,tt as F,vt as I,z as L}from"./index-BiN-6kWM.js";import{t as R}from"./deploy-dialogs-BtpYB7B8.js";import{t as z}from"./use-active-assistant-id-512RohBL.js";import{t as B}from"./page-shell-C0oiLAoY.js";import{t as V}from"./format-date-B6hTwbOM.js";var H=e(t(),1),U=o();function W({app:e,isDeleting:t,onConfirm:n,onCancel:r}){return(0,U.jsx)(c,{open:e!==null,title:`Delete app`,message:e?`"${e.name}" will be permanently removed.`:``,confirmLabel:t?`Deleting…`:`Delete`,destructive:!0,onConfirm:n,onCancel:r})}function G(e){return e===1?`1 word`:`${e} words`}function K({document:e,onOpen:t}){return(0,U.jsxs)(`div`,{className:`group relative flex flex-col gap-2`,children:[(0,U.jsxs)(`button`,{type:`button`,onClick:()=>t(e.surfaceId),className:w(`relative flex w-full cursor-pointer flex-col items-center justify-center gap-2 overflow-hidden rounded-xl border border-[var(--border-base)] bg-[var(--surface-base)]`,`aspect-[16/10]`,`outline-none focus-visible:ring-2 focus-visible:ring-[var(--ring)]`),children:[(0,U.jsx)(O,{size:34,className:`text-[var(--content-tertiary)]`}),(0,U.jsx)(`span`,{className:`text-body-small-default text-[var(--content-tertiary)]`,children:G(e.wordCount)})]}),(0,U.jsxs)(`button`,{type:`button`,onClick:()=>t(e.surfaceId),className:`flex cursor-pointer flex-col gap-0.5 px-0.5 text-left outline-none`,children:[(0,U.jsx)(`span`,{className:`truncate text-body-large-default text-[color:var(--content-emphasised)]`,children:e.title}),(0,U.jsx)(`span`,{className:`text-body-small-default text-[color:var(--content-tertiary)]`,children:V(new Date(e.updatedAt))})]})]})}function q({fileInputRef:e,isImporting:t,onImportBundle:r,onNewConversation:i}){return(0,U.jsxs)(`div`,{className:`flex h-full flex-col items-center justify-center gap-4 px-4 py-24`,children:[(0,U.jsx)(`input`,{ref:e,type:`file`,accept:`.vellum`,className:`hidden`,onChange:r}),(0,U.jsx)(`div`,{className:`flex h-16 w-16 items-center justify-center rounded-xl bg-[var(--surface-base)]`,children:(0,U.jsx)(D,{size:32,className:`text-[var(--content-tertiary)]`})}),(0,U.jsx)(`h2`,{className:`text-title-medium text-[var(--content-default)]`,children:`Your library is empty`}),(0,U.jsx)(`p`,{className:`max-w-md text-center text-body-medium-lighter text-[color:var(--content-tertiary)]`,children:`Ask your assistant to build something, or import a shared app`}),(0,U.jsxs)(`div`,{className:`flex flex-col items-center gap-3`,children:[i?(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(n,{variant:`primary`,size:`regular`,onClick:i,children:`New Conversation`}),(0,U.jsx)(`span`,{className:`text-body-small-default text-[color:var(--content-tertiary)]`,children:`or`})]}):null,(0,U.jsxs)(n,{variant:`outlined`,size:`regular`,onClick:()=>e.current?.click(),disabled:t,children:[t?(0,U.jsx)(`div`,{className:`h-4 w-4 animate-spin rounded-full border-2 border-current border-t-transparent`}):(0,U.jsx)(T,{size:14}),(0,U.jsx)(`span`,{className:`ml-1.5`,children:`Import .vellum File`})]})]})]})}function J({app:e,assistantId:t,isPinned:n,onOpen:r,onPin:i,onDelete:a,onDeploy:o,justImported:s,onAnimationEnd:c}){let[l,u]=(0,H.useState)(!1),d=(0,H.useCallback)(()=>S(t,e.id),[t,e.id]),p=(0,H.useCallback)(async()=>{if(!l){u(!0);try{await P(t,e.id,e.name),f.success(`App exported`,{description:`${e.name}.vellum`})}catch(e){f.error(`Failed to share app`,{description:e instanceof Error?e.message:void 0})}finally{u(!1)}}},[t,e.id,e.name,l]),[m,h]=(0,H.useState)(!1),g=x();return(0,U.jsxs)(`div`,{className:w(`group relative flex flex-col gap-2`,s&&`animate-[card-entrance_400ms_ease-out]`),onAnimationEnd:s?c:void 0,children:[(0,U.jsx)(`button`,{type:`button`,onClick:()=>r(e.id),className:w(`relative w-full cursor-pointer overflow-hidden rounded-xl`,`outline-none focus-visible:ring-2 focus-visible:ring-[var(--ring)]`),children:(0,U.jsx)(L,{name:e.name,icon:e.icon,loadHtml:d})}),(0,U.jsx)(`div`,{className:w(`absolute right-2 top-2 z-20 transition-opacity`,`max-md:opacity-100`,`md:group-hover:opacity-100 md:group-focus-within:opacity-100`,m?`opacity-100`:`md:opacity-0`),children:(0,U.jsx)(Y,{appName:e.name,isPinned:n,open:m,onOpenChange:h,onPin:()=>i(e),onDelete:a?()=>a(e):void 0,onShare:p,onDeploy:o,isMobile:g})}),(0,U.jsxs)(`button`,{type:`button`,onClick:()=>r(e.id),className:`flex cursor-pointer flex-col gap-0.5 px-0.5 text-left outline-none`,children:[(0,U.jsx)(`span`,{className:`truncate text-body-large-default text-[color:var(--content-emphasised)]`,children:e.name}),(0,U.jsx)(`span`,{className:`text-body-small-default text-[color:var(--content-tertiary)]`,children:V(new Date(e.createdAt))})]})]})}function Y({appName:e,isPinned:t,open:r,onOpenChange:i,onPin:a,onDelete:o,onShare:c,onDeploy:l,isMobile:f}){return f?(0,U.jsxs)(u.Root,{open:r,onOpenChange:i,children:[(0,U.jsx)(u.Trigger,{asChild:!0,children:(0,U.jsx)(n,{variant:`primary`,size:`compact`,iconOnly:(0,U.jsx)(k,{}),"aria-label":`App actions`,onClick:e=>e.stopPropagation()})}),(0,U.jsxs)(u.Content,{children:[(0,U.jsx)(u.Header,{className:`sr-only`,children:(0,U.jsx)(u.Title,{children:e})}),(0,U.jsxs)(u.Body,{className:`pt-0`,children:[(0,U.jsx)(d,{icon:t?A:N,label:t?`Unpin`:`Pin`,onSelect:()=>{i(!1),a()}}),c?(0,U.jsx)(d,{icon:p,label:(0,U.jsxs)(`span`,{className:`flex flex-col gap-0.5 overflow-visible whitespace-normal`,children:[(0,U.jsx)(`span`,{children:`Share`}),(0,U.jsx)(`span`,{className:`text-body-small-default text-[var(--content-tertiary)]`,children:`Export as .vellum file`})]}),onSelect:()=>{i(!1),c()}}):null,l?(0,U.jsx)(d,{icon:m,label:(0,U.jsxs)(`span`,{className:`flex flex-col gap-0.5 overflow-visible whitespace-normal`,children:[(0,U.jsx)(`span`,{children:`Deploy to Vercel`}),(0,U.jsx)(`span`,{className:`text-body-small-default text-[var(--content-tertiary)]`,children:`Publish as a static page`})]}),onSelect:()=>{i(!1),l()}}):null,o?(0,U.jsx)(d,{icon:E,label:`Delete`,onSelect:()=>{i(!1),o()}}):null]})]})]}):(0,U.jsxs)(s.Root,{open:r,onOpenChange:i,children:[(0,U.jsx)(s.Trigger,{asChild:!0,children:(0,U.jsx)(n,{variant:`primary`,size:`compact`,iconOnly:(0,U.jsx)(k,{}),"aria-label":`App actions`,onClick:e=>e.stopPropagation()})}),(0,U.jsxs)(s.Content,{align:`end`,sideOffset:4,children:[(0,U.jsx)(s.Item,{leftIcon:t?(0,U.jsx)(A,{size:14}):(0,U.jsx)(N,{size:14}),onSelect:()=>a(),className:`whitespace-nowrap`,children:t?`Unpin`:`Pin`}),c?(0,U.jsx)(s.Item,{leftIcon:(0,U.jsx)(p,{size:14}),onSelect:()=>c(),className:`whitespace-nowrap`,children:`Share`}):null,l?(0,U.jsx)(s.Item,{leftIcon:(0,U.jsx)(m,{size:14}),onSelect:()=>l(),className:`whitespace-nowrap`,children:`Deploy to Vercel`}):null,o?(0,U.jsx)(s.Item,{leftIcon:(0,U.jsx)(E,{size:14,className:`text-red-600`}),onSelect:()=>o(),className:`whitespace-nowrap text-red-600 data-[highlighted]:text-red-700`,children:`Delete`}):null]})]})}function X({title:e,apps:t,assistantId:n,pinnedAppIds:r,lastImportedAppId:i,onOpen:a,onPin:o,onDelete:s,onDeploy:c,onAnimationEnd:l}){return t.length===0?null:(0,U.jsxs)(`section`,{children:[(0,U.jsx)(`h2`,{className:`mb-4 text-body-small-emphasised text-[color:var(--content-secondary)]`,children:e}),(0,U.jsx)(`div`,{className:`grid grid-cols-[repeat(auto-fill,minmax(max(220px,calc((100%-6rem)/5)),1fr))] gap-6`,children:t.map(e=>(0,U.jsx)(J,{app:e,assistantId:n,isPinned:r.has(e.id),onOpen:a,onPin:o,onDelete:s,justImported:e.id===i,onAnimationEnd:l,onDeploy:c?()=>c(e.id):void 0},e.id))})]})}var Z=(e,t)=>t.updatedAt-e.updatedAt||t.createdAt-e.createdAt;function Q(e){let t=I.use.pinnedAppIds(),{data:n=[],isLoading:r,error:i}=a({...y({path:{assistant_id:e}}),select:e=>e.apps}),{data:o=[],isLoading:s,error:c}=a({..._({path:{assistant_id:e}}),select:e=>e.documents}),l=r||s,u=i&&c?i instanceof Error?i.message:`Failed to load library`:null,[d,f]=(0,H.useState)(``),p=(0,H.useMemo)(()=>{if(!d.trim())return n;let e=d.toLowerCase();return n.filter(t=>t.name.toLowerCase().includes(e)||t.description?.toLowerCase().includes(e))},[n,d]);return{apps:n,documents:o,filteredApps:p,pinnedApps:(0,H.useMemo)(()=>p.filter(e=>t.has(e.id)).sort(Z),[p,t]),recentApps:(0,H.useMemo)(()=>p.filter(e=>!t.has(e.id)).sort(Z),[p,t]),filteredDocuments:(0,H.useMemo)(()=>{if(!d.trim())return o;let e=d.toLowerCase();return o.filter(t=>t.title.toLowerCase().includes(e))},[o,d]),searchText:d,setSearchText:f,loading:l,error:u}}async function $(e,t){let{data:n,error:r,response:i}=await h({path:{assistant_id:e},body:t,bodySerializer:e=>e,headers:{"Content-Type":`application/octet-stream`},throwOnError:!1});if(!i||!i.ok){let e=(r&&typeof r==`object`&&`message`in r?r.message:null)??`Failed to import app.`;throw Error(e)}return n}function ee({assistantId:e,assistantName:t,title:r,onNewConversation:a,onOpenDocument:o,onOpenApp:s}){let c=i(),u=I.use.togglePin(),d=I.use.pinnedAppIds(),p=F.use.isDeploying(),{apps:m,documents:h,filteredApps:_,pinnedApps:y,recentApps:b,filteredDocuments:x,searchText:w,setSearchText:E,loading:D,error:O}=Q(e),[k,A]=(0,H.useState)(null),[M,N]=(0,H.useState)(!1),P=(0,H.useCallback)(async()=>{let t=k;if(!(!t||M)){N(!0);try{await g({path:{assistant_id:e,id:t.id},throwOnError:!0}),C(e,t.id),c.invalidateQueries({queryKey:v({path:{assistant_id:e}})}),d.has(t.id)&&u(t),A(null)}catch(e){f.error(e instanceof Error?e.message:`Failed to delete app`)}finally{N(!1)}}},[k,M,e,d,u,c]),L=(0,H.useCallback)(()=>{M||A(null)},[M]),z=(0,H.useRef)(null),[B,V]=(0,H.useState)(!1),G=(0,H.useCallback)(async t=>{let n=t.target.files?.[0];if(!(!n||B)){V(!0);try{let t=await $(e,n);await c.invalidateQueries({queryKey:v({path:{assistant_id:e}})}),f.success(t.name+` imported`),s(t.appId)}catch(e){f.error(e instanceof Error?e.message:`Failed to import app`)}finally{V(!1),z.current&&(z.current.value=``)}}},[e,B,c,s]),J=(0,H.useCallback)(async t=>{if(p)return;let n=m.find(e=>e.id===t)?.name??`this app`;try{let r=await S(e,t);F.getState().deployApp(e,t,n,r)}catch{F.getState().deployApp(e,t,n,``)}},[e,p,m]),Y=(0,H.useCallback)(e=>u(e),[u]);return D?(0,U.jsx)(`div`,{className:`flex h-full items-center justify-center`,children:(0,U.jsx)(`div`,{className:`h-6 w-6 animate-spin rounded-full border-2 border-[var(--border-base)] border-t-[var(--primary-base)]`,role:`status`,"aria-label":`Loading apps`})}):O?(0,U.jsxs)(`div`,{className:`flex h-full flex-col items-center justify-center gap-4 px-4`,children:[(0,U.jsx)(`p`,{className:`text-body-medium-lighter text-[var(--content-tertiary)]`,children:O}),(0,U.jsx)(`button`,{type:`button`,className:`rounded-lg bg-[var(--primary-base)] px-4 py-2 text-body-medium-default text-[var(--content-inset)] transition-colors hover:bg-[var(--primary-hover)]`,onClick:()=>window.location.reload(),children:`Retry`})]}):m.length===0&&h.length===0?(0,U.jsx)(q,{fileInputRef:z,isImporting:B,onImportBundle:G,onNewConversation:a?()=>a():void 0}):(0,U.jsxs)(`div`,{className:`flex h-full flex-col overflow-hidden`,children:[(0,U.jsxs)(`div`,{className:`mb-4 flex shrink-0 items-center justify-between gap-4`,children:[r?(0,U.jsx)(`h1`,{className:`text-title-large text-[var(--content-default)]`,children:r}):(0,U.jsx)(`span`,{}),(0,U.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,U.jsx)(`input`,{ref:z,type:`file`,accept:`.vellum`,className:`hidden`,onChange:G}),(0,U.jsxs)(n,{variant:`outlined`,size:`regular`,onClick:()=>z.current?.click(),disabled:B,children:[B?(0,U.jsx)(`div`,{className:`h-4 w-4 animate-spin rounded-full border-2 border-current border-t-transparent`}):(0,U.jsx)(T,{size:14}),(0,U.jsx)(`span`,{className:`ml-1.5`,children:`Import`})]})]})]}),(0,U.jsx)(`div`,{className:`mb-6 shrink-0`,children:(0,U.jsx)(l,{fullWidth:!0,type:`text`,placeholder:`Search your library`,value:w,onChange:e=>E(e.target.value),leftIcon:(0,U.jsx)(j,{size:16})})}),(0,U.jsx)(`div`,{className:`flex-1 overflow-y-auto`,children:_.length===0&&x.length===0?(0,U.jsxs)(`div`,{className:`flex flex-col items-center justify-center py-16`,children:[(0,U.jsx)(j,{size:32,className:`mb-4 text-[var(--content-tertiary)]`}),(0,U.jsxs)(`p`,{className:`text-body-medium-lighter text-[var(--content-tertiary)]`,children:[`No apps or documents matched “`,w,`”`]})]}):(0,U.jsxs)(`div`,{className:`flex flex-col gap-8`,children:[(0,U.jsx)(X,{title:`Pinned`,apps:y,assistantId:e,pinnedAppIds:d,onOpen:s,onPin:Y,onDelete:A,onDeploy:J}),(0,U.jsx)(X,{title:`Recents`,apps:b,assistantId:e,pinnedAppIds:d,onOpen:s,onPin:Y,onDelete:A,onDeploy:J}),x.length>0?(0,U.jsxs)(`section`,{children:[(0,U.jsx)(`h2`,{className:`mb-4 text-body-small-emphasised text-[color:var(--content-secondary)]`,children:`Documents`}),(0,U.jsx)(`div`,{className:`grid grid-cols-[repeat(auto-fill,minmax(max(220px,calc((100%-6rem)/5)),1fr))] gap-6`,children:x.map(e=>(0,U.jsx)(K,{document:e,onOpen:e=>{o&&o(e)}},e.surfaceId))})]}):null]})}),(0,U.jsx)(R,{assistantId:e,assistantName:t,onStartConversation:a}),(0,U.jsx)(W,{app:k,isDeleting:M,onConfirm:P,onCancel:L})]})}function te(){let e=z(),t=r();return(0,U.jsx)(B,{children:(0,U.jsx)(ee,{assistantId:e,title:`Library`,onNewConversation:(0,H.useCallback)(e=>{M(t,{prompt:e})},[t]),onOpenDocument:(0,H.useCallback)(e=>{t(b.document(e))},[t]),onOpenApp:(0,H.useCallback)(e=>{t(b.library.app(e))},[t])})})}export{te as LibraryPage};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{o as e}from"./chunk-jRWAZmH_.js";import{t}from"./react-DJZBPgpf.js";import{t as n}from"./button-D7s2Q_uG.js";import{h as r,t as i}from"./chunk-5KNZJZUH-DdS6bb-3.js";import{t as a}from"./jsx-runtime-CVSDxk6A.js";import{t as o}from"./cn-DvW5mxZR.js";import"./src-D6Nu2Lol.js";import{M as s,N as c,j as l}from"./auth-store-CrTf0uWL.js";import{a as u}from"./routes-BKwsRssF.js";import{n as d,r as f}from"./login-flow-BMwbZfKA.js";import{t as p}from"./public-asset-Dp-i4xhW.js";import{Oa as m,R as h,W as g}from"./index-
|
|
1
|
+
import{o as e}from"./chunk-jRWAZmH_.js";import{t}from"./react-DJZBPgpf.js";import{t as n}from"./button-D7s2Q_uG.js";import{h as r,t as i}from"./chunk-5KNZJZUH-DdS6bb-3.js";import{t as a}from"./jsx-runtime-CVSDxk6A.js";import{t as o}from"./cn-DvW5mxZR.js";import"./src-D6Nu2Lol.js";import{M as s,N as c,j as l}from"./auth-store-CrTf0uWL.js";import{a as u}from"./routes-BKwsRssF.js";import{n as d,r as f}from"./login-flow-BMwbZfKA.js";import{t as p}from"./public-asset-Dp-i4xhW.js";import{Oa as m,R as h,W as g}from"./index-BiN-6kWM.js";var _=e(t(),1),v=a();function y({children:e}){return(0,v.jsxs)(`div`,{className:`fixed inset-0 z-50 flex flex-col items-center justify-center bg-[var(--surface-base)] text-[var(--content-default)]`,children:[(0,v.jsx)(`img`,{src:p(`/vellum-logo.svg`),alt:`Vellum`,width:220,height:66,className:`block dark:hidden`}),(0,v.jsx)(`img`,{src:p(`/vellum-logo-white.svg`),alt:`Vellum`,width:220,height:66,className:`hidden dark:block`}),e,(0,v.jsx)(`div`,{"aria-hidden":!0,className:`pointer-events-none absolute left-1/2 w-full max-w-[900px] -translate-x-1/2`,style:{bottom:0},children:(0,v.jsx)(`img`,{src:p(`/login-background-characters.svg`),alt:``,width:880,height:182,className:`h-auto w-full`})})]})}function b(){return(0,v.jsxs)(v.Fragment,{children:[(0,v.jsx)(`div`,{className:`pointer-events-none absolute top-[120px] left-1/2 z-0 -translate-x-1/2`,children:(0,v.jsx)(`img`,{src:p(`/vellum-logo-white.svg`),alt:`Vellum`,width:92,height:28})}),(0,v.jsx)(`div`,{"aria-hidden":!0,className:`pointer-events-none absolute right-0 bottom-0 left-1/2 z-0 w-full max-w-[1100px] -translate-x-1/2`,children:(0,v.jsx)(`img`,{src:p(`/login-background-characters.svg`),alt:``,width:880,height:182,className:`h-auto w-full`})})]})}var x=`flex w-full max-w-[448px] flex-col gap-6 rounded-lg border border-[var(--border-disabled)] bg-[var(--surface-lift)] p-6`;function S({children:e}){return(0,v.jsx)(`div`,{className:x,children:e})}function C({children:e}){return(0,v.jsx)(`h1`,{className:`text-title-large text-center text-[var(--content-emphasised)]`,children:e})}function w({children:e,className:t}){return(0,v.jsx)(`p`,{className:o(`text-body-small-default text-center text-[var(--system-negative-strong)]`,t),children:e})}function T({children:e}){return(0,v.jsx)(`div`,{className:`dark`,children:(0,v.jsxs)(`div`,{className:`relative min-h-screen overflow-x-hidden bg-[var(--surface-base)] text-[var(--content-default)]`,children:[(0,v.jsx)(b,{}),(0,v.jsx)(`div`,{className:`relative z-10 flex min-h-screen flex-col items-center justify-center px-4`,children:e})]})})}function E({signUpHref:e}){return(0,v.jsxs)(`p`,{className:`text-body-small-default flex justify-center gap-1`,children:[(0,v.jsx)(`span`,{className:`text-[var(--content-secondary)]`,children:`Don't have an account?`}),(0,v.jsx)(i,{to:e,className:`font-medium text-[var(--content-emphasised)] hover:underline`,children:`Sign up`})]})}function D({returnTo:e,loading:t,errorMessage:r,onProviderClick:i}){let a=e?`${u.account.signup}?returnTo=${encodeURIComponent(e)}`:u.account.signup;return(0,v.jsxs)(v.Fragment,{children:[(0,v.jsx)(C,{children:`Sign in to Vellum`}),r&&(0,v.jsx)(w,{children:r}),(0,v.jsxs)(`div`,{className:`flex flex-col items-center gap-3`,children:[(0,v.jsx)(n,{type:`button`,variant:`outlined`,fullWidth:!0,onClick:()=>i(`AppleOAuth`),disabled:t,leftIcon:(0,v.jsx)(g,{}),className:`max-w-[300px] gap-3`,children:`Continue with Apple`}),(0,v.jsx)(n,{type:`button`,variant:`outlined`,fullWidth:!0,onClick:()=>i(`GoogleOAuth`),disabled:t,leftIcon:(0,v.jsx)(h,{}),className:`max-w-[300px] gap-3`,children:`Continue with Google`}),(0,v.jsx)(n,{type:`button`,variant:`outlined`,fullWidth:!0,onClick:()=>i(),disabled:t,leftIcon:(0,v.jsx)(m,{}),className:`max-w-[300px] gap-3`,children:`Continue with Email`})]}),(0,v.jsx)(E,{signUpHref:a})]})}var O={signup_closed:`Sign-ups are currently closed. Visit vellum.ai/community to request access.`};function k({returnTo:e}){let[t,r]=(0,_.useState)(null),[i,a]=(0,_.useState)(!1),o=async()=>{r(null),a(!0);try{await s({returnTo:e??null})}catch(e){let t=e&&typeof e==`object`&&`code`in e?e.code:void 0;if(t===`USER_CANCELLED`){a(!1);return}if(t===`AUTH_ERROR`){let t=e&&typeof e==`object`&&`data`in e&&e.data&&typeof e.data==`object`&&`authError`in e.data&&typeof e.data.authError==`string`?e.data.authError:void 0;r((t&&O[t])??`Something went wrong. Please try again.`)}else console.error(`[native-auth] auth flow failed:`,e),r(`Something went wrong. Please try again.`);a(!1)}};return(0,v.jsx)(y,{children:(0,v.jsxs)(`div`,{className:`z-10 mt-8 flex w-full max-w-[320px] flex-col items-center gap-3`,children:[t&&(0,v.jsx)(w,{className:`max-w-[280px]`,children:t}),(0,v.jsx)(n,{type:`button`,variant:`primary`,fullWidth:!0,onClick:()=>{o()},disabled:i,className:`max-w-[300px]`,children:`Sign in`})]})})}function A({returnTo:e}){let[t,n]=(0,_.useState)(null),[r,i]=(0,_.useState)(!1),a=f(e),o=async t=>{n(null),i(!0);try{await l(d,a,{...t?{providerHint:t}:{},returnTo:e})}catch(e){console.error(`[web-login] auth flow failed:`,e),n(`Something went wrong. Please try again.`),i(!1)}};return(0,v.jsx)(T,{children:(0,v.jsx)(S,{children:(0,v.jsx)(D,{returnTo:e,loading:r,errorMessage:t,onProviderClick:e=>{o(e)}})})})}function j(){let[e]=r(),t=c(),n=e.get(`returnTo`);return t?(0,v.jsx)(k,{returnTo:n}):(0,v.jsx)(A,{returnTo:n})}export{j as LoginPage};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{o as e}from"./chunk-jRWAZmH_.js";import{t}from"./react-DJZBPgpf.js";import{h as n}from"./chunk-5KNZJZUH-DdS6bb-3.js";import{t as r}from"./jsx-runtime-CVSDxk6A.js";import{n as i}from"./auth-store-CrTf0uWL.js";import{t as a}from"./return-to-Bc7amvZZ.js";import{a as o}from"./routes-BKwsRssF.js";import{Vr as s}from"./index-
|
|
1
|
+
import{o as e}from"./chunk-jRWAZmH_.js";import{t}from"./react-DJZBPgpf.js";import{h as n}from"./chunk-5KNZJZUH-DdS6bb-3.js";import{t as r}from"./jsx-runtime-CVSDxk6A.js";import{n as i}from"./auth-store-CrTf0uWL.js";import{t as a}from"./return-to-Bc7amvZZ.js";import{a as o}from"./routes-BKwsRssF.js";import{Vr as s}from"./index-BiN-6kWM.js";import{r as c,t as l}from"./account-shell-oWV1wIYb.js";var u=e(t(),1),d=r();function f(){let[e]=n(),t=i.use.logout(),r=(0,u.useRef)(!1);return(0,u.useEffect)(()=>{if(r.current)return;r.current=!0;let n=a(e.get(`returnTo`),o.account.login),i=n.startsWith(`http`)||n===o.account.login?n:`${o.account.login}?returnTo=${encodeURIComponent(n)}`,c=!1;return t().then(()=>{c||s(i)},()=>{c||s(i)}),()=>{c=!0}},[t,e]),(0,d.jsx)(l,{children:(0,d.jsx)(c,{title:`Signing out...`})})}export{f as LogoutPage};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{o as e}from"./chunk-jRWAZmH_.js";import{t}from"./react-DJZBPgpf.js";import{i as n,u as r}from"./chunk-5KNZJZUH-DdS6bb-3.js";import{t as i}from"./jsx-runtime-CVSDxk6A.js";import{t as a}from"./createLucideIcon-DIlBzeWM.js";import{a as o}from"./routes-BKwsRssF.js";import{It as s,Oa as c,go as l,oa as u}from"./index-
|
|
1
|
+
import{o as e}from"./chunk-jRWAZmH_.js";import{t}from"./react-DJZBPgpf.js";import{i as n,u as r}from"./chunk-5KNZJZUH-DdS6bb-3.js";import{t as i}from"./jsx-runtime-CVSDxk6A.js";import{t as a}from"./createLucideIcon-DIlBzeWM.js";import{a as o}from"./routes-BKwsRssF.js";import{It as s,Oa as c,go as l,oa as u}from"./index-BiN-6kWM.js";import{n as d,t as f}from"./sidebar-tree-DALLHIeG.js";var p=a(`monitor-cog`,[[`path`,{d:`M12 17v4`,key:`1riwvh`}],[`path`,{d:`m14.305 7.53.923-.382`,key:`1mlnsw`}],[`path`,{d:`m15.228 4.852-.923-.383`,key:`82mpwg`}],[`path`,{d:`m16.852 3.228-.383-.924`,key:`ln4sir`}],[`path`,{d:`m16.852 8.772-.383.923`,key:`1dejw0`}],[`path`,{d:`m19.148 3.228.383-.924`,key:`192kgf`}],[`path`,{d:`m19.53 9.696-.382-.924`,key:`fiavlr`}],[`path`,{d:`m20.772 4.852.924-.383`,key:`1j8mgp`}],[`path`,{d:`m20.772 7.148.924.383`,key:`zix9be`}],[`path`,{d:`M22 13v2a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h7`,key:`1tnzv8`}],[`path`,{d:`M8 21h8`,key:`1ev6f3`}],[`circle`,{cx:`18`,cy:`6`,r:`3`,key:`1h7g24`}]]),m=e(t(),1),h=[{id:`usage`,label:`Usage`,href:o.logs.usage,icon:l},{id:`logs`,label:`Logs`,href:o.logs.trace,icon:u},{id:`emails`,label:`Emails`,href:o.logs.emails,icon:c},{id:`system-events`,label:`System Events`,href:o.logs.systemEvents,icon:p}],g=i();function _(){let e=s({platformHostedOnly:!0}),t=s(),{pathname:i}=r(),a=(0,m.useMemo)(()=>h.filter(n=>!(n.id===`system-events`&&e===`gated`||n.id===`emails`&&t===`gated`)),[e,t]),c=(0,m.useMemo)(()=>{let e=h.find(e=>i===e.href||i.startsWith(e.href+`/`));return e?e.label:i===o.logs.root?h[0]?.label??`Logs & Usage`:`Logs & Usage`},[i]);return(0,g.jsx)(d,{backHref:o.assistant,sidebar:(0,g.jsx)(f,{items:a,indexPath:o.logs.root}),title:c,menuRoute:o.logs.root,children:(0,g.jsx)(n,{})})}export{_ as LogsLayout};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{o as e}from"./chunk-jRWAZmH_.js";import{t}from"./react-DJZBPgpf.js";import{t as n}from"./button-D7s2Q_uG.js";import{n as r}from"./QueryClientProvider-DKhXIxGb.js";import{t as i}from"./useQuery-B45lW1Kk.js";import{t as a}from"./jsx-runtime-CVSDxk6A.js";import{t as o}from"./card-BibIM9x3.js";import{t as s}from"./confirm-dialog-DbNUkFt6.js";import{t as c}from"./input-CwdmSRlD.js";import{t as l}from"./toggle-_vZlLDBV.js";import{t as u}from"./modal-DX6UN7b0.js";import{n as d}from"./toast-DLWkiWW6.js";import{t as f}from"./cable-R_YO6j5x.js";import{t as p}from"./chevron-right-HpmykQ8I.js";import{t as m}from"./circle-alert-C5TvMkJV.js";import{t as h}from"./circle-check-D3yd2el7.js";import{t as g}from"./loader-circle-CTs38Ovl.js";import{t as _}from"./client.gen-CWZrHbc9.js";import{Ia as v,Ki as y,fa as b,mo as x,pa as S,ua as C}from"./index-LP2PV_QY.js";import{t as w}from"./use-active-assistant-id-512RohBL.js";var T=e(t(),1),E=a(),D=[{value:`sse`,label:`SSE`},{value:`streamable-http`,label:`Streamable HTTP`},{value:`stdio`,label:`Stdio (command)`}];function O({open:e,onClose:t,onAdd:r,isPending:i}){let[a,o]=(0,T.useState)(``),[s,l]=(0,T.useState)(`sse`),[d,p]=(0,T.useState)(``),[m,h]=(0,T.useState)(``),[g,_]=(0,T.useState)(``),v=(0,T.useCallback)(()=>{o(``),l(`sse`),p(``),h(``),_(``)},[]),y=(0,T.useCallback)(()=>{i||(v(),t())},[i,v,t]),b=(0,T.useCallback)(()=>{let e=a.trim();if(!e)return;let t={name:e,transportType:s};if(s===`stdio`){let e=m.trim();if(!e)return;t.command=e;let n=g.trim();n&&(t.args=n.split(/\s+/))}else{let e=d.trim();if(!e)return;t.url=e}r(t)},[a,s,d,m,g,r]),x=s===`stdio`,S=a.trim()&&(x?m.trim():d.trim());return(0,E.jsx)(u.Root,{open:e,onOpenChange:e=>{e||y()},children:(0,E.jsxs)(u.Content,{size:`md`,children:[(0,E.jsxs)(u.Header,{children:[(0,E.jsx)(u.Title,{icon:f,children:`Add MCP Server`}),(0,E.jsx)(u.Description,{children:`Connect to a Model Context Protocol server to extend available tools.`})]}),(0,E.jsx)(u.Body,{children:(0,E.jsxs)(`div`,{className:`space-y-4`,children:[(0,E.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,E.jsx)(`label`,{className:`text-body-small-default text-[var(--content-secondary)]`,htmlFor:`mcp-name`,children:`Server name`}),(0,E.jsx)(c,{id:`mcp-name`,type:`text`,value:a,onChange:e=>o(e.target.value),placeholder:`my-server`,fullWidth:!0,autoFocus:!0})]}),(0,E.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,E.jsx)(`label`,{className:`text-body-small-default text-[var(--content-secondary)]`,htmlFor:`mcp-transport`,children:`Transport`}),(0,E.jsx)(`select`,{id:`mcp-transport`,value:s,onChange:e=>l(e.target.value),className:`w-full rounded-md border border-[var(--border-element)] bg-[var(--surface-lift)] px-3 py-1.5 text-body-medium-default text-[var(--content-default)] outline-none focus:ring-2 focus:ring-[var(--ring)]`,children:D.map(e=>(0,E.jsx)(`option`,{value:e.value,children:e.label},e.value))})]}),x?(0,E.jsxs)(E.Fragment,{children:[(0,E.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,E.jsx)(`label`,{className:`text-body-small-default text-[var(--content-secondary)]`,htmlFor:`mcp-command`,children:`Command`}),(0,E.jsx)(c,{id:`mcp-command`,type:`text`,value:m,onChange:e=>h(e.target.value),placeholder:`npx -y @modelcontextprotocol/server-example`,fullWidth:!0})]}),(0,E.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,E.jsx)(`label`,{className:`text-body-small-default text-[var(--content-secondary)]`,htmlFor:`mcp-args`,children:`Arguments (space-separated)`}),(0,E.jsx)(c,{id:`mcp-args`,type:`text`,value:g,onChange:e=>_(e.target.value),placeholder:`--port 3000`,fullWidth:!0})]})]}):(0,E.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,E.jsx)(`label`,{className:`text-body-small-default text-[var(--content-secondary)]`,htmlFor:`mcp-url`,children:`Server URL`}),(0,E.jsx)(c,{id:`mcp-url`,type:`url`,value:d,onChange:e=>p(e.target.value),placeholder:`https://example.com/mcp`,fullWidth:!0})]})]})}),(0,E.jsxs)(u.Footer,{children:[(0,E.jsx)(n,{variant:`ghost`,onClick:y,disabled:i,children:`Cancel`}),(0,E.jsx)(n,{variant:`primary`,onClick:b,disabled:!S||i,children:i?`Adding...`:`Add Server`})]})]})})}async function k(e){let{data:t,response:n}=await _.get({url:`/v1/assistants/{assistant_id}/internal/mcp/list`,path:{assistant_id:e}});if(!n?.ok)throw Error(`Failed to fetch MCP servers: ${n?.status}`);return t}async function A(e){let{data:t,response:n}=await _.get({url:`/v1/assistants/{assistant_id}/internal/mcp/tools-summary`,path:{assistant_id:e}});if(!n?.ok)throw Error(`Failed to fetch MCP tools summary: ${n?.status}`);return t}async function j(e,t){let{response:n}=await _.post({url:`/v1/assistants/{assistant_id}/internal/mcp/update`,path:{assistant_id:e},body:t});if(!n?.ok)throw Error(`Failed to update MCP server: ${n?.status}`)}async function M(e,t){let{response:n}=await _.post({url:`/v1/assistants/{assistant_id}/internal/mcp/add`,path:{assistant_id:e},body:t});if(!n?.ok)throw Error(`Failed to add MCP server: ${n?.status}`)}async function N(e,t){let{response:n}=await _.post({url:`/v1/assistants/{assistant_id}/internal/mcp/remove`,path:{assistant_id:e},body:{name:t}});if(!n?.ok)throw Error(`Failed to remove MCP server: ${n?.status}`)}async function P(e){let{response:t}=await _.post({url:`/v1/assistants/{assistant_id}/internal/mcp/reload`,path:{assistant_id:e},body:{}});if(!t?.ok)throw Error(`Failed to reload MCP servers: ${t?.status}`)}var F={connected:{icon:h,label:`Connected`,className:`text-[var(--system-positive-strong)]`},"needs-auth":{icon:v,label:`Needs Auth`,className:`text-[var(--system-warning-strong)]`},disabled:{icon:b,label:`Disabled`,className:`text-[var(--content-tertiary)]`}},I={icon:m,label:`Error`,className:`text-[var(--system-negative-strong)]`};function L({server:e,toolsSummary:t,onToggleEnabled:r,onRemove:i,onConfigure:a,isUpdating:s}){let[c,u]=(0,T.useState)(!1),d=F[e.status]??I,f=d.icon,m=(0,T.useCallback)(t=>r(e.id,t),[r,e.id]),h=(0,T.useCallback)(()=>i(e.id),[i,e.id]),_=(0,T.useCallback)(()=>a(e.id),[a,e.id]),v=(0,T.useCallback)(()=>u(e=>!e),[]);return(0,E.jsx)(o.Root,{children:(0,E.jsxs)(o.Body,{children:[(0,E.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,children:[(0,E.jsx)(`div`,{className:`flex min-w-0 flex-1 items-center gap-3`,children:(0,E.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,E.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,E.jsx)(`span`,{className:`truncate text-body-medium-default text-[var(--content-default)]`,children:e.id}),(0,E.jsxs)(`span`,{className:`flex items-center gap-1 text-label-medium-default ${d.className}`,children:[(0,E.jsx)(f,{className:`h-3.5 w-3.5`}),d.label]})]}),(0,E.jsxs)(`div`,{className:`mt-0.5 flex items-center gap-2 text-body-small-default text-[var(--content-tertiary)]`,children:[(0,E.jsx)(`span`,{children:e.transport.type}),t?(0,E.jsxs)(E.Fragment,{children:[(0,E.jsx)(`span`,{"aria-hidden":`true`,children:`·`}),(0,E.jsxs)(`span`,{children:[t.toolCount,` `,t.toolCount===1?`tool`:`tools`]}),(0,E.jsx)(`span`,{"aria-hidden":`true`,children:`·`}),(0,E.jsxs)(`span`,{children:[`~`,t.estimatedTokens.toLocaleString(),` tokens`]})]}):null]})]})}),(0,E.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2`,children:[s?(0,E.jsx)(g,{className:`h-4 w-4 animate-spin text-[var(--content-tertiary)]`}):null,(0,E.jsx)(l,{checked:e.enabled,onChange:m,disabled:s,"aria-label":`${e.enabled?`Disable`:`Enable`} ${e.id}`}),(0,E.jsx)(n,{variant:`ghost`,size:`compact`,onClick:_,tooltip:`Configure`,children:`Configure`}),(0,E.jsx)(n,{variant:`dangerGhost`,size:`compact`,iconOnly:(0,E.jsx)(y,{}),onClick:h,tooltip:`Remove server`,"aria-label":`Remove ${e.id}`})]})]}),t&&t.tools.length>0?(0,E.jsxs)(`div`,{className:`mt-3 border-t border-[var(--border-base)] pt-2`,children:[(0,E.jsxs)(`button`,{type:`button`,onClick:v,className:`flex w-full cursor-pointer items-center gap-1 text-body-small-default text-[var(--content-secondary)] hover:text-[var(--content-default)]`,children:[c?(0,E.jsx)(x,{className:`h-3.5 w-3.5`}):(0,E.jsx)(p,{className:`h-3.5 w-3.5`}),t.toolCount,` registered `,t.toolCount===1?`tool`:`tools`]}),c?(0,E.jsx)(`div`,{className:`mt-2 max-h-60 space-y-1 overflow-y-auto`,children:t.tools.map(e=>(0,E.jsxs)(`div`,{className:`flex items-center justify-between rounded px-2 py-1 text-body-small-default hover:bg-[var(--ghost-hover)]`,children:[(0,E.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,E.jsx)(`span`,{className:`font-medium text-[var(--content-default)]`,children:e.name}),e.description?(0,E.jsx)(`p`,{className:`truncate text-[var(--content-tertiary)]`,children:e.description}):null]}),(0,E.jsxs)(`span`,{className:`shrink-0 text-[var(--content-tertiary)]`,children:[`~`,e.estimatedTokens.toLocaleString(),` tok`]})]},e.name))}):null]}):null]})})}var R=[`low`,`medium`,`high`];function z({server:e,toolsSummary:t,onClose:r,onSave:i,isPending:a}){let[o,s]=(0,T.useState)(`medium`),[l,d]=(0,T.useState)(``),[p,m]=(0,T.useState)(``);(0,T.useEffect)(()=>{e&&(s(e.defaultRiskLevel),d(e.allowedTools?.join(`, `)??``),m(e.blockedTools?.join(`, `)??``))},[e]);let h=(0,T.useCallback)(()=>{if(!e)return;let t=l.trim(),n=p.trim();i(e.id,{name:e.id,defaultRiskLevel:o,allowedTools:t?t.split(`,`).map(e=>e.trim()).filter(Boolean):null,blockedTools:n?n.split(`,`).map(e=>e.trim()).filter(Boolean):null})},[e,o,l,p,i]),g=(0,T.useCallback)(()=>{a||r()},[a,r]);return e?(0,E.jsx)(u.Root,{open:!!e,onOpenChange:e=>{e||g()},children:(0,E.jsxs)(u.Content,{size:`lg`,children:[(0,E.jsxs)(u.Header,{children:[(0,E.jsx)(u.Title,{icon:f,children:e.id}),(0,E.jsxs)(u.Description,{children:[e.transport.type,` transport · `,e.status]})]}),(0,E.jsx)(u.Body,{children:(0,E.jsxs)(`div`,{className:`space-y-5`,children:[(0,E.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,E.jsx)(`label`,{className:`text-body-small-default text-[var(--content-secondary)]`,htmlFor:`mcp-risk`,children:`Default risk level`}),(0,E.jsx)(`select`,{id:`mcp-risk`,value:o,onChange:e=>s(e.target.value),className:`w-full rounded-md border border-[var(--border-element)] bg-[var(--surface-lift)] px-3 py-1.5 text-body-medium-default text-[var(--content-default)] outline-none focus:ring-2 focus:ring-[var(--ring)]`,children:R.map(e=>(0,E.jsx)(`option`,{value:e,children:e.charAt(0).toUpperCase()+e.slice(1)},e))})]}),(0,E.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,E.jsx)(`label`,{className:`text-body-small-default text-[var(--content-secondary)]`,htmlFor:`mcp-allowed`,children:`Allowed tools (comma-separated, leave empty for all)`}),(0,E.jsx)(c,{id:`mcp-allowed`,type:`text`,value:l,onChange:e=>d(e.target.value),placeholder:`tool_a, tool_b`,fullWidth:!0})]}),(0,E.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,E.jsx)(`label`,{className:`text-body-small-default text-[var(--content-secondary)]`,htmlFor:`mcp-blocked`,children:`Blocked tools (comma-separated)`}),(0,E.jsx)(c,{id:`mcp-blocked`,type:`text`,value:p,onChange:e=>m(e.target.value),placeholder:`dangerous_tool`,fullWidth:!0})]}),t&&t.tools.length>0?(0,E.jsxs)(`div`,{className:`space-y-2`,children:[(0,E.jsxs)(`h3`,{className:`text-body-medium-default text-[var(--content-default)]`,children:[`Registered tools (`,t.toolCount,`)`]}),(0,E.jsxs)(`p`,{className:`text-body-small-default text-[var(--content-tertiary)]`,children:[`Total estimated token overhead: ~`,t.estimatedTokens.toLocaleString(),` tokens`]}),(0,E.jsx)(`div`,{className:`max-h-64 overflow-y-auto rounded-lg border border-[var(--border-base)]`,children:(0,E.jsxs)(`table`,{className:`w-full text-body-small-default`,children:[(0,E.jsx)(`thead`,{children:(0,E.jsxs)(`tr`,{className:`border-b border-[var(--border-base)] bg-[var(--surface-base)]`,children:[(0,E.jsx)(`th`,{className:`px-3 py-2 text-left font-medium text-[var(--content-secondary)]`,children:`Tool`}),(0,E.jsx)(`th`,{className:`px-3 py-2 text-left font-medium text-[var(--content-secondary)]`,children:`Description`}),(0,E.jsx)(`th`,{className:`px-3 py-2 text-right font-medium text-[var(--content-secondary)]`,children:`Tokens`})]})}),(0,E.jsx)(`tbody`,{children:t.tools.map(e=>(0,E.jsxs)(`tr`,{className:`border-b border-[var(--border-base)] last:border-b-0`,children:[(0,E.jsx)(`td`,{className:`px-3 py-2 font-medium text-[var(--content-default)]`,children:e.name}),(0,E.jsx)(`td`,{className:`max-w-xs truncate px-3 py-2 text-[var(--content-tertiary)]`,children:e.description||`—`}),(0,E.jsxs)(`td`,{className:`px-3 py-2 text-right text-[var(--content-tertiary)]`,children:[`~`,e.estimatedTokens.toLocaleString()]})]},e.name))})]})})]}):null]})}),(0,E.jsxs)(u.Footer,{children:[(0,E.jsx)(n,{variant:`ghost`,onClick:g,disabled:a,children:`Cancel`}),(0,E.jsx)(n,{variant:`primary`,onClick:h,disabled:a,children:a?`Saving...`:`Save`})]})]})}):null}var B=`mcp-servers`,V=`mcp-tools-summary`;function H(){let e=w(),t=r(),[a,o]=(0,T.useState)(!1),[c,l]=(0,T.useState)(null),[u,p]=(0,T.useState)(null),[m,h]=(0,T.useState)(new Set),[_,v]=(0,T.useState)(!1),[y,b]=(0,T.useState)(!1),[x,D]=(0,T.useState)(!1),[F,I]=(0,T.useState)(!1),{data:R,isLoading:H,isError:U}=i({queryKey:[B,e],queryFn:()=>k(e)}),{data:W}=i({queryKey:[V,e],queryFn:()=>A(e)}),G=(0,T.useCallback)(()=>{t.invalidateQueries({queryKey:[B,e]}),t.invalidateQueries({queryKey:[V,e]})},[t,e]),K=(0,T.useMemo)(()=>{let e=new Map;if(W)for(let t of W.servers)e.set(t.serverId,t);return e},[W]),q=(0,T.useMemo)(()=>!c||!R?null:R.servers.find(e=>e.id===c)??null,[c,R]),J=(0,T.useCallback)(async(t,n)=>{h(e=>new Set(e).add(t));try{await j(e,{name:t,enabled:n}),G()}catch{d.error(`Failed to ${n?`enable`:`disable`} ${t}`)}finally{h(e=>{let n=new Set(e);return n.delete(t),n})}},[e,G]),Y=(0,T.useCallback)(async()=>{if(u){b(!0);try{await N(e,u),G(),d.success(`Removed ${u}`),p(null)}catch{d.error(`Failed to remove ${u}`)}finally{b(!1)}}},[u,e,G]),X=(0,T.useCallback)(async t=>{v(!0);try{await M(e,t),G(),d.success(`Added ${t.name}`),o(!1)}catch{d.error(`Failed to add ${t.name}`)}finally{v(!1)}},[e,G]),Z=(0,T.useCallback)(async(t,n)=>{D(!0);try{await j(e,n),G(),d.success(`Updated ${t}`),l(null)}catch{d.error(`Failed to update ${t}`)}finally{D(!1)}},[e,G]),Q=(0,T.useCallback)(async()=>{I(!0);try{await P(e),G(),d.success(`MCP servers reloaded`)}catch{d.error(`Failed to reload MCP servers`)}finally{I(!1)}},[e,G]),$=R?.servers??[];return(0,E.jsxs)(`div`,{className:`space-y-4`,children:[(0,E.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,E.jsxs)(`div`,{children:[(0,E.jsx)(`h2`,{className:`text-title-small text-[var(--content-default)]`,children:`MCP Servers`}),(0,E.jsx)(`p`,{className:`mt-0.5 text-body-small-default text-[var(--content-tertiary)]`,children:`Manage Model Context Protocol server connections and their registered tools.`})]}),(0,E.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,E.jsx)(n,{variant:`ghost`,size:`compact`,iconOnly:(0,E.jsx)(C,{className:F?`animate-spin`:``}),onClick:Q,disabled:F,tooltip:`Reload all servers`,"aria-label":`Reload MCP servers`}),(0,E.jsx)(n,{variant:`primary`,size:`compact`,leftIcon:(0,E.jsx)(S,{}),onClick:()=>o(!0),children:`Add Server`})]})]}),W?(0,E.jsxs)(`div`,{className:`flex gap-4 text-body-small-default text-[var(--content-tertiary)]`,children:[(0,E.jsxs)(`span`,{children:[W.totalToolCount,` total `,W.totalToolCount===1?`tool`:`tools`]}),(0,E.jsxs)(`span`,{children:[`~`,W.totalEstimatedTokens.toLocaleString(),` total tokens`]})]}):null,H?(0,E.jsxs)(`div`,{className:`flex items-center gap-2 py-6 text-body-medium-lighter text-[var(--content-tertiary)]`,children:[(0,E.jsx)(g,{className:`h-4 w-4 animate-spin`}),(0,E.jsx)(`span`,{children:`Loading MCP servers...`})]}):U?(0,E.jsx)(`p`,{className:`text-body-medium-lighter text-[var(--content-tertiary)]`,children:`Failed to load MCP servers. Check that an assistant is running.`}):$.length===0?(0,E.jsxs)(`div`,{className:`flex flex-col items-center gap-2 rounded-lg border border-dashed border-[var(--border-element)] px-4 py-12 text-center`,children:[(0,E.jsx)(f,{className:`h-6 w-6 text-[var(--content-disabled)]`}),(0,E.jsx)(`p`,{className:`text-body-medium-default text-[var(--content-default)]`,children:`No MCP Servers`}),(0,E.jsx)(`p`,{className:`text-body-small-default text-[var(--content-tertiary)]`,children:`Add an MCP server to extend your assistant with external tools.`})]}):(0,E.jsx)(`div`,{className:`space-y-2`,children:$.map(e=>(0,E.jsx)(L,{server:e,toolsSummary:K.get(e.id),onToggleEnabled:J,onRemove:p,onConfigure:l,isUpdating:m.has(e.id)},e.id))}),(0,E.jsx)(O,{open:a,onClose:()=>o(!1),onAdd:X,isPending:_}),(0,E.jsx)(z,{server:q,toolsSummary:c?K.get(c):void 0,onClose:()=>l(null),onSave:Z,isPending:x}),(0,E.jsx)(s,{open:!!u,title:`Remove MCP Server`,message:`Are you sure you want to remove "${u}"? This will disconnect all tools provided by this server.`,confirmLabel:`Remove`,destructive:!0,isPending:y,onConfirm:Y,onCancel:()=>p(null)})]})}function U(){return(0,E.jsx)(H,{})}export{U as McpPage};
|
|
1
|
+
import{o as e}from"./chunk-jRWAZmH_.js";import{t}from"./react-DJZBPgpf.js";import{t as n}from"./button-D7s2Q_uG.js";import{n as r}from"./QueryClientProvider-DKhXIxGb.js";import{t as i}from"./useQuery-B45lW1Kk.js";import{t as a}from"./jsx-runtime-CVSDxk6A.js";import{t as o}from"./card-BibIM9x3.js";import{t as s}from"./confirm-dialog-DbNUkFt6.js";import{t as c}from"./input-CwdmSRlD.js";import{t as l}from"./toggle-_vZlLDBV.js";import{t as u}from"./modal-DX6UN7b0.js";import{n as d}from"./toast-DLWkiWW6.js";import{t as f}from"./cable-R_YO6j5x.js";import{t as p}from"./chevron-right-HpmykQ8I.js";import{t as m}from"./circle-alert-C5TvMkJV.js";import{t as h}from"./circle-check-D3yd2el7.js";import{t as g}from"./loader-circle-CTs38Ovl.js";import{t as _}from"./client.gen-CWZrHbc9.js";import{Ia as v,Ki as y,fa as b,mo as x,pa as S,ua as C}from"./index-BiN-6kWM.js";import{t as w}from"./use-active-assistant-id-512RohBL.js";var T=e(t(),1),E=a(),D=[{value:`sse`,label:`SSE`},{value:`streamable-http`,label:`Streamable HTTP`},{value:`stdio`,label:`Stdio (command)`}];function O({open:e,onClose:t,onAdd:r,isPending:i}){let[a,o]=(0,T.useState)(``),[s,l]=(0,T.useState)(`sse`),[d,p]=(0,T.useState)(``),[m,h]=(0,T.useState)(``),[g,_]=(0,T.useState)(``),v=(0,T.useCallback)(()=>{o(``),l(`sse`),p(``),h(``),_(``)},[]),y=(0,T.useCallback)(()=>{i||(v(),t())},[i,v,t]),b=(0,T.useCallback)(()=>{let e=a.trim();if(!e)return;let t={name:e,transportType:s};if(s===`stdio`){let e=m.trim();if(!e)return;t.command=e;let n=g.trim();n&&(t.args=n.split(/\s+/))}else{let e=d.trim();if(!e)return;t.url=e}r(t)},[a,s,d,m,g,r]),x=s===`stdio`,S=a.trim()&&(x?m.trim():d.trim());return(0,E.jsx)(u.Root,{open:e,onOpenChange:e=>{e||y()},children:(0,E.jsxs)(u.Content,{size:`md`,children:[(0,E.jsxs)(u.Header,{children:[(0,E.jsx)(u.Title,{icon:f,children:`Add MCP Server`}),(0,E.jsx)(u.Description,{children:`Connect to a Model Context Protocol server to extend available tools.`})]}),(0,E.jsx)(u.Body,{children:(0,E.jsxs)(`div`,{className:`space-y-4`,children:[(0,E.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,E.jsx)(`label`,{className:`text-body-small-default text-[var(--content-secondary)]`,htmlFor:`mcp-name`,children:`Server name`}),(0,E.jsx)(c,{id:`mcp-name`,type:`text`,value:a,onChange:e=>o(e.target.value),placeholder:`my-server`,fullWidth:!0,autoFocus:!0})]}),(0,E.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,E.jsx)(`label`,{className:`text-body-small-default text-[var(--content-secondary)]`,htmlFor:`mcp-transport`,children:`Transport`}),(0,E.jsx)(`select`,{id:`mcp-transport`,value:s,onChange:e=>l(e.target.value),className:`w-full rounded-md border border-[var(--border-element)] bg-[var(--surface-lift)] px-3 py-1.5 text-body-medium-default text-[var(--content-default)] outline-none focus:ring-2 focus:ring-[var(--ring)]`,children:D.map(e=>(0,E.jsx)(`option`,{value:e.value,children:e.label},e.value))})]}),x?(0,E.jsxs)(E.Fragment,{children:[(0,E.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,E.jsx)(`label`,{className:`text-body-small-default text-[var(--content-secondary)]`,htmlFor:`mcp-command`,children:`Command`}),(0,E.jsx)(c,{id:`mcp-command`,type:`text`,value:m,onChange:e=>h(e.target.value),placeholder:`npx -y @modelcontextprotocol/server-example`,fullWidth:!0})]}),(0,E.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,E.jsx)(`label`,{className:`text-body-small-default text-[var(--content-secondary)]`,htmlFor:`mcp-args`,children:`Arguments (space-separated)`}),(0,E.jsx)(c,{id:`mcp-args`,type:`text`,value:g,onChange:e=>_(e.target.value),placeholder:`--port 3000`,fullWidth:!0})]})]}):(0,E.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,E.jsx)(`label`,{className:`text-body-small-default text-[var(--content-secondary)]`,htmlFor:`mcp-url`,children:`Server URL`}),(0,E.jsx)(c,{id:`mcp-url`,type:`url`,value:d,onChange:e=>p(e.target.value),placeholder:`https://example.com/mcp`,fullWidth:!0})]})]})}),(0,E.jsxs)(u.Footer,{children:[(0,E.jsx)(n,{variant:`ghost`,onClick:y,disabled:i,children:`Cancel`}),(0,E.jsx)(n,{variant:`primary`,onClick:b,disabled:!S||i,children:i?`Adding...`:`Add Server`})]})]})})}async function k(e){let{data:t,response:n}=await _.get({url:`/v1/assistants/{assistant_id}/internal/mcp/list`,path:{assistant_id:e}});if(!n?.ok)throw Error(`Failed to fetch MCP servers: ${n?.status}`);return t}async function A(e){let{data:t,response:n}=await _.get({url:`/v1/assistants/{assistant_id}/internal/mcp/tools-summary`,path:{assistant_id:e}});if(!n?.ok)throw Error(`Failed to fetch MCP tools summary: ${n?.status}`);return t}async function j(e,t){let{response:n}=await _.post({url:`/v1/assistants/{assistant_id}/internal/mcp/update`,path:{assistant_id:e},body:t});if(!n?.ok)throw Error(`Failed to update MCP server: ${n?.status}`)}async function M(e,t){let{response:n}=await _.post({url:`/v1/assistants/{assistant_id}/internal/mcp/add`,path:{assistant_id:e},body:t});if(!n?.ok)throw Error(`Failed to add MCP server: ${n?.status}`)}async function N(e,t){let{response:n}=await _.post({url:`/v1/assistants/{assistant_id}/internal/mcp/remove`,path:{assistant_id:e},body:{name:t}});if(!n?.ok)throw Error(`Failed to remove MCP server: ${n?.status}`)}async function P(e){let{response:t}=await _.post({url:`/v1/assistants/{assistant_id}/internal/mcp/reload`,path:{assistant_id:e},body:{}});if(!t?.ok)throw Error(`Failed to reload MCP servers: ${t?.status}`)}var F={connected:{icon:h,label:`Connected`,className:`text-[var(--system-positive-strong)]`},"needs-auth":{icon:v,label:`Needs Auth`,className:`text-[var(--system-warning-strong)]`},disabled:{icon:b,label:`Disabled`,className:`text-[var(--content-tertiary)]`}},I={icon:m,label:`Error`,className:`text-[var(--system-negative-strong)]`};function L({server:e,toolsSummary:t,onToggleEnabled:r,onRemove:i,onConfigure:a,isUpdating:s}){let[c,u]=(0,T.useState)(!1),d=F[e.status]??I,f=d.icon,m=(0,T.useCallback)(t=>r(e.id,t),[r,e.id]),h=(0,T.useCallback)(()=>i(e.id),[i,e.id]),_=(0,T.useCallback)(()=>a(e.id),[a,e.id]),v=(0,T.useCallback)(()=>u(e=>!e),[]);return(0,E.jsx)(o.Root,{children:(0,E.jsxs)(o.Body,{children:[(0,E.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,children:[(0,E.jsx)(`div`,{className:`flex min-w-0 flex-1 items-center gap-3`,children:(0,E.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,E.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,E.jsx)(`span`,{className:`truncate text-body-medium-default text-[var(--content-default)]`,children:e.id}),(0,E.jsxs)(`span`,{className:`flex items-center gap-1 text-label-medium-default ${d.className}`,children:[(0,E.jsx)(f,{className:`h-3.5 w-3.5`}),d.label]})]}),(0,E.jsxs)(`div`,{className:`mt-0.5 flex items-center gap-2 text-body-small-default text-[var(--content-tertiary)]`,children:[(0,E.jsx)(`span`,{children:e.transport.type}),t?(0,E.jsxs)(E.Fragment,{children:[(0,E.jsx)(`span`,{"aria-hidden":`true`,children:`·`}),(0,E.jsxs)(`span`,{children:[t.toolCount,` `,t.toolCount===1?`tool`:`tools`]}),(0,E.jsx)(`span`,{"aria-hidden":`true`,children:`·`}),(0,E.jsxs)(`span`,{children:[`~`,t.estimatedTokens.toLocaleString(),` tokens`]})]}):null]})]})}),(0,E.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2`,children:[s?(0,E.jsx)(g,{className:`h-4 w-4 animate-spin text-[var(--content-tertiary)]`}):null,(0,E.jsx)(l,{checked:e.enabled,onChange:m,disabled:s,"aria-label":`${e.enabled?`Disable`:`Enable`} ${e.id}`}),(0,E.jsx)(n,{variant:`ghost`,size:`compact`,onClick:_,tooltip:`Configure`,children:`Configure`}),(0,E.jsx)(n,{variant:`dangerGhost`,size:`compact`,iconOnly:(0,E.jsx)(y,{}),onClick:h,tooltip:`Remove server`,"aria-label":`Remove ${e.id}`})]})]}),t&&t.tools.length>0?(0,E.jsxs)(`div`,{className:`mt-3 border-t border-[var(--border-base)] pt-2`,children:[(0,E.jsxs)(`button`,{type:`button`,onClick:v,className:`flex w-full cursor-pointer items-center gap-1 text-body-small-default text-[var(--content-secondary)] hover:text-[var(--content-default)]`,children:[c?(0,E.jsx)(x,{className:`h-3.5 w-3.5`}):(0,E.jsx)(p,{className:`h-3.5 w-3.5`}),t.toolCount,` registered `,t.toolCount===1?`tool`:`tools`]}),c?(0,E.jsx)(`div`,{className:`mt-2 max-h-60 space-y-1 overflow-y-auto`,children:t.tools.map(e=>(0,E.jsxs)(`div`,{className:`flex items-center justify-between rounded px-2 py-1 text-body-small-default hover:bg-[var(--ghost-hover)]`,children:[(0,E.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,E.jsx)(`span`,{className:`font-medium text-[var(--content-default)]`,children:e.name}),e.description?(0,E.jsx)(`p`,{className:`truncate text-[var(--content-tertiary)]`,children:e.description}):null]}),(0,E.jsxs)(`span`,{className:`shrink-0 text-[var(--content-tertiary)]`,children:[`~`,e.estimatedTokens.toLocaleString(),` tok`]})]},e.name))}):null]}):null]})})}var R=[`low`,`medium`,`high`];function z({server:e,toolsSummary:t,onClose:r,onSave:i,isPending:a}){let[o,s]=(0,T.useState)(`medium`),[l,d]=(0,T.useState)(``),[p,m]=(0,T.useState)(``);(0,T.useEffect)(()=>{e&&(s(e.defaultRiskLevel),d(e.allowedTools?.join(`, `)??``),m(e.blockedTools?.join(`, `)??``))},[e]);let h=(0,T.useCallback)(()=>{if(!e)return;let t=l.trim(),n=p.trim();i(e.id,{name:e.id,defaultRiskLevel:o,allowedTools:t?t.split(`,`).map(e=>e.trim()).filter(Boolean):null,blockedTools:n?n.split(`,`).map(e=>e.trim()).filter(Boolean):null})},[e,o,l,p,i]),g=(0,T.useCallback)(()=>{a||r()},[a,r]);return e?(0,E.jsx)(u.Root,{open:!!e,onOpenChange:e=>{e||g()},children:(0,E.jsxs)(u.Content,{size:`lg`,children:[(0,E.jsxs)(u.Header,{children:[(0,E.jsx)(u.Title,{icon:f,children:e.id}),(0,E.jsxs)(u.Description,{children:[e.transport.type,` transport · `,e.status]})]}),(0,E.jsx)(u.Body,{children:(0,E.jsxs)(`div`,{className:`space-y-5`,children:[(0,E.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,E.jsx)(`label`,{className:`text-body-small-default text-[var(--content-secondary)]`,htmlFor:`mcp-risk`,children:`Default risk level`}),(0,E.jsx)(`select`,{id:`mcp-risk`,value:o,onChange:e=>s(e.target.value),className:`w-full rounded-md border border-[var(--border-element)] bg-[var(--surface-lift)] px-3 py-1.5 text-body-medium-default text-[var(--content-default)] outline-none focus:ring-2 focus:ring-[var(--ring)]`,children:R.map(e=>(0,E.jsx)(`option`,{value:e,children:e.charAt(0).toUpperCase()+e.slice(1)},e))})]}),(0,E.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,E.jsx)(`label`,{className:`text-body-small-default text-[var(--content-secondary)]`,htmlFor:`mcp-allowed`,children:`Allowed tools (comma-separated, leave empty for all)`}),(0,E.jsx)(c,{id:`mcp-allowed`,type:`text`,value:l,onChange:e=>d(e.target.value),placeholder:`tool_a, tool_b`,fullWidth:!0})]}),(0,E.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,E.jsx)(`label`,{className:`text-body-small-default text-[var(--content-secondary)]`,htmlFor:`mcp-blocked`,children:`Blocked tools (comma-separated)`}),(0,E.jsx)(c,{id:`mcp-blocked`,type:`text`,value:p,onChange:e=>m(e.target.value),placeholder:`dangerous_tool`,fullWidth:!0})]}),t&&t.tools.length>0?(0,E.jsxs)(`div`,{className:`space-y-2`,children:[(0,E.jsxs)(`h3`,{className:`text-body-medium-default text-[var(--content-default)]`,children:[`Registered tools (`,t.toolCount,`)`]}),(0,E.jsxs)(`p`,{className:`text-body-small-default text-[var(--content-tertiary)]`,children:[`Total estimated token overhead: ~`,t.estimatedTokens.toLocaleString(),` tokens`]}),(0,E.jsx)(`div`,{className:`max-h-64 overflow-y-auto rounded-lg border border-[var(--border-base)]`,children:(0,E.jsxs)(`table`,{className:`w-full text-body-small-default`,children:[(0,E.jsx)(`thead`,{children:(0,E.jsxs)(`tr`,{className:`border-b border-[var(--border-base)] bg-[var(--surface-base)]`,children:[(0,E.jsx)(`th`,{className:`px-3 py-2 text-left font-medium text-[var(--content-secondary)]`,children:`Tool`}),(0,E.jsx)(`th`,{className:`px-3 py-2 text-left font-medium text-[var(--content-secondary)]`,children:`Description`}),(0,E.jsx)(`th`,{className:`px-3 py-2 text-right font-medium text-[var(--content-secondary)]`,children:`Tokens`})]})}),(0,E.jsx)(`tbody`,{children:t.tools.map(e=>(0,E.jsxs)(`tr`,{className:`border-b border-[var(--border-base)] last:border-b-0`,children:[(0,E.jsx)(`td`,{className:`px-3 py-2 font-medium text-[var(--content-default)]`,children:e.name}),(0,E.jsx)(`td`,{className:`max-w-xs truncate px-3 py-2 text-[var(--content-tertiary)]`,children:e.description||`—`}),(0,E.jsxs)(`td`,{className:`px-3 py-2 text-right text-[var(--content-tertiary)]`,children:[`~`,e.estimatedTokens.toLocaleString()]})]},e.name))})]})})]}):null]})}),(0,E.jsxs)(u.Footer,{children:[(0,E.jsx)(n,{variant:`ghost`,onClick:g,disabled:a,children:`Cancel`}),(0,E.jsx)(n,{variant:`primary`,onClick:h,disabled:a,children:a?`Saving...`:`Save`})]})]})}):null}var B=`mcp-servers`,V=`mcp-tools-summary`;function H(){let e=w(),t=r(),[a,o]=(0,T.useState)(!1),[c,l]=(0,T.useState)(null),[u,p]=(0,T.useState)(null),[m,h]=(0,T.useState)(new Set),[_,v]=(0,T.useState)(!1),[y,b]=(0,T.useState)(!1),[x,D]=(0,T.useState)(!1),[F,I]=(0,T.useState)(!1),{data:R,isLoading:H,isError:U}=i({queryKey:[B,e],queryFn:()=>k(e)}),{data:W}=i({queryKey:[V,e],queryFn:()=>A(e)}),G=(0,T.useCallback)(()=>{t.invalidateQueries({queryKey:[B,e]}),t.invalidateQueries({queryKey:[V,e]})},[t,e]),K=(0,T.useMemo)(()=>{let e=new Map;if(W)for(let t of W.servers)e.set(t.serverId,t);return e},[W]),q=(0,T.useMemo)(()=>!c||!R?null:R.servers.find(e=>e.id===c)??null,[c,R]),J=(0,T.useCallback)(async(t,n)=>{h(e=>new Set(e).add(t));try{await j(e,{name:t,enabled:n}),G()}catch{d.error(`Failed to ${n?`enable`:`disable`} ${t}`)}finally{h(e=>{let n=new Set(e);return n.delete(t),n})}},[e,G]),Y=(0,T.useCallback)(async()=>{if(u){b(!0);try{await N(e,u),G(),d.success(`Removed ${u}`),p(null)}catch{d.error(`Failed to remove ${u}`)}finally{b(!1)}}},[u,e,G]),X=(0,T.useCallback)(async t=>{v(!0);try{await M(e,t),G(),d.success(`Added ${t.name}`),o(!1)}catch{d.error(`Failed to add ${t.name}`)}finally{v(!1)}},[e,G]),Z=(0,T.useCallback)(async(t,n)=>{D(!0);try{await j(e,n),G(),d.success(`Updated ${t}`),l(null)}catch{d.error(`Failed to update ${t}`)}finally{D(!1)}},[e,G]),Q=(0,T.useCallback)(async()=>{I(!0);try{await P(e),G(),d.success(`MCP servers reloaded`)}catch{d.error(`Failed to reload MCP servers`)}finally{I(!1)}},[e,G]),$=R?.servers??[];return(0,E.jsxs)(`div`,{className:`space-y-4`,children:[(0,E.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,E.jsxs)(`div`,{children:[(0,E.jsx)(`h2`,{className:`text-title-small text-[var(--content-default)]`,children:`MCP Servers`}),(0,E.jsx)(`p`,{className:`mt-0.5 text-body-small-default text-[var(--content-tertiary)]`,children:`Manage Model Context Protocol server connections and their registered tools.`})]}),(0,E.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,E.jsx)(n,{variant:`ghost`,size:`compact`,iconOnly:(0,E.jsx)(C,{className:F?`animate-spin`:``}),onClick:Q,disabled:F,tooltip:`Reload all servers`,"aria-label":`Reload MCP servers`}),(0,E.jsx)(n,{variant:`primary`,size:`compact`,leftIcon:(0,E.jsx)(S,{}),onClick:()=>o(!0),children:`Add Server`})]})]}),W?(0,E.jsxs)(`div`,{className:`flex gap-4 text-body-small-default text-[var(--content-tertiary)]`,children:[(0,E.jsxs)(`span`,{children:[W.totalToolCount,` total `,W.totalToolCount===1?`tool`:`tools`]}),(0,E.jsxs)(`span`,{children:[`~`,W.totalEstimatedTokens.toLocaleString(),` total tokens`]})]}):null,H?(0,E.jsxs)(`div`,{className:`flex items-center gap-2 py-6 text-body-medium-lighter text-[var(--content-tertiary)]`,children:[(0,E.jsx)(g,{className:`h-4 w-4 animate-spin`}),(0,E.jsx)(`span`,{children:`Loading MCP servers...`})]}):U?(0,E.jsx)(`p`,{className:`text-body-medium-lighter text-[var(--content-tertiary)]`,children:`Failed to load MCP servers. Check that an assistant is running.`}):$.length===0?(0,E.jsxs)(`div`,{className:`flex flex-col items-center gap-2 rounded-lg border border-dashed border-[var(--border-element)] px-4 py-12 text-center`,children:[(0,E.jsx)(f,{className:`h-6 w-6 text-[var(--content-disabled)]`}),(0,E.jsx)(`p`,{className:`text-body-medium-default text-[var(--content-default)]`,children:`No MCP Servers`}),(0,E.jsx)(`p`,{className:`text-body-small-default text-[var(--content-tertiary)]`,children:`Add an MCP server to extend your assistant with external tools.`})]}):(0,E.jsx)(`div`,{className:`space-y-2`,children:$.map(e=>(0,E.jsx)(L,{server:e,toolsSummary:K.get(e.id),onToggleEnabled:J,onRemove:p,onConfigure:l,isUpdating:m.has(e.id)},e.id))}),(0,E.jsx)(O,{open:a,onClose:()=>o(!1),onAdd:X,isPending:_}),(0,E.jsx)(z,{server:q,toolsSummary:c?K.get(c):void 0,onClose:()=>l(null),onSave:Z,isPending:x}),(0,E.jsx)(s,{open:!!u,title:`Remove MCP Server`,message:`Are you sure you want to remove "${u}"? This will disconnect all tools provided by this server.`,confirmLabel:`Remove`,destructive:!0,isPending:y,onConfirm:Y,onCancel:()=>p(null)})]})}function U(){return(0,E.jsx)(H,{})}export{U as McpPage};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{o as e}from"./chunk-jRWAZmH_.js";import{t}from"./react-DJZBPgpf.js";import{t as n}from"./useQuery-B45lW1Kk.js";import{t as r}from"./useMutation-Lj4VunQV.js";import{t as i}from"./jsx-runtime-CVSDxk6A.js";import{t as a}from"./card-BibIM9x3.js";import"./src-D6Nu2Lol.js";import{Qt as o}from"./sdk.gen-Bew9wO5C.js";import{G as s,W as c,f as l}from"./react-query.gen-DdB0sQgj.js";import{o as u}from"./auth-store-CrTf0uWL.js";import{t as d}from"./client-feature-flag-store-ivPVcKfH.js";import{wt as f}from"./index-LP2PV_QY.js";import{t as p}from"./use-active-assistant-id-512RohBL.js";var m=e(t(),1),h=class extends Error{status;constructor(e,t){super(t),this.name=`SimulateMemoryRouterError`,this.status=e}};async function g(e,t,n){let{data:r,response:i}=await o({path:{assistant_id:e},body:t,signal:n,throwOnError:!1}),a=i?await i.clone().text().catch(()=>``):``;if(!i||!i.ok)throw new h(i?.status??0,a||i?.statusText||`Failed to simulate memory router`);if(!r)throw new h(i.status,`Empty response from memory router simulator endpoint`);return{response:r,rawRequest:JSON.stringify(t,null,2),rawResponse:_(a)}}function _(e){if(e.length===0)return e;try{return JSON.stringify(JSON.parse(e),null,2)}catch{return e}}function v(e){return r({mutationFn:async t=>{if(!e)throw new h(0,`Missing assistantId`);return g(e,t)}})}function y(e){return n({...l({path:{assistant_id:e}}),enabled:!!e,staleTime:6e4})}function b(e){return n({...s({path:{assistant_id:e}}),enabled:!!e,staleTime:1440*60*1e3})}function x(e){return n({...c({path:{assistant_id:e}}),enabled:!!e,staleTime:1/0})}var S=i();function C(){let e=f(),t=u(),n=d.use.memoryRouterPlayground();return t?(0,S.jsx)($,{children:`Loading…`}):!e||!n?(0,S.jsx)($,{children:`Memory router playground is not available.`}):(0,S.jsx)(T,{})}var w={tier1:``,tier2:``,batch:``,profile:``,customPrompt:``};function T(){let e=p(),t=v(e),n=v(e),r=y(e),i=b(e),a=x(e),[o,s]=(0,m.useState)(``),[c,l]=(0,m.useState)([{assistantMessage:``,userMessage:``}]),[u,d]=(0,m.useState)(!1);(0,m.useEffect)(()=>{if(u)return;let e=a.data?.nowText;typeof e==`string`&&o===``&&s(e)},[a.data?.nowText,o,u]);let[f,h]=(0,m.useState)(w),[g,_]=(0,m.useState)(w),[C,T]=(0,m.useState)(null),[D,k]=(0,m.useState)(null),j=c[c.length-1].userMessage,M=e=>{let r=e===`A`?f:g,i=e===`A`?T:k,a=e===`A`?t:n;i(null);let s;try{s=E(r)}catch(e){i(e instanceof Error?e.message:`Invalid override input`);return}let l=r.profile.trim().length>0?r.profile:void 0,u=r.customPrompt.trim().length>0?r.customPrompt:void 0,d=c.map((e,t)=>t===c.length-1?{...e,userMessage:e.userMessage.trim()}:e);a.mutate({recentTurnPairs:d,nowText:o,...s?{configOverrides:s}:{},...l===void 0?{}:{profileOverride:l},...u===void 0?{}:{routerPromptOverride:u}})},N=()=>{M(`A`),M(`B`)},P=j.trim().length>0,I=P&&!t.isPending,L=P&&!n.isPending;return(0,S.jsx)(`div`,{className:`flex h-full min-h-0 flex-col overflow-y-auto`,children:(0,S.jsxs)(`div`,{className:`mx-auto flex w-full max-w-[1280px] flex-col gap-6 p-6`,children:[(0,S.jsx)(ee,{}),(0,S.jsx)(O,{nowText:o,onNowTextChange:e=>{d(!0),s(e)},onReloadNowText:()=>{let e=a.data?.nowText;typeof e==`string`&&(s(e),d(!1))},nowTextLoading:a.isLoading,pairs:c,onPairsChange:l}),(0,S.jsxs)(`div`,{className:`grid grid-cols-1 gap-4 lg:grid-cols-2`,children:[(0,S.jsx)(A,{paneId:`A`,overrides:f,onChange:h,onRun:()=>M(`A`),canRun:I,isRunning:t.isPending,profiles:r.data?.profiles??[],activeProfile:r.data?.activeProfile??null,defaultPromptTemplate:i.data?.template??``}),(0,S.jsx)(A,{paneId:`B`,overrides:g,onChange:_,onRun:()=>M(`B`),canRun:L,isRunning:n.isPending,profiles:r.data?.profiles??[],activeProfile:r.data?.activeProfile??null,defaultPromptTemplate:i.data?.template??``})]}),(0,S.jsx)(`div`,{className:`flex justify-end`,children:(0,S.jsx)(te,{onClick:N,disabled:!P||t.isPending||n.isPending,isRunning:t.isPending||n.isPending})}),(0,S.jsx)(ne,{visible:t.data!==void 0&&n.data!==void 0}),(0,S.jsxs)(`div`,{className:`grid grid-cols-1 gap-4 lg:grid-cols-2`,children:[(0,S.jsx)(F,{paneId:`A`,userMessage:j,mutation:t,otherResult:n.data?.response,validation:C}),(0,S.jsx)(F,{paneId:`B`,userMessage:j,mutation:n,otherResult:t.data?.response,validation:D})]})]})})}function E(e){let t={...D(`tier1_size`,e.tier1),...D(`tier2_size`,e.tier2),...D(`batch_size`,e.batch)};return Object.keys(t).length===0?void 0:t}function D(e,t){let n=t.trim();if(n===``)return{};if(n===`null`)return{[e]:null};let r=Number(n);if(!Number.isInteger(r)||r<1)throw Error(`${e} must be a positive integer or 'null' (got "${n}")`);return{[e]:r}}function ee(){return(0,S.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,S.jsx)(`h1`,{className:`text-body-large-default`,style:{color:`var(--content-default)`},children:`Memory Router Playground`}),(0,S.jsxs)(`p`,{className:`text-body-medium-lighter`,style:{color:`var(--content-secondary)`},children:[`Dry-run the v4 router with custom tier/batch overrides. Read-only — no rows are written to `,(0,S.jsx)(`code`,{children:`memory_v2_injection_events`}),` or`,` `,(0,S.jsx)(`code`,{children:`memory_v2_activation_logs`}),`, and no activation state is mutated. Leave an override blank to inherit the live config value; enter`,` `,(0,S.jsx)(`code`,{children:`null`}),` to explicitly disable a tier.`]})]})}function O({nowText:e,onNowTextChange:t,onReloadNowText:n,nowTextLoading:r,pairs:i,onPairsChange:o}){let s=(e,t)=>{o(i.map((n,r)=>r===e?{...n,...t}:n))},c=()=>{o([{assistantMessage:``,userMessage:``},...i])},l=e=>{e!==i.length-1&&o(i.filter((t,n)=>n!==e))};return(0,S.jsx)(a,{children:(0,S.jsxs)(`div`,{className:`flex flex-col gap-4 p-4`,children:[(0,S.jsx)(`span`,{className:`text-body-medium-default`,style:{color:`var(--content-default)`},children:`Conversational context (shared by both panes)`}),(0,S.jsx)(k,{id:`memory-router-playground-now`,label:`<now> block`,value:e,onChange:t,rows:6,monospace:!0,placeholder:r?`Loading current NOW.md…`:`Pre-filled with the live NOW.md. Edit to test alternate states.`,trailing:(0,S.jsx)(`button`,{type:`button`,onClick:n,disabled:r,className:`rounded px-2 py-1 text-label-default`,style:{background:`var(--surface-overlay)`,color:`var(--content-secondary)`,border:`none`,cursor:r?`not-allowed`:`pointer`},children:`Reload live NOW.md`})}),(0,S.jsxs)(`div`,{className:`flex items-baseline justify-between`,children:[(0,S.jsx)(`span`,{className:`text-label-default`,style:{color:`var(--content-secondary)`},children:`Recent (assistant, user) pairs · oldest first`}),(0,S.jsx)(`button`,{type:`button`,onClick:c,className:`rounded px-2 py-1 text-label-default`,style:{background:`var(--surface-overlay)`,color:`var(--content-secondary)`,border:`none`,cursor:`pointer`},children:`+ Add older pair`})]}),i.map((e,t)=>{let n=t===i.length-1;return(0,S.jsxs)(`div`,{className:`flex flex-col gap-2 rounded-md border p-3`,style:{borderColor:`var(--border-base)`,background:`var(--surface-base)`},children:[(0,S.jsxs)(`div`,{className:`flex items-baseline justify-between`,children:[(0,S.jsxs)(`span`,{className:`text-label-default`,style:{color:`var(--content-secondary)`},children:[`Pair `,t+1,` of `,i.length,n?` · most recent`:``]}),!n&&(0,S.jsx)(`button`,{type:`button`,onClick:()=>l(t),className:`rounded px-2 py-1 text-label-default`,style:{background:`transparent`,color:`var(--system-negative-strong)`,border:`none`,cursor:`pointer`},children:`Remove`})]}),(0,S.jsx)(k,{id:`memory-router-playground-pair-${t}-assistant`,label:`[assistant]: reply`,value:e.assistantMessage,onChange:e=>s(t,{assistantMessage:e}),rows:3,placeholder:t===0&&i.length===1?`Leave blank for a first-turn scenario.`:`Assistant's reply that came before the user message below.`}),(0,S.jsx)(k,{id:`memory-router-playground-pair-${t}-user`,label:n?`Just-arrived [user]: message`:`[user]: message`,value:e.userMessage,onChange:e=>s(t,{userMessage:e}),rows:3,placeholder:n?`e.g. what should we ship next`:`User's message.`,required:n})]},t)})]})})}function k({id:e,label:t,value:n,onChange:r,rows:i,placeholder:a,monospace:o,trailing:s,required:c}){return(0,S.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,S.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,S.jsxs)(`label`,{htmlFor:e,className:`text-label-default`,style:{color:`var(--content-secondary)`},children:[t,c?` *`:``]}),s]}),(0,S.jsx)(`textarea`,{id:e,value:n,onChange:e=>r(e.target.value),rows:i,placeholder:a,className:`rounded-md border px-3 py-2 text-body-medium-default`,style:{borderColor:`var(--border-base)`,background:`var(--surface-base)`,color:`var(--content-default)`,resize:`vertical`,...o?{fontFamily:`ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace`}:{}}})]})}function A({paneId:e,overrides:t,onChange:n,onRun:r,canRun:i,isRunning:o,profiles:s,activeProfile:c,defaultPromptTemplate:l}){return(0,S.jsx)(a,{children:(0,S.jsxs)(`div`,{className:`flex flex-col gap-4 p-4`,children:[(0,S.jsxs)(`div`,{className:`text-body-medium-default`,style:{color:q(e)},children:[`Config `,e]}),(0,S.jsxs)(`div`,{className:`grid grid-cols-1 gap-3 sm:grid-cols-3`,children:[(0,S.jsx)(N,{paneId:e,label:`tier1_size`,value:t.tier1,onChange:e=>n({...t,tier1:e})}),(0,S.jsx)(N,{paneId:e,label:`tier2_size`,value:t.tier2,onChange:e=>n({...t,tier2:e})}),(0,S.jsx)(N,{paneId:e,label:`batch_size`,value:t.batch,onChange:e=>n({...t,batch:e})})]}),(0,S.jsx)(M,{paneId:e,value:t.profile,onChange:e=>n({...t,profile:e}),profiles:s,activeProfile:c}),(0,S.jsx)(j,{paneId:e,value:t.customPrompt,onChange:e=>n({...t,customPrompt:e}),defaultTemplate:l}),(0,S.jsx)(`div`,{className:`flex justify-end`,children:(0,S.jsx)(`button`,{type:`button`,onClick:r,disabled:!i,className:`rounded-md px-4 py-2 text-body-medium-default transition-colors`,style:{background:i?`var(--system-positive-strong)`:`var(--surface-overlay)`,color:i?`var(--content-on-positive)`:`var(--content-disabled)`,border:`none`,cursor:i?`pointer`:`not-allowed`},children:o?`Running…`:`Run ${e}`})})]})})}function j({paneId:e,value:t,onChange:n,defaultTemplate:r}){let[i,a]=(0,m.useState)(!1),o=`memory-router-playground-${e}-prompt`,s=t.trim().length>0;return(0,S.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,S.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,S.jsxs)(`button`,{type:`button`,onClick:()=>a(e=>!e),className:`text-label-default`,style:{color:`var(--content-secondary)`,background:`transparent`,border:`none`,padding:0,cursor:`pointer`,textAlign:`left`},children:[i?`▾`:`▸`,` System prompt`,` `,(0,S.jsxs)(`span`,{style:{color:`var(--content-tertiary)`},children:[`(`,s?`custom`:`bundled`,`)`]})]}),i&&(0,S.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,S.jsx)(`button`,{type:`button`,onClick:()=>n(r),disabled:r.length===0,className:`rounded px-2 py-1 text-label-default`,style:{background:`var(--surface-overlay)`,color:`var(--content-secondary)`,border:`none`,cursor:r.length===0?`not-allowed`:`pointer`},children:`Load default`}),(0,S.jsx)(`button`,{type:`button`,onClick:()=>n(``),disabled:!s,className:`rounded px-2 py-1 text-label-default`,style:{background:`var(--surface-overlay)`,color:`var(--content-secondary)`,border:`none`,cursor:s?`pointer`:`not-allowed`},children:`Reset`})]})]}),i&&(0,S.jsx)(`textarea`,{id:o,value:t,onChange:e=>n(e.target.value),rows:12,placeholder:`Custom router system prompt. Available placeholders:
|
|
1
|
+
import{o as e}from"./chunk-jRWAZmH_.js";import{t}from"./react-DJZBPgpf.js";import{t as n}from"./useQuery-B45lW1Kk.js";import{t as r}from"./useMutation-Lj4VunQV.js";import{t as i}from"./jsx-runtime-CVSDxk6A.js";import{t as a}from"./card-BibIM9x3.js";import"./src-D6Nu2Lol.js";import{Qt as o}from"./sdk.gen-Bew9wO5C.js";import{G as s,W as c,f as l}from"./react-query.gen-DdB0sQgj.js";import{o as u}from"./auth-store-CrTf0uWL.js";import{t as d}from"./client-feature-flag-store-ivPVcKfH.js";import{wt as f}from"./index-BiN-6kWM.js";import{t as p}from"./use-active-assistant-id-512RohBL.js";var m=e(t(),1),h=class extends Error{status;constructor(e,t){super(t),this.name=`SimulateMemoryRouterError`,this.status=e}};async function g(e,t,n){let{data:r,response:i}=await o({path:{assistant_id:e},body:t,signal:n,throwOnError:!1}),a=i?await i.clone().text().catch(()=>``):``;if(!i||!i.ok)throw new h(i?.status??0,a||i?.statusText||`Failed to simulate memory router`);if(!r)throw new h(i.status,`Empty response from memory router simulator endpoint`);return{response:r,rawRequest:JSON.stringify(t,null,2),rawResponse:_(a)}}function _(e){if(e.length===0)return e;try{return JSON.stringify(JSON.parse(e),null,2)}catch{return e}}function v(e){return r({mutationFn:async t=>{if(!e)throw new h(0,`Missing assistantId`);return g(e,t)}})}function y(e){return n({...l({path:{assistant_id:e}}),enabled:!!e,staleTime:6e4})}function b(e){return n({...s({path:{assistant_id:e}}),enabled:!!e,staleTime:1440*60*1e3})}function x(e){return n({...c({path:{assistant_id:e}}),enabled:!!e,staleTime:1/0})}var S=i();function C(){let e=f(),t=u(),n=d.use.memoryRouterPlayground();return t?(0,S.jsx)($,{children:`Loading…`}):!e||!n?(0,S.jsx)($,{children:`Memory router playground is not available.`}):(0,S.jsx)(T,{})}var w={tier1:``,tier2:``,batch:``,profile:``,customPrompt:``};function T(){let e=p(),t=v(e),n=v(e),r=y(e),i=b(e),a=x(e),[o,s]=(0,m.useState)(``),[c,l]=(0,m.useState)([{assistantMessage:``,userMessage:``}]),[u,d]=(0,m.useState)(!1);(0,m.useEffect)(()=>{if(u)return;let e=a.data?.nowText;typeof e==`string`&&o===``&&s(e)},[a.data?.nowText,o,u]);let[f,h]=(0,m.useState)(w),[g,_]=(0,m.useState)(w),[C,T]=(0,m.useState)(null),[D,k]=(0,m.useState)(null),j=c[c.length-1].userMessage,M=e=>{let r=e===`A`?f:g,i=e===`A`?T:k,a=e===`A`?t:n;i(null);let s;try{s=E(r)}catch(e){i(e instanceof Error?e.message:`Invalid override input`);return}let l=r.profile.trim().length>0?r.profile:void 0,u=r.customPrompt.trim().length>0?r.customPrompt:void 0,d=c.map((e,t)=>t===c.length-1?{...e,userMessage:e.userMessage.trim()}:e);a.mutate({recentTurnPairs:d,nowText:o,...s?{configOverrides:s}:{},...l===void 0?{}:{profileOverride:l},...u===void 0?{}:{routerPromptOverride:u}})},N=()=>{M(`A`),M(`B`)},P=j.trim().length>0,I=P&&!t.isPending,L=P&&!n.isPending;return(0,S.jsx)(`div`,{className:`flex h-full min-h-0 flex-col overflow-y-auto`,children:(0,S.jsxs)(`div`,{className:`mx-auto flex w-full max-w-[1280px] flex-col gap-6 p-6`,children:[(0,S.jsx)(ee,{}),(0,S.jsx)(O,{nowText:o,onNowTextChange:e=>{d(!0),s(e)},onReloadNowText:()=>{let e=a.data?.nowText;typeof e==`string`&&(s(e),d(!1))},nowTextLoading:a.isLoading,pairs:c,onPairsChange:l}),(0,S.jsxs)(`div`,{className:`grid grid-cols-1 gap-4 lg:grid-cols-2`,children:[(0,S.jsx)(A,{paneId:`A`,overrides:f,onChange:h,onRun:()=>M(`A`),canRun:I,isRunning:t.isPending,profiles:r.data?.profiles??[],activeProfile:r.data?.activeProfile??null,defaultPromptTemplate:i.data?.template??``}),(0,S.jsx)(A,{paneId:`B`,overrides:g,onChange:_,onRun:()=>M(`B`),canRun:L,isRunning:n.isPending,profiles:r.data?.profiles??[],activeProfile:r.data?.activeProfile??null,defaultPromptTemplate:i.data?.template??``})]}),(0,S.jsx)(`div`,{className:`flex justify-end`,children:(0,S.jsx)(te,{onClick:N,disabled:!P||t.isPending||n.isPending,isRunning:t.isPending||n.isPending})}),(0,S.jsx)(ne,{visible:t.data!==void 0&&n.data!==void 0}),(0,S.jsxs)(`div`,{className:`grid grid-cols-1 gap-4 lg:grid-cols-2`,children:[(0,S.jsx)(F,{paneId:`A`,userMessage:j,mutation:t,otherResult:n.data?.response,validation:C}),(0,S.jsx)(F,{paneId:`B`,userMessage:j,mutation:n,otherResult:t.data?.response,validation:D})]})]})})}function E(e){let t={...D(`tier1_size`,e.tier1),...D(`tier2_size`,e.tier2),...D(`batch_size`,e.batch)};return Object.keys(t).length===0?void 0:t}function D(e,t){let n=t.trim();if(n===``)return{};if(n===`null`)return{[e]:null};let r=Number(n);if(!Number.isInteger(r)||r<1)throw Error(`${e} must be a positive integer or 'null' (got "${n}")`);return{[e]:r}}function ee(){return(0,S.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,S.jsx)(`h1`,{className:`text-body-large-default`,style:{color:`var(--content-default)`},children:`Memory Router Playground`}),(0,S.jsxs)(`p`,{className:`text-body-medium-lighter`,style:{color:`var(--content-secondary)`},children:[`Dry-run the v4 router with custom tier/batch overrides. Read-only — no rows are written to `,(0,S.jsx)(`code`,{children:`memory_v2_injection_events`}),` or`,` `,(0,S.jsx)(`code`,{children:`memory_v2_activation_logs`}),`, and no activation state is mutated. Leave an override blank to inherit the live config value; enter`,` `,(0,S.jsx)(`code`,{children:`null`}),` to explicitly disable a tier.`]})]})}function O({nowText:e,onNowTextChange:t,onReloadNowText:n,nowTextLoading:r,pairs:i,onPairsChange:o}){let s=(e,t)=>{o(i.map((n,r)=>r===e?{...n,...t}:n))},c=()=>{o([{assistantMessage:``,userMessage:``},...i])},l=e=>{e!==i.length-1&&o(i.filter((t,n)=>n!==e))};return(0,S.jsx)(a,{children:(0,S.jsxs)(`div`,{className:`flex flex-col gap-4 p-4`,children:[(0,S.jsx)(`span`,{className:`text-body-medium-default`,style:{color:`var(--content-default)`},children:`Conversational context (shared by both panes)`}),(0,S.jsx)(k,{id:`memory-router-playground-now`,label:`<now> block`,value:e,onChange:t,rows:6,monospace:!0,placeholder:r?`Loading current NOW.md…`:`Pre-filled with the live NOW.md. Edit to test alternate states.`,trailing:(0,S.jsx)(`button`,{type:`button`,onClick:n,disabled:r,className:`rounded px-2 py-1 text-label-default`,style:{background:`var(--surface-overlay)`,color:`var(--content-secondary)`,border:`none`,cursor:r?`not-allowed`:`pointer`},children:`Reload live NOW.md`})}),(0,S.jsxs)(`div`,{className:`flex items-baseline justify-between`,children:[(0,S.jsx)(`span`,{className:`text-label-default`,style:{color:`var(--content-secondary)`},children:`Recent (assistant, user) pairs · oldest first`}),(0,S.jsx)(`button`,{type:`button`,onClick:c,className:`rounded px-2 py-1 text-label-default`,style:{background:`var(--surface-overlay)`,color:`var(--content-secondary)`,border:`none`,cursor:`pointer`},children:`+ Add older pair`})]}),i.map((e,t)=>{let n=t===i.length-1;return(0,S.jsxs)(`div`,{className:`flex flex-col gap-2 rounded-md border p-3`,style:{borderColor:`var(--border-base)`,background:`var(--surface-base)`},children:[(0,S.jsxs)(`div`,{className:`flex items-baseline justify-between`,children:[(0,S.jsxs)(`span`,{className:`text-label-default`,style:{color:`var(--content-secondary)`},children:[`Pair `,t+1,` of `,i.length,n?` · most recent`:``]}),!n&&(0,S.jsx)(`button`,{type:`button`,onClick:()=>l(t),className:`rounded px-2 py-1 text-label-default`,style:{background:`transparent`,color:`var(--system-negative-strong)`,border:`none`,cursor:`pointer`},children:`Remove`})]}),(0,S.jsx)(k,{id:`memory-router-playground-pair-${t}-assistant`,label:`[assistant]: reply`,value:e.assistantMessage,onChange:e=>s(t,{assistantMessage:e}),rows:3,placeholder:t===0&&i.length===1?`Leave blank for a first-turn scenario.`:`Assistant's reply that came before the user message below.`}),(0,S.jsx)(k,{id:`memory-router-playground-pair-${t}-user`,label:n?`Just-arrived [user]: message`:`[user]: message`,value:e.userMessage,onChange:e=>s(t,{userMessage:e}),rows:3,placeholder:n?`e.g. what should we ship next`:`User's message.`,required:n})]},t)})]})})}function k({id:e,label:t,value:n,onChange:r,rows:i,placeholder:a,monospace:o,trailing:s,required:c}){return(0,S.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,S.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,S.jsxs)(`label`,{htmlFor:e,className:`text-label-default`,style:{color:`var(--content-secondary)`},children:[t,c?` *`:``]}),s]}),(0,S.jsx)(`textarea`,{id:e,value:n,onChange:e=>r(e.target.value),rows:i,placeholder:a,className:`rounded-md border px-3 py-2 text-body-medium-default`,style:{borderColor:`var(--border-base)`,background:`var(--surface-base)`,color:`var(--content-default)`,resize:`vertical`,...o?{fontFamily:`ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace`}:{}}})]})}function A({paneId:e,overrides:t,onChange:n,onRun:r,canRun:i,isRunning:o,profiles:s,activeProfile:c,defaultPromptTemplate:l}){return(0,S.jsx)(a,{children:(0,S.jsxs)(`div`,{className:`flex flex-col gap-4 p-4`,children:[(0,S.jsxs)(`div`,{className:`text-body-medium-default`,style:{color:q(e)},children:[`Config `,e]}),(0,S.jsxs)(`div`,{className:`grid grid-cols-1 gap-3 sm:grid-cols-3`,children:[(0,S.jsx)(N,{paneId:e,label:`tier1_size`,value:t.tier1,onChange:e=>n({...t,tier1:e})}),(0,S.jsx)(N,{paneId:e,label:`tier2_size`,value:t.tier2,onChange:e=>n({...t,tier2:e})}),(0,S.jsx)(N,{paneId:e,label:`batch_size`,value:t.batch,onChange:e=>n({...t,batch:e})})]}),(0,S.jsx)(M,{paneId:e,value:t.profile,onChange:e=>n({...t,profile:e}),profiles:s,activeProfile:c}),(0,S.jsx)(j,{paneId:e,value:t.customPrompt,onChange:e=>n({...t,customPrompt:e}),defaultTemplate:l}),(0,S.jsx)(`div`,{className:`flex justify-end`,children:(0,S.jsx)(`button`,{type:`button`,onClick:r,disabled:!i,className:`rounded-md px-4 py-2 text-body-medium-default transition-colors`,style:{background:i?`var(--system-positive-strong)`:`var(--surface-overlay)`,color:i?`var(--content-on-positive)`:`var(--content-disabled)`,border:`none`,cursor:i?`pointer`:`not-allowed`},children:o?`Running…`:`Run ${e}`})})]})})}function j({paneId:e,value:t,onChange:n,defaultTemplate:r}){let[i,a]=(0,m.useState)(!1),o=`memory-router-playground-${e}-prompt`,s=t.trim().length>0;return(0,S.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,S.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,S.jsxs)(`button`,{type:`button`,onClick:()=>a(e=>!e),className:`text-label-default`,style:{color:`var(--content-secondary)`,background:`transparent`,border:`none`,padding:0,cursor:`pointer`,textAlign:`left`},children:[i?`▾`:`▸`,` System prompt`,` `,(0,S.jsxs)(`span`,{style:{color:`var(--content-tertiary)`},children:[`(`,s?`custom`:`bundled`,`)`]})]}),i&&(0,S.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,S.jsx)(`button`,{type:`button`,onClick:()=>n(r),disabled:r.length===0,className:`rounded px-2 py-1 text-label-default`,style:{background:`var(--surface-overlay)`,color:`var(--content-secondary)`,border:`none`,cursor:r.length===0?`not-allowed`:`pointer`},children:`Load default`}),(0,S.jsx)(`button`,{type:`button`,onClick:()=>n(``),disabled:!s,className:`rounded px-2 py-1 text-label-default`,style:{background:`var(--surface-overlay)`,color:`var(--content-secondary)`,border:`none`,cursor:s?`pointer`:`not-allowed`},children:`Reset`})]})]}),i&&(0,S.jsx)(`textarea`,{id:o,value:t,onChange:e=>n(e.target.value),rows:12,placeholder:`Custom router system prompt. Available placeholders:
|
|
2
2
|
{{ASSISTANT_NAME}}, {{USER_NAME}}, {{PAGE_INDEX}}
|
|
3
3
|
Leave blank to use the bundled template. "Load default" seeds the textarea with the bundled body for editing.`,className:`rounded-md border px-3 py-2 text-body-small-default`,style:{borderColor:`var(--border-base)`,background:`var(--surface-base)`,color:`var(--content-default)`,fontFamily:`ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace`,resize:`vertical`,minHeight:`120px`}})]})}function M({paneId:e,value:t,onChange:n,profiles:r,activeProfile:i}){let a=`memory-router-playground-${e}-profile`,o=i!==null&&i.length>0?`inherit active (${i})`:`inherit active`;return(0,S.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,S.jsx)(`label`,{htmlFor:a,className:`text-label-default`,style:{color:`var(--content-secondary)`},children:`llm.profiles override`}),(0,S.jsxs)(`select`,{id:a,value:t,onChange:e=>n(e.target.value),className:`rounded-md border px-3 py-2 text-body-medium-default`,style:{borderColor:`var(--border-base)`,background:`var(--surface-base)`,color:`var(--content-default)`},children:[(0,S.jsx)(`option`,{value:``,children:o}),r.map(e=>(0,S.jsx)(`option`,{value:e,children:e},e))]})]})}function N({paneId:e,label:t,value:n,onChange:r}){let i=`memory-router-playground-${e}-${t}`;return(0,S.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,S.jsx)(`label`,{htmlFor:i,className:`text-label-default`,style:{color:`var(--content-secondary)`},children:t}),(0,S.jsx)(`input`,{id:i,value:n,onChange:e=>r(e.target.value),placeholder:`inherit`,className:`rounded-md border px-3 py-2 text-body-medium-default`,style:{borderColor:`var(--border-base)`,background:`var(--surface-base)`,color:`var(--content-default)`}})]})}function te({onClick:e,disabled:t,isRunning:n}){return(0,S.jsx)(`button`,{type:`button`,onClick:e,disabled:t,className:`rounded-md px-4 py-2 text-body-medium-default transition-colors`,style:{background:t?`var(--surface-overlay)`:`var(--primary-base)`,color:t?`var(--content-disabled)`:`var(--content-on-primary)`,border:`none`,cursor:t?`not-allowed`:`pointer`},children:n?`Running…`:`Run both`})}function ne({visible:e}){return e?(0,S.jsxs)(`div`,{className:`flex flex-wrap items-center gap-4 rounded-md px-4 py-2 text-label-default`,style:{background:`var(--surface-overlay)`,color:`var(--content-secondary)`},children:[(0,S.jsx)(P,{marker:`●`,markerColor:`var(--content-default)`,label:`in both`}),(0,S.jsx)(P,{marker:`◆`,markerColor:q(`A`),label:`A only`}),(0,S.jsx)(P,{marker:`◇`,markerColor:q(`B`),label:`B only`})]}):null}function P({marker:e,markerColor:t,label:n}){return(0,S.jsxs)(`span`,{className:`flex items-center gap-1`,children:[(0,S.jsx)(`span`,{style:{color:t},children:e}),(0,S.jsx)(`span`,{children:n})]})}function F({paneId:e,userMessage:t,mutation:n,otherResult:r,validation:i}){let a=n.data;return(0,S.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[(0,S.jsx)(R,{paneId:e}),i!==null&&(0,S.jsx)(Q,{message:i}),n.isError&&(0,S.jsx)(Q,{message:n.error instanceof Error?n.error.message:`Failed to run simulation`}),a!==void 0&&(0,S.jsxs)(S.Fragment,{children:[(0,S.jsx)(z,{paneId:e,userMessage:t,result:a.response,otherResult:r}),(0,S.jsx)(I,{paneId:e,rawRequest:a.rawRequest,rawResponse:a.rawResponse})]})]})}function I({paneId:e,rawRequest:t,rawResponse:n}){let[r,i]=(0,m.useState)(!1);return(0,S.jsx)(a,{children:(0,S.jsxs)(`div`,{className:`flex flex-col gap-2 p-4`,children:[(0,S.jsxs)(`button`,{type:`button`,onClick:()=>i(e=>!e),className:`text-label-default`,style:{color:`var(--content-secondary)`,background:`transparent`,border:`none`,padding:0,cursor:`pointer`,textAlign:`left`},children:[r?`▾`:`▸`,` Raw API exchange`]}),r&&(0,S.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[(0,S.jsx)(L,{label:`Request (Pane ${e})`,body:t}),(0,S.jsx)(L,{label:`Response (Pane ${e})`,body:n})]})]})})}function L({label:e,body:t}){return(0,S.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,S.jsx)(`span`,{className:`text-label-default`,style:{color:`var(--content-secondary)`},children:e}),(0,S.jsx)(`pre`,{className:`overflow-auto rounded-md border px-3 py-2 text-body-small-default`,style:{borderColor:`var(--border-base)`,background:`var(--surface-base)`,color:`var(--content-default)`,fontFamily:`ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace`,maxHeight:`320px`,whiteSpace:`pre`},children:t.length===0?`(empty)`:t})]})}function R({paneId:e}){return(0,S.jsxs)(`div`,{className:`text-body-medium-default`,style:{color:q(e)},children:[`Pane `,e]})}function z({paneId:e,userMessage:t,result:n,otherResult:r}){let i=(0,m.useMemo)(()=>B(n,r),[n,r]),a=(0,m.useMemo)(()=>W(n),[n]);return(0,S.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,S.jsx)(H,{result:n,userMessage:t,otherResult:r,counts:(0,m.useMemo)(()=>V(i),[i])}),(0,S.jsx)(U,{result:n}),n.failureReason!==null&&(0,S.jsx)(Q,{message:`Router failure: ${n.failureReason}`}),a.length===0?(0,S.jsx)(X,{}):a.map(t=>(0,S.jsx)(Y,{paneId:e,source:t.source,slugs:t.slugs,scores:n.scores,diff:i},t.source))]})}function B(e,t){let n=new Map;if(t===void 0){for(let t of e.selectedSlugs)n.set(t,`both`);return n}let r=new Set(t.selectedSlugs);for(let t of e.selectedSlugs)n.set(t,r.has(t)?`both`:`only-here`);return n}function V(e){let t=0,n=0;for(let r of e.values())r===`both`?t++:n++;return{total:e.size,shared:t,unique:n}}function H({result:e,userMessage:t,otherResult:n,counts:r}){let i=[{label:`User message`,value:t},{label:`Total candidate pages`,value:e.totalCandidatePages.toLocaleString()},{label:`Selected`,value:`${e.selectedSlugs.length} (live max_page_ids: ${e.effectiveConfig.max_page_ids})`}];return n!==void 0&&i.push({label:`Diff`,value:`${r.shared} shared · ${r.unique} unique to this pane`}),(0,S.jsx)(a,{children:(0,S.jsxs)(`div`,{className:`flex flex-col gap-3 p-4`,children:[(0,S.jsx)(`span`,{className:`text-body-medium-default`,style:{color:`var(--content-default)`},children:`Summary`}),(0,S.jsx)(Z,{rows:i})]})})}function U({result:e}){let t=[`tier1_size`,`tier2_size`,`batch_size`,`max_page_ids`].map(t=>{let n=e.effectiveConfig[t],r=e.overrides[t];return{label:t,value:`${n===null?`null`:String(n)}${r===void 0?``:` (override)`}`}});return t.push({label:`llm.profiles override`,value:e.profileOverride===null?`inherit active`:`${e.profileOverride} (override)`}),t.push({label:`system prompt`,value:e.routerPromptOverridden?`custom`:`bundled`}),(0,S.jsx)(a,{children:(0,S.jsxs)(`div`,{className:`flex flex-col gap-3 p-4`,children:[(0,S.jsx)(`span`,{className:`text-body-medium-default`,style:{color:`var(--content-default)`},children:`Effective config`}),(0,S.jsx)(Z,{rows:t})]})})}function W(e){let t=new Map;for(let n of e.selectedSlugs){let r=e.sourceBySlug[n];if(r===void 0)continue;let i=t.get(r)??[];i.push(n),t.set(r,i)}return[...t.keys()].sort((e,t)=>G(e)-G(t)).map(e=>({source:e,slugs:t.get(e)}))}function G(e){return e===`tier1`?0:e===`tier2`?1:e.startsWith(`tier3:`)?2+Number(e.slice(6)):2**53-1}function K(e){return e===`tier1`?`tier 1`:e===`tier2`?`tier 2`:e.startsWith(`tier3:`)?`tier 3 · b${e.slice(6)}`:e}function q(e){return e===`A`?`var(--system-mid-strong)`:`var(--primary-base)`}function J(e,t){return t===`both`?{color:`var(--content-default)`,marker:`●`}:{color:q(e),marker:e===`A`?`◆`:`◇`}}function Y({paneId:e,source:t,slugs:n,scores:r,diff:i}){return(0,S.jsx)(a,{children:(0,S.jsxs)(`div`,{className:`flex flex-col gap-3 p-4`,children:[(0,S.jsxs)(`div`,{className:`flex items-baseline justify-between`,children:[(0,S.jsx)(`span`,{className:`text-body-medium-default`,style:{color:`var(--content-default)`},children:K(t)}),(0,S.jsxs)(`span`,{className:`text-label-default`,style:{color:`var(--content-secondary)`},children:[n.length,` `,n.length===1?`page`:`pages`]})]}),(0,S.jsx)(`ul`,{className:`flex flex-col gap-1`,children:n.map(n=>{let{color:a,marker:o}=J(e,i.get(n)??`only-here`);return(0,S.jsxs)(`li`,{className:`flex items-baseline justify-between gap-3`,children:[(0,S.jsxs)(`span`,{className:`flex items-baseline gap-2`,children:[(0,S.jsx)(`span`,{style:{color:a},children:o}),(0,S.jsx)(`code`,{className:`text-body-medium-default`,style:{color:a},children:n})]}),t===`tier2`&&(0,S.jsxs)(`span`,{className:`tabular-nums text-label-default`,style:{color:`var(--content-secondary)`},children:[`EMA `,(r[n]??0).toFixed(3)]})]},n)})})]})})}function X(){return(0,S.jsx)(a,{children:(0,S.jsxs)(`div`,{className:`flex flex-col gap-2 p-4`,children:[(0,S.jsx)(`span`,{className:`text-body-medium-default`,style:{color:`var(--content-default)`},children:`No pages selected`}),(0,S.jsx)(`span`,{className:`text-label-default`,style:{color:`var(--content-secondary)`},children:`The router returned an empty selection. Try a more specific query, or relax the override values.`})]})})}function Z({rows:e}){return(0,S.jsx)(`div`,{className:`flex flex-col gap-2`,children:e.map(({label:e,value:t})=>(0,S.jsxs)(`div`,{className:`flex items-baseline justify-between gap-3`,children:[(0,S.jsx)(`span`,{className:`shrink-0 text-label-default`,style:{color:`var(--content-secondary)`},children:e}),(0,S.jsx)(`span`,{className:`text-right text-body-medium-lighter`,style:{color:`var(--content-default)`},children:t})]},e))})}function Q({message:e}){return(0,S.jsx)(`div`,{className:`rounded-md px-4 py-3 text-body-medium-default`,style:{background:`var(--surface-overlay)`,color:`var(--system-negative-strong)`},children:e})}function $({children:e}){return(0,S.jsx)(`div`,{className:`flex h-full w-full items-center justify-center p-8 text-label-default`,style:{color:`var(--content-tertiary)`},children:e})}export{C as MemoryRouterPlaygroundPage};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{o as e}from"./chunk-jRWAZmH_.js";import{t}from"./react-DJZBPgpf.js";import{t as n}from"./button-D7s2Q_uG.js";import{t as r}from"./jsx-runtime-CVSDxk6A.js";import"./src-D6Nu2Lol.js";import{t as i}from"./x-Dz7msELe.js";import{Da as a}from"./index-
|
|
1
|
+
import{o as e}from"./chunk-jRWAZmH_.js";import{t}from"./react-DJZBPgpf.js";import{t as n}from"./button-D7s2Q_uG.js";import{t as r}from"./jsx-runtime-CVSDxk6A.js";import"./src-D6Nu2Lol.js";import{t as i}from"./x-Dz7msELe.js";import{Da as a}from"./index-BiN-6kWM.js";var o=e(t(),1),s=r(),c=`(min-width: 640px)`,l=[`a[href]`,`button:not([disabled])`,`input:not([disabled])`,`select:not([disabled])`,`textarea:not([disabled])`,`[tabindex]:not([tabindex="-1"])`].join(`,`);function u({open:e,onClose:t,children:r,title:a}){let u=(0,o.useRef)(null),d=(0,o.useRef)(null),f=(0,o.useRef)(t);return(0,o.useEffect)(()=>{f.current=t}),(0,o.useEffect)(()=>{if(!e)return;d.current?.focus();let t=document.body.style.overflow;document.body.style.overflow=`hidden`;let n=window.matchMedia(c),r=e=>{e.matches&&f.current()};n.addEventListener(`change`,r);let i=e=>{if(e.key===`Escape`){f.current();return}if(e.key!==`Tab`||!u.current)return;let t=u.current.querySelectorAll(l),n=t[0],r=t[t.length-1];if(!n||!r){e.preventDefault();return}let i=document.activeElement,a=u.current.contains(i);e.shiftKey?(!a||i===n)&&(e.preventDefault(),r.focus()):(!a||i===r)&&(e.preventDefault(),n.focus())};return document.addEventListener(`keydown`,i),()=>{document.removeEventListener(`keydown`,i),n.removeEventListener(`change`,r),document.body.style.overflow=t}},[e]),e?(0,s.jsxs)(`div`,{ref:u,className:`fixed inset-0 sm:hidden`,style:{zIndex:40},role:`dialog`,"aria-modal":`true`,"aria-label":a,children:[(0,s.jsx)(`button`,{type:`button`,"aria-label":`Close sidebar`,className:`absolute inset-0 h-full w-full cursor-default`,style:{background:`rgba(0, 0, 0, 0.4)`,zIndex:40},onClick:t}),(0,s.jsxs)(`aside`,{className:`relative flex h-full w-[80vw] max-w-xs flex-col shadow-xl`,style:{background:`var(--surface-lift)`,borderRight:`1px solid var(--border-base)`,zIndex:50,paddingTop:`var(--safe-area-inset-top, env(safe-area-inset-top, 0px))`,paddingBottom:`var(--safe-area-inset-bottom, env(safe-area-inset-bottom, 0px))`,paddingLeft:`var(--safe-area-inset-left, env(safe-area-inset-left, 0px))`},children:[(0,s.jsxs)(`div`,{className:`flex shrink-0 items-center justify-between border-b px-4 py-3`,style:{borderColor:`var(--border-base)`},children:[(0,s.jsx)(`span`,{className:`text-title-small`,style:{color:`var(--content-default)`},children:a}),(0,s.jsx)(n,{ref:d,type:`button`,variant:`ghost`,size:`compact`,iconOnly:(0,s.jsx)(i,{"aria-hidden":!0}),onClick:t,"aria-label":`Close`,tintColor:`var(--content-tertiary)`})]}),(0,s.jsx)(`div`,{className:`flex-1 overflow-y-auto p-4`,children:r})]})]}):null}function d({onClick:e}){return(0,s.jsx)(n,{type:`button`,variant:`ghost`,iconOnly:(0,s.jsx)(a,{"aria-hidden":!0}),onClick:e,"aria-label":`Open sidebar`,tintColor:`var(--content-secondary)`,className:`sm:hidden`})}export{d as n,u as t};
|