1import{M as ye,_ as Te,r as m,C as Ie,m as l,y as W,b as e,c as n,B as q,x as L,t as u,F as M,w as j,v as Ne,f as T,D as He,h as we,T as Fe,l as _,S as Ge,O as We,u as Je,o as Ue,a as tt,g as S,a0 as Le,e as oe,i as Ee,p as Ye,d as V,I as J,z as ze,as as xe,P as at,q as st,k as lt}from"./index-AIkCTHNu.js";import{_ as nt,A as ot}from"./AppLayout-BhacyIA_.js";import{g as it,p as rt,a as dt,u as Ke,b as Ze,i as ut,c as ct,d as pt,f as vt,T as Be,e as mt,S as ft,h as gt}from"./SendToCalendarModal-CyfUntVb.js";import{_ as Xe}from"./Button-D5KCq2qH.js";import{c as bt}from"./avatarColor-gmfTd8bI.js";import{_ as yt}from"./Loading-Bhz3WBYJ.js";import"./logowordsheavy4-BCh2U6rL.js";import"./AppLayout.vue_vue_type_style_index_0_scoped_6bb66ba6_lang-B1Aj1r3M.js";import"./SkeletonList-sqok-4zb.js";/* empty css */import"./ContrastChip-BF5FF2WM.js";/* empty css */import"./upgrade.helpers-Dv8NCAvC.js";import"./team-helpers-7rg_xhCn.js";/* empty css */import"./contact-format-DuAOHV0U.js";async function kt(A,w){return await ye({resource:`v1/taskRoles/me?scope=${A}&scopeId=${encodeURIComponent(w)}`,method:"get"})}async function ht(A,w){return await ye({resource:`v1/taskRoles?scope=${A}&scopeId=${encodeURIComponent(w)}`,method:"get"})}async function wt(A){return await ye({resource:"v1/taskRoles",method:"put",params:A})}async function xt(A,w,p){return await ye({resource:`v1/taskRoles/${A}?scopeType=${w}&scopeId=${encodeURIComponent(p)}`,method:"delete"})}async function $t(A){return await ye({resource:"v1/taskReports",method:"post",params:A})}async function Ct(){return await ye({resource:"v1/taskReports",method:"get"})}async function _t(A){return await ye({resource:`v1/taskReports/${A}/preview`,method:"get"})}async function Tt(A,w){const{status:p,body:h}=await ye({resource:`v1/taskReports/${A}/download`,method:"get",responseType:"blob"});if(p>=400||!(h instanceof Blob))throw new Error("Report download failed");const F=w&&w.trim()||"task-activity-report.pdf",y=URL.createObjectURL(h),k=document.createElement("a");k.href=y,k.download=F,k.rel="noopener",document.body.appendChild(k),k.click(),setTimeout(()=>{k.remove(),URL.revokeObjectURL(y)},1500)}async function St(A){return await ye({resource:`v1/teamReports/${A}/settings`,method:"get"})}async function Mt(A,w){return await ye({resource:`v1/teamReports/${A}/settings`,method:"put",params:w})}async function At(A,w){return await ye({resource:`v1/teamReports/${A}/optOut`,method:"put",params:w})}const Dt={class:"dr-card",role:"dialog","aria-modal":"true","aria-label":"Custom date range"},Rt={class:"dr-bar"},It={class:"dr-body"},Pt={class:"dr-presets"},Et=["onClick"],Lt={class:"dr-cals"},Ft={class:"dr-cal"},Ot={class:"dr-cal-head"},Bt={class:"title"},zt={class:"dr-cal-grid"},Nt={key:0,class:"dow"},Ut=["onClick"],qt={key:2,class:"dr-day other-month",disabled:""},Vt={class:"dr-cal"},Yt={class:"dr-cal-head"},jt={class:"title"},Ht={class:"dr-cal-grid"},Gt={key:0,class:"dow"},Wt=["onClick"],Jt={key:2,class:"dr-day other-month",disabled:""},Kt={class:"dr-inputs"},Qt={class:"dr-summary"},Xt={class:"text"},Zt={class:"meta"},ea={key:0,class:"pill"},ta={class:"dr-actions"},aa=["disabled"],sa={__name:"DateRangePicker",props:{initialStart:{type:String,default:""},initialEnd:{type:String,default:""}},emits:["apply","cancel"],setup(A,{emit:w}){const p=A,h=w,F=(()=>{const v=new Date;return v.setHours(0,0,0,0),v})(),y=["January","February","March","April","May","June","July","August","September","October","November","December"];function k(v){return`${v.getFullYear()}-${String(v.getMonth()+1).padStart(2,"0")}-${String(v.getDate()).padStart(2,"0")}`}function D(v){if(!v||v.length<10)return null;const[r,c,C]=v.split("-").map(Number);return isNaN(r)?null:new Date(r,c-1,C)}function Y(v,r){return v.getFullYear()===r.getFullYear()&&v.getMonth()===r.getMonth()&&v.getDate()===r.getDate()}
1const b=m(D(p.initialStart)),$=m(D(p.initialEnd)),E=m(null),R=m(b.value?new Date(b.value.getFullYear(),b.value.getMonth(),1):new Date(F.getFullYear(),F.getMonth(),1)),H=_(()=>new Date(R.value.getFullYear(),R.value.getMonth()+1,1)),K=m(b.value?k(b.value):""),ae=m($.value?k($.value):"");Ie([b,$],()=>{K.value=b.value?k(b.value):"",ae.value=$.value?k($.value):""});function pe(){R.value=new Date(R.value.getFullYear(),R.value.getMonth()-1,1)}function se(){R.value=new Date(R.value.getFullYear(),R.value.getMonth()+1,1)}function le(v){var he,$e;const r=v.getFullYear(),c=v.getMonth(),C=new Date(r,c,1).getDay(),G=new Date(r,c+1,0).getDate(),B=new Date(r,c,0).getDate(),I=((he=b.value)==null?void 0:he.getTime())??null,ue=(($e=$.value)==null?void 0:$e.getTime())??null,ee=[];for(const z of["S","M","T","W","T","F","S"])ee.push({type:"dow",label:z});for(let z=C-1;z>=0;z--)ee.push({type:"other",label:String(B-z)});for(let z=1;z<=G;z++){const P=new Date(r,c,z),f=P.getTime(),o=[];Y(P,F)&&o.push("today"),I!==null&&ue!==null?f===I&&f===ue?o.push("range-single"):f===I?o.push("range-start"):f===ue?o.push("range-end"):f>I&&f<ue&&o.push("in-range"):I!==null&&f===I&&o.push("range-single"),ee.push({type:"day",label:String(z),dateStr:k(P),cls:o})}let ne=1;for(;ee.length<49;)ee.push({type:"other",label:String(ne++)});return ee}const O=_(()=>le(R.value)),x=_(()=>le(H.value));function N(v){const r=D(v);if(!b.value||b.value&&$.value)b.value=r,$.value=null,E.value=null;else{let c=b.value,C=r;c.getTime()>C.getTime()&&([c,C]=[C,c]),b.value=c,$.value=C,E.value=null}}function ve(){const v=D(K.value),r=D(ae.value);if(v&&r){let c=v,C=r;c.getTime()>C.getTime()&&([c,C]=[C,c]),b.value=c,$.value=C,R.value=new Date(c.getFullYear(),c.getMonth(),1),E.value=null}else v&&(b.value=v,$.value=null,R.value=new Date(v.getFullYear(),v.getMonth(),1),E.value=null)}const ie=[{key:"yesterday",label:"Yesterday"},{key:"this-week",label:"This week"},{key:"last-week",label:"Last week"},{key:"this-month",label:"This month"},{key:"last-month",label:"Last month"},{key:"last-30",label:"Last 30 days"},{key:"this-quarter",label:"This quarter"},{key:"last-quarter",label:"Last quarter"},{key:"ytd",label:"Year to date"},{key:"last-year",label:"Last year"}];function X(v){const r=F,c=r.getFullYear(),C=r.getMonth(),G=r.getDate(),B=(I,ue,ee)=>new Date(I,ue,ee);switch(v){case"yesterday":{const I=B(c,C,G-1);return[I,I]}case"this-week":{const I=r.getDay();return[B(c,C,G-I),B(c,C,G-I+6)]}case"last-week":{const I=r.getDay();return[B(c,C,G-I-7),B(c,C,G-I-1)]}case"this-month":return[B(c,C,1),B(c,C+1,0)];case"last-month":return[B(c,C-1,1),B(c,C,0)];case"last-30":return[B(c,C,G-29),r];case"this-quarter":{const I=Math.floor(C/3)*3;return[B(c,I,1),B(c,I+3,0)]}case"last-quarter":{const I=Math.floor(C/3)*3-3;return[B(c,I,1),B(c,I+3,0)]}case"ytd":return[B(c,0,1),r];case"last-year":return[B(c-1,0,1),B(c-1,11,31)];default:return[null,null]}}function te(v){const[r,c]=X(v);!r||!c||(b.value=r,$.value=c,R.value=new Date(r.getFullYear(),r.getMonth(),1),E.value=v)}function Q(v,r){return v.toLocaleDateString("en-US",{month:"short",day:"numeric",year:r?"numeric":void 0})}function Se(v,r){return`${Q(v,v.getFullYear()!==r.getFullYear())} â ${Q(r,!0)}`}function me(v,r){return Math.round((r.getTime()-v.getTime())/864e5)+1}const Z=_(()=>b.value&&$.value?Se(b.value,$.value):b.value?`Start: ${Q(b.value,!0)}`:"Pick a range"),re=_(()=>{if(b.value&&$.value){const v=me(b.value,$.value),r=Math.floor(v/7),c=v%7;return`${r>0?`${r} week${r===1?"":"s"}${c>0?` and ${c} day${c===1?"":"s"}`:""}`:`${v} day${v===1?"":"s"}`} · ${r*5+Math.min(c,5)} weekdays approximately`}return b.value?"Now click the end day to complete the range.":"Click a quick pick above, or tap two days on the calendar."}),fe=_(()=>{if(!b.value||!$.value)return null;const v=me(b.value,$.value);return`${v} day${v===1?"":"s"}`}),ke=_(()=>!!(b.value&&$.value));function de(){b.value=null,$.value=null,E.value=null}function be(){ke.value&&h("apply",{start:k(b.value),end:k($.value)})}return(v,r)=>(l(),W(Fe,{to:"body"},[e("div",{class:"dr-backdrop",onClick:r[4]||(r[4]=we(c=>v.$emit("cancel"),["self"]))},[e("div",Dt,[e("div",Rt,[r[6]||(r[6]=e("b",null,"Custom date range",-1)),e("button",{class:"dr-close","aria-label":"Close",onClick:r[0]||(r[0]=c=>v.$emit("cancel"))},[...r[5]||(r[5]=[e("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2.4","stroke-linecap":"round","stroke-linejoin":"round"},[e("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),e("line",{x1:"6",y1:"6",x2:"18",y2:"18"})],-1)])])]),e("div",It,[r[15]||(r[15]=e("div",{class:"dr-section-label"},"Quick picks",-1)),e("div",Pt,[(l(),n(M,null,q(ie,c=>e("button",{key:c.key,class:L(["quick-chip",{selected:E.value===c.key}]),onClick:C=>te(c.key)},u(c.label),11,Et)),64))]),r[16]||(r[16]=e("div",{class:"dr-section-label"},"Or click two days on the calendar",-1)),e("div",Lt,[e("div",Ft,[e("div",Ot,[e("button",{class:"nav-btn","aria-label":"Previous month",onClick:pe},[...r[7]||(r[7]=[e("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round"},[e("polyline",{points:"15 18 9 12 15 6"})],-1)])]),e("div",Bt,u(y[R.value.getMonth()])+" "+u(R.value.getFullYear()),1),r[8]||(r[8]=e("span",{style:{width:"30px"}},null,-1))]),e("div",zt,[(l(!0),n(M,null,q(O.value,(c,C)=>(l(),n(M,{key:C},[c.type==="dow"?(l(),n("div",Nt,u(c.label),1)):c.type==="day"?(l(),n("button",{key:1,class:L(["dr-day",...c.cls]),onClick:G=>N(c.dateStr)},u(c.label),11,Ut)):(l(),n("button",qt,u(c.label),1))],64))),128))])]),e("div",Vt,[e("div",Yt,[r[10]||(r[10]=e("span",{style:{width:"30px"}},null,-1)),e("div",jt,u(y[H.value.getMonth()])+" "+u(H.value.getFullYear()),1),e("button",{class:"nav-btn","aria-label":"Next month",onClick:se},[...r[9]||(r[9]=[e("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round"},[e("polyline",{points:"9 18 15 12 9 6"})],-1)])])]),e("div",Ht,[(l(!0),n(M,null,q(x.value,(c,C)=>(l(),n(M,{key:C},[c.type==="dow"?(l(),n("div",Gt,u(c.label),1)):c.type==="day"?(l(),n("button",{key:1,class:L(["dr-day",...c.cls]),onClick:G=>N(c.dateStr)},u(c.label),11,Wt)):(l(),n("button",Jt,u(c.label),1))],64))),128))])])]),e("div",Kt,[e("label",null,[r[11]||(r[11]=e("div",{class:"lbl"},"From",-1)),j(e("input",{type:"date","onUpdate:modelValue":r[1]||(r[1]=c=>K.value=c),onChange:ve},null,544),[[Ne,K.value]])]),e("label",null,[r[12]||(r[12]=e("div",{class:"lbl"},"To",-1)),j(e("input",{type:"date","onUpdate:modelValue":r[2]||(r[2]=c=>ae.value=c),onChange:ve},null,544),[[Ne,ae.value]])])]),e("div",Qt,[r[13]||(r[13]=e("div",{class:"ic-cal"},[e("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},[e("rect",{x:"3",y:"4",width:"18",height:"18",rx:"2"}),e("line",{x1:"16",y1:"2",x2:"16",y2:"6"}),e("line",{x1:"8",y1:"2",x2:"8",y2:"6"}),e("line",{x1:"3",y1:"10",x2:"21",y2:"10"})])],-1)),e("div",Xt,[e("b",null,u(Z.value),1),e("div",Zt,u(re.value),1)]),fe.value?(l(),n("span",ea,u(fe.value),1)):T("",!0)]),e("div",ta,[e("button",{class:"btn btn-ghost",onClick:de},"Clear"),r[14]||(r[14]=e("div",{style:{flex:"1"}},null,-1)),e("button",{class:"btn btn-secondary",onClick:r[3]||(r[3]=c=>v.$emit("cancel"))},"Cancel"),e("button",{class:"btn btn-primary",disabled:!ke.value,style:He({opacity:ke.value?1:.5}),onClick:be},"Apply range",12,aa)])])])])]))}},la=Te(sa,[["__scopeId","data-v-3ecda781"]]),na={class:"reports-panel"},oa={class:"settings-block"},ia={class:"settings-card"},ra={class:"report-config"},da={class:"report-field"},ua={class:"quick-chip-row"},ca=["disabled"],pa={key:0,class:"dim"},va=["disabled"],ma={key:0,class:"sub-row"},fa=["value"],ga=["value"],ba={class:"report-field"},ya={class:"quick-chip-row"},ka={class:"report-field"},ha={class:"check-list"},wa={class:"report-field"},xa={class:"radio-list"},$a=["checked"],Ca=["checked"],_a={class:"report-foot"},Ta={class:"summary"},Sa=["disabled"],Ma={class:"settings-block"},Aa={class:"settings-card"},Da={key:0,class:"reports-loading"},Ra={key:1,class:"block-lead empty"},Ia={key:2,class:"reports-scroll"},Pa={key:0,width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},Ea={key:1,width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},La={class:"info"},Fa={class:"row-actions"},Oa=["onClick"],Ba=["onClick"],za={class:"settings-block"},Na={class:"settings-card"},Ua={class:"settings-list-row"},qa={class:"info"},Va={class:"meta"},Ya=["aria-pressed"],ja={class:"sched-monthly"},Ha={class:"sched-monthly-head"},Ga={class:"info"},Wa={key:0,class:"meta"},Ja={key:1,class:"meta"},Ka={key:2,class:"team-picker"},Qa=["value"],Xa={key:0,class:"sched-spinner","aria-label":"Loading"},Za=["aria-pressed"],es={key:0,class:"sched-detail"},ts=["aria-expanded"],as={key:1,class:"optout-list"},ss={class:"chip-avatar"},ls={class:"ol-name"},ns={key:2,class:"sched-detail-note"},os={class:"sched-optout-row"},is=["aria-pressed"],rs={key:1,class:"sched-detail"},ds={class:"sched-optout-row"},us=["aria-pressed"],cs={key:1,class:"sched-detail-note muted"},ps={class:"modal-card pdf-preview-card",role:"dialog","aria-modal":"true","aria-label":"Report preview"},vs={class:"modal-card-bar pdf-preview-bar"},ms={class:"bar-left"},fs={class:"filename"},gs={class:"bar-right"},bs={class:"pdf-preview-body"},ys={key:0,class:"report-loading"},ks=["srcdoc"],hs={__name:"ReportsPanel",setup(A){const w=Ge(),p=We(),h=Je(),F=_(()=>{var i;return((i=h.currentAccount)==null?void 0:i.email)||"your email"}),y=_(()=>w.teams||[]),k=m("me"),D=m(null),Y=m(null),b=m("pdf"),$=m({summary:!0,chart:!0,topContacts:!0,perMember:!0,detailed:!1}),E=m(""),R=m(""),H=m("30d"),K=m(!1),ae=m("Custom rangeâ¦"),pe=_(()=>{var i;return D.value&&((i=w.membersByTeam)==null?void 0:i[String(D.value)])||[]}),se=_(()=>pe.value.length||null),le=_(()=>y.value.find(i=>i.id===D.value));function O(i){return i.toISOString().slice(0,10)}function x(i){if(H.value=i,i==="custom"){K.value=!0;return}const t=new Date,a=new Date;i==="7d"?a.setDate(t.getDate()-6):i==="30d"?a.setDate(t.getDate()-29):i==="quarter"?a.setMonth(Math.floor(t.getMonth()/3)*3,1):i==="ytd"&&a.setMonth(0,1),E.value=O(a),R.value=O(t)}function N({start:i,end:t}){E.value=i,R.value=t,H.value="custom";const a=s=>new Date(s+"T00:00:00").toLocaleDateString("en-US",{month:"short",day:"numeric",year:"numeric"});ae.value=`${a(i)} â ${a(t)}`,K.value=!1}function ve(){K.value=!1,(!E.value||!R.value)&&(H.value="30d")}function ie(i){var t;k.value=i,i!=="me"&&!D.value&&y.value.length&&(D.value=y.value[0].id),i!=="me"&&D.value&&((t=w.fetchMembers)==null||t.call(w,D.value))}function X(i,t){return i?new Date(i+"T00:00:00").toLocaleDateString("en-US",{month:"short",day:"numeric",year:t?"numeric":void 0}):""}const te=_(()=>`${X(E.value)} â ${X(R.value,!0)}`),Q=_(()=>{var i;return k.value==="me"?"My tasks":((i=le.value)==null?void 0:i.name)||"Team"}),Se=_(()=>k.value==="me"?"just you":k.value==="specific_member"?"1 member":se.value?`all ${se.value} members`:"whole team"),me=m([]),Z=m(!0),re=m(!1);let fe=null;async function ke(){try{const{body:i}=await Ct();me.value=Array.isArray(i)?i:[]}catch{}finally{Z.value=!1}de()}function de(){clearTimeout(fe),me.value.some(i=>i.state==="queued"||i.state==="running")&&(fe=setTimeout(ke,3e3))}async function be(){if(!re.value){if(!E.value||!R.value){p.addToast({type:"error",text:"Pick a date range"});return}re.value=!0;try{const{status:i,body:t}=await $t({scopeType:k.value,teamId:k.value==="me"?null:D.value,scopeMemberId:k.value==="specific_member"?Y.value:null,rangeStart:E.value,rangeEnd:R.value,format:b.value,includeSummary:$.value.summary,includeChart:$.value.chart,includeTopContacts:$.value.topContacts,includePerMember:$.value.perMember,includeDetailed:$.value.detailed});i>=400?p.addToast({type:"error",text:(t==null?void 0:t.detail)||"Could not generate report"}):(p.addToast({type:"info",text:"Report queued â itâll appear below in a moment."}),me.value=[t,...me.value],de())}catch{p.addToast({type:"error",text:"Could not generate report"})}finally{re.value=!1}}}const v=m({open:!1,loading:!1,html:"",report:null});function r(i){const t="#1a8fdd",a="#e2f1fb",s="#f0f6fa",U="#fff",d="#0f2b3c",ce="#6a8fa6",Oe="#97b5c7",et="#d4e4ef",Qe="#e4eff7";return`<!doctype html> 2<html> 3<head> 4<meta charset="utf-8"> 5<meta name="viewport" content="width=device-width"> 6<style> 7:root { 8 --nav-font: 'Inter', -apple-system, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif; 9 --font: -apple-system, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif; 10 --accent: ${t}; 11 --accent-light: ${a}; 12 --bg: ${s}; 13 --card: ${U}; 14 --text: ${d}; 15 --text2: ${ce}; 16 --text3: ${Oe}; 17 --border: ${et}; 18 --border-strong:#b5c8d8; 19 --hover: ${Qe}; 20 --shaded: ${Qe}; 21 --teal: #0d9488; 22 --teal-tint: rgba(43,184,176,.07); 23 --success: #2a9d5c; 24 --success-light:#dcf5e5; 25 --danger: #f94242; 26 --danger-light: #feecec; 27 --warning: #f2a541; 28 --warning-light:#fdf4e4; 29} 30*,*::before,*::after{box-sizing:border-box;} 31html,body{margin:0;padding:0;} 32body{ 33 font-family:var(--nav-font); 34 background:#d4e2ec; 35 color:var(--text); 36 padding:22px 24px; 37 -webkit-font-smoothing:antialiased; 38} 39 40/* ââ PDF page card ââââââââââââââââââââââââââââââââââââââââââ */ 41.pdf-page{background:#fff;width:100%;max-width:680px;margin:0 auto 24px;padding:48px 56px 56px;box-shadow:0 8px 24px rgba(15,43,60,.18),0 2px 6px rgba(15,43,60,.10);color:var(--text);font-family:var(--nav-font);position:relative;} 42@media(max-width:760px){.pdf-page{padding:28px 24px 36px;}} 43.pdf-page-footer{position:absolute;bottom:18px;left:56px;right:56px;border-top:1px solid var(--border);padding-top:8px;font:500 10.5px var(--nav-font);color:var(--text3);display:flex;justify-content:space-between;} 44@media(max-width:760px){.pdf-page-footer{left:24px;right:24px;}} 45 46/* ââ Brand header âââââââââââââââââââââââââââââââââââââââââââ */ 47.pdf-brand{display:flex;align-items:center;gap:10px;padding-bottom:14px;border-bottom:2px solid var(--accent);margin-bottom:24px;} 48.pdf-brand img{height:22px;} 49.pdf-brand .doc-type{margin-left:auto;font:700 10px var(--nav-font);text-transform:uppercase;letter-spacing:.12em;color:var(--accent);} 50 51/* ââ Cover typography âââââââââââââââââââââââââââââââââââââââ */ 52.pdf-title{margin:0 0 4px;font:700 32px var(--nav-font);letter-spacing:-0.02em;color:var(--text);} 53.pdf-subtitle{font:600 15px var(--nav-font);color:var(--text2);margin-bottom:4px;} 54.pdf-meta{font:500 12px var(--nav-font);color:var(--text3);margin-bottom:30px;} 55 56/* ââ Sections âââââââââââââââââââââââââââââââââââââââââââââââ */ 57.pdf-section{margin-bottom:28px;} 58.pdf-section:last-child{margin-bottom:8px;} 59.pdf-section h2{margin:0 0 12px;font:700 16px var(--nav-font);color:var(--text);text-transform:uppercase;letter-spacing:.04em;padding-bottom:6px;border-bottom:1px solid var(--border);} 60.pdf-section h3{margin:18px 0 8px;font:700 13px var(--nav-font);color:var(--text);} 61 62/* ââ Metric tiles âââââââââââââââââââââââââââââââââââââââââââ */ 63.pdf-metric-row{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-bottom:16px;} 64@media(max-width:600px){.pdf-metric-row{grid-template-columns:repeat(2,1fr);}} 65.pdf-metric{background:var(--shaded);border-radius:10px;padding:14px 12px;text-align:center;} 66.pdf-metric b{display:block;font:800 26px var(--nav-font);color:var(--text);letter-spacing:-0.02em;margin-bottom:2px;} 67.pdf-metric span{font:600 11.5px var(--nav-font);color:var(--text2);text-transform:uppercase;letter-spacing:.04em;} 68.pdf-metric.danger b{color:var(--danger);} 69.pdf-metric.success b{color:var(--success);} 70.pdf-metric .delta{display:block;margin-top:4px;font
70:700 10px var(--nav-font);letter-spacing:.04em;} 71.pdf-metric .delta.up{color:var(--success);} 72.pdf-metric .delta.down{color:var(--danger);} 73.pdf-metric .delta.flat{color:var(--text3);} 74 75/* ââ Insight pills ââââââââââââââââââââââââââââââââââââââââââ */ 76.pdf-insights{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-bottom:12px;} 77@media(max-width:600px){.pdf-insights{grid-template-columns:1fr;}} 78.pdf-insight{border:1px solid var(--border);border-radius:8px;padding:10px 12px;} 79.pdf-insight .ic{font-size:14px;margin-bottom:4px;} 80.pdf-insight .head{font:700 10px var(--nav-font);text-transform:uppercase;letter-spacing:.07em;color:var(--text2);margin-bottom:4px;} 81.pdf-insight .val{font:800 15px var(--nav-font);color:var(--text);letter-spacing:-0.01em;margin-bottom:2px;} 82.pdf-insight .sub{font:500 11px var(--nav-font);color:var(--text2);} 83 84/* ââ Executive summary callout ââââââââââââââââââââââââââââââ */ 85.pdf-callout{background:linear-gradient(135deg,var(--accent-light) 0%,#e4eff7 100%);border-left:3px solid var(--accent);border-radius:8px;padding:14px 16px;margin-bottom:22px;} 86.pdf-callout .label{font:700 10px var(--nav-font);text-transform:uppercase;letter-spacing:.1em;color:var(--accent);margin-bottom:6px;} 87.pdf-callout p{margin:0;font:500 13px var(--nav-font);color:var(--text);line-height:1.6;} 88.pdf-callout p b{color:var(--text);font-weight:700;} 89 90/* ââ Bar chart (completed by day) ââââââââââââââââââââââââââ */ 91.pdf-chart-wrap{position:relative;padding-top:16px;} 92.pdf-chart-anno{position:absolute;top:0;font:700 9px var(--nav-font);color:var(--accent);text-transform:uppercase;letter-spacing:.07em;background:var(--accent-light);padding:1px 6px;border-radius:4px;transform:translateX(-50%);white-space:nowrap;} 93.pdf-chart-anno.slow{color:var(--text3);background:var(--shaded);} 94.pdf-chart-anno::after{content:'';position:absolute;left:50%;bottom:-4px;width:0;height:0;border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid var(--accent-light);transform:translateX(-50%);} 95.pdf-chart-anno.slow::after{border-top-color:var(--shaded);} 96.pdf-bar-chart{display:flex;align-items:flex-end;gap:4px;height:80px;padding:8px 0;border-bottom:1px solid var(--border);} 97.pdf-bar-chart .bar{flex:1;background:var(--accent);border-radius:3px 3px 0 0;position:relative;min-height:4px;} 98.pdf-bar-chart .bar.weekend{background:var(--accent-light);border:1px solid var(--accent);} 99.pdf-bar-chart-labels{display:flex;gap:4px;margin-top:4px;} 100.pdf-bar-chart-labels span{flex:1;min-width:0;text-align:center;font:600 9px var(--nav-font);color:var(--text3);text-transform:uppercase;white-space:nowrap;} 101/* Match the PDF: show only the model's major ticks (the rest are tagged .lbl-minor). min-width:0 lets 102 the 30 slots shrink to fit, and hidden slots keep their width so visible labels stay aligned under 103 their bars â so the label row never runs off the page (the previous flex:1 with no min-width did). */ 104.pdf-bar-chart-labels .lbl-minor{visibility:hidden;} 105/* Chart caption â must match ReportRenderer.PDF_CSS (font-size:11px); without this rule the 106 preview inherits the browser default 16px and the caption renders larger than the PDF. */ 107.pdf-chart-note{margin-top:10px;font:500 11px var(--nav-font);color:var(--text2);line-height:1.5;} 108.pdf-chart-note b{color:var(--text);font-weight:700;} 109 110/* ââ Horizontal bar list (tasks by book/type) ââââââââââââââ */ 111.pdf-bar-list{display:flex;flex-direction:column;gap:8px;} 112.pdf-bar-list-row{display:grid;grid-template-columns:140px 1fr 50px;gap:12px;align-items:center;font:600 12px var(--nav-font);} 113.pdf-bar-list-row .label{color:var(--text);display:flex;align-items:center;gap:6px;} 114.pdf-bar-list-row .label .swatch{width:8px;height:8px;border-radius:2px;background:var(--accent);} 115.pdf-bar-list-row .label .swatch.personal{background:var(--text3);} 116.pdf-bar-list-row .label .swatch.sales{background:var(--teal);} 117.pdf-bar-list-row .label .swatch.success{background:var(--warning);} 118.pdf-bar-list-row .track{height:12px;background:var(--shaded);border-radius:6px;overflow:hidden;position:relative;} 119.pdf-bar-list-row .fill{position:absolute;top:0;bottom:0;left:0;background:var(--accent);border-radius:6px;} 120.pdf-bar-list-row .fill.personal{background:var(--text3);} 121.pdf-bar-list-row .fill.sales{background:var(--teal);} 122.pdf-bar-list-row .fill.success{background:var(--warning);} 123.pdf-bar-list-row .count{text-align:right;color:var(--text2);font-weight:700;} 124 125/* ââ Two-column layout ââââââââââââââââââââââââââââââââââââââ */ 126.pdf-two-col{display:grid;grid-template-columns:1fr 1fr;gap:22px;} 127@media(max-width:600px){.pdf-two-col{grid-template-columns:1fr;}} 128 129/* ââ Contact / company list âââââââââââââââââââââââââââââââââ */ 130.pdf-list{list-style:none;padding:0;margin:0;} 131.pdf-list li{display:flex;align-items:center;gap:12px;padding:8px 0;border-bottom:1px solid var(--border);font:500 13px var(--nav-font);} 132.pdf-list li:last-child{border-bottom:0;} 133.pdf-list .name{flex:1;color:var(--text);font-weight:600;} 134.pdf-list .role{color:var(--text2);font-weight:500;font-size:12px;} 135.pdf-list .count{background:var(--accent-light);color:var(--accent);padding:2px 8px;border-radius:999px;font:700 11px var(--nav-font);} 136.pdf-list .avatar{width:26px;height:26px;border-radius:50%;background:var(--accent-light);color:var(--accent);display:grid;place-items:center;font:700 10px var(--nav-font);flex-shrink:0;} 137.pdf-list .avatar.sarah{background:#e3f0fb;color:#0e78d4;} 138.pdf-list .avatar.marcus{background:#f0e2da;color:#5c3d2e;} 139.pdf-list .avatar.priya{background:#f5e3f0;color:#9b4d8c;} 140 141/* ââ Per-member cards âââââââââââââââââââââââââââââââââââââââ */ 142.pdf-member-card{border:1px solid var(--border);border-radius:10px;padding:14px 16px;margin-bottom:12px;} 143.pdf-member-card .head{display:flex;align-items:center;gap:12px;margin-bottom:12px;} 144.pdf-member-card .head .avatar{width:38px;height:38px;border-radius:50%;background:var(--accent-light);color:var(--accent);display:grid;place-items:center;font:700 13px var(--nav-font);} 145.pdf-member-card .head .avatar.sarah{background:#e3f0fb;color:#0e78d4;} 146.pdf-member-card .head .avatar.marcus{background:#f0e2da;color:#5c3d2e;} 147.pdf-member-card .head .avatar.priya{background:#f5e3f0;color:#9b4d8c;} 148.pdf-member-card .head .info{flex:1;} 149.pdf-member-card .head .info b{font:700 14px var(--nav-font);color:var(--text);display:block;} 150.pdf-member-card .head .info .meta{font:500 11.5px var(--nav-font);color:var(--text2);} 151.pdf-member-card .head .role{background:var(--shaded);color:var(--text2);font:700 10px var(--nav-font);padding:3px 8px;border-radius:5px;text-transform:uppercase;letter-spacing:.06em;} 152.pdf-member-stats{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin-bottom:10px;} 153.pdf-member-stat{background:var(--shaded);border-radius:8px;padding:8px;text-align:center;} 154.pdf-member-stat b{display:block;font:800 16px var(--nav-font);color:var(--text);} 155.pdf-member-stat span{font:600 10px var(--nav-font);color:var(--text2);text-transform:uppercase;letter-spacing:.04em;} 156.pdf-member-narrative{font:500 12px var(--nav-font);color:var(--text2);line-height:1.55;} 157.pdf-member-narrative b{color:var(--text);font-weight:600;} 158 159/* ââ Task rows ââââââââââââââââââââââââââââââââââââââââââââââ */ 160.pdf-task-row{display:grid;grid-template-columns:76px 1fr auto;gap:12px;padding:7px 0;font:500 12px var(--nav-font);border-bottom:1px solid var(--border);align-items:center;} 161.pdf-task-row:last-child{border-bottom:0;} 162.pdf-task-row .date{color:var(--text2);font-weight:600;} 163.pdf-task-row .title{color:var(--text);font-weight:600;} 164.pdf-task-row .title .ctx{color:var(--text2);font-weight:500;margin-left:6px;} 165.pdf-task-row .who{display:inline-flex;align-items:center;gap:4px;color:var(--text2);font-size:11px;font-weight:600;} 166.pdf-task-row .who .avatar{width:20px;height:20px;border-radius:50%;background:var(--accent-light);color:var(--accent);display:grid;place-items:center;font:700 9px var(--nav-font);} 167.pdf-task-row .who .avatar.sarah{background:#e3f0fb;color:#0e78d4;} 168.pdf-task-row .who .avatar.marcus{background:#f0e2da;color:#5c3d2e;} 169.pdf-task-row .who .avatar.priya{background:#f5e3f0;color:#9b4d8c;} 170 171/* ââ Generated-by block âââââââââââââââââââââââââââââââââââââ */ 172.pdf-generated-by{margin-top:28px;padding:12px 14px;background:var(--accent-light);border-radius:8px;font:500 11px var(--nav-font);color:var(--text2);line-height:1.6;} 173.pdf-generated-by .label{font:700 9px var(--nav-font);text-transform:uppercase;letter-spacing:.1em;color:var(--text3);margin-bottom:4px;} 174</style> 175</head> 176<body> 177${i} 178</body> 179</html>`}async function c(i){v.value={open:!0,loading:!0,html:"",report:i};try{const{body:t}=await _t(i.id);v.value.html=r((t==null?void 0:t.html)||"")}catch{p.addToast({type:"error",text:"Could not load preview"}),v.value.open=!1}finally{v.value.loading=!1}}function C(){v.value.open=!1}function G(i){return i?`task-activity-${i.rangeStart}_${i.rangeEnd}.pdf`:""}function B(i){if(!i)return"task-activity-report.pdf";const t=(i.format||"pdf").toLowerCase();return`task-activity-${i.rangeStart}_${i.rangeEnd}.${t}`}async function I(i){try{await Tt(i.id,B(i))}catch{p.addToast({type:"error",text:"Could not download report"})}}function ue(i){return`${i.scopeType==="me"?"My tasks":i.scopeType==="team"?"Whole team":"Member"} · ${X(i.rangeStart)} â ${X(i.rangeEnd,!0)}`}function ee(i){const t=i.requestedAt?new Date(i.requestedAt).toLocaleStr
179ing("en-US",{month:"short",day:"numeric",hour:"numeric",minute:"2-digit"}):"";return`${{queued:"Queued",running:"Generatingâ¦",done:"Ready",failed:"Failed"}[i.state]||i.state} · ${i.format.toUpperCase()}${t?" · generated "+t:""}${i.errorMessage?" · "+i.errorMessage:""}`}const ne=m({weekly:!1}),he=m(!1);async function $e(){if(he.value)return;const i=!ne.value.weekly;ne.value.weekly=i,p.addToast({type:"success",text:i?"â Weekly summary enabled":"Weekly summary turned off"}),he.value=!0;try{await rt({weeklyReportEnabled:i})}catch{ne.value.weekly=!i,p.addToast({type:"error",text:"Could not update setting â reverted"})}finally{he.value=!1}}const z=m(null),P=m(null),f=m(!1),o=m(!1),g=m(!1),ge=Intl.DateTimeFormat().resolvedOptions().timeZone||"UTC",Me=_(()=>y.value.find(i=>i.id===z.value)),Ae=_(()=>{var i;return z.value&&((i=w.membersByTeam)==null?void 0:i[String(z.value)])||[]}),Ce=_(()=>{var i,t;return((i=h.account)==null?void 0:i.accountId)??((t=h.account)==null?void 0:t.id)??null});function De(i){const t=Ae.value.find(s=>String(s.accountId)===String(i));if(t!=null&&t.name&&t.name.trim())return t.name.trim();const a=(t==null?void 0:t.email)||"";return a.includes("@")?a.split("@")[0]:a||"Member "+i}const _e=m(!1),Re=_(()=>{var i;return(((i=P.value)==null?void 0:i.optedOutMembers)||[]).map(t=>{const a=Ce.value!=null&&String(t)===String(Ce.value),s=a?"You":De(t);return{id:t,name:s,isMe:a,initial:(s||"?").trim().charAt(0).toUpperCase()}})});async function qe(){var t;const i=z.value;if(P.value=null,_e.value=!1,!i){g.value=!1;return}g.value=!0,(t=w.fetchMembers)==null||t.call(w,i);try{const{status:a,body:s}=await St(i);if(i!==z.value)return;P.value=a<400&&s&&typeof s.monthlyEnabled=="boolean"?s:null}catch{i===z.value&&(P.value=null)}finally{i===z.value&&(g.value=!1)}}async function Ve(){var U,d;if(!((U=P.value)!=null&&U.admin)||f.value)return;const i=P.value.monthlyEnabled,t=!i;P.value.monthlyEnabled=t,p.addToast({type:"success",text:t?"â Monthly team summary enabled":"Monthly team summary turned off"}),f.value=!0;const{status:a,body:s}=await Mt(z.value,{enabled:t,timezone:ge,teamName:((d=Me.value)==null?void 0:d.name)||""});f.value=!1,a<400&&s&&typeof s.monthlyEnabled=="boolean"?P.value=s:(P.value.monthlyEnabled=i,p.addToast({type:"error",text:"Could not update setting â reverted"}))}async function Pe(){if(!P.value||o.value)return;const i=P.value.optedOut,t=!i;P.value.optedOut=t,p.addToast({type:"success",text:t?"Youâll no longer receive this report":"â Youâll receive this report"}),o.value=!0;const{status:a,body:s}=await At(z.value,{optedOut:t});o.value=!1,a<400&&s&&typeof s.optedOut=="boolean"?P.value=s:(P.value.optedOut=i,p.addToast({type:"error",text:"Could not update setting â reverted"}))}return Ie(z,qe),Ue(async()=>{var i,t;x("30d"),y.value.length||await((i=w.fetchTeams)==null?void 0:i.call(w)),y.value.length&&(D.value=y.value[0].id,(t=w.fetchMembers)==null||t.call(w,D.value),z.value=y.value[0].id),ke();try{const{body:a}=await it();a&&(ne.value.weekly=!!a.weeklyReportEnabled)}catch{}}),tt(()=>clearTimeout(fe)),(i,t)=>(l(),n("div",na,[e("div",oa,[t[39]||(t[39]=e("div",{class:"settings-block-label"},"Generate a Task Activity Report",-1)),t[40]||(t[40]=e("p",{class:"block-lead"},[S(" A branded PDF of your team's task activity â useful for status updates, leadership reviews, or your own records. "),e("b",null,"Team plan members"),S(" see a per-member breakdown. ")],-1)),e("div",ia,[e("div",ra,[e("div",da,[t[23]||(t[23]=e("label",{class:"report-label"},"Who's included",-1)),e("div",ua,[e("button",{class:L(["quick-chip",{selected:k.value==="team"}]),disabled:!y.value.length,onClick:t[0]||(t[0]=a=>ie("team"))},[t[21]||(t[21]=S(" Whole team ",-1)),se.value?(l(),n("span",pa,"("+u(se.value)+")",1)):T("",!0)],10,ca),e("button",{class:L(["quick-chip",{selected:k.value==="me"}]),onClick:t[1]||(t[1]=a=>ie("me"))},"Just me",2),e("button",{class:L(["quick-chip",{selected:k.value==="specific_member"}]),disabled:!y.value.length,onClick:t[2]||(t[2]=a=>ie("specific_member"))},"Specific memberâ¦",10,va)]),t[24]||(t[24]=e("div",{class:"field-help"},[e("b",null,"Admin scope."),S(" Non-admin members can only generate a "),e("b",null,"Just me"),S(" report on their own activity.")],-1)),k.value!=="me"?(l(),n("div",ma,[j(e("select",{"onUpdate:modelValue":t[3]||(t[3]=a=>D.value=a),class:"sel",onChange:t[4]||(t[4]=a=>{var s,U;return(U=(s=oe(w)).fetchMembers)==null?void 0:U.call(s,D.value)})},[(l(!0),n(M,null,q(y.value,a=>(l(),n("option",{key:a.id,value:a.id},u(a.name),9,fa))),128))],544),[[Le,D.value]]),k.value==="specific_member"?j((l(),n("select",{key:0,"onUpdate:modelValue":t[5]||(t[5]=a=>Y.value=a),class:"sel"},[t[22]||(t[22]=e("option",{value:null,disabled:""},"Select memberâ¦",-1)),(l(!0),n(M,null,q(pe.value,a=>(l(),n("option",{key:a.accountId,value:a.accountId},u(a.name||a.email||"Member "+a.accountId),9,ga))),128))],512)),[[Le,Y.value]]):T("",!0)])):T("",!0)]),e("div",ba,[t[25]||(t[25]=e("label",{class:"report-label"},"Time period",-1)),e("div",ya,[e("button",{class:L(["quick-chip",{selected:H.value==="7d"}]),onClick:t[6]||(t[6]=a=>x("7d"))},"Last 7 days",2),e("button",{class:L(["quick-chip",{selected:H.value==="30d"}]),onClick:t[7]||(t[7]=a=>x("30d"))},"Last 30 days",2),e("button",{class:L(["quick-chip",{selected:H.value==="quarter"}]),onClick:t[8]||(t[8]=a=>x("quarter"))},"This quarter",2),e("button",{class:L(["quick-chip",{selected:H.value==="ytd"}]),onClick:t[9]||(t[9]=a=>x("ytd"))},"Year to date",2),e("button",{class:L(["quick-chip",{selected:H.value==="custom"}
179]),onClick:t[10]||(t[10]=a=>x("custom"))},u(ae.value),3)])]),e("div",ka,[t[32]||(t[32]=e("label",{class:"report-label"},"Include",-1)),e("div",ha,[e("label",null,[j(e("input",{type:"checkbox","onUpdate:modelValue":t[11]||(t[11]=a=>$.value.summary=a)},null,512),[[Ee,$.value.summary]]),t[26]||(t[26]=S(" Summary metrics (completed, created, overdue)",-1))]),e("label",null,[j(e("input",{type:"checkbox","onUpdate:modelValue":t[12]||(t[12]=a=>$.value.chart=a)},null,512),[[Ee,$.value.chart]]),t[27]||(t[27]=S(" Completed-by-day chart",-1))]),e("label",null,[j(e("input",{type:"checkbox","onUpdate:modelValue":t[13]||(t[13]=a=>$.value.topContacts=a)},null,512),[[Ee,$.value.topContacts]]),t[28]||(t[28]=S(" Top contacts engaged",-1))]),e("label",null,[j(e("input",{type:"checkbox","onUpdate:modelValue":t[14]||(t[14]=a=>$.value.perMember=a)},null,512),[[Ee,$.value.perMember]]),t[29]||(t[29]=S(" Per-team-member breakdown ",-1)),t[30]||(t[30]=e("span",{class:"dim2"},"team plan only",-1))]),e("label",null,[j(e("input",{type:"checkbox","onUpdate:modelValue":t[15]||(t[15]=a=>$.value.detailed=a)},null,512),[[Ee,$.value.detailed]]),t[31]||(t[31]=S(" Detailed task list (one row per task â adds 5-10 pages)",-1))])])]),e("div",wa,[t[37]||(t[37]=e("label",{class:"report-label"},"Format",-1)),e("div",xa,[e("label",{class:L({selected:b.value==="pdf"})},[e("input",{type:"radio",name:"report-format",checked:b.value==="pdf",onChange:t[16]||(t[16]=a=>b.value="pdf")},null,40,$a),t[33]||(t[33]=S(" PDF ",-1)),t[34]||(t[34]=e("span",{class:"meta"},"branded with ContactsPlus logo",-1))],2),e("label",{class:L({selected:b.value==="csv"})},[e("input",{type:"radio",name:"report-format",checked:b.value==="csv",onChange:t[17]||(t[17]=a=>b.value="csv")},null,40,Ca),t[35]||(t[35]=S(" CSV ",-1)),t[36]||(t[36]=e("span",{class:"meta"},"raw data for spreadsheets",-1))],2)])])]),e("div",_a,[e("div",Ta,[e("b",null,u(Q.value),1),S(" · "+u(te.value)+" · "+u(Se.value),1)]),e("button",{class:"btn btn-primary",disabled:re.value,onClick:be},[t[38]||(t[38]=e("svg",{class:"ic",viewBox:"0 0 24 24",width:"15",height:"15",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},[e("path",{d:"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"}),e("polyline",{points:"14 2 14 8 20 8"})],-1)),S(" "+u(re.value?"Queuingâ¦":"Generate report"),1)],8,Sa)])])]),e("div",Ma,[t[44]||(t[44]=e("div",{class:"settings-block-label"},"Recent reports",-1)),e("div",Aa,[Z.value?(l(),n("div",Da,[...t[41]||(t[41]=[e("span",{class:"spinner","aria-hidden":"true"},null,-1),S(" Loading reports⦠",-1)])])):me.value.length?(l(),n("div",Ia,[(l(!0),n(M,null,q(me.value,a=>(l(),n("div",{key:a.id,class:"settings-list-row"},[e("div",{class:L(["filetile",a.format])},[a.format==="csv"?(l(),n("svg",Pa,[...t[42]||(t[42]=[e("rect",{x:"3",y:"3",width:"18",height:"18",rx:"2"},null,-1),e("line",{x1:"3",y1:"9",x2:"21",y2:"9"},null,-1),e("line",{x1:"9",y1:"21",x2:"9",y2:"9"},null,-1)])])):(l(),n("svg",Ea,[...t[43]||(t[43]=[e("path",{d:"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"},null,-1),e("polyline",{points:"14 2 14 8 20 8"},null,-1)])]))],2),e("div",La,[e("b",null,u(ue(a)),1),e("div",{class:L(["meta",a.state])},u(ee(a)),3)]),e("div",Fa,[a.state==="done"&&a.format==="pdf"?(l(),n("button",{key:0,class:"btn btn-ghost",onClick:s=>c(a)},"Preview",8,Oa)):T("",!0),a.state==="done"?(l(),n("button",{key:1,class:"btn btn-secondary",onClick:s=>I(a)},"Download",8,Ba)):T("",!0)])]))),128))])):(l(),n("p",Ra,"No reports yet."))])]),e("div",za,[t[61]||(t[61]=e("div",{class:"settings-block-label"},"Scheduled reports",-1)),e("div",Na,[e("div",Ua,[t[47]||(t[47]=Ye('<div class="sched-icon" data-v-f726156c><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" data-v-f726156c><rect x="3" y="4" width="18" height="18" rx="2" data-v-f726156c></rect><line x1="16" y1="2" x2="16" y2="6" data-v-f726156c></line><line x1="8" y1="2" x2="8" y2="6" data-v-f726156c></line><line x1="3" y1="10" x2="21" y2="10" data-v-f726156c></line></svg></div>
179',1)),e("div",qa,[t[45]||(t[45]=e("b",null,"Email me a weekly summary",-1)),e("div",Va,"Every Monday at 9 AM · last 7 days · sent to "+u(F.value),1)]),e("button",{class:"toggle-switch","aria-pressed":String(!!ne.value.weekly),onClick:$e},[...t[46]||(t[46]=[e("span",{class:"toggle-dot"},null,-1)])],8,Ya)]),e("div",ja,[e("div",Ha,[t[51]||(t[51]=e("div",{class:"sched-icon"},[e("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},[e("path",{d:"M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"}),e("polyline",{points:"9 22 9 12 15 12 15 22"})])],-1)),e("div",Ga,[t[49]||(t[49]=e("b",null,"Email a monthly summary to the team",-1)),y.value.length?(l(),n("div",Ja,"First of each month at 9:00 AM · sent to all team members")):(l(),n("div",Wa,"Available on team plans â join or create a team to enable this.")),y.value.length>1?(l(),n("label",Ka,[t[48]||(t[48]=e("span",{class:"team-picker-label"},"Team",-1)),j(e("select",{"onUpdate:modelValue":t[18]||(t[18]=a=>z.value=a),class:"sel","aria-label":"Team"},[(l(!0),n(M,null,q(y.value,a=>(l(),n("option",{key:a.id,value:a.id},u(a.name),9,Qa))),128))],512),[[Le,z.value]])])):T("",!0)]),g.value?(l(),n("span",Xa)):P.value&&P.value.admin?(l(),n("button",{key:1,class:"toggle-switch","aria-pressed":String(!!P.value.monthlyEnabled),onClick:Ve},[...t[50]||(t[50]=[e("span",{class:"toggle-dot"},null,-1)])],8,Za)):T("",!0)]),P.value&&P.value.admin&&P.value.monthlyEnabled?(l(),n("div",es,[Re.value.length?(l(),n("button",{key:0,type:"button",class:"optout-toggle","aria-expanded":String(_e.value),onClick:t[19]||(t[19]=a=>_e.value=!_e.value)},[t[54]||(t[54]=Ye('<svg class="ic" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" data-v-f726156c><path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2" data-v-f726156c></path><circle cx="9" cy="7" r="4" data-v-f726156c></circle><path d="M23 21v-2a4 4 0 0 0-3-3.87" data-v-f726156c></path><path d="M16 3.13a4 4 0 0 1 0 7.75" data-v-f726156c></path></svg>',1)),e("span",null,[e("b",null,u(Re.value.length),1),t[52]||(t[52]=S(" opted out",-1))]),(l(),n("svg",{class:L(["chev",{open:_e.value}]),viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2.4","stroke-linecap":"round","stroke-linejoin":"round"},[...t[53]||(t[53]=[e("polyline",{points:"9 18 15 12 9 6"},null,-1)])],2))],8,ts)):T("",!0),Re.value.length&&_e.value?(l(),n("ul",as,[(l(!0),n(M,null,q(Re.value,a=>(l(),n("li",{key:a.id},[e("span",ss,u(a.initial),1),e("span",ls,u(a.name),1)]))),128))])):T("",!0),Re.value.length?T("",!0):(l(),n("div",ns,[...t[55]||(t[55]=[Ye('<svg class="ic" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" data-v-f726156c><path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2" data-v-f726156c></path><circle cx="9" cy="7" r="4" data-v-f726156c></circle><path d="M23 21v-2a4 4 0 0 0-3-3.87" data-v-f726156c></path><path d="M16 3.13a4 4 0 0 1 0 7.75" data-v-f726156c></path></svg><span data-v-f726156c>All members receive this report.</span>',2)])])),e("label",os,[t[57]||(t[57]=e("span",null,"Send it to me too",-1)),e("button",{class:"toggle-switch","aria-pressed":String(!P.value.optedOut),onClick:Pe},[...t[56]||(t[56]=[e("span",{class:"toggle-dot"},null,-1)])],8,is)])])):P.value&&!P.value.admin&&y.value.length?(l(),n("div",rs,[P.value.monthlyEnabled?(l(),n(M,{key:0},[e("label",ds,[t[59]||(t[59]=e("span",null,"Send this summary to me",-1)),e("button",{class:"toggle-switch","aria-pressed":String(!P.value.optedOut),onClick:Pe},[...t[58]||(t[58]=[e("span",{class:"toggle-dot"},null,-1)])],8,us)]),t[60]||(t[60]=e("div",{class:"sched-detail-hint"},"Your team admin emails this on the 1st of each month.",-1))],64)):(l(),n("div",cs,"Your team admin hasnât turned on a monthly team summary."))])):T("",!0)])])]),K.value?(l(),W(la,{key:0,"initial-start":E.value,"initial-end":R.value,onApply:N,onCancel:ve},null,8,["initial-start","initial-end"])):T("",!0),(l(),W(Fe,{to:"body"},[v.value.open?(l(),n("div",{key:0,class:"modal-backdrop report-preview-backdrop",onClick:we(C,["self"])},[e("div",ps,[e("div",vs,[e("div",ms,[t[62]||(t[62]=e("span",{class:"preview-pill"},"PDF preview",-1)),e("span",fs,u(G(v.value.report)),1)]),e("div",gs,[v.value.report?(l(),n("button",{key:0,class:"btn btn-primary",onClick:t[20]||(t[20]=a=>I(v.value.report))},[...t[63]||(t[63]=[e("svg",{class:"ic",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round"},[e("path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"}),e("polyline",{points:"7 10 12 15 17 10"}),e("line",{x1:"12",y1:"15",x2:"12",y2:"3"})],-1),S(" Download PDF ",-1)])])):T("",!0),e("button",{class:"modal-close","aria-label":"Close",onClick:C},[...t[64]||(t[64]=[e("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2.4","stroke-linecap":"round","stroke-linejoin":"round"},[e("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),e("line",{x1:"6",y1:"6",x2:"18",y2:"18"})],-1)])])])]),e("div",bs,[v.value.loading?(l(),n("div",ys,"Rendering previewâ¦")):(l(),n("iframe",{key:1,class:"report-frame",srcdoc:v.value.html,title:"Report preview"},null,8,ks))])])])):T("",!0)]))]))}},ws=Te(hs,[["__scopeId","data-v-f726156c"]]),xs={class:"activity-panel"},$s={key:0,class:"placeholder"},Cs={key:1,class:"placeholder"},_s={class:"settings-block"},Ts={class:"settings-activity"},Ss={class:"settings-block"},Ms={class:"settings-activity"},As={__name:"ActivityPanel",setup(A){const w=m(!0),p=m(!1),h=m([]),F=m([]);return Ue(async()=>{try{const{status:y,body:k}=await dt();y===200&&k?(h.value=k.calendarSync||[],F.value=k.taskActivity||[]):p.value=!0}catch{p.value=!0}finally{w.value=!1}}),(y,k)=>(l(),n("div",xs,[w.value?(l(),n("div",$s,[...k[0]||(k[0]=[e("p",null,"Loa
179ding activityâ¦",-1)])])):p.value?(l(),n("div",Cs,[V(J,{name:"activity",size:22}),k[1]||(k[1]=e("p",null,"Couldn't load activity stats. Try again in a moment.",-1))])):(l(),n(M,{key:2},[e("div",_s,[k[2]||(k[2]=e("div",{class:"settings-block-label"},"Recent calendar sync",-1)),e("div",Ts,[(l(!0),n(M,null,q(h.value,(D,Y)=>(l(),n("div",{key:"sync-"+Y,class:"activity-stat"},[e("b",null,u(D.value),1),e("span",null,u(D.caption),1)]))),128))])]),e("div",Ss,[k[3]||(k[3]=e("div",{class:"settings-block-label"},"Task activity",-1)),e("div",Ms,[(l(!0),n(M,null,q(F.value,(D,Y)=>(l(),n("div",{key:"task-"+Y,class:"activity-stat"},[e("b",null,u(D.value),1),e("span",null,u(D.caption),1)]))),128))])])],64))]))}},Ds=Te(As,[["__scopeId","data-v-a11748cf"]]),Rs={class:"cal-modal",role:"dialog","aria-modal":"true","aria-label":"Connect Apple Calendar"},Is={class:"cal-modal__body"},Ps={key:0},Es={class:"input-row"},Ls=["disabled"],Fs={class:"input-row"},Os=["disabled"],Bs={key:0,class:"cal-modal__error"},zs={key:1,class:"cal-modal__error"},Ns={class:"modal-actions"},Us=["disabled"],qs={key:1},Vs={class:"cal-hero"},Ys={class:"config-block"},js=["value"],Hs={class:"help"},Gs={__name:"ConnectAppleCalendarModal",emits:["close","connected"],setup(A,{emit:w}){const p=w,h=Ke(),F=We(),y=m(""),k=m(""),D=m(!1),Y=m(!1),b=m(null),$=m(!1),E=m([]),R=m(null),H=_(()=>y.value.trim()&&k.value.trim()&&!D.value),K=_(()=>E.value.map(O=>O.displayName));async function ae(){var x;if(!H.value)return;D.value=!0,Y.value=!1,b.value=null;const O=await h.connectApple({appleId:y.value.trim(),appSpecificPassword:k.value.trim()});if(D.value=!1,O.ok){E.value=O.calendars,R.value=((x=O.calendars[0])==null?void 0:x.url)||null,$.value=!0;return}O.error==="asp"?Y.value=!0:b.value="Could not connect to Apple Calendar. Please try again."}async function pe(){await h.connectApple({appleId:y.value.trim(),appSpecificPassword:k.value.trim(),calendarUrl:R.value})}function se(){F.addToast({type:"info",text:"â Synced tasks to Apple Calendar"}),p("connected"),p("close")}function le(){p("close")}return(O,x)=>(l(),W(Fe,{to:"body"},[e("div",{class:"modal-backdrop",onClick:we(le,["self"])},[e("div",{class:"modal-backdrop__content-wrapper",onClick:we(le,["self"])},[e("div",Rs,[e("div",{class:"cal-modal__bar"},[x[4]||(x[4]=e("span",{class:"cal-modal__pill"},"Connect calendar",-1)),e("button",{class:"cal-modal__close",type:"button","aria-label":"Close",onClick:le},[...x[3]||(x[3]=[e("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2.4","stroke-linecap":"round","stroke-linejoin":"round"},[e("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),e("line",{x1:"6",y1:"6",x2:"18",y2:"18"})],-1)])])]),e("div",Is,[$.value?(l(),n("div",qs,[e("div",Vs,[x[11]||(x[11]=e("div",{class:"success-circle"},[e("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round"},[e("polyline",{points:"20 6 9 17 4 12"})])],-1)),x[12]||(x[12]=e("h2",null,"Connected to Apple Calendar",-1)),e("p",null,u(y.value)+" · "+u(E.value.length)+" calendar"+u(E.value.length===1?"":"s")+" found",1)]),e("div",Ys,[x[14]||(x[14]=e("label",null,"Write tasks to this calendar",-1)),j(e("select",{"onUpdate:modelValue":x[2]||(x[2]=N=>R.value=N),class:"cal-select",onChange:pe},[(l(!0),n(M,null,q(E.value,N=>(l(),n("option",{key:N.url,value:N.url},u(N.displayName),9,js))),128))],544),[[Le,R.value]]),e("div",Hs,[x[13]||(x[13]=S("Found: ",-1)),e("b",null,u(K.value.join(" · ")),1)])]),e("div",{class:"modal-actions"},[e("button",{type:"button",class:"cal-btn cal-btn--ghost",onClick:le},"Close"),e("button",{type:"button",class:"cal-btn cal-btn--primary",onClick:se},"Sync now")])])):(l(),n("div",Ps,[x[9]||(x[9]=e("div",{class:"cal-hero"},[e("div",{class:"cal-hero__logo apple"},[e("svg",{viewBox:"0 0 24 24",fill:"currentColor"}
179,[e("path",{d:"M17.05 12.535c-.029-2.91 2.378-4.305 2.487-4.376-1.354-1.981-3.464-2.253-4.219-2.285-1.797-.181-3.51 1.057-4.42 1.057-.917 0-2.317-1.031-3.811-1.001-1.96.028-3.77 1.139-4.778 2.892-2.038 3.534-.521 8.762 1.46 11.633.967 1.404 2.118 2.978 3.622 2.92 1.456-.058 2.005-.943 3.766-.943 1.762 0 2.252.943 3.79.913 1.563-.029 2.553-1.422 3.508-2.832 1.106-1.624 1.561-3.199 1.589-3.279-.035-.014-3.046-1.169-3.075-4.638l.081-.061zm-2.939-8.524c.806-.974 1.347-2.328 1.199-3.677-1.16.048-2.564.772-3.395 1.746-.747.864-1.4 2.241-1.226 3.564 1.295.1 2.617-.659 3.422-1.633z"})])]),e("h2",null,"Connect Apple Calendar"),e("p",null,"Apple uses CalDAV with an app-specific password. This takes about 60 seconds.")],-1)),x[10]||(x[10]=e("div",{class:"config-block"},[e("label",null,"How to get your app-specific password"),e("div",{class:"steps-text"},[e("ol",null,[e("li",null,[S("Sign in to "),e("a",{href:"https://appleid.apple.com",target:"_blank",rel:"noopener noreferrer"},"appleid.apple.com")]),e("li",null,[S("Go to "),e("b",null,"Sign-In and Security â App-Specific Passwords")]),e("li",null,[S("Click "),e("b",null,"Generate Password"),S(' and name it "ContactsPlus Calendar"')]),e("li",null,"Copy the 16-character password it gives you and paste it below")])])],-1)),e("form",{onSubmit:we(ae,["prevent"])},[e("div",Es,[x[5]||(x[5]=e("label",null,"Apple ID",-1)),j(e("input",{"onUpdate:modelValue":x[0]||(x[0]=N=>y.value=N),type:"email",placeholder:"[email protected]",autocomplete:"email",disabled:D.value},null,8,Ls),[[Ne,y.value]])]),e("div",Fs,[x[6]||(x[6]=e("label",null,"App-specific password",-1)),j(e("input",{"onUpdate:modelValue":x[1]||(x[1]=N=>k.value=N),type:"text",class:"mono",placeholder:"abcd-efgh-ijkl-mnop",autocomplete:"off",disabled:D.value},null,8,Os),[[Ne,k.value]])]),Y.value?(l(),n("div",Bs,[...x[7]||(x[7]=[S(" That password didn't work. Make sure you used the ",-1),e("b",null,"app-specific password",-1),S(" from Apple, not your regular iCloud password. ",-1)])])):b.value?(l(),n("div",zs,u(b.value),1)):T("",!0),x[8]||(x[8]=e("div",{class:"note-card"},[e("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2.2","stroke-linecap":"round","stroke-linejoin":"round"},[e("rect",{x:"3",y:"11",width:"18",height:"11",rx:"2"}),e("path",{d:"M7 11V7a5 5 0 0 1 10 0v4"})]),e("span",null,"Your password is stored encrypted and only used to talk to Apple's servers.")],-1)),e("div",Ns,[e("button",{type:"button",class:"cal-btn cal-btn--ghost",onClick:le},"Cancel"),e("button",{type:"submit",class:"cal-btn cal-btn--primary",disabled:!H.value},u(D.value?"Connectingâ¦":"Connect"),9,Us)])],32)]))])])])])]))}},Ws=Te(Gs,[["__scopeId","data-v-aaa2b061"]]),Js={style:{padding:"30px","min-width":"300px","max-width":"420px"}},Ks={class:"u-h3",style:{"margin-bottom":"16px"}},Qs={class:"u-body",style:{"margin-bottom":"24px"}},Xs={style:{display:"flex","justify-content":"flex-end",gap:"12px"}},Zs={__name:"ConfirmDialog",props:{title:{type:String,default:"Confirm"},message:{type:String,default:"Are you sure?"},confirmText:{type:String,default:"Confirm"},cancelText:{type:String,default:"Cancel"},confirmVariant:{type:String,default:"primary"},loading:{type:Boolean,default:!1}},emits:["confirm","cancel"],setup(A,{emit:w}){const p=w;return(h,F)=>(l(),W(nt,{"hide-close-button":"",onClose:F[2]||(F[2]=y=>p("cancel"))},{default:ze(()=>[e("div",Js,[e("h3",Ks,u(A.title),1),e("p",Qs,u(A.message),1),e("div",Xs,[V(Xe,{variant:"transparent",onClick:F[0]||(F[0]=y=>p("cancel"))},{default:ze(()=>[S(u(A.cancelText),1)]),_:1}),V(Xe,{variant:A.confirmVariant,loading:A.loading,onClick:F[1]||(F[1]=y=>p("confirm"))},{default:ze(()=>[S(u(A.confirmText),1)]),_:1},8,["variant","loading"])])])]),_:1}))}},el={class:"modal-card settings-page",role:"dialog","aria-modal":"true","aria-label":"Tasks and Calendar settings"},tl={class:"modal-card-bar"},al={class:"modal-card-body settings-panel"},sl={class:"settings-tabs",role:"tablist"},ll=["onClick"],nl={key:0,class:"count"},ol={class:"settings-tab-panel"},il={class:"settings-block"},rl={class:"settings-card"},dl={class:"settings-list-row"},ul=["aria-pressed"],cl={class:"settings-list-row"},pl={class:"info"},vl={class:"meta"},ml={style:{color:"var(--text)"}},fl={key:0,class:"reminder-choices"},gl=["onClick"],bl={class:"settings-list-row"},yl=["aria-pressed"],kl={class:"settings-list-row"},hl=["aria-pressed"],wl={class:"settings-block"},xl={class:"settings-card"},$l={class:"settings-list-row"},Cl=["aria-pressed"],_l={class:"settings-tab-panel"},Tl={class:"settings-block"},Sl={class:"settings-card"},Ml={class:"info"},Al={class:"meta"},Dl={class:"row-actions"},Rl=["onClick"],Il=["onClick"],Pl=["onClick"],El={key:3,class:"connect-state off"},Ll={class:"settings-block"},Fl={class:"settings-card"},Ol={class:"settings-list-row"},Bl=["aria-pressed"],zl={class:"settings-tab-panel"},Nl={key:0,class:"placeholder"},Ul={class:"team-plan-hero"},ql={class:"icon-tile"},Vl={class:"info"},Yl={class:"meta"},jl=["value"],Hl={class:"settings-block"},Gl={key:0,class:"block-lead"},Wl={key:1,class:"block-lead"},Jl={class:"settings-card"},Kl={class:"info"},Ql={key:0,class:"you-tag"},Xl={class:"meta"},Zl=["onClick"],en={key:0,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-linecap":"round","stroke-linejoin":"round"},tn={key:0,class:"placeholder"},an={class:"settings-block"},sn={class:"settings-card permission-matrix"},ln={key:0,class:"group-row"},nn={colspan:"5"},on={key:1},rn={class:"settings-tab-panel"},dn={class:"settings-tab-panel"},un=["onClick"],cn={class:"rp-label"},pn={class:"rp-desc"},vn={key:0,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"3","stroke-linecap":"round","stroke-linejoin":"round"},mn={class:"modal-card email-modal",role:"dialog","aria-modal":"true","aria-label":"Daily task digest email"},fn={class:"modal-card-bar"},gn={class:"email-modal-body"},bn={class:"email-tabs",role:"tablist"},yn={key:0,class:"email-loading"},kn={class:"email-pane"},hn={class:"email-chrome-bar"},wn={class:"subject"},xn=["srcdoc"],$n={class:"email-pane"},Cn={class:"email-plain"},_n={class:"email-pane"},Tn={class:"email-code"},Sn={__name:"TasksCalendarSettingsModal",props:{defaultTab:{type:String,default:"defaults"}},emits:["close"],setup(A,{emit:w}){const p=A,h=w,F=Ze(),y=Ke(),k=Ge(),D=Je(),Y=We(),b=m(p.defaultTab),$=m(!1),E=m(!1),R=m(!1),H=m(!1),K=m(!1),ae=m(!1),pe=m(""),se=m(""),le=m(""),O=m("rendered"),x=_(()=>se.value?se.value:pe.value.replace(/<!--[\s\S]*?-->/g," ").replace(/<style[\s\S]*?<\/style>/gi," ").replace(/<[^>]+>/g," ").replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/ /g," ").replace(/\s+/g," ").trim()),N=m(null),ve=m([]),ie=m({}),X=m(null),te=m(!1),Q=m(null),Se=[{key:"admin",label:"Admin",desc:"Full control + manage settings & roles"},{key:"editor",label:"Editor",desc:"Create, edit, complete, reassign any task"},{key:"member",label:"Member",desc:"Manage their own tasks"},{key:"viewer",label:"Viewer",desc:"Read-only access"}],me=[{group:"Creating & viewing"}
179,{cap:"Create new tasks",admin:!0,editor:!0,member:!0,viewer:!1},{cap:"View all tasks in book",admin:!0,editor:!0,member:!0,viewer:!0},{cap:"View only tasks assigned to me",admin:!1,editor:!1,member:!1,viewer:"read-only"},{group:"Completing"},{cap:"Mark any task complete",admin:!0,editor:!0,member:!1,viewer:!1},{cap:"Mark tasks assigned to me complete",admin:!0,editor:!0,member:!0,viewer:!0},{group:"Editing"},{cap:"Edit any task",admin:!0,editor:!0,member:!1,viewer:!1},{cap:"Edit my own tasks",admin:!0,editor:!0,member:!0,viewer:!1},{cap:"Reassign tasks",admin:!0,editor:!0,member:!1,viewer:!1},{cap:"Change due dates",admin:!0,editor:!0,member:!1,viewer:!1},{group:"Deleting"},{cap:"Delete any task",admin:!0,editor:!1,member:!1,viewer:!1},{cap:"Delete my own tasks",admin:!0,editor:!0,member:!0,viewer:!1},{group:"Calendar & admin"},{cap:"Push tasks to calendar",admin:!0,editor:!0,member:!0,viewer:!1},{cap:"Manage settings (this page)",admin:!0,editor:!1,member:!1,viewer:!1}],Z=_(()=>k.teams||[]),re=_(()=>{var a;return(a=D.account)==null?void 0:a.accountId}),fe=_(()=>{var a;return((a=X.value)==null?void 0:a.role)==="admin"}),ke=_(()=>Z.value.find(a=>String(a.id)===N.value)),de=_(()=>{let a=null,s=null;for(const U of ve.value)U.created&&(s===null||U.created<s)&&(s=U.created,a=U.accountId);return a}),be=_(()=>re.value!=null&&re.value===de.value),v=_(()=>{var a,s;return be.value?"the plan admin":((a=X.value)==null?void 0:a.role)==="admin"?"an admin":"a "+(((s=X.value)==null?void 0:s.role)||"member")});function r(a){return["owner","admin"].includes(a.role)?"admin":"member"}function c(a){return a.accountId===de.value?"admin":ie.value[a.accountId]||r(a)}function C(a){return fe.value&&a.accountId!==re.value&&a.accountId!==de.value}function G(a){return a?"yes":"no"}function B(a){return a===!0?"â":a||"â"}function I(a){if(a.name&&a.name.trim())return a.name;const s=a.email||"";return s.includes("@")?s.split("@")[0]:s||`Account ${a.accountId}`}async function ue(){if(!Z.value.length)return;N.value||(N.value=String(Z.value[0].id));const a=N.value;te.value=!0;try{const[s,U,d]=await Promise.all([k.fetchMembers(a),ht("team",a),kt("team",a)]);ve.value=Array.isArray(s)?s:[];const ce={};if(U.status===200&&Array.isArray(U.body))for(const Oe of U.body)ce[Oe.accountId]=Oe.role;ie.value=ce,X.value=d.status===200?d.body:null}finally{te.value=!1}}function ee(a,s){if(!C(a))return;const U=s.currentTarget.getBoundingClientRect();Q.value={member:a,top:U.bottom+6,left:Math.max(12,U.right-220)}}function ne(){Q.value=null}async function he(a,s){if(ne(),c(a)===s)return;const{status:U,body:d}=await wt({accountId:a.accountId,scopeType:"team",scopeId:N.value,role:s});U===200?(ie.value={...ie.value,[a.accountId]:d.role},Y.addToast({type:"success",text:`${I(a)} is now ${s}`})):Y.addToast({type:"error",text:(d==null?void 0:d.detail)||"Could not change role"})}async function $e(a){ne();const{status:s}=await xt(a.accountId,"team",N.value);if(s===204||s===200){const U={...ie.value};delete U[a.accountId],ie.value=U,Y.addToast({type:"info",text:`${I(a)} reset to default role`})}else Y.addToast({type:"error",text:"Could not reset role"})}function z(){Y.addToast({type:"info",text:"Plan management lives in team settings"})}const P=[{key:"defaults",label:"Defaults"},{key:"permissions",label:"Permissions"},{key:"calendars",label:"Calendars"},{key:"reports",label:"Reports"},{key:"activity",label:"Activity"}],f=[5,10,15,30,60],o=_(()=>F.settings),g=[{key:"google",name:"Google Calendar",logo:"G",scheme:"Sign in with Google",available:!0},{key:"outlook",name:"Outlook Calendar",logo:"O",scheme:"Microsoft OAuth · personal + work accounts",available:!0},{key:"apple",name:"Apple Calendar",logo:"A",scheme:"CalDAV · requires an app-specific password",available:!0}],ge=_(()=>{const a={};for(const s of y.activeConnections)a[s.provider]=s;return a}),Me=_(()=>{const a={};for(const s of y.connections)s.state==="failed"&&(a[s.provider]=s);return a});function Ae(a){return ge.value[a]||Me.value[a]||null}function Ce(){h("close")}function De(a){F.updateField(a,!o.value[a])}function _e(a){$.value=!1,F.updateField("defaultReminderMinutes",a)}function Re(){R.value=!0}async function qe(){H.value=!0;try{await F.runCleanup(90)}finally{H.value=!1,R.value=!1}}async function Ve(){K.value=!0,O.value="rendered",ae.value=!0;try{const{body:a}=await ct();le.value=(a==null?void 0:a.subject)||"",pe.value=(a==null?void 0:a.html)||"",se.value=(a==null?void 0:a.text)||""}catch{Y.addToast({type:"error",text:"Could not load the digest preview"}),K.value=!1}finally{ae.value=!1}}function Pe(){K.value=!1}function i(a){if(a==="apple"){E.value=!0;return}y.connect(a)}function t(a){const s=ge.value[a];s&&y.disconnect(s.id)}return Ie(b,a=>{a==="permissions"&&ue()}),Ie(N,()=>{b.value==="permissions"&&ue()}),Ue(()=>{var a;F.loadSettings(),y.loaded||y.loadConnections(),Z.value.length||(a=k.fetchTeams)==null||a.call(k),b.value==="permissions"&&ue()}),(a,s)=>{var U;return l(),n(M,null,[j(e("div",{class:"modal-backdrop",onClick:we(Ce,["self"])},[e("div",el,[e("div",tl,[s[15]||(s[15]=e("div",{class:"crumbs"},[S("Settings "),e("span",{class:"sep"},"âº"),S(),e("b",null,"Tasks & Calendar")],-1)),e("button",{class:"modal-close","aria-label":"Close",onClick:Ce},[V(J,{name:"close",size:14})])]),e("div",al,[s[45]||(s[45]=e("h1",{class:"settings-page-title"},"Tasks & Calendar",-1)),s[46]||(s[46]=e("p",{class:"settings-page-lead"},"Manage who can do what with tasks, and how they connect to your calendar.",-1)),e("div",sl,[(l(),n(M,null,q(P,d=>e("button",{key:d.key,class:L(["settings-tab",{active:b.value===d.key}]),role:"tab",onClick:ce=>b.value=d.key},[S(u(d.label)+" ",1),d.key==="calendars"&&oe(y).connectedCount?(l(),n("span",nl,u(oe(y).c
179onnectedCount),1)):T("",!0)],10,ll)),64))]),j(e("div",ol,[e("div",il,[s[24]||(s[24]=e("div",{class:"settings-block-label"},"Task behavior",-1)),e("div",rl,[e("div",dl,[s[17]||(s[17]=e("div",{class:"info"},[e("b",null,"Auto-log completion to contact's timeline"),e("div",{class:"meta"},"When a contact-linked task is completed, write an entry to that contact's timeline.")],-1)),e("button",{class:"toggle-switch","aria-pressed":String(o.value.autoLogCompletionToTimeline),onClick:s[0]||(s[0]=d=>De("autoLogCompletionToTimeline"))},[...s[16]||(s[16]=[e("span",{class:"toggle-dot"},null,-1)])],8,ul)]),e("div",cl,[e("div",pl,[s[19]||(s[19]=e("b",null,"Default reminder for new tasks with a due time",-1)),e("div",vl,[s[18]||(s[18]=S(" Currently: ",-1)),e("b",ml,u(o.value.defaultReminderMinutes)+" minutes before",1)]),$.value?(l(),n("div",fl,[(l(),n(M,null,q(f,d=>e("button",{key:d,class:L(["chip",{selected:d===o.value.defaultReminderMinutes}]),onClick:ce=>_e(d)},u(d)+" min",11,gl)),64))])):T("",!0)]),e("button",{class:"btn btn-ghost",onClick:s[1]||(s[1]=d=>$.value=!$.value)},u($.value?"Done":"Change"),1)]),e("div",bl,[s[21]||(s[21]=e("div",{class:"info"},[e("b",null,"Notify on assignment"),e("div",{class:"meta"},"Email me when a teammate assigns me a task.")],-1)),e("button",{class:"toggle-switch","aria-pressed":String(o.value.notifyOnAssignment),onClick:s[2]||(s[2]=d=>De("notifyOnAssignment"))},[...s[20]||(s[20]=[e("span",{class:"toggle-dot"},null,-1)])],8,yl)]),e("div",kl,[s[23]||(s[23]=e("div",{class:"info"},[e("b",null,"Email daily task digest"),e("div",{class:"meta"},"9:00 AM rundown of today's tasks across all your books.")],-1)),e("button",{class:"btn btn-ghost",onClick:Ve},"Preview email"),e("button",{class:"toggle-switch","aria-pressed":String(o.value.dailyDigestEnabled),onClick:s[3]||(s[3]=d=>De("dailyDigestEnabled"))},[...s[22]||(s[22]=[e("span",{class:"toggle-dot"},null,-1)])],8,hl)])])]),e("div",wl,[s[27]||(s[27]=e("div",{class:"settings-block-label"}
179,"Calendar push",-1)),e("div",xl,[e("div",$l,[s[26]||(s[26]=e("div",{class:"info"},[e("b",null,"Push new tasks to my calendar by default"),e("div",{class:"meta"},"Smart default: on for tasks with a due time, off for date-only tasks. You can override per task.")],-1)),e("button",{class:"toggle-switch","aria-pressed":String(o.value.pushNewTasksToCalendar),onClick:s[4]||(s[4]=d=>De("pushNewTasksToCalendar"))},[...s[25]||(s[25]=[e("span",{class:"toggle-dot"},null,-1)])],8,Cl)])])]),e("div",{class:"settings-block"},[s[29]||(s[29]=e("div",{class:"settings-block-label danger"},"Danger zone",-1)),e("div",{class:"settings-card"},[e("div",{class:"settings-list-row"},[s[28]||(s[28]=e("div",{class:"info"},[e("b",null,"Delete all my completed tasks older than 90 days"),e("div",{class:"meta"},"One-shot cleanup. Can't be undone.")],-1)),e("button",{class:"btn btn-danger",onClick:Re},"Clean up")])])])],512),[[xe,b.value==="defaults"]]),j(e("div",_l,[e("div",Tl,[s[33]||(s[33]=e("div",{class:"settings-block-label"},"Connected calendars",-1)),s[34]||(s[34]=e("p",{class:"block-lead"},"Connect Google, Apple, or Outlook so ContactsPlus can push your tasks as calendar events â one-way.",-1)),e("div",Sl,[(l(),n(M,null,q(g,d=>e("div",{key:d.key,class:"settings-list-row"},[e("div",{class:L(["provider-logo",d.key]),"aria-hidden":"true"},[V(J,{name:d.key,size:22},null,8,["name"])],2),e("div",Ml,[e("b",null,u(d.name),1),e("div",Al,u(Ae(d.key)?Ae(d.key).providerAccount:d.scheme),1)]),e("div",Dl,[ge.value[d.key]?(l(),n(M,{key:0},[s[30]||(s[30]=e("span",{class:"connect-state on"},"Connected",-1)),e("button",{class:"btn btn-ghost",onClick:ce=>t(d.key)},"Disconnect",8,Rl)],64)):Me.value[d.key]?(l(),n(M,{key:1},[s[31]||(s[31]=e("span",{class:"connect-state failed",title:"This calendar stopped working â reconnect to resume pushing tasks."},"Reconnect needed",-1)),e("button",{class:"btn btn-primary",onClick:ce=>i(d.key)},"Reconnect",8,Il)],64)):d.available?(l(),n(M,{key:2},[s[32]||(s[32]=e("span",{class:"connect-state off"},"Not connected",-1)),e("button",{class:"btn btn-primary",onClick:ce=>i(d.key)},"Connect",8,Pl)],64)):(l(),n("span",El,"Coming soon"))])])),64))])]),e("div",Ll,[s[37]||(s[37]=e("div",{class:"settings-block-label"},"How tasks push",-1)),e("div",Fl,[e("div",Ol,[s[36]||(s[36]=e("div",{class:"info"},[e("b",null,"Push tasks to my calendar"),e("div",{class:"meta"},"Default is on for any task with a due time. You can override per task.")],-1)),e("button",{class:"toggle-switch","aria-pressed":String(o.value.pushNewTasksToCalendar),onClick:s[5]||(s[5]=d=>De("pushNewTasksToCalendar"))},[...s[35]||(s[35]=[e("span",{class:"toggle-dot"},null,-1)])],8,Bl)])])])],512),[[xe,b.value==="calendars"]]),j(e("div",zl,[Z.value.length?(l(),n(M,{key:1},[e("div",Ul,[e("div",ql,[V(J,{name:"users",size:22})]),e("div",Vl,[e("b",null,"Team · "+u(((U=ke.value)==null?void 0:U.name)||"Shared book"),1),e("div",Yl,u(ve.value.length)+" member"+u(ve.value.length===1?"":"s")+" · you are "+u(v.value)+" · permissions below apply to all tasks in this team",1)]),Z.value.length>1?j((l(),n("select",{key:0,"onUpdate:modelValue":s[6]||(s[6]=d=>N.value=d),class:"team-select-inline"},[(l(!0),n(M,null,q(Z.value,d=>(l(),n("option",{key:d.id,value:String(d.id)},u(d.name),9,jl))),128))],512)),[[Le,N.value]]):(l(),n("button",{key:1,class:"btn btn-secondary",onClick:z},"Manage plan"))]),e("div",Hl,[s[42]||(s[42]=e("div",{class:"settings-block-label"},"Team members & roles",-1)),fe.value?(l(),n("p",Gl,[...s[39]||(s[39]=[S(" Click any ",-1),e("b",{style:{color:"var(--text)"}},"role chip",-1),S(" below to change a member's role. ",-1),e("b",{style:{color:"var(--accent)"}},"Admin promotes them to your level",-1),S(" â they can edit settings, change permissions, and assign roles too. You can have as many admins as you want. ",-1)])])):(l(),n("p",Wl,"Roles control what each member can do with tasks. Only an admin can change them.")),e("div",Jl,[(l(!0),n(M,null,q(ve.value,d=>(l(),n("div",{key:d.accountId,class:"settings-list-row"},[e("span",{class:"mini-avatar",style:He(oe(bt)(I(d)))},u(oe(ut)(I(d))),5),e("div",Kl,[e("b",null,[S(u(I(d))+" ",1),d.accountId===re.value?(l(),n("span",Ql,"(you)")):T("",!0)]),e("div",Xl,u
179(d.email),1)]),e("button",{class:L(["role-chip",[c(d),{pickable:C(d)}]]),onClick:ce=>ee(d,ce)},[S(u(c(d))+" ",1),C(d)?(l(),n("svg",en,[...s[40]||(s[40]=[e("polyline",{points:"6 9 12 15 18 9"},null,-1)])])):T("",!0)],10,Zl)]))),128)),!ve.value.length&&!te.value?(l(),n("div",tn,[...s[41]||(s[41]=[e("p",null,"No members found.",-1)])])):T("",!0)])]),e("div",an,[s[44]||(s[44]=e("div",{class:"settings-block-label"},"What each role can do",-1)),e("div",sn,[e("table",null,[s[43]||(s[43]=e("thead",null,[e("tr",null,[e("th",null,"Capability"),e("th",{class:"role-admin"},"Admin"),e("th",{class:"role-editor"},"Editor"),e("th",{class:"role-member"},"Member"),e("th",{class:"role-viewer"},"Viewer")])],-1)),e("tbody",null,[(l(),n(M,null,q(me,(d,ce)=>(l(),n(M,{key:ce},[d.group?(l(),n("tr",ln,[e("td",nn,u(d.group),1)])):(l(),n("tr",on,[e("td",null,u(d.cap),1),e("td",{class:L(G(d.admin))},u(B(d.admin)),3),e("td",{class:L(G(d.editor))},u(B(d.editor)),3),e("td",{class:L(G(d.member))},u(B(d.member)),3),e("td",{class:L(G(d.viewer))},u(B(d.viewer)),3)]))],64))),64))])])])])],64)):(l(),n("div",Nl,[V(J,{name:"users",size:22}),s[38]||(s[38]=e("p",null,"Join or create a shared book to manage task permissions.",-1))]))],512),[[xe,b.value==="permissions"]]),j(e("div",rn,[b.value==="reports"?(l(),W(ws,{key:0})):T("",!0)],512),[[xe,b.value==="reports"]]),j(e("div",dn,[b.value==="activity"?(l(),W(Ds,{key:0})):T("",!0)],512),[[xe,b.value==="activity"]])])])],512),[[xe,!E.value]]),(l(),W(Fe,{to:"body"},[Q.value?(l(),n("div",{key:0,class:"role-pop-backdrop",onClick:ne},[e("div",{class:"role-pop",style:He({top:Q.value.top+"px",left:Q.value.left+"px"}),onClick:s[8]||(s[8]=we(()=>{},["stop"]))},[(l(),n(M,null,q(Se,d=>e("button",{key:d.key,class:L(["role-pop-item",{selected:c(Q.value.member)===d.key}]),onClick:ce=>he(Q.value.member,d.key)},[e("div",null,[e("div",cn,u(d.label),1),e("div",pn,u(d.desc),1)]),c(Q.value.member)===d.key?(l(),n("svg",vn,[...s[47]||(s[47]=[e("polyline",{points:"20 6 9 17 4 12"},null,-1)])])):T("",!0)],10,un)),64)),s[48]||(s[48]=e("div",{class:"role-pop-divider"},null,-1)),e("button",{class:"role-pop-item danger",onClick:s[7]||(s[7]=d=>$e(Q.value.member))},"Reset to default role")],4)])):T("",!0)])),(l(),W(Fe,{to:"body"},[K.value?(l(),n("div",{key:0,class:"modal-backdrop email-preview-backdrop",onClick:we(Pe,["self"])},[e("div",mn,[e("div",fn,[s[49]||(s[49]=e("div",{class:"crumbs"},[e("b",null,"Daily task digest email")],-1)),e("button",{class:"modal-close","aria-label":"Close",onClick:Pe},[V(J,{name:"close",size:14})])]),e("div",gn,[e("div",bn,[e("button",{class:L(["email-tab",{active:O.value==="rendered"}]),onClick:s[9]||(s[9]=d=>O.value="rendered")},"Rendered preview",2),e("button",{class:L(["email-tab",{active:O.value==="plain"}]),onClick:s[10]||(s[10]=d=>O.value="plain")},"Plain text",2),e("button",{class:L(["email-tab",{active:O.value==="html"}]),onClick:s[11]||(s[11]=d=>O.value="html")},"Dev HTML",2)]),ae.value?(l(),n("div",yn,"Loading previewâ¦")):(l(),n(M,{key:1},[j(e("div",kn,[e("div",hn,[e("div",wn,u(le.value),1),s[50]||(s[50]=e("div",{class:"from-line"},[e("b",null,"ContactsPlus"),S(" <[email protected]> "),e("span",{class:"when"},"9:00 AM")],-1))]),e("iframe",{class:"email-frame",srcdoc:pe.value,title:"Rendered email preview"},null,8,xn)],512),[[xe,O.value==="rendered"]]),j(e("div",$n,[e("pre",Cn,u(x.value),1)],512),[[xe,O.value==="plain"]]),j(e("div",_n,[e("pre",Tn,u(pe.value),1)],512),[[xe,O.value==="html"]])],64))])])])):T("",!0)])),E.value?(l(),W(Ws,{key:0,onClose:s[12]||(s[12]=d=>E.value=!1),onConnected:s[13]||(s[13]=d=>E.value=!1)})):T("",!0),R.value?(l(),W(Zs,{key:1,title:"Delete completed tasks?",message:"Delete all your completed tasks older than 90 days? This is a one-shot cleanup and can't be undone.","confirm-text":"Delete tasks","cancel-text":"Cancel","confirm-variant":"red",loading:H.value,onConfirm:qe,onCancel:s[14]||(s[14]=d=>R.value=!1)},null,8,["loading"])):T("",!0)],64)}}},Mn=Te(Sn,[["__scopeId","data-v-8de82431"]]),An={class:"trial-gate"},Dn={class:"trial-card"},Rn={class:"trial-badge"},In={class:"trial-features"},Pn={class:"trial-feature"},En={class:"trial-feature"},Ln={class:"trial-feature"},Fn={class:"trial-actions"},On=["disabled"],Bn=["disabled"],zn={__name:"TasksTrialStartScreen",props:{loading:{type:Boolean,default:!1}},emits:["start","cancel"],setup(A){return(w,p)=>(l(),n("div",An,[e("div",Dn,[e("div",Rn,[V(J,{name:"tasks",size:30})]),p[8]||(p[8]=e("h2",{class:"trial-title"},"Try Tasks free for 30 days",-1)),p[9]||(p[9]=e("p",{class:"trial-subtitle"}," Organize follow-ups, reminders, and to-dos right alongside your contacts. ",-1)),e("div",In,[e("div",Pn,[V(J,{class:"trial-feature-icon",name:"check-square",size:24}),p[2]||(p[2]=e("div",{class:"trial-feature-title"},"Track follow-ups",-1)),p[3]||(p[3]=e("p",{class:"trial-feature-text"},"Keep every to-do tied to the right contact",-1))]),e("div",En,[V(J,{class:"trial-feature-icon",name:"clock",size:24}),p[4]||(p[4]=e("div",{class:"trial-feature-title"}
179,"Never miss a thing",-1)),p[5]||(p[5]=e("p",{class:"trial-feature-text"},"Set reminders and due dates that nudge you",-1))]),e("div",Ln,[V(J,{class:"trial-feature-icon",name:"calendar",size:24}),p[6]||(p[6]=e("div",{class:"trial-feature-title"},"Push to calendar",-1)),p[7]||(p[7]=e("p",{class:"trial-feature-text"},"Send tasks to Google, Apple, or Outlook",-1))])]),e("div",Fn,[e("button",{class:"trial-cta","data-test":"start-trial",disabled:A.loading,onClick:p[0]||(p[0]=h=>w.$emit("start"))},u(A.loading?"Startingâ¦":"Get Started"),9,On),e("button",{class:"trial-cancel","data-test":"cancel-trial",disabled:A.loading,onClick:p[1]||(p[1]=h=>w.$emit("cancel"))}," Cancel ",8,Bn)]),p[10]||(p[10]=e("p",{class:"trial-note"},"No credit card required · ",-1))])]))}},Nn=Te(zn,[["__scopeId","data-v-da1223c3"]]),Un={class:"trial-gate"},qn={class:"trial-card"},Vn={class:"trial-badge"},Yn={class:"trial-features"},jn={class:"trial-feature"},Hn={class:"trial-feature"},Gn={class:"trial-feature"},Wn={__name:"TasksLockedScreen",emits:["upgrade"],setup(A){return(w,p)=>(l(),n("div",Un,[e("div",qn,[e("div",Vn,[V(J,{name:"star",size:30})]),p[7]||(p[7]=e("h2",{class:"trial-title"},"Your 30 days Tasks trial has ended",-1)),p[8]||(p[8]=e("p",{class:"trial-subtitle"}," Tasks is a premium feature. Upgrade to keep organizing your follow-ups, reminders, and to-dos alongside your contacts. ",-1)),e("div",Yn,[e("div",jn,[V(J,{class:"trial-feature-icon",name:"check-square",size:24}),p[1]||(p[1]=e("div",{class:"trial-feature-title"},"Track follow-ups",-1)),p[2]||(p[2]=e("p",{class:"trial-feature-text"},"Keep every to-do tied to the right contact",-1))]),e("div",Hn,[V(J,{class:"trial-feature-icon",name:"clock",size:24}),p[3]||(p[3]=e("div",{class:"trial-feature-title"},"Never miss a thing",-1)),p[4]||(p[4]=e("p",{class:"trial-feature-text"},"Set reminders and due dates that nudge you",-1))]),e("div",Gn,[V(J,{class:"trial-feature-icon",name:"calendar",size:24}),p[5]||(p[5]=e("div",{class:"trial-feature-title"},"Push to calendar",-1)),p[6]||(p[6]=e("p",{class:"trial-feature-text"},"Send tasks to Google, Apple, or Outlook",-1))])]),e("button",{class:"trial-cta","data-test":"upgrade",onClick:p[
1790]||(p[0]=h=>w.$emit("upgrade"))}," Upgrade to Premium "),p[9]||(p[9]=e("p",{class:"trial-note"},"Your tasks are saved and waiting for you.",-1))])]))}},Jn=Te(Wn,[["__scopeId","data-v-66ae4868"]]),Kn={class:"page-header"},Qn={class:"page-subtitle"},Xn={key:0,class:"connect-banner"},Zn={class:"b-icon"},eo={class:"strip"},to=["onClick"],ao={key:0,class:"count"},so={class:"strip-right"},lo={key:0,class:"chip-menu"},no=["onClick"],oo={key:0,class:"filter-count"},io={key:0,class:"chip-menu filter-menu"},ro=["onClick"],uo=["innerHTML"],co={class:"filter-label"},po={key:0,class:"filter-check",viewBox:"0 0 24 24",width:"14",height:"14",fill:"none",stroke:"currentColor","stroke-width":"2.6","stroke-linecap":"round","stroke-linejoin":"round"},vo={key:0,class:"filter-empty"},mo={key:1,class:"all-clear"},fo={class:"section-header"},go={class:"section-meta"},bo={class:"task-list"},yo={class:"section-header"},ko={class:"section-meta"},ho={class:"task-list"},wo={class:"section-header"},xo={class:"section-meta"},$o={class:"task-list"},Co={key:0,class:"filter-empty"},_o={key:1,class:"all-clear"},To={class:"task-list"},je="tasks-connect-banner-dismissed",So={__name:"TasksView",setup(A){const w=st(),p=lt(),h=pt(),F=at(),y=Ge(),k=Ke(),D=Ze(),Y=Je(),b=m(!1),$=m("defaults");function E(f){$.value=f,b.value=!0}Ie(()=>w.fullPath,()=>{w.meta.openCalendarSettings&&E(w.query.tab||"calendars")});const R=m(localStorage.getItem(je)==="1"),H=_(()=>k.connectedCount===0&&!R.value);Ie(()=>k.connectedCount,f=>{f===0&&(R.value=!1,localStorage.removeItem(je))});function K(){R.value=!0,localStorage.setItem(je,"1")}const ae=vt(),pe=[{key:"today",label:"Today"},{key:"all",label:"All"},{key:"upcoming",label:"Upcoming"},{key:"completed",label:"Completed"}];function se(f){if(f==="today")return h.todayLoaded?be.value.length+v.value.length+r.value.length:null;const o=h.tabs[f];return o!=null&&o.loaded?o.tasks.filter(de).length+(o.nextCursor?"+":""):null}async function le(f){h.activeTab=f,f==="today"?await h.loadToday():await h.loadTab(f)}const O=m(null),x=m(!1),N=_(()=>[{value:null,label:"All books"},{value:"personal",label:"My address book"},...(y.teams||[]).map(f=>({value:String(f.id),label:f.name}))]),ve=_(()=>{var f;return((f=N.value.find(o=>o.value===O.value))==null?void 0:f.label)||"All books"});function ie(f){return O.value===null?!0:O.value==="personal"?!f.teamId:String(f.teamId)===O.value}const X=m(!1),te=m(new Set),Q=_(()=>{var f,o;return((f=Y.account)==null?void 0:f.accountId)??((o=Y.account)==null?void 0:o.id)??null}),Se=[{key:"linked",label:"Contact-linked tasks",paths:'<path d="M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2"/><circle cx="9" cy="7" r="4"/>'},{key:"free",label:"Free-standing tasks",paths:'<line x1="5" y1="12" x2="19" y2="12"/>'},{key:"mine",label:"Assigned to me",paths:'<path d="M20 21v-2a4 4 0 0 0-3-3.87"/><path d="M4 21v-2a4 4 0 0 1 4-4h4a4 4 0 0 1 4 4v2"/><circle cx="10" cy="7" r="4"/>'},{key:"others",label:"Created by others",paths:'<path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"/><circle cx="9" cy="7" r="4"/><path d="M23 21v-2a4 4 0 0 0-3-3.87"/>'},{key:"reminder",label:"Has reminder",paths:'<path d="M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9"/><path d="M13.73 21a2 2 0 0 1-3.46 0"/>'},{key:"overdue",label:"Overdue only",paths:'<circle cx="12" cy="12" r="10"/><polyline points="12 6 12 12 16 14"/>'}],me=_(()=>te.value.size),Z=_(()=>te.value.size>0);function re(f){const o=new Set(te.value);o.has(f)?o.delete(f):o.add(f),te.value=o}function fe(){te.value=new Set}function ke(f){var g;const o=te.value;return o.size===0?!0:!(o.has("linked")&&!f.linkedContactName||o.has("free")&&f.linkedContactName||o.has("mine")&&f.assigneeAccountId!==Q.value||o.has("others")&&!(f.creatorAccountId!=null&&f.creatorAccountId!==Q.value)||o.has("reminder")&&f.reminderMinutes==null||o.has("overdue")&&((g=gt(f))==null?void 0:g.state)!=="overdue")}function de(f){return ie(f)&&ke(f)}const be=_(()=>h.overdue.filter(de)),v=_(()=>h.dueToday.filter(de)),r=_(()=>h.recentlyAssigned.filter(de)),c=_(()=>h.todayLoaded&&!be.value.length&&!v.value.length&&!r.value.length),C=_(()=>h.activeTab==="today"?null:h.tabs[h.activeTab]),G=_(()=>C.value?C.value.tasks.filter(de):[]),B=_(()=>h.overdue.length||h.dueToday.length||h.recentlyAssigned.length),I=_(()=>Z.value&&h.todayLoaded&&B.value&&c.value),ue=_(()=>{var f;return Z.value&&!!((f=C.value)!=null&&f.loaded)&&C.value.tasks.length>0&&G.value.length===0});function ee(f){var g;if(!f.teamId)return"My address book";const o=(g=y.teams)==null?void 0:g.find(ge=>String(ge.id)===String(f.teamId));return(o==null?void 0:o.name)||"Shared book"}const ne=m(!1);async function he(){ne.value=!0;const f=await h.startTasksTrial();ne.value=!1,f&&await P()}function $e(){p.push("/upgrade")}function z(){p.push("/contacts")}
179async function P(){var f,o,g,ge,Me,Ae;(f=F.addressBooks)!=null&&f.length||(o=F.loadAddressBooks)==null||o.call(F),(g=y.teams)!=null&&g.length||await((ge=y.fetchTeams)==null?void 0:ge.call(y));for(const Ce of y.teams||[])(Me=y.membersByTeam)!=null&&Me[String(Ce.id)]||(Ae=y.fetchMembers)==null||Ae.call(y,Ce.id);k.loadConnections(),D.captureTimezone(),await h.loadToday(),w.meta.openCalendarSettings&&E(w.query.tab||"calendars"),h.loadTabCounts()}return Ue(async()=>{await h.loadTrialStatus(),(h.tasksState==="active"||h.tasksState==="premium")&&await P()}),(f,o)=>(l(),W(ot,null,{default:ze(()=>[oe(h).trialStatus===null?(l(),W(yt,{key:0})):oe(h).tasksState==="none"?(l(),W(Nn,{key:1,loading:ne.value,onStart:he,onCancel:z},null,8,["loading"])):oe(h).tasksState==="expired"?(l(),W(Jn,{key:2,onUpgrade:$e})):(l(),n("div",{key:3,class:"tasks-page",onClick:o[10]||(o[10]=g=>{x.value=!1,X.value=!1})},[e("div",Kn,[e("div",null,[o[13]||(o[13]=e("h1",{class:"page-title"},"Tasks",-1)),e("p",Qn,[S(u(oe(ae))+" ",1),o[12]||(o[12]=e("span",{class:"dot-sep"},null,-1)),e("a",{class:"subtitle-link",role:"button",title:"Tasks & Calendar settings",onClick:o[0]||(o[0]=g=>E("defaults"))},[V(J,{name:"settings",size:14}),o[11]||(o[11]=S(" Tasks & Calendar settings ",-1))])])]),e("button",{class:"btn btn-primary",onClick:o[1]||(o[1]=g=>oe(h).openCreatePanel())},[V(J,{name:"plus",size:14}),o[14]||(o[14]=S(" Create task ",-1))])]),H.value?(l(),n("div",Xn,[e("div",Zn,[V(J,{name:"calendar",size:18})]),o[15]||(o[15]=e("div",{class:"b-copy"},[e("div",{class:"b-title"},"Push your tasks to your calendar"),e("div",{class:"b-sub"},"Google, Apple, or Outlook · set up in 30 seconds.")],-1)),e("button",{class:"b-cta",onClick:o[2]||(o[2]=g=>E("calendars"))},"Connect â"),e("button",{class:"b-dismiss","aria-label":"Dismiss",onClick:K},[V(J,{name:"close",size:14})])])):T("",!0),e("div",eo,[(l(),n(M,null,q(pe,g=>e("button",{key:g.key,class:L(["tab",{active:oe(h).activeTab===g.key}]),onClick:ge=>le(g.key)},[S(u(g.label)+" ",1),se(g.key)!==null?(l(),n("span",ao,u(se(g.key)),1)):T("",!0)],10,to)),64)),e("div",so,[e("div",{class:"chip-wrap",onClick:o[4]||(o[4]=we(()=>{},["stop"]))},[e("button",{class:"chip",onClick:o[3]||(o[3]=g=>x.value=!x.value)},[V(J,{name:"book",size:12}),S(" "+u(ve.value)+" ",1),o[16]||(o[16]=e("svg",{class:"caret",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2.4","stroke-linecap":"round","stroke-linejoin":"round"},[e("polyline",{points:"6 9 12 15 18 9"})],-1))]),x.value?(l(),n("div",lo,[(l(!0),n(M,null,q(N.value,g=>(l(),n("button",{key:String(g.value),class:L(["chip-menu-item",{selected:O.value===g.value}]),onClick:ge=>{O.value=g.value,x.value=!1}},u(g.label),11,no))),128))])):T("",!0)]),e("div",{class:"chip-wrap",onClick:o[7]||(o[7]=we(()=>{},["stop"]))},[e("button",{class:L(["chip",{"has-filters":Z.value}]),onClick:o[5]||(o[5]=g=>{X.value=!X.value,x.value=!1})},[V(J,{name:"filter",size:12}),o[17]||(o[17]=S(" Filter ",-1)),Z.value?(l(),n("span",oo,u(me.value),1)):T("",!0)],2),X.value?(l(),n("div",io,[o[20]||(o[20]=e("div",{class:"menu-section"},"Show only",-1)),(l(),n(M,null,q(Se,g=>e("button",{key:g.key,class:L(["filter-item",{checked:te.value.has(g.key)}]),onClick:ge=>re(g.key)},[(l(),n("svg",{class:"filter-icon",viewBox:"0 0 24 24",width:"16",height:"16",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",innerHTML:g.paths},null,8,uo)),e("span",co,u(g.label),1),te.value.has(g.key)?(l(),n("svg",po,[...o[18]||(o[18]=[e("polyline",{points:"20 6 9 17 4 12"},null,-1)])])):T("",!0)],10,ro)),64)),o[21]||(o[21]=e("div",{class:"menu-divider"},null,-1)),e("button",{class:"filter-item clear",onClick:o[6]||(o[6]=g=>{fe(),X.value=!1})},[V(J,{name:"close",size:16,class:"filter-icon"}),o[19]||(o[19]=e("span",{class:"filter-label"},"Clear all filters",-1))])])):T("",!0)])])]),oe(h).activeTab==="today"?(l(),n(M,{key:1},[I.value?(l(),n("div",vo,[o[22]||(o[22]=e("h3",null,"No tasks match your filters",-1)),o[23]||(o[23]=e("p",null,"Try removing one or more filters.",-1)),e("button",{class:"btn btn-secondary",onClick:fe},"Clear all filters")])):c.value?(l(),n("div",mo,[...o[24]||(o[24]=[e("h3",null,"You're all caught up on tasks",-1),e("p",null,"Nice work.",-1)])])):T("",!0),be.value.length?(l(),n(M,{key:2},[e("div",fo,[o[25]||(o[25]=e("h2",{class:"section-title danger"},"Overdue",-1)),e("span",go,u(be.value.length)+" task"+u(be.value.length===1?"":"s")+" · oldest first",1)]),e("div",bo,[(l(!0),n(M,null,q(be.value,g=>(l(),W(Be,{key:g.id,task:g,"book-name":ee(g),personal:!g.teamId},null,8,["task","book-name","personal"]))),128))])],64)):T("",!0),v.value.length?(l(),n(M,{key:3},[e("div",yo,[o[26]||(o[26]=e("h2",{class:"section-title today"},"Due today",-1)),e("span",ko,u(v.value.length)+" task"+u(v.value.length===1?"":"s")+" · by time",1)]),e("div",ho,[(l(!0),n(M,null,q(v.value,g=>(l(),W(Be,{key:g.id,task:g,"book-name":ee(g),personal:!g.teamId},null,8,["task","book-name","personal"]))),128))])],64)):T("",!0),r.value.length?(l(),n(M,{key:4}
179,[e("div",wo,[o[27]||(o[27]=e("h2",{class:"section-title"},"Recently assigned to you",-1)),e("span",xo,u(r.value.length)+" task"+u(r.value.length===1?"":"s")+" · last 24 hours",1)]),e("div",$o,[(l(!0),n(M,null,q(r.value,g=>(l(),W(Be,{key:g.id,task:g,"book-name":ee(g),personal:!g.teamId},null,8,["task","book-name","personal"]))),128))])],64)):T("",!0)],64)):C.value?(l(),n(M,{key:2},[ue.value?(l(),n("div",Co,[o[28]||(o[28]=e("h3",null,"No tasks match your filters",-1)),o[29]||(o[29]=e("p",null,"Try removing one or more filters.",-1)),e("button",{class:"btn btn-secondary",onClick:fe},"Clear all filters")])):C.value.loaded&&!G.value.length?(l(),n("div",_o,[...o[30]||(o[30]=[e("h3",null,"Nothing here yet",-1),e("p",null,"Tasks will appear as you add them.",-1)])])):T("",!0),e("div",To,[(l(!0),n(M,null,q(G.value,g=>(l(),W(Be,{key:g.id,task:g,"book-name":ee(g),personal:!g.teamId},null,8,["task","book-name","personal"]))),128))]),C.value.nextCursor?(l(),n("button",{key:2,class:"btn btn-secondary load-more",onClick:o[8]||(o[8]=g=>oe(h).loadTab(oe(h).activeTab,{reset:!1}))}," Load more ")):T("",!0)],64)):T("",!0),V(mt),b.value?(l(),W(Mn,{key:3,"default-tab":$.value,onClose:o[9]||(o[9]=g=>b.value=!1)},null,8,["default-tab"])):T("",!0),oe(h).sendToCalOpen?(l(),W(ft,{key:4})):T("",!0)]))]),_:1}))}},Zo=Te(So,[["__scopeId","data-v-c709ea27"]]);export{Zo as default};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.