@vellumai/web 0.10.9-staging.1 → 0.10.9-staging.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (156) hide show
  1. package/dist/assets/{a2a-invite-BgVgm24S.js → a2a-invite-CwD3hY_-.js} +1 -1
  2. package/dist/assets/{account-page-BYVwf7xV.js → account-page-uVMhWTmh.js} +1 -1
  3. package/dist/assets/{acp-run-detail-panel-D7Shyx6k.js → acp-run-detail-panel-DKXp8jTf.js} +1 -1
  4. package/dist/assets/{activity-steps-panel-CuI8SWWZ.js → activity-steps-panel-Bq9yj1qu.js} +1 -1
  5. package/dist/assets/{add-credits-modal-B2t4geb6.js → add-credits-modal-DjQdNLWh.js} +1 -1
  6. package/dist/assets/{advanced-page-MbQr5gTH.js → advanced-page-CQPwr2B4.js} +1 -1
  7. package/dist/assets/{ai-page-BbtSlOOr.js → ai-page-CO4dBJpg.js} +1 -1
  8. package/dist/assets/{api-D2xHldt2.js → api-Dfrm6N2I.js} +1 -1
  9. package/dist/assets/{api-key-screen--mSD5piK.js → api-key-screen-DhFeDT-n.js} +1 -1
  10. package/dist/assets/{archive-page-Y2o3PaeP.js → archive-page-BLEqhIZ8.js} +1 -1
  11. package/dist/assets/{assistant-feature-flag-store-4edQKaeq.js → assistant-feature-flag-store-BA3GR2m5.js} +1 -1
  12. package/dist/assets/{assistant-status-panel-CdoOjV0m.js → assistant-status-panel-CW7lTRBE.js} +1 -1
  13. package/dist/assets/{auth-store-B8a9KLUt.js → auth-store-65JKPW7C.js} +2 -2
  14. package/dist/assets/{background-task-detail-panel-Dj6SWg-M.js → background-task-detail-panel-ChfmmS5C.js} +1 -1
  15. package/dist/assets/{billing-page-BAtqAcvw.js → billing-page-CaP8_CF9.js} +3 -3
  16. package/dist/assets/{bookmarks-page-BdcQABPJ.js → bookmarks-page-BdcnBpJK.js} +1 -1
  17. package/dist/assets/{browser-WjU02SUS.js → browser-Cnr7iqbJ.js} +2 -2
  18. package/dist/assets/{build-state-CTWX014G.js → build-state-D-aPe0DY.js} +1 -1
  19. package/dist/assets/{channels-page-route-DoG1IfDg.js → channels-page-route-DKkdGS4b.js} +1 -1
  20. package/dist/assets/{chat-markdown-message-B6ba9Nea.js → chat-markdown-message-Cp8stHaU.js} +2 -2
  21. package/dist/assets/{client-feature-flag-store-Bm7cFUky.js → client-feature-flag-store-Ri-a_LuI.js} +1 -1
  22. package/dist/assets/{client-identity-C5bng1El.js → client-identity-DfC94VQ4.js} +1 -1
  23. package/dist/assets/{command-palette-3Kt4aKqv.js → command-palette-Bu2Qjyle.js} +1 -1
  24. package/dist/assets/{command-palette-window-page-Ce_JAimQ.js → command-palette-window-page-CtQ40jMw.js} +1 -1
  25. package/dist/assets/{community-page-BwkGsQOO.js → community-page-DL_oR63v.js} +1 -1
  26. package/dist/assets/{connect-page-GobyNuEq.js → connect-page-BCb6nr8x.js} +1 -1
  27. package/dist/assets/{consent-controls-C7ZF8P6y.js → consent-controls-udcijSAB.js} +1 -1
  28. package/dist/assets/constants-BQVXM0At.js +1 -0
  29. package/dist/assets/{contacts-page-route-mJdb0p-P.js → contacts-page-route-CicU-jSI.js} +1 -1
  30. package/dist/assets/{credentials-page-D7wWekUv.js → credentials-page-DDM2V8iZ.js} +1 -1
  31. package/dist/assets/{danger-zone-redirect-page-BwbAORqw.js → danger-zone-redirect-page-BpM01x_c.js} +1 -1
  32. package/dist/assets/debug-page-BGhdwv9M.js +4 -0
  33. package/dist/assets/{deploy-dialogs-3Mkwr6Lr.js → deploy-dialogs-C6pCnoVj.js} +1 -1
  34. package/dist/assets/{detail-panel-stop-button-B89ORnF4.js → detail-panel-stop-button-H9sXvWGa.js} +1 -1
  35. package/dist/assets/{developer-page-BepHaWqd.js → developer-page-DZdwzLQu.js} +1 -1
  36. package/dist/assets/{devices-page-Bvgt1Qx3.js → devices-page-ChwagiFL.js} +1 -1
  37. package/dist/assets/{diagnostics-BjIFTbZd.js → diagnostics-CUmYxbmM.js} +1 -1
  38. package/dist/assets/{dictation-overlay-page-DlScWKYV.js → dictation-overlay-page-BmLNyGeD.js} +1 -1
  39. package/dist/assets/{document-viewer-page-7mbMVgWm.js → document-viewer-page-B-ShLH6Y.js} +1 -1
  40. package/dist/assets/{earn-credits-modal-BLyGdcsU.js → earn-credits-modal-BILKTI_F.js} +1 -1
  41. package/dist/assets/{emails-page-kA5rCqOM.js → emails-page-D_ZdkIHT.js} +1 -1
  42. package/dist/assets/{esm-bqqA92jW.js → esm-BC-IlNg6.js} +2 -2
  43. package/dist/assets/{esm-BgQ9CqZD.js → esm-BVzHqFEK.js} +2 -2
  44. package/dist/assets/{esm-k-oyYh2U.js → esm-CE4Ehw9K.js} +2 -2
  45. package/dist/assets/{esm-B0Io_iMT.js → esm-D4S5VlIC.js} +2 -2
  46. package/dist/assets/{esm-CWRflJ6T.js → esm-Ddwl5DWt.js} +2 -2
  47. package/dist/assets/esm-ZgeaRH-O.js +2 -0
  48. package/dist/assets/feature-flag-catalog-DjfXrBPD.js +1 -0
  49. package/dist/assets/{general-page-yhD_Wuar.js → general-page-61s8VehJ.js} +1 -1
  50. package/dist/assets/{haptics-Dgz3Ixf7.js → haptics-BOswdY5A.js} +2 -2
  51. package/dist/assets/{hatching-screen-trN-MWFq.js → hatching-screen-DiUygZtk.js} +1 -1
  52. package/dist/assets/{home-page-route-CmuFehkr.js → home-page-route-1hEkRjdv.js} +1 -1
  53. package/dist/assets/{hosting-screen-Cxg-qKjE.js → hosting-screen-nru73FGU.js} +1 -1
  54. package/dist/assets/identity-page-route-CbHcVb6m.js +1 -0
  55. package/dist/assets/{index-CkKSY1-Q.js → index-B4Qq7TL7.js} +23 -23
  56. package/dist/assets/index-CCPsEVwr.css +2 -0
  57. package/dist/assets/{inspect-page-T3Y4-Vmv.js → inspect-page-DoA1sfxg.js} +3 -3
  58. package/dist/assets/{integrations-page-Ock6mFN1.js → integrations-page-vFP_lh3w.js} +1 -1
  59. package/dist/assets/intelligence-layout-oIGPC8W1.js +1 -0
  60. package/dist/assets/{keyboard-shortcuts-page-CG1twx2C.js → keyboard-shortcuts-page-BzeIMUpj.js} +1 -1
  61. package/dist/assets/{library-detail-page-C2iWMOjx.js → library-detail-page-D0Dv3ZLJ.js} +1 -1
  62. package/dist/assets/{library-page-BC0GGthr.js → library-page-D7I-sk41.js} +1 -1
  63. package/dist/assets/{login-flow-DdiUXQhA.js → login-flow-DYLpX6IU.js} +1 -1
  64. package/dist/assets/{login-page-CGmLnOmi.js → login-page-UotBWZu9.js} +1 -1
  65. package/dist/assets/{logout-page-4e8K14KD.js → logout-page-xucijGcq.js} +1 -1
  66. package/dist/assets/{logs-layout-wJKzizjg.js → logs-layout-JUd7Ag6q.js} +1 -1
  67. package/dist/assets/memory-page-route-DqM6EMFu.js +1 -0
  68. package/dist/assets/{memory-router-playground-page-FZC-VIVr.js → memory-router-playground-page-DikxzmKT.js} +1 -1
  69. package/dist/assets/{messages-BnurE-6y.js → messages-B2CZAuPN.js} +1 -1
  70. package/dist/assets/{mobile-sidebar-drawer-BN_mMpOa.js → mobile-sidebar-drawer-BaL8el3Y.js} +1 -1
  71. package/dist/assets/{native-biometric-Dy5Vb7o0.js → native-biometric-B2cBAQ1U.js} +1 -1
  72. package/dist/assets/{native-file-H6DBFhbO.js → native-file-BZDk5eyB.js} +2 -2
  73. package/dist/assets/{notifications-page-D8wbor2x.js → notifications-page-BISnBOYH.js} +1 -1
  74. package/dist/assets/{oauth-complete-page-Ce1AmHXp.js → oauth-complete-page-SfFEsa_M.js} +1 -1
  75. package/dist/assets/{oauth-popup-complete-page-M9ID8MBR.js → oauth-popup-complete-page-D4Xoa-Gr.js} +1 -1
  76. package/dist/assets/{pairing-page-COwbBOrn.js → pairing-page-B5xnM6XX.js} +1 -1
  77. package/dist/assets/{password-reset-page-DfUZ0wSh.js → password-reset-page-NF13YMiM.js} +1 -1
  78. package/dist/assets/{platform-detection-DJWRuZPt.js → platform-detection-DGxL0AsS.js} +1 -1
  79. package/dist/assets/{platform-loopback-page-MtmBE9rf.js → platform-loopback-page-_IbNDHN2.js} +1 -1
  80. package/dist/assets/{plugin-detail-page-jrt28WVX.js → plugin-detail-page-_iCqtxl9.js} +1 -1
  81. package/dist/assets/{plugins-page-BkFE86Ch.js → plugins-page-DHiFqgxf.js} +1 -1
  82. package/dist/assets/{prechat-route-CyUlbfqD.js → prechat-route-BwML3ZL1.js} +1 -1
  83. package/dist/assets/{prefs-BLNqdDWZ.js → prefs-DNYLVDvB.js} +1 -1
  84. package/dist/assets/{privacy-page-DD2N7jR3.js → privacy-page-DhxWA9mA.js} +1 -1
  85. package/dist/assets/{privacy-screen-CiInQmTP.js → privacy-screen-DRGDGj0W.js} +1 -1
  86. package/dist/assets/{provider-callback-page-apRb9-js.js → provider-callback-page-BoO2JgZt.js} +1 -1
  87. package/dist/assets/{provider-signup-page-ajKQp8fF.js → provider-signup-page-DLVKMYZh.js} +1 -1
  88. package/dist/assets/{quick-input-page-Bfry352-.js → quick-input-page-7z8Ti2GI.js} +1 -1
  89. package/dist/assets/react-query.gen-DV9K_z-o.js +1 -0
  90. package/dist/assets/{research-mock-page-D_q1_UFd.js → research-mock-page-CoMthbl4.js} +1 -1
  91. package/dist/assets/{research-onboarding-route-CWQvTAZs.js → research-onboarding-route-CeTflgoE.js} +1 -1
  92. package/dist/assets/{review-terms-screen-DQscfsQA.js → review-terms-screen-DAZ66rIh.js} +1 -1
  93. package/dist/assets/{risk-CGuJt8eV.js → risk-BQ3NV8r8.js} +1 -1
  94. package/dist/assets/routes-BXlWEOF0.js +1 -0
  95. package/dist/assets/sdk.gen-9Cdt87h5.js +1 -0
  96. package/dist/assets/{security-page-PDmclL0z.js → security-page-BS1WxY0d.js} +1 -1
  97. package/dist/assets/{select-assistant-screen-NbYyB8gd.js → select-assistant-screen-z3B8ngdP.js} +1 -1
  98. package/dist/assets/{settings-layout-CXwmK0bq.js → settings-layout-DFzwR63d.js} +1 -1
  99. package/dist/assets/{share-feedback-modal-8FYv2LvY.js → share-feedback-modal-DH2dhWbo.js} +1 -1
  100. package/dist/assets/{sidebar-tree-DXcgyQSp.js → sidebar-tree-DWJkYLPh.js} +1 -1
  101. package/dist/assets/{signup-page-7ln71c_p.js → signup-page-D2LQXMnG.js} +1 -1
  102. package/dist/assets/site-favicon-DsYdnaxV.js +1 -0
  103. package/dist/assets/{skill-detail-page-D-KI1GRv.js → skill-detail-page-CcZFUjdw.js} +1 -1
  104. package/dist/assets/{skill-detail-panel-B6dgeIjw.js → skill-detail-panel-B4WEYtK9.js} +1 -1
  105. package/dist/assets/{skills-page-BANGKYGT.js → skills-page-Di8dGQGo.js} +1 -1
  106. package/dist/assets/{sounds-page-B5nmCucp.js → sounds-page-CF3gwgc9.js} +1 -1
  107. package/dist/assets/{subagent-detail-panel-B-XO_qpq.js → subagent-detail-panel-BqYWP0b9.js} +1 -1
  108. package/dist/assets/{system-events-page-3D8JNX2E.js → system-events-page-DdvtYv0_.js} +1 -1
  109. package/dist/assets/{system-events-redirect-page-CXWqj4sU.js → system-events-redirect-page-HeBGwZCZ.js} +1 -1
  110. package/dist/assets/{theme-stage-page-9uebvm3N.js → theme-stage-page-8v_hsKXd.js} +1 -1
  111. package/dist/assets/{tiptap-document-editor-BQsMI5MK.js → tiptap-document-editor-1QvKHdlQ.js} +1 -1
  112. package/dist/assets/{tool-detail-panel-C6bS4xqt.js → tool-detail-panel-DarSpKEx.js} +1 -1
  113. package/dist/assets/{upgrade-cancel-page-DFVxgGMD.js → upgrade-cancel-page-wop4boqC.js} +1 -1
  114. package/dist/assets/{upgrade-success-page-CmS8UX41.js → upgrade-success-page-DWPEHzlo.js} +1 -1
  115. package/dist/assets/{usage-page-J9DnhUSp.js → usage-page-CB5oigmL.js} +1 -1
  116. package/dist/assets/{use-edge-swipe-back-CGjL1V81.js → use-edge-swipe-back-R9ItWgTp.js} +1 -1
  117. package/dist/assets/{use-invite-link-dialog-DiQ0mtix.js → use-invite-link-dialog-_LChrtmw.js} +1 -1
  118. package/dist/assets/use-is-org-ready-1Xighdsa.js +1 -0
  119. package/dist/assets/{use-onboarding-login-CymKDO-T.js → use-onboarding-login-BHrngniO.js} +1 -1
  120. package/dist/assets/{use-skill-actions-DgIZqg7U.js → use-skill-actions-mJaMNpfO.js} +1 -1
  121. package/dist/assets/{use-skill-categories-573c1Oen.js → use-skill-categories-Bit2V2fA.js} +1 -1
  122. package/dist/assets/{use-skill-detail-files-omgWFzAG.js → use-skill-detail-files-DDUUobr0.js} +1 -1
  123. package/dist/assets/{voice-page-CDyjR4fA.js → voice-page-Dfl4T4_g.js} +1 -1
  124. package/dist/assets/{weather-forecast-display-C5EykzzK.js → weather-forecast-display-DOXofTcV.js} +1 -1
  125. package/dist/assets/{web-BRWcXGs9.js → web-BrbVmY32.js} +1 -1
  126. package/dist/assets/{web-CKE5sM1b.js → web-CBHy41qN.js} +1 -1
  127. package/dist/assets/{welcome-screen-Dz0Avnjt.js → welcome-screen-kc41a0yS.js} +1 -1
  128. package/dist/assets/{workflow-detail-panel-D-1Pxr3t.js → workflow-detail-panel-Dctg7w-3.js} +1 -1
  129. package/dist/assets/{workspace-page-D5FdWIRh.js → workspace-page-BWn-Je40.js} +1 -1
  130. package/dist/index.html +26 -26
  131. package/package.json +1 -1
  132. package/dist/assets/debug-page-b1M-_rZF.js +0 -4
  133. package/dist/assets/esm-C9MocOv0.js +0 -2
  134. package/dist/assets/feature-flag-catalog-CM5COdiW.js +0 -1
  135. package/dist/assets/identity-page-route-CEUFy067.js +0 -1
  136. package/dist/assets/index-CnqTir5A.css +0 -2
  137. package/dist/assets/intelligence-layout-DzdGg3IO.js +0 -1
  138. package/dist/assets/react-query.gen-GVQbBTEp.js +0 -1
  139. package/dist/assets/routes-DYcJgn9k.js +0 -1
  140. package/dist/assets/sdk.gen-CmKfVpgB.js +0 -1
  141. package/dist/assets/site-favicon-BXY4qlvA.js +0 -1
  142. package/dist/assets/use-is-org-ready-B5vVKY9m.js +0 -1
  143. /package/dist/assets/{BundleConfirmPage-C02c50EO.js → BundleConfirmPage-DwVI7U0b.js} +0 -0
  144. /package/dist/assets/{build.umd-D88jX3tx.js → build.umd-t16r8k1T.js} +0 -0
  145. /package/dist/assets/{definitions-RERkHOnv.js → definitions-CK0CSdwt.js} +0 -0
  146. /package/dist/assets/{definitions-EvNC1i1H.js → definitions-Dj7uajgZ.js} +0 -0
  147. /package/dist/assets/{esm-D_FdLNK8.js → esm-wMYgN14J.js} +0 -0
  148. /package/dist/assets/{pdf-OTWpgOp2.js → pdf-jCZ1S_t-.js} +0 -0
  149. /package/dist/assets/{web-ClHk8mQB.js → web-6YTn0Mpt.js} +0 -0
  150. /package/dist/assets/{web-Qpx2h8tK.js → web-B6BDTvZe.js} +0 -0
  151. /package/dist/assets/{web-CU5yzmqR.js → web-BEtTYpif.js} +0 -0
  152. /package/dist/assets/{web-CTmLPP3c.js → web-C3rsbCeg.js} +0 -0
  153. /package/dist/assets/{web-8CyK9syi.js → web-CIdUPUaN.js} +0 -0
  154. /package/dist/assets/{web-CyGs80Wd.js → web-DGaEiOw7.js} +0 -0
  155. /package/dist/assets/{xterm-fGXm5t6D.js → xterm-CJZcgQLM.js} +0 -0
  156. /package/dist/assets/{xterm-addon-fit-DNV09uVI.js → xterm-addon-fit-BmGG02AS.js} +0 -0
@@ -1,4 +1,4 @@
1
- import{o as e}from"./chunk-jRWAZmH_.js";import{t}from"./react-DJZBPgpf.js";import{t as n}from"./button-amTXFI-2.js";import{d as r,h as i,t as a}from"./chunk-5KNZJZUH-DdS6bb-3.js";import{n as o}from"./QueryClientProvider-DKhXIxGb.js";import{t as s}from"./useQuery-B45lW1Kk.js";import{t as c}from"./useMutation-Lj4VunQV.js";import{t as l}from"./jsx-runtime-CVSDxk6A.js";import{t as u}from"./cn-C36Yvcac.js";import{t as d}from"./typography-D5f7kt80.js";import{t as f}from"./card-Bv5O5juh.js";import{t as p}from"./chevron-down-qD-re7AW.js";import{t as m}from"./notice-DkcNAP8O.js";import{A as h,k as g,n as _,r as v}from"./src-DZbMXyC2.js";import{t as y}from"./tag-CV4v7fRF.js";import{t as b}from"./input-CoUmPnRU.js";import{t as x}from"./list-row-D5MFdbkH.js";import{n as S}from"./stat-square-CTHnQ1jc.js";import{t as C}from"./panel-item-CouW2A55.js";import{t as w}from"./confirm-dialog-CSkhRFRk.js";import{t as T}from"./dropdown-ByHOpeOU.js";import{n as E,t as D}from"./create-selectors-8NePGNlX.js";import{t as O}from"./assistant-identity-store-CX03CK8q.js";import{n as k}from"./utils-xg2dl_KJ.js";import{c as A}from"./routes-DYcJgn9k.js";import{i as j,o as M,r as N}from"./sdk.gen-CenbOmmb.js";import{t as P}from"./assistant-feature-flag-store-4edQKaeq.js";import{t as F}from"./public-asset-WikBpVQd.js";import{Cr as I,Ea as L,Mt as ee,Xi as te,b as R,cr as ne,d as re,fn as z,ji as ie,l as ae,lr as oe,oa as B,pn as V,x as se,y as ce}from"./index-CkKSY1-Q.js";import{t as le}from"./use-active-assistant-id-CGeH4Gl6.js";import{a as ue,c as de,d as H,l as fe,n as pe,o as me,t as he,u as ge}from"./use-invite-link-dialog-DiQ0mtix.js";import{t as _e}from"./detail-card-GPqFZVmX.js";import{n as ve,t as ye}from"./mobile-sidebar-drawer-BN_mMpOa.js";import{t as U}from"./mutation-error-Bk_4pjgm.js";var W=e(t(),1),G=l();function K({icon:e,title:t,description:n,action:r,className:i}){return(0,G.jsxs)(`div`,{className:u(`flex flex-col items-center justify-center gap-3 px-4 py-12 text-center`,i),children:[e?(0,G.jsx)(`div`,{className:`flex h-12 w-12 items-center justify-center rounded-xl bg-[var(--surface-sunken)] text-[var(--content-tertiary)]`,children:e}):null,(0,G.jsx)(`h3`,{className:`text-title-small text-[var(--content-default)]`,children:t}),n?(0,G.jsx)(`p`,{className:`max-w-md text-body-medium-lighter text-[color:var(--content-tertiary)]`,children:n}):null,r?(0,G.jsx)(`div`,{className:`mt-1`,children:r}):null]})}var q=D(E()(e=>({selectedAdapter:`slack`,selectAdapter:t=>e({selectedAdapter:t})})));function J({channels:e,selectedKey:t,onSelect:n}){return(0,G.jsx)(f.Root,{className:`flex h-full flex-col overflow-hidden`,children:(0,G.jsxs)(f.Body,{className:`flex min-h-0 min-w-0 flex-1 flex-col gap-4`,children:[(0,G.jsx)(`h2`,{className:`text-title-medium`,style:{color:`var(--content-default)`},children:`Channels`}),(0,G.jsx)(`div`,{className:`flex flex-col gap-1`,children:e.map(e=>(0,G.jsx)(be,{channel:e,selected:e.key===t,onClick:()=>n(e.key)},e.key))})]})})}function be({channel:e,selected:t,onClick:n}){let r=e.status===`ready`,i=V(e.key),a=r?`Connected`:`Not connected`;return(0,G.jsx)(C,{asChild:!0,active:t,label:`${i}, ${a}`,children:(0,G.jsxs)(`button`,{type:`button`,onClick:n,className:`flex h-auto w-full items-center gap-2 rounded-[6px] px-[8px] py-2 text-left`,children:[(0,G.jsx)(z,{channelId:e.key,className:`h-4 w-4 shrink-0 text-[color:var(--content-secondary)]`}),(0,G.jsx)(`span`,{className:`min-w-0 flex-1 truncate text-body-medium-default`,children:i}),(0,G.jsx)(`span`,{className:`flex shrink-0 items-center`,children:(0,G.jsx)(y,{tone:r?`positive`:`neutral`,children:a})})]})})}function xe({children:e}){return(0,G.jsxs)(f.Root,{children:[(0,G.jsx)(f.Header,{children:(0,G.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,G.jsx)(`img`,{src:F(`/images/integrations/slack.svg`),alt:``,className:`size-8 rounded-lg bg-[var(--surface-sunken)] p-1`}),(0,G.jsx)(d,{as:`span`,variant:`body-medium-default`,children:`Slack setup`})]})}),(0,G.jsx)(f.Body,{children:e})]})}var Y=ce.map(e=>e.riskThreshold),X={none:{label:R(`none`).label,sublabel:`ask before every action`,tone:`negative`},low:{label:R(`low`).label,sublabel:`low-risk actions, ask for the rest`,tone:`warning`},medium:{label:R(`medium`).label,sublabel:`beyond its workspace too`,tone:`info`},high:{label:R(`high`).label,sublabel:`acts freely`,tone:`positive`}},Z=[`trusted_contact`,`unverified_contact`,`unknown`];function Se(e,t){let n={};for(let r of e){if(r.selector.scope!==`channel`||r.selector.adapter!==t)continue;let e=r.selector.channelExternalId;e&&(r.contactType===`trusted_contact`||!(e in n))&&(n[e]=r.threshold)}return n}function Ce(e){return{tier:e??null,overridden:e!==void 0}}function we({channelName:e,settings:t,defaultTier:r,loading:i=!1,error:a=!1,onTierChange:o,onReset:s}){let c=i||a,l=Y.map(e=>({value:e,label:X[e].label,sublabel:X[e].sublabel,disabled:c}));return(0,G.jsxs)(`div`,{className:`flex flex-col gap-3 px-2 pt-1 pb-4`,children:[t.overridden?(0,G.jsx)(m,{tone:`warning`,title:`Custom access.`,className:`border-dashed`,actions:(0,G.jsx)(n,{type:`button`,variant:`outlined`,onClick:s,disabled:c,children:`Reset to default`}),children:`This channel isn’t following your global Assistant Access setting.`}):null,(0,G.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,G.jsx)(d,{as:`span`,variant:`body-small-emphasised`,className:`text-[color:var(--content-secondary)]`,children:`Assistant Access`}),i?(0,G.jsx)(d,{as:`span`,variant:`body-small-default`,className:`text-[color:var(--content-tertiary)]`,children:`Loading…`}):a?(0,G.jsx)(d,{as:`span`,variant:`body-small-default`,className:`text-[color:var(--content-negative)]`,children:`Couldn’t load — try reopening this page`}):t.overridden?(0,G.jsx)(y,{tone:`warning`,children:`overridden`}):(0,G.jsx)(d,{as:`span`,variant:`body-small-default`,className:`text-[color:var(--content-tertiary)]`,children:`default`})]}),(0,G.jsx)(S,{items:l,value:t.tier??r,onChange:o,ariaLabel:`Assistant Access in ${e}`})]})}var Te={positive:`var(--system-positive-strong)`,negative:`var(--system-negative-strong)`,warning:`var(--system-mid-strong)`,info:`var(--system-info-strong)`,neutral:`var(--content-secondary)`};function Ee(e,t){switch(e){case`none`:return(0,G.jsxs)(G.Fragment,{children:[t,` replies in this channel, but asks you before taking any action.`]});case`low`:return(0,G.jsxs)(G.Fragment,{children:[t,` replies and runs safe, read-only actions on its own, like web searches and reading files in its workspace. Anything that writes, sends, or spends asks you first.`]});case`medium`:return(0,G.jsxs)(G.Fragment,{children:[t,` also handles medium-risk requests on its own, like network requests that use your connected accounts. Anything that writes, sends, or spends still asks you first.`]});case`high`:return(0,G.jsxs)(G.Fragment,{children:[t,` answers any request on its own without asking. Tools that take action — writing, sending, spending — still come to you first.`]})}}function De({assistantName:e}){return(0,G.jsxs)(f.Root,{children:[(0,G.jsx)(f.Header,{children:`Assistant Access levels`}),(0,G.jsx)(f.Body,{className:`grid gap-4 sm:grid-cols-2`,children:Y.map(t=>{let n=X[t];return(0,G.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,G.jsxs)(`span`,{className:`flex items-center gap-1.5`,children:[(0,G.jsx)(`span`,{"aria-hidden":`true`,className:`h-1.5 w-1.5 rounded-full`,style:{backgroundColor:Te[n.tone]}}),(0,G.jsx)(d,{as:`span`,variant:`body-small-emphasised`,children:n.label})]}),(0,G.jsx)(d,{as:`p`,variant:`body-small-default`,className:`text-[color:var(--content-tertiary)]`,children:Ee(t,e)})]},t)})}),(0,G.jsx)(f.Footer,{children:(0,G.jsxs)(d,{as:`p`,variant:`body-small-default`,className:`text-[color:var(--content-tertiary)]`,children:[`Your`,` `,(0,G.jsx)(a,{to:A.settings.privacy,className:`text-[var(--content-link)] underline hover:text-[var(--content-link-hover)]`,children:`Trust Rules`}),` `,`fine-tune these levels: a rule raises or lowers how risky a specific action is treated, which changes when it asks first.`]})})]})}function Q(e){return e.type===`dm`?`dm`:e.isPrivate?`private`:`public`}function Oe(e){return e.filter(e=>Q(e)!==`dm`)}function ke(e,t,n){let r=t.trim().toLowerCase();return e.filter(e=>(n===null||Q(e)===n)&&(r===``||e.name.toLowerCase().includes(r))).sort((e,t)=>e.name.localeCompare(t.name))}function Ae(e){let t={public:0,private:0,dm:0};for(let n of e)t[Q(n)]+=1;return t}function je(e){return e.memberCount==null?null:e.memberCount===1?`1 member`:`${e.memberCount} members`}var Me=[{value:null,label:`All`},{value:`public`,label:`Public`},{value:`private`,label:`Private`}],Ne={public:B,private:te},Pe=100,Fe=new Set;function Ie({assistantDisplayName:e,slackHandle:t,channels:r,loading:i=!1,error:a=!1,tierOverrides:o,defaultTier:s=null,accessControlsSupported:c=!0,tierOverridesLoading:l=!1,tierOverridesError:p=!1,pendingChannelIds:m=Fe,onTierChange:h,onTierReset:g}){let[y,x]=(0,W.useState)(``),[S,C]=(0,W.useState)(null),[w,T]=(0,W.useState)(new Set),[E,D]=(0,W.useState)(!1),O=e=>{T(t=>{if(E){let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n}return t.has(e)?new Set:new Set([e])})},k=()=>{E?(D(!1),T(new Set)):(D(!0),T(new Set(A.map(e=>e.id))))},A=(0,W.useMemo)(()=>Oe(r??[]),[r]),j=(0,W.useMemo)(()=>ke(A,y,S),[A,y,S]),M=(0,W.useMemo)(()=>Ae(A),[A]),N=t??`@${e}`,P=(0,G.jsxs)(G.Fragment,{children:[`To add `,e,` to a channel, type`,` `,(0,G.jsxs)(`code`,{className:`text-[color:var(--content-secondary)]`,children:[`/invite `,N]}),` `,`inside that Slack channel.`]});return(0,G.jsxs)(G.Fragment,{children:[(0,G.jsxs)(f.Root,{children:[(0,G.jsx)(f.Header,{children:(0,G.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[`Where `,e,` is present`,(0,G.jsx)(d,{as:`p`,variant:`body-small-default`,className:`text-[color:var(--content-tertiary)]`,children:P})]})}),(0,G.jsx)(f.Body,{className:`flex flex-col gap-3`,children:i?(0,G.jsx)(d,{as:`span`,variant:`body-small-default`,className:`text-[color:var(--content-tertiary)]`,children:`Loading…`}):a?(0,G.jsx)(d,{as:`span`,variant:`body-small-default`,className:`text-[color:var(--content-negative)]`,children:`Couldn’t load channels. Try reopening this page.`}):A.length===0?(0,G.jsx)(K,{icon:(0,G.jsx)(B,{className:`h-6 w-6`}),title:`No channels yet`}):(0,G.jsxs)(G.Fragment,{children:[(0,G.jsxs)(`div`,{className:`flex flex-wrap items-center gap-3`,children:[(0,G.jsx)(`div`,{className:`min-w-56 flex-1`,children:(0,G.jsx)(b,{type:`search`,value:y,onChange:e=>x(e.target.value),placeholder:`Search channels`,"aria-label":`Search channels`,leftIcon:(0,G.jsx)(ie,{className:`h-4 w-4`}),fullWidth:!0})}),(0,G.jsx)(`div`,{className:`flex items-center gap-2`,role:`group`,"aria-label":`Filter channels by type`,children:Me.map(({value:e,label:t})=>{let n=S===e,r=e===null?A.length:M[e];return(0,G.jsxs)(`button`,{type:`button`,"aria-pressed":n,onClick:()=>C(e),className:u(`inline-flex h-6 items-center rounded-full px-2.5 text-body-small-emphasised leading-none transition-colors`,n?`bg-[var(--content-default)] text-[var(--surface-base)]`:`bg-[var(--tag-bg-neutral)] text-[color:var(--content-secondary)] hover:text-[color:var(--content-default)]`),children:[t,` `,r]},e??`all`)})}),(0,G.jsx)(n,{type:`button`,variant:`outlined`,onClick:k,children:E?`Collapse all`:`Expand all`})]}),j.length===0?(0,G.jsx)(d,{as:`span`,variant:`body-small-default`,className:`py-4 text-center text-[color:var(--content-tertiary)]`,children:`No channels match.`}):(0,G.jsx)(_.Root,{type:`multiple`,value:[...w],children:j.length>Pe?(0,G.jsx)(`div`,{className:`h-96`,children:(0,G.jsx)(v,{items:j,computeItemKey:(e,t)=>t.id,itemContent:(e,t)=>(0,G.jsx)($,{channel:t,open:w.has(t.id),onToggle:()=>O(t.id),pending:m.has(t.id),overridesLoading:l,overridesError:p,defaultTier:s,accessControls:c,tierOverride:o?.[t.id],onTierChange:e=>h?.(t.id,e),onReset:()=>g?.(t.id)}),className:`h-full`})}):j.map(e=>(0,G.jsx)($,{channel:e,open:w.has(e.id),onToggle:()=>O(e.id),pending:m.has(e.id),overridesLoading:l,overridesError:p,defaultTier:s,accessControls:c,tierOverride:o?.[e.id],onTierChange:t=>h?.(e.id,t),onReset:()=>g?.(e.id)},e.id))})]})}),!i&&!a&&A.length>0?(0,G.jsx)(f.Footer,{children:(0,G.jsxs)(d,{as:`p`,variant:`body-small-default`,className:`text-[color:var(--content-tertiary)]`,children:[`Only showing channels `,e,` is in. To remove`,` `,e,` from a channel, use`,` `,(0,G.jsxs)(`code`,{className:`text-[color:var(--content-secondary)]`,children:[`/remove `,N]}),` `,`in that Slack channel.`]})}):null]}),c&&!i&&!a&&A.length>0?(0,G.jsx)(De,{assistantName:e}):null]})}function $({channel:e,open:t,pending:n,overridesLoading:r,overridesError:i,defaultTier:a,accessControls:o,tierOverride:s,onToggle:c,onTierChange:l,onReset:d}){let f=Q(e);if(f===`dm`)return null;let m=Ne[f],h=je(e),g=Ce(s),v=g.tier===null?null:X[g.tier],b=a===null?null:X[a];return o?(0,G.jsxs)(_.Item,{value:e.id,className:`[&+&]:border-t [&+&]:border-[var(--border-base)]`,children:[(0,G.jsx)(x,{leading:(0,G.jsx)(m,{className:`h-4 w-4 text-[var(--content-tertiary)]`}),title:e.name,onClick:c,contentAriaLabel:`${e.name} — ${t?`collapse`:`expand`} channel settings`,showChevron:!1,selected:t,trailing:(0,G.jsxs)(G.Fragment,{children:[n?(0,G.jsx)(`span`,{className:`text-body-small-default text-[color:var(--content-tertiary)]`,children:`Saving…`}):h==null?null:(0,G.jsx)(`span`,{className:`text-body-small-default text-[color:var(--content-tertiary)]`,children:h}),v===null?(0,G.jsx)(y,{children:b===null?`Default`:`${b.label} • default`}):(0,G.jsxs)(y,{tone:v.tone,children:[v.label,` • custom`]}),(0,G.jsx)(p,{"aria-hidden":`true`,className:u(`h-4 w-4 text-[var(--content-tertiary)] transition-transform`,t&&`rotate-180`)})]})}),(0,G.jsx)(_.Content,{children:(0,G.jsx)(we,{channelName:e.name,settings:g,defaultTier:a,loading:r,error:i,onTierChange:l,onReset:d})})]}):(0,G.jsx)(x,{leading:(0,G.jsx)(m,{className:`h-4 w-4 text-[var(--content-tertiary)]`}),title:e.name,trailing:h==null?void 0:(0,G.jsx)(`span`,{className:`text-body-small-default text-[color:var(--content-tertiary)]`,children:h})})}var Le=`0.10.7`;function Re(){return k(Le)}function ze(e,t,n){return Z.map(r=>({selector:{scope:`channel`,adapter:e,channelExternalId:t},contactType:r,threshold:n}))}function Be(e,t,n){return e.selector.scope===`channel`&&e.selector.adapter===t&&e.selector.channelExternalId===n}function Ve({assistantId:e,adapter:t}){let n=o(),r=P.use.channelTrustFloors(),i=Re(),a=r&&i&&!!e,l=(0,W.useMemo)(()=>({path:{assistant_id:e}}),[e]),u=(0,W.useMemo)(()=>oe(l),[l]),d=s({...ne(l),enabled:a,select:e=>Se(e.cells,t)}),f=s({queryKey:[`channel-permission-resolve`,e,t],queryFn:async()=>{let{data:e}=await M({...l,body:{adapter:t,contactType:`trusted_contact`},throwOnError:!0});return e.resolved?.threshold??null},enabled:a,retry:!1,staleTime:3e4}),p=(e,r)=>{let i=n.getQueryData(u),a=Date.now();return n.setQueryData(u,n=>({cells:[...(n?.cells??[]).filter(n=>!Be(n,t,e)),...r.map(e=>({...e,updatedAt:a}))]})),{previous:i}},m=c({mutationFn:async({channelExternalId:e,tier:n})=>{await Promise.all(ze(t,e,n).map(e=>j({...l,body:e,throwOnError:!0})))},onMutate:({channelExternalId:e,tier:n})=>p(e,ze(t,e,n)),onError:(e,t,r)=>{n.setQueryData(u,r?.previous),U(`Failed to save channel settings`)(e)},onSettled:()=>n.invalidateQueries({queryKey:u})}),h=c({mutationFn:async({channelExternalId:e})=>{await Promise.all(Z.map(n=>N({...l,body:{selector:{scope:`channel`,adapter:t,channelExternalId:e},contactType:n},throwOnError:!0})))},onMutate:({channelExternalId:e})=>p(e,[]),onError:(e,t,r)=>{n.setQueryData(u,r?.previous),U(`Failed to reset channel settings`)(e)},onSettled:()=>n.invalidateQueries({queryKey:u})}),g=(0,W.useMemo)(()=>{let e=new Set;return m.isPending&&m.variables&&e.add(m.variables.channelExternalId),h.isPending&&h.variables&&e.add(h.variables.channelExternalId),e},[m.isPending,m.variables,h.isPending,h.variables]);return a?{supported:!0,tierOverrides:d.data,defaultCellTier:f.data,pendingChannelIds:g,isLoading:d.isPending,isError:d.isError,onTierChange:(e,t)=>m.mutate({channelExternalId:e,tier:t}),onTierReset:e=>{d.data?.[e]!==void 0&&h.mutate({channelExternalId:e})}}:{supported:!1,tierOverrides:void 0,defaultCellTier:void 0,pendingChannelIds:new Set,isLoading:!1,isError:!1,onTierChange:void 0,onTierReset:void 0}}function He({assistantId:e,assistantDisplayName:t,slackHandle:n}){let r=s({...ae(e),enabled:!!e,select:e=>e.channels}),i=Ve({assistantId:e,adapter:`slack`}),a=s({queryKey:[`thresholds`,e],queryFn:()=>se(e),enabled:i.supported&&!!e,staleTime:3e4}).data?.interactive??null,o=i.defaultCellTier===void 0?null:i.defaultCellTier??a;return(0,G.jsx)(Ie,{assistantDisplayName:t,slackHandle:n,accessControlsSupported:i.supported,defaultTier:o,channels:r.data,loading:r.isPending,error:r.isError,tierOverrides:i.tierOverrides,tierOverridesLoading:i.isLoading,tierOverridesError:i.isError,pendingChannelIds:i.pendingChannelIds,onTierChange:i.onTierChange,onTierReset:i.onTierReset})}function Ue({slackHandle:e,disconnectPending:t=!1,onDisconnect:r,children:i}){return(0,G.jsxs)(f.Root,{children:[(0,G.jsx)(f.Header,{children:(0,G.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,G.jsx)(`img`,{src:F(`/images/integrations/slack.svg`),alt:``,className:`size-8 rounded-lg bg-[var(--surface-sunken)] p-1`}),e?(0,G.jsx)(d,{as:`span`,variant:`body-medium-default`,children:e}):null,(0,G.jsx)(y,{tone:`positive`,leftIcon:(0,G.jsx)(L,{}),children:`Connected`}),(0,G.jsx)(`div`,{className:`ml-auto`,children:(0,G.jsx)(n,{type:`button`,variant:`ghost`,onClick:r,disabled:!r||t,children:t?`Disconnecting…`:`Disconnect`})})]})}),(0,G.jsx)(f.Body,{children:i})]})}function We({threadMode:e,threadModePending:t=!1,onThreadModeChange:n}){return(0,G.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[(0,G.jsx)(d,{as:`span`,variant:`body-small-emphasised`,className:`text-[color:var(--content-secondary)]`,children:`Thread Behavior`}),(0,G.jsxs)(h,{value:e??`mention_then_thread`,onValueChange:e=>n?.(e),disabled:t||!n,"aria-label":`Slack thread behavior`,children:[(0,G.jsx)(g,{value:`mention_only`,label:`Mentions only`,helperText:`Bot only responds when @mentioned.`}),(0,G.jsx)(g,{value:`mention_then_thread`,label:`Follow threads after first mention`,helperText:`After an @mention in a thread, bot listens to all subsequent replies.`})]})]})}var Ge={no_one:{title:`Block all messages?`,message:`Setting this channel to “No one” hard-denies every inbound message — including messages from you.
1
+ import{o as e}from"./chunk-jRWAZmH_.js";import{t}from"./react-DJZBPgpf.js";import{t as n}from"./button-amTXFI-2.js";import{d as r,h as i,t as a}from"./chunk-5KNZJZUH-DdS6bb-3.js";import{n as o}from"./QueryClientProvider-DKhXIxGb.js";import{t as s}from"./useQuery-B45lW1Kk.js";import{t as c}from"./useMutation-Lj4VunQV.js";import{t as l}from"./jsx-runtime-CVSDxk6A.js";import{t as u}from"./cn-C36Yvcac.js";import{t as d}from"./typography-D5f7kt80.js";import{t as f}from"./card-Bv5O5juh.js";import{t as p}from"./chevron-down-qD-re7AW.js";import{t as m}from"./notice-DkcNAP8O.js";import{A as h,k as g,n as _,r as v}from"./src-DZbMXyC2.js";import{t as y}from"./tag-CV4v7fRF.js";import{t as b}from"./input-CoUmPnRU.js";import{t as x}from"./list-row-D5MFdbkH.js";import{n as S}from"./stat-square-CTHnQ1jc.js";import{t as C}from"./panel-item-CouW2A55.js";import{t as w}from"./confirm-dialog-CSkhRFRk.js";import{t as T}from"./dropdown-ByHOpeOU.js";import{n as E,t as D}from"./create-selectors-8NePGNlX.js";import{t as O}from"./assistant-identity-store-CX03CK8q.js";import{n as k}from"./utils-xg2dl_KJ.js";import{c as A}from"./routes-BXlWEOF0.js";import{i as j,o as M,r as N}from"./sdk.gen-CenbOmmb.js";import{t as P}from"./assistant-feature-flag-store-BA3GR2m5.js";import{t as F}from"./public-asset-WikBpVQd.js";import{Cr as I,Ea as L,Mt as ee,Xi as te,b as R,cr as ne,d as re,fn as z,ji as ie,l as ae,lr as oe,oa as B,pn as V,x as se,y as ce}from"./index-B4Qq7TL7.js";import{t as le}from"./use-active-assistant-id-CGeH4Gl6.js";import{a as ue,c as de,d as H,l as fe,n as pe,o as me,t as he,u as ge}from"./use-invite-link-dialog-_LChrtmw.js";import{t as _e}from"./detail-card-GPqFZVmX.js";import{n as ve,t as ye}from"./mobile-sidebar-drawer-BaL8el3Y.js";import{t as U}from"./mutation-error-Bk_4pjgm.js";var W=e(t(),1),G=l();function K({icon:e,title:t,description:n,action:r,className:i}){return(0,G.jsxs)(`div`,{className:u(`flex flex-col items-center justify-center gap-3 px-4 py-12 text-center`,i),children:[e?(0,G.jsx)(`div`,{className:`flex h-12 w-12 items-center justify-center rounded-xl bg-[var(--surface-sunken)] text-[var(--content-tertiary)]`,children:e}):null,(0,G.jsx)(`h3`,{className:`text-title-small text-[var(--content-default)]`,children:t}),n?(0,G.jsx)(`p`,{className:`max-w-md text-body-medium-lighter text-[color:var(--content-tertiary)]`,children:n}):null,r?(0,G.jsx)(`div`,{className:`mt-1`,children:r}):null]})}var q=D(E()(e=>({selectedAdapter:`slack`,selectAdapter:t=>e({selectedAdapter:t})})));function J({channels:e,selectedKey:t,onSelect:n}){return(0,G.jsx)(f.Root,{className:`flex h-full flex-col overflow-hidden`,children:(0,G.jsxs)(f.Body,{className:`flex min-h-0 min-w-0 flex-1 flex-col gap-4`,children:[(0,G.jsx)(`h2`,{className:`text-title-medium`,style:{color:`var(--content-default)`},children:`Channels`}),(0,G.jsx)(`div`,{className:`flex flex-col gap-1`,children:e.map(e=>(0,G.jsx)(be,{channel:e,selected:e.key===t,onClick:()=>n(e.key)},e.key))})]})})}function be({channel:e,selected:t,onClick:n}){let r=e.status===`ready`,i=V(e.key),a=r?`Connected`:`Not connected`;return(0,G.jsx)(C,{asChild:!0,active:t,label:`${i}, ${a}`,children:(0,G.jsxs)(`button`,{type:`button`,onClick:n,className:`flex h-auto w-full items-center gap-2 rounded-[6px] px-[8px] py-2 text-left`,children:[(0,G.jsx)(z,{channelId:e.key,className:`h-4 w-4 shrink-0 text-[color:var(--content-secondary)]`}),(0,G.jsx)(`span`,{className:`min-w-0 flex-1 truncate text-body-medium-default`,children:i}),(0,G.jsx)(`span`,{className:`flex shrink-0 items-center`,children:(0,G.jsx)(y,{tone:r?`positive`:`neutral`,children:a})})]})})}function xe({children:e}){return(0,G.jsxs)(f.Root,{children:[(0,G.jsx)(f.Header,{children:(0,G.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,G.jsx)(`img`,{src:F(`/images/integrations/slack.svg`),alt:``,className:`size-8 rounded-lg bg-[var(--surface-sunken)] p-1`}),(0,G.jsx)(d,{as:`span`,variant:`body-medium-default`,children:`Slack setup`})]})}),(0,G.jsx)(f.Body,{children:e})]})}var Y=ce.map(e=>e.riskThreshold),X={none:{label:R(`none`).label,sublabel:`ask before every action`,tone:`negative`},low:{label:R(`low`).label,sublabel:`low-risk actions, ask for the rest`,tone:`warning`},medium:{label:R(`medium`).label,sublabel:`beyond its workspace too`,tone:`info`},high:{label:R(`high`).label,sublabel:`acts freely`,tone:`positive`}},Z=[`trusted_contact`,`unverified_contact`,`unknown`];function Se(e,t){let n={};for(let r of e){if(r.selector.scope!==`channel`||r.selector.adapter!==t)continue;let e=r.selector.channelExternalId;e&&(r.contactType===`trusted_contact`||!(e in n))&&(n[e]=r.threshold)}return n}function Ce(e){return{tier:e??null,overridden:e!==void 0}}function we({channelName:e,settings:t,defaultTier:r,loading:i=!1,error:a=!1,onTierChange:o,onReset:s}){let c=i||a,l=Y.map(e=>({value:e,label:X[e].label,sublabel:X[e].sublabel,disabled:c}));return(0,G.jsxs)(`div`,{className:`flex flex-col gap-3 px-2 pt-1 pb-4`,children:[t.overridden?(0,G.jsx)(m,{tone:`warning`,title:`Custom access.`,className:`border-dashed`,actions:(0,G.jsx)(n,{type:`button`,variant:`outlined`,onClick:s,disabled:c,children:`Reset to default`}),children:`This channel isn’t following your global Assistant Access setting.`}):null,(0,G.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,G.jsx)(d,{as:`span`,variant:`body-small-emphasised`,className:`text-[color:var(--content-secondary)]`,children:`Assistant Access`}),i?(0,G.jsx)(d,{as:`span`,variant:`body-small-default`,className:`text-[color:var(--content-tertiary)]`,children:`Loading…`}):a?(0,G.jsx)(d,{as:`span`,variant:`body-small-default`,className:`text-[color:var(--content-negative)]`,children:`Couldn’t load — try reopening this page`}):t.overridden?(0,G.jsx)(y,{tone:`warning`,children:`overridden`}):(0,G.jsx)(d,{as:`span`,variant:`body-small-default`,className:`text-[color:var(--content-tertiary)]`,children:`default`})]}),(0,G.jsx)(S,{items:l,value:t.tier??r,onChange:o,ariaLabel:`Assistant Access in ${e}`})]})}var Te={positive:`var(--system-positive-strong)`,negative:`var(--system-negative-strong)`,warning:`var(--system-mid-strong)`,info:`var(--system-info-strong)`,neutral:`var(--content-secondary)`};function Ee(e,t){switch(e){case`none`:return(0,G.jsxs)(G.Fragment,{children:[t,` replies in this channel, but asks you before taking any action.`]});case`low`:return(0,G.jsxs)(G.Fragment,{children:[t,` replies and runs safe, read-only actions on its own, like web searches and reading files in its workspace. Anything that writes, sends, or spends asks you first.`]});case`medium`:return(0,G.jsxs)(G.Fragment,{children:[t,` also handles medium-risk requests on its own, like network requests that use your connected accounts. Anything that writes, sends, or spends still asks you first.`]});case`high`:return(0,G.jsxs)(G.Fragment,{children:[t,` answers any request on its own without asking. Tools that take action — writing, sending, spending — still come to you first.`]})}}function De({assistantName:e}){return(0,G.jsxs)(f.Root,{children:[(0,G.jsx)(f.Header,{children:`Assistant Access levels`}),(0,G.jsx)(f.Body,{className:`grid gap-4 sm:grid-cols-2`,children:Y.map(t=>{let n=X[t];return(0,G.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,G.jsxs)(`span`,{className:`flex items-center gap-1.5`,children:[(0,G.jsx)(`span`,{"aria-hidden":`true`,className:`h-1.5 w-1.5 rounded-full`,style:{backgroundColor:Te[n.tone]}}),(0,G.jsx)(d,{as:`span`,variant:`body-small-emphasised`,children:n.label})]}),(0,G.jsx)(d,{as:`p`,variant:`body-small-default`,className:`text-[color:var(--content-tertiary)]`,children:Ee(t,e)})]},t)})}),(0,G.jsx)(f.Footer,{children:(0,G.jsxs)(d,{as:`p`,variant:`body-small-default`,className:`text-[color:var(--content-tertiary)]`,children:[`Your`,` `,(0,G.jsx)(a,{to:A.settings.privacy,className:`text-[var(--content-link)] underline hover:text-[var(--content-link-hover)]`,children:`Trust Rules`}),` `,`fine-tune these levels: a rule raises or lowers how risky a specific action is treated, which changes when it asks first.`]})})]})}function Q(e){return e.type===`dm`?`dm`:e.isPrivate?`private`:`public`}function Oe(e){return e.filter(e=>Q(e)!==`dm`)}function ke(e,t,n){let r=t.trim().toLowerCase();return e.filter(e=>(n===null||Q(e)===n)&&(r===``||e.name.toLowerCase().includes(r))).sort((e,t)=>e.name.localeCompare(t.name))}function Ae(e){let t={public:0,private:0,dm:0};for(let n of e)t[Q(n)]+=1;return t}function je(e){return e.memberCount==null?null:e.memberCount===1?`1 member`:`${e.memberCount} members`}var Me=[{value:null,label:`All`},{value:`public`,label:`Public`},{value:`private`,label:`Private`}],Ne={public:B,private:te},Pe=100,Fe=new Set;function Ie({assistantDisplayName:e,slackHandle:t,channels:r,loading:i=!1,error:a=!1,tierOverrides:o,defaultTier:s=null,accessControlsSupported:c=!0,tierOverridesLoading:l=!1,tierOverridesError:p=!1,pendingChannelIds:m=Fe,onTierChange:h,onTierReset:g}){let[y,x]=(0,W.useState)(``),[S,C]=(0,W.useState)(null),[w,T]=(0,W.useState)(new Set),[E,D]=(0,W.useState)(!1),O=e=>{T(t=>{if(E){let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n}return t.has(e)?new Set:new Set([e])})},k=()=>{E?(D(!1),T(new Set)):(D(!0),T(new Set(A.map(e=>e.id))))},A=(0,W.useMemo)(()=>Oe(r??[]),[r]),j=(0,W.useMemo)(()=>ke(A,y,S),[A,y,S]),M=(0,W.useMemo)(()=>Ae(A),[A]),N=t??`@${e}`,P=(0,G.jsxs)(G.Fragment,{children:[`To add `,e,` to a channel, type`,` `,(0,G.jsxs)(`code`,{className:`text-[color:var(--content-secondary)]`,children:[`/invite `,N]}),` `,`inside that Slack channel.`]});return(0,G.jsxs)(G.Fragment,{children:[(0,G.jsxs)(f.Root,{children:[(0,G.jsx)(f.Header,{children:(0,G.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[`Where `,e,` is present`,(0,G.jsx)(d,{as:`p`,variant:`body-small-default`,className:`text-[color:var(--content-tertiary)]`,children:P})]})}),(0,G.jsx)(f.Body,{className:`flex flex-col gap-3`,children:i?(0,G.jsx)(d,{as:`span`,variant:`body-small-default`,className:`text-[color:var(--content-tertiary)]`,children:`Loading…`}):a?(0,G.jsx)(d,{as:`span`,variant:`body-small-default`,className:`text-[color:var(--content-negative)]`,children:`Couldn’t load channels. Try reopening this page.`}):A.length===0?(0,G.jsx)(K,{icon:(0,G.jsx)(B,{className:`h-6 w-6`}),title:`No channels yet`}):(0,G.jsxs)(G.Fragment,{children:[(0,G.jsxs)(`div`,{className:`flex flex-wrap items-center gap-3`,children:[(0,G.jsx)(`div`,{className:`min-w-56 flex-1`,children:(0,G.jsx)(b,{type:`search`,value:y,onChange:e=>x(e.target.value),placeholder:`Search channels`,"aria-label":`Search channels`,leftIcon:(0,G.jsx)(ie,{className:`h-4 w-4`}),fullWidth:!0})}),(0,G.jsx)(`div`,{className:`flex items-center gap-2`,role:`group`,"aria-label":`Filter channels by type`,children:Me.map(({value:e,label:t})=>{let n=S===e,r=e===null?A.length:M[e];return(0,G.jsxs)(`button`,{type:`button`,"aria-pressed":n,onClick:()=>C(e),className:u(`inline-flex h-6 items-center rounded-full px-2.5 text-body-small-emphasised leading-none transition-colors`,n?`bg-[var(--content-default)] text-[var(--surface-base)]`:`bg-[var(--tag-bg-neutral)] text-[color:var(--content-secondary)] hover:text-[color:var(--content-default)]`),children:[t,` `,r]},e??`all`)})}),(0,G.jsx)(n,{type:`button`,variant:`outlined`,onClick:k,children:E?`Collapse all`:`Expand all`})]}),j.length===0?(0,G.jsx)(d,{as:`span`,variant:`body-small-default`,className:`py-4 text-center text-[color:var(--content-tertiary)]`,children:`No channels match.`}):(0,G.jsx)(_.Root,{type:`multiple`,value:[...w],children:j.length>Pe?(0,G.jsx)(`div`,{className:`h-96`,children:(0,G.jsx)(v,{items:j,computeItemKey:(e,t)=>t.id,itemContent:(e,t)=>(0,G.jsx)($,{channel:t,open:w.has(t.id),onToggle:()=>O(t.id),pending:m.has(t.id),overridesLoading:l,overridesError:p,defaultTier:s,accessControls:c,tierOverride:o?.[t.id],onTierChange:e=>h?.(t.id,e),onReset:()=>g?.(t.id)}),className:`h-full`})}):j.map(e=>(0,G.jsx)($,{channel:e,open:w.has(e.id),onToggle:()=>O(e.id),pending:m.has(e.id),overridesLoading:l,overridesError:p,defaultTier:s,accessControls:c,tierOverride:o?.[e.id],onTierChange:t=>h?.(e.id,t),onReset:()=>g?.(e.id)},e.id))})]})}),!i&&!a&&A.length>0?(0,G.jsx)(f.Footer,{children:(0,G.jsxs)(d,{as:`p`,variant:`body-small-default`,className:`text-[color:var(--content-tertiary)]`,children:[`Only showing channels `,e,` is in. To remove`,` `,e,` from a channel, use`,` `,(0,G.jsxs)(`code`,{className:`text-[color:var(--content-secondary)]`,children:[`/remove `,N]}),` `,`in that Slack channel.`]})}):null]}),c&&!i&&!a&&A.length>0?(0,G.jsx)(De,{assistantName:e}):null]})}function $({channel:e,open:t,pending:n,overridesLoading:r,overridesError:i,defaultTier:a,accessControls:o,tierOverride:s,onToggle:c,onTierChange:l,onReset:d}){let f=Q(e);if(f===`dm`)return null;let m=Ne[f],h=je(e),g=Ce(s),v=g.tier===null?null:X[g.tier],b=a===null?null:X[a];return o?(0,G.jsxs)(_.Item,{value:e.id,className:`[&+&]:border-t [&+&]:border-[var(--border-base)]`,children:[(0,G.jsx)(x,{leading:(0,G.jsx)(m,{className:`h-4 w-4 text-[var(--content-tertiary)]`}),title:e.name,onClick:c,contentAriaLabel:`${e.name} — ${t?`collapse`:`expand`} channel settings`,showChevron:!1,selected:t,trailing:(0,G.jsxs)(G.Fragment,{children:[n?(0,G.jsx)(`span`,{className:`text-body-small-default text-[color:var(--content-tertiary)]`,children:`Saving…`}):h==null?null:(0,G.jsx)(`span`,{className:`text-body-small-default text-[color:var(--content-tertiary)]`,children:h}),v===null?(0,G.jsx)(y,{children:b===null?`Default`:`${b.label} • default`}):(0,G.jsxs)(y,{tone:v.tone,children:[v.label,` • custom`]}),(0,G.jsx)(p,{"aria-hidden":`true`,className:u(`h-4 w-4 text-[var(--content-tertiary)] transition-transform`,t&&`rotate-180`)})]})}),(0,G.jsx)(_.Content,{children:(0,G.jsx)(we,{channelName:e.name,settings:g,defaultTier:a,loading:r,error:i,onTierChange:l,onReset:d})})]}):(0,G.jsx)(x,{leading:(0,G.jsx)(m,{className:`h-4 w-4 text-[var(--content-tertiary)]`}),title:e.name,trailing:h==null?void 0:(0,G.jsx)(`span`,{className:`text-body-small-default text-[color:var(--content-tertiary)]`,children:h})})}var Le=`0.10.7`;function Re(){return k(Le)}function ze(e,t,n){return Z.map(r=>({selector:{scope:`channel`,adapter:e,channelExternalId:t},contactType:r,threshold:n}))}function Be(e,t,n){return e.selector.scope===`channel`&&e.selector.adapter===t&&e.selector.channelExternalId===n}function Ve({assistantId:e,adapter:t}){let n=o(),r=P.use.channelTrustFloors(),i=Re(),a=r&&i&&!!e,l=(0,W.useMemo)(()=>({path:{assistant_id:e}}),[e]),u=(0,W.useMemo)(()=>oe(l),[l]),d=s({...ne(l),enabled:a,select:e=>Se(e.cells,t)}),f=s({queryKey:[`channel-permission-resolve`,e,t],queryFn:async()=>{let{data:e}=await M({...l,body:{adapter:t,contactType:`trusted_contact`},throwOnError:!0});return e.resolved?.threshold??null},enabled:a,retry:!1,staleTime:3e4}),p=(e,r)=>{let i=n.getQueryData(u),a=Date.now();return n.setQueryData(u,n=>({cells:[...(n?.cells??[]).filter(n=>!Be(n,t,e)),...r.map(e=>({...e,updatedAt:a}))]})),{previous:i}},m=c({mutationFn:async({channelExternalId:e,tier:n})=>{await Promise.all(ze(t,e,n).map(e=>j({...l,body:e,throwOnError:!0})))},onMutate:({channelExternalId:e,tier:n})=>p(e,ze(t,e,n)),onError:(e,t,r)=>{n.setQueryData(u,r?.previous),U(`Failed to save channel settings`)(e)},onSettled:()=>n.invalidateQueries({queryKey:u})}),h=c({mutationFn:async({channelExternalId:e})=>{await Promise.all(Z.map(n=>N({...l,body:{selector:{scope:`channel`,adapter:t,channelExternalId:e},contactType:n},throwOnError:!0})))},onMutate:({channelExternalId:e})=>p(e,[]),onError:(e,t,r)=>{n.setQueryData(u,r?.previous),U(`Failed to reset channel settings`)(e)},onSettled:()=>n.invalidateQueries({queryKey:u})}),g=(0,W.useMemo)(()=>{let e=new Set;return m.isPending&&m.variables&&e.add(m.variables.channelExternalId),h.isPending&&h.variables&&e.add(h.variables.channelExternalId),e},[m.isPending,m.variables,h.isPending,h.variables]);return a?{supported:!0,tierOverrides:d.data,defaultCellTier:f.data,pendingChannelIds:g,isLoading:d.isPending,isError:d.isError,onTierChange:(e,t)=>m.mutate({channelExternalId:e,tier:t}),onTierReset:e=>{d.data?.[e]!==void 0&&h.mutate({channelExternalId:e})}}:{supported:!1,tierOverrides:void 0,defaultCellTier:void 0,pendingChannelIds:new Set,isLoading:!1,isError:!1,onTierChange:void 0,onTierReset:void 0}}function He({assistantId:e,assistantDisplayName:t,slackHandle:n}){let r=s({...ae(e),enabled:!!e,select:e=>e.channels}),i=Ve({assistantId:e,adapter:`slack`}),a=s({queryKey:[`thresholds`,e],queryFn:()=>se(e),enabled:i.supported&&!!e,staleTime:3e4}).data?.interactive??null,o=i.defaultCellTier===void 0?null:i.defaultCellTier??a;return(0,G.jsx)(Ie,{assistantDisplayName:t,slackHandle:n,accessControlsSupported:i.supported,defaultTier:o,channels:r.data,loading:r.isPending,error:r.isError,tierOverrides:i.tierOverrides,tierOverridesLoading:i.isLoading,tierOverridesError:i.isError,pendingChannelIds:i.pendingChannelIds,onTierChange:i.onTierChange,onTierReset:i.onTierReset})}function Ue({slackHandle:e,disconnectPending:t=!1,onDisconnect:r,children:i}){return(0,G.jsxs)(f.Root,{children:[(0,G.jsx)(f.Header,{children:(0,G.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,G.jsx)(`img`,{src:F(`/images/integrations/slack.svg`),alt:``,className:`size-8 rounded-lg bg-[var(--surface-sunken)] p-1`}),e?(0,G.jsx)(d,{as:`span`,variant:`body-medium-default`,children:e}):null,(0,G.jsx)(y,{tone:`positive`,leftIcon:(0,G.jsx)(L,{}),children:`Connected`}),(0,G.jsx)(`div`,{className:`ml-auto`,children:(0,G.jsx)(n,{type:`button`,variant:`ghost`,onClick:r,disabled:!r||t,children:t?`Disconnecting…`:`Disconnect`})})]})}),(0,G.jsx)(f.Body,{children:i})]})}function We({threadMode:e,threadModePending:t=!1,onThreadModeChange:n}){return(0,G.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[(0,G.jsx)(d,{as:`span`,variant:`body-small-emphasised`,className:`text-[color:var(--content-secondary)]`,children:`Thread Behavior`}),(0,G.jsxs)(h,{value:e??`mention_then_thread`,onValueChange:e=>n?.(e),disabled:t||!n,"aria-label":`Slack thread behavior`,children:[(0,G.jsx)(g,{value:`mention_only`,label:`Mentions only`,helperText:`Bot only responds when @mentioned.`}),(0,G.jsx)(g,{value:`mention_then_thread`,label:`Follow threads after first mention`,helperText:`After an @mention in a thread, bot listens to all subsequent replies.`})]})]})}var Ge={no_one:{title:`Block all messages?`,message:`Setting this channel to “No one” hard-denies every inbound message — including messages from you.
2
2
 
3
3
  You can reverse this at any time.`,confirmLabel:`Block all`,destructive:!0},any_contact:{title:`Allow any contact?`,message:`“Any contact” admits every matched contact in this channel — including pending, unverified ones — not just your verified contacts.
4
4
 
@@ -1,2 +1,2 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/native-file-H6DBFhbO.js","assets/chunk-jRWAZmH_.js","assets/preload-helper-BewR0kVT.js","assets/dist-RkT480s0.js","assets/pdf-OTWpgOp2.js"])))=>i.map(i=>d[i]);
2
- import{o as e}from"./chunk-jRWAZmH_.js";import{t}from"./capture-error-Dhiismgm.js";import{t as n}from"./react-DJZBPgpf.js";import{F as r,t as i}from"./button-amTXFI-2.js";import{t as a}from"./preload-helper-BewR0kVT.js";import{t as o}from"./useQuery-B45lW1Kk.js";import{t as s}from"./jsx-runtime-CVSDxk6A.js";import{t as c}from"./typography-D5f7kt80.js";import{t as l}from"./chevron-left-BMF1xNfR.js";import{t as u}from"./chevron-right-DqqmezXC.js";import{t as d}from"./download-CAuK-nZ6.js";import{t as f}from"./file-DsyJLS2u.js";import{t as p}from"./loader-circle-Cz7opInR.js";import{t as m}from"./x-CkSVp1Ok.js";import{a as h,m as g}from"./src-DZbMXyC2.js";import{n as _,t as v}from"./file-markdown-ZKvQUuGy.js";import{l as y}from"./sdk.gen-CFgJ4K6f.js";import{t as b}from"./dist-RkT480s0.js";import{t as x}from"./browser-WjU02SUS.js";import{t as S}from"./haptics-Dgz3Ixf7.js";import{t as C}from"./edge-swipe-arbiter-store-VEaUoy3F.js";var w=e(n(),1),ee=e(r(),1),T=s(),E=`width=500,height=600`;function D(e){if(!e)return null;let t;try{let n=typeof window>`u`?`http://localhost`:window.location.origin;t=new URL(e,n)}catch{return null}return t.protocol!==`https:`&&t.protocol!==`http:`?null:t}function O(e){let t=D(e);if(!t)return!1;let n=t.pathname.toLowerCase();return t.searchParams.get(`response_type`)===`code`&&t.searchParams.has(`client_id`)&&t.searchParams.has(`redirect_uri`)||t.searchParams.has(`client_id`)&&t.searchParams.has(`redirect_uri`)&&/oauth|authorize|auth/.test(n)}function k(e){if(typeof window>`u`)return null;let t=D(e);return!t||t.origin!==window.location.origin?null:`${t.pathname}${t.search}${t.hash}`}function A(e){return D(e)?.href??null}function j(e){if(!O(e))return!1;if(b.isNativePlatform()){let t=A(e);return t?(x(t),!0):!1}let t=window.open(e,`_blank`,E);return t===null?!1:(t.focus(),!0)}function M(e){return j(e)}function N(e){if(j(e))return!0;let t=window.open(e,`_blank`);return t===null?!1:(t.focus(),!0)}function P(e,t){let n=k(e);if(n)return t.push(n),{kind:`routed`};let r=A(e);return r?t.isNative?(x(r),{kind:`opened`}):N(r)?{kind:`opened`}:{kind:`blocked`,url:r}:{kind:`invalid`}}async function F(e,t){if(!t||t.startsWith(`rehydrated:`))return null;try{let{data:n,error:r}=await y({path:{assistant_id:e,id:t},parseAs:`blob`,throwOnError:!1});return!r&&n instanceof Blob?n:null}catch{return null}}async function I(e,t){let{saveFile:n}=await a(async()=>{let{saveFile:e}=await import(`./native-file-H6DBFhbO.js`).then(e=>e.t);return{saveFile:e}},__vite__mapDeps([0,1,2,3]));if(t){let r=await F(t,e.id);if(r){await n(r,e.filename);return}}e.previewUrl&&await n(e.previewUrl,e.filename)}function L(e){if(!Number.isFinite(e)||e<=0)return`0 B`;let t=[`B`,`KB`,`MB`,`GB`],n=e,r=0;for(;n>=1024&&r<t.length-1;)n/=1024,r+=1;return`${n>=10||r===0?Math.round(n).toString():n.toFixed(1)} ${t[r]}`}function R(e,t){let n=(e||``).toLowerCase(),r=t.split(`.`).pop()?.toLowerCase()??``;return n.startsWith(`image/`)?`image`:n.startsWith(`video/`)?`video`:n.startsWith(`audio/`)?`audio`:n===`application/pdf`||r===`pdf`?`pdf`:n===`application/zip`||n===`application/x-tar`||n===`application/gzip`||[`zip`,`tar`,`gz`,`tgz`,`rar`,`7z`].includes(r)?`archive`:n===`text/csv`||n===`application/vnd.ms-excel`||n===`application/vnd.openxmlformats-officedocument.spreadsheetml.sheet`||[`csv`,`xlsx`,`xls`,`numbers`].includes(r)?`spreadsheet`:`ts.tsx.js.jsx.py.rb.go.rs.java.kt.swift.c.cc.cpp.h.hpp.sh.bash.zsh.html.css.scss.json.yaml.yml.toml.xml`.split(`.`).includes(r)?`code`:n===`application/msword`||n===`application/vnd.openxmlformats-officedocument.wordprocessingml.document`||[`doc`,`docx`,`pages`].includes(r)?`document`:n.startsWith(`text/`)||[`txt`,`md`,`rtf`].includes(r)?`text`:`file`}function z(e){let t=e.replace(/\s/g,``),n=t.endsWith(`==`)?2:+!!t.endsWith(`=`);return Math.max(0,Math.floor(t.length*3/4)-n)}function B(e){let t=e.match(/;base64,(.*)$/);if(!t?.[1])return null;let n=atob(t[1]),r=new Uint8Array(n.length);for(let e=0;e<n.length;e++)r[e]=n.charCodeAt(e);return r}function V(e,t=28){if(e.length<=t)return e;let n=Math.max(4,Math.floor((t-1)/2));return`${e.slice(0,n)}…${e.slice(e.length-n)}`}var H=1.5,U=20,te=!1;async function ne(){let e=await a(()=>import(`./pdf-OTWpgOp2.js`),__vite__mapDeps([4,2]));return te||=(e.GlobalWorkerOptions.workerSrc=`https://cdn.jsdelivr.net/npm/pdfjs-dist@${e.version}/legacy/build/pdf.worker.min.mjs`,!0),e}function re({url:e,className:t}){let n=(0,w.useRef)(null),[r,i]=(0,w.useState)(null),[a,o]=(0,w.useState)(0),[s,c]=(0,w.useState)(!0),[l,u]=(0,w.useState)(null),d=(0,w.useRef)(new Map),f=(0,w.useRef)(new Set);(0,w.useEffect)(()=>{let t=!1;async function n(){c(!0),u(null),i(null),o(0),f.current.clear();try{let n=await ne(),r;if(e.startsWith(`data:`)){let t=B(e);r=t?{data:t}:e}else r=e;let a=await n.getDocument(r).promise;if(t){a.destroy();return}i(a),o(Math.min(a.numPages,U))}catch{t||u(`Failed to load PDF.`)}finally{t||c(!1)}}return n(),()=>{t=!0}},[e]),(0,w.useEffect)(()=>()=>{r&&r.destroy()},[r]);let m=(0,w.useCallback)(async e=>{if(!r||f.current.has(e))return;let t=d.current.get(e);if(t){f.current.add(e);try{let n=await r.getPage(e),i=n.getViewport({scale:H});t.width=i.width,t.height=i.height,await n.render({canvas:t,viewport:i}).promise}catch{f.current.delete(e)}}},[r]);(0,w.useEffect)(()=>{if(!r||a===0)return;let e=new IntersectionObserver(e=>{for(let t of e){if(!t.isIntersecting)continue;let e=Number(t.target.dataset.page);e&&m(e)}},{root:n.current,rootMargin:`200px`});return d.current.forEach(t=>e.observe(t)),()=>e.disconnect()},[r,a,m]);let h=(0,w.useCallback)(e=>t=>{t?d.current.set(e,t):d.current.delete(e)},[]);return s?(0,T.jsx)(`div`,{className:`flex items-center justify-center py-24`,children:(0,T.jsx)(p,{className:`h-8 w-8 animate-spin text-white/70`})}):l?(0,T.jsx)(`div`,{className:`w-full max-w-sm rounded-lg border border-white/15 bg-white/[0.08] p-8 text-center`,children:(0,T.jsx)(`p`,{className:`text-body-medium-lighter text-white/80`,children:l})}):(0,T.jsx)(`div`,{ref:n,className:`flex max-h-[80vh] flex-col items-center gap-2 overflow-y-auto rounded ${t??``}`,children:Array.from({length:a},(e,t)=>(0,T.jsx)(`canvas`,{ref:h(t+1),"data-page":t+1,className:`w-[90vw] max-w-[800px]`,style:{height:`auto`}},t+1))})}function W({message:e,filename:t,onDownload:n,downloadDisabled:r=!1}){return(0,T.jsxs)(`div`,{className:`w-full max-w-sm rounded-lg border border-white/15 bg-white/[0.08] p-8 text-center`,children:[(0,T.jsx)(`p`,{className:`text-body-medium-lighter text-white/80`,children:e}),(0,T.jsx)(i,{variant:`ghost`,leftIcon:(0,T.jsx)(d,{}),onClick:n,disabled:r,"aria-label":`Download ${t}`,className:`mt-4 text-white/70 hover:bg-white/10 hover:text-white max-md:bg-transparent`,tintColor:`currentColor`,children:`Download`})]})}var G=class extends Error{};async function K(e,t,n){if(t>204800)throw new G;if(e.startsWith(`data:`)){let t=B(e);if(!t)throw Error(`Malformed data URI`);return new TextDecoder().decode(t)}let r=await fetch(e,{signal:n});if(!r.ok)throw Error(`Failed to load file: ${r.status}`);let i=await r.blob();if(i.size>204800)throw new G;return i.text()}function ie({url:e,filename:n,mimeType:r,sizeBytes:i}){let[o,s]=(0,w.useState)({status:`loading`});return(0,w.useEffect)(()=>{let n=new AbortController;return s({status:`loading`}),K(e,i,n.signal).then(e=>{n.signal.aborted||s({status:`ready`,text:e})}).catch(e=>{if(n.signal.aborted)return;let r=e instanceof G;r||t(e,{context:`attachment-text-preview`,bestEffort:!0}),s({status:`error`,tooLarge:r})}),()=>n.abort()},[e,i]),o.status===`loading`?(0,T.jsx)(`div`,{className:`flex items-center justify-center py-24`,children:(0,T.jsx)(p,{className:`h-8 w-8 animate-spin text-white/70`})}):o.status===`error`?(0,T.jsx)(W,{message:o.tooLarge?`File too large to preview inline.`:`Failed to load preview.`,filename:n,onDownload:async()=>{let{saveFile:t}=await a(async()=>{let{saveFile:e}=await import(`./native-file-H6DBFhbO.js`).then(e=>e.t);return{saveFile:e}},__vite__mapDeps([0,1,2,3]));await t(e,n)}}):(0,T.jsx)(`div`,{className:`max-h-[80vh] w-[min(90vw,800px)] overflow-auto rounded-lg p-6`,style:{backgroundColor:`var(--surface-overlay)`,color:`var(--content-default)`},children:(0,T.jsx)(q,{text:o.text,filename:n,mimeType:r})})}function q({text:e,filename:t,mimeType:n}){return _(t,n)?(0,T.jsx)(v,{content:e}):(0,T.jsx)(`pre`,{className:`whitespace-pre-wrap break-words font-mono text-body-small-default`,children:e})}var J=60,Y=.8,X=8,Z=.35;function ae({enabled:e,onPrev:t,onNext:n}){let[r,i]=(0,w.useState)(0),[a,o]=(0,w.useState)(!1),s=(0,w.useRef)(null),c=(0,w.useCallback)(()=>{s.current=null,i(0),o(!1)},[]);return{dragOffset:r,isDragging:a,onTouchStart:(0,w.useCallback)(t=>{if(!e)return;if(t.touches.length!==1){c();return}let n=t.touches[0];s.current={touchId:n.identifier,startX:n.clientX,startY:n.clientY,axis:`undecided`,lastDx:0}},[e,c]),onTouchMove:(0,w.useCallback)(e=>{let t=s.current;if(!t)return;if(e.touches.length!==1){c();return}let n=e.touches[0];if(n.identifier!==t.touchId)return;let r=n.clientX-t.startX,a=n.clientY-t.startY;if(t.lastDx=r,t.axis===`undecided`){if(Math.abs(r)<X&&Math.abs(a)<X)return;if(Math.abs(a)>Math.abs(r)*Y){s.current=null;return}t.axis=`horizontal`,o(!0)}if(t.axis!==`horizontal`)return;if(Math.abs(r)<J&&Math.abs(a)>Math.abs(r)*Y){c();return}let l=Math.sign(r),u=Math.abs(r);i(l*(u<=J?u:J+(u-J)*Z))},[c]),onTouchEnd:(0,w.useCallback)(e=>{let r=s.current;if(!r||r.axis!==`horizontal`){c();return}if(e.touches.length>0){c();return}let i=Array.from(e.changedTouches).find(e=>e.identifier===r.touchId),a=i?i.clientX-r.startX:r.lastDx;a<=-J?(S.light(),n()):a>=J&&(S.light(),t()),c()},[n,t,c]),onTouchCancel:c}}var oe=new Set([`ts`,`tsx`,`js`,`jsx`,`py`,`json`,`md`,`sh`,`bash`,`html`,`css`,`yaml`,`yml`,`txt`]),se=new Set([`application/json`,`application/javascript`,`application/xml`]),ce=e=>{let t=e.lastIndexOf(`.`);return t===-1||t===e.length-1?``:e.slice(t+1).toLowerCase()},Q=({open:e,onClose:t,attachment:n,assistantId:r,siblingAttachments:s,onNavigate:h})=>{let g=(0,w.useRef)(null);(0,w.useEffect)(()=>{e&&g.current?.focus()},[e]);let _=C.use.registerBackOwner(),v=C.use.unregisterBackOwner();(0,w.useEffect)(()=>{if(e)return _(),()=>v()},[e,_,v]);let y=!n.previewUrl&&n.id.startsWith(`rehydrated:`),b=e&&!n.previewUrl&&!!r&&!!n.id&&!y,{data:x,isError:S}=o({queryKey:[`attachmentContent`,r,n.id],queryFn:async()=>{let e=await F(r,n.id);if(!e)throw Error(`Failed to load file`);return e},enabled:b,staleTime:1/0,retry:!1}),[E,D]=(0,w.useState)(null);(0,w.useEffect)(()=>{if(!x){D(null);return}let e=URL.createObjectURL(x);return D(e),()=>{URL.revokeObjectURL(e),D(null)}},[x]);let O=n.previewUrl??E,[k,A]=(0,w.useState)(null),j=b&&!E&&!S,M=y?`Preview unavailable — file content was not preserved in chat history.`:S?`Failed to load preview.`:null,N=(0,w.useMemo)(()=>!s||s.length<=1?-1:s.findIndex(e=>e.id===n.id),[s,n.id]),P=N!==-1&&s!=null&&s.length>1,I=(0,w.useCallback)(()=>{!P||!s||!h||h(s[(N-1+s.length)%s.length])},[P,s,N,h]),R=(0,w.useCallback)(()=>{!P||!s||!h||h(s[(N+1)%s.length])},[P,s,N,h]),{dragOffset:z,isDragging:B,onTouchStart:V,onTouchMove:H,onTouchEnd:U,onTouchCancel:te}=ae({enabled:P,onPrev:I,onNext:R}),ne=(0,w.useCallback)(e=>{e.key===`Escape`?(e.preventDefault(),t()):e.key===`ArrowLeft`&&P?(e.preventDefault(),I()):e.key===`ArrowRight`&&P&&(e.preventDefault(),R())},[t,I,R,P]),G=(0,w.useCallback)(e=>{e.target===g.current&&t()},[t]),K=(0,w.useCallback)(async()=>{if(!O)return;let{saveFile:e}=await a(async()=>{let{saveFile:e}=await import(`./native-file-H6DBFhbO.js`).then(e=>e.t);return{saveFile:e}},__vite__mapDeps([0,1,2,3]));await e(O,n.filename)},[O,n.filename]);if(!e)return null;let q=n.mimeType.toLowerCase(),J=q.startsWith(`image/`),Y=q.startsWith(`video/`),X=q===`application/pdf`||q===`application/octet-stream`&&n.filename.toLowerCase().endsWith(`.pdf`),Z=ce(n.filename),Q=q.startsWith(`text/`)||se.has(q)||oe.has(Z);return(0,ee.createPortal)((0,T.jsxs)(`div`,{ref:g,role:`dialog`,"aria-modal":`true`,"aria-label":`Preview of ${n.filename}`,tabIndex:-1,className:`fixed inset-0 z-50 flex flex-col items-center justify-center bg-black/80 outline-none [-webkit-app-region:no-drag]`,style:{paddingTop:`var(--safe-area-inset-top, env(safe-area-inset-top, 0px))`,paddingBottom:`var(--safe-area-inset-bottom, env(safe-area-inset-bottom, 0px))`,paddingLeft:`var(--safe-area-inset-left, env(safe-area-inset-left, 0px))`,paddingRight:`var(--safe-area-inset-right, env(safe-area-inset-right, 0px))`},onKeyDown:ne,onClick:G,children:[(0,T.jsxs)(`div`,{className:`absolute inset-x-0 top-0 z-10 flex items-center gap-3 px-4`,style:{paddingTop:`calc(var(--safe-area-inset-top, env(safe-area-inset-top, 0px)) + 1rem)`},children:[(0,T.jsx)(c,{variant:`body-small-default`,className:`w-11 shrink-0 truncate text-white/50`,children:L(n.sizeBytes)}),(0,T.jsx)(c,{as:`div`,variant:`body-medium-lighter`,className:`min-w-0 flex-1 truncate text-center text-white/90`,children:n.filename}),(0,T.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2`,children:[(0,T.jsx)(i,{variant:`ghost`,iconOnly:(0,T.jsx)(d,{}),expandOnMobile:!1,onClick:K,disabled:!O,"aria-label":`Download ${n.filename}`,className:`h-11 w-11 rounded-full bg-white/10 text-white/70 hover:bg-white/20 hover:text-white`,tintColor:`currentColor`}),(0,T.jsx)(i,{variant:`ghost`,iconOnly:(0,T.jsx)(m,{}),expandOnMobile:!1,onClick:t,"aria-label":`Close preview`,className:`h-11 w-11 rounded-full bg-white/10 text-white/70 hover:bg-white/20 hover:text-white`,tintColor:`currentColor`})]})]}),P&&(0,T.jsxs)(`div`,{className:`pointer-events-none absolute inset-x-0 top-1/2 z-10 flex -translate-y-1/2 items-center justify-between px-4`,children:[(0,T.jsx)(i,{variant:`ghost`,iconOnly:(0,T.jsx)(l,{}),expandOnMobile:!1,onClick:I,"aria-label":`Previous attachment`,className:`pointer-events-auto h-11 w-11 rounded-full bg-white/10 text-white/70 hover:bg-white/20 hover:text-white`,tintColor:`currentColor`}),(0,T.jsx)(i,{variant:`ghost`,iconOnly:(0,T.jsx)(u,{}),expandOnMobile:!1,onClick:R,"aria-label":`Next attachment`,className:`pointer-events-auto h-11 w-11 rounded-full bg-white/10 text-white/70 hover:bg-white/20 hover:text-white`,tintColor:`currentColor`})]}),(0,T.jsx)(`div`,{className:`flex items-center justify-center`,style:{transform:`translateX(${z}px)`,transition:B?`none`:`transform 200ms ease-out`,touchAction:`pan-y`},onClick:e=>e.stopPropagation(),onTouchStart:V,onTouchMove:H,onTouchEnd:U,onTouchCancel:te,children:j?(0,T.jsx)(`div`,{className:`flex items-center justify-center py-24`,children:(0,T.jsx)(p,{className:`h-8 w-8 animate-spin text-white/70`})}):M?(0,T.jsx)(W,{message:M,filename:n.filename,onDownload:K,downloadDisabled:!O}):X&&O?(0,T.jsx)(re,{url:O}):J&&O&&k!==O?(0,T.jsx)(`img`,{src:O,alt:n.filename,onError:()=>A(O),className:`max-h-[80vh] max-w-[90vw] rounded object-contain`}):Y&&O?(0,T.jsx)(`video`,{"data-testid":`video-preview`,src:O,poster:n.thumbnailUrl??void 0,controls:!0,className:`max-h-[80vh] max-w-[90vw] rounded`}):Q&&O?(0,T.jsx)(ie,{url:O,filename:n.filename,mimeType:n.mimeType,sizeBytes:n.sizeBytes}):(0,T.jsxs)(`div`,{className:`flex w-full max-w-sm flex-col items-center rounded-lg border border-white/15 bg-white/[0.08] p-8 text-center`,children:[(0,T.jsx)(f,{className:`h-16 w-16 text-white/60`}),(0,T.jsx)(`p`,{className:`mt-4 text-body-medium-default text-white/90`,children:n.filename}),(0,T.jsx)(`p`,{className:`mt-1 text-body-small-default text-white/60`,children:L(n.sizeBytes)}),(0,T.jsx)(i,{variant:`ghost`,leftIcon:(0,T.jsx)(d,{}),onClick:K,disabled:!O,"aria-label":`Download ${n.filename}`,className:`mt-4 text-white/70 hover:bg-white/10 hover:text-white max-md:bg-transparent`,tintColor:`currentColor`,children:`Download`})]})}),P&&(0,T.jsx)(`div`,{className:`absolute inset-x-0 bottom-0 z-10 flex justify-center`,style:{paddingBottom:`calc(var(--safe-area-inset-bottom, env(safe-area-inset-bottom, 0px)) + 2rem)`},onClick:e=>e.stopPropagation(),children:(0,T.jsxs)(c,{variant:`body-small-default`,className:`text-white/50`,children:[N+1,` / `,s.length]})})]}),document.body)};function le(e,t){let[n,r]=(0,w.useState)(null),i=(0,w.useCallback)(e=>r(e),[]),a=(0,w.useCallback)(()=>r(null),[]),o=(0,w.useCallback)(e=>r(e),[]);return{openPreview:i,previewModal:n?(0,T.jsx)(Q,{open:!0,onClose:a,attachment:n,assistantId:e,siblingAttachments:t,onNavigate:o}):null}}var ue=new Set([`pre`,`code`,`style`,`script`]),de=5,fe=.4,pe=`stream-word-fade`;function me(e){return e.type===`element`}function he(e){if(me(e)&&ue.has(e.tagName))return;let t=e.children;if(t)for(let e=t.length-1;e>=0;e--){let n=t[e];if(n.type!==`text`){he(n);continue}let r=n.value.match(/\S+|\s+/g);if(!r||r.length===1&&/^\s+$/.test(r[0]))continue;let i=r.map(e=>/^\s+$/.test(e)?{type:`text`,value:e}:{type:`element`,tagName:`span`,properties:{className:[pe]},children:[{type:`text`,value:e}]});t.splice(e,1,...i)}}function ge(e,t){if(me(e)){let n=e.properties?.className;if(Array.isArray(n)&&n.includes(pe)){t.push(e);return}}if(e.children)for(let n of e.children)ge(n,t)}function _e(e){let t=e?.caughtUp??!1;return e=>{if(he(e),t)return;let n=[];ge(e,n);let r=Math.min(de,n.length);for(let e=0;e<r;e++){let t=n[n.length-1-e],r=(fe+(1-fe)*((e+1)/(de+1))).toFixed(3);t.properties={...t.properties,style:`opacity:${r}`}}}}function ve(e){return e!=null&&(e.startsWith(`vellum://workspace/`)||e.startsWith(`vellum://host/`))}function ye(e){return e.startsWith(`vellum://workspace/`)||e.startsWith(`vellum://host/`)?e:g(e)}function be({href:e,children:t}){return(0,T.jsx)(`a`,{href:e,target:`_blank`,rel:O(e)?void 0:`noopener noreferrer`,onClick:t=>{M(e)&&t.preventDefault()},className:`text-[var(--system-positive-strong)] underline hover:opacity-80`,children:t})}var xe=`my-2 max-w-full max-h-[400px] rounded-lg border border-[var(--border-default)] object-contain`;function $({alt:e}){return(0,T.jsxs)(`span`,{className:`inline-flex items-center gap-1 rounded bg-[var(--surface-sunken)] px-1.5 py-0.5 text-body-small-default text-[var(--content-tertiary)]`,children:[`Image failed to load`,e?` (${e})`:``]})}function Se({src:e,alt:t}){let[n,r]=(0,w.useState)(!1);return n?(0,T.jsx)($,{alt:t}):(0,T.jsx)(`img`,{src:e,alt:t,onError:()=>r(!0),className:xe})}function Ce(e){try{return decodeURIComponent(e)}catch{return e}}function we({src:e,alt:n,attachments:r,assistantId:i,onOpenPreview:a}){let[o,s]=(0,w.useState)(null),[c,l]=(0,w.useState)(!1),u=Ce(e.split(`/`).pop()??``),d=r?.find(e=>e.filename===u);if((0,w.useEffect)(()=>{if(!d||!i||d.id.startsWith(`rehydrated:`))return;let e=!1;return(async()=>{try{let{data:t,error:n}=await y({path:{assistant_id:i,id:d.id},parseAs:`blob`,throwOnError:!1});if(e)return;if(n||!(t instanceof Blob)){l(!0);return}s(URL.createObjectURL(t))}catch(n){e||(l(!0),t(n,{context:`WorkspaceInlineImage`,bestEffort:!0}))}})(),()=>{e=!0,s(e=>(e&&URL.revokeObjectURL(e),null))}},[d,i]),c||!d&&!o)return(0,T.jsx)($,{alt:n||u});if(!o)return(0,T.jsxs)(`span`,{className:`inline-flex items-center gap-1 rounded bg-[var(--surface-sunken)] px-1.5 py-0.5 text-body-small-default text-[var(--content-tertiary)]`,children:[`Loading image…`,n?` (${n})`:``]});let f=(0,T.jsx)(`img`,{src:o,alt:n,className:xe});return!d||!a?f:(0,T.jsx)(`button`,{type:`button`,onClick:()=>a(d),className:`cursor-zoom-in appearance-none border-0 bg-transparent p-0`,"aria-label":n?`Expand image: ${n}`:`Expand image`,children:f})}var Te=(0,w.memo)(function({content:e,className:t,hardLineBreaks:n,onVellumLinkClick:r,attachments:i,assistantId:a,streamWordFade:o}){let{openPreview:s,previewModal:c}=le(a,i),l=(0,w.useCallback)(({href:e,children:t})=>r&&ve(e)?(0,T.jsx)(`a`,{href:e,onClick:t=>{t.preventDefault(),e&&r(e,t.currentTarget.textContent??``)},className:`text-[var(--system-positive-strong)] underline hover:opacity-80 cursor-pointer`,children:t}):(0,T.jsx)(be,{href:e,children:t}),[r]),u=(0,w.useMemo)(()=>o?[[_e,{caughtUp:o===`caughtUp`}]]:void 0,[o]);return(0,T.jsxs)(T.Fragment,{children:[(0,T.jsx)(h,{content:e,className:t,hardLineBreaks:n,linkComponent:l,imageComponent:(0,w.useMemo)(()=>({src:e,alt:t})=>ve(e)?(0,T.jsx)(we,{src:e,alt:t,attachments:i,assistantId:a,onOpenPreview:s}):(0,T.jsx)(Se,{src:e,alt:t}),[i,a,s]),urlTransform:ye,extraRehypePlugins:u}),c]})});export{z as a,I as c,N as d,R as i,F as l,le as n,L as o,Q as r,V as s,Te as t,P as u};
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/native-file-BZDk5eyB.js","assets/chunk-jRWAZmH_.js","assets/preload-helper-BewR0kVT.js","assets/dist-RkT480s0.js","assets/pdf-jCZ1S_t-.js"])))=>i.map(i=>d[i]);
2
+ import{o as e}from"./chunk-jRWAZmH_.js";import{t}from"./capture-error-Dhiismgm.js";import{t as n}from"./react-DJZBPgpf.js";import{F as r,t as i}from"./button-amTXFI-2.js";import{t as a}from"./preload-helper-BewR0kVT.js";import{t as o}from"./useQuery-B45lW1Kk.js";import{t as s}from"./jsx-runtime-CVSDxk6A.js";import{t as c}from"./typography-D5f7kt80.js";import{t as l}from"./chevron-left-BMF1xNfR.js";import{t as u}from"./chevron-right-DqqmezXC.js";import{t as d}from"./download-CAuK-nZ6.js";import{t as f}from"./file-DsyJLS2u.js";import{t as p}from"./loader-circle-Cz7opInR.js";import{t as m}from"./x-CkSVp1Ok.js";import{a as h,m as g}from"./src-DZbMXyC2.js";import{n as _,t as v}from"./file-markdown-ZKvQUuGy.js";import{l as y}from"./sdk.gen-CFgJ4K6f.js";import{t as b}from"./dist-RkT480s0.js";import{t as x}from"./browser-Cnr7iqbJ.js";import{t as S}from"./haptics-BOswdY5A.js";import{t as C}from"./edge-swipe-arbiter-store-VEaUoy3F.js";var w=e(n(),1),ee=e(r(),1),T=s(),E=`width=500,height=600`;function D(e){if(!e)return null;let t;try{let n=typeof window>`u`?`http://localhost`:window.location.origin;t=new URL(e,n)}catch{return null}return t.protocol!==`https:`&&t.protocol!==`http:`?null:t}function O(e){let t=D(e);if(!t)return!1;let n=t.pathname.toLowerCase();return t.searchParams.get(`response_type`)===`code`&&t.searchParams.has(`client_id`)&&t.searchParams.has(`redirect_uri`)||t.searchParams.has(`client_id`)&&t.searchParams.has(`redirect_uri`)&&/oauth|authorize|auth/.test(n)}function k(e){if(typeof window>`u`)return null;let t=D(e);return!t||t.origin!==window.location.origin?null:`${t.pathname}${t.search}${t.hash}`}function A(e){return D(e)?.href??null}function j(e){if(!O(e))return!1;if(b.isNativePlatform()){let t=A(e);return t?(x(t),!0):!1}let t=window.open(e,`_blank`,E);return t===null?!1:(t.focus(),!0)}function M(e){return j(e)}function N(e){if(j(e))return!0;let t=window.open(e,`_blank`);return t===null?!1:(t.focus(),!0)}function P(e,t){let n=k(e);if(n)return t.push(n),{kind:`routed`};let r=A(e);return r?t.isNative?(x(r),{kind:`opened`}):N(r)?{kind:`opened`}:{kind:`blocked`,url:r}:{kind:`invalid`}}async function F(e,t){if(!t||t.startsWith(`rehydrated:`))return null;try{let{data:n,error:r}=await y({path:{assistant_id:e,id:t},parseAs:`blob`,throwOnError:!1});return!r&&n instanceof Blob?n:null}catch{return null}}async function I(e,t){let{saveFile:n}=await a(async()=>{let{saveFile:e}=await import(`./native-file-BZDk5eyB.js`).then(e=>e.t);return{saveFile:e}},__vite__mapDeps([0,1,2,3]));if(t){let r=await F(t,e.id);if(r){await n(r,e.filename);return}}e.previewUrl&&await n(e.previewUrl,e.filename)}function L(e){if(!Number.isFinite(e)||e<=0)return`0 B`;let t=[`B`,`KB`,`MB`,`GB`],n=e,r=0;for(;n>=1024&&r<t.length-1;)n/=1024,r+=1;return`${n>=10||r===0?Math.round(n).toString():n.toFixed(1)} ${t[r]}`}function R(e,t){let n=(e||``).toLowerCase(),r=t.split(`.`).pop()?.toLowerCase()??``;return n.startsWith(`image/`)?`image`:n.startsWith(`video/`)?`video`:n.startsWith(`audio/`)?`audio`:n===`application/pdf`||r===`pdf`?`pdf`:n===`application/zip`||n===`application/x-tar`||n===`application/gzip`||[`zip`,`tar`,`gz`,`tgz`,`rar`,`7z`].includes(r)?`archive`:n===`text/csv`||n===`application/vnd.ms-excel`||n===`application/vnd.openxmlformats-officedocument.spreadsheetml.sheet`||[`csv`,`xlsx`,`xls`,`numbers`].includes(r)?`spreadsheet`:`ts.tsx.js.jsx.py.rb.go.rs.java.kt.swift.c.cc.cpp.h.hpp.sh.bash.zsh.html.css.scss.json.yaml.yml.toml.xml`.split(`.`).includes(r)?`code`:n===`application/msword`||n===`application/vnd.openxmlformats-officedocument.wordprocessingml.document`||[`doc`,`docx`,`pages`].includes(r)?`document`:n.startsWith(`text/`)||[`txt`,`md`,`rtf`].includes(r)?`text`:`file`}function z(e){let t=e.replace(/\s/g,``),n=t.endsWith(`==`)?2:+!!t.endsWith(`=`);return Math.max(0,Math.floor(t.length*3/4)-n)}function B(e){let t=e.match(/;base64,(.*)$/);if(!t?.[1])return null;let n=atob(t[1]),r=new Uint8Array(n.length);for(let e=0;e<n.length;e++)r[e]=n.charCodeAt(e);return r}function V(e,t=28){if(e.length<=t)return e;let n=Math.max(4,Math.floor((t-1)/2));return`${e.slice(0,n)}…${e.slice(e.length-n)}`}var H=1.5,U=20,te=!1;async function ne(){let e=await a(()=>import(`./pdf-jCZ1S_t-.js`),__vite__mapDeps([4,2]));return te||=(e.GlobalWorkerOptions.workerSrc=`https://cdn.jsdelivr.net/npm/pdfjs-dist@${e.version}/legacy/build/pdf.worker.min.mjs`,!0),e}function re({url:e,className:t}){let n=(0,w.useRef)(null),[r,i]=(0,w.useState)(null),[a,o]=(0,w.useState)(0),[s,c]=(0,w.useState)(!0),[l,u]=(0,w.useState)(null),d=(0,w.useRef)(new Map),f=(0,w.useRef)(new Set);(0,w.useEffect)(()=>{let t=!1;async function n(){c(!0),u(null),i(null),o(0),f.current.clear();try{let n=await ne(),r;if(e.startsWith(`data:`)){let t=B(e);r=t?{data:t}:e}else r=e;let a=await n.getDocument(r).promise;if(t){a.destroy();return}i(a),o(Math.min(a.numPages,U))}catch{t||u(`Failed to load PDF.`)}finally{t||c(!1)}}return n(),()=>{t=!0}},[e]),(0,w.useEffect)(()=>()=>{r&&r.destroy()},[r]);let m=(0,w.useCallback)(async e=>{if(!r||f.current.has(e))return;let t=d.current.get(e);if(t){f.current.add(e);try{let n=await r.getPage(e),i=n.getViewport({scale:H});t.width=i.width,t.height=i.height,await n.render({canvas:t,viewport:i}).promise}catch{f.current.delete(e)}}},[r]);(0,w.useEffect)(()=>{if(!r||a===0)return;let e=new IntersectionObserver(e=>{for(let t of e){if(!t.isIntersecting)continue;let e=Number(t.target.dataset.page);e&&m(e)}},{root:n.current,rootMargin:`200px`});return d.current.forEach(t=>e.observe(t)),()=>e.disconnect()},[r,a,m]);let h=(0,w.useCallback)(e=>t=>{t?d.current.set(e,t):d.current.delete(e)},[]);return s?(0,T.jsx)(`div`,{className:`flex items-center justify-center py-24`,children:(0,T.jsx)(p,{className:`h-8 w-8 animate-spin text-white/70`})}):l?(0,T.jsx)(`div`,{className:`w-full max-w-sm rounded-lg border border-white/15 bg-white/[0.08] p-8 text-center`,children:(0,T.jsx)(`p`,{className:`text-body-medium-lighter text-white/80`,children:l})}):(0,T.jsx)(`div`,{ref:n,className:`flex max-h-[80vh] flex-col items-center gap-2 overflow-y-auto rounded ${t??``}`,children:Array.from({length:a},(e,t)=>(0,T.jsx)(`canvas`,{ref:h(t+1),"data-page":t+1,className:`w-[90vw] max-w-[800px]`,style:{height:`auto`}},t+1))})}function W({message:e,filename:t,onDownload:n,downloadDisabled:r=!1}){return(0,T.jsxs)(`div`,{className:`w-full max-w-sm rounded-lg border border-white/15 bg-white/[0.08] p-8 text-center`,children:[(0,T.jsx)(`p`,{className:`text-body-medium-lighter text-white/80`,children:e}),(0,T.jsx)(i,{variant:`ghost`,leftIcon:(0,T.jsx)(d,{}),onClick:n,disabled:r,"aria-label":`Download ${t}`,className:`mt-4 text-white/70 hover:bg-white/10 hover:text-white max-md:bg-transparent`,tintColor:`currentColor`,children:`Download`})]})}var G=class extends Error{};async function K(e,t,n){if(t>204800)throw new G;if(e.startsWith(`data:`)){let t=B(e);if(!t)throw Error(`Malformed data URI`);return new TextDecoder().decode(t)}let r=await fetch(e,{signal:n});if(!r.ok)throw Error(`Failed to load file: ${r.status}`);let i=await r.blob();if(i.size>204800)throw new G;return i.text()}function ie({url:e,filename:n,mimeType:r,sizeBytes:i}){let[o,s]=(0,w.useState)({status:`loading`});return(0,w.useEffect)(()=>{let n=new AbortController;return s({status:`loading`}),K(e,i,n.signal).then(e=>{n.signal.aborted||s({status:`ready`,text:e})}).catch(e=>{if(n.signal.aborted)return;let r=e instanceof G;r||t(e,{context:`attachment-text-preview`,bestEffort:!0}),s({status:`error`,tooLarge:r})}),()=>n.abort()},[e,i]),o.status===`loading`?(0,T.jsx)(`div`,{className:`flex items-center justify-center py-24`,children:(0,T.jsx)(p,{className:`h-8 w-8 animate-spin text-white/70`})}):o.status===`error`?(0,T.jsx)(W,{message:o.tooLarge?`File too large to preview inline.`:`Failed to load preview.`,filename:n,onDownload:async()=>{let{saveFile:t}=await a(async()=>{let{saveFile:e}=await import(`./native-file-BZDk5eyB.js`).then(e=>e.t);return{saveFile:e}},__vite__mapDeps([0,1,2,3]));await t(e,n)}}):(0,T.jsx)(`div`,{className:`max-h-[80vh] w-[min(90vw,800px)] overflow-auto rounded-lg p-6`,style:{backgroundColor:`var(--surface-overlay)`,color:`var(--content-default)`},children:(0,T.jsx)(q,{text:o.text,filename:n,mimeType:r})})}function q({text:e,filename:t,mimeType:n}){return _(t,n)?(0,T.jsx)(v,{content:e}):(0,T.jsx)(`pre`,{className:`whitespace-pre-wrap break-words font-mono text-body-small-default`,children:e})}var J=60,Y=.8,X=8,Z=.35;function ae({enabled:e,onPrev:t,onNext:n}){let[r,i]=(0,w.useState)(0),[a,o]=(0,w.useState)(!1),s=(0,w.useRef)(null),c=(0,w.useCallback)(()=>{s.current=null,i(0),o(!1)},[]);return{dragOffset:r,isDragging:a,onTouchStart:(0,w.useCallback)(t=>{if(!e)return;if(t.touches.length!==1){c();return}let n=t.touches[0];s.current={touchId:n.identifier,startX:n.clientX,startY:n.clientY,axis:`undecided`,lastDx:0}},[e,c]),onTouchMove:(0,w.useCallback)(e=>{let t=s.current;if(!t)return;if(e.touches.length!==1){c();return}let n=e.touches[0];if(n.identifier!==t.touchId)return;let r=n.clientX-t.startX,a=n.clientY-t.startY;if(t.lastDx=r,t.axis===`undecided`){if(Math.abs(r)<X&&Math.abs(a)<X)return;if(Math.abs(a)>Math.abs(r)*Y){s.current=null;return}t.axis=`horizontal`,o(!0)}if(t.axis!==`horizontal`)return;if(Math.abs(r)<J&&Math.abs(a)>Math.abs(r)*Y){c();return}let l=Math.sign(r),u=Math.abs(r);i(l*(u<=J?u:J+(u-J)*Z))},[c]),onTouchEnd:(0,w.useCallback)(e=>{let r=s.current;if(!r||r.axis!==`horizontal`){c();return}if(e.touches.length>0){c();return}let i=Array.from(e.changedTouches).find(e=>e.identifier===r.touchId),a=i?i.clientX-r.startX:r.lastDx;a<=-J?(S.light(),n()):a>=J&&(S.light(),t()),c()},[n,t,c]),onTouchCancel:c}}var oe=new Set([`ts`,`tsx`,`js`,`jsx`,`py`,`json`,`md`,`sh`,`bash`,`html`,`css`,`yaml`,`yml`,`txt`]),se=new Set([`application/json`,`application/javascript`,`application/xml`]),ce=e=>{let t=e.lastIndexOf(`.`);return t===-1||t===e.length-1?``:e.slice(t+1).toLowerCase()},Q=({open:e,onClose:t,attachment:n,assistantId:r,siblingAttachments:s,onNavigate:h})=>{let g=(0,w.useRef)(null);(0,w.useEffect)(()=>{e&&g.current?.focus()},[e]);let _=C.use.registerBackOwner(),v=C.use.unregisterBackOwner();(0,w.useEffect)(()=>{if(e)return _(),()=>v()},[e,_,v]);let y=!n.previewUrl&&n.id.startsWith(`rehydrated:`),b=e&&!n.previewUrl&&!!r&&!!n.id&&!y,{data:x,isError:S}=o({queryKey:[`attachmentContent`,r,n.id],queryFn:async()=>{let e=await F(r,n.id);if(!e)throw Error(`Failed to load file`);return e},enabled:b,staleTime:1/0,retry:!1}),[E,D]=(0,w.useState)(null);(0,w.useEffect)(()=>{if(!x){D(null);return}let e=URL.createObjectURL(x);return D(e),()=>{URL.revokeObjectURL(e),D(null)}},[x]);let O=n.previewUrl??E,[k,A]=(0,w.useState)(null),j=b&&!E&&!S,M=y?`Preview unavailable — file content was not preserved in chat history.`:S?`Failed to load preview.`:null,N=(0,w.useMemo)(()=>!s||s.length<=1?-1:s.findIndex(e=>e.id===n.id),[s,n.id]),P=N!==-1&&s!=null&&s.length>1,I=(0,w.useCallback)(()=>{!P||!s||!h||h(s[(N-1+s.length)%s.length])},[P,s,N,h]),R=(0,w.useCallback)(()=>{!P||!s||!h||h(s[(N+1)%s.length])},[P,s,N,h]),{dragOffset:z,isDragging:B,onTouchStart:V,onTouchMove:H,onTouchEnd:U,onTouchCancel:te}=ae({enabled:P,onPrev:I,onNext:R}),ne=(0,w.useCallback)(e=>{e.key===`Escape`?(e.preventDefault(),t()):e.key===`ArrowLeft`&&P?(e.preventDefault(),I()):e.key===`ArrowRight`&&P&&(e.preventDefault(),R())},[t,I,R,P]),G=(0,w.useCallback)(e=>{e.target===g.current&&t()},[t]),K=(0,w.useCallback)(async()=>{if(!O)return;let{saveFile:e}=await a(async()=>{let{saveFile:e}=await import(`./native-file-BZDk5eyB.js`).then(e=>e.t);return{saveFile:e}},__vite__mapDeps([0,1,2,3]));await e(O,n.filename)},[O,n.filename]);if(!e)return null;let q=n.mimeType.toLowerCase(),J=q.startsWith(`image/`),Y=q.startsWith(`video/`),X=q===`application/pdf`||q===`application/octet-stream`&&n.filename.toLowerCase().endsWith(`.pdf`),Z=ce(n.filename),Q=q.startsWith(`text/`)||se.has(q)||oe.has(Z);return(0,ee.createPortal)((0,T.jsxs)(`div`,{ref:g,role:`dialog`,"aria-modal":`true`,"aria-label":`Preview of ${n.filename}`,tabIndex:-1,className:`fixed inset-0 z-50 flex flex-col items-center justify-center bg-black/80 outline-none [-webkit-app-region:no-drag]`,style:{paddingTop:`var(--safe-area-inset-top, env(safe-area-inset-top, 0px))`,paddingBottom:`var(--safe-area-inset-bottom, env(safe-area-inset-bottom, 0px))`,paddingLeft:`var(--safe-area-inset-left, env(safe-area-inset-left, 0px))`,paddingRight:`var(--safe-area-inset-right, env(safe-area-inset-right, 0px))`},onKeyDown:ne,onClick:G,children:[(0,T.jsxs)(`div`,{className:`absolute inset-x-0 top-0 z-10 flex items-center gap-3 px-4`,style:{paddingTop:`calc(var(--safe-area-inset-top, env(safe-area-inset-top, 0px)) + 1rem)`},children:[(0,T.jsx)(c,{variant:`body-small-default`,className:`w-11 shrink-0 truncate text-white/50`,children:L(n.sizeBytes)}),(0,T.jsx)(c,{as:`div`,variant:`body-medium-lighter`,className:`min-w-0 flex-1 truncate text-center text-white/90`,children:n.filename}),(0,T.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2`,children:[(0,T.jsx)(i,{variant:`ghost`,iconOnly:(0,T.jsx)(d,{}),expandOnMobile:!1,onClick:K,disabled:!O,"aria-label":`Download ${n.filename}`,className:`h-11 w-11 rounded-full bg-white/10 text-white/70 hover:bg-white/20 hover:text-white`,tintColor:`currentColor`}),(0,T.jsx)(i,{variant:`ghost`,iconOnly:(0,T.jsx)(m,{}),expandOnMobile:!1,onClick:t,"aria-label":`Close preview`,className:`h-11 w-11 rounded-full bg-white/10 text-white/70 hover:bg-white/20 hover:text-white`,tintColor:`currentColor`})]})]}),P&&(0,T.jsxs)(`div`,{className:`pointer-events-none absolute inset-x-0 top-1/2 z-10 flex -translate-y-1/2 items-center justify-between px-4`,children:[(0,T.jsx)(i,{variant:`ghost`,iconOnly:(0,T.jsx)(l,{}),expandOnMobile:!1,onClick:I,"aria-label":`Previous attachment`,className:`pointer-events-auto h-11 w-11 rounded-full bg-white/10 text-white/70 hover:bg-white/20 hover:text-white`,tintColor:`currentColor`}),(0,T.jsx)(i,{variant:`ghost`,iconOnly:(0,T.jsx)(u,{}),expandOnMobile:!1,onClick:R,"aria-label":`Next attachment`,className:`pointer-events-auto h-11 w-11 rounded-full bg-white/10 text-white/70 hover:bg-white/20 hover:text-white`,tintColor:`currentColor`})]}),(0,T.jsx)(`div`,{className:`flex items-center justify-center`,style:{transform:`translateX(${z}px)`,transition:B?`none`:`transform 200ms ease-out`,touchAction:`pan-y`},onClick:e=>e.stopPropagation(),onTouchStart:V,onTouchMove:H,onTouchEnd:U,onTouchCancel:te,children:j?(0,T.jsx)(`div`,{className:`flex items-center justify-center py-24`,children:(0,T.jsx)(p,{className:`h-8 w-8 animate-spin text-white/70`})}):M?(0,T.jsx)(W,{message:M,filename:n.filename,onDownload:K,downloadDisabled:!O}):X&&O?(0,T.jsx)(re,{url:O}):J&&O&&k!==O?(0,T.jsx)(`img`,{src:O,alt:n.filename,onError:()=>A(O),className:`max-h-[80vh] max-w-[90vw] rounded object-contain`}):Y&&O?(0,T.jsx)(`video`,{"data-testid":`video-preview`,src:O,poster:n.thumbnailUrl??void 0,controls:!0,className:`max-h-[80vh] max-w-[90vw] rounded`}):Q&&O?(0,T.jsx)(ie,{url:O,filename:n.filename,mimeType:n.mimeType,sizeBytes:n.sizeBytes}):(0,T.jsxs)(`div`,{className:`flex w-full max-w-sm flex-col items-center rounded-lg border border-white/15 bg-white/[0.08] p-8 text-center`,children:[(0,T.jsx)(f,{className:`h-16 w-16 text-white/60`}),(0,T.jsx)(`p`,{className:`mt-4 text-body-medium-default text-white/90`,children:n.filename}),(0,T.jsx)(`p`,{className:`mt-1 text-body-small-default text-white/60`,children:L(n.sizeBytes)}),(0,T.jsx)(i,{variant:`ghost`,leftIcon:(0,T.jsx)(d,{}),onClick:K,disabled:!O,"aria-label":`Download ${n.filename}`,className:`mt-4 text-white/70 hover:bg-white/10 hover:text-white max-md:bg-transparent`,tintColor:`currentColor`,children:`Download`})]})}),P&&(0,T.jsx)(`div`,{className:`absolute inset-x-0 bottom-0 z-10 flex justify-center`,style:{paddingBottom:`calc(var(--safe-area-inset-bottom, env(safe-area-inset-bottom, 0px)) + 2rem)`},onClick:e=>e.stopPropagation(),children:(0,T.jsxs)(c,{variant:`body-small-default`,className:`text-white/50`,children:[N+1,` / `,s.length]})})]}),document.body)};function le(e,t){let[n,r]=(0,w.useState)(null),i=(0,w.useCallback)(e=>r(e),[]),a=(0,w.useCallback)(()=>r(null),[]),o=(0,w.useCallback)(e=>r(e),[]);return{openPreview:i,previewModal:n?(0,T.jsx)(Q,{open:!0,onClose:a,attachment:n,assistantId:e,siblingAttachments:t,onNavigate:o}):null}}var ue=new Set([`pre`,`code`,`style`,`script`]),de=5,fe=.4,pe=`stream-word-fade`;function me(e){return e.type===`element`}function he(e){if(me(e)&&ue.has(e.tagName))return;let t=e.children;if(t)for(let e=t.length-1;e>=0;e--){let n=t[e];if(n.type!==`text`){he(n);continue}let r=n.value.match(/\S+|\s+/g);if(!r||r.length===1&&/^\s+$/.test(r[0]))continue;let i=r.map(e=>/^\s+$/.test(e)?{type:`text`,value:e}:{type:`element`,tagName:`span`,properties:{className:[pe]},children:[{type:`text`,value:e}]});t.splice(e,1,...i)}}function ge(e,t){if(me(e)){let n=e.properties?.className;if(Array.isArray(n)&&n.includes(pe)){t.push(e);return}}if(e.children)for(let n of e.children)ge(n,t)}function _e(e){let t=e?.caughtUp??!1;return e=>{if(he(e),t)return;let n=[];ge(e,n);let r=Math.min(de,n.length);for(let e=0;e<r;e++){let t=n[n.length-1-e],r=(fe+(1-fe)*((e+1)/(de+1))).toFixed(3);t.properties={...t.properties,style:`opacity:${r}`}}}}function ve(e){return e!=null&&(e.startsWith(`vellum://workspace/`)||e.startsWith(`vellum://host/`))}function ye(e){return e.startsWith(`vellum://workspace/`)||e.startsWith(`vellum://host/`)?e:g(e)}function be({href:e,children:t}){return(0,T.jsx)(`a`,{href:e,target:`_blank`,rel:O(e)?void 0:`noopener noreferrer`,onClick:t=>{M(e)&&t.preventDefault()},className:`text-[var(--system-positive-strong)] underline hover:opacity-80`,children:t})}var xe=`my-2 max-w-full max-h-[400px] rounded-lg border border-[var(--border-default)] object-contain`;function $({alt:e}){return(0,T.jsxs)(`span`,{className:`inline-flex items-center gap-1 rounded bg-[var(--surface-sunken)] px-1.5 py-0.5 text-body-small-default text-[var(--content-tertiary)]`,children:[`Image failed to load`,e?` (${e})`:``]})}function Se({src:e,alt:t}){let[n,r]=(0,w.useState)(!1);return n?(0,T.jsx)($,{alt:t}):(0,T.jsx)(`img`,{src:e,alt:t,onError:()=>r(!0),className:xe})}function Ce(e){try{return decodeURIComponent(e)}catch{return e}}function we({src:e,alt:n,attachments:r,assistantId:i,onOpenPreview:a}){let[o,s]=(0,w.useState)(null),[c,l]=(0,w.useState)(!1),u=Ce(e.split(`/`).pop()??``),d=r?.find(e=>e.filename===u);if((0,w.useEffect)(()=>{if(!d||!i||d.id.startsWith(`rehydrated:`))return;let e=!1;return(async()=>{try{let{data:t,error:n}=await y({path:{assistant_id:i,id:d.id},parseAs:`blob`,throwOnError:!1});if(e)return;if(n||!(t instanceof Blob)){l(!0);return}s(URL.createObjectURL(t))}catch(n){e||(l(!0),t(n,{context:`WorkspaceInlineImage`,bestEffort:!0}))}})(),()=>{e=!0,s(e=>(e&&URL.revokeObjectURL(e),null))}},[d,i]),c||!d&&!o)return(0,T.jsx)($,{alt:n||u});if(!o)return(0,T.jsxs)(`span`,{className:`inline-flex items-center gap-1 rounded bg-[var(--surface-sunken)] px-1.5 py-0.5 text-body-small-default text-[var(--content-tertiary)]`,children:[`Loading image…`,n?` (${n})`:``]});let f=(0,T.jsx)(`img`,{src:o,alt:n,className:xe});return!d||!a?f:(0,T.jsx)(`button`,{type:`button`,onClick:()=>a(d),className:`cursor-zoom-in appearance-none border-0 bg-transparent p-0`,"aria-label":n?`Expand image: ${n}`:`Expand image`,children:f})}var Te=(0,w.memo)(function({content:e,className:t,hardLineBreaks:n,onVellumLinkClick:r,attachments:i,assistantId:a,streamWordFade:o}){let{openPreview:s,previewModal:c}=le(a,i),l=(0,w.useCallback)(({href:e,children:t})=>r&&ve(e)?(0,T.jsx)(`a`,{href:e,onClick:t=>{t.preventDefault(),e&&r(e,t.currentTarget.textContent??``)},className:`text-[var(--system-positive-strong)] underline hover:opacity-80 cursor-pointer`,children:t}):(0,T.jsx)(be,{href:e,children:t}),[r]),u=(0,w.useMemo)(()=>o?[[_e,{caughtUp:o===`caughtUp`}]]:void 0,[o]);return(0,T.jsxs)(T.Fragment,{children:[(0,T.jsx)(h,{content:e,className:t,hardLineBreaks:n,linkComponent:l,imageComponent:(0,w.useMemo)(()=>({src:e,alt:t})=>ve(e)?(0,T.jsx)(we,{src:e,alt:t,attachments:i,assistantId:a,onOpenPreview:s}):(0,T.jsx)(Se,{src:e,alt:t}),[i,a,s]),urlTransform:ye,extraRehypePlugins:u}),c]})});export{z as a,I as c,N as d,R as i,F as l,le as n,L as o,Q as r,V as s,Te as t,P as u};
@@ -1 +1 @@
1
- import{n as e,t}from"./create-selectors-8NePGNlX.js";import{i as n,r,s as i}from"./feature-flag-catalog-CM5COdiW.js";var a=`vellum:ff:`,o=`vellum:ff-str:`;function s(){if(typeof window>`u`)return{};let e={};try{for(let t of Object.keys(r)){let n=localStorage.getItem(a+t);n!==null&&(e[t]=n===`true`)}}catch{}return e}function c(){if(typeof window>`u`)return{};let e={};try{for(let t of Object.keys(n)){let n=localStorage.getItem(o+t);n!==null&&(e[t]=n)}}catch{}return e}var l=s(),u=c(),d=i(`client`),f=t(e()(e=>{let t=e;return{...r,...l,...d.bool,stringFlags:{...n,...u,...d.str},hydrated:!1,setFlags:t=>e(e=>{let n=s(),r={...t,...n,...d.bool};return Object.keys(r).some(t=>r[t]!==e[t])?{...r,hydrated:!0}:e.hydrated?e:{hydrated:!0}}),setFlag:(t,n)=>{try{localStorage.setItem(a+t,String(n))}catch{}e({[t]:d.bool[t]??n})},clearOverride:t=>{try{localStorage.removeItem(a+t)}catch{}let n=d.bool[t]??r[t];n!==void 0&&e({[t]:n})},setStringFlags:e=>t(t=>{let n=c(),r={...e,...n,...d.str},i=t.stringFlags;return Object.keys(r).some(e=>r[e]!==i[e])?{stringFlags:r}:t}),setStringFlag:(e,n)=>{try{localStorage.setItem(o+e,n)}catch{}t(t=>({stringFlags:{...t.stringFlags,[e]:d.str[e]??n}}))},clearStringOverride:e=>{try{localStorage.removeItem(o+e)}catch{}let r=d.str[e]??n[e];t(t=>({stringFlags:{...t.stringFlags,[e]:r??``}}))}}}));export{f as t};
1
+ import{n as e,t}from"./create-selectors-8NePGNlX.js";import{i as n,r,s as i}from"./feature-flag-catalog-DjfXrBPD.js";var a=`vellum:ff:`,o=`vellum:ff-str:`;function s(){if(typeof window>`u`)return{};let e={};try{for(let t of Object.keys(r)){let n=localStorage.getItem(a+t);n!==null&&(e[t]=n===`true`)}}catch{}return e}function c(){if(typeof window>`u`)return{};let e={};try{for(let t of Object.keys(n)){let n=localStorage.getItem(o+t);n!==null&&(e[t]=n)}}catch{}return e}var l=s(),u=c(),d=i(`client`),f=t(e()(e=>{let t=e;return{...r,...l,...d.bool,stringFlags:{...n,...u,...d.str},hydrated:!1,setFlags:t=>e(e=>{let n=s(),r={...t,...n,...d.bool};return Object.keys(r).some(t=>r[t]!==e[t])?{...r,hydrated:!0}:e.hydrated?e:{hydrated:!0}}),setFlag:(t,n)=>{try{localStorage.setItem(a+t,String(n))}catch{}e({[t]:d.bool[t]??n})},clearOverride:t=>{try{localStorage.removeItem(a+t)}catch{}let n=d.bool[t]??r[t];n!==void 0&&e({[t]:n})},setStringFlags:e=>t(t=>{let n=c(),r={...e,...n,...d.str},i=t.stringFlags;return Object.keys(r).some(e=>r[e]!==i[e])?{stringFlags:r}:t}),setStringFlag:(e,n)=>{try{localStorage.setItem(o+e,n)}catch{}t(t=>({stringFlags:{...t.stringFlags,[e]:d.str[e]??n}}))},clearStringOverride:e=>{try{localStorage.removeItem(o+e)}catch{}let r=d.str[e]??n[e];t(t=>({stringFlags:{...t.stringFlags,[e]:r??``}}))}}}));export{f as t};
@@ -1 +1 @@
1
- import{n as e,t}from"./platform-detection-DJWRuZPt.js";var n={browser_family:`x-vellum-browser-family`,browser_version:`x-vellum-browser-version`,os:`x-vellum-client-os`,interface_version:`x-vellum-interface-version`},r=/^[a-z0-9._-]{1,64}$/;function i(e){let t=e?.trim().toLowerCase();if(t)return r.test(t)?t:void 0}var a=null;function o(){return a||(a=crypto.randomUUID(),a)}var s=null;function c(){if(s)return s;let r=t(),a=[[n.browser_family,r.family],[n.browser_version,r.version],[n.os,e()],[n.interface_version,void 0]],o={};for(let[e,t]of a){let n=i(t);n&&(o[e]=n)}return s=o,o}function l(){return{"X-Vellum-Client-Id":o(),"X-Vellum-Interface-Id":`web`,...c()}}export{l as n,o as t};
1
+ import{n as e,t}from"./platform-detection-DGxL0AsS.js";var n={browser_family:`x-vellum-browser-family`,browser_version:`x-vellum-browser-version`,os:`x-vellum-client-os`,interface_version:`x-vellum-interface-version`},r=/^[a-z0-9._-]{1,64}$/;function i(e){let t=e?.trim().toLowerCase();if(t)return r.test(t)?t:void 0}var a=null;function o(){return a||(a=crypto.randomUUID(),a)}var s=null;function c(){if(s)return s;let r=t(),a=[[n.browser_family,r.family],[n.browser_version,r.version],[n.os,e()],[n.interface_version,void 0]],o={};for(let[e,t]of a){let n=i(t);n&&(o[e]=n)}return s=o,o}function l(){return{"X-Vellum-Client-Id":o(),"X-Vellum-Interface-Id":`web`,...c()}}export{l as n,o as t};
@@ -1 +1 @@
1
- import{o as e}from"./chunk-jRWAZmH_.js";import{t}from"./react-DJZBPgpf.js";import{F as n,t as r}from"./button-amTXFI-2.js";import{t as i}from"./jsx-runtime-CVSDxk6A.js";import{t as a}from"./typography-D5f7kt80.js";import{t as o}from"./loader-circle-Cz7opInR.js";import{t as s}from"./x-CkSVp1Ok.js";import"./src-DZbMXyC2.js";import{t as c}from"./panel-item-CouW2A55.js";import{Sr as l,ji as u}from"./index-CkKSY1-Q.js";var d=e(t(),1),f=e(n(),1),p=i();function m({icon:e,title:t,subtitle:n,shortcutHint:r,isSelected:i,onClick:a,surface:o=`overlay`}){let s=e;return o===`window`?(0,p.jsxs)(`button`,{type:`button`,role:`option`,"aria-current":i?`page`:void 0,"aria-selected":i,onClick:a,className:[`flex h-10 w-full items-center gap-3 rounded-md px-3 text-left text-sm font-medium outline-none transition-colors`,i?`bg-[var(--surface-active)] text-[var(--content-default)]`:`text-[var(--content-secondary)] hover:bg-[var(--surface-overlay)] hover:text-[var(--content-default)]`].join(` `),children:[s?(0,p.jsx)(s,{size:16,"aria-hidden":!0,className:i?`shrink-0 text-[var(--content-default)]`:`shrink-0 text-[var(--content-tertiary)]`}):null,(0,p.jsxs)(`span`,{className:`flex min-w-0 flex-1 items-center gap-2`,children:[(0,p.jsx)(`span`,{className:`truncate`,children:t}),n?(0,p.jsx)(`span`,{className:`shrink-0 truncate text-xs text-[var(--content-tertiary)]`,children:n}):null,r?(0,p.jsx)(`span`,{className:`ml-auto shrink-0 text-xs text-[var(--content-tertiary)]`,children:r}):null]})]}):(0,p.jsx)(c,{icon:e,label:(0,p.jsxs)(`span`,{className:`flex min-w-0 flex-1 items-center gap-2`,children:[(0,p.jsx)(`span`,{className:`truncate`,children:t}),n?(0,p.jsx)(`span`,{className:`shrink-0 truncate text-[var(--content-tertiary)] text-body-small-default`,children:n}):null,r?(0,p.jsx)(`span`,{className:`ml-auto shrink-0 text-[var(--content-tertiary)] text-body-small-default`,children:r}):null]}),active:i,onSelect:a,className:`px-3 py-2`})}var h=({isOpen:e,onClose:t,query:n,onQueryChange:i,selectedIndex:c,sections:h,isSearching:g=!1,onItemSelect:_,onKeyDown:v,surface:y=`overlay`})=>{let b=l(),x=(0,d.useRef)(null),S=(0,d.useRef)(null),C=(0,d.useRef)(null);(0,d.useEffect)(()=>{if(e){let e=requestAnimationFrame(()=>{S.current?.focus()});return()=>cancelAnimationFrame(e)}},[e]),(0,d.useEffect)(()=>{if(!e||!C.current)return;let t=C.current.querySelector(`[aria-current='page']`);t&&t.scrollIntoView({block:`nearest`})},[e,c]);let w=(0,d.useCallback)(e=>{e.target===x.current&&t()},[t]);if(!e)return null;let T=0,E=y===`window`,D=b&&!E,O=(0,p.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2 border-b border-[var(--border-base)] px-4 py-3`,children:[g?(0,p.jsx)(o,{size:16,"aria-hidden":!0,className:`shrink-0 animate-spin text-[var(--content-tertiary)]`}):(0,p.jsx)(u,{size:16,"aria-hidden":!0,className:`shrink-0 text-[var(--content-tertiary)]`}),(0,p.jsx)(`input`,{ref:S,type:`text`,value:n,onChange:e=>i(e.target.value),placeholder:`Search conversations, memories…`,className:E?`min-w-0 flex-1 bg-transparent text-sm font-medium text-[var(--content-default)] placeholder:text-[var(--content-tertiary)] outline-none`:`min-w-0 flex-1 bg-transparent text-body-medium-lighter text-[var(--content-default)] placeholder:text-[var(--content-tertiary)] outline-none`,"aria-label":`Search`}),n?D?(0,p.jsx)(`button`,{type:`button`,className:`shrink-0 text-body-medium-lighter text-[var(--content-tertiary)]`,onClick:()=>i(``),"aria-label":`Clear search`,children:`Clear`}):E?(0,p.jsx)(`button`,{type:`button`,className:`flex size-7 shrink-0 items-center justify-center rounded-md text-[var(--content-tertiary)] transition-colors hover:bg-[var(--surface-overlay)] hover:text-[var(--content-default)]`,"aria-label":`Clear search`,onClick:()=>i(``),children:(0,p.jsx)(s,{size:16,"aria-hidden":!0})}):(0,p.jsx)(r,{variant:`ghost`,size:`compact`,iconOnly:(0,p.jsx)(s,{}),"aria-label":`Clear search`,onClick:()=>i(``),tintColor:`var(--content-tertiary)`}):D?null:(0,p.jsx)(`kbd`,{className:E?`shrink-0 rounded-md border border-[var(--border-base)] bg-[var(--surface-active)] px-1.5 py-0.5 text-xs font-medium text-[var(--content-secondary)]`:`shrink-0 rounded-md border border-[var(--border-base)] bg-[var(--surface-active)] px-1.5 py-0.5 text-label-small-default text-[var(--content-tertiary)]`,children:`⌘K`}),D?(0,p.jsx)(r,{variant:`ghost`,size:`compact`,iconOnly:(0,p.jsx)(s,{}),expandOnMobile:!1,"aria-label":`Close search`,onClick:t,tintColor:`var(--content-tertiary)`}):null]}),k=(0,p.jsx)(`div`,{ref:C,className:D?`flex-1 overflow-y-auto overscroll-contain p-2`:`max-h-[360px] overflow-y-auto overscroll-contain p-2`,role:`listbox`,children:h.length===0?(0,p.jsx)(`div`,{className:`px-3 py-6 text-center`,children:(0,p.jsx)(a,{variant:`body-medium-lighter`,className:`text-[var(--content-tertiary)]`,children:g?`Searching…`:`No results`})}):h.map(e=>(0,p.jsxs)(`div`,{role:`group`,"aria-label":e.label,children:[(0,p.jsx)(a,{variant:`label-small-default`,as:`div`,className:E?`px-3 pb-1 pt-2 text-xs font-semibold text-[var(--content-tertiary)]`:`px-3 pb-1 pt-2 text-[var(--content-tertiary)] max-md:text-body-small-default`,children:e.label}),e.items.map(e=>{let t=T++;return(0,p.jsx)(m,{icon:e.icon,title:e.title,subtitle:e.subtitle,shortcutHint:D?void 0:e.shortcutHint,isSelected:t===c,onClick:()=>_?.(e,t),surface:y},e.id)})]},e.id))});if(D)return(0,p.jsxs)(`div`,{className:`fixed inset-0 z-50 flex flex-col bg-[var(--surface-lift)]`,role:`dialog`,"aria-modal":`true`,"aria-label":`Search`,onKeyDown:v,style:{paddingTop:`var(--safe-area-inset-top, env(safe-area-inset-top, 0px))`,paddingBottom:`var(--safe-area-inset-bottom, env(safe-area-inset-bottom, 0px))`,paddingLeft:`var(--safe-area-inset-left, env(safe-area-inset-left, 0px))`,paddingRight:`var(--safe-area-inset-right, env(safe-area-inset-right, 0px))`},children:[O,k]});let A=(0,p.jsx)(`div`,{ref:x,role:`dialog`,"aria-modal":`true`,"aria-label":`Command palette`,className:y===`window`?`flex h-full w-full items-start justify-center bg-transparent p-3`:`fixed inset-0 z-50 flex items-start justify-center bg-black/40 pt-[15vh]`,onClick:w,onKeyDown:v,children:(0,p.jsxs)(`div`,{className:`flex w-full max-w-[560px] flex-col overflow-hidden rounded-xl border border-[var(--border-base)] bg-[var(--surface-base)] shadow-xl`,children:[O,k]})});return y===`window`?A:(0,f.createPortal)(A,document.body)};export{h as CommandPalette};
1
+ import{o as e}from"./chunk-jRWAZmH_.js";import{t}from"./react-DJZBPgpf.js";import{F as n,t as r}from"./button-amTXFI-2.js";import{t as i}from"./jsx-runtime-CVSDxk6A.js";import{t as a}from"./typography-D5f7kt80.js";import{t as o}from"./loader-circle-Cz7opInR.js";import{t as s}from"./x-CkSVp1Ok.js";import"./src-DZbMXyC2.js";import{t as c}from"./panel-item-CouW2A55.js";import{Sr as l,ji as u}from"./index-B4Qq7TL7.js";var d=e(t(),1),f=e(n(),1),p=i();function m({icon:e,title:t,subtitle:n,shortcutHint:r,isSelected:i,onClick:a,surface:o=`overlay`}){let s=e;return o===`window`?(0,p.jsxs)(`button`,{type:`button`,role:`option`,"aria-current":i?`page`:void 0,"aria-selected":i,onClick:a,className:[`flex h-10 w-full items-center gap-3 rounded-md px-3 text-left text-sm font-medium outline-none transition-colors`,i?`bg-[var(--surface-active)] text-[var(--content-default)]`:`text-[var(--content-secondary)] hover:bg-[var(--surface-overlay)] hover:text-[var(--content-default)]`].join(` `),children:[s?(0,p.jsx)(s,{size:16,"aria-hidden":!0,className:i?`shrink-0 text-[var(--content-default)]`:`shrink-0 text-[var(--content-tertiary)]`}):null,(0,p.jsxs)(`span`,{className:`flex min-w-0 flex-1 items-center gap-2`,children:[(0,p.jsx)(`span`,{className:`truncate`,children:t}),n?(0,p.jsx)(`span`,{className:`shrink-0 truncate text-xs text-[var(--content-tertiary)]`,children:n}):null,r?(0,p.jsx)(`span`,{className:`ml-auto shrink-0 text-xs text-[var(--content-tertiary)]`,children:r}):null]})]}):(0,p.jsx)(c,{icon:e,label:(0,p.jsxs)(`span`,{className:`flex min-w-0 flex-1 items-center gap-2`,children:[(0,p.jsx)(`span`,{className:`truncate`,children:t}),n?(0,p.jsx)(`span`,{className:`shrink-0 truncate text-[var(--content-tertiary)] text-body-small-default`,children:n}):null,r?(0,p.jsx)(`span`,{className:`ml-auto shrink-0 text-[var(--content-tertiary)] text-body-small-default`,children:r}):null]}),active:i,onSelect:a,className:`px-3 py-2`})}var h=({isOpen:e,onClose:t,query:n,onQueryChange:i,selectedIndex:c,sections:h,isSearching:g=!1,onItemSelect:_,onKeyDown:v,surface:y=`overlay`})=>{let b=l(),x=(0,d.useRef)(null),S=(0,d.useRef)(null),C=(0,d.useRef)(null);(0,d.useEffect)(()=>{if(e){let e=requestAnimationFrame(()=>{S.current?.focus()});return()=>cancelAnimationFrame(e)}},[e]),(0,d.useEffect)(()=>{if(!e||!C.current)return;let t=C.current.querySelector(`[aria-current='page']`);t&&t.scrollIntoView({block:`nearest`})},[e,c]);let w=(0,d.useCallback)(e=>{e.target===x.current&&t()},[t]);if(!e)return null;let T=0,E=y===`window`,D=b&&!E,O=(0,p.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2 border-b border-[var(--border-base)] px-4 py-3`,children:[g?(0,p.jsx)(o,{size:16,"aria-hidden":!0,className:`shrink-0 animate-spin text-[var(--content-tertiary)]`}):(0,p.jsx)(u,{size:16,"aria-hidden":!0,className:`shrink-0 text-[var(--content-tertiary)]`}),(0,p.jsx)(`input`,{ref:S,type:`text`,value:n,onChange:e=>i(e.target.value),placeholder:`Search conversations, memories…`,className:E?`min-w-0 flex-1 bg-transparent text-sm font-medium text-[var(--content-default)] placeholder:text-[var(--content-tertiary)] outline-none`:`min-w-0 flex-1 bg-transparent text-body-medium-lighter text-[var(--content-default)] placeholder:text-[var(--content-tertiary)] outline-none`,"aria-label":`Search`}),n?D?(0,p.jsx)(`button`,{type:`button`,className:`shrink-0 text-body-medium-lighter text-[var(--content-tertiary)]`,onClick:()=>i(``),"aria-label":`Clear search`,children:`Clear`}):E?(0,p.jsx)(`button`,{type:`button`,className:`flex size-7 shrink-0 items-center justify-center rounded-md text-[var(--content-tertiary)] transition-colors hover:bg-[var(--surface-overlay)] hover:text-[var(--content-default)]`,"aria-label":`Clear search`,onClick:()=>i(``),children:(0,p.jsx)(s,{size:16,"aria-hidden":!0})}):(0,p.jsx)(r,{variant:`ghost`,size:`compact`,iconOnly:(0,p.jsx)(s,{}),"aria-label":`Clear search`,onClick:()=>i(``),tintColor:`var(--content-tertiary)`}):D?null:(0,p.jsx)(`kbd`,{className:E?`shrink-0 rounded-md border border-[var(--border-base)] bg-[var(--surface-active)] px-1.5 py-0.5 text-xs font-medium text-[var(--content-secondary)]`:`shrink-0 rounded-md border border-[var(--border-base)] bg-[var(--surface-active)] px-1.5 py-0.5 text-label-small-default text-[var(--content-tertiary)]`,children:`⌘K`}),D?(0,p.jsx)(r,{variant:`ghost`,size:`compact`,iconOnly:(0,p.jsx)(s,{}),expandOnMobile:!1,"aria-label":`Close search`,onClick:t,tintColor:`var(--content-tertiary)`}):null]}),k=(0,p.jsx)(`div`,{ref:C,className:D?`flex-1 overflow-y-auto overscroll-contain p-2`:`max-h-[360px] overflow-y-auto overscroll-contain p-2`,role:`listbox`,children:h.length===0?(0,p.jsx)(`div`,{className:`px-3 py-6 text-center`,children:(0,p.jsx)(a,{variant:`body-medium-lighter`,className:`text-[var(--content-tertiary)]`,children:g?`Searching…`:`No results`})}):h.map(e=>(0,p.jsxs)(`div`,{role:`group`,"aria-label":e.label,children:[(0,p.jsx)(a,{variant:`label-small-default`,as:`div`,className:E?`px-3 pb-1 pt-2 text-xs font-semibold text-[var(--content-tertiary)]`:`px-3 pb-1 pt-2 text-[var(--content-tertiary)] max-md:text-body-small-default`,children:e.label}),e.items.map(e=>{let t=T++;return(0,p.jsx)(m,{icon:e.icon,title:e.title,subtitle:e.subtitle,shortcutHint:D?void 0:e.shortcutHint,isSelected:t===c,onClick:()=>_?.(e,t),surface:y},e.id)})]},e.id))});if(D)return(0,p.jsxs)(`div`,{className:`fixed inset-0 z-50 flex flex-col bg-[var(--surface-lift)]`,role:`dialog`,"aria-modal":`true`,"aria-label":`Search`,onKeyDown:v,style:{paddingTop:`var(--safe-area-inset-top, env(safe-area-inset-top, 0px))`,paddingBottom:`var(--safe-area-inset-bottom, env(safe-area-inset-bottom, 0px))`,paddingLeft:`var(--safe-area-inset-left, env(safe-area-inset-left, 0px))`,paddingRight:`var(--safe-area-inset-right, env(safe-area-inset-right, 0px))`},children:[O,k]});let A=(0,p.jsx)(`div`,{ref:x,role:`dialog`,"aria-modal":`true`,"aria-label":`Command palette`,className:y===`window`?`flex h-full w-full items-start justify-center bg-transparent p-3`:`fixed inset-0 z-50 flex items-start justify-center bg-black/40 pt-[15vh]`,onClick:w,onKeyDown:v,children:(0,p.jsxs)(`div`,{className:`flex w-full max-w-[560px] flex-col overflow-hidden rounded-xl border border-[var(--border-base)] bg-[var(--surface-base)] shadow-xl`,children:[O,k]})});return y===`window`?A:(0,f.createPortal)(A,document.body)};export{h as CommandPalette};
@@ -1 +1 @@
1
- import{o as e}from"./chunk-jRWAZmH_.js";import{t}from"./react-DJZBPgpf.js";import{t as n}from"./jsx-runtime-CVSDxk6A.js";import{ct as r}from"./local-mode-Bskd5bsT.js";import{n as i}from"./resolved-assistants-store-DAzPZ1eV.js";import{D as a,O as o,i as s,n as c,o as l}from"./auth-store-B8a9KLUt.js";import{t as u}from"./client-feature-flag-store-Bm7cFUky.js";import{Cn as d,Dn as f,Or as p,dn as m,ir as h,wn as g,xr as _}from"./index-CkKSY1-Q.js";import{CommandPalette as v}from"./command-palette-3Kt4aKqv.js";var y=e(t(),1),b=n(),x=()=>void 0,S=e=>void 0,C=e=>{switch(e.id){case`action-new-conversation`:return{kind:`newConversation`};case`action-current-conversation`:return{kind:`currentConversation`};case`action-settings`:return{kind:`openSettings`};case`action-library`:return{kind:`openLibrary`};case`action-intelligence`:return{kind:`openIdentity`};case`action-back`:return{kind:`navigateBack`};case`action-forward`:return{kind:`navigateForward`};case`action-zoom-in`:return{kind:`zoomIn`};case`action-zoom-out`:return{kind:`zoomOut`};case`action-actual-size`:return{kind:`actualSize`};default:return e.id.startsWith(`conv-`)?{kind:`openConversation`,conversationId:e.id.slice(5)}:e.id.startsWith(`search-conv-`)?{kind:`openConversation`,conversationId:e.id.slice(12)}:e.id.startsWith(`search-schedule-`)||e.id.startsWith(`search-contact-`)?{kind:`openIdentity`}:null}};function w(){let e=c.use.sessionStatus(),t=l(),n=s();p(),h(!t),_({sessionStatus:e,hasPlatformSession:n});let w=i.use.assistants(),T=i.use.activeAssistantId(),E=i.use.selectedAssistantId(),D=a.use.currentOrganizationId(),O=u.use.multiPlatformAssistant(),k=(0,y.useMemo)(()=>{let e=O&&!r()&&D?o(D):T;if(!e)return null;let t=w.find(t=>t.id===e);return t?{id:t.id,name:t.name}:null},[O,T,w,D,E]),A=k?.id??null,{conversations:j}=f(A,!0),M=(0,y.useCallback)(e=>{let t=C(e);t&&g(t)},[]),{commandPalette:N,mergedSections:P,handleItemSelect:F}=m({assistantId:A,assistantName:k?.name,conversations:j,activeConversationId:void 0,startNewConversation:x,switchConversation:x,navigate:S,navigateToSettings:x,isOpen:!0,onClose:()=>{d()},onItemSelect:M});return(0,b.jsx)(`div`,{className:`h-screen w-screen bg-transparent`,children:(0,b.jsx)(v,{isOpen:!0,surface:`window`,onClose:N.close,query:N.query,onQueryChange:N.setQuery,selectedIndex:N.selectedIndex,sections:P,isSearching:N.isSearching,onItemSelect:F,onKeyDown:N.handleKeyDown})})}export{w as CommandPaletteWindowPage};
1
+ import{o as e}from"./chunk-jRWAZmH_.js";import{t}from"./react-DJZBPgpf.js";import{t as n}from"./jsx-runtime-CVSDxk6A.js";import{ct as r}from"./local-mode-Bskd5bsT.js";import{n as i}from"./resolved-assistants-store-DAzPZ1eV.js";import{D as a,O as o,i as s,n as c,o as l}from"./auth-store-65JKPW7C.js";import{t as u}from"./client-feature-flag-store-Ri-a_LuI.js";import{Cn as d,Dn as f,Or as p,dn as m,ir as h,wn as g,xr as _}from"./index-B4Qq7TL7.js";import{CommandPalette as v}from"./command-palette-Bu2Qjyle.js";var y=e(t(),1),b=n(),x=()=>void 0,S=e=>void 0,C=e=>{switch(e.id){case`action-new-conversation`:return{kind:`newConversation`};case`action-current-conversation`:return{kind:`currentConversation`};case`action-settings`:return{kind:`openSettings`};case`action-library`:return{kind:`openLibrary`};case`action-intelligence`:return{kind:`openIdentity`};case`action-back`:return{kind:`navigateBack`};case`action-forward`:return{kind:`navigateForward`};case`action-zoom-in`:return{kind:`zoomIn`};case`action-zoom-out`:return{kind:`zoomOut`};case`action-actual-size`:return{kind:`actualSize`};default:return e.id.startsWith(`conv-`)?{kind:`openConversation`,conversationId:e.id.slice(5)}:e.id.startsWith(`search-conv-`)?{kind:`openConversation`,conversationId:e.id.slice(12)}:e.id.startsWith(`search-schedule-`)||e.id.startsWith(`search-contact-`)?{kind:`openIdentity`}:null}};function w(){let e=c.use.sessionStatus(),t=l(),n=s();p(),h(!t),_({sessionStatus:e,hasPlatformSession:n});let w=i.use.assistants(),T=i.use.activeAssistantId(),E=i.use.selectedAssistantId(),D=a.use.currentOrganizationId(),O=u.use.multiPlatformAssistant(),k=(0,y.useMemo)(()=>{let e=O&&!r()&&D?o(D):T;if(!e)return null;let t=w.find(t=>t.id===e);return t?{id:t.id,name:t.name}:null},[O,T,w,D,E]),A=k?.id??null,{conversations:j}=f(A,!0),M=(0,y.useCallback)(e=>{let t=C(e);t&&g(t)},[]),{commandPalette:N,mergedSections:P,handleItemSelect:F}=m({assistantId:A,assistantName:k?.name,conversations:j,activeConversationId:void 0,startNewConversation:x,switchConversation:x,navigate:S,navigateToSettings:x,isOpen:!0,onClose:()=>{d()},onItemSelect:M});return(0,b.jsx)(`div`,{className:`h-screen w-screen bg-transparent`,children:(0,b.jsx)(v,{isOpen:!0,surface:`window`,onClose:N.close,query:N.query,onQueryChange:N.setQuery,selectedIndex:N.selectedIndex,sections:P,isSearching:N.isSearching,onItemSelect:F,onKeyDown:N.handleKeyDown})})}export{w as CommandPaletteWindowPage};
@@ -1 +1 @@
1
- import{t as e}from"./button-amTXFI-2.js";import{t}from"./jsx-runtime-CVSDxk6A.js";import{t as n}from"./card-Bv5O5juh.js";import{t as r}from"./createLucideIcon-IRfcSUxS.js";import{r as i}from"./middleware-pbPQ0upo.js";import{t as a}from"./bug-BsuQ5ciQ.js";import{t as o}from"./external-link-Dqpx9nRm.js";import{t as s}from"./globe-4qSOWE2N.js";import{t as c}from"./sparkles-PGiR5v1g.js";import{t as l}from"./tag-CV4v7fRF.js";import{Li as u,Si as d,_i as f,aa as p,ct as m,f as h,m as g,n as _,p as v}from"./index-CkKSY1-Q.js";var y=r(`git-pull-request`,[[`circle`,{cx:`18`,cy:`18`,r:`3`,key:`1xkwt0`}],[`circle`,{cx:`6`,cy:`6`,r:`3`,key:`1lh9wr`}],[`path`,{d:`M13 6h3a2 2 0 0 1 2 2v7`,key:`1yeb86`}],[`line`,{x1:`6`,x2:`6`,y1:`9`,y2:`21`,key:`rroup`}]]),b=t();function x({size:e=24,className:t,style:n}){return(0,b.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 24 24`,width:e,height:e,fill:`currentColor`,className:t,style:n,"aria-hidden":!0,children:(0,b.jsx)(`path`,{d:`M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12`})})}function S({size:e=24,className:t,style:n}){return(0,b.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 24 24`,width:e,height:e,fill:`currentColor`,className:t,style:n,"aria-hidden":!0,children:(0,b.jsx)(`path`,{d:`M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z`})})}function C({size:e=24,className:t,style:n}){return(0,b.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 24 24`,width:e,height:e,fill:`currentColor`,className:t,style:n,"aria-hidden":!0,children:(0,b.jsx)(`path`,{d:`M23.498 6.186a3.016 3.016 0 0 0-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 0 0 .502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 0 0 2.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 0 0 2.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814ZM9.545 15.568V8.432L15.818 12l-6.273 3.568Z`})})}function w(){return(0,b.jsx)(n,{padding:`lg`,className:`bg-[var(--surface-lift)]`,children:(0,b.jsxs)(`div`,{className:`relative`,children:[(0,b.jsx)(`div`,{className:`pointer-events-none absolute -right-16 -top-16 h-64 w-64 rounded-full opacity-30 blur-3xl`,style:{background:`radial-gradient(circle, var(--system-mid-weak) 0%, transparent 70%)`},"aria-hidden":!0}),(0,b.jsxs)(`div`,{className:`relative flex flex-col items-start gap-3`,children:[(0,b.jsxs)(l,{tone:`neutral`,children:[(0,b.jsx)(u,{className:`h-3.5 w-3.5`}),`Community`]}),(0,b.jsx)(`h1`,{className:`text-[28px] font-semibold leading-tight tracking-tight text-[var(--content-emphasised)]`,children:`Build with us, in the open.`}),(0,b.jsx)(`p`,{className:`max-w-xl text-body-medium-default text-[color:var(--content-tertiary)]`,children:`Vellum is built in the open with a growing community of developers, designers, and tinkerers. Here's how to get involved.`})]})]})})}function T({icon:e,text:t}){return(0,b.jsxs)(`li`,{className:`flex items-center gap-3`,children:[(0,b.jsx)(`span`,{className:`flex size-7 shrink-0 items-center justify-center rounded-md bg-[var(--surface-base)]`,children:(0,b.jsx)(e,{size:14,className:`text-[var(--content-secondary)]`,"aria-hidden":!0})}),(0,b.jsx)(`span`,{className:`text-body-medium-lighter text-[color:var(--content-secondary)]`,children:t})]})}function E({accentColor:t,iconColor:r=`var(--aux-white)`,label:a,icon:o,title:s,subtitle:c,benefits:l,primaryAction:u,secondaryAction:d}){return(0,b.jsx)(n,{padding:`lg`,className:`flex-1`,children:(0,b.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,b.jsxs)(`div`,{className:`flex items-start justify-between`,children:[(0,b.jsx)(`span`,{className:`flex size-10 items-center justify-center rounded-lg`,style:{backgroundColor:t,color:r},children:o}),(0,b.jsx)(`span`,{className:`text-label-medium-default uppercase tracking-wider text-[color:var(--content-tertiary)]`,children:a})]}),(0,b.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,b.jsx)(`h2`,{className:`text-title-medium text-[var(--content-emphasised)]`,children:s}),(0,b.jsx)(`p`,{className:`text-body-medium-lighter text-[color:var(--content-tertiary)]`,children:c})]}),(0,b.jsx)(`ul`,{className:`flex flex-col gap-3`,children:l.map(({icon:e,text:t})=>(0,b.jsx)(T,{icon:e,text:t},t))}),(0,b.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,b.jsxs)(e,{onClick:u.onClick,children:[u.icon,u.label]}),d&&(0,b.jsxs)(e,{variant:`ghost`,onClick:()=>window.open(d.href,`_blank`,`noopener,noreferrer`),children:[d.label,(0,b.jsx)(i,{className:`h-3.5 w-3.5`})]})]})]})})}function D({icon:e,iconBg:t,iconColor:r=`white`,title:i,description:a,href:s}){return(0,b.jsx)(`a`,{href:s,target:`_blank`,rel:`noopener noreferrer`,className:`flex flex-1 cursor-pointer`,children:(0,b.jsx)(n,{className:`flex-1 transition-shadow hover:shadow-md`,padding:`lg`,children:(0,b.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,b.jsxs)(`div`,{className:`flex items-start justify-between`,children:[(0,b.jsx)(`span`,{className:`flex size-10 items-center justify-center rounded-lg`,style:{backgroundColor:t,color:r},children:e}),(0,b.jsx)(o,{size:14,className:`text-[var(--content-tertiary)]`,"aria-hidden":!0})]}),(0,b.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,b.jsx)(`span`,{className:`text-title-medium text-[var(--content-emphasised)]`,children:i}),(0,b.jsx)(`p`,{className:`text-body-medium-lighter text-[color:var(--content-tertiary)]`,children:a})]})]})})})}function O(){let{handleStar:e}=g();return(0,b.jsxs)(`div`,{className:`space-y-6`,children:[(0,b.jsx)(w,{}),(0,b.jsxs)(`div`,{className:`grid grid-cols-1 gap-4 md:grid-cols-2`,children:[(0,b.jsx)(E,{accentColor:`var(--content-emphasised)`,iconColor:`var(--surface-base)`,label:`Open Source`,icon:(0,b.jsx)(x,{size:20}),title:`Vellum is open source`,subtitle:`Read the source, star the repo, and contribute fixes and features on GitHub.`,benefits:[{icon:d,text:`Star the repo to follow updates`},{icon:a,text:`Open issues and report bugs`},{icon:y,text:`Contribute fixes and new features`}],primaryAction:{label:`Star on GitHub`,icon:(0,b.jsx)(d,{size:16}),onClick:e},secondaryAction:{label:`View source`,href:v}}),(0,b.jsx)(E,{accentColor:`#5865F2`,label:`Discord`,icon:(0,b.jsx)(m,{size:20}),title:`Join our community`,subtitle:`Talk to the team, share feedback, request features, and get answers faster.`,benefits:[{icon:p,text:`Talk directly with the team`},{icon:c,text:`Share feedback and request features`},{icon:f,text:`Get answers faster from the community`}],primaryAction:{label:`Join Discord`,icon:(0,b.jsx)(m,{size:16,style:{color:`currentColor`}}),onClick:h}})]}),(0,b.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,b.jsx)(`h2`,{className:`text-label-medium-default uppercase tracking-wider text-[color:var(--content-tertiary)]`,children:`More from Vellum`}),(0,b.jsxs)(`div`,{className:`grid grid-cols-1 gap-4 md:grid-cols-3`,children:[(0,b.jsx)(D,{icon:(0,b.jsx)(s,{size:20}),iconBg:`#22c55e`,title:`Community Hub`,description:`Showcases, guides, and projects shared by the community.`,href:_}),(0,b.jsx)(D,{icon:(0,b.jsx)(S,{size:20}),iconBg:`var(--content-default)`,iconColor:`var(--surface-base)`,title:`Follow on X`,description:`Product updates, releases, and behind-the-scenes.`,href:`https://x.com/vellum_ai`}),(0,b.jsx)(D,{icon:(0,b.jsx)(C,{size:20}),iconBg:`#ef4444`,title:`YouTube channel`,description:`Walkthroughs, tutorials, and product deep-dives.`,href:`https://www.youtube.com/@Vellum_AI`})]})]})]})}export{O as CommunityPage};
1
+ import{t as e}from"./button-amTXFI-2.js";import{t}from"./jsx-runtime-CVSDxk6A.js";import{t as n}from"./card-Bv5O5juh.js";import{t as r}from"./createLucideIcon-IRfcSUxS.js";import{r as i}from"./middleware-pbPQ0upo.js";import{t as a}from"./bug-BsuQ5ciQ.js";import{t as o}from"./external-link-Dqpx9nRm.js";import{t as s}from"./globe-4qSOWE2N.js";import{t as c}from"./sparkles-PGiR5v1g.js";import{t as l}from"./tag-CV4v7fRF.js";import{Li as u,Si as d,_i as f,aa as p,ct as m,f as h,m as g,n as _,p as v}from"./index-B4Qq7TL7.js";var y=r(`git-pull-request`,[[`circle`,{cx:`18`,cy:`18`,r:`3`,key:`1xkwt0`}],[`circle`,{cx:`6`,cy:`6`,r:`3`,key:`1lh9wr`}],[`path`,{d:`M13 6h3a2 2 0 0 1 2 2v7`,key:`1yeb86`}],[`line`,{x1:`6`,x2:`6`,y1:`9`,y2:`21`,key:`rroup`}]]),b=t();function x({size:e=24,className:t,style:n}){return(0,b.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 24 24`,width:e,height:e,fill:`currentColor`,className:t,style:n,"aria-hidden":!0,children:(0,b.jsx)(`path`,{d:`M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12`})})}function S({size:e=24,className:t,style:n}){return(0,b.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 24 24`,width:e,height:e,fill:`currentColor`,className:t,style:n,"aria-hidden":!0,children:(0,b.jsx)(`path`,{d:`M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z`})})}function C({size:e=24,className:t,style:n}){return(0,b.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 24 24`,width:e,height:e,fill:`currentColor`,className:t,style:n,"aria-hidden":!0,children:(0,b.jsx)(`path`,{d:`M23.498 6.186a3.016 3.016 0 0 0-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 0 0 .502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 0 0 2.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 0 0 2.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814ZM9.545 15.568V8.432L15.818 12l-6.273 3.568Z`})})}function w(){return(0,b.jsx)(n,{padding:`lg`,className:`bg-[var(--surface-lift)]`,children:(0,b.jsxs)(`div`,{className:`relative`,children:[(0,b.jsx)(`div`,{className:`pointer-events-none absolute -right-16 -top-16 h-64 w-64 rounded-full opacity-30 blur-3xl`,style:{background:`radial-gradient(circle, var(--system-mid-weak) 0%, transparent 70%)`},"aria-hidden":!0}),(0,b.jsxs)(`div`,{className:`relative flex flex-col items-start gap-3`,children:[(0,b.jsxs)(l,{tone:`neutral`,children:[(0,b.jsx)(u,{className:`h-3.5 w-3.5`}),`Community`]}),(0,b.jsx)(`h1`,{className:`text-[28px] font-semibold leading-tight tracking-tight text-[var(--content-emphasised)]`,children:`Build with us, in the open.`}),(0,b.jsx)(`p`,{className:`max-w-xl text-body-medium-default text-[color:var(--content-tertiary)]`,children:`Vellum is built in the open with a growing community of developers, designers, and tinkerers. Here's how to get involved.`})]})]})})}function T({icon:e,text:t}){return(0,b.jsxs)(`li`,{className:`flex items-center gap-3`,children:[(0,b.jsx)(`span`,{className:`flex size-7 shrink-0 items-center justify-center rounded-md bg-[var(--surface-base)]`,children:(0,b.jsx)(e,{size:14,className:`text-[var(--content-secondary)]`,"aria-hidden":!0})}),(0,b.jsx)(`span`,{className:`text-body-medium-lighter text-[color:var(--content-secondary)]`,children:t})]})}function E({accentColor:t,iconColor:r=`var(--aux-white)`,label:a,icon:o,title:s,subtitle:c,benefits:l,primaryAction:u,secondaryAction:d}){return(0,b.jsx)(n,{padding:`lg`,className:`flex-1`,children:(0,b.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,b.jsxs)(`div`,{className:`flex items-start justify-between`,children:[(0,b.jsx)(`span`,{className:`flex size-10 items-center justify-center rounded-lg`,style:{backgroundColor:t,color:r},children:o}),(0,b.jsx)(`span`,{className:`text-label-medium-default uppercase tracking-wider text-[color:var(--content-tertiary)]`,children:a})]}),(0,b.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,b.jsx)(`h2`,{className:`text-title-medium text-[var(--content-emphasised)]`,children:s}),(0,b.jsx)(`p`,{className:`text-body-medium-lighter text-[color:var(--content-tertiary)]`,children:c})]}),(0,b.jsx)(`ul`,{className:`flex flex-col gap-3`,children:l.map(({icon:e,text:t})=>(0,b.jsx)(T,{icon:e,text:t},t))}),(0,b.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,b.jsxs)(e,{onClick:u.onClick,children:[u.icon,u.label]}),d&&(0,b.jsxs)(e,{variant:`ghost`,onClick:()=>window.open(d.href,`_blank`,`noopener,noreferrer`),children:[d.label,(0,b.jsx)(i,{className:`h-3.5 w-3.5`})]})]})]})})}function D({icon:e,iconBg:t,iconColor:r=`white`,title:i,description:a,href:s}){return(0,b.jsx)(`a`,{href:s,target:`_blank`,rel:`noopener noreferrer`,className:`flex flex-1 cursor-pointer`,children:(0,b.jsx)(n,{className:`flex-1 transition-shadow hover:shadow-md`,padding:`lg`,children:(0,b.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,b.jsxs)(`div`,{className:`flex items-start justify-between`,children:[(0,b.jsx)(`span`,{className:`flex size-10 items-center justify-center rounded-lg`,style:{backgroundColor:t,color:r},children:e}),(0,b.jsx)(o,{size:14,className:`text-[var(--content-tertiary)]`,"aria-hidden":!0})]}),(0,b.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,b.jsx)(`span`,{className:`text-title-medium text-[var(--content-emphasised)]`,children:i}),(0,b.jsx)(`p`,{className:`text-body-medium-lighter text-[color:var(--content-tertiary)]`,children:a})]})]})})})}function O(){let{handleStar:e}=g();return(0,b.jsxs)(`div`,{className:`space-y-6`,children:[(0,b.jsx)(w,{}),(0,b.jsxs)(`div`,{className:`grid grid-cols-1 gap-4 md:grid-cols-2`,children:[(0,b.jsx)(E,{accentColor:`var(--content-emphasised)`,iconColor:`var(--surface-base)`,label:`Open Source`,icon:(0,b.jsx)(x,{size:20}),title:`Vellum is open source`,subtitle:`Read the source, star the repo, and contribute fixes and features on GitHub.`,benefits:[{icon:d,text:`Star the repo to follow updates`},{icon:a,text:`Open issues and report bugs`},{icon:y,text:`Contribute fixes and new features`}],primaryAction:{label:`Star on GitHub`,icon:(0,b.jsx)(d,{size:16}),onClick:e},secondaryAction:{label:`View source`,href:v}}),(0,b.jsx)(E,{accentColor:`#5865F2`,label:`Discord`,icon:(0,b.jsx)(m,{size:20}),title:`Join our community`,subtitle:`Talk to the team, share feedback, request features, and get answers faster.`,benefits:[{icon:p,text:`Talk directly with the team`},{icon:c,text:`Share feedback and request features`},{icon:f,text:`Get answers faster from the community`}],primaryAction:{label:`Join Discord`,icon:(0,b.jsx)(m,{size:16,style:{color:`currentColor`}}),onClick:h}})]}),(0,b.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,b.jsx)(`h2`,{className:`text-label-medium-default uppercase tracking-wider text-[color:var(--content-tertiary)]`,children:`More from Vellum`}),(0,b.jsxs)(`div`,{className:`grid grid-cols-1 gap-4 md:grid-cols-3`,children:[(0,b.jsx)(D,{icon:(0,b.jsx)(s,{size:20}),iconBg:`#22c55e`,title:`Community Hub`,description:`Showcases, guides, and projects shared by the community.`,href:_}),(0,b.jsx)(D,{icon:(0,b.jsx)(S,{size:20}),iconBg:`var(--content-default)`,iconColor:`var(--surface-base)`,title:`Follow on X`,description:`Product updates, releases, and behind-the-scenes.`,href:`https://x.com/vellum_ai`}),(0,b.jsx)(D,{icon:(0,b.jsx)(C,{size:20}),iconBg:`#ef4444`,title:`YouTube channel`,description:`Walkthroughs, tutorials, and product deep-dives.`,href:`https://www.youtube.com/@Vellum_AI`})]})]})]})}export{O as CommunityPage};
@@ -1 +1 @@
1
- import{o as e}from"./chunk-jRWAZmH_.js";import{t}from"./react-DJZBPgpf.js";import{t as n}from"./button-amTXFI-2.js";import{d as r,h as i}from"./chunk-5KNZJZUH-DdS6bb-3.js";import{n as a}from"./QueryClientProvider-DKhXIxGb.js";import{t as o}from"./useMutation-Lj4VunQV.js";import{t as s}from"./jsx-runtime-CVSDxk6A.js";import{t as c}from"./typography-D5f7kt80.js";import{t as l}from"./card-Bv5O5juh.js";import{t as u}from"./link-2-4bMylQ5v.js";import{t as d}from"./loader-circle-Cz7opInR.js";import{t as f}from"./triangle-alert-Z0Gq0IuB.js";import{n as p}from"./toast-xTp-xwYL.js";import{c as m}from"./routes-DYcJgn9k.js";import{t as h}from"./use-active-assistant-id-CGeH4Gl6.js";import{n as g}from"./a2a-invite-BgVgm24S.js";import{r as _}from"./contacts-gateway-DfyjoqNo.js";var v=e(t(),1),y=s();function b(e){let t=e[0];return typeof t==`object`&&!!t&&t._id===`contactsGet`}function x(e,t){switch(e){case`expired`:case`not_found`:return`This invite link has expired or already been used.`;case`already_redeemed_by_other`:return`This invite has already been claimed by someone else.`;case`sender_not_found`:return`The sender's assistant could not be found.`;case`not_platform_managed`:return`A2A invite links are only supported for platform-hosted assistants.`;default:return t||`Something went wrong. Please try again.`}}function S(){return(0,y.jsx)(C,{assistantId:h()})}function C({assistantId:e}){let t=r(),s=a(),[h]=i(),S=(0,v.useMemo)(()=>g(h),[h]),C=o({mutationFn:()=>{if(!S)throw Error(`Invalid invite link`);return _(e,{senderAssistantId:S.senderAssistantId,token:S.token})},onSuccess:e=>{e.success&&(s.invalidateQueries({predicate:e=>b(e.queryKey)}),e.alreadyConnected?p(`Already connected`):p(`Connected!`),t(m.contacts.root))}}),w=(0,v.useCallback)(()=>{t(m.contacts.root)},[t]),T=(0,v.useCallback)(()=>{C.mutate()},[C]),E=(0,v.useMemo)(()=>C.isError?C.error instanceof Error?C.error.message:`Something went wrong. Please try again.`:C.data&&!C.data.success?x(C.data.errorCode,C.data.error):null,[C.isError,C.error,C.data]);return S?(0,y.jsx)(`div`,{className:`flex min-h-full items-center justify-center p-6`,children:(0,y.jsx)(l,{className:`w-full max-w-md`,children:(0,y.jsxs)(`div`,{className:`flex flex-col gap-4 p-6`,children:[(0,y.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,y.jsx)(u,{className:`h-6 w-6`,style:{color:`var(--content-secondary)`}}),(0,y.jsx)(c,{variant:`title-small`,children:`Connect assistants`})]}),(0,y.jsx)(c,{variant:`body-medium-lighter`,style:{color:`var(--content-secondary)`},children:`Accepting this link will create a trusted A2A connection between your assistant and the sender's.`}),E&&(0,y.jsxs)(`div`,{className:`flex items-center gap-2 rounded-md p-3`,style:{backgroundColor:`var(--surface-negative-subtle)`,color:`var(--system-negative-strong)`},children:[(0,y.jsx)(f,{className:`h-4 w-4 shrink-0`}),(0,y.jsx)(c,{variant:`body-small-default`,children:E})]}),(0,y.jsxs)(`div`,{className:`flex gap-2 pt-2`,children:[(0,y.jsx)(n,{variant:`primary`,onClick:T,disabled:C.isPending,children:C.isPending?(0,y.jsxs)(`span`,{className:`flex items-center gap-2`,children:[(0,y.jsx)(d,{className:`h-4 w-4 animate-spin`}),`Connecting…`]}):`Connect`}),(0,y.jsx)(n,{variant:`outlined`,onClick:w,disabled:C.isPending,children:`Cancel`})]})]})})}):(0,y.jsx)(`div`,{className:`flex min-h-full items-center justify-center p-6`,children:(0,y.jsx)(l,{className:`w-full max-w-md`,children:(0,y.jsxs)(`div`,{className:`flex flex-col gap-4 p-6`,children:[(0,y.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,y.jsx)(f,{className:`h-6 w-6`,style:{color:`var(--system-negative-strong)`}}),(0,y.jsx)(c,{variant:`title-small`,children:`Invalid invite link`})]}),(0,y.jsx)(c,{variant:`body-medium-lighter`,style:{color:`var(--content-secondary)`},children:`The link you followed is missing required parameters and cannot be used.`}),(0,y.jsx)(`div`,{className:`flex gap-2 pt-2`,children:(0,y.jsx)(n,{variant:`primary`,onClick:w,children:`Go to Contacts`})})]})})})}export{S as ConnectPage};
1
+ import{o as e}from"./chunk-jRWAZmH_.js";import{t}from"./react-DJZBPgpf.js";import{t as n}from"./button-amTXFI-2.js";import{d as r,h as i}from"./chunk-5KNZJZUH-DdS6bb-3.js";import{n as a}from"./QueryClientProvider-DKhXIxGb.js";import{t as o}from"./useMutation-Lj4VunQV.js";import{t as s}from"./jsx-runtime-CVSDxk6A.js";import{t as c}from"./typography-D5f7kt80.js";import{t as l}from"./card-Bv5O5juh.js";import{t as u}from"./link-2-4bMylQ5v.js";import{t as d}from"./loader-circle-Cz7opInR.js";import{t as f}from"./triangle-alert-Z0Gq0IuB.js";import{n as p}from"./toast-xTp-xwYL.js";import{c as m}from"./routes-BXlWEOF0.js";import{t as h}from"./use-active-assistant-id-CGeH4Gl6.js";import{n as g}from"./a2a-invite-CwD3hY_-.js";import{r as _}from"./contacts-gateway-DfyjoqNo.js";var v=e(t(),1),y=s();function b(e){let t=e[0];return typeof t==`object`&&!!t&&t._id===`contactsGet`}function x(e,t){switch(e){case`expired`:case`not_found`:return`This invite link has expired or already been used.`;case`already_redeemed_by_other`:return`This invite has already been claimed by someone else.`;case`sender_not_found`:return`The sender's assistant could not be found.`;case`not_platform_managed`:return`A2A invite links are only supported for platform-hosted assistants.`;default:return t||`Something went wrong. Please try again.`}}function S(){return(0,y.jsx)(C,{assistantId:h()})}function C({assistantId:e}){let t=r(),s=a(),[h]=i(),S=(0,v.useMemo)(()=>g(h),[h]),C=o({mutationFn:()=>{if(!S)throw Error(`Invalid invite link`);return _(e,{senderAssistantId:S.senderAssistantId,token:S.token})},onSuccess:e=>{e.success&&(s.invalidateQueries({predicate:e=>b(e.queryKey)}),e.alreadyConnected?p(`Already connected`):p(`Connected!`),t(m.contacts.root))}}),w=(0,v.useCallback)(()=>{t(m.contacts.root)},[t]),T=(0,v.useCallback)(()=>{C.mutate()},[C]),E=(0,v.useMemo)(()=>C.isError?C.error instanceof Error?C.error.message:`Something went wrong. Please try again.`:C.data&&!C.data.success?x(C.data.errorCode,C.data.error):null,[C.isError,C.error,C.data]);return S?(0,y.jsx)(`div`,{className:`flex min-h-full items-center justify-center p-6`,children:(0,y.jsx)(l,{className:`w-full max-w-md`,children:(0,y.jsxs)(`div`,{className:`flex flex-col gap-4 p-6`,children:[(0,y.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,y.jsx)(u,{className:`h-6 w-6`,style:{color:`var(--content-secondary)`}}),(0,y.jsx)(c,{variant:`title-small`,children:`Connect assistants`})]}),(0,y.jsx)(c,{variant:`body-medium-lighter`,style:{color:`var(--content-secondary)`},children:`Accepting this link will create a trusted A2A connection between your assistant and the sender's.`}),E&&(0,y.jsxs)(`div`,{className:`flex items-center gap-2 rounded-md p-3`,style:{backgroundColor:`var(--surface-negative-subtle)`,color:`var(--system-negative-strong)`},children:[(0,y.jsx)(f,{className:`h-4 w-4 shrink-0`}),(0,y.jsx)(c,{variant:`body-small-default`,children:E})]}),(0,y.jsxs)(`div`,{className:`flex gap-2 pt-2`,children:[(0,y.jsx)(n,{variant:`primary`,onClick:T,disabled:C.isPending,children:C.isPending?(0,y.jsxs)(`span`,{className:`flex items-center gap-2`,children:[(0,y.jsx)(d,{className:`h-4 w-4 animate-spin`}),`Connecting…`]}):`Connect`}),(0,y.jsx)(n,{variant:`outlined`,onClick:w,disabled:C.isPending,children:`Cancel`})]})]})})}):(0,y.jsx)(`div`,{className:`flex min-h-full items-center justify-center p-6`,children:(0,y.jsx)(l,{className:`w-full max-w-md`,children:(0,y.jsxs)(`div`,{className:`flex flex-col gap-4 p-6`,children:[(0,y.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,y.jsx)(f,{className:`h-6 w-6`,style:{color:`var(--system-negative-strong)`}}),(0,y.jsx)(c,{variant:`title-small`,children:`Invalid invite link`})]}),(0,y.jsx)(c,{variant:`body-medium-lighter`,style:{color:`var(--content-secondary)`},children:`The link you followed is missing required parameters and cannot be used.`}),(0,y.jsx)(`div`,{className:`flex gap-2 pt-2`,children:(0,y.jsx)(n,{variant:`primary`,onClick:w,children:`Go to Contacts`})})]})})})}export{S as ConnectPage};
@@ -1 +1 @@
1
- import{t as e}from"./jsx-runtime-CVSDxk6A.js";import{t}from"./card-Bv5O5juh.js";import{t as n}from"./checkbox-EdyezNqo.js";import{c as r,s as i}from"./routes-DYcJgn9k.js";import{t as a}from"./setting-row-imtQqr9o.js";var o=e(),s=[`[&_button[data-state=checked]]:bg-[var(--primary-base)]`,`[&_svg]:text-[var(--content-inset)]`,`[&_button[data-state=unchecked]]:bg-[var(--surface-base)]`,`[&_button[data-state=unchecked]]:border-[var(--border-element)]`].join(` `),c=`mb-2.5 ml-1 text-body-small-default font-medium uppercase tracking-wider text-[var(--content-tertiary)]`,l={privacy:{href:r.docs.legal.privacyPolicy,text:`Privacy and AI Data Sharing Policy`,aria:`I agree to the Privacy and AI Data Sharing Policy`},tos:{href:r.docs.legal.termsOfUse,text:`Terms of Service`,aria:`I agree to the Terms of Service`}};function u({kind:e,checked:t,onChange:r}){let a=l[e];return(0,o.jsx)(n,{checked:t,onCheckedChange:e=>r(e===!0),label:(0,o.jsxs)(`span`,{className:`text-body-medium-lighter text-[var(--content-default)]`,children:[`I agree to the`,` `,(0,o.jsx)(`a`,{href:i(a.href),target:`_blank`,rel:`noreferrer`,className:`underline`,children:a.text})]}),"aria-label":a.aria,className:s})}function d(){return(0,o.jsx)(`div`,{className:`h-px bg-[var(--surface-active)] dark:bg-[var(--surface-lift)]`})}function f({notes:e}){return!e||e.length===0?null:(0,o.jsxs)(`div`,{className:`rounded-r-md border-l-2 border-[var(--content-secondary)] bg-[var(--surface-base)] py-3 pl-3.5 pr-3.5`,children:[(0,o.jsx)(`p`,{className:`text-body-small-default font-medium text-[var(--content-secondary)]`,children:`What's changed`}),e.length===1?(0,o.jsx)(`p`,{className:`mt-1.5 text-body-medium-lighter text-[var(--content-default)]`,children:e[0]}):(0,o.jsx)(`ul`,{className:`mt-2 flex flex-col gap-1.5`,children:e.map(e=>(0,o.jsxs)(`li`,{className:`flex gap-2.5 text-body-medium-lighter text-[var(--content-default)]`,children:[(0,o.jsx)(`span`,{"aria-hidden":!0,className:`mt-[0.5em] h-1 w-1 flex-none rounded-full bg-[var(--content-tertiary)]`}),(0,o.jsx)(`span`,{children:e})]},e))})]})}function p({electron:e,showAnalytics:n=!0,showDiagnostics:r=!0,shareAnalytics:i,shareDiagnostics:s,onShareAnalyticsChange:l,onShareDiagnosticsChange:u,className:f,style:p}){return(0,o.jsxs)(`section`,{className:f,style:p,children:[(0,o.jsx)(`p`,{className:c,children:`Privacy preferences`}),(0,o.jsx)(t,{padding:e?`sm`:`md`,className:`w-full`,children:(0,o.jsxs)(`div`,{className:`flex flex-col ${e?`gap-3`:`gap-4`}`,children:[n&&(0,o.jsx)(a,{label:`Share Analytics`,helperText:`Send aggregated product usage data`,checked:i,onChange:l}),n&&r&&(0,o.jsx)(d,{}),r&&(0,o.jsx)(a,{label:`Share Diagnostics`,helperText:`Send crash reports, conversation traces, and session replay data`,checked:s,onChange:u})]})})]})}function m({electron:e,showPrivacy:n=!0,showTos:r=!0,privacyConsent:i,tosAccepted:a,onPrivacyChange:s,onTosChange:l,privacyNotes:d,tosNotes:p,className:m,style:h}){return(0,o.jsxs)(`section`,{className:m,style:h,children:[(0,o.jsx)(`p`,{className:c,children:`Agreements`}),(0,o.jsx)(t,{padding:e?`sm`:`md`,className:`w-full`,children:(0,o.jsxs)(`div`,{className:`flex flex-col ${e?`gap-3.5`:`gap-4`}`,children:[n&&(0,o.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,o.jsx)(f,{notes:d}),(0,o.jsx)(u,{kind:`privacy`,checked:i,onChange:s})]}),r&&(0,o.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,o.jsx)(f,{notes:p}),(0,o.jsx)(u,{kind:`tos`,checked:a,onChange:l})]})]})})]})}export{p as n,m as t};
1
+ import{t as e}from"./jsx-runtime-CVSDxk6A.js";import{t}from"./card-Bv5O5juh.js";import{t as n}from"./checkbox-EdyezNqo.js";import{c as r,s as i}from"./routes-BXlWEOF0.js";import{t as a}from"./setting-row-imtQqr9o.js";var o=e(),s=[`[&_button[data-state=checked]]:bg-[var(--primary-base)]`,`[&_svg]:text-[var(--content-inset)]`,`[&_button[data-state=unchecked]]:bg-[var(--surface-base)]`,`[&_button[data-state=unchecked]]:border-[var(--border-element)]`].join(` `),c=`mb-2.5 ml-1 text-body-small-default font-medium uppercase tracking-wider text-[var(--content-tertiary)]`,l={privacy:{href:r.docs.legal.privacyPolicy,text:`Privacy and AI Data Sharing Policy`,aria:`I agree to the Privacy and AI Data Sharing Policy`},tos:{href:r.docs.legal.termsOfUse,text:`Terms of Service`,aria:`I agree to the Terms of Service`}};function u({kind:e,checked:t,onChange:r}){let a=l[e];return(0,o.jsx)(n,{checked:t,onCheckedChange:e=>r(e===!0),label:(0,o.jsxs)(`span`,{className:`text-body-medium-lighter text-[var(--content-default)]`,children:[`I agree to the`,` `,(0,o.jsx)(`a`,{href:i(a.href),target:`_blank`,rel:`noreferrer`,className:`underline`,children:a.text})]}),"aria-label":a.aria,className:s})}function d(){return(0,o.jsx)(`div`,{className:`h-px bg-[var(--surface-active)] dark:bg-[var(--surface-lift)]`})}function f({notes:e}){return!e||e.length===0?null:(0,o.jsxs)(`div`,{className:`rounded-r-md border-l-2 border-[var(--content-secondary)] bg-[var(--surface-base)] py-3 pl-3.5 pr-3.5`,children:[(0,o.jsx)(`p`,{className:`text-body-small-default font-medium text-[var(--content-secondary)]`,children:`What's changed`}),e.length===1?(0,o.jsx)(`p`,{className:`mt-1.5 text-body-medium-lighter text-[var(--content-default)]`,children:e[0]}):(0,o.jsx)(`ul`,{className:`mt-2 flex flex-col gap-1.5`,children:e.map(e=>(0,o.jsxs)(`li`,{className:`flex gap-2.5 text-body-medium-lighter text-[var(--content-default)]`,children:[(0,o.jsx)(`span`,{"aria-hidden":!0,className:`mt-[0.5em] h-1 w-1 flex-none rounded-full bg-[var(--content-tertiary)]`}),(0,o.jsx)(`span`,{children:e})]},e))})]})}function p({electron:e,showAnalytics:n=!0,showDiagnostics:r=!0,shareAnalytics:i,shareDiagnostics:s,onShareAnalyticsChange:l,onShareDiagnosticsChange:u,className:f,style:p}){return(0,o.jsxs)(`section`,{className:f,style:p,children:[(0,o.jsx)(`p`,{className:c,children:`Privacy preferences`}),(0,o.jsx)(t,{padding:e?`sm`:`md`,className:`w-full`,children:(0,o.jsxs)(`div`,{className:`flex flex-col ${e?`gap-3`:`gap-4`}`,children:[n&&(0,o.jsx)(a,{label:`Share Analytics`,helperText:`Send aggregated product usage data`,checked:i,onChange:l}),n&&r&&(0,o.jsx)(d,{}),r&&(0,o.jsx)(a,{label:`Share Diagnostics`,helperText:`Send crash reports, conversation traces, and session replay data`,checked:s,onChange:u})]})})]})}function m({electron:e,showPrivacy:n=!0,showTos:r=!0,privacyConsent:i,tosAccepted:a,onPrivacyChange:s,onTosChange:l,privacyNotes:d,tosNotes:p,className:m,style:h}){return(0,o.jsxs)(`section`,{className:m,style:h,children:[(0,o.jsx)(`p`,{className:c,children:`Agreements`}),(0,o.jsx)(t,{padding:e?`sm`:`md`,className:`w-full`,children:(0,o.jsxs)(`div`,{className:`flex flex-col ${e?`gap-3.5`:`gap-4`}`,children:[n&&(0,o.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,o.jsx)(f,{notes:d}),(0,o.jsx)(u,{kind:`privacy`,checked:i,onChange:s})]}),r&&(0,o.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,o.jsx)(f,{notes:p}),(0,o.jsx)(u,{kind:`tos`,checked:a,onChange:l})]})]})})]})}export{p as n,m as t};
@@ -0,0 +1 @@
1
+ var e={displayName:`Other`,color:`#888`,emoji:`?`},t={email:{displayName:`Email`,color:`#A665C9`,emoji:`📧`},calendar:{displayName:`Calendar`,color:`#0E9B8B`,emoji:`📅`},messaging:{displayName:`Messaging`,color:`#6B8AE0`,emoji:`💬`},browsing:{displayName:`Browsing`,color:`#E9642F`,emoji:`🌐`},productivity:{displayName:`Productivity`,color:`#0E9B8B`,emoji:`📋`},development:{displayName:`Development`,color:`#EF4400`,emoji:`🔨`},voice:{displayName:`Voice`,color:`#DB4B77`,emoji:`🎤`},commerce:{displayName:`Commerce`,color:`#E9C91A`,emoji:`🛒`},content:{displayName:`Content`,color:`#DB4B77`,emoji:`🎨`},health:{displayName:`Health`,color:`#4C9B50`,emoji:`❤️`},system:{displayName:`System`,color:`#8D99A5`,emoji:`⚙️`},integrations:{displayName:`Integrations`,color:`#8D99A5`,emoji:`🔗`}};function n(n){return t[n]??e}var r=[`email`,`calendar`,`messaging`,`browsing`,`productivity`,`development`,`voice`,`commerce`,`content`,`health`,`system`,`integrations`],i={email:[{label:`Sending`,emoji:`📨`,skillIds:new Set([`agentmail`,`email-setup`])},{label:`Reading`,emoji:`📬`,skillIds:new Set([`email-channel`,`gmail`])}],messaging:[{label:`Chat`,emoji:`💬`,skillIds:new Set([`messaging`,`slack`,`telegram`])},{label:`Notifications`,emoji:`🔔`,skillIds:new Set([`notifications`])},{label:`People`,emoji:`👥`,skillIds:new Set([`contacts`,`followups`])}],development:[{label:`Coding`,emoji:`💻`,skillIds:new Set([`typescript-eval`,`frontend-design`])},{label:`Dev Tools`,emoji:`🔧`,skillIds:new Set([`api-mapping`,`cli-discover`,`subagent`,`app-builder`])}],browsing:[{label:`Control`,emoji:`🎮`,skillIds:new Set([`computer-use`,`macos-automation`,`browser`])},{label:`Triggers`,emoji:`⏰`,skillIds:new Set([`watcher`,`time-based-actions`])}],commerce:[{label:`Shopping`,emoji:`🛒`,skillIds:new Set([`amazon`,`doordash`,`restaurant-reservation`])}],system:[{label:`Core`,emoji:`🧠`,skillIds:new Set([`knowledge-graph`,`skills-catalog`,`self-upgrade`])},{label:`Daily`,emoji:`☀️`,skillIds:new Set([`start-the-day`,`weather`])}]},a=14,o=10,s=6;function c(e){switch(e.kind.type){case`center`:return{shape:`circle`,size:90,cornerRadius:0};case`category`:return{shape:`roundedRect`,size:80,cornerRadius:a};case`subCategory`:return{shape:`roundedRect`,size:56,cornerRadius:o};case`skill`:return{shape:`diamond`,size:64,cornerRadius:s}}}function l(e,t,n,r){let i=Math.min(Math.max(0,t),e),a=Math.abs(n),o=Math.abs(r);if(a<1e-6&&o<1e-6)return e;let s=e/Math.max(a,o),c=s*n,l=s*r;if(!(Math.abs(c)>e-i&&Math.abs(l)>e-i))return s;let u=Math.sign(c)*(e-i),d=Math.sign(l)*(e-i),f=n*u+r*d,p=u*u+d*d-i*i,m=f*f-p;return m<0?s:f+Math.sqrt(m)}function u(e,t,n){switch(e.shape){case`circle`:return e.size/2;case`roundedRect`:return l(e.size/2,e.cornerRadius,t,n);case`diamond`:{let r=(t+n)*Math.SQRT1_2,i=(-t+n)*Math.SQRT1_2;return l(e.size/2,e.cornerRadius,r,i)}}}function d(e,t){let n=t.x-e.x,r=t.y-e.y,i=Math.sqrt(n*n+r*r);if(i<1e-6)return{x1:e.x,y1:e.y,x2:t.x,y2:t.y};let a=n/i,o=r/i,s=Math.max(0,u(c(e),a,o)-3),l=Math.max(0,u(c(t),-a,-o)-3);if(s+l>=i){let n=(e.x+t.x)/2,r=(e.y+t.y)/2;return{x1:n,y1:r,x2:n,y2:r}}return{x1:e.x+a*s,y1:e.y+o*s,x2:t.x-a*l,y2:t.y-o*l}}var f=10,p=200,m=160,h=160;function g(e,t,n,r){let i={x:e.x,y:e.y};for(let e=0;e<30;e++){let e=0,a=0,o=0;for(let s of n){let n=i.x-s.x,c=i.y-s.y,l=Math.sqrt(n*n+c*c),u=t+s.radius+r-l;u>e&&(e=u,l<.1?(a=u+1,o=0):(a=n/l*(u+1),o=c/l*(u+1)))}if(e<=0)break;i={x:i.x+a,y:i.y+o}}return i}function _(e,t,r,i,a,o,s,c,l,u,d,f){if(e.length===0)return;let p=o+s,m=Math.cos(i),h=Math.sin(i),_=-h,v=m,y=p*.88,b=n(l).color;e.forEach((n,i)=>{let l=Math.floor(i/3),x=i%3,S=Math.min(3,e.length-l*3),C=(x-(S-1)/2)*p,w=l%2==1&&S<3?p*.5:0,T=a+l*y,E=g({x:r.x+T*m+(C+w)*_,y:r.y+T*h+(C+w)*v},o/2,d,s);d.push({id:n.id,kind:{type:`skill`,item:n},parentId:t,depth:c,x:E.x,y:E.y,radius:o/2}),f.push({id:`edge-${u}-skill-${i}`,fromId:t,toId:n.id,color:b})})}function v(e,t,r=90){let a=[],o=[],s=f;if(a.push({id:`__center__`,kind:{type:`center`},parentId:null,depth:0,x:e.x,y:e.y,radius:r/2}),t.length===0)return{nodes:a,edges:o};let c=t.length,l=2*Math.PI/c;return t.forEach((t,r)=>{let c=-Math.PI/2+r*l,u=`cat-${t.category}`,d=n(t.category).color,f=g({x:e.x+p*Math.cos(c),y:e.y+p*Math.sin(c)},80/2,a,s);a.push({id:u,kind:{type:`category`,category:t.category},parentId:`__center__`,depth:1,x:f.x,y:f.y,radius:80/2}),o.push({id:`edge-center-${t.category}`,fromId:`__center__`,toId:u,color:d});let v=i[t.category];if(v&&v.length>0){let e=[],n=new Set;for(let r of v){let i=t.items.filter(e=>r.skillIds.has(e.id));i.length>0&&(e.push({def:r,items:i}),i.forEach(e=>n.add(e.id)))}let r=t.items.filter(e=>!n.has(e.id));if(r.length>0){if(e.length===0){_(t.items,u,f,c,h,64,s,2,t.category,t.category,a,o);return}let n=e[e.length-1];n&&n.items.push(...r)}let i=e.length,p=l*.55,y=i<=1?0:Math.min(p,(i-1)*.35);e.forEach((e,n)=>{let r;r=i===1?c:c+(n/(i-1)-.5)*y*2;let l=`subcat-${t.category}-${n}`,p=g({x:f.x+m*Math.cos(r),y:f.y+m*Math.sin(r)},56/2,a,s);a.push({id:l,kind:{type:`subCategory`,label:e.def.label,emoji:e.def.emoji,category:t.category},parentId:u,depth:2,x:p.x,y:p.y,radius:56/2}),o.push({id:`edge-${t.category}-sub-${n}`,fromId:u,toId:l,color:d}),_(e.items,l,p,r,h,64,s,3,t.category,l,a,o)})}else _(t.items,u,f,c,h,64,s,2,t.category,t.category,a,o)}),{nodes:a,edges:o}}function y(e){let t=new Map;for(let n of e){let e=t.get(n.category);e?e.push(n):t.set(n.category,[n])}let n=[];for(let e of r){let r=t.get(e);r&&r.length>0&&n.push({category:e,items:r})}for(let[e,i]of t)!r.includes(e)&&i.length>0&&n.push({category:e,items:i});return n}function b(e,t,n,r,i=120,a=.4,o=3){if(e.length===0)return{zoom:1,panX:0,panY:0};let s=1/0,c=-1/0,l=1/0,u=-1/0;for(let t of e)s=Math.min(s,t.x),c=Math.max(c,t.x),l=Math.min(l,t.y),u=Math.max(u,t.y);let d=c-s+i*2,f=u-l+i*2;if(d<=0||f<=0||n<=0||r<=0)return{zoom:1,panX:0,panY:0};let p=Math.min(n/d,r/f),m=Math.max(a,Math.min(o,p)),h=(s+c)/2-t.x,g=(l+u)/2-t.y;return{zoom:m,panX:-h*m,panY:-g*m}}var x=.4,S=.25,C={x:600,y:450},w={type:`spring`,stiffness:180,damping:20},T={category:{size:80,cornerRadius:14,dashed:!1,fillPct:14,fillHoverPct:25,strokePct:55,strokeHoverPct:85,strokeWidth:2,strokeHoverWidth:2.5},subcategory:{size:56,cornerRadius:10,dashed:!0,fillPct:10,fillHoverPct:20,strokePct:40,strokeHoverPct:70,strokeWidth:1.5,strokeHoverWidth:2}},E={category:`rounded-[3px]`,subcategory:`rounded-[3px] border-dashed`,skill:`rotate-45`,workspace:`rounded-full`};export{C as a,v as c,n as d,T as i,d as l,x as n,S as o,w as r,y as s,E as t,b as u};
@@ -1 +1 @@
1
- import{o as e}from"./chunk-jRWAZmH_.js";import{t}from"./react-DJZBPgpf.js";import{t as n}from"./button-amTXFI-2.js";import{d as r,h as i,r as a,t as o}from"./chunk-5KNZJZUH-DdS6bb-3.js";import{n as s}from"./QueryClientProvider-DKhXIxGb.js";import{t as c}from"./useQuery-B45lW1Kk.js";import{t as l}from"./useMutation-Lj4VunQV.js";import{t as u}from"./jsx-runtime-CVSDxk6A.js";import{t as d}from"./typography-D5f7kt80.js";import{t as f}from"./card-Bv5O5juh.js";import{t as p}from"./createLucideIcon-IRfcSUxS.js";import{t as m}from"./arrow-left-DI9551VI.js";import{t as h}from"./link-2-4bMylQ5v.js";import{t as g}from"./loader-circle-Cz7opInR.js";import{t as _}from"./pencil-CUIr0IFo.js";import{t as v}from"./plus-DItfr5ux.js";import{t as y}from"./user-plus-DMh4_UTz.js";import{t as b}from"./tag-CV4v7fRF.js";import{t as x}from"./input-CoUmPnRU.js";import{t as S}from"./modal-D5nLWNN9.js";import{t as C}from"./panel-item-CouW2A55.js";import{n as w}from"./toast-xTp-xwYL.js";import{t as T}from"./confirm-dialog-CSkhRFRk.js";import{C as E}from"./sdk.gen-CFgJ4K6f.js";import{Ht as ee,S as D,Vt as te,a as O,b as ne,x as k}from"./react-query.gen-LsPzqPq6.js";import{t as re}from"./assistant-identity-store-CX03CK8q.js";import{c as ie}from"./routes-DYcJgn9k.js";import{t as ae}from"./assistant-feature-flag-store-4edQKaeq.js";import{Ai as oe,Bi as A,Cr as j,Ea as M,Ji as se,Mt as N,Wi as P,c as ce,fn as F,ja as I,ji as L,ka as R,oa as z,or as B,pn as V}from"./index-CkKSY1-Q.js";import{t as H}from"./use-active-assistant-id-CGeH4Gl6.js";import{a as U,d as le,i as ue,n as de,o as fe,r as pe,t as me}from"./use-invite-link-dialog-DiQ0mtix.js";import{t as W}from"./detail-card-GPqFZVmX.js";import{n as he,t as ge}from"./mobile-sidebar-drawer-BN_mMpOa.js";import{t as G}from"./mutation-error-Bk_4pjgm.js";import{a as _e,i as ve,n as ye,t as be}from"./contacts-gateway-DfyjoqNo.js";var xe=p(`circle-question-mark`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3`,key:`1u773s`}],[`path`,{d:`M12 17h.01`,key:`p32p05`}]]),Se=p(`ellipsis-vertical`,[[`circle`,{cx:`12`,cy:`12`,r:`1`,key:`41hilf`}],[`circle`,{cx:`12`,cy:`5`,r:`1`,key:`gxeob9`}],[`circle`,{cx:`12`,cy:`19`,r:`1`,key:`lyex9k`}]]),Ce=p(`git-merge`,[[`circle`,{cx:`18`,cy:`18`,r:`3`,key:`1xkwt0`}],[`circle`,{cx:`6`,cy:`6`,r:`3`,key:`1lh9wr`}],[`path`,{d:`M6 21V9a9 9 0 0 0 9 9`,key:`7kw0sc`}]]),K=e(t(),1),q=new Set([`slack`]);function J(e){return e.status===`verified`||e.status===`active`&&e.verifiedAt!=null}var Y=u();function X({channels:e,pendingChannelKey:t=null,onConnect:n,onDisconnect:r}){let[i,a]=(0,K.useState)(null);return(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(`div`,{className:`flex flex-col`,children:e.map((e,i)=>(0,Y.jsxs)(`div`,{children:[i>0?(0,Y.jsx)(`div`,{className:`border-t`,style:{borderColor:`var(--border-base)`}}):null,(0,Y.jsx)(Z,{channel:e,pending:t===e.key,onConnect:n?()=>n(e.key):void 0,onDisconnect:r?()=>a(e.key):void 0})]},e.key))}),(0,Y.jsx)(T,{open:i!==null,title:`Disconnect ${i?V(i):``}?`,message:`This clears the stored credentials for this channel. You can reconnect later.`,confirmLabel:`Disconnect`,destructive:!0,onConfirm:()=>{i&&r&&r(i),a(null)},onCancel:()=>a(null)})]})}function Z({channel:e,pending:t,onConnect:r,onDisconnect:i}){let a=e.status===`ready`;return(0,Y.jsxs)(`div`,{className:`flex items-center gap-3 py-4`,children:[(0,Y.jsx)(F,{channelId:e.key,className:`h-4 w-4 shrink-0 text-[color:var(--content-secondary)]`}),(0,Y.jsx)(`span`,{className:`text-body-medium-default`,style:{color:`var(--content-default)`},children:V(e.key)}),a&&e.address?(0,Y.jsx)(`span`,{className:`truncate text-body-medium-lighter`,style:{color:`var(--content-tertiary)`},children:e.address}):null,(0,Y.jsx)(`div`,{className:`ml-auto flex shrink-0 items-center gap-2`,children:a?(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1 h-8 px-2.5 rounded-md whitespace-nowrap select-none text-body-small-emphasised leading-none bg-[var(--content-default)] text-[var(--surface-base)]`,children:[(0,Y.jsx)(M,{className:`h-3 w-3`}),`Connected`]}),(0,Y.jsx)(n,{variant:`danger`,onClick:i,disabled:!i||t,children:t?`Disconnecting…`:`Disconnect`})]}):(0,Y.jsx)(n,{variant:`outlined`,onClick:r,disabled:!r||t,children:`Connect`})})]})}function Q({role:e,contactType:t}){let{label:n,tone:r}=we(e,t);return(0,Y.jsx)(b,{tone:r,children:n})}function we(e,t){switch(e){case`guardian`:return{label:`Guardian`,tone:`positive`};case`assistant`:return{label:`Assistant`,tone:`negative`};default:return t===`assistant`?{label:`Assistant`,tone:`negative`}:{label:`Human`,tone:`warning`}}}function Te({assistantName:e,...t}){let n=le(e);return(0,Y.jsxs)(`div`,{className:`flex flex-col gap-6`,children:[(0,Y.jsx)(W,{title:`${n} (Your Assistant)`,accessory:(0,Y.jsx)(Q,{role:`assistant`}),compactAccessory:!0}),(0,Y.jsx)(W,{title:`Channels`,subtitle:`Where ${n} can be reached.`,children:(0,Y.jsx)(X,{...t})})]})}function Ee({provenance:e}){return e.source===`global-default`?(0,Y.jsx)(b,{children:`Global default`}):(0,Y.jsxs)(b,{children:[`Default from`,(0,Y.jsx)(n,{asChild:!0,variant:`link`,size:`compact`,className:`h-auto px-0`,children:(0,Y.jsxs)(o,{to:`${ie.channels}?setup=${e.channel}`,children:[`Channels → `,V(e.channel)]})})]})}var $=new Set([`telegram`,`phone`,`vellum`,`whatsapp`,`slack`,`email`,`platform`,`a2a`]);function De(e){return $.has(e)}function Oe(e,t){return e.id===`a2a`?t&&t.status!==`revoked`?{kind:`connected`}:{kind:`setup`}:t!=null&&J(t)?{kind:`verified`}:t?.status===`blocked`?{kind:`none`}:t&&t.status!==`revoked`?{kind:`unverified`}:{kind:`setup`}}function ke(e,t,n){let r=[],i=new Set;if(e)for(let t of e)t.id===`a2a`&&!n||(r.push(t),i.add(t.id));for(let e of t)e.status===`revoked`||i.has(e.type)||e.type===`a2a`&&!n||De(e.type)&&(r.push({id:e.type,label:e.type.charAt(0).toUpperCase()+e.type.slice(1),subtitle:``,icon:`help-circle`,supportsVerification:!1,setupMessages:{guardian:``,contact:``}}),i.add(e.type));return r}function Ae({name:e,className:t,style:n}){switch(e){case`bot`:return(0,Y.jsx)(R,{className:t,style:n});case`hash`:return(0,Y.jsx)(z,{className:t,style:n});case`send`:return(0,Y.jsx)(oe,{className:t,style:n});case`phone`:return(0,Y.jsx)(A,{className:t,style:n});case`mail`:return(0,Y.jsx)(se,{className:t,style:n});case`message-square`:return(0,Y.jsx)(P,{className:t,style:n});default:return(0,Y.jsx)(xe,{className:t,style:n})}}function je({contactChannels:e,availableChannels:t,a2aEnabled:n,channelProvenance:r,setupLabel:i=`Invite`,verifyLoading:a,verifySubject:o=`self`,onSetupChannel:s,onVerifyChannel:c,onRevokeChannel:l,onLinkAccount:u}){let[d,f]=(0,K.useState)(null),[p,m]=(0,K.useState)(null),h=new Map;for(let t of e)t.status!==`revoked`&&(h.has(t.type)||h.set(t.type,t));return(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(`div`,{className:`flex flex-col`,children:ke(t,e,n).map((e,t)=>{let n=h.get(e.id);return(0,Y.jsxs)(`div`,{children:[t>0&&(0,Y.jsx)(`div`,{className:`border-t`,style:{borderColor:`var(--border-base)`}}),(0,Y.jsx)(Me,{info:e,existing:n,provenance:n&&N(e.id)?r?.[e.id]:void 0,setupLabel:i,verifyLoading:a,onSetup:s?()=>s(e.id):void 0,onVerify:c&&e.supportsVerification?()=>f(e):void 0,onRevoke:l&&n?()=>m({channelId:n.id,channel:e}):void 0,onLinkAccount:u&&q.has(e.id)?()=>u(e.id):void 0})]},e.id)})}),d&&(0,Y.jsx)(T,{open:!0,title:`Verify ${d.label}`,message:o===`contact`?`This will mark this contact's ${d.label} channel as verified. Your assistant will recognize them when they reach out from it.`:`This will mark your ${d.label} channel as verified. Your assistant will recognize you when you reach out from it.`,confirmLabel:`Verify`,onConfirm:()=>{d&&(c?.(d.id),f(null))},onCancel:()=>f(null)}),p&&(0,Y.jsx)(T,{open:!0,title:`Revoke ${p.channel.label}`,message:`This will disconnect the verified channel. The contact will need to re-verify to use this channel again.`,confirmLabel:`Revoke`,destructive:!0,onConfirm:()=>{l?.(p.channelId,p.channel.id),m(null)},onCancel:()=>m(null)})]})}function Me({info:e,existing:t,provenance:r,setupLabel:i,verifyLoading:a,onSetup:o,onVerify:s,onRevoke:c,onLinkAccount:l}){let u=Oe(e,t);return(0,Y.jsxs)(`div`,{className:`flex items-center gap-3 py-4`,children:[(0,Y.jsx)(Ae,{name:e.icon,className:`h-4 w-4 shrink-0`,style:{color:`var(--content-secondary)`}}),(0,Y.jsx)(`span`,{className:`text-body-medium-default`,style:{color:`var(--content-default)`},children:e.label}),t?.address?(0,Y.jsx)(`span`,{className:`truncate text-body-medium-lighter`,style:{color:`var(--content-tertiary)`},children:t.address}):null,(0,Y.jsxs)(`div`,{className:`ml-auto flex shrink-0 items-center gap-2`,children:[r?(0,Y.jsx)(Ee,{provenance:r}):null,u.kind===`connected`?(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1 h-8 px-2.5 rounded-md whitespace-nowrap select-none text-body-small-emphasised leading-none bg-[var(--content-default)] text-[var(--surface-base)]`,children:[(0,Y.jsx)(M,{className:`h-3 w-3`}),`Connected`]}),c?(0,Y.jsx)(n,{variant:`danger`,onClick:c,children:`Revoke`}):null]}):u.kind===`verified`?(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1 h-8 px-2.5 rounded-md whitespace-nowrap select-none text-body-small-emphasised leading-none bg-[var(--content-default)] text-[var(--surface-base)]`,children:[(0,Y.jsx)(M,{className:`h-3 w-3`}),`Verified`]}),c?(0,Y.jsx)(n,{variant:`danger`,onClick:c,children:`Revoke`}):null]}):u.kind===`unverified`?(0,Y.jsx)(n,{variant:`outlined`,onClick:s,disabled:!s||a,children:a?`Verifying…`:`Verify`}):u.kind===`setup`?e.id===`a2a`?null:(0,Y.jsxs)(Y.Fragment,{children:[l?(0,Y.jsxs)(n,{onClick:l,children:[(0,Y.jsx)(h,{className:`h-3.5 w-3.5`}),`Link account`]}):null,(0,Y.jsx)(n,{variant:`outlined`,onClick:o,disabled:!o,children:i})]}):null]})]})}function Ne(e){return(0,Y.jsx)(Pe,{...e},e.contact.id)}function Pe({contact:e,savePending:t,deletePending:r,verifyPending:i,mergePending:a=!1,canMerge:o=!1,availableChannels:s,a2aEnabled:c,channelProvenance:l,onSave:u,onDelete:d,onMerge:f,onSetupChannel:p,onVerifyChannel:m,onRevokeChannel:h,onLinkAccount:g}){let _=e.displayName===`New Contact`,[v,y]=(0,K.useState)(_?``:e.displayName),[b,S]=(0,K.useState)(e.notes??``),[C,w]=(0,K.useState)(!1),E=v.trim(),ee=b.trim(),D=_?``:e.displayName,te=e.notes??``,O=E!==D||ee!==te,ne=E.length>0&&O&&!t&&!r,k=_&&e.channels.length===0&&e.interactionCount===0,re=E||e.displayName,ie=`${e.interactionCount} interaction${e.interactionCount===1?``:`s`}`;return(0,Y.jsxs)(`div`,{className:`flex flex-col gap-6`,children:[(0,Y.jsx)(W,{title:re,accessory:(0,Y.jsx)(Q,{role:e.role,contactType:e.contactType}),compactAccessory:!0,subtitle:ie,children:(0,Y.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,Y.jsx)(x,{label:`Name`,type:`text`,value:v,onChange:e=>y(e.target.value),placeholder:`Give this human a name`,autoFocus:_,disabled:t||r,fullWidth:!0}),(0,Y.jsx)(x,{label:`Notes`,type:`text`,value:b,onChange:e=>S(e.target.value),placeholder:`Optional notes about the human which AI will take into account`,disabled:t||r,fullWidth:!0}),(0,Y.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,Y.jsx)(n,{type:`button`,onClick:()=>u({displayName:E,notes:ee}),disabled:!ne,children:t?`Saving…`:`Save`}),f?(0,Y.jsx)(n,{type:`button`,variant:`outlined`,onClick:f,disabled:!o||k||O||a||t||r,title:o?k?`Save this contact before merging`:O?`Save your changes before merging`:void 0:`No other contacts available to merge`,children:a?`Merging…`:`Merge…`}):null,(0,Y.jsx)(n,{type:`button`,variant:`danger`,onClick:()=>{k?d():w(!0)},disabled:r,children:r?`Deleting…`:`Delete Contact`})]})]})}),(0,Y.jsx)(W,{title:`Linked accounts`,subtitle:`Where the assistant recognizes this contact. Link accounts you know, invite the ones you don't.`,children:(0,Y.jsx)(je,{contactChannels:e.channels,availableChannels:s,a2aEnabled:c,channelProvenance:l,verifyLoading:i,verifySubject:`contact`,onSetupChannel:p,onVerifyChannel:m,onRevokeChannel:h,onLinkAccount:g})}),(0,Y.jsx)(T,{open:C,title:`Delete ${e.displayName}?`,message:`This will permanently delete this contact and all their channels. This action cannot be undone.`,confirmLabel:`Delete`,destructive:!0,onConfirm:()=>{w(!1),d()},onCancel:()=>w(!1)})]})}function Fe(e){return(0,Y.jsx)(Ie,{...e},`${e.survivor.id}:${e.open?`open`:`closed`}`)}function Ie({open:e,survivor:t,candidates:r,pending:i,errorMessage:a,onMerge:o,onClose:s}){let[c,l]=(0,K.useState)(``),[u,f]=(0,K.useState)(null);(0,K.useEffect)(()=>{u&&!r.some(e=>e.id===u)&&f(null)},[r,u]);let p=(0,K.useMemo)(()=>{let e=c.trim().toLowerCase();return e?r.filter(t=>t.displayName.toLowerCase().includes(e)):r},[r,c]),h=u?r.find(e=>e.id===u)??null:null,g=Ve(t);return(0,Y.jsx)(S.Root,{open:e,onOpenChange:e=>{!e&&!i&&s()},children:(0,Y.jsxs)(S.Content,{size:`md`,children:[(0,Y.jsxs)(S.Header,{children:[(0,Y.jsx)(S.Title,{icon:Ce,children:h?`Merge "${h.displayName}" into ${g}?`:`Merge another contact into ${g}`}),(0,Y.jsx)(S.Description,{children:h?`Channels and notes from the merged contact will move over. The merged contact will be deleted.`:`The contact you pick will be deleted. Its channels and notes will be added to this one.`})]}),(0,Y.jsxs)(S.Body,{className:`flex flex-col gap-3`,children:[h?(0,Y.jsx)(ze,{survivor:t,donor:h}):r.length===0?(0,Y.jsx)(Be,{}):(0,Y.jsx)(Le,{search:c,onSearch:l,candidates:p,onPick:f}),a?(0,Y.jsx)(d,{as:`p`,variant:`body-small-default`,className:`text-(--system-negative-strong)`,role:`alert`,children:a}):null]}),(0,Y.jsx)(S.Footer,{children:h?(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(n,{variant:`outlined`,onClick:()=>f(null),disabled:i,leftIcon:(0,Y.jsx)(m,{"aria-hidden":!0}),children:`Back`}),(0,Y.jsx)(n,{variant:`danger`,onClick:()=>o(h.id),disabled:i,children:i?`Merging…`:`Merge`})]}):(0,Y.jsx)(n,{variant:`outlined`,onClick:s,disabled:i,children:`Cancel`})})]})})}function Le({search:e,onSearch:t,candidates:n,onPick:r}){return(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(x,{type:`text`,value:e,onChange:e=>t(e.target.value),placeholder:`Search contacts`,leftIcon:(0,Y.jsx)(L,{className:`h-3.5 w-3.5`,"aria-hidden":!0}),fullWidth:!0}),(0,Y.jsx)(`div`,{className:`flex max-h-[320px] min-h-[120px] flex-col gap-1 overflow-y-auto`,role:`listbox`,"aria-label":`Select a contact to merge`,children:n.length===0?(0,Y.jsx)(d,{as:`p`,variant:`body-small-default`,className:`px-3 py-4 text-center text-(--content-tertiary)`,children:`No matching contacts`}):n.map(e=>(0,Y.jsx)(Re,{contact:e,onPick:()=>r(e.id)},e.id))})]})}function Re({contact:e,onPick:t}){let n=Ge(e).join(` | `)||void 0;return(0,Y.jsx)(C,{asChild:!0,label:``,children:(0,Y.jsx)(`button`,{type:`button`,onClick:t,role:`option`,"aria-selected":`false`,className:`flex h-auto w-full items-center gap-2 rounded-[6px] px-[8px] py-2 text-left`,children:(0,Y.jsxs)(`span`,{className:`flex min-w-0 flex-1 flex-col`,children:[(0,Y.jsx)(`span`,{className:`truncate text-body-medium-default`,children:e.displayName}),n?(0,Y.jsx)(`span`,{className:`truncate text-body-small-default text-(--content-tertiary)`,children:n}):null]})})})}function ze({survivor:e,donor:t}){let n=Ve(e),{moved:r,duplicates:i}=We(e,t);return(0,Y.jsxs)(`ul`,{className:`flex flex-col gap-2 text-body-medium-lighter text-(--content-secondary)`,children:[(0,Y.jsxs)(`li`,{children:[(0,Y.jsxs)(`span`,{className:`text-(--content-default)`,children:[`“`,t.displayName,`”`]}),` `,`will be deleted.`]}),(0,Y.jsx)(`li`,{children:r.length===0?`No new channels will move to ${n}.`:`${r.length} channel${r.length===1?``:`s`} will move to ${n}: ${r.map(e=>Ue(e.type)).join(`, `)}.`}),i.length>0?(0,Y.jsxs)(`li`,{className:`text-(--content-tertiary)`,children:[i.length,` duplicate channel`,i.length===1?``:`s`,` already on `,n,` `,`(skipped).`]}):null,t.notes?(0,Y.jsx)(`li`,{children:`Notes from the merged contact will be appended.`}):null,(0,Y.jsx)(`li`,{className:`text-(--content-tertiary)`,children:`This cannot be undone.`})]})}function Be(){return(0,Y.jsx)(d,{as:`p`,variant:`body-medium-lighter`,className:`px-3 py-6 text-center text-(--content-tertiary)`,children:`No other contacts available to merge.`})}function Ve(e){return e.role===`guardian`?!e.displayName||e.displayName.startsWith(`vellum-principal-`)?`you`:`${e.displayName} (you)`:e.displayName||`this contact`}var He={slack:`Slack`,telegram:`Telegram`,phone:`Phone`,email:`Email`,whatsapp:`WhatsApp`};function Ue(e){return He[e.toLowerCase()]??e}function We(e,t){let n=[],r=[];for(let i of t.channels)i.status!==`revoked`&&(e.channels.some(e=>e.type===i.type&&e.address.toLowerCase()===i.address.toLowerCase())?r.push(i):n.push(i));return{moved:n,duplicates:r}}function Ge(e){let t=new Set,n=[];for(let r of e.channels){if(r.status===`revoked`)continue;let e=r.type.toLowerCase();t.has(e)||(t.add(e),n.push(He[e]??r.type))}return n}function Ke({loading:e,guardian:t,assistantName:r,regularContacts:i,selection:a,onSelect:o,onAddContact:s,addingContact:c=!1}){let[l,u]=(0,K.useState)(``),d=l.trim()?i.filter(e=>e.displayName.toLowerCase().includes(l.trim().toLowerCase())):i;return(0,Y.jsx)(f.Root,{className:`flex h-full flex-col overflow-hidden`,children:(0,Y.jsxs)(f.Body,{className:`flex min-h-0 min-w-0 flex-1 flex-col gap-4`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,Y.jsx)(`h2`,{className:`text-title-medium`,style:{color:`var(--content-default)`},children:`Entries`}),(0,Y.jsx)(n,{type:`button`,variant:`ghost`,iconOnly:c?(0,Y.jsx)(g,{className:`animate-spin`,"aria-hidden":!0}):(0,Y.jsx)(v,{"aria-hidden":!0}),onClick:s,disabled:c,"aria-label":`Add contact`,tintColor:`var(--content-secondary)`})]}),(0,Y.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[t?(0,Y.jsx)(qe,{name:t.displayName?`${t.displayName} (You)`:`You`,role:t.role,channelTypes:t.channelTypes,selected:a?.kind===`contact`&&a.contactId===t.id,onClick:()=>o({kind:`contact`,contactId:t.id}),trailingIcon:`pencil`}):null,(0,Y.jsx)(qe,{name:r?.trim()||`Your Assistant`,role:`assistant`,selected:a?.kind===`assistant`,onClick:()=>o({kind:`assistant`}),trailingIcon:`more`})]}),(0,Y.jsx)(`div`,{className:`border-t`,style:{borderColor:`var(--border-base)`}}),i.length>0?(0,Y.jsx)(x,{type:`text`,value:l,onChange:e=>u(e.target.value),placeholder:`Search Contacts`,leftIcon:(0,Y.jsx)(L,{className:`h-3.5 w-3.5`,"aria-hidden":!0}),fullWidth:!0}):null,i.length>0?(0,Y.jsxs)(`div`,{className:`min-h-0 flex-1 overflow-y-auto flex flex-col gap-1`,children:[d.map(e=>(0,Y.jsx)(qe,{name:e.displayName,role:e.role,contactType:e.contactType,channelTypes:e.channelTypes,verified:e.verified,selected:a?.kind===`contact`&&a.contactId===e.id,onClick:()=>o({kind:`contact`,contactId:e.id}),trailingIcon:`more`},e.id)),d.length===0?(0,Y.jsx)(`p`,{className:`px-3 py-4 text-center text-body-small-default`,style:{color:`var(--content-tertiary)`},children:`No matching contacts`}):null]}):e?null:(0,Y.jsx)(n,{type:`button`,variant:`ghost`,onClick:s,disabled:c,tintColor:`var(--primary-base)`,leftIcon:c?(0,Y.jsx)(g,{className:`animate-spin`,"aria-hidden":!0}):(0,Y.jsx)(y,{"aria-hidden":!0}),children:`Add Contact`})]})})}function qe({name:e,role:t,contactType:n,channelTypes:r,selected:i,onClick:a,trailingIcon:o,verified:s}){let c=r&&r.length>0?r.join(` | `):void 0;return(0,Y.jsx)(C,{asChild:!0,active:i,label:``,trailingAction:o===`pencil`?(0,Y.jsx)(_,{className:`h-3.5 w-3.5`,"aria-hidden":!0}):o===`more`?(0,Y.jsx)(Se,{className:`h-3.5 w-3.5`,"aria-hidden":!0}):void 0,children:(0,Y.jsxs)(`button`,{type:`button`,onClick:a,className:`flex h-auto w-full items-center gap-2 rounded-[6px] px-[8px] py-2 text-left`,children:[(0,Y.jsxs)(`span`,{className:`flex min-w-0 flex-1 flex-col`,children:[(0,Y.jsx)(`span`,{className:`truncate text-body-medium-default`,children:e}),c?(0,Y.jsx)(`span`,{className:`truncate text-body-small-default`,style:{color:`var(--content-tertiary)`},children:c}):null]}),(0,Y.jsxs)(`span`,{className:`flex shrink-0 items-center gap-1`,children:[s===void 0?null:(0,Y.jsx)(b,{tone:s?`positive`:`neutral`,children:s?`Verified`:`Unverified`}),(0,Y.jsx)(Q,{role:t,contactType:n})]})]})})}function Je(e){return(0,Y.jsx)(Ye,{...e},e.contact.id)}function Ye({contact:e,savePending:t,verifyPending:r,mergePending:i=!1,canMerge:a=!1,availableChannels:o,a2aEnabled:s,onSave:c,onMerge:l,onSetupChannel:u,onVerifyChannel:d,onRevokeChannel:f,onGenerateInviteLink:p}){let m=e.displayName.startsWith(`vellum-principal-`),h=m?``:e.displayName,[g,_]=(0,K.useState)(h),[v,y]=(0,K.useState)(e.notes??``),b=g.trim(),S=v.trim(),C=b!==h.trim()||S!==(e.notes??``).trim(),w=C&&!t,T=`${e.interactionCount} interaction${e.interactionCount===1?``:`s`}`;return(0,Y.jsxs)(`div`,{className:`flex flex-col gap-6`,children:[(0,Y.jsx)(W,{title:m?`You`:`${e.displayName} (You)`,accessory:(0,Y.jsx)(Q,{role:`guardian`}),compactAccessory:!0,subtitle:T,children:(0,Y.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,Y.jsx)(x,{label:`Name`,type:`text`,value:g,onChange:e=>_(e.target.value),placeholder:`Your name`,disabled:t,fullWidth:!0}),(0,Y.jsx)(x,{label:`Notes`,type:`text`,value:v,onChange:e=>y(e.target.value),placeholder:`Notes about yourself which AI will take into account`,disabled:t,fullWidth:!0}),(0,Y.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,Y.jsx)(n,{variant:`primary`,onClick:()=>c({displayName:b||e.displayName,notes:S}),disabled:!w,children:t?`Saving…`:`Save`}),l?(0,Y.jsx)(n,{variant:`outlined`,onClick:l,disabled:!a||C||i||t,title:a?C?`Save your changes before merging`:void 0:`No other contacts available to merge`,children:i?`Merging…`:`Merge…`}):null]})]})}),(0,Y.jsx)(W,{title:`Channels`,subtitle:`Once verified, your assistant will recognize you when you message from these channels.`,children:(0,Y.jsx)(je,{contactChannels:e.channels,availableChannels:o,a2aEnabled:s,setupLabel:`Verify me`,verifyLoading:r,onSetupChannel:u,onVerifyChannel:d,onRevokeChannel:f})}),p?(0,Y.jsx)(U,{onClick:p}):null]})}function Xe(e,t){let n=t.trim().toLowerCase().replace(/^@/,``);return n===``?e:e.filter(e=>e.displayName.toLowerCase().includes(n)||e.username.toLowerCase().includes(n))}function Ze(e){let t=e.trim().split(/\s+/).filter(Boolean);return`${t[0]?.[0]??`?`}${t.length>1?t[t.length-1]?.[0]??``:``}`.toUpperCase()}function Qe({open:e,channelLabel:t,contactName:r,accounts:i,loading:a,errorMessage:o,pendingAccountId:s,onPick:c,onClose:l,onInviteInstead:u}){let[d,f]=(0,K.useState)(``);(0,K.useEffect)(()=>{e&&f(``)},[e]);let p=(0,K.useMemo)(()=>Xe(i??[],d),[i,d]),m=s!=null;return(0,Y.jsx)(S.Root,{open:e,onOpenChange:e=>!e&&l(),children:(0,Y.jsxs)(S.Content,{size:`sm`,children:[(0,Y.jsxs)(S.Header,{children:[(0,Y.jsxs)(S.Title,{children:[`Link `,t,` account`]}),(0,Y.jsxs)(S.Description,{children:[`Search your `,t,` workspace and pick`,` `,(0,Y.jsx)(`span`,{className:`text-[color:var(--content-default)]`,children:r}),`’s account.`]})]}),(0,Y.jsxs)(S.Body,{className:`flex flex-col gap-3`,children:[(0,Y.jsx)(x,{type:`search`,value:d,onChange:e=>f(e.target.value),placeholder:`Search by name or @handle`,"aria-label":`Search ${t} workspace accounts`,leftIcon:(0,Y.jsx)(L,{className:`h-4 w-4`}),fullWidth:!0}),o?(0,Y.jsx)(`p`,{className:`text-body-small-default text-[color:var(--content-negative)]`,children:o}):null,(0,Y.jsx)(`div`,{className:`max-h-80 overflow-y-auto`,children:a?(0,Y.jsx)(`p`,{className:`py-4 text-center text-body-small-default text-[color:var(--content-tertiary)]`,children:`Loading workspace members…`}):p.length===0?(0,Y.jsx)(`p`,{className:`py-4 text-center text-body-small-default text-[color:var(--content-tertiary)]`,children:(i?.length??0)===0?`No workspace members found.`:`No members match.`}):(0,Y.jsx)(`ul`,{className:`flex flex-col`,children:p.map(e=>(0,Y.jsx)(`li`,{children:(0,Y.jsxs)(`button`,{type:`button`,onClick:()=>c(e),disabled:m,className:`flex w-full cursor-pointer items-center gap-3 rounded-md px-2 py-2 text-left transition-colors hover:bg-[var(--surface-overlay)] disabled:cursor-not-allowed disabled:opacity-60`,children:[e.imageUrl?(0,Y.jsx)(`img`,{src:e.imageUrl,alt:``,className:`h-8 w-8 shrink-0 rounded-full`}):(0,Y.jsx)(`span`,{"aria-hidden":`true`,className:`flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-[var(--tag-bg-neutral)] text-body-small-emphasised text-[color:var(--content-secondary)]`,children:Ze(e.displayName)}),(0,Y.jsxs)(`span`,{className:`flex min-w-0 flex-col`,children:[(0,Y.jsx)(`span`,{className:`truncate text-body-medium-default text-[color:var(--content-default)]`,children:e.displayName}),(0,Y.jsxs)(`span`,{className:`truncate text-body-small-default text-[color:var(--content-tertiary)]`,children:[`@`,e.username]})]}),s===e.id?(0,Y.jsx)(`span`,{className:`ml-auto shrink-0 text-body-small-default text-[color:var(--content-tertiary)]`,children:`Linking…`}):null]})},e.id))})})]}),(0,Y.jsxs)(S.Footer,{className:`items-center justify-between gap-3 border-t border-[var(--border-base)]`,children:[(0,Y.jsxs)(`p`,{className:`text-body-small-default text-[color:var(--content-tertiary)]`,children:[`Picking marks this account as`,` `,(0,Y.jsx)(`span`,{className:`text-[color:var(--content-secondary)]`,children:`guardian-linked`}),` `,`— you vouch for the identity, no handshake needed.`]}),u?(0,Y.jsxs)(n,{variant:`link`,className:`shrink-0`,onClick:u,disabled:m,children:[`Or send an invite instead`,(0,Y.jsx)(I,{className:`h-3.5 w-3.5`})]}):null]})]})})}function $e(e){let t={};for(let n of e)N(n.channelType)&&(t[n.channelType]=n.policy===`trusted_contacts`?{source:`global-default`}:{source:`channel-default`,channel:n.channelType});return t}function et(e){return $e(ue(e))}function tt(e){let t=ae.use.channelTrustFloors(),n=pe(),r=t&&n,i=c({...B({path:{assistant_id:e}}),enabled:r,select:et});return r?i.data:void 0}function nt({assistantId:e,channelType:t,contact:n,onLinked:r}){let[i,a]=(0,K.useState)(!1),o=l({mutationFn:n=>ye(e,n.contact,{type:t,address:n.account.id}),onSuccess:(e,t)=>{a(!1),w.success(`Linked as @${t.account.username}`),r()}}),s=(0,K.useCallback)(()=>{o.reset(),a(!0)},[o]),c=(0,K.useCallback)(()=>{o.isPending||(o.reset(),a(!1))},[o]),u=(0,K.useCallback)(e=>{!n||o.isPending||o.mutate({contact:n,account:e})},[n,o]);return{channelType:t,dialogOpen:i,open:s,close:c,linkErrorMessage:o.error instanceof Error?o.error.message:o.error?`Failed to link account`:null,pendingAccountId:o.isPending?o.variables.account.id:null,pick:u}}var rt=[{id:`slack`,label:`Slack`,subtitle:`Message your assistant from Slack`,icon:`hash`,supportsVerification:!0,setupMessages:{guardian:`I'd like to verify my identity as your guardian on Slack. Can you help me set that up?`,contact:`I'd like to verify a contact's Slack identity. Can you walk me through it?`}},{id:`telegram`,label:`Telegram`,subtitle:`Message your assistant from Telegram`,icon:`send`,supportsVerification:!0,setupMessages:{guardian:`I'd like to verify my identity as your guardian on Telegram. Can you help me set that up?`,contact:`I'd like to verify a contact's Telegram identity. Can you walk me through it?`}},{id:`phone`,label:`Phone Calling`,subtitle:`Call or text your assistant via phone`,icon:`phone`,supportsVerification:!0,setupMessages:{guardian:`I'd like to verify my identity as your guardian for phone calls. Can you help me set that up?`,contact:`I'd like to verify a contact's phone number. Can you help me set that up?`}}],it=[];function at({assistantId:e,onStartSetupConversation:t}){let n=ae.use.a2aChannel(),r=re.use.name(),o=s(),[u]=i(),d=u.get(`setup`),f=d&&N(d)?d:null,[p,m]=(0,K.useState)({kind:`assistant`}),h=me(e),[g,_]=(0,K.useState)(!1),[v,y]=(0,K.useState)(!1),b=le(r),x=(0,K.useMemo)(()=>({path:{assistant_id:e}}),[e]),S=k(x),C=c({...ne(x),enabled:!!e,select:e=>e.contacts}),T=de({assistantId:e,onStartSetupConversation:t}),oe=tt(e),A=c({...O({path:{assistant_id:e}}),enabled:!!e,queryFn:async({signal:t})=>{let{data:n,error:r,response:i}=await E({path:{assistant_id:e},signal:t,throwOnError:!1});if(!i||i.status===404)return{channels:rt};if(!i.ok)throw r??Error(`Failed to fetch channel availability`);return n},select:e=>e.channels}).data??it,j=C.data,M=(0,K.useMemo)(()=>j?.find(e=>e.role===`guardian`)??null,[j]),se=(0,K.useMemo)(()=>j?.filter(e=>e.role!==`guardian`)??[],[j]),P=(0,K.useMemo)(()=>p.kind===`contact`?j?.find(e=>e.id===p.contactId)??null:null,[j,p]),F=(0,K.useMemo)(()=>!j||!P?[]:j.filter(e=>e.id!==P.id&&e.role!==`guardian`),[j,P]),I=F.length>0,L=(0,K.useRef)(!!f);(0,K.useEffect)(()=>{L.current||M&&(L.current=!0,m({kind:`contact`,contactId:M.id}))},[M]);let R=(0,K.useCallback)(()=>o.invalidateQueries({queryKey:S}),[o,S]),z=l({mutationFn:()=>ve(e,{displayName:`New Contact`}),onMutate:async()=>{await o.cancelQueries({queryKey:S})},onSuccess:e=>{D(o,x,t=>t?{...t,contacts:[...t.contacts,e]}:void 0),m({kind:`contact`,contactId:e.id})},onError:G(`Failed to create contact`),onSettled:()=>R()}),B=l({mutationFn:t=>be(e,t),onSuccess:(e,t)=>{D(o,x,e=>e?{...e,contacts:e.contacts.filter(e=>e.id!==t)}:void 0),m({kind:`assistant`})},onError:G(`Failed to delete contact`),onSettled:()=>R()}),V=l({mutationFn:({contactId:t,patch:n})=>ve(e,{id:t,displayName:n.displayName,notes:n.notes}),onSuccess:e=>{D(o,x,t=>t?{...t,contacts:t.contacts.map(t=>t.id===e.id?e:t)}:void 0)},onError:G(`Failed to save contact`),onSettled:()=>R()}),H=ee({onMutate:async()=>{await o.cancelQueries({queryKey:S})},onSuccess:(e,t)=>{let n=e.contact,r=t.body.mergeId;n&&(D(o,x,e=>e?{...e,contacts:e.contacts.filter(e=>e.id!==r).map(e=>e.id===n.id?n:e)}:void 0),m({kind:`contact`,contactId:n.id})),y(!1),w.success(`Contacts merged`)},onSettled:()=>R()}),U=(0,K.useCallback)(e=>{m(e),_(!1),y(!1),H.reset()},[H]),ue=(0,K.useCallback)(()=>{H.reset(),y(!0)},[H]),pe=(0,K.useCallback)(()=>{H.isPending||(y(!1),H.reset())},[H]),W=te({onSuccess:()=>R()}),ye=(0,K.useCallback)((t,n)=>{W.mutate({path:{assistant_id:e,contactChannelId:t},body:{status:`revoked`}})},[W,e]),xe=(0,K.useCallback)(()=>{z.isPending||z.mutate()},[z]),Se=(0,K.useCallback)(e=>{if(!t)return;let n=A.find(t=>t.id===e)?.setupMessages.contact;n&&t(n)},[A,t]),Ce=(0,K.useCallback)(e=>{if(!t)return;let n=A.find(t=>t.id===e)?.setupMessages.guardian;n&&t(n)},[A,t]),q=l({mutationFn:t=>_e(e,t.channelId),onSuccess:()=>R(),onError:G(`Failed to verify channel`)}),J=(0,K.useCallback)(e=>{if(!P)return;let t=P.channels.find(t=>t.type===e&&t.status!==`revoked`);t&&q.mutate({channelId:t.id})},[P,q]),X=nt({assistantId:e,channelType:`slack`,contact:P?{id:P.id,displayName:P.displayName}:null,onLinked:R}),Z=c({...ce(e),enabled:!!e&&X.dialogOpen,select:e=>e.users}),Q=T.channels.some(e=>e.key===`slack`&&e.status===`ready`),we=(0,K.useCallback)(e=>{e===X.channelType&&X.open()},[X]),Ee=B.isPending?B.variables:null,$=(0,K.useMemo)(()=>P?V.isPending&&V.variables?.contactId===P.id?{...P,displayName:V.variables.patch.displayName,notes:V.variables.patch.notes}:P:null,[P,V.isPending,V.variables]);if(f)return(0,Y.jsx)(a,{to:`${ie.channels}?setup=${f}`,replace:!0});let De={loading:C.isLoading,assistantName:b,guardian:M?{id:M.id,displayName:M.displayName.startsWith(`vellum-principal-`)?``:M.displayName,role:M.role,channelTypes:lt(M.channels,n)}:null,regularContacts:se.filter(e=>e.id!==Ee).map(e=>({id:e.id,displayName:e.displayName,role:e.role,contactType:e.contactType,channelTypes:lt(e.channels,n),verified:ct(e.channels)})),selection:p,onAddContact:xe,addingContact:z.isPending};return(0,Y.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col gap-4 overflow-hidden sm:flex-row sm:gap-6`,children:[(0,Y.jsx)(`div`,{className:`flex items-center sm:hidden`,children:(0,Y.jsx)(he,{onClick:()=>_(!0)})}),(0,Y.jsx)(ge,{open:g,onClose:()=>_(!1),title:`Contacts`,children:(0,Y.jsx)(Ke,{...De,onSelect:U})}),(0,Y.jsx)(`aside`,{className:`hidden min-h-0 w-[320px] shrink-0 overflow-y-auto self-stretch sm:block`,children:(0,Y.jsx)(Ke,{...De,onSelect:U})}),(0,Y.jsx)(`section`,{className:`min-h-0 min-w-0 flex-1 overflow-y-auto`,children:p.kind===`assistant`||p.kind===`contact`&&p.contactId===Ee?(0,Y.jsx)(Te,{assistantName:b,channels:T.channels,pendingChannelKey:T.pendingChannelKey,onConnect:T.onSetup,onDisconnect:T.onDisconnect}):$?$.role===`guardian`?(0,Y.jsx)(Je,{contact:$,savePending:V.isPending,verifyPending:q.isPending,mergePending:H.isPending,canMerge:I,availableChannels:A,a2aEnabled:n,onSave:e=>{V.mutate({contactId:$.id,patch:e})},onMerge:ue,onSetupChannel:t?Ce:void 0,onVerifyChannel:J,onRevokeChannel:ye,onGenerateInviteLink:n?h.open:void 0}):(0,Y.jsx)(Ne,{contact:$,savePending:V.isPending,deletePending:B.isPending,verifyPending:q.isPending,mergePending:H.isPending,canMerge:I,availableChannels:A,a2aEnabled:n,channelProvenance:oe,onSave:e=>{V.mutate({contactId:$.id,patch:e})},onDelete:()=>{B.mutate($.id)},onMerge:ue,onSetupChannel:t?Se:void 0,onVerifyChannel:J,onRevokeChannel:ye,onLinkAccount:Q?we:void 0}):(0,Y.jsx)(ot,{})}),P?(0,Y.jsx)(Fe,{open:v,survivor:P,candidates:F,pending:H.isPending,errorMessage:H.error instanceof Error?H.error.message:H.error?`Failed to merge contacts`:null,onMerge:t=>H.mutate({path:{assistant_id:e},body:{keepId:P.id,mergeId:t}}),onClose:pe}):null,(0,Y.jsx)(Qe,{open:X.dialogOpen,channelLabel:`Slack`,contactName:P?.displayName??``,accounts:Z.data,loading:Z.isLoading,errorMessage:Z.isError?`Couldn’t load the workspace roster. Check the Slack connection and try again.`:X.linkErrorMessage,pendingAccountId:X.pendingAccountId,onPick:X.pick,onClose:X.close,onInviteInstead:t?()=>{X.close(),Se(X.channelType)}:void 0}),(0,Y.jsx)(fe,{open:h.isOpen,assistantId:e,onClose:h.close})]})}function ot(){return(0,Y.jsx)(`div`,{className:`flex h-full items-center justify-center py-16`,children:(0,Y.jsx)(`p`,{className:`text-body-medium-lighter`,style:{color:`var(--content-tertiary)`},children:`Select a contact`})})}var st={slack:`Slack`,telegram:`Telegram`,phone:`Phone`,email:`Email`,whatsapp:`WhatsApp`,a2a:`A2A`};function ct(e){return e.some(e=>e.status!==`revoked`&&(e.type===`a2a`||J(e)))}function lt(e,t){let n=new Set,r=[];for(let i of e){if(i.status===`revoked`)continue;let e=i.type.toLowerCase();n.has(e)||e===`a2a`&&!t||(n.add(e),r.push(st[e]??i.type))}return r}function ut(){let e=r(),t=H();return(0,Y.jsx)(at,{assistantId:t,onStartSetupConversation:t=>{j(e,{prompt:t})}},t)}export{ut as ContactsPageRoute};
1
+ import{o as e}from"./chunk-jRWAZmH_.js";import{t}from"./react-DJZBPgpf.js";import{t as n}from"./button-amTXFI-2.js";import{d as r,h as i,r as a,t as o}from"./chunk-5KNZJZUH-DdS6bb-3.js";import{n as s}from"./QueryClientProvider-DKhXIxGb.js";import{t as c}from"./useQuery-B45lW1Kk.js";import{t as l}from"./useMutation-Lj4VunQV.js";import{t as u}from"./jsx-runtime-CVSDxk6A.js";import{t as d}from"./typography-D5f7kt80.js";import{t as f}from"./card-Bv5O5juh.js";import{t as p}from"./createLucideIcon-IRfcSUxS.js";import{t as m}from"./arrow-left-DI9551VI.js";import{t as h}from"./link-2-4bMylQ5v.js";import{t as g}from"./loader-circle-Cz7opInR.js";import{t as _}from"./pencil-CUIr0IFo.js";import{t as v}from"./plus-DItfr5ux.js";import{t as y}from"./user-plus-DMh4_UTz.js";import{t as b}from"./tag-CV4v7fRF.js";import{t as x}from"./input-CoUmPnRU.js";import{t as S}from"./modal-D5nLWNN9.js";import{t as C}from"./panel-item-CouW2A55.js";import{n as w}from"./toast-xTp-xwYL.js";import{t as T}from"./confirm-dialog-CSkhRFRk.js";import{C as E}from"./sdk.gen-CFgJ4K6f.js";import{Ht as ee,S as D,Vt as te,a as O,b as ne,x as k}from"./react-query.gen-LsPzqPq6.js";import{t as re}from"./assistant-identity-store-CX03CK8q.js";import{c as ie}from"./routes-BXlWEOF0.js";import{t as ae}from"./assistant-feature-flag-store-BA3GR2m5.js";import{Ai as oe,Bi as A,Cr as j,Ea as M,Ji as se,Mt as N,Wi as P,c as ce,fn as F,ja as I,ji as L,ka as R,oa as z,or as B,pn as V}from"./index-B4Qq7TL7.js";import{t as H}from"./use-active-assistant-id-CGeH4Gl6.js";import{a as U,d as le,i as ue,n as de,o as fe,r as pe,t as me}from"./use-invite-link-dialog-_LChrtmw.js";import{t as W}from"./detail-card-GPqFZVmX.js";import{n as he,t as ge}from"./mobile-sidebar-drawer-BaL8el3Y.js";import{t as G}from"./mutation-error-Bk_4pjgm.js";import{a as _e,i as ve,n as ye,t as be}from"./contacts-gateway-DfyjoqNo.js";var xe=p(`circle-question-mark`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3`,key:`1u773s`}],[`path`,{d:`M12 17h.01`,key:`p32p05`}]]),Se=p(`ellipsis-vertical`,[[`circle`,{cx:`12`,cy:`12`,r:`1`,key:`41hilf`}],[`circle`,{cx:`12`,cy:`5`,r:`1`,key:`gxeob9`}],[`circle`,{cx:`12`,cy:`19`,r:`1`,key:`lyex9k`}]]),Ce=p(`git-merge`,[[`circle`,{cx:`18`,cy:`18`,r:`3`,key:`1xkwt0`}],[`circle`,{cx:`6`,cy:`6`,r:`3`,key:`1lh9wr`}],[`path`,{d:`M6 21V9a9 9 0 0 0 9 9`,key:`7kw0sc`}]]),K=e(t(),1),q=new Set([`slack`]);function J(e){return e.status===`verified`||e.status===`active`&&e.verifiedAt!=null}var Y=u();function X({channels:e,pendingChannelKey:t=null,onConnect:n,onDisconnect:r}){let[i,a]=(0,K.useState)(null);return(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(`div`,{className:`flex flex-col`,children:e.map((e,i)=>(0,Y.jsxs)(`div`,{children:[i>0?(0,Y.jsx)(`div`,{className:`border-t`,style:{borderColor:`var(--border-base)`}}):null,(0,Y.jsx)(Z,{channel:e,pending:t===e.key,onConnect:n?()=>n(e.key):void 0,onDisconnect:r?()=>a(e.key):void 0})]},e.key))}),(0,Y.jsx)(T,{open:i!==null,title:`Disconnect ${i?V(i):``}?`,message:`This clears the stored credentials for this channel. You can reconnect later.`,confirmLabel:`Disconnect`,destructive:!0,onConfirm:()=>{i&&r&&r(i),a(null)},onCancel:()=>a(null)})]})}function Z({channel:e,pending:t,onConnect:r,onDisconnect:i}){let a=e.status===`ready`;return(0,Y.jsxs)(`div`,{className:`flex items-center gap-3 py-4`,children:[(0,Y.jsx)(F,{channelId:e.key,className:`h-4 w-4 shrink-0 text-[color:var(--content-secondary)]`}),(0,Y.jsx)(`span`,{className:`text-body-medium-default`,style:{color:`var(--content-default)`},children:V(e.key)}),a&&e.address?(0,Y.jsx)(`span`,{className:`truncate text-body-medium-lighter`,style:{color:`var(--content-tertiary)`},children:e.address}):null,(0,Y.jsx)(`div`,{className:`ml-auto flex shrink-0 items-center gap-2`,children:a?(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1 h-8 px-2.5 rounded-md whitespace-nowrap select-none text-body-small-emphasised leading-none bg-[var(--content-default)] text-[var(--surface-base)]`,children:[(0,Y.jsx)(M,{className:`h-3 w-3`}),`Connected`]}),(0,Y.jsx)(n,{variant:`danger`,onClick:i,disabled:!i||t,children:t?`Disconnecting…`:`Disconnect`})]}):(0,Y.jsx)(n,{variant:`outlined`,onClick:r,disabled:!r||t,children:`Connect`})})]})}function Q({role:e,contactType:t}){let{label:n,tone:r}=we(e,t);return(0,Y.jsx)(b,{tone:r,children:n})}function we(e,t){switch(e){case`guardian`:return{label:`Guardian`,tone:`positive`};case`assistant`:return{label:`Assistant`,tone:`negative`};default:return t===`assistant`?{label:`Assistant`,tone:`negative`}:{label:`Human`,tone:`warning`}}}function Te({assistantName:e,...t}){let n=le(e);return(0,Y.jsxs)(`div`,{className:`flex flex-col gap-6`,children:[(0,Y.jsx)(W,{title:`${n} (Your Assistant)`,accessory:(0,Y.jsx)(Q,{role:`assistant`}),compactAccessory:!0}),(0,Y.jsx)(W,{title:`Channels`,subtitle:`Where ${n} can be reached.`,children:(0,Y.jsx)(X,{...t})})]})}function Ee({provenance:e}){return e.source===`global-default`?(0,Y.jsx)(b,{children:`Global default`}):(0,Y.jsxs)(b,{children:[`Default from`,(0,Y.jsx)(n,{asChild:!0,variant:`link`,size:`compact`,className:`h-auto px-0`,children:(0,Y.jsxs)(o,{to:`${ie.channels}?setup=${e.channel}`,children:[`Channels → `,V(e.channel)]})})]})}var $=new Set([`telegram`,`phone`,`vellum`,`whatsapp`,`slack`,`email`,`platform`,`a2a`]);function De(e){return $.has(e)}function Oe(e,t){return e.id===`a2a`?t&&t.status!==`revoked`?{kind:`connected`}:{kind:`setup`}:t!=null&&J(t)?{kind:`verified`}:t?.status===`blocked`?{kind:`none`}:t&&t.status!==`revoked`?{kind:`unverified`}:{kind:`setup`}}function ke(e,t,n){let r=[],i=new Set;if(e)for(let t of e)t.id===`a2a`&&!n||(r.push(t),i.add(t.id));for(let e of t)e.status===`revoked`||i.has(e.type)||e.type===`a2a`&&!n||De(e.type)&&(r.push({id:e.type,label:e.type.charAt(0).toUpperCase()+e.type.slice(1),subtitle:``,icon:`help-circle`,supportsVerification:!1,setupMessages:{guardian:``,contact:``}}),i.add(e.type));return r}function Ae({name:e,className:t,style:n}){switch(e){case`bot`:return(0,Y.jsx)(R,{className:t,style:n});case`hash`:return(0,Y.jsx)(z,{className:t,style:n});case`send`:return(0,Y.jsx)(oe,{className:t,style:n});case`phone`:return(0,Y.jsx)(A,{className:t,style:n});case`mail`:return(0,Y.jsx)(se,{className:t,style:n});case`message-square`:return(0,Y.jsx)(P,{className:t,style:n});default:return(0,Y.jsx)(xe,{className:t,style:n})}}function je({contactChannels:e,availableChannels:t,a2aEnabled:n,channelProvenance:r,setupLabel:i=`Invite`,verifyLoading:a,verifySubject:o=`self`,onSetupChannel:s,onVerifyChannel:c,onRevokeChannel:l,onLinkAccount:u}){let[d,f]=(0,K.useState)(null),[p,m]=(0,K.useState)(null),h=new Map;for(let t of e)t.status!==`revoked`&&(h.has(t.type)||h.set(t.type,t));return(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(`div`,{className:`flex flex-col`,children:ke(t,e,n).map((e,t)=>{let n=h.get(e.id);return(0,Y.jsxs)(`div`,{children:[t>0&&(0,Y.jsx)(`div`,{className:`border-t`,style:{borderColor:`var(--border-base)`}}),(0,Y.jsx)(Me,{info:e,existing:n,provenance:n&&N(e.id)?r?.[e.id]:void 0,setupLabel:i,verifyLoading:a,onSetup:s?()=>s(e.id):void 0,onVerify:c&&e.supportsVerification?()=>f(e):void 0,onRevoke:l&&n?()=>m({channelId:n.id,channel:e}):void 0,onLinkAccount:u&&q.has(e.id)?()=>u(e.id):void 0})]},e.id)})}),d&&(0,Y.jsx)(T,{open:!0,title:`Verify ${d.label}`,message:o===`contact`?`This will mark this contact's ${d.label} channel as verified. Your assistant will recognize them when they reach out from it.`:`This will mark your ${d.label} channel as verified. Your assistant will recognize you when you reach out from it.`,confirmLabel:`Verify`,onConfirm:()=>{d&&(c?.(d.id),f(null))},onCancel:()=>f(null)}),p&&(0,Y.jsx)(T,{open:!0,title:`Revoke ${p.channel.label}`,message:`This will disconnect the verified channel. The contact will need to re-verify to use this channel again.`,confirmLabel:`Revoke`,destructive:!0,onConfirm:()=>{l?.(p.channelId,p.channel.id),m(null)},onCancel:()=>m(null)})]})}function Me({info:e,existing:t,provenance:r,setupLabel:i,verifyLoading:a,onSetup:o,onVerify:s,onRevoke:c,onLinkAccount:l}){let u=Oe(e,t);return(0,Y.jsxs)(`div`,{className:`flex items-center gap-3 py-4`,children:[(0,Y.jsx)(Ae,{name:e.icon,className:`h-4 w-4 shrink-0`,style:{color:`var(--content-secondary)`}}),(0,Y.jsx)(`span`,{className:`text-body-medium-default`,style:{color:`var(--content-default)`},children:e.label}),t?.address?(0,Y.jsx)(`span`,{className:`truncate text-body-medium-lighter`,style:{color:`var(--content-tertiary)`},children:t.address}):null,(0,Y.jsxs)(`div`,{className:`ml-auto flex shrink-0 items-center gap-2`,children:[r?(0,Y.jsx)(Ee,{provenance:r}):null,u.kind===`connected`?(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1 h-8 px-2.5 rounded-md whitespace-nowrap select-none text-body-small-emphasised leading-none bg-[var(--content-default)] text-[var(--surface-base)]`,children:[(0,Y.jsx)(M,{className:`h-3 w-3`}),`Connected`]}),c?(0,Y.jsx)(n,{variant:`danger`,onClick:c,children:`Revoke`}):null]}):u.kind===`verified`?(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1 h-8 px-2.5 rounded-md whitespace-nowrap select-none text-body-small-emphasised leading-none bg-[var(--content-default)] text-[var(--surface-base)]`,children:[(0,Y.jsx)(M,{className:`h-3 w-3`}),`Verified`]}),c?(0,Y.jsx)(n,{variant:`danger`,onClick:c,children:`Revoke`}):null]}):u.kind===`unverified`?(0,Y.jsx)(n,{variant:`outlined`,onClick:s,disabled:!s||a,children:a?`Verifying…`:`Verify`}):u.kind===`setup`?e.id===`a2a`?null:(0,Y.jsxs)(Y.Fragment,{children:[l?(0,Y.jsxs)(n,{onClick:l,children:[(0,Y.jsx)(h,{className:`h-3.5 w-3.5`}),`Link account`]}):null,(0,Y.jsx)(n,{variant:`outlined`,onClick:o,disabled:!o,children:i})]}):null]})]})}function Ne(e){return(0,Y.jsx)(Pe,{...e},e.contact.id)}function Pe({contact:e,savePending:t,deletePending:r,verifyPending:i,mergePending:a=!1,canMerge:o=!1,availableChannels:s,a2aEnabled:c,channelProvenance:l,onSave:u,onDelete:d,onMerge:f,onSetupChannel:p,onVerifyChannel:m,onRevokeChannel:h,onLinkAccount:g}){let _=e.displayName===`New Contact`,[v,y]=(0,K.useState)(_?``:e.displayName),[b,S]=(0,K.useState)(e.notes??``),[C,w]=(0,K.useState)(!1),E=v.trim(),ee=b.trim(),D=_?``:e.displayName,te=e.notes??``,O=E!==D||ee!==te,ne=E.length>0&&O&&!t&&!r,k=_&&e.channels.length===0&&e.interactionCount===0,re=E||e.displayName,ie=`${e.interactionCount} interaction${e.interactionCount===1?``:`s`}`;return(0,Y.jsxs)(`div`,{className:`flex flex-col gap-6`,children:[(0,Y.jsx)(W,{title:re,accessory:(0,Y.jsx)(Q,{role:e.role,contactType:e.contactType}),compactAccessory:!0,subtitle:ie,children:(0,Y.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,Y.jsx)(x,{label:`Name`,type:`text`,value:v,onChange:e=>y(e.target.value),placeholder:`Give this human a name`,autoFocus:_,disabled:t||r,fullWidth:!0}),(0,Y.jsx)(x,{label:`Notes`,type:`text`,value:b,onChange:e=>S(e.target.value),placeholder:`Optional notes about the human which AI will take into account`,disabled:t||r,fullWidth:!0}),(0,Y.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,Y.jsx)(n,{type:`button`,onClick:()=>u({displayName:E,notes:ee}),disabled:!ne,children:t?`Saving…`:`Save`}),f?(0,Y.jsx)(n,{type:`button`,variant:`outlined`,onClick:f,disabled:!o||k||O||a||t||r,title:o?k?`Save this contact before merging`:O?`Save your changes before merging`:void 0:`No other contacts available to merge`,children:a?`Merging…`:`Merge…`}):null,(0,Y.jsx)(n,{type:`button`,variant:`danger`,onClick:()=>{k?d():w(!0)},disabled:r,children:r?`Deleting…`:`Delete Contact`})]})]})}),(0,Y.jsx)(W,{title:`Linked accounts`,subtitle:`Where the assistant recognizes this contact. Link accounts you know, invite the ones you don't.`,children:(0,Y.jsx)(je,{contactChannels:e.channels,availableChannels:s,a2aEnabled:c,channelProvenance:l,verifyLoading:i,verifySubject:`contact`,onSetupChannel:p,onVerifyChannel:m,onRevokeChannel:h,onLinkAccount:g})}),(0,Y.jsx)(T,{open:C,title:`Delete ${e.displayName}?`,message:`This will permanently delete this contact and all their channels. This action cannot be undone.`,confirmLabel:`Delete`,destructive:!0,onConfirm:()=>{w(!1),d()},onCancel:()=>w(!1)})]})}function Fe(e){return(0,Y.jsx)(Ie,{...e},`${e.survivor.id}:${e.open?`open`:`closed`}`)}function Ie({open:e,survivor:t,candidates:r,pending:i,errorMessage:a,onMerge:o,onClose:s}){let[c,l]=(0,K.useState)(``),[u,f]=(0,K.useState)(null);(0,K.useEffect)(()=>{u&&!r.some(e=>e.id===u)&&f(null)},[r,u]);let p=(0,K.useMemo)(()=>{let e=c.trim().toLowerCase();return e?r.filter(t=>t.displayName.toLowerCase().includes(e)):r},[r,c]),h=u?r.find(e=>e.id===u)??null:null,g=Ve(t);return(0,Y.jsx)(S.Root,{open:e,onOpenChange:e=>{!e&&!i&&s()},children:(0,Y.jsxs)(S.Content,{size:`md`,children:[(0,Y.jsxs)(S.Header,{children:[(0,Y.jsx)(S.Title,{icon:Ce,children:h?`Merge "${h.displayName}" into ${g}?`:`Merge another contact into ${g}`}),(0,Y.jsx)(S.Description,{children:h?`Channels and notes from the merged contact will move over. The merged contact will be deleted.`:`The contact you pick will be deleted. Its channels and notes will be added to this one.`})]}),(0,Y.jsxs)(S.Body,{className:`flex flex-col gap-3`,children:[h?(0,Y.jsx)(ze,{survivor:t,donor:h}):r.length===0?(0,Y.jsx)(Be,{}):(0,Y.jsx)(Le,{search:c,onSearch:l,candidates:p,onPick:f}),a?(0,Y.jsx)(d,{as:`p`,variant:`body-small-default`,className:`text-(--system-negative-strong)`,role:`alert`,children:a}):null]}),(0,Y.jsx)(S.Footer,{children:h?(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(n,{variant:`outlined`,onClick:()=>f(null),disabled:i,leftIcon:(0,Y.jsx)(m,{"aria-hidden":!0}),children:`Back`}),(0,Y.jsx)(n,{variant:`danger`,onClick:()=>o(h.id),disabled:i,children:i?`Merging…`:`Merge`})]}):(0,Y.jsx)(n,{variant:`outlined`,onClick:s,disabled:i,children:`Cancel`})})]})})}function Le({search:e,onSearch:t,candidates:n,onPick:r}){return(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(x,{type:`text`,value:e,onChange:e=>t(e.target.value),placeholder:`Search contacts`,leftIcon:(0,Y.jsx)(L,{className:`h-3.5 w-3.5`,"aria-hidden":!0}),fullWidth:!0}),(0,Y.jsx)(`div`,{className:`flex max-h-[320px] min-h-[120px] flex-col gap-1 overflow-y-auto`,role:`listbox`,"aria-label":`Select a contact to merge`,children:n.length===0?(0,Y.jsx)(d,{as:`p`,variant:`body-small-default`,className:`px-3 py-4 text-center text-(--content-tertiary)`,children:`No matching contacts`}):n.map(e=>(0,Y.jsx)(Re,{contact:e,onPick:()=>r(e.id)},e.id))})]})}function Re({contact:e,onPick:t}){let n=Ge(e).join(` | `)||void 0;return(0,Y.jsx)(C,{asChild:!0,label:``,children:(0,Y.jsx)(`button`,{type:`button`,onClick:t,role:`option`,"aria-selected":`false`,className:`flex h-auto w-full items-center gap-2 rounded-[6px] px-[8px] py-2 text-left`,children:(0,Y.jsxs)(`span`,{className:`flex min-w-0 flex-1 flex-col`,children:[(0,Y.jsx)(`span`,{className:`truncate text-body-medium-default`,children:e.displayName}),n?(0,Y.jsx)(`span`,{className:`truncate text-body-small-default text-(--content-tertiary)`,children:n}):null]})})})}function ze({survivor:e,donor:t}){let n=Ve(e),{moved:r,duplicates:i}=We(e,t);return(0,Y.jsxs)(`ul`,{className:`flex flex-col gap-2 text-body-medium-lighter text-(--content-secondary)`,children:[(0,Y.jsxs)(`li`,{children:[(0,Y.jsxs)(`span`,{className:`text-(--content-default)`,children:[`“`,t.displayName,`”`]}),` `,`will be deleted.`]}),(0,Y.jsx)(`li`,{children:r.length===0?`No new channels will move to ${n}.`:`${r.length} channel${r.length===1?``:`s`} will move to ${n}: ${r.map(e=>Ue(e.type)).join(`, `)}.`}),i.length>0?(0,Y.jsxs)(`li`,{className:`text-(--content-tertiary)`,children:[i.length,` duplicate channel`,i.length===1?``:`s`,` already on `,n,` `,`(skipped).`]}):null,t.notes?(0,Y.jsx)(`li`,{children:`Notes from the merged contact will be appended.`}):null,(0,Y.jsx)(`li`,{className:`text-(--content-tertiary)`,children:`This cannot be undone.`})]})}function Be(){return(0,Y.jsx)(d,{as:`p`,variant:`body-medium-lighter`,className:`px-3 py-6 text-center text-(--content-tertiary)`,children:`No other contacts available to merge.`})}function Ve(e){return e.role===`guardian`?!e.displayName||e.displayName.startsWith(`vellum-principal-`)?`you`:`${e.displayName} (you)`:e.displayName||`this contact`}var He={slack:`Slack`,telegram:`Telegram`,phone:`Phone`,email:`Email`,whatsapp:`WhatsApp`};function Ue(e){return He[e.toLowerCase()]??e}function We(e,t){let n=[],r=[];for(let i of t.channels)i.status!==`revoked`&&(e.channels.some(e=>e.type===i.type&&e.address.toLowerCase()===i.address.toLowerCase())?r.push(i):n.push(i));return{moved:n,duplicates:r}}function Ge(e){let t=new Set,n=[];for(let r of e.channels){if(r.status===`revoked`)continue;let e=r.type.toLowerCase();t.has(e)||(t.add(e),n.push(He[e]??r.type))}return n}function Ke({loading:e,guardian:t,assistantName:r,regularContacts:i,selection:a,onSelect:o,onAddContact:s,addingContact:c=!1}){let[l,u]=(0,K.useState)(``),d=l.trim()?i.filter(e=>e.displayName.toLowerCase().includes(l.trim().toLowerCase())):i;return(0,Y.jsx)(f.Root,{className:`flex h-full flex-col overflow-hidden`,children:(0,Y.jsxs)(f.Body,{className:`flex min-h-0 min-w-0 flex-1 flex-col gap-4`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,Y.jsx)(`h2`,{className:`text-title-medium`,style:{color:`var(--content-default)`},children:`Entries`}),(0,Y.jsx)(n,{type:`button`,variant:`ghost`,iconOnly:c?(0,Y.jsx)(g,{className:`animate-spin`,"aria-hidden":!0}):(0,Y.jsx)(v,{"aria-hidden":!0}),onClick:s,disabled:c,"aria-label":`Add contact`,tintColor:`var(--content-secondary)`})]}),(0,Y.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[t?(0,Y.jsx)(qe,{name:t.displayName?`${t.displayName} (You)`:`You`,role:t.role,channelTypes:t.channelTypes,selected:a?.kind===`contact`&&a.contactId===t.id,onClick:()=>o({kind:`contact`,contactId:t.id}),trailingIcon:`pencil`}):null,(0,Y.jsx)(qe,{name:r?.trim()||`Your Assistant`,role:`assistant`,selected:a?.kind===`assistant`,onClick:()=>o({kind:`assistant`}),trailingIcon:`more`})]}),(0,Y.jsx)(`div`,{className:`border-t`,style:{borderColor:`var(--border-base)`}}),i.length>0?(0,Y.jsx)(x,{type:`text`,value:l,onChange:e=>u(e.target.value),placeholder:`Search Contacts`,leftIcon:(0,Y.jsx)(L,{className:`h-3.5 w-3.5`,"aria-hidden":!0}),fullWidth:!0}):null,i.length>0?(0,Y.jsxs)(`div`,{className:`min-h-0 flex-1 overflow-y-auto flex flex-col gap-1`,children:[d.map(e=>(0,Y.jsx)(qe,{name:e.displayName,role:e.role,contactType:e.contactType,channelTypes:e.channelTypes,verified:e.verified,selected:a?.kind===`contact`&&a.contactId===e.id,onClick:()=>o({kind:`contact`,contactId:e.id}),trailingIcon:`more`},e.id)),d.length===0?(0,Y.jsx)(`p`,{className:`px-3 py-4 text-center text-body-small-default`,style:{color:`var(--content-tertiary)`},children:`No matching contacts`}):null]}):e?null:(0,Y.jsx)(n,{type:`button`,variant:`ghost`,onClick:s,disabled:c,tintColor:`var(--primary-base)`,leftIcon:c?(0,Y.jsx)(g,{className:`animate-spin`,"aria-hidden":!0}):(0,Y.jsx)(y,{"aria-hidden":!0}),children:`Add Contact`})]})})}function qe({name:e,role:t,contactType:n,channelTypes:r,selected:i,onClick:a,trailingIcon:o,verified:s}){let c=r&&r.length>0?r.join(` | `):void 0;return(0,Y.jsx)(C,{asChild:!0,active:i,label:``,trailingAction:o===`pencil`?(0,Y.jsx)(_,{className:`h-3.5 w-3.5`,"aria-hidden":!0}):o===`more`?(0,Y.jsx)(Se,{className:`h-3.5 w-3.5`,"aria-hidden":!0}):void 0,children:(0,Y.jsxs)(`button`,{type:`button`,onClick:a,className:`flex h-auto w-full items-center gap-2 rounded-[6px] px-[8px] py-2 text-left`,children:[(0,Y.jsxs)(`span`,{className:`flex min-w-0 flex-1 flex-col`,children:[(0,Y.jsx)(`span`,{className:`truncate text-body-medium-default`,children:e}),c?(0,Y.jsx)(`span`,{className:`truncate text-body-small-default`,style:{color:`var(--content-tertiary)`},children:c}):null]}),(0,Y.jsxs)(`span`,{className:`flex shrink-0 items-center gap-1`,children:[s===void 0?null:(0,Y.jsx)(b,{tone:s?`positive`:`neutral`,children:s?`Verified`:`Unverified`}),(0,Y.jsx)(Q,{role:t,contactType:n})]})]})})}function Je(e){return(0,Y.jsx)(Ye,{...e},e.contact.id)}function Ye({contact:e,savePending:t,verifyPending:r,mergePending:i=!1,canMerge:a=!1,availableChannels:o,a2aEnabled:s,onSave:c,onMerge:l,onSetupChannel:u,onVerifyChannel:d,onRevokeChannel:f,onGenerateInviteLink:p}){let m=e.displayName.startsWith(`vellum-principal-`),h=m?``:e.displayName,[g,_]=(0,K.useState)(h),[v,y]=(0,K.useState)(e.notes??``),b=g.trim(),S=v.trim(),C=b!==h.trim()||S!==(e.notes??``).trim(),w=C&&!t,T=`${e.interactionCount} interaction${e.interactionCount===1?``:`s`}`;return(0,Y.jsxs)(`div`,{className:`flex flex-col gap-6`,children:[(0,Y.jsx)(W,{title:m?`You`:`${e.displayName} (You)`,accessory:(0,Y.jsx)(Q,{role:`guardian`}),compactAccessory:!0,subtitle:T,children:(0,Y.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,Y.jsx)(x,{label:`Name`,type:`text`,value:g,onChange:e=>_(e.target.value),placeholder:`Your name`,disabled:t,fullWidth:!0}),(0,Y.jsx)(x,{label:`Notes`,type:`text`,value:v,onChange:e=>y(e.target.value),placeholder:`Notes about yourself which AI will take into account`,disabled:t,fullWidth:!0}),(0,Y.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,Y.jsx)(n,{variant:`primary`,onClick:()=>c({displayName:b||e.displayName,notes:S}),disabled:!w,children:t?`Saving…`:`Save`}),l?(0,Y.jsx)(n,{variant:`outlined`,onClick:l,disabled:!a||C||i||t,title:a?C?`Save your changes before merging`:void 0:`No other contacts available to merge`,children:i?`Merging…`:`Merge…`}):null]})]})}),(0,Y.jsx)(W,{title:`Channels`,subtitle:`Once verified, your assistant will recognize you when you message from these channels.`,children:(0,Y.jsx)(je,{contactChannels:e.channels,availableChannels:o,a2aEnabled:s,setupLabel:`Verify me`,verifyLoading:r,onSetupChannel:u,onVerifyChannel:d,onRevokeChannel:f})}),p?(0,Y.jsx)(U,{onClick:p}):null]})}function Xe(e,t){let n=t.trim().toLowerCase().replace(/^@/,``);return n===``?e:e.filter(e=>e.displayName.toLowerCase().includes(n)||e.username.toLowerCase().includes(n))}function Ze(e){let t=e.trim().split(/\s+/).filter(Boolean);return`${t[0]?.[0]??`?`}${t.length>1?t[t.length-1]?.[0]??``:``}`.toUpperCase()}function Qe({open:e,channelLabel:t,contactName:r,accounts:i,loading:a,errorMessage:o,pendingAccountId:s,onPick:c,onClose:l,onInviteInstead:u}){let[d,f]=(0,K.useState)(``);(0,K.useEffect)(()=>{e&&f(``)},[e]);let p=(0,K.useMemo)(()=>Xe(i??[],d),[i,d]),m=s!=null;return(0,Y.jsx)(S.Root,{open:e,onOpenChange:e=>!e&&l(),children:(0,Y.jsxs)(S.Content,{size:`sm`,children:[(0,Y.jsxs)(S.Header,{children:[(0,Y.jsxs)(S.Title,{children:[`Link `,t,` account`]}),(0,Y.jsxs)(S.Description,{children:[`Search your `,t,` workspace and pick`,` `,(0,Y.jsx)(`span`,{className:`text-[color:var(--content-default)]`,children:r}),`’s account.`]})]}),(0,Y.jsxs)(S.Body,{className:`flex flex-col gap-3`,children:[(0,Y.jsx)(x,{type:`search`,value:d,onChange:e=>f(e.target.value),placeholder:`Search by name or @handle`,"aria-label":`Search ${t} workspace accounts`,leftIcon:(0,Y.jsx)(L,{className:`h-4 w-4`}),fullWidth:!0}),o?(0,Y.jsx)(`p`,{className:`text-body-small-default text-[color:var(--content-negative)]`,children:o}):null,(0,Y.jsx)(`div`,{className:`max-h-80 overflow-y-auto`,children:a?(0,Y.jsx)(`p`,{className:`py-4 text-center text-body-small-default text-[color:var(--content-tertiary)]`,children:`Loading workspace members…`}):p.length===0?(0,Y.jsx)(`p`,{className:`py-4 text-center text-body-small-default text-[color:var(--content-tertiary)]`,children:(i?.length??0)===0?`No workspace members found.`:`No members match.`}):(0,Y.jsx)(`ul`,{className:`flex flex-col`,children:p.map(e=>(0,Y.jsx)(`li`,{children:(0,Y.jsxs)(`button`,{type:`button`,onClick:()=>c(e),disabled:m,className:`flex w-full cursor-pointer items-center gap-3 rounded-md px-2 py-2 text-left transition-colors hover:bg-[var(--surface-overlay)] disabled:cursor-not-allowed disabled:opacity-60`,children:[e.imageUrl?(0,Y.jsx)(`img`,{src:e.imageUrl,alt:``,className:`h-8 w-8 shrink-0 rounded-full`}):(0,Y.jsx)(`span`,{"aria-hidden":`true`,className:`flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-[var(--tag-bg-neutral)] text-body-small-emphasised text-[color:var(--content-secondary)]`,children:Ze(e.displayName)}),(0,Y.jsxs)(`span`,{className:`flex min-w-0 flex-col`,children:[(0,Y.jsx)(`span`,{className:`truncate text-body-medium-default text-[color:var(--content-default)]`,children:e.displayName}),(0,Y.jsxs)(`span`,{className:`truncate text-body-small-default text-[color:var(--content-tertiary)]`,children:[`@`,e.username]})]}),s===e.id?(0,Y.jsx)(`span`,{className:`ml-auto shrink-0 text-body-small-default text-[color:var(--content-tertiary)]`,children:`Linking…`}):null]})},e.id))})})]}),(0,Y.jsxs)(S.Footer,{className:`items-center justify-between gap-3 border-t border-[var(--border-base)]`,children:[(0,Y.jsxs)(`p`,{className:`text-body-small-default text-[color:var(--content-tertiary)]`,children:[`Picking marks this account as`,` `,(0,Y.jsx)(`span`,{className:`text-[color:var(--content-secondary)]`,children:`guardian-linked`}),` `,`— you vouch for the identity, no handshake needed.`]}),u?(0,Y.jsxs)(n,{variant:`link`,className:`shrink-0`,onClick:u,disabled:m,children:[`Or send an invite instead`,(0,Y.jsx)(I,{className:`h-3.5 w-3.5`})]}):null]})]})})}function $e(e){let t={};for(let n of e)N(n.channelType)&&(t[n.channelType]=n.policy===`trusted_contacts`?{source:`global-default`}:{source:`channel-default`,channel:n.channelType});return t}function et(e){return $e(ue(e))}function tt(e){let t=ae.use.channelTrustFloors(),n=pe(),r=t&&n,i=c({...B({path:{assistant_id:e}}),enabled:r,select:et});return r?i.data:void 0}function nt({assistantId:e,channelType:t,contact:n,onLinked:r}){let[i,a]=(0,K.useState)(!1),o=l({mutationFn:n=>ye(e,n.contact,{type:t,address:n.account.id}),onSuccess:(e,t)=>{a(!1),w.success(`Linked as @${t.account.username}`),r()}}),s=(0,K.useCallback)(()=>{o.reset(),a(!0)},[o]),c=(0,K.useCallback)(()=>{o.isPending||(o.reset(),a(!1))},[o]),u=(0,K.useCallback)(e=>{!n||o.isPending||o.mutate({contact:n,account:e})},[n,o]);return{channelType:t,dialogOpen:i,open:s,close:c,linkErrorMessage:o.error instanceof Error?o.error.message:o.error?`Failed to link account`:null,pendingAccountId:o.isPending?o.variables.account.id:null,pick:u}}var rt=[{id:`slack`,label:`Slack`,subtitle:`Message your assistant from Slack`,icon:`hash`,supportsVerification:!0,setupMessages:{guardian:`I'd like to verify my identity as your guardian on Slack. Can you help me set that up?`,contact:`I'd like to verify a contact's Slack identity. Can you walk me through it?`}},{id:`telegram`,label:`Telegram`,subtitle:`Message your assistant from Telegram`,icon:`send`,supportsVerification:!0,setupMessages:{guardian:`I'd like to verify my identity as your guardian on Telegram. Can you help me set that up?`,contact:`I'd like to verify a contact's Telegram identity. Can you walk me through it?`}},{id:`phone`,label:`Phone Calling`,subtitle:`Call or text your assistant via phone`,icon:`phone`,supportsVerification:!0,setupMessages:{guardian:`I'd like to verify my identity as your guardian for phone calls. Can you help me set that up?`,contact:`I'd like to verify a contact's phone number. Can you help me set that up?`}}],it=[];function at({assistantId:e,onStartSetupConversation:t}){let n=ae.use.a2aChannel(),r=re.use.name(),o=s(),[u]=i(),d=u.get(`setup`),f=d&&N(d)?d:null,[p,m]=(0,K.useState)({kind:`assistant`}),h=me(e),[g,_]=(0,K.useState)(!1),[v,y]=(0,K.useState)(!1),b=le(r),x=(0,K.useMemo)(()=>({path:{assistant_id:e}}),[e]),S=k(x),C=c({...ne(x),enabled:!!e,select:e=>e.contacts}),T=de({assistantId:e,onStartSetupConversation:t}),oe=tt(e),A=c({...O({path:{assistant_id:e}}),enabled:!!e,queryFn:async({signal:t})=>{let{data:n,error:r,response:i}=await E({path:{assistant_id:e},signal:t,throwOnError:!1});if(!i||i.status===404)return{channels:rt};if(!i.ok)throw r??Error(`Failed to fetch channel availability`);return n},select:e=>e.channels}).data??it,j=C.data,M=(0,K.useMemo)(()=>j?.find(e=>e.role===`guardian`)??null,[j]),se=(0,K.useMemo)(()=>j?.filter(e=>e.role!==`guardian`)??[],[j]),P=(0,K.useMemo)(()=>p.kind===`contact`?j?.find(e=>e.id===p.contactId)??null:null,[j,p]),F=(0,K.useMemo)(()=>!j||!P?[]:j.filter(e=>e.id!==P.id&&e.role!==`guardian`),[j,P]),I=F.length>0,L=(0,K.useRef)(!!f);(0,K.useEffect)(()=>{L.current||M&&(L.current=!0,m({kind:`contact`,contactId:M.id}))},[M]);let R=(0,K.useCallback)(()=>o.invalidateQueries({queryKey:S}),[o,S]),z=l({mutationFn:()=>ve(e,{displayName:`New Contact`}),onMutate:async()=>{await o.cancelQueries({queryKey:S})},onSuccess:e=>{D(o,x,t=>t?{...t,contacts:[...t.contacts,e]}:void 0),m({kind:`contact`,contactId:e.id})},onError:G(`Failed to create contact`),onSettled:()=>R()}),B=l({mutationFn:t=>be(e,t),onSuccess:(e,t)=>{D(o,x,e=>e?{...e,contacts:e.contacts.filter(e=>e.id!==t)}:void 0),m({kind:`assistant`})},onError:G(`Failed to delete contact`),onSettled:()=>R()}),V=l({mutationFn:({contactId:t,patch:n})=>ve(e,{id:t,displayName:n.displayName,notes:n.notes}),onSuccess:e=>{D(o,x,t=>t?{...t,contacts:t.contacts.map(t=>t.id===e.id?e:t)}:void 0)},onError:G(`Failed to save contact`),onSettled:()=>R()}),H=ee({onMutate:async()=>{await o.cancelQueries({queryKey:S})},onSuccess:(e,t)=>{let n=e.contact,r=t.body.mergeId;n&&(D(o,x,e=>e?{...e,contacts:e.contacts.filter(e=>e.id!==r).map(e=>e.id===n.id?n:e)}:void 0),m({kind:`contact`,contactId:n.id})),y(!1),w.success(`Contacts merged`)},onSettled:()=>R()}),U=(0,K.useCallback)(e=>{m(e),_(!1),y(!1),H.reset()},[H]),ue=(0,K.useCallback)(()=>{H.reset(),y(!0)},[H]),pe=(0,K.useCallback)(()=>{H.isPending||(y(!1),H.reset())},[H]),W=te({onSuccess:()=>R()}),ye=(0,K.useCallback)((t,n)=>{W.mutate({path:{assistant_id:e,contactChannelId:t},body:{status:`revoked`}})},[W,e]),xe=(0,K.useCallback)(()=>{z.isPending||z.mutate()},[z]),Se=(0,K.useCallback)(e=>{if(!t)return;let n=A.find(t=>t.id===e)?.setupMessages.contact;n&&t(n)},[A,t]),Ce=(0,K.useCallback)(e=>{if(!t)return;let n=A.find(t=>t.id===e)?.setupMessages.guardian;n&&t(n)},[A,t]),q=l({mutationFn:t=>_e(e,t.channelId),onSuccess:()=>R(),onError:G(`Failed to verify channel`)}),J=(0,K.useCallback)(e=>{if(!P)return;let t=P.channels.find(t=>t.type===e&&t.status!==`revoked`);t&&q.mutate({channelId:t.id})},[P,q]),X=nt({assistantId:e,channelType:`slack`,contact:P?{id:P.id,displayName:P.displayName}:null,onLinked:R}),Z=c({...ce(e),enabled:!!e&&X.dialogOpen,select:e=>e.users}),Q=T.channels.some(e=>e.key===`slack`&&e.status===`ready`),we=(0,K.useCallback)(e=>{e===X.channelType&&X.open()},[X]),Ee=B.isPending?B.variables:null,$=(0,K.useMemo)(()=>P?V.isPending&&V.variables?.contactId===P.id?{...P,displayName:V.variables.patch.displayName,notes:V.variables.patch.notes}:P:null,[P,V.isPending,V.variables]);if(f)return(0,Y.jsx)(a,{to:`${ie.channels}?setup=${f}`,replace:!0});let De={loading:C.isLoading,assistantName:b,guardian:M?{id:M.id,displayName:M.displayName.startsWith(`vellum-principal-`)?``:M.displayName,role:M.role,channelTypes:lt(M.channels,n)}:null,regularContacts:se.filter(e=>e.id!==Ee).map(e=>({id:e.id,displayName:e.displayName,role:e.role,contactType:e.contactType,channelTypes:lt(e.channels,n),verified:ct(e.channels)})),selection:p,onAddContact:xe,addingContact:z.isPending};return(0,Y.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col gap-4 overflow-hidden sm:flex-row sm:gap-6`,children:[(0,Y.jsx)(`div`,{className:`flex items-center sm:hidden`,children:(0,Y.jsx)(he,{onClick:()=>_(!0)})}),(0,Y.jsx)(ge,{open:g,onClose:()=>_(!1),title:`Contacts`,children:(0,Y.jsx)(Ke,{...De,onSelect:U})}),(0,Y.jsx)(`aside`,{className:`hidden min-h-0 w-[320px] shrink-0 overflow-y-auto self-stretch sm:block`,children:(0,Y.jsx)(Ke,{...De,onSelect:U})}),(0,Y.jsx)(`section`,{className:`min-h-0 min-w-0 flex-1 overflow-y-auto`,children:p.kind===`assistant`||p.kind===`contact`&&p.contactId===Ee?(0,Y.jsx)(Te,{assistantName:b,channels:T.channels,pendingChannelKey:T.pendingChannelKey,onConnect:T.onSetup,onDisconnect:T.onDisconnect}):$?$.role===`guardian`?(0,Y.jsx)(Je,{contact:$,savePending:V.isPending,verifyPending:q.isPending,mergePending:H.isPending,canMerge:I,availableChannels:A,a2aEnabled:n,onSave:e=>{V.mutate({contactId:$.id,patch:e})},onMerge:ue,onSetupChannel:t?Ce:void 0,onVerifyChannel:J,onRevokeChannel:ye,onGenerateInviteLink:n?h.open:void 0}):(0,Y.jsx)(Ne,{contact:$,savePending:V.isPending,deletePending:B.isPending,verifyPending:q.isPending,mergePending:H.isPending,canMerge:I,availableChannels:A,a2aEnabled:n,channelProvenance:oe,onSave:e=>{V.mutate({contactId:$.id,patch:e})},onDelete:()=>{B.mutate($.id)},onMerge:ue,onSetupChannel:t?Se:void 0,onVerifyChannel:J,onRevokeChannel:ye,onLinkAccount:Q?we:void 0}):(0,Y.jsx)(ot,{})}),P?(0,Y.jsx)(Fe,{open:v,survivor:P,candidates:F,pending:H.isPending,errorMessage:H.error instanceof Error?H.error.message:H.error?`Failed to merge contacts`:null,onMerge:t=>H.mutate({path:{assistant_id:e},body:{keepId:P.id,mergeId:t}}),onClose:pe}):null,(0,Y.jsx)(Qe,{open:X.dialogOpen,channelLabel:`Slack`,contactName:P?.displayName??``,accounts:Z.data,loading:Z.isLoading,errorMessage:Z.isError?`Couldn’t load the workspace roster. Check the Slack connection and try again.`:X.linkErrorMessage,pendingAccountId:X.pendingAccountId,onPick:X.pick,onClose:X.close,onInviteInstead:t?()=>{X.close(),Se(X.channelType)}:void 0}),(0,Y.jsx)(fe,{open:h.isOpen,assistantId:e,onClose:h.close})]})}function ot(){return(0,Y.jsx)(`div`,{className:`flex h-full items-center justify-center py-16`,children:(0,Y.jsx)(`p`,{className:`text-body-medium-lighter`,style:{color:`var(--content-tertiary)`},children:`Select a contact`})})}var st={slack:`Slack`,telegram:`Telegram`,phone:`Phone`,email:`Email`,whatsapp:`WhatsApp`,a2a:`A2A`};function ct(e){return e.some(e=>e.status!==`revoked`&&(e.type===`a2a`||J(e)))}function lt(e,t){let n=new Set,r=[];for(let i of e){if(i.status===`revoked`)continue;let e=i.type.toLowerCase();n.has(e)||e===`a2a`&&!t||(n.add(e),r.push(st[e]??i.type))}return r}function ut(){let e=r(),t=H();return(0,Y.jsx)(at,{assistantId:t,onStartSetupConversation:t=>{j(e,{prompt:t})}},t)}export{ut as ContactsPageRoute};