"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[563,3660,4927,5143],{1442:(e,t,n)=>{n.d(t,{K:()=>a,q:()=>i});var r=n(68516).Buffer;function a(e){let t=e.split(".");if(3!==t.length||!t[1])return null;try{let e,n;return JSON.parse((n=(e=t[1].replace(/-/g,"+").replace(/_/g,"/")).padEnd(e.length+(4-e.length%4)%4,"="),r.from(n,"base64").toString("utf8")))}catch{return null}}function i(e){let t=a(e);if(!t)return null;let n="string"==typeof t.sub?t.sub:null,r="string"==typeof t.email&&t.email||"string"==typeof t.preferred_username&&t.preferred_username||null;if(!n||!r)return null;let i="string"==typeof t.name&&t.name||"string"==typeof t.given_name&&t.given_name||r.split("@")[0]||r,o="string"==typeof t.given_name&&t.given_name||i.split(/\s+/)[0]||i;return{sub:n,email:r,name:i,firstName:o}}},6146:(e,t,n)=>{n.d(t,{o:()=>c});var r=n(53053),a=n(86227),i=n(93021),o=n(55590),s=n(92671),l=n(6224);function c(){let e=(0,l.g)(),t=(0,r.v)(a.nc),n=(0,r.v)(o.E1),c=(0,a.nc)(e=>e.user),u=(0,o.LH)(),{data:d}=(0,i.i)();if(e)return{name:s.W.name,email:s.W.email,firstName:s.W.name.split(/\s+/)[0]??s.W.name};if(!t||!c&&!n)return null;if(c)return{name:c.name,email:c.email,firstName:c.firstName,avatarUrl:d?.avatar_url};if(u){let e=u.name.split(/\s+/)[0]??u.name;return{name:u.name,email:u.email,firstName:e,avatarUrl:u.avatarUrl}}return null}},8192:(e,t,n)=>{n.d(t,{J:()=>v});var r=n(4208),a=n(35855),i=n.n(a),o=n(19984),s=n(12551),l=n(96670),c=n(93497),u=n(19084),d=n(48843),f=n(61554),m=n(30826),p=n(6146),h=n(46108),g=n(26938);function v({onClose:e}){let t=(0,o.usePathname)(),n=(0,p.o)(),a=(0,m._)();if(!n)return null;let b=n.firstName,x=(0,h.U)({returnTo:t||"/drive",intent:"add_account"});return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)("div",{className:"relative px-4 pb-3 pt-4",children:[(0,r.jsx)("p",{className:"truncate pr-8 text-center text-sm text-foreground",children:n.email}),(0,r.jsx)(f.$,{type:"button",variant:"ghost",size:"icon",className:"absolute right-2 top-2 size-8 text-muted-foreground hover:bg-accent","aria-label":"Fermer",onClick:e,children:(0,r.jsx)(s.A,{className:"size-4"})}),(0,r.jsxs)("div",{className:"mt-4 flex flex-col items-center",children:[(0,r.jsxs)("div",{className:"relative",children:[(0,r.jsx)(d.h,{account:{name:n.name,email:n.email,avatarUrl:n.avatarUrl},size:"lg"}),(0,r.jsx)("span",{className:"absolute bottom-0 right-0 flex size-7 items-center justify-center rounded-full border-2 border-border bg-background text-muted-foreground shadow-sm",children:(0,r.jsx)(l.A,{className:"size-3.5","aria-hidden":!0})})]}),(0,r.jsxs)("h2",{className:"mt-3 text-xl font-normal text-foreground",children:["Bonjour ",b," !"]}),(0,r.jsx)(f.$,{type:"button",variant:"outline",className:"mt-4 h-9 rounded-full border-border bg-transparent px-5 text-sm font-medium text-primary hover:bg-accent hover:text-primary",asChild:!0,children:(0,r.jsx)(i(),{href:g.qH,onClick:e,children:"G\xe9rer votre compte"})})]})]}),(0,r.jsxs)("div",{className:"px-3 pb-3",children:[(0,r.jsx)("div",{className:"overflow-hidden rounded-2xl border border-border bg-background",children:(0,r.jsxs)("div",{className:"px-1 py-1",children:[(0,r.jsxs)("a",{href:x,onClick:e,className:"flex w-full items-center gap-3 rounded-lg px-3 py-2.5 text-left text-sm text-foreground transition-colors hover:bg-accent",children:[(0,r.jsx)("span",{className:"flex size-8 items-center justify-center",children:(0,r.jsx)(c.A,{className:"size-5 text-primary","aria-hidden":!0})}),"Ajouter un compte"]}),(0,r.jsxs)("button",{type:"button",onClick:()=>{a(),e()},className:"flex w-full items-center gap-3 rounded-lg px-3 py-2.5 text-left text-sm text-foreground transition-colors hover:bg-accent",children:[(0,r.jsx)("span",{className:"flex size-8 items-center justify-center",children:(0,r.jsx)(u.A,{className:"size-5 text-muted-foreground","aria-hidden":!0})}),"Se d\xe9connecter"]})]})}),(0,r.jsxs)("div",{className:"mt-4 flex flex-wrap items-center justify-center gap-1 pb-2 text-center text-xs text-muted-foreground",children:[(0,r.jsx)("button",{type:"button",className:"hover:underline",children:"R\xe8gles de confidentialit\xe9"}),(0,r.jsx)("span",{"aria-hidden":!0,children:"\xb7"}),(0,r.jsx)("button",{type:"button",className:"hover:underline",children:"Conditions d'utilisation"})]})]})]})}},9483:(e,t,n)=>{n.d(t,{p:()=>o});var r=n(46298),a=n(22029),i=n(91025);let o=(0,r.v)()((0,a.Zr)(e=>({themeMode:"system",setThemeMode:t=>e({themeMode:t})}),{name:"ultimail-demo-theme",storage:i.$,partialize:e=>({themeMode:e.themeMode})}))},10841:(e,t,n)=>{n.d(t,{s:()=>l});var r=n(4208),a=n(91356),i=n(6146),o=n(8192),s=n(58113);function l({open:e,onOpenChange:t,containerRef:n}){let c=(0,a.useRef)(null),u=(0,i.o)();return((0,a.useEffect)(()=>{if(e)return document.addEventListener("mousedown",r),document.addEventListener("keydown",a),()=>{document.removeEventListener("mousedown",r),document.removeEventListener("keydown",a)};function r(e){n.current&&!n.current.contains(e.target)&&t(!1)}function a(e){"Escape"===e.key&&t(!1)}},[e,t,n]),e&&u)?(0,r.jsx)("div",{ref:c,role:"dialog","aria-label":"Comptes connect\xe9s",className:(0,s.cn)("absolute right-0 top-12 z-50 w-[min(100vw-1rem,356px)] overflow-hidden rounded-[28px] border border-border bg-[var(--suite-surface-elevated)] text-foreground shadow-[0_4px_16px_rgba(0,0,0,0.35)]"),children:(0,r.jsx)(o.J,{onClose:()=>t(!1)})}):null}},18753:(e,t,n)=>{n.d(t,{W:()=>i,b:()=>o});var r=n(29994),a=n(62805);async function i(e){(0,r.bo)(e);try{await (0,a.Lj)(JSON.stringify(e))}catch{}}async function o(){if((0,r.PC)())return(0,r.PC)();try{let e=await (0,a.kT)();if(e){let t=JSON.parse(e);return(0,r.bo)(t),t}}catch{}return null}},19096:(e,t,n)=>{n.d(t,{J:()=>o});var r=n(4208);n(91356);var a=n(84068),i=n(58113);function o({className:e,...t}){return(0,r.jsx)(a.b,{"data-slot":"label",className:(0,i.cn)("flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50",e),...t})}},24717:(e,t,n)=>{n.d(t,{K:()=>c,l:()=>l});var r=n(81887);let a=null,i=null;async function o(){if(!(0,r.oX)())return null;if(a)return a;try{return a=(await n.e(6083).then(n.bind(n,56083))).invoke}catch{return null}}async function s(){if(!(0,r.oX)())return null;if(i)return i;try{return i=(await n.e(9233).then(n.bind(n,71614))).listen}catch{return null}}async function l(e,t){let n=await o();if(!n)return null;try{return await Promise.race([n(e,t),new Promise((e,t)=>{setTimeout(()=>t(Error("invoke_timeout")),5e3)})])}catch{return null}}async function c(e,t){let n=await s();return n?n(e,e=>t(e.payload)):()=>{}}},26938:(e,t,n)=>{n.d(t,{PV:()=>l,X6:()=>c,qH:()=>s,zt:()=>u});var r=n(49347),a=n(80691),i=n(26362),o=n(4433);let s="/account",l=[{id:"home",label:"Accueil",description:"Vue d'ensemble de votre compte Ulti",href:s,icon:r.A},{id:"personal-info",label:"Informations personnelles",description:"Nom, adresse e-mail et identifiant",href:`${s}/informations`,icon:a.A},{id:"usage-ia",label:"Usage IA",description:"Consommation LLM et cl\xe9s API personnelles",href:`${s}/usage-ia`,icon:i.A},{id:"security",label:"S\xe9curit\xe9",description:"Mot de passe, sessions et appareils",href:`${s}/securite`,icon:o.A}];function c(e,t){return t.href===s?e===s||e===`${s}/accueil`:e===t.href||!!e?.startsWith(`${t.href}/`)}function u(e){let t=e?.[0],n=l.find(e=>"home"===e.id?!t||"accueil"===t:e.href.endsWith(`/${t}`));return n?.id??"home"}},29994:(e,t,n)=>{n.d(t,{Ij:()=>g,PC:()=>u,PW:()=>p,bo:()=>d,hY:()=>f,mR:()=>m,zB:()=>v});var r=n(81887),a=n(82108);let i="ulti-runtime-config",o=null,s=new Set;function l(e){return e.endsWith("/")?e:`${e}/`}function c(e){try{let t=new URL(e),n="https:"===t.protocol?"wss:":"ws:";return`${n}//${t.host}/ws`}catch{return`${e.replace(/^http/,"ws")}/ws`}}function u(){return o||(0,r.B8)()&&(o=function(){try{let e=localStorage.getItem(i);if(!e)return null;return JSON.parse(e)}catch{return null}}()),o}function d(e){o=e;try{e?localStorage.setItem(i,JSON.stringify(e)):localStorage.removeItem(i)}catch{}for(let t of s)t(e)}function f(){if((0,r.B8)()){let e=u();if(e)return e.apiBaseUrl}return"/api/v1"}function m(){if((0,r.B8)()){let e=u();if(e)return e.wsUrl}return"ws://localhost/ws"}function p(){if((0,r.B8)()){let e=u();if(e?.aiOrigin)return e.aiOrigin}return"http://localhost"}class h extends Error{}async function g(e,t){let n,i;try{n=new URL(e.includes("://")?e:`https://${e}`).origin.replace(/\/+$/,"")}catch{throw new h(`URL d'instance invalide : ${e}`)}let o=l(`${n}${a.env.NEXT_PUBLIC_OIDC_ISSUER_PATH??"/auth/application/o/ulti/"}`),s=`${o}.well-known/openid-configuration`;try{let e=await fetch(s,{headers:{Accept:"application/json"}});if(!e.ok)throw new h(`D\xe9couverte OIDC \xe9chou\xe9e (${e.status}) sur ${n}`);i=await e.json()}catch(e){if(e instanceof h)throw e;throw new h(`Impossible de joindre ${n}. V\xe9rifie l'URL et ta connexion.`)}let u={issuer:i.issuer?l(i.issuer):o,clientId:"ulti-backend",redirectUri:`${(0,r.hF)()}://oauth/callback`,authorizationEndpoint:i.authorization_endpoint,tokenEndpoint:i.token_endpoint,endSessionEndpoint:i.end_session_endpoint??`${o}end-session/`,enrollmentUrl:`${n}/auth/if/flow/ulti-enrollment/`};return{label:t?.label??n.replace(/^https?:\/\//,""),instanceOrigin:n,apiBaseUrl:`${n}/api/v1`,wsUrl:c(n),oidc:u,aiOrigin:n,aiPublicPath:"/ai",onlyOfficeUrl:`${n}/office`,hocuspocusUrl:`${c(n).replace(/\/ws$/,"")}/collab`}}function v(){return a.env.NEXT_PUBLIC_ULTISPACE_ORIGIN??"https://space.ulti.app"}r.ju,r.fk},30826:(e,t,n)=>{n.d(t,{AuthProvider:()=>g,_:()=>v});var r=n(4208),a=n(91356),i=n(19984),o=n(86227),s=n(49039),l=n(41567),c=n(49677),u=n(43351),d=n(81887),f=n(68917),m=n(60112),p=n(29994),h=n(18753);function g({children:e}){let t=(0,i.usePathname)(),n=(0,i.useRouter)(),m=(0,o.nc)(e=>e.logout),v=(0,o.nc)(e=>e.isAuthenticated),[b,x]=(0,a.useState)(()=>!(0,s.EJ)()),w=(0,a.useCallback)(e=>(0,l.Pr)(e),[]),y=(0,d.B8)(),_=(0,a.useCallback)(async()=>{if(y)return!!await (0,f.P)()||(m(),!1);let e=await (0,l.fd)();return!!(e&&w(e))||(m(),!1)},[w,m,y]);return(0,a.useEffect)(()=>{let e=!1;async function n(){if(!(0,s.EJ)())return void x(!0);if(y){if(await (0,h.b)(),e)return;if((0,p.PC)()){let t=await (0,f._)();!e&&t&&await (0,f.P)()}e||x(!0);return}let n=await (0,l.fd)();if(e)return;if(n&&w(n))return void x(!0);let r=o.nc.getState().isAuthenticated();m(),!r||(0,u.V)(t)||(0,c.a)()||c.w.getState().setExpired(),x(!0)}if(!o.nc.persist.hasHydrated()){let t=o.nc.persist.onFinishHydration(()=>{n()});return()=>{e=!0,t()}}return n(),()=>{e=!0}},[w,m,t,y]),(0,a.useEffect)(()=>{if(!b||!(0,s.EJ)())return;let e=setInterval(()=>{let{accessToken:e,expiresAt:t}=o.nc.getState();e&&t&&Date.now()>=t-3e5&&_()},6e4);return()=>clearInterval(e)},[b,_]),(0,a.useEffect)(()=>{if(!b||!(0,s.EJ)()||(0,u.V)(t)||v()||y)return;let e=!1;return _().then(r=>{if(e||r||"expired"===c.w.getState().status)return;let a=encodeURIComponent(t);n.replace(`/login?returnTo=${a}`)}),()=>{e=!0}},[b,t,v,n,_]),(0,r.jsx)(r.Fragment,{children:e})}function v(){let e=(0,o.nc)(e=>e.logout),t=(0,i.useRouter)(),r=(0,d.B8)();return async()=>{if(r){try{let{unregisterPushOnLogout:e}=await n.e(692).then(n.bind(n,692));await e()}catch{}await (0,m.my)()}else await fetch("/api/auth/logout",{method:"POST",credentials:"include"});for(let t of(e(),localStorage.removeItem(o.Ht),o.IQ))localStorage.removeItem(t);t.replace("/login")}}},36042:(e,t,n)=>{n.d(t,{w:()=>r});function r(e){return e.startsWith("/")?e:`/${e}`}},40505:(e,t,n)=>{n.d(t,{Y7:()=>l,Yc:()=>c,tR:()=>o,yT:()=>u,zT:()=>s});var r=n(98306),a=n(17745),i=n(94927);function o(e){let t="number"==typeof e&&Number.isFinite(e)?e:0;return new Intl.NumberFormat("fr-FR",{style:"currency",currency:"EUR",minimumFractionDigits:2,maximumFractionDigits:4}).format(t/1e6)}function s(e){let t=e.cost_limit_month_micro_eur;return!t||t<=0?null:Math.min(100,Math.round(e.cost_used_month_micro_eur/t*100))}function l(){return(0,r.I)({queryKey:["ai","config"],queryFn:()=>i.uE.get("/ai/config"),staleTime:6e4})}function c(e=!0){return(0,r.I)({queryKey:["ai","quota"],queryFn:()=>i.uE.get("/ai/quota"),enabled:e,staleTime:3e4})}function u(){return(0,a.n)({mutationFn:e=>i.uE.post("/ai/sessions",{app:e.app,temporary:e.temporary??!0,message_id:e.messageId,account_id:e.accountId,drive_path:e.drivePath,file_id:e.fileId,contact_id:e.contactId,subject:e.subject,snippet:e.snippet})})}},41567:(e,t,n)=>{n.d(t,{$G:()=>s,Pr:()=>o,fd:()=>i});var r=n(86227),a=n(49677);async function i(){try{let e=await fetch("/api/auth/session",{credentials:"include"});if(!e.ok)return null;return await e.json()}catch{return null}}function o(e){return!!e.authenticated&&!!e.accessToken&&!!e.expiresAt&&(r.nc.getState().login(e.accessToken,e.refreshToken??"",e.expiresAt,e.user??null),a.w.getState().clear(),!0)}async function s(){let e=await i();return null!==e&&o(e)}},43351:(e,t,n)=>{n.d(t,{V:()=>a,m:()=>i});let r=["/login","/auth/","/api/auth/"];function a(e){return!!("/"===e||e.startsWith("/drive/s/")||"/demo"===e||e.startsWith("/demo/")||e.startsWith("/onboard/"))||r.some(t=>e===t||e.startsWith(t))}function i(e){return"/demo"===e||e.startsWith("/demo/")}},46108:(e,t,n)=>{n.d(t,{U:()=>r});function r(e){let t=new URLSearchParams({returnTo:e?.returnTo??"/mail/inbox"});return e?.intent==="add_account"&&t.set("intent","add_account"),e?.prompt&&t.set("prompt",e.prompt),`/api/auth/login?${t.toString()}`}},48843:(e,t,n)=>{n.d(t,{h:()=>c});var r=n(4208),a=n(98565),i=n(97150),o=n(22054),s=n(58113);let l={sm:{box:"size-8",text:"text-sm",gravatar:64},md:{box:"size-10",text:"text-base",gravatar:80},lg:{box:"size-20",text:"text-3xl",gravatar:160}};function c({account:e,size:t="md",className:n}){let u=e.name||e.email,d=(0,o.w7)(u),f=(0,o.V7)(u),m=l[t],p=e.email?(0,i.yR)(e.email,m.gravatar):void 0;return(0,r.jsxs)(a.eu,{className:(0,s.cn)("shrink-0",m.box,n),children:[e.avatarUrl?(0,r.jsx)(a.BK,{src:e.avatarUrl,alt:u}):null,p?(0,r.jsx)(a.BK,{src:p,alt:u}):null,(0,r.jsx)(a.q5,{className:(0,s.cn)("font-medium text-white",m.text),style:{backgroundColor:f},children:d})]})}},49039:(e,t,n)=>{n.d(t,{EJ:()=>l,xb:()=>o,z0:()=>s});var r=n(81887),a=n(29994),i=n(82108);function o(){var e;return((e="http://localhost/auth/application/o/ulti/").endsWith("/")?e:`${e}/`).replace(/application\/o\/[^/]+\/?$/,"")}function s(){if((0,r.B8)()){let e=(0,a.PC)();if(e?.oidc.enrollmentUrl)return e.oidc.enrollmentUrl}return`${o()}if/flow/ulti-enrollment/`}function l(){return"true"!==i.env.NEXT_PUBLIC_OIDC_DISABLED}},49677:(e,t,n)=>{n.d(t,{a:()=>a,w:()=>r});let r=(0,n(46298).v)((e,t)=>({status:"idle",setOffline:()=>{"expired"!==t().status&&e({status:"offline"})},setExpired:()=>{"expired"!==t().status&&e({status:"expired"})},clear:()=>e({status:"idle"})}));function a(){return"expired"===r.getState().status}},52590:(e,t,n)=>{n.d(t,{x:()=>u});var r=n(46298),a=n(22029),i=n(91025),o=n(81893),s=n(65367),l=n(19916);let c={quickSettingsOpen:!1,themeDialogOpen:!1,density:"default",themeMode:"system",backgroundId:"none",inboxSort:"default",readingPane:"none",conversationMode:!0,infiniteScroll:!1,listPageSize:l.Lw,...s.L5},u=(0,r.v)()((0,a.Zr)(e=>({...c,setQuickSettingsOpen:t=>e({quickSettingsOpen:t}),setThemeDialogOpen:t=>e({themeDialogOpen:t}),setDensity:t=>e({density:t}),setThemeMode:t=>e({themeMode:t}),setBackgroundId:t=>e({backgroundId:t}),setInboxSort:t=>e({inboxSort:t}),setReadingPane:t=>e({readingPane:t}),setConversationMode:t=>e({conversationMode:t}),setInfiniteScroll:t=>e({infiniteScroll:t}),setListPageSize:t=>e({listPageSize:t}),setDesktopNewMail:t=>e({desktopNewMail:t}),setDesktopMentions:t=>e({desktopMentions:t}),setEmailDigest:t=>e({emailDigest:t}),setSoundEnabled:t=>e({soundEnabled:t}),hydrateFromApi:t=>e(e=>({...e,...t,...void 0!==t.backgroundId?{backgroundId:(0,o.y9)(t.backgroundId)}:{}}))}),{name:"ultimail-mail-settings",storage:i.$,partialize:e=>({density:e.density,themeMode:e.themeMode,backgroundId:e.backgroundId,inboxSort:e.inboxSort,readingPane:e.readingPane,conversationMode:e.conversationMode,infiniteScroll:e.infiniteScroll,listPageSize:e.listPageSize,desktopNewMail:e.desktopNewMail,desktopMentions:e.desktopMentions,emailDigest:e.emailDigest,soundEnabled:e.soundEnabled}),merge:(e,t)=>e?{...t,...e,backgroundId:(0,o.y9)(e.backgroundId??"none"),listPageSize:(0,l.rq)(Number(e.listPageSize))?(0,l.QK)(Number(e.listPageSize)):t.listPageSize}:t}))},53053:(e,t,n)=>{n.d(t,{v:()=>a});var r=n(91356);function a(e){let[t,n]=(0,r.useState)(!1);return(0,r.useEffect)(()=>e.persist.hasHydrated()?void n(!0):e.persist.onFinishHydration(()=>n(!0)),[e]),t}},55590:(e,t,n)=>{n.d(t,{E1:()=>s,LH:()=>l});var r=n(46298),a=n(22029);n(86227);var i=n(90324),o=n(91025);let s=(0,r.v)()((0,a.Zr)(e=>({activeAccountId:null,otherAccountsExpanded:!0,setActiveAccountId:t=>e({activeAccountId:t}),setOtherAccountsExpanded:t=>e({otherAccountsExpanded:t}),toggleOtherAccountsExpanded:()=>e(e=>({otherAccountsExpanded:!e.otherAccountsExpanded}))}),{name:"ultimail-accounts",storage:o.$,partialize:e=>({activeAccountId:e.activeAccountId,otherAccountsExpanded:e.otherAccountsExpanded})}));function l(){let e=s(e=>e.activeAccountId),{data:t}=(0,i.HM)();return t?.find(t=>t.id===e)??t?.[0]??null}},58113:(e,t,n)=>{n.d(t,{B:()=>o,L:()=>l,cn:()=>s});var r=n(28900),a=n(93898);let i=new Intl.NumberFormat("en-US");function o(e){return i.format(e)}function s(...e){return(0,a.QP)((0,r.$)(e))}function l(e,t=0){let n=new Date;return n.setHours(e,t,0,0),n.getTime()<=Date.now()&&n.setDate(n.getDate()+1),n}},60112:(e,t,n)=>{function r(e){let t=new Uint8Array(e),n="";for(let e of t)n+=String.fromCharCode(e);return btoa(n).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function a(e=32){let t=new Uint8Array(e);return crypto.getRandomValues(t),r(t.buffer)}async function i(e){let t=new TextEncoder().encode(e);return r(await crypto.subtle.digest("SHA-256",t))}async function o(){let e=a(32),t=await i(e);return{verifier:e,challenge:t}}n.d(t,{my:()=>b,dW:()=>v,PA:()=>g});var s=n(1442),l=n(29994),c=n(81887),u=n(24717),d=n(62805);let f="ulti-native-oauth-pending";async function m(e){if((0,c.oX)())try{let t=await n.e(2828).then(n.bind(n,92828));await t.openUrl(e);return}catch{}window.open(e,"_blank","noopener")}function p(e){let t=e.id_token??e.access_token;if(!t)throw Error("no_id_token");let n=Date.now()+(e.expires_in??3600)*1e3;return{accessToken:t,refreshToken:e.refresh_token??null,expiresAt:n,user:(0,s.q)(t)}}async function h(e,t){let n=(0,l.PC)();if(!n)throw Error("no_runtime_config");let r=new URLSearchParams({grant_type:"authorization_code",client_id:n.oidc.clientId,code:e,redirect_uri:n.oidc.redirectUri,code_verifier:t}),a=await fetch(n.oidc.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:r});if(!a.ok)throw Error(`token_exchange_failed:${a.status}`);let i=p(await a.json());return await (0,d.Ko)(i),i}async function g(e){var t;let n=(0,l.PC)();if(!n)throw Error("no_runtime_config");let{verifier:r,challenge:i}=await o(),s=a(16);t={verifier:r,state:s,returnTo:e?.returnTo??"/mail/inbox"},sessionStorage.setItem(f,JSON.stringify(t));let c=new URLSearchParams({client_id:n.oidc.clientId,redirect_uri:n.oidc.redirectUri,response_type:"code",scope:"openid profile email offline_access",state:s,code_challenge:i,code_challenge_method:"S256",prompt:e?.prompt??"select_account"}),d=`${n.oidc.authorizationEndpoint}?${c.toString()}`;return new Promise((e,t)=>{let n=!1,r=null,a=()=>{n=!0,r&&r(),clearTimeout(i)},i=setTimeout(()=>{n||(a(),t(Error("login_timeout")))},3e5),o=async r=>{if(!n)for(let n of Array.isArray(r)?r:[r]){if("string"!=typeof n||!n.includes("oauth/callback"))continue;let{code:r,state:i,error:o}=function(e){try{let t=new URL(e);return{code:t.searchParams.get("code")??void 0,state:t.searchParams.get("state")??void 0,error:t.searchParams.get("error")??void 0}}catch{return{}}}(n),s=function(){let e=sessionStorage.getItem(f);if(!e)return null;sessionStorage.removeItem(f);try{return JSON.parse(e)}catch{return null}}();if(o){a(),t(Error(o));return}if(!r||!s||i!==s.state){a(),t(Error("invalid_state"));return}try{let t=await h(r,s.verifier);a(),e(t)}catch(e){a(),t(e instanceof Error?e:Error("exchange_failed"))}return}};(async()=>{r=await (0,u.K)("ulti://deep-link",e=>{o(e)}),await m(d)})().catch(e=>{n||(a(),t(e instanceof Error?e:Error("open_failed")))})})}async function v(){let e=(0,l.PC)(),t=await (0,d.lx)();if(!e||!t?.refreshToken)return null;let n=new URLSearchParams({grant_type:"refresh_token",client_id:e.oidc.clientId,refresh_token:t.refreshToken});try{let r=await fetch(e.oidc.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:n});if(!r.ok)return null;let a=await r.json(),i=p({...a,refresh_token:a.refresh_token??t.refreshToken});return await (0,d.Ko)(i),i}catch{return null}}async function b(){let e=(0,l.PC)();if(await (0,d.q7)(),e?.oidc.endSessionEndpoint)try{await m(e.oidc.endSessionEndpoint)}catch{}}},60142:(e,t,n)=>{n.d(t,{N:()=>i});var r=n(4208);n(91356);var a=n(17996);function i({children:e,scriptProps:t,...n}){let o={...t,type:"application/json"};return(0,r.jsx)(a.N,{...n,scriptProps:o,children:e})}},61554:(e,t,n)=>{n.d(t,{$:()=>l,r:()=>s});var r=n(4208);n(91356);var a=n(49402),i=n(57542),o=n(58113);let s=(0,i.F)("inline-flex cursor-pointer items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",{variants:{variant:{default:"bg-primary text-primary-foreground hover:bg-primary/90",destructive:"bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",outline:"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-9 px-4 py-2 has-[>svg]:px-3",sm:"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5",lg:"h-10 rounded-md px-6 has-[>svg]:px-4",icon:"size-9","icon-sm":"size-8","icon-lg":"size-10"}},defaultVariants:{variant:"default",size:"default"}});function l({className:e,variant:t,size:n,asChild:i=!1,type:c,...u}){let d=i?a.DX:"button";return(0,r.jsx)(d,{"data-slot":"button",type:i?void 0:c??"button",className:(0,o.cn)(s({variant:t,size:n}),e),...u})}},62805:(e,t,n)=>{n.d(t,{Ko:()=>m,Lj:()=>g,XP:()=>b,gm:()=>v,kT:()=>h,lx:()=>f,q7:()=>p});var r=n(24717),a=n(81887);let i="session",o="runtime_config",s="push_token";function l(){return window.localStorage}async function c(e,t){(0,a.oX)()?await (0,r.l)("plugin:ulti-core|store_set",{key:e,value:t}):l()?.setItem(`ulti-secure:${e}`,t)}async function u(e){return(0,a.oX)()?await (0,r.l)("plugin:ulti-core|store_get",{key:e})??null:l()?.getItem(`ulti-secure:${e}`)??null}async function d(e){(0,a.oX)()?await (0,r.l)("plugin:ulti-core|store_delete",{key:e}):l()?.removeItem(`ulti-secure:${e}`)}async function f(){let e=await u(i);if(!e)return null;try{return JSON.parse(e)}catch{return null}}async function m(e){await c(i,JSON.stringify(e))}async function p(){(0,a.oX)()?await (0,r.l)("plugin:ulti-core|store_clear"):await d(i)}async function h(){return u(o)}async function g(e){await c(o,e)}async function v(){return u(s)}async function b(e){await c(s,e)}},65044:(e,t,n)=>{n.d(t,{z:()=>c});var r=n(4208),a=n(91356),i=n(29994);function o(e="/ai"){let t=(e||"/ai").replace(/\/$/,"")||"/ai",n=t.startsWith("/")?t:`/${t}`,r=(0,i.PW)()?.trim().replace(/\/$/,"");return r?`${r}${n}`:n}var s=n(40505),l=n(17996);function c({publicPath:e="/ai",context:t,className:n}){let i=(0,a.useRef)(null),{resolvedTheme:u}=(0,l.D)(),{data:d,isSuccess:f}=(0,s.Y7)(),m=(0,s.yT)(),[p,h]=(0,a.useState)(),[g,v]=(0,a.useState)(),b=(0,a.useMemo)(()=>[t.app,t.temporary,t.messageId,t.accountId,t.drivePath,t.fileId,t.contactId].join("|"),[t.app,t.temporary,t.messageId,t.accountId,t.drivePath,t.fileId,t.contactId]),x=(0,a.useMemo)(()=>(function(e="/ai"){let t=o(e);return t.startsWith("http://")||t.startsWith("https://")?new URL(t).origin:window.location.origin})(e),[e]),w=d?.enabled_tools??[],y=d?.mcp_url??"/api/v1/ai/mcp",_=(0,a.useMemo)(()=>{var n;let r,a,i;if(!f||!d?.enabled)return null;let s=(n=d.default_model,r=new URLSearchParams,(a=n?.trim())&&r.set("model",a),!1!==t.temporary&&r.set("temporary-chat","true"),t.app&&r.set("app",t.app),t.messageId&&r.set("message_id",t.messageId),t.accountId&&r.set("account_id",t.accountId),t.drivePath&&r.set("path",t.drivePath),t.fileId&&r.set("file_id",t.fileId),t.contactId&&r.set("contact_id",t.contactId),t.subject&&r.set("subject",t.subject),t.snippet&&r.set("snippet",t.snippet),r.toString());return i=o(e),s?`${i}/?${s}`:`${i}/`},[f,d,e,t]);return((0,a.useEffect)(()=>{if(!x)return;let e=e=>{if(e.origin!==x)return;let t=e.data;t?.type==="ULTI_OPEN_LINK"&&"string"==typeof t.href&&window.open(t.href,"_blank","noopener,noreferrer")};return window.addEventListener("message",e),()=>window.removeEventListener("message",e)},[x]),(0,a.useEffect)(()=>{if(!d?.enabled)return;let e=!1;return m.mutateAsync(t).then(t=>{e||(h(t.token_secret),v(t.session_id))}).catch(()=>{e||(h(void 0),v(void 0))}),()=>{e=!0}},[d?.enabled,b,t,m.mutateAsync]),(0,a.useEffect)(()=>{let e=i.current;e?.contentWindow&&x&&e.contentWindow.postMessage({type:"ULTI_THEME",theme:"dark"===u?"dark":"light"},x)},[u,x]),(0,a.useEffect)(()=>{let e,n=i.current;if(!n?.contentWindow||!x)return;let r=[(e=["Tu es UltiAI, l'assistant int\xe9gr\xe9 \xe0 la suite Ultimail (mail, drive, contacts, UltiCal).","R\xe9ponds en fran\xe7ais sauf demande contraire. Utilise les tools disponibles pour agir sur les donn\xe9es utilisateur.","Recherche suite (index local) via suite_search ; recherche web publique via web_search si configur\xe9e.","Apr\xe8s chaque appel d'outil, r\xe9ponds toujours en langage naturel : r\xe9sume le r\xe9sultat, cite les sources (sujet, chemin, nom), propose la suite.","Ne termine jamais un tour utilisateur avec uniquement un appel d'outil sans texte explicatif.","Respecte strictement le param\xe8tre limit des tools (ne demande pas plus de r\xe9sultats que n\xe9cessaire)."],"mail"===t.app&&t.subject&&(e.push(`Contexte mail — sujet: ${t.subject}`),t.snippet&&e.push(`Extrait: ${t.snippet}`)),"drive"===t.app&&t.drivePath&&e.push(`Contexte drive — fichier/dossier: ${t.drivePath}`),"contacts"===t.app&&t.contactId&&e.push(`Contexte contacts — fiche: ${t.contactId}`),"docs"===t.app&&(t.documentTitle&&e.push(`Document: ${t.documentTitle}`),t.drivePath&&e.push(`Sidecar: ${t.drivePath}`),t.sourcePath&&e.push(`Source: ${t.sourcePath}`),t.selectionText&&e.push(`S\xe9lection: ${t.selectionText}`),t.documentExcerpt&&e.push(`Contenu: ${t.documentExcerpt}`)),t.systemPromptExtra&&e.push("",t.systemPromptExtra),e.join("\n")),t.systemPromptExtra].filter(Boolean).join("\n\n");n.contentWindow.postMessage({type:"ULTI_CONTEXT_UPDATE",context:t,systemPrompt:r||void 0},x)},[t,x]),(0,a.useEffect)(()=>{let e=i.current;e?.contentWindow&&x&&p&&e.contentWindow.postMessage({type:"ULTI_SESSION",token_secret:p,session_id:g,mcp_url:y,enabled_tools:w,default_model:d?.default_model},x)},[p,g,y,w,d?.default_model,x]),_)?(0,r.jsx)("iframe",{ref:i,title:"UltiAI",src:_,className:n,sandbox:"allow-scripts allow-same-origin allow-forms allow-popups allow-downloads",allow:"clipboard-read; clipboard-write"},_):(0,r.jsx)("div",{className:n,"aria-busy":"true","aria-label":"Chargement UltiAI"})}},65367:(e,t,n)=>{n.d(t,{IX:()=>a,L5:()=>r,Sm:()=>i});let r={desktopNewMail:!0,desktopMentions:!0,emailDigest:!1,soundEnabled:!1};function a(e){let t=e.notifications;return{density:e.density,themeMode:e.theme_mode,backgroundId:e.background_id,inboxSort:e.inbox_sort,readingPane:e.reading_pane,conversationMode:e.conversation_mode,desktopNewMail:t?.desktop_new_mail??r.desktopNewMail,desktopMentions:t?.desktop_mentions??r.desktopMentions,emailDigest:t?.email_digest??r.emailDigest,soundEnabled:t?.sound_enabled??r.soundEnabled}}function i(e){let t={};void 0!==e.density&&(t.density=e.density),void 0!==e.themeMode&&(t.theme_mode=e.themeMode),void 0!==e.backgroundId&&(t.background_id=e.backgroundId),void 0!==e.inboxSort&&(t.inbox_sort=e.inboxSort),void 0!==e.readingPane&&(t.reading_pane=e.readingPane),void 0!==e.conversationMode&&(t.conversation_mode=e.conversationMode);let n={};return void 0!==e.desktopNewMail&&(n.desktop_new_mail=e.desktopNewMail),void 0!==e.desktopMentions&&(n.desktop_mentions=e.desktopMentions),void 0!==e.emailDigest&&(n.email_digest=e.emailDigest),void 0!==e.soundEnabled&&(n.sound_enabled=e.soundEnabled),Object.keys(n).length>0&&(t.notifications=n),t}},68917:(e,t,n)=>{n.d(t,{P:()=>c,_:()=>l});var r=n(86227),a=n(49677),i=n(62805),o=n(60112);function s(e){return!!e?.accessToken&&!!e.expiresAt&&(r.nc.getState().login(e.accessToken,e.refreshToken??"",e.expiresAt,e.user??null),a.w.getState().clear(),!0)}async function l(){return s(await (0,i.lx)())}async function c(){let e=await (0,i.lx)();if(!e)return r.nc.getState().logout(),null;if(Date.now()>=e.expiresAt-6e4&&e.refreshToken){let t=await (0,o.dW)();t&&(e=t)}return Date.now()>=e.expiresAt&&!e.refreshToken?(r.nc.getState().logout(),null):(s(e),r.nc.getState().accessToken)}},69899:(e,t,n)=>{n.d(t,{Bc:()=>o,ZI:()=>c,k$:()=>l,m_:()=>s});var r=n(4208);n(91356);var a=n(21729),i=n(58113);function o({delayDuration:e=0,...t}){return(0,r.jsx)(a.Kq,{"data-slot":"tooltip-provider",delayDuration:e,...t})}function s({...e}){return(0,r.jsx)(a.bL,{"data-slot":"tooltip",...e})}function l({...e}){return(0,r.jsx)(a.l9,{"data-slot":"tooltip-trigger",...e})}function c({className:e,sideOffset:t=0,children:n,...o}){return(0,r.jsx)(a.ZL,{children:(0,r.jsxs)(a.UC,{"data-slot":"tooltip-content",sideOffset:t,className:(0,i.cn)("border border-border bg-popover text-popover-foreground shadow-md animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-fit origin-(--radix-tooltip-content-transform-origin) rounded-md px-3 py-1.5 text-xs text-balance",e),...o,children:[n,(0,r.jsx)(a.i3,{className:"fill-popover z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px]"})]})})}},72858:(e,t,n)=>{n.d(t,{A:()=>l});var r=n(86227),a=n(41567),i=n(81887),o=n(68917);let s=null;async function l(){return s||(s=(async()=>{if((0,i.B8)())return(0,o.P)();let e=await (0,a.fd)();return e&&(0,a.Pr)(e)?r.nc.getState().accessToken:(r.nc.getState().logout(),null)})().finally(()=>{s=null})),s}},81647:(e,t,n)=>{n.d(t,{Z:()=>a,i:()=>i});var r=n(81893);function a(e=document.documentElement){delete e.dataset.mailBackground,e.style.removeProperty("--mail-bg-layer"),e.style.removeProperty("--mail-bg-fallback")}function i(e,t=document.documentElement){let n=(0,r.y9)(e),{background:o,fallbackColor:s}=(0,r.Pu)(n);"none"===n||"none"===o?a(t):(t.dataset.mailBackground=n,t.style.setProperty("--mail-bg-layer",o),t.style.setProperty("--mail-bg-fallback",s))}},81887:(e,t,n)=>{n.d(t,{B8:()=>c,O5:()=>s,fk:()=>a,hF:()=>i,ju:()=>r,oX:()=>l,zf:()=>o});let r=!0,a="mail";function i(e=a){return`ulti${e}`}function o(e=a){switch(e){case"mail":default:return"/mail";case"drive":return"/drive";case"agenda":return"/agenda";case"meet":return"/meet";case"chat":return"/chat";case"contacts":return"/contacts"}}function s(e){let t=e.split("?")[0];return t.startsWith("/mail")?"mail":t.startsWith("/drive")?"drive":t.startsWith("/agenda")||t.startsWith("/meet")?"agenda":t.startsWith("/chat")?"chat":t.startsWith("/contacts")?"contacts":null}function l(){return"__TAURI_INTERNALS__"in window||"__TAURI__"in window||!0===window.isTauri}function c(){return r||l()}},81893:(e,t,n)=>{n.d(t,{Pu:()=>o,UT:()=>a,y9:()=>i});let r={mountains:"photo-mountains",ocean:"gradient-ocean",forest:"photo-nature",abstract:"gradient-blossom"},a=[{id:"none",label:"Aucun",background:"none",fallbackColor:"var(--app-canvas)"},{id:"gradient-aurora",label:"Aurore",background:'url("/mail-backgrounds/gradient-aurora.svg") center / cover no-repeat',fallbackColor:"#667eea"},{id:"gradient-sunset",label:"Coucher de soleil",background:'url("/mail-backgrounds/gradient-sunset.svg") center / cover no-repeat',fallbackColor:"#e44d26"},{id:"gradient-ocean",label:"Oc\xe9an",background:'url("/mail-backgrounds/gradient-ocean.svg") center / cover no-repeat',fallbackColor:"#203a43"},{id:"gradient-blossom",label:"Floral",background:'url("/mail-backgrounds/gradient-blossom.svg") center / cover no-repeat',fallbackColor:"#ffecd2"},{id:"photo-mountains",label:"Montagnes",background:'url("https://picsum.photos/seed/ultimail-mountains/1920/1080") center / cover no-repeat',fallbackColor:"#5c6b73"},{id:"photo-ocean",label:"Mer",background:'url("https://picsum.photos/seed/ultimail-ocean/1920/1080") center / cover no-repeat',fallbackColor:"#1a5276"},{id:"photo-city",label:"Ville",background:'url("https://picsum.photos/seed/ultimail-city/1920/1080") center / cover no-repeat',fallbackColor:"#2c3e50"},{id:"photo-nature",label:"Nature",background:'url("https://picsum.photos/seed/ultimail-nature/1920/1080") center / cover no-repeat',fallbackColor:"#2d5016"}];function i(e){return a.some(t=>t.id===e)?e:r[e]??"none"}function o(e){let t,n=(t=i(e),a.find(e=>e.id===t)??a[0]);return{background:n.background,fallbackColor:n.fallbackColor}}},83833:(e,t,n)=>{n.d(t,{C:()=>c});var r=n(91356),a=n(19984),i=n(17996),o=n(81647),s=n(9483),l=n(52590);function c(){let e=(0,a.usePathname)(),t=(0,l.x)(e=>e.themeMode),n=(0,s.p)(e=>e.themeMode),c="/demo"===e||e?.startsWith("/demo/")===!0?n:t,u=(0,l.x)(e=>e.backgroundId),{theme:d,setTheme:f}=(0,i.D)();return(0,r.useEffect)(()=>{d&&d!==c&&f(c)},[c,d,f]),(0,r.useEffect)(()=>"/mail"===e||e.startsWith("/mail/")||"/demo/mail"===e||e.startsWith("/demo/mail/")?((0,o.i)(u),()=>(0,o.Z)()):void(0,o.Z)(),[u,e]),null}},86227:(e,t,n)=>{n.d(t,{Ht:()=>s,IQ:()=>l,nc:()=>c});var r=n(46298),a=n(22029),i=n(91025),o=n(49677);let s="ulti-auth",l=["ultimail-auth","ultidrive-auth"];!function(){try{if(localStorage.getItem(s))return;for(let e of l){let t=localStorage.getItem(e);if(t)return void localStorage.setItem(s,t)}}catch{}}();let c=(0,r.v)()((0,a.Zr)((e,t)=>({accessToken:null,refreshToken:null,expiresAt:null,user:null,login:(t,n,r,a=null)=>{e({accessToken:t,refreshToken:n,expiresAt:r,user:a}),o.w.getState().clear()},logout:()=>{e({accessToken:null,refreshToken:null,expiresAt:null,user:null});try{for(let e of(localStorage.removeItem(s),l))localStorage.removeItem(e)}catch{}},isAuthenticated:()=>{let{accessToken:e,expiresAt:n,refreshToken:r}=t();return!!e&&(!!(n&&Date.now(){let t=e.state;return t&&(t.accessToken=null,t.refreshToken=null,t.expiresAt=null),e},partialize:e=>({user:e.user})}))},91025:(e,t,n)=>{n.d(t,{$:()=>o});var r=n(22029);function a(){let e=new Map;return{getItem:t=>e.get(t)??null,setItem:(t,n)=>{e.set(t,n)},removeItem:t=>{e.delete(t)}}}function i(){try{return window.localStorage}catch{return a()}}let o=function(){let e=(0,r.KU)(i)??(0,r.KU)(()=>a());if(!e)throw Error("[debounced-json-storage] failed to create JSON storage");let t=new Map,n=new Map,o=r=>{let a=n.get(r);void 0!==a&&(globalThis.clearTimeout(a),n.delete(r));let i=t.get(r);void 0!==i&&(t.delete(r),e.setItem(r,i))},s=()=>{for(let e of[...t.keys()])o(e)};return window.addEventListener("beforeunload",s),window.addEventListener("pagehide",s),{getItem:t=>e.getItem(t),setItem:(e,r)=>{t.set(e,r);let a=n.get(e);void 0!==a&&globalThis.clearTimeout(a);let i=globalThis.setTimeout(()=>{n.delete(e),o(e)},220);n.set(e,i)},removeItem:r=>{let a=n.get(r);return void 0!==a&&(globalThis.clearTimeout(a),n.delete(r)),t.delete(r),e.removeItem(r)}}}()},94927:(e,t,n)=>{n.d(t,{UQ:()=>h,M_:()=>p,uE:()=>v});var r=n(72858),a=n(86227),i=n(41567),o=n(49677),s=n(43351);let l=null;function c(){return(0,s.m)(window.location.pathname)}function u(){c()||(a.nc.getState().logout(),o.w.getState().setExpired())}async function d(e){if(c())return"refreshed";if((0,o.a)())return"expired";if(e?.forceExpired)return u(),"expired";if("u">typeof navigator&&!navigator.onLine)return o.w.getState().setOffline(),"offline";if(await (0,i.$G)())return"refreshed";let t=await (0,i.fd)();return t?.authenticated||await (0,r.A)()?"refreshed":(u(),"expired")}function f(e){return c()?Promise.resolve("refreshed"):(0,o.a)()?Promise.resolve("expired"):e?.forceExpired?d(e):(l||(l=d().finally(()=>{l=null})),l)}var m=n(29994);class p extends Error{constructor(){super("Device is offline"),this.name="OfflineError"}}class h extends Error{constructor(e,t,n,r){super(n),this.name="ApiRequestError",this.status=e,this.code=t,this.details=r}}class g{constructor(e=m.hY){this.resolveBaseUrl=e}resolveUrl(e){let t=this.resolveBaseUrl(),n=t.startsWith("http")?t:`${window.location.origin}${t}`,r=n.endsWith("/")?n:`${n}/`;return new URL(e.startsWith("/")?e.slice(1):e,r)}async getHeaders(){let e={"Content-Type":"application/json"},t=await (0,r.A)();return t&&(e.Authorization=`Bearer ${t}`),e}async request(e,t,n){if("u">typeof navigator&&!navigator.onLine)throw new p;let r=this.resolveUrl(t);if(n?.params)for(let[e,t]of Object.entries(n.params))void 0!==t&&r.searchParams.set(e,t);let a=n?.timeout??1e4,i=n?.retries??3,s=null,l=!1;for(let t=0;t<=i;t++){if(t>0){let e=1e3*Math.pow(2,t-1);await new Promise(t=>setTimeout(t,e))}let i=new AbortController,c=setTimeout(()=>i.abort(),a);try{let t=await fetch(r.toString(),{method:e,headers:{...await this.getHeaders(),...n?.headers},body:n?.body?JSON.stringify(n.body):void 0,signal:i.signal});if(clearTimeout(c),!t.ok){let e;try{e=await t.json()}catch{}let n=new h(t.status,e?.code??"UNKNOWN",e?.message??t.statusText,e?.details);if(401===t.status){if((0,o.a)())throw n;if(l)await f({forceExpired:!0});else{l=!0;let e=await f();if("refreshed"===e)continue;if("offline"===e)throw new p}}if(t.status>=400&&t.status<500)throw n;s=n;continue}if(204===t.status)return;let a=await t.text();if(!a.trim())return;return JSON.parse(a)}catch(e){if(clearTimeout(c),e instanceof h&&e.status>=400&&e.status<500)throw e;s=e instanceof Error?e:Error(String(e)),e instanceof DOMException&&"AbortError"===e.name&&(s=Error("Request timed out"))}}throw s??Error("Request failed")}async get(e,t){return this.request("GET",e,{params:t})}async getBlob(e,t=!1){if("u">typeof navigator&&!navigator.onLine)throw new p;let n=this.resolveUrl(e),a={},i=await (0,r.A)();i&&(a.Authorization=`Bearer ${i}`);let s=await fetch(n.toString(),{method:"GET",headers:a});if(!s.ok){if(401===s.status){if((0,o.a)())throw new h(s.status,"UNKNOWN",s.statusText);if(t)await f({forceExpired:!0});else{let t=await f();if("refreshed"===t)return this.getBlob(e,!0);if("offline"===t)throw new p}}throw new h(s.status,"UNKNOWN",s.statusText)}return s.blob()}async post(e,t){return this.request("POST",e,{body:t})}async put(e,t,n){return this.request("PUT",e,{body:t,headers:n})}async patch(e,t){return this.request("PATCH",e,{body:t})}async delete(e){await this.request("DELETE",e)}}let v=new g},95291:(e,t,n)=>{n.d(t,{u:()=>c});var r=n(4208),a=n(35855),i=n.n(a),o=n(40505),s=n(26938),l=n(58113);function c({quota:e,compact:t=!1,className:n}){let a=(0,o.zT)(e),u=e.warn_threshold_pct||80,d=null!=a&&a>=u;if(!e.billing_scope_org){let a=(e.by_provider_keys??[]).reduce((e,t)=>e+t.cost_month_micro_eur,e.cost_used_month_micro_eur);return(0,r.jsxs)("div",{className:(0,l.cn)("space-y-1",n),children:[(0,r.jsxs)("div",{className:"flex items-center justify-between gap-2 text-xs text-muted-foreground",children:[(0,r.jsx)("span",{children:"Cl\xe9 personnelle"}),(0,r.jsxs)("span",{className:"tabular-nums",children:[(0,o.tR)(a)," / mois"]})]}),!t&&(e.by_provider_keys?.length??0)>0?(0,r.jsx)("div",{className:"space-y-0.5 pl-2 text-[10px] text-muted-foreground",children:e.by_provider_keys.slice(0,3).map(e=>(0,r.jsxs)("div",{className:"flex justify-between gap-2",children:[(0,r.jsx)("span",{className:"truncate",children:e.label}),(0,r.jsx)("span",{className:"tabular-nums shrink-0",children:(0,o.tR)(e.cost_month_micro_eur)})]},e.fingerprint))}):null]})}return(0,r.jsxs)("div",{className:(0,l.cn)("space-y-1",n),children:[(0,r.jsxs)("div",{className:"flex items-center justify-between gap-2 text-xs text-muted-foreground",children:[(0,r.jsxs)("span",{className:(0,l.cn)(d&&"text-amber-600 dark:text-amber-400"),children:["IA ",d?"\xb7 proche du plafond":""]}),(0,r.jsxs)("span",{className:"tabular-nums",children:[(0,o.tR)(e.cost_used_month_micro_eur),e.cost_limit_month_micro_eur?` / ${(0,o.tR)(e.cost_limit_month_micro_eur)}`:""]})]}),null!=a?(0,r.jsx)("div",{className:"h-1.5 overflow-hidden rounded-full bg-muted",children:(0,r.jsx)("div",{className:(0,l.cn)("h-full rounded-full transition-all",d?"bg-amber-500":"bg-primary"),style:{width:`${a}%`}})}):null,t?null:(0,r.jsx)(i(),{href:`${s.qH}/usage-ia`,className:"text-[10px] text-muted-foreground underline-offset-2 hover:underline",children:"D\xe9tail de consommation"})]})}},98565:(e,t,n)=>{n.d(t,{BK:()=>s,eu:()=>o,q5:()=>l});var r=n(4208);n(91356);var a=n(72401),i=n(58113);function o({className:e,...t}){return(0,r.jsx)(a.bL,{"data-slot":"avatar",className:(0,i.cn)("relative flex size-8 shrink-0 overflow-hidden rounded-full",e),...t})}function s({className:e,...t}){return(0,r.jsx)(a._V,{"data-slot":"avatar-image",className:(0,i.cn)("aspect-square size-full",e),...t})}function l({className:e,...t}){return(0,r.jsx)(a.H4,{"data-slot":"avatar-fallback",className:(0,i.cn)("bg-muted flex size-full items-center justify-center rounded-full",e),...t})}}}]);