@vellumai/web 0.10.1-staging.2 → 0.10.1-staging.4
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/{about-page-CW4mH7w7.js → about-page-B-yNJBih.js} +1 -1
- package/dist/assets/{account-page-va3jsKG3.js → account-page-CHiDb1yX.js} +1 -1
- package/dist/assets/{add-credits-modal-BJQfpHmv.js → add-credits-modal-GSsxaybq.js} +1 -1
- package/dist/assets/{advanced-page-BQEEMqUJ.js → advanced-page-9dJbjOiT.js} +1 -1
- package/dist/assets/ai-page-Du6k7XV_.js +1 -0
- package/dist/assets/api-CjVG_nMi.js +1 -0
- package/dist/assets/{api-key-screen-D3pD0rPG.js → api-key-screen-BBajxzG8.js} +1 -1
- package/dist/assets/{archive-D-fnxeQf.js → archive-BFILUl9x.js} +1 -1
- package/dist/assets/{archive-page-CDaGKTY2.js → archive-page-DDar_tND.js} +1 -1
- package/dist/assets/arrow-left-CP-EhDNF.js +1 -0
- package/dist/assets/arrow-up-nBfZxfhi.js +1 -0
- package/dist/assets/assistant-api-BX_B1xSC.js +1 -0
- package/dist/assets/{assistant-status-panel-Byd6c2GD.js → assistant-status-panel-CFhkAfJY.js} +1 -1
- package/dist/assets/auth-store-CbVvQiBR.js +7 -0
- package/dist/assets/ban-BpBuRCKI.js +1 -0
- package/dist/assets/{bell-tEVVOFRL.js → bell-DB1SrBre.js} +1 -1
- package/dist/assets/{billing-page-GeeUd8nR.js → billing-page-BByuYpJa.js} +1 -1
- package/dist/assets/{bookmark-Bw04OiC7.js → bookmark-C8arQ3wm.js} +1 -1
- package/dist/assets/{bookmarks-page-vJb4HXNp.js → bookmarks-page-DyjSZPPW.js} +1 -1
- package/dist/assets/{bug-Dyqld0Aa.js → bug-BuL3O3_2.js} +1 -1
- package/dist/assets/build-state-CMpEWWjf.js +1 -0
- package/dist/assets/{cable-CYB4K1nY.js → cable-C0pEWbc5.js} +1 -1
- package/dist/assets/{calendar-DUv7hzHD.js → calendar-BCNBN7PC.js} +1 -1
- package/dist/assets/{capture-error-CN7ObyIk.js → capture-error-AoUURkgi.js} +1 -1
- package/dist/assets/chevron-left-o_oJAd6A.js +1 -0
- package/dist/assets/chevron-right-BNHlGCTg.js +1 -0
- package/dist/assets/{chevron-up-BT6xIbCo.js → chevron-up-BnW-hcOL.js} +1 -1
- package/dist/assets/{circle-alert-D58pfVBz.js → circle-alert-bz1ccYRI.js} +1 -1
- package/dist/assets/circle-check-DBzb54Kz.js +1 -0
- package/dist/assets/{cloud-off-DfVAWu4D.js → cloud-off-BWmMU3G-.js} +1 -1
- package/dist/assets/code-Bju_p7d-.js +1 -0
- package/dist/assets/{command-palette-K6nK6F7f.js → command-palette-DJgHXop1.js} +1 -1
- package/dist/assets/command-palette-window-page-CSaRzD87.js +1 -0
- package/dist/assets/{community-page-UxhAQFV9.js → community-page-BuuYKT7i.js} +1 -1
- package/dist/assets/{connect-page-BgPgIb-F.js → connect-page-B0Pym3dJ.js} +1 -1
- package/dist/assets/{consent-controls-Bk8etO5C.js → consent-controls-o06cSwWt.js} +1 -1
- package/dist/assets/{contacts-gateway-CZMULd7Z.js → contacts-gateway-11r4y5pQ.js} +1 -1
- package/dist/assets/{contacts-page-route-CM06poQB.js → contacts-page-route-YQf7Dxxo.js} +1 -1
- package/dist/assets/{conversation-queries-Bm61s1He.js → conversation-queries-DF1Lujnm.js} +1 -1
- package/dist/assets/{cpu-fIfNq834.js → cpu-DpzMm9_m.js} +1 -1
- package/dist/assets/{credit-card-CcU-1-nT.js → credit-card-CN7yFHhB.js} +1 -1
- package/dist/assets/{danger-zone-redirect-page-BsyYvQrZ.js → danger-zone-redirect-page-iCmRnyei.js} +1 -1
- package/dist/assets/debug-page-CXi6rNhS.js +2 -0
- package/dist/assets/{deploy-dialogs-BJI2X201.js → deploy-dialogs-DygUf1og.js} +1 -1
- package/dist/assets/{developer-page-9X_iqAuN.js → developer-page-C5desNav.js} +1 -1
- package/dist/assets/{devices-page-Byr7kUNa.js → devices-page-mF5RECdQ.js} +1 -1
- package/dist/assets/{dictation-overlay-page-CN6yGveG.js → dictation-overlay-page-DL5K7HYW.js} +1 -1
- package/dist/assets/{document-viewer-page-CRnBN1cE.js → document-viewer-page-C2oFS1wI.js} +1 -1
- package/dist/assets/{dollar-sign-Bi1OUcqU.js → dollar-sign-D_XmiHA-.js} +1 -1
- package/dist/assets/{domain-field-BqCbfaBb.js → domain-field-ChoXVdlk.js} +1 -1
- package/dist/assets/{earn-credits-modal-DevPS5jN.js → earn-credits-modal-DsuqrJTY.js} +1 -1
- package/dist/assets/{emails-page-B0dZDuR-.js → emails-page-Duy9jhr6.js} +1 -1
- package/dist/assets/{external-link-CyRCaWBE.js → external-link-DAovIsxF.js} +1 -1
- package/dist/assets/{file-editor-DqNMJEa4.js → file-editor-n2sYGdD-.js} +1 -1
- package/dist/assets/{general-page-B83wb3Tj.js → general-page-BSdbq26O.js} +1 -1
- package/dist/assets/{globe-CiNEZj-J.js → globe-CfKniRIP.js} +1 -1
- package/dist/assets/{hard-drive-BbaHN7Gp.js → hard-drive-DggmyfjR.js} +1 -1
- package/dist/assets/{hatching-screen-Cok0yK9s.js → hatching-screen-BRgjqSLd.js} +1 -1
- package/dist/assets/{home-page-route-C_dx1nVl.js → home-page-route-CV_mh2wJ.js} +1 -1
- package/dist/assets/{hosting-screen-CsavWom3.js → hosting-screen--kBc2JgZ.js} +1 -1
- package/dist/assets/identity-page-route-CDcFNfWw.js +1 -0
- package/dist/assets/index-Cx6vyW7T.js +155 -0
- package/dist/assets/{info-CUuJWmsF.js → info-DXbzDupm.js} +1 -1
- package/dist/assets/{inspect-page-C_hXwcho.js → inspect-page-D03CXXMs.js} +3 -3
- package/dist/assets/{install-Gyq-nEic.js → install-JGbHHiCV.js} +1 -1
- package/dist/assets/{integrations-page-Dz67PdC8.js → integrations-page-BFPmyQdR.js} +1 -1
- package/dist/assets/{intelligence-layout-CgcnfjDK.js → intelligence-layout-DgkmPrJl.js} +1 -1
- package/dist/assets/{keyboard-shortcuts-page-BhTucwGW.js → keyboard-shortcuts-page-waVolRQN.js} +1 -1
- package/dist/assets/{library-detail-page-DK89d-u4.js → library-detail-page-eMzOqx_B.js} +1 -1
- package/dist/assets/{library-page-vrFk-Rt1.js → library-page-BwoQ9K34.js} +1 -1
- package/dist/assets/{link-2-C6BJ3RH_.js → link-2-Dmka5LJV.js} +1 -1
- package/dist/assets/loader-circle-Cw1KvvLK.js +1 -0
- package/dist/assets/{local-mode-Bg6wpc5q.js → local-mode-BD2zqd9I.js} +3 -3
- package/dist/assets/{log-in-BPJxI98d.js → log-in-CUDpYpYW.js} +1 -1
- package/dist/assets/{login-flow-CzPVmpoB.js → login-flow-DVsR7fEC.js} +1 -1
- package/dist/assets/{login-page-Csy9gwOa.js → login-page-DYLjbG5w.js} +1 -1
- package/dist/assets/{logout-page-Dz800OIa.js → logout-page-DRRS14hP.js} +1 -1
- package/dist/assets/{logs-layout-BwgQ_S4K.js → logs-layout-CSvew4_d.js} +1 -1
- package/dist/assets/{mcp-page-5PXJCl5X.js → mcp-page-CUehr_wQ.js} +1 -1
- package/dist/assets/{memory-router-playground-page-BVhLOinh.js → memory-router-playground-page-A2zlGskJ.js} +1 -1
- package/dist/assets/{metric-card-DxrlxUKS.js → metric-card-CgO1F06f.js} +1 -1
- package/dist/assets/{minimize-2-BFkjQhB_.js → minimize-2-CPmn1RIm.js} +1 -1
- package/dist/assets/{mobile-sidebar-drawer-rYD2VIdb.js → mobile-sidebar-drawer-R6nyuXZ1.js} +1 -1
- package/dist/assets/{moon-D-eeNLvA.js → moon-Be4Pgk5X.js} +1 -1
- package/dist/assets/{notifications-page-CVB7NSmc.js → notifications-page-DcIQm_jh.js} +1 -1
- package/dist/assets/{oauth-complete-page-CzvAQxVm.js → oauth-complete-page-BJudfLeY.js} +1 -1
- package/dist/assets/{oauth-popup-complete-page-e67O6LPS.js → oauth-popup-complete-page-HRhzTWe_.js} +1 -1
- package/dist/assets/{pairing-page-B6gfw_Dk.js → pairing-page-DS3k_UyF.js} +1 -1
- package/dist/assets/{password-reset-page-BD2oysNq.js → password-reset-page-CDvLTa8S.js} +1 -1
- package/dist/assets/{pencil-Cyrr5VNX.js → pencil-Dm2eFMe3.js} +1 -1
- package/dist/assets/{platform-loopback-page-BtfoD3mE.js → platform-loopback-page-CKI-92-q.js} +1 -1
- package/dist/assets/plugin-detail-page-THfWbuJx.js +1 -0
- package/dist/assets/{plugins-page-CVnC0QSh.js → plugins-page-BxfKs2Np.js} +1 -1
- package/dist/assets/{prechat-route-y6KNH7Qp.js → prechat-route-uavNUOzg.js} +1 -1
- package/dist/assets/{prefs-BQY2Hl9H.js → prefs-DP4g-Qgi.js} +1 -1
- package/dist/assets/{privacy-page-Bbc8BtbS.js → privacy-page-Vq50i0Wv.js} +1 -1
- package/dist/assets/{privacy-screen-CEH2JNQv.js → privacy-screen-1ITDKJ6D.js} +1 -1
- package/dist/assets/{provider-callback-page-C7misZDP.js → provider-callback-page-tWLMyImI.js} +1 -1
- package/dist/assets/{provider-key-CK_U6Kex.js → provider-key-g87caUSW.js} +1 -1
- package/dist/assets/{provider-signup-page-PWsQh0Yg.js → provider-signup-page-CBPV-1Ih.js} +1 -1
- package/dist/assets/{quick-input-page-B8bRJhco.js → quick-input-page-CEPPTVs7.js} +1 -1
- package/dist/assets/{react-query.gen-DfnbKPpc.js → react-query.gen-4ZMhZ-fj.js} +1 -1
- package/dist/assets/{refresh-cw-C7wug6Q3.js → refresh-cw-YXbpNg95.js} +1 -1
- package/dist/assets/{research-mock-page-C9A3-fDP.js → research-mock-page-Dln6TeKV.js} +1 -1
- package/dist/assets/{research-onboarding-route-efpyR7DJ.js → research-onboarding-route-HWXEnr-H.js} +1 -1
- package/dist/assets/{resize-errors-D0YsLvoI.js → resize-errors-CXz-pd2h.js} +1 -1
- package/dist/assets/{resolved-assistants-store-lkSgU__i.js → resolved-assistants-store-DLNFVaZL.js} +1 -1
- package/dist/assets/{return-to-BcgKmS7W.js → return-to-DxTXKF-C.js} +1 -1
- package/dist/assets/{review-terms-screen-CDfWU0ZO.js → review-terms-screen-DuORfqOE.js} +1 -1
- package/dist/assets/{routes-BLyehs4B.js → routes-B9xcBuuC.js} +1 -1
- package/dist/assets/{save-DdguSDQ1.js → save-CQ2-kSlv.js} +1 -1
- package/dist/assets/{schedules-Dbclu3k6.js → schedules-MF0cMAPX.js} +1 -1
- package/dist/assets/{sdk.gen-W0KlW-sG.js → sdk.gen-DtKkd6hs.js} +1 -1
- package/dist/assets/{select-assistant-screen-ZJ9IYyUk.js → select-assistant-screen-C2pCQCeh.js} +1 -1
- package/dist/assets/{settings-layout-Cp1jKtid.js → settings-layout-Co57Zw8f.js} +1 -1
- package/dist/assets/{share-feedback-modal-pEDXaPEK.js → share-feedback-modal-C4yo471J.js} +1 -1
- package/dist/assets/{sidebar-tree-B24zaatU.js → sidebar-tree-D0lNnpA6.js} +1 -1
- package/dist/assets/{signup-page-Bf1Etxe9.js → signup-page-P4juei29.js} +1 -1
- package/dist/assets/{skills-page-A9JPglEX.js → skills-page-KI_k-igb.js} +1 -1
- package/dist/assets/{sound-manager-BJ26N0gf.js → sound-manager-RQj5g2kL.js} +1 -1
- package/dist/assets/{sounds-page-D9PLU10T.js → sounds-page-DFXhvf_o.js} +1 -1
- package/dist/assets/{sparkles-BoIJjAXt.js → sparkles-C8hCShdb.js} +1 -1
- package/dist/assets/{step-indicator-dots-CE4dEV3k.js → step-indicator-dots-Bx_0xTIr.js} +1 -1
- package/dist/assets/{subagent-detail-panel-DdynnGgr.js → subagent-detail-panel-eXMmoVu4.js} +2 -2
- package/dist/assets/{system-events-page-CapsfcLj.js → system-events-page-BJJteZri.js} +1 -1
- package/dist/assets/{system-events-redirect-page-DygqxqRr.js → system-events-redirect-page-CheSz42h.js} +1 -1
- package/dist/assets/{tiptap-document-editor-Bmxs-PZ9.js → tiptap-document-editor-C8FlNAsc.js} +1 -1
- package/dist/assets/{tool-detail-panel-BqCxmSox.js → tool-detail-panel-DgVn-kKw.js} +2 -2
- package/dist/assets/{trace-page-CniuHbEK.js → trace-page-CZICq31J.js} +1 -1
- package/dist/assets/{triangle-alert-CoIDviBm.js → triangle-alert-AqQQTwUZ.js} +1 -1
- package/dist/assets/{upgrade-cancel-page-DBjzADY1.js → upgrade-cancel-page-BQJOrigy.js} +1 -1
- package/dist/assets/{upgrade-success-page-VewnS1PS.js → upgrade-success-page-BPRZMLDu.js} +1 -1
- package/dist/assets/{usage-page-XZramSoz.js → usage-page-DU36h2RZ.js} +1 -1
- package/dist/assets/{use-active-assistant-id-DTsVl8b7.js → use-active-assistant-id-BlwRimQH.js} +1 -1
- package/dist/assets/use-is-org-ready-CRkh60tU.js +1 -0
- package/dist/assets/{use-onboarding-login-vAFdm7Pu.js → use-onboarding-login-BZ4ismb6.js} +1 -1
- package/dist/assets/{use-plugin-drift-B5uLDuHi.js → use-plugin-drift-C3gz_rng.js} +1 -1
- package/dist/assets/{viewer-store-CTNS5BCs.js → viewer-store-9Ag85lFC.js} +1 -1
- package/dist/assets/{voice-page-DiP4QkZU.js → voice-page-DB2h9uqJ.js} +1 -1
- package/dist/assets/{weather-forecast-display-3wTH0LJ0.js → weather-forecast-display-DoCG5fqI.js} +1 -1
- package/dist/assets/{welcome-screen-DVEKTxnJ.js → welcome-screen-z3RULgvo.js} +1 -1
- package/dist/assets/{workflow-detail-panel-Djzb5VDE.js → workflow-detail-panel-uiydoHie.js} +1 -1
- package/dist/assets/{workspace-page-DvdkgVub.js → workspace-page-9B98Z90n.js} +1 -1
- package/dist/assets/x-BeVbiDS2.js +1 -0
- package/dist/index.html +54 -54
- package/package.json +1 -1
- package/dist/assets/ai-page-C2gOM0fO.js +0 -1
- package/dist/assets/api-kMnfZUPa.js +0 -1
- package/dist/assets/arrow-left-CEu7Dsda.js +0 -1
- package/dist/assets/arrow-up-BHPaHiHe.js +0 -1
- package/dist/assets/assistant-api-c0d65GPi.js +0 -1
- package/dist/assets/auth-store-Cc0c0sQk.js +0 -7
- package/dist/assets/ban-DOB4wT-M.js +0 -1
- package/dist/assets/build-state-WKs9Ht8_.js +0 -1
- package/dist/assets/chevron-left-BFX62ERI.js +0 -1
- package/dist/assets/chevron-right-Cc3NZhAF.js +0 -1
- package/dist/assets/circle-check-BKkxjdE1.js +0 -1
- package/dist/assets/code-CfKv4BKJ.js +0 -1
- package/dist/assets/command-palette-window-page-BTGDdcg4.js +0 -1
- package/dist/assets/debug-page-BVMoMpUg.js +0 -2
- package/dist/assets/identity-page-route-Bly29wqM.js +0 -1
- package/dist/assets/index-DhxGhfwI.js +0 -155
- package/dist/assets/loader-circle-YAV9sMh_.js +0 -1
- package/dist/assets/plugin-detail-page-CTQIvdhJ.js +0 -1
- package/dist/assets/use-is-org-ready-BL-GcZZw.js +0 -1
- package/dist/assets/x-b3o2p6YU.js +0 -1
- /package/dist/assets/{api-errors-C3sAdlZQ.js → api-errors-D3EsNrwn.js} +0 -0
- /package/dist/assets/{client.gen-Bx3pJMXa.js → client.gen-0CkwJ2Ya.js} +0 -0
- /package/dist/assets/{createLucideIcon-KBgJOpms.js → createLucideIcon-BlMXrA59.js} +0 -0
- /package/dist/assets/{is-electron-CcgCla1v.js → is-electron-C_ZTVhv8.js} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
import{o as e}from"./chunk-jRWAZmH_.js";import{t}from"./capture-error-
|
|
1
|
+
import{o as e}from"./chunk-jRWAZmH_.js";import{t}from"./capture-error-AoUURkgi.js";import{t as n}from"./react-DJZBPgpf.js";import{t as r}from"./button-D7s2Q_uG.js";import{d as i}from"./chunk-5KNZJZUH-DdS6bb-3.js";import{n as a}from"./QueryClientProvider-DKhXIxGb.js";import{t as o}from"./useQuery-B45lW1Kk.js";import{t as s}from"./jsx-runtime-CVSDxk6A.js";import{t as c}from"./card-BibIM9x3.js";import"./src-BJj2O5XB.js";import{t as l}from"./tag-CE_o2aao.js";import{t as u}from"./createLucideIcon-BlMXrA59.js";import{t as d}from"./arrow-left-CP-EhDNF.js";import{t as f}from"./external-link-DAovIsxF.js";import{t as p}from"./globe-CfKniRIP.js";import{t as m}from"./loader-circle-Cw1KvvLK.js";import{Hn as h}from"./sdk.gen-DtKkd6hs.js";import{Kt as g,mt as _,pt as v}from"./react-query.gen-4ZMhZ-fj.js";import{n as y,r as b,t as x}from"./api-errors-D3EsNrwn.js";import{a as S}from"./routes-B9xcBuuC.js";import{Ai as C,Ar as w,M as T,Nr as E,Oi as D,Pr as O,Zr as k,ca as A,j}from"./index-Cx6vyW7T.js";import{i as M,n as N,r as P,t as F}from"./file-editor-n2sYGdD-.js";var I=u(`box`,[[`path`,{d:`M21 8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16Z`,key:`hh9hay`}],[`path`,{d:`m3.3 7 8.7 5 8.7-5`,key:`g66t2b`}],[`path`,{d:`M12 22V12`,key:`d0xqtd`}]]),L=e(n(),1),R=s();function z({skill:e,className:t,fallback:n=`🧩`}){let[r,i]=(0,L.useState)(!1);return e.icon&&!r?(0,R.jsx)(`img`,{src:`/assistant/skills/${e.id}/${e.icon}`,alt:``,className:`${t} object-contain`,onError:()=>i(!0)}):(0,R.jsx)(`span`,{className:t,children:e.emoji??n})}var B={vellum:{label:`Vellum`,icon:I},clawhub:{label:`Clawhub`,icon:p},skillssh:{label:`skills.sh`,icon:O},custom:{label:`Custom`,icon:w}};function V({origin:e}){let t=e in B?B[e]:{label:e.replace(/-/g,` `),icon:k};return(0,R.jsx)(l,{tone:`neutral`,leftIcon:(0,L.createElement)(t.icon),className:`capitalize`,children:t.label})}function H(e){return e.kind===`installed`||e.kind===`bundled`}function U(e){return e.kind===`catalog`}function W(e){return e.kind===`installed`}function G({assistantId:e,skill:t,onBack:n,onInstall:i,onRemove:a,isInstalling:s=!1,isRemoving:l=!1}){let[u,f]=(0,L.useState)(null),p=U(t),h=W(t),g=o({..._({path:{assistant_id:e,id:t.id}}),select:e=>e??null}),y=(0,L.useMemo)(()=>g.data?.files??[],[g.data]),b=(0,L.useMemo)(()=>y.find(e=>e.name===`SKILL.md`),[y]),x=u??b?.path??null,S=o({...v({path:{assistant_id:e,id:t.id},query:{path:x??``}}),select:e=>e??null,enabled:!!x}),w=y.find(e=>e.path===x);return(0,R.jsxs)(`div`,{className:`flex h-[calc(100vh-14rem)] flex-col`,children:[(0,R.jsxs)(`div`,{className:`mb-4 flex items-start gap-3`,children:[(0,R.jsx)(r,{type:`button`,variant:`ghost`,iconOnly:(0,R.jsx)(d,{"aria-hidden":!0}),"aria-label":`Back to skills`,onClick:n}),(0,R.jsxs)(`div`,{className:`flex min-w-0 flex-1 flex-col gap-3 sm:flex-row sm:items-center`,children:[(0,R.jsxs)(`div`,{className:`flex min-w-0 flex-1 items-center gap-3`,children:[(0,R.jsx)(z,{skill:t,className:`h-8 w-8 text-3xl`}),(0,R.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,R.jsxs)(`div`,{className:`flex flex-wrap items-center gap-x-2 gap-y-1`,children:[(0,R.jsx)(`h2`,{className:`text-title-medium`,style:{color:`var(--content-default)`},children:t.name}),(0,R.jsx)(V,{origin:t.origin})]}),(0,R.jsx)(`p`,{className:`mt-0.5 line-clamp-2 text-body-medium-lighter`,style:{color:`var(--content-secondary)`},children:t.description})]})]}),p?s?(0,R.jsx)(`div`,{className:`flex h-9 items-center px-3`,children:(0,R.jsx)(m,{className:`h-4 w-4 animate-spin`,style:{color:`var(--content-tertiary)`}})}):(0,R.jsx)(r,{type:`button`,onClick:i,disabled:!i,leftIcon:(0,R.jsx)(A,{"aria-hidden":!0}),children:`Install`}):(0,R.jsx)(r,{type:`button`,variant:h?`dangerOutline`:`outlined`,onClick:a,disabled:!h||l||!a,leftIcon:l?(0,R.jsx)(m,{className:`animate-spin`,"aria-hidden":!0}):(0,R.jsx)(E,{"aria-hidden":!0}),children:`Remove`})]})]}),(0,R.jsx)(c.Root,{asChild:!0,noPadding:!0,children:(0,R.jsxs)(`div`,{className:`flex flex-1 flex-col overflow-hidden sm:grid`,style:{gridTemplateColumns:`240px 1fr`},children:[(0,R.jsx)(`div`,{className:`max-h-40 shrink-0 overflow-y-auto border-b p-2 sm:max-h-none sm:border-b-0 sm:border-r`,style:{borderColor:`var(--border-base)`},children:g.isLoading?(0,R.jsx)(`div`,{className:`flex items-center justify-center py-8`,children:(0,R.jsx)(m,{className:`h-4 w-4 animate-spin`,style:{color:`var(--content-tertiary)`}})}):y.length===0?(0,R.jsx)(`p`,{className:`px-3 py-4 text-center text-body-medium-lighter`,style:{color:`var(--content-tertiary)`},children:`No files available.`}):y.map(e=>{let t=x===e.path,n=(e.mimeType??``).endsWith(`/directory`);return(0,R.jsxs)(`button`,{type:`button`,onClick:()=>f(e.path),className:`flex w-full items-center gap-2 rounded px-2 py-1.5 text-left text-body-medium-lighter transition-colors hover:bg-[var(--surface-hover)]`,style:{color:t?`var(--primary-base)`:`var(--content-default)`,backgroundColor:t?`color-mix(in oklab, var(--primary-base) 10%, transparent)`:void 0},children:[n?(0,R.jsx)(D,{className:`h-4 w-4 shrink-0`,style:{color:`var(--system-mid-strong)`}}):(0,R.jsx)(C,{className:`h-4 w-4 shrink-0`,style:{color:`var(--content-secondary)`}}),(0,R.jsx)(`span`,{className:`truncate`,children:e.name})]},e.path)})}),(0,R.jsx)(`div`,{className:`min-h-0 flex-1 overflow-hidden`,children:S.isLoading?(0,R.jsx)(`div`,{className:`flex h-full items-center justify-center`,children:(0,R.jsx)(m,{className:`h-6 w-6 animate-spin`,style:{color:`var(--content-tertiary)`}})}):w?(0,R.jsx)(K,{assistantId:e,skillId:t.id,fileName:w.name,filePath:w.path,content:S.data?.content??null,isBinary:!!S.data?.isBinary,editable:t.kind===`installed`},`${t.id}/${w.path}`):(0,R.jsx)(`p`,{className:`flex h-full items-center justify-center text-body-medium-lighter`,style:{color:`var(--content-tertiary)`},children:`Select a file to view its contents.`})})]})})]})}function K({assistantId:e,skillId:n,fileName:o,filePath:s,content:c,isBinary:l,editable:u}){let d=i(),p=a(),[m,h]=(0,L.useState)(!1),[_,v]=(0,L.useState)(``),y=`skills/${n}/${s}`,b=g({onSuccess:()=>{h(!1),v(``),p.invalidateQueries({queryKey:[{_id:`skillsByIdFilesContentGet`}]}),p.invalidateQueries({queryKey:[{_id:`skillsByIdFilesGet`}]}),s===`SKILL.md`&&p.invalidateQueries({queryKey:[{_id:`skillsGet`}]})},onError:e=>{t(e,{context:`skill-file-save`,bestEffort:!0})}}),x=m&&_!==(c??``),C=(0,L.useCallback)(()=>{!x||b.isPending||b.mutate({path:{assistant_id:e},body:{path:y,content:_,encoding:`utf8`}})},[x,b,e,y,_]),w=(0,L.useCallback)(()=>{h(!0),v(c??``),b.reset()},[c,b]),E=(0,L.useCallback)(()=>{h(!1),v(``),b.reset()},[b]);if(l)return(0,R.jsx)(`p`,{className:`flex h-full items-center justify-center text-body-medium-lighter`,style:{color:`var(--content-tertiary)`},children:`Binary file — no preview available.`});if(c===null)return(0,R.jsxs)(`p`,{className:`flex h-full items-center justify-center text-body-medium-lighter`,style:{color:`var(--content-tertiary)`},children:[`No preview available for `,o,`.`]});let D=u?(0,R.jsx)(r,{variant:`ghost`,size:`regular`,iconOnly:(0,R.jsx)(f,{"aria-hidden":!0}),onClick:()=>d(`${S.workspace}?file=${encodeURIComponent(y)}`),"aria-label":`Open in Workspace`,className:`hover:bg-[var(--surface-base)]`}):void 0;return T(o,void 0)&&!m?(0,R.jsx)(`div`,{className:`relative flex h-full flex-col`,children:(0,R.jsxs)(`div`,{className:`relative flex-1 overflow-auto px-6 py-4`,style:{color:`var(--content-default)`},children:[(0,R.jsx)(F,{content:c,fileName:o,showEdit:u,isEditing:!1,onToggleEdit:w,extraActions:D}),(0,R.jsx)(j,{content:c})]})}):(0,R.jsxs)(`div`,{className:`flex h-full flex-col`,children:[(0,R.jsxs)(`div`,{className:`relative flex-1 overflow-hidden`,children:[(0,R.jsx)(F,{content:m?_:c,fileName:o,showEdit:u,isEditing:m,onToggleEdit:()=>m?E():w(),extraActions:D}),m?(0,R.jsx)(P,{value:_,onChange:v,onSave:C}):(0,R.jsx)(M,{content:c,readOnly:!u,onStartEdit:w})]}),m&&(0,R.jsx)(N,{isDirty:x,isSaving:b.isPending,error:b.isError?`Save failed`:null,onSave:C,onDiscard:E})]})}async function q(e,t,n){let{data:r,error:i,response:a}=await h({path:{assistant_id:e},body:n?{slug:t,version:n}:{slug:t},throwOnError:!1});if(y(a,i,`Failed to install skill.`),!a.ok)throw new x(a.status,b(i,a,`Failed to install skill.`));return r??{ok:!0}}export{W as a,I as c,H as i,G as n,V as o,U as r,z as s,q as t};
|
|
@@ -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-CN7ObyIk.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-SpCsmAdG.js";import{t as D}from"./notice-CynJKEow.js";import{t as O}from"./popover-BsF65jZY.js";import{t as k}from"./input-Ch7OC6ME.js";import{n as A,t as j}from"./panel-item-BLQE_l-g.js";import{n as M}from"./toast-CxaZ5f1d.js";import{t as N}from"./createLucideIcon-KBgJOpms.js";import{t as P}from"./external-link-CyRCaWBE.js";import{t as F}from"./loader-circle-YAV9sMh_.js";import{t as I}from"./pencil-Cyrr5VNX.js";import{t as L}from"./sparkles-BoIJjAXt.js";import{t as R}from"./x-b3o2p6YU.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-DfnbKPpc.js";import{r as V}from"./api-errors-C3sAdlZQ.js";import{F as ce}from"./auth-store-Cc0c0sQk.js";import{r as le}from"./api-kMnfZUPa.js";import{a as H}from"./routes-BLyehs4B.js";import{n as ue}from"./use-is-mobile-D_0cze0t.js";import{S as U,b as W,vt as de,x as fe,yt as pe}from"./react-query.gen-CRARj4mG.js";import{$r as G,Ct as me,H as he,Jt as ge,Kr as _e,Kt as ve,Nr as K,U as q,Yi as ye,ct as be,dt as xe,ft as Se,gt as Ce,ht as we,lt as Te,mt as J,na as Ee,ta as Y,ut as De,wt as Oe,x as ke,zi as Ae}from"./index-DhxGhfwI.js";function je(e,t){let n=new Set(t);return e.filter(e=>!n.has(e))}function Me(e,t,n){let r=e.slice(0);return r[t]=n,r}var Ne=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&&(je(e,n).forEach(e=>{e.destroy()}),je(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=Me(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)})})}}},X=e(i(),1);function Pe({queries:e,...t},n){let r=p(n),i=C(),a=v(),o=X.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]=X.useState(()=>new Ne(r,o,t)),[c,l,d]=s.getOptimisticResult(o,t.combine),S=!i&&t.subscribed!==!1;X.useSyncExternalStore(X.useCallback(e=>S?s.subscribe(f.batchCalls(e)):u,[s,S]),()=>s.getCurrentResult(),()=>s.getCurrentResult()),X.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 Fe=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 Ie({assistantId:e,providerKey:t,displayName:n,managedAvailable:r,connectionsQueryKey:i,allConnections:a}){let o=p(),s=ce(),c=(0,X.useRef)(null),l=(0,X.useRef)(null),u=(0,X.useRef)(null),d=(0,X.useRef)(null),[f,m]=(0,X.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,X.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,X.useCallback)(async(e,n)=>{if(!r)return!1;for(let r=0;r<8;r+=1){r>0&&await De(750);try{if(o.invalidateQueries({queryKey:i}),Te(await o.fetchQuery({...W({path:{assistant_id:e}}),staleTime:0}),t,n))return!0}catch{}}return!1},[i,r,t,o]);(0,X.useEffect)(()=>{let e=e=>{let t=l.current;if(!t)return;let n=xe(e,window.location.origin,t.requestId);n&&_(n)},t=e=>{let t=l.current;if(!t)return;let n=Se(e,t.requestId);n&&(_(n),window.localStorage.removeItem(J(t.requestId)))};return window.addEventListener(`message`,e),window.addEventListener(`storage`,t),()=>{window.removeEventListener(`message`,e),window.removeEventListener(`storage`,t)}},[_]),Ce((0,X.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,X.useEffect)(()=>Oe(()=>{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,X.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 he(e)}catch(e){g(),h(),M.error(e instanceof Error?e.message:`Failed to start ${n} authorization.`);return}let u=be(await o.fetchQuery({...W({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){me(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(J(e.requestId));if(t){let n=we(t);if(n&&n.requestId===e.requestId){_(n),window.localStorage.removeItem(J(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 Z=w();function Le({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,Z.jsx)(`div`,{className:`flex items-center justify-center py-10`,children:(0,Z.jsx)(F,{className:`h-5 w-5 animate-spin text-[var(--content-disabled)]`})}):r.length===0?o||s?(0,Z.jsxs)(`div`,{className:`flex flex-col items-center gap-3 py-10`,children:[(0,Z.jsx)(q,{providerKey:t,displayName:e,logoUrl:n,size:48}),(0,Z.jsxs)(`div`,{className:`flex items-center gap-2 text-body-medium-lighter text-[var(--content-tertiary)]`,children:[(0,Z.jsx)(F,{className:`h-3.5 w-3.5 animate-spin`}),`Waiting for authorization...`]})]}):(0,Z.jsxs)(`div`,{className:`flex flex-col items-center gap-3 py-10`,children:[(0,Z.jsx)(q,{providerKey:t,displayName:e,logoUrl:n,size:48}),(0,Z.jsx)(`p`,{className:`text-body-medium-default text-[var(--content-secondary)]`,children:`Connect Account to continue`}),(0,Z.jsxs)(`div`,{className:`flex flex-col items-center gap-2`,children:[(0,Z.jsx)(a,{variant:`primary`,size:`compact`,leftIcon:(0,Z.jsx)(G,{}),onClick:()=>l(),disabled:f,children:`Connect Account`}),d.map(e=>(0,Z.jsx)(a,{variant:`outlined`,size:`compact`,leftIcon:(0,Z.jsx)(Fe,{}),onClick:()=>l(e.scopes),disabled:f,children:e.label},e.id))]})]}):(0,Z.jsxs)(`div`,{className:`rounded-lg border border-[var(--border-base)]`,children:[(0,Z.jsx)(`ul`,{className:`divide-y divide-[var(--border-base)]`,children:r.map(r=>{let i=c===r.id;return(0,Z.jsxs)(`li`,{className:`flex items-center gap-3 px-4 py-3`,children:[(0,Z.jsx)(q,{providerKey:t,displayName:e,logoUrl:n,size:20}),(0,Z.jsx)(`span`,{className:`min-w-0 flex-1 truncate text-body-medium-default text-[var(--content-default)]`,children:r.account_label??`${e} Account`}),(0,Z.jsx)(a,{variant:`dangerOutline`,size:`compact`,iconOnly:i?(0,Z.jsx)(F,{className:`animate-spin`}):(0,Z.jsx)(K,{}),onClick:()=>u(r),disabled:i,"aria-label":`Disconnect ${r.account_label??`${e} account`}`})]},r.id)})}),(0,Z.jsx)(`div`,{className:`border-t border-[var(--border-base)] px-4 py-3 dark:border-[var(--border-base)]`,children:f?(0,Z.jsxs)(`div`,{className:`flex items-center gap-2 text-body-medium-lighter text-[var(--content-tertiary)]`,children:[(0,Z.jsx)(F,{className:`h-3.5 w-3.5 animate-spin`}),`Waiting for authorization...`]}):(0,Z.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,Z.jsx)(a,{variant:`primary`,size:`compact`,leftIcon:(0,Z.jsx)(P,{}),onClick:()=>l(),disabled:f,children:`Connect account`}),d.map(e=>(0,Z.jsx)(a,{variant:`outlined`,size:`compact`,leftIcon:(0,Z.jsx)(Fe,{}),onClick:()=>l(e.scopes),disabled:f,children:e.label},e.id))]})})]})}function Q(e){return e.length>16?`${e.slice(0,12)}…${e.slice(-4)}`:e.length>8?`${e.slice(0,8)}…`:e}function Re(e){try{return new Date(e).toLocaleDateString(void 0,{year:`numeric`,month:`short`,day:`numeric`})}catch{return``}}function ze({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=Pe({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,X.useState)(!1),[b,x]=(0,X.useState)(``),[C,w]=(0,X.useState)(``),[D,O]=(0,X.useState)(!1),[A,j]=(0,X.useState)(null),[N,I]=(0,X.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,Z.jsx)(`div`,{className:`flex items-center justify-center py-10`,children:(0,Z.jsx)(F,{className:`h-5 w-5 animate-spin text-[var(--content-disabled)]`})}):(0,Z.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[c.length===0||v?(0,Z.jsx)(T.Root,{children:(0,Z.jsxs)(T.Body,{className:`flex flex-col gap-3`,children:[(0,Z.jsxs)(`div`,{className:`space-y-1`,children:[(0,Z.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,Z.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,Z.jsxs)(`div`,{className:`space-y-1`,children:[(0,Z.jsx)(`p`,{className:`text-body-small-default text-[var(--content-secondary)]`,children:`Redirect URL`}),(0,Z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Z.jsx)(k,{type:`text`,value:l,readOnly:!0,fullWidth:!0}),(0,Z.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,Z.jsx)(Ee,{"aria-hidden":!0}):(0,Z.jsx)(Ae,{"aria-hidden":!0})})]}),(0,Z.jsx)(`p`,{className:`text-body-small-default text-[var(--content-tertiary)]`,children:`Add this URL to your OAuth app's redirect settings.`})]}):null,(0,Z.jsx)(k,{label:`Client ID`,type:`text`,value:b,onChange:e=>x(e.target.value),placeholder:`Enter your client ID`,fullWidth:!0}),(0,Z.jsx)(k,{label:`Client Secret`,type:`password`,value:C,onChange:e=>w(e.target.value),placeholder:`Enter your client secret`,fullWidth:!0}),(0,Z.jsxs)(`div`,{className:`flex items-center justify-end gap-2 pt-1`,children:[c.length>0?(0,Z.jsx)(a,{type:`button`,variant:`outlined`,size:`compact`,onClick:()=>{y(!1),x(``),w(``)},disabled:L,children:`Cancel`}):null,(0,Z.jsx)(a,{type:`button`,size:`compact`,onClick:ce,disabled:L||!b.trim()||!C.trim(),leftIcon:L?(0,Z.jsx)(F,{className:`animate-spin`,"aria-hidden":!0}):(0,Z.jsx)(G,{"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,Z.jsx)(T.Root,{children:(0,Z.jsxs)(T.Body,{className:`flex flex-col gap-3`,children:[(0,Z.jsxs)(`div`,{className:`flex items-start justify-between gap-2`,children:[(0,Z.jsxs)(`div`,{className:`min-w-0 space-y-0.5`,children:[(0,Z.jsx)(`p`,{className:`truncate text-body-medium-default text-[var(--content-default)]`,children:Q(e.client_id)}),(0,Z.jsxs)(`p`,{className:`text-body-small-default text-[var(--content-tertiary)]`,children:[`Added `,Re(e.created_at)]})]}),(0,Z.jsx)(a,{type:`button`,variant:`dangerOutline`,size:`compact`,onClick:()=>j(e),disabled:o,"aria-label":`Delete OAuth app ${Q(e.client_id)}`,iconOnly:o?(0,Z.jsx)(F,{className:`animate-spin`,"aria-hidden":!0}):(0,Z.jsx)(K,{"aria-hidden":!0})})]}),i.length>0?(0,Z.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,Z.jsxs)(`li`,{className:`flex items-center gap-3 px-3 py-2`,children:[(0,Z.jsx)(q,{providerKey:t,displayName:n,logoUrl:r,size:18}),(0,Z.jsx)(`span`,{className:`min-w-0 flex-1 truncate text-body-medium-lighter text-[var(--content-default)]`,children:i.account_info??`${n} Account`}),(0,Z.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,Z.jsx)(F,{className:`animate-spin`,"aria-hidden":!0}):(0,Z.jsx)(K,{"aria-hidden":!0})})]},i.id)})}):null,(0,Z.jsx)(a,{type:`button`,size:`compact`,onClick:()=>H(e),disabled:s,className:`w-full`,leftIcon:s?(0,Z.jsx)(F,{className:`animate-spin`,"aria-hidden":!0}):(0,Z.jsx)(P,{"aria-hidden":!0}),children:s?`Waiting for authorization...`:`Connect account`})]})},e.id)}),c.length>0&&!v?(0,Z.jsx)(a,{type:`button`,variant:`outlined`,size:`compact`,onClick:()=>y(!0),className:`w-full border-dashed`,leftIcon:(0,Z.jsx)(G,{"aria-hidden":!0}),children:`Add Another App`}):null,(0,Z.jsx)(E,{open:A!==null,title:`Delete OAuth app`,message:A?`Delete OAuth app '${Q(A.client_id)}'? This will disconnect all linked accounts.`:``,confirmLabel:`Delete`,destructive:!0,onConfirm:le,onCancel:()=>j(null)}),(0,Z.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 Be={};function Ve(e){return Be[e]??[]}function He({assistantId:e,platformAssistantId:t,providerKey:n,displayName:r,description:i,logoUrl:o,platformGate:s,onClose:c}){let l=p(),u=s===`full`,d=!ve(),[f,m]=(0,X.useState)(s===`gated`&&d?`your-own`:`managed`);(0,X.useEffect)(()=>{!d&&f===`your-own`&&m(`managed`)},[d,f]);let[h,g]=(0,X.useState)(null),[_,v]=(0,X.useState)(null),y=fe({path:{assistant_id:t}}),{data:b,isLoading:x}=S({...W({path:{assistant_id:t}}),enabled:u}),C=(b??[]).filter(e=>e.provider===n&&e.connected),{handleConnect:w,oauthInProgress:T,startOAuthPending:D}=Ie({assistantId:e,providerKey:n,displayName:r,managedAvailable:u,connectionsQueryKey:y,allConnections:b}),O={path:{assistant_id:t}},k=de({onSuccess(e,t){M.success(`${r} account disconnected.`);let n=t.path.connection_id;U(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,X.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,Z.jsxs)(`div`,{className:`fixed inset-0 z-50 flex items-center justify-center bg-black/40 p-4`,children:[(0,Z.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,Z.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,Z.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,Z.jsx)(q,{providerKey:n,displayName:r,logoUrl:o,size:32}),(0,Z.jsxs)(`div`,{children:[(0,Z.jsxs)(`h2`,{id:`integration-modal-title`,className:`text-title-small text-[var(--content-default)]`,children:[r,` OAuth`]}),(0,Z.jsx)(`p`,{className:`text-body-small-default text-[var(--content-tertiary)]`,children:N})]})]}),(0,Z.jsx)(a,{variant:`ghost`,size:`compact`,iconOnly:(0,Z.jsx)(R,{}),"aria-label":`Close`,onClick:c})]}),(0,Z.jsxs)(`div`,{className:`space-y-4 px-5 py-4`,children:[s!==`gated`&&d&&(0,Z.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,Z.jsx)(Ue,{active:f===`managed`,onClick:()=>m(`managed`),children:`Managed`}),(0,Z.jsx)(Ue,{active:f===`your-own`,onClick:()=>m(`your-own`),children:`Your Own`})]}),f===`managed`&&s!==`gated`?s===`disabled`?(0,Z.jsx)(ke,{children:`Log in to the Vellum platform to manage OAuth connections.`}):(0,Z.jsx)(Le,{displayName:r,providerKey:n,logoUrl:o,connections:C,connectionsLoading:x,startPending:D,oauthInProgress:T,disconnectingId:k.isPending?h:null,onConnect:w,onDisconnect:A,connectPresets:Ve(n)}):d?(0,Z.jsx)(ze,{assistantId:e,providerKey:n,displayName:r,logoUrl:o}):null]}),(0,Z.jsx)(`div`,{className:`flex justify-end border-t border-[var(--border-base)] px-5 py-3 dark:border-[var(--border-base)]`,children:(0,Z.jsx)(a,{variant:`outlined`,size:`compact`,onClick:c,children:`Confirm`})})]}),(0,Z.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 Ue({active:e,onClick:t,children:n}){return(0,Z.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 We({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,X.useState)(!1),[m,h]=(0,X.useState)(!1),g=ue(),_=fe({path:{assistant_id:e}}),v={path:{assistant_id:e}},y=de({onSuccess(e,t){M.success(`${n} account disconnected.`);let r=t.path.connection_id;U(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,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(T.Root,{children:(0,Z.jsxs)(T.Body,{padding:`sm`,className:`flex items-center gap-4 px-4`,children:[(0,Z.jsx)(q,{providerKey:t,displayName:n,logoUrl:i,size:32}),(0,Z.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,Z.jsx)(`p`,{className:`truncate text-title-small text-[var(--content-default)]`,children:n}),r&&(0,Z.jsx)(`p`,{className:`truncate text-body-medium-lighter text-[var(--content-tertiary)]`,children:r})]}),u&&s===`full`?(0,Z.jsx)(`div`,{className:`shrink-0`,children:(0,Z.jsx)(Ge,{displayName:n,open:d,onOpenChange:f,onEditConnections:()=>{f(!1),c()},onDisable:()=>{f(!1),b()},disablePending:y.isPending,isMobile:g})}):(0,Z.jsx)(a,{variant:`primary`,onClick:c,className:`shrink-0`,children:`Enable`})]})}),(0,Z.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 Ge({displayName:e,open:t,onOpenChange:n,onEditConnections:r,onDisable:i,disablePending:o,isMobile:s}){return s?(0,Z.jsxs)(A.Root,{open:t,onOpenChange:n,children:[(0,Z.jsx)(A.Trigger,{asChild:!0,children:(0,Z.jsx)(a,{variant:`outlined`,rightIcon:(0,Z.jsx)(Y,{}),"aria-haspopup":`menu`,"aria-expanded":t,children:`Configure`})}),(0,Z.jsxs)(A.Content,{children:[(0,Z.jsx)(A.Header,{children:(0,Z.jsx)(A.Title,{children:e})}),(0,Z.jsxs)(A.Body,{children:[(0,Z.jsx)(j,{icon:I,label:`Edit connections`,onSelect:r}),(0,Z.jsx)(j,{icon:o?F:ye,label:`Disable`,onSelect:()=>{o||i()}})]})]})]}):(0,Z.jsxs)(O.Root,{open:t,onOpenChange:n,children:[(0,Z.jsx)(O.Trigger,{asChild:!0,children:(0,Z.jsx)(a,{variant:`outlined`,rightIcon:(0,Z.jsx)(Y,{}),"aria-haspopup":`menu`,"aria-expanded":t,children:`Configure`})}),(0,Z.jsxs)(O.Content,{align:`end`,sideOffset:4,role:`menu`,className:`w-56 overflow-hidden p-0`,children:[(0,Z.jsx)(a,{type:`button`,role:`menuitem`,variant:`ghost`,onClick:r,className:`w-full justify-start rounded-none`,leftIcon:(0,Z.jsx)(I,{"aria-hidden":!0}),children:`Edit connections`}),(0,Z.jsx)(a,{type:`button`,role:`menuitem`,variant:`dangerGhost`,onClick:i,disabled:o,className:`w-full justify-start rounded-none`,leftIcon:o?(0,Z.jsx)(F,{className:`animate-spin`,"aria-hidden":!0}):(0,Z.jsx)(ye,{"aria-hidden":!0}),children:`Disable`})]})]})}function Ke(e,t){let[n,r]=(0,X.useState)({platformAssistantId:null,isLoading:!1,error:null});return(0,X.useEffect)(()=>{if(!t||!e){r({platformAssistantId:null,isLoading:!1,error:null});return}let n=!0;return r({platformAssistantId:null,isLoading:!0,error:null}),he(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 qe=`vellum:integrations:bannerDismissed`,Je=[{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=ge(),[c,l]=(0,X.useState)(null),[u,d]=(0,X.useState)(!0),[f,p]=(0,X.useState)(``),[m,h]=(0,X.useState)(`all`),[g,_]=(0,X.useState)(!1),[v,y]=(0,X.useState)(!0),[b,x]=(0,X.useState)(null);(0,X.useEffect)(()=>{y(t(qe,`false`)===`true`)},[]);let C=()=>{y(!0),n(qe,`true`)};(0,X.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}=Ke(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({...W({path:{assistant_id:w??``}}),enabled:!!w&&a===`full`});(0,X.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,X.useMemo)(()=>E?.filter(e=>e.supports_managed_mode)??[],[E]),R=(0,X.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=Je.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,X.useMemo)(()=>b?I.find(e=>e.provider_key===b)??null:null,[I,b]);return(0,Z.jsxs)(`div`,{className:`space-y-4`,children:[!v&&(0,Z.jsxs)(D,{tone:`info`,icon:(0,Z.jsx)(L,{className:`h-3.5 w-3.5`}),onDismiss:C,children:[(0,Z.jsx)(`span`,{className:`text-body-medium-default`,children:`Tip:`}),` You can enable integrations by mentioning them in chat.`]}),(0,Z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Z.jsx)(k,{type:`text`,value:f,onChange:e=>p(e.target.value),placeholder:`Search Integrations`,"aria-label":`Search integrations`,leftIcon:(0,Z.jsx)(_e,{className:`h-3.5 w-3.5`,"aria-hidden":!0}),fullWidth:!0,wrapperClassName:`flex-1`}),(0,Z.jsxs)(O.Root,{open:g,onOpenChange:_,children:[(0,Z.jsx)(O.Trigger,{asChild:!0,children:(0,Z.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,Z.jsx)(`span`,{children:te}),(0,Z.jsx)(Y,{className:`h-3.5 w-3.5`})]})}),(0,Z.jsx)(O.Content,{align:`end`,sideOffset:4,className:`w-36 overflow-hidden p-0`,children:(0,Z.jsx)(`div`,{role:`listbox`,children:Je.map(e=>{let t=e.value===m;return(0,Z.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,Z.jsx)(`div`,{children:ee?(0,Z.jsxs)(`div`,{className:`flex items-center gap-2 py-6 text-body-medium-lighter text-[var(--content-tertiary)]`,children:[(0,Z.jsx)(F,{className:`h-4 w-4 animate-spin`}),(0,Z.jsx)(`span`,{children:`Loading...`})]}):j?(0,Z.jsx)(`p`,{className:`text-body-medium-lighter text-[var(--content-tertiary)]`,children:`Failed to load integrations. Please try again.`}):c?R.length===0?(0,Z.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,Z.jsx)(_e,{className:`h-6 w-6 text-[var(--content-disabled)]`}),(0,Z.jsx)(`p`,{className:`text-body-medium-default text-[var(--content-default)]`,children:ne}),(0,Z.jsx)(`p`,{className:`text-body-small-default text-[var(--content-tertiary)]`,children:re})]}):(0,Z.jsx)(`div`,{className:`space-y-2`,children:R.map(e=>(0,Z.jsx)(We,{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,Z.jsx)(`p`,{className:`text-body-medium-lighter text-[var(--content-tertiary)]`,children:`No assistant found. Hatch an assistant to connect integrations.`})}),z&&c&&(0,Z.jsx)(He,{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,Z.jsx)(`div`,{className:`space-y-6`,children:(0,Z.jsx)(X.Suspense,{children:(0,Z.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-AoUURkgi.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-SpCsmAdG.js";import{t as D}from"./notice-CynJKEow.js";import{t as O}from"./popover-BsF65jZY.js";import{t as k}from"./input-Ch7OC6ME.js";import{n as A,t as j}from"./panel-item-BLQE_l-g.js";import{n as M}from"./toast-CxaZ5f1d.js";import{t as N}from"./createLucideIcon-BlMXrA59.js";import{t as P}from"./external-link-DAovIsxF.js";import{t as F}from"./loader-circle-Cw1KvvLK.js";import{t as I}from"./pencil-Dm2eFMe3.js";import{t as L}from"./sparkles-C8hCShdb.js";import{t as R}from"./x-BeVbiDS2.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-4ZMhZ-fj.js";import{r as V}from"./api-errors-D3EsNrwn.js";import{F as ce}from"./auth-store-CbVvQiBR.js";import{r as le}from"./api-CjVG_nMi.js";import{a as H}from"./routes-B9xcBuuC.js";import{n as ue}from"./use-is-mobile-D_0cze0t.js";import{S as U,b as W,vt as de,x as fe,yt as pe}from"./react-query.gen-CRARj4mG.js";import{$r as G,Ct as me,Jt as he,Kr as ge,Kt as _e,Nr as K,U as ve,W as q,Yi as ye,ct as be,dt as xe,ft as Se,gt as Ce,ht as we,lt as Te,mt as J,na as Ee,ta as Y,ut as De,wt as Oe,x as ke,zi as Ae}from"./index-Cx6vyW7T.js";function je(e,t){let n=new Set(t);return e.filter(e=>!n.has(e))}function Me(e,t,n){let r=e.slice(0);return r[t]=n,r}var Ne=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&&(je(e,n).forEach(e=>{e.destroy()}),je(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=Me(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)})})}}},X=e(i(),1);function Pe({queries:e,...t},n){let r=p(n),i=C(),a=v(),o=X.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]=X.useState(()=>new Ne(r,o,t)),[c,l,d]=s.getOptimisticResult(o,t.combine),S=!i&&t.subscribed!==!1;X.useSyncExternalStore(X.useCallback(e=>S?s.subscribe(f.batchCalls(e)):u,[s,S]),()=>s.getCurrentResult(),()=>s.getCurrentResult()),X.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 Fe=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 Ie({assistantId:e,providerKey:t,displayName:n,managedAvailable:r,connectionsQueryKey:i,allConnections:a}){let o=p(),s=ce(),c=(0,X.useRef)(null),l=(0,X.useRef)(null),u=(0,X.useRef)(null),d=(0,X.useRef)(null),[f,m]=(0,X.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,X.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,X.useCallback)(async(e,n)=>{if(!r)return!1;for(let r=0;r<8;r+=1){r>0&&await De(750);try{if(o.invalidateQueries({queryKey:i}),Te(await o.fetchQuery({...W({path:{assistant_id:e}}),staleTime:0}),t,n))return!0}catch{}}return!1},[i,r,t,o]);(0,X.useEffect)(()=>{let e=e=>{let t=l.current;if(!t)return;let n=xe(e,window.location.origin,t.requestId);n&&_(n)},t=e=>{let t=l.current;if(!t)return;let n=Se(e,t.requestId);n&&(_(n),window.localStorage.removeItem(J(t.requestId)))};return window.addEventListener(`message`,e),window.addEventListener(`storage`,t),()=>{window.removeEventListener(`message`,e),window.removeEventListener(`storage`,t)}},[_]),Ce((0,X.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,X.useEffect)(()=>Oe(()=>{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,X.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 ve(e)}catch(e){g(),h(),M.error(e instanceof Error?e.message:`Failed to start ${n} authorization.`);return}let u=be(await o.fetchQuery({...W({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){me(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(J(e.requestId));if(t){let n=we(t);if(n&&n.requestId===e.requestId){_(n),window.localStorage.removeItem(J(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 Z=w();function Le({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,Z.jsx)(`div`,{className:`flex items-center justify-center py-10`,children:(0,Z.jsx)(F,{className:`h-5 w-5 animate-spin text-[var(--content-disabled)]`})}):r.length===0?o||s?(0,Z.jsxs)(`div`,{className:`flex flex-col items-center gap-3 py-10`,children:[(0,Z.jsx)(q,{providerKey:t,displayName:e,logoUrl:n,size:48}),(0,Z.jsxs)(`div`,{className:`flex items-center gap-2 text-body-medium-lighter text-[var(--content-tertiary)]`,children:[(0,Z.jsx)(F,{className:`h-3.5 w-3.5 animate-spin`}),`Waiting for authorization...`]})]}):(0,Z.jsxs)(`div`,{className:`flex flex-col items-center gap-3 py-10`,children:[(0,Z.jsx)(q,{providerKey:t,displayName:e,logoUrl:n,size:48}),(0,Z.jsx)(`p`,{className:`text-body-medium-default text-[var(--content-secondary)]`,children:`Connect Account to continue`}),(0,Z.jsxs)(`div`,{className:`flex flex-col items-center gap-2`,children:[(0,Z.jsx)(a,{variant:`primary`,size:`compact`,leftIcon:(0,Z.jsx)(G,{}),onClick:()=>l(),disabled:f,children:`Connect Account`}),d.map(e=>(0,Z.jsx)(a,{variant:`outlined`,size:`compact`,leftIcon:(0,Z.jsx)(Fe,{}),onClick:()=>l(e.scopes),disabled:f,children:e.label},e.id))]})]}):(0,Z.jsxs)(`div`,{className:`rounded-lg border border-[var(--border-base)]`,children:[(0,Z.jsx)(`ul`,{className:`divide-y divide-[var(--border-base)]`,children:r.map(r=>{let i=c===r.id;return(0,Z.jsxs)(`li`,{className:`flex items-center gap-3 px-4 py-3`,children:[(0,Z.jsx)(q,{providerKey:t,displayName:e,logoUrl:n,size:20}),(0,Z.jsx)(`span`,{className:`min-w-0 flex-1 truncate text-body-medium-default text-[var(--content-default)]`,children:r.account_label??`${e} Account`}),(0,Z.jsx)(a,{variant:`dangerOutline`,size:`compact`,iconOnly:i?(0,Z.jsx)(F,{className:`animate-spin`}):(0,Z.jsx)(K,{}),onClick:()=>u(r),disabled:i,"aria-label":`Disconnect ${r.account_label??`${e} account`}`})]},r.id)})}),(0,Z.jsx)(`div`,{className:`border-t border-[var(--border-base)] px-4 py-3 dark:border-[var(--border-base)]`,children:f?(0,Z.jsxs)(`div`,{className:`flex items-center gap-2 text-body-medium-lighter text-[var(--content-tertiary)]`,children:[(0,Z.jsx)(F,{className:`h-3.5 w-3.5 animate-spin`}),`Waiting for authorization...`]}):(0,Z.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,Z.jsx)(a,{variant:`primary`,size:`compact`,leftIcon:(0,Z.jsx)(P,{}),onClick:()=>l(),disabled:f,children:`Connect account`}),d.map(e=>(0,Z.jsx)(a,{variant:`outlined`,size:`compact`,leftIcon:(0,Z.jsx)(Fe,{}),onClick:()=>l(e.scopes),disabled:f,children:e.label},e.id))]})})]})}function Q(e){return e.length>16?`${e.slice(0,12)}…${e.slice(-4)}`:e.length>8?`${e.slice(0,8)}…`:e}function Re(e){try{return new Date(e).toLocaleDateString(void 0,{year:`numeric`,month:`short`,day:`numeric`})}catch{return``}}function ze({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=Pe({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,X.useState)(!1),[b,x]=(0,X.useState)(``),[C,w]=(0,X.useState)(``),[D,O]=(0,X.useState)(!1),[A,j]=(0,X.useState)(null),[N,I]=(0,X.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,Z.jsx)(`div`,{className:`flex items-center justify-center py-10`,children:(0,Z.jsx)(F,{className:`h-5 w-5 animate-spin text-[var(--content-disabled)]`})}):(0,Z.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[c.length===0||v?(0,Z.jsx)(T.Root,{children:(0,Z.jsxs)(T.Body,{className:`flex flex-col gap-3`,children:[(0,Z.jsxs)(`div`,{className:`space-y-1`,children:[(0,Z.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,Z.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,Z.jsxs)(`div`,{className:`space-y-1`,children:[(0,Z.jsx)(`p`,{className:`text-body-small-default text-[var(--content-secondary)]`,children:`Redirect URL`}),(0,Z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Z.jsx)(k,{type:`text`,value:l,readOnly:!0,fullWidth:!0}),(0,Z.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,Z.jsx)(Ee,{"aria-hidden":!0}):(0,Z.jsx)(Ae,{"aria-hidden":!0})})]}),(0,Z.jsx)(`p`,{className:`text-body-small-default text-[var(--content-tertiary)]`,children:`Add this URL to your OAuth app's redirect settings.`})]}):null,(0,Z.jsx)(k,{label:`Client ID`,type:`text`,value:b,onChange:e=>x(e.target.value),placeholder:`Enter your client ID`,fullWidth:!0}),(0,Z.jsx)(k,{label:`Client Secret`,type:`password`,value:C,onChange:e=>w(e.target.value),placeholder:`Enter your client secret`,fullWidth:!0}),(0,Z.jsxs)(`div`,{className:`flex items-center justify-end gap-2 pt-1`,children:[c.length>0?(0,Z.jsx)(a,{type:`button`,variant:`outlined`,size:`compact`,onClick:()=>{y(!1),x(``),w(``)},disabled:L,children:`Cancel`}):null,(0,Z.jsx)(a,{type:`button`,size:`compact`,onClick:ce,disabled:L||!b.trim()||!C.trim(),leftIcon:L?(0,Z.jsx)(F,{className:`animate-spin`,"aria-hidden":!0}):(0,Z.jsx)(G,{"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,Z.jsx)(T.Root,{children:(0,Z.jsxs)(T.Body,{className:`flex flex-col gap-3`,children:[(0,Z.jsxs)(`div`,{className:`flex items-start justify-between gap-2`,children:[(0,Z.jsxs)(`div`,{className:`min-w-0 space-y-0.5`,children:[(0,Z.jsx)(`p`,{className:`truncate text-body-medium-default text-[var(--content-default)]`,children:Q(e.client_id)}),(0,Z.jsxs)(`p`,{className:`text-body-small-default text-[var(--content-tertiary)]`,children:[`Added `,Re(e.created_at)]})]}),(0,Z.jsx)(a,{type:`button`,variant:`dangerOutline`,size:`compact`,onClick:()=>j(e),disabled:o,"aria-label":`Delete OAuth app ${Q(e.client_id)}`,iconOnly:o?(0,Z.jsx)(F,{className:`animate-spin`,"aria-hidden":!0}):(0,Z.jsx)(K,{"aria-hidden":!0})})]}),i.length>0?(0,Z.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,Z.jsxs)(`li`,{className:`flex items-center gap-3 px-3 py-2`,children:[(0,Z.jsx)(q,{providerKey:t,displayName:n,logoUrl:r,size:18}),(0,Z.jsx)(`span`,{className:`min-w-0 flex-1 truncate text-body-medium-lighter text-[var(--content-default)]`,children:i.account_info??`${n} Account`}),(0,Z.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,Z.jsx)(F,{className:`animate-spin`,"aria-hidden":!0}):(0,Z.jsx)(K,{"aria-hidden":!0})})]},i.id)})}):null,(0,Z.jsx)(a,{type:`button`,size:`compact`,onClick:()=>H(e),disabled:s,className:`w-full`,leftIcon:s?(0,Z.jsx)(F,{className:`animate-spin`,"aria-hidden":!0}):(0,Z.jsx)(P,{"aria-hidden":!0}),children:s?`Waiting for authorization...`:`Connect account`})]})},e.id)}),c.length>0&&!v?(0,Z.jsx)(a,{type:`button`,variant:`outlined`,size:`compact`,onClick:()=>y(!0),className:`w-full border-dashed`,leftIcon:(0,Z.jsx)(G,{"aria-hidden":!0}),children:`Add Another App`}):null,(0,Z.jsx)(E,{open:A!==null,title:`Delete OAuth app`,message:A?`Delete OAuth app '${Q(A.client_id)}'? This will disconnect all linked accounts.`:``,confirmLabel:`Delete`,destructive:!0,onConfirm:le,onCancel:()=>j(null)}),(0,Z.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 Be={};function Ve(e){return Be[e]??[]}function He({assistantId:e,platformAssistantId:t,providerKey:n,displayName:r,description:i,logoUrl:o,platformGate:s,onClose:c}){let l=p(),u=s===`full`,d=!_e(),[f,m]=(0,X.useState)(s===`gated`&&d?`your-own`:`managed`);(0,X.useEffect)(()=>{!d&&f===`your-own`&&m(`managed`)},[d,f]);let[h,g]=(0,X.useState)(null),[_,v]=(0,X.useState)(null),y=fe({path:{assistant_id:t}}),{data:b,isLoading:x}=S({...W({path:{assistant_id:t}}),enabled:u}),C=(b??[]).filter(e=>e.provider===n&&e.connected),{handleConnect:w,oauthInProgress:T,startOAuthPending:D}=Ie({assistantId:e,providerKey:n,displayName:r,managedAvailable:u,connectionsQueryKey:y,allConnections:b}),O={path:{assistant_id:t}},k=de({onSuccess(e,t){M.success(`${r} account disconnected.`);let n=t.path.connection_id;U(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,X.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,Z.jsxs)(`div`,{className:`fixed inset-0 z-50 flex items-center justify-center bg-black/40 p-4`,children:[(0,Z.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,Z.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,Z.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,Z.jsx)(q,{providerKey:n,displayName:r,logoUrl:o,size:32}),(0,Z.jsxs)(`div`,{children:[(0,Z.jsxs)(`h2`,{id:`integration-modal-title`,className:`text-title-small text-[var(--content-default)]`,children:[r,` OAuth`]}),(0,Z.jsx)(`p`,{className:`text-body-small-default text-[var(--content-tertiary)]`,children:N})]})]}),(0,Z.jsx)(a,{variant:`ghost`,size:`compact`,iconOnly:(0,Z.jsx)(R,{}),"aria-label":`Close`,onClick:c})]}),(0,Z.jsxs)(`div`,{className:`space-y-4 px-5 py-4`,children:[s!==`gated`&&d&&(0,Z.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,Z.jsx)(Ue,{active:f===`managed`,onClick:()=>m(`managed`),children:`Managed`}),(0,Z.jsx)(Ue,{active:f===`your-own`,onClick:()=>m(`your-own`),children:`Your Own`})]}),f===`managed`&&s!==`gated`?s===`disabled`?(0,Z.jsx)(ke,{children:`Log in to the Vellum platform to manage OAuth connections.`}):(0,Z.jsx)(Le,{displayName:r,providerKey:n,logoUrl:o,connections:C,connectionsLoading:x,startPending:D,oauthInProgress:T,disconnectingId:k.isPending?h:null,onConnect:w,onDisconnect:A,connectPresets:Ve(n)}):d?(0,Z.jsx)(ze,{assistantId:e,providerKey:n,displayName:r,logoUrl:o}):null]}),(0,Z.jsx)(`div`,{className:`flex justify-end border-t border-[var(--border-base)] px-5 py-3 dark:border-[var(--border-base)]`,children:(0,Z.jsx)(a,{variant:`outlined`,size:`compact`,onClick:c,children:`Confirm`})})]}),(0,Z.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 Ue({active:e,onClick:t,children:n}){return(0,Z.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 We({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,X.useState)(!1),[m,h]=(0,X.useState)(!1),g=ue(),_=fe({path:{assistant_id:e}}),v={path:{assistant_id:e}},y=de({onSuccess(e,t){M.success(`${n} account disconnected.`);let r=t.path.connection_id;U(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,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(T.Root,{children:(0,Z.jsxs)(T.Body,{padding:`sm`,className:`flex items-center gap-4 px-4`,children:[(0,Z.jsx)(q,{providerKey:t,displayName:n,logoUrl:i,size:32}),(0,Z.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,Z.jsx)(`p`,{className:`truncate text-title-small text-[var(--content-default)]`,children:n}),r&&(0,Z.jsx)(`p`,{className:`truncate text-body-medium-lighter text-[var(--content-tertiary)]`,children:r})]}),u&&s===`full`?(0,Z.jsx)(`div`,{className:`shrink-0`,children:(0,Z.jsx)(Ge,{displayName:n,open:d,onOpenChange:f,onEditConnections:()=>{f(!1),c()},onDisable:()=>{f(!1),b()},disablePending:y.isPending,isMobile:g})}):(0,Z.jsx)(a,{variant:`primary`,onClick:c,className:`shrink-0`,children:`Enable`})]})}),(0,Z.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 Ge({displayName:e,open:t,onOpenChange:n,onEditConnections:r,onDisable:i,disablePending:o,isMobile:s}){return s?(0,Z.jsxs)(A.Root,{open:t,onOpenChange:n,children:[(0,Z.jsx)(A.Trigger,{asChild:!0,children:(0,Z.jsx)(a,{variant:`outlined`,rightIcon:(0,Z.jsx)(Y,{}),"aria-haspopup":`menu`,"aria-expanded":t,children:`Configure`})}),(0,Z.jsxs)(A.Content,{children:[(0,Z.jsx)(A.Header,{children:(0,Z.jsx)(A.Title,{children:e})}),(0,Z.jsxs)(A.Body,{children:[(0,Z.jsx)(j,{icon:I,label:`Edit connections`,onSelect:r}),(0,Z.jsx)(j,{icon:o?F:ye,label:`Disable`,onSelect:()=>{o||i()}})]})]})]}):(0,Z.jsxs)(O.Root,{open:t,onOpenChange:n,children:[(0,Z.jsx)(O.Trigger,{asChild:!0,children:(0,Z.jsx)(a,{variant:`outlined`,rightIcon:(0,Z.jsx)(Y,{}),"aria-haspopup":`menu`,"aria-expanded":t,children:`Configure`})}),(0,Z.jsxs)(O.Content,{align:`end`,sideOffset:4,role:`menu`,className:`w-56 overflow-hidden p-0`,children:[(0,Z.jsx)(a,{type:`button`,role:`menuitem`,variant:`ghost`,onClick:r,className:`w-full justify-start rounded-none`,leftIcon:(0,Z.jsx)(I,{"aria-hidden":!0}),children:`Edit connections`}),(0,Z.jsx)(a,{type:`button`,role:`menuitem`,variant:`dangerGhost`,onClick:i,disabled:o,className:`w-full justify-start rounded-none`,leftIcon:o?(0,Z.jsx)(F,{className:`animate-spin`,"aria-hidden":!0}):(0,Z.jsx)(ye,{"aria-hidden":!0}),children:`Disable`})]})]})}function Ke(e,t){let[n,r]=(0,X.useState)({platformAssistantId:null,isLoading:!1,error:null});return(0,X.useEffect)(()=>{if(!t||!e){r({platformAssistantId:null,isLoading:!1,error:null});return}let n=!0;return r({platformAssistantId:null,isLoading:!0,error:null}),ve(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 qe=`vellum:integrations:bannerDismissed`,Je=[{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,X.useState)(null),[u,d]=(0,X.useState)(!0),[f,p]=(0,X.useState)(``),[m,h]=(0,X.useState)(`all`),[g,_]=(0,X.useState)(!1),[v,y]=(0,X.useState)(!0),[b,x]=(0,X.useState)(null);(0,X.useEffect)(()=>{y(t(qe,`false`)===`true`)},[]);let C=()=>{y(!0),n(qe,`true`)};(0,X.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}=Ke(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({...W({path:{assistant_id:w??``}}),enabled:!!w&&a===`full`});(0,X.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,X.useMemo)(()=>E?.filter(e=>e.supports_managed_mode)??[],[E]),R=(0,X.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=Je.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,X.useMemo)(()=>b?I.find(e=>e.provider_key===b)??null:null,[I,b]);return(0,Z.jsxs)(`div`,{className:`space-y-4`,children:[!v&&(0,Z.jsxs)(D,{tone:`info`,icon:(0,Z.jsx)(L,{className:`h-3.5 w-3.5`}),onDismiss:C,children:[(0,Z.jsx)(`span`,{className:`text-body-medium-default`,children:`Tip:`}),` You can enable integrations by mentioning them in chat.`]}),(0,Z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Z.jsx)(k,{type:`text`,value:f,onChange:e=>p(e.target.value),placeholder:`Search Integrations`,"aria-label":`Search integrations`,leftIcon:(0,Z.jsx)(ge,{className:`h-3.5 w-3.5`,"aria-hidden":!0}),fullWidth:!0,wrapperClassName:`flex-1`}),(0,Z.jsxs)(O.Root,{open:g,onOpenChange:_,children:[(0,Z.jsx)(O.Trigger,{asChild:!0,children:(0,Z.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,Z.jsx)(`span`,{children:te}),(0,Z.jsx)(Y,{className:`h-3.5 w-3.5`})]})}),(0,Z.jsx)(O.Content,{align:`end`,sideOffset:4,className:`w-36 overflow-hidden p-0`,children:(0,Z.jsx)(`div`,{role:`listbox`,children:Je.map(e=>{let t=e.value===m;return(0,Z.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,Z.jsx)(`div`,{children:ee?(0,Z.jsxs)(`div`,{className:`flex items-center gap-2 py-6 text-body-medium-lighter text-[var(--content-tertiary)]`,children:[(0,Z.jsx)(F,{className:`h-4 w-4 animate-spin`}),(0,Z.jsx)(`span`,{children:`Loading...`})]}):j?(0,Z.jsx)(`p`,{className:`text-body-medium-lighter text-[var(--content-tertiary)]`,children:`Failed to load integrations. Please try again.`}):c?R.length===0?(0,Z.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,Z.jsx)(ge,{className:`h-6 w-6 text-[var(--content-disabled)]`}),(0,Z.jsx)(`p`,{className:`text-body-medium-default text-[var(--content-default)]`,children:ne}),(0,Z.jsx)(`p`,{className:`text-body-small-default text-[var(--content-tertiary)]`,children:re})]}):(0,Z.jsx)(`div`,{className:`space-y-2`,children:R.map(e=>(0,Z.jsx)(We,{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,Z.jsx)(`p`,{className:`text-body-medium-lighter text-[var(--content-tertiary)]`,children:`No assistant found. Hatch an assistant to connect integrations.`})}),z&&c&&(0,Z.jsx)(He,{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,Z.jsx)(`div`,{className:`space-y-6`,children:(0,Z.jsx)(X.Suspense,{children:(0,Z.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-BJj2O5XB.js";import{a as c}from"./routes-
|
|
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-BJj2O5XB.js";import{a as c}from"./routes-B9xcBuuC.js";import{n as l}from"./use-is-mobile-D_0cze0t.js";import{t as u}from"./assistant-identity-store-DaDnhbxy.js";import{t as d}from"./assistant-feature-flag-store-BD9zTDcP.js";import{Vt as f}from"./index-Cx6vyW7T.js";import{t as p}from"./page-shell-W5IMIXQq.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-BhTucwGW.js → keyboard-shortcuts-page-waVolRQN.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-CynJKEow.js";import{t as s}from"./shortcut-keys-vM6sNj7W.js";import{t as c}from"./is-electron-
|
|
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-CynJKEow.js";import{t as s}from"./shortcut-keys-vM6sNj7W.js";import{t as c}from"./is-electron-C_ZTVhv8.js";import{t as l}from"./x-BeVbiDS2.js";import{a as u}from"./routes-B9xcBuuC.js";import{Yr as d}from"./index-Cx6vyW7T.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-BJj2O5XB.js";import{n as a}from"./toast-CxaZ5f1d.js";import{t as o}from"./loader-circle-
|
|
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-BJj2O5XB.js";import{n as a}from"./toast-CxaZ5f1d.js";import{t as o}from"./loader-circle-Cw1KvvLK.js";import{n as s}from"./sdk.gen-DtKkd6hs.js";import{a as c}from"./routes-B9xcBuuC.js";import{a as l}from"./viewer-store-9Ag85lFC.js";import{et as u,ot as d,r as f}from"./index-Cx6vyW7T.js";import{t as p}from"./use-active-assistant-id-BlwRimQH.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-CdoNX1qx.js";import"./src-BJj2O5XB.js";import{t as c}from"./confirm-dialog-SpCsmAdG.js";import{t as l}from"./input-Ch7OC6ME.js";import{n as u,t as d}from"./panel-item-BLQE_l-g.js";import{n as f}from"./toast-CxaZ5f1d.js";import{t as p}from"./arrow-up-BHPaHiHe.js";import{t as m}from"./globe-CiNEZj-J.js";import{s as h,t as g}from"./sdk.gen-W0KlW-sG.js";import{C as _,n as v,t as y}from"./react-query.gen-DfnbKPpc.js";import{a as b}from"./routes-BLyehs4B.js";import{n as x}from"./use-is-mobile-D_0cze0t.js";import{i as S,r as C}from"./viewer-store-CTNS5BCs.js";import{t as w}from"./misc-Dm72afTZ.js";import{Ai as T,Fi as E,Kr as D,Mr as O,Mt as k,Nr as A,Tt as j,W as M,at as N,bi as P,ni as F,ot as I,ri as L}from"./index-DhxGhfwI.js";import{t as R}from"./deploy-dialogs-BJI2X201.js";import{t as z}from"./use-active-assistant-id-DTsVl8b7.js";import{t as B}from"./page-shell-W5IMIXQq.js";import{t as V}from"./format-date-Cx9GZ7-D.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)(T,{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)(P,{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)(O,{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 I(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)(M,{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)(E,{}),"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?L:F,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:A,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)(E,{}),"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)(L,{size:14}):(0,U.jsx)(F,{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)(A,{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=j.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=j.use.togglePin(),d=j.use.pinnedAppIds(),p=N.use.isDeploying(),{apps:m,documents:h,filteredApps:_,pinnedApps:y,recentApps:b,filteredDocuments:x,searchText:w,setSearchText:T,loading:E,error:k}=Q(e),[A,M]=(0,H.useState)(null),[P,F]=(0,H.useState)(!1),I=(0,H.useCallback)(async()=>{let t=A;if(!(!t||P)){F(!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),M(null)}catch(e){f.error(e instanceof Error?e.message:`Failed to delete app`)}finally{F(!1)}}},[A,P,e,d,u,c]),L=(0,H.useCallback)(()=>{P||M(null)},[P]),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);N.getState().deployApp(e,t,n,r)}catch{N.getState().deployApp(e,t,n,``)}},[e,p,m]),Y=(0,H.useCallback)(e=>u(e),[u]);return E?(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`})}):k?(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:k}),(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)(O,{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=>T(e.target.value),leftIcon:(0,U.jsx)(D,{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)(D,{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:M,onDeploy:J}),(0,U.jsx)(X,{title:`Recents`,apps:b,assistantId:e,pinnedAppIds:d,onOpen:s,onPin:Y,onDelete:M,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:A,isDeleting:P,onConfirm:I,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=>{k(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-CdoNX1qx.js";import"./src-BJj2O5XB.js";import{t as c}from"./confirm-dialog-SpCsmAdG.js";import{t as l}from"./input-Ch7OC6ME.js";import{n as u,t as d}from"./panel-item-BLQE_l-g.js";import{n as f}from"./toast-CxaZ5f1d.js";import{t as p}from"./arrow-up-nBfZxfhi.js";import{t as m}from"./globe-CfKniRIP.js";import{s as h,t as g}from"./sdk.gen-DtKkd6hs.js";import{C as _,n as v,t as y}from"./react-query.gen-4ZMhZ-fj.js";import{a as b}from"./routes-B9xcBuuC.js";import{n as x}from"./use-is-mobile-D_0cze0t.js";import{i as S,r as C}from"./viewer-store-9Ag85lFC.js";import{t as w}from"./misc-Dm72afTZ.js";import{Ai as T,Fi as E,G as D,Kr as O,Mr as k,Mt as A,Nr as j,Tt as M,at as N,bi as P,ni as F,ot as I,ri as L}from"./index-Cx6vyW7T.js";import{t as R}from"./deploy-dialogs-DygUf1og.js";import{t as z}from"./use-active-assistant-id-BlwRimQH.js";import{t as B}from"./page-shell-W5IMIXQq.js";import{t as V}from"./format-date-Cx9GZ7-D.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)(T,{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)(P,{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)(k,{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 I(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)(D,{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)(E,{}),"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?L:F,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:j,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)(E,{}),"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)(L,{size:14}):(0,U.jsx)(F,{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)(j,{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=M.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=M.use.togglePin(),d=M.use.pinnedAppIds(),p=N.use.isDeploying(),{apps:m,documents:h,filteredApps:_,pinnedApps:y,recentApps:b,filteredDocuments:x,searchText:w,setSearchText:T,loading:E,error:D}=Q(e),[A,j]=(0,H.useState)(null),[P,F]=(0,H.useState)(!1),I=(0,H.useCallback)(async()=>{let t=A;if(!(!t||P)){F(!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),j(null)}catch(e){f.error(e instanceof Error?e.message:`Failed to delete app`)}finally{F(!1)}}},[A,P,e,d,u,c]),L=(0,H.useCallback)(()=>{P||j(null)},[P]),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);N.getState().deployApp(e,t,n,r)}catch{N.getState().deployApp(e,t,n,``)}},[e,p,m]),Y=(0,H.useCallback)(e=>u(e),[u]);return E?(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`})}):D?(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:D}),(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)(k,{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=>T(e.target.value),leftIcon:(0,U.jsx)(O,{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)(O,{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:j,onDeploy:J}),(0,U.jsx)(X,{title:`Recents`,apps:b,assistantId:e,pinnedAppIds:d,onOpen:s,onPin:Y,onDelete:j,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:A,isDeleting:P,onConfirm:I,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=>{A(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{t as e}from"./createLucideIcon-
|
|
1
|
+
import{t as e}from"./createLucideIcon-BlMXrA59.js";var t=e(`link-2`,[[`path`,{d:`M9 17H7A5 5 0 0 1 7 7h2`,key:`8i5ue5`}],[`path`,{d:`M15 7h2a5 5 0 1 1 0 10h-2`,key:`1b9ql8`}],[`line`,{x1:`8`,x2:`16`,y1:`12`,y2:`12`,key:`1jonct`}]]);export{t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./createLucideIcon-BlMXrA59.js";var t=e(`loader-circle`,[[`path`,{d:`M21 12a9 9 0 1 1-6.219-8.56`,key:`13zald`}]]);export{t};
|