You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

11 lines
39 KiB

var K=Object.defineProperty;var q=(t,e,i)=>e in t?K(t,e,{enumerable:!0,configurable:!0,writable:!0,value:i}):t[e]=i;var n=(t,e,i)=>q(t,typeof e!="symbol"?e+"":e,i);import{a as J,r as Q,V as X,A as Z,D as _,b as O,c as ee,d as T,e as l,f as te,M as w,X as se,u as G,I as ie,C as oe,_ as ne,g as k,h as u,i as d,j as s,k as a,w as c,l as b,t as m,m as y,v as E,n as F,o as I,p as re,q as j,T as ae,s as P,F as le,x as p}from"./index-BLqts8WY.js";import{t as N,r as de,b as H,D as W,a as Y,o as pe,f as ue,c as me,g as fe,d as ge}from"./index-MyY_xqVN.js";import"./dexie-export-import-B7Ze1sjn.js";import{u as we}from"./index-CsfPLOYu.js";import{E as be}from"./EntityIcon-CF1RwQI5.js";import{I as ye}from"./ImageMethodDialog-B6b8zZ7c.js";import{P as ve}from"./PushNotificationPermission-9Wf_h46a.js";import{Q as he}from"./QuickNav-DgCyvgDx.js";import{T as ce}from"./TopMessage-BE0GBIgW.js";import{U as Se}from"./UserNameDialog-B8a82q1n.js";import"./PhotoDialog-Dn3GjI9b.js";const{Axios:ts,AxiosError:ke,CanceledError:ss,isCancel:is,CancelToken:os,VERSION:ns,all:rs,Cancel:as,isAxiosError:ls,spread:ds,toFormData:ps,AxiosHeaders:us,HttpStatusCode:ms,formToJSON:fs,getAdapter:gs,mergeConfig:ws}=J;var Ie=Object.defineProperty,Ce=Object.getOwnPropertyDescriptor,xe=(t,e,i,r)=>{for(var f=r>1?void 0:r?Ce(e,i):e,v=t.length-1,S;v>=0;v--)(S=t[v])&&(f=(r?S(e,i,f):S(f))||f);return r&&f&&Ie(e,i,f),f};const C=Q();let D=class extends X{constructor(){super(...arguments);n(this,"$notify");n(this,"AppConstants",Z);n(this,"DEFAULT_PUSH_SERVER",_);n(this,"DEFAULT_IMAGE_API_SERVER",O);n(this,"DEFAULT_PARTNER_API_SERVER",ee);n(this,"activeDid","");n(this,"apiServer","");n(this,"apiServerInput","");n(this,"derivationPath","");n(this,"downloadUrl","");n(this,"endorserLimits",null);n(this,"givenName","");n(this,"hideRegisterPromptOnNewContact",!1);n(this,"imageLimits",null);n(this,"imageServer","");n(this,"isRegistered",!1);n(this,"limitsMessage","");n(this,"loadingLimits",!1);n(this,"notifyingNewActivity",!1);n(this,"notifyingNewActivityTime","");n(this,"notifyingReminder",!1);n(this,"notifyingReminderMessage","");n(this,"notifyingReminderTime","");n(this,"partnerApiServer","");n(this,"partnerApiServerInput","");n(this,"passkeyExpirationDescription","");n(this,"passkeyExpirationMinutes",T);n(this,"previousPasskeyExpirationMinutes",T);n(this,"profileImageUrl");n(this,"publicHex","");n(this,"publicBase64","");n(this,"showAdvanced",!1);n(this,"showB64Copy",!1);n(this,"showContactGives",!1);n(this,"showDidCopy",!1);n(this,"showDerCopy",!1);n(this,"showGeneralAdvanced",!1);n(this,"showLargeIdenticonId");n(this,"showLargeIdenticonUrl");n(this,"showPubCopy",!1);n(this,"showShortcutBvc",!1);n(this,"subscription",null);n(this,"warnIfProdServer",!1);n(this,"warnIfTestServer",!1);n(this,"webPushServer","");n(this,"webPushServerInput","")}async mounted(){var i;try{await this.initializeState(),await this.processIdentity()}catch(r){console.error("Telling user to clear cache at page create because:",r),console.error("To repeat with concatenated error: telling user to clear cache at page create because: "+r),this.$notify({group:"alert",type:"danger",title:"Error Loading Profile",text:"See the Help page about errors with your personal data."},-1)}try{const r=await((i=navigator.serviceWorker)==null?void 0:i.ready);this.subscription=await r.pushManager.getSubscription(),this.subscription||(this.notifyingNewActivity||this.notifyingReminder)&&this.turnOffNotifyingFlags()}catch{this.$notify({group:"alert",type:"warning",title:"Cannot Set Notifications",text:"This browser does not support notifications. Use Chrome, or install this to the home screen, or try other suggestions on the 'Troubleshoot your notifications' page."},3e3)}this.passkeyExpirationDescription=N()}beforeUnmount(){this.downloadUrl&&URL.revokeObjectURL(this.downloadUrl)}async initializeState(){await l.open();const i=await te();this.activeDid=i.activeDid||"",this.apiServer=i.apiServer||"",this.apiServerInput=i.apiServer||"",this.givenName=((i==null?void 0:i.firstName)||"")+(i!=null&&i.lastName?` ${i.lastName}`:""),this.hideRegisterPromptOnNewContact=!!i.hideRegisterPromptOnNewContact,this.isRegistered=!!(i!=null&&i.isRegistered),this.imageServer=i.imageServer||"",this.notifyingNewActivity=!!i.notifyingNewActivityTime,this.notifyingNewActivityTime=i.notifyingNewActivityTime||"",this.notifyingReminder=!!i.notifyingReminderTime,this.notifyingReminderMessage=i.notifyingReminderMessage||"",this.notifyingReminderTime=i.notifyingReminderTime||"",this.partnerApiServer=i.partnerApiServer||"",this.partnerApiServerInput=i.partnerApiServer||"",this.profileImageUrl=i.profileImageUrl,this.showContactGives=!!i.showContactGivesInline,this.passkeyExpirationMinutes=i.passkeyExpirationMinutes??T,this.previousPasskeyExpirationMinutes=this.passkeyExpirationMinutes,this.showGeneralAdvanced=!!i.showGeneralAdvanced,this.showShortcutBvc=!!i.showShortcutBvc,this.warnIfProdServer=!!i.warnIfProdServer,this.warnIfTestServer=!!i.warnIfTestServer,this.webPushServer=i.webPushServer||"",this.webPushServerInput=i.webPushServer||""}doCopyTwoSecRedo(i,r){r(),we().copy(i).then(()=>setTimeout(r,2e3))}async toggleShowContactAmounts(){this.showContactGives=!this.showContactGives,await l.open(),await l.settings.update(w,{showContactGivesInline:this.showContactGives})}async toggleShowGeneralAdvanced(){this.showGeneralAdvanced=!this.showGeneralAdvanced,await l.open(),await l.settings.update(w,{showGeneralAdvanced:this.showGeneralAdvanced})}async toggleProdWarning(){this.warnIfProdServer=!this.warnIfProdServer,await l.open(),await l.settings.update(w,{warnIfProdServer:this.warnIfProdServer})}async toggleTestWarning(){this.warnIfTestServer=!this.warnIfTestServer,await l.open(),await l.settings.update(w,{warnIfTestServer:this.warnIfTestServer})}async toggleShowShortcutBvc(){this.showShortcutBvc=!this.showShortcutBvc,await l.open(),await l.settings.update(w,{showShortcutBvc:this.showShortcutBvc})}readableDate(i){return i.substring(0,i.indexOf("T"))}async processIdentity(){var r;const i=await de(this.activeDid);if(i!=null&&i.identity){const f=JSON.parse(i.identity);this.publicHex=f.keys[0].publicKeyHex,this.publicBase64=H.Buffer.from(this.publicHex,"hex").toString("base64"),this.derivationPath=(r=f.keys[0].meta)==null?void 0:r.derivationPath,await this.checkLimitsFor(this.activeDid)}else i!=null&&i.publicKeyHex&&(this.publicHex=i.publicKeyHex,this.publicBase64=H.Buffer.from(this.publicHex,"hex").toString("base64"),await this.checkLimitsFor(this.activeDid))}async showNewActivityNotificationInfo(){this.$notify({group:"modal",type:"confirm",title:"New Activity Notification",text:`
This will only notify you when there is new relevant activity for you personally.
Note that it runs on your device and many factors may affect delivery,
so if you want a reliable but simple daily notification then choose a 'Reminder'.
Do you want more details?
`,onYes:async()=>{await this.$router.push({name:"help-notification-types"})},yesText:"tell me more."},-1)}async showNewActivityNotificationChoice(){this.notifyingNewActivity?this.$notify({group:"modal",type:"notification-off",title:W,text:"",callback:async i=>{i&&(await l.settings.update(w,{notifyingNewActivityTime:""}),this.notifyingNewActivity=!1,this.notifyingNewActivityTime="")}},-1):this.$refs.pushNotificationPermission.open(W,async(i,r)=>{i&&(await l.settings.update(w,{notifyingNewActivityTime:r}),this.notifyingNewActivity=!0,this.notifyingNewActivityTime=r)})}async showReminderNotificationInfo(){this.$notify({group:"modal",type:"confirm",title:"Reminder Notification",text:`
This will notify you at a specific time each day.
Note that it does not give you personalized notifications,
so if you want less reliable but personalized notification then choose a 'New Activity' Notification.
Do you want more details?
`,onYes:async()=>{await this.$router.push({name:"help-notification-types"})},yesText:"tell me more."},-1)}async showReminderNotificationChoice(){this.notifyingReminder?this.$notify({group:"modal",type:"notification-off",title:Y,text:"",callback:async i=>{i&&(await l.settings.update(w,{notifyingReminderMessage:"",notifyingReminderTime:""}),this.notifyingReminder=!1,this.notifyingReminderMessage="",this.notifyingReminderTime="")}},-1):this.$refs.pushNotificationPermission.open(Y,async(i,r,f)=>{i&&(await l.settings.update(w,{notifyingReminderMessage:f,notifyingReminderTime:r}),this.notifyingReminder=!0,this.notifyingReminderMessage=f||"",this.notifyingReminderTime=r)})}async toggleHideRegisterPromptOnNewContact(){const i=!this.hideRegisterPromptOnNewContact;await l.open(),await l.settings.update(w,{hideRegisterPromptOnNewContact:i}),this.hideRegisterPromptOnNewContact=i}async updatePasskeyExpiration(){await l.open(),await l.settings.update(w,{passkeyExpirationMinutes:this.passkeyExpirationMinutes}),ge(),this.passkeyExpirationDescription=N()}async turnOffNotifyingFlags(){await l.open(),await l.settings.update(w,{notifyingNewActivityTime:"",notifyingReminderMessage:"",notifyingReminderTime:""}),this.notifyingNewActivity=!1,this.notifyingNewActivityTime="",this.notifyingReminder=!1,this.notifyingReminderMessage="",this.notifyingReminderTime=""}async exportDatabase(){try{const i=await this.generateDatabaseBlob();this.downloadUrl=this.createBlobURL(i),this.downloadDatabaseBackup(this.downloadUrl),this.notifyDownloadStarted(),setTimeout(()=>URL.revokeObjectURL(this.downloadUrl),1e3)}catch(i){this.handleExportError(i)}}async generateDatabaseBlob(){return await l.export({prettyJson:!0})}createBlobURL(i){return URL.createObjectURL(i)}downloadDatabaseBackup(i){const r=this.$refs.downloadLink;r.href=i,r.download=`${l.name}-backup.json`,r.click()}computedStartDownloadLinkClassNames(){return{hidden:this.downloadUrl}}computedDownloadLinkClassNames(){return{hidden:!this.downloadUrl}}notifyDownloadStarted(){this.$notify({group:"alert",type:"success",title:"Download Started",text:"See your downloads directory for the backup. It is in the Dexie format."},-1)}handleExportError(i){console.error("Export Error:",i),this.$notify({group:"alert",type:"danger",title:"Export Error",text:"There was an error exporting the data."},-1)}async uploadImportFile(i){C.value=i.target.files[0]}showContactImport(){return!!C.value}confirmSubmitImportFile(){C.value!=null&&this.$notify({group:"modal",type:"confirm",title:"Replace All",text:"This will replace all settings and contacts, so we recommend you first do the backup step above. Are you sure you want to import and replace all contacts and settings?",onYes:this.submitImportFile},-1)}async submitImportFile(){C.value!=null&&(await l.delete(),await se.import(C.value,{progressCallback:this.progressCallback}))}async checkContactImports(){const i=new FileReader;i.onload=r=>{var v,S,A,h;const f=((v=r.target)==null?void 0:v.result)||"{}";try{const x=((h=(A=(S=JSON.parse(f).data)==null?void 0:S.data)==null?void 0:A.find(R=>R.tableName==="contacts"))==null?void 0:h.rows).map(R=>pe(["$types"],R));this.$router.push({name:"contact-import",query:{contacts:JSON.stringify(x)}})}catch(g){console.error("Error checking contact imports:",g),this.$notify({group:"alert",type:"danger",title:"Error Importing",text:"There was an error reading that Dexie file."},3e3)}},i.readAsText(C.value)}progressCallback(i){return console.log(`Import progress: ${i.completedRows} of ${i.totalRows} rows completed.`),i.done&&this.$notify({group:"alert",type:"success",title:"Import Complete",text:""},5e3),!0}async checkLimits(){this.activeDid?this.checkLimitsFor(this.activeDid):this.limitsMessage="You have no identifier, or your data has been corrupted."}async checkLimitsFor(i){this.loadingLimits=!0,this.limitsMessage="";try{const r=await ue(this.apiServer,this.axios,i);if(r.status===200){if(this.endorserLimits=r.data,!this.isRegistered)try{await G(i,{isRegistered:!0}),this.isRegistered=!0}catch(v){console.error("Got an error updating settings:",v),this.$notify({group:"alert",type:"danger",title:"Update Error",text:"Unable to update your settings. Check claim limits again."},-1)}const f=await me(this.axios,i);f.status===200&&(this.imageLimits=f.data)}}catch(r){this.handleRateLimitsError(r)}this.loadingLimits=!1}handleRateLimitsError(i){var r,f;if(i instanceof ke){const v=(r=i.response)==null?void 0:r.data;this.limitsMessage=((f=v==null?void 0:v.error)==null?void 0:f.message)||"Bad server response.",console.error("Got bad response retrieving limits, which usually means user isn't registered.",i)}else this.limitsMessage="Got an error retrieving limits.",console.error("Got some error retrieving limits:",i)}async onClickSaveApiServer(){await l.open(),await l.settings.update(w,{apiServer:this.apiServerInput}),this.apiServer=this.apiServerInput}async onClickSavePartnerServer(){await l.open(),await l.settings.update(w,{partnerApiServer:this.partnerApiServerInput}),this.partnerApiServer=this.partnerApiServerInput}async onClickSavePushServer(){await l.open(),await l.settings.update(w,{webPushServer:this.webPushServerInput}),this.webPushServer=this.webPushServerInput,this.$notify({group:"alert",type:"warning",title:"Reload",text:"Now reload the app to get a new VAPID to use with this push server."},-1)}openImageDialog(){this.$refs.imageMethodDialog.open(async i=>{await l.open(),await l.settings.update(w,{profileImageUrl:i}),this.profileImageUrl=i},ie,!0)}confirmDeleteImage(){this.$notify({group:"modal",type:"confirm",title:"Note that anyone with you already as a contact will no longer see a picture, and you will have to reshare your data with them if you save a new picture. Are you sure you want to delete your profile picture?",text:"",onYes:this.deleteImage},-1)}async deleteImage(){if(this.profileImageUrl)try{const i=await fe(this.activeDid);this.passkeyExpirationDescription=N();const r=await this.axios.delete(O+"/image/"+encodeURIComponent(this.profileImageUrl),{headers:i});r.status===204||(console.error("Non-success deleting image:",r),this.$notify({group:"alert",type:"danger",title:"Error",text:"There was a problem deleting the image. Contact support if you want it removed from the servers."},-1)),await l.open(),await l.settings.update(w,{profileImageUrl:void 0}),this.profileImageUrl=void 0}catch(i){console.error("Error deleting image:",i),i.response.status===404?(console.error("The image was already deleted:",i),await G(this.activeDid,{profileImageUrl:void 0}),this.profileImageUrl=void 0):this.$notify({group:"alert",type:"danger",title:"Error",text:"There was an error deleting the image."},5e3)}}};D=xe([oe({components:{EntityIcon:be,ImageMethodDialog:ye,PushNotificationPermission:ve,QuickNav:he,TopMessage:ce,UserNameDialog:Se}})],D);const Re={id:"Content",class:"p-6 pb-24 max-w-3xl mx-auto"},Ae={key:0,id:"noticeBeforeShare",class:"bg-amber-200 text-amber-900 border-amber-500 border-dashed border text-center rounded-md overflow-hidden px-4 py-3 mt-4"},Ee={id:"sectionIdentityDetails",class:"bg-slate-100 rounded-md overflow-hidden px-4 py-3 mt-4"},Pe={key:0},Te={class:"text-xl font-semibold mb-2"},Ne={class:"whitespace-nowrap"},De={key:1,class:"block w-full text-center text-md bg-amber-200 border border-dashed border-slate-400 px-1.5 py-2 rounded-md mb-2"},Ue={class:"flex justify-center mt-4"},Le={key:0,class:"flex justify-between"},$e={key:1,class:"text-center"},Me={class:"mt-6"},Be={class:"flex justify-center text-center"},Ve={class:"flex justify-center"},Oe={key:2,class:"fixed z-[100] top-0 inset-x-0 w-full"},Ge={class:"absolute inset-0 h-screen flex flex-col items-center justify-center bg-slate-900/50"},Fe={class:"text-sm text-slate-500 flex justify-start items-center mb-1","data-testId":"didWrapper"},je={class:"truncate"},He={class:"text-blue-500 text-sm font-bold"},We={key:1,id:"noticeBeforeAnnounce",class:"bg-amber-200 text-amber-900 border-amber-500 border-dashed border text-center rounded-md overflow-hidden px-4 py-3 mt-4"},Ye={id:"sectionNotifications",class:"bg-slate-100 rounded-md overflow-hidden px-4 py-4 mt-8 mb-8"},ze={class:"flex items-center justify-between"},Ke={key:0,class:"w-full flex justify-between"},qe={class:"ml-8 mr-8"},Je={class:"mt-2 flex items-center justify-between"},Qe={key:1,class:"w-full text-right"},Xe={id:"sectionSearchLocation",class:"bg-slate-100 rounded-md overflow-hidden px-4 py-4 mt-8 mb-8"},Ze={key:2,id:"sectionUsageLimits",class:"bg-slate-100 rounded-md overflow-hidden px-4 py-4 mt-8 mb-8"},_e={key:0,class:"text-center"},et={key:1},tt={class:"text-sm"},st={class:"whitespace-nowrap"},it={class:"mt-3 text-sm"},ot={class:"whitespace-nowrap"},nt={key:0,class:"mt-3 text-sm"},rt={class:"whitespace-nowrap"},at={id:"sectionDataExport",class:"bg-slate-100 rounded-md overflow-hidden px-4 py-4 mt-8 mb-8"},lt={class:"mt-4"},dt={class:"list-disc list-outside ml-4"},pt={key:3,id:"sectionAdvanced"},ut={id:"sectionDeepIdentifier",class:"bg-slate-100 rounded-md overflow-hidden px-4 py-3 mb-4"},mt={class:"text-sm text-slate-500 flex justify-start items-center mb-1"},ft={class:"truncate"},gt={class:"text-sm text-slate-500 flex justify-start items-center mb-1"},wt={class:"truncate"},bt={key:0,class:"text-sm text-slate-500 flex justify-start items-center mb-1"},yt={class:"truncate"},vt={key:1,class:"text-sm text-slate-500 flex justify-start items-center mb-1"},ht={id:"sectionImportContactsSettings",class:"mt-4"},ct={class:"ml-4 mt-2"},St={key:0,class:"mt-4"},kt={class:"flex justify-center"},It={class:"flex justify-center"},Ct={class:"relative ml-2"},xt={id:"sectionClaimServer"},Rt={class:"px-4 py-4"},At={class:"relative ml-2"},Et={class:"relative ml-2"},Pt={id:"sectionNotificationPushServer",class:"px-3 py-4"},Tt={key:0,class:"px-4 text-sm"},Nt={class:"px-3 py-4"},Dt={key:1,class:"px-4 text-sm"},Ut={id:"sectionImageServerURL",class:"mt-2"},Lt={class:"text-sm"},$t={class:"relative ml-2"},Mt={class:"relative ml-2"},Bt={class:"flex mt-4"},Vt={id:"sectionPasskeyExpiration",class:"flex justify-between"},Ot={class:"text-sm ml-2"},Gt={class:"relative ml-2"},Ft={class:"relative ml-2"};function jt(t,e,i,r,f,v){var L,$,M,B,V;const S=k("QuickNav"),A=k("TopMessage"),h=k("router-link"),g=k("fa"),U=k("UserNameDialog"),x=k("EntityIcon"),R=k("ImageMethodDialog"),z=k("PushNotificationPermission");return p(),u(le,null,[d(S,{selected:"Profile"}),d(A),s("section",Re,[e[123]||(e[123]=s("h1",{id:"ViewHeading",class:"text-4xl text-center font-light"}," Your Identity ",-1)),t.activeDid?b("",!0):(p(),u("div",Ae,[e[50]||(e[50]=s("p",{class:"mb-4"},[s("b",null,"Note:"),a(" Before you can share with others or take any action, you need an identifier. ")],-1)),d(h,{to:{name:"start"},class:"inline-block text-md bg-gradient-to-b from-blue-400 to-blue-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-4 py-2 rounded-md"},{default:c(()=>e[49]||(e[49]=[a(" Create An Identifier ")])),_:1})])),s("div",Ee,[t.givenName?(p(),u("div",Pe,[s("h2",Te,[s("span",Ne,[d(h,{to:{name:"contact-qr"},class:"bg-slate-500 text-white px-1.5 py-1 rounded-md"},{default:c(()=>[d(g,{icon:"qrcode",class:"fa-fw text-xl"})]),_:1})]),a(" "+m(t.givenName)+" ",1),d(h,{to:{name:"new-edit-account"}},{default:c(()=>[d(g,{icon:"pen",class:"text-xs text-blue-500 ml-2 mb-1"})]),_:1})])])):(p(),u("span",De,[s("button",{onClick:e[0]||(e[0]=()=>this.$refs.userNameDialog.open(o=>this.givenName=o)),class:"inline-block text-md uppercase bg-gradient-to-b from-blue-400 to-blue-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-4 py-2 rounded-md"}," Set Your Name "),d(U,{ref:"userNameDialog"},null,512)])),s("div",Ue,[t.profileImageUrl?(p(),u("span",Le,[d(x,{"icon-size":96,profileImageUrl:t.profileImageUrl,class:"inline-block align-text-bottom border border-slate-300 rounded",onClick:e[1]||(e[1]=o=>t.showLargeIdenticonUrl=t.profileImageUrl)},null,8,["profileImageUrl"]),d(g,{icon:"trash-can",onClick:t.confirmDeleteImage,class:"text-red-500 fa-fw ml-8 mt-8 w-12 h-12"},null,8,["onClick"])])):(p(),u("div",$e,[s("div",{class:"",onClick:e[3]||(e[3]=o=>t.openImageDialog())},[d(g,{icon:"camera",class:"bg-gradient-to-b from-blue-400 to-blue-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-2 py-2 rounded-l"}),d(g,{icon:"image-portrait",class:"bg-gradient-to-b from-blue-400 to-blue-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-2 py-2 rounded-r",onClick:e[2]||(e[2]=o=>t.openImageDialog())})])])),d(R,{ref:"imageMethodDialog"},null,512)]),s("div",Me,[s("div",Be,[a(" People "+m(t.profileImageUrl?"without your image":"")+" see this ",1),e[51]||(e[51]=s("br",null,null,-1)),e[52]||(e[52]=a(" (if you've let them see your activity): "))]),s("div",Ve,[d(x,{entityId:t.activeDid,iconSize:64,class:"inline-block align-middle border border-slate-300 rounded-md mr-1",onClick:e[4]||(e[4]=o=>t.showLargeIdenticonId=t.activeDid)},null,8,["entityId"])])]),t.showLargeIdenticonId||t.showLargeIdenticonUrl?(p(),u("div",Oe,[s("div",Ge,[d(x,{entityId:t.showLargeIdenticonId,iconSize:512,profileImageUrl:t.showLargeIdenticonUrl,class:"flex w-11/12 max-w-sm mx-auto mb-3 overflow-hidden bg-white rounded-lg shadow-lg",onClick:e[5]||(e[5]=o=>{t.showLargeIdenticonId=void 0,t.showLargeIdenticonUrl=void 0})},null,8,["entityId","profileImageUrl"])])])):b("",!0),e[54]||(e[54]=s("div",{class:"text-slate-500 text-sm font-bold"},"ID",-1)),s("div",Fe,[s("code",je,m(t.activeDid),1),s("button",{onClick:e[6]||(e[6]=o=>t.doCopyTwoSecRedo(t.activeDid,()=>t.showDidCopy=!t.showDidCopy)),class:"ml-2"},[d(g,{icon:"copy",class:"text-slate-400 fa-fw"})]),y(s("span",null,"Copied",512),[[E,t.showDidCopy]])]),s("div",He,[d(h,{to:{path:"/did/"+encodeURIComponent(t.activeDid)}},{default:c(()=>e[53]||(e[53]=[a(" Your Activity ")])),_:1},8,["to"])])]),!t.loadingLimits&&!((L=t.endorserLimits)!=null&&L.nextWeekBeginDateTime)?(p(),u("div",We,[e[56]||(e[56]=s("p",{class:"mb-4"},[s("b",null,"Note:"),a(" Before you can publicly announce a new project or time commitment, a friend needs to register you. ")],-1)),d(h,{to:{name:"contact-qr"},class:"inline-block text-md uppercase bg-gradient-to-b from-blue-400 to-blue-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-4 py-2 rounded-md"},{default:c(()=>e[55]||(e[55]=[a(" Share Your Info ")])),_:1})])):b("",!0),s("div",Ye,[e[64]||(e[64]=s("div",{class:"mb-2 font-bold"},"Notifications",-1)),s("div",ze,[s("div",null,[e[57]||(e[57]=a(" Reminder Notification ")),d(g,{icon:"question-circle",class:"text-slate-400 fa-fw ml-2 cursor-pointer",onClick:F(t.showReminderNotificationInfo,["stop"])},null,8,["onClick"])]),s("div",{class:"relative ml-2 cursor-pointer",onClick:e[8]||(e[8]=o=>t.showReminderNotificationChoice())},[y(s("input",{type:"checkbox","onUpdate:modelValue":e[7]||(e[7]=o=>t.notifyingReminder=o),class:"sr-only"},null,512),[[I,t.notifyingReminder]]),e[58]||(e[58]=s("div",{class:"block bg-slate-500 w-14 h-8 rounded-full"},null,-1)),e[59]||(e[59]=s("div",{class:"dot absolute left-1 top-1 bg-slate-400 w-6 h-6 rounded-full transition"},null,-1))])]),t.notifyingReminder?(p(),u("div",Ke,[s("span",qe,'Message: "'+m(t.notifyingReminderMessage)+'"',1),s("span",null,m(t.notifyingReminderTime.replace(" "," ")),1)])):b("",!0),s("div",Je,[s("div",null,[e[60]||(e[60]=a(" New Activity Notification ")),d(g,{icon:"question-circle",class:"text-slate-400 fa-fw ml-2 cursor-pointer",onClick:F(t.showNewActivityNotificationInfo,["stop"])},null,8,["onClick"])]),s("div",{class:"relative ml-2 cursor-pointer",onClick:e[10]||(e[10]=o=>t.showNewActivityNotificationChoice())},[y(s("input",{type:"checkbox","onUpdate:modelValue":e[9]||(e[9]=o=>t.notifyingNewActivity=o),class:"sr-only"},null,512),[[I,t.notifyingNewActivity]]),e[61]||(e[61]=s("div",{class:"block bg-slate-500 w-14 h-8 rounded-full"},null,-1)),e[62]||(e[62]=s("div",{class:"dot absolute left-1 top-1 bg-slate-400 w-6 h-6 rounded-full transition"},null,-1))])]),t.notifyingNewActivityTime?(p(),u("div",Qe,m(t.notifyingNewActivityTime.replace(" "," ")),1)):b("",!0),d(h,{class:"pl-4 text-sm text-blue-500",to:"/help-notifications"},{default:c(()=>e[63]||(e[63]=[a(" Troubleshoot your notifications. ")])),_:1})]),d(z,{ref:"pushNotificationPermission"},null,512),s("div",Xe,[e[66]||(e[66]=s("div",{class:"mb-2 font-bold"},"Location for Searches",-1)),d(h,{to:{name:"search-area"},class:"block w-full text-center text-m bg-gradient-to-b from-blue-400 to-blue-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-1.5 py-2 rounded-md mb-2 mt-6"},{default:c(()=>e[65]||(e[65]=[a(" Set Search Area… ")])),_:1})]),t.activeDid?(p(),u("div",Ze,[e[79]||(e[79]=s("div",{class:"mb-2 font-bold"},"Usage Limits",-1)),t.loadingLimits?(p(),u("div",_e,[e[67]||(e[67]=a(" Checking… ")),d(g,{icon:"spinner",class:"fa-spin"})])):b("",!0),s("div",null,m(t.limitsMessage),1),($=t.endorserLimits)!=null&&$.nextWeekBeginDateTime?(p(),u("div",et,[s("p",tt,[e[68]||(e[68]=a(" You have done ")),s("b",null,m(t.endorserLimits.doneClaimsThisWeek)+" claims",1),e[69]||(e[69]=a(" out of ")),s("b",null,m(t.endorserLimits.maxClaimsPerWeek),1),e[70]||(e[70]=a(" for this week. Your claims counter resets at ")),s("b",st,m(t.readableDate(t.endorserLimits.nextWeekBeginDateTime)),1)]),s("p",it,[e[71]||(e[71]=a(" You have done ")),s("b",null,m(t.endorserLimits.doneRegistrationsThisMonth)+" registrations",1),e[72]||(e[72]=a(" out of ")),s("b",null,m(t.endorserLimits.maxRegistrationsPerMonth),1),e[73]||(e[73]=a(" for this month. ")),e[74]||(e[74]=s("i",null,"(You cannot register anyone else on your first day.)",-1)),e[75]||(e[75]=a(" Your registration counter resets at ")),s("b",ot,m(t.readableDate(t.endorserLimits.nextMonthBeginDateTime)),1)]),t.imageLimits?(p(),u("p",nt,[e[76]||(e[76]=a(" You have uploaded ")),s("b",null,m((M=t.imageLimits)==null?void 0:M.doneImagesThisWeek)+" images",1),e[77]||(e[77]=a(" out of ")),s("b",null,m((B=t.imageLimits)==null?void 0:B.maxImagesPerWeek),1),e[78]||(e[78]=a(" for this week. Your image counter resets at ")),s("b",rt,m(t.readableDate((V=t.imageLimits)==null?void 0:V.nextWeekBeginDateTime)),1)])):b("",!0)])):b("",!0),s("button",{class:"block float-right w-fit text-center text-md bg-gradient-to-b from-slate-400 to-slate-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-4 py-2 rounded-md mt-2",onClick:e[11]||(e[11]=o=>t.checkLimits())}," Recheck Limits ")])):b("",!0),s("div",at,[e[86]||(e[86]=s("div",{class:"mb-2 font-bold"},"Data Export",-1)),t.activeDid?(p(),re(h,{key:0,to:{name:"seed-backup"},class:"block w-full text-center text-md bg-gradient-to-b from-blue-400 to-blue-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-1.5 py-2 rounded-md mb-2 mt-2"},{default:c(()=>e[80]||(e[80]=[a(" Backup Identifier Seed ")])),_:1})):b("",!0),s("button",{class:j([t.computedStartDownloadLinkClassNames(),"block w-full text-center text-md bg-gradient-to-b from-blue-400 to-blue-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-1.5 py-2 rounded-md"]),onClick:e[12]||(e[12]=o=>t.exportDatabase())},e[81]||(e[81]=[a(" Download Settings & Contacts "),s("br",null,null,-1),a(" (excluding Identifier Data) ")]),2),s("a",{ref:"downloadLink",class:j([t.computedDownloadLinkClassNames(),"block w-full text-center text-md bg-gradient-to-b from-green-500 to-green-800 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-1.5 py-2 rounded-md mb-6"])}," If no download happened yet, click again here to download now. ",2),s("div",lt,[e[85]||(e[85]=s("p",null," After the download, you can save the file in your preferred storage location. ",-1)),s("ul",null,[e[84]||(e[84]=s("li",{class:"list-disc list-outside ml-4"},' On iOS: Choose "More..." and select a place in iCloud, or go "Back" and save to another location. ',-1)),s("li",dt,[e[82]||(e[82]=a(' On Android: Choose "Open" and then share ')),d(g,{icon:"share-nodes",class:"fa-fw"}),e[83]||(e[83]=a(" to your prefered place. "))])])])]),s("h3",{id:"advanced",class:"text-sm uppercase font-semibold mb-3",onClick:e[13]||(e[13]=o=>t.showAdvanced=!t.showAdvanced)}," Advanced "),t.showAdvanced||t.showGeneralAdvanced?(p(),u("div",pt,[e[119]||(e[119]=s("p",{class:"text-rose-600 mb-8"}," Beware: the features here can be confusing and even change data in ways you do not expect. But we support your freedom! ",-1)),e[120]||(e[120]=s("span",{class:"text-slate-500 text-sm font-bold mb-2"}," Deep Identifier Details ",-1)),s("div",ut,[e[87]||(e[87]=s("div",{class:"text-slate-500 text-sm font-bold"},"Public Key (base 64)",-1)),s("div",mt,[s("code",ft,m(t.publicBase64),1),s("button",{onClick:e[14]||(e[14]=o=>t.doCopyTwoSecRedo(t.publicBase64,()=>t.showB64Copy=!t.showB64Copy)),class:"ml-2"},[d(g,{icon:"copy",class:"text-slate-400 fa-fw"})]),y(s("span",null,"Copied",512),[[E,t.showB64Copy]])]),e[88]||(e[88]=s("div",{class:"text-slate-500 text-sm font-bold"},"Public Key (hex)",-1)),s("div",gt,[s("code",wt,m(t.publicHex),1),s("button",{onClick:e[15]||(e[15]=o=>t.doCopyTwoSecRedo(t.publicHex,()=>t.showPubCopy=!t.showPubCopy)),class:"ml-2"},[d(g,{icon:"copy",class:"text-slate-400 fa-fw"})]),y(s("span",null,"Copied",512),[[E,t.showPubCopy]])]),e[89]||(e[89]=s("div",{class:"text-slate-500 text-sm font-bold"},"Derivation Path",-1)),t.derivationPath?(p(),u("div",bt,[s("code",yt,m(t.derivationPath),1),s("button",{onClick:e[16]||(e[16]=o=>t.doCopyTwoSecRedo(t.derivationPath,()=>t.showDerCopy=!t.showDerCopy)),class:"ml-2"},[d(g,{icon:"copy",class:"text-slate-400 fa-fw"})]),y(s("span",null,"Copied",512),[[E,t.showDerCopy]])])):(p(),u("div",vt," (none) "))]),d(h,{id:"switch-identity-link",to:{name:"identity-switcher"},class:"block w-fit text-center text-md uppercase bg-gradient-to-b from-slate-400 to-slate-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-4 py-2 rounded-md mb-2"},{default:c(()=>e[90]||(e[90]=[a(" Switch Identifier ")])),_:1}),s("div",ht,[e[93]||(e[93]=s("h2",{class:"text-slate-500 text-sm font-bold"}," Import Contacts & Settings Database ",-1)),s("div",ct,[s("input",{type:"file",onChange:e[17]||(e[17]=(...o)=>t.uploadImportFile&&t.uploadImportFile(...o)),class:"ml-2"},null,32),d(ae,{"enter-active-class":"transform ease-out duration-300 transition","enter-from-class":"translate-y-2 opacity-0 sm:translate-y-4","enter-to-class":"translate-y-0 opacity-100 sm:translate-y-0","leave-active-class":"transition ease-in duration-500","leave-from-class":"opacity-100","leave-to-class":"opacity-0"},{default:c(()=>[t.showContactImport()?(p(),u("div",St,[s("div",kt,[s("button",{class:"block text-center text-md bg-gradient-to-b from-blue-400 to-blue-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-1.5 py-2 rounded-md mb-6",onClick:e[18]||(e[18]=o=>t.confirmSubmitImportFile())},e[91]||(e[91]=[a(" Overwrite Settings & Contacts "),s("br",null,null,-1),a(" (which doesn't include Identifier Data) ")]))]),s("div",It,[s("button",{class:"block text-center text-md bg-gradient-to-b from-blue-400 to-blue-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-1.5 py-2 rounded-md mb-6",onClick:e[19]||(e[19]=o=>t.checkContactImports())},e[92]||(e[92]=[a(" Import Only Contacts "),s("br",null,null,-1),a(" after comparing ")]))])])):b("",!0)]),_:1})])]),s("label",{for:"toggleShowAmounts",class:"flex items-center justify-between cursor-pointer my-4",onClick:e[21]||(e[21]=(...o)=>t.toggleShowContactAmounts&&t.toggleShowContactAmounts(...o))},[e[96]||(e[96]=s("span",{class:"text-slate-500 text-sm font-bold"},"Contacts Display",-1)),e[97]||(e[97]=s("span",{class:"ml-2"},"Show hours given & received",-1)),s("div",Ct,[y(s("input",{type:"checkbox","onUpdate:modelValue":e[20]||(e[20]=o=>t.showContactGives=o),name:"showContactGives",class:"sr-only"},null,512),[[I,t.showContactGives]]),e[94]||(e[94]=s("div",{class:"block bg-slate-500 w-14 h-8 rounded-full"},null,-1)),e[95]||(e[95]=s("div",{class:"dot absolute left-1 top-1 bg-slate-400 w-6 h-6 rounded-full transition"},null,-1))])]),s("div",xt,[e[104]||(e[104]=s("h2",{class:"text-slate-500 text-sm font-bold mt-4"},"Claim Server",-1)),s("div",Rt,[y(s("input",{type:"text",class:"block w-full rounded border border-slate-400 px-4 py-2","onUpdate:modelValue":e[22]||(e[22]=o=>t.apiServerInput=o)},null,512),[[P,t.apiServerInput]]),t.apiServerInput!=t.apiServer?(p(),u("button",{key:0,class:"w-full px-4 rounded bg-yellow-500 border border-slate-400",onClick:e[23]||(e[23]=o=>t.onClickSaveApiServer())},[d(g,{icon:"floppy-disk",class:"fa-fw",color:"white"})])):b("",!0),s("button",{class:"px-3 rounded bg-slate-200 border border-slate-400",onClick:e[24]||(e[24]=o=>t.apiServerInput=t.AppConstants.PROD_ENDORSER_API_SERVER)}," Use Prod "),s("button",{class:"px-3 rounded bg-slate-200 border border-slate-400",onClick:e[25]||(e[25]=o=>t.apiServerInput=t.AppConstants.TEST_ENDORSER_API_SERVER)}," Use Test "),s("button",{class:"px-3 rounded bg-slate-200 border border-slate-400",onClick:e[26]||(e[26]=o=>t.apiServerInput=t.AppConstants.LOCAL_ENDORSER_API_SERVER)}," Use Local ")]),s("label",{for:"toggleProdWarningMessage",class:"flex items-center justify-between cursor-pointer px-4 py-4",onClick:e[28]||(e[28]=(...o)=>t.toggleProdWarning&&t.toggleProdWarning(...o))},[e[100]||(e[100]=s("h2",null,"Show warning if on prod server",-1)),s("div",At,[y(s("input",{type:"checkbox","onUpdate:modelValue":e[27]||(e[27]=o=>t.warnIfProdServer=o),class:"sr-only"},null,512),[[I,t.warnIfProdServer]]),e[98]||(e[98]=s("div",{class:"block bg-slate-500 w-14 h-8 rounded-full"},null,-1)),e[99]||(e[99]=s("div",{class:"dot absolute left-1 top-1 bg-slate-400 w-6 h-6 rounded-full transition"},null,-1))])]),s("label",{for:"toggleTestWarningMessage",class:"flex items-center justify-between cursor-pointer px-4 py-4",onClick:e[30]||(e[30]=(...o)=>t.toggleTestWarning&&t.toggleTestWarning(...o))},[e[103]||(e[103]=s("h2",null,"Show warning if on non-prod server",-1)),s("div",Et,[y(s("input",{type:"checkbox","onUpdate:modelValue":e[29]||(e[29]=o=>t.warnIfTestServer=o),class:"sr-only"},null,512),[[I,t.warnIfTestServer]]),e[101]||(e[101]=s("div",{class:"block bg-slate-500 w-14 h-8 rounded-full"},null,-1)),e[102]||(e[102]=s("div",{class:"dot absolute left-1 top-1 bg-slate-400 w-6 h-6 rounded-full transition"},null,-1))])])]),e[121]||(e[121]=s("h2",{class:"text-slate-500 text-sm font-bold mb-2"}," Notification Push Server ",-1)),s("div",Pt,[y(s("input",{type:"text",class:"block w-full rounded border border-slate-400 px-3 py-2","onUpdate:modelValue":e[31]||(e[31]=o=>t.webPushServerInput=o)},null,512),[[P,t.webPushServerInput]]),t.webPushServerInput!=t.webPushServer?(p(),u("button",{key:0,class:"w-full px-4 rounded bg-yellow-500 border border-slate-400",onClick:e[32]||(e[32]=o=>t.onClickSavePushServer())},[d(g,{icon:"floppy-disk",class:"fa-fw",color:"white"})])):b("",!0),s("button",{class:"px-3 rounded bg-slate-200 border border-slate-400",onClick:e[33]||(e[33]=o=>t.webPushServerInput=t.AppConstants.PROD_PUSH_SERVER)}," Use Prod "),s("button",{class:"px-3 rounded bg-slate-200 border border-slate-400",onClick:e[34]||(e[34]=o=>t.webPushServerInput=t.AppConstants.TEST1_PUSH_SERVER)}," Use Test 1 "),s("button",{class:"px-3 rounded bg-slate-200 border border-slate-400",onClick:e[35]||(e[35]=o=>t.webPushServerInput=t.AppConstants.TEST2_PUSH_SERVER)}," Use Test 2 ")]),t.webPushServerInput?b("",!0):(p(),u("span",Tt," When that setting is blank, this app will use the default web push server URL: "+m(t.DEFAULT_PUSH_SERVER),1)),e[122]||(e[122]=s("h2",{class:"text-slate-500 text-sm font-bold mb-2"},"Partner Server URL",-1)),s("div",Nt,[y(s("input",{type:"text",class:"block w-full rounded border border-slate-400 px-3 py-2","onUpdate:modelValue":e[36]||(e[36]=o=>t.partnerApiServerInput=o)},null,512),[[P,t.partnerApiServerInput]]),t.partnerApiServerInput!=t.partnerApiServer?(p(),u("button",{key:0,class:"w-full px-4 rounded bg-yellow-500 border border-slate-400",onClick:e[37]||(e[37]=o=>t.onClickSavePartnerServer())},[d(g,{icon:"floppy-disk",class:"fa-fw",color:"white"})])):b("",!0),s("button",{class:"px-3 rounded bg-slate-200 border border-slate-400",onClick:e[38]||(e[38]=o=>t.partnerApiServerInput=t.AppConstants.PROD_PARTNER_API_SERVER)}," Use Prod "),s("button",{class:"px-3 rounded bg-slate-200 border border-slate-400",onClick:e[39]||(e[39]=o=>t.partnerApiServerInput=t.AppConstants.TEST_PARTNER_API_SERVER)}," Use Test "),s("button",{class:"px-3 rounded bg-slate-200 border border-slate-400",onClick:e[40]||(e[40]=o=>t.partnerApiServerInput=t.AppConstants.LOCAL_PARTNER_API_SERVER)}," Use Local ")]),t.partnerApiServerInput?b("",!0):(p(),u("span",Dt," When that setting is blank, this app will use the default partner server URL: "+m(t.DEFAULT_PARTNER_API_SERVER),1)),s("div",Ut,[e[105]||(e[105]=s("span",{class:"text-slate-500 text-sm font-bold"},"Image Server URL",-1)),e[106]||(e[106]=a("   ")),s("span",Lt,m(t.DEFAULT_IMAGE_API_SERVER),1)]),s("label",{for:"toggleHideRegisterPromptOnNewContact",class:"flex items-center justify-between cursor-pointer mt-4",onClick:e[42]||(e[42]=o=>t.toggleHideRegisterPromptOnNewContact())},[e[109]||(e[109]=s("span",{class:"text-slate-500 text-sm font-bold"}," Hide Register Prompt on New Contact ",-1)),s("div",$t,[y(s("input",{type:"checkbox","onUpdate:modelValue":e[41]||(e[41]=o=>t.hideRegisterPromptOnNewContact=o),class:"sr-only"},null,512),[[I,t.hideRegisterPromptOnNewContact]]),e[107]||(e[107]=s("div",{class:"block bg-slate-500 w-14 h-8 rounded-full"},null,-1)),e[108]||(e[108]=s("div",{class:"dot absolute left-1 top-1 bg-slate-400 w-6 h-6 rounded-full transition"},null,-1))])]),s("label",{for:"toggleShowShortcutBvc",class:"flex items-center justify-between cursor-pointer mt-4",onClick:e[44]||(e[44]=(...o)=>t.toggleShowShortcutBvc&&t.toggleShowShortcutBvc(...o))},[e[112]||(e[112]=s("span",{class:"text-slate-500 text-sm font-bold"}," Show BVC Shortcut on Home Page ",-1)),s("div",Mt,[y(s("input",{type:"checkbox","onUpdate:modelValue":e[43]||(e[43]=o=>t.showShortcutBvc=o),class:"sr-only"},null,512),[[I,t.showShortcutBvc]]),e[110]||(e[110]=s("div",{class:"block bg-slate-500 w-14 h-8 rounded-full"},null,-1)),e[111]||(e[111]=s("div",{class:"dot absolute left-1 top-1 bg-slate-400 w-6 h-6 rounded-full transition"},null,-1))])]),s("div",Bt,[s("button",null,[d(h,{to:{name:"statistics"},class:"block w-fit text-center text-md bg-gradient-to-b from-slate-400 to-slate-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-4 py-2 rounded-md mb-2"},{default:c(()=>e[113]||(e[113]=[a(" See Global Animated History of Giving ")])),_:1})])]),s("div",Vt,[s("span",null,[e[114]||(e[114]=s("span",{class:"text-slate-500 text-sm font-bold mb-2"}," Passkey Expiration Minutes ",-1)),e[115]||(e[115]=s("br",null,null,-1)),s("span",Ot,m(t.passkeyExpirationDescription),1)]),s("div",Gt,[y(s("input",{type:"number",class:"border border-slate-400 rounded px-2 py-2 text-center w-20","onUpdate:modelValue":e[45]||(e[45]=o=>t.passkeyExpirationMinutes=o),onChange:e[46]||(e[46]=(...o)=>t.updatePasskeyExpiration&&t.updatePasskeyExpiration(...o))},null,544),[[P,t.passkeyExpirationMinutes]])])]),s("label",{for:"toggleShowGeneralAdvanced",class:"flex items-center justify-between cursor-pointer mt-4",onClick:e[48]||(e[48]=(...o)=>t.toggleShowGeneralAdvanced&&t.toggleShowGeneralAdvanced(...o))},[e[118]||(e[118]=s("span",{class:"text-slate-500 text-sm font-bold"}," Show All General Advanced Functions ",-1)),s("div",Ft,[y(s("input",{type:"checkbox","onUpdate:modelValue":e[47]||(e[47]=o=>t.showGeneralAdvanced=o),class:"sr-only"},null,512),[[I,t.showGeneralAdvanced]]),e[116]||(e[116]=s("div",{class:"block bg-slate-500 w-14 h-8 rounded-full"},null,-1)),e[117]||(e[117]=s("div",{class:"dot absolute left-1 top-1 bg-slate-400 w-6 h-6 rounded-full transition"},null,-1))])])])):b("",!0)])],64)}const ys=ne(D,[["render",jt]]);export{ys as default};