@plumix/admin 0.1.3 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/assets/{-errors-B7tAsyM0.js → -errors-DymGkXzf.js} +1 -1
- package/dist/assets/{-locale-param-XM9QLmJ5.js → -locale-param-BBOzOc5c.js} +1 -1
- package/dist/assets/{_-o9O44bb8.js → _-DbGPlcLC.js} +1 -1
- package/dist/assets/{_authenticated-X8_ZzeVN.js → _authenticated-CxUnTydB.js} +1 -1
- package/dist/assets/{_authenticated-BZbICTCy.js → _authenticated-DbZWnirz.js} +1 -1
- package/dist/assets/{_name-CsTxHact.js → _name-BWrqcSjK.js} +1 -1
- package/dist/assets/{_page-CAfqCxMM.js → _page-BMWM_crl.js} +1 -1
- package/dist/assets/{_page-Jgddg0I9.js → _page-ClAHWpJA.js} +1 -1
- package/dist/assets/{_slug-CrB5RfaF.js → _slug-BGJ2I-cS.js} +1 -1
- package/dist/assets/{_token-9qw8O07B.js → _token-BDyoqyFe.js} +1 -1
- package/dist/assets/{allowed-domains-BD1FIWo8.js → allowed-domains-DIQ_LoVq.js} +1 -1
- package/dist/assets/{bootstrap-BjA3jejx.js → bootstrap-D1ITzrPN.js} +1 -1
- package/dist/assets/{breadcrumb-kPG_yvD8.js → breadcrumb-B-sB8a4_.js} +1 -1
- package/dist/assets/{create-CbIyckzX.js → create-BFQqxGF6.js} +1 -1
- package/dist/assets/{create-XNWvL9l5.js → create-BrPyaUMW.js} +1 -1
- package/dist/assets/{create-c0dH9rwJ.js → create-DwlFRgkL.js} +1 -1
- package/dist/assets/{device-CDHXIM5L.js → device-DedwLhBj.js} +1 -1
- package/dist/assets/{edit-Q_Ag31Id.js → edit-Ba0VjKvg.js} +1 -1
- package/dist/assets/{edit-Cs_d9ypU.js → edit-BdagVECm.js} +1 -1
- package/dist/assets/{edit-tkHAT4Yi.js → edit-BgcIFZzf.js} +1 -1
- package/dist/assets/{edit-BDJmvbS1.js → edit-CLa1IU8I.js} +1 -1
- package/dist/assets/{edit-okoLRzq-.js → edit-CteELL-K.js} +2 -2
- package/dist/assets/{edit-D16wc7LS.js → edit-DiaJf7-W.js} +1 -1
- package/dist/assets/{index-kTp--tHG.js → index-Ctqj4aiM.js} +2 -2
- package/dist/assets/{login-DZOKYIF-.js → login-epTUDW_0.js} +1 -1
- package/dist/assets/{mailer-Dyww1jwK.js → mailer-HpDxW8FX.js} +1 -1
- package/dist/assets/{meta-box-D-8lfuwU.js → meta-box-Dd1vNvwM.js} +1 -1
- package/dist/assets/{meta-box-field-r9w3rM8k.js → meta-box-field-C4Orbu3m.js} +1 -1
- package/dist/assets/{meta-box-grid-Dr2ygaxj.js → meta-box-grid-BfWeRDWA.js} +1 -1
- package/dist/assets/{plugin-error-boundary-cYpGGruP.js → plugin-error-boundary-DSHOAgQB.js} +1 -1
- package/dist/assets/{rich-text-field-B4Til-yn.js → rich-text-field-KC3ZBBIm.js} +1 -1
- package/dist/assets/{search-input-BDIFOLpj.js → search-input-J0-6kfsf.js} +1 -1
- package/dist/assets/{settings-Bi5BNc6-.js → settings-CkVoTIwd.js} +1 -1
- package/dist/assets/{toast-COG8MRHM.js → toast-p1K24g-U.js} +1 -1
- package/dist/assets/{use-formatters-ww2p-9js.js → use-formatters-Bq4u-MkS.js} +1 -1
- package/dist/assets/{users-CICoUBVu.js → users-S1uN00sD.js} +1 -1
- package/dist/assets/{utils-DkCVtsc2.js → utils-ByiwTMhM.js} +1 -1
- package/dist/index.html +1 -1
- package/package.json +6 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
import{i as e,t}from"./jsx-runtime-DUAcabCT.js";import{t as n}from"./react-DbyrFoBd.js";import{i as r,n as i}from"./dist-BL2bKHuR.js";import{d as a,f as o,h as s,t as c,u as l}from"./orpc-DURDArDu.js";import{l as u,u as d}from"./esm-DfD3iRfG.js";import{t as f}from"./createLucideIcon-C0O-yxZG.js";import{t as p}from"./arrow-left-CWzmtp8T.js";import{n as m,r as h,t as g}from"./textarea-BsZaGkV-.js";import{n as _,t as v}from"./clipboard-D6ZMYUE8.js";import{B as y,F as ee,I as te,L as b,N as x,O as ne,P as re,R as ie,V as ae,X as oe,c as se,d as ce,f as le,k as ue,l as de,s as fe,u as pe,z as me}from"./utils-DkCVtsc2.js";import{n as he,r as ge,t as _e}from"./tablet-BnclzXSX.js";import{t as S}from"./use-label-CykSHq9A.js";import{D as ve,T as ye,b as be,d as xe,h as Se,k as Ce,l as we,r as Te,v as Ee,w as De,y as Oe}from"./dist-ClOzYsk5.js";import{o as ke}from"./validation-CwFumc7a.js";import{t as Ae}from"./use-formatters-ww2p-9js.js";import{a as je,i as C,n as w,r as Me,t as Ne}from"./card-L2-kK5VK.js";import{At as Pe,B as Fe,F as Ie,Ft as Le,I as Re,L as ze,M as Be,N as Ve,Nt as He,Ot as Ue,P as We,Pt as T,R as Ge,Tt as Ke,V as qe,_ as Je,at as Ye,ft as Xe,j as Ze,jt as Qe,pt as $e,v as et,z as tt}from"./index-kTp--tHG.js";import{t as nt}from"./input-xYuLUQID.js";import{a as rt,n as it}from"./passkey-C_CqNV1S.js";import{a as at,c as ot,f as st,i as ct,n as lt,o as ut,p as dt,s as ft,t as pt}from"./form-C94uy6_t.js";import{n as E,t as D}from"./alert-cwX3fWUu.js";import{t as mt}from"./valibot-DKJGiWCI.js";import{n as ht,t as gt}from"./orpc-errors-DWk96ZMY.js";import{t as _t}from"./scopes-C_7AiPdH.js";import{t as vt}from"./dates-CSmOj6E-.js";import{t as yt}from"./meta-box-D-8lfuwU.js";var bt=f(`globe`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20`,key:`13o1zl`}],[`path`,{d:`M2 12h20`,key:`9i4pu4`}]]),xt=f(`tv`,[[`path`,{d:`m17 2-5 5-5-5`,key:`16satq`}],[`rect`,{width:`20`,height:`15`,x:`2`,y:`7`,rx:`2`,key:`1e6viu`}]]),St=f(`watch`,[[`path`,{d:`M12 10v2.2l1.6 1`,key:`n3r21l`}],[`path`,{d:`m16.13 7.66-.81-4.05a2 2 0 0 0-2-1.61h-2.68a2 2 0 0 0-2 1.61l-.78 4.05`,key:`18k57s`}],[`path`,{d:`m7.88 16.36.8 4a2 2 0 0 0 2 1.61h2.72a2 2 0 0 0 2-1.61l.81-4.05`,key:`16ny36`}],[`circle`,{cx:`12`,cy:`12`,r:`6`,key:`1vlfrh`}]]),O=e(n(),1),k=e(t(),1),A={nameRequired:{id:`apiTokens.create.nameRequired`},nameTooLong:{id:`apiTokens.create.nameTooLong`},expires7:{id:`apiTokens.expiry.7`},expires30:{id:`apiTokens.expiry.30`},expires90:{id:`apiTokens.expiry.90`},expiresNever:{id:`apiTokens.expiry.never`},mintFallback:{id:`apiTokens.mint.fallback`},revokeFallback:{id:`apiTokens.revoke.fallback`},namePlaceholder:{id:`apiTokens.create.namePlaceholder`},copyAria:{id:`apiTokens.secret.copyAria`},capabilitiesPlaceholder:{id:`apiTokens.create.capabilities.placeholder`}},Ct=Se({name:Oe(De(),ve(),xe(1,ke(A.nameRequired)),we(64,ke(A.nameTooLong))),expires:Ee([`7`,`30`,`90`,`never`]),scopeMode:Ee([`inherit`,`restrict`]),scopesText:Oe(De(),we(4096))}),wt={7:A.expires7,30:A.expires30,90:A.expires90,never:A.expiresNever},Tt={7:7,30:30,90:90,never:null};function Et(){let e=s(),t=o(c.auth.apiTokens.list.queryOptions({input:{}})),n=l({mutationFn:e=>c.auth.apiTokens.create.call({name:e.name,expiresInDays:e.expiresInDays,scopes:e.scopes===null?null:[...e.scopes]}),onSuccess:()=>e.invalidateQueries({queryKey:c.auth.apiTokens.list.key()})}),r=l({mutationFn:e=>c.auth.apiTokens.revoke.call({id:e}),onSuccess:()=>e.invalidateQueries({queryKey:c.auth.apiTokens.list.key()})});return(0,k.jsx)(Ot,{mode:`self`,tokens:t.data??[],isLoading:t.isLoading,onMint:(e,t)=>n.mutate(e,t),mintPending:n.isPending,onRevoke:(e,t)=>r.mutate(e,t),revokePending:r.isPending})}function Dt({userId:e}){let t=s(),n=o(c.auth.apiTokens.adminList.queryOptions({input:{userId:e}})),r=l({mutationFn:e=>c.auth.apiTokens.adminRevoke.call({id:e}),onSuccess:()=>t.invalidateQueries({queryKey:c.auth.apiTokens.adminList.key()})});return(0,k.jsx)(Ot,{mode:`admin`,tokens:n.data?.items??[],isLoading:n.isLoading,onRevoke:(e,t)=>r.mutate(e,t),revokePending:r.isPending})}function Ot({mode:e,tokens:t,isLoading:n,onMint:r,mintPending:a=!1,onRevoke:o,revokePending:s}){let c=S(),[l,u]=(0,O.useState)(null),[d,f]=(0,O.useState)(null),[p,m]=(0,O.useState)(null),[h,g]=(0,O.useState)(null),_=(0,k.jsx)(`bdi`,{children:p?.name??``});return(0,k.jsxs)(Ne,{"data-testid":`api-tokens-card`,children:[(0,k.jsxs)(C,{children:[(0,k.jsx)(je,{children:(0,k.jsx)(i,{id:`apiTokens.title`,message:`API tokens`})}),(0,k.jsx)(Me,{children:e===`self`?(0,k.jsx)(i,{id:`apiTokens.description.self`,message:`Personal access tokens for CLIs, MCP servers, CI bots, or any other non-browser client. The full secret is shown once at mint time.`}):(0,k.jsx)(i,{id:`apiTokens.description.admin`,message:`Tokens minted by this user. You can revoke any of them — minting requires the owner's authenticated browser session.`})})]}),(0,k.jsxs)(w,{className:`flex flex-col gap-6`,children:[r?(0,k.jsx)(kt,{onSubmit:e=>{f(null);let t=e.scopeMode===`inherit`?null:_t(e.scopesText);r({name:e.name,expiresInDays:Tt[e.expires],scopes:t},{onSuccess:e=>{u({secret:e.secret,name:e.token.name})},onError:e=>{f(e instanceof Error?e.message:A.mintFallback)}})},pending:a,error:d}):null,n?(0,k.jsx)(`p`,{className:`text-muted-foreground text-sm`,"data-testid":`api-tokens-loading`,children:(0,k.jsx)(i,{id:`apiTokens.loading`,message:`Loading tokens…`})}):t.length===0?(0,k.jsx)(Ue,{"data-testid":`api-tokens-empty`,children:(0,k.jsxs)(Qe,{children:[(0,k.jsx)(He,{children:(0,k.jsx)(i,{id:`apiTokens.empty.title`,message:`No tokens yet`})}),(0,k.jsx)(Pe,{children:e===`self`?(0,k.jsx)(i,{id:`apiTokens.empty.description.self`,message:`Mint one above for your CLI / MCP server / CI bot.`}):(0,k.jsx)(i,{id:`apiTokens.empty.description.admin`,message:`This user hasn't minted any API tokens.`})})]})}):(0,k.jsxs)(fe,{"data-testid":`api-tokens-table`,children:[(0,k.jsx)(ce,{children:(0,k.jsxs)(le,{children:[(0,k.jsx)(pe,{children:(0,k.jsx)(i,{id:`apiTokens.col.name`,message:`Name`})}),(0,k.jsx)(pe,{children:(0,k.jsx)(i,{id:`apiTokens.col.prefix`,message:`Prefix`})}),(0,k.jsx)(pe,{children:(0,k.jsx)(i,{id:`apiTokens.col.scopes`,message:`Scopes`})}),(0,k.jsx)(pe,{children:(0,k.jsx)(i,{id:`apiTokens.col.lastUsed`,message:`Last used`})}),(0,k.jsx)(pe,{children:(0,k.jsx)(i,{id:`apiTokens.col.expires`,message:`Expires`})}),(0,k.jsx)(pe,{className:`w-[1%] text-end`,children:(0,k.jsx)(i,{id:`apiTokens.col.actions`,message:`Actions`})})]})}),(0,k.jsx)(se,{children:t.map(e=>(0,k.jsxs)(le,{"data-testid":`api-tokens-row-${e.id}`,children:[(0,k.jsx)(de,{children:(0,k.jsx)(`span`,{className:`font-medium`,children:e.name})}),(0,k.jsx)(de,{children:(0,k.jsxs)(`code`,{className:`text-muted-foreground font-mono text-xs`,children:[e.prefix,`…`]})}),(0,k.jsx)(de,{children:(0,k.jsx)(Mt,{scopes:e.scopes})}),(0,k.jsx)(de,{className:`text-muted-foreground text-sm`,children:(0,k.jsx)(jt,{when:e.lastUsedAt})}),(0,k.jsx)(de,{className:`text-muted-foreground text-sm`,children:(0,k.jsx)(jt,{when:e.expiresAt})}),(0,k.jsx)(de,{className:`text-end`,children:(0,k.jsx)(T,{variant:`ghost`,size:`sm`,onClick:()=>m({id:e.id,name:e.name}),"data-testid":`api-tokens-revoke-${e.id}`,children:(0,k.jsx)(i,{id:`apiTokens.revoke.button`,message:`Revoke`})})})]},e.id))})]})]}),(0,k.jsx)(At,{secret:l?.secret??null,name:l?.name??``,onClose:()=>u(null)}),(0,k.jsx)(re,{open:p!==null,onOpenChange:e=>{e||(m(null),g(null))},children:(0,k.jsxs)(b,{children:[(0,k.jsxs)(y,{children:[(0,k.jsx)(ae,{children:(0,k.jsx)(i,{id:`apiTokens.revoke.title`,message:`Revoke "{name}"?`,values:{name:_},comment:`name: the user-chosen token nickname (e.g. 'CI deploy key')`})}),(0,k.jsx)(ie,{children:(0,k.jsx)(i,{id:`apiTokens.revoke.description`,message:`The token stops working immediately. Any client using it will start getting 401s on the next request.`})})]}),h?(0,k.jsx)(D,{variant:`destructive`,"data-testid":`api-tokens-revoke-error`,children:(0,k.jsx)(E,{children:c(h)})}):null,(0,k.jsxs)(me,{children:[(0,k.jsx)(te,{disabled:s,children:(0,k.jsx)(i,{id:`apiTokens.revoke.cancel`,message:`Cancel`})}),(0,k.jsx)(ee,{"data-testid":`api-tokens-revoke-confirm-button`,disabled:s,className:Le({variant:`destructive`}),onClick:e=>{e.preventDefault(),p&&(g(null),o(p.id,{onSuccess:()=>m(null),onError:e=>{g(e instanceof Error?e.message:A.revokeFallback)}}))},children:s?(0,k.jsx)(i,{id:`apiTokens.revoke.pending`,message:`Revoking…`}):(0,k.jsx)(i,{id:`apiTokens.revoke.confirm`,message:`Revoke`})})]})]})})]})}function kt({onSubmit:e,pending:t,error:n}){let r=S(),a=st({resolver:mt(Ct),defaultValues:{name:``,expires:`90`,scopeMode:`inherit`,scopesText:``},mode:`onBlur`}),o=dt({control:a.control,name:`scopeMode`});return(0,k.jsx)(pt,{...a,children:(0,k.jsxs)(`form`,{className:`flex flex-col gap-4 border-b pb-6`,onSubmit:a.handleSubmit(t=>{e(t),a.reset()}),children:[(0,k.jsx)(ct,{control:a.control,name:`name`,render:({field:e})=>(0,k.jsxs)(at,{children:[(0,k.jsx)(ut,{children:(0,k.jsx)(i,{id:`apiTokens.create.name`,message:`Name`})}),(0,k.jsx)(lt,{children:(0,k.jsx)(nt,{placeholder:r(A.namePlaceholder),disabled:t,"data-testid":`api-tokens-create-name-input`,...e})}),(0,k.jsx)(ft,{})]})}),(0,k.jsx)(ct,{control:a.control,name:`expires`,render:({field:e})=>(0,k.jsxs)(at,{children:[(0,k.jsx)(ut,{children:(0,k.jsx)(i,{id:`apiTokens.create.expires`,message:`Expires`})}),(0,k.jsxs)(We,{value:e.value,onValueChange:e.onChange,disabled:t,children:[(0,k.jsx)(lt,{children:(0,k.jsx)(ze,{className:`w-full`,onBlur:e.onBlur,"data-testid":`api-tokens-create-expires-select`,children:(0,k.jsx)(Ge,{})})}),(0,k.jsx)(Ie,{children:Object.keys(wt).map(e=>(0,k.jsx)(Re,{value:e,children:r(wt[e])},e))})]}),(0,k.jsx)(ft,{})]})}),(0,k.jsx)(ct,{control:a.control,name:`scopeMode`,render:({field:e})=>(0,k.jsxs)(at,{children:[(0,k.jsx)(ut,{id:`api-token-scope-label`,children:(0,k.jsx)(i,{id:`apiTokens.create.permissions`,message:`Permissions`})}),(0,k.jsx)(lt,{children:(0,k.jsxs)(m,{value:e.value,onValueChange:e.onChange,"aria-labelledby":`api-token-scope-label`,className:`gap-2`,children:[(0,k.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,k.jsx)(h,{value:`inherit`,id:`api-token-scope-inherit`,disabled:t,"data-testid":`api-tokens-create-scope-inherit-radio`}),(0,k.jsx)(ot,{htmlFor:`api-token-scope-inherit`,className:`font-normal`,children:(0,k.jsx)(i,{id:`apiTokens.create.scope.inherit`,message:`Inherit all your permissions`})})]}),(0,k.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,k.jsx)(h,{value:`restrict`,id:`api-token-scope-restrict`,disabled:t,"data-testid":`api-tokens-create-scope-restrict-radio`}),(0,k.jsx)(ot,{htmlFor:`api-token-scope-restrict`,className:`font-normal`,children:(0,k.jsx)(i,{id:`apiTokens.create.scope.restrict`,message:`Restrict to specific capabilities`})})]})]})}),(0,k.jsx)(ft,{})]})}),o===`restrict`?(0,k.jsx)(ct,{control:a.control,name:`scopesText`,render:({field:e})=>(0,k.jsxs)(at,{children:[(0,k.jsx)(ut,{children:(0,k.jsx)(i,{id:`apiTokens.create.capabilities`,message:`Capabilities`})}),(0,k.jsx)(lt,{children:(0,k.jsx)(g,{rows:4,placeholder:r(A.capabilitiesPlaceholder),disabled:t,"data-testid":`api-tokens-create-scopes-textarea`,className:`font-mono`,...e})}),(0,k.jsx)(`p`,{className:`text-muted-foreground text-xs`,children:(0,k.jsx)(i,{id:`apiTokens.create.capabilities.help`,message:`One capability per line. The token can never exceed the caps your role grants — this is an additional narrowing.`})}),(0,k.jsx)(ft,{})]})}):null,n?(0,k.jsx)(D,{variant:`destructive`,"data-testid":`api-tokens-create-error`,children:(0,k.jsx)(E,{children:r(n)})}):null,(0,k.jsx)(`div`,{className:`flex justify-end`,children:(0,k.jsxs)(T,{type:`submit`,disabled:t,"data-testid":`api-tokens-create-submit`,children:[(0,k.jsx)(oe,{className:`size-4`}),t?(0,k.jsx)(i,{id:`apiTokens.create.submit.pending`,message:`Minting…`}):(0,k.jsx)(i,{id:`apiTokens.create.submit.idle`,message:`Mint token`})]})})]})})}function At({secret:e,name:t,onClose:n}){let r=S(),[a,o]=(0,O.useState)(!1),s=async()=>{if(e)try{await v(e),o(!0),setTimeout(()=>o(!1),2e3)}catch{let e=document.getElementById(`api-tokens-secret-input`);e instanceof HTMLInputElement&&(e.focus(),e.select())}};return(0,k.jsx)(re,{open:e!==null,onOpenChange:e=>{e||(o(!1),n())},children:(0,k.jsxs)(b,{"data-testid":`api-tokens-secret-dialog`,children:[(0,k.jsxs)(y,{children:[(0,k.jsx)(ae,{children:(0,k.jsx)(i,{id:`apiTokens.secret.title`,message:`Token "{name}" minted`,values:{name:(0,k.jsx)(`bdi`,{children:t})},comment:`name: the user-chosen token nickname (e.g. 'CI deploy key')`})}),(0,k.jsx)(ie,{children:(0,k.jsx)(i,{id:`apiTokens.secret.description`,message:`Copy the secret now. We won't show it again — losing it means revoking and re-minting.`})})]}),(0,k.jsxs)(`div`,{className:`flex gap-2`,children:[(0,k.jsx)(nt,{id:`api-tokens-secret-input`,readOnly:!0,value:e??``,onFocus:e=>e.currentTarget.select(),"data-testid":`api-tokens-secret-input`,className:`bg-muted text-muted-foreground font-mono`}),(0,k.jsx)(T,{type:`button`,variant:`outline`,onClick:()=>{s()},"data-testid":`api-tokens-secret-copy-button`,"aria-label":r(A.copyAria),children:a?(0,k.jsx)(Ke,{className:`size-4`}):(0,k.jsx)(_,{className:`size-4`})})]}),(0,k.jsx)(me,{children:(0,k.jsx)(ee,{onClick:n,"data-testid":`api-tokens-secret-done-button`,children:(0,k.jsx)(i,{id:`apiTokens.secret.done`,message:`Done`})})})]})})}function jt({when:e}){let{formatRelative:t}=Ae();return e===null?(0,k.jsx)(i,{id:`apiTokens.never`,message:`Never`}):(0,k.jsx)(k.Fragment,{children:t(vt(e))})}function Mt({scopes:e}){return e===null?(0,k.jsx)(x,{variant:`outline`,"data-testid":`api-tokens-scope-inherit`,children:(0,k.jsx)(i,{id:`apiTokens.scope.inheritRole`,message:`Inherit role`})}):e.length===0?(0,k.jsx)(x,{variant:`outline`,"data-testid":`api-tokens-scope-empty`,children:(0,k.jsx)(i,{id:`apiTokens.scope.empty`,message:`No caps`})}):(0,k.jsx)(`div`,{className:`flex flex-wrap gap-1`,children:e.map(e=>(0,k.jsx)(x,{variant:`secondary`,"data-testid":`api-tokens-scope-${e}`,children:e},e))})}function Nt({currentCode:e,manifest:t,onSelect:n}){let{i18n:i}=r(),a=t.i18n?.locales??[];return(0,k.jsxs)(We,{value:e,onValueChange:n,children:[(0,k.jsx)(ze,{"data-testid":`locale-switcher-trigger`,"aria-label":i._(`profile.language.aria`,void 0,{message:`Language`}),children:(0,k.jsx)(Ge,{})}),(0,k.jsx)(Ie,{children:a.map(e=>(0,k.jsx)(Re,{value:e.code,"data-testid":`locale-switcher-option-${e.code}`,children:e.label},e.code))})]})}function Pt({userLocale:e}){let t=Ye(),n=typeof e==`string`?e:t.i18n?.defaultLocale??`en`,r=l({mutationFn:e=>c.user.setLocale.call({code:e}),onSuccess:()=>window.location.reload()});return(0,k.jsxs)(Ne,{"data-testid":`language-card`,children:[(0,k.jsxs)(C,{children:[(0,k.jsx)(je,{children:(0,k.jsx)(i,{id:`profile.language.title`,message:`Language`})}),(0,k.jsx)(Me,{children:(0,k.jsx)(i,{id:`profile.language.description`,message:`Your admin chrome renders in this language. The page reloads after you switch so the new translations apply everywhere.`})})]}),(0,k.jsxs)(w,{className:`flex flex-col gap-3`,children:[(0,k.jsx)(Nt,{currentCode:n,manifest:t,onSelect:r.mutate}),r.isError?(0,k.jsx)(D,{variant:`destructive`,children:(0,k.jsx)(E,{children:(0,k.jsx)(i,{id:`profile.language.error`,message:`Couldn't switch language. Please try again.`})})}):null]})]})}var j={unnamed:{id:`profile.passkeys.unnamed`},transportInternal:{id:`profile.passkeys.transport.internal`},transportHybrid:{id:`profile.passkeys.transport.hybrid`},transportSecurityKey:{id:`profile.passkeys.transport.securityKey`},nameEmpty:{id:`profile.passkeys.rename.nameEmpty`},notFound:{id:`profile.passkeys.notFound`},lastCredential:{id:`profile.passkeys.lastCredential`},renameFallback:{id:`profile.passkeys.rename.fallback`},deleteFallback:{id:`profile.passkeys.delete.fallback`},enrollCancelled:{id:`profile.passkeys.enroll.cancelled`},enrollAlreadyRegistered:{id:`profile.passkeys.enroll.alreadyRegistered`},enrollNoAuthenticator:{id:`profile.passkeys.enroll.noAuthenticator`},enrollNetworkError:{id:`profile.passkeys.enroll.networkError`},enrollEmailMismatch:{id:`profile.passkeys.enroll.emailMismatch`},enrollFallback:{id:`profile.passkeys.enroll.fallback`}};function Ft({userEmail:e}){let t=S(),n=s(),[r,a]=(0,O.useState)(null),u=o(c.auth.credentials.list.queryOptions({input:{}})),d=()=>n.invalidateQueries({queryKey:c.auth.credentials.list.key()}),f=l({mutationFn:()=>it({email:e}),onMutate:()=>{a(null)},onSuccess:()=>d(),onError:e=>{a(Bt(e))}});return(0,k.jsxs)(Ne,{"data-testid":`profile-passkeys-card`,children:[(0,k.jsxs)(C,{children:[(0,k.jsx)(je,{children:(0,k.jsx)(i,{id:`profile.passkeys.title`,message:`Passkeys`})}),(0,k.jsx)(Me,{children:(0,k.jsx)(i,{id:`profile.passkeys.description`,message:`Devices that can sign in to this account. Add a new one before deleting an old one — at least one passkey must remain.`})})]}),(0,k.jsxs)(w,{className:`flex flex-col gap-4`,children:[u.isPending?(0,k.jsx)(`p`,{className:`text-muted-foreground text-sm`,children:(0,k.jsx)(i,{id:`profile.passkeys.loading`,message:`Loading…`})}):u.error?(0,k.jsx)(D,{variant:`destructive`,children:(0,k.jsx)(E,{children:(0,k.jsx)(i,{id:`profile.passkeys.loadFailed`,message:`Couldn't load your passkeys. Refresh and try again.`})})}):u.data.length>0?(0,k.jsx)(`ul`,{className:`divide-border divide-y`,"data-testid":`profile-passkeys-list`,children:u.data.map(e=>(0,k.jsx)(It,{cred:e,isLast:u.data.length===1,onChanged:d},e.id))}):(0,k.jsx)(`p`,{className:`text-muted-foreground text-sm`,children:(0,k.jsx)(i,{id:`profile.passkeys.empty`,message:`No passkeys registered. Add one to enable sign-in.`})}),r?(0,k.jsx)(D,{variant:`destructive`,"data-testid":`profile-passkeys-enroll-error`,children:(0,k.jsx)(E,{children:t(r)})}):null,(0,k.jsx)(`div`,{className:`flex justify-end`,children:(0,k.jsx)(T,{type:`button`,variant:`outline`,onClick:()=>{f.mutate()},disabled:f.isPending,"data-testid":`profile-passkeys-enroll-button`,children:f.isPending?(0,k.jsx)(i,{id:`profile.passkeys.enroll.pending`,message:`Adding…`}):(0,k.jsx)(i,{id:`profile.passkeys.enroll.idle`,message:`Add passkey`})})})]})]})}function It({cred:e,isLast:t,onChanged:n}){let r=S(),{formatDate:a}=Ae(),o=vt(e.createdAt),s=vt(e.lastUsedAt),[u,d]=(0,O.useState)(!1),[f,p]=(0,O.useState)(e.name??``),[m,h]=(0,O.useState)(!1),[g,_]=(0,O.useState)(null),[v,oe]=(0,O.useState)(null),se=l({mutationFn:t=>c.auth.credentials.rename.call({id:e.id,name:t}),onMutate:()=>{_(null)},onSuccess:async()=>{d(!1),await n()},onError:e=>{_(Rt(e))}}),ce=l({mutationFn:()=>c.auth.credentials.delete.call({id:e.id}),onMutate:()=>{oe(null)},onSuccess:async()=>{h(!1),await n()},onError:e=>{oe(zt(e))}}),le=e.name??r(j.unnamed),de=Lt(e);return(0,k.jsxs)(`li`,{className:`flex flex-col gap-2 py-3`,"data-testid":`profile-passkey-row`,children:[(0,k.jsxs)(`div`,{className:`flex items-start justify-between gap-3`,children:[(0,k.jsx)(`div`,{className:`flex min-w-0 flex-1 flex-col gap-1`,children:u?(0,k.jsxs)(`form`,{className:`flex flex-col gap-2`,onSubmit:e=>{e.preventDefault();let t=f.trim();if(t.length===0){_(j.nameEmpty);return}se.mutate(t)},children:[(0,k.jsxs)(ne,{className:`gap-2`,children:[(0,k.jsx)(ue,{htmlFor:`passkey-name-${e.id}`,className:`text-muted-foreground text-xs`,children:(0,k.jsx)(i,{id:`profile.passkeys.rename.label`,message:`Rename passkey`})}),(0,k.jsx)(nt,{id:`passkey-name-${e.id}`,value:f,maxLength:64,onChange:e=>{p(e.target.value)},"data-testid":`profile-passkey-rename-input`,autoFocus:!0})]}),g?(0,k.jsx)(D,{variant:`destructive`,"data-testid":`profile-passkey-rename-error`,children:(0,k.jsx)(E,{children:r(g)})}):null,(0,k.jsxs)(`div`,{className:`flex justify-end gap-2`,children:[(0,k.jsx)(T,{type:`button`,variant:`outline`,size:`sm`,onClick:()=>{d(!1),p(e.name??``),_(null)},disabled:se.isPending,children:(0,k.jsx)(i,{id:`profile.passkeys.rename.cancel`,message:`Cancel`})}),(0,k.jsx)(T,{type:`submit`,size:`sm`,disabled:se.isPending,"data-testid":`profile-passkey-rename-submit`,children:se.isPending?(0,k.jsx)(i,{id:`profile.passkeys.rename.pending`,message:`Saving…`}):(0,k.jsx)(i,{id:`profile.passkeys.rename.save`,message:`Save`})})]})]}):(0,k.jsxs)(k.Fragment,{children:[(0,k.jsx)(`p`,{className:`text-sm font-medium`,"data-testid":`profile-passkey-name`,children:le}),(0,k.jsxs)(`div`,{className:`text-muted-foreground flex flex-wrap gap-2 text-xs`,children:[de?(0,k.jsx)(`span`,{children:r(de)}):null,e.isBackedUp?(0,k.jsx)(x,{variant:`secondary`,children:(0,k.jsx)(i,{id:`profile.passkeys.synced`,message:`Synced`})}):null,(0,k.jsx)(`span`,{children:(0,k.jsx)(i,{id:`profile.passkeys.added`,message:`Added {date}`,values:{date:a(o)},comment:`date: a locale-formatted date string`})}),s.getTime()===o.getTime()?null:(0,k.jsx)(`span`,{children:(0,k.jsx)(i,{id:`profile.passkeys.lastUsed`,message:`Last used {date}`,values:{date:a(s)},comment:`date: a locale-formatted date string`})})]})]})}),u?null:(0,k.jsxs)(`div`,{className:`flex shrink-0 gap-1`,children:[(0,k.jsx)(T,{type:`button`,variant:`ghost`,size:`sm`,onClick:()=>{d(!0),p(e.name??``)},"data-testid":`profile-passkey-rename-button`,children:(0,k.jsx)(i,{id:`profile.passkeys.rename.button`,message:`Rename`})}),(0,k.jsx)(T,{type:`button`,variant:`ghost`,size:`sm`,className:`text-destructive hover:text-destructive`,onClick:()=>{h(!0)},disabled:t,title:t?r(j.lastCredential):void 0,"data-testid":`profile-passkey-delete-button`,children:(0,k.jsx)(i,{id:`profile.passkeys.delete.button`,message:`Delete`})})]})]}),(0,k.jsx)(re,{open:m,onOpenChange:e=>{e||(h(!1),oe(null))},children:(0,k.jsxs)(b,{children:[(0,k.jsxs)(y,{children:[(0,k.jsx)(ae,{children:(0,k.jsx)(i,{id:`profile.passkeys.delete.title`,message:`Delete this passkey?`})}),(0,k.jsx)(ie,{children:(0,k.jsx)(i,{id:`profile.passkeys.delete.description`,message:`The device that registered "{name}" will no longer be able to sign in. You can re-enrol it later.`,values:{name:(0,k.jsx)(`bdi`,{children:le})},comment:`name: the user-chosen passkey nickname (e.g. 'MacBook', 'iPhone')`})})]}),v?(0,k.jsx)(D,{variant:`destructive`,"data-testid":`profile-passkey-delete-error`,children:(0,k.jsx)(E,{children:r(v)})}):null,(0,k.jsxs)(me,{children:[(0,k.jsx)(te,{disabled:ce.isPending,children:(0,k.jsx)(i,{id:`profile.passkeys.delete.cancel`,message:`Cancel`})}),(0,k.jsx)(ee,{"data-testid":`profile-passkey-delete-confirm`,className:Le({variant:`destructive`}),disabled:ce.isPending,onClick:e=>{e.preventDefault(),ce.mutate()},children:ce.isPending?(0,k.jsx)(i,{id:`profile.passkeys.delete.pending`,message:`Deleting…`}):(0,k.jsx)(i,{id:`profile.passkeys.delete.confirm`,message:`Delete passkey`})})]})]})})]})}function Lt(e){let t=e.transports;return!t||t.length===0?null:t.includes(`internal`)?j.transportInternal:t.includes(`hybrid`)?j.transportHybrid:j.transportSecurityKey}function Rt(e){return gt(e)===`NOT_FOUND`?j.notFound:e instanceof Error?e.message:j.renameFallback}function zt(e){return ht(e)===`last_credential`?j.lastCredential:gt(e)===`NOT_FOUND`?j.notFound:e instanceof Error?e.message:j.deleteFallback}function Bt(e){if(e instanceof rt)switch(e.code){case`user_cancelled`:return j.enrollCancelled;case`credential_already_registered`:return j.enrollAlreadyRegistered;case`no_authenticator`:return j.enrollNoAuthenticator;case`network_error`:return j.enrollNetworkError;case`email_mismatch`:return j.enrollEmailMismatch}return e instanceof Error?e.message:j.enrollFallback}var Vt=`2.0.10`,Ht=500,Ut=`user-agent`,Wt=``,Gt=`?`,M={FUNCTION:`function`,OBJECT:`object`,STRING:`string`,UNDEFINED:`undefined`},N=`browser`,P=`cpu`,F=`device`,I=`engine`,L=`os`,Kt=`result`,R=`name`,z=`type`,B=`vendor`,V=`version`,H=`architecture`,qt=`major`,U=`model`,Jt=`console`,W=`mobile`,G=`tablet`,K=`smarttv`,q=`wearable`,Yt=`xr`,Xt=`embedded`,Zt=`fetcher`,J=`inapp`,Qt=`brands`,$t=`formFactors`,en=`fullVersionList`,tn=`platform`,nn=`platformVersion`,rn=`bitness`,an=`sec-ch-ua`,on=an+`-full-version-list`,sn=an+`-arch`,cn=an+`-`+rn,ln=an+`-form-factors`,un=an+`-`+W,dn=an+`-`+U,fn=an+`-`+tn,pn=fn+`-version`,mn=[Qt,en,W,U,tn,nn,H,$t,rn],hn=`Amazon`,gn=`Apple`,_n=`ASUS`,vn=`BlackBerry`,yn=`Google`,bn=`Huawei`,xn=`Lenovo`,Sn=`Honor`,Cn=`LG`,wn=`Microsoft`,Tn=`Motorola`,En=`Nvidia`,Dn=`OnePlus`,On=`OPPO`,kn=`Samsung`,An=`Sharp`,jn=`Sony`,Mn=`Xiaomi`,Nn=`Zebra`,Pn=`Chrome`,Fn=`Chromium`,In=`Chromecast`,Ln=`Edge`,Rn=`Firefox`,zn=`Opera`,Bn=`Facebook`,Vn=`Sogou`,Hn=`Mobile `,Un=` Browser`,Wn=`Windows`,Y=typeof window!==M.UNDEFINED&&window.navigator?window.navigator:void 0,Gn=Y&&Y.userAgentData?Y.userAgentData:void 0,Kn=function(e,t){var n={},r=t;if(!Yn(t))for(var i in r={},t)for(var a in t[i])r[a]=t[i][a].concat(r[a]?r[a]:[]);for(var o in e)n[o]=r[o]&&r[o].length%2==0?r[o].concat(e[o]):e[o];return n},qn=function(e){for(var t={},n=0;n<e.length;n++)t[e[n].toUpperCase()]=e[n];return t},Jn=function(e,t){if(typeof e===M.OBJECT&&e.length>0){for(var n in e)if(Qn(t)==Qn(e[n]))return!0;return!1}return Xn(e)?Qn(t)==Qn(e):!1},Yn=function(e,t){for(var n in e)return/^(browser|cpu|device|engine|os)$/.test(n)||(t?Yn(e[n]):!1)},Xn=function(e){return typeof e===M.STRING},Zn=function(e){if(e){for(var t=[],n=er(e).split(`,`),r=0;r<n.length;r++)if(n[r].indexOf(`;`)>-1){var i=nr(n[r]).split(`;v=`);t[r]={brand:i[0],version:i[1]}}else t[r]=nr(n[r]);return t}},Qn=function(e){return Xn(e)?e.toLowerCase():e},$n=function(e){return Xn(e)?tr(/[^\d\.]/g,e).split(`.`)[0]:void 0},er=function(e){return Xn(e)?nr(tr(/\\?\"/g,e),Ht):void 0},X=function(e){for(var t in e)if(e.hasOwnProperty(t)){var n=e[t];typeof n==M.OBJECT&&n.length==2?this[n[0]]=n[1]:this[n]=void 0}return this},tr=function(e,t){return Xn(t)?t.replace(e,Wt):t},nr=function(e,t){return e=tr(/^\s\s*/,String(e)),typeof t===M.UNDEFINED?e:e.substring(0,t)},rr=function(e,t){if(!(!e||!t))for(var n=0,r,i,a,o,s,c;n<t.length&&!s;){var l=t[n],u=t[n+1];for(r=i=0;r<l.length&&!s&&l[r];)if(s=l[r++].exec(e),s)for(a=0;a<u.length;a++)c=s[++i],o=u[a],typeof o===M.OBJECT&&o.length>0?o.length===2?typeof o[1]==M.FUNCTION?this[o[0]]=o[1].call(this,c):this[o[0]]=o[1]:o.length>=3&&(typeof o[1]===M.FUNCTION&&!(o[1].exec&&o[1].test)?o.length>3?this[o[0]]=c?o[1].apply(this,o.slice(2)):void 0:this[o[0]]=c?o[1].call(this,c,o[2]):void 0:o.length==3?this[o[0]]=c?c.replace(o[1],o[2]):void 0:o.length==4?this[o[0]]=c?o[3].call(this,c.replace(o[1],o[2])):void 0:o.length>4&&(this[o[0]]=c?o[3].apply(this,[c.replace(o[1],o[2])].concat(o.slice(4))):void 0)):this[o]=c||void 0;n+=2}},ir=function(e,t){return t.test.test(e)?t.ifTrue:t.ifFalse},Z=function(e,t){for(var n in t)if(typeof t[n]===M.OBJECT&&t[n].length>0){for(var r=0;r<t[n].length;r++)if(Jn(t[n][r],e))return n===Gt?void 0:n}else if(Jn(t[n],e))return n===Gt?void 0:n;return t.hasOwnProperty(`*`)?t[`*`]:e},ar={ME:`4.90`,"NT 3.51":`3.51`,"NT 4.0":`4.0`,2e3:[`5.0`,`5.01`],XP:[`5.1`,`5.2`],Vista:`6.0`,7:`6.1`,8:`6.2`,"8.1":`6.3`,10:[`6.4`,`10.0`],NT:``},or={embedded:`Automotive`,mobile:`Mobile`,tablet:[`Tablet`,`EInk`],smarttv:`TV`,wearable:`Watch`,xr:[`VR`,`XR`],"?":[`Desktop`,`Unknown`],"*":void 0},sr={Chrome:`Google Chrome`,Edge:`Microsoft Edge`,"Edge WebView2":`Microsoft Edge WebView2`,"Chrome WebView":`Android WebView`,"Chrome Headless":`HeadlessChrome`,"Huawei Browser":`HuaweiBrowser`,"MIUI Browser":`Miui Browser`,"Opera Mobi":`OperaMobile`,Yandex:`YaBrowser`},cr={browser:[[/\b(?:crmo|crios)\/([\w\.]+)/i],[V,[R,Hn+`Chrome`]],[/webview.+edge\/([\w\.]+)/i],[V,[R,Ln+` WebView`],[z,J]],[/edg(?:e|ios|a)?\/([\w\.]+)/i],[V,[R,`Edge`]],[/(opera mini)\/([-\w\.]+)/i,/(opera [mobiletab]{3,6})\b.+version\/([-\w\.]+)/i,/(opera)(?:.+version\/|[\/ ]+)([\w\.]+)/i],[R,V],[/opios[\/ ]+([\w\.]+)/i],[V,[R,zn+` Mini`]],[/\bop(?:rg)?x\/([\w\.]+)/i],[V,[R,zn+` GX`]],[/\bopr\/([\w\.]+)/i],[V,[R,zn]],[/\bb[ai]*d(?:uhd|[ub]*[aekoprswx]{5,6})[\/ ]?([\w\.]+)/i],[V,[R,`Baidu`]],[/\b(?:mxbrowser|mxios|myie2)\/?([-\w\.]*)\b/i],[V,[R,`Maxthon`]],[/(kindle)\/([\w\.]+)/i,/(lunascape|maxthon|netfront|jasmine|blazer|sleipnir)[\/ ]?([\w\.]*)/i,/(avant|iemobile|slim(?:browser|boat|jet))[\/ ]?([\d\.]*)/i,/(?:ms|\()(ie) ([\w\.]+)/i,/(atlas|flock|rockmelt|midori|epiphany|silk|skyfire|bolt|iron|vivaldi|iridium|phantomjs|bowser|qupzilla|falkon|rekonq|puffin|whale(?!.+naver)|qqbrowserlite|duckduckgo|klar|helio|(?=comodo_)?dragon|otter|dooble|(?:hi|lg |ovi|qute)browser|palemoon)\/v?([-\w\.]+)/i,/(brave)(?: chrome)?\/([\d\.]+)/i,/(aloha|heytap|ovi|115|surf|qwant)browser\/([\d\.]+)/i,/(qwant)(?:ios|mobile)\/([\d\.]+)/i,/(ecosia|weibo)(?:__| \w+@)([\d\.]+)/i],[R,V],[/quark(?:pc)?\/([-\w\.]+)/i],[V,[R,`Quark`]],[/\bddg\/([\w\.]+)/i],[V,[R,`DuckDuckGo`]],[/(?:\buc? ?browser|(?:juc.+)ucweb| ucpc)[\/ ]?([\w\.]+)/i],[V,[R,`UCBrowser`]],[/microm.+\bqbcore\/([\w\.]+)/i,/\bqbcore\/([\w\.]+).+microm/i,/micromessenger\/([\w\.]+)/i],[V,[R,`WeChat`]],[/konqueror\/([\w\.]+)/i],[V,[R,`Konqueror`]],[/trident.+rv[: ]([\w\.]{1,9})\b.+like gecko/i],[V,[R,`IE`]],[/ya(?:search)?browser\/([\w\.]+)/i],[V,[R,`Yandex`]],[/slbrowser\/([\w\.]+)/i],[V,[R,`Smart `+xn+Un]],[/(av(?:ast|g|ira))\/([\w\.]+)/i],[[R,/(.+)/,`$1 Secure`+Un],V],[/norton\/([\w\.]+)/i],[V,[R,`Norton Private`+Un]],[/\bfocus\/([\w\.]+)/i],[V,[R,Rn+` Focus`]],[/ mms\/([\w\.]+)$/i],[V,[R,zn+` Neon`]],[/ opt\/([\w\.]+)$/i],[V,[R,zn+` Touch`]],[/coc_coc\w+\/([\w\.]+)/i],[V,[R,`Coc Coc`]],[/dolfin\/([\w\.]+)/i],[V,[R,`Dolphin`]],[/coast\/([\w\.]+)/i],[V,[R,zn+` Coast`]],[/miuibrowser\/([\w\.]+)/i],[V,[R,`MIUI`+Un]],[/fxios\/([\w\.-]+)/i],[V,[R,Hn+Rn]],[/\bqihoobrowser\/?([\w\.]*)/i],[V,[R,`360`]],[/\b(qq)\/([\w\.]+)/i],[[R,/(.+)/,`$1Browser`],V],[/(oculus|sailfish|huawei|vivo|pico)browser\/([\w\.]+)/i],[[R,/(.+)/,`$1`+Un],V],[/ HBPC\/([\w\.]+)/],[V,[R,bn+Un]],[/samsungbrowser\/([\w\.]+)/i],[V,[R,kn+` Internet`]],[/metasr[\/ ]?([\d\.]+)/i],[V,[R,Vn+` Explorer`]],[/(sogou)mo\w+\/([\d\.]+)/i],[[R,Vn+` Mobile`],V],[/(electron)\/([\w\.]+) safari/i,/(tesla)(?: qtcarbrowser|\/(20\d\d\.[-\w\.]+))/i,/m?(qqbrowser|2345(?=browser|chrome|explorer))\w*[\/ ]?v?([\w\.]+)/i],[R,V],[/(lbbrowser|luakit|rekonq|steam(?= (clie|tenf|gameo)))/i],[R],[/ome\/([\w\.]+).+(iron(?= saf)|360(?=[es]e$))/i],[V,R],[/((?:fban\/fbios|fb_iab\/fb4a)(?!.+fbav)|;fbav\/([\w\.]+);)/i],[[R,Bn],V,[z,J]],[/(kakao(?:talk|story))[\/ ]([\w\.]+)/i,/(naver)\(.*?(\d+\.[\w\.]+).*\)/i,/(daum)apps[\/ ]([\w\.]+)/i,/safari (line)\/([\w\.]+)/i,/\b(line)\/([\w\.]+)\/iab/i,/(alipay)client\/([\w\.]+)/i,/(twitter)(?:and| f.+e\/([\w\.]+))/i,/(bing)(?:web|sapphire)\/([\w\.]+)/i,/(instagram|snapchat|klarna)[\/ ]([-\w\.]+)/i],[R,V,[z,J]],[/\bgsa\/([\w\.]+) .*safari\//i],[V,[R,`GSA`],[z,J]],[/(?:musical_ly|trill)(?:.+app_?version\/|_)([\w\.]+)/i],[V,[R,`TikTok`],[z,J]],[/\[(linkedin)app\]/i],[R,[z,J]],[/(zalo(?:app)?)[\/\sa-z]*([\w\.-]+)/i],[[R,/(.+)/,`Zalo`],V,[z,J]],[/(chromium)[\/ ]([-\w\.]+)/i],[R,V],[/ome-(lighthouse)$/i],[R,[z,Zt]],[/headlesschrome(?:\/([\w\.]+)| )/i],[V,[R,Pn+` Headless`]],[/wv\).+chrome\/([\w\.]+).+edgw\//i],[V,[R,Ln+` WebView2`],[z,J]],[/; wv\).+(chrome)\/([\w\.]+)/i],[[R,Pn+` WebView`],V,[z,J]],[/droid.+ version\/([\w\.]+)\b.+(?:mobile safari|safari)/i],[V,[R,`Android`+Un]],[/chrome\/([\w\.]+) mobile/i],[V,[R,Hn+`Chrome`]],[/(chrome|omniweb|arora|[tizenoka]{5} ?browser)\/v?([\w\.]+)/i],[R,V],[/version\/([\w\.\,]+) .*mobile(?:\/\w+ | ?)safari/i],[V,[R,Hn+`Safari`]],[/iphone .*mobile(?:\/\w+ | ?)safari/i],[[R,Hn+`Safari`]],[/version\/([\w\.\,]+) .*(safari)/i],[V,R],[/webkit.+?(mobile ?safari|safari)(\/[\w\.]+)/i],[R,[V,`1`]],[/(webkit|khtml)\/([\w\.]+)/i],[R,V],[/(?:mobile|tablet);.*(firefox)\/([\w\.-]+)/i],[[R,Hn+Rn],V],[/(navigator|netscape\d?)\/([-\w\.]+)/i],[[R,`Netscape`],V],[/(wolvic|librewolf)\/([\w\.]+)/i],[R,V],[/mobile vr; rv:([\w\.]+)\).+firefox/i],[V,[R,Rn+` Reality`]],[/ekiohf.+(flow)\/([\w\.]+)/i,/(swiftfox)/i,/(icedragon|iceweasel|camino|chimera|fennec|maemo browser|minimo|conkeror)[\/ ]?([\w\.\+]+)/i,/(seamonkey|k-meleon|icecat|iceape|firebird|phoenix|basilisk|waterfox)\/([-\w\.]+)$/i,/(firefox)\/([\w\.]+)/i,/(mozilla)\/([\w\.]+(?= .+rv\:.+gecko\/\d+)|[0-4][\w\.]+(?!.+compatible))/i,/(amaya|dillo|doris|icab|ladybird|lynx|mosaic|netsurf|obigo|polaris|w3m|(?:go|ice|up)[\. ]?browser)[-\/ ]?v?([\w\.]+)/i,/\b(links) \(([\w\.]+)/i],[R,[V,/_/g,`.`]],[/(cobalt)\/([\w\.]+)/i],[R,[V,/[^\d\.]+./,Wt]]],cpu:[[/\b((amd|x|x86[-_]?|wow|win)64)\b/i],[[H,`amd64`]],[/(ia32(?=;))/i,/\b((i[346]|x)86)(pc)?\b/i],[[H,`ia32`]],[/\b(aarch64|arm(v?[89]e?l?|_?64))\b/i],[[H,`arm64`]],[/\b(arm(v[67])?ht?n?[fl]p?)\b/i],[[H,`armhf`]],[/( (ce|mobile); ppc;|\/[\w\.]+arm\b)/i],[[H,`arm`]],[/ sun4\w[;\)]/i],[[H,`sparc`]],[/\b(avr32|ia64(?=;)|68k(?=\))|\barm(?=v([1-7]|[5-7]1)l?|;|eabi)|(irix|mips|sparc)(64)?\b|pa-risc)/i,/((ppc|powerpc)(64)?)( mac|;|\))/i,/(?:osf1|[freopnt]{3,4}bsd) (alpha)/i],[[H,/ower/,Wt,Qn]],[/mc680.0/i],[[H,`68k`]],[/winnt.+\[axp/i],[[H,`alpha`]]],device:[[/\b(sch-i[89]0\d|shw-m380s|sm-[ptx]\w{2,4}|gt-[pn]\d{2,4}|sgh-t8[56]9|nexus 10)/i],[U,[B,kn],[z,G]],[/\b((?:s[cgp]h|gt|sm)-(?![lr])\w+|sc[g-]?[\d]+a?|galaxy nexus)/i,/samsung[- ]((?!sm-[lr]|browser)[-\w]+)/i,/sec-(sgh\w+)/i],[U,[B,kn],[z,W]],[/(?:\/|\()(ip(?:hone|od)[\w, ]*)[\/\);]/i],[U,[B,gn],[z,W]],[/\b(?:ios|apple\w+)\/.+[\(\/](ipad)/i,/\b(ipad)[\d,]*[;\] ].+(mac |i(pad)?)os/i],[U,[B,gn],[z,G]],[/(macintosh);/i],[U,[B,gn]],[/\b(sh-?[altvz]?\d\d[a-ekm]?)/i],[U,[B,An],[z,W]],[/\b((?:brt|eln|hey2?|gdi|jdn)-a?[lnw]09|(?:ag[rm]3?|jdn2|kob2)-a?[lw]0[09]hn)(?: bui|\)|;)/i],[U,[B,Sn],[z,G]],[/honor([-\w ]+)[;\)]/i],[U,[B,Sn],[z,W]],[/\b((?:ag[rs][2356]?k?|bah[234]?|bg[2o]|bt[kv]|cmr|cpn|db[ry]2?|jdn2|got|kob2?k?|mon|pce|scm|sht?|[tw]gr|vrd)-[ad]?[lw][0125][09]b?|605hw|bg2-u03|(?:gem|fdr|m2|ple|t1)-[7a]0[1-4][lu]|t1-a2[13][lw]|mediapad[\w\. ]*(?= bui|\)))\b(?!.+d\/s)/i],[U,[B,bn],[z,G]],[/(?:huawei) ?([-\w ]+)[;\)]/i,/\b(nexus 6p|\w{2,4}e?-[atu]?[ln][\dx][\dc][adnt]?)\b(?!.+d\/s)/i],[U,[B,bn],[z,W]],[/oid[^\)]+; (2[\dbc]{4}(182|283|rp\w{2})[cgl]|m2105k81a?c)(?: bui|\))/i,/\b(?:xiao)?((?:red)?mi[-_ ]?pad[\w- ]*)(?: bui|\))/i],[[U,/_/g,` `],[B,Mn],[z,G]],[/\b; (\w+) build\/hm\1/i,/\b(hm[-_ ]?note?[_ ]?(?:\d\w)?) bui/i,/oid[^\)]+; (redmi[\-_ ]?(?:note|k)?[\w_ ]+|m?[12]\d[01]\d\w{3,6}|poco[\w ]+|(shark )?\w{3}-[ah]0|qin ?[1-3](s\+|ultra| pro)?)( bui|; wv|\))/i,/\b(mi[-_ ]?(?:a\d|one|one[_ ]plus|note|max|cc)?[_ ]?(?:\d{0,2}\w?)[_ ]?(?:plus|se|lite|pro)?( 5g|lte)?)(?: bui|\))/i,/; ([\w ]+) miui\/v?\d/i],[[U,/_/g,` `],[B,Mn],[z,W]],[/droid.+; (cph2[3-6]\d[13579]|((gm|hd)19|(ac|be|in|kb)20|(d[en]|eb|le|mt)21|ne22)[0-2]\d|p[g-l]\w[1m]10)\b/i,/(?:one)?(?:plus)? (a\d0\d\d)(?: b|\))/i],[U,[B,Dn],[z,W]],[/; (\w+) bui.+ oppo/i,/\b(cph[12]\d{3}|p(?:af|c[al]|d\w|e[ar])[mt]\d0|x9007|a101op)\b/i],[U,[B,On],[z,W]],[/\b(opd2(\d{3}a?))(?: bui|\))/i],[U,[B,Z,{OnePlus:[`203`,`304`,`403`,`404`,`413`,`415`],"*":On}],[z,G]],[/(vivo (5r?|6|8l?|go|one|s|x[il]?[2-4]?)[\w\+ ]*)(?: bui|\))/i],[U,[B,`BLU`],[z,W]],[/; vivo (\w+)(?: bui|\))/i,/\b(v[12]\d{3}\w?[at])(?: bui|;)/i],[U,[B,`Vivo`],[z,W]],[/\b(rmx[1-3]\d{3})(?: bui|;|\))/i],[U,[B,`Realme`],[z,W]],[/(ideatab[-\w ]+|602lv|d-42a|a101lv|a2109a|a3500-hv|s[56]000|pb-6505[my]|tb-?x?\d{3,4}(?:f[cu]|xu|[av])|yt\d?-[jx]?\d+[lfmx])( bui|;|\)|\/)/i,/lenovo ?(b[68]0[08]0-?[hf]?|tab(?:[\w- ]+?)|tb[\w-]{6,7})( bui|;|\)|\/)/i],[U,[B,xn],[z,G]],[/lenovo[-_ ]?([-\w ]+?)(?: bui|\)|\/)/i],[U,[B,xn],[z,W]],[/\b(milestone|droid(?:[2-4x]| (?:bionic|x2|pro|razr))?:?( 4g)?)\b[\w ]+build\//i,/\bmot(?:orola)?[- ]([\w\s]+)(\)| bui)/i,/((?:moto(?! 360)[-\w\(\) ]+|xt\d{3,4}[cgkosw\+]?[-\d]*|nexus 6)(?= bui|\)))/i],[U,[B,Tn],[z,W]],[/\b(mz60\d|xoom[2 ]{0,2}) build\//i],[U,[B,Tn],[z,G]],[/\b(?:lg)?([vl]k\-?\d{3}) bui| 3\.[-\w; ]{10}lg?-([06cv9]{3,4})/i],[U,[B,Cn],[z,G]],[/(lm(?:-?f100[nv]?|-[\w\.]+)(?= bui|\))|nexus [45])/i,/\blg[-e;\/ ]+(?!.*(?:browser|netcast|android tv|watch|webos))(\w+)/i,/\blg-?([\d\w]+) bui/i],[U,[B,Cn],[z,W]],[/(nokia) (t[12][01])/i],[B,U,[z,G]],[/(?:maemo|nokia).*(n900|lumia \d+|rm-\d+)/i,/nokia[-_ ]?(([-\w\. ]*?))( bui|\)|;|\/)/i],[[U,/_/g,` `],[z,W],[B,`Nokia`]],[/(pixel (c|tablet))\b/i],[U,[B,yn],[z,G]],[/droid.+;(?: google)? (g(01[13]a|020[aem]|025[jn]|1b60|1f8f|2ybb|4s1m|576d|5nz6|8hhn|8vou|a02099|c15s|d1yq|e2ae|ec77|gh2x|kv4x|p4bc|pj41|r83y|tt9q|ur25|wvk6)|pixel[\d ]*a?( pro)?( xl)?( fold)?( \(5g\))?)( bui|\))/i],[U,[B,yn],[z,W]],[/(google) (pixelbook( go)?)/i],[B,U],[/droid.+; (a?\d[0-2]{2}so|[c-g]\d{4}|so[-gl]\w+|xq-\w\w\d\d)(?= bui|\).+chrome\/(?![1-6]{0,1}\d\.))/i],[U,[B,jn],[z,W]],[/sony tablet [ps]/i,/\b(?:sony)?sgp\w+(?: bui|\))/i],[[U,`Xperia Tablet`],[B,jn],[z,G]],[/(alexa)webm/i,/(kf[a-z]{2}wi|aeo(?!bc)\w\w)( bui|\))/i,/(kf[a-z]+)( bui|\)).+silk\//i],[U,[B,hn],[z,G]],[/((?:sd|kf)[0349hijorstuw]+)( bui|\)).+silk\//i],[[U,/(.+)/g,`Fire Phone $1`],[B,hn],[z,W]],[/(playbook);[-\w\),; ]+(rim)/i],[U,B,[z,G]],[/\b((?:bb[a-f]|st[hv])100-\d)/i,/(?:blackberry|\(bb10;) (\w+)/i],[U,[B,vn],[z,W]],[/(?:\b|asus_)(transfo[prime ]{4,10} \w+|eeepc|slider \w+|nexus 7|padfone|p00[cj])/i],[U,[B,_n],[z,G]],[/ (z[bes]6[027][012][km][ls]|zenfone \d\w?)\b/i],[U,[B,_n],[z,W]],[/(nexus 9)/i],[U,[B,`HTC`],[z,G]],[/(htc)[-;_ ]{1,2}([\w ]+(?=\)| bui)|\w+)/i,/(zte)[- ]([\w ]+?)(?: bui|\/|\))/i,/(alcatel|geeksphone|nexian|panasonic(?!(?:;|\.))|sony(?!-bra))[-_ ]?([-\w]*)/i],[B,[U,/_/g,` `],[z,W]],[/tcl (xess p17aa)/i,/droid [\w\.]+; ((?:8[14]9[16]|9(?:0(?:48|60|8[01])|1(?:3[27]|66)|2(?:6[69]|9[56])|466))[gqswx])(_\w(\w|\w\w))?(\)| bui)/i],[U,[B,`TCL`],[z,G]],[/droid [\w\.]+; (418(?:7d|8v)|5087z|5102l|61(?:02[dh]|25[adfh]|27[ai]|56[dh]|59k|65[ah])|a509dl|t(?:43(?:0w|1[adepqu])|50(?:6d|7[adju])|6(?:09dl|10k|12b|71[efho]|76[hjk])|7(?:66[ahju]|67[hw]|7[045][bh]|71[hk]|73o|76[ho]|79w|81[hks]?|82h|90[bhsy]|99b)|810[hs]))(_\w(\w|\w\w))?(\)| bui)/i],[U,[B,`TCL`],[z,W]],[/(itel) ((\w+))/i],[[B,Qn],U,[z,Z,{tablet:[`p10001l`,`w7001`],"*":`mobile`}]],[/droid.+; ([ab][1-7]-?[0178a]\d\d?)/i],[U,[B,`Acer`],[z,G]],[/droid.+; (m[1-5] note) bui/i,/\bmz-([-\w]{2,})/i],[U,[B,`Meizu`],[z,W]],[/; ((?:power )?armor(?:[\w ]{0,8}))(?: bui|\))/i],[U,[B,`Ulefone`],[z,W]],[/; (energy ?\w+)(?: bui|\))/i,/; energizer ([\w ]+)(?: bui|\))/i],[U,[B,`Energizer`],[z,W]],[/; cat (b35);/i,/; (b15q?|s22 flip|s48c|s62 pro)(?: bui|\))/i],[U,[B,`Cat`],[z,W]],[/((?:new )?andromax[\w- ]+)(?: bui|\))/i],[U,[B,`Smartfren`],[z,W]],[/droid.+; (a(in)?(0(15|59|6[35])|142)p?)/i],[U,[B,`Nothing`],[z,W]],[/; (x67 5g|tikeasy \w+|ac[1789]\d\w+)( b|\))/i,/archos ?(5|gamepad2?|([\w ]*[t1789]|hello) ?\d+[\w ]*)( b|\))/i],[U,[B,`Archos`],[z,G]],[/archos ([\w ]+)( b|\))/i,/; (ac[3-6]\d\w{2,8})( b|\))/i],[U,[B,`Archos`],[z,W]],[/blackview ([-\w ]+)( b|\))/i,/; (bv\d{4}[-\w ]*)( b|\))/i],[U,[B,`Blackview`],[z,W]],[/; (n159v)/i],[U,[B,`HMD`],[z,W]],[/((revvl[ \w\+]+|tm(?:rv|af)\w*[45]g(?:tb)?))( b|\))/i],[U,[z,ir,{test:/ta?b/i,ifTrue:G,ifFalse:W}],[B,`T-Mobile`]],[/(imo) (tab \w+)/i,/(infinix|tecno) (x1101b?|p904|dp(7c|8d|10a)( pro)?|p70[1-3]a?|p904|t1101)/i],[B,U,[z,G]],[/(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus(?! zenw)|dell|jolla|meizu|motorola|polytron|tecno|micromax|advan)[-_ ]?([-\w]*)/i,/; (blu|coolpad|cubot|hmd|imo|infinix|lava|oneplus|tcl|wiko)[_ ]([-\w\+ ]+?)(?: bui|\)|; r)/i,/(hp) ([\w ]+\w)/i,/(microsoft); (lumia[\w ]+)/i,/(oppo) ?([\w ]+) bui/i,/(hisense) ([ehv][\w ]+)\)/i,/droid[^;]+; (philips)[_ ]([sv-x][\d]{3,4}[xz]?)/i],[B,U,[z,W]],[/(kobo)\s(ereader|touch)/i,/(hp).+(touchpad(?!.+tablet)|tablet)/i,/(kindle)\/([\w\.]+)/i],[B,U,[z,G]],[/(surface duo)/i],[U,[B,wn],[z,G]],[/droid [\d\.]+; (fp\du?)(?: b|\))/i],[U,[B,`Fairphone`],[z,W]],[/((?:tegranote|shield t(?!.+d tv))[\w- ]*?)(?: b|\))/i],[U,[B,En],[z,G]],[/(sprint) (\w+)/i],[B,U,[z,W]],[/(kin\.[onetw]{3})/i],[[U,/\./g,` `],[B,wn],[z,W]],[/droid.+; ([c6]+|et5[16]|mc[239][23]x?|vc8[03]x?)\)/i],[U,[B,Nn],[z,G]],[/droid.+; (ec30|ps20|tc[2-8]\d[kx])\)/i],[U,[B,Nn],[z,W]],[/(philips)[\w ]+tv/i,/smart-tv.+(samsung)/i],[B,[z,K]],[/hbbtv.+maple;(\d+)/i],[[U,/^/,`SmartTV`],[B,kn],[z,K]],[/(vizio)(?: |.+model\/)(\w+-\w+)/i,/tcast.+(lg)e?. ([-\w]+)/i],[B,U,[z,K]],[/(nux; netcast.+smarttv|lg (netcast\.tv-201\d|android tv))/i],[[B,Cn],[z,K]],[/(apple) ?tv/i],[B,[U,gn+` TV`],[z,K]],[/crkey.*devicetype\/chromecast/i],[[U,In+` Third Generation`],[B,yn],[z,K]],[/crkey.*devicetype\/([^/]*)/i],[[U,/^/,`Chromecast `],[B,yn],[z,K]],[/fuchsia.*crkey/i],[[U,In+` Nest Hub`],[B,yn],[z,K]],[/crkey/i],[[U,In],[B,yn],[z,K]],[/(portaltv)/i],[U,[B,Bn],[z,K]],[/droid.+aft(\w+)( bui|\))/i],[U,[B,hn],[z,K]],[/(shield \w+ tv)/i],[U,[B,En],[z,K]],[/\(dtv[\);].+(aquos)/i,/(aquos-tv[\w ]+)\)/i],[U,[B,An],[z,K]],[/(bravia[\w ]+)( bui|\))/i],[U,[B,jn],[z,K]],[/(mi(tv|box)-?\w+) bui/i],[U,[B,Mn],[z,K]],[/Hbbtv.*(technisat) (.*);/i],[B,U,[z,K]],[/\b(roku)[\dx]*[\)\/]((?:dvp-)?[\d\.]*)/i,/hbbtv\/\d+\.\d+\.\d+ +\([\w\+ ]*; *([\w\d][^;]*);([^;]*)/i],[[B,/.+\/(\w+)/,`$1`,Z,{LG:`lge`}],[U,nr],[z,K]],[/(playstation \w+)/i],[U,[B,jn],[z,Jt]],[/\b(xbox(?: one)?(?!; xbox))[\); ]/i],[U,[B,wn],[z,Jt]],[/(ouya)/i,/(nintendo) (\w+)/i,/(retroid) (pocket ([^\)]+))/i,/(valve).+(steam deck)/i,/droid.+; ((shield|rgcube|gr0006))( bui|\))/i],[[B,Z,{Nvidia:`Shield`,Anbernic:`RGCUBE`,Logitech:`GR0006`}],U,[z,Jt]],[/\b(sm-[lr]\d\d[0156][fnuw]?s?|gear live)\b/i],[U,[B,kn],[z,q]],[/((pebble))app/i,/(asus|google|lg|oppo|xiaomi) ((pixel |zen)?watch[\w ]*)( bui|\))/i],[B,U,[z,q]],[/(ow(?:19|20)?we?[1-3]{1,3})/i],[U,[B,On],[z,q]],[/(watch)(?: ?os[,\/]|\d,\d\/)[\d\.]+/i],[U,[B,gn],[z,q]],[/(opwwe\d{3})/i],[U,[B,Dn],[z,q]],[/(moto 360)/i],[U,[B,Tn],[z,q]],[/(smartwatch 3)/i],[U,[B,jn],[z,q]],[/(g watch r)/i],[U,[B,Cn],[z,q]],[/droid.+; (wt63?0{2,3})\)/i],[U,[B,Nn],[z,q]],[/droid.+; (glass) \d/i],[U,[B,yn],[z,Yt]],[/(pico) ([\w ]+) os\d/i],[B,U,[z,Yt]],[/(quest( \d| pro)?s?).+vr/i],[U,[B,Bn],[z,Yt]],[/mobile vr; rv.+firefox/i],[[z,Yt]],[/(tesla)(?: qtcarbrowser|\/[-\w\.]+)/i],[B,[z,Xt]],[/(aeobc)\b/i],[U,[B,hn],[z,Xt]],[/(homepod).+mac os/i],[U,[B,gn],[z,Xt]],[/windows iot/i],[[z,Xt]],[/droid.+; ([\w- ]+) (4k|android|smart|google)[- ]?tv/i],[U,[z,K]],[/\b((4k|android|smart|opera)[- ]?tv|tv; rv:|large screen[\w ]+safari)\b/i],[[z,K]],[/droid .+?; ([^;]+?)(?: bui|; wv\)|\) applew|; hmsc).+?(mobile|vr|\d) safari/i],[U,[z,Z,{mobile:`Mobile`,xr:`VR`,"*":G}]],[/\b((tablet|tab)[;\/]|focus\/\d(?!.+mobile))/i],[[z,G]],[/(phone|mobile(?:[;\/]| [ \w\/\.]*safari)|pda(?=.+windows ce))/i],[[z,W]],[/droid .+?; ([\w\. -]+)( bui|\))/i],[U,[B,`Generic`]]],engine:[[/windows.+ edge\/([\w\.]+)/i],[V,[R,Ln+`HTML`]],[/(arkweb)\/([\w\.]+)/i],[R,V],[/webkit\/537\.36.+chrome\/(?!27)([\w\.]+)/i],[V,[R,`Blink`]],[/(presto)\/([\w\.]+)/i,/(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna|servo)\/([\w\.]+)/i,/ekioh(flow)\/([\w\.]+)/i,/(khtml|tasman|links|dillo)[\/ ]\(?([\w\.]+)/i,/(icab)[\/ ]([23]\.[\d\.]+)/i,/\b(libweb)/i],[R,V],[/ladybird\//i],[[R,`LibWeb`]],[/rv\:([\w\.]{1,9})\b.+(gecko)/i],[V,R]],os:[[/(windows nt) (6\.[23]); arm/i],[[R,/N/,`R`],[V,Z,ar]],[/(windows (?:phone|mobile|iot))(?: os)?[\/ ]?([\d\.]*( se)?)/i,/(windows)[\/ ](1[01]|2000|3\.1|7|8(\.1)?|9[58]|me|server 20\d\d( r2)?|vista|xp)/i],[R,V],[/windows nt ?([\d\.\)]*)(?!.+xbox)/i,/\bwin(?=3| ?9|n)(?:nt| 9x )?([\d\.;]*)/i],[[V,/(;|\))/g,``,Z,ar],[R,Wn]],[/(windows ce)\/?([\d\.]*)/i],[R,V],[/[adehimnop]{4,7}\b(?:.*os ([\w]+) like mac|; opera)/i,/(?:ios;fbsv|ios(?=.+ip(?:ad|hone)|.+apple ?tv)|ip(?:ad|hone)(?: |.+i(?:pad)?)os|apple ?tv.+ios)[\/ ]([\w\.]+)/i,/\btvos ?([\w\.]+)/i,/cfnetwork\/.+darwin/i],[[V,/_/g,`.`],[R,`iOS`]],[/(mac os x) ?([\w\. ]*)/i,/(macintosh|mac_powerpc\b)(?!.+(haiku|morphos))/i],[[R,`macOS`],[V,/_/g,`.`]],[/android ([\d\.]+).*crkey/i],[V,[R,In+` Android`]],[/fuchsia.*crkey\/([\d\.]+)/i],[V,[R,In+` Fuchsia`]],[/crkey\/([\d\.]+).*devicetype\/smartspeaker/i],[V,[R,In+` SmartSpeaker`]],[/linux.*crkey\/([\d\.]+)/i],[V,[R,In+` Linux`]],[/crkey\/([\d\.]+)/i],[V,[R,In]],[/droid ([\w\.]+)\b.+(android[- ]x86)/i],[V,R],[/(ubuntu) ([\w\.]+) like android/i],[[R,/(.+)/,`$1 Touch`],V],[/(harmonyos)[\/ ]?([\d\.]*)/i,/(android|bada|blackberry|kaios|maemo|meego|openharmony|qnx|rim tablet os|sailfish|series40|symbian|tizen)\w*[-\/\.; ]?([\d\.]*)/i],[R,V],[/\(bb(10);/i],[V,[R,vn]],[/(?:symbian ?os|symbos|s60(?=;)|series ?60)[-\/ ]?([\w\.]*)/i],[V,[R,`Symbian`]],[/mozilla\/[\d\.]+ \((?:mobile[;\w ]*|tablet|tv|[^\)]*(?:viera|lg(?:l25|-d300)|alcatel ?o.+|y300-f1)); rv:([\w\.]+)\).+gecko\//i],[V,[R,Rn+` OS`]],[/\b(?:hp)?wos(?:browser)?\/([\w\.]+)/i,/webos(?:[ \/]?|\.tv-20(?=2[2-9]))(\d[\d\.]*)/i],[V,[R,`webOS`]],[/web0s;.+?(?:chr[o0]me|safari)\/(\d+)/i],[[V,Z,{25:`120`,24:`108`,23:`94`,22:`87`,6:`79`,5:`68`,4:`53`,3:`38`,2:`538`,1:`537`,"*":`TV`}],[R,`webOS`]],[/watch(?: ?os[,\/ ]|\d,\d\/)([\d\.]+)/i],[V,[R,`watchOS`]],[/cros [\w]+(?:\)| ([\w\.]+)\b)/i],[V,[R,`Chrome OS`]],[/kepler ([\w\.]+); (aft|aeo)/i],[V,[R,`Vega OS`]],[/(netrange)mmh/i,/(nettv)\/(\d+\.[\w\.]+)/i,/(nintendo|playstation) (\w+)/i,/(xbox); +xbox ([^\);]+)/i,/(pico) .+os([\w\.]+)/i,/\b(joli|palm)\b ?(?:os)?\/?([\w\.]*)/i,/linux.+(mint)[\/\(\) ]?([\w\.]*)/i,/(mageia|vectorlinux|fuchsia|arcaos|arch(?= ?linux))[;l ]([\d\.]*)/i,/([kxln]?ubuntu|debian|suse|opensuse|gentoo|slackware|fedora|mandriva|centos|pclinuxos|red ?hat|zenwalk|linpus|raspbian|plan 9|minix|risc os|contiki|deepin|manjaro|elementary os|sabayon|linspire|knoppix)(?: gnu[\/ ]linux)?(?: enterprise)?(?:[- ]linux)?(?:-gnu)?[-\/ ]?(?!chrom|package)([-\w\.]*)/i,/((?:open)?solaris)[-\/ ]?([\w\.]*)/i,/\b(aix)[; ]([1-9\.]{0,4})/i,/(hurd|linux|morphos)(?: (?:arm|x86|ppc)\w*| ?)([\w\.]*)/i,/(gnu) ?([\w\.]*)/i,/\b([-frentopcghs]{0,5}bsd|dragonfly)[\/ ]?(?!amd|[ix346]{1,2}86)([\w\.]*)/i,/(haiku) ?(r\d)?/i],[R,V],[/(sunos) ?([\d\.]*)/i],[[R,`Solaris`],V],[/\b(beos|os\/2|amigaos|openvms|hp-ux|serenityos)/i,/(unix) ?([\w\.]*)/i],[R,V]]},lr=(function(){var e={init:{},isIgnore:{},isIgnoreRgx:{},toString:{}};return X.call(e.init,[[N,[R,V,qt,z]],[P,[H]],[F,[z,U,B]],[I,[R,V]],[L,[R,V]]]),X.call(e.isIgnore,[[N,[V,qt]],[I,[V]],[L,[V]]]),X.call(e.isIgnoreRgx,[[N,/ ?browser$/i],[L,/ ?os$/i]]),X.call(e.toString,[[N,[R,V]],[P,[H]],[F,[B,U]],[I,[R,V]],[L,[R,V]]]),e})(),ur=function(e,t){var n=lr.init[t],r=lr.isIgnore[t]||0,i=lr.isIgnoreRgx[t]||0,a=lr.toString[t]||0;function o(){X.call(this,n)}return o.prototype.getItem=function(){return e},o.prototype.withClientHints=function(){return Gn?Gn.getHighEntropyValues(mn).then(function(t){return e.setCH(new dr(t,!1)).parseCH().get()}):e.parseCH().get()},o.prototype.withFeatureCheck=function(){return e.detectFeature().get()},t!=Kt&&(o.prototype.is=function(e){var t=!1;for(var n in this)if(this.hasOwnProperty(n)&&!Jn(r,n)&&Qn(i?tr(i,this[n]):this[n])==Qn(i?tr(i,e):e)){if(t=!0,e!=M.UNDEFINED)break}else if(e==M.UNDEFINED&&t){t=!t;break}return t},o.prototype.toString=function(){var e=Wt;for(var t in a)typeof this[a[t]]!==M.UNDEFINED&&(e+=(e?` `:Wt)+this[a[t]]);return e||M.UNDEFINED}),o.prototype.then=function(e){var t=this,n=function(){for(var e in t)t.hasOwnProperty(e)&&(this[e]=t[e])};n.prototype={is:o.prototype.is,toString:o.prototype.toString,withClientHints:o.prototype.withClientHints,withFeatureCheck:o.prototype.withFeatureCheck};var r=new n;return e(r),r},new o};function dr(e,t){if(e||={},X.call(this,mn),t)X.call(this,[[Qt,Zn(e[an])],[en,Zn(e[on])],[W,/\?1/.test(e[un])],[U,er(e[dn])],[tn,er(e[fn])],[nn,er(e[pn])],[H,er(e[sn])],[$t,Zn(e[ln])],[rn,er(e[cn])]]);else for(var n in e)this.hasOwnProperty(n)&&typeof e[n]!==M.UNDEFINED&&(this[n]=e[n])}function fr(e,t,n,r){return X.call(this,[[`itemType`,e],[`ua`,t],[`uaCH`,r],[`rgxMap`,n],[`data`,ur(this,e)]]),this}fr.prototype.get=function(e){return e?this.data.hasOwnProperty(e)?this.data[e]:void 0:this.data},fr.prototype.set=function(e,t){return this.data[e]=t,this},fr.prototype.setCH=function(e){return this.uaCH=e,this},fr.prototype.detectFeature=function(){if(Y&&Y.userAgent==this.ua)switch(this.itemType){case N:Y.brave&&typeof Y.brave.isBrave==M.FUNCTION&&this.set(R,`Brave`);break;case F:!this.get(z)&&Gn&&Gn[W]&&this.set(z,W),this.get(U)==`Macintosh`&&Y&&typeof Y.standalone!==M.UNDEFINED&&Y.maxTouchPoints&&Y.maxTouchPoints>2&&this.set(U,`iPad`).set(z,G);break;case L:!this.get(R)&&Gn&&Gn[tn]&&this.set(R,Gn[tn]);break;case Kt:var e=this.data,t=function(t){return e[t].getItem().detectFeature().get()};this.set(N,t(N)).set(P,t(P)).set(F,t(F)).set(I,t(I)).set(L,t(L))}return this},fr.prototype.parseUA=function(){switch(this.itemType!=Kt&&rr.call(this.data,this.ua,this.rgxMap),this.itemType){case N:this.set(qt,$n(this.get(V)));break;case L:if(this.get(R)==`iOS`&&this.get(V)&&/^1[89][^\d]/.exec(this.get(V))){var e=/\) Version\/((\d+)[\d\.]*)/.exec(this.ua);e&&parseInt(e[2],10)>=26&&this.set(V,e[1])}break}return this},fr.prototype.parseCH=function(){var e=this.uaCH,t=this.rgxMap;switch(this.itemType){case N:case I:var n=e[en]||e[Qt],r;if(n)for(var i=0;i<n.length;i++){var a=n[i].brand||n[i],o=n[i].version;this.itemType==N&&!/not.a.brand/i.test(a)&&(!r||/Chrom/.test(r)&&a!=Fn||r==Ln&&/WebView2/.test(a))&&(a=Z(a,sr),r=this.get(R),r&&!/Chrom/.test(r)&&/Chrom/.test(a)||this.set(R,a).set(V,o).set(qt,$n(o)),r=a),this.itemType==I&&a==Fn&&this.set(V,o)}break;case P:var s=e[H];s&&(s&&e[rn]==`64`&&(s+=`64`),rr.call(this.data,s+`;`,t));break;case F:if(e[W]&&this.set(z,W),e[U]&&(this.set(U,e[U]),!this.get(z)||!this.get(B))){var c={};rr.call(c,`droid 9; `+e[U]+`)`,t),!this.get(z)&&c.type&&this.set(z,c.type),!this.get(B)&&c.vendor&&this.set(B,c.vendor)}if(e[$t]){var l;if(typeof e[$t]!=`string`)for(var u=0;!l&&u<e[$t].length;)l=Z(e[$t][u++],or);else l=Z(e[$t],or);this.set(z,l)}break;case L:var d=e[tn];if(d){var f=e[nn];d==Wn&&(f=parseInt($n(f),10)>=13?`11`:`10`),this.set(R,d).set(V,f)}this.get(R)==Wn&&e[U]==`Xbox`&&this.set(R,`Xbox`).set(V,void 0);break;case Kt:var p=this.data,m=function(t){return p[t].getItem().setCH(e).parseCH().get()};this.set(N,m(N)).set(P,m(P)).set(F,m(F)).set(I,m(I)).set(L,m(L))}return this};function Q(e,t,n){if(typeof e===M.OBJECT?(Yn(e,!0)?(typeof t===M.OBJECT&&(n=t),t=e):(n=e,t=void 0),e=void 0):typeof e===M.STRING&&!Yn(t,!0)&&(n=t,t=void 0),n)if(typeof n.append===M.FUNCTION){var r={};n.forEach(function(e,t){r[String(t).toLowerCase()]=e}),n=r}else{var i={};for(var a in n)n.hasOwnProperty(a)&&(i[String(a).toLowerCase()]=n[a]);n=i}if(!(this instanceof Q))return new Q(e,t,n).getResult();var o=typeof e===M.STRING?e:n&&n[Ut]?n[Ut]:Y&&Y.userAgent?Y.userAgent:Wt,s=new dr(n,!0),c=cr,l=function(e){return e==Kt?function(){return new fr(e,o,c,s).set(`ua`,o).set(N,this.getBrowser()).set(P,this.getCPU()).set(F,this.getDevice()).set(I,this.getEngine()).set(L,this.getOS()).get()}:function(){return new fr(e,o,c[e],s).parseUA().get()}};return X.call(this,[[`getBrowser`,l(N)],[`getCPU`,l(P)],[`getDevice`,l(F)],[`getEngine`,l(I)],[`getOS`,l(L)],[`getResult`,l(Kt)],[`getUA`,function(){return o}],[`setUA`,function(e){return Xn(e)&&(o=nr(e,Ht)),this}],[`useExtension`,function(e){return e&&(c=Kn(c,e)),this}]]).setUA(o).useExtension(t),this}Q.VERSION=Vt,Q.BROWSER=qn([R,V,qt,z]),Q.CPU=qn([H]),Q.DEVICE=qn([U,B,z,Jt,W,K,G,q,Xt]),Q.ENGINE=Q.OS=qn([R,V]);function pr(e){if(!e)return{browser:null,os:null,icon:bt,raw:null};let t=Q(e);return{browser:t.browser.name??null,os:t.os.name??null,icon:mr(t.device.type),raw:e}}function mr(e){return e===`mobile`?he:e===`tablet`?_e:e===`wearable`?St:e===`smarttv`||e===`console`?xt:ge}var hr={unknownDevice:{id:`profile.sessions.unknownDevice`},browserOnOs:{id:`profile.sessions.device.browserOnOs`},revokeAllFallback:{id:`profile.sessions.revokeAll.fallback`},revokeCurrent:{id:`profile.sessions.revoke.current`},revokeNotFound:{id:`profile.sessions.revoke.notFound`},revokeFallback:{id:`profile.sessions.revoke.fallback`}};function gr(){let e=S(),t=s(),[n,r]=(0,O.useState)(null),a=o(c.auth.sessions.list.queryOptions({input:{}})),u=()=>t.invalidateQueries({queryKey:c.auth.sessions.list.key()}),d=l({mutationFn:()=>c.auth.sessions.revokeOthers.call({}),onMutate:()=>{r(null)},onSuccess:async e=>{r({kind:`ok`,revoked:e.revoked}),await u()},onError:e=>{r({kind:`error`,message:e instanceof Error?e.message:hr.revokeAllFallback})}}),f=a.data??[],p=f.filter(e=>!e.current).length;return(0,k.jsxs)(Ne,{"data-testid":`profile-sessions-card`,children:[(0,k.jsxs)(C,{children:[(0,k.jsx)(je,{children:(0,k.jsx)(i,{id:`profile.sessions.title`,message:`Active sessions`})}),(0,k.jsx)(Me,{children:(0,k.jsx)(i,{id:`profile.sessions.description`,message:`Devices signed in to this account. Revoke any you don't recognise, or sign out everywhere except this browser if you suspect a leak.`})})]}),(0,k.jsxs)(w,{className:`flex flex-col gap-4`,children:[vr(a,f,u),n?.kind===`ok`?(0,k.jsx)(D,{"data-testid":`profile-sessions-revoke-feedback`,children:(0,k.jsx)(E,{children:(0,k.jsx)(i,{id:`profile.sessions.revokeAll.count`,message:`{revoked, plural, =0 {No other sessions to sign out.} one {Signed out # other session.} other {Signed out # other sessions.}}`,values:{revoked:n.revoked},comment:`revoked: number of OTHER sessions just signed out (excluding the current device)`})})}):null,n?.kind===`error`?(0,k.jsx)(D,{variant:`destructive`,"data-testid":`profile-sessions-error`,children:(0,k.jsx)(E,{children:e(n.message)})}):null,p>0?(0,k.jsx)(`div`,{className:`flex justify-end`,children:(0,k.jsx)(T,{type:`button`,variant:`outline`,onClick:()=>{d.mutate()},disabled:d.isPending,"data-testid":`profile-sessions-revoke-button`,children:d.isPending?(0,k.jsx)(i,{id:`profile.sessions.revokeAll.pending`,message:`Signing out…`}):(0,k.jsx)(i,{id:`profile.sessions.revokeAll.idle`,message:`Sign out other devices`})})}):null]})]})}function _r({session:e,onChanged:t}){let[n,r]=(0,O.useState)(!1),[a,o]=(0,O.useState)(null),s=pr(e.userAgent),u=s.icon,d=vt(e.createdAt),{formatRelative:f}=Ae(),p=S(),m=yr(s),h=l({mutationFn:()=>c.auth.sessions.revoke.call({id:e.id}),onMutate:()=>{o(null)},onSuccess:async()=>{r(!1),await t()},onError:e=>{o(br(e))}});return(0,k.jsxs)(`li`,{className:`flex items-start gap-3 py-3`,"data-testid":`profile-session-row`,children:[(0,k.jsx)(u,{"aria-hidden":!0,className:`text-muted-foreground mt-0.5 size-5 shrink-0`}),(0,k.jsxs)(`div`,{className:`flex min-w-0 flex-1 flex-col gap-1`,children:[(0,k.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,k.jsx)(`span`,{className:`text-sm font-medium`,"data-testid":`profile-session-label`,children:m}),e.current?(0,k.jsx)(x,{variant:`secondary`,children:(0,k.jsx)(i,{id:`profile.sessions.thisDevice`,message:`This device`})}):null]}),(0,k.jsxs)(`div`,{className:`text-muted-foreground flex flex-wrap gap-2 text-xs`,children:[e.ipAddress?(0,k.jsx)(`span`,{children:e.ipAddress}):null,(0,k.jsx)(`span`,{children:(0,k.jsx)(i,{id:`profile.sessions.signedIn`,message:`Signed in {when}`,values:{when:f(d)},comment:`when: pre-formatted relative-time string like '2 hours ago'`})})]})]}),e.current?null:(0,k.jsx)(T,{type:`button`,variant:`ghost`,size:`sm`,className:`text-destructive hover:text-destructive shrink-0`,onClick:()=>{r(!0)},"data-testid":`profile-session-revoke-button`,children:(0,k.jsx)(i,{id:`profile.sessions.revoke.button`,message:`Revoke`})}),(0,k.jsx)(re,{open:n,onOpenChange:e=>{e||(r(!1),o(null))},children:(0,k.jsxs)(b,{children:[(0,k.jsxs)(y,{children:[(0,k.jsx)(ae,{children:(0,k.jsx)(i,{id:`profile.sessions.revoke.title`,message:`Sign out this device?`})}),(0,k.jsx)(ie,{children:e.ipAddress?(0,k.jsx)(i,{id:`profile.sessions.revoke.descriptionWithIp`,message:`{device} signed in {when} from {ip}. The device will need to sign in again next time.`,values:{device:(0,k.jsx)(`bdi`,{children:m}),when:f(d),ip:e.ipAddress},comment:`device: 'Safari on macOS' style label; when: relative-time string; ip: IPv4/IPv6 address`}):(0,k.jsx)(i,{id:`profile.sessions.revoke.description`,message:`{device} signed in {when}. The device will need to sign in again next time.`,values:{device:(0,k.jsx)(`bdi`,{children:m}),when:f(d)},comment:`device: 'Safari on macOS' style label; when: relative-time string`})})]}),a?(0,k.jsx)(D,{variant:`destructive`,"data-testid":`profile-session-revoke-error`,children:(0,k.jsx)(E,{children:p(a)})}):null,(0,k.jsxs)(me,{children:[(0,k.jsx)(te,{disabled:h.isPending,children:(0,k.jsx)(i,{id:`profile.sessions.revoke.cancel`,message:`Cancel`})}),(0,k.jsx)(ee,{"data-testid":`profile-session-revoke-confirm`,disabled:h.isPending,onClick:e=>{e.preventDefault(),h.mutate()},children:h.isPending?(0,k.jsx)(i,{id:`profile.sessions.revoke.pending`,message:`Signing out…`}):(0,k.jsx)(i,{id:`profile.sessions.revoke.confirm`,message:`Sign out device`})})]})]})})]})}function vr(e,t,n){return e.isPending?(0,k.jsx)(`p`,{className:`text-muted-foreground text-sm`,children:(0,k.jsx)(i,{id:`profile.sessions.loading`,message:`Loading…`})}):e.error?(0,k.jsx)(D,{variant:`destructive`,children:(0,k.jsx)(E,{children:(0,k.jsx)(i,{id:`profile.sessions.loadFailed`,message:`Couldn't load your sessions. Refresh and try again.`})})}):t.length===0?(0,k.jsx)(`p`,{className:`text-muted-foreground text-sm`,children:(0,k.jsx)(i,{id:`profile.sessions.empty`,message:`No plumix-managed sessions. Your sign-in is handled by an external identity provider.`})}):(0,k.jsx)(`ul`,{className:`divide-border divide-y`,"data-testid":`profile-sessions-list`,children:t.map(e=>(0,k.jsx)(_r,{session:e,onChanged:n},e.id))})}function yr(e){let{i18n:t}=r(),n=S();return e.browser&&e.os?t._(hr.browserOnOs.id,{browser:e.browser,os:e.os},{message:hr.browserOnOs.message}):e.browser?e.browser:e.os?e.os:n(hr.unknownDevice)}function br(e){return ht(e)===`current_session`?hr.revokeCurrent:gt(e)===`NOT_FOUND`?hr.revokeNotFound:e instanceof Error?e.message:hr.revokeFallback}var $={invalidEmail:{id:`userEdit.email.invalid`},confirmationSent:{id:`userEdit.email.confirmationSent`},newEmailPlaceholder:{id:`userEdit.email.placeholder`},emailTaken:{id:`userEdit.email.error.taken`},mailerNotConfigured:{id:`userEdit.email.error.mailerNotConfigured`},accountDisabled:{id:`userEdit.email.error.accountDisabled`},requestFallback:{id:`userEdit.email.error.requestFallback`}},xr=Se({newEmail:Oe(De(),ve(),ye(),Te(ke($.invalidEmail)),we(255))});function Sr({userId:e,email:t,canEdit:n}){let{i18n:a}=r(),u=s(),{formatRelative:d}=Ae(),f=S(),[p,m]=(0,O.useState)(!1),[h,g]=(0,O.useState)(null),[_,v]=(0,O.useState)(null),y=o(c.user.pendingEmailChange.queryOptions({input:{id:e}})).data?.pending??null,ee=()=>u.invalidateQueries({queryKey:c.user.pendingEmailChange.key()}),te=l({mutationFn:t=>c.user.requestEmailChange.call({id:e,newEmail:t}),onSuccess:async(e,t)=>{m(!1),g(null),v(a._($.confirmationSent.id,{email:t},{message:$.confirmationSent.message})),await ee()},onError:e=>{g(wr(e))}}),b=l({mutationFn:()=>c.user.cancelEmailChange.call({id:e}),onSuccess:async()=>{v(null),await ee()}}),x=y?(0,k.jsx)(`bdi`,{children:y.newEmail}):null;return(0,k.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,k.jsx)(ot,{children:(0,k.jsx)(i,{id:`userEdit.email.label`,message:`Email`})}),(0,k.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,k.jsx)(`p`,{className:`text-muted-foreground font-mono text-sm`,"data-testid":`user-edit-email`,children:t}),n?(0,k.jsx)(T,{type:`button`,variant:`outline`,size:`sm`,onClick:()=>{g(null),v(null),m(!0)},"data-testid":`user-edit-email-change-button`,children:(0,k.jsx)(i,{id:`userEdit.email.changeButton`,message:`Change email`})}):null]}),y?(0,k.jsx)(D,{"data-testid":`user-edit-email-pending`,children:(0,k.jsxs)(E,{className:`flex flex-wrap items-center gap-2`,children:[(0,k.jsx)(`span`,{children:(0,k.jsx)(i,{id:`userEdit.email.pending`,message:`Pending change to <code>{newEmail}</code> — expires {expiresAt}`,values:{newEmail:x,expiresAt:d(vt(y.expiresAt))},components:{code:(0,k.jsx)(`code`,{className:`font-mono`})},comment:`newEmail: the new address awaiting confirmation; expiresAt: pre-formatted relative-time like 'in 2 hours'`})}),n?(0,k.jsx)(T,{type:`button`,variant:`ghost`,size:`sm`,onClick:()=>b.mutate(),disabled:b.isPending,"data-testid":`user-edit-email-cancel-pending`,children:b.isPending?(0,k.jsx)(i,{id:`userEdit.email.cancelPending.pending`,message:`Cancelling…`}):(0,k.jsx)(i,{id:`userEdit.email.cancelPending.idle`,message:`Cancel`})}):null]})}):_?(0,k.jsx)(D,{"data-testid":`user-edit-email-change-success`,children:(0,k.jsx)(E,{children:_})}):null,(0,k.jsx)(Cr,{open:p,onOpenChange:e=>{e||g(null),m(e)},currentEmail:t,onSubmit:e=>te.mutate(e),pending:te.isPending,error:h,placeholder:f($.newEmailPlaceholder)})]})}function Cr({open:e,onOpenChange:t,currentEmail:n,onSubmit:r,pending:a,error:o,placeholder:s}){let c=S(),l=st({resolver:mt(xr),defaultValues:{newEmail:``},mode:`onSubmit`});return(0,k.jsx)(re,{open:e,onOpenChange:t,children:(0,k.jsxs)(b,{"data-testid":`user-edit-email-change-dialog`,children:[(0,k.jsxs)(y,{children:[(0,k.jsx)(ae,{children:(0,k.jsx)(i,{id:`userEdit.email.dialog.title`,message:`Change email`})}),(0,k.jsx)(ie,{children:(0,k.jsx)(i,{id:`userEdit.email.dialog.description`,message:`We'll send a confirmation link to the new address. The change takes effect after the link is clicked. Sessions on this account are signed out at that point — re-sign-in uses the new email.`})})]}),(0,k.jsx)(pt,{...l,children:(0,k.jsxs)(`form`,{className:`flex flex-col gap-3`,onSubmit:l.handleSubmit(e=>{r(e.newEmail)}),children:[(0,k.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,k.jsx)(ot,{className:`text-muted-foreground text-xs`,children:(0,k.jsx)(i,{id:`userEdit.email.dialog.currentLabel`,message:`Current email`})}),(0,k.jsx)(`p`,{className:`text-muted-foreground font-mono text-sm`,"data-testid":`user-edit-email-change-current`,children:n})]}),(0,k.jsx)(ct,{control:l.control,name:`newEmail`,render:({field:e})=>(0,k.jsxs)(at,{children:[(0,k.jsx)(ut,{children:(0,k.jsx)(i,{id:`userEdit.email.dialog.newLabel`,message:`New email`})}),(0,k.jsx)(lt,{children:(0,k.jsx)(nt,{type:`email`,autoComplete:`email`,placeholder:s,disabled:a,"data-testid":`user-edit-email-change-input`,...e})}),(0,k.jsx)(ft,{})]})}),o?(0,k.jsx)(D,{variant:`destructive`,"data-testid":`user-edit-email-change-error`,children:(0,k.jsx)(E,{children:c(o)})}):null,(0,k.jsxs)(me,{children:[(0,k.jsx)(te,{disabled:a,"data-testid":`user-edit-email-change-cancel`,children:(0,k.jsx)(i,{id:`userEdit.email.dialog.cancel`,message:`Cancel`})}),(0,k.jsx)(ee,{type:`submit`,disabled:a,"data-testid":`user-edit-email-change-submit`,children:a?(0,k.jsx)(i,{id:`userEdit.email.dialog.submit.pending`,message:`Sending…`}):(0,k.jsx)(i,{id:`userEdit.email.dialog.submit.idle`,message:`Send confirmation`})})]})]})})]})})}function wr(e){if(gt(e)===`CONFLICT`){let t=ht(e);if(t===`email_taken`)return $.emailTaken;if(t===`mailer_not_configured`)return $.mailerNotConfigured;if(t===`account_disabled`)return $.accountDisabled}return e instanceof Error?e.message:$.requestFallback}var Tr=`__keep__`;async function Er(e,t){await Promise.all([e.invalidateQueries({queryKey:c.user.get.queryOptions({input:{id:t}}).queryKey}),e.invalidateQueries({queryKey:c.user.list.key()})])}var Dr=Se({name:Oe(De(),ve(),we(100)),role:Ee(Be),meta:be(De(),Ce())});function Or(){let{id:e}=Je.useParams(),{user:t}=Je.useRouteContext(),n=e===t.id;function r(e){return!n&&qe(t.capabilities,e)}let i=r(`user:promote`),o=r(`user:edit`),s=r(`user:delete`),l=r(`user:manage_tokens`),u=n?qe(t.capabilities,`user:edit_own`):qe(t.capabilities,`user:edit`),{data:d}=a(c.user.get.queryOptions({input:{id:e}}));return(0,k.jsx)(Ar,{target:d,isSelf:n,canPromote:i,canSave:u,canDisable:o,canDelete:s,canManageOtherTokens:l,metaBoxes:Xe(t.capabilities)},d.updatedAt instanceof Date?d.updatedAt.toISOString():String(d.updatedAt))}function kr({target:e,canPromote:t,metaBoxes:n,queryClient:r,setServerError:i}){return l({mutationFn:r=>c.user.update.call({id:e.id,name:r.name.length>0?r.name:null,...t&&r.role!==e.role?{role:r.role}:{},meta:n.length>0?r.meta:void 0}),onMutate:()=>{i(null)},onSuccess:async()=>{await Er(r,e.id)},onError:e=>{i(Pr(e,Fr,et.errUpdateFallback))}})}function Ar({target:e,isSelf:t,canPromote:n,canSave:r,canDisable:a,canDelete:o,canManageOtherTokens:c,metaBoxes:l}){let f=d(),m=S(),h=s(),[g,_]=(0,O.useState)(null),v=kr({target:e,canPromote:n,metaBoxes:l,queryClient:h,setServerError:_}),y=st({resolver:mt(Dr),defaultValues:{name:e.name??``,role:e.role,meta:$e(l,e.meta)}}),ee=y.handleSubmit(e=>{v.mutate(e)}),te=(0,k.jsx)(`bdi`,{children:e.email});return(0,k.jsxs)(`div`,{className:`mx-auto flex w-full max-w-xl flex-col gap-4`,children:[(0,k.jsxs)(u,{to:`/users`,search:Ze,className:`text-muted-foreground hover:text-foreground inline-flex items-center gap-1 text-sm`,"data-testid":`user-edit-back-link`,children:[(0,k.jsx)(p,{className:`size-4 rtl:rotate-180`}),(0,k.jsx)(i,{id:`userEdit.backToList`,message:`Back to users`})]}),(0,k.jsxs)(Ne,{children:[(0,k.jsxs)(C,{children:[(0,k.jsx)(je,{children:(0,k.jsx)(`h1`,{"data-testid":`user-edit-heading`,children:t?(0,k.jsx)(i,{id:`userEdit.title.self`,message:`Your profile`}):(0,k.jsx)(i,{id:`userEdit.title.other`,message:`Edit {email}`,values:{email:te},comment:`email: the user being edited`})})}),(0,k.jsx)(Me,{children:t?(0,k.jsx)(i,{id:`userEdit.description.self`,message:`Update your display name. Role and account state are managed by administrators.`}):(0,k.jsx)(i,{id:`userEdit.description.other`,message:`Update this account's details. Role changes invalidate existing sessions immediately.`})})]}),(0,k.jsx)(w,{children:(0,k.jsx)(pt,{...y,children:(0,k.jsxs)(`form`,{className:`flex flex-col gap-4`,onSubmit:ee,children:[(0,k.jsx)(Sr,{userId:e.id,email:e.email,canEdit:r}),(0,k.jsx)(ct,{control:y.control,name:`name`,render:({field:e})=>(0,k.jsxs)(at,{children:[(0,k.jsx)(ut,{children:(0,k.jsx)(i,{id:`userEdit.name.label`,message:`Name`})}),(0,k.jsx)(lt,{children:(0,k.jsx)(nt,{type:`text`,autoComplete:`name`,disabled:v.isPending||!r,"data-testid":`user-edit-name-input`,...e})}),(0,k.jsx)(ft,{})]})}),n?(0,k.jsx)(ct,{control:y.control,name:`role`,render:({field:e})=>(0,k.jsxs)(at,{children:[(0,k.jsx)(ut,{children:(0,k.jsx)(i,{id:`userEdit.role.label`,message:`Role`})}),(0,k.jsxs)(We,{value:e.value,onValueChange:t=>{Ve(t)&&e.onChange(t)},disabled:v.isPending,children:[(0,k.jsx)(lt,{children:(0,k.jsx)(ze,{className:`w-full`,onBlur:e.onBlur,"data-testid":`user-edit-role-select`,children:(0,k.jsx)(Ge,{})})}),(0,k.jsx)(Ie,{children:Be.map(e=>(0,k.jsx)(Re,{value:e,children:m(Fe[e])},e))})]}),(0,k.jsx)(ft,{})]})}):(0,k.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,k.jsx)(ot,{children:(0,k.jsx)(i,{id:`userEdit.role.label`,message:`Role`})}),(0,k.jsx)(x,{variant:`secondary`,className:`w-fit`,children:m(tt[e.role])}),t?(0,k.jsx)(`p`,{className:`text-muted-foreground text-xs`,children:(0,k.jsx)(i,{id:`userEdit.role.selfReadonly`,message:`Only another administrator can change your role.`})}):null]}),l.map(e=>(0,k.jsx)(yt,{box:e,basePath:`meta`,disabled:v.isPending||!r},e.id)),g?(0,k.jsx)(D,{variant:`destructive`,"data-testid":`user-edit-server-error`,children:(0,k.jsx)(E,{children:m(g)})}):null,(0,k.jsxs)(`div`,{className:`flex justify-end gap-2`,children:[(0,k.jsx)(T,{type:`button`,variant:`outline`,onClick:()=>{f({to:`/users`,search:Ze})},disabled:v.isPending,children:(0,k.jsx)(i,{id:`userEdit.cancel`,message:`Cancel`})}),(0,k.jsx)(T,{type:`submit`,disabled:v.isPending||!r,"data-testid":`user-edit-submit`,children:v.isPending?(0,k.jsx)(i,{id:`userEdit.submit.pending`,message:`Saving…`}):(0,k.jsx)(i,{id:`userEdit.submit.idle`,message:`Save changes`})})]})]})})})]}),a?(0,k.jsx)(jr,{target:e}):null,o?(0,k.jsx)(Nr,{target:e}):null,t?(0,k.jsx)(Pt,{userLocale:e.meta.locale}):null,t?(0,k.jsx)(Ft,{userEmail:e.email}):null,t?(0,k.jsx)(gr,{}):null,t?(0,k.jsx)(Et,{}):null,!t&&c?(0,k.jsx)(Dt,{userId:e.id}):null]})}function jr({target:e}){let t=S(),n=s(),[r,a]=(0,O.useState)(null),o=e.disabledAt!=null,u=l({mutationFn:()=>o?c.user.enable.call({id:e.id}):c.user.disable.call({id:e.id}),onMutate:()=>{a(null)},onSuccess:async()=>{await Er(n,e.id)},onError:e=>{a(Pr(e,Ir,et.errStatusFallback))}});return(0,k.jsxs)(Ne,{children:[(0,k.jsxs)(C,{children:[(0,k.jsx)(je,{children:(0,k.jsx)(i,{id:`userEdit.status.title`,message:`Account status`})}),(0,k.jsx)(Me,{children:o?(0,k.jsx)(i,{id:`userEdit.status.description.disabled`,message:`Disabled accounts can't sign in. Re-enabling restores access; their passkey is still registered.`}):(0,k.jsx)(i,{id:`userEdit.status.description.active`,message:`Disabling signs the user out immediately and blocks future sign-ins. Their entries stay published.`})})]}),(0,k.jsxs)(w,{className:`flex flex-col gap-3`,children:[(0,k.jsxs)(`div`,{className:`flex items-center justify-between gap-4`,children:[(0,k.jsx)(x,{variant:o?`destructive`:`secondary`,children:o?(0,k.jsx)(i,{id:`users.list.row.disabled`,message:`Disabled`}):(0,k.jsx)(i,{id:`users.list.row.active`,message:`Active`})}),(0,k.jsx)(T,{variant:o?`default`:`outline`,onClick:()=>{u.mutate()},disabled:u.isPending,"data-testid":o?`user-edit-enable-button`:`user-edit-disable-button`,children:t(Mr(o,u.isPending))})]}),r?(0,k.jsx)(D,{variant:`destructive`,"data-testid":`user-status-error`,children:(0,k.jsx)(E,{children:t(r)})}):null]})]})}function Mr(e,t){return t?e?et.toggleEnabling:et.toggleDisabling:e?et.toggleEnable:et.toggleDisable}function Nr({target:e}){let t=d(),n=S(),r=s(),[a,u]=(0,O.useState)(!1),[f,p]=(0,O.useState)(null),[m,h]=(0,O.useState)(null),g=o({...c.user.list.queryOptions({input:{limit:100}}),enabled:a}),_=(g.data??[]).filter(t=>t.id!==e.id),v=l({mutationFn:()=>c.user.delete.call({id:e.id,...f==null?{}:{reassignTo:f}}),onMutate:()=>{h(null)},onSuccess:async()=>{await r.invalidateQueries({queryKey:c.user.list.key()}),t({to:`/users`,search:Ze})},onError:e=>{h(Pr(e,Lr,et.errDeleteFallback))}}),y=(0,k.jsx)(`bdi`,{children:e.email});return a?(0,k.jsxs)(Ne,{className:`border-destructive`,children:[(0,k.jsxs)(C,{children:[(0,k.jsx)(je,{className:`text-destructive`,children:(0,k.jsx)(i,{id:`userEdit.delete.confirm.title`,message:`Confirm delete: {email}`,values:{email:y},comment:`email: the user account being deleted`})}),(0,k.jsx)(Me,{children:(0,k.jsx)(i,{id:`userEdit.delete.confirm.description`,message:`If this user authored any entries, the next step reassigns them. Leave "Keep entries as-is" if they have none.`})})]}),(0,k.jsxs)(w,{className:`flex flex-col gap-3`,children:[(0,k.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,k.jsx)(ot,{htmlFor:`reassign-to`,children:(0,k.jsx)(i,{id:`userEdit.delete.reassign.label`,message:`Reassign entries to`})}),(0,k.jsxs)(We,{value:f==null?Tr:String(f),onValueChange:e=>{p(e===Tr?null:Number(e))},disabled:v.isPending||g.isPending,children:[(0,k.jsx)(ze,{id:`reassign-to`,className:`w-full`,"data-testid":`user-delete-reassign-select`,children:(0,k.jsx)(Ge,{})}),(0,k.jsxs)(Ie,{children:[(0,k.jsx)(Re,{value:Tr,children:n(et.reassignKeepAsIs)}),_.map(e=>(0,k.jsxs)(Re,{value:String(e.id),"data-testid":`user-delete-reassign-select-${e.id}`,children:[e.name??e.email,` (`,e.email,`)`]},e.id))]})]})]}),m?(0,k.jsx)(D,{variant:`destructive`,"data-testid":`user-delete-error`,children:(0,k.jsx)(E,{children:n(m)})}):null,(0,k.jsxs)(`div`,{className:`flex justify-end gap-2`,children:[(0,k.jsx)(T,{type:`button`,variant:`outline`,onClick:()=>{u(!1),p(null),h(null)},disabled:v.isPending,children:(0,k.jsx)(i,{id:`userEdit.cancel`,message:`Cancel`})}),(0,k.jsx)(T,{type:`button`,variant:`destructive`,onClick:()=>{v.mutate()},disabled:v.isPending,"data-testid":`user-delete-confirm-button`,children:v.isPending?(0,k.jsx)(i,{id:`userEdit.delete.confirm.pending`,message:`Deleting…`}):(0,k.jsx)(i,{id:`userEdit.delete.confirm.idle`,message:`Delete forever`})})]})]})]}):(0,k.jsxs)(Ne,{className:`border-destructive/50`,children:[(0,k.jsxs)(C,{children:[(0,k.jsx)(je,{className:`text-destructive`,children:(0,k.jsx)(i,{id:`userEdit.delete.title`,message:`Delete user`})}),(0,k.jsx)(Me,{children:(0,k.jsx)(i,{id:`userEdit.delete.description`,message:`Permanent. Their entries stay, but you'll choose who inherits authorship.`})})]}),(0,k.jsx)(w,{children:(0,k.jsx)(T,{variant:`destructive`,onClick:()=>{u(!0)},"data-testid":`user-edit-delete-button`,children:(0,k.jsx)(i,{id:`userEdit.delete.button`,message:`Delete user`})})})]})}function Pr(e,t,n){let r=e&&typeof e==`object`&&`data`in e?e.data?.reason:void 0;return(r==null?void 0:t[r])??n}var Fr={last_admin:{id:`userEdit.error.lastAdmin.update`},email_taken:{id:`userEdit.error.emailTaken`}},Ir={last_admin:{id:`userEdit.error.lastAdmin.status`}},Lr={last_admin:{id:`userEdit.error.lastAdmin.delete`},has_entries:{id:`userEdit.error.hasEntries`},reassign_to_self:{id:`userEdit.error.reassignToSelf`}};export{Or as component};
|
|
1
|
+
import{i as e,t}from"./jsx-runtime-DUAcabCT.js";import{t as n}from"./react-DbyrFoBd.js";import{i as r,n as i}from"./dist-BL2bKHuR.js";import{d as a,f as o,h as s,t as c,u as l}from"./orpc-DURDArDu.js";import{l as u,u as d}from"./esm-DfD3iRfG.js";import{t as f}from"./createLucideIcon-C0O-yxZG.js";import{t as p}from"./arrow-left-CWzmtp8T.js";import{n as m,r as h,t as g}from"./textarea-BsZaGkV-.js";import{n as _,t as v}from"./clipboard-D6ZMYUE8.js";import{B as y,F as ee,I as te,L as b,N as x,O as ne,P as re,R as ie,V as ae,X as oe,c as se,d as ce,f as le,k as ue,l as de,s as fe,u as pe,z as me}from"./utils-ByiwTMhM.js";import{n as he,r as ge,t as _e}from"./tablet-BnclzXSX.js";import{t as S}from"./use-label-CykSHq9A.js";import{D as ve,T as ye,b as be,d as xe,h as Se,k as Ce,l as we,r as Te,v as Ee,w as De,y as Oe}from"./dist-ClOzYsk5.js";import{o as ke}from"./validation-CwFumc7a.js";import{t as Ae}from"./use-formatters-Bq4u-MkS.js";import{a as je,i as C,n as w,r as Me,t as Ne}from"./card-L2-kK5VK.js";import{At as Pe,B as Fe,F as Ie,Ft as Le,I as Re,L as ze,M as Be,N as Ve,Nt as He,Ot as Ue,P as We,Pt as T,R as Ge,Tt as Ke,V as qe,_ as Je,at as Ye,ft as Xe,j as Ze,jt as Qe,pt as $e,v as et,z as tt}from"./index-Ctqj4aiM.js";import{t as nt}from"./input-xYuLUQID.js";import{a as rt,n as it}from"./passkey-C_CqNV1S.js";import{a as at,c as ot,f as st,i as ct,n as lt,o as ut,p as dt,s as ft,t as pt}from"./form-C94uy6_t.js";import{n as E,t as D}from"./alert-cwX3fWUu.js";import{t as mt}from"./valibot-DKJGiWCI.js";import{n as ht,t as gt}from"./orpc-errors-DWk96ZMY.js";import{t as _t}from"./scopes-C_7AiPdH.js";import{t as vt}from"./dates-CSmOj6E-.js";import{t as yt}from"./meta-box-Dd1vNvwM.js";var bt=f(`globe`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20`,key:`13o1zl`}],[`path`,{d:`M2 12h20`,key:`9i4pu4`}]]),xt=f(`tv`,[[`path`,{d:`m17 2-5 5-5-5`,key:`16satq`}],[`rect`,{width:`20`,height:`15`,x:`2`,y:`7`,rx:`2`,key:`1e6viu`}]]),St=f(`watch`,[[`path`,{d:`M12 10v2.2l1.6 1`,key:`n3r21l`}],[`path`,{d:`m16.13 7.66-.81-4.05a2 2 0 0 0-2-1.61h-2.68a2 2 0 0 0-2 1.61l-.78 4.05`,key:`18k57s`}],[`path`,{d:`m7.88 16.36.8 4a2 2 0 0 0 2 1.61h2.72a2 2 0 0 0 2-1.61l.81-4.05`,key:`16ny36`}],[`circle`,{cx:`12`,cy:`12`,r:`6`,key:`1vlfrh`}]]),O=e(n(),1),k=e(t(),1),A={nameRequired:{id:`apiTokens.create.nameRequired`},nameTooLong:{id:`apiTokens.create.nameTooLong`},expires7:{id:`apiTokens.expiry.7`},expires30:{id:`apiTokens.expiry.30`},expires90:{id:`apiTokens.expiry.90`},expiresNever:{id:`apiTokens.expiry.never`},mintFallback:{id:`apiTokens.mint.fallback`},revokeFallback:{id:`apiTokens.revoke.fallback`},namePlaceholder:{id:`apiTokens.create.namePlaceholder`},copyAria:{id:`apiTokens.secret.copyAria`},capabilitiesPlaceholder:{id:`apiTokens.create.capabilities.placeholder`}},Ct=Se({name:Oe(De(),ve(),xe(1,ke(A.nameRequired)),we(64,ke(A.nameTooLong))),expires:Ee([`7`,`30`,`90`,`never`]),scopeMode:Ee([`inherit`,`restrict`]),scopesText:Oe(De(),we(4096))}),wt={7:A.expires7,30:A.expires30,90:A.expires90,never:A.expiresNever},Tt={7:7,30:30,90:90,never:null};function Et(){let e=s(),t=o(c.auth.apiTokens.list.queryOptions({input:{}})),n=l({mutationFn:e=>c.auth.apiTokens.create.call({name:e.name,expiresInDays:e.expiresInDays,scopes:e.scopes===null?null:[...e.scopes]}),onSuccess:()=>e.invalidateQueries({queryKey:c.auth.apiTokens.list.key()})}),r=l({mutationFn:e=>c.auth.apiTokens.revoke.call({id:e}),onSuccess:()=>e.invalidateQueries({queryKey:c.auth.apiTokens.list.key()})});return(0,k.jsx)(Ot,{mode:`self`,tokens:t.data??[],isLoading:t.isLoading,onMint:(e,t)=>n.mutate(e,t),mintPending:n.isPending,onRevoke:(e,t)=>r.mutate(e,t),revokePending:r.isPending})}function Dt({userId:e}){let t=s(),n=o(c.auth.apiTokens.adminList.queryOptions({input:{userId:e}})),r=l({mutationFn:e=>c.auth.apiTokens.adminRevoke.call({id:e}),onSuccess:()=>t.invalidateQueries({queryKey:c.auth.apiTokens.adminList.key()})});return(0,k.jsx)(Ot,{mode:`admin`,tokens:n.data?.items??[],isLoading:n.isLoading,onRevoke:(e,t)=>r.mutate(e,t),revokePending:r.isPending})}function Ot({mode:e,tokens:t,isLoading:n,onMint:r,mintPending:a=!1,onRevoke:o,revokePending:s}){let c=S(),[l,u]=(0,O.useState)(null),[d,f]=(0,O.useState)(null),[p,m]=(0,O.useState)(null),[h,g]=(0,O.useState)(null),_=(0,k.jsx)(`bdi`,{children:p?.name??``});return(0,k.jsxs)(Ne,{"data-testid":`api-tokens-card`,children:[(0,k.jsxs)(C,{children:[(0,k.jsx)(je,{children:(0,k.jsx)(i,{id:`apiTokens.title`,message:`API tokens`})}),(0,k.jsx)(Me,{children:e===`self`?(0,k.jsx)(i,{id:`apiTokens.description.self`,message:`Personal access tokens for CLIs, MCP servers, CI bots, or any other non-browser client. The full secret is shown once at mint time.`}):(0,k.jsx)(i,{id:`apiTokens.description.admin`,message:`Tokens minted by this user. You can revoke any of them — minting requires the owner's authenticated browser session.`})})]}),(0,k.jsxs)(w,{className:`flex flex-col gap-6`,children:[r?(0,k.jsx)(kt,{onSubmit:e=>{f(null);let t=e.scopeMode===`inherit`?null:_t(e.scopesText);r({name:e.name,expiresInDays:Tt[e.expires],scopes:t},{onSuccess:e=>{u({secret:e.secret,name:e.token.name})},onError:e=>{f(e instanceof Error?e.message:A.mintFallback)}})},pending:a,error:d}):null,n?(0,k.jsx)(`p`,{className:`text-muted-foreground text-sm`,"data-testid":`api-tokens-loading`,children:(0,k.jsx)(i,{id:`apiTokens.loading`,message:`Loading tokens…`})}):t.length===0?(0,k.jsx)(Ue,{"data-testid":`api-tokens-empty`,children:(0,k.jsxs)(Qe,{children:[(0,k.jsx)(He,{children:(0,k.jsx)(i,{id:`apiTokens.empty.title`,message:`No tokens yet`})}),(0,k.jsx)(Pe,{children:e===`self`?(0,k.jsx)(i,{id:`apiTokens.empty.description.self`,message:`Mint one above for your CLI / MCP server / CI bot.`}):(0,k.jsx)(i,{id:`apiTokens.empty.description.admin`,message:`This user hasn't minted any API tokens.`})})]})}):(0,k.jsxs)(fe,{"data-testid":`api-tokens-table`,children:[(0,k.jsx)(ce,{children:(0,k.jsxs)(le,{children:[(0,k.jsx)(pe,{children:(0,k.jsx)(i,{id:`apiTokens.col.name`,message:`Name`})}),(0,k.jsx)(pe,{children:(0,k.jsx)(i,{id:`apiTokens.col.prefix`,message:`Prefix`})}),(0,k.jsx)(pe,{children:(0,k.jsx)(i,{id:`apiTokens.col.scopes`,message:`Scopes`})}),(0,k.jsx)(pe,{children:(0,k.jsx)(i,{id:`apiTokens.col.lastUsed`,message:`Last used`})}),(0,k.jsx)(pe,{children:(0,k.jsx)(i,{id:`apiTokens.col.expires`,message:`Expires`})}),(0,k.jsx)(pe,{className:`w-[1%] text-end`,children:(0,k.jsx)(i,{id:`apiTokens.col.actions`,message:`Actions`})})]})}),(0,k.jsx)(se,{children:t.map(e=>(0,k.jsxs)(le,{"data-testid":`api-tokens-row-${e.id}`,children:[(0,k.jsx)(de,{children:(0,k.jsx)(`span`,{className:`font-medium`,children:e.name})}),(0,k.jsx)(de,{children:(0,k.jsxs)(`code`,{className:`text-muted-foreground font-mono text-xs`,children:[e.prefix,`…`]})}),(0,k.jsx)(de,{children:(0,k.jsx)(Mt,{scopes:e.scopes})}),(0,k.jsx)(de,{className:`text-muted-foreground text-sm`,children:(0,k.jsx)(jt,{when:e.lastUsedAt})}),(0,k.jsx)(de,{className:`text-muted-foreground text-sm`,children:(0,k.jsx)(jt,{when:e.expiresAt})}),(0,k.jsx)(de,{className:`text-end`,children:(0,k.jsx)(T,{variant:`ghost`,size:`sm`,onClick:()=>m({id:e.id,name:e.name}),"data-testid":`api-tokens-revoke-${e.id}`,children:(0,k.jsx)(i,{id:`apiTokens.revoke.button`,message:`Revoke`})})})]},e.id))})]})]}),(0,k.jsx)(At,{secret:l?.secret??null,name:l?.name??``,onClose:()=>u(null)}),(0,k.jsx)(re,{open:p!==null,onOpenChange:e=>{e||(m(null),g(null))},children:(0,k.jsxs)(b,{children:[(0,k.jsxs)(y,{children:[(0,k.jsx)(ae,{children:(0,k.jsx)(i,{id:`apiTokens.revoke.title`,message:`Revoke "{name}"?`,values:{name:_},comment:`name: the user-chosen token nickname (e.g. 'CI deploy key')`})}),(0,k.jsx)(ie,{children:(0,k.jsx)(i,{id:`apiTokens.revoke.description`,message:`The token stops working immediately. Any client using it will start getting 401s on the next request.`})})]}),h?(0,k.jsx)(D,{variant:`destructive`,"data-testid":`api-tokens-revoke-error`,children:(0,k.jsx)(E,{children:c(h)})}):null,(0,k.jsxs)(me,{children:[(0,k.jsx)(te,{disabled:s,children:(0,k.jsx)(i,{id:`apiTokens.revoke.cancel`,message:`Cancel`})}),(0,k.jsx)(ee,{"data-testid":`api-tokens-revoke-confirm-button`,disabled:s,className:Le({variant:`destructive`}),onClick:e=>{e.preventDefault(),p&&(g(null),o(p.id,{onSuccess:()=>m(null),onError:e=>{g(e instanceof Error?e.message:A.revokeFallback)}}))},children:s?(0,k.jsx)(i,{id:`apiTokens.revoke.pending`,message:`Revoking…`}):(0,k.jsx)(i,{id:`apiTokens.revoke.confirm`,message:`Revoke`})})]})]})})]})}function kt({onSubmit:e,pending:t,error:n}){let r=S(),a=st({resolver:mt(Ct),defaultValues:{name:``,expires:`90`,scopeMode:`inherit`,scopesText:``},mode:`onBlur`}),o=dt({control:a.control,name:`scopeMode`});return(0,k.jsx)(pt,{...a,children:(0,k.jsxs)(`form`,{className:`flex flex-col gap-4 border-b pb-6`,onSubmit:a.handleSubmit(t=>{e(t),a.reset()}),children:[(0,k.jsx)(ct,{control:a.control,name:`name`,render:({field:e})=>(0,k.jsxs)(at,{children:[(0,k.jsx)(ut,{children:(0,k.jsx)(i,{id:`apiTokens.create.name`,message:`Name`})}),(0,k.jsx)(lt,{children:(0,k.jsx)(nt,{placeholder:r(A.namePlaceholder),disabled:t,"data-testid":`api-tokens-create-name-input`,...e})}),(0,k.jsx)(ft,{})]})}),(0,k.jsx)(ct,{control:a.control,name:`expires`,render:({field:e})=>(0,k.jsxs)(at,{children:[(0,k.jsx)(ut,{children:(0,k.jsx)(i,{id:`apiTokens.create.expires`,message:`Expires`})}),(0,k.jsxs)(We,{value:e.value,onValueChange:e.onChange,disabled:t,children:[(0,k.jsx)(lt,{children:(0,k.jsx)(ze,{className:`w-full`,onBlur:e.onBlur,"data-testid":`api-tokens-create-expires-select`,children:(0,k.jsx)(Ge,{})})}),(0,k.jsx)(Ie,{children:Object.keys(wt).map(e=>(0,k.jsx)(Re,{value:e,children:r(wt[e])},e))})]}),(0,k.jsx)(ft,{})]})}),(0,k.jsx)(ct,{control:a.control,name:`scopeMode`,render:({field:e})=>(0,k.jsxs)(at,{children:[(0,k.jsx)(ut,{id:`api-token-scope-label`,children:(0,k.jsx)(i,{id:`apiTokens.create.permissions`,message:`Permissions`})}),(0,k.jsx)(lt,{children:(0,k.jsxs)(m,{value:e.value,onValueChange:e.onChange,"aria-labelledby":`api-token-scope-label`,className:`gap-2`,children:[(0,k.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,k.jsx)(h,{value:`inherit`,id:`api-token-scope-inherit`,disabled:t,"data-testid":`api-tokens-create-scope-inherit-radio`}),(0,k.jsx)(ot,{htmlFor:`api-token-scope-inherit`,className:`font-normal`,children:(0,k.jsx)(i,{id:`apiTokens.create.scope.inherit`,message:`Inherit all your permissions`})})]}),(0,k.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,k.jsx)(h,{value:`restrict`,id:`api-token-scope-restrict`,disabled:t,"data-testid":`api-tokens-create-scope-restrict-radio`}),(0,k.jsx)(ot,{htmlFor:`api-token-scope-restrict`,className:`font-normal`,children:(0,k.jsx)(i,{id:`apiTokens.create.scope.restrict`,message:`Restrict to specific capabilities`})})]})]})}),(0,k.jsx)(ft,{})]})}),o===`restrict`?(0,k.jsx)(ct,{control:a.control,name:`scopesText`,render:({field:e})=>(0,k.jsxs)(at,{children:[(0,k.jsx)(ut,{children:(0,k.jsx)(i,{id:`apiTokens.create.capabilities`,message:`Capabilities`})}),(0,k.jsx)(lt,{children:(0,k.jsx)(g,{rows:4,placeholder:r(A.capabilitiesPlaceholder),disabled:t,"data-testid":`api-tokens-create-scopes-textarea`,className:`font-mono`,...e})}),(0,k.jsx)(`p`,{className:`text-muted-foreground text-xs`,children:(0,k.jsx)(i,{id:`apiTokens.create.capabilities.help`,message:`One capability per line. The token can never exceed the caps your role grants — this is an additional narrowing.`})}),(0,k.jsx)(ft,{})]})}):null,n?(0,k.jsx)(D,{variant:`destructive`,"data-testid":`api-tokens-create-error`,children:(0,k.jsx)(E,{children:r(n)})}):null,(0,k.jsx)(`div`,{className:`flex justify-end`,children:(0,k.jsxs)(T,{type:`submit`,disabled:t,"data-testid":`api-tokens-create-submit`,children:[(0,k.jsx)(oe,{className:`size-4`}),t?(0,k.jsx)(i,{id:`apiTokens.create.submit.pending`,message:`Minting…`}):(0,k.jsx)(i,{id:`apiTokens.create.submit.idle`,message:`Mint token`})]})})]})})}function At({secret:e,name:t,onClose:n}){let r=S(),[a,o]=(0,O.useState)(!1),s=async()=>{if(e)try{await v(e),o(!0),setTimeout(()=>o(!1),2e3)}catch{let e=document.getElementById(`api-tokens-secret-input`);e instanceof HTMLInputElement&&(e.focus(),e.select())}};return(0,k.jsx)(re,{open:e!==null,onOpenChange:e=>{e||(o(!1),n())},children:(0,k.jsxs)(b,{"data-testid":`api-tokens-secret-dialog`,children:[(0,k.jsxs)(y,{children:[(0,k.jsx)(ae,{children:(0,k.jsx)(i,{id:`apiTokens.secret.title`,message:`Token "{name}" minted`,values:{name:(0,k.jsx)(`bdi`,{children:t})},comment:`name: the user-chosen token nickname (e.g. 'CI deploy key')`})}),(0,k.jsx)(ie,{children:(0,k.jsx)(i,{id:`apiTokens.secret.description`,message:`Copy the secret now. We won't show it again — losing it means revoking and re-minting.`})})]}),(0,k.jsxs)(`div`,{className:`flex gap-2`,children:[(0,k.jsx)(nt,{id:`api-tokens-secret-input`,readOnly:!0,value:e??``,onFocus:e=>e.currentTarget.select(),"data-testid":`api-tokens-secret-input`,className:`bg-muted text-muted-foreground font-mono`}),(0,k.jsx)(T,{type:`button`,variant:`outline`,onClick:()=>{s()},"data-testid":`api-tokens-secret-copy-button`,"aria-label":r(A.copyAria),children:a?(0,k.jsx)(Ke,{className:`size-4`}):(0,k.jsx)(_,{className:`size-4`})})]}),(0,k.jsx)(me,{children:(0,k.jsx)(ee,{onClick:n,"data-testid":`api-tokens-secret-done-button`,children:(0,k.jsx)(i,{id:`apiTokens.secret.done`,message:`Done`})})})]})})}function jt({when:e}){let{formatRelative:t}=Ae();return e===null?(0,k.jsx)(i,{id:`apiTokens.never`,message:`Never`}):(0,k.jsx)(k.Fragment,{children:t(vt(e))})}function Mt({scopes:e}){return e===null?(0,k.jsx)(x,{variant:`outline`,"data-testid":`api-tokens-scope-inherit`,children:(0,k.jsx)(i,{id:`apiTokens.scope.inheritRole`,message:`Inherit role`})}):e.length===0?(0,k.jsx)(x,{variant:`outline`,"data-testid":`api-tokens-scope-empty`,children:(0,k.jsx)(i,{id:`apiTokens.scope.empty`,message:`No caps`})}):(0,k.jsx)(`div`,{className:`flex flex-wrap gap-1`,children:e.map(e=>(0,k.jsx)(x,{variant:`secondary`,"data-testid":`api-tokens-scope-${e}`,children:e},e))})}function Nt({currentCode:e,manifest:t,onSelect:n}){let{i18n:i}=r(),a=t.i18n?.locales??[];return(0,k.jsxs)(We,{value:e,onValueChange:n,children:[(0,k.jsx)(ze,{"data-testid":`locale-switcher-trigger`,"aria-label":i._(`profile.language.aria`,void 0,{message:`Language`}),children:(0,k.jsx)(Ge,{})}),(0,k.jsx)(Ie,{children:a.map(e=>(0,k.jsx)(Re,{value:e.code,"data-testid":`locale-switcher-option-${e.code}`,children:e.label},e.code))})]})}function Pt({userLocale:e}){let t=Ye(),n=typeof e==`string`?e:t.i18n?.defaultLocale??`en`,r=l({mutationFn:e=>c.user.setLocale.call({code:e}),onSuccess:()=>window.location.reload()});return(0,k.jsxs)(Ne,{"data-testid":`language-card`,children:[(0,k.jsxs)(C,{children:[(0,k.jsx)(je,{children:(0,k.jsx)(i,{id:`profile.language.title`,message:`Language`})}),(0,k.jsx)(Me,{children:(0,k.jsx)(i,{id:`profile.language.description`,message:`Your admin chrome renders in this language. The page reloads after you switch so the new translations apply everywhere.`})})]}),(0,k.jsxs)(w,{className:`flex flex-col gap-3`,children:[(0,k.jsx)(Nt,{currentCode:n,manifest:t,onSelect:r.mutate}),r.isError?(0,k.jsx)(D,{variant:`destructive`,children:(0,k.jsx)(E,{children:(0,k.jsx)(i,{id:`profile.language.error`,message:`Couldn't switch language. Please try again.`})})}):null]})]})}var j={unnamed:{id:`profile.passkeys.unnamed`},transportInternal:{id:`profile.passkeys.transport.internal`},transportHybrid:{id:`profile.passkeys.transport.hybrid`},transportSecurityKey:{id:`profile.passkeys.transport.securityKey`},nameEmpty:{id:`profile.passkeys.rename.nameEmpty`},notFound:{id:`profile.passkeys.notFound`},lastCredential:{id:`profile.passkeys.lastCredential`},renameFallback:{id:`profile.passkeys.rename.fallback`},deleteFallback:{id:`profile.passkeys.delete.fallback`},enrollCancelled:{id:`profile.passkeys.enroll.cancelled`},enrollAlreadyRegistered:{id:`profile.passkeys.enroll.alreadyRegistered`},enrollNoAuthenticator:{id:`profile.passkeys.enroll.noAuthenticator`},enrollNetworkError:{id:`profile.passkeys.enroll.networkError`},enrollEmailMismatch:{id:`profile.passkeys.enroll.emailMismatch`},enrollFallback:{id:`profile.passkeys.enroll.fallback`}};function Ft({userEmail:e}){let t=S(),n=s(),[r,a]=(0,O.useState)(null),u=o(c.auth.credentials.list.queryOptions({input:{}})),d=()=>n.invalidateQueries({queryKey:c.auth.credentials.list.key()}),f=l({mutationFn:()=>it({email:e}),onMutate:()=>{a(null)},onSuccess:()=>d(),onError:e=>{a(Bt(e))}});return(0,k.jsxs)(Ne,{"data-testid":`profile-passkeys-card`,children:[(0,k.jsxs)(C,{children:[(0,k.jsx)(je,{children:(0,k.jsx)(i,{id:`profile.passkeys.title`,message:`Passkeys`})}),(0,k.jsx)(Me,{children:(0,k.jsx)(i,{id:`profile.passkeys.description`,message:`Devices that can sign in to this account. Add a new one before deleting an old one — at least one passkey must remain.`})})]}),(0,k.jsxs)(w,{className:`flex flex-col gap-4`,children:[u.isPending?(0,k.jsx)(`p`,{className:`text-muted-foreground text-sm`,children:(0,k.jsx)(i,{id:`profile.passkeys.loading`,message:`Loading…`})}):u.error?(0,k.jsx)(D,{variant:`destructive`,children:(0,k.jsx)(E,{children:(0,k.jsx)(i,{id:`profile.passkeys.loadFailed`,message:`Couldn't load your passkeys. Refresh and try again.`})})}):u.data.length>0?(0,k.jsx)(`ul`,{className:`divide-border divide-y`,"data-testid":`profile-passkeys-list`,children:u.data.map(e=>(0,k.jsx)(It,{cred:e,isLast:u.data.length===1,onChanged:d},e.id))}):(0,k.jsx)(`p`,{className:`text-muted-foreground text-sm`,children:(0,k.jsx)(i,{id:`profile.passkeys.empty`,message:`No passkeys registered. Add one to enable sign-in.`})}),r?(0,k.jsx)(D,{variant:`destructive`,"data-testid":`profile-passkeys-enroll-error`,children:(0,k.jsx)(E,{children:t(r)})}):null,(0,k.jsx)(`div`,{className:`flex justify-end`,children:(0,k.jsx)(T,{type:`button`,variant:`outline`,onClick:()=>{f.mutate()},disabled:f.isPending,"data-testid":`profile-passkeys-enroll-button`,children:f.isPending?(0,k.jsx)(i,{id:`profile.passkeys.enroll.pending`,message:`Adding…`}):(0,k.jsx)(i,{id:`profile.passkeys.enroll.idle`,message:`Add passkey`})})})]})]})}function It({cred:e,isLast:t,onChanged:n}){let r=S(),{formatDate:a}=Ae(),o=vt(e.createdAt),s=vt(e.lastUsedAt),[u,d]=(0,O.useState)(!1),[f,p]=(0,O.useState)(e.name??``),[m,h]=(0,O.useState)(!1),[g,_]=(0,O.useState)(null),[v,oe]=(0,O.useState)(null),se=l({mutationFn:t=>c.auth.credentials.rename.call({id:e.id,name:t}),onMutate:()=>{_(null)},onSuccess:async()=>{d(!1),await n()},onError:e=>{_(Rt(e))}}),ce=l({mutationFn:()=>c.auth.credentials.delete.call({id:e.id}),onMutate:()=>{oe(null)},onSuccess:async()=>{h(!1),await n()},onError:e=>{oe(zt(e))}}),le=e.name??r(j.unnamed),de=Lt(e);return(0,k.jsxs)(`li`,{className:`flex flex-col gap-2 py-3`,"data-testid":`profile-passkey-row`,children:[(0,k.jsxs)(`div`,{className:`flex items-start justify-between gap-3`,children:[(0,k.jsx)(`div`,{className:`flex min-w-0 flex-1 flex-col gap-1`,children:u?(0,k.jsxs)(`form`,{className:`flex flex-col gap-2`,onSubmit:e=>{e.preventDefault();let t=f.trim();if(t.length===0){_(j.nameEmpty);return}se.mutate(t)},children:[(0,k.jsxs)(ne,{className:`gap-2`,children:[(0,k.jsx)(ue,{htmlFor:`passkey-name-${e.id}`,className:`text-muted-foreground text-xs`,children:(0,k.jsx)(i,{id:`profile.passkeys.rename.label`,message:`Rename passkey`})}),(0,k.jsx)(nt,{id:`passkey-name-${e.id}`,value:f,maxLength:64,onChange:e=>{p(e.target.value)},"data-testid":`profile-passkey-rename-input`,autoFocus:!0})]}),g?(0,k.jsx)(D,{variant:`destructive`,"data-testid":`profile-passkey-rename-error`,children:(0,k.jsx)(E,{children:r(g)})}):null,(0,k.jsxs)(`div`,{className:`flex justify-end gap-2`,children:[(0,k.jsx)(T,{type:`button`,variant:`outline`,size:`sm`,onClick:()=>{d(!1),p(e.name??``),_(null)},disabled:se.isPending,children:(0,k.jsx)(i,{id:`profile.passkeys.rename.cancel`,message:`Cancel`})}),(0,k.jsx)(T,{type:`submit`,size:`sm`,disabled:se.isPending,"data-testid":`profile-passkey-rename-submit`,children:se.isPending?(0,k.jsx)(i,{id:`profile.passkeys.rename.pending`,message:`Saving…`}):(0,k.jsx)(i,{id:`profile.passkeys.rename.save`,message:`Save`})})]})]}):(0,k.jsxs)(k.Fragment,{children:[(0,k.jsx)(`p`,{className:`text-sm font-medium`,"data-testid":`profile-passkey-name`,children:le}),(0,k.jsxs)(`div`,{className:`text-muted-foreground flex flex-wrap gap-2 text-xs`,children:[de?(0,k.jsx)(`span`,{children:r(de)}):null,e.isBackedUp?(0,k.jsx)(x,{variant:`secondary`,children:(0,k.jsx)(i,{id:`profile.passkeys.synced`,message:`Synced`})}):null,(0,k.jsx)(`span`,{children:(0,k.jsx)(i,{id:`profile.passkeys.added`,message:`Added {date}`,values:{date:a(o)},comment:`date: a locale-formatted date string`})}),s.getTime()===o.getTime()?null:(0,k.jsx)(`span`,{children:(0,k.jsx)(i,{id:`profile.passkeys.lastUsed`,message:`Last used {date}`,values:{date:a(s)},comment:`date: a locale-formatted date string`})})]})]})}),u?null:(0,k.jsxs)(`div`,{className:`flex shrink-0 gap-1`,children:[(0,k.jsx)(T,{type:`button`,variant:`ghost`,size:`sm`,onClick:()=>{d(!0),p(e.name??``)},"data-testid":`profile-passkey-rename-button`,children:(0,k.jsx)(i,{id:`profile.passkeys.rename.button`,message:`Rename`})}),(0,k.jsx)(T,{type:`button`,variant:`ghost`,size:`sm`,className:`text-destructive hover:text-destructive`,onClick:()=>{h(!0)},disabled:t,title:t?r(j.lastCredential):void 0,"data-testid":`profile-passkey-delete-button`,children:(0,k.jsx)(i,{id:`profile.passkeys.delete.button`,message:`Delete`})})]})]}),(0,k.jsx)(re,{open:m,onOpenChange:e=>{e||(h(!1),oe(null))},children:(0,k.jsxs)(b,{children:[(0,k.jsxs)(y,{children:[(0,k.jsx)(ae,{children:(0,k.jsx)(i,{id:`profile.passkeys.delete.title`,message:`Delete this passkey?`})}),(0,k.jsx)(ie,{children:(0,k.jsx)(i,{id:`profile.passkeys.delete.description`,message:`The device that registered "{name}" will no longer be able to sign in. You can re-enrol it later.`,values:{name:(0,k.jsx)(`bdi`,{children:le})},comment:`name: the user-chosen passkey nickname (e.g. 'MacBook', 'iPhone')`})})]}),v?(0,k.jsx)(D,{variant:`destructive`,"data-testid":`profile-passkey-delete-error`,children:(0,k.jsx)(E,{children:r(v)})}):null,(0,k.jsxs)(me,{children:[(0,k.jsx)(te,{disabled:ce.isPending,children:(0,k.jsx)(i,{id:`profile.passkeys.delete.cancel`,message:`Cancel`})}),(0,k.jsx)(ee,{"data-testid":`profile-passkey-delete-confirm`,className:Le({variant:`destructive`}),disabled:ce.isPending,onClick:e=>{e.preventDefault(),ce.mutate()},children:ce.isPending?(0,k.jsx)(i,{id:`profile.passkeys.delete.pending`,message:`Deleting…`}):(0,k.jsx)(i,{id:`profile.passkeys.delete.confirm`,message:`Delete passkey`})})]})]})})]})}function Lt(e){let t=e.transports;return!t||t.length===0?null:t.includes(`internal`)?j.transportInternal:t.includes(`hybrid`)?j.transportHybrid:j.transportSecurityKey}function Rt(e){return gt(e)===`NOT_FOUND`?j.notFound:e instanceof Error?e.message:j.renameFallback}function zt(e){return ht(e)===`last_credential`?j.lastCredential:gt(e)===`NOT_FOUND`?j.notFound:e instanceof Error?e.message:j.deleteFallback}function Bt(e){if(e instanceof rt)switch(e.code){case`user_cancelled`:return j.enrollCancelled;case`credential_already_registered`:return j.enrollAlreadyRegistered;case`no_authenticator`:return j.enrollNoAuthenticator;case`network_error`:return j.enrollNetworkError;case`email_mismatch`:return j.enrollEmailMismatch}return e instanceof Error?e.message:j.enrollFallback}var Vt=`2.0.10`,Ht=500,Ut=`user-agent`,Wt=``,Gt=`?`,M={FUNCTION:`function`,OBJECT:`object`,STRING:`string`,UNDEFINED:`undefined`},N=`browser`,P=`cpu`,F=`device`,I=`engine`,L=`os`,Kt=`result`,R=`name`,z=`type`,B=`vendor`,V=`version`,H=`architecture`,qt=`major`,U=`model`,Jt=`console`,W=`mobile`,G=`tablet`,K=`smarttv`,q=`wearable`,Yt=`xr`,Xt=`embedded`,Zt=`fetcher`,J=`inapp`,Qt=`brands`,$t=`formFactors`,en=`fullVersionList`,tn=`platform`,nn=`platformVersion`,rn=`bitness`,an=`sec-ch-ua`,on=an+`-full-version-list`,sn=an+`-arch`,cn=an+`-`+rn,ln=an+`-form-factors`,un=an+`-`+W,dn=an+`-`+U,fn=an+`-`+tn,pn=fn+`-version`,mn=[Qt,en,W,U,tn,nn,H,$t,rn],hn=`Amazon`,gn=`Apple`,_n=`ASUS`,vn=`BlackBerry`,yn=`Google`,bn=`Huawei`,xn=`Lenovo`,Sn=`Honor`,Cn=`LG`,wn=`Microsoft`,Tn=`Motorola`,En=`Nvidia`,Dn=`OnePlus`,On=`OPPO`,kn=`Samsung`,An=`Sharp`,jn=`Sony`,Mn=`Xiaomi`,Nn=`Zebra`,Pn=`Chrome`,Fn=`Chromium`,In=`Chromecast`,Ln=`Edge`,Rn=`Firefox`,zn=`Opera`,Bn=`Facebook`,Vn=`Sogou`,Hn=`Mobile `,Un=` Browser`,Wn=`Windows`,Y=typeof window!==M.UNDEFINED&&window.navigator?window.navigator:void 0,Gn=Y&&Y.userAgentData?Y.userAgentData:void 0,Kn=function(e,t){var n={},r=t;if(!Yn(t))for(var i in r={},t)for(var a in t[i])r[a]=t[i][a].concat(r[a]?r[a]:[]);for(var o in e)n[o]=r[o]&&r[o].length%2==0?r[o].concat(e[o]):e[o];return n},qn=function(e){for(var t={},n=0;n<e.length;n++)t[e[n].toUpperCase()]=e[n];return t},Jn=function(e,t){if(typeof e===M.OBJECT&&e.length>0){for(var n in e)if(Qn(t)==Qn(e[n]))return!0;return!1}return Xn(e)?Qn(t)==Qn(e):!1},Yn=function(e,t){for(var n in e)return/^(browser|cpu|device|engine|os)$/.test(n)||(t?Yn(e[n]):!1)},Xn=function(e){return typeof e===M.STRING},Zn=function(e){if(e){for(var t=[],n=er(e).split(`,`),r=0;r<n.length;r++)if(n[r].indexOf(`;`)>-1){var i=nr(n[r]).split(`;v=`);t[r]={brand:i[0],version:i[1]}}else t[r]=nr(n[r]);return t}},Qn=function(e){return Xn(e)?e.toLowerCase():e},$n=function(e){return Xn(e)?tr(/[^\d\.]/g,e).split(`.`)[0]:void 0},er=function(e){return Xn(e)?nr(tr(/\\?\"/g,e),Ht):void 0},X=function(e){for(var t in e)if(e.hasOwnProperty(t)){var n=e[t];typeof n==M.OBJECT&&n.length==2?this[n[0]]=n[1]:this[n]=void 0}return this},tr=function(e,t){return Xn(t)?t.replace(e,Wt):t},nr=function(e,t){return e=tr(/^\s\s*/,String(e)),typeof t===M.UNDEFINED?e:e.substring(0,t)},rr=function(e,t){if(!(!e||!t))for(var n=0,r,i,a,o,s,c;n<t.length&&!s;){var l=t[n],u=t[n+1];for(r=i=0;r<l.length&&!s&&l[r];)if(s=l[r++].exec(e),s)for(a=0;a<u.length;a++)c=s[++i],o=u[a],typeof o===M.OBJECT&&o.length>0?o.length===2?typeof o[1]==M.FUNCTION?this[o[0]]=o[1].call(this,c):this[o[0]]=o[1]:o.length>=3&&(typeof o[1]===M.FUNCTION&&!(o[1].exec&&o[1].test)?o.length>3?this[o[0]]=c?o[1].apply(this,o.slice(2)):void 0:this[o[0]]=c?o[1].call(this,c,o[2]):void 0:o.length==3?this[o[0]]=c?c.replace(o[1],o[2]):void 0:o.length==4?this[o[0]]=c?o[3].call(this,c.replace(o[1],o[2])):void 0:o.length>4&&(this[o[0]]=c?o[3].apply(this,[c.replace(o[1],o[2])].concat(o.slice(4))):void 0)):this[o]=c||void 0;n+=2}},ir=function(e,t){return t.test.test(e)?t.ifTrue:t.ifFalse},Z=function(e,t){for(var n in t)if(typeof t[n]===M.OBJECT&&t[n].length>0){for(var r=0;r<t[n].length;r++)if(Jn(t[n][r],e))return n===Gt?void 0:n}else if(Jn(t[n],e))return n===Gt?void 0:n;return t.hasOwnProperty(`*`)?t[`*`]:e},ar={ME:`4.90`,"NT 3.51":`3.51`,"NT 4.0":`4.0`,2e3:[`5.0`,`5.01`],XP:[`5.1`,`5.2`],Vista:`6.0`,7:`6.1`,8:`6.2`,"8.1":`6.3`,10:[`6.4`,`10.0`],NT:``},or={embedded:`Automotive`,mobile:`Mobile`,tablet:[`Tablet`,`EInk`],smarttv:`TV`,wearable:`Watch`,xr:[`VR`,`XR`],"?":[`Desktop`,`Unknown`],"*":void 0},sr={Chrome:`Google Chrome`,Edge:`Microsoft Edge`,"Edge WebView2":`Microsoft Edge WebView2`,"Chrome WebView":`Android WebView`,"Chrome Headless":`HeadlessChrome`,"Huawei Browser":`HuaweiBrowser`,"MIUI Browser":`Miui Browser`,"Opera Mobi":`OperaMobile`,Yandex:`YaBrowser`},cr={browser:[[/\b(?:crmo|crios)\/([\w\.]+)/i],[V,[R,Hn+`Chrome`]],[/webview.+edge\/([\w\.]+)/i],[V,[R,Ln+` WebView`],[z,J]],[/edg(?:e|ios|a)?\/([\w\.]+)/i],[V,[R,`Edge`]],[/(opera mini)\/([-\w\.]+)/i,/(opera [mobiletab]{3,6})\b.+version\/([-\w\.]+)/i,/(opera)(?:.+version\/|[\/ ]+)([\w\.]+)/i],[R,V],[/opios[\/ ]+([\w\.]+)/i],[V,[R,zn+` Mini`]],[/\bop(?:rg)?x\/([\w\.]+)/i],[V,[R,zn+` GX`]],[/\bopr\/([\w\.]+)/i],[V,[R,zn]],[/\bb[ai]*d(?:uhd|[ub]*[aekoprswx]{5,6})[\/ ]?([\w\.]+)/i],[V,[R,`Baidu`]],[/\b(?:mxbrowser|mxios|myie2)\/?([-\w\.]*)\b/i],[V,[R,`Maxthon`]],[/(kindle)\/([\w\.]+)/i,/(lunascape|maxthon|netfront|jasmine|blazer|sleipnir)[\/ ]?([\w\.]*)/i,/(avant|iemobile|slim(?:browser|boat|jet))[\/ ]?([\d\.]*)/i,/(?:ms|\()(ie) ([\w\.]+)/i,/(atlas|flock|rockmelt|midori|epiphany|silk|skyfire|bolt|iron|vivaldi|iridium|phantomjs|bowser|qupzilla|falkon|rekonq|puffin|whale(?!.+naver)|qqbrowserlite|duckduckgo|klar|helio|(?=comodo_)?dragon|otter|dooble|(?:hi|lg |ovi|qute)browser|palemoon)\/v?([-\w\.]+)/i,/(brave)(?: chrome)?\/([\d\.]+)/i,/(aloha|heytap|ovi|115|surf|qwant)browser\/([\d\.]+)/i,/(qwant)(?:ios|mobile)\/([\d\.]+)/i,/(ecosia|weibo)(?:__| \w+@)([\d\.]+)/i],[R,V],[/quark(?:pc)?\/([-\w\.]+)/i],[V,[R,`Quark`]],[/\bddg\/([\w\.]+)/i],[V,[R,`DuckDuckGo`]],[/(?:\buc? ?browser|(?:juc.+)ucweb| ucpc)[\/ ]?([\w\.]+)/i],[V,[R,`UCBrowser`]],[/microm.+\bqbcore\/([\w\.]+)/i,/\bqbcore\/([\w\.]+).+microm/i,/micromessenger\/([\w\.]+)/i],[V,[R,`WeChat`]],[/konqueror\/([\w\.]+)/i],[V,[R,`Konqueror`]],[/trident.+rv[: ]([\w\.]{1,9})\b.+like gecko/i],[V,[R,`IE`]],[/ya(?:search)?browser\/([\w\.]+)/i],[V,[R,`Yandex`]],[/slbrowser\/([\w\.]+)/i],[V,[R,`Smart `+xn+Un]],[/(av(?:ast|g|ira))\/([\w\.]+)/i],[[R,/(.+)/,`$1 Secure`+Un],V],[/norton\/([\w\.]+)/i],[V,[R,`Norton Private`+Un]],[/\bfocus\/([\w\.]+)/i],[V,[R,Rn+` Focus`]],[/ mms\/([\w\.]+)$/i],[V,[R,zn+` Neon`]],[/ opt\/([\w\.]+)$/i],[V,[R,zn+` Touch`]],[/coc_coc\w+\/([\w\.]+)/i],[V,[R,`Coc Coc`]],[/dolfin\/([\w\.]+)/i],[V,[R,`Dolphin`]],[/coast\/([\w\.]+)/i],[V,[R,zn+` Coast`]],[/miuibrowser\/([\w\.]+)/i],[V,[R,`MIUI`+Un]],[/fxios\/([\w\.-]+)/i],[V,[R,Hn+Rn]],[/\bqihoobrowser\/?([\w\.]*)/i],[V,[R,`360`]],[/\b(qq)\/([\w\.]+)/i],[[R,/(.+)/,`$1Browser`],V],[/(oculus|sailfish|huawei|vivo|pico)browser\/([\w\.]+)/i],[[R,/(.+)/,`$1`+Un],V],[/ HBPC\/([\w\.]+)/],[V,[R,bn+Un]],[/samsungbrowser\/([\w\.]+)/i],[V,[R,kn+` Internet`]],[/metasr[\/ ]?([\d\.]+)/i],[V,[R,Vn+` Explorer`]],[/(sogou)mo\w+\/([\d\.]+)/i],[[R,Vn+` Mobile`],V],[/(electron)\/([\w\.]+) safari/i,/(tesla)(?: qtcarbrowser|\/(20\d\d\.[-\w\.]+))/i,/m?(qqbrowser|2345(?=browser|chrome|explorer))\w*[\/ ]?v?([\w\.]+)/i],[R,V],[/(lbbrowser|luakit|rekonq|steam(?= (clie|tenf|gameo)))/i],[R],[/ome\/([\w\.]+).+(iron(?= saf)|360(?=[es]e$))/i],[V,R],[/((?:fban\/fbios|fb_iab\/fb4a)(?!.+fbav)|;fbav\/([\w\.]+);)/i],[[R,Bn],V,[z,J]],[/(kakao(?:talk|story))[\/ ]([\w\.]+)/i,/(naver)\(.*?(\d+\.[\w\.]+).*\)/i,/(daum)apps[\/ ]([\w\.]+)/i,/safari (line)\/([\w\.]+)/i,/\b(line)\/([\w\.]+)\/iab/i,/(alipay)client\/([\w\.]+)/i,/(twitter)(?:and| f.+e\/([\w\.]+))/i,/(bing)(?:web|sapphire)\/([\w\.]+)/i,/(instagram|snapchat|klarna)[\/ ]([-\w\.]+)/i],[R,V,[z,J]],[/\bgsa\/([\w\.]+) .*safari\//i],[V,[R,`GSA`],[z,J]],[/(?:musical_ly|trill)(?:.+app_?version\/|_)([\w\.]+)/i],[V,[R,`TikTok`],[z,J]],[/\[(linkedin)app\]/i],[R,[z,J]],[/(zalo(?:app)?)[\/\sa-z]*([\w\.-]+)/i],[[R,/(.+)/,`Zalo`],V,[z,J]],[/(chromium)[\/ ]([-\w\.]+)/i],[R,V],[/ome-(lighthouse)$/i],[R,[z,Zt]],[/headlesschrome(?:\/([\w\.]+)| )/i],[V,[R,Pn+` Headless`]],[/wv\).+chrome\/([\w\.]+).+edgw\//i],[V,[R,Ln+` WebView2`],[z,J]],[/; wv\).+(chrome)\/([\w\.]+)/i],[[R,Pn+` WebView`],V,[z,J]],[/droid.+ version\/([\w\.]+)\b.+(?:mobile safari|safari)/i],[V,[R,`Android`+Un]],[/chrome\/([\w\.]+) mobile/i],[V,[R,Hn+`Chrome`]],[/(chrome|omniweb|arora|[tizenoka]{5} ?browser)\/v?([\w\.]+)/i],[R,V],[/version\/([\w\.\,]+) .*mobile(?:\/\w+ | ?)safari/i],[V,[R,Hn+`Safari`]],[/iphone .*mobile(?:\/\w+ | ?)safari/i],[[R,Hn+`Safari`]],[/version\/([\w\.\,]+) .*(safari)/i],[V,R],[/webkit.+?(mobile ?safari|safari)(\/[\w\.]+)/i],[R,[V,`1`]],[/(webkit|khtml)\/([\w\.]+)/i],[R,V],[/(?:mobile|tablet);.*(firefox)\/([\w\.-]+)/i],[[R,Hn+Rn],V],[/(navigator|netscape\d?)\/([-\w\.]+)/i],[[R,`Netscape`],V],[/(wolvic|librewolf)\/([\w\.]+)/i],[R,V],[/mobile vr; rv:([\w\.]+)\).+firefox/i],[V,[R,Rn+` Reality`]],[/ekiohf.+(flow)\/([\w\.]+)/i,/(swiftfox)/i,/(icedragon|iceweasel|camino|chimera|fennec|maemo browser|minimo|conkeror)[\/ ]?([\w\.\+]+)/i,/(seamonkey|k-meleon|icecat|iceape|firebird|phoenix|basilisk|waterfox)\/([-\w\.]+)$/i,/(firefox)\/([\w\.]+)/i,/(mozilla)\/([\w\.]+(?= .+rv\:.+gecko\/\d+)|[0-4][\w\.]+(?!.+compatible))/i,/(amaya|dillo|doris|icab|ladybird|lynx|mosaic|netsurf|obigo|polaris|w3m|(?:go|ice|up)[\. ]?browser)[-\/ ]?v?([\w\.]+)/i,/\b(links) \(([\w\.]+)/i],[R,[V,/_/g,`.`]],[/(cobalt)\/([\w\.]+)/i],[R,[V,/[^\d\.]+./,Wt]]],cpu:[[/\b((amd|x|x86[-_]?|wow|win)64)\b/i],[[H,`amd64`]],[/(ia32(?=;))/i,/\b((i[346]|x)86)(pc)?\b/i],[[H,`ia32`]],[/\b(aarch64|arm(v?[89]e?l?|_?64))\b/i],[[H,`arm64`]],[/\b(arm(v[67])?ht?n?[fl]p?)\b/i],[[H,`armhf`]],[/( (ce|mobile); ppc;|\/[\w\.]+arm\b)/i],[[H,`arm`]],[/ sun4\w[;\)]/i],[[H,`sparc`]],[/\b(avr32|ia64(?=;)|68k(?=\))|\barm(?=v([1-7]|[5-7]1)l?|;|eabi)|(irix|mips|sparc)(64)?\b|pa-risc)/i,/((ppc|powerpc)(64)?)( mac|;|\))/i,/(?:osf1|[freopnt]{3,4}bsd) (alpha)/i],[[H,/ower/,Wt,Qn]],[/mc680.0/i],[[H,`68k`]],[/winnt.+\[axp/i],[[H,`alpha`]]],device:[[/\b(sch-i[89]0\d|shw-m380s|sm-[ptx]\w{2,4}|gt-[pn]\d{2,4}|sgh-t8[56]9|nexus 10)/i],[U,[B,kn],[z,G]],[/\b((?:s[cgp]h|gt|sm)-(?![lr])\w+|sc[g-]?[\d]+a?|galaxy nexus)/i,/samsung[- ]((?!sm-[lr]|browser)[-\w]+)/i,/sec-(sgh\w+)/i],[U,[B,kn],[z,W]],[/(?:\/|\()(ip(?:hone|od)[\w, ]*)[\/\);]/i],[U,[B,gn],[z,W]],[/\b(?:ios|apple\w+)\/.+[\(\/](ipad)/i,/\b(ipad)[\d,]*[;\] ].+(mac |i(pad)?)os/i],[U,[B,gn],[z,G]],[/(macintosh);/i],[U,[B,gn]],[/\b(sh-?[altvz]?\d\d[a-ekm]?)/i],[U,[B,An],[z,W]],[/\b((?:brt|eln|hey2?|gdi|jdn)-a?[lnw]09|(?:ag[rm]3?|jdn2|kob2)-a?[lw]0[09]hn)(?: bui|\)|;)/i],[U,[B,Sn],[z,G]],[/honor([-\w ]+)[;\)]/i],[U,[B,Sn],[z,W]],[/\b((?:ag[rs][2356]?k?|bah[234]?|bg[2o]|bt[kv]|cmr|cpn|db[ry]2?|jdn2|got|kob2?k?|mon|pce|scm|sht?|[tw]gr|vrd)-[ad]?[lw][0125][09]b?|605hw|bg2-u03|(?:gem|fdr|m2|ple|t1)-[7a]0[1-4][lu]|t1-a2[13][lw]|mediapad[\w\. ]*(?= bui|\)))\b(?!.+d\/s)/i],[U,[B,bn],[z,G]],[/(?:huawei) ?([-\w ]+)[;\)]/i,/\b(nexus 6p|\w{2,4}e?-[atu]?[ln][\dx][\dc][adnt]?)\b(?!.+d\/s)/i],[U,[B,bn],[z,W]],[/oid[^\)]+; (2[\dbc]{4}(182|283|rp\w{2})[cgl]|m2105k81a?c)(?: bui|\))/i,/\b(?:xiao)?((?:red)?mi[-_ ]?pad[\w- ]*)(?: bui|\))/i],[[U,/_/g,` `],[B,Mn],[z,G]],[/\b; (\w+) build\/hm\1/i,/\b(hm[-_ ]?note?[_ ]?(?:\d\w)?) bui/i,/oid[^\)]+; (redmi[\-_ ]?(?:note|k)?[\w_ ]+|m?[12]\d[01]\d\w{3,6}|poco[\w ]+|(shark )?\w{3}-[ah]0|qin ?[1-3](s\+|ultra| pro)?)( bui|; wv|\))/i,/\b(mi[-_ ]?(?:a\d|one|one[_ ]plus|note|max|cc)?[_ ]?(?:\d{0,2}\w?)[_ ]?(?:plus|se|lite|pro)?( 5g|lte)?)(?: bui|\))/i,/; ([\w ]+) miui\/v?\d/i],[[U,/_/g,` `],[B,Mn],[z,W]],[/droid.+; (cph2[3-6]\d[13579]|((gm|hd)19|(ac|be|in|kb)20|(d[en]|eb|le|mt)21|ne22)[0-2]\d|p[g-l]\w[1m]10)\b/i,/(?:one)?(?:plus)? (a\d0\d\d)(?: b|\))/i],[U,[B,Dn],[z,W]],[/; (\w+) bui.+ oppo/i,/\b(cph[12]\d{3}|p(?:af|c[al]|d\w|e[ar])[mt]\d0|x9007|a101op)\b/i],[U,[B,On],[z,W]],[/\b(opd2(\d{3}a?))(?: bui|\))/i],[U,[B,Z,{OnePlus:[`203`,`304`,`403`,`404`,`413`,`415`],"*":On}],[z,G]],[/(vivo (5r?|6|8l?|go|one|s|x[il]?[2-4]?)[\w\+ ]*)(?: bui|\))/i],[U,[B,`BLU`],[z,W]],[/; vivo (\w+)(?: bui|\))/i,/\b(v[12]\d{3}\w?[at])(?: bui|;)/i],[U,[B,`Vivo`],[z,W]],[/\b(rmx[1-3]\d{3})(?: bui|;|\))/i],[U,[B,`Realme`],[z,W]],[/(ideatab[-\w ]+|602lv|d-42a|a101lv|a2109a|a3500-hv|s[56]000|pb-6505[my]|tb-?x?\d{3,4}(?:f[cu]|xu|[av])|yt\d?-[jx]?\d+[lfmx])( bui|;|\)|\/)/i,/lenovo ?(b[68]0[08]0-?[hf]?|tab(?:[\w- ]+?)|tb[\w-]{6,7})( bui|;|\)|\/)/i],[U,[B,xn],[z,G]],[/lenovo[-_ ]?([-\w ]+?)(?: bui|\)|\/)/i],[U,[B,xn],[z,W]],[/\b(milestone|droid(?:[2-4x]| (?:bionic|x2|pro|razr))?:?( 4g)?)\b[\w ]+build\//i,/\bmot(?:orola)?[- ]([\w\s]+)(\)| bui)/i,/((?:moto(?! 360)[-\w\(\) ]+|xt\d{3,4}[cgkosw\+]?[-\d]*|nexus 6)(?= bui|\)))/i],[U,[B,Tn],[z,W]],[/\b(mz60\d|xoom[2 ]{0,2}) build\//i],[U,[B,Tn],[z,G]],[/\b(?:lg)?([vl]k\-?\d{3}) bui| 3\.[-\w; ]{10}lg?-([06cv9]{3,4})/i],[U,[B,Cn],[z,G]],[/(lm(?:-?f100[nv]?|-[\w\.]+)(?= bui|\))|nexus [45])/i,/\blg[-e;\/ ]+(?!.*(?:browser|netcast|android tv|watch|webos))(\w+)/i,/\blg-?([\d\w]+) bui/i],[U,[B,Cn],[z,W]],[/(nokia) (t[12][01])/i],[B,U,[z,G]],[/(?:maemo|nokia).*(n900|lumia \d+|rm-\d+)/i,/nokia[-_ ]?(([-\w\. ]*?))( bui|\)|;|\/)/i],[[U,/_/g,` `],[z,W],[B,`Nokia`]],[/(pixel (c|tablet))\b/i],[U,[B,yn],[z,G]],[/droid.+;(?: google)? (g(01[13]a|020[aem]|025[jn]|1b60|1f8f|2ybb|4s1m|576d|5nz6|8hhn|8vou|a02099|c15s|d1yq|e2ae|ec77|gh2x|kv4x|p4bc|pj41|r83y|tt9q|ur25|wvk6)|pixel[\d ]*a?( pro)?( xl)?( fold)?( \(5g\))?)( bui|\))/i],[U,[B,yn],[z,W]],[/(google) (pixelbook( go)?)/i],[B,U],[/droid.+; (a?\d[0-2]{2}so|[c-g]\d{4}|so[-gl]\w+|xq-\w\w\d\d)(?= bui|\).+chrome\/(?![1-6]{0,1}\d\.))/i],[U,[B,jn],[z,W]],[/sony tablet [ps]/i,/\b(?:sony)?sgp\w+(?: bui|\))/i],[[U,`Xperia Tablet`],[B,jn],[z,G]],[/(alexa)webm/i,/(kf[a-z]{2}wi|aeo(?!bc)\w\w)( bui|\))/i,/(kf[a-z]+)( bui|\)).+silk\//i],[U,[B,hn],[z,G]],[/((?:sd|kf)[0349hijorstuw]+)( bui|\)).+silk\//i],[[U,/(.+)/g,`Fire Phone $1`],[B,hn],[z,W]],[/(playbook);[-\w\),; ]+(rim)/i],[U,B,[z,G]],[/\b((?:bb[a-f]|st[hv])100-\d)/i,/(?:blackberry|\(bb10;) (\w+)/i],[U,[B,vn],[z,W]],[/(?:\b|asus_)(transfo[prime ]{4,10} \w+|eeepc|slider \w+|nexus 7|padfone|p00[cj])/i],[U,[B,_n],[z,G]],[/ (z[bes]6[027][012][km][ls]|zenfone \d\w?)\b/i],[U,[B,_n],[z,W]],[/(nexus 9)/i],[U,[B,`HTC`],[z,G]],[/(htc)[-;_ ]{1,2}([\w ]+(?=\)| bui)|\w+)/i,/(zte)[- ]([\w ]+?)(?: bui|\/|\))/i,/(alcatel|geeksphone|nexian|panasonic(?!(?:;|\.))|sony(?!-bra))[-_ ]?([-\w]*)/i],[B,[U,/_/g,` `],[z,W]],[/tcl (xess p17aa)/i,/droid [\w\.]+; ((?:8[14]9[16]|9(?:0(?:48|60|8[01])|1(?:3[27]|66)|2(?:6[69]|9[56])|466))[gqswx])(_\w(\w|\w\w))?(\)| bui)/i],[U,[B,`TCL`],[z,G]],[/droid [\w\.]+; (418(?:7d|8v)|5087z|5102l|61(?:02[dh]|25[adfh]|27[ai]|56[dh]|59k|65[ah])|a509dl|t(?:43(?:0w|1[adepqu])|50(?:6d|7[adju])|6(?:09dl|10k|12b|71[efho]|76[hjk])|7(?:66[ahju]|67[hw]|7[045][bh]|71[hk]|73o|76[ho]|79w|81[hks]?|82h|90[bhsy]|99b)|810[hs]))(_\w(\w|\w\w))?(\)| bui)/i],[U,[B,`TCL`],[z,W]],[/(itel) ((\w+))/i],[[B,Qn],U,[z,Z,{tablet:[`p10001l`,`w7001`],"*":`mobile`}]],[/droid.+; ([ab][1-7]-?[0178a]\d\d?)/i],[U,[B,`Acer`],[z,G]],[/droid.+; (m[1-5] note) bui/i,/\bmz-([-\w]{2,})/i],[U,[B,`Meizu`],[z,W]],[/; ((?:power )?armor(?:[\w ]{0,8}))(?: bui|\))/i],[U,[B,`Ulefone`],[z,W]],[/; (energy ?\w+)(?: bui|\))/i,/; energizer ([\w ]+)(?: bui|\))/i],[U,[B,`Energizer`],[z,W]],[/; cat (b35);/i,/; (b15q?|s22 flip|s48c|s62 pro)(?: bui|\))/i],[U,[B,`Cat`],[z,W]],[/((?:new )?andromax[\w- ]+)(?: bui|\))/i],[U,[B,`Smartfren`],[z,W]],[/droid.+; (a(in)?(0(15|59|6[35])|142)p?)/i],[U,[B,`Nothing`],[z,W]],[/; (x67 5g|tikeasy \w+|ac[1789]\d\w+)( b|\))/i,/archos ?(5|gamepad2?|([\w ]*[t1789]|hello) ?\d+[\w ]*)( b|\))/i],[U,[B,`Archos`],[z,G]],[/archos ([\w ]+)( b|\))/i,/; (ac[3-6]\d\w{2,8})( b|\))/i],[U,[B,`Archos`],[z,W]],[/blackview ([-\w ]+)( b|\))/i,/; (bv\d{4}[-\w ]*)( b|\))/i],[U,[B,`Blackview`],[z,W]],[/; (n159v)/i],[U,[B,`HMD`],[z,W]],[/((revvl[ \w\+]+|tm(?:rv|af)\w*[45]g(?:tb)?))( b|\))/i],[U,[z,ir,{test:/ta?b/i,ifTrue:G,ifFalse:W}],[B,`T-Mobile`]],[/(imo) (tab \w+)/i,/(infinix|tecno) (x1101b?|p904|dp(7c|8d|10a)( pro)?|p70[1-3]a?|p904|t1101)/i],[B,U,[z,G]],[/(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus(?! zenw)|dell|jolla|meizu|motorola|polytron|tecno|micromax|advan)[-_ ]?([-\w]*)/i,/; (blu|coolpad|cubot|hmd|imo|infinix|lava|oneplus|tcl|wiko)[_ ]([-\w\+ ]+?)(?: bui|\)|; r)/i,/(hp) ([\w ]+\w)/i,/(microsoft); (lumia[\w ]+)/i,/(oppo) ?([\w ]+) bui/i,/(hisense) ([ehv][\w ]+)\)/i,/droid[^;]+; (philips)[_ ]([sv-x][\d]{3,4}[xz]?)/i],[B,U,[z,W]],[/(kobo)\s(ereader|touch)/i,/(hp).+(touchpad(?!.+tablet)|tablet)/i,/(kindle)\/([\w\.]+)/i],[B,U,[z,G]],[/(surface duo)/i],[U,[B,wn],[z,G]],[/droid [\d\.]+; (fp\du?)(?: b|\))/i],[U,[B,`Fairphone`],[z,W]],[/((?:tegranote|shield t(?!.+d tv))[\w- ]*?)(?: b|\))/i],[U,[B,En],[z,G]],[/(sprint) (\w+)/i],[B,U,[z,W]],[/(kin\.[onetw]{3})/i],[[U,/\./g,` `],[B,wn],[z,W]],[/droid.+; ([c6]+|et5[16]|mc[239][23]x?|vc8[03]x?)\)/i],[U,[B,Nn],[z,G]],[/droid.+; (ec30|ps20|tc[2-8]\d[kx])\)/i],[U,[B,Nn],[z,W]],[/(philips)[\w ]+tv/i,/smart-tv.+(samsung)/i],[B,[z,K]],[/hbbtv.+maple;(\d+)/i],[[U,/^/,`SmartTV`],[B,kn],[z,K]],[/(vizio)(?: |.+model\/)(\w+-\w+)/i,/tcast.+(lg)e?. ([-\w]+)/i],[B,U,[z,K]],[/(nux; netcast.+smarttv|lg (netcast\.tv-201\d|android tv))/i],[[B,Cn],[z,K]],[/(apple) ?tv/i],[B,[U,gn+` TV`],[z,K]],[/crkey.*devicetype\/chromecast/i],[[U,In+` Third Generation`],[B,yn],[z,K]],[/crkey.*devicetype\/([^/]*)/i],[[U,/^/,`Chromecast `],[B,yn],[z,K]],[/fuchsia.*crkey/i],[[U,In+` Nest Hub`],[B,yn],[z,K]],[/crkey/i],[[U,In],[B,yn],[z,K]],[/(portaltv)/i],[U,[B,Bn],[z,K]],[/droid.+aft(\w+)( bui|\))/i],[U,[B,hn],[z,K]],[/(shield \w+ tv)/i],[U,[B,En],[z,K]],[/\(dtv[\);].+(aquos)/i,/(aquos-tv[\w ]+)\)/i],[U,[B,An],[z,K]],[/(bravia[\w ]+)( bui|\))/i],[U,[B,jn],[z,K]],[/(mi(tv|box)-?\w+) bui/i],[U,[B,Mn],[z,K]],[/Hbbtv.*(technisat) (.*);/i],[B,U,[z,K]],[/\b(roku)[\dx]*[\)\/]((?:dvp-)?[\d\.]*)/i,/hbbtv\/\d+\.\d+\.\d+ +\([\w\+ ]*; *([\w\d][^;]*);([^;]*)/i],[[B,/.+\/(\w+)/,`$1`,Z,{LG:`lge`}],[U,nr],[z,K]],[/(playstation \w+)/i],[U,[B,jn],[z,Jt]],[/\b(xbox(?: one)?(?!; xbox))[\); ]/i],[U,[B,wn],[z,Jt]],[/(ouya)/i,/(nintendo) (\w+)/i,/(retroid) (pocket ([^\)]+))/i,/(valve).+(steam deck)/i,/droid.+; ((shield|rgcube|gr0006))( bui|\))/i],[[B,Z,{Nvidia:`Shield`,Anbernic:`RGCUBE`,Logitech:`GR0006`}],U,[z,Jt]],[/\b(sm-[lr]\d\d[0156][fnuw]?s?|gear live)\b/i],[U,[B,kn],[z,q]],[/((pebble))app/i,/(asus|google|lg|oppo|xiaomi) ((pixel |zen)?watch[\w ]*)( bui|\))/i],[B,U,[z,q]],[/(ow(?:19|20)?we?[1-3]{1,3})/i],[U,[B,On],[z,q]],[/(watch)(?: ?os[,\/]|\d,\d\/)[\d\.]+/i],[U,[B,gn],[z,q]],[/(opwwe\d{3})/i],[U,[B,Dn],[z,q]],[/(moto 360)/i],[U,[B,Tn],[z,q]],[/(smartwatch 3)/i],[U,[B,jn],[z,q]],[/(g watch r)/i],[U,[B,Cn],[z,q]],[/droid.+; (wt63?0{2,3})\)/i],[U,[B,Nn],[z,q]],[/droid.+; (glass) \d/i],[U,[B,yn],[z,Yt]],[/(pico) ([\w ]+) os\d/i],[B,U,[z,Yt]],[/(quest( \d| pro)?s?).+vr/i],[U,[B,Bn],[z,Yt]],[/mobile vr; rv.+firefox/i],[[z,Yt]],[/(tesla)(?: qtcarbrowser|\/[-\w\.]+)/i],[B,[z,Xt]],[/(aeobc)\b/i],[U,[B,hn],[z,Xt]],[/(homepod).+mac os/i],[U,[B,gn],[z,Xt]],[/windows iot/i],[[z,Xt]],[/droid.+; ([\w- ]+) (4k|android|smart|google)[- ]?tv/i],[U,[z,K]],[/\b((4k|android|smart|opera)[- ]?tv|tv; rv:|large screen[\w ]+safari)\b/i],[[z,K]],[/droid .+?; ([^;]+?)(?: bui|; wv\)|\) applew|; hmsc).+?(mobile|vr|\d) safari/i],[U,[z,Z,{mobile:`Mobile`,xr:`VR`,"*":G}]],[/\b((tablet|tab)[;\/]|focus\/\d(?!.+mobile))/i],[[z,G]],[/(phone|mobile(?:[;\/]| [ \w\/\.]*safari)|pda(?=.+windows ce))/i],[[z,W]],[/droid .+?; ([\w\. -]+)( bui|\))/i],[U,[B,`Generic`]]],engine:[[/windows.+ edge\/([\w\.]+)/i],[V,[R,Ln+`HTML`]],[/(arkweb)\/([\w\.]+)/i],[R,V],[/webkit\/537\.36.+chrome\/(?!27)([\w\.]+)/i],[V,[R,`Blink`]],[/(presto)\/([\w\.]+)/i,/(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna|servo)\/([\w\.]+)/i,/ekioh(flow)\/([\w\.]+)/i,/(khtml|tasman|links|dillo)[\/ ]\(?([\w\.]+)/i,/(icab)[\/ ]([23]\.[\d\.]+)/i,/\b(libweb)/i],[R,V],[/ladybird\//i],[[R,`LibWeb`]],[/rv\:([\w\.]{1,9})\b.+(gecko)/i],[V,R]],os:[[/(windows nt) (6\.[23]); arm/i],[[R,/N/,`R`],[V,Z,ar]],[/(windows (?:phone|mobile|iot))(?: os)?[\/ ]?([\d\.]*( se)?)/i,/(windows)[\/ ](1[01]|2000|3\.1|7|8(\.1)?|9[58]|me|server 20\d\d( r2)?|vista|xp)/i],[R,V],[/windows nt ?([\d\.\)]*)(?!.+xbox)/i,/\bwin(?=3| ?9|n)(?:nt| 9x )?([\d\.;]*)/i],[[V,/(;|\))/g,``,Z,ar],[R,Wn]],[/(windows ce)\/?([\d\.]*)/i],[R,V],[/[adehimnop]{4,7}\b(?:.*os ([\w]+) like mac|; opera)/i,/(?:ios;fbsv|ios(?=.+ip(?:ad|hone)|.+apple ?tv)|ip(?:ad|hone)(?: |.+i(?:pad)?)os|apple ?tv.+ios)[\/ ]([\w\.]+)/i,/\btvos ?([\w\.]+)/i,/cfnetwork\/.+darwin/i],[[V,/_/g,`.`],[R,`iOS`]],[/(mac os x) ?([\w\. ]*)/i,/(macintosh|mac_powerpc\b)(?!.+(haiku|morphos))/i],[[R,`macOS`],[V,/_/g,`.`]],[/android ([\d\.]+).*crkey/i],[V,[R,In+` Android`]],[/fuchsia.*crkey\/([\d\.]+)/i],[V,[R,In+` Fuchsia`]],[/crkey\/([\d\.]+).*devicetype\/smartspeaker/i],[V,[R,In+` SmartSpeaker`]],[/linux.*crkey\/([\d\.]+)/i],[V,[R,In+` Linux`]],[/crkey\/([\d\.]+)/i],[V,[R,In]],[/droid ([\w\.]+)\b.+(android[- ]x86)/i],[V,R],[/(ubuntu) ([\w\.]+) like android/i],[[R,/(.+)/,`$1 Touch`],V],[/(harmonyos)[\/ ]?([\d\.]*)/i,/(android|bada|blackberry|kaios|maemo|meego|openharmony|qnx|rim tablet os|sailfish|series40|symbian|tizen)\w*[-\/\.; ]?([\d\.]*)/i],[R,V],[/\(bb(10);/i],[V,[R,vn]],[/(?:symbian ?os|symbos|s60(?=;)|series ?60)[-\/ ]?([\w\.]*)/i],[V,[R,`Symbian`]],[/mozilla\/[\d\.]+ \((?:mobile[;\w ]*|tablet|tv|[^\)]*(?:viera|lg(?:l25|-d300)|alcatel ?o.+|y300-f1)); rv:([\w\.]+)\).+gecko\//i],[V,[R,Rn+` OS`]],[/\b(?:hp)?wos(?:browser)?\/([\w\.]+)/i,/webos(?:[ \/]?|\.tv-20(?=2[2-9]))(\d[\d\.]*)/i],[V,[R,`webOS`]],[/web0s;.+?(?:chr[o0]me|safari)\/(\d+)/i],[[V,Z,{25:`120`,24:`108`,23:`94`,22:`87`,6:`79`,5:`68`,4:`53`,3:`38`,2:`538`,1:`537`,"*":`TV`}],[R,`webOS`]],[/watch(?: ?os[,\/ ]|\d,\d\/)([\d\.]+)/i],[V,[R,`watchOS`]],[/cros [\w]+(?:\)| ([\w\.]+)\b)/i],[V,[R,`Chrome OS`]],[/kepler ([\w\.]+); (aft|aeo)/i],[V,[R,`Vega OS`]],[/(netrange)mmh/i,/(nettv)\/(\d+\.[\w\.]+)/i,/(nintendo|playstation) (\w+)/i,/(xbox); +xbox ([^\);]+)/i,/(pico) .+os([\w\.]+)/i,/\b(joli|palm)\b ?(?:os)?\/?([\w\.]*)/i,/linux.+(mint)[\/\(\) ]?([\w\.]*)/i,/(mageia|vectorlinux|fuchsia|arcaos|arch(?= ?linux))[;l ]([\d\.]*)/i,/([kxln]?ubuntu|debian|suse|opensuse|gentoo|slackware|fedora|mandriva|centos|pclinuxos|red ?hat|zenwalk|linpus|raspbian|plan 9|minix|risc os|contiki|deepin|manjaro|elementary os|sabayon|linspire|knoppix)(?: gnu[\/ ]linux)?(?: enterprise)?(?:[- ]linux)?(?:-gnu)?[-\/ ]?(?!chrom|package)([-\w\.]*)/i,/((?:open)?solaris)[-\/ ]?([\w\.]*)/i,/\b(aix)[; ]([1-9\.]{0,4})/i,/(hurd|linux|morphos)(?: (?:arm|x86|ppc)\w*| ?)([\w\.]*)/i,/(gnu) ?([\w\.]*)/i,/\b([-frentopcghs]{0,5}bsd|dragonfly)[\/ ]?(?!amd|[ix346]{1,2}86)([\w\.]*)/i,/(haiku) ?(r\d)?/i],[R,V],[/(sunos) ?([\d\.]*)/i],[[R,`Solaris`],V],[/\b(beos|os\/2|amigaos|openvms|hp-ux|serenityos)/i,/(unix) ?([\w\.]*)/i],[R,V]]},lr=(function(){var e={init:{},isIgnore:{},isIgnoreRgx:{},toString:{}};return X.call(e.init,[[N,[R,V,qt,z]],[P,[H]],[F,[z,U,B]],[I,[R,V]],[L,[R,V]]]),X.call(e.isIgnore,[[N,[V,qt]],[I,[V]],[L,[V]]]),X.call(e.isIgnoreRgx,[[N,/ ?browser$/i],[L,/ ?os$/i]]),X.call(e.toString,[[N,[R,V]],[P,[H]],[F,[B,U]],[I,[R,V]],[L,[R,V]]]),e})(),ur=function(e,t){var n=lr.init[t],r=lr.isIgnore[t]||0,i=lr.isIgnoreRgx[t]||0,a=lr.toString[t]||0;function o(){X.call(this,n)}return o.prototype.getItem=function(){return e},o.prototype.withClientHints=function(){return Gn?Gn.getHighEntropyValues(mn).then(function(t){return e.setCH(new dr(t,!1)).parseCH().get()}):e.parseCH().get()},o.prototype.withFeatureCheck=function(){return e.detectFeature().get()},t!=Kt&&(o.prototype.is=function(e){var t=!1;for(var n in this)if(this.hasOwnProperty(n)&&!Jn(r,n)&&Qn(i?tr(i,this[n]):this[n])==Qn(i?tr(i,e):e)){if(t=!0,e!=M.UNDEFINED)break}else if(e==M.UNDEFINED&&t){t=!t;break}return t},o.prototype.toString=function(){var e=Wt;for(var t in a)typeof this[a[t]]!==M.UNDEFINED&&(e+=(e?` `:Wt)+this[a[t]]);return e||M.UNDEFINED}),o.prototype.then=function(e){var t=this,n=function(){for(var e in t)t.hasOwnProperty(e)&&(this[e]=t[e])};n.prototype={is:o.prototype.is,toString:o.prototype.toString,withClientHints:o.prototype.withClientHints,withFeatureCheck:o.prototype.withFeatureCheck};var r=new n;return e(r),r},new o};function dr(e,t){if(e||={},X.call(this,mn),t)X.call(this,[[Qt,Zn(e[an])],[en,Zn(e[on])],[W,/\?1/.test(e[un])],[U,er(e[dn])],[tn,er(e[fn])],[nn,er(e[pn])],[H,er(e[sn])],[$t,Zn(e[ln])],[rn,er(e[cn])]]);else for(var n in e)this.hasOwnProperty(n)&&typeof e[n]!==M.UNDEFINED&&(this[n]=e[n])}function fr(e,t,n,r){return X.call(this,[[`itemType`,e],[`ua`,t],[`uaCH`,r],[`rgxMap`,n],[`data`,ur(this,e)]]),this}fr.prototype.get=function(e){return e?this.data.hasOwnProperty(e)?this.data[e]:void 0:this.data},fr.prototype.set=function(e,t){return this.data[e]=t,this},fr.prototype.setCH=function(e){return this.uaCH=e,this},fr.prototype.detectFeature=function(){if(Y&&Y.userAgent==this.ua)switch(this.itemType){case N:Y.brave&&typeof Y.brave.isBrave==M.FUNCTION&&this.set(R,`Brave`);break;case F:!this.get(z)&&Gn&&Gn[W]&&this.set(z,W),this.get(U)==`Macintosh`&&Y&&typeof Y.standalone!==M.UNDEFINED&&Y.maxTouchPoints&&Y.maxTouchPoints>2&&this.set(U,`iPad`).set(z,G);break;case L:!this.get(R)&&Gn&&Gn[tn]&&this.set(R,Gn[tn]);break;case Kt:var e=this.data,t=function(t){return e[t].getItem().detectFeature().get()};this.set(N,t(N)).set(P,t(P)).set(F,t(F)).set(I,t(I)).set(L,t(L))}return this},fr.prototype.parseUA=function(){switch(this.itemType!=Kt&&rr.call(this.data,this.ua,this.rgxMap),this.itemType){case N:this.set(qt,$n(this.get(V)));break;case L:if(this.get(R)==`iOS`&&this.get(V)&&/^1[89][^\d]/.exec(this.get(V))){var e=/\) Version\/((\d+)[\d\.]*)/.exec(this.ua);e&&parseInt(e[2],10)>=26&&this.set(V,e[1])}break}return this},fr.prototype.parseCH=function(){var e=this.uaCH,t=this.rgxMap;switch(this.itemType){case N:case I:var n=e[en]||e[Qt],r;if(n)for(var i=0;i<n.length;i++){var a=n[i].brand||n[i],o=n[i].version;this.itemType==N&&!/not.a.brand/i.test(a)&&(!r||/Chrom/.test(r)&&a!=Fn||r==Ln&&/WebView2/.test(a))&&(a=Z(a,sr),r=this.get(R),r&&!/Chrom/.test(r)&&/Chrom/.test(a)||this.set(R,a).set(V,o).set(qt,$n(o)),r=a),this.itemType==I&&a==Fn&&this.set(V,o)}break;case P:var s=e[H];s&&(s&&e[rn]==`64`&&(s+=`64`),rr.call(this.data,s+`;`,t));break;case F:if(e[W]&&this.set(z,W),e[U]&&(this.set(U,e[U]),!this.get(z)||!this.get(B))){var c={};rr.call(c,`droid 9; `+e[U]+`)`,t),!this.get(z)&&c.type&&this.set(z,c.type),!this.get(B)&&c.vendor&&this.set(B,c.vendor)}if(e[$t]){var l;if(typeof e[$t]!=`string`)for(var u=0;!l&&u<e[$t].length;)l=Z(e[$t][u++],or);else l=Z(e[$t],or);this.set(z,l)}break;case L:var d=e[tn];if(d){var f=e[nn];d==Wn&&(f=parseInt($n(f),10)>=13?`11`:`10`),this.set(R,d).set(V,f)}this.get(R)==Wn&&e[U]==`Xbox`&&this.set(R,`Xbox`).set(V,void 0);break;case Kt:var p=this.data,m=function(t){return p[t].getItem().setCH(e).parseCH().get()};this.set(N,m(N)).set(P,m(P)).set(F,m(F)).set(I,m(I)).set(L,m(L))}return this};function Q(e,t,n){if(typeof e===M.OBJECT?(Yn(e,!0)?(typeof t===M.OBJECT&&(n=t),t=e):(n=e,t=void 0),e=void 0):typeof e===M.STRING&&!Yn(t,!0)&&(n=t,t=void 0),n)if(typeof n.append===M.FUNCTION){var r={};n.forEach(function(e,t){r[String(t).toLowerCase()]=e}),n=r}else{var i={};for(var a in n)n.hasOwnProperty(a)&&(i[String(a).toLowerCase()]=n[a]);n=i}if(!(this instanceof Q))return new Q(e,t,n).getResult();var o=typeof e===M.STRING?e:n&&n[Ut]?n[Ut]:Y&&Y.userAgent?Y.userAgent:Wt,s=new dr(n,!0),c=cr,l=function(e){return e==Kt?function(){return new fr(e,o,c,s).set(`ua`,o).set(N,this.getBrowser()).set(P,this.getCPU()).set(F,this.getDevice()).set(I,this.getEngine()).set(L,this.getOS()).get()}:function(){return new fr(e,o,c[e],s).parseUA().get()}};return X.call(this,[[`getBrowser`,l(N)],[`getCPU`,l(P)],[`getDevice`,l(F)],[`getEngine`,l(I)],[`getOS`,l(L)],[`getResult`,l(Kt)],[`getUA`,function(){return o}],[`setUA`,function(e){return Xn(e)&&(o=nr(e,Ht)),this}],[`useExtension`,function(e){return e&&(c=Kn(c,e)),this}]]).setUA(o).useExtension(t),this}Q.VERSION=Vt,Q.BROWSER=qn([R,V,qt,z]),Q.CPU=qn([H]),Q.DEVICE=qn([U,B,z,Jt,W,K,G,q,Xt]),Q.ENGINE=Q.OS=qn([R,V]);function pr(e){if(!e)return{browser:null,os:null,icon:bt,raw:null};let t=Q(e);return{browser:t.browser.name??null,os:t.os.name??null,icon:mr(t.device.type),raw:e}}function mr(e){return e===`mobile`?he:e===`tablet`?_e:e===`wearable`?St:e===`smarttv`||e===`console`?xt:ge}var hr={unknownDevice:{id:`profile.sessions.unknownDevice`},browserOnOs:{id:`profile.sessions.device.browserOnOs`},revokeAllFallback:{id:`profile.sessions.revokeAll.fallback`},revokeCurrent:{id:`profile.sessions.revoke.current`},revokeNotFound:{id:`profile.sessions.revoke.notFound`},revokeFallback:{id:`profile.sessions.revoke.fallback`}};function gr(){let e=S(),t=s(),[n,r]=(0,O.useState)(null),a=o(c.auth.sessions.list.queryOptions({input:{}})),u=()=>t.invalidateQueries({queryKey:c.auth.sessions.list.key()}),d=l({mutationFn:()=>c.auth.sessions.revokeOthers.call({}),onMutate:()=>{r(null)},onSuccess:async e=>{r({kind:`ok`,revoked:e.revoked}),await u()},onError:e=>{r({kind:`error`,message:e instanceof Error?e.message:hr.revokeAllFallback})}}),f=a.data??[],p=f.filter(e=>!e.current).length;return(0,k.jsxs)(Ne,{"data-testid":`profile-sessions-card`,children:[(0,k.jsxs)(C,{children:[(0,k.jsx)(je,{children:(0,k.jsx)(i,{id:`profile.sessions.title`,message:`Active sessions`})}),(0,k.jsx)(Me,{children:(0,k.jsx)(i,{id:`profile.sessions.description`,message:`Devices signed in to this account. Revoke any you don't recognise, or sign out everywhere except this browser if you suspect a leak.`})})]}),(0,k.jsxs)(w,{className:`flex flex-col gap-4`,children:[vr(a,f,u),n?.kind===`ok`?(0,k.jsx)(D,{"data-testid":`profile-sessions-revoke-feedback`,children:(0,k.jsx)(E,{children:(0,k.jsx)(i,{id:`profile.sessions.revokeAll.count`,message:`{revoked, plural, =0 {No other sessions to sign out.} one {Signed out # other session.} other {Signed out # other sessions.}}`,values:{revoked:n.revoked},comment:`revoked: number of OTHER sessions just signed out (excluding the current device)`})})}):null,n?.kind===`error`?(0,k.jsx)(D,{variant:`destructive`,"data-testid":`profile-sessions-error`,children:(0,k.jsx)(E,{children:e(n.message)})}):null,p>0?(0,k.jsx)(`div`,{className:`flex justify-end`,children:(0,k.jsx)(T,{type:`button`,variant:`outline`,onClick:()=>{d.mutate()},disabled:d.isPending,"data-testid":`profile-sessions-revoke-button`,children:d.isPending?(0,k.jsx)(i,{id:`profile.sessions.revokeAll.pending`,message:`Signing out…`}):(0,k.jsx)(i,{id:`profile.sessions.revokeAll.idle`,message:`Sign out other devices`})})}):null]})]})}function _r({session:e,onChanged:t}){let[n,r]=(0,O.useState)(!1),[a,o]=(0,O.useState)(null),s=pr(e.userAgent),u=s.icon,d=vt(e.createdAt),{formatRelative:f}=Ae(),p=S(),m=yr(s),h=l({mutationFn:()=>c.auth.sessions.revoke.call({id:e.id}),onMutate:()=>{o(null)},onSuccess:async()=>{r(!1),await t()},onError:e=>{o(br(e))}});return(0,k.jsxs)(`li`,{className:`flex items-start gap-3 py-3`,"data-testid":`profile-session-row`,children:[(0,k.jsx)(u,{"aria-hidden":!0,className:`text-muted-foreground mt-0.5 size-5 shrink-0`}),(0,k.jsxs)(`div`,{className:`flex min-w-0 flex-1 flex-col gap-1`,children:[(0,k.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,k.jsx)(`span`,{className:`text-sm font-medium`,"data-testid":`profile-session-label`,children:m}),e.current?(0,k.jsx)(x,{variant:`secondary`,children:(0,k.jsx)(i,{id:`profile.sessions.thisDevice`,message:`This device`})}):null]}),(0,k.jsxs)(`div`,{className:`text-muted-foreground flex flex-wrap gap-2 text-xs`,children:[e.ipAddress?(0,k.jsx)(`span`,{children:e.ipAddress}):null,(0,k.jsx)(`span`,{children:(0,k.jsx)(i,{id:`profile.sessions.signedIn`,message:`Signed in {when}`,values:{when:f(d)},comment:`when: pre-formatted relative-time string like '2 hours ago'`})})]})]}),e.current?null:(0,k.jsx)(T,{type:`button`,variant:`ghost`,size:`sm`,className:`text-destructive hover:text-destructive shrink-0`,onClick:()=>{r(!0)},"data-testid":`profile-session-revoke-button`,children:(0,k.jsx)(i,{id:`profile.sessions.revoke.button`,message:`Revoke`})}),(0,k.jsx)(re,{open:n,onOpenChange:e=>{e||(r(!1),o(null))},children:(0,k.jsxs)(b,{children:[(0,k.jsxs)(y,{children:[(0,k.jsx)(ae,{children:(0,k.jsx)(i,{id:`profile.sessions.revoke.title`,message:`Sign out this device?`})}),(0,k.jsx)(ie,{children:e.ipAddress?(0,k.jsx)(i,{id:`profile.sessions.revoke.descriptionWithIp`,message:`{device} signed in {when} from {ip}. The device will need to sign in again next time.`,values:{device:(0,k.jsx)(`bdi`,{children:m}),when:f(d),ip:e.ipAddress},comment:`device: 'Safari on macOS' style label; when: relative-time string; ip: IPv4/IPv6 address`}):(0,k.jsx)(i,{id:`profile.sessions.revoke.description`,message:`{device} signed in {when}. The device will need to sign in again next time.`,values:{device:(0,k.jsx)(`bdi`,{children:m}),when:f(d)},comment:`device: 'Safari on macOS' style label; when: relative-time string`})})]}),a?(0,k.jsx)(D,{variant:`destructive`,"data-testid":`profile-session-revoke-error`,children:(0,k.jsx)(E,{children:p(a)})}):null,(0,k.jsxs)(me,{children:[(0,k.jsx)(te,{disabled:h.isPending,children:(0,k.jsx)(i,{id:`profile.sessions.revoke.cancel`,message:`Cancel`})}),(0,k.jsx)(ee,{"data-testid":`profile-session-revoke-confirm`,disabled:h.isPending,onClick:e=>{e.preventDefault(),h.mutate()},children:h.isPending?(0,k.jsx)(i,{id:`profile.sessions.revoke.pending`,message:`Signing out…`}):(0,k.jsx)(i,{id:`profile.sessions.revoke.confirm`,message:`Sign out device`})})]})]})})]})}function vr(e,t,n){return e.isPending?(0,k.jsx)(`p`,{className:`text-muted-foreground text-sm`,children:(0,k.jsx)(i,{id:`profile.sessions.loading`,message:`Loading…`})}):e.error?(0,k.jsx)(D,{variant:`destructive`,children:(0,k.jsx)(E,{children:(0,k.jsx)(i,{id:`profile.sessions.loadFailed`,message:`Couldn't load your sessions. Refresh and try again.`})})}):t.length===0?(0,k.jsx)(`p`,{className:`text-muted-foreground text-sm`,children:(0,k.jsx)(i,{id:`profile.sessions.empty`,message:`No plumix-managed sessions. Your sign-in is handled by an external identity provider.`})}):(0,k.jsx)(`ul`,{className:`divide-border divide-y`,"data-testid":`profile-sessions-list`,children:t.map(e=>(0,k.jsx)(_r,{session:e,onChanged:n},e.id))})}function yr(e){let{i18n:t}=r(),n=S();return e.browser&&e.os?t._(hr.browserOnOs.id,{browser:e.browser,os:e.os},{message:hr.browserOnOs.message}):e.browser?e.browser:e.os?e.os:n(hr.unknownDevice)}function br(e){return ht(e)===`current_session`?hr.revokeCurrent:gt(e)===`NOT_FOUND`?hr.revokeNotFound:e instanceof Error?e.message:hr.revokeFallback}var $={invalidEmail:{id:`userEdit.email.invalid`},confirmationSent:{id:`userEdit.email.confirmationSent`},newEmailPlaceholder:{id:`userEdit.email.placeholder`},emailTaken:{id:`userEdit.email.error.taken`},mailerNotConfigured:{id:`userEdit.email.error.mailerNotConfigured`},accountDisabled:{id:`userEdit.email.error.accountDisabled`},requestFallback:{id:`userEdit.email.error.requestFallback`}},xr=Se({newEmail:Oe(De(),ve(),ye(),Te(ke($.invalidEmail)),we(255))});function Sr({userId:e,email:t,canEdit:n}){let{i18n:a}=r(),u=s(),{formatRelative:d}=Ae(),f=S(),[p,m]=(0,O.useState)(!1),[h,g]=(0,O.useState)(null),[_,v]=(0,O.useState)(null),y=o(c.user.pendingEmailChange.queryOptions({input:{id:e}})).data?.pending??null,ee=()=>u.invalidateQueries({queryKey:c.user.pendingEmailChange.key()}),te=l({mutationFn:t=>c.user.requestEmailChange.call({id:e,newEmail:t}),onSuccess:async(e,t)=>{m(!1),g(null),v(a._($.confirmationSent.id,{email:t},{message:$.confirmationSent.message})),await ee()},onError:e=>{g(wr(e))}}),b=l({mutationFn:()=>c.user.cancelEmailChange.call({id:e}),onSuccess:async()=>{v(null),await ee()}}),x=y?(0,k.jsx)(`bdi`,{children:y.newEmail}):null;return(0,k.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,k.jsx)(ot,{children:(0,k.jsx)(i,{id:`userEdit.email.label`,message:`Email`})}),(0,k.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,k.jsx)(`p`,{className:`text-muted-foreground font-mono text-sm`,"data-testid":`user-edit-email`,children:t}),n?(0,k.jsx)(T,{type:`button`,variant:`outline`,size:`sm`,onClick:()=>{g(null),v(null),m(!0)},"data-testid":`user-edit-email-change-button`,children:(0,k.jsx)(i,{id:`userEdit.email.changeButton`,message:`Change email`})}):null]}),y?(0,k.jsx)(D,{"data-testid":`user-edit-email-pending`,children:(0,k.jsxs)(E,{className:`flex flex-wrap items-center gap-2`,children:[(0,k.jsx)(`span`,{children:(0,k.jsx)(i,{id:`userEdit.email.pending`,message:`Pending change to <code>{newEmail}</code> — expires {expiresAt}`,values:{newEmail:x,expiresAt:d(vt(y.expiresAt))},components:{code:(0,k.jsx)(`code`,{className:`font-mono`})},comment:`newEmail: the new address awaiting confirmation; expiresAt: pre-formatted relative-time like 'in 2 hours'`})}),n?(0,k.jsx)(T,{type:`button`,variant:`ghost`,size:`sm`,onClick:()=>b.mutate(),disabled:b.isPending,"data-testid":`user-edit-email-cancel-pending`,children:b.isPending?(0,k.jsx)(i,{id:`userEdit.email.cancelPending.pending`,message:`Cancelling…`}):(0,k.jsx)(i,{id:`userEdit.email.cancelPending.idle`,message:`Cancel`})}):null]})}):_?(0,k.jsx)(D,{"data-testid":`user-edit-email-change-success`,children:(0,k.jsx)(E,{children:_})}):null,(0,k.jsx)(Cr,{open:p,onOpenChange:e=>{e||g(null),m(e)},currentEmail:t,onSubmit:e=>te.mutate(e),pending:te.isPending,error:h,placeholder:f($.newEmailPlaceholder)})]})}function Cr({open:e,onOpenChange:t,currentEmail:n,onSubmit:r,pending:a,error:o,placeholder:s}){let c=S(),l=st({resolver:mt(xr),defaultValues:{newEmail:``},mode:`onSubmit`});return(0,k.jsx)(re,{open:e,onOpenChange:t,children:(0,k.jsxs)(b,{"data-testid":`user-edit-email-change-dialog`,children:[(0,k.jsxs)(y,{children:[(0,k.jsx)(ae,{children:(0,k.jsx)(i,{id:`userEdit.email.dialog.title`,message:`Change email`})}),(0,k.jsx)(ie,{children:(0,k.jsx)(i,{id:`userEdit.email.dialog.description`,message:`We'll send a confirmation link to the new address. The change takes effect after the link is clicked. Sessions on this account are signed out at that point — re-sign-in uses the new email.`})})]}),(0,k.jsx)(pt,{...l,children:(0,k.jsxs)(`form`,{className:`flex flex-col gap-3`,onSubmit:l.handleSubmit(e=>{r(e.newEmail)}),children:[(0,k.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,k.jsx)(ot,{className:`text-muted-foreground text-xs`,children:(0,k.jsx)(i,{id:`userEdit.email.dialog.currentLabel`,message:`Current email`})}),(0,k.jsx)(`p`,{className:`text-muted-foreground font-mono text-sm`,"data-testid":`user-edit-email-change-current`,children:n})]}),(0,k.jsx)(ct,{control:l.control,name:`newEmail`,render:({field:e})=>(0,k.jsxs)(at,{children:[(0,k.jsx)(ut,{children:(0,k.jsx)(i,{id:`userEdit.email.dialog.newLabel`,message:`New email`})}),(0,k.jsx)(lt,{children:(0,k.jsx)(nt,{type:`email`,autoComplete:`email`,placeholder:s,disabled:a,"data-testid":`user-edit-email-change-input`,...e})}),(0,k.jsx)(ft,{})]})}),o?(0,k.jsx)(D,{variant:`destructive`,"data-testid":`user-edit-email-change-error`,children:(0,k.jsx)(E,{children:c(o)})}):null,(0,k.jsxs)(me,{children:[(0,k.jsx)(te,{disabled:a,"data-testid":`user-edit-email-change-cancel`,children:(0,k.jsx)(i,{id:`userEdit.email.dialog.cancel`,message:`Cancel`})}),(0,k.jsx)(ee,{type:`submit`,disabled:a,"data-testid":`user-edit-email-change-submit`,children:a?(0,k.jsx)(i,{id:`userEdit.email.dialog.submit.pending`,message:`Sending…`}):(0,k.jsx)(i,{id:`userEdit.email.dialog.submit.idle`,message:`Send confirmation`})})]})]})})]})})}function wr(e){if(gt(e)===`CONFLICT`){let t=ht(e);if(t===`email_taken`)return $.emailTaken;if(t===`mailer_not_configured`)return $.mailerNotConfigured;if(t===`account_disabled`)return $.accountDisabled}return e instanceof Error?e.message:$.requestFallback}var Tr=`__keep__`;async function Er(e,t){await Promise.all([e.invalidateQueries({queryKey:c.user.get.queryOptions({input:{id:t}}).queryKey}),e.invalidateQueries({queryKey:c.user.list.key()})])}var Dr=Se({name:Oe(De(),ve(),we(100)),role:Ee(Be),meta:be(De(),Ce())});function Or(){let{id:e}=Je.useParams(),{user:t}=Je.useRouteContext(),n=e===t.id;function r(e){return!n&&qe(t.capabilities,e)}let i=r(`user:promote`),o=r(`user:edit`),s=r(`user:delete`),l=r(`user:manage_tokens`),u=n?qe(t.capabilities,`user:edit_own`):qe(t.capabilities,`user:edit`),{data:d}=a(c.user.get.queryOptions({input:{id:e}}));return(0,k.jsx)(Ar,{target:d,isSelf:n,canPromote:i,canSave:u,canDisable:o,canDelete:s,canManageOtherTokens:l,metaBoxes:Xe(t.capabilities)},d.updatedAt instanceof Date?d.updatedAt.toISOString():String(d.updatedAt))}function kr({target:e,canPromote:t,metaBoxes:n,queryClient:r,setServerError:i}){return l({mutationFn:r=>c.user.update.call({id:e.id,name:r.name.length>0?r.name:null,...t&&r.role!==e.role?{role:r.role}:{},meta:n.length>0?r.meta:void 0}),onMutate:()=>{i(null)},onSuccess:async()=>{await Er(r,e.id)},onError:e=>{i(Pr(e,Fr,et.errUpdateFallback))}})}function Ar({target:e,isSelf:t,canPromote:n,canSave:r,canDisable:a,canDelete:o,canManageOtherTokens:c,metaBoxes:l}){let f=d(),m=S(),h=s(),[g,_]=(0,O.useState)(null),v=kr({target:e,canPromote:n,metaBoxes:l,queryClient:h,setServerError:_}),y=st({resolver:mt(Dr),defaultValues:{name:e.name??``,role:e.role,meta:$e(l,e.meta)}}),ee=y.handleSubmit(e=>{v.mutate(e)}),te=(0,k.jsx)(`bdi`,{children:e.email});return(0,k.jsxs)(`div`,{className:`mx-auto flex w-full max-w-xl flex-col gap-4`,children:[(0,k.jsxs)(u,{to:`/users`,search:Ze,className:`text-muted-foreground hover:text-foreground inline-flex items-center gap-1 text-sm`,"data-testid":`user-edit-back-link`,children:[(0,k.jsx)(p,{className:`size-4 rtl:rotate-180`}),(0,k.jsx)(i,{id:`userEdit.backToList`,message:`Back to users`})]}),(0,k.jsxs)(Ne,{children:[(0,k.jsxs)(C,{children:[(0,k.jsx)(je,{children:(0,k.jsx)(`h1`,{"data-testid":`user-edit-heading`,children:t?(0,k.jsx)(i,{id:`userEdit.title.self`,message:`Your profile`}):(0,k.jsx)(i,{id:`userEdit.title.other`,message:`Edit {email}`,values:{email:te},comment:`email: the user being edited`})})}),(0,k.jsx)(Me,{children:t?(0,k.jsx)(i,{id:`userEdit.description.self`,message:`Update your display name. Role and account state are managed by administrators.`}):(0,k.jsx)(i,{id:`userEdit.description.other`,message:`Update this account's details. Role changes invalidate existing sessions immediately.`})})]}),(0,k.jsx)(w,{children:(0,k.jsx)(pt,{...y,children:(0,k.jsxs)(`form`,{className:`flex flex-col gap-4`,onSubmit:ee,children:[(0,k.jsx)(Sr,{userId:e.id,email:e.email,canEdit:r}),(0,k.jsx)(ct,{control:y.control,name:`name`,render:({field:e})=>(0,k.jsxs)(at,{children:[(0,k.jsx)(ut,{children:(0,k.jsx)(i,{id:`userEdit.name.label`,message:`Name`})}),(0,k.jsx)(lt,{children:(0,k.jsx)(nt,{type:`text`,autoComplete:`name`,disabled:v.isPending||!r,"data-testid":`user-edit-name-input`,...e})}),(0,k.jsx)(ft,{})]})}),n?(0,k.jsx)(ct,{control:y.control,name:`role`,render:({field:e})=>(0,k.jsxs)(at,{children:[(0,k.jsx)(ut,{children:(0,k.jsx)(i,{id:`userEdit.role.label`,message:`Role`})}),(0,k.jsxs)(We,{value:e.value,onValueChange:t=>{Ve(t)&&e.onChange(t)},disabled:v.isPending,children:[(0,k.jsx)(lt,{children:(0,k.jsx)(ze,{className:`w-full`,onBlur:e.onBlur,"data-testid":`user-edit-role-select`,children:(0,k.jsx)(Ge,{})})}),(0,k.jsx)(Ie,{children:Be.map(e=>(0,k.jsx)(Re,{value:e,children:m(Fe[e])},e))})]}),(0,k.jsx)(ft,{})]})}):(0,k.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,k.jsx)(ot,{children:(0,k.jsx)(i,{id:`userEdit.role.label`,message:`Role`})}),(0,k.jsx)(x,{variant:`secondary`,className:`w-fit`,children:m(tt[e.role])}),t?(0,k.jsx)(`p`,{className:`text-muted-foreground text-xs`,children:(0,k.jsx)(i,{id:`userEdit.role.selfReadonly`,message:`Only another administrator can change your role.`})}):null]}),l.map(e=>(0,k.jsx)(yt,{box:e,basePath:`meta`,disabled:v.isPending||!r},e.id)),g?(0,k.jsx)(D,{variant:`destructive`,"data-testid":`user-edit-server-error`,children:(0,k.jsx)(E,{children:m(g)})}):null,(0,k.jsxs)(`div`,{className:`flex justify-end gap-2`,children:[(0,k.jsx)(T,{type:`button`,variant:`outline`,onClick:()=>{f({to:`/users`,search:Ze})},disabled:v.isPending,children:(0,k.jsx)(i,{id:`userEdit.cancel`,message:`Cancel`})}),(0,k.jsx)(T,{type:`submit`,disabled:v.isPending||!r,"data-testid":`user-edit-submit`,children:v.isPending?(0,k.jsx)(i,{id:`userEdit.submit.pending`,message:`Saving…`}):(0,k.jsx)(i,{id:`userEdit.submit.idle`,message:`Save changes`})})]})]})})})]}),a?(0,k.jsx)(jr,{target:e}):null,o?(0,k.jsx)(Nr,{target:e}):null,t?(0,k.jsx)(Pt,{userLocale:e.meta.locale}):null,t?(0,k.jsx)(Ft,{userEmail:e.email}):null,t?(0,k.jsx)(gr,{}):null,t?(0,k.jsx)(Et,{}):null,!t&&c?(0,k.jsx)(Dt,{userId:e.id}):null]})}function jr({target:e}){let t=S(),n=s(),[r,a]=(0,O.useState)(null),o=e.disabledAt!=null,u=l({mutationFn:()=>o?c.user.enable.call({id:e.id}):c.user.disable.call({id:e.id}),onMutate:()=>{a(null)},onSuccess:async()=>{await Er(n,e.id)},onError:e=>{a(Pr(e,Ir,et.errStatusFallback))}});return(0,k.jsxs)(Ne,{children:[(0,k.jsxs)(C,{children:[(0,k.jsx)(je,{children:(0,k.jsx)(i,{id:`userEdit.status.title`,message:`Account status`})}),(0,k.jsx)(Me,{children:o?(0,k.jsx)(i,{id:`userEdit.status.description.disabled`,message:`Disabled accounts can't sign in. Re-enabling restores access; their passkey is still registered.`}):(0,k.jsx)(i,{id:`userEdit.status.description.active`,message:`Disabling signs the user out immediately and blocks future sign-ins. Their entries stay published.`})})]}),(0,k.jsxs)(w,{className:`flex flex-col gap-3`,children:[(0,k.jsxs)(`div`,{className:`flex items-center justify-between gap-4`,children:[(0,k.jsx)(x,{variant:o?`destructive`:`secondary`,children:o?(0,k.jsx)(i,{id:`users.list.row.disabled`,message:`Disabled`}):(0,k.jsx)(i,{id:`users.list.row.active`,message:`Active`})}),(0,k.jsx)(T,{variant:o?`default`:`outline`,onClick:()=>{u.mutate()},disabled:u.isPending,"data-testid":o?`user-edit-enable-button`:`user-edit-disable-button`,children:t(Mr(o,u.isPending))})]}),r?(0,k.jsx)(D,{variant:`destructive`,"data-testid":`user-status-error`,children:(0,k.jsx)(E,{children:t(r)})}):null]})]})}function Mr(e,t){return t?e?et.toggleEnabling:et.toggleDisabling:e?et.toggleEnable:et.toggleDisable}function Nr({target:e}){let t=d(),n=S(),r=s(),[a,u]=(0,O.useState)(!1),[f,p]=(0,O.useState)(null),[m,h]=(0,O.useState)(null),g=o({...c.user.list.queryOptions({input:{limit:100}}),enabled:a}),_=(g.data??[]).filter(t=>t.id!==e.id),v=l({mutationFn:()=>c.user.delete.call({id:e.id,...f==null?{}:{reassignTo:f}}),onMutate:()=>{h(null)},onSuccess:async()=>{await r.invalidateQueries({queryKey:c.user.list.key()}),t({to:`/users`,search:Ze})},onError:e=>{h(Pr(e,Lr,et.errDeleteFallback))}}),y=(0,k.jsx)(`bdi`,{children:e.email});return a?(0,k.jsxs)(Ne,{className:`border-destructive`,children:[(0,k.jsxs)(C,{children:[(0,k.jsx)(je,{className:`text-destructive`,children:(0,k.jsx)(i,{id:`userEdit.delete.confirm.title`,message:`Confirm delete: {email}`,values:{email:y},comment:`email: the user account being deleted`})}),(0,k.jsx)(Me,{children:(0,k.jsx)(i,{id:`userEdit.delete.confirm.description`,message:`If this user authored any entries, the next step reassigns them. Leave "Keep entries as-is" if they have none.`})})]}),(0,k.jsxs)(w,{className:`flex flex-col gap-3`,children:[(0,k.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,k.jsx)(ot,{htmlFor:`reassign-to`,children:(0,k.jsx)(i,{id:`userEdit.delete.reassign.label`,message:`Reassign entries to`})}),(0,k.jsxs)(We,{value:f==null?Tr:String(f),onValueChange:e=>{p(e===Tr?null:Number(e))},disabled:v.isPending||g.isPending,children:[(0,k.jsx)(ze,{id:`reassign-to`,className:`w-full`,"data-testid":`user-delete-reassign-select`,children:(0,k.jsx)(Ge,{})}),(0,k.jsxs)(Ie,{children:[(0,k.jsx)(Re,{value:Tr,children:n(et.reassignKeepAsIs)}),_.map(e=>(0,k.jsxs)(Re,{value:String(e.id),"data-testid":`user-delete-reassign-select-${e.id}`,children:[e.name??e.email,` (`,e.email,`)`]},e.id))]})]})]}),m?(0,k.jsx)(D,{variant:`destructive`,"data-testid":`user-delete-error`,children:(0,k.jsx)(E,{children:n(m)})}):null,(0,k.jsxs)(`div`,{className:`flex justify-end gap-2`,children:[(0,k.jsx)(T,{type:`button`,variant:`outline`,onClick:()=>{u(!1),p(null),h(null)},disabled:v.isPending,children:(0,k.jsx)(i,{id:`userEdit.cancel`,message:`Cancel`})}),(0,k.jsx)(T,{type:`button`,variant:`destructive`,onClick:()=>{v.mutate()},disabled:v.isPending,"data-testid":`user-delete-confirm-button`,children:v.isPending?(0,k.jsx)(i,{id:`userEdit.delete.confirm.pending`,message:`Deleting…`}):(0,k.jsx)(i,{id:`userEdit.delete.confirm.idle`,message:`Delete forever`})})]})]})]}):(0,k.jsxs)(Ne,{className:`border-destructive/50`,children:[(0,k.jsxs)(C,{children:[(0,k.jsx)(je,{className:`text-destructive`,children:(0,k.jsx)(i,{id:`userEdit.delete.title`,message:`Delete user`})}),(0,k.jsx)(Me,{children:(0,k.jsx)(i,{id:`userEdit.delete.description`,message:`Permanent. Their entries stay, but you'll choose who inherits authorship.`})})]}),(0,k.jsx)(w,{children:(0,k.jsx)(T,{variant:`destructive`,onClick:()=>{u(!0)},"data-testid":`user-edit-delete-button`,children:(0,k.jsx)(i,{id:`userEdit.delete.button`,message:`Delete user`})})})]})}function Pr(e,t,n){let r=e&&typeof e==`object`&&`data`in e?e.data?.reason:void 0;return(r==null?void 0:t[r])??n}var Fr={last_admin:{id:`userEdit.error.lastAdmin.update`},email_taken:{id:`userEdit.error.emailTaken`}},Ir={last_admin:{id:`userEdit.error.lastAdmin.status`}},Lr={last_admin:{id:`userEdit.error.lastAdmin.delete`},has_entries:{id:`userEdit.error.hasEntries`},reassign_to_self:{id:`userEdit.error.reassignToSelf`}};export{Or as component};
|