@vellumai/web 0.11.3-staging.2 → 0.11.3-staging.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (142) hide show
  1. package/dist/assets/{access-DWtJQvRI.js → access-RDaLlBt5.js} +1 -1
  2. package/dist/assets/{account-page-D03pCcnz.js → account-page-JyXn859b.js} +1 -1
  3. package/dist/assets/{account-shell-DmVQwtZ0.js → account-shell-DuR-x14B.js} +1 -1
  4. package/dist/assets/{acp-run-detail-panel-COs66Yrd.js → acp-run-detail-panel-BsGRKgJi.js} +1 -1
  5. package/dist/assets/{activity-steps-panel-CLjBxqNs.js → activity-steps-panel-DGS78a-e.js} +1 -1
  6. package/dist/assets/{ai-page-D4GbPprS.js → ai-page-84Y9c_q2.js} +1 -1
  7. package/dist/assets/{app-card-B7C46-7O.js → app-card-Df-Gy7pD.js} +1 -1
  8. package/dist/assets/{assistant-status-panel-CDUAp33H.js → assistant-status-panel-C92c678g.js} +1 -1
  9. package/dist/assets/{auth-store-DkOiOQNx.js → auth-store-BJdkkmzu.js} +1 -1
  10. package/dist/assets/{background-task-detail-panel-xFGqYCUz.js → background-task-detail-panel-Dq1DgR5i.js} +1 -1
  11. package/dist/assets/billing-page-CAFoZYGH.js +3 -0
  12. package/dist/assets/{bookmarks-page-DqXq2CVJ.js → bookmarks-page-EeUOpkIO.js} +1 -1
  13. package/dist/assets/{build-state-B0f3Jn2o.js → build-state-DJaFMxtL.js} +1 -1
  14. package/dist/assets/{channels-page-route-CbV05RLi.js → channels-page-route-DS9XLjMy.js} +1 -1
  15. package/dist/assets/chat-markdown-message-C6oOqDdl.js +1 -0
  16. package/dist/assets/{checkout-page-BxYwG3J8.js → checkout-page-BqIlZAum.js} +1 -1
  17. package/dist/assets/{command-palette-DSxHNf_m.js → command-palette-D6aRon6x.js} +1 -1
  18. package/dist/assets/{command-palette-window-page-9lbssBKp.js → command-palette-window-page-B1jt_AiM.js} +1 -1
  19. package/dist/assets/{composer-settings-MHDtr31Y.js → composer-settings-Du4kV9LG.js} +1 -1
  20. package/dist/assets/{contacts-page-route-BE3oNfhk.js → contacts-page-route-B4eanbVf.js} +1 -1
  21. package/dist/assets/{conversation-navigation-DbQqV_fs.js → conversation-navigation-gR_RLe1J.js} +1 -1
  22. package/dist/assets/{conversation-queries-CMEwcap1.js → conversation-queries-Bx_JApUN.js} +1 -1
  23. package/dist/assets/{credentials-page-DKfIMfUB.js → credentials-page-BLMs_5u_.js} +1 -1
  24. package/dist/assets/{csv-preview-DB8q0b_y.js → csv-preview-B0xuZwnc.js} +1 -1
  25. package/dist/assets/{debug-page-DpWI-aFX.js → debug-page-7plKE23B.js} +2 -2
  26. package/dist/assets/{deploy-dialogs-BhY-urVH.js → deploy-dialogs-Bjz3OS-8.js} +1 -1
  27. package/dist/assets/{deploy-store-OFWDAEgC.js → deploy-store-BGcHwvB5.js} +1 -1
  28. package/dist/assets/{detail-card-Dsnf52vg.js → detail-card-hWrhardR.js} +1 -1
  29. package/dist/assets/{detail-drawer-AKY7keIJ.js → detail-drawer-s-zfqqMy.js} +1 -1
  30. package/dist/assets/{detail-panel-stop-button-Cvnn4hYA.js → detail-panel-stop-button-CC6QoK-R.js} +1 -1
  31. package/dist/assets/{detail-shell-g6Pw4jiP.js → detail-shell-PCaxY4Tf.js} +1 -1
  32. package/dist/assets/{developer-page-CSFTdMiT.js → developer-page-CV5m0xk-.js} +1 -1
  33. package/dist/assets/{document-viewer-container-Bousf9D9.js → document-viewer-container-wjJ6ACJv.js} +2 -2
  34. package/dist/assets/{document-viewer-page-CJuMnNZk.js → document-viewer-page-C8YfZSmS.js} +1 -1
  35. package/dist/assets/{emails-page-CMoX6WSY.js → emails-page-BqvrSqnK.js} +1 -1
  36. package/dist/assets/{file-editor-BwWJX7zO.js → file-editor-DOnVeKOG.js} +1 -1
  37. package/dist/assets/file-markdown-CGC6ZrPT.js +2 -0
  38. package/dist/assets/{first-run-scope-jh9sT0_v.js → first-run-scope-DKd0ZevK.js} +1 -1
  39. package/dist/assets/{general-page-Biad-auh.js → general-page-C7kX0xLP.js} +1 -1
  40. package/dist/assets/{hatching-screen-DtMbgBm6.js → hatching-screen-Dws0nCOf.js} +1 -1
  41. package/dist/assets/{home-page-route-k81d1Zsb.js → home-page-route-Qs5WbFPD.js} +1 -1
  42. package/dist/assets/home-tool-permission-card-Do3YeiVC.js +1 -0
  43. package/dist/assets/{hosting-screen-C-6MdEhq.js → hosting-screen-BJB_azfa.js} +1 -1
  44. package/dist/assets/{identity-page-route-BEobbSBV.js → identity-page-route-uZNXQbMq.js} +1 -1
  45. package/dist/assets/{index-BI5VpYa-.js → index-DRExgbkb.js} +1 -1
  46. package/dist/assets/index-Q1K0w5kB.css +2 -0
  47. package/dist/assets/{inspect-page-BSPJgPij.js → inspect-page-C1dITgHA.js} +1 -1
  48. package/dist/assets/{integrations-page-DNYDhZHQ.js → integrations-page-D4EH9FG0.js} +1 -1
  49. package/dist/assets/{intelligence-layout-CDcBeu8K.js → intelligence-layout-ByKfD_gm.js} +1 -1
  50. package/dist/assets/{library-detail-page-D5EeSRdZ.js → library-detail-page-BciW_57s.js} +1 -1
  51. package/dist/assets/{library-page-wPVeE7u1.js → library-page-CMO0VZux.js} +1 -1
  52. package/dist/assets/{local-runtime-upgrade-DyHUCz7A.js → local-runtime-upgrade-CXKbgZ4c.js} +1 -1
  53. package/dist/assets/{login-flow-B8CUFAeg.js → login-flow-CN5J4YsY.js} +1 -1
  54. package/dist/assets/{login-page-BgXMUzWB.js → login-page-5jtwkaF1.js} +1 -1
  55. package/dist/assets/{logout-page-COe8dRLu.js → logout-page-Bz0x8UvE.js} +1 -1
  56. package/dist/assets/{logs-layout-BGd_aSZ_.js → logs-layout-B_GC1zBM.js} +1 -1
  57. package/dist/assets/{memory-page-route-BGEmbUCl.js → memory-page-route-BtL6zJZb.js} +1 -1
  58. package/dist/assets/{memory-router-playground-page-B4DX4CON.js → memory-router-playground-page-e4uW8QiT.js} +1 -1
  59. package/dist/assets/{message-files-panel-DTDXhD0C.js → message-files-panel-DxmbSrm8.js} +1 -1
  60. package/dist/assets/{messages-D2OJUCHs.js → messages-DSdy6Lfi.js} +1 -1
  61. package/dist/assets/{metric-card-DgbUgyv7.js → metric-card-BSJPacNm.js} +1 -1
  62. package/dist/assets/{mobile-sidebar-drawer-CRXVtqcP.js → mobile-sidebar-drawer-BGHwfePU.js} +1 -1
  63. package/dist/assets/{multi-activity-group-Chyfm08f.js → multi-activity-group-D_OVaru-.js} +1 -1
  64. package/dist/assets/{open-workspace-file-C4HWMBzn.js → open-workspace-file-DViQQLp4.js} +2 -2
  65. package/dist/assets/{page-shell-CkfnwmIw.js → page-shell-Tpt9AIL2.js} +1 -1
  66. package/dist/assets/{personality-page-CEbJMhDR.js → personality-page-avdvL3Dx.js} +1 -1
  67. package/dist/assets/{plans-page-DXCrcLo8.js → plans-page-CdNdqHks.js} +1 -1
  68. package/dist/assets/{platform-login-notice-CIpebDVw.js → platform-login-notice-BEDBlins.js} +1 -1
  69. package/dist/assets/{platform-loopback-page-BJf6yE-E.js → platform-loopback-page-DcHVugCF.js} +1 -1
  70. package/dist/assets/{preview-error-CihmwI1t.js → preview-error-CVMngD78.js} +1 -1
  71. package/dist/assets/{privacy-page-CxAYEG0r.js → privacy-page-CfJXPReU.js} +1 -1
  72. package/dist/assets/{privacy-screen-DAzWoGQI.js → privacy-screen-4GElE18b.js} +1 -1
  73. package/dist/assets/{provider-callback-page--oWycq5i.js → provider-callback-page-rNJpxKm4.js} +1 -1
  74. package/dist/assets/{provider-signup-page-BaGT8Jl4.js → provider-signup-page-BG-fVW-J.js} +1 -1
  75. package/dist/assets/{remove-from-device-dialog-C0eaWxwl.js → remove-from-device-dialog-BGqwuQw9.js} +1 -1
  76. package/dist/assets/{research-onboarding-route-CXimVFK6.js → research-onboarding-route-s_8BLTOQ.js} +1 -1
  77. package/dist/assets/{retire-confirm-dialog-B1bvTlHS.js → retire-confirm-dialog-Bm7A3sZF.js} +1 -1
  78. package/dist/assets/{review-terms-screen-BxxGJL-B.js → review-terms-screen-CpWYZlRr.js} +1 -1
  79. package/dist/assets/routes-DE2XWIds.js +23 -0
  80. package/dist/assets/{runtime-upgrade-banner--bSmfygH.js → runtime-upgrade-banner-DtzsX2m0.js} +1 -1
  81. package/dist/assets/{sandbox-bridge-BlniBIsp.js → sandbox-bridge-WZhWtkZd.js} +1 -1
  82. package/dist/assets/{schedules-page-DCUj-YbP.js → schedules-page-Cfala7Km.js} +1 -1
  83. package/dist/assets/{select-assistant-screen-C5Cl_pCp.js → select-assistant-screen-BqObBI5Z.js} +1 -1
  84. package/dist/assets/{settings-divider-BuDc875f.js → settings-divider-Dyvf7Uk6.js} +1 -1
  85. package/dist/assets/{settings-layout-Clnlm1aB.js → settings-layout-DfPO11SQ.js} +1 -1
  86. package/dist/assets/{settings-navigation-Cn3KCxOe.js → settings-navigation-C1wEuU56.js} +1 -1
  87. package/dist/assets/{share-feedback-modal-COUhsUqF.js → share-feedback-modal-Ctgazbnj.js} +1 -1
  88. package/dist/assets/{sidebar-tree-BXbcoj07.js → sidebar-tree-VXRWtsy4.js} +1 -1
  89. package/dist/assets/{signup-page-C9ZrCSVo.js → signup-page-CLf-r4oP.js} +1 -1
  90. package/dist/assets/{site-favicon-B3DMFtr3.js → site-favicon-DfuXzZcN.js} +1 -1
  91. package/dist/assets/{skill-detail-page-Ckw6_1PG.js → skill-detail-page-ChpWru-e.js} +2 -2
  92. package/dist/assets/{skill-detail-panel-DdYbYHuj.js → skill-detail-panel-DU0bdJUl.js} +1 -1
  93. package/dist/assets/{skills-Lf85mR9L.js → skills-B4bfakyU.js} +1 -1
  94. package/dist/assets/{src-hNk11eS3.js → src-DyqTPMO2.js} +1 -1
  95. package/dist/assets/{stt-language-picker-modal-B5MO-3gk.js → stt-language-picker-modal-BiWHaqFq.js} +1 -1
  96. package/dist/assets/{subagent-detail-panel-BKhU7VAv.js → subagent-detail-panel-Gi0UOlsn.js} +1 -1
  97. package/dist/assets/superpowers-page-nHT_hb33.js +1 -0
  98. package/dist/assets/{system-events-page-DbcoH4sh.js → system-events-page-Bfpn0HzE.js} +1 -1
  99. package/dist/assets/{telegram-setup-wizard-C4E0wi1B.js → telegram-setup-wizard-GetgaQy5.js} +1 -1
  100. package/dist/assets/{text-preview-KOyX3OrO.js → text-preview-CEL0P-WV.js} +1 -1
  101. package/dist/assets/{theme-stage-page-D4DYc_C8.js → theme-stage-page-CEBFiy-u.js} +1 -1
  102. package/dist/assets/{tiptap-document-editor-CDIJTTa_.js → tiptap-document-editor-DPkcv0pe.js} +1 -1
  103. package/dist/assets/{tool-detail-panel-CmbBw4_n.js → tool-detail-panel-84bl2nI3.js} +1 -1
  104. package/dist/assets/{upgrade-cancel-page-DfjtkvP9.js → upgrade-cancel-page-DNteIqqS.js} +1 -1
  105. package/dist/assets/{upgrade-success-page-BDWg5oK4.js → upgrade-success-page-CAeO4QtE.js} +1 -1
  106. package/dist/assets/{use-assistant-identity-details-BAgi4MHa.js → use-assistant-identity-details-DqiKjphK.js} +1 -1
  107. package/dist/assets/{use-attachment-preview-CB3GsEns.js → use-attachment-preview-B4PALbqs.js} +1 -1
  108. package/dist/assets/{use-attachment-squares-DPuVHGRC.js → use-attachment-squares-C-9Rz-8O.js} +1 -1
  109. package/dist/assets/{use-bookmarks-C6IlHWIK.js → use-bookmarks-BWGVUg59.js} +1 -1
  110. package/dist/assets/{use-checkout-dismiss-refresh-CDwSKr1-.js → use-checkout-dismiss-refresh-BGeYbYii.js} +1 -1
  111. package/dist/assets/{use-command-palette-sections-DXzS2Tio.js → use-command-palette-sections-D3aj-BzX.js} +1 -1
  112. package/dist/assets/{use-edge-swipe-back-ZgANxgKE.js → use-edge-swipe-back-BGq52vVr.js} +2 -2
  113. package/dist/assets/{use-edit-app-BHUYCv4X.js → use-edit-app-u-kyfEFX.js} +1 -1
  114. package/dist/assets/{use-invite-link-dialog-CdY5FNQa.js → use-invite-link-dialog-Ccf_XNV3.js} +1 -1
  115. package/dist/assets/{use-is-org-ready-BmOdacs1.js → use-is-org-ready-CQntk0MX.js} +1 -1
  116. package/dist/assets/{use-onboarding-login-BUaNGE_u.js → use-onboarding-login-Cw_9Ydsv.js} +1 -1
  117. package/dist/assets/{use-platform-assistant-id-CEMyKEvV.js → use-platform-assistant-id-DMP9urFb.js} +1 -1
  118. package/dist/assets/{use-platform-gate-CdwOyQ8A.js → use-platform-gate-2lhRAyKS.js} +1 -1
  119. package/dist/assets/{use-return-to-short-circuit-CTYRB2Ne.js → use-return-to-short-circuit-Dm5PWev2.js} +1 -1
  120. package/dist/assets/{use-skill-actions-GbdM3IIw.js → use-skill-actions-BopRxJ9x.js} +1 -1
  121. package/dist/assets/{use-sticky-profiles-LVe9u5gh.js → use-sticky-profiles-5cPu_MUo.js} +1 -1
  122. package/dist/assets/{use-subagent-card-data-CFKl88ab.js → use-subagent-card-data-VnA5x24X.js} +1 -1
  123. package/dist/assets/use-transcript-message-by-id-DCOlEJjY.js +1 -0
  124. package/dist/assets/{use-transcript-messages-vw2Hogaj.js → use-transcript-messages-BEpY7uG4.js} +1 -1
  125. package/dist/assets/{use-voice-sample-preview-BjIqIVEG.js → use-voice-sample-preview-CzqJYPiZ.js} +1 -1
  126. package/dist/assets/{viewer-store-DhrkeZmJ.js → viewer-store-CayI6XWh.js} +1 -1
  127. package/dist/assets/{voice-list-DnqRx15F.js → voice-list-BS2BNjKN.js} +1 -1
  128. package/dist/assets/{voice-page-CrrYAE9k.js → voice-page-B7t0g-1X.js} +1 -1
  129. package/dist/assets/{voice-providers-note-ValSs0nz.js → voice-providers-note-Cv7vCsDI.js} +1 -1
  130. package/dist/assets/{welcome-screen-CiBqE53u.js → welcome-screen-eqR0DNzE.js} +1 -1
  131. package/dist/assets/{workflow-detail-panel-crM7HRfK.js → workflow-detail-panel-Dlj8i7AM.js} +1 -1
  132. package/dist/assets/{workspace-page-iAsgehav.js → workspace-page-CAbshSeb.js} +1 -1
  133. package/dist/index.html +46 -46
  134. package/package.json +1 -1
  135. package/dist/assets/billing-page-n2hU_EAj.js +0 -3
  136. package/dist/assets/chat-markdown-message-WfT4JUja.js +0 -1
  137. package/dist/assets/file-markdown-CZPyyZhu.js +0 -2
  138. package/dist/assets/home-tool-permission-card-Bytpm6bE.js +0 -1
  139. package/dist/assets/index-_S2T-6in.css +0 -2
  140. package/dist/assets/routes-ZeXUrnzY.js +0 -23
  141. package/dist/assets/superpowers-page-gPiU1fsq.js +0 -1
  142. package/dist/assets/use-transcript-message-by-id-cDbEJMB-.js +0 -1
@@ -1,4 +1,4 @@
1
- import{o as e}from"./chunk-jRWAZmH_.js";import{t}from"./react-BFJW0bSv.js";import{t as n}from"./button-BENY-yx_.js";import{d as r,h as i,t as a}from"./chunk-5KNZJZUH-BUqIilZr.js";import{n as o}from"./QueryClientProvider-CMu7CkQU.js";import{t as s}from"./useQuery-Bz-fbQ-m.js";import{t as c}from"./useMutation-CXGTrp4W.js";import{t as l}from"./jsx-runtime-D3ZM-ToX.js";import{t as u}from"./cn-DFWryB3N.js";import{t as d}from"./typography-BeUa5Fd-.js";import{t as f}from"./card-q0GJX1HZ.js";import{_ as p,c as m,d as h,g,l as _,o as v,p as y,x as b}from"./use-save-twilio-credentials-D5Zb65WS.js";import{t as x}from"./chevron-down-CrFV6lfm.js";import{t as S}from"./circle-check-big-CpoRGdNz.js";import{H as C,P as w,V as T,a as E,o as D,r as O}from"./src-hNk11eS3.js";import{o as k,r as A,t as j,u as M}from"./threshold-presets-DgMnAyqn.js";import{t as N}from"./message-square-BjBDqFUX.js";import{t as P}from"./search-D2xMZu1P.js";import{t as F}from"./notice-C0ifrvvJ.js";import{t as I}from"./tag-DeMzQvCo.js";import{t as L}from"./input-DmHXRXaB.js";import{t as R}from"./confirm-dialog-zx8L9sUi.js";import{t as z}from"./select-B8-i-CZ4.js";import{n as ee,t as te}from"./create-selectors-DBgi9gD3.js";import{t as ne}from"./assistant-identity-store-nE-e8KQw.js";import{i as re}from"./utils-CVoSWh7U.js";import{d as ie}from"./routes-iipg2wkc.js";import{n as ae}from"./conversation-navigation-DbQqV_fs.js";import{i as oe,o as se,r as ce}from"./sdk.gen-CAngxL4a.js";import{t as le}from"./assistant-feature-flag-store-qYfAdlBG.js";import{t as ue}from"./public-asset-CZ7NhuGg.js";import{t as de}from"./use-active-assistant-id-BvHP5Ojg.js";import{n as fe,t as pe}from"./telegram-setup-wizard-C4E0wi1B.js";import{t as me}from"./index-BI5VpYa-.js";import{t as he}from"./detail-card-Dsnf52vg.js";import{n as ge,t as _e}from"./mobile-sidebar-drawer-CRXVtqcP.js";import{a as B,c as ve,i as ye,l as be,n as xe,r as Se,s as Ce,t as we}from"./use-invite-link-dialog-CdY5FNQa.js";var V=e(t(),1),H=te(ee()(e=>({selectedAdapter:`slack`,selectAdapter:t=>e({selectedAdapter:t})}))),U={slack:{label:`Slack`,disconnectMessage:`This clears the stored Slack bot and app tokens for this assistant. You can reconnect later.`,hasTrustFloorControl:!1},telegram:{label:`Telegram`,disconnectMessage:`This clears the stored Telegram bot token for this assistant. You can reconnect later.`,hasTrustFloorControl:!0,disconnectedPitch:e=>`Connect a Telegram bot so ${e} can send and receive messages on Telegram.`},phone:{label:`Phone Calling`,disconnectMessage:`This clears the stored Twilio credentials for this assistant. You can reconnect later.`,hasTrustFloorControl:!0,disconnectedPitch:e=>`Connect your Twilio account so ${e} can make and answer phone calls.`}},W=l();function G({channels:e,selectedKey:t,onSelect:n}){return(0,W.jsx)(f.Root,{className:`flex h-full flex-col overflow-hidden`,children:(0,W.jsx)(f.Body,{className:`flex min-h-0 min-w-0 flex-1 flex-col gap-4`,children:(0,W.jsx)(`div`,{className:`flex flex-col gap-1`,children:e.map(e=>(0,W.jsx)(Te,{channel:e,selected:e.key===t,onClick:()=>n(e.key)},e.key))})})})}function Te({channel:e,selected:t,onClick:n}){let r=e.status===`ready`,i=h(e.key),a=r?`Connected`:`Not connected`;return(0,W.jsx)(w,{asChild:!0,active:t,label:`${i}, ${a}`,children:(0,W.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,W.jsx)(_,{channelId:e.key,className:`h-4 w-4 shrink-0 text-[color:var(--content-secondary)]`}),(0,W.jsx)(`span`,{className:`min-w-0 flex-1 truncate text-body-medium-default`,children:i}),(0,W.jsx)(`span`,{className:`flex shrink-0 items-center`,children:(0,W.jsx)(I,{tone:r?`positive`:`neutral`,children:a})})]})})}function K({icon:e,title:t,description:n,action:r,className:i}){return(0,W.jsxs)(`div`,{className:u(`flex flex-col items-center justify-center gap-3 px-4 py-12 text-center`,i),children:[e?(0,W.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,W.jsx)(`h3`,{className:`text-title-small text-[var(--content-default)]`,children:t}),n?(0,W.jsx)(`p`,{className:`max-w-md text-body-medium-lighter text-[color:var(--content-tertiary)]`,children:n}):null,r?(0,W.jsx)(`div`,{className:`mt-1`,children:r}):null]})}function Ee({assistantDisplayName:e,policy:t,saving:n=!1,loading:r=!1,error:i=!1,onChange:a}){let o=t??`trusted_contacts`,s=be(e),c=Ce.map(e=>({value:e,label:ve[e],tooltip:s[e]}));return(0,W.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,W.jsxs)(d,{as:`span`,variant:`body-small-emphasised`,className:`text-[color:var(--content-secondary)]`,children:[`Who can message `,e]}),r?(0,W.jsx)(d,{as:`span`,variant:`body-small-lighter`,className:`text-[color:var(--content-tertiary)]`,children:`Loading…`}):i?(0,W.jsx)(d,{as:`span`,variant:`body-small-lighter`,className:`text-[color:var(--content-negative)]`,children:`Couldn’t load this setting. Try reopening this page.`}):(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(`div`,{style:{maxWidth:280},children:(0,W.jsx)(z,{value:o,onChange:a,options:c,disabled:n,"aria-label":`Who can message ${e}`})}),(0,W.jsx)(d,{as:`span`,variant:`body-small-lighter`,className:`text-[color:var(--content-tertiary)]`,children:s[o]}),o===`trusted_contacts`?(0,W.jsxs)(F,{tone:`info`,className:`max-w-lg`,children:[`People you haven’t verified yet (even teammates in the same channel) can’t get through: `,e,` lets them know they need to be verified and notifies you. You can verify people ahead of time in Contacts.`]}):null]})]})}function De({address:e,pending:t,onDisconnect:r}){return(0,W.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,W.jsx)(I,{tone:`positive`,leftIcon:(0,W.jsx)(S,{}),children:`Connected`}),e?(0,W.jsx)(`span`,{className:`text-body-medium-lighter`,style:{color:`var(--content-tertiary)`},children:e}):null,(0,W.jsx)(`div`,{className:`ml-auto`,children:(0,W.jsx)(n,{type:`button`,variant:`danger`,onClick:r,disabled:!r||t,children:t?`Disconnecting…`:`Disconnect`})})]})}function Oe({children:e}){return(0,W.jsxs)(f.Root,{children:[(0,W.jsx)(f.Header,{children:(0,W.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,W.jsx)(`img`,{src:ue(`/images/integrations/slack.svg`),alt:``,className:`size-8 rounded-lg bg-[var(--surface-sunken)] p-1`}),(0,W.jsx)(d,{as:`span`,variant:`body-medium-default`,children:`Slack setup`})]})}),(0,W.jsx)(f.Body,{children:e})]})}j.map(e=>e.riskThreshold);var q=[`none`,`low`];function J(e){if(e!==void 0)return e===`none`?`none`:`low`}var Y={none:{label:A(`none`).label,sublabel:`asks every time`,tone:`negative`,dotColor:`var(--system-negative-strong)`},low:{label:A(`low`).label,sublabel:`safe lookups`,tone:`warning`,dotColor:`var(--system-mid-strong)`},medium:{label:A(`medium`).label,sublabel:`broader lookups`,tone:`info`,dotColor:`var(--system-info-strong)`},high:{label:A(`high`).label,sublabel:`any lookup`,tone:`positive`,dotColor:`var(--system-positive-strong)`}},X=[`trusted_contact`,`unverified_contact`,`unknown`];function ke(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 Z(e,t,n){return n===`channels`?e.selector.scope===`adapter`&&e.selector.adapter===t:e.selector.scope===`channel_type`&&e.selector.adapter===t&&e.selector.channelType===`dm`}function Ae(e,t,n){let r;for(let i of e)Z(i,t,n)&&(i.contactType===`trusted_contact`||r===void 0)&&(r=i.threshold);return r}var je=`__default__`;function Q({color:e}){return(0,W.jsx)(`span`,{"aria-hidden":`true`,className:`h-1.5 w-1.5 shrink-0 rounded-full`,style:{backgroundColor:e}})}function Me({tier:e,defaultTier:t,disabled:n,onTierChange:r,onReset:i,"aria-label":a}){let o=J(e??t??void 0),s=J(t??void 0)??null,c=q.map(e=>({value:e,label:Y[e].label,icon:(0,W.jsx)(Q,{color:Y[e].dotColor}),suffix:e===s?(0,W.jsx)(`span`,{className:`text-[color:var(--content-tertiary)]`,children:`default`}):void 0,tooltip:Y[e].sublabel}));return c.unshift({value:je,label:`Default`,icon:(0,W.jsx)(Q,{color:`transparent`}),tooltip:`follows the default level`}),(0,W.jsx)(z,{value:o??``,onChange:e=>{e===je||e===s?i():r(e)},options:c,placeholder:`Default`,disabled:n,size:`compact`,menuAlign:`end`,"aria-label":a})}function $(e){return e.type===`dm`?`dm`:e.isPrivate?`private`:`public`}function Ne(e){return e.filter(e=>$(e)!==`dm`)}function Pe(e,t,n){let r=t.trim().toLowerCase();return e.filter(e=>(n===null||$(e)===n)&&(r===``||e.name.toLowerCase().includes(r))).sort((e,t)=>e.name.localeCompare(t.name))}function Fe(e){let t={public:0,private:0,dm:0};for(let n of e)t[$(n)]+=1;return t}function Ie(e){return e.memberCount==null?null:e.memberCount===1?`1 member`:`${e.memberCount} members`}var Le=[{value:null,label:`All`},{value:`public`,label:`Public`},{value:`private`,label:`Private`}],Re={public:b,private:M},ze=100,Be=new Set;function Ve({assistantDisplayName:e,slackHandle:t,channels:n,loading:r=!1,error:i=!1,tierOverrides:a,defaultTier:o=null,accessControlsSupported:s=!0,tierOverridesLoading:c=!1,tierOverridesError:l=!1,pendingChannelIds:f=Be,onTierChange:p,onTierReset:m}){let[h,g]=(0,V.useState)(``),[_,v]=(0,V.useState)(null),y=(0,V.useMemo)(()=>Ne(n??[]),[n]),x=(0,V.useMemo)(()=>Pe(y,h,_),[y,h,_]),S=(0,V.useMemo)(()=>Fe(y),[y]),C=t??`@${e}`;return(0,W.jsxs)(`div`,{className:`flex flex-col gap-3 p-4`,children:[(0,W.jsx)(d,{as:`p`,variant:`body-small-lighter`,className:`text-[color:var(--content-tertiary)]`,children:(0,W.jsxs)(W.Fragment,{children:[`Add with`,` `,(0,W.jsxs)(`code`,{className:`text-[color:var(--content-secondary)]`,children:[`/invite `,C]}),` `,`or remove with`,` `,(0,W.jsxs)(`code`,{className:`text-[color:var(--content-secondary)]`,children:[`/remove `,C]}),` `,`in that Slack channel. Only channels `,e,` is in appear here.`]})}),r?(0,W.jsx)(d,{as:`span`,variant:`body-small-lighter`,className:`text-[color:var(--content-tertiary)]`,children:`Loading…`}):i?(0,W.jsx)(d,{as:`span`,variant:`body-small-lighter`,className:`text-[color:var(--content-negative)]`,children:`Couldn’t load channels. Try reopening this page.`}):y.length===0?(0,W.jsx)(K,{icon:(0,W.jsx)(b,{className:`h-6 w-6`}),title:`No channels yet`}):(0,W.jsxs)(W.Fragment,{children:[(0,W.jsxs)(`div`,{className:`flex flex-wrap items-center gap-3`,children:[(0,W.jsx)(`div`,{className:`min-w-56 flex-1`,children:(0,W.jsx)(L,{type:`search`,value:h,onChange:e=>g(e.target.value),placeholder:`Search channels`,"aria-label":`Search channels`,leftIcon:(0,W.jsx)(P,{className:`h-4 w-4`}),fullWidth:!0})}),(0,W.jsx)(`div`,{className:`flex items-center gap-2`,role:`group`,"aria-label":`Filter channels by type`,children:Le.map(({value:e,label:t})=>{let n=_===e,r=e===null?y.length:S[e];return(0,W.jsxs)(`button`,{type:`button`,"aria-pressed":n,onClick:()=>v(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`)})})]}),x.length===0?(0,W.jsx)(d,{as:`span`,variant:`body-small-lighter`,className:`py-4 text-center text-[color:var(--content-tertiary)]`,children:`No channels match.`}):x.length>ze?(0,W.jsx)(`div`,{className:`h-96`,children:(0,W.jsx)(D,{items:x,computeItemKey:(e,t)=>t.id,itemContent:(e,t)=>(0,W.jsx)(He,{channel:t,pending:f.has(t.id),overridesLoading:c,overridesError:l,defaultTier:o,accessControls:s,tierOverride:a?.[t.id],onTierChange:e=>p?.(t.id,e),onReset:()=>m?.(t.id)}),className:`h-full`})}):(0,W.jsx)(`div`,{className:`max-h-96 overflow-y-auto`,children:x.map(e=>(0,W.jsx)(He,{channel:e,pending:f.has(e.id),overridesLoading:c,overridesError:l,defaultTier:o,accessControls:s,tierOverride:a?.[e.id],onTierChange:t=>p?.(e.id,t),onReset:()=>m?.(e.id)},e.id))})]})]})}function He({channel:e,pending:t,overridesLoading:n,overridesError:r,defaultTier:i,accessControls:a,tierOverride:o,onTierChange:s,onReset:c}){let l=$(e);if(l===`dm`)return null;let u=Re[l],d=Ie(e),f=`[&+&]:border-t [&+&]:border-[var(--border-base)]`;return a?(0,W.jsx)(O,{className:f,leading:(0,W.jsx)(u,{className:`h-4 w-4 text-[var(--content-tertiary)]`}),title:e.name,subtitle:d??void 0,trailing:(0,W.jsx)(`div`,{className:`w-40 sm:w-48`,children:(0,W.jsx)(Me,{tier:o,defaultTier:i,disabled:t||n||r,onTierChange:s,onReset:c,"aria-label":`Assistant Access in ${e.name}`})})}):(0,W.jsx)(O,{className:f,leading:(0,W.jsx)(u,{className:`h-4 w-4 text-[var(--content-tertiary)]`}),title:e.name,trailing:d==null?void 0:(0,W.jsx)(`span`,{className:`text-body-small-default text-[color:var(--content-tertiary)]`,children:d})})}function Ue(e){return e===`none`?`Asks before every action, even a web search.`:`Asks before anything beyond looking things up and saving files in its own workspace.`}function We({defaultTier:e}){let t=J(e??void 0)??null;return(0,W.jsx)(`div`,{className:`flex flex-col gap-2 px-4 py-3`,children:(0,W.jsx)(`ul`,{className:`grid gap-x-6 gap-y-3 sm:grid-cols-2`,children:[...q].reverse().map(e=>{let n=Y[e];return(0,W.jsxs)(`li`,{className:`flex flex-col gap-0.5`,children:[(0,W.jsxs)(`span`,{className:`flex items-center gap-1.5`,children:[(0,W.jsx)(Q,{color:n.dotColor}),(0,W.jsx)(d,{as:`span`,variant:`body-small-emphasised`,children:n.label}),e===t?(0,W.jsx)(d,{as:`span`,variant:`body-small-default`,className:`text-[color:var(--content-tertiary)]`,children:`· default`}):null]}),(0,W.jsx)(d,{as:`span`,variant:`body-small-lighter`,className:`text-[color:var(--content-tertiary)]`,children:Ue(e)})]},e)})})})}var Ge=[{bucket:`channels`,icon:b,title:`Channels`,description:`Public and private channels`},{bucket:`dm`,icon:N,title:`Direct messages`,description:`One-on-one DMs`}];function Ke({assistantName:e,globalDefaultTier:t,bucketTiers:n,loading:r,error:i,pendingBuckets:o,onBucketChange:s,onBucketReset:c}){return(0,W.jsxs)(f.Root,{children:[(0,W.jsx)(f.Header,{children:(0,W.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[`Default access`,(0,W.jsxs)(d,{as:`p`,variant:`body-small-lighter`,className:`text-[color:var(--content-tertiary)]`,children:[`How much `,e,` does on its own, by conversation type. Individual channels can override this below, and`,` `,(0,W.jsx)(a,{to:ie.settings.privacy,className:`text-[var(--content-link)] underline hover:text-[var(--content-link-hover)]`,children:`Trust Rules`}),` `,`fine-tune when it asks.`]})]})}),(0,W.jsx)(f.Body,{className:`py-1`,children:Ge.map(({bucket:e,icon:a,title:l,description:u})=>{let d=e===`dm`?n?.channels??t:t;return(0,W.jsx)(O,{className:`[&+&]:border-t [&+&]:border-[var(--border-base)]`,leading:(0,W.jsx)(a,{className:`h-4 w-4 text-[var(--content-tertiary)]`}),title:l,subtitle:u,trailing:(0,W.jsx)(`div`,{className:`w-40 sm:w-48`,children:(0,W.jsx)(Me,{tier:n?.[e],defaultTier:d,disabled:r||i||o.has(e),onTierChange:t=>s(e,t),onReset:()=>c(e),"aria-label":`Default Assistant Access for ${l}`})})},e)})}),(0,W.jsx)(f.Footer,{className:`p-0`,children:(0,W.jsx)(We,{defaultTier:t})})]})}var qe=`0.11.0`;function Je(){return re(qe)}var Ye=new Set([404,501]);function Xe(e){let t=me(e);return t!==void 0&&Ye.has(t)}function Ze(e,t,n){return X.map(r=>({selector:{scope:`channel`,adapter:e,channelExternalId:t},contactType:r,threshold:n}))}function Qe(e,t,n){return e.selector.scope===`channel`&&e.selector.adapter===t&&e.selector.channelExternalId===n}function $e(e,t){return t===`channels`?{scope:`adapter`,adapter:e}:{scope:`channel_type`,adapter:e,channelType:`dm`}}function et(e,t,n){let r=$e(e,t);return X.map(e=>({selector:r,contactType:e,threshold:n}))}function tt({assistantId:e,adapter:t}){let n=o(),r=Je()&&!!e,i=(0,V.useMemo)(()=>({path:{assistant_id:e}}),[e]),a=(0,V.useMemo)(()=>p(i),[i]),l=(0,V.useMemo)(()=>[`channel-permission-resolve`,e,t],[e,t]),u=s({...g(i),enabled:r}),d=u.data?.cells,f=(0,V.useMemo)(()=>d?ke(d,t):void 0,[d,t]),m=(0,V.useMemo)(()=>d?{channels:Ae(d,t,`channels`),dm:Ae(d,t,`dm`)}:void 0,[d,t]),h=s({queryKey:l,queryFn:async()=>{let{data:e}=await se({...i,body:{adapter:t,contactType:`trusted_contact`},throwOnError:!0});return e.resolved?.threshold??null},enabled:r,retry:!1,staleTime:3e4}),_=(e,t)=>{let r=n.getQueryData(a),i=Date.now();return n.setQueryData(a,n=>({cells:[...(n?.cells??[]).filter(t=>!e(t)),...t.map(e=>({...e,updatedAt:i}))]})),{previous:r}},v=c({mutationFn:async({channelExternalId:e,tier:n})=>{await Promise.all(Ze(t,e,n).map(e=>oe({...i,body:e,throwOnError:!0})))},onMutate:({channelExternalId:e,tier:n})=>_(n=>Qe(n,t,e),Ze(t,e,n)),onError:(e,t,r)=>{n.setQueryData(a,r?.previous),B(`Failed to save channel settings`)(e)},onSettled:()=>n.invalidateQueries({queryKey:a})}),y=c({mutationFn:async({channelExternalId:e})=>{await Promise.all(X.map(n=>ce({...i,body:{selector:{scope:`channel`,adapter:t,channelExternalId:e},contactType:n},throwOnError:!0})))},onMutate:({channelExternalId:e})=>_(n=>Qe(n,t,e),[]),onError:(e,t,r)=>{n.setQueryData(a,r?.previous),B(`Failed to reset channel settings`)(e)},onSettled:()=>n.invalidateQueries({queryKey:a})}),b=c({mutationFn:async({bucket:e,tier:n})=>{await Promise.all(et(t,e,n).map(e=>oe({...i,body:e,throwOnError:!0})))},onMutate:({bucket:e,tier:n})=>_(n=>Z(n,t,e),et(t,e,n)),onError:(e,t,r)=>{n.setQueryData(a,r?.previous),B(`Failed to save the default`)(e)},onSettled:(e,t,{bucket:r})=>{n.invalidateQueries({queryKey:a}),r===`channels`&&n.invalidateQueries({queryKey:l})}}),x=c({mutationFn:async({bucket:e})=>{let n=$e(t,e);await Promise.all(X.map(e=>ce({...i,body:{selector:n,contactType:e},throwOnError:!0})))},onMutate:({bucket:e})=>_(n=>Z(n,t,e),[]),onError:(e,t,r)=>{n.setQueryData(a,r?.previous),B(`Failed to reset the default`)(e)},onSettled:(e,t,{bucket:r})=>{n.invalidateQueries({queryKey:a}),r===`channels`&&n.invalidateQueries({queryKey:l})}}),S=(0,V.useMemo)(()=>{let e=new Set;return v.isPending&&v.variables&&e.add(v.variables.channelExternalId),y.isPending&&y.variables&&e.add(y.variables.channelExternalId),e},[v.isPending,v.variables,y.isPending,y.variables]),C=(0,V.useMemo)(()=>{let e=new Set;return b.isPending&&b.variables&&e.add(b.variables.bucket),x.isPending&&x.variables&&e.add(x.variables.bucket),e},[b.isPending,b.variables,x.isPending,x.variables]);return!r||u.isError&&Xe(u.error)?{supported:!1,tierOverrides:void 0,defaultCellTier:void 0,bucketTiers:void 0,pendingChannelIds:new Set,pendingBuckets:new Set,isLoading:!1,isError:!1,onTierChange:void 0,onTierReset:void 0,onBucketChange:void 0,onBucketReset:void 0}:{supported:!0,tierOverrides:f,defaultCellTier:h.data,bucketTiers:m,pendingChannelIds:S,pendingBuckets:C,isLoading:u.isPending,isError:u.isError,onTierChange:(e,t)=>v.mutate({channelExternalId:e,tier:t}),onTierReset:e=>{f?.[e]!==void 0&&y.mutate({channelExternalId:e})},onBucketChange:(e,t)=>b.mutate({bucket:e,tier:t}),onBucketReset:e=>{m?.[e]!==void 0&&x.mutate({bucket:e})}}}function nt({assistantId:e,assistantDisplayName:t,slackHandle:n}){let r=s({...v(e),enabled:!!e,select:e=>e.channels}),i=tt({assistantId:e,adapter:`slack`}),a=s({queryKey:[`thresholds`,e],queryFn:()=>k(e),enabled:i.supported&&!!e,staleTime:3e4}).data?.interactive??null,o=i.defaultCellTier===void 0?null:i.defaultCellTier??a,c=(0,W.jsx)(Ve,{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});return!i.supported||!i.onBucketChange||!i.onBucketReset?(0,W.jsx)(f.Root,{noPadding:!0,clipContents:!0,children:c}):(0,W.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[i.isError?(0,W.jsx)(F,{tone:`error`,children:`Couldn’t load access settings. These controls stay disabled until they load. Try reopening this page.`}):null,(0,W.jsx)(Ke,{assistantName:t,globalDefaultTier:a,bucketTiers:i.bucketTiers,loading:i.isLoading,error:i.isError,pendingBuckets:i.pendingBuckets,onBucketChange:i.onBucketChange,onBucketReset:i.onBucketReset}),(0,W.jsx)(f.Root,{noPadding:!0,clipContents:!0,children:(0,W.jsx)(E.Root,{type:`single`,collapsible:!0,children:(0,W.jsxs)(E.Item,{value:`per-channel-overrides`,children:[(0,W.jsxs)(E.Trigger,{className:`group justify-between gap-2 px-4 py-3`,children:[(0,W.jsx)(d,{as:`span`,variant:`body-small-emphasised`,children:`Per-channel overrides`}),(0,W.jsx)(x,{"aria-hidden":`true`,className:`h-4 w-4 shrink-0 text-[var(--content-tertiary)] transition-transform group-data-[state=open]:rotate-180`})]}),(0,W.jsx)(E.Content,{className:`border-[var(--border-base)] data-[state=open]:border-t`,children:c})]})})})]})}function rt({slackHandle:e,disconnectPending:t=!1,onDisconnect:r,children:i}){return(0,W.jsxs)(f.Root,{children:[(0,W.jsx)(f.Header,{children:(0,W.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,W.jsx)(`img`,{src:ue(`/images/integrations/slack.svg`),alt:``,className:`size-8 rounded-lg bg-[var(--surface-sunken)] p-1`}),e?(0,W.jsx)(d,{as:`span`,variant:`body-medium-default`,children:e}):null,(0,W.jsx)(I,{tone:`positive`,leftIcon:(0,W.jsx)(S,{}),children:`Connected`}),(0,W.jsx)(`div`,{className:`ml-auto`,children:(0,W.jsx)(n,{type:`button`,variant:`ghost`,onClick:r,disabled:!r||t,children:t?`Disconnecting…`:`Disconnect`})})]})}),(0,W.jsx)(f.Body,{children:i})]})}function it({threadMode:e,threadModePending:t=!1,onThreadModeChange:n}){return(0,W.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[(0,W.jsx)(d,{as:`span`,variant:`body-small-emphasised`,className:`text-[color:var(--content-secondary)]`,children:`Thread Behavior`}),(0,W.jsxs)(C,{value:e??`mention_then_thread`,onValueChange:e=>n?.(e),disabled:t||!n,"aria-label":`Slack thread behavior`,children:[(0,W.jsx)(T,{value:`mention_only`,label:`Mentions only`,helperText:`Bot only responds when @mentioned.`}),(0,W.jsx)(T,{value:`mention_then_thread`,label:`Follow threads after first mention`,helperText:`After an @mention in a thread, bot listens to all subsequent replies.`})]})]})}function at({onSave:e}){let[t,r]=(0,V.useState)(``),[i,a]=(0,V.useState)(``),[o,s]=(0,V.useState)(!1),[c,l]=(0,V.useState)(null),u=t.trim().length>0&&i.trim().length>0&&!o;return(0,W.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[(0,W.jsx)(L,{label:`Account SID`,type:`text`,value:t,onChange:e=>r(e.target.value),placeholder:`ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx`,disabled:o,fullWidth:!0}),(0,W.jsx)(L,{label:`Auth Token`,type:`password`,value:i,onChange:e=>a(e.target.value),placeholder:`Twilio auth token`,disabled:o,fullWidth:!0}),c?(0,W.jsx)(`p`,{className:`text-label-small`,style:{color:`var(--content-negative)`},children:c}):null,(0,W.jsx)(`div`,{children:(0,W.jsx)(n,{type:`button`,onClick:async()=>{if(!(!e||!u)){s(!0),l(null);try{await e(t.trim(),i.trim()),r(``),a(``)}catch(e){l(e instanceof Error?e.message:`Failed to save`)}finally{s(!1)}}},disabled:!u,children:o?`Saving…`:`Save`})})]})}function ot({channel:e,assistantId:t,assistantName:r,assistantDisplayName:i,pending:a,initialManualEntry:o=!1,onSetup:s,onDisconnect:c,onSaveTelegramToken:l,telegramSaveStatus:u,telegramSaveError:d,onSaveSlackConfig:f,slackSaveStatus:p,slackSaveError:m,slackThreadMode:g,slackThreadModePending:v=!1,onSlackThreadModeChange:y,onSaveTwilioCredentials:b,policy:x,policySaving:S=!1,policyLoading:C=!1,policyError:w=!1,onPolicyChange:T}){let E=e.status===`ready`,D=e.status===`incomplete`,[O,k]=(0,V.useState)(o);if(e.key===`slack`)return(0,W.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[E?(0,W.jsx)(rt,{slackHandle:e.address,disconnectPending:a,onDisconnect:c,children:(0,W.jsx)(it,{threadMode:g,threadModePending:v,onThreadModeChange:y})}):(0,W.jsx)(Oe,{children:(0,W.jsx)(fe,{assistantName:r,onSave:f,saveStatus:p,saveError:m})}),E?(0,W.jsx)(nt,{assistantId:t,assistantDisplayName:i,slackHandle:e.address}):null]});let A=U[e.key];return(0,W.jsx)(`div`,{className:`flex flex-col gap-4`,children:E?(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(De,{address:e.address,pending:a,onDisconnect:c}),A.hasTrustFloorControl&&T?(0,W.jsx)(Ee,{assistantDisplayName:i,policy:x,saving:S,loading:C,error:w,onChange:T}):null]}):O?e.key===`telegram`?(0,W.jsx)(pe,{assistantName:r,saveStatus:u,saveError:d,onSave:l}):(0,W.jsx)(at,{onSave:b}):(0,W.jsx)(K,{icon:(0,W.jsx)(_,{channelId:e.key,className:`h-6 w-6`}),title:D?`${h(e.key)} isn't working yet`:`${h(e.key)} isn't connected`,description:D?e.warning??`${h(e.key)} is set up but not delivering messages yet. Your assistant can pick up where setup left off and tell you what is wrong.`:A.disconnectedPitch?.(i),action:(0,W.jsxs)(`div`,{className:`flex flex-col items-center gap-1`,children:[(0,W.jsx)(n,{type:`button`,variant:`outlined`,onClick:s,disabled:!s||a,children:a?`Opening…`:D?`Finish setup with your assistant`:`Set up`}),(0,W.jsx)(n,{type:`button`,variant:`link`,onClick:()=>k(!0),children:`or connect manually`})]})})})}var st={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-BFJW0bSv.js";import{t as n}from"./button-BENY-yx_.js";import{d as r,h as i,t as a}from"./chunk-5KNZJZUH-BUqIilZr.js";import{n as o}from"./QueryClientProvider-CMu7CkQU.js";import{t as s}from"./useQuery-Bz-fbQ-m.js";import{t as c}from"./useMutation-CXGTrp4W.js";import{t as l}from"./jsx-runtime-D3ZM-ToX.js";import{t as u}from"./cn-DFWryB3N.js";import{t as d}from"./typography-BeUa5Fd-.js";import{t as f}from"./card-q0GJX1HZ.js";import{_ as p,c as m,d as h,g,l as _,o as v,p as y,x as b}from"./use-save-twilio-credentials-D5Zb65WS.js";import{t as x}from"./chevron-down-CrFV6lfm.js";import{t as S}from"./circle-check-big-CpoRGdNz.js";import{F as C,H as w,U as T,i as E,o as D,s as O}from"./src-DyqTPMO2.js";import{o as k,r as A,t as j,u as M}from"./threshold-presets-DgMnAyqn.js";import{t as N}from"./message-square-BjBDqFUX.js";import{t as P}from"./search-D2xMZu1P.js";import{t as F}from"./notice-C0ifrvvJ.js";import{t as I}from"./tag-DeMzQvCo.js";import{t as L}from"./input-DmHXRXaB.js";import{t as R}from"./confirm-dialog-zx8L9sUi.js";import{t as z}from"./select-B8-i-CZ4.js";import{n as ee,t as te}from"./create-selectors-DBgi9gD3.js";import{t as ne}from"./assistant-identity-store-nE-e8KQw.js";import{i as re}from"./utils-CVoSWh7U.js";import{d as ie}from"./routes-iipg2wkc.js";import{n as ae}from"./conversation-navigation-gR_RLe1J.js";import{i as oe,o as se,r as ce}from"./sdk.gen-CAngxL4a.js";import{t as le}from"./assistant-feature-flag-store-qYfAdlBG.js";import{t as ue}from"./public-asset-CZ7NhuGg.js";import{t as de}from"./use-active-assistant-id-BvHP5Ojg.js";import{n as fe,t as pe}from"./telegram-setup-wizard-GetgaQy5.js";import{t as me}from"./index-DRExgbkb.js";import{t as he}from"./detail-card-hWrhardR.js";import{n as ge,t as _e}from"./mobile-sidebar-drawer-BGHwfePU.js";import{a as B,c as ve,i as ye,l as be,n as xe,r as Se,s as Ce,t as we}from"./use-invite-link-dialog-Ccf_XNV3.js";var V=e(t(),1),H=te(ee()(e=>({selectedAdapter:`slack`,selectAdapter:t=>e({selectedAdapter:t})}))),U={slack:{label:`Slack`,disconnectMessage:`This clears the stored Slack bot and app tokens for this assistant. You can reconnect later.`,hasTrustFloorControl:!1},telegram:{label:`Telegram`,disconnectMessage:`This clears the stored Telegram bot token for this assistant. You can reconnect later.`,hasTrustFloorControl:!0,disconnectedPitch:e=>`Connect a Telegram bot so ${e} can send and receive messages on Telegram.`},phone:{label:`Phone Calling`,disconnectMessage:`This clears the stored Twilio credentials for this assistant. You can reconnect later.`,hasTrustFloorControl:!0,disconnectedPitch:e=>`Connect your Twilio account so ${e} can make and answer phone calls.`}},W=l();function G({channels:e,selectedKey:t,onSelect:n}){return(0,W.jsx)(f.Root,{className:`flex h-full flex-col overflow-hidden`,children:(0,W.jsx)(f.Body,{className:`flex min-h-0 min-w-0 flex-1 flex-col gap-4`,children:(0,W.jsx)(`div`,{className:`flex flex-col gap-1`,children:e.map(e=>(0,W.jsx)(Te,{channel:e,selected:e.key===t,onClick:()=>n(e.key)},e.key))})})})}function Te({channel:e,selected:t,onClick:n}){let r=e.status===`ready`,i=h(e.key),a=r?`Connected`:`Not connected`;return(0,W.jsx)(C,{asChild:!0,active:t,label:`${i}, ${a}`,children:(0,W.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,W.jsx)(_,{channelId:e.key,className:`h-4 w-4 shrink-0 text-[color:var(--content-secondary)]`}),(0,W.jsx)(`span`,{className:`min-w-0 flex-1 truncate text-body-medium-default`,children:i}),(0,W.jsx)(`span`,{className:`flex shrink-0 items-center`,children:(0,W.jsx)(I,{tone:r?`positive`:`neutral`,children:a})})]})})}function K({icon:e,title:t,description:n,action:r,className:i}){return(0,W.jsxs)(`div`,{className:u(`flex flex-col items-center justify-center gap-3 px-4 py-12 text-center`,i),children:[e?(0,W.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,W.jsx)(`h3`,{className:`text-title-small text-[var(--content-default)]`,children:t}),n?(0,W.jsx)(`p`,{className:`max-w-md text-body-medium-lighter text-[color:var(--content-tertiary)]`,children:n}):null,r?(0,W.jsx)(`div`,{className:`mt-1`,children:r}):null]})}function Ee({assistantDisplayName:e,policy:t,saving:n=!1,loading:r=!1,error:i=!1,onChange:a}){let o=t??`trusted_contacts`,s=be(e),c=Ce.map(e=>({value:e,label:ve[e],tooltip:s[e]}));return(0,W.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,W.jsxs)(d,{as:`span`,variant:`body-small-emphasised`,className:`text-[color:var(--content-secondary)]`,children:[`Who can message `,e]}),r?(0,W.jsx)(d,{as:`span`,variant:`body-small-lighter`,className:`text-[color:var(--content-tertiary)]`,children:`Loading…`}):i?(0,W.jsx)(d,{as:`span`,variant:`body-small-lighter`,className:`text-[color:var(--content-negative)]`,children:`Couldn’t load this setting. Try reopening this page.`}):(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(`div`,{style:{maxWidth:280},children:(0,W.jsx)(z,{value:o,onChange:a,options:c,disabled:n,"aria-label":`Who can message ${e}`})}),(0,W.jsx)(d,{as:`span`,variant:`body-small-lighter`,className:`text-[color:var(--content-tertiary)]`,children:s[o]}),o===`trusted_contacts`?(0,W.jsxs)(F,{tone:`info`,className:`max-w-lg`,children:[`People you haven’t verified yet (even teammates in the same channel) can’t get through: `,e,` lets them know they need to be verified and notifies you. You can verify people ahead of time in Contacts.`]}):null]})]})}function De({address:e,pending:t,onDisconnect:r}){return(0,W.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,W.jsx)(I,{tone:`positive`,leftIcon:(0,W.jsx)(S,{}),children:`Connected`}),e?(0,W.jsx)(`span`,{className:`text-body-medium-lighter`,style:{color:`var(--content-tertiary)`},children:e}):null,(0,W.jsx)(`div`,{className:`ml-auto`,children:(0,W.jsx)(n,{type:`button`,variant:`danger`,onClick:r,disabled:!r||t,children:t?`Disconnecting…`:`Disconnect`})})]})}function Oe({children:e}){return(0,W.jsxs)(f.Root,{children:[(0,W.jsx)(f.Header,{children:(0,W.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,W.jsx)(`img`,{src:ue(`/images/integrations/slack.svg`),alt:``,className:`size-8 rounded-lg bg-[var(--surface-sunken)] p-1`}),(0,W.jsx)(d,{as:`span`,variant:`body-medium-default`,children:`Slack setup`})]})}),(0,W.jsx)(f.Body,{children:e})]})}j.map(e=>e.riskThreshold);var q=[`none`,`low`];function J(e){if(e!==void 0)return e===`none`?`none`:`low`}var Y={none:{label:A(`none`).label,sublabel:`asks every time`,tone:`negative`,dotColor:`var(--system-negative-strong)`},low:{label:A(`low`).label,sublabel:`safe lookups`,tone:`warning`,dotColor:`var(--system-mid-strong)`},medium:{label:A(`medium`).label,sublabel:`broader lookups`,tone:`info`,dotColor:`var(--system-info-strong)`},high:{label:A(`high`).label,sublabel:`any lookup`,tone:`positive`,dotColor:`var(--system-positive-strong)`}},X=[`trusted_contact`,`unverified_contact`,`unknown`];function ke(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 Z(e,t,n){return n===`channels`?e.selector.scope===`adapter`&&e.selector.adapter===t:e.selector.scope===`channel_type`&&e.selector.adapter===t&&e.selector.channelType===`dm`}function Ae(e,t,n){let r;for(let i of e)Z(i,t,n)&&(i.contactType===`trusted_contact`||r===void 0)&&(r=i.threshold);return r}var je=`__default__`;function Q({color:e}){return(0,W.jsx)(`span`,{"aria-hidden":`true`,className:`h-1.5 w-1.5 shrink-0 rounded-full`,style:{backgroundColor:e}})}function Me({tier:e,defaultTier:t,disabled:n,onTierChange:r,onReset:i,"aria-label":a}){let o=J(e??t??void 0),s=J(t??void 0)??null,c=q.map(e=>({value:e,label:Y[e].label,icon:(0,W.jsx)(Q,{color:Y[e].dotColor}),suffix:e===s?(0,W.jsx)(`span`,{className:`text-[color:var(--content-tertiary)]`,children:`default`}):void 0,tooltip:Y[e].sublabel}));return c.unshift({value:je,label:`Default`,icon:(0,W.jsx)(Q,{color:`transparent`}),tooltip:`follows the default level`}),(0,W.jsx)(z,{value:o??``,onChange:e=>{e===je||e===s?i():r(e)},options:c,placeholder:`Default`,disabled:n,size:`compact`,menuAlign:`end`,"aria-label":a})}function $(e){return e.type===`dm`?`dm`:e.isPrivate?`private`:`public`}function Ne(e){return e.filter(e=>$(e)!==`dm`)}function Pe(e,t,n){let r=t.trim().toLowerCase();return e.filter(e=>(n===null||$(e)===n)&&(r===``||e.name.toLowerCase().includes(r))).sort((e,t)=>e.name.localeCompare(t.name))}function Fe(e){let t={public:0,private:0,dm:0};for(let n of e)t[$(n)]+=1;return t}function Ie(e){return e.memberCount==null?null:e.memberCount===1?`1 member`:`${e.memberCount} members`}var Le=[{value:null,label:`All`},{value:`public`,label:`Public`},{value:`private`,label:`Private`}],Re={public:b,private:M},ze=100,Be=new Set;function Ve({assistantDisplayName:e,slackHandle:t,channels:n,loading:r=!1,error:i=!1,tierOverrides:a,defaultTier:o=null,accessControlsSupported:s=!0,tierOverridesLoading:c=!1,tierOverridesError:l=!1,pendingChannelIds:f=Be,onTierChange:p,onTierReset:m}){let[h,g]=(0,V.useState)(``),[_,v]=(0,V.useState)(null),y=(0,V.useMemo)(()=>Ne(n??[]),[n]),x=(0,V.useMemo)(()=>Pe(y,h,_),[y,h,_]),S=(0,V.useMemo)(()=>Fe(y),[y]),C=t??`@${e}`;return(0,W.jsxs)(`div`,{className:`flex flex-col gap-3 p-4`,children:[(0,W.jsx)(d,{as:`p`,variant:`body-small-lighter`,className:`text-[color:var(--content-tertiary)]`,children:(0,W.jsxs)(W.Fragment,{children:[`Add with`,` `,(0,W.jsxs)(`code`,{className:`text-[color:var(--content-secondary)]`,children:[`/invite `,C]}),` `,`or remove with`,` `,(0,W.jsxs)(`code`,{className:`text-[color:var(--content-secondary)]`,children:[`/remove `,C]}),` `,`in that Slack channel. Only channels `,e,` is in appear here.`]})}),r?(0,W.jsx)(d,{as:`span`,variant:`body-small-lighter`,className:`text-[color:var(--content-tertiary)]`,children:`Loading…`}):i?(0,W.jsx)(d,{as:`span`,variant:`body-small-lighter`,className:`text-[color:var(--content-negative)]`,children:`Couldn’t load channels. Try reopening this page.`}):y.length===0?(0,W.jsx)(K,{icon:(0,W.jsx)(b,{className:`h-6 w-6`}),title:`No channels yet`}):(0,W.jsxs)(W.Fragment,{children:[(0,W.jsxs)(`div`,{className:`flex flex-wrap items-center gap-3`,children:[(0,W.jsx)(`div`,{className:`min-w-56 flex-1`,children:(0,W.jsx)(L,{type:`search`,value:h,onChange:e=>g(e.target.value),placeholder:`Search channels`,"aria-label":`Search channels`,leftIcon:(0,W.jsx)(P,{className:`h-4 w-4`}),fullWidth:!0})}),(0,W.jsx)(`div`,{className:`flex items-center gap-2`,role:`group`,"aria-label":`Filter channels by type`,children:Le.map(({value:e,label:t})=>{let n=_===e,r=e===null?y.length:S[e];return(0,W.jsxs)(`button`,{type:`button`,"aria-pressed":n,onClick:()=>v(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`)})})]}),x.length===0?(0,W.jsx)(d,{as:`span`,variant:`body-small-lighter`,className:`py-4 text-center text-[color:var(--content-tertiary)]`,children:`No channels match.`}):x.length>ze?(0,W.jsx)(`div`,{className:`h-96`,children:(0,W.jsx)(O,{items:x,computeItemKey:(e,t)=>t.id,itemContent:(e,t)=>(0,W.jsx)(He,{channel:t,pending:f.has(t.id),overridesLoading:c,overridesError:l,defaultTier:o,accessControls:s,tierOverride:a?.[t.id],onTierChange:e=>p?.(t.id,e),onReset:()=>m?.(t.id)}),className:`h-full`})}):(0,W.jsx)(`div`,{className:`max-h-96 overflow-y-auto`,children:x.map(e=>(0,W.jsx)(He,{channel:e,pending:f.has(e.id),overridesLoading:c,overridesError:l,defaultTier:o,accessControls:s,tierOverride:a?.[e.id],onTierChange:t=>p?.(e.id,t),onReset:()=>m?.(e.id)},e.id))})]})]})}function He({channel:e,pending:t,overridesLoading:n,overridesError:r,defaultTier:i,accessControls:a,tierOverride:o,onTierChange:s,onReset:c}){let l=$(e);if(l===`dm`)return null;let u=Re[l],d=Ie(e),f=`[&+&]:border-t [&+&]:border-[var(--border-base)]`;return a?(0,W.jsx)(E,{className:f,leading:(0,W.jsx)(u,{className:`h-4 w-4 text-[var(--content-tertiary)]`}),title:e.name,subtitle:d??void 0,trailing:(0,W.jsx)(`div`,{className:`w-40 sm:w-48`,children:(0,W.jsx)(Me,{tier:o,defaultTier:i,disabled:t||n||r,onTierChange:s,onReset:c,"aria-label":`Assistant Access in ${e.name}`})})}):(0,W.jsx)(E,{className:f,leading:(0,W.jsx)(u,{className:`h-4 w-4 text-[var(--content-tertiary)]`}),title:e.name,trailing:d==null?void 0:(0,W.jsx)(`span`,{className:`text-body-small-default text-[color:var(--content-tertiary)]`,children:d})})}function Ue(e){return e===`none`?`Asks before every action, even a web search.`:`Asks before anything beyond looking things up and saving files in its own workspace.`}function We({defaultTier:e}){let t=J(e??void 0)??null;return(0,W.jsx)(`div`,{className:`flex flex-col gap-2 px-4 py-3`,children:(0,W.jsx)(`ul`,{className:`grid gap-x-6 gap-y-3 sm:grid-cols-2`,children:[...q].reverse().map(e=>{let n=Y[e];return(0,W.jsxs)(`li`,{className:`flex flex-col gap-0.5`,children:[(0,W.jsxs)(`span`,{className:`flex items-center gap-1.5`,children:[(0,W.jsx)(Q,{color:n.dotColor}),(0,W.jsx)(d,{as:`span`,variant:`body-small-emphasised`,children:n.label}),e===t?(0,W.jsx)(d,{as:`span`,variant:`body-small-default`,className:`text-[color:var(--content-tertiary)]`,children:`· default`}):null]}),(0,W.jsx)(d,{as:`span`,variant:`body-small-lighter`,className:`text-[color:var(--content-tertiary)]`,children:Ue(e)})]},e)})})})}var Ge=[{bucket:`channels`,icon:b,title:`Channels`,description:`Public and private channels`},{bucket:`dm`,icon:N,title:`Direct messages`,description:`One-on-one DMs`}];function Ke({assistantName:e,globalDefaultTier:t,bucketTiers:n,loading:r,error:i,pendingBuckets:o,onBucketChange:s,onBucketReset:c}){return(0,W.jsxs)(f.Root,{children:[(0,W.jsx)(f.Header,{children:(0,W.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[`Default access`,(0,W.jsxs)(d,{as:`p`,variant:`body-small-lighter`,className:`text-[color:var(--content-tertiary)]`,children:[`How much `,e,` does on its own, by conversation type. Individual channels can override this below, and`,` `,(0,W.jsx)(a,{to:ie.settings.privacy,className:`text-[var(--content-link)] underline hover:text-[var(--content-link-hover)]`,children:`Trust Rules`}),` `,`fine-tune when it asks.`]})]})}),(0,W.jsx)(f.Body,{className:`py-1`,children:Ge.map(({bucket:e,icon:a,title:l,description:u})=>{let d=e===`dm`?n?.channels??t:t;return(0,W.jsx)(E,{className:`[&+&]:border-t [&+&]:border-[var(--border-base)]`,leading:(0,W.jsx)(a,{className:`h-4 w-4 text-[var(--content-tertiary)]`}),title:l,subtitle:u,trailing:(0,W.jsx)(`div`,{className:`w-40 sm:w-48`,children:(0,W.jsx)(Me,{tier:n?.[e],defaultTier:d,disabled:r||i||o.has(e),onTierChange:t=>s(e,t),onReset:()=>c(e),"aria-label":`Default Assistant Access for ${l}`})})},e)})}),(0,W.jsx)(f.Footer,{className:`p-0`,children:(0,W.jsx)(We,{defaultTier:t})})]})}var qe=`0.11.0`;function Je(){return re(qe)}var Ye=new Set([404,501]);function Xe(e){let t=me(e);return t!==void 0&&Ye.has(t)}function Ze(e,t,n){return X.map(r=>({selector:{scope:`channel`,adapter:e,channelExternalId:t},contactType:r,threshold:n}))}function Qe(e,t,n){return e.selector.scope===`channel`&&e.selector.adapter===t&&e.selector.channelExternalId===n}function $e(e,t){return t===`channels`?{scope:`adapter`,adapter:e}:{scope:`channel_type`,adapter:e,channelType:`dm`}}function et(e,t,n){let r=$e(e,t);return X.map(e=>({selector:r,contactType:e,threshold:n}))}function tt({assistantId:e,adapter:t}){let n=o(),r=Je()&&!!e,i=(0,V.useMemo)(()=>({path:{assistant_id:e}}),[e]),a=(0,V.useMemo)(()=>p(i),[i]),l=(0,V.useMemo)(()=>[`channel-permission-resolve`,e,t],[e,t]),u=s({...g(i),enabled:r}),d=u.data?.cells,f=(0,V.useMemo)(()=>d?ke(d,t):void 0,[d,t]),m=(0,V.useMemo)(()=>d?{channels:Ae(d,t,`channels`),dm:Ae(d,t,`dm`)}:void 0,[d,t]),h=s({queryKey:l,queryFn:async()=>{let{data:e}=await se({...i,body:{adapter:t,contactType:`trusted_contact`},throwOnError:!0});return e.resolved?.threshold??null},enabled:r,retry:!1,staleTime:3e4}),_=(e,t)=>{let r=n.getQueryData(a),i=Date.now();return n.setQueryData(a,n=>({cells:[...(n?.cells??[]).filter(t=>!e(t)),...t.map(e=>({...e,updatedAt:i}))]})),{previous:r}},v=c({mutationFn:async({channelExternalId:e,tier:n})=>{await Promise.all(Ze(t,e,n).map(e=>oe({...i,body:e,throwOnError:!0})))},onMutate:({channelExternalId:e,tier:n})=>_(n=>Qe(n,t,e),Ze(t,e,n)),onError:(e,t,r)=>{n.setQueryData(a,r?.previous),B(`Failed to save channel settings`)(e)},onSettled:()=>n.invalidateQueries({queryKey:a})}),y=c({mutationFn:async({channelExternalId:e})=>{await Promise.all(X.map(n=>ce({...i,body:{selector:{scope:`channel`,adapter:t,channelExternalId:e},contactType:n},throwOnError:!0})))},onMutate:({channelExternalId:e})=>_(n=>Qe(n,t,e),[]),onError:(e,t,r)=>{n.setQueryData(a,r?.previous),B(`Failed to reset channel settings`)(e)},onSettled:()=>n.invalidateQueries({queryKey:a})}),b=c({mutationFn:async({bucket:e,tier:n})=>{await Promise.all(et(t,e,n).map(e=>oe({...i,body:e,throwOnError:!0})))},onMutate:({bucket:e,tier:n})=>_(n=>Z(n,t,e),et(t,e,n)),onError:(e,t,r)=>{n.setQueryData(a,r?.previous),B(`Failed to save the default`)(e)},onSettled:(e,t,{bucket:r})=>{n.invalidateQueries({queryKey:a}),r===`channels`&&n.invalidateQueries({queryKey:l})}}),x=c({mutationFn:async({bucket:e})=>{let n=$e(t,e);await Promise.all(X.map(e=>ce({...i,body:{selector:n,contactType:e},throwOnError:!0})))},onMutate:({bucket:e})=>_(n=>Z(n,t,e),[]),onError:(e,t,r)=>{n.setQueryData(a,r?.previous),B(`Failed to reset the default`)(e)},onSettled:(e,t,{bucket:r})=>{n.invalidateQueries({queryKey:a}),r===`channels`&&n.invalidateQueries({queryKey:l})}}),S=(0,V.useMemo)(()=>{let e=new Set;return v.isPending&&v.variables&&e.add(v.variables.channelExternalId),y.isPending&&y.variables&&e.add(y.variables.channelExternalId),e},[v.isPending,v.variables,y.isPending,y.variables]),C=(0,V.useMemo)(()=>{let e=new Set;return b.isPending&&b.variables&&e.add(b.variables.bucket),x.isPending&&x.variables&&e.add(x.variables.bucket),e},[b.isPending,b.variables,x.isPending,x.variables]);return!r||u.isError&&Xe(u.error)?{supported:!1,tierOverrides:void 0,defaultCellTier:void 0,bucketTiers:void 0,pendingChannelIds:new Set,pendingBuckets:new Set,isLoading:!1,isError:!1,onTierChange:void 0,onTierReset:void 0,onBucketChange:void 0,onBucketReset:void 0}:{supported:!0,tierOverrides:f,defaultCellTier:h.data,bucketTiers:m,pendingChannelIds:S,pendingBuckets:C,isLoading:u.isPending,isError:u.isError,onTierChange:(e,t)=>v.mutate({channelExternalId:e,tier:t}),onTierReset:e=>{f?.[e]!==void 0&&y.mutate({channelExternalId:e})},onBucketChange:(e,t)=>b.mutate({bucket:e,tier:t}),onBucketReset:e=>{m?.[e]!==void 0&&x.mutate({bucket:e})}}}function nt({assistantId:e,assistantDisplayName:t,slackHandle:n}){let r=s({...v(e),enabled:!!e,select:e=>e.channels}),i=tt({assistantId:e,adapter:`slack`}),a=s({queryKey:[`thresholds`,e],queryFn:()=>k(e),enabled:i.supported&&!!e,staleTime:3e4}).data?.interactive??null,o=i.defaultCellTier===void 0?null:i.defaultCellTier??a,c=(0,W.jsx)(Ve,{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});return!i.supported||!i.onBucketChange||!i.onBucketReset?(0,W.jsx)(f.Root,{noPadding:!0,clipContents:!0,children:c}):(0,W.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[i.isError?(0,W.jsx)(F,{tone:`error`,children:`Couldn’t load access settings. These controls stay disabled until they load. Try reopening this page.`}):null,(0,W.jsx)(Ke,{assistantName:t,globalDefaultTier:a,bucketTiers:i.bucketTiers,loading:i.isLoading,error:i.isError,pendingBuckets:i.pendingBuckets,onBucketChange:i.onBucketChange,onBucketReset:i.onBucketReset}),(0,W.jsx)(f.Root,{noPadding:!0,clipContents:!0,children:(0,W.jsx)(D.Root,{type:`single`,collapsible:!0,children:(0,W.jsxs)(D.Item,{value:`per-channel-overrides`,children:[(0,W.jsxs)(D.Trigger,{className:`group justify-between gap-2 px-4 py-3`,children:[(0,W.jsx)(d,{as:`span`,variant:`body-small-emphasised`,children:`Per-channel overrides`}),(0,W.jsx)(x,{"aria-hidden":`true`,className:`h-4 w-4 shrink-0 text-[var(--content-tertiary)] transition-transform group-data-[state=open]:rotate-180`})]}),(0,W.jsx)(D.Content,{className:`border-[var(--border-base)] data-[state=open]:border-t`,children:c})]})})})]})}function rt({slackHandle:e,disconnectPending:t=!1,onDisconnect:r,children:i}){return(0,W.jsxs)(f.Root,{children:[(0,W.jsx)(f.Header,{children:(0,W.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,W.jsx)(`img`,{src:ue(`/images/integrations/slack.svg`),alt:``,className:`size-8 rounded-lg bg-[var(--surface-sunken)] p-1`}),e?(0,W.jsx)(d,{as:`span`,variant:`body-medium-default`,children:e}):null,(0,W.jsx)(I,{tone:`positive`,leftIcon:(0,W.jsx)(S,{}),children:`Connected`}),(0,W.jsx)(`div`,{className:`ml-auto`,children:(0,W.jsx)(n,{type:`button`,variant:`ghost`,onClick:r,disabled:!r||t,children:t?`Disconnecting…`:`Disconnect`})})]})}),(0,W.jsx)(f.Body,{children:i})]})}function it({threadMode:e,threadModePending:t=!1,onThreadModeChange:n}){return(0,W.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[(0,W.jsx)(d,{as:`span`,variant:`body-small-emphasised`,className:`text-[color:var(--content-secondary)]`,children:`Thread Behavior`}),(0,W.jsxs)(T,{value:e??`mention_then_thread`,onValueChange:e=>n?.(e),disabled:t||!n,"aria-label":`Slack thread behavior`,children:[(0,W.jsx)(w,{value:`mention_only`,label:`Mentions only`,helperText:`Bot only responds when @mentioned.`}),(0,W.jsx)(w,{value:`mention_then_thread`,label:`Follow threads after first mention`,helperText:`After an @mention in a thread, bot listens to all subsequent replies.`})]})]})}function at({onSave:e}){let[t,r]=(0,V.useState)(``),[i,a]=(0,V.useState)(``),[o,s]=(0,V.useState)(!1),[c,l]=(0,V.useState)(null),u=t.trim().length>0&&i.trim().length>0&&!o;return(0,W.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[(0,W.jsx)(L,{label:`Account SID`,type:`text`,value:t,onChange:e=>r(e.target.value),placeholder:`ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx`,disabled:o,fullWidth:!0}),(0,W.jsx)(L,{label:`Auth Token`,type:`password`,value:i,onChange:e=>a(e.target.value),placeholder:`Twilio auth token`,disabled:o,fullWidth:!0}),c?(0,W.jsx)(`p`,{className:`text-label-small`,style:{color:`var(--content-negative)`},children:c}):null,(0,W.jsx)(`div`,{children:(0,W.jsx)(n,{type:`button`,onClick:async()=>{if(!(!e||!u)){s(!0),l(null);try{await e(t.trim(),i.trim()),r(``),a(``)}catch(e){l(e instanceof Error?e.message:`Failed to save`)}finally{s(!1)}}},disabled:!u,children:o?`Saving…`:`Save`})})]})}function ot({channel:e,assistantId:t,assistantName:r,assistantDisplayName:i,pending:a,initialManualEntry:o=!1,onSetup:s,onDisconnect:c,onSaveTelegramToken:l,telegramSaveStatus:u,telegramSaveError:d,onSaveSlackConfig:f,slackSaveStatus:p,slackSaveError:m,slackThreadMode:g,slackThreadModePending:v=!1,onSlackThreadModeChange:y,onSaveTwilioCredentials:b,policy:x,policySaving:S=!1,policyLoading:C=!1,policyError:w=!1,onPolicyChange:T}){let E=e.status===`ready`,D=e.status===`incomplete`,[O,k]=(0,V.useState)(o);if(e.key===`slack`)return(0,W.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[E?(0,W.jsx)(rt,{slackHandle:e.address,disconnectPending:a,onDisconnect:c,children:(0,W.jsx)(it,{threadMode:g,threadModePending:v,onThreadModeChange:y})}):(0,W.jsx)(Oe,{children:(0,W.jsx)(fe,{assistantName:r,onSave:f,saveStatus:p,saveError:m})}),E?(0,W.jsx)(nt,{assistantId:t,assistantDisplayName:i,slackHandle:e.address}):null]});let A=U[e.key];return(0,W.jsx)(`div`,{className:`flex flex-col gap-4`,children:E?(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(De,{address:e.address,pending:a,onDisconnect:c}),A.hasTrustFloorControl&&T?(0,W.jsx)(Ee,{assistantDisplayName:i,policy:x,saving:S,loading:C,error:w,onChange:T}):null]}):O?e.key===`telegram`?(0,W.jsx)(pe,{assistantName:r,saveStatus:u,saveError:d,onSave:l}):(0,W.jsx)(at,{onSave:b}):(0,W.jsx)(K,{icon:(0,W.jsx)(_,{channelId:e.key,className:`h-6 w-6`}),title:D?`${h(e.key)} isn't working yet`:`${h(e.key)} isn't connected`,description:D?e.warning??`${h(e.key)} is set up but not delivering messages yet. Your assistant can pick up where setup left off and tell you what is wrong.`:A.disconnectedPitch?.(i),action:(0,W.jsxs)(`div`,{className:`flex flex-col items-center gap-1`,children:[(0,W.jsx)(n,{type:`button`,variant:`outlined`,onClick:s,disabled:!s||a,children:a?`Opening…`:D?`Finish setup with your assistant`:`Set up`}),(0,W.jsx)(n,{type:`button`,variant:`link`,onClick:()=>k(!0),children:`or connect manually`})]})})})}var st={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
 
@@ -0,0 +1 @@
1
+ import{o as e}from"./chunk-jRWAZmH_.js";import{t}from"./capture-error-Cw5vs0Ef.js";import{t as n}from"./react-BFJW0bSv.js";import{t as r}from"./button-BENY-yx_.js";import{t as i}from"./useQuery-Bz-fbQ-m.js";import{t as a}from"./jsx-runtime-D3ZM-ToX.js";import{t as o}from"./cn-DFWryB3N.js";import{t as s}from"./typography-BeUa5Fd-.js";import{t as c}from"./createLucideIcon-C1mdGPB9.js";import{t as l}from"./archive-VIStcSec.js";import{t as u}from"./check-DSgjgwlo.js";import{t as d}from"./menu-DKE_-iVc.js";import{a as f,c as p,l as m,o as h,s as g,t as _,u as v}from"./use-attachment-preview-B4PALbqs.js";import{K as y,d as b,f as x,x as ee}from"./src-DyqTPMO2.js";import{t as S}from"./download-Byg0fi0d.js";import{t as te}from"./ellipsis-C7C3LPFH.js";import{t as C}from"./external-link-vwewPjbo.js";import{t as ne}from"./eye-off-BwU7XK4M.js";import{t as re}from"./eye-GcssNJdY.js";import{t as ie}from"./file-text-DDbRSMUn.js";import{t as ae}from"./file-CTdxLT0k.js";import{t as w}from"./key-round-B-C1Qgxd.js";import{t as oe}from"./loader-circle-DOtGXcds.js";import{n as T}from"./toast-BpuLSxyt.js";import{t as se}from"./skeleton-CJJwPIil.js";import{n as ce}from"./resolved-assistants-store-BFI9c7ip.js";import{ft as le,l as ue}from"./sdk.gen-CBPZ2IdN.js";import{t as de}from"./dist-Br0LBu8Y.js";import{r as fe}from"./use-is-org-ready-CQntk0MX.js";import{n as pe}from"./browser-BP3Xidk_.js";import{t as E}from"./conversation-store-D4pZBwP5.js";import{i as D}from"./viewer-store-CayI6XWh.js";import{t as me}from"./open-workspace-file-DViQQLp4.js";import{a as he,i as ge,n as _e,o as O,r as ve,s as ye,t as k}from"./workspace-path-links-Dal5QJ_L.js";import{t as be}from"./copy-to-clipboard-DnJHokIa.js";import{a as xe,i as Se,s as Ce}from"./use-local-file-info-2nORgZPN.js";import{a as we,n as Te,o as Ee}from"./pdf-preview-DNzKWskr.js";import{n as De,r as Oe}from"./workspace-tree-query-Djht8L1-.js";import{t as ke}from"./native-anchor-CpFd0dIc.js";var A=c(`panel-right`,[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}],[`path`,{d:`M15 3v18`,key:`14nvp0`}]]),Ae=c(`picture-in-picture-2`,[[`path`,{d:`M21 9V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v10c0 1.1.9 2 2 2h4`,key:`daa4of`}],[`rect`,{width:`10`,height:`7`,x:`12`,y:`13`,rx:`2`,key:`1nb8gs`}]]),j=e(n(),1),je=`width=500,height=600`;function M(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 N(e){let t=M(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 Me(e){if(typeof window>`u`)return null;let t=M(e);return!t||t.origin!==window.location.origin?null:`${t.pathname}${t.search}${t.hash}`}function P(e){return M(e)?.href??null}function F(e){if(!N(e))return!1;if(de.isNativePlatform()){let t=P(e);return t?(pe(t),!0):!1}let t=window.open(e,`_blank`,je);return t===null?!1:(t.focus(),!0)}function Ne(e){return F(e)}function I(e){if(F(e))return!0;let t=window.open(e,`_blank`);return t===null?!1:(t.focus(),!0)}function Pe(e,t){let n=Me(e);if(n)return t.push(n),{kind:`routed`};let r=P(e);return r?t.isNative?(pe(r),{kind:`opened`}):I(r)?{kind:`opened`}:{kind:`blocked`,url:r}:{kind:`invalid`}}var L=a(),Fe=new Set([`md`,`markdown`]),Ie=new Map([[`csv`,`csv`],[`tsv`,`csv`],[`txt`,`text`],[`log`,`text`],[`json`,`text`],[`yaml`,`text`],[`yml`,`text`],[`xml`,`text`],[`pdf`,`pdf`],[`png`,`image`],[`jpg`,`image`],[`jpeg`,`image`],[`gif`,`image`],[`webp`,`image`],[`svg`,`image`],[`avif`,`image`],[`mp3`,`audio`],[`wav`,`audio`],[`m4a`,`audio`],[`ogg`,`audio`],[`flac`,`audio`],[`mp4`,`video`],[`mov`,`video`],[`webm`,`video`],[`m4v`,`video`]]);function R(e){let t=e.lastIndexOf(`.`);return t<=0?null:e.slice(t+1).toLowerCase()}function Le(e){let t=R(e);return t!==null&&Fe.has(t)}function Re(e){let t=R(e);return t===null?null:Ie.get(t)??null}function ze(e){return Re(e)??`unsupported`}function z(e,t,n){return t?Le(e)?n?{mode:`document`,assistantId:t,conversationId:n}:{mode:`workspace`}:{mode:`preview`,assistantId:t,previewKind:ze(e)}:{mode:`workspace`}}function Be(e,t,n){return z(e,t,n).mode!==`workspace`}function Ve(e,t,n){return e===`document`&&t!==null&&t.workspacePath===n}function He(e){let t=D.use.mainView(),n=D.use.openedDocumentState();return e===null?!1:Ve(t,n,e)}function Ue(e,t,n){return We(e,t)===n}function We(e,t){return e!==`document`||t?.source!==`document`?null:t.surfaceId}function Ge(e){return Ue(D.use.mainView(),D.use.openedDocumentState(),e)}function Ke(e,t,n,r){let i=z(t,n,r);if(i.mode===`document`){D.getState().loadWorkspaceFileDocument(i.assistantId,e,i.conversationId);return}if(i.mode===`preview`){D.getState().openWorkspaceFilePreview(e,i.previewKind);return}me(e)}function B(e,t,n,r){let i=D.getState();if(Be(t,n,r)&&Ve(i.mainView,i.openedDocumentState,e)){i.closeDocument();return}Ke(e,t,n,r)}var qe={image:p,video:g,audio:m,pdf:f,code:v,archive:l,spreadsheet:h,document:ie,text:ie,file:ae};function Je(e,t){return e===`file`?Te(``,t):e}function V(e){return Ce({sniffedMime:null,serverMime:null,filename:e}).kind}function H({kind:e,filename:t,className:n}){let r=qe[Je(e,t)];return(0,L.jsx)(r,{className:n,"aria-hidden":!0})}var Ye=100*1024*1024,Xe=25*1024*1024;function Ze(e){switch(e){case`image`:case`audio`:case`video`:return Ye;default:return Xe}}var Qe=1500,U=`inline-flex max-w-full min-w-0 items-center gap-1.5 rounded-lg bg-[var(--surface-overlay)] px-2 py-1 align-middle text-[0.85em] leading-tight text-[var(--content-secondary)]`,W=`shrink-0 rounded-sm p-0.5 text-[var(--content-tertiary)] transition-colors hover:text-[var(--content-secondary)] focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-[var(--border-focus)]`;function $e({type:e,service:t,field:n,assistantId:r,neutralized:i}){let a=ce.use.activeAssistantId(),o=r===void 0?a:r,[s,c]=(0,j.useState)(null),[l,d]=(0,j.useState)(!1),[f,p]=(0,j.useState)(!1),m=(0,j.useRef)(null),h=(0,j.useRef)(0),g=e??`Secret`,_=t!==void 0&&n!==void 0&&o!=null,v=_?`${t}:${n}`:g,b=(0,j.useCallback)(()=>{h.current++,c(null),d(!1),p(!1),m.current&&=(clearTimeout(m.current),null)},[]),x=(0,j.useCallback)(async()=>{if(!_)return;let e=++h.current;d(!0);try{let{data:r}=await le({path:{assistant_id:o},body:{service:t,field:n},throwOnError:!0});h.current===e&&c(r.value)}catch{h.current===e&&T.error(`Couldn't reveal ${v}.`)}finally{h.current===e&&d(!1)}},[_,o,t,n,v]),ee=(0,j.useCallback)(()=>{s!=null&&be(s,{errorMessage:`Couldn't copy. Reveal and copy manually.`,onCopied:()=>{p(!0),m.current&&clearTimeout(m.current),m.current=setTimeout(()=>p(!1),Qe)}})},[s]);if(i)return(0,L.jsxs)(`span`,{className:U,title:`Redaction marker — not verified by the assistant`,children:[(0,L.jsx)(w,{className:`h-3.5 w-3.5 shrink-0`,"aria-hidden":!0}),(0,L.jsx)(`span`,{className:`truncate`,children:`Redacted`})]});if(!_)return(0,L.jsxs)(`span`,{className:U,title:`Redacted — this value is not linked to a stored credential`,children:[(0,L.jsx)(w,{className:`h-3.5 w-3.5 shrink-0`,"aria-hidden":!0}),(0,L.jsx)(`span`,{className:`truncate`,children:g})]});let S=s!==null;return(0,L.jsxs)(`span`,{className:U,children:[(0,L.jsx)(w,{className:`h-3.5 w-3.5 shrink-0`,"aria-hidden":!0}),S?(0,L.jsx)(`span`,{className:`min-w-0 truncate font-mono text-[var(--content-default)]`,children:s}):(0,L.jsx)(`button`,{type:`button`,onClick:()=>void x(),disabled:l,"aria-label":`Reveal value for ${v}`,title:`${g} · click to reveal`,className:`min-w-0 select-none truncate rounded-sm text-left blur-[3px] transition-[filter] hover:blur-[2px] focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-[var(--border-focus)]`,children:v}),l?(0,L.jsx)(oe,{className:`h-3.5 w-3.5 shrink-0 animate-spin`,"aria-hidden":!0}):S?(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(`button`,{type:`button`,onClick:ee,"aria-label":`Copy value for ${v}`,title:`Copy value`,className:W,children:f?(0,L.jsx)(u,{className:`h-3.5 w-3.5`,"aria-hidden":!0}):(0,L.jsx)(y,{className:`h-3.5 w-3.5`,"aria-hidden":!0})}),(0,L.jsx)(`button`,{type:`button`,onClick:b,"aria-label":`Hide value for ${v}`,title:`Hide value`,className:W,children:(0,L.jsx)(ne,{className:`h-3.5 w-3.5`,"aria-hidden":!0})})]}):(0,L.jsx)(`button`,{type:`button`,onClick:()=>void x(),disabled:l,"aria-label":`Reveal value for ${v}`,title:`Click to reveal`,className:W,children:(0,L.jsx)(re,{className:`h-3.5 w-3.5`,"aria-hidden":!0})})]})}var et=`redacted`;function tt(e){try{return decodeURIComponent(e)}catch{return}}function nt(){return RegExp(`〔${et}:([^:\u3014\u3015]+?)(?::([A-Za-z0-9_.%-]+):([A-Za-z0-9_.%-]+))?〕`,`g`)}function rt(){return RegExp(`〔\\u2060${et}:([^:\\u3014\\u3015]+?)(?::([A-Za-z0-9_.%-]+):([A-Za-z0-9_.%-]+))?〕`,`g`)}function it(e){let[,t,n,r]=e;if(n!==void 0&&r!==void 0){let e=tt(n),i=tt(r);if(e!==void 0&&i!==void 0)return{type:t,service:e,field:i}}return{type:t}}var G=`redacted-credential`,at=new Set([`pre`,`code`,`style`,`script`,`a`]);function ot(e){return e.type===`element`}function st(e){let t=[],n=nt(),r;for(;(r=n.exec(e))!==null;){let e=it(r);t.push({index:r.index,length:r[0].length,element:{type:`element`,tagName:G,properties:{type:e.type,...e.service!==void 0&&e.field!==void 0?{service:e.service,field:e.field}:{}},children:[]}})}let i=rt();for(;(r=i.exec(e))!==null;)t.push({index:r.index,length:r[0].length,element:{type:`element`,tagName:G,properties:{neutralized:!0},children:[]}});if(t.length===0)return;t.sort((e,t)=>e.index-t.index);let a=[],o=0;for(let n of t)n.index>o&&a.push({type:`text`,value:e.slice(o,n.index)}),a.push(n.element),o=n.index+n.length;return o<e.length&&a.push({type:`text`,value:e.slice(o)}),a}function ct(e){if(ot(e)&&at.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`){ct(n);continue}let r=n.value;if(!r.includes(`〔`))continue;let i=st(r);i&&t.splice(e,1,...i)}}function lt(){return e=>{ct(e)}}var ut=new Set([`pre`,`code`,`style`,`script`]),dt=5,ft=.4,pt=`stream-word-fade`;function mt(e){return e.type===`element`}function ht(e){if(mt(e)&&ut.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`){ht(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:[pt]},children:[{type:`text`,value:e}]});t.splice(e,1,...i)}}function gt(e,t){if(mt(e)){let n=e.properties?.className;if(Array.isArray(n)&&n.includes(pt)){t.push(e);return}}if(e.children)for(let n of e.children)gt(n,t)}function _t(e){let t=e?.caughtUp??!1;return e=>{if(ht(e),t)return;let n=[];gt(e,n);let r=Math.min(dt,n.length);for(let e=0;e<r;e++){let t=n[n.length-1-e],r=(ft+(1-ft)*((e+1)/(dt+1))).toFixed(3);t.properties={...t.properties,style:`opacity:${r}`}}}}var vt=new Set([`pre`,`a`,`style`,`script`]);function yt(e){return e.type===`element`}function bt(e){if(e.children.length!==1)return;let t=e.children[0];return t.type===`text`?t.value:void 0}function xt(e){let t=e.children;if(t){for(let e of t)if(yt(e)&&!vt.has(e.tagName)){if(e.tagName===`code`){let t=bt(e),n=t===void 0?null:he(t);n!==null&&t!==void 0&&(e.tagName=k,e.properties={...e.properties,path:n,raw:t},e.children=[]);continue}xt(e)}}}function St(){return e=>{xt(e)}}var Ct=15e3,wt=1e4,Tt=9e4;function Et({path:e,raw:t,assistantId:n,onOpen:r}){let a=t??e??``,o=fe(),s=!!(e&&n&&r&&o),[c]=(0,j.useState)(()=>Date.now()+Tt),{data:l}=i({...De({assistantId:n??``,path:e?ye(e):``}),enabled:s,staleTime:Ct,retry:!1,refetchInterval:t=>Date.now()>=c||(t.state.data?.entries.some(t=>t.type===`file`&&t.path===e)??!1)?!1:wt});return!(0,j.useMemo)(()=>e!=null&&(l?.entries.some(t=>t.type===`file`&&t.path===e)??!1),[l,e])||!e||!r?(0,L.jsx)(`code`,{className:b,children:a}):(0,L.jsx)(`button`,{type:`button`,onClick:()=>r(ge(e),O(e)),className:`${b} cursor-pointer text-[var(--system-positive-strong)] underline decoration-dotted underline-offset-2 hover:opacity-80`,title:`Open ${e}`,children:a})}var Dt=/^[a-zA-Z][a-zA-Z0-9+.-]*:/;function Ot(e){try{return decodeURIComponent(e)}catch{return null}}function kt(e){return(e.split(`#`,1)[0]??``).split(`?`,1)[0]??``}function At(e){let t=Ot(kt(e));if(t===null)return null;let n=t.trim();if(n.length===0||n.length>512||n.includes(`\0`))return null;let r;if(n.startsWith(`/`)){let e=n.lastIndexOf(_e);if(e===-1)return null;r=n.slice(e+_e.length)}else r=n.startsWith(`./`)?n.slice(2):n;return ve(r)?r:null}function jt(e){let t=kt(e.trim()).split(`/`).pop()??``;return Ot(t)??t}function K(e){if(e==null)return{kind:`other`};let t=e.trim();if(t.length===0||t.startsWith(`#`))return{kind:`other`};if(t.startsWith(`//`))return{kind:`web`};let n=Dt.exec(t)?.[0];if(n){let e=n.slice(0,-1).toLowerCase();return e===`vellum`?{kind:`vellum`}:e===`http`||e===`https`?{kind:`web`}:{kind:`other`}}if(!(t.startsWith(`/`)||t.startsWith(`./`)||t.includes(`/`)))return{kind:`other`};let r=At(t);return{kind:`local-file`,workspacePath:r,filename:r?O(r):jt(t)}}function q({workspacePath:e,filename:t,assistantId:n,disabled:i,onPictureInPicture:a,className:s}){let c=i===!0||e===null,l=(0,j.useCallback)(()=>{e!==null&&me(e)},[e]),u=(0,j.useCallback)(async()=>{if(!(e===null||!n))try{await Oe({assistantId:n,path:e,filename:t})}catch{T.error(`Failed to download file`,{description:t})}},[n,t,e]);return(0,L.jsxs)(d.Root,{children:[(0,L.jsx)(d.Trigger,{asChild:!0,children:(0,L.jsx)(r,{variant:`ghost`,size:`compact`,expandOnMobile:!1,iconOnly:(0,L.jsx)(te,{}),"aria-label":`File actions`,className:o(`shrink-0`,s),onClick:e=>e.stopPropagation(),onKeyDown:e=>{(e.key===`Enter`||e.key===` `)&&e.stopPropagation()}})}),(0,L.jsxs)(d.Content,{align:`end`,sideOffset:4,children:[(0,L.jsx)(d.Item,{leftIcon:(0,L.jsx)(C,{size:14}),disabled:c,onSelect:l,className:`whitespace-nowrap`,children:`Go to file`}),a!==void 0&&(0,L.jsx)(d.Item,{leftIcon:(0,L.jsx)(Ae,{size:14}),onSelect:a,className:`whitespace-nowrap`,children:`Picture in Picture`}),(0,L.jsx)(d.Item,{leftIcon:(0,L.jsx)(S,{size:14}),disabled:c||!n,onSelect:()=>void u(),className:`whitespace-nowrap`,children:`Download`})]})]})}var Mt=[`opacity-0 transition-opacity`,`group-hover/local-file-card:opacity-100`,`group-focus-visible/local-file-card:opacity-100`,`[@media(pointer:coarse)]:opacity-100`].join(` `);function Nt(e){return e===`workspace`?{label:`Open in workspace`,Icon:C}:e===`preview`?{label:`Open preview`,Icon:A}:{label:`Open in editor`,Icon:A}}var Pt={workspace:`workspace`,document:`editor`,preview:`preview`};function Ft(e,t,n){return e===`missing`?`File not found`:e===`unavailable`?`File isn't available here`:n===t?null:n}function J({displayName:e,filename:t,sizeBytes:n,kind:r,state:i,workspacePath:a,assistantId:c}){let l=E.use.activeConversationId(),u=i===`ready`,d=u&&a!==null,{mode:f}=z(t,c,l),p=f!==`workspace`,m=He(d?a:null)&&p,h=Ft(i,e,t),{label:g,Icon:_}=Nt(f),v=m?`Close ${Pt[f]} for ${t}`:`Open ${t}`,y=()=>{d&&B(a,t,c,l)};return(0,L.jsxs)(`span`,{role:d?`button`:void 0,tabIndex:d?0:void 0,"aria-label":d?v:void 0,"aria-expanded":d&&p?m:void 0,title:t,onClick:d?y:void 0,onKeyDown:d?e=>{(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),y())}:void 0,className:o(`group/local-file-card my-2 flex w-full max-w-md items-center gap-2.5 rounded-lg border p-2 transition-colors`,m?`border-[var(--border-active)] bg-[var(--surface-active)]`:`border-[var(--border-element)] bg-[var(--surface-lift)]`,d&&`cursor-pointer`),children:[(0,L.jsx)(`span`,{className:o(`flex h-9 w-9 shrink-0 items-center justify-center rounded-md`,m?`bg-[var(--surface-lift)]`:`bg-[var(--surface-sunken)]`,u?`text-[var(--content-secondary)]`:`text-[var(--content-disabled)]`),children:(0,L.jsx)(H,{kind:r,filename:t,className:`h-4 w-4`})}),(0,L.jsxs)(`span`,{className:`flex min-w-0 flex-1 flex-col`,children:[(0,L.jsx)(s,{as:`span`,variant:`body-small-default`,className:o(`truncate`,m?`text-[var(--content-emphasised)]`:`text-[var(--content-default)]`),children:Ee(e,40)}),h!==null&&(0,L.jsx)(s,{as:`span`,variant:`label-small-default`,className:`truncate text-[var(--content-tertiary)]`,children:h})]}),d&&!m&&(0,L.jsxs)(`span`,{"aria-hidden":`true`,className:o(`flex shrink-0 items-center gap-1`,Mt,`text-[var(--content-tertiary)]`),children:[(0,L.jsx)(_,{className:`h-3.5 w-3.5`}),(0,L.jsx)(s,{as:`span`,variant:`label-small-default`,className:`whitespace-nowrap`,children:g})]}),n!==null&&(0,L.jsx)(s,{as:`span`,variant:`label-small-default`,className:`shrink-0 text-[var(--content-disabled)]`,children:we(n)}),(0,L.jsx)(q,{workspacePath:a,filename:t,assistantId:c,disabled:!u})]})}var It=`vellum://workspace/`;function Lt(e){let t=e.trim().split(`/`).pop()??``;try{return decodeURIComponent(t)}catch{return t}}function Rt(e){return e.split(`/`).map(e=>{try{return decodeURIComponent(e)}catch{return e}}).join(`/`)}function Y(e){let t=e.trim();if(t.startsWith(It)){let e=Rt(t.slice(19));return{workspacePath:ve(e)?e:null,filename:O(e)}}let n=K(t);return n.kind===`local-file`?{workspacePath:n.workspacePath,filename:n.filename}:{workspacePath:null,filename:Lt(t)}}var zt=`max-h-[400px] max-w-full rounded-lg border border-[var(--border-element)] object-contain`,Bt=[`pointer-events-none absolute right-2 top-2 rounded-md bg-[var(--surface-lift)] opacity-0 transition-opacity`,`group-hover/local-media:pointer-events-auto group-hover/local-media:opacity-100`,`group-focus-within/local-media:pointer-events-auto group-focus-within/local-media:opacity-100`,`[@media(pointer:coarse)]:pointer-events-auto [@media(pointer:coarse)]:opacity-100`].join(` `);function Vt(){return typeof document<`u`&&`pictureInPictureEnabled`in document&&document.pictureInPictureEnabled}function Ht({children:e,menu:t}){return(0,L.jsxs)(`span`,{className:`group/local-media relative my-2 inline-block max-w-full align-top`,children:[e,(0,L.jsx)(`span`,{className:Bt,children:t})]})}function Ut({href:e,alt:t,assistantId:n}){let r=(0,j.useMemo)(()=>Y(e),[e]),i=Se(r.workspacePath,n),[a,o]=(0,j.useState)(null),s=(0,j.useRef)(null),c=(0,j.useCallback)(async()=>{let e=s.current;if(e!==null){if(document.pictureInPictureElement===e){try{await document.exitPictureInPicture()}catch{}return}e.disablePictureInPicture=!1;try{await e.requestPictureInPicture()}catch{e.disablePictureInPicture=!0,T.error(`Picture in Picture isn't available`);return}e.addEventListener(`leavepictureinpicture`,()=>{e.disablePictureInPicture=!0},{once:!0})}},[]),l=i.status===`ready`?i:null,u=l?.filename??r.filename,d=l?.kind??V(u),f=l?.sizeBytes??null,p=l!==null&&(d===`image`||d===`video`||d===`audio`)&&!(f!==null&&f>104857600)&&a!==e,{url:m,isError:h}=xe({workspacePath:r.workspacePath,mime:l?.mime??null,enabled:p,assistantId:n}),g=t.trim().length>0?t:u,_=g.length>0?g:u,v=(0,L.jsx)(q,{workspacePath:r.workspacePath,filename:u,assistantId:n}),y=(0,L.jsx)(se,{as:`span`,role:`status`,"aria-label":`Loading ${_}`,className:`my-2 inline-block h-7 w-40 rounded-lg align-middle`});if(n===void 0)return(0,L.jsx)(J,{displayName:g,filename:u,sizeBytes:null,kind:d,state:`ready`,workspacePath:r.workspacePath,assistantId:n});if(i.status===`loading`)return y;if(i.status===`unavailable`)return(0,L.jsx)(J,{displayName:g,filename:u,sizeBytes:null,kind:d,state:i.reason===`missing`?`missing`:`unavailable`,workspacePath:r.workspacePath,assistantId:n});let b=(0,L.jsx)(J,{displayName:g,filename:u,sizeBytes:f,kind:d,state:`ready`,workspacePath:r.workspacePath,assistantId:n});return!p||h?b:m===null?y:d===`image`?(0,L.jsx)(Ht,{menu:v,children:(0,L.jsx)(`img`,{src:m,alt:t,onError:()=>o(e),className:zt})}):d===`video`?(0,L.jsx)(Ht,{menu:(0,L.jsx)(q,{workspacePath:r.workspacePath,filename:u,assistantId:n,onPictureInPicture:Vt()?()=>void c():void 0}),children:(0,L.jsx)(`video`,{ref:s,src:m,controls:!0,controlsList:`nodownload noplaybackrate`,disablePictureInPicture:!0,playsInline:!0,preload:`metadata`,"aria-label":_,className:zt})}):d===`audio`?(0,L.jsxs)(`span`,{className:`my-2 flex w-full max-w-md items-center gap-2`,children:[(0,L.jsx)(`audio`,{src:m,controls:!0,controlsList:`nodownload noplaybackrate`,preload:`metadata`,"aria-label":_,className:`min-w-0 flex-1`}),v]}):b}function X({href:e,workspacePath:t,assistantId:n,children:r,onActivate:i}){let a=E.use.activeConversationId(),o=t===null?Lt(e):O(t);return(0,L.jsxs)(`a`,{href:e,onClick:e=>{if(e.preventDefault(),i){i();return}if(t===null){T.error(`This file isn't available here`);return}B(t,o,n,a)},className:`inline-flex items-baseline gap-1 cursor-pointer text-[var(--system-positive-strong)] underline hover:opacity-80`,children:[(0,L.jsx)(H,{kind:V(o),filename:o,className:`h-3.5 w-3.5 shrink-0 self-center`}),r]})}function Z(e){return e!=null&&(e.startsWith(`vellum://workspace/`)||e.startsWith(`vellum://host/`))}function Wt(e){return Z(e)?e:ee(e)}function Gt({href:e,children:t}){let n=N(e),r=/^https?:\/\//i.test(e??``);return(0,L.jsxs)(`a`,{href:e,target:`_blank`,rel:n?void 0:`noopener noreferrer`,onClick:t=>{if(Ne(e)){t.preventDefault();return}ke(t,e)},className:`text-[var(--system-positive-strong)] underline hover:opacity-80`,children:[t,r?(0,L.jsx)(C,{"aria-hidden":!0,className:`ml-0.5 inline h-3.5 w-3.5 shrink-0 align-[-0.125em]`}):null]})}function Q(e){return typeof e==`string`?e:typeof e==`number`?String(e):Array.isArray(e)?e.map(Q).join(``):(0,j.isValidElement)(e)?Q(e.props.children):``}var Kt=`my-2 max-w-full max-h-[400px] rounded-lg border border-[var(--border-element)] object-contain`;function $({alt:e}){return(0,L.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 qt({src:e,alt:t}){let[n,r]=(0,j.useState)(!1);return n?(0,L.jsx)($,{alt:t}):(0,L.jsx)(`img`,{src:e,alt:t,onError:()=>r(!0),className:Kt})}function Jt(e){try{return decodeURIComponent(e)}catch{return e}}function Yt(e,t){let n=Jt(e.split(`/`).pop()??``),r=t?.find(e=>e.filename===n);if(!r)return;let i=r.mimeType;if(!(i===void 0||!i.startsWith(`image/`)))return r}function Xt({attachment:e,alt:n,assistantId:r,onOpenPreview:i}){let[a,o]=(0,j.useState)(null),[s,c]=(0,j.useState)(!1);if((0,j.useEffect)(()=>{if(!r||e.id.startsWith(`rehydrated:`))return;let n=!1;return(async()=>{try{let{data:t,error:i}=await ue({path:{assistant_id:r,id:e.id},parseAs:`blob`,throwOnError:!1});if(n)return;if(i||!(t instanceof Blob)){c(!0);return}o(URL.createObjectURL(t))}catch(e){n||(c(!0),t(e,{context:`WorkspaceInlineImage`,bestEffort:!0}))}})(),()=>{n=!0,o(e=>(e&&URL.revokeObjectURL(e),null))}},[e,r]),s)return(0,L.jsx)($,{alt:n||e.filename});if(!a)return(0,L.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 l=(0,L.jsx)(`img`,{src:a,alt:n,className:Kt});return i?(0,L.jsx)(`button`,{type:`button`,onClick:()=>i(e),className:`cursor-zoom-in appearance-none border-0 bg-transparent p-0`,"aria-label":n?`Expand image: ${n}`:`Expand image`,children:l}):l}var Zt=(0,j.memo)(function({content:e,className:t,hardLineBreaks:n,onVellumLinkClick:r,attachments:i,assistantId:a,streamWordFade:o,redactedCredentialChips:s,workspacePathLinks:c}){let{openPreview:l,previewModal:u}=_(a,i),d=E.use.activeConversationId(),f=(0,j.useCallback)((e,t)=>{let{workspacePath:n,filename:i}=Y(e);if(a&&n!==null){B(n,i,a,d);return}r?.(e,t)},[a,d,r]),p=(0,j.useCallback)(({href:e,children:t})=>{if(e!=null&&Z(e)){let{workspacePath:n}=Y(e);return(0,L.jsx)(X,{href:e,workspacePath:n,assistantId:a??void 0,onActivate:r&&!(a&&n!==null)?()=>r(e,Q(t)):void 0,children:t})}let n=K(e);if(e!=null&&n.kind===`local-file`){let{workspacePath:i}=n;return(0,L.jsx)(X,{href:e,workspacePath:i,assistantId:a??void 0,onActivate:r&&i!==null&&!a?()=>r(ge(i),Q(t)):void 0,children:t})}return(0,L.jsx)(Gt,{href:e,children:t})},[r,a]),m=(0,j.useMemo)(()=>[...s?[lt]:[],...c&&r?[St]:[],...o?[[_t,{caughtUp:o===`caughtUp`}]]:[]],[s,o,c,r]),h=(0,j.useMemo)(()=>({src:e,alt:t})=>{let n=(0,L.jsx)(Ut,{href:e,alt:t,assistantId:a??void 0});if(Z(e)){let r=Yt(e,i);return r?(0,L.jsx)(Xt,{attachment:r,alt:t,assistantId:a,onOpenPreview:l}):n}return K(e).kind===`local-file`?n:e.length===0?(0,L.jsx)($,{alt:t}):(0,L.jsx)(qt,{src:e,alt:t})},[i,a,l]),g=(0,j.useMemo)(()=>({[G]:e=>(0,L.jsx)($e,{...e,assistantId:a},`${a??``}\u0000${e.service??``}\u0000${e.field??``}`),[k]:e=>(0,L.jsx)(Et,{...e,assistantId:a,onOpen:r?f:void 0})}),[a,r,f]);return(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(x,{content:e,className:t,hardLineBreaks:n,linkComponent:p,imageComponent:h,urlTransform:Wt,extraRehypePlugins:m,extraComponents:s||c&&r?g:void 0}),u]})});export{Ue as a,Pe as c,V as i,I as l,Ze as n,We as o,H as r,Ge as s,Zt as t};
@@ -1 +1 @@
1
- import{o as e}from"./chunk-jRWAZmH_.js";import{t}from"./react-BFJW0bSv.js";import{t as n}from"./button-BENY-yx_.js";import{d as r,h as i,t as a}from"./chunk-5KNZJZUH-BUqIilZr.js";import{n as o}from"./QueryClientProvider-CMu7CkQU.js";import{t as s}from"./useMutation-CXGTrp4W.js";import{t as c}from"./jsx-runtime-D3ZM-ToX.js";import{t as l}from"./loader-circle-DOtGXcds.js";import{l as u,tt as d,u as f}from"./auth-store-DkOiOQNx.js";import{L as p,N as m,P as h,f as g}from"./platform-detection-C_TK32Dw.js";import{d as _}from"./routes-iipg2wkc.js";import{a as v}from"./use-platform-gate-CdwOyQ8A.js";import{i as y}from"./use-is-org-ready-BmOdacs1.js";import{n as b}from"./browser-BP3Xidk_.js";import{ft as x}from"./react-query.gen-DKb3mEwJ.js";import{n as S,r as C}from"./checkout-continuation-GOQDBt2E.js";import{t as w}from"./checkout-return-target-VIzzqviy.js";var T=e(t(),1),E=c();function D(){h(),f()}function O(){let e=r(),[t]=i(),c=t.get(`package`)??``,f=(0,T.useMemo)(()=>c?null:m(t),[c,t]),h=v(),g=y(),O=C(),k=S(t,_.plans),A=k===_.plans?`View plans`:`Continue setup`,j=o(),{mutateAsync:M}=s(x()),[N,P]=(0,T.useState)(!1),[F,I]=(0,T.useState)(!1),L=(0,T.useRef)(`idle`),R=(0,T.useCallback)(async()=>{L.current=`running`,P(!1),I(!1);let t=w();try{let n=await M({body:f?{target_plan_id:`pro`,confirm:!0,machine_tier:f.machineTier,storage_tier:f.storageTier,credit_tier:f.creditTier,return_target:t}:{target_plan_id:`pro`,package:c,confirm:!0,return_target:t}});if(L.current!==`running`)return;if(n.status===`redirect`&&n.checkout_url){L.current=`handed_off`,p(f?{kind:`custom`,machineTier:f.machineTier,storageTier:f.storageTier,creditTier:f.creditTier}:{kind:`package`,packageKey:c}),u(j),I(t===`native`),b(n.checkout_url);return}L.current=`settled`,D(),e(k===_.plans&&c?_.plansForPackage(c):k,{replace:!0})}catch{if(L.current!==`running`)return;L.current=`settled`,P(!0)}},[k,f,M,e,c,j]),z=(0,T.useCallback)(()=>{if(g===`ready`){R();return}L.current=`idle`,P(!1),I(!1),g===`unavailable`&&d.getState().fetchOrganizations()},[g,R]);return(0,T.useEffect)(()=>{if(!c&&!f||h===`disabled`||h===`gated`||O===`disabled`){if(L.current===`handed_off`)return;L.current=`settled`,D(),e(k,{replace:!0});return}if(!(O!==`enabled`||h!==`full`||L.current!==`idle`)&&g!==`resolving`){if(g===`unavailable`){L.current=`settled`,P(!0);return}R()}},[k,f,h,e,g,c,R,O]),N?(0,E.jsxs)(`div`,{className:`flex h-full w-full flex-col items-center justify-center gap-4 px-6 text-center`,children:[(0,E.jsx)(`p`,{className:`text-[var(--content-default)]`,children:`We couldn’t start your checkout. Please try again.`}),(0,E.jsxs)(`div`,{className:`flex items-center gap-4`,children:[(0,E.jsx)(n,{onClick:z,children:`Try again`}),(0,E.jsx)(a,{to:k,onClick:D,className:`text-sm text-[var(--content-tertiary)] underline`,children:A})]})]}):F?(0,E.jsxs)(`div`,{className:`flex h-full w-full flex-col items-center justify-center gap-4 px-6 text-center`,children:[(0,E.jsx)(`p`,{className:`text-[var(--content-default)]`,children:`Checkout opened in your browser. Finish there to complete your upgrade.`}),(0,E.jsxs)(`div`,{className:`flex items-center gap-4`,children:[(0,E.jsx)(n,{onClick:z,children:`Reopen checkout`}),(0,E.jsx)(a,{to:k,className:`text-sm text-[var(--content-tertiary)] underline`,children:A})]})]}):(0,E.jsxs)(`div`,{className:`flex h-full w-full flex-col items-center justify-center gap-3`,children:[(0,E.jsx)(l,{className:`h-6 w-6 animate-spin text-[var(--content-tertiary)]`,"aria-label":`Preparing checkout`}),(0,E.jsx)(`p`,{className:`text-sm text-[var(--content-tertiary)]`,children:`Preparing checkout…`})]})}function k(){let e=r(),[t]=i(),n=S(t,_.settings.usageBilling);return(0,T.useEffect)(()=>{D(),e(n,{replace:!0})},[e,n]),null}function A(){return g()?(0,E.jsx)(k,{}):(0,E.jsx)(O,{})}export{A as CheckoutPage};
1
+ import{o as e}from"./chunk-jRWAZmH_.js";import{t}from"./react-BFJW0bSv.js";import{t as n}from"./button-BENY-yx_.js";import{d as r,h as i,t as a}from"./chunk-5KNZJZUH-BUqIilZr.js";import{n as o}from"./QueryClientProvider-CMu7CkQU.js";import{t as s}from"./useMutation-CXGTrp4W.js";import{t as c}from"./jsx-runtime-D3ZM-ToX.js";import{t as l}from"./loader-circle-DOtGXcds.js";import{l as u,tt as d,u as f}from"./auth-store-BJdkkmzu.js";import{L as p,N as m,P as h,f as g}from"./platform-detection-C_TK32Dw.js";import{d as _}from"./routes-iipg2wkc.js";import{a as v}from"./use-platform-gate-2lhRAyKS.js";import{i as y}from"./use-is-org-ready-CQntk0MX.js";import{n as b}from"./browser-BP3Xidk_.js";import{ft as x}from"./react-query.gen-DKb3mEwJ.js";import{n as S,r as C}from"./checkout-continuation-GOQDBt2E.js";import{t as w}from"./checkout-return-target-VIzzqviy.js";var T=e(t(),1),E=c();function D(){h(),f()}function O(){let e=r(),[t]=i(),c=t.get(`package`)??``,f=(0,T.useMemo)(()=>c?null:m(t),[c,t]),h=v(),g=y(),O=C(),k=S(t,_.plans),A=k===_.plans?`View plans`:`Continue setup`,j=o(),{mutateAsync:M}=s(x()),[N,P]=(0,T.useState)(!1),[F,I]=(0,T.useState)(!1),L=(0,T.useRef)(`idle`),R=(0,T.useCallback)(async()=>{L.current=`running`,P(!1),I(!1);let t=w();try{let n=await M({body:f?{target_plan_id:`pro`,confirm:!0,machine_tier:f.machineTier,storage_tier:f.storageTier,credit_tier:f.creditTier,return_target:t}:{target_plan_id:`pro`,package:c,confirm:!0,return_target:t}});if(L.current!==`running`)return;if(n.status===`redirect`&&n.checkout_url){L.current=`handed_off`,p(f?{kind:`custom`,machineTier:f.machineTier,storageTier:f.storageTier,creditTier:f.creditTier}:{kind:`package`,packageKey:c}),u(j),I(t===`native`),b(n.checkout_url);return}L.current=`settled`,D(),e(k===_.plans&&c?_.plansForPackage(c):k,{replace:!0})}catch{if(L.current!==`running`)return;L.current=`settled`,P(!0)}},[k,f,M,e,c,j]),z=(0,T.useCallback)(()=>{if(g===`ready`){R();return}L.current=`idle`,P(!1),I(!1),g===`unavailable`&&d.getState().fetchOrganizations()},[g,R]);return(0,T.useEffect)(()=>{if(!c&&!f||h===`disabled`||h===`gated`||O===`disabled`){if(L.current===`handed_off`)return;L.current=`settled`,D(),e(k,{replace:!0});return}if(!(O!==`enabled`||h!==`full`||L.current!==`idle`)&&g!==`resolving`){if(g===`unavailable`){L.current=`settled`,P(!0);return}R()}},[k,f,h,e,g,c,R,O]),N?(0,E.jsxs)(`div`,{className:`flex h-full w-full flex-col items-center justify-center gap-4 px-6 text-center`,children:[(0,E.jsx)(`p`,{className:`text-[var(--content-default)]`,children:`We couldn’t start your checkout. Please try again.`}),(0,E.jsxs)(`div`,{className:`flex items-center gap-4`,children:[(0,E.jsx)(n,{onClick:z,children:`Try again`}),(0,E.jsx)(a,{to:k,onClick:D,className:`text-sm text-[var(--content-tertiary)] underline`,children:A})]})]}):F?(0,E.jsxs)(`div`,{className:`flex h-full w-full flex-col items-center justify-center gap-4 px-6 text-center`,children:[(0,E.jsx)(`p`,{className:`text-[var(--content-default)]`,children:`Checkout opened in your browser. Finish there to complete your upgrade.`}),(0,E.jsxs)(`div`,{className:`flex items-center gap-4`,children:[(0,E.jsx)(n,{onClick:z,children:`Reopen checkout`}),(0,E.jsx)(a,{to:k,className:`text-sm text-[var(--content-tertiary)] underline`,children:A})]})]}):(0,E.jsxs)(`div`,{className:`flex h-full w-full flex-col items-center justify-center gap-3`,children:[(0,E.jsx)(l,{className:`h-6 w-6 animate-spin text-[var(--content-tertiary)]`,"aria-label":`Preparing checkout`}),(0,E.jsx)(`p`,{className:`text-sm text-[var(--content-tertiary)]`,children:`Preparing checkout…`})]})}function k(){let e=r(),[t]=i(),n=S(t,_.settings.usageBilling);return(0,T.useEffect)(()=>{D(),e(n,{replace:!0})},[e,n]),null}function A(){return g()?(0,E.jsx)(k,{}):(0,E.jsx)(O,{})}export{A as CheckoutPage};
@@ -1 +1 @@
1
- import{o as e}from"./chunk-jRWAZmH_.js";import{t}from"./react-BFJW0bSv.js";import{W as n,t as r}from"./button-BENY-yx_.js";import{t as i}from"./jsx-runtime-D3ZM-ToX.js";import{t as a}from"./typography-BeUa5Fd-.js";import{P as o}from"./src-hNk11eS3.js";import{t as s}from"./loader-circle-DOtGXcds.js";import{t as c}from"./search-D2xMZu1P.js";import{t as l}from"./x-338EsJDP.js";import{m as u}from"./platform-detection-C_TK32Dw.js";import{n as d}from"./use-is-mobile-BP8UePsY.js";import{n as f,t as p}from"./proxy-B4sTDdE4.js";import{t as m}from"./AnimatePresence-D41IKJOi.js";import{t as h}from"./use-reduced-motion-CaGZSwLZ.js";var g=e(t(),1),_=e(n(),1),v=i();function y(e){return e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}function b(e,t){let n=[...new Set(t??[])].filter(e=>e.length>0).sort((e,t)=>t.length-e.length);if(n.length===0)return e;let r=n.map(y).join(`|`),i=RegExp(`(?<![\\p{L}\\p{N}])(?:${r})(?![\\p{L}\\p{N}])`,`giu`),a=[],o=0;for(let t of e.matchAll(i))a.push(e.slice(o,t.index)),a.push((0,v.jsx)(`span`,{className:`font-medium text-[var(--content-default)]`,children:t[0]},t.index)),o=t.index+t[0].length;return a.length===0?e:(a.push(e.slice(o)),(0,v.jsx)(v.Fragment,{children:a}))}function x({icon:e,title:t,subtitle:n,snippet:r,highlightTokens:i,shortcutHint:a,isSelected:s,onClick:c,surface:l=`overlay`}){let u=e;return l===`window`?(0,v.jsxs)(`button`,{type:`button`,role:`option`,"aria-current":s?`page`:void 0,"aria-selected":s,onClick:c,className:[`flex w-full items-center gap-3 rounded-md px-3 text-left text-sm font-medium outline-none transition-colors`,r?`py-1.5`:`h-10`,s?`bg-[var(--surface-active)] text-[var(--content-default)]`:`text-[var(--content-secondary)] hover:bg-[var(--surface-overlay)] hover:text-[var(--content-default)]`].join(` `),children:[u?(0,v.jsx)(u,{size:16,"aria-hidden":!0,className:s?`shrink-0 text-[var(--content-default)]`:`shrink-0 text-[var(--content-tertiary)]`}):null,(0,v.jsxs)(`span`,{className:`flex min-w-0 flex-1 flex-col`,children:[(0,v.jsxs)(`span`,{className:`flex min-w-0 items-center gap-2`,children:[(0,v.jsx)(`span`,{className:`truncate`,children:t}),n?(0,v.jsx)(`span`,{className:`min-w-0 truncate text-xs text-[var(--content-tertiary)]`,children:n}):null,a?(0,v.jsx)(`span`,{className:`ml-auto shrink-0 text-xs text-[var(--content-tertiary)]`,children:a}):null]}),r?(0,v.jsx)(`span`,{className:`truncate text-xs font-normal text-[var(--content-tertiary)]`,children:b(r,i)}):null]})]}):(0,v.jsx)(o,{icon:e,label:(0,v.jsxs)(`span`,{className:`flex min-w-0 flex-1 flex-col`,children:[(0,v.jsxs)(`span`,{className:`flex min-w-0 items-center gap-2`,children:[(0,v.jsx)(`span`,{className:`truncate`,children:t}),n?(0,v.jsx)(`span`,{className:`min-w-0 truncate text-[var(--content-tertiary)] text-body-small-default`,children:n}):null,a?(0,v.jsx)(`span`,{className:`ml-auto shrink-0 text-[var(--content-tertiary)] text-body-small-default`,children:a}):null]}),r?(0,v.jsx)(`span`,{className:`truncate text-[var(--content-tertiary)] text-body-small-default`,children:b(r,i)}):null]}),active:s,onSelect:c,className:r?`h-auto px-3 py-2`:`px-3 py-2`})}var S=`fixed inset-0 z-50 flex flex-col bg-[var(--surface-lift)]`,C={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))`},w={...C,pointerEvents:`none`},T=({onKeyDown:e,children:t})=>{let n=f(),r=h(),i=(0,g.useRef)(null);return(0,g.useLayoutEffect)(()=>{if(n)return;let e=document.activeElement;e instanceof HTMLElement&&i.current?.contains(e)&&e.blur()},[n]),(0,v.jsx)(p.div,{ref:i,className:S,style:n?C:w,role:`dialog`,"aria-modal":n?!0:void 0,"aria-hidden":n?void 0:!0,"aria-label":`Search`,onKeyDown:e,initial:{y:`100%`,opacity:0},animate:{y:0,opacity:1},exit:{y:`100%`,opacity:0},transition:r?{duration:0}:{duration:.28,ease:[.16,1,.3,1]},children:t})},E=({isOpen:e,onClose:t,query:n,onQueryChange:i,highlightTokens:o,selectedIndex:f,sections:p,isSearching:h=!1,onItemSelect:y,onKeyDown:b,surface:w=`overlay`})=>{let E=d(),D=u(),O=(0,g.useRef)(null),k=(0,g.useRef)(null),A=(0,g.useRef)(null);(0,g.useEffect)(()=>{if(e){let e=requestAnimationFrame(()=>{k.current?.focus()});return()=>cancelAnimationFrame(e)}},[e]),(0,g.useEffect)(()=>{if(!e||!A.current)return;let t=A.current.querySelector(`[aria-current='page']`);t&&t.scrollIntoView({block:`nearest`})},[e,f]);let j=(0,g.useCallback)(e=>{e.target===O.current&&t()},[t]),M=w===`window`,N=E&&!M,P=D&&N;if(!e&&!P)return null;let F=0,I=(0,v.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2 border-b border-[var(--border-base)] px-4 py-3`,children:[h?(0,v.jsx)(s,{size:16,"aria-hidden":!0,className:`shrink-0 animate-spin text-[var(--content-tertiary)]`}):(0,v.jsx)(c,{size:16,"aria-hidden":!0,className:`shrink-0 text-[var(--content-tertiary)]`}),(0,v.jsx)(`input`,{ref:k,type:`text`,value:n,onChange:e=>i(e.target.value),placeholder:`Search conversations, memories…`,className:M?`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?N?(0,v.jsx)(`button`,{type:`button`,className:`shrink-0 text-body-medium-lighter text-[var(--content-tertiary)]`,onClick:()=>i(``),"aria-label":`Clear search`,children:`Clear`}):M?(0,v.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,v.jsx)(l,{size:16,"aria-hidden":!0})}):(0,v.jsx)(r,{variant:`ghost`,size:`compact`,iconOnly:(0,v.jsx)(l,{}),"aria-label":`Clear search`,onClick:()=>i(``),tintColor:`var(--content-tertiary)`}):N?null:(0,v.jsx)(`kbd`,{className:M?`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`}),N?(0,v.jsx)(r,{variant:`ghost`,size:`compact`,iconOnly:(0,v.jsx)(l,{}),expandOnMobile:!1,"aria-label":`Close search`,onClick:t,tintColor:`var(--content-tertiary)`}):null]}),L=(0,v.jsx)(`div`,{ref:A,className:N?`flex-1 overflow-y-auto overscroll-contain p-2`:`max-h-[360px] overflow-y-auto overscroll-contain p-2`,role:`listbox`,children:p.length===0?(0,v.jsx)(`div`,{className:`px-3 py-6 text-center`,children:(0,v.jsx)(a,{variant:`body-medium-lighter`,className:`text-[var(--content-tertiary)]`,children:h?`Searching…`:`No results`})}):p.map(e=>(0,v.jsxs)(`div`,{role:`group`,"aria-label":e.label,children:[(0,v.jsx)(a,{variant:`label-small-default`,as:`div`,className:M?`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=F++;return(0,v.jsx)(x,{icon:e.icon,title:e.title,subtitle:e.subtitle,snippet:e.snippet,highlightTokens:o,shortcutHint:N?void 0:e.shortcutHint,isSelected:t===f,onClick:()=>y?.(e,t),surface:w},e.id)})]},e.id))});if(P)return(0,v.jsx)(m,{children:e?(0,v.jsxs)(T,{onKeyDown:b,children:[I,L]},`command-palette-sheet`):null});if(N)return(0,v.jsxs)(`div`,{className:S,role:`dialog`,"aria-modal":`true`,"aria-label":`Search`,onKeyDown:b,style:C,children:[I,L]});let R=(0,v.jsx)(`div`,{ref:O,role:`dialog`,"aria-modal":`true`,"aria-label":`Command palette`,className:w===`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:j,onKeyDown:b,children:(0,v.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:[I,L]})});return w===`window`?R:(0,_.createPortal)(R,document.body)};export{E as CommandPalette};
1
+ import{o as e}from"./chunk-jRWAZmH_.js";import{t}from"./react-BFJW0bSv.js";import{W as n,t as r}from"./button-BENY-yx_.js";import{t as i}from"./jsx-runtime-D3ZM-ToX.js";import{t as a}from"./typography-BeUa5Fd-.js";import{F as o}from"./src-DyqTPMO2.js";import{t as s}from"./loader-circle-DOtGXcds.js";import{t as c}from"./search-D2xMZu1P.js";import{t as l}from"./x-338EsJDP.js";import{m as u}from"./platform-detection-C_TK32Dw.js";import{n as d}from"./use-is-mobile-BP8UePsY.js";import{n as f,t as p}from"./proxy-B4sTDdE4.js";import{t as m}from"./AnimatePresence-D41IKJOi.js";import{t as h}from"./use-reduced-motion-CaGZSwLZ.js";var g=e(t(),1),_=e(n(),1),v=i();function y(e){return e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}function b(e,t){let n=[...new Set(t??[])].filter(e=>e.length>0).sort((e,t)=>t.length-e.length);if(n.length===0)return e;let r=n.map(y).join(`|`),i=RegExp(`(?<![\\p{L}\\p{N}])(?:${r})(?![\\p{L}\\p{N}])`,`giu`),a=[],o=0;for(let t of e.matchAll(i))a.push(e.slice(o,t.index)),a.push((0,v.jsx)(`span`,{className:`font-medium text-[var(--content-default)]`,children:t[0]},t.index)),o=t.index+t[0].length;return a.length===0?e:(a.push(e.slice(o)),(0,v.jsx)(v.Fragment,{children:a}))}function x({icon:e,title:t,subtitle:n,snippet:r,highlightTokens:i,shortcutHint:a,isSelected:s,onClick:c,surface:l=`overlay`}){let u=e;return l===`window`?(0,v.jsxs)(`button`,{type:`button`,role:`option`,"aria-current":s?`page`:void 0,"aria-selected":s,onClick:c,className:[`flex w-full items-center gap-3 rounded-md px-3 text-left text-sm font-medium outline-none transition-colors`,r?`py-1.5`:`h-10`,s?`bg-[var(--surface-active)] text-[var(--content-default)]`:`text-[var(--content-secondary)] hover:bg-[var(--surface-overlay)] hover:text-[var(--content-default)]`].join(` `),children:[u?(0,v.jsx)(u,{size:16,"aria-hidden":!0,className:s?`shrink-0 text-[var(--content-default)]`:`shrink-0 text-[var(--content-tertiary)]`}):null,(0,v.jsxs)(`span`,{className:`flex min-w-0 flex-1 flex-col`,children:[(0,v.jsxs)(`span`,{className:`flex min-w-0 items-center gap-2`,children:[(0,v.jsx)(`span`,{className:`truncate`,children:t}),n?(0,v.jsx)(`span`,{className:`min-w-0 truncate text-xs text-[var(--content-tertiary)]`,children:n}):null,a?(0,v.jsx)(`span`,{className:`ml-auto shrink-0 text-xs text-[var(--content-tertiary)]`,children:a}):null]}),r?(0,v.jsx)(`span`,{className:`truncate text-xs font-normal text-[var(--content-tertiary)]`,children:b(r,i)}):null]})]}):(0,v.jsx)(o,{icon:e,label:(0,v.jsxs)(`span`,{className:`flex min-w-0 flex-1 flex-col`,children:[(0,v.jsxs)(`span`,{className:`flex min-w-0 items-center gap-2`,children:[(0,v.jsx)(`span`,{className:`truncate`,children:t}),n?(0,v.jsx)(`span`,{className:`min-w-0 truncate text-[var(--content-tertiary)] text-body-small-default`,children:n}):null,a?(0,v.jsx)(`span`,{className:`ml-auto shrink-0 text-[var(--content-tertiary)] text-body-small-default`,children:a}):null]}),r?(0,v.jsx)(`span`,{className:`truncate text-[var(--content-tertiary)] text-body-small-default`,children:b(r,i)}):null]}),active:s,onSelect:c,className:r?`h-auto px-3 py-2`:`px-3 py-2`})}var S=`fixed inset-0 z-50 flex flex-col bg-[var(--surface-lift)]`,C={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))`},w={...C,pointerEvents:`none`},T=({onKeyDown:e,children:t})=>{let n=f(),r=h(),i=(0,g.useRef)(null);return(0,g.useLayoutEffect)(()=>{if(n)return;let e=document.activeElement;e instanceof HTMLElement&&i.current?.contains(e)&&e.blur()},[n]),(0,v.jsx)(p.div,{ref:i,className:S,style:n?C:w,role:`dialog`,"aria-modal":n?!0:void 0,"aria-hidden":n?void 0:!0,"aria-label":`Search`,onKeyDown:e,initial:{y:`100%`,opacity:0},animate:{y:0,opacity:1},exit:{y:`100%`,opacity:0},transition:r?{duration:0}:{duration:.28,ease:[.16,1,.3,1]},children:t})},E=({isOpen:e,onClose:t,query:n,onQueryChange:i,highlightTokens:o,selectedIndex:f,sections:p,isSearching:h=!1,onItemSelect:y,onKeyDown:b,surface:w=`overlay`})=>{let E=d(),D=u(),O=(0,g.useRef)(null),k=(0,g.useRef)(null),A=(0,g.useRef)(null);(0,g.useEffect)(()=>{if(e){let e=requestAnimationFrame(()=>{k.current?.focus()});return()=>cancelAnimationFrame(e)}},[e]),(0,g.useEffect)(()=>{if(!e||!A.current)return;let t=A.current.querySelector(`[aria-current='page']`);t&&t.scrollIntoView({block:`nearest`})},[e,f]);let j=(0,g.useCallback)(e=>{e.target===O.current&&t()},[t]),M=w===`window`,N=E&&!M,P=D&&N;if(!e&&!P)return null;let F=0,I=(0,v.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2 border-b border-[var(--border-base)] px-4 py-3`,children:[h?(0,v.jsx)(s,{size:16,"aria-hidden":!0,className:`shrink-0 animate-spin text-[var(--content-tertiary)]`}):(0,v.jsx)(c,{size:16,"aria-hidden":!0,className:`shrink-0 text-[var(--content-tertiary)]`}),(0,v.jsx)(`input`,{ref:k,type:`text`,value:n,onChange:e=>i(e.target.value),placeholder:`Search conversations, memories…`,className:M?`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?N?(0,v.jsx)(`button`,{type:`button`,className:`shrink-0 text-body-medium-lighter text-[var(--content-tertiary)]`,onClick:()=>i(``),"aria-label":`Clear search`,children:`Clear`}):M?(0,v.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,v.jsx)(l,{size:16,"aria-hidden":!0})}):(0,v.jsx)(r,{variant:`ghost`,size:`compact`,iconOnly:(0,v.jsx)(l,{}),"aria-label":`Clear search`,onClick:()=>i(``),tintColor:`var(--content-tertiary)`}):N?null:(0,v.jsx)(`kbd`,{className:M?`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`}),N?(0,v.jsx)(r,{variant:`ghost`,size:`compact`,iconOnly:(0,v.jsx)(l,{}),expandOnMobile:!1,"aria-label":`Close search`,onClick:t,tintColor:`var(--content-tertiary)`}):null]}),L=(0,v.jsx)(`div`,{ref:A,className:N?`flex-1 overflow-y-auto overscroll-contain p-2`:`max-h-[360px] overflow-y-auto overscroll-contain p-2`,role:`listbox`,children:p.length===0?(0,v.jsx)(`div`,{className:`px-3 py-6 text-center`,children:(0,v.jsx)(a,{variant:`body-medium-lighter`,className:`text-[var(--content-tertiary)]`,children:h?`Searching…`:`No results`})}):p.map(e=>(0,v.jsxs)(`div`,{role:`group`,"aria-label":e.label,children:[(0,v.jsx)(a,{variant:`label-small-default`,as:`div`,className:M?`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=F++;return(0,v.jsx)(x,{icon:e.icon,title:e.title,subtitle:e.subtitle,snippet:e.snippet,highlightTokens:o,shortcutHint:N?void 0:e.shortcutHint,isSelected:t===f,onClick:()=>y?.(e,t),surface:w},e.id)})]},e.id))});if(P)return(0,v.jsx)(m,{children:e?(0,v.jsxs)(T,{onKeyDown:b,children:[I,L]},`command-palette-sheet`):null});if(N)return(0,v.jsxs)(`div`,{className:S,role:`dialog`,"aria-modal":`true`,"aria-label":`Search`,onKeyDown:b,style:C,children:[I,L]});let R=(0,v.jsx)(`div`,{ref:O,role:`dialog`,"aria-modal":`true`,"aria-label":`Command palette`,className:w===`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:j,onKeyDown:b,children:(0,v.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:[I,L]})});return w===`window`?R:(0,_.createPortal)(R,document.body)};export{E as CommandPalette};
@@ -1 +1 @@
1
- import{o as e}from"./chunk-jRWAZmH_.js";import{t}from"./react-BFJW0bSv.js";import{t as n}from"./jsx-runtime-D3ZM-ToX.js";import{c as r,i,n as a,o,t as s}from"./use-command-palette-sections-DXzS2Tio.js";import{n as c}from"./resolved-assistants-store-BFI9c7ip.js";import{Q as l,i as u,n as d,s as f}from"./auth-store-DkOiOQNx.js";import{t as p}from"./use-app-theme-CV9AULGm.js";import{i as m}from"./conversation-queries-CMEwcap1.js";import{CommandPalette as h}from"./command-palette-DSxHNf_m.js";var g=e(t(),1),_=n(),v=()=>void 0,y=e=>void 0,b=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`};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 x(){let e=d.use.sessionStatus(),t=f(),n=u();p(),o(!t),r({sessionStatus:e,hasPlatformSession:n});let x=c.use.assistants(),S=c.use.activeAssistantId(),C=l(),w=(0,g.useMemo)(()=>{let e=C??S;if(!e)return null;let t=x.find(t=>t.id===e);return t?{id:t.id,name:t.name}:null},[C,S,x]),T=w?.id??null,{conversations:E}=m(T,!0),D=(0,g.useCallback)(e=>{let t=b(e);t&&i(t)},[]),{commandPalette:O,mergedSections:k,handleItemSelect:A}=s({assistantId:T,assistantName:w?.name,conversations:E,activeConversationId:void 0,startNewConversation:v,switchConversation:v,navigate:y,navigateToSettings:v,isOpen:!0,onClose:()=>{a()},onItemSelect:D});return(0,_.jsx)(`div`,{className:`h-screen w-screen bg-transparent`,children:(0,_.jsx)(h,{isOpen:!0,surface:`window`,onClose:O.close,query:O.query,onQueryChange:O.setQuery,highlightTokens:O.searchTokens,selectedIndex:O.selectedIndex,sections:k,isSearching:O.isSearching,onItemSelect:A,onKeyDown:O.handleKeyDown})})}export{x as CommandPaletteWindowPage};
1
+ import{o as e}from"./chunk-jRWAZmH_.js";import{t}from"./react-BFJW0bSv.js";import{t as n}from"./jsx-runtime-D3ZM-ToX.js";import{c as r,i,n as a,o,t as s}from"./use-command-palette-sections-D3aj-BzX.js";import{n as c}from"./resolved-assistants-store-BFI9c7ip.js";import{Q as l,i as u,n as d,s as f}from"./auth-store-BJdkkmzu.js";import{t as p}from"./use-app-theme-CV9AULGm.js";import{i as m}from"./conversation-queries-Bx_JApUN.js";import{CommandPalette as h}from"./command-palette-D6aRon6x.js";var g=e(t(),1),_=n(),v=()=>void 0,y=e=>void 0,b=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`};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 x(){let e=d.use.sessionStatus(),t=f(),n=u();p(),o(!t),r({sessionStatus:e,hasPlatformSession:n});let x=c.use.assistants(),S=c.use.activeAssistantId(),C=l(),w=(0,g.useMemo)(()=>{let e=C??S;if(!e)return null;let t=x.find(t=>t.id===e);return t?{id:t.id,name:t.name}:null},[C,S,x]),T=w?.id??null,{conversations:E}=m(T,!0),D=(0,g.useCallback)(e=>{let t=b(e);t&&i(t)},[]),{commandPalette:O,mergedSections:k,handleItemSelect:A}=s({assistantId:T,assistantName:w?.name,conversations:E,activeConversationId:void 0,startNewConversation:v,switchConversation:v,navigate:y,navigateToSettings:v,isOpen:!0,onClose:()=>{a()},onItemSelect:D});return(0,_.jsx)(`div`,{className:`h-screen w-screen bg-transparent`,children:(0,_.jsx)(h,{isOpen:!0,surface:`window`,onClose:O.close,query:O.query,onQueryChange:O.setQuery,highlightTokens:O.searchTokens,selectedIndex:O.selectedIndex,sections:k,isSearching:O.isSearching,onItemSelect:A,onKeyDown:O.handleKeyDown})})}export{x as CommandPaletteWindowPage};
@@ -1 +1 @@
1
- import{o as e}from"./chunk-jRWAZmH_.js";import{c as t,r as n,s as r,t as i}from"./local-settings-Bx7FsNo5.js";import{s as a}from"./device-settings-DZvv4pnY.js";import{t as o}from"./capture-error-Cw5vs0Ef.js";import{t as s}from"./react-BFJW0bSv.js";import{t as c}from"./button-BENY-yx_.js";import{t as l}from"./jsx-runtime-D3ZM-ToX.js";import{t as u}from"./createLucideIcon-C1mdGPB9.js";import"./src-hNk11eS3.js";import{t as d}from"./checkbox-C4x4HEp4.js";import{t as f}from"./triangle-alert-CB4pJgCL.js";import{t as p}from"./notice-C0ifrvvJ.js";import{t as m}from"./modal-DI63s9MQ.js";import{i as h,t as g}from"./api-JA_IDAQk.js";import{t as _}from"./client-feature-flag-store-C8ieIAKe.js";import{i as v,t as y}from"./dist-Br0LBu8Y.js";import{a as b,i as x}from"./typed-storage-lk6_tW16.js";import{n as S,r as C,t as ee}from"./theme-preferences-5grl-uOq.js";import{t as w}from"./use-bus-subscription-0lId9jya.js";import{o as te}from"./funnel-events-BU99LZEM.js";var T=u(`package`,[[`path`,{d:`M11 21.73a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73z`,key:`1a0edw`}],[`path`,{d:`M12 22V12`,key:`d0xqtd`}],[`polyline`,{points:`3.29 7 12 12 20.71 7`,key:`ousv84`}],[`path`,{d:`m7.5 4.27 9 5.15`,key:`1c824w`}]]),ne=u(`rocket`,[[`path`,{d:`M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5`,key:`qeys4`}],[`path`,{d:`M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09`,key:`u4xsad`}],[`path`,{d:`M9 12a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.4 22.4 0 0 1-4 2z`,key:`676m9`}],[`path`,{d:`M9 12H4s.55-3.03 2-4c1.62-1.08 5 .05 5 .05`,key:`92ym6u`}]]),E=e(s(),1),D=`NativeLaunchScreen`,O=v(D);function k(e){return e===`velvet`?`dark`:e}function A(){return y.isNativePlatform()&&y.getPlatform()===`android`&&y.isPluginAvailable(D)}async function j(e){if(A())try{await O.ready({theme:k(e)})}catch(e){o(e,{context:`native_launch_screen_ready`,bestEffort:!0})}}async function re(e){if(A())try{await O.setTheme({theme:k(e)})}catch(e){o(e,{context:`native_launch_screen_theme_sync`,bestEffort:!0})}}function ie(){return _.use.stringFlags().proactiveTips??`off`}function ae(e){return e===`on`}function M(e){return e===void 0||typeof e==`number`&&Number.isFinite(e)}function oe(e){if(!e||typeof e!=`object`||Array.isArray(e))return!1;let t=e;return typeof t.shownCount==`number`&&Number.isFinite(t.shownCount)&&M(t.dismissedAt)&&M(t.lastShownAt)}function se(e){let t=JSON.parse(e);if(!t||typeof t!=`object`||Array.isArray(t))return null;let n={};for(let[e,r]of Object.entries(t))oe(r)&&(n[e]=r);return n}function ce(e){let t=Number(e);return Number.isFinite(t)&&t>=0?t:null}var N=x({key:`device:tips:records`,scope:`device`,parse:se,serialize:JSON.stringify,fallback:{}}),le=x({key:`device:tips:enabled`,scope:`device`,parse:b,serialize:String,fallback:!0}),P=x({key:`device:tips:first_seen_at`,scope:`device`,parse:ce,serialize:String,fallback:0});function ue(){P.load()===0&&P.save(Date.now())}function de(e,t){let n=N.load(),r=n[e];N.save({...n,[e]:{...r,lastShownAt:t,shownCount:(r?.shownCount??0)+1}})}function F(e,t){let n=N.load(),r=n[e];N.save({...n,[e]:{...r,dismissedAt:t,shownCount:r?.shownCount??0}})}var I=`proactive-tips-v1`,L={impression:0,learn_more:1,dismiss:2,dont_show_again:3,click:4,completion:5};function R(e,t,n){te({stepName:t,stepIndex:L[t]},{funnelVersion:I,screen:e,variant:n})}function z(){let e=_.use.velvet(),[t,n]=(0,E.useState)(()=>S({velvetEnabled:e}));return(0,E.useEffect)(()=>{n(S({velvetEnabled:e}))},[e]),(0,E.useEffect)(()=>a(`theme`,()=>{n(S({velvetEnabled:e}))}),[e]),(0,E.useEffect)(()=>{ee(t)},[t]),{theme:t,setThemePreference:e=>{n(e),C(e),re(e)}}}var B=6e4;function V(e){return!!(e?.enabled&&e.effectivelyLocked)}function H(e){return V(e)?e.acknowledged&&!e.overrideActive:!1}function U(e){return!!(e&&V(e)&&!e.acknowledged&&!e.overrideActive)}function fe(e){return!!(e?.enabled&&e.state===`warning`)}function pe(e){return U(e)?`acknowledgement-required`:H(e)?`cleanup`:fe(e)?`warning`:`inactive`}function me({monitorEnabled:e,hasResolvedStatus:t,status:n}){return!e||!t?null:U(n)?`acknowledgement-required`:null}function he(e){return`Storage cleanup mode must be acknowledged before sending messages.`}function ge(e,t){return e===t?!0:!e||!t?!1:e.enabled===t.enabled&&e.state===t.state&&e.locked===t.locked&&e.acknowledged===t.acknowledged&&e.overrideActive===t.overrideActive&&e.effectivelyLocked===t.effectivelyLocked&&e.lockId===t.lockId&&e.usagePercent===t.usagePercent&&e.thresholdPercent===t.thresholdPercent&&e.path===t.path&&e.lastCheckedAt===t.lastCheckedAt&&e.error===t.error&&e.blockedCapabilities.length===t.blockedCapabilities.length&&e.blockedCapabilities.every((e,n)=>e===t.blockedCapabilities[n])}function _e(e){return e?.usagePercent==null||!Number.isFinite(e.usagePercent)?`Unknown`:`${Math.round(e.usagePercent)}%`}var W={assistantId:null,status:null,hasResolvedStatus:!1};function ve(e,t){return e instanceof Error?e:Error(t)}function ye({assistantId:e,enabled:t,refreshKey:n,cadenceMs:r=B}){let[i,a]=(0,E.useState)(W),[o,s]=(0,E.useState)(!1),[c,l]=(0,E.useState)(null),u=(0,E.useRef)(e),d=(0,E.useRef)(t),f=(0,E.useRef)(0),p=(0,E.useRef)(0);(0,E.useLayoutEffect)(()=>{u.current=e,d.current=t}),(0,E.useEffect)(()=>{f.current+=1,a(W),l(null),s(!1)},[e,t]);let m=(0,E.useCallback)((e,t)=>d.current&&u.current===e&&f.current===t,[]),_=(0,E.useCallback)((e,t,n,r)=>{m(e,r)&&a(r=>r.assistantId===e&&r.hasResolvedStatus===n&&ge(r.status,t)?r:{assistantId:e,status:t,hasResolvedStatus:n})},[m]),v=(0,E.useCallback)(()=>{f.current+=1,a(W)},[]),y=(0,E.useCallback)(async()=>{let n=e;if(!t||!n){v();return}let r=f.current,i=p.current+1;p.current=i;try{let e=await h(n);if(p.current!==i)return;if(!e.ok){_(n,null,!1,r);return}_(n,e.data.status,!0,r)}catch{if(p.current!==i)return;_(n,null,!1,r)}},[e,_,v,t]);(0,E.useEffect)(()=>{if(!t||!e)return;y();let n=window.setInterval(()=>{y()},r);return()=>{window.clearInterval(n)}},[e,r,t,y,n]),w(`app.resume`,()=>{y()});let b=(0,E.useCallback)(n=>{if(!t||!e){v();return}let r=f.current+1;f.current=r,s(!1),l(null),_(e,n,!0,r)},[e,_,v,t]);w(`sse.event`,e=>{let t=e.message;t.type===`disk_pressure_status_changed`&&b(t.status)});let x=(0,E.useCallback)(async()=>{let n=e;if(!t||!n){v();return}let r=f.current+1;f.current=r,s(!0),l(null);try{let e=await g(n);if(!e.ok)throw Error(`Failed to acknowledge assistant disk pressure.`);if(!m(n,r))return;let t=f.current+1;f.current=t,_(n,e.data.status,!0,t),s(!1)}catch(e){m(n,r)&&l(ve(e,`Failed to acknowledge assistant disk pressure.`))}finally{m(n,r)&&s(!1)}},[e,_,v,t,m]),S=t&&i.assistantId===e?i.status:null,C=!!(t&&e&&i.assistantId===e&&i.hasResolvedStatus);return{status:S,mode:(0,E.useMemo)(()=>pe(S),[S]),hasResolvedStatus:C,isAcknowledging:o,acknowledgeError:c,acknowledge:x,applyStatusEvent:b,refresh:y}}var G=l();function be(e){let{status:t,mode:n,isAcknowledging:r=!1,acknowledgeError:i,onAcknowledge:a,onDismissWarning:o,onReviewWorkspaceData:s,onUpgradeStorage:l}=e,[u,h]=(0,E.useState)(!1),[g,_]=(0,E.useState)(!1),v=_e(t);if(n===`warning`){let e=t.usagePercent??0;return(0,G.jsx)(p,{tone:`warning`,title:`Your storage is almost full`,icon:(0,G.jsx)(T,{className:`h-4 w-4`,"aria-hidden":`true`}),onDismiss:o?()=>o(g):void 0,className:`p-4`,"data-testid":`disk-pressure-banner`,children:(0,G.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[(0,G.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,G.jsx)(`div`,{className:`h-1.5 flex-1 overflow-hidden rounded-full bg-[var(--surface-active)]`,children:(0,G.jsx)(`div`,{className:`h-full rounded-full transition-[width] duration-300`,style:{width:`${e}%`,backgroundColor:`var(--system-mid-strong)`}})}),(0,G.jsx)(`span`,{className:`text-body-medium-default shrink-0 tabular-nums text-[color:var(--system-mid-strong)]`,children:v})]}),(0,G.jsx)(`p`,{className:`m-0`,children:l?`Free up space or add more storage to avoid interruptions.`:`Free up space to avoid interruptions.`}),(0,G.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[s&&(0,G.jsx)(c,{variant:`outlined`,size:`compact`,onClick:s,children:`Manage Storage`}),l&&(0,G.jsx)(c,{variant:`outlined`,size:`compact`,onClick:l,children:`Upgrade`}),o?(0,G.jsx)(d,{className:`ml-auto`,checked:g,onCheckedChange:e=>_(e===!0),label:`Don't show again`,"data-testid":`disk-pressure-banner-dont-show-again`}):null]})]})})}if(n===`cleanup`){let e=t.usagePercent??0;return(0,G.jsx)(p,{tone:`warning`,title:`Cleanup mode is active`,icon:(0,G.jsx)(T,{className:`h-4 w-4`,"aria-hidden":`true`}),className:`p-4`,"data-testid":`disk-pressure-banner`,children:(0,G.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[(0,G.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,G.jsx)(`div`,{className:`h-1.5 flex-1 overflow-hidden rounded-full bg-[var(--surface-active)]`,children:(0,G.jsx)(`div`,{className:`h-full rounded-full transition-[width] duration-300`,style:{width:`${e}%`,backgroundColor:`var(--system-mid-strong)`}})}),(0,G.jsx)(`span`,{className:`text-body-medium-default shrink-0 tabular-nums text-[color:var(--system-mid-strong)]`,children:v})]}),(0,G.jsx)(`p`,{className:`m-0`,children:`Prompt your assistant to free up space before it runs out and enters a locked state.`}),(0,G.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[s&&(0,G.jsx)(c,{variant:`outlined`,size:`compact`,onClick:s,children:`Manage Storage`}),l&&(0,G.jsx)(c,{variant:`outlined`,size:`compact`,onClick:l,children:`Upgrade`})]})]})})}let y=t.usagePercent??0;return(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)(p,{tone:`error`,title:`Storage is critically low`,icon:(0,G.jsx)(T,{className:`h-4 w-4`,"aria-hidden":`true`}),className:`p-4`,"data-testid":`disk-pressure-banner`,children:(0,G.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[(0,G.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,G.jsx)(`div`,{className:`h-1.5 flex-1 overflow-hidden rounded-full bg-[var(--surface-active)]`,children:(0,G.jsx)(`div`,{className:`h-full rounded-full transition-[width] duration-300`,style:{width:`${y}%`,backgroundColor:`var(--system-negative-strong)`}})}),(0,G.jsx)(`span`,{className:`text-body-medium-default shrink-0 tabular-nums text-[color:var(--system-negative-strong)]`,children:v})]}),(0,G.jsx)(`p`,{className:`m-0`,children:`Your assistant will enter a locked state if it runs out of storage.`}),i?(0,G.jsx)(`span`,{className:`text-[var(--system-negative-strong)]`,role:`alert`,children:i}):null,(0,G.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:(0,G.jsx)(c,{variant:`primary`,size:`compact`,onClick:()=>h(!0),children:`Review`})})]})}),(0,G.jsx)(m.Root,{open:u,onOpenChange:e=>{e||h(!1)},children:(0,G.jsxs)(m.Content,{size:`sm`,children:[(0,G.jsx)(m.Header,{children:(0,G.jsx)(m.Title,{icon:f,children:`Storage is critically low`})}),(0,G.jsx)(m.Body,{children:(0,G.jsx)(m.Description,{children:`Your assistant will enter a locked state if it runs out of storage. You should either prompt your assistant to free up space or increase your storage.`})}),(0,G.jsxs)(m.Footer,{children:[l&&(0,G.jsx)(c,{variant:`outlined`,onClick:()=>{h(!1),l()},children:`Upgrade`}),(0,G.jsx)(c,{variant:`primary`,disabled:r,onClick:()=>{a(),h(!1)},children:r?`Acknowledging...`:`Acknowledge`})]})]})})]})}var xe=`https://apps.apple.com/us/app/vellum-assistant/id6759934423`,K=`ai.vellum.assistant`,Se=`https://play.google.com/store/apps/details?id=${K}`,q={ios:{downloaded:`app.iosNudge.downloaded`,bannerDismissed:`app.iosNudge.bannerDismissed`,assistantTurnsSeen:`app.iosNudge.assistantTurnsSeen`},android:{downloaded:`app.androidNudge.downloaded`,bannerDismissed:`app.androidNudge.bannerDismissed`,assistantTurnsSeen:`app.androidNudge.assistantTurnsSeen`}};function Ce(){let e=(void 0)?.trim();if(!e)return null;try{let t=new URL(e);return t.protocol===`https:`&&t.hostname===`play.google.com`&&t.pathname===`/store/apps/details`&&t.searchParams.get(`id`)===K?Se:null}catch(e){if(e instanceof TypeError)return null;throw e}}function J(e){return e===`ios`?`iOS`:`Android`}function Y(e){if(e===`ios`)return{platform:e,appName:J(e),storeUrl:xe};let t=Ce();return t?{platform:e,appName:J(e),storeUrl:t}:null}function we(e){return i(q[e].downloaded,!1)}function X(e){r(q[e].downloaded,!0)}function Te(e){return i(q[e].bannerDismissed,!1)}function Z(e){r(q[e].bannerDismissed,!0)}function Q(e){return Math.max(0,n(q[e].assistantTurnsSeen,0))}function Ee(e,n=1){n<=0||t(q[e].assistantTurnsSeen,Q(e)+n)}function $(e){let t=Y(e);return t?(window.open(t.storeUrl,`_blank`,`noopener,noreferrer`),!0):!1}function De(e){let[t,n]=(0,E.useState)(!1),[r,i]=(0,E.useState)(!1),a=Y(e)!==null;(0,E.useEffect)(()=>{n(we(e)),i(Te(e))},[e]);let o=(0,E.useCallback)(()=>{$(e)&&(X(e),n(!0))},[e]),s=(0,E.useCallback)(()=>{Z(e),i(!0)},[e]);return(0,E.useMemo)(()=>({bannerShouldShow:a&&!t&&!r,handleDownload:o,handleBannerDismiss:s}),[a,t,r,o,s])}var Oe=x({key:`device:cmd_enter_to_send`,scope:`device`,parse:b,serialize:String,fallback:!1}),ke=x({key:`device:show_context_window_indicator`,scope:`device`,parse:b,serialize:String,fallback:!1});export{ie as C,T as E,ae as S,ne as T,F as _,Ee as a,le as b,De as c,ye as d,he as f,ue as g,R as h,Y as i,X as l,z as m,ke as n,$ as o,me as p,J as r,Q as s,Oe as t,be as u,de as v,j as w,P as x,N as y};
1
+ import{o as e}from"./chunk-jRWAZmH_.js";import{c as t,r as n,s as r,t as i}from"./local-settings-Bx7FsNo5.js";import{s as a}from"./device-settings-DZvv4pnY.js";import{t as o}from"./capture-error-Cw5vs0Ef.js";import{t as s}from"./react-BFJW0bSv.js";import{t as c}from"./button-BENY-yx_.js";import{t as l}from"./jsx-runtime-D3ZM-ToX.js";import{t as u}from"./createLucideIcon-C1mdGPB9.js";import"./src-DyqTPMO2.js";import{t as d}from"./checkbox-C4x4HEp4.js";import{t as f}from"./triangle-alert-CB4pJgCL.js";import{t as p}from"./notice-C0ifrvvJ.js";import{t as m}from"./modal-DI63s9MQ.js";import{i as h,t as g}from"./api-JA_IDAQk.js";import{t as _}from"./client-feature-flag-store-C8ieIAKe.js";import{i as v,t as y}from"./dist-Br0LBu8Y.js";import{a as b,i as x}from"./typed-storage-lk6_tW16.js";import{n as S,r as C,t as ee}from"./theme-preferences-5grl-uOq.js";import{t as w}from"./use-bus-subscription-0lId9jya.js";import{o as te}from"./funnel-events-BU99LZEM.js";var T=u(`package`,[[`path`,{d:`M11 21.73a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73z`,key:`1a0edw`}],[`path`,{d:`M12 22V12`,key:`d0xqtd`}],[`polyline`,{points:`3.29 7 12 12 20.71 7`,key:`ousv84`}],[`path`,{d:`m7.5 4.27 9 5.15`,key:`1c824w`}]]),ne=u(`rocket`,[[`path`,{d:`M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5`,key:`qeys4`}],[`path`,{d:`M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09`,key:`u4xsad`}],[`path`,{d:`M9 12a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.4 22.4 0 0 1-4 2z`,key:`676m9`}],[`path`,{d:`M9 12H4s.55-3.03 2-4c1.62-1.08 5 .05 5 .05`,key:`92ym6u`}]]),E=e(s(),1),D=`NativeLaunchScreen`,O=v(D);function k(e){return e===`velvet`?`dark`:e}function A(){return y.isNativePlatform()&&y.getPlatform()===`android`&&y.isPluginAvailable(D)}async function j(e){if(A())try{await O.ready({theme:k(e)})}catch(e){o(e,{context:`native_launch_screen_ready`,bestEffort:!0})}}async function re(e){if(A())try{await O.setTheme({theme:k(e)})}catch(e){o(e,{context:`native_launch_screen_theme_sync`,bestEffort:!0})}}function ie(){return _.use.stringFlags().proactiveTips??`off`}function ae(e){return e===`on`}function M(e){return e===void 0||typeof e==`number`&&Number.isFinite(e)}function oe(e){if(!e||typeof e!=`object`||Array.isArray(e))return!1;let t=e;return typeof t.shownCount==`number`&&Number.isFinite(t.shownCount)&&M(t.dismissedAt)&&M(t.lastShownAt)}function se(e){let t=JSON.parse(e);if(!t||typeof t!=`object`||Array.isArray(t))return null;let n={};for(let[e,r]of Object.entries(t))oe(r)&&(n[e]=r);return n}function ce(e){let t=Number(e);return Number.isFinite(t)&&t>=0?t:null}var N=x({key:`device:tips:records`,scope:`device`,parse:se,serialize:JSON.stringify,fallback:{}}),le=x({key:`device:tips:enabled`,scope:`device`,parse:b,serialize:String,fallback:!0}),P=x({key:`device:tips:first_seen_at`,scope:`device`,parse:ce,serialize:String,fallback:0});function ue(){P.load()===0&&P.save(Date.now())}function de(e,t){let n=N.load(),r=n[e];N.save({...n,[e]:{...r,lastShownAt:t,shownCount:(r?.shownCount??0)+1}})}function F(e,t){let n=N.load(),r=n[e];N.save({...n,[e]:{...r,dismissedAt:t,shownCount:r?.shownCount??0}})}var I=`proactive-tips-v1`,L={impression:0,learn_more:1,dismiss:2,dont_show_again:3,click:4,completion:5};function R(e,t,n){te({stepName:t,stepIndex:L[t]},{funnelVersion:I,screen:e,variant:n})}function z(){let e=_.use.velvet(),[t,n]=(0,E.useState)(()=>S({velvetEnabled:e}));return(0,E.useEffect)(()=>{n(S({velvetEnabled:e}))},[e]),(0,E.useEffect)(()=>a(`theme`,()=>{n(S({velvetEnabled:e}))}),[e]),(0,E.useEffect)(()=>{ee(t)},[t]),{theme:t,setThemePreference:e=>{n(e),C(e),re(e)}}}var B=6e4;function V(e){return!!(e?.enabled&&e.effectivelyLocked)}function H(e){return V(e)?e.acknowledged&&!e.overrideActive:!1}function U(e){return!!(e&&V(e)&&!e.acknowledged&&!e.overrideActive)}function fe(e){return!!(e?.enabled&&e.state===`warning`)}function pe(e){return U(e)?`acknowledgement-required`:H(e)?`cleanup`:fe(e)?`warning`:`inactive`}function me({monitorEnabled:e,hasResolvedStatus:t,status:n}){return!e||!t?null:U(n)?`acknowledgement-required`:null}function he(e){return`Storage cleanup mode must be acknowledged before sending messages.`}function ge(e,t){return e===t?!0:!e||!t?!1:e.enabled===t.enabled&&e.state===t.state&&e.locked===t.locked&&e.acknowledged===t.acknowledged&&e.overrideActive===t.overrideActive&&e.effectivelyLocked===t.effectivelyLocked&&e.lockId===t.lockId&&e.usagePercent===t.usagePercent&&e.thresholdPercent===t.thresholdPercent&&e.path===t.path&&e.lastCheckedAt===t.lastCheckedAt&&e.error===t.error&&e.blockedCapabilities.length===t.blockedCapabilities.length&&e.blockedCapabilities.every((e,n)=>e===t.blockedCapabilities[n])}function _e(e){return e?.usagePercent==null||!Number.isFinite(e.usagePercent)?`Unknown`:`${Math.round(e.usagePercent)}%`}var W={assistantId:null,status:null,hasResolvedStatus:!1};function ve(e,t){return e instanceof Error?e:Error(t)}function ye({assistantId:e,enabled:t,refreshKey:n,cadenceMs:r=B}){let[i,a]=(0,E.useState)(W),[o,s]=(0,E.useState)(!1),[c,l]=(0,E.useState)(null),u=(0,E.useRef)(e),d=(0,E.useRef)(t),f=(0,E.useRef)(0),p=(0,E.useRef)(0);(0,E.useLayoutEffect)(()=>{u.current=e,d.current=t}),(0,E.useEffect)(()=>{f.current+=1,a(W),l(null),s(!1)},[e,t]);let m=(0,E.useCallback)((e,t)=>d.current&&u.current===e&&f.current===t,[]),_=(0,E.useCallback)((e,t,n,r)=>{m(e,r)&&a(r=>r.assistantId===e&&r.hasResolvedStatus===n&&ge(r.status,t)?r:{assistantId:e,status:t,hasResolvedStatus:n})},[m]),v=(0,E.useCallback)(()=>{f.current+=1,a(W)},[]),y=(0,E.useCallback)(async()=>{let n=e;if(!t||!n){v();return}let r=f.current,i=p.current+1;p.current=i;try{let e=await h(n);if(p.current!==i)return;if(!e.ok){_(n,null,!1,r);return}_(n,e.data.status,!0,r)}catch{if(p.current!==i)return;_(n,null,!1,r)}},[e,_,v,t]);(0,E.useEffect)(()=>{if(!t||!e)return;y();let n=window.setInterval(()=>{y()},r);return()=>{window.clearInterval(n)}},[e,r,t,y,n]),w(`app.resume`,()=>{y()});let b=(0,E.useCallback)(n=>{if(!t||!e){v();return}let r=f.current+1;f.current=r,s(!1),l(null),_(e,n,!0,r)},[e,_,v,t]);w(`sse.event`,e=>{let t=e.message;t.type===`disk_pressure_status_changed`&&b(t.status)});let x=(0,E.useCallback)(async()=>{let n=e;if(!t||!n){v();return}let r=f.current+1;f.current=r,s(!0),l(null);try{let e=await g(n);if(!e.ok)throw Error(`Failed to acknowledge assistant disk pressure.`);if(!m(n,r))return;let t=f.current+1;f.current=t,_(n,e.data.status,!0,t),s(!1)}catch(e){m(n,r)&&l(ve(e,`Failed to acknowledge assistant disk pressure.`))}finally{m(n,r)&&s(!1)}},[e,_,v,t,m]),S=t&&i.assistantId===e?i.status:null,C=!!(t&&e&&i.assistantId===e&&i.hasResolvedStatus);return{status:S,mode:(0,E.useMemo)(()=>pe(S),[S]),hasResolvedStatus:C,isAcknowledging:o,acknowledgeError:c,acknowledge:x,applyStatusEvent:b,refresh:y}}var G=l();function be(e){let{status:t,mode:n,isAcknowledging:r=!1,acknowledgeError:i,onAcknowledge:a,onDismissWarning:o,onReviewWorkspaceData:s,onUpgradeStorage:l}=e,[u,h]=(0,E.useState)(!1),[g,_]=(0,E.useState)(!1),v=_e(t);if(n===`warning`){let e=t.usagePercent??0;return(0,G.jsx)(p,{tone:`warning`,title:`Your storage is almost full`,icon:(0,G.jsx)(T,{className:`h-4 w-4`,"aria-hidden":`true`}),onDismiss:o?()=>o(g):void 0,className:`p-4`,"data-testid":`disk-pressure-banner`,children:(0,G.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[(0,G.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,G.jsx)(`div`,{className:`h-1.5 flex-1 overflow-hidden rounded-full bg-[var(--surface-active)]`,children:(0,G.jsx)(`div`,{className:`h-full rounded-full transition-[width] duration-300`,style:{width:`${e}%`,backgroundColor:`var(--system-mid-strong)`}})}),(0,G.jsx)(`span`,{className:`text-body-medium-default shrink-0 tabular-nums text-[color:var(--system-mid-strong)]`,children:v})]}),(0,G.jsx)(`p`,{className:`m-0`,children:l?`Free up space or add more storage to avoid interruptions.`:`Free up space to avoid interruptions.`}),(0,G.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[s&&(0,G.jsx)(c,{variant:`outlined`,size:`compact`,onClick:s,children:`Manage Storage`}),l&&(0,G.jsx)(c,{variant:`outlined`,size:`compact`,onClick:l,children:`Upgrade`}),o?(0,G.jsx)(d,{className:`ml-auto`,checked:g,onCheckedChange:e=>_(e===!0),label:`Don't show again`,"data-testid":`disk-pressure-banner-dont-show-again`}):null]})]})})}if(n===`cleanup`){let e=t.usagePercent??0;return(0,G.jsx)(p,{tone:`warning`,title:`Cleanup mode is active`,icon:(0,G.jsx)(T,{className:`h-4 w-4`,"aria-hidden":`true`}),className:`p-4`,"data-testid":`disk-pressure-banner`,children:(0,G.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[(0,G.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,G.jsx)(`div`,{className:`h-1.5 flex-1 overflow-hidden rounded-full bg-[var(--surface-active)]`,children:(0,G.jsx)(`div`,{className:`h-full rounded-full transition-[width] duration-300`,style:{width:`${e}%`,backgroundColor:`var(--system-mid-strong)`}})}),(0,G.jsx)(`span`,{className:`text-body-medium-default shrink-0 tabular-nums text-[color:var(--system-mid-strong)]`,children:v})]}),(0,G.jsx)(`p`,{className:`m-0`,children:`Prompt your assistant to free up space before it runs out and enters a locked state.`}),(0,G.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[s&&(0,G.jsx)(c,{variant:`outlined`,size:`compact`,onClick:s,children:`Manage Storage`}),l&&(0,G.jsx)(c,{variant:`outlined`,size:`compact`,onClick:l,children:`Upgrade`})]})]})})}let y=t.usagePercent??0;return(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)(p,{tone:`error`,title:`Storage is critically low`,icon:(0,G.jsx)(T,{className:`h-4 w-4`,"aria-hidden":`true`}),className:`p-4`,"data-testid":`disk-pressure-banner`,children:(0,G.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[(0,G.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,G.jsx)(`div`,{className:`h-1.5 flex-1 overflow-hidden rounded-full bg-[var(--surface-active)]`,children:(0,G.jsx)(`div`,{className:`h-full rounded-full transition-[width] duration-300`,style:{width:`${y}%`,backgroundColor:`var(--system-negative-strong)`}})}),(0,G.jsx)(`span`,{className:`text-body-medium-default shrink-0 tabular-nums text-[color:var(--system-negative-strong)]`,children:v})]}),(0,G.jsx)(`p`,{className:`m-0`,children:`Your assistant will enter a locked state if it runs out of storage.`}),i?(0,G.jsx)(`span`,{className:`text-[var(--system-negative-strong)]`,role:`alert`,children:i}):null,(0,G.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:(0,G.jsx)(c,{variant:`primary`,size:`compact`,onClick:()=>h(!0),children:`Review`})})]})}),(0,G.jsx)(m.Root,{open:u,onOpenChange:e=>{e||h(!1)},children:(0,G.jsxs)(m.Content,{size:`sm`,children:[(0,G.jsx)(m.Header,{children:(0,G.jsx)(m.Title,{icon:f,children:`Storage is critically low`})}),(0,G.jsx)(m.Body,{children:(0,G.jsx)(m.Description,{children:`Your assistant will enter a locked state if it runs out of storage. You should either prompt your assistant to free up space or increase your storage.`})}),(0,G.jsxs)(m.Footer,{children:[l&&(0,G.jsx)(c,{variant:`outlined`,onClick:()=>{h(!1),l()},children:`Upgrade`}),(0,G.jsx)(c,{variant:`primary`,disabled:r,onClick:()=>{a(),h(!1)},children:r?`Acknowledging...`:`Acknowledge`})]})]})})]})}var xe=`https://apps.apple.com/us/app/vellum-assistant/id6759934423`,K=`ai.vellum.assistant`,Se=`https://play.google.com/store/apps/details?id=${K}`,q={ios:{downloaded:`app.iosNudge.downloaded`,bannerDismissed:`app.iosNudge.bannerDismissed`,assistantTurnsSeen:`app.iosNudge.assistantTurnsSeen`},android:{downloaded:`app.androidNudge.downloaded`,bannerDismissed:`app.androidNudge.bannerDismissed`,assistantTurnsSeen:`app.androidNudge.assistantTurnsSeen`}};function Ce(){let e=(void 0)?.trim();if(!e)return null;try{let t=new URL(e);return t.protocol===`https:`&&t.hostname===`play.google.com`&&t.pathname===`/store/apps/details`&&t.searchParams.get(`id`)===K?Se:null}catch(e){if(e instanceof TypeError)return null;throw e}}function J(e){return e===`ios`?`iOS`:`Android`}function Y(e){if(e===`ios`)return{platform:e,appName:J(e),storeUrl:xe};let t=Ce();return t?{platform:e,appName:J(e),storeUrl:t}:null}function we(e){return i(q[e].downloaded,!1)}function X(e){r(q[e].downloaded,!0)}function Te(e){return i(q[e].bannerDismissed,!1)}function Z(e){r(q[e].bannerDismissed,!0)}function Q(e){return Math.max(0,n(q[e].assistantTurnsSeen,0))}function Ee(e,n=1){n<=0||t(q[e].assistantTurnsSeen,Q(e)+n)}function $(e){let t=Y(e);return t?(window.open(t.storeUrl,`_blank`,`noopener,noreferrer`),!0):!1}function De(e){let[t,n]=(0,E.useState)(!1),[r,i]=(0,E.useState)(!1),a=Y(e)!==null;(0,E.useEffect)(()=>{n(we(e)),i(Te(e))},[e]);let o=(0,E.useCallback)(()=>{$(e)&&(X(e),n(!0))},[e]),s=(0,E.useCallback)(()=>{Z(e),i(!0)},[e]);return(0,E.useMemo)(()=>({bannerShouldShow:a&&!t&&!r,handleDownload:o,handleBannerDismiss:s}),[a,t,r,o,s])}var Oe=x({key:`device:cmd_enter_to_send`,scope:`device`,parse:b,serialize:String,fallback:!1}),ke=x({key:`device:show_context_window_indicator`,scope:`device`,parse:b,serialize:String,fallback:!1});export{ie as C,T as E,ae as S,ne as T,F as _,Ee as a,le as b,De as c,ye as d,he as f,ue as g,R as h,Y as i,X as l,z as m,ke as n,$ as o,me as p,J as r,Q as s,Oe as t,be as u,de as v,j as w,P as x,N as y};
@@ -1 +1 @@
1
- import{o as e}from"./chunk-jRWAZmH_.js";import{t}from"./react-BFJW0bSv.js";import{t as n}from"./button-BENY-yx_.js";import{d as r,h as i,n as a}from"./chunk-5KNZJZUH-BUqIilZr.js";import{n as o}from"./QueryClientProvider-CMu7CkQU.js";import{t as s}from"./useQuery-Bz-fbQ-m.js";import{t as c}from"./useMutation-CXGTrp4W.js";import{t as l}from"./jsx-runtime-D3ZM-ToX.js";import{t as u}from"./typography-BeUa5Fd-.js";import{t as d}from"./card-q0GJX1HZ.js";import{t as f}from"./createLucideIcon-C1mdGPB9.js";import{t as p}from"./arrow-left-BikDV6F2.js";import{t as m}from"./arrow-right-UTImTy7b.js";import{S as h,a as g,b as _,c as v,d as y,l as b,p as x,x as S}from"./use-save-twilio-credentials-D5Zb65WS.js";import{t as C}from"./circle-check-big-CpoRGdNz.js";import{P as w}from"./src-hNk11eS3.js";import{t as T}from"./ellipsis-vertical-eVgdKn9z.js";import{t as E}from"./link-2-Bm55xvLL.js";import{t as D}from"./loader-circle-DOtGXcds.js";import{t as O}from"./mail-CYjppw70.js";import{t as k}from"./message-square-BjBDqFUX.js";import{t as A}from"./pencil-DidiUknI.js";import{t as j}from"./plus-DnH9Pjq4.js";import{t as M}from"./search-D2xMZu1P.js";import{t as N}from"./send-BlX2px_R.js";import{t as ee}from"./user-plus-DAap8I1c.js";import{t as P}from"./tag-DeMzQvCo.js";import{t as F}from"./input-DmHXRXaB.js";import{t as I}from"./modal-DI63s9MQ.js";import{n as te}from"./toast-BpuLSxyt.js";import{t as L}from"./confirm-dialog-zx8L9sUi.js";import{t as ne}from"./assistant-identity-store-nE-e8KQw.js";import{C as re}from"./sdk.gen-CBPZ2IdN.js";import{d as ie}from"./routes-iipg2wkc.js";import{C as ae,Qt as oe,T as R,Zt as se,s as ce,w as le}from"./react-query.gen-DxjuNs-5.js";import{n as z}from"./conversation-navigation-DbQqV_fs.js";import{t as ue}from"./assistant-feature-flag-store-qYfAdlBG.js";import{t as B}from"./use-active-assistant-id-BvHP5Ojg.js";import{t as V}from"./detail-card-Dsnf52vg.js";import{n as de,t as fe}from"./mobile-sidebar-drawer-CRXVtqcP.js";import{a as H,i as pe,n as me,r as U,t as he}from"./use-invite-link-dialog-CdY5FNQa.js";import{a as ge,i as _e,n as ve,t as ye}from"./contacts-gateway-Cz3rbqgT.js";var W=f(`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`}]]),be=f(`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`}]]),G=e(t(),1),xe=new Set([`slack`]);function K(e){return e.status===`verified`||e.status===`active`&&e.verifiedAt!=null}var q=l();function Se({channels:e,pendingChannelKey:t=null,onConnect:n,onDisconnect:r}){let[i,a]=(0,G.useState)(null);return(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`div`,{className:`flex flex-col`,children:e.map((e,i)=>(0,q.jsxs)(`div`,{children:[i>0?(0,q.jsx)(`div`,{className:`border-t`,style:{borderColor:`var(--border-base)`}}):null,(0,q.jsx)(J,{channel:e,pending:t===e.key,onConnect:n?()=>n(e.key):void 0,onDisconnect:r?()=>a(e.key):void 0})]},e.key))}),(0,q.jsx)(L,{open:i!==null,title:`Disconnect ${i?y(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 J({channel:e,pending:t,onConnect:r,onDisconnect:i}){let a=e.status===`ready`;return(0,q.jsxs)(`div`,{className:`flex items-center gap-3 py-4`,children:[(0,q.jsx)(b,{channelId:e.key,className:`h-4 w-4 shrink-0 text-[color:var(--content-secondary)]`}),(0,q.jsx)(`span`,{className:`text-body-medium-default`,style:{color:`var(--content-default)`},children:y(e.key)}),a&&e.address?(0,q.jsx)(`span`,{className:`truncate text-body-medium-lighter`,style:{color:`var(--content-tertiary)`},children:e.address}):null,(0,q.jsx)(`div`,{className:`ml-auto flex shrink-0 items-center gap-2`,children:a?(0,q.jsxs)(q.Fragment,{children:[(0,q.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,q.jsx)(C,{className:`h-3 w-3`}),`Connected`]}),(0,q.jsx)(n,{variant:`danger`,onClick:i,disabled:!i||t,children:t?`Disconnecting…`:`Disconnect`})]}):(0,q.jsx)(n,{variant:`outlined`,onClick:r,disabled:!r||t,children:`Connect`})})]})}function Y({role:e,contactType:t}){let{label:n,tone:r}=X(e,t);return(0,q.jsx)(P,{tone:r,children:n})}function X(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 Ce({assistantName:e,...t}){let n=x(e);return(0,q.jsxs)(`div`,{className:`flex flex-col gap-6`,children:[(0,q.jsx)(V,{title:`${n} (Your Assistant)`,accessory:(0,q.jsx)(Y,{role:`assistant`}),compactAccessory:!0}),(0,q.jsx)(V,{title:`Channels`,subtitle:`Where ${n} can be reached.`,children:(0,q.jsx)(Se,{...t})})]})}var Z=new Set([`telegram`,`phone`,`vellum`,`whatsapp`,`slack`,`email`,`platform`,`a2a`]);function we(e){return Z.has(e)}function Te(e,t){return e.id===`a2a`?t&&t.status!==`revoked`?{kind:`connected`}:{kind:`setup`}:t!=null&&K(t)?{kind:`verified`}:t?.status===`blocked`?{kind:`none`}:t&&t.status!==`revoked`?{kind:`unverified`}:{kind:`setup`}}function Ee(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||we(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 Q({name:e,className:t,style:n}){switch(e){case`bot`:return(0,q.jsx)(h,{className:t,style:n});case`hash`:return(0,q.jsx)(S,{className:t,style:n});case`send`:return(0,q.jsx)(N,{className:t,style:n});case`phone`:return(0,q.jsx)(_,{className:t,style:n});case`mail`:return(0,q.jsx)(O,{className:t,style:n});case`message-square`:return(0,q.jsx)(k,{className:t,style:n});default:return(0,q.jsx)(W,{className:t,style:n})}}function $({contactChannels:e,availableChannels:t,a2aEnabled:n,setupLabel:r=`Invite`,verifyLoading:i,verifySubject:a=`self`,onSetupChannel:o,onVerifyChannel:s,onRevokeChannel:c,onLinkAccount:l}){let[u,d]=(0,G.useState)(null),[f,p]=(0,G.useState)(null),m=new Map;for(let t of e)t.status!==`revoked`&&(m.has(t.type)||m.set(t.type,t));return(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`div`,{className:`flex flex-col`,children:Ee(t,e,n).map((e,t)=>{let n=m.get(e.id);return(0,q.jsxs)(`div`,{children:[t>0&&(0,q.jsx)(`div`,{className:`border-t`,style:{borderColor:`var(--border-base)`}}),(0,q.jsx)(De,{info:e,existing:n,setupLabel:r,verifyLoading:i,onSetup:o?()=>o(e.id):void 0,onVerify:s&&e.supportsVerification?()=>d(e):void 0,onRevoke:c&&n?()=>p({channelId:n.id,channel:e}):void 0,onLinkAccount:l&&xe.has(e.id)?()=>l(e.id):void 0})]},e.id)})}),u&&(0,q.jsx)(L,{open:!0,title:`Verify ${u.label}`,message:a===`contact`?`This will mark this contact's ${u.label} channel as verified. Your assistant will recognize them when they reach out from it.`:`This will mark your ${u.label} channel as verified. Your assistant will recognize you when you reach out from it.`,confirmLabel:`Verify`,onConfirm:()=>{u&&(s?.(u.id),d(null))},onCancel:()=>d(null)}),f&&(0,q.jsx)(L,{open:!0,title:`Revoke ${f.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:()=>{c?.(f.channelId,f.channel.id),p(null)},onCancel:()=>p(null)})]})}function De({info:e,existing:t,setupLabel:r,verifyLoading:i,onSetup:a,onVerify:o,onRevoke:s,onLinkAccount:c}){let l=Te(e,t);return(0,q.jsxs)(`div`,{className:`flex items-center gap-3 py-4`,children:[(0,q.jsx)(Q,{name:e.icon,className:`h-4 w-4 shrink-0`,style:{color:`var(--content-secondary)`}}),(0,q.jsx)(`span`,{className:`text-body-medium-default`,style:{color:`var(--content-default)`},children:e.label}),t?.address?(0,q.jsx)(`span`,{className:`truncate text-body-medium-lighter`,style:{color:`var(--content-tertiary)`},children:t.address}):null,(0,q.jsx)(`div`,{className:`ml-auto flex shrink-0 items-center gap-2`,children:l.kind===`connected`?(0,q.jsxs)(q.Fragment,{children:[(0,q.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,q.jsx)(C,{className:`h-3 w-3`}),`Connected`]}),s?(0,q.jsx)(n,{variant:`danger`,onClick:s,children:`Revoke`}):null]}):l.kind===`verified`?(0,q.jsxs)(q.Fragment,{children:[(0,q.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,q.jsx)(C,{className:`h-3 w-3`}),`Verified`]}),s?(0,q.jsx)(n,{variant:`danger`,onClick:s,children:`Revoke`}):null]}):l.kind===`unverified`?(0,q.jsx)(n,{variant:`outlined`,onClick:o,disabled:!o||i,children:i?`Verifying…`:`Verify`}):l.kind===`setup`?e.id===`a2a`?null:(0,q.jsxs)(q.Fragment,{children:[c?(0,q.jsxs)(n,{onClick:c,children:[(0,q.jsx)(E,{className:`h-3.5 w-3.5`}),`Link account`]}):null,(0,q.jsx)(n,{variant:`outlined`,onClick:a,disabled:!a,children:r})]}):null})]})}function Oe(e){return(0,q.jsx)(ke,{...e},e.contact.id)}function ke({contact:e,savePending:t,deletePending:r,verifyPending:i,mergePending:a=!1,canMerge:o=!1,availableChannels:s,a2aEnabled:c,onSave:l,onDelete:u,onMerge:d,onSetupChannel:f,onVerifyChannel:p,onRevokeChannel:m,onLinkAccount:h}){let g=e.displayName===`New Contact`,[_,v]=(0,G.useState)(g?``:e.displayName),[y,b]=(0,G.useState)(e.notes??``),[x,S]=(0,G.useState)(!1),C=_.trim(),w=y.trim(),T=g?``:e.displayName,E=e.notes??``,D=C!==T||w!==E,O=C.length>0&&D&&!t&&!r,k=g&&e.channels.length===0&&e.interactionCount===0,A=C||e.displayName,j=`${e.interactionCount} interaction${e.interactionCount===1?``:`s`}`;return(0,q.jsxs)(`div`,{className:`flex flex-col gap-6`,children:[(0,q.jsx)(V,{title:A,accessory:(0,q.jsx)(Y,{role:e.role,contactType:e.contactType}),compactAccessory:!0,subtitle:j,children:(0,q.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,q.jsx)(F,{label:`Name`,type:`text`,value:_,onChange:e=>v(e.target.value),placeholder:`Give this human a name`,autoFocus:g,disabled:t||r,fullWidth:!0}),(0,q.jsx)(F,{label:`Notes`,type:`text`,value:y,onChange:e=>b(e.target.value),placeholder:`Optional notes about the human which AI will take into account`,disabled:t||r,fullWidth:!0}),(0,q.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,q.jsx)(n,{type:`button`,onClick:()=>l({displayName:C,notes:w}),disabled:!O,children:t?`Saving…`:`Save`}),d?(0,q.jsx)(n,{type:`button`,variant:`outlined`,onClick:d,disabled:!o||k||D||a||t||r,title:o?k?`Save this contact before merging`:D?`Save your changes before merging`:void 0:`No other contacts available to merge`,children:a?`Merging…`:`Merge…`}):null,(0,q.jsx)(n,{type:`button`,variant:`danger`,onClick:()=>{k?u():S(!0)},disabled:r,children:r?`Deleting…`:`Delete Contact`})]})]})}),(0,q.jsx)(V,{title:`Linked accounts`,subtitle:`Where the assistant recognizes this contact. Link accounts you know, invite the ones you don't.`,children:(0,q.jsx)($,{contactChannels:e.channels,availableChannels:s,a2aEnabled:c,verifyLoading:i,verifySubject:`contact`,onSetupChannel:f,onVerifyChannel:p,onRevokeChannel:m,onLinkAccount:h})}),(0,q.jsx)(L,{open:x,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:()=>{S(!1),u()},onCancel:()=>S(!1)})]})}function Ae(e){return(0,q.jsx)(je,{...e},`${e.survivor.id}:${e.open?`open`:`closed`}`)}function je({open:e,survivor:t,candidates:r,pending:i,errorMessage:a,onMerge:o,onClose:s}){let[c,l]=(0,G.useState)(``),[d,f]=(0,G.useState)(null);(0,G.useEffect)(()=>{d&&!r.some(e=>e.id===d)&&f(null)},[r,d]);let m=(0,G.useMemo)(()=>{let e=c.trim().toLowerCase();return e?r.filter(t=>t.displayName.toLowerCase().includes(e)):r},[r,c]),h=d?r.find(e=>e.id===d)??null:null,g=Ie(t);return(0,q.jsx)(I.Root,{open:e,onOpenChange:e=>{!e&&!i&&s()},children:(0,q.jsxs)(I.Content,{size:`md`,children:[(0,q.jsxs)(I.Header,{children:[(0,q.jsx)(I.Title,{icon:be,children:h?`Merge "${h.displayName}" into ${g}?`:`Merge another contact into ${g}`}),(0,q.jsx)(I.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,q.jsxs)(I.Body,{className:`flex flex-col gap-3`,children:[h?(0,q.jsx)(Pe,{survivor:t,donor:h}):r.length===0?(0,q.jsx)(Fe,{}):(0,q.jsx)(Me,{search:c,onSearch:l,candidates:m,onPick:f}),a?(0,q.jsx)(u,{as:`p`,variant:`body-small-default`,className:`text-(--system-negative-strong)`,role:`alert`,children:a}):null]}),(0,q.jsx)(I.Footer,{children:h?(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(n,{variant:`outlined`,onClick:()=>f(null),disabled:i,leftIcon:(0,q.jsx)(p,{"aria-hidden":!0}),children:`Back`}),(0,q.jsx)(n,{variant:`danger`,onClick:()=>o(h.id),disabled:i,children:i?`Merging…`:`Merge`})]}):(0,q.jsx)(n,{variant:`outlined`,onClick:s,disabled:i,children:`Cancel`})})]})})}function Me({search:e,onSearch:t,candidates:n,onPick:r}){return(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(F,{type:`text`,value:e,onChange:e=>t(e.target.value),placeholder:`Search contacts`,leftIcon:(0,q.jsx)(M,{className:`h-3.5 w-3.5`,"aria-hidden":!0}),fullWidth:!0}),(0,q.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,q.jsx)(u,{as:`p`,variant:`body-small-default`,className:`px-3 py-4 text-center text-(--content-tertiary)`,children:`No matching contacts`}):n.map(e=>(0,q.jsx)(Ne,{contact:e,onPick:()=>r(e.id)},e.id))})]})}function Ne({contact:e,onPick:t}){let n=Be(e).join(` | `)||void 0;return(0,q.jsx)(w,{asChild:!0,label:``,children:(0,q.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,q.jsxs)(`span`,{className:`flex min-w-0 flex-1 flex-col`,children:[(0,q.jsx)(`span`,{className:`truncate text-body-medium-default`,children:e.displayName}),n?(0,q.jsx)(`span`,{className:`truncate text-body-small-default text-(--content-tertiary)`,children:n}):null]})})})}function Pe({survivor:e,donor:t}){let n=Ie(e),{moved:r,duplicates:i}=ze(e,t);return(0,q.jsxs)(`ul`,{className:`flex flex-col gap-2 text-body-medium-lighter text-(--content-secondary)`,children:[(0,q.jsxs)(`li`,{children:[(0,q.jsxs)(`span`,{className:`text-(--content-default)`,children:[`“`,t.displayName,`”`]}),` `,`will be deleted.`]}),(0,q.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=>Re(e.type)).join(`, `)}.`}),i.length>0?(0,q.jsxs)(`li`,{className:`text-(--content-tertiary)`,children:[i.length,` duplicate channel`,i.length===1?``:`s`,` already on `,n,` `,`(skipped).`]}):null,t.notes?(0,q.jsx)(`li`,{children:`Notes from the merged contact will be appended.`}):null,(0,q.jsx)(`li`,{className:`text-(--content-tertiary)`,children:`This cannot be undone.`})]})}function Fe(){return(0,q.jsx)(u,{as:`p`,variant:`body-medium-lighter`,className:`px-3 py-6 text-center text-(--content-tertiary)`,children:`No other contacts available to merge.`})}function Ie(e){return e.role===`guardian`?!e.displayName||e.displayName.startsWith(`vellum-principal-`)?`you`:`${e.displayName} (you)`:e.displayName||`this contact`}var Le={slack:`Slack`,telegram:`Telegram`,phone:`Phone`,email:`Email`,whatsapp:`WhatsApp`};function Re(e){return Le[e.toLowerCase()]??e}function ze(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 Be(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(Le[e]??r.type))}return n}function Ve({loading:e,guardian:t,assistantName:r,regularContacts:i,selection:a,onSelect:o,onAddContact:s,addingContact:c=!1}){let[l,u]=(0,G.useState)(``),f=l.trim()?i.filter(e=>e.displayName.toLowerCase().includes(l.trim().toLowerCase())):i;return(0,q.jsx)(d.Root,{className:`flex h-full flex-col overflow-hidden`,children:(0,q.jsxs)(d.Body,{className:`flex min-h-0 min-w-0 flex-1 flex-col gap-4`,children:[(0,q.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,q.jsx)(`h2`,{className:`text-title-medium`,style:{color:`var(--content-default)`},children:`Entries`}),(0,q.jsx)(n,{type:`button`,variant:`ghost`,iconOnly:c?(0,q.jsx)(D,{className:`animate-spin`,"aria-hidden":!0}):(0,q.jsx)(j,{"aria-hidden":!0}),onClick:s,disabled:c,"aria-label":`Add contact`,tintColor:`var(--content-secondary)`})]}),(0,q.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[t?(0,q.jsx)(He,{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,q.jsx)(He,{name:r?.trim()||`Your Assistant`,role:`assistant`,selected:a?.kind===`assistant`,onClick:()=>o({kind:`assistant`}),trailingIcon:`more`})]}),(0,q.jsx)(`div`,{className:`border-t`,style:{borderColor:`var(--border-base)`}}),i.length>0?(0,q.jsx)(F,{type:`text`,value:l,onChange:e=>u(e.target.value),placeholder:`Search Contacts`,leftIcon:(0,q.jsx)(M,{className:`h-3.5 w-3.5`,"aria-hidden":!0}),fullWidth:!0}):null,i.length>0?(0,q.jsxs)(`div`,{className:`min-h-0 flex-1 overflow-y-auto flex flex-col gap-1`,children:[f.map(e=>(0,q.jsx)(He,{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)),f.length===0?(0,q.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,q.jsx)(n,{type:`button`,variant:`ghost`,onClick:s,disabled:c,tintColor:`var(--primary-base)`,leftIcon:c?(0,q.jsx)(D,{className:`animate-spin`,"aria-hidden":!0}):(0,q.jsx)(ee,{"aria-hidden":!0}),children:`Add Contact`})]})})}function He({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,q.jsx)(w,{asChild:!0,active:i,label:``,trailingAction:o===`pencil`?(0,q.jsx)(A,{className:`h-3.5 w-3.5`,"aria-hidden":!0}):o===`more`?(0,q.jsx)(T,{className:`h-3.5 w-3.5`,"aria-hidden":!0}):void 0,children:(0,q.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,q.jsxs)(`span`,{className:`flex min-w-0 flex-1 flex-col`,children:[(0,q.jsx)(`span`,{className:`truncate text-body-medium-default`,children:e}),c?(0,q.jsx)(`span`,{className:`truncate text-body-small-default`,style:{color:`var(--content-tertiary)`},children:c}):null]}),(0,q.jsxs)(`span`,{className:`flex shrink-0 items-center gap-1`,children:[s===void 0?null:(0,q.jsx)(P,{tone:s?`positive`:`neutral`,children:s?`Verified`:`Unverified`}),(0,q.jsx)(Y,{role:t,contactType:n})]})]})})}function Ue(e){return(0,q.jsx)(We,{...e},e.contact.id)}function We({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,G.useState)(h),[v,y]=(0,G.useState)(e.notes??``),b=g.trim(),x=v.trim(),S=b!==h.trim()||x!==(e.notes??``).trim(),C=S&&!t,w=`${e.interactionCount} interaction${e.interactionCount===1?``:`s`}`;return(0,q.jsxs)(`div`,{className:`flex flex-col gap-6`,children:[(0,q.jsx)(V,{title:m?`You`:`${e.displayName} (You)`,accessory:(0,q.jsx)(Y,{role:`guardian`}),compactAccessory:!0,subtitle:w,children:(0,q.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,q.jsx)(F,{label:`Name`,type:`text`,value:g,onChange:e=>_(e.target.value),placeholder:`Your name`,disabled:t,fullWidth:!0}),(0,q.jsx)(F,{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,q.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,q.jsx)(n,{variant:`primary`,onClick:()=>c({displayName:b||e.displayName,notes:x}),disabled:!C,children:t?`Saving…`:`Save`}),l?(0,q.jsx)(n,{variant:`outlined`,onClick:l,disabled:!a||S||i||t,title:a?S?`Save your changes before merging`:void 0:`No other contacts available to merge`,children:i?`Merging…`:`Merge…`}):null]})]})}),(0,q.jsx)(V,{title:`Channels`,subtitle:`Once verified, your assistant will recognize you when you message from these channels.`,children:(0,q.jsx)($,{contactChannels:e.channels,availableChannels:o,a2aEnabled:s,setupLabel:`Verify me`,verifyLoading:r,onSetupChannel:u,onVerifyChannel:d,onRevokeChannel:f})}),p?(0,q.jsx)(U,{onClick:p}):null]})}function Ge(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 Ke(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,G.useState)(``);(0,G.useEffect)(()=>{e&&f(``)},[e]);let p=(0,G.useMemo)(()=>Ge(i??[],d),[i,d]),h=s!=null;return(0,q.jsx)(I.Root,{open:e,onOpenChange:e=>!e&&l(),children:(0,q.jsxs)(I.Content,{size:`sm`,children:[(0,q.jsxs)(I.Header,{children:[(0,q.jsxs)(I.Title,{children:[`Link `,t,` account`]}),(0,q.jsxs)(I.Description,{children:[`Search your `,t,` workspace and pick`,` `,(0,q.jsx)(`span`,{className:`text-[color:var(--content-default)]`,children:r}),`’s account.`]})]}),(0,q.jsxs)(I.Body,{className:`flex flex-col gap-3`,children:[(0,q.jsx)(F,{type:`search`,value:d,onChange:e=>f(e.target.value),placeholder:`Search by name or @handle`,"aria-label":`Search ${t} workspace accounts`,leftIcon:(0,q.jsx)(M,{className:`h-4 w-4`}),fullWidth:!0}),o?(0,q.jsx)(`p`,{className:`text-body-small-default text-[color:var(--content-negative)]`,children:o}):null,(0,q.jsx)(`div`,{className:`max-h-80 overflow-y-auto`,children:a?(0,q.jsx)(`p`,{className:`py-4 text-center text-body-small-default text-[color:var(--content-tertiary)]`,children:`Loading workspace members…`}):p.length===0?(0,q.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,q.jsx)(`ul`,{className:`flex flex-col`,children:p.map(e=>(0,q.jsx)(`li`,{children:(0,q.jsxs)(`button`,{type:`button`,onClick:()=>c(e),disabled:h,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,q.jsx)(`img`,{src:e.imageUrl,alt:``,className:`h-8 w-8 shrink-0 rounded-full`}):(0,q.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:Ke(e.displayName)}),(0,q.jsxs)(`span`,{className:`flex min-w-0 flex-col`,children:[(0,q.jsx)(`span`,{className:`truncate text-body-medium-default text-[color:var(--content-default)]`,children:e.displayName}),(0,q.jsxs)(`span`,{className:`truncate text-body-small-default text-[color:var(--content-tertiary)]`,children:[`@`,e.username]})]}),s===e.id?(0,q.jsx)(`span`,{className:`ml-auto shrink-0 text-body-small-default text-[color:var(--content-tertiary)]`,children:`Linking…`}):null]})},e.id))})})]}),(0,q.jsxs)(I.Footer,{className:`items-center justify-between gap-3 border-t border-[var(--border-base)]`,children:[(0,q.jsxs)(`p`,{className:`text-body-small-default text-[color:var(--content-tertiary)]`,children:[`Picking marks this account as`,` `,(0,q.jsx)(`span`,{className:`text-[color:var(--content-secondary)]`,children:`guardian-linked`}),` `,`— you vouch for the identity, no handshake needed.`]}),u?(0,q.jsxs)(n,{variant:`link`,className:`shrink-0`,onClick:u,disabled:h,children:[`Or send an invite instead`,(0,q.jsx)(m,{className:`h-3.5 w-3.5`})]}):null]})]})})}function Je({assistantId:e,channelType:t,contact:n,onLinked:r}){let[i,a]=(0,G.useState)(!1),o=c({mutationFn:n=>ve(e,n.contact,{type:t,address:n.account.id}),onSuccess:(e,t)=>{a(!1),te.success(`Linked as @${t.account.username}`),r()}}),s=(0,G.useCallback)(()=>{o.reset(),a(!0)},[o]),l=(0,G.useCallback)(()=>{o.isPending||(o.reset(),a(!1))},[o]),u=(0,G.useCallback)(e=>{!n||o.isPending||o.mutate({contact:n,account:e})},[n,o]);return{channelType:t,dialogOpen:i,open:s,close:l,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 Ye=[{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?`}}],Xe=[];function Ze({assistantId:e,onStartSetupConversation:t}){let n=ue.use.a2aChannel(),r=ne.use.name(),l=o(),[u]=i(),d=u.get(`setup`),f=d&&v(d)?d:null,[p,m]=(0,G.useState)({kind:`assistant`}),h=he(e),[_,y]=(0,G.useState)(!1),[b,S]=(0,G.useState)(!1),C=x(r),w=(0,G.useMemo)(()=>({path:{assistant_id:e}}),[e]),T=le(w),E=s({...ae(w),enabled:!!e,select:e=>e.contacts}),D=me({assistantId:e,onStartSetupConversation:t}),O=s({...ce({path:{assistant_id:e}}),enabled:!!e,queryFn:async({signal:t})=>{let{data:n,error:r,response:i}=await re({path:{assistant_id:e},signal:t,throwOnError:!1});if(!i||i.status===404)return{channels:Ye};if(!i.ok)throw r??Error(`Failed to fetch channel availability`);return n},select:e=>e.channels}).data??Xe,k=E.data,A=(0,G.useMemo)(()=>k?.find(e=>e.role===`guardian`)??null,[k]),j=(0,G.useMemo)(()=>k?.filter(e=>e.role!==`guardian`)??[],[k]),M=(0,G.useMemo)(()=>p.kind===`contact`?k?.find(e=>e.id===p.contactId)??null:null,[k,p]),N=(0,G.useMemo)(()=>!k||!M?[]:k.filter(e=>e.id!==M.id&&e.role!==`guardian`),[k,M]),ee=N.length>0,P=(0,G.useRef)(!!f);(0,G.useEffect)(()=>{P.current||A&&(P.current=!0,m({kind:`contact`,contactId:A.id}))},[A]);let F=(0,G.useCallback)(()=>l.invalidateQueries({queryKey:T}),[l,T]),I=c({mutationFn:()=>_e(e,{displayName:`New Contact`}),onMutate:async()=>{await l.cancelQueries({queryKey:T})},onSuccess:e=>{R(l,w,t=>t?{...t,contacts:[...t.contacts,e]}:void 0),m({kind:`contact`,contactId:e.id})},onError:H(`Failed to create contact`),onSettled:()=>F()}),L=c({mutationFn:t=>ye(e,t),onSuccess:(e,t)=>{R(l,w,e=>e?{...e,contacts:e.contacts.filter(e=>e.id!==t)}:void 0),m({kind:`assistant`})},onError:H(`Failed to delete contact`),onSettled:()=>F()}),z=c({mutationFn:({contactId:t,patch:n})=>_e(e,{id:t,displayName:n.displayName,notes:n.notes}),onSuccess:e=>{R(l,w,t=>t?{...t,contacts:t.contacts.map(t=>t.id===e.id?e:t)}:void 0)},onError:H(`Failed to save contact`),onSettled:()=>F()}),B=oe({onMutate:async()=>{await l.cancelQueries({queryKey:T})},onSuccess:(e,t)=>{let n=e.contact,r=t.body.mergeId;n&&(R(l,w,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})),S(!1),te.success(`Contacts merged`)},onSettled:()=>F()}),V=(0,G.useCallback)(e=>{m(e),y(!1),S(!1),B.reset()},[B]),U=(0,G.useCallback)(()=>{B.reset(),S(!0)},[B]),ve=(0,G.useCallback)(()=>{B.isPending||(S(!1),B.reset())},[B]),W=se({onSuccess:()=>F()}),be=(0,G.useCallback)((t,n)=>{W.mutate({path:{assistant_id:e,contactChannelId:t},body:{status:`revoked`}})},[W,e]),xe=(0,G.useCallback)(()=>{I.isPending||I.mutate()},[I]),K=(0,G.useCallback)(e=>{if(!t)return;let n=O.find(t=>t.id===e)?.setupMessages.contact;n&&t(n)},[O,t]),Se=(0,G.useCallback)(e=>{if(!t)return;let n=O.find(t=>t.id===e)?.setupMessages.guardian;n&&t(n)},[O,t]),J=c({mutationFn:t=>ge(e,t.channelId),onSuccess:()=>F(),onError:H(`Failed to verify channel`)}),Y=(0,G.useCallback)(e=>{if(!M)return;let t=M.channels.find(t=>t.type===e&&t.status!==`revoked`);t&&J.mutate({channelId:t.id})},[M,J]),X=Je({assistantId:e,channelType:`slack`,contact:M?{id:M.id,displayName:M.displayName}:null,onLinked:F}),Z=s({...g(e),enabled:!!e&&X.dialogOpen,select:e=>e.users}),we=D.channels.some(e=>e.key===`slack`&&e.status===`ready`),Te=(0,G.useCallback)(e=>{e===X.channelType&&X.open()},[X]),Ee=L.isPending?L.variables:null,Q=(0,G.useMemo)(()=>M?z.isPending&&z.variables?.contactId===M.id?{...M,displayName:z.variables.patch.displayName,notes:z.variables.patch.notes}:M:null,[M,z.isPending,z.variables]);if(f)return(0,q.jsx)(a,{to:`${ie.channels}?setup=${f}`,replace:!0});let $={loading:E.isLoading,assistantName:C,guardian:A?{id:A.id,displayName:A.displayName.startsWith(`vellum-principal-`)?``:A.displayName,role:A.role,channelTypes:tt(A.channels,n)}:null,regularContacts:j.filter(e=>e.id!==Ee).map(e=>({id:e.id,displayName:e.displayName,role:e.role,contactType:e.contactType,channelTypes:tt(e.channels,n),verified:et(e.channels)})),selection:p,onAddContact:xe,addingContact:I.isPending};return(0,q.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col gap-4 overflow-hidden sm:flex-row sm:gap-6`,children:[(0,q.jsx)(`div`,{className:`flex items-center sm:hidden`,children:(0,q.jsx)(de,{onClick:()=>y(!0)})}),(0,q.jsx)(fe,{open:_,onClose:()=>y(!1),title:`Contacts`,children:(0,q.jsx)(Ve,{...$,onSelect:V})}),(0,q.jsx)(`aside`,{className:`hidden min-h-0 w-[320px] shrink-0 overflow-y-auto self-stretch sm:block`,children:(0,q.jsx)(Ve,{...$,onSelect:V})}),(0,q.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,q.jsx)(Ce,{assistantName:C,channels:D.channels,pendingChannelKey:D.pendingChannelKey,onConnect:D.onSetup,onDisconnect:D.onDisconnect}):Q?Q.role===`guardian`?(0,q.jsx)(Ue,{contact:Q,savePending:z.isPending,verifyPending:J.isPending,mergePending:B.isPending,canMerge:ee,availableChannels:O,a2aEnabled:n,onSave:e=>{z.mutate({contactId:Q.id,patch:e})},onMerge:U,onSetupChannel:t?Se:void 0,onVerifyChannel:Y,onRevokeChannel:be,onGenerateInviteLink:n?h.open:void 0}):(0,q.jsx)(Oe,{contact:Q,savePending:z.isPending,deletePending:L.isPending,verifyPending:J.isPending,mergePending:B.isPending,canMerge:ee,availableChannels:O,a2aEnabled:n,onSave:e=>{z.mutate({contactId:Q.id,patch:e})},onDelete:()=>{L.mutate(Q.id)},onMerge:U,onSetupChannel:t?K:void 0,onVerifyChannel:Y,onRevokeChannel:be,onLinkAccount:we?Te:void 0}):(0,q.jsx)(Qe,{})}),M?(0,q.jsx)(Ae,{open:b,survivor:M,candidates:N,pending:B.isPending,errorMessage:B.error instanceof Error?B.error.message:B.error?`Failed to merge contacts`:null,onMerge:t=>B.mutate({path:{assistant_id:e},body:{keepId:M.id,mergeId:t}}),onClose:ve}):null,(0,q.jsx)(qe,{open:X.dialogOpen,channelLabel:`Slack`,contactName:M?.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(),K(X.channelType)}:void 0}),(0,q.jsx)(pe,{open:h.isOpen,assistantId:e,onClose:h.close})]})}function Qe(){return(0,q.jsx)(`div`,{className:`flex h-full items-center justify-center py-16`,children:(0,q.jsx)(`p`,{className:`text-body-medium-lighter`,style:{color:`var(--content-tertiary)`},children:`Select a contact`})})}var $e={slack:`Slack`,telegram:`Telegram`,phone:`Phone`,email:`Email`,whatsapp:`WhatsApp`,a2a:`A2A`};function et(e){return e.some(e=>e.status!==`revoked`&&(e.type===`a2a`||K(e)))}function tt(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($e[e]??i.type))}return r}function nt(){let e=r(),t=B();return(0,q.jsx)(Ze,{assistantId:t,onStartSetupConversation:t=>{z(e,{prompt:t})}},t)}export{nt as ContactsPageRoute};
1
+ import{o as e}from"./chunk-jRWAZmH_.js";import{t}from"./react-BFJW0bSv.js";import{t as n}from"./button-BENY-yx_.js";import{d as r,h as i,n as a}from"./chunk-5KNZJZUH-BUqIilZr.js";import{n as o}from"./QueryClientProvider-CMu7CkQU.js";import{t as s}from"./useQuery-Bz-fbQ-m.js";import{t as c}from"./useMutation-CXGTrp4W.js";import{t as l}from"./jsx-runtime-D3ZM-ToX.js";import{t as u}from"./typography-BeUa5Fd-.js";import{t as d}from"./card-q0GJX1HZ.js";import{t as f}from"./createLucideIcon-C1mdGPB9.js";import{t as p}from"./arrow-left-BikDV6F2.js";import{t as m}from"./arrow-right-UTImTy7b.js";import{S as h,a as g,b as _,c as v,d as y,l as b,p as x,x as S}from"./use-save-twilio-credentials-D5Zb65WS.js";import{t as C}from"./circle-check-big-CpoRGdNz.js";import{F as w}from"./src-DyqTPMO2.js";import{t as T}from"./ellipsis-vertical-eVgdKn9z.js";import{t as E}from"./link-2-Bm55xvLL.js";import{t as D}from"./loader-circle-DOtGXcds.js";import{t as O}from"./mail-CYjppw70.js";import{t as k}from"./message-square-BjBDqFUX.js";import{t as A}from"./pencil-DidiUknI.js";import{t as j}from"./plus-DnH9Pjq4.js";import{t as M}from"./search-D2xMZu1P.js";import{t as N}from"./send-BlX2px_R.js";import{t as ee}from"./user-plus-DAap8I1c.js";import{t as P}from"./tag-DeMzQvCo.js";import{t as F}from"./input-DmHXRXaB.js";import{t as I}from"./modal-DI63s9MQ.js";import{n as te}from"./toast-BpuLSxyt.js";import{t as L}from"./confirm-dialog-zx8L9sUi.js";import{t as ne}from"./assistant-identity-store-nE-e8KQw.js";import{C as re}from"./sdk.gen-CBPZ2IdN.js";import{d as ie}from"./routes-iipg2wkc.js";import{C as ae,Qt as oe,T as R,Zt as se,s as ce,w as le}from"./react-query.gen-DxjuNs-5.js";import{n as z}from"./conversation-navigation-gR_RLe1J.js";import{t as ue}from"./assistant-feature-flag-store-qYfAdlBG.js";import{t as B}from"./use-active-assistant-id-BvHP5Ojg.js";import{t as V}from"./detail-card-hWrhardR.js";import{n as de,t as fe}from"./mobile-sidebar-drawer-BGHwfePU.js";import{a as H,i as pe,n as me,r as U,t as he}from"./use-invite-link-dialog-Ccf_XNV3.js";import{a as ge,i as _e,n as ve,t as ye}from"./contacts-gateway-Cz3rbqgT.js";var W=f(`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`}]]),be=f(`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`}]]),G=e(t(),1),xe=new Set([`slack`]);function K(e){return e.status===`verified`||e.status===`active`&&e.verifiedAt!=null}var q=l();function Se({channels:e,pendingChannelKey:t=null,onConnect:n,onDisconnect:r}){let[i,a]=(0,G.useState)(null);return(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`div`,{className:`flex flex-col`,children:e.map((e,i)=>(0,q.jsxs)(`div`,{children:[i>0?(0,q.jsx)(`div`,{className:`border-t`,style:{borderColor:`var(--border-base)`}}):null,(0,q.jsx)(J,{channel:e,pending:t===e.key,onConnect:n?()=>n(e.key):void 0,onDisconnect:r?()=>a(e.key):void 0})]},e.key))}),(0,q.jsx)(L,{open:i!==null,title:`Disconnect ${i?y(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 J({channel:e,pending:t,onConnect:r,onDisconnect:i}){let a=e.status===`ready`;return(0,q.jsxs)(`div`,{className:`flex items-center gap-3 py-4`,children:[(0,q.jsx)(b,{channelId:e.key,className:`h-4 w-4 shrink-0 text-[color:var(--content-secondary)]`}),(0,q.jsx)(`span`,{className:`text-body-medium-default`,style:{color:`var(--content-default)`},children:y(e.key)}),a&&e.address?(0,q.jsx)(`span`,{className:`truncate text-body-medium-lighter`,style:{color:`var(--content-tertiary)`},children:e.address}):null,(0,q.jsx)(`div`,{className:`ml-auto flex shrink-0 items-center gap-2`,children:a?(0,q.jsxs)(q.Fragment,{children:[(0,q.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,q.jsx)(C,{className:`h-3 w-3`}),`Connected`]}),(0,q.jsx)(n,{variant:`danger`,onClick:i,disabled:!i||t,children:t?`Disconnecting…`:`Disconnect`})]}):(0,q.jsx)(n,{variant:`outlined`,onClick:r,disabled:!r||t,children:`Connect`})})]})}function Y({role:e,contactType:t}){let{label:n,tone:r}=X(e,t);return(0,q.jsx)(P,{tone:r,children:n})}function X(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 Ce({assistantName:e,...t}){let n=x(e);return(0,q.jsxs)(`div`,{className:`flex flex-col gap-6`,children:[(0,q.jsx)(V,{title:`${n} (Your Assistant)`,accessory:(0,q.jsx)(Y,{role:`assistant`}),compactAccessory:!0}),(0,q.jsx)(V,{title:`Channels`,subtitle:`Where ${n} can be reached.`,children:(0,q.jsx)(Se,{...t})})]})}var Z=new Set([`telegram`,`phone`,`vellum`,`whatsapp`,`slack`,`email`,`platform`,`a2a`]);function we(e){return Z.has(e)}function Te(e,t){return e.id===`a2a`?t&&t.status!==`revoked`?{kind:`connected`}:{kind:`setup`}:t!=null&&K(t)?{kind:`verified`}:t?.status===`blocked`?{kind:`none`}:t&&t.status!==`revoked`?{kind:`unverified`}:{kind:`setup`}}function Ee(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||we(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 Q({name:e,className:t,style:n}){switch(e){case`bot`:return(0,q.jsx)(h,{className:t,style:n});case`hash`:return(0,q.jsx)(S,{className:t,style:n});case`send`:return(0,q.jsx)(N,{className:t,style:n});case`phone`:return(0,q.jsx)(_,{className:t,style:n});case`mail`:return(0,q.jsx)(O,{className:t,style:n});case`message-square`:return(0,q.jsx)(k,{className:t,style:n});default:return(0,q.jsx)(W,{className:t,style:n})}}function $({contactChannels:e,availableChannels:t,a2aEnabled:n,setupLabel:r=`Invite`,verifyLoading:i,verifySubject:a=`self`,onSetupChannel:o,onVerifyChannel:s,onRevokeChannel:c,onLinkAccount:l}){let[u,d]=(0,G.useState)(null),[f,p]=(0,G.useState)(null),m=new Map;for(let t of e)t.status!==`revoked`&&(m.has(t.type)||m.set(t.type,t));return(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`div`,{className:`flex flex-col`,children:Ee(t,e,n).map((e,t)=>{let n=m.get(e.id);return(0,q.jsxs)(`div`,{children:[t>0&&(0,q.jsx)(`div`,{className:`border-t`,style:{borderColor:`var(--border-base)`}}),(0,q.jsx)(De,{info:e,existing:n,setupLabel:r,verifyLoading:i,onSetup:o?()=>o(e.id):void 0,onVerify:s&&e.supportsVerification?()=>d(e):void 0,onRevoke:c&&n?()=>p({channelId:n.id,channel:e}):void 0,onLinkAccount:l&&xe.has(e.id)?()=>l(e.id):void 0})]},e.id)})}),u&&(0,q.jsx)(L,{open:!0,title:`Verify ${u.label}`,message:a===`contact`?`This will mark this contact's ${u.label} channel as verified. Your assistant will recognize them when they reach out from it.`:`This will mark your ${u.label} channel as verified. Your assistant will recognize you when you reach out from it.`,confirmLabel:`Verify`,onConfirm:()=>{u&&(s?.(u.id),d(null))},onCancel:()=>d(null)}),f&&(0,q.jsx)(L,{open:!0,title:`Revoke ${f.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:()=>{c?.(f.channelId,f.channel.id),p(null)},onCancel:()=>p(null)})]})}function De({info:e,existing:t,setupLabel:r,verifyLoading:i,onSetup:a,onVerify:o,onRevoke:s,onLinkAccount:c}){let l=Te(e,t);return(0,q.jsxs)(`div`,{className:`flex items-center gap-3 py-4`,children:[(0,q.jsx)(Q,{name:e.icon,className:`h-4 w-4 shrink-0`,style:{color:`var(--content-secondary)`}}),(0,q.jsx)(`span`,{className:`text-body-medium-default`,style:{color:`var(--content-default)`},children:e.label}),t?.address?(0,q.jsx)(`span`,{className:`truncate text-body-medium-lighter`,style:{color:`var(--content-tertiary)`},children:t.address}):null,(0,q.jsx)(`div`,{className:`ml-auto flex shrink-0 items-center gap-2`,children:l.kind===`connected`?(0,q.jsxs)(q.Fragment,{children:[(0,q.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,q.jsx)(C,{className:`h-3 w-3`}),`Connected`]}),s?(0,q.jsx)(n,{variant:`danger`,onClick:s,children:`Revoke`}):null]}):l.kind===`verified`?(0,q.jsxs)(q.Fragment,{children:[(0,q.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,q.jsx)(C,{className:`h-3 w-3`}),`Verified`]}),s?(0,q.jsx)(n,{variant:`danger`,onClick:s,children:`Revoke`}):null]}):l.kind===`unverified`?(0,q.jsx)(n,{variant:`outlined`,onClick:o,disabled:!o||i,children:i?`Verifying…`:`Verify`}):l.kind===`setup`?e.id===`a2a`?null:(0,q.jsxs)(q.Fragment,{children:[c?(0,q.jsxs)(n,{onClick:c,children:[(0,q.jsx)(E,{className:`h-3.5 w-3.5`}),`Link account`]}):null,(0,q.jsx)(n,{variant:`outlined`,onClick:a,disabled:!a,children:r})]}):null})]})}function Oe(e){return(0,q.jsx)(ke,{...e},e.contact.id)}function ke({contact:e,savePending:t,deletePending:r,verifyPending:i,mergePending:a=!1,canMerge:o=!1,availableChannels:s,a2aEnabled:c,onSave:l,onDelete:u,onMerge:d,onSetupChannel:f,onVerifyChannel:p,onRevokeChannel:m,onLinkAccount:h}){let g=e.displayName===`New Contact`,[_,v]=(0,G.useState)(g?``:e.displayName),[y,b]=(0,G.useState)(e.notes??``),[x,S]=(0,G.useState)(!1),C=_.trim(),w=y.trim(),T=g?``:e.displayName,E=e.notes??``,D=C!==T||w!==E,O=C.length>0&&D&&!t&&!r,k=g&&e.channels.length===0&&e.interactionCount===0,A=C||e.displayName,j=`${e.interactionCount} interaction${e.interactionCount===1?``:`s`}`;return(0,q.jsxs)(`div`,{className:`flex flex-col gap-6`,children:[(0,q.jsx)(V,{title:A,accessory:(0,q.jsx)(Y,{role:e.role,contactType:e.contactType}),compactAccessory:!0,subtitle:j,children:(0,q.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,q.jsx)(F,{label:`Name`,type:`text`,value:_,onChange:e=>v(e.target.value),placeholder:`Give this human a name`,autoFocus:g,disabled:t||r,fullWidth:!0}),(0,q.jsx)(F,{label:`Notes`,type:`text`,value:y,onChange:e=>b(e.target.value),placeholder:`Optional notes about the human which AI will take into account`,disabled:t||r,fullWidth:!0}),(0,q.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,q.jsx)(n,{type:`button`,onClick:()=>l({displayName:C,notes:w}),disabled:!O,children:t?`Saving…`:`Save`}),d?(0,q.jsx)(n,{type:`button`,variant:`outlined`,onClick:d,disabled:!o||k||D||a||t||r,title:o?k?`Save this contact before merging`:D?`Save your changes before merging`:void 0:`No other contacts available to merge`,children:a?`Merging…`:`Merge…`}):null,(0,q.jsx)(n,{type:`button`,variant:`danger`,onClick:()=>{k?u():S(!0)},disabled:r,children:r?`Deleting…`:`Delete Contact`})]})]})}),(0,q.jsx)(V,{title:`Linked accounts`,subtitle:`Where the assistant recognizes this contact. Link accounts you know, invite the ones you don't.`,children:(0,q.jsx)($,{contactChannels:e.channels,availableChannels:s,a2aEnabled:c,verifyLoading:i,verifySubject:`contact`,onSetupChannel:f,onVerifyChannel:p,onRevokeChannel:m,onLinkAccount:h})}),(0,q.jsx)(L,{open:x,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:()=>{S(!1),u()},onCancel:()=>S(!1)})]})}function Ae(e){return(0,q.jsx)(je,{...e},`${e.survivor.id}:${e.open?`open`:`closed`}`)}function je({open:e,survivor:t,candidates:r,pending:i,errorMessage:a,onMerge:o,onClose:s}){let[c,l]=(0,G.useState)(``),[d,f]=(0,G.useState)(null);(0,G.useEffect)(()=>{d&&!r.some(e=>e.id===d)&&f(null)},[r,d]);let m=(0,G.useMemo)(()=>{let e=c.trim().toLowerCase();return e?r.filter(t=>t.displayName.toLowerCase().includes(e)):r},[r,c]),h=d?r.find(e=>e.id===d)??null:null,g=Ie(t);return(0,q.jsx)(I.Root,{open:e,onOpenChange:e=>{!e&&!i&&s()},children:(0,q.jsxs)(I.Content,{size:`md`,children:[(0,q.jsxs)(I.Header,{children:[(0,q.jsx)(I.Title,{icon:be,children:h?`Merge "${h.displayName}" into ${g}?`:`Merge another contact into ${g}`}),(0,q.jsx)(I.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,q.jsxs)(I.Body,{className:`flex flex-col gap-3`,children:[h?(0,q.jsx)(Pe,{survivor:t,donor:h}):r.length===0?(0,q.jsx)(Fe,{}):(0,q.jsx)(Me,{search:c,onSearch:l,candidates:m,onPick:f}),a?(0,q.jsx)(u,{as:`p`,variant:`body-small-default`,className:`text-(--system-negative-strong)`,role:`alert`,children:a}):null]}),(0,q.jsx)(I.Footer,{children:h?(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(n,{variant:`outlined`,onClick:()=>f(null),disabled:i,leftIcon:(0,q.jsx)(p,{"aria-hidden":!0}),children:`Back`}),(0,q.jsx)(n,{variant:`danger`,onClick:()=>o(h.id),disabled:i,children:i?`Merging…`:`Merge`})]}):(0,q.jsx)(n,{variant:`outlined`,onClick:s,disabled:i,children:`Cancel`})})]})})}function Me({search:e,onSearch:t,candidates:n,onPick:r}){return(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(F,{type:`text`,value:e,onChange:e=>t(e.target.value),placeholder:`Search contacts`,leftIcon:(0,q.jsx)(M,{className:`h-3.5 w-3.5`,"aria-hidden":!0}),fullWidth:!0}),(0,q.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,q.jsx)(u,{as:`p`,variant:`body-small-default`,className:`px-3 py-4 text-center text-(--content-tertiary)`,children:`No matching contacts`}):n.map(e=>(0,q.jsx)(Ne,{contact:e,onPick:()=>r(e.id)},e.id))})]})}function Ne({contact:e,onPick:t}){let n=Be(e).join(` | `)||void 0;return(0,q.jsx)(w,{asChild:!0,label:``,children:(0,q.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,q.jsxs)(`span`,{className:`flex min-w-0 flex-1 flex-col`,children:[(0,q.jsx)(`span`,{className:`truncate text-body-medium-default`,children:e.displayName}),n?(0,q.jsx)(`span`,{className:`truncate text-body-small-default text-(--content-tertiary)`,children:n}):null]})})})}function Pe({survivor:e,donor:t}){let n=Ie(e),{moved:r,duplicates:i}=ze(e,t);return(0,q.jsxs)(`ul`,{className:`flex flex-col gap-2 text-body-medium-lighter text-(--content-secondary)`,children:[(0,q.jsxs)(`li`,{children:[(0,q.jsxs)(`span`,{className:`text-(--content-default)`,children:[`“`,t.displayName,`”`]}),` `,`will be deleted.`]}),(0,q.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=>Re(e.type)).join(`, `)}.`}),i.length>0?(0,q.jsxs)(`li`,{className:`text-(--content-tertiary)`,children:[i.length,` duplicate channel`,i.length===1?``:`s`,` already on `,n,` `,`(skipped).`]}):null,t.notes?(0,q.jsx)(`li`,{children:`Notes from the merged contact will be appended.`}):null,(0,q.jsx)(`li`,{className:`text-(--content-tertiary)`,children:`This cannot be undone.`})]})}function Fe(){return(0,q.jsx)(u,{as:`p`,variant:`body-medium-lighter`,className:`px-3 py-6 text-center text-(--content-tertiary)`,children:`No other contacts available to merge.`})}function Ie(e){return e.role===`guardian`?!e.displayName||e.displayName.startsWith(`vellum-principal-`)?`you`:`${e.displayName} (you)`:e.displayName||`this contact`}var Le={slack:`Slack`,telegram:`Telegram`,phone:`Phone`,email:`Email`,whatsapp:`WhatsApp`};function Re(e){return Le[e.toLowerCase()]??e}function ze(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 Be(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(Le[e]??r.type))}return n}function Ve({loading:e,guardian:t,assistantName:r,regularContacts:i,selection:a,onSelect:o,onAddContact:s,addingContact:c=!1}){let[l,u]=(0,G.useState)(``),f=l.trim()?i.filter(e=>e.displayName.toLowerCase().includes(l.trim().toLowerCase())):i;return(0,q.jsx)(d.Root,{className:`flex h-full flex-col overflow-hidden`,children:(0,q.jsxs)(d.Body,{className:`flex min-h-0 min-w-0 flex-1 flex-col gap-4`,children:[(0,q.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,q.jsx)(`h2`,{className:`text-title-medium`,style:{color:`var(--content-default)`},children:`Entries`}),(0,q.jsx)(n,{type:`button`,variant:`ghost`,iconOnly:c?(0,q.jsx)(D,{className:`animate-spin`,"aria-hidden":!0}):(0,q.jsx)(j,{"aria-hidden":!0}),onClick:s,disabled:c,"aria-label":`Add contact`,tintColor:`var(--content-secondary)`})]}),(0,q.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[t?(0,q.jsx)(He,{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,q.jsx)(He,{name:r?.trim()||`Your Assistant`,role:`assistant`,selected:a?.kind===`assistant`,onClick:()=>o({kind:`assistant`}),trailingIcon:`more`})]}),(0,q.jsx)(`div`,{className:`border-t`,style:{borderColor:`var(--border-base)`}}),i.length>0?(0,q.jsx)(F,{type:`text`,value:l,onChange:e=>u(e.target.value),placeholder:`Search Contacts`,leftIcon:(0,q.jsx)(M,{className:`h-3.5 w-3.5`,"aria-hidden":!0}),fullWidth:!0}):null,i.length>0?(0,q.jsxs)(`div`,{className:`min-h-0 flex-1 overflow-y-auto flex flex-col gap-1`,children:[f.map(e=>(0,q.jsx)(He,{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)),f.length===0?(0,q.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,q.jsx)(n,{type:`button`,variant:`ghost`,onClick:s,disabled:c,tintColor:`var(--primary-base)`,leftIcon:c?(0,q.jsx)(D,{className:`animate-spin`,"aria-hidden":!0}):(0,q.jsx)(ee,{"aria-hidden":!0}),children:`Add Contact`})]})})}function He({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,q.jsx)(w,{asChild:!0,active:i,label:``,trailingAction:o===`pencil`?(0,q.jsx)(A,{className:`h-3.5 w-3.5`,"aria-hidden":!0}):o===`more`?(0,q.jsx)(T,{className:`h-3.5 w-3.5`,"aria-hidden":!0}):void 0,children:(0,q.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,q.jsxs)(`span`,{className:`flex min-w-0 flex-1 flex-col`,children:[(0,q.jsx)(`span`,{className:`truncate text-body-medium-default`,children:e}),c?(0,q.jsx)(`span`,{className:`truncate text-body-small-default`,style:{color:`var(--content-tertiary)`},children:c}):null]}),(0,q.jsxs)(`span`,{className:`flex shrink-0 items-center gap-1`,children:[s===void 0?null:(0,q.jsx)(P,{tone:s?`positive`:`neutral`,children:s?`Verified`:`Unverified`}),(0,q.jsx)(Y,{role:t,contactType:n})]})]})})}function Ue(e){return(0,q.jsx)(We,{...e},e.contact.id)}function We({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,G.useState)(h),[v,y]=(0,G.useState)(e.notes??``),b=g.trim(),x=v.trim(),S=b!==h.trim()||x!==(e.notes??``).trim(),C=S&&!t,w=`${e.interactionCount} interaction${e.interactionCount===1?``:`s`}`;return(0,q.jsxs)(`div`,{className:`flex flex-col gap-6`,children:[(0,q.jsx)(V,{title:m?`You`:`${e.displayName} (You)`,accessory:(0,q.jsx)(Y,{role:`guardian`}),compactAccessory:!0,subtitle:w,children:(0,q.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,q.jsx)(F,{label:`Name`,type:`text`,value:g,onChange:e=>_(e.target.value),placeholder:`Your name`,disabled:t,fullWidth:!0}),(0,q.jsx)(F,{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,q.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,q.jsx)(n,{variant:`primary`,onClick:()=>c({displayName:b||e.displayName,notes:x}),disabled:!C,children:t?`Saving…`:`Save`}),l?(0,q.jsx)(n,{variant:`outlined`,onClick:l,disabled:!a||S||i||t,title:a?S?`Save your changes before merging`:void 0:`No other contacts available to merge`,children:i?`Merging…`:`Merge…`}):null]})]})}),(0,q.jsx)(V,{title:`Channels`,subtitle:`Once verified, your assistant will recognize you when you message from these channels.`,children:(0,q.jsx)($,{contactChannels:e.channels,availableChannels:o,a2aEnabled:s,setupLabel:`Verify me`,verifyLoading:r,onSetupChannel:u,onVerifyChannel:d,onRevokeChannel:f})}),p?(0,q.jsx)(U,{onClick:p}):null]})}function Ge(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 Ke(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,G.useState)(``);(0,G.useEffect)(()=>{e&&f(``)},[e]);let p=(0,G.useMemo)(()=>Ge(i??[],d),[i,d]),h=s!=null;return(0,q.jsx)(I.Root,{open:e,onOpenChange:e=>!e&&l(),children:(0,q.jsxs)(I.Content,{size:`sm`,children:[(0,q.jsxs)(I.Header,{children:[(0,q.jsxs)(I.Title,{children:[`Link `,t,` account`]}),(0,q.jsxs)(I.Description,{children:[`Search your `,t,` workspace and pick`,` `,(0,q.jsx)(`span`,{className:`text-[color:var(--content-default)]`,children:r}),`’s account.`]})]}),(0,q.jsxs)(I.Body,{className:`flex flex-col gap-3`,children:[(0,q.jsx)(F,{type:`search`,value:d,onChange:e=>f(e.target.value),placeholder:`Search by name or @handle`,"aria-label":`Search ${t} workspace accounts`,leftIcon:(0,q.jsx)(M,{className:`h-4 w-4`}),fullWidth:!0}),o?(0,q.jsx)(`p`,{className:`text-body-small-default text-[color:var(--content-negative)]`,children:o}):null,(0,q.jsx)(`div`,{className:`max-h-80 overflow-y-auto`,children:a?(0,q.jsx)(`p`,{className:`py-4 text-center text-body-small-default text-[color:var(--content-tertiary)]`,children:`Loading workspace members…`}):p.length===0?(0,q.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,q.jsx)(`ul`,{className:`flex flex-col`,children:p.map(e=>(0,q.jsx)(`li`,{children:(0,q.jsxs)(`button`,{type:`button`,onClick:()=>c(e),disabled:h,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,q.jsx)(`img`,{src:e.imageUrl,alt:``,className:`h-8 w-8 shrink-0 rounded-full`}):(0,q.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:Ke(e.displayName)}),(0,q.jsxs)(`span`,{className:`flex min-w-0 flex-col`,children:[(0,q.jsx)(`span`,{className:`truncate text-body-medium-default text-[color:var(--content-default)]`,children:e.displayName}),(0,q.jsxs)(`span`,{className:`truncate text-body-small-default text-[color:var(--content-tertiary)]`,children:[`@`,e.username]})]}),s===e.id?(0,q.jsx)(`span`,{className:`ml-auto shrink-0 text-body-small-default text-[color:var(--content-tertiary)]`,children:`Linking…`}):null]})},e.id))})})]}),(0,q.jsxs)(I.Footer,{className:`items-center justify-between gap-3 border-t border-[var(--border-base)]`,children:[(0,q.jsxs)(`p`,{className:`text-body-small-default text-[color:var(--content-tertiary)]`,children:[`Picking marks this account as`,` `,(0,q.jsx)(`span`,{className:`text-[color:var(--content-secondary)]`,children:`guardian-linked`}),` `,`— you vouch for the identity, no handshake needed.`]}),u?(0,q.jsxs)(n,{variant:`link`,className:`shrink-0`,onClick:u,disabled:h,children:[`Or send an invite instead`,(0,q.jsx)(m,{className:`h-3.5 w-3.5`})]}):null]})]})})}function Je({assistantId:e,channelType:t,contact:n,onLinked:r}){let[i,a]=(0,G.useState)(!1),o=c({mutationFn:n=>ve(e,n.contact,{type:t,address:n.account.id}),onSuccess:(e,t)=>{a(!1),te.success(`Linked as @${t.account.username}`),r()}}),s=(0,G.useCallback)(()=>{o.reset(),a(!0)},[o]),l=(0,G.useCallback)(()=>{o.isPending||(o.reset(),a(!1))},[o]),u=(0,G.useCallback)(e=>{!n||o.isPending||o.mutate({contact:n,account:e})},[n,o]);return{channelType:t,dialogOpen:i,open:s,close:l,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 Ye=[{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?`}}],Xe=[];function Ze({assistantId:e,onStartSetupConversation:t}){let n=ue.use.a2aChannel(),r=ne.use.name(),l=o(),[u]=i(),d=u.get(`setup`),f=d&&v(d)?d:null,[p,m]=(0,G.useState)({kind:`assistant`}),h=he(e),[_,y]=(0,G.useState)(!1),[b,S]=(0,G.useState)(!1),C=x(r),w=(0,G.useMemo)(()=>({path:{assistant_id:e}}),[e]),T=le(w),E=s({...ae(w),enabled:!!e,select:e=>e.contacts}),D=me({assistantId:e,onStartSetupConversation:t}),O=s({...ce({path:{assistant_id:e}}),enabled:!!e,queryFn:async({signal:t})=>{let{data:n,error:r,response:i}=await re({path:{assistant_id:e},signal:t,throwOnError:!1});if(!i||i.status===404)return{channels:Ye};if(!i.ok)throw r??Error(`Failed to fetch channel availability`);return n},select:e=>e.channels}).data??Xe,k=E.data,A=(0,G.useMemo)(()=>k?.find(e=>e.role===`guardian`)??null,[k]),j=(0,G.useMemo)(()=>k?.filter(e=>e.role!==`guardian`)??[],[k]),M=(0,G.useMemo)(()=>p.kind===`contact`?k?.find(e=>e.id===p.contactId)??null:null,[k,p]),N=(0,G.useMemo)(()=>!k||!M?[]:k.filter(e=>e.id!==M.id&&e.role!==`guardian`),[k,M]),ee=N.length>0,P=(0,G.useRef)(!!f);(0,G.useEffect)(()=>{P.current||A&&(P.current=!0,m({kind:`contact`,contactId:A.id}))},[A]);let F=(0,G.useCallback)(()=>l.invalidateQueries({queryKey:T}),[l,T]),I=c({mutationFn:()=>_e(e,{displayName:`New Contact`}),onMutate:async()=>{await l.cancelQueries({queryKey:T})},onSuccess:e=>{R(l,w,t=>t?{...t,contacts:[...t.contacts,e]}:void 0),m({kind:`contact`,contactId:e.id})},onError:H(`Failed to create contact`),onSettled:()=>F()}),L=c({mutationFn:t=>ye(e,t),onSuccess:(e,t)=>{R(l,w,e=>e?{...e,contacts:e.contacts.filter(e=>e.id!==t)}:void 0),m({kind:`assistant`})},onError:H(`Failed to delete contact`),onSettled:()=>F()}),z=c({mutationFn:({contactId:t,patch:n})=>_e(e,{id:t,displayName:n.displayName,notes:n.notes}),onSuccess:e=>{R(l,w,t=>t?{...t,contacts:t.contacts.map(t=>t.id===e.id?e:t)}:void 0)},onError:H(`Failed to save contact`),onSettled:()=>F()}),B=oe({onMutate:async()=>{await l.cancelQueries({queryKey:T})},onSuccess:(e,t)=>{let n=e.contact,r=t.body.mergeId;n&&(R(l,w,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})),S(!1),te.success(`Contacts merged`)},onSettled:()=>F()}),V=(0,G.useCallback)(e=>{m(e),y(!1),S(!1),B.reset()},[B]),U=(0,G.useCallback)(()=>{B.reset(),S(!0)},[B]),ve=(0,G.useCallback)(()=>{B.isPending||(S(!1),B.reset())},[B]),W=se({onSuccess:()=>F()}),be=(0,G.useCallback)((t,n)=>{W.mutate({path:{assistant_id:e,contactChannelId:t},body:{status:`revoked`}})},[W,e]),xe=(0,G.useCallback)(()=>{I.isPending||I.mutate()},[I]),K=(0,G.useCallback)(e=>{if(!t)return;let n=O.find(t=>t.id===e)?.setupMessages.contact;n&&t(n)},[O,t]),Se=(0,G.useCallback)(e=>{if(!t)return;let n=O.find(t=>t.id===e)?.setupMessages.guardian;n&&t(n)},[O,t]),J=c({mutationFn:t=>ge(e,t.channelId),onSuccess:()=>F(),onError:H(`Failed to verify channel`)}),Y=(0,G.useCallback)(e=>{if(!M)return;let t=M.channels.find(t=>t.type===e&&t.status!==`revoked`);t&&J.mutate({channelId:t.id})},[M,J]),X=Je({assistantId:e,channelType:`slack`,contact:M?{id:M.id,displayName:M.displayName}:null,onLinked:F}),Z=s({...g(e),enabled:!!e&&X.dialogOpen,select:e=>e.users}),we=D.channels.some(e=>e.key===`slack`&&e.status===`ready`),Te=(0,G.useCallback)(e=>{e===X.channelType&&X.open()},[X]),Ee=L.isPending?L.variables:null,Q=(0,G.useMemo)(()=>M?z.isPending&&z.variables?.contactId===M.id?{...M,displayName:z.variables.patch.displayName,notes:z.variables.patch.notes}:M:null,[M,z.isPending,z.variables]);if(f)return(0,q.jsx)(a,{to:`${ie.channels}?setup=${f}`,replace:!0});let $={loading:E.isLoading,assistantName:C,guardian:A?{id:A.id,displayName:A.displayName.startsWith(`vellum-principal-`)?``:A.displayName,role:A.role,channelTypes:tt(A.channels,n)}:null,regularContacts:j.filter(e=>e.id!==Ee).map(e=>({id:e.id,displayName:e.displayName,role:e.role,contactType:e.contactType,channelTypes:tt(e.channels,n),verified:et(e.channels)})),selection:p,onAddContact:xe,addingContact:I.isPending};return(0,q.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col gap-4 overflow-hidden sm:flex-row sm:gap-6`,children:[(0,q.jsx)(`div`,{className:`flex items-center sm:hidden`,children:(0,q.jsx)(de,{onClick:()=>y(!0)})}),(0,q.jsx)(fe,{open:_,onClose:()=>y(!1),title:`Contacts`,children:(0,q.jsx)(Ve,{...$,onSelect:V})}),(0,q.jsx)(`aside`,{className:`hidden min-h-0 w-[320px] shrink-0 overflow-y-auto self-stretch sm:block`,children:(0,q.jsx)(Ve,{...$,onSelect:V})}),(0,q.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,q.jsx)(Ce,{assistantName:C,channels:D.channels,pendingChannelKey:D.pendingChannelKey,onConnect:D.onSetup,onDisconnect:D.onDisconnect}):Q?Q.role===`guardian`?(0,q.jsx)(Ue,{contact:Q,savePending:z.isPending,verifyPending:J.isPending,mergePending:B.isPending,canMerge:ee,availableChannels:O,a2aEnabled:n,onSave:e=>{z.mutate({contactId:Q.id,patch:e})},onMerge:U,onSetupChannel:t?Se:void 0,onVerifyChannel:Y,onRevokeChannel:be,onGenerateInviteLink:n?h.open:void 0}):(0,q.jsx)(Oe,{contact:Q,savePending:z.isPending,deletePending:L.isPending,verifyPending:J.isPending,mergePending:B.isPending,canMerge:ee,availableChannels:O,a2aEnabled:n,onSave:e=>{z.mutate({contactId:Q.id,patch:e})},onDelete:()=>{L.mutate(Q.id)},onMerge:U,onSetupChannel:t?K:void 0,onVerifyChannel:Y,onRevokeChannel:be,onLinkAccount:we?Te:void 0}):(0,q.jsx)(Qe,{})}),M?(0,q.jsx)(Ae,{open:b,survivor:M,candidates:N,pending:B.isPending,errorMessage:B.error instanceof Error?B.error.message:B.error?`Failed to merge contacts`:null,onMerge:t=>B.mutate({path:{assistant_id:e},body:{keepId:M.id,mergeId:t}}),onClose:ve}):null,(0,q.jsx)(qe,{open:X.dialogOpen,channelLabel:`Slack`,contactName:M?.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(),K(X.channelType)}:void 0}),(0,q.jsx)(pe,{open:h.isOpen,assistantId:e,onClose:h.close})]})}function Qe(){return(0,q.jsx)(`div`,{className:`flex h-full items-center justify-center py-16`,children:(0,q.jsx)(`p`,{className:`text-body-medium-lighter`,style:{color:`var(--content-tertiary)`},children:`Select a contact`})})}var $e={slack:`Slack`,telegram:`Telegram`,phone:`Phone`,email:`Email`,whatsapp:`WhatsApp`,a2a:`A2A`};function et(e){return e.some(e=>e.status!==`revoked`&&(e.type===`a2a`||K(e)))}function tt(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($e[e]??i.type))}return r}function nt(){let e=r(),t=B();return(0,q.jsx)(Ze,{assistantId:t,onStartSetupConversation:t=>{z(e,{prompt:t})}},t)}export{nt as ContactsPageRoute};
@@ -1 +1 @@
1
- import{d as e}from"./routes-iipg2wkc.js";import{t}from"./conversation-store-D4pZBwP5.js";import{i as n}from"./viewer-store-DhrkeZmJ.js";import{t as r}from"./haptics-Mqend0Ru.js";import{r as i}from"./subagent-store-9SqF-NFa.js";import{t as a}from"./workflow-store-D0DBQy44.js";import{t as o}from"./conversation-selection-DXYpE4U8.js";import{t as s}from"./sound-manager-jVvPdZzE.js";var c=`vellum:focus-composer`,l=!1;function u(){l=!0,typeof window<`u`&&window.dispatchEvent(new Event(c))}function d(){let e=l;return l=!1,e}var f=[`input`,`textarea`,`select`,`[contenteditable=""]`,`[contenteditable="true"]`,`[role="textbox"]`].join(`,`);function p(e){return!!e?.closest(f)}function m(e){return!!e?.closest(`a[href], button, summary`)}function h(e,t){return!(e.defaultPrevented||e.metaKey||e.ctrlKey||e.altKey||e.isComposing||e.keyCode===229||typeof e.key!=`string`||e.key.length!==1||p(t)||e.key===` `&&m(t))}function g({value:e,text:t,selectionStart:n,selectionEnd:r}){let i=Math.max(0,Math.min(n??e.length,e.length)),a=Math.max(i,Math.min(r??i,e.length));return{value:e.slice(0,i)+t+e.slice(a),cursor:i+t.length}}function _(o,s,c){c?.silent||r.light(),n.getState().setMainView(`chat`),s!==t.getState().activeConversationId&&(i.getState().reset(),a.getState().reset(),n.getState().clearTranscriptPanelPayloads()),t.getState().setActiveConversationId(s),o(c?.messageId?e.conversationAtMessage(s,c.messageId):e.conversation(s))}function v(c,l){l?.silent||(r.light(),s().play(`new_conversation`)),n.getState().setMainView(`chat`),i.getState().reset(),a.getState().reset(),n.getState().clearTranscriptPanelPayloads();let d=o();t.getState().setActiveConversationId(d);let f=e.conversation(d);if(l?.prompt){let e=new URLSearchParams({prompt:l.prompt});f=`${f}?${e.toString()}`}c(f),u()}export{g as a,d as i,v as n,u as o,c as r,h as s,_ as t};
1
+ import{d as e}from"./routes-iipg2wkc.js";import{t}from"./conversation-store-D4pZBwP5.js";import{i as n}from"./viewer-store-CayI6XWh.js";import{t as r}from"./haptics-Mqend0Ru.js";import{r as i}from"./subagent-store-9SqF-NFa.js";import{t as a}from"./workflow-store-D0DBQy44.js";import{t as o}from"./conversation-selection-DXYpE4U8.js";import{t as s}from"./sound-manager-jVvPdZzE.js";var c=`vellum:focus-composer`,l=!1;function u(){l=!0,typeof window<`u`&&window.dispatchEvent(new Event(c))}function d(){let e=l;return l=!1,e}var f=[`input`,`textarea`,`select`,`[contenteditable=""]`,`[contenteditable="true"]`,`[role="textbox"]`].join(`,`);function p(e){return!!e?.closest(f)}function m(e){return!!e?.closest(`a[href], button, summary`)}function h(e,t){return!(e.defaultPrevented||e.metaKey||e.ctrlKey||e.altKey||e.isComposing||e.keyCode===229||typeof e.key!=`string`||e.key.length!==1||p(t)||e.key===` `&&m(t))}function g({value:e,text:t,selectionStart:n,selectionEnd:r}){let i=Math.max(0,Math.min(n??e.length,e.length)),a=Math.max(i,Math.min(r??i,e.length));return{value:e.slice(0,i)+t+e.slice(a),cursor:i+t.length}}function _(o,s,c){c?.silent||r.light(),n.getState().setMainView(`chat`),s!==t.getState().activeConversationId&&(i.getState().reset(),a.getState().reset(),n.getState().clearTranscriptPanelPayloads()),t.getState().setActiveConversationId(s),o(c?.messageId?e.conversationAtMessage(s,c.messageId):e.conversation(s))}function v(c,l){l?.silent||(r.light(),s().play(`new_conversation`)),n.getState().setMainView(`chat`),i.getState().reset(),a.getState().reset(),n.getState().clearTranscriptPanelPayloads();let d=o();t.getState().setActiveConversationId(d);let f=e.conversation(d);if(l?.prompt){let e=new URLSearchParams({prompt:l.prompt});f=`${f}?${e.toString()}`}c(f),u()}export{g as a,d as i,v as n,u as o,c as r,h as s,_ as t};
@@ -1 +1 @@
1
- import{o as e}from"./chunk-jRWAZmH_.js";import{t}from"./react-BFJW0bSv.js";import{t as n}from"./useQuery-Bz-fbQ-m.js";import{r}from"./use-is-org-ready-BmOdacs1.js";import{M as i}from"./react-query.gen-DxjuNs-5.js";import{D as a,a as o,b as s,g as c,l,s as u,v as d}from"./conversation-list-fetchers-D3FmANI4.js";var f=e(t(),1),p=[],m=[];function h(e,t=!0){let i=r(),a=n({...l(e),enabled:t&&!!e&&i});return{conversations:a.data??p,isLoading:a.isLoading,isPending:a.isPending,isError:a.isError,error:a.error,refetch:()=>{a.refetch()}}}function g(e,t=!0){let i=r(),a=n({...u(e),enabled:t&&!!e&&i});return{conversations:a.data??p,isLoading:a.isLoading,isPending:a.isPending,isError:a.isError,refetch:()=>{a.refetch()}}}function _(e,t=!0){let i=r(),a=n({...c(e),enabled:t&&!!e&&i});return{conversations:a.data??p,isLoading:a.isLoading,isPending:a.isPending,isError:a.isError,refetch:()=>{a.refetch()}}}function v(e,t,i=!0){let a=r(),o=n({...d(e,t),enabled:i&&!!e&&a});return{conversations:o.data??p,isLoading:o.isLoading,isPending:o.isPending,isError:o.isError,hasData:o.data!==void 0}}function y(e,t=!0){let i=r();return n({...s(e),enabled:t&&!!e&&i}).data??null}function b(e,t,n=!0){let r=y(e,n),i=(0,f.useMemo)(()=>a(t),[t]);return Math.max(0,r??i)}function x(e,t=!0){let i=r(),a=n({...o(e),enabled:t&&!!e&&i});return{conversations:a.data??p,isLoading:a.isLoading,isPending:a.isPending,isError:a.isError,error:a.error,refetch:()=>{a.refetch()}}}function S(e,t=!0){let a=r(),o=n({...i({path:{assistant_id:e??``}}),select:e=>e.groups,enabled:t&&!!e&&a,staleTime:3e4});return{conversationGroups:o.data??m,isLoading:o.isLoading}}export{_ as a,h as i,g as n,v as o,S as r,b as s,x as t};
1
+ import{o as e}from"./chunk-jRWAZmH_.js";import{t}from"./react-BFJW0bSv.js";import{t as n}from"./useQuery-Bz-fbQ-m.js";import{r}from"./use-is-org-ready-CQntk0MX.js";import{M as i}from"./react-query.gen-DxjuNs-5.js";import{D as a,a as o,b as s,g as c,l,s as u,v as d}from"./conversation-list-fetchers-D3FmANI4.js";var f=e(t(),1),p=[],m=[];function h(e,t=!0){let i=r(),a=n({...l(e),enabled:t&&!!e&&i});return{conversations:a.data??p,isLoading:a.isLoading,isPending:a.isPending,isError:a.isError,error:a.error,refetch:()=>{a.refetch()}}}function g(e,t=!0){let i=r(),a=n({...u(e),enabled:t&&!!e&&i});return{conversations:a.data??p,isLoading:a.isLoading,isPending:a.isPending,isError:a.isError,refetch:()=>{a.refetch()}}}function _(e,t=!0){let i=r(),a=n({...c(e),enabled:t&&!!e&&i});return{conversations:a.data??p,isLoading:a.isLoading,isPending:a.isPending,isError:a.isError,refetch:()=>{a.refetch()}}}function v(e,t,i=!0){let a=r(),o=n({...d(e,t),enabled:i&&!!e&&a});return{conversations:o.data??p,isLoading:o.isLoading,isPending:o.isPending,isError:o.isError,hasData:o.data!==void 0}}function y(e,t=!0){let i=r();return n({...s(e),enabled:t&&!!e&&i}).data??null}function b(e,t,n=!0){let r=y(e,n),i=(0,f.useMemo)(()=>a(t),[t]);return Math.max(0,r??i)}function x(e,t=!0){let i=r(),a=n({...o(e),enabled:t&&!!e&&i});return{conversations:a.data??p,isLoading:a.isLoading,isPending:a.isPending,isError:a.isError,error:a.error,refetch:()=>{a.refetch()}}}function S(e,t=!0){let a=r(),o=n({...i({path:{assistant_id:e??``}}),select:e=>e.groups,enabled:t&&!!e&&a,staleTime:3e4});return{conversationGroups:o.data??m,isLoading:o.isLoading}}export{_ as a,h as i,g as n,v as o,S as r,b as s,x as t};