diff --git a/src/static/assets/AdminView-DtdytqmI.js b/src/static/assets/AdminView-CJ79dSWf.js similarity index 88% rename from src/static/assets/AdminView-DtdytqmI.js rename to src/static/assets/AdminView-CJ79dSWf.js index 6c9c4ba..b9edb7b 100644 --- a/src/static/assets/AdminView-DtdytqmI.js +++ b/src/static/assets/AdminView-CJ79dSWf.js @@ -1 +1 @@ -import{d as p,u as y,x as h,c as r,a as t,e as n,n as v,w as d,f as b,r as u,o as s,F as g,l as k,t as a,k as m,i as A}from"./index-CsAuQ78D.js";import{a as w}from"./admin-CFFp_mFQ.js";import{_ as B,a as S}from"./CardContent.vue_vue_type_script_setup_true_lang-p2CthxwA.js";import{_ as x}from"./Badge.vue_vue_type_script_setup_true_lang-DbHLHOj7.js";import{_ as V,a as $}from"./utils-BKH6bEpf.js";const N={class:"p-6"},C={key:0,class:"flex items-center justify-center h-20"},D={class:"w-full"},E={class:"px-4 py-3"},F={class:"text-sm font-medium text-foreground"},R={class:"px-4 py-3 text-sm text-muted-foreground"},U={class:"px-4 py-3"},j={class:"px-4 py-3"},I={class:"px-4 py-3 text-xs text-muted-foreground"},G=p({__name:"AdminView",setup(J){const f=y(),_=b(),i=u([]),l=u(!1);return h(async()=>{if(!f.isAdmin){_.push("/");return}l.value=!0;try{const c=await w.users();i.value=c.data}finally{l.value=!1}}),(c,o)=>(s(),r("div",N,[o[1]||(o[1]=t("h2",{class:"text-lg font-semibold text-foreground mb-6"},"Admin — Users",-1)),l.value?(s(),r("div",C,[n(V,{class:"text-primary"})])):(s(),v(B,{key:1},{default:d(()=>[n(S,{class:"p-0"},{default:d(()=>[t("table",D,[o[0]||(o[0]=t("thead",null,[t("tr",{class:"border-b border-border"},[t("th",{class:"text-left text-xs font-medium text-muted-foreground px-4 py-3"},"User"),t("th",{class:"text-left text-xs font-medium text-muted-foreground px-4 py-3"},"Email"),t("th",{class:"text-left text-xs font-medium text-muted-foreground px-4 py-3"},"Role"),t("th",{class:"text-left text-xs font-medium text-muted-foreground px-4 py-3"},"Status"),t("th",{class:"text-left text-xs font-medium text-muted-foreground px-4 py-3"},"Joined")])],-1)),t("tbody",null,[(s(!0),r(g,null,k(i.value,e=>(s(),r("tr",{key:e.id,class:"border-b border-border last:border-0 hover:bg-muted/30"},[t("td",E,[t("p",F,a(e.username),1)]),t("td",R,a(e.email),1),t("td",U,[n(x,{variant:e.role==="admin"?"default":"secondary",class:"text-xs"},{default:d(()=>[m(a(e.role),1)]),_:2},1032,["variant"])]),t("td",j,[n(x,{variant:e.is_active?"success":"outline",class:"text-xs"},{default:d(()=>[m(a(e.is_active?"Active":"Inactive"),1)]),_:2},1032,["variant"])]),t("td",I,a(A($)(e.created_at)),1)]))),128))])])]),_:1})]),_:1}))]))}});export{G as default}; +import{d as p,u as y,x as h,c as r,a as t,e as n,n as v,w as d,f as b,r as u,o as s,F as g,l as k,t as a,k as m,i as A}from"./index-CO3lBHVT.js";import{a as w}from"./admin-s3id3yDK.js";import{_ as B,a as S}from"./CardContent.vue_vue_type_script_setup_true_lang-UcbhRP8Z.js";import{_ as x}from"./Badge.vue_vue_type_script_setup_true_lang-CocRK-vO.js";import{_ as V,a as $}from"./utils-B1YxgOQw.js";const N={class:"p-6"},C={key:0,class:"flex items-center justify-center h-20"},D={class:"w-full"},E={class:"px-4 py-3"},F={class:"text-sm font-medium text-foreground"},R={class:"px-4 py-3 text-sm text-muted-foreground"},U={class:"px-4 py-3"},j={class:"px-4 py-3"},I={class:"px-4 py-3 text-xs text-muted-foreground"},G=p({__name:"AdminView",setup(J){const f=y(),_=b(),i=u([]),l=u(!1);return h(async()=>{if(!f.isAdmin){_.push("/");return}l.value=!0;try{const c=await w.users();i.value=c.data}finally{l.value=!1}}),(c,o)=>(s(),r("div",N,[o[1]||(o[1]=t("h2",{class:"text-lg font-semibold text-foreground mb-6"},"Admin — Users",-1)),l.value?(s(),r("div",C,[n(V,{class:"text-primary"})])):(s(),v(B,{key:1},{default:d(()=>[n(S,{class:"p-0"},{default:d(()=>[t("table",D,[o[0]||(o[0]=t("thead",null,[t("tr",{class:"border-b border-border"},[t("th",{class:"text-left text-xs font-medium text-muted-foreground px-4 py-3"},"User"),t("th",{class:"text-left text-xs font-medium text-muted-foreground px-4 py-3"},"Email"),t("th",{class:"text-left text-xs font-medium text-muted-foreground px-4 py-3"},"Role"),t("th",{class:"text-left text-xs font-medium text-muted-foreground px-4 py-3"},"Status"),t("th",{class:"text-left text-xs font-medium text-muted-foreground px-4 py-3"},"Joined")])],-1)),t("tbody",null,[(s(!0),r(g,null,k(i.value,e=>(s(),r("tr",{key:e.id,class:"border-b border-border last:border-0 hover:bg-muted/30"},[t("td",E,[t("p",F,a(e.username),1)]),t("td",R,a(e.email),1),t("td",U,[n(x,{variant:e.role==="admin"?"default":"secondary",class:"text-xs"},{default:d(()=>[m(a(e.role),1)]),_:2},1032,["variant"])]),t("td",j,[n(x,{variant:e.is_active?"success":"outline",class:"text-xs"},{default:d(()=>[m(a(e.is_active?"Active":"Inactive"),1)]),_:2},1032,["variant"])]),t("td",I,a(A($)(e.created_at)),1)]))),128))])])]),_:1})]),_:1}))]))}});export{G as default}; diff --git a/src/static/assets/AppLayout-YazutZmy.js b/src/static/assets/AppLayout-DXx1REXd.js similarity index 98% rename from src/static/assets/AppLayout-YazutZmy.js rename to src/static/assets/AppLayout-DXx1REXd.js index f1b7b52..a8e727d 100644 --- a/src/static/assets/AppLayout-YazutZmy.js +++ b/src/static/assets/AppLayout-DXx1REXd.js @@ -1 +1 @@ -import{d as j,u as M,c as n,b as V,a as e,F as $,l as A,t as v,i as p,m as y,o as r,n as H,w as _,j as C,p as d,q as z,g as B,s as S,k as T,K as L,f as D,e as f,T as R,r as O}from"./index-CsAuQ78D.js";const P={class:"flex flex-col h-full bg-gradient-to-b from-slate-900 via-slate-900 to-slate-950 border-r border-slate-800"},I={class:"flex-1 px-2 py-3 space-y-0.5 overflow-y-auto"},N={key:0,class:"absolute left-0 top-1/2 -translate-y-1/2 w-0.5 h-5 bg-amber-400 rounded-r-full"},F={class:"p-3 border-t border-slate-800 shrink-0"},K={class:"flex items-center gap-3 px-2 py-2 rounded-lg hover:bg-slate-800/50 transition-colors"},q={class:"h-7 w-7 rounded-full bg-gradient-to-br from-amber-400 to-amber-600 flex items-center justify-center text-[10px] font-bold text-white shrink-0"},E={class:"flex-1 min-w-0"},U={class:"text-xs font-medium text-slate-300 truncate"},W=j({__name:"Sidebar",emits:["close"],setup(b,{emit:m}){const a=B(),l=M(),x=m,u=[{name:"Dashboard",path:"/",icon:"grid"},{name:"Calendar",path:"/calendar",icon:"calendar"},{name:"Planner",path:"/planner",icon:"check-square"},{name:"Projects",path:"/projects",icon:"folder"},{name:"Live Feed",path:"/live",icon:"activity"},{name:"Reports",path:"/reports",icon:"file-text"},{name:"Keys",path:"/keys",icon:"key"},{name:"Settings",path:"/settings",icon:"settings"},{name:"Admin",path:"/admin",icon:"shield",adminOnly:!0}],k=y(()=>u.filter(c=>!c.adminOnly||l.isAdmin));function s(c){return c==="/"?a.path==="/":a.path.startsWith(c)}const i=y(()=>{var t,h;return(((t=l.user)==null?void 0:t.username)??((h=l.user)==null?void 0:h.email)??"?").slice(0,2).toUpperCase()});return(c,t)=>{var g,w;const h=z("RouterLink");return r(),n("aside",P,[t[11]||(t[11]=V('

CC Dashboard

Oliver Agency

',1)),e("nav",I,[(r(!0),n($,null,A(k.value,o=>(r(),H(h,{key:o.path,to:o.path,class:d(["relative flex items-center gap-3 px-3 h-11 rounded-lg text-sm font-medium transition-all duration-200 group",s(o.path)?"bg-gradient-to-r from-amber-500/20 to-amber-600/10 text-amber-400 shadow-sm border border-amber-500/20":"text-slate-400 hover:bg-slate-800/60 hover:text-slate-100"]),onClick:t[0]||(t[0]=re=>x("close"))},{default:_(()=>[s(o.path)?(r(),n("span",N)):C("",!0),o.icon==="grid"?(r(),n("svg",{key:1,class:d(["h-4 w-4 shrink-0 transition-colors",s(o.path)?"text-amber-400":"text-slate-500 group-hover:text-slate-300"]),fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[...t[1]||(t[1]=[e("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M4 6a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2H6a2 2 0 01-2-2V6zM14 6a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2h-2a2 2 0 01-2-2V6zM4 16a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2H6a2 2 0 01-2-2v-2zM14 16a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2h-2a2 2 0 01-2-2v-2z"},null,-1)])],2)):o.icon==="calendar"?(r(),n("svg",{key:2,class:d(["h-4 w-4 shrink-0",s(o.path)?"text-amber-400":"text-slate-500 group-hover:text-slate-300"]),fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[...t[2]||(t[2]=[e("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z"},null,-1)])],2)):o.icon==="check-square"?(r(),n("svg",{key:3,class:d(["h-4 w-4 shrink-0",s(o.path)?"text-amber-400":"text-slate-500 group-hover:text-slate-300"]),fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[...t[3]||(t[3]=[e("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"},null,-1)])],2)):o.icon==="folder"?(r(),n("svg",{key:4,class:d(["h-4 w-4 shrink-0",s(o.path)?"text-amber-400":"text-slate-500 group-hover:text-slate-300"]),fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[...t[4]||(t[4]=[e("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M3 7a2 2 0 012-2h3.586a1 1 0 01.707.293l1.414 1.414A1 1 0 0011.414 7H19a2 2 0 012 2v9a2 2 0 01-2 2H5a2 2 0 01-2-2V7z"},null,-1)])],2)):o.icon==="activity"?(r(),n("svg",{key:5,class:d(["h-4 w-4 shrink-0",s(o.path)?"text-amber-400":"text-slate-500 group-hover:text-slate-300"]),fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[...t[5]||(t[5]=[e("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M13 10V3L4 14h7v7l9-11h-7z"},null,-1)])],2)):o.icon==="file-text"?(r(),n("svg",{key:6,class:d(["h-4 w-4 shrink-0",s(o.path)?"text-amber-400":"text-slate-500 group-hover:text-slate-300"]),fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[...t[6]||(t[6]=[e("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"},null,-1)])],2)):o.icon==="key"?(r(),n("svg",{key:7,class:d(["h-4 w-4 shrink-0",s(o.path)?"text-amber-400":"text-slate-500 group-hover:text-slate-300"]),fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[...t[7]||(t[7]=[e("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M15 7a2 2 0 012 2m4 0a6 6 0 01-7.743 5.743L11 17H9v2H7v2H4a1 1 0 01-1-1v-2.586a1 1 0 01.293-.707l5.964-5.964A6 6 0 1121 9z"},null,-1)])],2)):o.icon==="settings"?(r(),n("svg",{key:8,class:d(["h-4 w-4 shrink-0",s(o.path)?"text-amber-400":"text-slate-500 group-hover:text-slate-300"]),fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[...t[8]||(t[8]=[e("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z"},null,-1),e("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M15 12a3 3 0 11-6 0 3 3 0 016 0z"},null,-1)])],2)):o.icon==="shield"?(r(),n("svg",{key:9,class:d(["h-4 w-4 shrink-0",s(o.path)?"text-amber-400":"text-slate-500 group-hover:text-slate-300"]),fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[...t[9]||(t[9]=[e("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z"},null,-1)])],2)):C("",!0),e("span",null,v(o.name),1)]),_:2},1032,["to","class"]))),128))]),e("div",F,[e("div",K,[e("div",q,v(i.value),1),e("div",E,[e("p",U,v(((g=p(l).user)==null?void 0:g.username)??((w=p(l).user)==null?void 0:w.email)),1),t[10]||(t[10]=e("div",{class:"flex items-center gap-1 mt-0.5"},[e("div",{class:"h-1.5 w-1.5 rounded-full bg-emerald-500"}),e("span",{class:"text-[10px] text-slate-500"},"Online")],-1))])])])])}}}),G={class:"h-14 border-b border-border bg-card/95 backdrop-blur-sm flex items-center px-4 gap-3 shrink-0 sticky top-0 z-10"},J={class:"flex-1"},Q={class:"text-sm font-semibold text-foreground"},X={class:"flex items-center gap-2.5"},Y={class:"h-7 w-7 rounded-full bg-gradient-to-br from-amber-400 to-amber-600 flex items-center justify-center text-[10px] font-bold text-white shrink-0"},Z={class:"hidden sm:block text-xs font-medium text-foreground max-w-[120px] truncate"},ee=j({__name:"TopBar",props:{title:{},sidebarOpen:{type:Boolean}},emits:["toggleSidebar","toggleDark"],setup(b,{emit:m}){const a=m,l=M(),x=D();async function u(){await l.logout(),L.success("Logged out"),x.push({name:"login"})}function k(){document.documentElement.classList.toggle("dark"),a("toggleDark")}return(s,i)=>{var c,t,h,g;return r(),n("header",G,[e("button",{class:"lg:hidden flex h-9 w-9 items-center justify-center rounded-lg text-muted-foreground hover:bg-muted hover:text-foreground transition-colors","aria-label":"Toggle sidebar",onClick:i[0]||(i[0]=w=>a("toggleSidebar"))},[...i[1]||(i[1]=[e("svg",{class:"h-5 w-5",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M4 6h16M4 12h16M4 18h16"})],-1)])]),e("div",J,[e("h1",Q,v(b.title??"CC Dashboard"),1)]),S(s.$slots,"actions"),e("button",{class:"flex h-9 w-9 items-center justify-center rounded-lg text-muted-foreground hover:bg-muted hover:text-foreground transition-colors","aria-label":"Toggle dark mode",onClick:k},[...i[2]||(i[2]=[e("svg",{class:"h-4 w-4 hidden dark:block",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M12 3v1m0 16v1m9-9h-1M4 12H3m15.364 6.364l-.707-.707M6.343 6.343l-.707-.707m12.728 0l-.707.707M6.343 17.657l-.707.707M16 12a4 4 0 11-8 0 4 4 0 018 0z"})],-1),e("svg",{class:"h-4 w-4 dark:hidden",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M20.354 15.354A9 9 0 018.646 3.646 9.003 9.003 0 0012 21a9.003 9.003 0 008.354-5.646z"})],-1)])]),i[4]||(i[4]=e("div",{class:"h-6 w-px bg-border"},null,-1)),e("div",X,[e("div",Y,v((((c=p(l).user)==null?void 0:c.username)??((t=p(l).user)==null?void 0:t.email)??"?").slice(0,2).toUpperCase()),1),e("span",Z,v(((h=p(l).user)==null?void 0:h.username)??((g=p(l).user)==null?void 0:g.email)),1),e("button",{class:"flex h-7 items-center gap-1 rounded-md px-2 text-xs text-muted-foreground hover:bg-muted hover:text-foreground transition-colors",onClick:u},[...i[3]||(i[3]=[e("svg",{class:"h-3.5 w-3.5",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M17 16l4-4m0 0l-4-4m4 4H7m6 4v1a3 3 0 01-3 3H6a3 3 0 01-3-3V7a3 3 0 013-3h4a3 3 0 013 3v1"})],-1),T(" Sign out ",-1)])])])])}}}),te={class:"h-screen flex overflow-hidden bg-background"},oe={class:"flex-1 flex flex-col overflow-hidden min-w-0"},se={class:"flex-1 overflow-y-auto"},ae=j({__name:"AppLayout",setup(b){const m=B(),a=O(!1),l=y(()=>({dashboard:"Dashboard",calendar:"Calendar",planner:"Planner",projects:"Projects","project-detail":"Project Details",live:"Live Feed",reports:"AI Reports",keys:"API Keys",settings:"Settings",admin:"Admin"})[m.name]??"CC Dashboard");return(x,u)=>{const k=z("RouterView");return r(),n("div",te,[f(R,{"enter-active-class":"transition-opacity duration-200","enter-from-class":"opacity-0","enter-to-class":"opacity-100","leave-active-class":"transition-opacity duration-200","leave-from-class":"opacity-100","leave-to-class":"opacity-0"},{default:_(()=>[a.value?(r(),n("div",{key:0,class:"fixed inset-0 z-20 bg-black/60 lg:hidden",onClick:u[0]||(u[0]=s=>a.value=!1)})):C("",!0)]),_:1}),e("div",{class:d(["fixed inset-y-0 left-0 z-30 w-60 transform transition-transform duration-300 lg:relative lg:translate-x-0",a.value?"translate-x-0":"-translate-x-full"])},[f(W,{onClose:u[1]||(u[1]=s=>a.value=!1)})],2),e("div",oe,[f(ee,{title:l.value,"sidebar-open":a.value,onToggleSidebar:u[2]||(u[2]=s=>a.value=!a.value)},null,8,["title","sidebar-open"]),e("main",se,[f(k)])])])}}});export{ae as default}; +import{d as j,u as M,c as n,b as V,a as e,F as $,l as A,t as v,i as p,m as y,o as r,n as H,w as _,j as C,p as d,q as z,g as B,s as S,k as T,K as L,f as D,e as f,T as R,r as O}from"./index-CO3lBHVT.js";const P={class:"flex flex-col h-full bg-gradient-to-b from-slate-900 via-slate-900 to-slate-950 border-r border-slate-800"},I={class:"flex-1 px-2 py-3 space-y-0.5 overflow-y-auto"},N={key:0,class:"absolute left-0 top-1/2 -translate-y-1/2 w-0.5 h-5 bg-amber-400 rounded-r-full"},F={class:"p-3 border-t border-slate-800 shrink-0"},K={class:"flex items-center gap-3 px-2 py-2 rounded-lg hover:bg-slate-800/50 transition-colors"},q={class:"h-7 w-7 rounded-full bg-gradient-to-br from-amber-400 to-amber-600 flex items-center justify-center text-[10px] font-bold text-white shrink-0"},E={class:"flex-1 min-w-0"},U={class:"text-xs font-medium text-slate-300 truncate"},W=j({__name:"Sidebar",emits:["close"],setup(b,{emit:m}){const a=B(),l=M(),x=m,u=[{name:"Dashboard",path:"/",icon:"grid"},{name:"Calendar",path:"/calendar",icon:"calendar"},{name:"Planner",path:"/planner",icon:"check-square"},{name:"Projects",path:"/projects",icon:"folder"},{name:"Live Feed",path:"/live",icon:"activity"},{name:"Reports",path:"/reports",icon:"file-text"},{name:"Keys",path:"/keys",icon:"key"},{name:"Settings",path:"/settings",icon:"settings"},{name:"Admin",path:"/admin",icon:"shield",adminOnly:!0}],k=y(()=>u.filter(c=>!c.adminOnly||l.isAdmin));function s(c){return c==="/"?a.path==="/":a.path.startsWith(c)}const i=y(()=>{var t,h;return(((t=l.user)==null?void 0:t.username)??((h=l.user)==null?void 0:h.email)??"?").slice(0,2).toUpperCase()});return(c,t)=>{var g,w;const h=z("RouterLink");return r(),n("aside",P,[t[11]||(t[11]=V('

CC Dashboard

Oliver Agency

',1)),e("nav",I,[(r(!0),n($,null,A(k.value,o=>(r(),H(h,{key:o.path,to:o.path,class:d(["relative flex items-center gap-3 px-3 h-11 rounded-lg text-sm font-medium transition-all duration-200 group",s(o.path)?"bg-gradient-to-r from-amber-500/20 to-amber-600/10 text-amber-400 shadow-sm border border-amber-500/20":"text-slate-400 hover:bg-slate-800/60 hover:text-slate-100"]),onClick:t[0]||(t[0]=re=>x("close"))},{default:_(()=>[s(o.path)?(r(),n("span",N)):C("",!0),o.icon==="grid"?(r(),n("svg",{key:1,class:d(["h-4 w-4 shrink-0 transition-colors",s(o.path)?"text-amber-400":"text-slate-500 group-hover:text-slate-300"]),fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[...t[1]||(t[1]=[e("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M4 6a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2H6a2 2 0 01-2-2V6zM14 6a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2h-2a2 2 0 01-2-2V6zM4 16a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2H6a2 2 0 01-2-2v-2zM14 16a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2h-2a2 2 0 01-2-2v-2z"},null,-1)])],2)):o.icon==="calendar"?(r(),n("svg",{key:2,class:d(["h-4 w-4 shrink-0",s(o.path)?"text-amber-400":"text-slate-500 group-hover:text-slate-300"]),fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[...t[2]||(t[2]=[e("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z"},null,-1)])],2)):o.icon==="check-square"?(r(),n("svg",{key:3,class:d(["h-4 w-4 shrink-0",s(o.path)?"text-amber-400":"text-slate-500 group-hover:text-slate-300"]),fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[...t[3]||(t[3]=[e("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"},null,-1)])],2)):o.icon==="folder"?(r(),n("svg",{key:4,class:d(["h-4 w-4 shrink-0",s(o.path)?"text-amber-400":"text-slate-500 group-hover:text-slate-300"]),fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[...t[4]||(t[4]=[e("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M3 7a2 2 0 012-2h3.586a1 1 0 01.707.293l1.414 1.414A1 1 0 0011.414 7H19a2 2 0 012 2v9a2 2 0 01-2 2H5a2 2 0 01-2-2V7z"},null,-1)])],2)):o.icon==="activity"?(r(),n("svg",{key:5,class:d(["h-4 w-4 shrink-0",s(o.path)?"text-amber-400":"text-slate-500 group-hover:text-slate-300"]),fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[...t[5]||(t[5]=[e("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M13 10V3L4 14h7v7l9-11h-7z"},null,-1)])],2)):o.icon==="file-text"?(r(),n("svg",{key:6,class:d(["h-4 w-4 shrink-0",s(o.path)?"text-amber-400":"text-slate-500 group-hover:text-slate-300"]),fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[...t[6]||(t[6]=[e("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"},null,-1)])],2)):o.icon==="key"?(r(),n("svg",{key:7,class:d(["h-4 w-4 shrink-0",s(o.path)?"text-amber-400":"text-slate-500 group-hover:text-slate-300"]),fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[...t[7]||(t[7]=[e("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M15 7a2 2 0 012 2m4 0a6 6 0 01-7.743 5.743L11 17H9v2H7v2H4a1 1 0 01-1-1v-2.586a1 1 0 01.293-.707l5.964-5.964A6 6 0 1121 9z"},null,-1)])],2)):o.icon==="settings"?(r(),n("svg",{key:8,class:d(["h-4 w-4 shrink-0",s(o.path)?"text-amber-400":"text-slate-500 group-hover:text-slate-300"]),fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[...t[8]||(t[8]=[e("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z"},null,-1),e("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M15 12a3 3 0 11-6 0 3 3 0 016 0z"},null,-1)])],2)):o.icon==="shield"?(r(),n("svg",{key:9,class:d(["h-4 w-4 shrink-0",s(o.path)?"text-amber-400":"text-slate-500 group-hover:text-slate-300"]),fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[...t[9]||(t[9]=[e("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z"},null,-1)])],2)):C("",!0),e("span",null,v(o.name),1)]),_:2},1032,["to","class"]))),128))]),e("div",F,[e("div",K,[e("div",q,v(i.value),1),e("div",E,[e("p",U,v(((g=p(l).user)==null?void 0:g.username)??((w=p(l).user)==null?void 0:w.email)),1),t[10]||(t[10]=e("div",{class:"flex items-center gap-1 mt-0.5"},[e("div",{class:"h-1.5 w-1.5 rounded-full bg-emerald-500"}),e("span",{class:"text-[10px] text-slate-500"},"Online")],-1))])])])])}}}),G={class:"h-14 border-b border-border bg-card/95 backdrop-blur-sm flex items-center px-4 gap-3 shrink-0 sticky top-0 z-10"},J={class:"flex-1"},Q={class:"text-sm font-semibold text-foreground"},X={class:"flex items-center gap-2.5"},Y={class:"h-7 w-7 rounded-full bg-gradient-to-br from-amber-400 to-amber-600 flex items-center justify-center text-[10px] font-bold text-white shrink-0"},Z={class:"hidden sm:block text-xs font-medium text-foreground max-w-[120px] truncate"},ee=j({__name:"TopBar",props:{title:{},sidebarOpen:{type:Boolean}},emits:["toggleSidebar","toggleDark"],setup(b,{emit:m}){const a=m,l=M(),x=D();async function u(){await l.logout(),L.success("Logged out"),x.push({name:"login"})}function k(){document.documentElement.classList.toggle("dark"),a("toggleDark")}return(s,i)=>{var c,t,h,g;return r(),n("header",G,[e("button",{class:"lg:hidden flex h-9 w-9 items-center justify-center rounded-lg text-muted-foreground hover:bg-muted hover:text-foreground transition-colors","aria-label":"Toggle sidebar",onClick:i[0]||(i[0]=w=>a("toggleSidebar"))},[...i[1]||(i[1]=[e("svg",{class:"h-5 w-5",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M4 6h16M4 12h16M4 18h16"})],-1)])]),e("div",J,[e("h1",Q,v(b.title??"CC Dashboard"),1)]),S(s.$slots,"actions"),e("button",{class:"flex h-9 w-9 items-center justify-center rounded-lg text-muted-foreground hover:bg-muted hover:text-foreground transition-colors","aria-label":"Toggle dark mode",onClick:k},[...i[2]||(i[2]=[e("svg",{class:"h-4 w-4 hidden dark:block",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M12 3v1m0 16v1m9-9h-1M4 12H3m15.364 6.364l-.707-.707M6.343 6.343l-.707-.707m12.728 0l-.707.707M6.343 17.657l-.707.707M16 12a4 4 0 11-8 0 4 4 0 018 0z"})],-1),e("svg",{class:"h-4 w-4 dark:hidden",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M20.354 15.354A9 9 0 018.646 3.646 9.003 9.003 0 0012 21a9.003 9.003 0 008.354-5.646z"})],-1)])]),i[4]||(i[4]=e("div",{class:"h-6 w-px bg-border"},null,-1)),e("div",X,[e("div",Y,v((((c=p(l).user)==null?void 0:c.username)??((t=p(l).user)==null?void 0:t.email)??"?").slice(0,2).toUpperCase()),1),e("span",Z,v(((h=p(l).user)==null?void 0:h.username)??((g=p(l).user)==null?void 0:g.email)),1),e("button",{class:"flex h-7 items-center gap-1 rounded-md px-2 text-xs text-muted-foreground hover:bg-muted hover:text-foreground transition-colors",onClick:u},[...i[3]||(i[3]=[e("svg",{class:"h-3.5 w-3.5",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M17 16l4-4m0 0l-4-4m4 4H7m6 4v1a3 3 0 01-3 3H6a3 3 0 01-3-3V7a3 3 0 013-3h4a3 3 0 013 3v1"})],-1),T(" Sign out ",-1)])])])])}}}),te={class:"h-screen flex overflow-hidden bg-background"},oe={class:"flex-1 flex flex-col overflow-hidden min-w-0"},se={class:"flex-1 overflow-y-auto"},ae=j({__name:"AppLayout",setup(b){const m=B(),a=O(!1),l=y(()=>({dashboard:"Dashboard",calendar:"Calendar",planner:"Planner",projects:"Projects","project-detail":"Project Details",live:"Live Feed",reports:"AI Reports",keys:"API Keys",settings:"Settings",admin:"Admin"})[m.name]??"CC Dashboard");return(x,u)=>{const k=z("RouterView");return r(),n("div",te,[f(R,{"enter-active-class":"transition-opacity duration-200","enter-from-class":"opacity-0","enter-to-class":"opacity-100","leave-active-class":"transition-opacity duration-200","leave-from-class":"opacity-100","leave-to-class":"opacity-0"},{default:_(()=>[a.value?(r(),n("div",{key:0,class:"fixed inset-0 z-20 bg-black/60 lg:hidden",onClick:u[0]||(u[0]=s=>a.value=!1)})):C("",!0)]),_:1}),e("div",{class:d(["fixed inset-y-0 left-0 z-30 w-60 transform transition-transform duration-300 lg:relative lg:translate-x-0",a.value?"translate-x-0":"-translate-x-full"])},[f(W,{onClose:u[1]||(u[1]=s=>a.value=!1)})],2),e("div",oe,[f(ee,{title:l.value,"sidebar-open":a.value,onToggleSidebar:u[2]||(u[2]=s=>a.value=!a.value)},null,8,["title","sidebar-open"]),e("main",se,[f(k)])])])}}});export{ae as default}; diff --git a/src/static/assets/Badge.vue_vue_type_script_setup_true_lang-DbHLHOj7.js b/src/static/assets/Badge.vue_vue_type_script_setup_true_lang-CocRK-vO.js similarity index 83% rename from src/static/assets/Badge.vue_vue_type_script_setup_true_lang-DbHLHOj7.js rename to src/static/assets/Badge.vue_vue_type_script_setup_true_lang-CocRK-vO.js index c844582..9394d89 100644 --- a/src/static/assets/Badge.vue_vue_type_script_setup_true_lang-DbHLHOj7.js +++ b/src/static/assets/Badge.vue_vue_type_script_setup_true_lang-CocRK-vO.js @@ -1 +1 @@ -import{c as a}from"./utils-BKH6bEpf.js";import{d as n,o as s,c as o,p as d,i,s as c}from"./index-CsAuQ78D.js";const f=n({__name:"Badge",props:{variant:{default:"default"},class:{}},setup(r){const e=r;return(t,l)=>(s(),o("span",{class:d(i(a)("inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-semibold transition-colors",{"bg-primary text-primary-foreground":e.variant==="default","bg-secondary text-secondary-foreground":e.variant==="secondary","bg-destructive text-destructive-foreground":e.variant==="destructive","border border-border text-foreground":e.variant==="outline","bg-emerald-500/20 text-emerald-400":e.variant==="success","bg-amber-500/20 text-amber-400":e.variant==="warning"},e.class))},[c(t.$slots,"default")],2))}});export{f as _}; +import{c as a}from"./utils-B1YxgOQw.js";import{d as n,o as s,c as o,p as d,i,s as c}from"./index-CO3lBHVT.js";const f=n({__name:"Badge",props:{variant:{default:"default"},class:{}},setup(r){const e=r;return(t,l)=>(s(),o("span",{class:d(i(a)("inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-semibold transition-colors",{"bg-primary text-primary-foreground":e.variant==="default","bg-secondary text-secondary-foreground":e.variant==="secondary","bg-destructive text-destructive-foreground":e.variant==="destructive","border border-border text-foreground":e.variant==="outline","bg-emerald-500/20 text-emerald-400":e.variant==="success","bg-amber-500/20 text-amber-400":e.variant==="warning"},e.class))},[c(t.$slots,"default")],2))}});export{f as _}; diff --git a/src/static/assets/Button.vue_vue_type_script_setup_true_lang-DnS8FWjO.js b/src/static/assets/Button.vue_vue_type_script_setup_true_lang-BwCrpRUQ.js similarity index 91% rename from src/static/assets/Button.vue_vue_type_script_setup_true_lang-DnS8FWjO.js rename to src/static/assets/Button.vue_vue_type_script_setup_true_lang-BwCrpRUQ.js index 90f4eda..80217a7 100644 --- a/src/static/assets/Button.vue_vue_type_script_setup_true_lang-DnS8FWjO.js +++ b/src/static/assets/Button.vue_vue_type_script_setup_true_lang-BwCrpRUQ.js @@ -1 +1 @@ -import{c,_ as l}from"./utils-BKH6bEpf.js";import{d as u,c as f,p as m,n as b,j as v,s as g,m as p,o as n}from"./index-CsAuQ78D.js";const y=["type","disabled"],k=u({__name:"Button",props:{variant:{default:"default"},size:{default:"md"},loading:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},type:{default:"button"},class:{}},emits:["click"],setup(t,{emit:o}){const e=t,a=o,r=p(()=>c("inline-flex items-center justify-center rounded-md font-medium transition-colors","focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2","disabled:pointer-events-none disabled:opacity-50",{"bg-primary text-primary-foreground hover:bg-primary/90":e.variant==="default","border border-input bg-background hover:bg-accent hover:text-accent-foreground":e.variant==="outline","hover:bg-accent hover:text-accent-foreground":e.variant==="ghost","bg-destructive text-destructive-foreground hover:bg-destructive/90":e.variant==="destructive","bg-secondary text-secondary-foreground hover:bg-secondary/80":e.variant==="secondary","underline-offset-4 hover:underline text-primary":e.variant==="link","h-8 px-3 text-xs":e.size==="sm","h-10 px-4 py-2 text-sm":e.size==="md","h-11 px-8 text-base":e.size==="lg","h-9 w-9 p-0":e.size==="icon"},e.class));return(i,s)=>(n(),f("button",{class:m(r.value),type:t.type,disabled:t.disabled||t.loading,onClick:s[0]||(s[0]=d=>a("click",d))},[t.loading?(n(),b(l,{key:0,size:"sm",class:"mr-2"})):v("",!0),g(i.$slots,"default")],10,y))}});export{k as _}; +import{c,_ as l}from"./utils-B1YxgOQw.js";import{d as u,c as f,p as m,n as b,j as v,s as g,m as p,o as n}from"./index-CO3lBHVT.js";const y=["type","disabled"],k=u({__name:"Button",props:{variant:{default:"default"},size:{default:"md"},loading:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},type:{default:"button"},class:{}},emits:["click"],setup(t,{emit:o}){const e=t,a=o,r=p(()=>c("inline-flex items-center justify-center rounded-md font-medium transition-colors","focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2","disabled:pointer-events-none disabled:opacity-50",{"bg-primary text-primary-foreground hover:bg-primary/90":e.variant==="default","border border-input bg-background hover:bg-accent hover:text-accent-foreground":e.variant==="outline","hover:bg-accent hover:text-accent-foreground":e.variant==="ghost","bg-destructive text-destructive-foreground hover:bg-destructive/90":e.variant==="destructive","bg-secondary text-secondary-foreground hover:bg-secondary/80":e.variant==="secondary","underline-offset-4 hover:underline text-primary":e.variant==="link","h-8 px-3 text-xs":e.size==="sm","h-10 px-4 py-2 text-sm":e.size==="md","h-11 px-8 text-base":e.size==="lg","h-9 w-9 p-0":e.size==="icon"},e.class));return(i,s)=>(n(),f("button",{class:m(r.value),type:t.type,disabled:t.disabled||t.loading,onClick:s[0]||(s[0]=d=>a("click",d))},[t.loading?(n(),b(l,{key:0,size:"sm",class:"mr-2"})):v("",!0),g(i.$slots,"default")],10,y))}});export{k as _}; diff --git a/src/static/assets/CalendarView-ZIYAKfCn.js b/src/static/assets/CalendarView-DQ2Hqx4H.js similarity index 98% rename from src/static/assets/CalendarView-ZIYAKfCn.js rename to src/static/assets/CalendarView-DQ2Hqx4H.js index d20239e..268a4e0 100644 --- a/src/static/assets/CalendarView-ZIYAKfCn.js +++ b/src/static/assets/CalendarView-DQ2Hqx4H.js @@ -1 +1 @@ -import{B as Ee,r as S,m as W,d as G,o as w,c as v,a as f,e as E,w as Q,k as pe,t as M,i as y,j as T,p as q,A as j,h as De,_ as $e,F,l as B,n as Ye,x as _e,K as me}from"./index-CsAuQ78D.js";import{d as Fe}from"./dashboard-Dw2iyYza.js";import{i as P,f as U}from"./utils-BKH6bEpf.js";import{_ as K}from"./Button.vue_vue_type_script_setup_true_lang-DnS8FWjO.js";import{u as se,_ as Be}from"./TaskForm.vue_vue_type_script_setup_true_lang-BbiBAO69.js";import{_ as Ne}from"./Badge.vue_vue_type_script_setup_true_lang-DbHLHOj7.js";import"./Dialog.vue_vue_type_script_setup_true_lang-Cj3qRfUm.js";import"./Input.vue_vue_type_script_setup_true_lang-DbqPHpNb.js";import"./devops-ICsQ1df0.js";const Z=40/30;function Le(t){if(t.length===0)return[];const n=[...t].sort((o,c)=>new Date(o.start_at).getTime()-new Date(c.start_at).getTime()),e=[],r=[];for(const o of n){const c=new Date(o.start_at).getTime(),i=new Date(o.end_at).getTime();let l=-1;for(let d=0;d{const i=new Date(o.start_at).getTime(),l=new Date(o.end_at).getTime();let d=c;for(const u of r){const h=new Date(u.block.start_at).getTime(),m=new Date(u.block.end_at).getTime();hi&&u.lane>d&&(d=u.lane)}return{block:o,lane:c,totalLanes:d+1}})}function je(t,n=7){return((t.getHours()-n)*60+t.getMinutes())*Z}function He(t,n){const e=(n.getTime()-t.getTime())/6e4;return Math.max(e*Z,20)}function he(t){const n=t.getDay(),e=new Date(t);return e.setDate(t.getDate()-(n+6)%7),e.setHours(0,0,0,0),Array.from({length:7},(r,a)=>{const o=new Date(e);return o.setDate(e.getDate()+a),o})}function ge(t,n=15){return Math.round(t/n)*n}const J=Ee("calendar",()=>{const t=S([]),n=S(new Date),e=S("week"),r=S(!1),a=S(null),o=W(()=>he(n.value));async function c(s,_,x){r.value=!0,a.value=null;try{const b=await Fe.calendar({from:s,to:_,view:x});t.value=b.data}catch(b){const O=b;a.value=O.message??"Failed to fetch calendar"}finally{r.value=!1}}async function i(){if(e.value==="week"){const s=he(n.value),_=P(s[0]),x=P(s[6]);await c(_,x,"week")}else{const s=P(n.value);await c(s,s,"day")}}function l(){const s=new Date(n.value);e.value==="week"?s.setDate(s.getDate()-7):s.setDate(s.getDate()-1),n.value=s}function d(){const s=new Date(n.value);e.value==="week"?s.setDate(s.getDate()+7):s.setDate(s.getDate()+1),n.value=s}function u(){n.value=new Date}function h(s){e.value=s}function m(s){t.value.push(s)}function p(s){const _=t.value.findIndex(x=>x.id===s.id);_!==-1&&(t.value[_]=s)}function D(s){t.value=t.value.filter(_=>_.id!==s)}function g(s){const _=P(s);return t.value.filter(x=>P(new Date(x.start_at))===_)}return{blocks:t,currentDate:n,view:e,loading:r,error:a,weekDays:o,fetch:c,fetchCurrentView:i,navigatePrev:l,navigateNext:d,goToToday:u,setView:h,addBlock:m,updateBlock:p,removeBlock:D,getBlocksForDay:g}});function C(t){const n=Object.prototype.toString.call(t);return t instanceof Date||typeof t=="object"&&n==="[object Date]"?new t.constructor(+t):typeof t=="number"||n==="[object Number]"||typeof t=="string"||n==="[object String]"?new Date(t):new Date(NaN)}function z(t,n){return t instanceof Date?new t.constructor(n):new Date(n)}const Me=6048e5,qe=864e5;let ze={};function te(){return ze}function X(t,n){var i,l,d,u;const e=te(),r=(n==null?void 0:n.weekStartsOn)??((l=(i=n==null?void 0:n.locale)==null?void 0:i.options)==null?void 0:l.weekStartsOn)??e.weekStartsOn??((u=(d=e.locale)==null?void 0:d.options)==null?void 0:u.weekStartsOn)??0,a=C(t),o=a.getDay(),c=(o=a.getTime()?e+1:n.getTime()>=c.getTime()?e:e-1}function we(t){const n=C(t);return n.setHours(0,0,0,0),n}function ve(t){const n=C(t),e=new Date(Date.UTC(n.getFullYear(),n.getMonth(),n.getDate(),n.getHours(),n.getMinutes(),n.getSeconds(),n.getMilliseconds()));return e.setUTCFullYear(n.getFullYear()),+t-+e}function Re(t,n){const e=we(t),r=we(n),a=+e-ve(e),o=+r-ve(r);return Math.round((a-o)/qe)}function Ve(t){const n=Pe(t),e=z(t,0);return e.setFullYear(n,0,4),e.setHours(0,0,0,0),ee(e)}function Ae(t){return t instanceof Date||typeof t=="object"&&Object.prototype.toString.call(t)==="[object Date]"}function Ie(t){if(!Ae(t)&&typeof t!="number")return!1;const n=C(t);return!isNaN(Number(n))}function Qe(t){const n=C(t),e=z(t,0);return e.setFullYear(n.getFullYear(),0,1),e.setHours(0,0,0,0),e}const Xe={lessThanXSeconds:{one:"less than a second",other:"less than {{count}} seconds"},xSeconds:{one:"1 second",other:"{{count}} seconds"},halfAMinute:"half a minute",lessThanXMinutes:{one:"less than a minute",other:"less than {{count}} minutes"},xMinutes:{one:"1 minute",other:"{{count}} minutes"},aboutXHours:{one:"about 1 hour",other:"about {{count}} hours"},xHours:{one:"1 hour",other:"{{count}} hours"},xDays:{one:"1 day",other:"{{count}} days"},aboutXWeeks:{one:"about 1 week",other:"about {{count}} weeks"},xWeeks:{one:"1 week",other:"{{count}} weeks"},aboutXMonths:{one:"about 1 month",other:"about {{count}} months"},xMonths:{one:"1 month",other:"{{count}} months"},aboutXYears:{one:"about 1 year",other:"about {{count}} years"},xYears:{one:"1 year",other:"{{count}} years"},overXYears:{one:"over 1 year",other:"over {{count}} years"},almostXYears:{one:"almost 1 year",other:"almost {{count}} years"}},Ge=(t,n,e)=>{let r;const a=Xe[t];return typeof a=="string"?r=a:n===1?r=a.one:r=a.other.replace("{{count}}",n.toString()),e!=null&&e.addSuffix?e.comparison&&e.comparison>0?"in "+r:r+" ago":r};function ae(t){return(n={})=>{const e=n.width?String(n.width):t.defaultWidth;return t.formats[e]||t.formats[t.defaultWidth]}}const Je={full:"EEEE, MMMM do, y",long:"MMMM do, y",medium:"MMM d, y",short:"MM/dd/yyyy"},Ue={full:"h:mm:ss a zzzz",long:"h:mm:ss a z",medium:"h:mm:ss a",short:"h:mm a"},Ke={full:"{{date}} 'at' {{time}}",long:"{{date}} 'at' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},Ze={date:ae({formats:Je,defaultWidth:"full"}),time:ae({formats:Ue,defaultWidth:"full"}),dateTime:ae({formats:Ke,defaultWidth:"full"})},et={lastWeek:"'last' eeee 'at' p",yesterday:"'yesterday at' p",today:"'today at' p",tomorrow:"'tomorrow at' p",nextWeek:"eeee 'at' p",other:"P"},tt=(t,n,e,r)=>et[t];function A(t){return(n,e)=>{const r=e!=null&&e.context?String(e.context):"standalone";let a;if(r==="formatting"&&t.formattingValues){const c=t.defaultFormattingWidth||t.defaultWidth,i=e!=null&&e.width?String(e.width):c;a=t.formattingValues[i]||t.formattingValues[c]}else{const c=t.defaultWidth,i=e!=null&&e.width?String(e.width):t.defaultWidth;a=t.values[i]||t.values[c]}const o=t.argumentCallback?t.argumentCallback(n):n;return a[o]}}const nt={narrow:["B","A"],abbreviated:["BC","AD"],wide:["Before Christ","Anno Domini"]},rt={narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["1st quarter","2nd quarter","3rd quarter","4th quarter"]},at={narrow:["J","F","M","A","M","J","J","A","S","O","N","D"],abbreviated:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],wide:["January","February","March","April","May","June","July","August","September","October","November","December"]},ot={narrow:["S","M","T","W","T","F","S"],short:["Su","Mo","Tu","We","Th","Fr","Sa"],abbreviated:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],wide:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},st={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"}},it={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"}},ut=(t,n)=>{const e=Number(t),r=e%100;if(r>20||r<10)switch(r%10){case 1:return e+"st";case 2:return e+"nd";case 3:return e+"rd"}return e+"th"},ct={ordinalNumber:ut,era:A({values:nt,defaultWidth:"wide"}),quarter:A({values:rt,defaultWidth:"wide",argumentCallback:t=>t-1}),month:A({values:at,defaultWidth:"wide"}),day:A({values:ot,defaultWidth:"wide"}),dayPeriod:A({values:st,defaultWidth:"wide",formattingValues:it,defaultFormattingWidth:"wide"})};function I(t){return(n,e={})=>{const r=e.width,a=r&&t.matchPatterns[r]||t.matchPatterns[t.defaultMatchWidth],o=n.match(a);if(!o)return null;const c=o[0],i=r&&t.parsePatterns[r]||t.parsePatterns[t.defaultParseWidth],l=Array.isArray(i)?lt(i,h=>h.test(c)):dt(i,h=>h.test(c));let d;d=t.valueCallback?t.valueCallback(l):l,d=e.valueCallback?e.valueCallback(d):d;const u=n.slice(c.length);return{value:d,rest:u}}}function dt(t,n){for(const e in t)if(Object.prototype.hasOwnProperty.call(t,e)&&n(t[e]))return e}function lt(t,n){for(let e=0;e{const r=n.match(t.matchPattern);if(!r)return null;const a=r[0],o=n.match(t.parsePattern);if(!o)return null;let c=t.valueCallback?t.valueCallback(o[0]):o[0];c=e.valueCallback?e.valueCallback(c):c;const i=n.slice(a.length);return{value:c,rest:i}}}const mt=/^(\d+)(th|st|nd|rd)?/i,ht=/\d+/i,gt={narrow:/^(b|a)/i,abbreviated:/^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,wide:/^(before christ|before common era|anno domini|common era)/i},wt={any:[/^b/i,/^(a|c)/i]},vt={narrow:/^[1234]/i,abbreviated:/^q[1234]/i,wide:/^[1234](th|st|nd|rd)? quarter/i},yt={any:[/1/i,/2/i,/3/i,/4/i]},bt={narrow:/^[jfmasond]/i,abbreviated:/^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,wide:/^(january|february|march|april|may|june|july|august|september|october|november|december)/i},kt={narrow:[/^j/i,/^f/i,/^m/i,/^a/i,/^m/i,/^j/i,/^j/i,/^a/i,/^s/i,/^o/i,/^n/i,/^d/i],any:[/^ja/i,/^f/i,/^mar/i,/^ap/i,/^may/i,/^jun/i,/^jul/i,/^au/i,/^s/i,/^o/i,/^n/i,/^d/i]},xt={narrow:/^[smtwf]/i,short:/^(su|mo|tu|we|th|fr|sa)/i,abbreviated:/^(sun|mon|tue|wed|thu|fri|sat)/i,wide:/^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i},pt={narrow:[/^s/i,/^m/i,/^t/i,/^w/i,/^t/i,/^f/i,/^s/i],any:[/^su/i,/^m/i,/^tu/i,/^w/i,/^th/i,/^f/i,/^sa/i]},Dt={narrow:/^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,any:/^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i},_t={any:{am:/^a/i,pm:/^p/i,midnight:/^mi/i,noon:/^no/i,morning:/morning/i,afternoon:/afternoon/i,evening:/evening/i,night:/night/i}},Mt={ordinalNumber:ft({matchPattern:mt,parsePattern:ht,valueCallback:t=>parseInt(t,10)}),era:I({matchPatterns:gt,defaultMatchWidth:"wide",parsePatterns:wt,defaultParseWidth:"any"}),quarter:I({matchPatterns:vt,defaultMatchWidth:"wide",parsePatterns:yt,defaultParseWidth:"any",valueCallback:t=>t+1}),month:I({matchPatterns:bt,defaultMatchWidth:"wide",parsePatterns:kt,defaultParseWidth:"any"}),day:I({matchPatterns:xt,defaultMatchWidth:"wide",parsePatterns:pt,defaultParseWidth:"any"}),dayPeriod:I({matchPatterns:Dt,defaultMatchWidth:"any",parsePatterns:_t,defaultParseWidth:"any"})},Pt={code:"en-US",formatDistance:Ge,formatLong:Ze,formatRelative:tt,localize:ct,match:Mt,options:{weekStartsOn:0,firstWeekContainsDate:1}};function St(t){const n=C(t);return Re(n,Qe(n))+1}function Tt(t){const n=C(t),e=+ee(n)-+Ve(n);return Math.round(e/Me)+1}function Se(t,n){var u,h,m,p;const e=C(t),r=e.getFullYear(),a=te(),o=(n==null?void 0:n.firstWeekContainsDate)??((h=(u=n==null?void 0:n.locale)==null?void 0:u.options)==null?void 0:h.firstWeekContainsDate)??a.firstWeekContainsDate??((p=(m=a.locale)==null?void 0:m.options)==null?void 0:p.firstWeekContainsDate)??1,c=z(t,0);c.setFullYear(r+1,0,o),c.setHours(0,0,0,0);const i=X(c,n),l=z(t,0);l.setFullYear(r,0,o),l.setHours(0,0,0,0);const d=X(l,n);return e.getTime()>=i.getTime()?r+1:e.getTime()>=d.getTime()?r:r-1}function Ot(t,n){var i,l,d,u;const e=te(),r=(n==null?void 0:n.firstWeekContainsDate)??((l=(i=n==null?void 0:n.locale)==null?void 0:i.options)==null?void 0:l.firstWeekContainsDate)??e.firstWeekContainsDate??((u=(d=e.locale)==null?void 0:d.options)==null?void 0:u.firstWeekContainsDate)??1,a=Se(t,n),o=z(t,0);return o.setFullYear(a,0,r),o.setHours(0,0,0,0),X(o,n)}function Ct(t,n){const e=C(t),r=+X(e,n)-+Ot(e,n);return Math.round(r/Me)+1}function k(t,n){const e=t<0?"-":"",r=Math.abs(t).toString().padStart(n,"0");return e+r}const $={y(t,n){const e=t.getFullYear(),r=e>0?e:1-e;return k(n==="yy"?r%100:r,n.length)},M(t,n){const e=t.getMonth();return n==="M"?String(e+1):k(e+1,2)},d(t,n){return k(t.getDate(),n.length)},a(t,n){const e=t.getHours()/12>=1?"pm":"am";switch(n){case"a":case"aa":return e.toUpperCase();case"aaa":return e;case"aaaaa":return e[0];case"aaaa":default:return e==="am"?"a.m.":"p.m."}},h(t,n){return k(t.getHours()%12||12,n.length)},H(t,n){return k(t.getHours(),n.length)},m(t,n){return k(t.getMinutes(),n.length)},s(t,n){return k(t.getSeconds(),n.length)},S(t,n){const e=n.length,r=t.getMilliseconds(),a=Math.trunc(r*Math.pow(10,e-3));return k(a,n.length)}},R={midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},ye={G:function(t,n,e){const r=t.getFullYear()>0?1:0;switch(n){case"G":case"GG":case"GGG":return e.era(r,{width:"abbreviated"});case"GGGGG":return e.era(r,{width:"narrow"});case"GGGG":default:return e.era(r,{width:"wide"})}},y:function(t,n,e){if(n==="yo"){const r=t.getFullYear(),a=r>0?r:1-r;return e.ordinalNumber(a,{unit:"year"})}return $.y(t,n)},Y:function(t,n,e,r){const a=Se(t,r),o=a>0?a:1-a;if(n==="YY"){const c=o%100;return k(c,2)}return n==="Yo"?e.ordinalNumber(o,{unit:"year"}):k(o,n.length)},R:function(t,n){const e=Pe(t);return k(e,n.length)},u:function(t,n){const e=t.getFullYear();return k(e,n.length)},Q:function(t,n,e){const r=Math.ceil((t.getMonth()+1)/3);switch(n){case"Q":return String(r);case"QQ":return k(r,2);case"Qo":return e.ordinalNumber(r,{unit:"quarter"});case"QQQ":return e.quarter(r,{width:"abbreviated",context:"formatting"});case"QQQQQ":return e.quarter(r,{width:"narrow",context:"formatting"});case"QQQQ":default:return e.quarter(r,{width:"wide",context:"formatting"})}},q:function(t,n,e){const r=Math.ceil((t.getMonth()+1)/3);switch(n){case"q":return String(r);case"qq":return k(r,2);case"qo":return e.ordinalNumber(r,{unit:"quarter"});case"qqq":return e.quarter(r,{width:"abbreviated",context:"standalone"});case"qqqqq":return e.quarter(r,{width:"narrow",context:"standalone"});case"qqqq":default:return e.quarter(r,{width:"wide",context:"standalone"})}},M:function(t,n,e){const r=t.getMonth();switch(n){case"M":case"MM":return $.M(t,n);case"Mo":return e.ordinalNumber(r+1,{unit:"month"});case"MMM":return e.month(r,{width:"abbreviated",context:"formatting"});case"MMMMM":return e.month(r,{width:"narrow",context:"formatting"});case"MMMM":default:return e.month(r,{width:"wide",context:"formatting"})}},L:function(t,n,e){const r=t.getMonth();switch(n){case"L":return String(r+1);case"LL":return k(r+1,2);case"Lo":return e.ordinalNumber(r+1,{unit:"month"});case"LLL":return e.month(r,{width:"abbreviated",context:"standalone"});case"LLLLL":return e.month(r,{width:"narrow",context:"standalone"});case"LLLL":default:return e.month(r,{width:"wide",context:"standalone"})}},w:function(t,n,e,r){const a=Ct(t,r);return n==="wo"?e.ordinalNumber(a,{unit:"week"}):k(a,n.length)},I:function(t,n,e){const r=Tt(t);return n==="Io"?e.ordinalNumber(r,{unit:"week"}):k(r,n.length)},d:function(t,n,e){return n==="do"?e.ordinalNumber(t.getDate(),{unit:"date"}):$.d(t,n)},D:function(t,n,e){const r=St(t);return n==="Do"?e.ordinalNumber(r,{unit:"dayOfYear"}):k(r,n.length)},E:function(t,n,e){const r=t.getDay();switch(n){case"E":case"EE":case"EEE":return e.day(r,{width:"abbreviated",context:"formatting"});case"EEEEE":return e.day(r,{width:"narrow",context:"formatting"});case"EEEEEE":return e.day(r,{width:"short",context:"formatting"});case"EEEE":default:return e.day(r,{width:"wide",context:"formatting"})}},e:function(t,n,e,r){const a=t.getDay(),o=(a-r.weekStartsOn+8)%7||7;switch(n){case"e":return String(o);case"ee":return k(o,2);case"eo":return e.ordinalNumber(o,{unit:"day"});case"eee":return e.day(a,{width:"abbreviated",context:"formatting"});case"eeeee":return e.day(a,{width:"narrow",context:"formatting"});case"eeeeee":return e.day(a,{width:"short",context:"formatting"});case"eeee":default:return e.day(a,{width:"wide",context:"formatting"})}},c:function(t,n,e,r){const a=t.getDay(),o=(a-r.weekStartsOn+8)%7||7;switch(n){case"c":return String(o);case"cc":return k(o,n.length);case"co":return e.ordinalNumber(o,{unit:"day"});case"ccc":return e.day(a,{width:"abbreviated",context:"standalone"});case"ccccc":return e.day(a,{width:"narrow",context:"standalone"});case"cccccc":return e.day(a,{width:"short",context:"standalone"});case"cccc":default:return e.day(a,{width:"wide",context:"standalone"})}},i:function(t,n,e){const r=t.getDay(),a=r===0?7:r;switch(n){case"i":return String(a);case"ii":return k(a,n.length);case"io":return e.ordinalNumber(a,{unit:"day"});case"iii":return e.day(r,{width:"abbreviated",context:"formatting"});case"iiiii":return e.day(r,{width:"narrow",context:"formatting"});case"iiiiii":return e.day(r,{width:"short",context:"formatting"});case"iiii":default:return e.day(r,{width:"wide",context:"formatting"})}},a:function(t,n,e){const a=t.getHours()/12>=1?"pm":"am";switch(n){case"a":case"aa":return e.dayPeriod(a,{width:"abbreviated",context:"formatting"});case"aaa":return e.dayPeriod(a,{width:"abbreviated",context:"formatting"}).toLowerCase();case"aaaaa":return e.dayPeriod(a,{width:"narrow",context:"formatting"});case"aaaa":default:return e.dayPeriod(a,{width:"wide",context:"formatting"})}},b:function(t,n,e){const r=t.getHours();let a;switch(r===12?a=R.noon:r===0?a=R.midnight:a=r/12>=1?"pm":"am",n){case"b":case"bb":return e.dayPeriod(a,{width:"abbreviated",context:"formatting"});case"bbb":return e.dayPeriod(a,{width:"abbreviated",context:"formatting"}).toLowerCase();case"bbbbb":return e.dayPeriod(a,{width:"narrow",context:"formatting"});case"bbbb":default:return e.dayPeriod(a,{width:"wide",context:"formatting"})}},B:function(t,n,e){const r=t.getHours();let a;switch(r>=17?a=R.evening:r>=12?a=R.afternoon:r>=4?a=R.morning:a=R.night,n){case"B":case"BB":case"BBB":return e.dayPeriod(a,{width:"abbreviated",context:"formatting"});case"BBBBB":return e.dayPeriod(a,{width:"narrow",context:"formatting"});case"BBBB":default:return e.dayPeriod(a,{width:"wide",context:"formatting"})}},h:function(t,n,e){if(n==="ho"){let r=t.getHours()%12;return r===0&&(r=12),e.ordinalNumber(r,{unit:"hour"})}return $.h(t,n)},H:function(t,n,e){return n==="Ho"?e.ordinalNumber(t.getHours(),{unit:"hour"}):$.H(t,n)},K:function(t,n,e){const r=t.getHours()%12;return n==="Ko"?e.ordinalNumber(r,{unit:"hour"}):k(r,n.length)},k:function(t,n,e){let r=t.getHours();return r===0&&(r=24),n==="ko"?e.ordinalNumber(r,{unit:"hour"}):k(r,n.length)},m:function(t,n,e){return n==="mo"?e.ordinalNumber(t.getMinutes(),{unit:"minute"}):$.m(t,n)},s:function(t,n,e){return n==="so"?e.ordinalNumber(t.getSeconds(),{unit:"second"}):$.s(t,n)},S:function(t,n){return $.S(t,n)},X:function(t,n,e){const r=t.getTimezoneOffset();if(r===0)return"Z";switch(n){case"X":return ke(r);case"XXXX":case"XX":return L(r);case"XXXXX":case"XXX":default:return L(r,":")}},x:function(t,n,e){const r=t.getTimezoneOffset();switch(n){case"x":return ke(r);case"xxxx":case"xx":return L(r);case"xxxxx":case"xxx":default:return L(r,":")}},O:function(t,n,e){const r=t.getTimezoneOffset();switch(n){case"O":case"OO":case"OOO":return"GMT"+be(r,":");case"OOOO":default:return"GMT"+L(r,":")}},z:function(t,n,e){const r=t.getTimezoneOffset();switch(n){case"z":case"zz":case"zzz":return"GMT"+be(r,":");case"zzzz":default:return"GMT"+L(r,":")}},t:function(t,n,e){const r=Math.trunc(t.getTime()/1e3);return k(r,n.length)},T:function(t,n,e){const r=t.getTime();return k(r,n.length)}};function be(t,n=""){const e=t>0?"-":"+",r=Math.abs(t),a=Math.trunc(r/60),o=r%60;return o===0?e+String(a):e+String(a)+n+k(o,2)}function ke(t,n){return t%60===0?(t>0?"-":"+")+k(Math.abs(t)/60,2):L(t,n)}function L(t,n=""){const e=t>0?"-":"+",r=Math.abs(t),a=k(Math.trunc(r/60),2),o=k(r%60,2);return e+a+n+o}const xe=(t,n)=>{switch(t){case"P":return n.date({width:"short"});case"PP":return n.date({width:"medium"});case"PPP":return n.date({width:"long"});case"PPPP":default:return n.date({width:"full"})}},Te=(t,n)=>{switch(t){case"p":return n.time({width:"short"});case"pp":return n.time({width:"medium"});case"ppp":return n.time({width:"long"});case"pppp":default:return n.time({width:"full"})}},Wt=(t,n)=>{const e=t.match(/(P+)(p+)?/)||[],r=e[1],a=e[2];if(!a)return xe(t,n);let o;switch(r){case"P":o=n.dateTime({width:"short"});break;case"PP":o=n.dateTime({width:"medium"});break;case"PPP":o=n.dateTime({width:"long"});break;case"PPPP":default:o=n.dateTime({width:"full"});break}return o.replace("{{date}}",xe(r,n)).replace("{{time}}",Te(a,n))},Et={p:Te,P:Wt},$t=/^D+$/,Yt=/^Y+$/,Ft=["D","DD","YY","YYYY"];function Bt(t){return $t.test(t)}function Nt(t){return Yt.test(t)}function Lt(t,n,e){const r=jt(t,n,e);if(console.warn(r),Ft.includes(t))throw new RangeError(r)}function jt(t,n,e){const r=t[0]==="Y"?"years":"days of the month";return`Use \`${t.toLowerCase()}\` instead of \`${t}\` (in \`${n}\`) for formatting ${r} to the input \`${e}\`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md`}const Ht=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,qt=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g,zt=/^'([^]*?)'?$/,Rt=/''/g,Vt=/[a-zA-Z]/;function H(t,n,e){var u,h,m,p,D,g,s,_;const r=te(),a=(e==null?void 0:e.locale)??r.locale??Pt,o=(e==null?void 0:e.firstWeekContainsDate)??((h=(u=e==null?void 0:e.locale)==null?void 0:u.options)==null?void 0:h.firstWeekContainsDate)??r.firstWeekContainsDate??((p=(m=r.locale)==null?void 0:m.options)==null?void 0:p.firstWeekContainsDate)??1,c=(e==null?void 0:e.weekStartsOn)??((g=(D=e==null?void 0:e.locale)==null?void 0:D.options)==null?void 0:g.weekStartsOn)??r.weekStartsOn??((_=(s=r.locale)==null?void 0:s.options)==null?void 0:_.weekStartsOn)??0,i=C(t);if(!Ie(i))throw new RangeError("Invalid time value");let l=n.match(qt).map(x=>{const b=x[0];if(b==="p"||b==="P"){const O=Et[b];return O(x,a.formatLong)}return x}).join("").match(Ht).map(x=>{if(x==="''")return{isToken:!1,value:"'"};const b=x[0];if(b==="'")return{isToken:!1,value:At(x)};if(ye[b])return{isToken:!0,value:x};if(b.match(Vt))throw new RangeError("Format string contains an unescaped latin alphabet character `"+b+"`");return{isToken:!1,value:x}});a.localize.preprocessor&&(l=a.localize.preprocessor(i,l));const d={firstWeekContainsDate:o,weekStartsOn:c,locale:a};return l.map(x=>{if(!x.isToken)return x.value;const b=x.value;(!(e!=null&&e.useAdditionalWeekYearTokens)&&Nt(b)||!(e!=null&&e.useAdditionalDayOfYearTokens)&&Bt(b))&&Lt(b,n,String(t));const O=ye[b[0]];return O(i,b,a.localize,d)}).join("")}function At(t){const n=t.match(zt);return n?n[1].replace(Rt,"'"):t}const It={class:"flex items-center gap-2 flex-wrap"},Qt={class:"flex items-center gap-1"},Xt={class:"text-sm font-medium text-foreground flex-1 min-w-0 truncate"},Gt={key:0,class:"text-xs text-muted-foreground"},Jt={class:"flex items-center rounded-md border border-border overflow-hidden"},Ut=G({__name:"CalendarToolbar",setup(t){const n=J(),e=W(()=>{if(n.view==="week"){const c=n.weekDays;if(!c.length)return"";const i=c[0],l=c[6];return i.getMonth()===l.getMonth()?`${H(i,"MMM d")} – ${H(l,"d, yyyy")}`:`${H(i,"MMM d")} – ${H(l,"MMM d, yyyy")}`}else return H(n.currentDate,"EEEE, MMMM d, yyyy")});async function r(c){c==="prev"?n.navigatePrev():n.navigateNext(),await n.fetchCurrentView()}async function a(){n.goToToday(),await n.fetchCurrentView()}async function o(c){n.setView(c),await n.fetchCurrentView()}return(c,i)=>(w(),v("div",It,[f("div",Qt,[E(K,{variant:"outline",size:"sm",onClick:i[0]||(i[0]=l=>r("prev"))},{default:Q(()=>[...i[4]||(i[4]=[f("svg",{class:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[f("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M15 19l-7-7 7-7"})],-1)])]),_:1}),E(K,{variant:"outline",size:"sm",onClick:a},{default:Q(()=>[...i[5]||(i[5]=[pe("Today",-1)])]),_:1}),E(K,{variant:"outline",size:"sm",onClick:i[1]||(i[1]=l=>r("next"))},{default:Q(()=>[...i[6]||(i[6]=[f("svg",{class:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[f("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M9 5l7 7-7 7"})],-1)])]),_:1})]),f("span",Xt,M(e.value),1),y(n).loading?(w(),v("div",Gt,"Loading...")):T("",!0),f("div",Jt,[f("button",{class:q(["px-3 py-1.5 text-xs font-medium transition-colors",y(n).view==="day"?"bg-primary text-primary-foreground":"text-muted-foreground hover:text-foreground hover:bg-muted"]),onClick:i[2]||(i[2]=l=>o("day"))}," Day ",2),f("button",{class:q(["px-3 py-1.5 text-xs font-medium transition-colors",y(n).view==="week"?"bg-primary text-primary-foreground":"text-muted-foreground hover:text-foreground hover:bg-muted"]),onClick:i[3]||(i[3]=l=>o("week"))}," Week ",2)])]))}}),Kt=7;function Oe(){const t=se(),n=J(),e=S(null),r=S(null),a=S(null),o=S(null);function c(D,g){var s,_;e.value=D.id,(s=g.dataTransfer)==null||s.setData("task_id",D.id),(_=g.dataTransfer)==null||_.setData("estimate_hours",String(D.estimate_hours??1))}function i(D,g){g.preventDefault(),r.value=P(D)}function l(){r.value=null}async function d(D,g){var le,fe;g.preventDefault(),r.value=null,e.value=null;const s=(le=g.dataTransfer)==null?void 0:le.getData("task_id"),_=parseFloat(((fe=g.dataTransfer)==null?void 0:fe.getData("estimate_hours"))??"1")||1;if(!s)return;const b=g.currentTarget.getBoundingClientRect(),O=g.clientY-b.top,ie=ge(O/Z,15),ne=Math.max(0,Math.min(ie,12*60)),N=new Date(D);N.setHours(Kt,0,0,0),N.setMinutes(N.getMinutes()+ne);const re=new Date(N);re.setMinutes(re.getMinutes()+Math.round(_*60));const ue=N.toISOString(),ce=re.toISOString(),de=`temp_${Date.now()}`,Ce={kind:"planned",id:de,project_id:null,job_number:"",display_name:"Loading...",start_at:ue,end_at:ce,title:"",color_hue:260,tags:[],task_id:s,session_id:null,manual_entry_id:null};n.addBlock(Ce);try{await t.createBlock(s,{start_at:ue,end_at:ce}),await n.fetchCurrentView()}catch(We){n.removeBlock(de),console.error("Failed to create task block:",We)}}let u=0,h="",m=null;function p(D,g){g.preventDefault(),g.stopPropagation(),a.value=D,m=D,u=g.clientY,h=D.end_at,o.value=D.end_at;const s=x=>{if(!m)return;const b=x.clientY-u,O=ge(b/Z,15),ne=new Date(h).getTime()+O*6e4,N=new Date(m.start_at).getTime()+15*6e4;o.value=new Date(Math.max(ne,N)).toISOString()},_=async()=>{if(document.removeEventListener("mousemove",s),document.removeEventListener("mouseup",_),!m||!o.value){a.value=null;return}const x=m.id,b=o.value;if(b===h){a.value=null,o.value=null;return}try{m.task_id&&await t.updateBlock(x,{end_at:b}),n.updateBlock({...m,end_at:b})}catch(O){console.error("Failed to resize block:",O),n.updateBlock({...m,end_at:h})}a.value=null,o.value=null,m=null};document.addEventListener("mousemove",s),document.addEventListener("mouseup",_)}return{draggingTaskId:e,dragOverDay:r,resizingBlock:a,resizePreviewEnd:o,onDragStart:c,onDragOver:i,onDragLeave:l,onDrop:d,onResizeStart:p}}function Zt(t){return`hsla(${t}, 65%, 45%, 0.85)`}function en(t){return`hsla(${t}, 65%, 55%, 1)`}const tn={class:"px-1.5 py-1 h-full flex flex-col text-white overflow-hidden"},nn={class:"text-xs font-semibold leading-tight truncate"},rn={key:0,class:"text-xs opacity-75 truncate"},an={key:1,class:"text-xs opacity-75 mt-auto"},on=G({__name:"CalendarBlock",props:{block:{},lane:{},totalLanes:{},top:{},height:{},resizeEnd:{}},emits:["resizeStart","click"],setup(t,{emit:n}){const e=t,r=n,a=W(()=>e.resizeEnd?new Date(e.resizeEnd):new Date(e.block.end_at)),o=W(()=>{if(!e.resizeEnd)return e.height;const u=(a.value.getTime()-new Date(e.block.start_at).getTime())/6e4;return Math.max(u*(40/30),20)}),c=W(()=>{const d=a.value.getTime()-new Date(e.block.start_at).getTime();return U(d/36e5)}),i=W(()=>{const d=`calc(${100/e.totalLanes}% - 2px)`,u=`calc(${e.lane/e.totalLanes*100}% + 1px)`;return{top:`${e.top}px`,height:`${o.value}px`,width:d,left:u,backgroundColor:Zt(e.block.color_hue),borderColor:en(e.block.color_hue)}}),l=W(()=>o.value<40);return(d,u)=>(w(),v("div",{class:q(["absolute rounded overflow-hidden cursor-pointer select-none group",{"border-2":t.block.kind==="session","border-2 border-dashed opacity-80":t.block.kind==="planned","border-2 calendar-block--manual":t.block.kind==="manual"}]),style:j(i.value),onClick:u[1]||(u[1]=h=>r("click",t.block))},[f("div",tn,[f("p",nn,M(t.block.display_name),1),!l.value&&t.block.job_number?(w(),v("p",rn,M(t.block.job_number),1)):T("",!0),l.value?T("",!0):(w(),v("p",an,M(c.value),1))]),f("div",{class:"absolute bottom-0 left-0 right-0 h-2 cursor-s-resize opacity-0 group-hover:opacity-100 flex items-center justify-center",onMousedown:u[0]||(u[0]=De(h=>r("resizeStart",h),["stop"]))},[...u[2]||(u[2]=[f("div",{class:"w-8 h-0.5 bg-white/60 rounded"},null,-1)])],32)],6))}}),sn=$e(on,[["__scopeId","data-v-5829880c"]]),un={class:"flex overflow-auto h-full"},cn={class:"flex flex-1 gap-px min-w-0"},dn=["onDragover","onDrop"],ln={key:1,class:"absolute inset-0 bg-primary/10 pointer-events-none z-0"},Y=7,oe=19,V=40,fn=G({__name:"CalendarGrid",emits:["blockClick"],setup(t,{emit:n}){const e=Array.from({length:oe-Y+1},(p,D)=>Y+D),r=J(),a=Oe(),o=n,c=W(()=>r.view==="week"?r.weekDays:[r.currentDate]),i=P(new Date);function l(p){const D=r.getBlocksForDay(p);return Le(D)}function d(p){return je(new Date(p.start_at),Y)}function u(p){return He(new Date(p.start_at),new Date(p.end_at))}function h(p){var D;return((D=a.resizingBlock.value)==null?void 0:D.id)===p.id}function m(p){return p===12?"12 PM":p>12?`${p-12} PM`:`${p} AM`}return(p,D)=>(w(),v("div",un,[f("div",{class:"w-12 shrink-0 relative",style:j({height:`${(oe-Y+1)*V*2}px`})},[(w(!0),v(F,null,B(y(e),g=>(w(),v("div",{key:g,class:"absolute right-2 text-xs text-muted-foreground",style:j({top:`${(g-Y)*V*2-6}px`})},M(m(g)),5))),128))],4),f("div",cn,[(w(!0),v(F,null,B(c.value,g=>(w(),v("div",{key:y(P)(g),class:q(["flex-1 relative border-l border-border",{"bg-primary/5":y(P)(g)===y(i)}]),style:j({height:`${(oe-Y)*V*2}px`}),onDragover:s=>y(a).onDragOver(g,s),onDragleave:D[0]||(D[0]=s=>y(a).onDragLeave()),onDrop:s=>y(a).onDrop(g,s)},[y(r).view==="week"?(w(),v("div",{key:0,class:q(["sticky top-0 z-10 text-center py-1 text-xs font-medium border-b border-border bg-background",y(P)(g)===y(i)?"text-primary":"text-muted-foreground"])},[f("div",null,M(y(H)(g,"EEE")),1),f("div",{class:q(["inline-flex h-6 w-6 mx-auto items-center justify-center rounded-full text-sm",y(P)(g)===y(i)?"bg-primary text-primary-foreground":""])},M(y(H)(g,"d")),3)],2)):T("",!0),(w(!0),v(F,null,B(y(e),s=>(w(),v("div",{key:s,class:"absolute left-0 right-0 border-t border-border/40",style:j({top:`${(s-Y)*V*2}px`})},null,4))),128)),(w(!0),v(F,null,B(y(e).slice(0,-1),s=>(w(),v("div",{key:`half-${s}`,class:"absolute left-0 right-0 border-t border-border/20",style:j({top:`${(s-Y)*V*2+V}px`})},null,4))),128)),y(a).dragOverDay.value===y(P)(g)?(w(),v("div",ln)):T("",!0),(w(!0),v(F,null,B(l(g),({block:s,lane:_,totalLanes:x})=>(w(),Ye(sn,{key:s.id,block:s,lane:_,"total-lanes":x,top:d(s),height:u(s),"resize-end":h(s)?y(a).resizePreviewEnd.value:null,onClick:b=>o("blockClick",s),onResizeStart:b=>y(a).onResizeStart(s,b)},null,8,["block","lane","total-lanes","top","height","resize-end","onClick","onResizeStart"]))),128))],46,dn))),128))])]))}}),mn={class:"flex flex-col h-full bg-card border-l border-border"},hn={class:"p-3 border-b border-border flex items-center justify-between shrink-0"},gn={class:"flex-1 overflow-y-auto p-2 space-y-1.5"},wn={key:0,class:"text-xs text-muted-foreground p-2"},vn={key:1,class:"text-xs text-muted-foreground p-2 text-center"},yn=["onDragstart"],bn={class:"flex items-start gap-2"},kn={class:"flex-1 min-w-0"},xn={class:"text-xs font-medium text-foreground leading-tight truncate"},pn={class:"flex items-center gap-1.5 mt-1 flex-wrap"},Dn={key:0,class:"text-xs text-muted-foreground"},_n={key:0,class:"p-3 border-t border-border shrink-0"},Mn={class:"space-y-1"},Pn={class:"text-muted-foreground truncate max-w-[100px]"},Sn={class:"text-foreground"},Tn=G({__name:"PlannerSidebar",emits:["createTask"],setup(t,{emit:n}){const e=se(),r=J(),a=Oe(),o=n,c=W(()=>P(r.currentDate));_e(()=>{e.fetchForDate(c.value)});const i=u=>({todo:"outline",doing:"default",done:"success",cancelled:"secondary"})[u],l=u=>u>=4?"bg-red-500":u===3?"bg-amber-500":"bg-emerald-500",d=W(()=>{const u={};for(const h of e.tasks){const m=h.project_id??"_none";u[m]||(u[m]={name:h.project_id?m:"No Project",planned:0,actual:0}),u[m].planned+=h.estimate_hours??0,u[m].actual+=h.actual_hours??0}return Object.values(u)});return(u,h)=>(w(),v("div",mn,[f("div",hn,[h[2]||(h[2]=f("h3",{class:"text-sm font-semibold text-foreground"},"Planner",-1)),E(K,{size:"sm",variant:"ghost",onClick:h[0]||(h[0]=m=>o("createTask"))},{default:Q(()=>[...h[1]||(h[1]=[f("svg",{class:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[f("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M12 4v16m8-8H4"})],-1)])]),_:1})]),f("div",gn,[y(e).loading?(w(),v("div",wn,"Loading...")):y(e).tasks.length===0?(w(),v("div",vn," No tasks for today ")):T("",!0),(w(!0),v(F,null,B(y(e).tasks,m=>(w(),v("div",{key:m.id,class:"rounded-md border border-border bg-background p-2 cursor-grab active:cursor-grabbing hover:border-primary/50 transition-colors",draggable:"true",onDragstart:p=>y(a).onDragStart(m,p)},[f("div",bn,[f("div",{class:q(["h-2 w-2 rounded-full mt-1.5 shrink-0",l(m.priority)])},null,2),f("div",kn,[f("p",xn,M(m.title),1),f("div",pn,[E(Ne,{variant:i(m.status),class:"text-xs py-0"},{default:Q(()=>[pe(M(m.status),1)]),_:2},1032,["variant"]),m.estimate_hours?(w(),v("span",Dn,M(y(U)(m.estimate_hours)),1)):T("",!0)])])])],40,yn))),128))]),d.value.length?(w(),v("div",_n,[h[3]||(h[3]=f("p",{class:"text-xs font-medium text-muted-foreground mb-2"},"Plan vs Actual",-1)),f("div",Mn,[(w(!0),v(F,null,B(d.value,m=>(w(),v("div",{key:m.name,class:"flex items-center justify-between text-xs"},[f("span",Pn,M(m.name),1),f("span",Sn,M(y(U)(m.planned))+" / "+M(y(U)(m.actual)),1)]))),128))])])):T("",!0)]))}}),On={class:"h-full flex flex-col"},Cn={class:"p-4 border-b border-border flex items-center gap-3 flex-wrap"},Wn={class:"flex items-center gap-2 ml-auto"},En={class:"flex-1 flex overflow-hidden"},$n={class:"flex-1 overflow-auto"},Yn={key:0,class:"w-56 shrink-0 overflow-hidden"},Fn={class:"bg-card border border-border rounded-lg shadow-xl p-4 w-72"},Bn={class:"flex items-start justify-between gap-2 mb-3"},Nn={class:"font-semibold text-sm text-foreground"},Ln={key:0,class:"text-xs text-muted-foreground"},jn={class:"space-y-1 text-xs text-muted-foreground"},Hn={key:0,class:"mt-2 flex flex-wrap gap-1"},Jn=G({__name:"CalendarView",setup(t){const n=J(),e=se(),r=S(!0),a=S(!1),o=S(null);_e(()=>{n.fetchCurrentView()});function c(l){o.value=l}async function i(l){try{await e.create(l),me.success("Task created"),a.value=!1,e.fetchForDate(P(n.currentDate))}catch{me.error("Failed to create task")}}return(l,d)=>(w(),v("div",On,[f("div",Cn,[E(Ut),f("div",Wn,[f("button",{class:"text-xs text-muted-foreground hover:text-foreground transition-colors",onClick:d[0]||(d[0]=u=>r.value=!r.value)},M(r.value?"Hide Planner":"Show Planner"),1)])]),f("div",En,[f("div",$n,[E(fn,{onBlockClick:c})]),r.value?(w(),v("div",Yn,[E(Tn,{onCreateTask:d[1]||(d[1]=u=>a.value=!0)})])):T("",!0)]),o.value?(w(),v("div",{key:0,class:"fixed inset-0 z-40 flex items-center justify-center p-4",onClick:d[3]||(d[3]=De(u=>o.value=null,["self"]))},[f("div",Fn,[f("div",Bn,[f("div",null,[f("p",Nn,M(o.value.display_name),1),o.value.job_number?(w(),v("p",Ln,M(o.value.job_number),1)):T("",!0)]),f("button",{class:"text-muted-foreground hover:text-foreground",onClick:d[2]||(d[2]=u=>o.value=null)},[...d[5]||(d[5]=[f("svg",{class:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[f("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M6 18L18 6M6 6l12 12"})],-1)])])]),f("div",jn,[f("p",null,"Start: "+M(new Date(o.value.start_at).toLocaleString()),1),f("p",null,"End: "+M(new Date(o.value.end_at).toLocaleString()),1),f("p",null,"Type: "+M(o.value.kind),1)]),o.value.tags.length?(w(),v("div",Hn,[(w(!0),v(F,null,B(o.value.tags,u=>(w(),v("span",{key:u.id,class:"px-1.5 py-0.5 rounded text-xs",style:j({background:`${u.color_hex}22`,color:u.color_hex})},M(u.name),5))),128))])):T("",!0)])])):T("",!0),E(Be,{open:a.value,"default-date":y(P)(y(n).currentDate),onClose:d[4]||(d[4]=u=>a.value=!1),onSave:i},null,8,["open","default-date"])]))}});export{Jn as default}; +import{B as Ee,r as S,m as W,d as G,o as w,c as v,a as f,e as E,w as Q,k as pe,t as M,i as y,j as T,p as q,A as j,h as De,_ as $e,F,l as B,n as Ye,x as _e,K as me}from"./index-CO3lBHVT.js";import{d as Fe}from"./dashboard-4_z0ZWLj.js";import{i as P,f as U}from"./utils-B1YxgOQw.js";import{_ as K}from"./Button.vue_vue_type_script_setup_true_lang-BwCrpRUQ.js";import{u as se,_ as Be}from"./TaskForm.vue_vue_type_script_setup_true_lang-CUKCWjzn.js";import{_ as Ne}from"./Badge.vue_vue_type_script_setup_true_lang-CocRK-vO.js";import"./Dialog.vue_vue_type_script_setup_true_lang-DU2Z0xrF.js";import"./Input.vue_vue_type_script_setup_true_lang-CDN6a_dJ.js";import"./devops-D_lPg6L8.js";const Z=40/30;function Le(t){if(t.length===0)return[];const n=[...t].sort((o,c)=>new Date(o.start_at).getTime()-new Date(c.start_at).getTime()),e=[],r=[];for(const o of n){const c=new Date(o.start_at).getTime(),i=new Date(o.end_at).getTime();let l=-1;for(let d=0;d{const i=new Date(o.start_at).getTime(),l=new Date(o.end_at).getTime();let d=c;for(const u of r){const h=new Date(u.block.start_at).getTime(),m=new Date(u.block.end_at).getTime();hi&&u.lane>d&&(d=u.lane)}return{block:o,lane:c,totalLanes:d+1}})}function je(t,n=7){return((t.getHours()-n)*60+t.getMinutes())*Z}function He(t,n){const e=(n.getTime()-t.getTime())/6e4;return Math.max(e*Z,20)}function he(t){const n=t.getDay(),e=new Date(t);return e.setDate(t.getDate()-(n+6)%7),e.setHours(0,0,0,0),Array.from({length:7},(r,a)=>{const o=new Date(e);return o.setDate(e.getDate()+a),o})}function ge(t,n=15){return Math.round(t/n)*n}const J=Ee("calendar",()=>{const t=S([]),n=S(new Date),e=S("week"),r=S(!1),a=S(null),o=W(()=>he(n.value));async function c(s,_,x){r.value=!0,a.value=null;try{const b=await Fe.calendar({from:s,to:_,view:x});t.value=b.data}catch(b){const O=b;a.value=O.message??"Failed to fetch calendar"}finally{r.value=!1}}async function i(){if(e.value==="week"){const s=he(n.value),_=P(s[0]),x=P(s[6]);await c(_,x,"week")}else{const s=P(n.value);await c(s,s,"day")}}function l(){const s=new Date(n.value);e.value==="week"?s.setDate(s.getDate()-7):s.setDate(s.getDate()-1),n.value=s}function d(){const s=new Date(n.value);e.value==="week"?s.setDate(s.getDate()+7):s.setDate(s.getDate()+1),n.value=s}function u(){n.value=new Date}function h(s){e.value=s}function m(s){t.value.push(s)}function p(s){const _=t.value.findIndex(x=>x.id===s.id);_!==-1&&(t.value[_]=s)}function D(s){t.value=t.value.filter(_=>_.id!==s)}function g(s){const _=P(s);return t.value.filter(x=>P(new Date(x.start_at))===_)}return{blocks:t,currentDate:n,view:e,loading:r,error:a,weekDays:o,fetch:c,fetchCurrentView:i,navigatePrev:l,navigateNext:d,goToToday:u,setView:h,addBlock:m,updateBlock:p,removeBlock:D,getBlocksForDay:g}});function C(t){const n=Object.prototype.toString.call(t);return t instanceof Date||typeof t=="object"&&n==="[object Date]"?new t.constructor(+t):typeof t=="number"||n==="[object Number]"||typeof t=="string"||n==="[object String]"?new Date(t):new Date(NaN)}function z(t,n){return t instanceof Date?new t.constructor(n):new Date(n)}const Me=6048e5,qe=864e5;let ze={};function te(){return ze}function X(t,n){var i,l,d,u;const e=te(),r=(n==null?void 0:n.weekStartsOn)??((l=(i=n==null?void 0:n.locale)==null?void 0:i.options)==null?void 0:l.weekStartsOn)??e.weekStartsOn??((u=(d=e.locale)==null?void 0:d.options)==null?void 0:u.weekStartsOn)??0,a=C(t),o=a.getDay(),c=(o=a.getTime()?e+1:n.getTime()>=c.getTime()?e:e-1}function we(t){const n=C(t);return n.setHours(0,0,0,0),n}function ve(t){const n=C(t),e=new Date(Date.UTC(n.getFullYear(),n.getMonth(),n.getDate(),n.getHours(),n.getMinutes(),n.getSeconds(),n.getMilliseconds()));return e.setUTCFullYear(n.getFullYear()),+t-+e}function Re(t,n){const e=we(t),r=we(n),a=+e-ve(e),o=+r-ve(r);return Math.round((a-o)/qe)}function Ve(t){const n=Pe(t),e=z(t,0);return e.setFullYear(n,0,4),e.setHours(0,0,0,0),ee(e)}function Ae(t){return t instanceof Date||typeof t=="object"&&Object.prototype.toString.call(t)==="[object Date]"}function Ie(t){if(!Ae(t)&&typeof t!="number")return!1;const n=C(t);return!isNaN(Number(n))}function Qe(t){const n=C(t),e=z(t,0);return e.setFullYear(n.getFullYear(),0,1),e.setHours(0,0,0,0),e}const Xe={lessThanXSeconds:{one:"less than a second",other:"less than {{count}} seconds"},xSeconds:{one:"1 second",other:"{{count}} seconds"},halfAMinute:"half a minute",lessThanXMinutes:{one:"less than a minute",other:"less than {{count}} minutes"},xMinutes:{one:"1 minute",other:"{{count}} minutes"},aboutXHours:{one:"about 1 hour",other:"about {{count}} hours"},xHours:{one:"1 hour",other:"{{count}} hours"},xDays:{one:"1 day",other:"{{count}} days"},aboutXWeeks:{one:"about 1 week",other:"about {{count}} weeks"},xWeeks:{one:"1 week",other:"{{count}} weeks"},aboutXMonths:{one:"about 1 month",other:"about {{count}} months"},xMonths:{one:"1 month",other:"{{count}} months"},aboutXYears:{one:"about 1 year",other:"about {{count}} years"},xYears:{one:"1 year",other:"{{count}} years"},overXYears:{one:"over 1 year",other:"over {{count}} years"},almostXYears:{one:"almost 1 year",other:"almost {{count}} years"}},Ge=(t,n,e)=>{let r;const a=Xe[t];return typeof a=="string"?r=a:n===1?r=a.one:r=a.other.replace("{{count}}",n.toString()),e!=null&&e.addSuffix?e.comparison&&e.comparison>0?"in "+r:r+" ago":r};function ae(t){return(n={})=>{const e=n.width?String(n.width):t.defaultWidth;return t.formats[e]||t.formats[t.defaultWidth]}}const Je={full:"EEEE, MMMM do, y",long:"MMMM do, y",medium:"MMM d, y",short:"MM/dd/yyyy"},Ue={full:"h:mm:ss a zzzz",long:"h:mm:ss a z",medium:"h:mm:ss a",short:"h:mm a"},Ke={full:"{{date}} 'at' {{time}}",long:"{{date}} 'at' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},Ze={date:ae({formats:Je,defaultWidth:"full"}),time:ae({formats:Ue,defaultWidth:"full"}),dateTime:ae({formats:Ke,defaultWidth:"full"})},et={lastWeek:"'last' eeee 'at' p",yesterday:"'yesterday at' p",today:"'today at' p",tomorrow:"'tomorrow at' p",nextWeek:"eeee 'at' p",other:"P"},tt=(t,n,e,r)=>et[t];function A(t){return(n,e)=>{const r=e!=null&&e.context?String(e.context):"standalone";let a;if(r==="formatting"&&t.formattingValues){const c=t.defaultFormattingWidth||t.defaultWidth,i=e!=null&&e.width?String(e.width):c;a=t.formattingValues[i]||t.formattingValues[c]}else{const c=t.defaultWidth,i=e!=null&&e.width?String(e.width):t.defaultWidth;a=t.values[i]||t.values[c]}const o=t.argumentCallback?t.argumentCallback(n):n;return a[o]}}const nt={narrow:["B","A"],abbreviated:["BC","AD"],wide:["Before Christ","Anno Domini"]},rt={narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["1st quarter","2nd quarter","3rd quarter","4th quarter"]},at={narrow:["J","F","M","A","M","J","J","A","S","O","N","D"],abbreviated:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],wide:["January","February","March","April","May","June","July","August","September","October","November","December"]},ot={narrow:["S","M","T","W","T","F","S"],short:["Su","Mo","Tu","We","Th","Fr","Sa"],abbreviated:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],wide:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},st={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"}},it={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"}},ut=(t,n)=>{const e=Number(t),r=e%100;if(r>20||r<10)switch(r%10){case 1:return e+"st";case 2:return e+"nd";case 3:return e+"rd"}return e+"th"},ct={ordinalNumber:ut,era:A({values:nt,defaultWidth:"wide"}),quarter:A({values:rt,defaultWidth:"wide",argumentCallback:t=>t-1}),month:A({values:at,defaultWidth:"wide"}),day:A({values:ot,defaultWidth:"wide"}),dayPeriod:A({values:st,defaultWidth:"wide",formattingValues:it,defaultFormattingWidth:"wide"})};function I(t){return(n,e={})=>{const r=e.width,a=r&&t.matchPatterns[r]||t.matchPatterns[t.defaultMatchWidth],o=n.match(a);if(!o)return null;const c=o[0],i=r&&t.parsePatterns[r]||t.parsePatterns[t.defaultParseWidth],l=Array.isArray(i)?lt(i,h=>h.test(c)):dt(i,h=>h.test(c));let d;d=t.valueCallback?t.valueCallback(l):l,d=e.valueCallback?e.valueCallback(d):d;const u=n.slice(c.length);return{value:d,rest:u}}}function dt(t,n){for(const e in t)if(Object.prototype.hasOwnProperty.call(t,e)&&n(t[e]))return e}function lt(t,n){for(let e=0;e{const r=n.match(t.matchPattern);if(!r)return null;const a=r[0],o=n.match(t.parsePattern);if(!o)return null;let c=t.valueCallback?t.valueCallback(o[0]):o[0];c=e.valueCallback?e.valueCallback(c):c;const i=n.slice(a.length);return{value:c,rest:i}}}const mt=/^(\d+)(th|st|nd|rd)?/i,ht=/\d+/i,gt={narrow:/^(b|a)/i,abbreviated:/^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,wide:/^(before christ|before common era|anno domini|common era)/i},wt={any:[/^b/i,/^(a|c)/i]},vt={narrow:/^[1234]/i,abbreviated:/^q[1234]/i,wide:/^[1234](th|st|nd|rd)? quarter/i},yt={any:[/1/i,/2/i,/3/i,/4/i]},bt={narrow:/^[jfmasond]/i,abbreviated:/^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,wide:/^(january|february|march|april|may|june|july|august|september|october|november|december)/i},kt={narrow:[/^j/i,/^f/i,/^m/i,/^a/i,/^m/i,/^j/i,/^j/i,/^a/i,/^s/i,/^o/i,/^n/i,/^d/i],any:[/^ja/i,/^f/i,/^mar/i,/^ap/i,/^may/i,/^jun/i,/^jul/i,/^au/i,/^s/i,/^o/i,/^n/i,/^d/i]},xt={narrow:/^[smtwf]/i,short:/^(su|mo|tu|we|th|fr|sa)/i,abbreviated:/^(sun|mon|tue|wed|thu|fri|sat)/i,wide:/^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i},pt={narrow:[/^s/i,/^m/i,/^t/i,/^w/i,/^t/i,/^f/i,/^s/i],any:[/^su/i,/^m/i,/^tu/i,/^w/i,/^th/i,/^f/i,/^sa/i]},Dt={narrow:/^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,any:/^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i},_t={any:{am:/^a/i,pm:/^p/i,midnight:/^mi/i,noon:/^no/i,morning:/morning/i,afternoon:/afternoon/i,evening:/evening/i,night:/night/i}},Mt={ordinalNumber:ft({matchPattern:mt,parsePattern:ht,valueCallback:t=>parseInt(t,10)}),era:I({matchPatterns:gt,defaultMatchWidth:"wide",parsePatterns:wt,defaultParseWidth:"any"}),quarter:I({matchPatterns:vt,defaultMatchWidth:"wide",parsePatterns:yt,defaultParseWidth:"any",valueCallback:t=>t+1}),month:I({matchPatterns:bt,defaultMatchWidth:"wide",parsePatterns:kt,defaultParseWidth:"any"}),day:I({matchPatterns:xt,defaultMatchWidth:"wide",parsePatterns:pt,defaultParseWidth:"any"}),dayPeriod:I({matchPatterns:Dt,defaultMatchWidth:"any",parsePatterns:_t,defaultParseWidth:"any"})},Pt={code:"en-US",formatDistance:Ge,formatLong:Ze,formatRelative:tt,localize:ct,match:Mt,options:{weekStartsOn:0,firstWeekContainsDate:1}};function St(t){const n=C(t);return Re(n,Qe(n))+1}function Tt(t){const n=C(t),e=+ee(n)-+Ve(n);return Math.round(e/Me)+1}function Se(t,n){var u,h,m,p;const e=C(t),r=e.getFullYear(),a=te(),o=(n==null?void 0:n.firstWeekContainsDate)??((h=(u=n==null?void 0:n.locale)==null?void 0:u.options)==null?void 0:h.firstWeekContainsDate)??a.firstWeekContainsDate??((p=(m=a.locale)==null?void 0:m.options)==null?void 0:p.firstWeekContainsDate)??1,c=z(t,0);c.setFullYear(r+1,0,o),c.setHours(0,0,0,0);const i=X(c,n),l=z(t,0);l.setFullYear(r,0,o),l.setHours(0,0,0,0);const d=X(l,n);return e.getTime()>=i.getTime()?r+1:e.getTime()>=d.getTime()?r:r-1}function Ot(t,n){var i,l,d,u;const e=te(),r=(n==null?void 0:n.firstWeekContainsDate)??((l=(i=n==null?void 0:n.locale)==null?void 0:i.options)==null?void 0:l.firstWeekContainsDate)??e.firstWeekContainsDate??((u=(d=e.locale)==null?void 0:d.options)==null?void 0:u.firstWeekContainsDate)??1,a=Se(t,n),o=z(t,0);return o.setFullYear(a,0,r),o.setHours(0,0,0,0),X(o,n)}function Ct(t,n){const e=C(t),r=+X(e,n)-+Ot(e,n);return Math.round(r/Me)+1}function k(t,n){const e=t<0?"-":"",r=Math.abs(t).toString().padStart(n,"0");return e+r}const $={y(t,n){const e=t.getFullYear(),r=e>0?e:1-e;return k(n==="yy"?r%100:r,n.length)},M(t,n){const e=t.getMonth();return n==="M"?String(e+1):k(e+1,2)},d(t,n){return k(t.getDate(),n.length)},a(t,n){const e=t.getHours()/12>=1?"pm":"am";switch(n){case"a":case"aa":return e.toUpperCase();case"aaa":return e;case"aaaaa":return e[0];case"aaaa":default:return e==="am"?"a.m.":"p.m."}},h(t,n){return k(t.getHours()%12||12,n.length)},H(t,n){return k(t.getHours(),n.length)},m(t,n){return k(t.getMinutes(),n.length)},s(t,n){return k(t.getSeconds(),n.length)},S(t,n){const e=n.length,r=t.getMilliseconds(),a=Math.trunc(r*Math.pow(10,e-3));return k(a,n.length)}},R={midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},ye={G:function(t,n,e){const r=t.getFullYear()>0?1:0;switch(n){case"G":case"GG":case"GGG":return e.era(r,{width:"abbreviated"});case"GGGGG":return e.era(r,{width:"narrow"});case"GGGG":default:return e.era(r,{width:"wide"})}},y:function(t,n,e){if(n==="yo"){const r=t.getFullYear(),a=r>0?r:1-r;return e.ordinalNumber(a,{unit:"year"})}return $.y(t,n)},Y:function(t,n,e,r){const a=Se(t,r),o=a>0?a:1-a;if(n==="YY"){const c=o%100;return k(c,2)}return n==="Yo"?e.ordinalNumber(o,{unit:"year"}):k(o,n.length)},R:function(t,n){const e=Pe(t);return k(e,n.length)},u:function(t,n){const e=t.getFullYear();return k(e,n.length)},Q:function(t,n,e){const r=Math.ceil((t.getMonth()+1)/3);switch(n){case"Q":return String(r);case"QQ":return k(r,2);case"Qo":return e.ordinalNumber(r,{unit:"quarter"});case"QQQ":return e.quarter(r,{width:"abbreviated",context:"formatting"});case"QQQQQ":return e.quarter(r,{width:"narrow",context:"formatting"});case"QQQQ":default:return e.quarter(r,{width:"wide",context:"formatting"})}},q:function(t,n,e){const r=Math.ceil((t.getMonth()+1)/3);switch(n){case"q":return String(r);case"qq":return k(r,2);case"qo":return e.ordinalNumber(r,{unit:"quarter"});case"qqq":return e.quarter(r,{width:"abbreviated",context:"standalone"});case"qqqqq":return e.quarter(r,{width:"narrow",context:"standalone"});case"qqqq":default:return e.quarter(r,{width:"wide",context:"standalone"})}},M:function(t,n,e){const r=t.getMonth();switch(n){case"M":case"MM":return $.M(t,n);case"Mo":return e.ordinalNumber(r+1,{unit:"month"});case"MMM":return e.month(r,{width:"abbreviated",context:"formatting"});case"MMMMM":return e.month(r,{width:"narrow",context:"formatting"});case"MMMM":default:return e.month(r,{width:"wide",context:"formatting"})}},L:function(t,n,e){const r=t.getMonth();switch(n){case"L":return String(r+1);case"LL":return k(r+1,2);case"Lo":return e.ordinalNumber(r+1,{unit:"month"});case"LLL":return e.month(r,{width:"abbreviated",context:"standalone"});case"LLLLL":return e.month(r,{width:"narrow",context:"standalone"});case"LLLL":default:return e.month(r,{width:"wide",context:"standalone"})}},w:function(t,n,e,r){const a=Ct(t,r);return n==="wo"?e.ordinalNumber(a,{unit:"week"}):k(a,n.length)},I:function(t,n,e){const r=Tt(t);return n==="Io"?e.ordinalNumber(r,{unit:"week"}):k(r,n.length)},d:function(t,n,e){return n==="do"?e.ordinalNumber(t.getDate(),{unit:"date"}):$.d(t,n)},D:function(t,n,e){const r=St(t);return n==="Do"?e.ordinalNumber(r,{unit:"dayOfYear"}):k(r,n.length)},E:function(t,n,e){const r=t.getDay();switch(n){case"E":case"EE":case"EEE":return e.day(r,{width:"abbreviated",context:"formatting"});case"EEEEE":return e.day(r,{width:"narrow",context:"formatting"});case"EEEEEE":return e.day(r,{width:"short",context:"formatting"});case"EEEE":default:return e.day(r,{width:"wide",context:"formatting"})}},e:function(t,n,e,r){const a=t.getDay(),o=(a-r.weekStartsOn+8)%7||7;switch(n){case"e":return String(o);case"ee":return k(o,2);case"eo":return e.ordinalNumber(o,{unit:"day"});case"eee":return e.day(a,{width:"abbreviated",context:"formatting"});case"eeeee":return e.day(a,{width:"narrow",context:"formatting"});case"eeeeee":return e.day(a,{width:"short",context:"formatting"});case"eeee":default:return e.day(a,{width:"wide",context:"formatting"})}},c:function(t,n,e,r){const a=t.getDay(),o=(a-r.weekStartsOn+8)%7||7;switch(n){case"c":return String(o);case"cc":return k(o,n.length);case"co":return e.ordinalNumber(o,{unit:"day"});case"ccc":return e.day(a,{width:"abbreviated",context:"standalone"});case"ccccc":return e.day(a,{width:"narrow",context:"standalone"});case"cccccc":return e.day(a,{width:"short",context:"standalone"});case"cccc":default:return e.day(a,{width:"wide",context:"standalone"})}},i:function(t,n,e){const r=t.getDay(),a=r===0?7:r;switch(n){case"i":return String(a);case"ii":return k(a,n.length);case"io":return e.ordinalNumber(a,{unit:"day"});case"iii":return e.day(r,{width:"abbreviated",context:"formatting"});case"iiiii":return e.day(r,{width:"narrow",context:"formatting"});case"iiiiii":return e.day(r,{width:"short",context:"formatting"});case"iiii":default:return e.day(r,{width:"wide",context:"formatting"})}},a:function(t,n,e){const a=t.getHours()/12>=1?"pm":"am";switch(n){case"a":case"aa":return e.dayPeriod(a,{width:"abbreviated",context:"formatting"});case"aaa":return e.dayPeriod(a,{width:"abbreviated",context:"formatting"}).toLowerCase();case"aaaaa":return e.dayPeriod(a,{width:"narrow",context:"formatting"});case"aaaa":default:return e.dayPeriod(a,{width:"wide",context:"formatting"})}},b:function(t,n,e){const r=t.getHours();let a;switch(r===12?a=R.noon:r===0?a=R.midnight:a=r/12>=1?"pm":"am",n){case"b":case"bb":return e.dayPeriod(a,{width:"abbreviated",context:"formatting"});case"bbb":return e.dayPeriod(a,{width:"abbreviated",context:"formatting"}).toLowerCase();case"bbbbb":return e.dayPeriod(a,{width:"narrow",context:"formatting"});case"bbbb":default:return e.dayPeriod(a,{width:"wide",context:"formatting"})}},B:function(t,n,e){const r=t.getHours();let a;switch(r>=17?a=R.evening:r>=12?a=R.afternoon:r>=4?a=R.morning:a=R.night,n){case"B":case"BB":case"BBB":return e.dayPeriod(a,{width:"abbreviated",context:"formatting"});case"BBBBB":return e.dayPeriod(a,{width:"narrow",context:"formatting"});case"BBBB":default:return e.dayPeriod(a,{width:"wide",context:"formatting"})}},h:function(t,n,e){if(n==="ho"){let r=t.getHours()%12;return r===0&&(r=12),e.ordinalNumber(r,{unit:"hour"})}return $.h(t,n)},H:function(t,n,e){return n==="Ho"?e.ordinalNumber(t.getHours(),{unit:"hour"}):$.H(t,n)},K:function(t,n,e){const r=t.getHours()%12;return n==="Ko"?e.ordinalNumber(r,{unit:"hour"}):k(r,n.length)},k:function(t,n,e){let r=t.getHours();return r===0&&(r=24),n==="ko"?e.ordinalNumber(r,{unit:"hour"}):k(r,n.length)},m:function(t,n,e){return n==="mo"?e.ordinalNumber(t.getMinutes(),{unit:"minute"}):$.m(t,n)},s:function(t,n,e){return n==="so"?e.ordinalNumber(t.getSeconds(),{unit:"second"}):$.s(t,n)},S:function(t,n){return $.S(t,n)},X:function(t,n,e){const r=t.getTimezoneOffset();if(r===0)return"Z";switch(n){case"X":return ke(r);case"XXXX":case"XX":return L(r);case"XXXXX":case"XXX":default:return L(r,":")}},x:function(t,n,e){const r=t.getTimezoneOffset();switch(n){case"x":return ke(r);case"xxxx":case"xx":return L(r);case"xxxxx":case"xxx":default:return L(r,":")}},O:function(t,n,e){const r=t.getTimezoneOffset();switch(n){case"O":case"OO":case"OOO":return"GMT"+be(r,":");case"OOOO":default:return"GMT"+L(r,":")}},z:function(t,n,e){const r=t.getTimezoneOffset();switch(n){case"z":case"zz":case"zzz":return"GMT"+be(r,":");case"zzzz":default:return"GMT"+L(r,":")}},t:function(t,n,e){const r=Math.trunc(t.getTime()/1e3);return k(r,n.length)},T:function(t,n,e){const r=t.getTime();return k(r,n.length)}};function be(t,n=""){const e=t>0?"-":"+",r=Math.abs(t),a=Math.trunc(r/60),o=r%60;return o===0?e+String(a):e+String(a)+n+k(o,2)}function ke(t,n){return t%60===0?(t>0?"-":"+")+k(Math.abs(t)/60,2):L(t,n)}function L(t,n=""){const e=t>0?"-":"+",r=Math.abs(t),a=k(Math.trunc(r/60),2),o=k(r%60,2);return e+a+n+o}const xe=(t,n)=>{switch(t){case"P":return n.date({width:"short"});case"PP":return n.date({width:"medium"});case"PPP":return n.date({width:"long"});case"PPPP":default:return n.date({width:"full"})}},Te=(t,n)=>{switch(t){case"p":return n.time({width:"short"});case"pp":return n.time({width:"medium"});case"ppp":return n.time({width:"long"});case"pppp":default:return n.time({width:"full"})}},Wt=(t,n)=>{const e=t.match(/(P+)(p+)?/)||[],r=e[1],a=e[2];if(!a)return xe(t,n);let o;switch(r){case"P":o=n.dateTime({width:"short"});break;case"PP":o=n.dateTime({width:"medium"});break;case"PPP":o=n.dateTime({width:"long"});break;case"PPPP":default:o=n.dateTime({width:"full"});break}return o.replace("{{date}}",xe(r,n)).replace("{{time}}",Te(a,n))},Et={p:Te,P:Wt},$t=/^D+$/,Yt=/^Y+$/,Ft=["D","DD","YY","YYYY"];function Bt(t){return $t.test(t)}function Nt(t){return Yt.test(t)}function Lt(t,n,e){const r=jt(t,n,e);if(console.warn(r),Ft.includes(t))throw new RangeError(r)}function jt(t,n,e){const r=t[0]==="Y"?"years":"days of the month";return`Use \`${t.toLowerCase()}\` instead of \`${t}\` (in \`${n}\`) for formatting ${r} to the input \`${e}\`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md`}const Ht=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,qt=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g,zt=/^'([^]*?)'?$/,Rt=/''/g,Vt=/[a-zA-Z]/;function H(t,n,e){var u,h,m,p,D,g,s,_;const r=te(),a=(e==null?void 0:e.locale)??r.locale??Pt,o=(e==null?void 0:e.firstWeekContainsDate)??((h=(u=e==null?void 0:e.locale)==null?void 0:u.options)==null?void 0:h.firstWeekContainsDate)??r.firstWeekContainsDate??((p=(m=r.locale)==null?void 0:m.options)==null?void 0:p.firstWeekContainsDate)??1,c=(e==null?void 0:e.weekStartsOn)??((g=(D=e==null?void 0:e.locale)==null?void 0:D.options)==null?void 0:g.weekStartsOn)??r.weekStartsOn??((_=(s=r.locale)==null?void 0:s.options)==null?void 0:_.weekStartsOn)??0,i=C(t);if(!Ie(i))throw new RangeError("Invalid time value");let l=n.match(qt).map(x=>{const b=x[0];if(b==="p"||b==="P"){const O=Et[b];return O(x,a.formatLong)}return x}).join("").match(Ht).map(x=>{if(x==="''")return{isToken:!1,value:"'"};const b=x[0];if(b==="'")return{isToken:!1,value:At(x)};if(ye[b])return{isToken:!0,value:x};if(b.match(Vt))throw new RangeError("Format string contains an unescaped latin alphabet character `"+b+"`");return{isToken:!1,value:x}});a.localize.preprocessor&&(l=a.localize.preprocessor(i,l));const d={firstWeekContainsDate:o,weekStartsOn:c,locale:a};return l.map(x=>{if(!x.isToken)return x.value;const b=x.value;(!(e!=null&&e.useAdditionalWeekYearTokens)&&Nt(b)||!(e!=null&&e.useAdditionalDayOfYearTokens)&&Bt(b))&&Lt(b,n,String(t));const O=ye[b[0]];return O(i,b,a.localize,d)}).join("")}function At(t){const n=t.match(zt);return n?n[1].replace(Rt,"'"):t}const It={class:"flex items-center gap-2 flex-wrap"},Qt={class:"flex items-center gap-1"},Xt={class:"text-sm font-medium text-foreground flex-1 min-w-0 truncate"},Gt={key:0,class:"text-xs text-muted-foreground"},Jt={class:"flex items-center rounded-md border border-border overflow-hidden"},Ut=G({__name:"CalendarToolbar",setup(t){const n=J(),e=W(()=>{if(n.view==="week"){const c=n.weekDays;if(!c.length)return"";const i=c[0],l=c[6];return i.getMonth()===l.getMonth()?`${H(i,"MMM d")} – ${H(l,"d, yyyy")}`:`${H(i,"MMM d")} – ${H(l,"MMM d, yyyy")}`}else return H(n.currentDate,"EEEE, MMMM d, yyyy")});async function r(c){c==="prev"?n.navigatePrev():n.navigateNext(),await n.fetchCurrentView()}async function a(){n.goToToday(),await n.fetchCurrentView()}async function o(c){n.setView(c),await n.fetchCurrentView()}return(c,i)=>(w(),v("div",It,[f("div",Qt,[E(K,{variant:"outline",size:"sm",onClick:i[0]||(i[0]=l=>r("prev"))},{default:Q(()=>[...i[4]||(i[4]=[f("svg",{class:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[f("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M15 19l-7-7 7-7"})],-1)])]),_:1}),E(K,{variant:"outline",size:"sm",onClick:a},{default:Q(()=>[...i[5]||(i[5]=[pe("Today",-1)])]),_:1}),E(K,{variant:"outline",size:"sm",onClick:i[1]||(i[1]=l=>r("next"))},{default:Q(()=>[...i[6]||(i[6]=[f("svg",{class:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[f("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M9 5l7 7-7 7"})],-1)])]),_:1})]),f("span",Xt,M(e.value),1),y(n).loading?(w(),v("div",Gt,"Loading...")):T("",!0),f("div",Jt,[f("button",{class:q(["px-3 py-1.5 text-xs font-medium transition-colors",y(n).view==="day"?"bg-primary text-primary-foreground":"text-muted-foreground hover:text-foreground hover:bg-muted"]),onClick:i[2]||(i[2]=l=>o("day"))}," Day ",2),f("button",{class:q(["px-3 py-1.5 text-xs font-medium transition-colors",y(n).view==="week"?"bg-primary text-primary-foreground":"text-muted-foreground hover:text-foreground hover:bg-muted"]),onClick:i[3]||(i[3]=l=>o("week"))}," Week ",2)])]))}}),Kt=7;function Oe(){const t=se(),n=J(),e=S(null),r=S(null),a=S(null),o=S(null);function c(D,g){var s,_;e.value=D.id,(s=g.dataTransfer)==null||s.setData("task_id",D.id),(_=g.dataTransfer)==null||_.setData("estimate_hours",String(D.estimate_hours??1))}function i(D,g){g.preventDefault(),r.value=P(D)}function l(){r.value=null}async function d(D,g){var le,fe;g.preventDefault(),r.value=null,e.value=null;const s=(le=g.dataTransfer)==null?void 0:le.getData("task_id"),_=parseFloat(((fe=g.dataTransfer)==null?void 0:fe.getData("estimate_hours"))??"1")||1;if(!s)return;const b=g.currentTarget.getBoundingClientRect(),O=g.clientY-b.top,ie=ge(O/Z,15),ne=Math.max(0,Math.min(ie,12*60)),N=new Date(D);N.setHours(Kt,0,0,0),N.setMinutes(N.getMinutes()+ne);const re=new Date(N);re.setMinutes(re.getMinutes()+Math.round(_*60));const ue=N.toISOString(),ce=re.toISOString(),de=`temp_${Date.now()}`,Ce={kind:"planned",id:de,project_id:null,job_number:"",display_name:"Loading...",start_at:ue,end_at:ce,title:"",color_hue:260,tags:[],task_id:s,session_id:null,manual_entry_id:null};n.addBlock(Ce);try{await t.createBlock(s,{start_at:ue,end_at:ce}),await n.fetchCurrentView()}catch(We){n.removeBlock(de),console.error("Failed to create task block:",We)}}let u=0,h="",m=null;function p(D,g){g.preventDefault(),g.stopPropagation(),a.value=D,m=D,u=g.clientY,h=D.end_at,o.value=D.end_at;const s=x=>{if(!m)return;const b=x.clientY-u,O=ge(b/Z,15),ne=new Date(h).getTime()+O*6e4,N=new Date(m.start_at).getTime()+15*6e4;o.value=new Date(Math.max(ne,N)).toISOString()},_=async()=>{if(document.removeEventListener("mousemove",s),document.removeEventListener("mouseup",_),!m||!o.value){a.value=null;return}const x=m.id,b=o.value;if(b===h){a.value=null,o.value=null;return}try{m.task_id&&await t.updateBlock(x,{end_at:b}),n.updateBlock({...m,end_at:b})}catch(O){console.error("Failed to resize block:",O),n.updateBlock({...m,end_at:h})}a.value=null,o.value=null,m=null};document.addEventListener("mousemove",s),document.addEventListener("mouseup",_)}return{draggingTaskId:e,dragOverDay:r,resizingBlock:a,resizePreviewEnd:o,onDragStart:c,onDragOver:i,onDragLeave:l,onDrop:d,onResizeStart:p}}function Zt(t){return`hsla(${t}, 65%, 45%, 0.85)`}function en(t){return`hsla(${t}, 65%, 55%, 1)`}const tn={class:"px-1.5 py-1 h-full flex flex-col text-white overflow-hidden"},nn={class:"text-xs font-semibold leading-tight truncate"},rn={key:0,class:"text-xs opacity-75 truncate"},an={key:1,class:"text-xs opacity-75 mt-auto"},on=G({__name:"CalendarBlock",props:{block:{},lane:{},totalLanes:{},top:{},height:{},resizeEnd:{}},emits:["resizeStart","click"],setup(t,{emit:n}){const e=t,r=n,a=W(()=>e.resizeEnd?new Date(e.resizeEnd):new Date(e.block.end_at)),o=W(()=>{if(!e.resizeEnd)return e.height;const u=(a.value.getTime()-new Date(e.block.start_at).getTime())/6e4;return Math.max(u*(40/30),20)}),c=W(()=>{const d=a.value.getTime()-new Date(e.block.start_at).getTime();return U(d/36e5)}),i=W(()=>{const d=`calc(${100/e.totalLanes}% - 2px)`,u=`calc(${e.lane/e.totalLanes*100}% + 1px)`;return{top:`${e.top}px`,height:`${o.value}px`,width:d,left:u,backgroundColor:Zt(e.block.color_hue),borderColor:en(e.block.color_hue)}}),l=W(()=>o.value<40);return(d,u)=>(w(),v("div",{class:q(["absolute rounded overflow-hidden cursor-pointer select-none group",{"border-2":t.block.kind==="session","border-2 border-dashed opacity-80":t.block.kind==="planned","border-2 calendar-block--manual":t.block.kind==="manual"}]),style:j(i.value),onClick:u[1]||(u[1]=h=>r("click",t.block))},[f("div",tn,[f("p",nn,M(t.block.display_name),1),!l.value&&t.block.job_number?(w(),v("p",rn,M(t.block.job_number),1)):T("",!0),l.value?T("",!0):(w(),v("p",an,M(c.value),1))]),f("div",{class:"absolute bottom-0 left-0 right-0 h-2 cursor-s-resize opacity-0 group-hover:opacity-100 flex items-center justify-center",onMousedown:u[0]||(u[0]=De(h=>r("resizeStart",h),["stop"]))},[...u[2]||(u[2]=[f("div",{class:"w-8 h-0.5 bg-white/60 rounded"},null,-1)])],32)],6))}}),sn=$e(on,[["__scopeId","data-v-5829880c"]]),un={class:"flex overflow-auto h-full"},cn={class:"flex flex-1 gap-px min-w-0"},dn=["onDragover","onDrop"],ln={key:1,class:"absolute inset-0 bg-primary/10 pointer-events-none z-0"},Y=7,oe=19,V=40,fn=G({__name:"CalendarGrid",emits:["blockClick"],setup(t,{emit:n}){const e=Array.from({length:oe-Y+1},(p,D)=>Y+D),r=J(),a=Oe(),o=n,c=W(()=>r.view==="week"?r.weekDays:[r.currentDate]),i=P(new Date);function l(p){const D=r.getBlocksForDay(p);return Le(D)}function d(p){return je(new Date(p.start_at),Y)}function u(p){return He(new Date(p.start_at),new Date(p.end_at))}function h(p){var D;return((D=a.resizingBlock.value)==null?void 0:D.id)===p.id}function m(p){return p===12?"12 PM":p>12?`${p-12} PM`:`${p} AM`}return(p,D)=>(w(),v("div",un,[f("div",{class:"w-12 shrink-0 relative",style:j({height:`${(oe-Y+1)*V*2}px`})},[(w(!0),v(F,null,B(y(e),g=>(w(),v("div",{key:g,class:"absolute right-2 text-xs text-muted-foreground",style:j({top:`${(g-Y)*V*2-6}px`})},M(m(g)),5))),128))],4),f("div",cn,[(w(!0),v(F,null,B(c.value,g=>(w(),v("div",{key:y(P)(g),class:q(["flex-1 relative border-l border-border",{"bg-primary/5":y(P)(g)===y(i)}]),style:j({height:`${(oe-Y)*V*2}px`}),onDragover:s=>y(a).onDragOver(g,s),onDragleave:D[0]||(D[0]=s=>y(a).onDragLeave()),onDrop:s=>y(a).onDrop(g,s)},[y(r).view==="week"?(w(),v("div",{key:0,class:q(["sticky top-0 z-10 text-center py-1 text-xs font-medium border-b border-border bg-background",y(P)(g)===y(i)?"text-primary":"text-muted-foreground"])},[f("div",null,M(y(H)(g,"EEE")),1),f("div",{class:q(["inline-flex h-6 w-6 mx-auto items-center justify-center rounded-full text-sm",y(P)(g)===y(i)?"bg-primary text-primary-foreground":""])},M(y(H)(g,"d")),3)],2)):T("",!0),(w(!0),v(F,null,B(y(e),s=>(w(),v("div",{key:s,class:"absolute left-0 right-0 border-t border-border/40",style:j({top:`${(s-Y)*V*2}px`})},null,4))),128)),(w(!0),v(F,null,B(y(e).slice(0,-1),s=>(w(),v("div",{key:`half-${s}`,class:"absolute left-0 right-0 border-t border-border/20",style:j({top:`${(s-Y)*V*2+V}px`})},null,4))),128)),y(a).dragOverDay.value===y(P)(g)?(w(),v("div",ln)):T("",!0),(w(!0),v(F,null,B(l(g),({block:s,lane:_,totalLanes:x})=>(w(),Ye(sn,{key:s.id,block:s,lane:_,"total-lanes":x,top:d(s),height:u(s),"resize-end":h(s)?y(a).resizePreviewEnd.value:null,onClick:b=>o("blockClick",s),onResizeStart:b=>y(a).onResizeStart(s,b)},null,8,["block","lane","total-lanes","top","height","resize-end","onClick","onResizeStart"]))),128))],46,dn))),128))])]))}}),mn={class:"flex flex-col h-full bg-card border-l border-border"},hn={class:"p-3 border-b border-border flex items-center justify-between shrink-0"},gn={class:"flex-1 overflow-y-auto p-2 space-y-1.5"},wn={key:0,class:"text-xs text-muted-foreground p-2"},vn={key:1,class:"text-xs text-muted-foreground p-2 text-center"},yn=["onDragstart"],bn={class:"flex items-start gap-2"},kn={class:"flex-1 min-w-0"},xn={class:"text-xs font-medium text-foreground leading-tight truncate"},pn={class:"flex items-center gap-1.5 mt-1 flex-wrap"},Dn={key:0,class:"text-xs text-muted-foreground"},_n={key:0,class:"p-3 border-t border-border shrink-0"},Mn={class:"space-y-1"},Pn={class:"text-muted-foreground truncate max-w-[100px]"},Sn={class:"text-foreground"},Tn=G({__name:"PlannerSidebar",emits:["createTask"],setup(t,{emit:n}){const e=se(),r=J(),a=Oe(),o=n,c=W(()=>P(r.currentDate));_e(()=>{e.fetchForDate(c.value)});const i=u=>({todo:"outline",doing:"default",done:"success",cancelled:"secondary"})[u],l=u=>u>=4?"bg-red-500":u===3?"bg-amber-500":"bg-emerald-500",d=W(()=>{const u={};for(const h of e.tasks){const m=h.project_id??"_none";u[m]||(u[m]={name:h.project_id?m:"No Project",planned:0,actual:0}),u[m].planned+=h.estimate_hours??0,u[m].actual+=h.actual_hours??0}return Object.values(u)});return(u,h)=>(w(),v("div",mn,[f("div",hn,[h[2]||(h[2]=f("h3",{class:"text-sm font-semibold text-foreground"},"Planner",-1)),E(K,{size:"sm",variant:"ghost",onClick:h[0]||(h[0]=m=>o("createTask"))},{default:Q(()=>[...h[1]||(h[1]=[f("svg",{class:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[f("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M12 4v16m8-8H4"})],-1)])]),_:1})]),f("div",gn,[y(e).loading?(w(),v("div",wn,"Loading...")):y(e).tasks.length===0?(w(),v("div",vn," No tasks for today ")):T("",!0),(w(!0),v(F,null,B(y(e).tasks,m=>(w(),v("div",{key:m.id,class:"rounded-md border border-border bg-background p-2 cursor-grab active:cursor-grabbing hover:border-primary/50 transition-colors",draggable:"true",onDragstart:p=>y(a).onDragStart(m,p)},[f("div",bn,[f("div",{class:q(["h-2 w-2 rounded-full mt-1.5 shrink-0",l(m.priority)])},null,2),f("div",kn,[f("p",xn,M(m.title),1),f("div",pn,[E(Ne,{variant:i(m.status),class:"text-xs py-0"},{default:Q(()=>[pe(M(m.status),1)]),_:2},1032,["variant"]),m.estimate_hours?(w(),v("span",Dn,M(y(U)(m.estimate_hours)),1)):T("",!0)])])])],40,yn))),128))]),d.value.length?(w(),v("div",_n,[h[3]||(h[3]=f("p",{class:"text-xs font-medium text-muted-foreground mb-2"},"Plan vs Actual",-1)),f("div",Mn,[(w(!0),v(F,null,B(d.value,m=>(w(),v("div",{key:m.name,class:"flex items-center justify-between text-xs"},[f("span",Pn,M(m.name),1),f("span",Sn,M(y(U)(m.planned))+" / "+M(y(U)(m.actual)),1)]))),128))])])):T("",!0)]))}}),On={class:"h-full flex flex-col"},Cn={class:"p-4 border-b border-border flex items-center gap-3 flex-wrap"},Wn={class:"flex items-center gap-2 ml-auto"},En={class:"flex-1 flex overflow-hidden"},$n={class:"flex-1 overflow-auto"},Yn={key:0,class:"w-56 shrink-0 overflow-hidden"},Fn={class:"bg-card border border-border rounded-lg shadow-xl p-4 w-72"},Bn={class:"flex items-start justify-between gap-2 mb-3"},Nn={class:"font-semibold text-sm text-foreground"},Ln={key:0,class:"text-xs text-muted-foreground"},jn={class:"space-y-1 text-xs text-muted-foreground"},Hn={key:0,class:"mt-2 flex flex-wrap gap-1"},Jn=G({__name:"CalendarView",setup(t){const n=J(),e=se(),r=S(!0),a=S(!1),o=S(null);_e(()=>{n.fetchCurrentView()});function c(l){o.value=l}async function i(l){try{await e.create(l),me.success("Task created"),a.value=!1,e.fetchForDate(P(n.currentDate))}catch{me.error("Failed to create task")}}return(l,d)=>(w(),v("div",On,[f("div",Cn,[E(Ut),f("div",Wn,[f("button",{class:"text-xs text-muted-foreground hover:text-foreground transition-colors",onClick:d[0]||(d[0]=u=>r.value=!r.value)},M(r.value?"Hide Planner":"Show Planner"),1)])]),f("div",En,[f("div",$n,[E(fn,{onBlockClick:c})]),r.value?(w(),v("div",Yn,[E(Tn,{onCreateTask:d[1]||(d[1]=u=>a.value=!0)})])):T("",!0)]),o.value?(w(),v("div",{key:0,class:"fixed inset-0 z-40 flex items-center justify-center p-4",onClick:d[3]||(d[3]=De(u=>o.value=null,["self"]))},[f("div",Fn,[f("div",Bn,[f("div",null,[f("p",Nn,M(o.value.display_name),1),o.value.job_number?(w(),v("p",Ln,M(o.value.job_number),1)):T("",!0)]),f("button",{class:"text-muted-foreground hover:text-foreground",onClick:d[2]||(d[2]=u=>o.value=null)},[...d[5]||(d[5]=[f("svg",{class:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[f("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M6 18L18 6M6 6l12 12"})],-1)])])]),f("div",jn,[f("p",null,"Start: "+M(new Date(o.value.start_at).toLocaleString()),1),f("p",null,"End: "+M(new Date(o.value.end_at).toLocaleString()),1),f("p",null,"Type: "+M(o.value.kind),1)]),o.value.tags.length?(w(),v("div",Hn,[(w(!0),v(F,null,B(o.value.tags,u=>(w(),v("span",{key:u.id,class:"px-1.5 py-0.5 rounded text-xs",style:j({background:`${u.color_hex}22`,color:u.color_hex})},M(u.name),5))),128))])):T("",!0)])])):T("",!0),E(Be,{open:a.value,"default-date":y(P)(y(n).currentDate),onClose:d[4]||(d[4]=u=>a.value=!1),onSave:i},null,8,["open","default-date"])]))}});export{Jn as default}; diff --git a/src/static/assets/CardContent.vue_vue_type_script_setup_true_lang-p2CthxwA.js b/src/static/assets/CardContent.vue_vue_type_script_setup_true_lang-UcbhRP8Z.js similarity index 73% rename from src/static/assets/CardContent.vue_vue_type_script_setup_true_lang-p2CthxwA.js rename to src/static/assets/CardContent.vue_vue_type_script_setup_true_lang-UcbhRP8Z.js index 279efef..77b99e5 100644 --- a/src/static/assets/CardContent.vue_vue_type_script_setup_true_lang-p2CthxwA.js +++ b/src/static/assets/CardContent.vue_vue_type_script_setup_true_lang-UcbhRP8Z.js @@ -1 +1 @@ -import{c as e}from"./utils-BKH6bEpf.js";import{d as o,c as t,p as n,i as c,s as p,o as l}from"./index-CsAuQ78D.js";const _=o({__name:"Card",props:{class:{}},setup(s){const a=s;return(r,d)=>(l(),t("div",{class:n(c(e)("rounded-lg border bg-card text-card-foreground shadow-sm",a.class))},[p(r.$slots,"default")],2))}}),f=o({__name:"CardContent",props:{class:{}},setup(s){const a=s;return(r,d)=>(l(),t("div",{class:n(c(e)("p-6 pt-0",a.class))},[p(r.$slots,"default")],2))}});export{_,f as a}; +import{c as e}from"./utils-B1YxgOQw.js";import{d as o,c as t,p as n,i as c,s as p,o as l}from"./index-CO3lBHVT.js";const _=o({__name:"Card",props:{class:{}},setup(s){const a=s;return(r,d)=>(l(),t("div",{class:n(c(e)("rounded-lg border bg-card text-card-foreground shadow-sm",a.class))},[p(r.$slots,"default")],2))}}),f=o({__name:"CardContent",props:{class:{}},setup(s){const a=s;return(r,d)=>(l(),t("div",{class:n(c(e)("p-6 pt-0",a.class))},[p(r.$slots,"default")],2))}});export{_,f as a}; diff --git a/src/static/assets/CardTitle.vue_vue_type_script_setup_true_lang-Bt6Ti-pL.js b/src/static/assets/CardTitle.vue_vue_type_script_setup_true_lang-CpgNrOxB.js similarity index 75% rename from src/static/assets/CardTitle.vue_vue_type_script_setup_true_lang-Bt6Ti-pL.js rename to src/static/assets/CardTitle.vue_vue_type_script_setup_true_lang-CpgNrOxB.js index f32d341..e1e9f64 100644 --- a/src/static/assets/CardTitle.vue_vue_type_script_setup_true_lang-Bt6Ti-pL.js +++ b/src/static/assets/CardTitle.vue_vue_type_script_setup_true_lang-CpgNrOxB.js @@ -1 +1 @@ -import{c as t}from"./utils-BKH6bEpf.js";import{d as o,o as n,c as r,p as c,i as l,s as p}from"./index-CsAuQ78D.js";const f=o({__name:"CardHeader",props:{class:{}},setup(s){const e=s;return(a,i)=>(n(),r("div",{class:c(l(t)("flex flex-col space-y-1.5 p-6",e.class))},[p(a.$slots,"default")],2))}}),_=o({__name:"CardTitle",props:{class:{}},setup(s){const e=s;return(a,i)=>(n(),r("h3",{class:c(l(t)("text-lg font-semibold leading-none tracking-tight",e.class))},[p(a.$slots,"default")],2))}});export{f as _,_ as a}; +import{c as t}from"./utils-B1YxgOQw.js";import{d as o,o as n,c as r,p as c,i as l,s as p}from"./index-CO3lBHVT.js";const f=o({__name:"CardHeader",props:{class:{}},setup(s){const e=s;return(a,i)=>(n(),r("div",{class:c(l(t)("flex flex-col space-y-1.5 p-6",e.class))},[p(a.$slots,"default")],2))}}),_=o({__name:"CardTitle",props:{class:{}},setup(s){const e=s;return(a,i)=>(n(),r("h3",{class:c(l(t)("text-lg font-semibold leading-none tracking-tight",e.class))},[p(a.$slots,"default")],2))}});export{f as _,_ as a}; diff --git a/src/static/assets/DashboardView-DLjSgvQE.js b/src/static/assets/DashboardView-CQAK2qP6.js similarity index 89% rename from src/static/assets/DashboardView-DLjSgvQE.js rename to src/static/assets/DashboardView-CQAK2qP6.js index 3f05984..25ef111 100644 --- a/src/static/assets/DashboardView-DLjSgvQE.js +++ b/src/static/assets/DashboardView-CQAK2qP6.js @@ -1 +1 @@ -import{d as E,n as K,w as i,o as e,a as s,e as r,t as c,c as t,j,k as y,p as O,v as Q,x as X,F as x,l as h,y as U,z as W,i as k,r as g,m as N,A as S}from"./index-CsAuQ78D.js";import{d as _}from"./dashboard-Dw2iyYza.js";import{_ as b,a as $}from"./CardContent.vue_vue_type_script_setup_true_lang-p2CthxwA.js";import{_ as T,a as A}from"./CardTitle.vue_vue_type_script_setup_true_lang-Bt6Ti-pL.js";import{_ as Y}from"./Progress.vue_vue_type_script_setup_true_lang-Dd5JfY7g.js";import{_ as Z}from"./Button.vue_vue_type_script_setup_true_lang-DnS8FWjO.js";import{f as w,i as L}from"./utils-BKH6bEpf.js";const ee={class:"flex items-start justify-between gap-2"},te={class:"flex-1 min-w-0"},se={class:"text-[11px] text-muted-foreground font-semibold uppercase tracking-widest truncate"},oe={class:"mt-1.5"},le={key:0,class:"h-8 w-24 bg-muted animate-pulse rounded"},ae={key:1,class:"text-2xl font-bold text-foreground tracking-tight"},ne={key:0,class:"text-xs text-muted-foreground mt-1 truncate"},re={key:0,class:"h-10 w-10 rounded-xl bg-primary/10 ring-1 ring-primary/20 flex items-center justify-center shrink-0"},de={key:0,class:"h-5 w-5 text-primary",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},ie={key:1,class:"h-5 w-5 text-primary",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},ue={key:2,class:"h-5 w-5 text-primary",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},ce={key:3,class:"h-5 w-5 text-primary",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},me={key:4,class:"h-5 w-5 text-primary",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},ve={key:5,class:"h-5 w-5 text-primary",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},fe={key:0,class:"mt-3 flex items-center gap-1.5 text-xs"},ge={class:"h-3.5 w-3.5",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},xe={key:0,"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2.5",d:"M5 10l7-7m0 0l7 7m-7-7v18"},he={key:1,"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2.5",d:"M19 14l-7 7m0 0l-7-7m7 7V3"},pe={key:2,"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2.5",d:"M5 12h14"},p=E({__name:"KpiCard",props:{label:{},value:{},icon:{},trend:{},description:{},loading:{type:Boolean}},setup(d){return(m,a)=>(e(),K(b,{class:"relative overflow-hidden transition-all duration-200 hover:shadow-md hover:-translate-y-px"},{default:i(()=>[a[8]||(a[8]=s("span",{class:"pointer-events-none absolute -right-6 -top-6 h-16 w-16 rounded-full bg-primary/5"},null,-1)),a[9]||(a[9]=s("span",{class:"pointer-events-none absolute -right-2 -top-2 h-8 w-8 rounded-full bg-primary/8"},null,-1)),r($,{class:"p-5"},{default:i(()=>[s("div",ee,[s("div",te,[s("p",se,c(d.label),1),s("div",oe,[d.loading?(e(),t("div",le)):(e(),t("p",ae,c(d.value),1))]),d.description?(e(),t("p",ne,c(d.description),1)):j("",!0)]),d.icon?(e(),t("div",re,[d.icon==="clock"?(e(),t("svg",de,[...a[0]||(a[0]=[s("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z"},null,-1)])])):d.icon==="calendar"?(e(),t("svg",ie,[...a[1]||(a[1]=[s("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z"},null,-1)])])):d.icon==="folder"?(e(),t("svg",ue,[...a[2]||(a[2]=[s("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M3 7a2 2 0 012-2h3.586a1 1 0 01.707.293l1.414 1.414A1 1 0 0011.414 7H19a2 2 0 012 2v9a2 2 0 01-2 2H5a2 2 0 01-2-2V7z"},null,-1)])])):d.icon==="trending-up"?(e(),t("svg",ce,[...a[3]||(a[3]=[s("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M13 7h8m0 0v8m0-8l-8 8-4-4-6 6"},null,-1)])])):d.icon==="git"?(e(),t("svg",me,[...a[4]||(a[4]=[s("circle",{cx:"12",cy:"12",r:"4",stroke:"currentColor","stroke-width":"2"},null,-1),s("path",{"stroke-linecap":"round","stroke-width":"2",d:"M2 12h6M16 12h6"},null,-1)])])):(e(),t("svg",ve,[...a[5]||(a[5]=[s("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0 00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363 1.118l1.518 4.674c.3.922-.755 1.688-1.538 1.118l-3.976-2.888a1 1 0 00-1.176 0l-3.976 2.888c-.783.57-1.838-.197-1.538-1.118l1.518-4.674a1 1 0 00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0 00.951-.69l1.519-4.674z"},null,-1)])]))])):j("",!0)]),d.trend!==void 0?(e(),t("div",fe,[s("div",{class:O(["flex items-center gap-1 font-semibold",d.trend>0?"text-emerald-500":d.trend<0?"text-red-400":"text-muted-foreground"])},[(e(),t("svg",ge,[d.trend>0?(e(),t("path",xe)):d.trend<0?(e(),t("path",he)):(e(),t("path",pe))])),y(" "+c(d.trend>0?"+":"")+c(Math.abs(d.trend))+"% ",1)],2),a[6]||(a[6]=s("span",{class:"text-muted-foreground"},"vs last period",-1))])):j("",!0),a[7]||(a[7]=s("div",{class:"mt-3 h-0.5 w-12 rounded-full bg-primary/30"},null,-1))]),_:1})]),_:1}))}}),ye={class:"p-6 space-y-6"},ke={class:"flex flex-wrap items-center gap-3"},_e={class:"flex items-center rounded-md border border-border overflow-hidden"},we=["onClick"],be={class:"grid grid-cols-2 md:grid-cols-3 xl:grid-cols-6 gap-4"},$e={class:"grid grid-cols-1 lg:grid-cols-2 gap-6"},je={key:0,class:"h-40 flex items-center justify-center text-sm text-muted-foreground"},Ce={key:1,class:"h-40 flex items-center justify-center text-sm text-muted-foreground"},Me={key:2,class:"h-40 flex items-end gap-px"},De=["title"],Be={key:0,class:"h-40 flex items-center justify-center text-sm text-muted-foreground"},Ve={key:1,class:"h-40 flex items-center justify-center text-sm text-muted-foreground"},ze={key:2,class:"h-40 flex items-end gap-2"},He=["title"],Ne={class:"text-xs text-muted-foreground"},Te={class:"grid grid-cols-1 lg:grid-cols-2 gap-6"},Ae={key:0,class:"space-y-2"},Fe={key:1,class:"text-sm text-muted-foreground py-4 text-center"},Pe={key:2,class:"space-y-2"},Se={class:"text-xs text-foreground w-24 truncate shrink-0"},Le={class:"flex-1 h-2 bg-secondary rounded-full overflow-hidden"},Ue={class:"text-xs text-muted-foreground w-10 text-right shrink-0"},We={key:0,class:"space-y-2"},Ee={key:1,class:"text-sm text-muted-foreground py-4 text-center"},Ke={key:2,class:"space-y-2"},Oe={class:"flex items-center justify-between text-xs mb-0.5"},Re={class:"text-foreground truncate max-w-[160px]"},qe={class:"text-muted-foreground shrink-0"},tt=E({__name:"DashboardView",setup(d){const m=g("30d"),a=g(""),C=g(""),f=g(null),F=g([]),M=g([]),D=g([]),B=g([]),u=g(!1),R=N(()=>{const n=new Date,l=L(n);if(m.value==="today")return{from:l,to:l};if(m.value==="7d"){const v=new Date(n);return v.setDate(n.getDate()-7),{from:L(v),to:l}}else if(m.value==="30d"){const v=new Date(n);return v.setDate(n.getDate()-30),{from:L(v),to:l}}else return{from:a.value||l,to:C.value||l}});async function P(){if(!(m.value==="custom"&&(!a.value||!C.value))){u.value=!0;try{const n=R.value,[l,v,V,z,H]=await Promise.all([_.summary(n),_.projects(n),_.monthly(n),_.dow(n),_.tools(n)]);f.value=l.data,F.value=v.data,M.value=V.data,D.value=z.data,B.value=H.data}catch(n){console.error("Failed to load dashboard data",n)}finally{u.value=!1}}}Q(m,()=>{m.value!=="custom"&&P()}),X(()=>P());const q=N(()=>Math.max(...M.value.map(n=>n.hours),1)),G=N(()=>Math.max(...D.value.map(n=>n.hours),1)),I=N(()=>Math.max(...B.value.map(n=>n.pct),1)),J=n=>n?n>90?"danger":n>70?"warning":"success":"default";return(n,l)=>{var v,V,z,H;return e(),t("div",ye,[s("div",ke,[l[4]||(l[4]=s("h2",{class:"text-lg font-semibold text-foreground flex-1"},"Overview",-1)),s("div",_e,[(e(),t(x,null,h(["today","7d","30d","custom"],o=>s("button",{key:o,class:O(["px-3 py-1.5 text-xs font-medium transition-colors",m.value===o?"bg-primary text-primary-foreground":"text-muted-foreground hover:text-foreground hover:bg-muted"]),onClick:Ge=>m.value=o},c(o==="today"?"Today":o==="7d"?"7 days":o==="30d"?"30 days":"Custom"),11,we)),64))]),m.value==="custom"?(e(),t(x,{key:0},[U(s("input",{"onUpdate:modelValue":l[0]||(l[0]=o=>a.value=o),type:"date",class:"h-8 rounded-md border border-input bg-background px-2 text-xs text-foreground focus:outline-none focus:ring-2 focus:ring-ring"},null,512),[[W,a.value]]),l[3]||(l[3]=s("span",{class:"text-xs text-muted-foreground"},"to",-1)),U(s("input",{"onUpdate:modelValue":l[1]||(l[1]=o=>C.value=o),type:"date",class:"h-8 rounded-md border border-input bg-background px-2 text-xs text-foreground focus:outline-none focus:ring-2 focus:ring-ring"},null,512),[[W,C.value]]),r(Z,{size:"sm",loading:u.value,onClick:P},{default:i(()=>[...l[2]||(l[2]=[y("Apply",-1)])]),_:1},8,["loading"])],64)):j("",!0)]),s("div",be,[r(p,{label:"Total Hours",value:f.value?k(w)(f.value.total_hours):"-",icon:"clock",loading:u.value},null,8,["value","loading"]),r(p,{label:"Working Days",value:((v=f.value)==null?void 0:v.working_days)??"-",icon:"calendar",loading:u.value},null,8,["value","loading"]),r(p,{label:"Projects",value:((V=f.value)==null?void 0:V.total_projects)??"-",icon:"folder",loading:u.value},null,8,["value","loading"]),r(p,{label:"Avg / Day",value:f.value?k(w)(f.value.avg_hours_per_day):"-",icon:"trending-up",loading:u.value},null,8,["value","loading"]),r(p,{label:"Top Project",value:((z=f.value)==null?void 0:z.top_project)??"-",icon:"star",loading:u.value},null,8,["value","loading"]),r(p,{label:"Commits",value:((H=f.value)==null?void 0:H.total_commits)??"-",icon:"git",loading:u.value},null,8,["value","loading"])]),s("div",$e,[r(b,null,{default:i(()=>[r(T,{class:"pb-2"},{default:i(()=>[r(A,{class:"text-sm"},{default:i(()=>[...l[5]||(l[5]=[y("Hours by Day",-1)])]),_:1})]),_:1}),r($,null,{default:i(()=>[u.value?(e(),t("div",je," Loading... ")):M.value.length===0?(e(),t("div",Ce," No data ")):(e(),t("div",Me,[(e(!0),t(x,null,h(M.value,o=>(e(),t("div",{key:o.date,class:"flex-1 flex flex-col items-center gap-0.5 group",title:`${o.date}: ${k(w)(o.hours)}`},[s("div",{class:"w-full bg-primary/70 hover:bg-primary rounded-t transition-colors",style:S({height:`${o.hours/q.value*100}%`})},null,4)],8,De))),128))]))]),_:1})]),_:1}),r(b,null,{default:i(()=>[r(T,{class:"pb-2"},{default:i(()=>[r(A,{class:"text-sm"},{default:i(()=>[...l[6]||(l[6]=[y("Hours by Day of Week",-1)])]),_:1})]),_:1}),r($,null,{default:i(()=>[u.value?(e(),t("div",Be," Loading... ")):D.value.length===0?(e(),t("div",Ve," No data ")):(e(),t("div",ze,[(e(!0),t(x,null,h(D.value,o=>(e(),t("div",{key:o.dow,class:"flex-1 flex flex-col items-center gap-1"},[s("div",{class:"w-full bg-primary/70 hover:bg-primary rounded-t transition-colors",style:S({height:`${Math.max(o.hours/G.value*100,2)}%`}),title:`${k(w)(o.hours)}`},null,12,He),s("span",Ne,c(o.label.slice(0,2)),1)]))),128))]))]),_:1})]),_:1})]),s("div",Te,[r(b,null,{default:i(()=>[r(T,{class:"pb-2"},{default:i(()=>[r(A,{class:"text-sm"},{default:i(()=>[...l[7]||(l[7]=[y("Tool Usage",-1)])]),_:1})]),_:1}),r($,null,{default:i(()=>[u.value?(e(),t("div",Ae,[(e(),t(x,null,h(5,o=>s("div",{key:o,class:"h-6 bg-muted animate-pulse rounded"})),64))])):B.value.length===0?(e(),t("div",Fe," No data ")):(e(),t("div",Pe,[(e(!0),t(x,null,h(B.value.slice(0,8),o=>(e(),t("div",{key:o.tool,class:"flex items-center gap-2"},[s("span",Se,c(o.tool),1),s("div",Le,[s("div",{class:"h-full bg-primary rounded-full",style:S({width:`${o.pct/I.value*100}%`})},null,4)]),s("span",Ue,c(o.pct.toFixed(0))+"% ",1)]))),128))]))]),_:1})]),_:1}),r(b,null,{default:i(()=>[r(T,{class:"pb-2"},{default:i(()=>[r(A,{class:"text-sm"},{default:i(()=>[...l[8]||(l[8]=[y("Projects",-1)])]),_:1})]),_:1}),r($,null,{default:i(()=>[u.value?(e(),t("div",We,[(e(),t(x,null,h(5,o=>s("div",{key:o,class:"h-8 bg-muted animate-pulse rounded"})),64))])):F.value.length===0?(e(),t("div",Ee," No data ")):(e(),t("div",Ke,[(e(!0),t(x,null,h(F.value.slice(0,8),o=>(e(),t("div",{key:o.project_id},[s("div",Oe,[s("span",Re,c(o.display_name),1),s("span",qe,c(k(w)(o.total_hours)),1)]),o.progress_pct!==null?(e(),K(Y,{key:0,value:o.progress_pct,color:J(o.progress_pct)},null,8,["value","color"])):j("",!0)]))),128))]))]),_:1})]),_:1})])])}}});export{tt as default}; +import{d as E,n as K,w as i,o as e,a as s,e as r,t as c,c as t,j,k as y,p as O,v as Q,x as X,F as x,l as h,y as U,z as W,i as k,r as g,m as N,A as S}from"./index-CO3lBHVT.js";import{d as _}from"./dashboard-4_z0ZWLj.js";import{_ as b,a as $}from"./CardContent.vue_vue_type_script_setup_true_lang-UcbhRP8Z.js";import{_ as T,a as A}from"./CardTitle.vue_vue_type_script_setup_true_lang-CpgNrOxB.js";import{_ as Y}from"./Progress.vue_vue_type_script_setup_true_lang-C9HXKxSB.js";import{_ as Z}from"./Button.vue_vue_type_script_setup_true_lang-BwCrpRUQ.js";import{f as w,i as L}from"./utils-B1YxgOQw.js";const ee={class:"flex items-start justify-between gap-2"},te={class:"flex-1 min-w-0"},se={class:"text-[11px] text-muted-foreground font-semibold uppercase tracking-widest truncate"},oe={class:"mt-1.5"},le={key:0,class:"h-8 w-24 bg-muted animate-pulse rounded"},ae={key:1,class:"text-2xl font-bold text-foreground tracking-tight"},ne={key:0,class:"text-xs text-muted-foreground mt-1 truncate"},re={key:0,class:"h-10 w-10 rounded-xl bg-primary/10 ring-1 ring-primary/20 flex items-center justify-center shrink-0"},de={key:0,class:"h-5 w-5 text-primary",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},ie={key:1,class:"h-5 w-5 text-primary",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},ue={key:2,class:"h-5 w-5 text-primary",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},ce={key:3,class:"h-5 w-5 text-primary",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},me={key:4,class:"h-5 w-5 text-primary",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},ve={key:5,class:"h-5 w-5 text-primary",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},fe={key:0,class:"mt-3 flex items-center gap-1.5 text-xs"},ge={class:"h-3.5 w-3.5",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},xe={key:0,"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2.5",d:"M5 10l7-7m0 0l7 7m-7-7v18"},he={key:1,"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2.5",d:"M19 14l-7 7m0 0l-7-7m7 7V3"},pe={key:2,"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2.5",d:"M5 12h14"},p=E({__name:"KpiCard",props:{label:{},value:{},icon:{},trend:{},description:{},loading:{type:Boolean}},setup(d){return(m,a)=>(e(),K(b,{class:"relative overflow-hidden transition-all duration-200 hover:shadow-md hover:-translate-y-px"},{default:i(()=>[a[8]||(a[8]=s("span",{class:"pointer-events-none absolute -right-6 -top-6 h-16 w-16 rounded-full bg-primary/5"},null,-1)),a[9]||(a[9]=s("span",{class:"pointer-events-none absolute -right-2 -top-2 h-8 w-8 rounded-full bg-primary/8"},null,-1)),r($,{class:"p-5"},{default:i(()=>[s("div",ee,[s("div",te,[s("p",se,c(d.label),1),s("div",oe,[d.loading?(e(),t("div",le)):(e(),t("p",ae,c(d.value),1))]),d.description?(e(),t("p",ne,c(d.description),1)):j("",!0)]),d.icon?(e(),t("div",re,[d.icon==="clock"?(e(),t("svg",de,[...a[0]||(a[0]=[s("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z"},null,-1)])])):d.icon==="calendar"?(e(),t("svg",ie,[...a[1]||(a[1]=[s("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z"},null,-1)])])):d.icon==="folder"?(e(),t("svg",ue,[...a[2]||(a[2]=[s("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M3 7a2 2 0 012-2h3.586a1 1 0 01.707.293l1.414 1.414A1 1 0 0011.414 7H19a2 2 0 012 2v9a2 2 0 01-2 2H5a2 2 0 01-2-2V7z"},null,-1)])])):d.icon==="trending-up"?(e(),t("svg",ce,[...a[3]||(a[3]=[s("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M13 7h8m0 0v8m0-8l-8 8-4-4-6 6"},null,-1)])])):d.icon==="git"?(e(),t("svg",me,[...a[4]||(a[4]=[s("circle",{cx:"12",cy:"12",r:"4",stroke:"currentColor","stroke-width":"2"},null,-1),s("path",{"stroke-linecap":"round","stroke-width":"2",d:"M2 12h6M16 12h6"},null,-1)])])):(e(),t("svg",ve,[...a[5]||(a[5]=[s("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0 00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363 1.118l1.518 4.674c.3.922-.755 1.688-1.538 1.118l-3.976-2.888a1 1 0 00-1.176 0l-3.976 2.888c-.783.57-1.838-.197-1.538-1.118l1.518-4.674a1 1 0 00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0 00.951-.69l1.519-4.674z"},null,-1)])]))])):j("",!0)]),d.trend!==void 0?(e(),t("div",fe,[s("div",{class:O(["flex items-center gap-1 font-semibold",d.trend>0?"text-emerald-500":d.trend<0?"text-red-400":"text-muted-foreground"])},[(e(),t("svg",ge,[d.trend>0?(e(),t("path",xe)):d.trend<0?(e(),t("path",he)):(e(),t("path",pe))])),y(" "+c(d.trend>0?"+":"")+c(Math.abs(d.trend))+"% ",1)],2),a[6]||(a[6]=s("span",{class:"text-muted-foreground"},"vs last period",-1))])):j("",!0),a[7]||(a[7]=s("div",{class:"mt-3 h-0.5 w-12 rounded-full bg-primary/30"},null,-1))]),_:1})]),_:1}))}}),ye={class:"p-6 space-y-6"},ke={class:"flex flex-wrap items-center gap-3"},_e={class:"flex items-center rounded-md border border-border overflow-hidden"},we=["onClick"],be={class:"grid grid-cols-2 md:grid-cols-3 xl:grid-cols-6 gap-4"},$e={class:"grid grid-cols-1 lg:grid-cols-2 gap-6"},je={key:0,class:"h-40 flex items-center justify-center text-sm text-muted-foreground"},Ce={key:1,class:"h-40 flex items-center justify-center text-sm text-muted-foreground"},Me={key:2,class:"h-40 flex items-end gap-px"},De=["title"],Be={key:0,class:"h-40 flex items-center justify-center text-sm text-muted-foreground"},Ve={key:1,class:"h-40 flex items-center justify-center text-sm text-muted-foreground"},ze={key:2,class:"h-40 flex items-end gap-2"},He=["title"],Ne={class:"text-xs text-muted-foreground"},Te={class:"grid grid-cols-1 lg:grid-cols-2 gap-6"},Ae={key:0,class:"space-y-2"},Fe={key:1,class:"text-sm text-muted-foreground py-4 text-center"},Pe={key:2,class:"space-y-2"},Se={class:"text-xs text-foreground w-24 truncate shrink-0"},Le={class:"flex-1 h-2 bg-secondary rounded-full overflow-hidden"},Ue={class:"text-xs text-muted-foreground w-10 text-right shrink-0"},We={key:0,class:"space-y-2"},Ee={key:1,class:"text-sm text-muted-foreground py-4 text-center"},Ke={key:2,class:"space-y-2"},Oe={class:"flex items-center justify-between text-xs mb-0.5"},Re={class:"text-foreground truncate max-w-[160px]"},qe={class:"text-muted-foreground shrink-0"},tt=E({__name:"DashboardView",setup(d){const m=g("30d"),a=g(""),C=g(""),f=g(null),F=g([]),M=g([]),D=g([]),B=g([]),u=g(!1),R=N(()=>{const n=new Date,l=L(n);if(m.value==="today")return{from:l,to:l};if(m.value==="7d"){const v=new Date(n);return v.setDate(n.getDate()-7),{from:L(v),to:l}}else if(m.value==="30d"){const v=new Date(n);return v.setDate(n.getDate()-30),{from:L(v),to:l}}else return{from:a.value||l,to:C.value||l}});async function P(){if(!(m.value==="custom"&&(!a.value||!C.value))){u.value=!0;try{const n=R.value,[l,v,V,z,H]=await Promise.all([_.summary(n),_.projects(n),_.monthly(n),_.dow(n),_.tools(n)]);f.value=l.data,F.value=v.data,M.value=V.data,D.value=z.data,B.value=H.data}catch(n){console.error("Failed to load dashboard data",n)}finally{u.value=!1}}}Q(m,()=>{m.value!=="custom"&&P()}),X(()=>P());const q=N(()=>Math.max(...M.value.map(n=>n.hours),1)),G=N(()=>Math.max(...D.value.map(n=>n.hours),1)),I=N(()=>Math.max(...B.value.map(n=>n.pct),1)),J=n=>n?n>90?"danger":n>70?"warning":"success":"default";return(n,l)=>{var v,V,z,H;return e(),t("div",ye,[s("div",ke,[l[4]||(l[4]=s("h2",{class:"text-lg font-semibold text-foreground flex-1"},"Overview",-1)),s("div",_e,[(e(),t(x,null,h(["today","7d","30d","custom"],o=>s("button",{key:o,class:O(["px-3 py-1.5 text-xs font-medium transition-colors",m.value===o?"bg-primary text-primary-foreground":"text-muted-foreground hover:text-foreground hover:bg-muted"]),onClick:Ge=>m.value=o},c(o==="today"?"Today":o==="7d"?"7 days":o==="30d"?"30 days":"Custom"),11,we)),64))]),m.value==="custom"?(e(),t(x,{key:0},[U(s("input",{"onUpdate:modelValue":l[0]||(l[0]=o=>a.value=o),type:"date",class:"h-8 rounded-md border border-input bg-background px-2 text-xs text-foreground focus:outline-none focus:ring-2 focus:ring-ring"},null,512),[[W,a.value]]),l[3]||(l[3]=s("span",{class:"text-xs text-muted-foreground"},"to",-1)),U(s("input",{"onUpdate:modelValue":l[1]||(l[1]=o=>C.value=o),type:"date",class:"h-8 rounded-md border border-input bg-background px-2 text-xs text-foreground focus:outline-none focus:ring-2 focus:ring-ring"},null,512),[[W,C.value]]),r(Z,{size:"sm",loading:u.value,onClick:P},{default:i(()=>[...l[2]||(l[2]=[y("Apply",-1)])]),_:1},8,["loading"])],64)):j("",!0)]),s("div",be,[r(p,{label:"Total Hours",value:f.value?k(w)(f.value.total_hours):"-",icon:"clock",loading:u.value},null,8,["value","loading"]),r(p,{label:"Working Days",value:((v=f.value)==null?void 0:v.working_days)??"-",icon:"calendar",loading:u.value},null,8,["value","loading"]),r(p,{label:"Projects",value:((V=f.value)==null?void 0:V.total_projects)??"-",icon:"folder",loading:u.value},null,8,["value","loading"]),r(p,{label:"Avg / Day",value:f.value?k(w)(f.value.avg_hours_per_day):"-",icon:"trending-up",loading:u.value},null,8,["value","loading"]),r(p,{label:"Top Project",value:((z=f.value)==null?void 0:z.top_project)??"-",icon:"star",loading:u.value},null,8,["value","loading"]),r(p,{label:"Commits",value:((H=f.value)==null?void 0:H.total_commits)??"-",icon:"git",loading:u.value},null,8,["value","loading"])]),s("div",$e,[r(b,null,{default:i(()=>[r(T,{class:"pb-2"},{default:i(()=>[r(A,{class:"text-sm"},{default:i(()=>[...l[5]||(l[5]=[y("Hours by Day",-1)])]),_:1})]),_:1}),r($,null,{default:i(()=>[u.value?(e(),t("div",je," Loading... ")):M.value.length===0?(e(),t("div",Ce," No data ")):(e(),t("div",Me,[(e(!0),t(x,null,h(M.value,o=>(e(),t("div",{key:o.date,class:"flex-1 flex flex-col items-center gap-0.5 group",title:`${o.date}: ${k(w)(o.hours)}`},[s("div",{class:"w-full bg-primary/70 hover:bg-primary rounded-t transition-colors",style:S({height:`${o.hours/q.value*100}%`})},null,4)],8,De))),128))]))]),_:1})]),_:1}),r(b,null,{default:i(()=>[r(T,{class:"pb-2"},{default:i(()=>[r(A,{class:"text-sm"},{default:i(()=>[...l[6]||(l[6]=[y("Hours by Day of Week",-1)])]),_:1})]),_:1}),r($,null,{default:i(()=>[u.value?(e(),t("div",Be," Loading... ")):D.value.length===0?(e(),t("div",Ve," No data ")):(e(),t("div",ze,[(e(!0),t(x,null,h(D.value,o=>(e(),t("div",{key:o.dow,class:"flex-1 flex flex-col items-center gap-1"},[s("div",{class:"w-full bg-primary/70 hover:bg-primary rounded-t transition-colors",style:S({height:`${Math.max(o.hours/G.value*100,2)}%`}),title:`${k(w)(o.hours)}`},null,12,He),s("span",Ne,c(o.label.slice(0,2)),1)]))),128))]))]),_:1})]),_:1})]),s("div",Te,[r(b,null,{default:i(()=>[r(T,{class:"pb-2"},{default:i(()=>[r(A,{class:"text-sm"},{default:i(()=>[...l[7]||(l[7]=[y("Tool Usage",-1)])]),_:1})]),_:1}),r($,null,{default:i(()=>[u.value?(e(),t("div",Ae,[(e(),t(x,null,h(5,o=>s("div",{key:o,class:"h-6 bg-muted animate-pulse rounded"})),64))])):B.value.length===0?(e(),t("div",Fe," No data ")):(e(),t("div",Pe,[(e(!0),t(x,null,h(B.value.slice(0,8),o=>(e(),t("div",{key:o.tool,class:"flex items-center gap-2"},[s("span",Se,c(o.tool),1),s("div",Le,[s("div",{class:"h-full bg-primary rounded-full",style:S({width:`${o.pct/I.value*100}%`})},null,4)]),s("span",Ue,c((o.pct??0).toFixed(0))+"% ",1)]))),128))]))]),_:1})]),_:1}),r(b,null,{default:i(()=>[r(T,{class:"pb-2"},{default:i(()=>[r(A,{class:"text-sm"},{default:i(()=>[...l[8]||(l[8]=[y("Projects",-1)])]),_:1})]),_:1}),r($,null,{default:i(()=>[u.value?(e(),t("div",We,[(e(),t(x,null,h(5,o=>s("div",{key:o,class:"h-8 bg-muted animate-pulse rounded"})),64))])):F.value.length===0?(e(),t("div",Ee," No data ")):(e(),t("div",Ke,[(e(!0),t(x,null,h(F.value.slice(0,8),o=>(e(),t("div",{key:o.project_id},[s("div",Oe,[s("span",Re,c(o.display_name),1),s("span",qe,c(k(w)(o.total_hours)),1)]),o.progress_pct!==null?(e(),K(Y,{key:0,value:o.progress_pct,color:J(o.progress_pct)},null,8,["value","color"])):j("",!0)]))),128))]))]),_:1})]),_:1})])])}}});export{tt as default}; diff --git a/src/static/assets/Dialog.vue_vue_type_script_setup_true_lang-Cj3qRfUm.js b/src/static/assets/Dialog.vue_vue_type_script_setup_true_lang-DU2Z0xrF.js similarity index 90% rename from src/static/assets/Dialog.vue_vue_type_script_setup_true_lang-Cj3qRfUm.js rename to src/static/assets/Dialog.vue_vue_type_script_setup_true_lang-DU2Z0xrF.js index a77832f..2d70860 100644 --- a/src/static/assets/Dialog.vue_vue_type_script_setup_true_lang-Cj3qRfUm.js +++ b/src/static/assets/Dialog.vue_vue_type_script_setup_true_lang-DU2Z0xrF.js @@ -1 +1 @@ -import{d as y,x as k,E as b,n as h,G as x,e as c,T as g,w as u,o as a,c as n,a as o,s as r,t as m,j as i,p as w}from"./index-CsAuQ78D.js";import{_ as $}from"./Button.vue_vue_type_script_setup_true_lang-DnS8FWjO.js";const C={key:0,class:"fixed inset-0 z-50 flex items-center justify-center p-4"},B=["aria-label"],j={key:0,class:"flex items-center justify-between p-6 pb-4"},E={class:"text-lg font-semibold text-foreground"},z={key:0,class:"text-sm text-muted-foreground mt-1"},L={class:"px-6 pb-4"},M={key:1,class:"flex justify-end gap-2 px-6 pb-6"},V=y({__name:"Dialog",props:{open:{type:Boolean},title:{},description:{},maxWidth:{default:"max-w-lg"}},emits:["close"],setup(e,{emit:f}){const p=e,l=f;function d(t){t.key==="Escape"&&p.open&&l("close")}return k(()=>document.addEventListener("keydown",d)),b(()=>document.removeEventListener("keydown",d)),(t,s)=>(a(),h(x,{to:"body"},[c(g,{"enter-active-class":"transition-opacity duration-200","enter-from-class":"opacity-0","enter-to-class":"opacity-100","leave-active-class":"transition-opacity duration-200","leave-from-class":"opacity-100","leave-to-class":"opacity-0"},{default:u(()=>[e.open?(a(),n("div",C,[o("div",{class:"absolute inset-0 bg-black/60 backdrop-blur-sm",onClick:s[0]||(s[0]=v=>l("close"))}),o("div",{class:w(["relative w-full bg-card border border-border rounded-lg shadow-xl z-10",e.maxWidth]),role:"dialog","aria-modal":!0,"aria-label":e.title},[e.title||t.$slots.header?(a(),n("div",j,[o("div",null,[r(t.$slots,"header",{},()=>[o("h2",E,m(e.title),1),e.description?(a(),n("p",z,m(e.description),1)):i("",!0)])]),c($,{variant:"ghost",size:"icon",class:"shrink-0",onClick:s[1]||(s[1]=v=>l("close"))},{default:u(()=>[...s[2]||(s[2]=[o("svg",{class:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[o("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M6 18L18 6M6 6l12 12"})],-1)])]),_:1})])):i("",!0),o("div",L,[r(t.$slots,"default")]),t.$slots.footer?(a(),n("div",M,[r(t.$slots,"footer")])):i("",!0)],10,B)])):i("",!0)]),_:3})]))}});export{V as _}; +import{d as y,x as k,E as b,n as h,G as x,e as c,T as g,w as u,o as a,c as n,a as o,s as r,t as m,j as i,p as w}from"./index-CO3lBHVT.js";import{_ as $}from"./Button.vue_vue_type_script_setup_true_lang-BwCrpRUQ.js";const C={key:0,class:"fixed inset-0 z-50 flex items-center justify-center p-4"},B=["aria-label"],j={key:0,class:"flex items-center justify-between p-6 pb-4"},E={class:"text-lg font-semibold text-foreground"},z={key:0,class:"text-sm text-muted-foreground mt-1"},L={class:"px-6 pb-4"},M={key:1,class:"flex justify-end gap-2 px-6 pb-6"},V=y({__name:"Dialog",props:{open:{type:Boolean},title:{},description:{},maxWidth:{default:"max-w-lg"}},emits:["close"],setup(e,{emit:f}){const p=e,l=f;function d(t){t.key==="Escape"&&p.open&&l("close")}return k(()=>document.addEventListener("keydown",d)),b(()=>document.removeEventListener("keydown",d)),(t,s)=>(a(),h(x,{to:"body"},[c(g,{"enter-active-class":"transition-opacity duration-200","enter-from-class":"opacity-0","enter-to-class":"opacity-100","leave-active-class":"transition-opacity duration-200","leave-from-class":"opacity-100","leave-to-class":"opacity-0"},{default:u(()=>[e.open?(a(),n("div",C,[o("div",{class:"absolute inset-0 bg-black/60 backdrop-blur-sm",onClick:s[0]||(s[0]=v=>l("close"))}),o("div",{class:w(["relative w-full bg-card border border-border rounded-lg shadow-xl z-10",e.maxWidth]),role:"dialog","aria-modal":!0,"aria-label":e.title},[e.title||t.$slots.header?(a(),n("div",j,[o("div",null,[r(t.$slots,"header",{},()=>[o("h2",E,m(e.title),1),e.description?(a(),n("p",z,m(e.description),1)):i("",!0)])]),c($,{variant:"ghost",size:"icon",class:"shrink-0",onClick:s[1]||(s[1]=v=>l("close"))},{default:u(()=>[...s[2]||(s[2]=[o("svg",{class:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[o("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M6 18L18 6M6 6l12 12"})],-1)])]),_:1})])):i("",!0),o("div",L,[r(t.$slots,"default")]),t.$slots.footer?(a(),n("div",M,[r(t.$slots,"footer")])):i("",!0)],10,B)])):i("",!0)]),_:3})]))}});export{V as _}; diff --git a/src/static/assets/Input.vue_vue_type_script_setup_true_lang-DbqPHpNb.js b/src/static/assets/Input.vue_vue_type_script_setup_true_lang-CDN6a_dJ.js similarity index 89% rename from src/static/assets/Input.vue_vue_type_script_setup_true_lang-DbqPHpNb.js rename to src/static/assets/Input.vue_vue_type_script_setup_true_lang-CDN6a_dJ.js index 98bb561..ccd458e 100644 --- a/src/static/assets/Input.vue_vue_type_script_setup_true_lang-DbqPHpNb.js +++ b/src/static/assets/Input.vue_vue_type_script_setup_true_lang-CDN6a_dJ.js @@ -1 +1 @@ -import{c as i}from"./utils-BKH6bEpf.js";import{d,c as s,p as u,i as m,o as r}from"./index-CsAuQ78D.js";const c=["id","name","type","value","placeholder","disabled","autocomplete","min","max","step"],g=d({__name:"Input",props:{modelValue:{},type:{},placeholder:{},disabled:{type:Boolean},class:{},id:{},name:{},autocomplete:{},min:{},max:{},step:{}},emits:["update:modelValue","change","blur","focus"],setup(e,{emit:a}){const n=e,o=a;return(f,t)=>(r(),s("input",{id:e.id,name:e.name,type:e.type??"text",value:e.modelValue,placeholder:e.placeholder,disabled:e.disabled,autocomplete:e.autocomplete,min:e.min,max:e.max,step:e.step,class:u(m(i)("flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm","ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium","placeholder:text-muted-foreground","focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2","disabled:cursor-not-allowed disabled:opacity-50",n.class)),onInput:t[0]||(t[0]=l=>o("update:modelValue",l.target.value)),onChange:t[1]||(t[1]=l=>o("change",l.target.value)),onBlur:t[2]||(t[2]=l=>o("blur",l)),onFocus:t[3]||(t[3]=l=>o("focus",l))},null,42,c))}});export{g as _}; +import{c as i}from"./utils-B1YxgOQw.js";import{d,c as s,p as u,i as m,o as r}from"./index-CO3lBHVT.js";const c=["id","name","type","value","placeholder","disabled","autocomplete","min","max","step"],g=d({__name:"Input",props:{modelValue:{},type:{},placeholder:{},disabled:{type:Boolean},class:{},id:{},name:{},autocomplete:{},min:{},max:{},step:{}},emits:["update:modelValue","change","blur","focus"],setup(e,{emit:a}){const n=e,o=a;return(f,t)=>(r(),s("input",{id:e.id,name:e.name,type:e.type??"text",value:e.modelValue,placeholder:e.placeholder,disabled:e.disabled,autocomplete:e.autocomplete,min:e.min,max:e.max,step:e.step,class:u(m(i)("flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm","ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium","placeholder:text-muted-foreground","focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2","disabled:cursor-not-allowed disabled:opacity-50",n.class)),onInput:t[0]||(t[0]=l=>o("update:modelValue",l.target.value)),onChange:t[1]||(t[1]=l=>o("change",l.target.value)),onBlur:t[2]||(t[2]=l=>o("blur",l)),onFocus:t[3]||(t[3]=l=>o("focus",l))},null,42,c))}});export{g as _}; diff --git a/src/static/assets/KeysView-CK48n_iC.js b/src/static/assets/KeysView-BzDjpAPG.js similarity index 89% rename from src/static/assets/KeysView-CK48n_iC.js rename to src/static/assets/KeysView-BzDjpAPG.js index 8b71ccb..431f2a1 100644 --- a/src/static/assets/KeysView-CK48n_iC.js +++ b/src/static/assets/KeysView-BzDjpAPG.js @@ -1 +1 @@ -import{a as b}from"./admin-CFFp_mFQ.js";import{_ as K,a as $}from"./CardContent.vue_vue_type_script_setup_true_lang-p2CthxwA.js";import{_ as v}from"./Button.vue_vue_type_script_setup_true_lang-DnS8FWjO.js";import{_ as V}from"./Dialog.vue_vue_type_script_setup_true_lang-Cj3qRfUm.js";import{_ as N}from"./Input.vue_vue_type_script_setup_true_lang-DbqPHpNb.js";import{_ as A,a as k}from"./utils-BKH6bEpf.js";import{d as B,x as L,c as l,a as t,e as r,w as n,r as i,o as a,k as p,F as P,l as j,t as u,i as h,n as F,j as I,K as y}from"./index-CsAuQ78D.js";const D={class:"p-6"},R={class:"flex items-center justify-between mb-6"},z={key:0,class:"flex items-center justify-center h-20"},M={key:1,class:"text-center text-muted-foreground py-8 text-sm"},T={key:2,class:"w-full"},U={class:"px-4 py-3 text-sm text-foreground"},E={class:"px-4 py-3 text-sm font-mono text-muted-foreground"},H={class:"px-4 py-3 text-xs text-muted-foreground"},S={class:"px-4 py-3 text-xs text-muted-foreground"},q={class:"px-4 py-3 text-right"},G={class:"space-y-4"},J={key:0,class:"rounded-md bg-emerald-500/10 border border-emerald-500/30 p-3"},O={class:"text-xs font-mono text-foreground break-all"},Q={key:1,class:"space-y-1.5"},le=B({__name:"KeysView",setup(W){const f=i([]),_=i(!1),c=i(!1),m=i(""),x=i(!1),d=i(null);L(()=>g());async function g(){_.value=!0;try{const o=await b.keys();f.value=o.data}finally{_.value=!1}}async function w(){if(m.value.trim()){x.value=!0;try{const o=await b.createKey({label:m.value});d.value=o.data.key,y.success("API key created"),await g(),m.value=""}catch{y.error("Failed to create key")}finally{x.value=!1}}}async function C(o){if(confirm(`Revoke key "${o.label}"? This cannot be undone.`))try{await b.revokeKey(o.id),y.success("Key revoked"),f.value=f.value.filter(e=>e.id!==o.id)}catch{y.error("Failed to revoke key")}}return(o,e)=>(a(),l("div",D,[t("div",R,[e[5]||(e[5]=t("h2",{class:"text-lg font-semibold text-foreground"},"API Keys",-1)),r(v,{size:"sm",onClick:e[0]||(e[0]=s=>{c.value=!0,d.value=null})},{default:n(()=>[...e[4]||(e[4]=[t("svg",{class:"h-4 w-4 mr-1.5",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[t("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M12 4v16m8-8H4"})],-1),p(" New Key ",-1)])]),_:1})]),r(K,null,{default:n(()=>[r($,{class:"p-0"},{default:n(()=>[_.value?(a(),l("div",z,[r(A,{class:"text-primary"})])):f.value.length===0?(a(),l("div",M," No API keys ")):(a(),l("table",T,[e[7]||(e[7]=t("thead",null,[t("tr",{class:"border-b border-border"},[t("th",{class:"text-left text-xs font-medium text-muted-foreground px-4 py-3"},"Label"),t("th",{class:"text-left text-xs font-medium text-muted-foreground px-4 py-3"},"Prefix"),t("th",{class:"text-left text-xs font-medium text-muted-foreground px-4 py-3"},"Created"),t("th",{class:"text-left text-xs font-medium text-muted-foreground px-4 py-3"},"Last Used"),t("th",{class:"px-4 py-3"})])],-1)),t("tbody",null,[(a(!0),l(P,null,j(f.value,s=>(a(),l("tr",{key:s.id,class:"border-b border-border last:border-0 hover:bg-muted/30"},[t("td",U,u(s.label),1),t("td",E,u(s.prefix)+"...",1),t("td",H,u(h(k)(s.created_at)),1),t("td",S,u(s.last_used?h(k)(s.last_used):"Never"),1),t("td",q,[r(v,{variant:"ghost",size:"sm",class:"text-destructive",onClick:X=>C(s)},{default:n(()=>[...e[6]||(e[6]=[p(" Revoke ",-1)])]),_:1},8,["onClick"])])]))),128))])]))]),_:1})]),_:1}),r(V,{open:c.value,title:"Create API Key",onClose:e[3]||(e[3]=s=>c.value=!1)},{footer:n(()=>[r(v,{variant:"outline",onClick:e[2]||(e[2]=s=>c.value=!1)},{default:n(()=>[p(u(d.value?"Done":"Cancel"),1)]),_:1}),d.value?I("",!0):(a(),F(v,{key:0,loading:x.value,onClick:w},{default:n(()=>[...e[10]||(e[10]=[p(" Create ",-1)])]),_:1},8,["loading"]))]),default:n(()=>[t("div",G,[d.value?(a(),l("div",J,[e[8]||(e[8]=t("p",{class:"text-xs text-emerald-400 font-medium mb-1"},"Key created — save it now!",-1)),t("p",O,u(d.value),1)])):(a(),l("div",Q,[e[9]||(e[9]=t("label",{class:"text-sm font-medium text-foreground"},"Label",-1)),r(N,{modelValue:m.value,"onUpdate:modelValue":e[1]||(e[1]=s=>m.value=s),placeholder:"e.g. claude-collector",disabled:x.value},null,8,["modelValue","disabled"])]))])]),_:1},8,["open"])]))}});export{le as default}; +import{a as b}from"./admin-s3id3yDK.js";import{_ as K,a as $}from"./CardContent.vue_vue_type_script_setup_true_lang-UcbhRP8Z.js";import{_ as v}from"./Button.vue_vue_type_script_setup_true_lang-BwCrpRUQ.js";import{_ as V}from"./Dialog.vue_vue_type_script_setup_true_lang-DU2Z0xrF.js";import{_ as N}from"./Input.vue_vue_type_script_setup_true_lang-CDN6a_dJ.js";import{_ as A,a as k}from"./utils-B1YxgOQw.js";import{d as B,x as L,c as l,a as t,e as r,w as n,r as i,o as a,k as p,F as P,l as j,t as u,i as h,n as F,j as I,K as y}from"./index-CO3lBHVT.js";const D={class:"p-6"},R={class:"flex items-center justify-between mb-6"},z={key:0,class:"flex items-center justify-center h-20"},M={key:1,class:"text-center text-muted-foreground py-8 text-sm"},T={key:2,class:"w-full"},U={class:"px-4 py-3 text-sm text-foreground"},E={class:"px-4 py-3 text-sm font-mono text-muted-foreground"},H={class:"px-4 py-3 text-xs text-muted-foreground"},S={class:"px-4 py-3 text-xs text-muted-foreground"},q={class:"px-4 py-3 text-right"},G={class:"space-y-4"},J={key:0,class:"rounded-md bg-emerald-500/10 border border-emerald-500/30 p-3"},O={class:"text-xs font-mono text-foreground break-all"},Q={key:1,class:"space-y-1.5"},le=B({__name:"KeysView",setup(W){const f=i([]),_=i(!1),c=i(!1),m=i(""),x=i(!1),d=i(null);L(()=>g());async function g(){_.value=!0;try{const o=await b.keys();f.value=o.data}finally{_.value=!1}}async function w(){if(m.value.trim()){x.value=!0;try{const o=await b.createKey({label:m.value});d.value=o.data.key,y.success("API key created"),await g(),m.value=""}catch{y.error("Failed to create key")}finally{x.value=!1}}}async function C(o){if(confirm(`Revoke key "${o.label}"? This cannot be undone.`))try{await b.revokeKey(o.id),y.success("Key revoked"),f.value=f.value.filter(e=>e.id!==o.id)}catch{y.error("Failed to revoke key")}}return(o,e)=>(a(),l("div",D,[t("div",R,[e[5]||(e[5]=t("h2",{class:"text-lg font-semibold text-foreground"},"API Keys",-1)),r(v,{size:"sm",onClick:e[0]||(e[0]=s=>{c.value=!0,d.value=null})},{default:n(()=>[...e[4]||(e[4]=[t("svg",{class:"h-4 w-4 mr-1.5",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[t("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M12 4v16m8-8H4"})],-1),p(" New Key ",-1)])]),_:1})]),r(K,null,{default:n(()=>[r($,{class:"p-0"},{default:n(()=>[_.value?(a(),l("div",z,[r(A,{class:"text-primary"})])):f.value.length===0?(a(),l("div",M," No API keys ")):(a(),l("table",T,[e[7]||(e[7]=t("thead",null,[t("tr",{class:"border-b border-border"},[t("th",{class:"text-left text-xs font-medium text-muted-foreground px-4 py-3"},"Label"),t("th",{class:"text-left text-xs font-medium text-muted-foreground px-4 py-3"},"Prefix"),t("th",{class:"text-left text-xs font-medium text-muted-foreground px-4 py-3"},"Created"),t("th",{class:"text-left text-xs font-medium text-muted-foreground px-4 py-3"},"Last Used"),t("th",{class:"px-4 py-3"})])],-1)),t("tbody",null,[(a(!0),l(P,null,j(f.value,s=>(a(),l("tr",{key:s.id,class:"border-b border-border last:border-0 hover:bg-muted/30"},[t("td",U,u(s.label),1),t("td",E,u(s.prefix)+"...",1),t("td",H,u(h(k)(s.created_at)),1),t("td",S,u(s.last_used?h(k)(s.last_used):"Never"),1),t("td",q,[r(v,{variant:"ghost",size:"sm",class:"text-destructive",onClick:X=>C(s)},{default:n(()=>[...e[6]||(e[6]=[p(" Revoke ",-1)])]),_:1},8,["onClick"])])]))),128))])]))]),_:1})]),_:1}),r(V,{open:c.value,title:"Create API Key",onClose:e[3]||(e[3]=s=>c.value=!1)},{footer:n(()=>[r(v,{variant:"outline",onClick:e[2]||(e[2]=s=>c.value=!1)},{default:n(()=>[p(u(d.value?"Done":"Cancel"),1)]),_:1}),d.value?I("",!0):(a(),F(v,{key:0,loading:x.value,onClick:w},{default:n(()=>[...e[10]||(e[10]=[p(" Create ",-1)])]),_:1},8,["loading"]))]),default:n(()=>[t("div",G,[d.value?(a(),l("div",J,[e[8]||(e[8]=t("p",{class:"text-xs text-emerald-400 font-medium mb-1"},"Key created — save it now!",-1)),t("p",O,u(d.value),1)])):(a(),l("div",Q,[e[9]||(e[9]=t("label",{class:"text-sm font-medium text-foreground"},"Label",-1)),r(N,{modelValue:m.value,"onUpdate:modelValue":e[1]||(e[1]=s=>m.value=s),placeholder:"e.g. claude-collector",disabled:x.value},null,8,["modelValue","disabled"])]))])]),_:1},8,["open"])]))}});export{le as default}; diff --git a/src/static/assets/LiveView-EzK82NTo.js b/src/static/assets/LiveView-4Mk1DKtX.js similarity index 94% rename from src/static/assets/LiveView-EzK82NTo.js rename to src/static/assets/LiveView-4Mk1DKtX.js index 2e968a7..7ed5e74 100644 --- a/src/static/assets/LiveView-EzK82NTo.js +++ b/src/static/assets/LiveView-4Mk1DKtX.js @@ -1 +1 @@ -import{E as j,r as g,d as L,u as J,x as O,c as d,a as r,p as b,i,t as v,n as T,w as x,j as k,e as E,o as l,k as S,F as V,l as B,m as F}from"./index-CsAuQ78D.js";import{_ as z,a as A}from"./CardContent.vue_vue_type_script_setup_true_lang-p2CthxwA.js";import{_ as w}from"./Button.vue_vue_type_script_setup_true_lang-DnS8FWjO.js";import"./utils-BKH6bEpf.js";function D(C){const e=g([]),f=g(!1),o=g(null);let s=null,u=null,m=!1;function p(){if(!m)try{s=new EventSource(C),s.onopen=()=>{f.value=!0,o.value=null},s.onmessage=n=>{try{const h=JSON.parse(n.data);e.value.push({type:"message",data:h}),e.value.length>200&&e.value.shift()}catch{e.value.push({type:"message",data:n.data})}},s.addEventListener("session_start",n=>{try{e.value.push({type:"session_start",data:JSON.parse(n.data)})}catch{e.value.push({type:"session_start",data:n.data})}e.value.length>200&&e.value.shift()}),s.addEventListener("session_end",n=>{try{e.value.push({type:"session_end",data:JSON.parse(n.data)})}catch{e.value.push({type:"session_end",data:n.data})}e.value.length>200&&e.value.shift()}),s.addEventListener("activity",n=>{try{e.value.push({type:"activity",data:JSON.parse(n.data)})}catch{e.value.push({type:"activity",data:n.data})}e.value.length>200&&e.value.shift()}),s.onerror=()=>{f.value=!1,o.value="Connection lost, reconnecting...",s==null||s.close(),s=null,m||(u=setTimeout(()=>p(),5e3))}}catch{o.value="Failed to connect to event stream",m||(u=setTimeout(()=>p(),5e3))}}function _(){m=!0,u&&clearTimeout(u),s==null||s.close(),s=null,f.value=!1}function y(){e.value=[]}return j(()=>{_()}),{events:e,connected:f,error:o,connect:p,disconnect:_,clearEvents:y}}const $={class:"p-6 h-full flex flex-col"},I={class:"flex items-center gap-3 mb-4"},M={class:"flex items-center gap-2"},P={class:"text-xs text-muted-foreground"},R={key:0,class:"mb-4 text-xs text-amber-400 bg-amber-500/10 border border-amber-500/30 rounded px-3 py-2"},U={key:0,class:"flex items-center justify-center h-full text-sm text-muted-foreground"},W={key:1,class:"overflow-y-auto h-full font-mono text-xs"},q={class:"flex-1 min-w-0"},G={class:"flex items-center gap-2 flex-wrap"},H={key:0,class:"text-muted-foreground"},K={class:"text-muted-foreground truncate mt-0.5"},ee=L({__name:"LiveView",setup(C){const e=J(),{events:f,connected:o,error:s,connect:u,clearEvents:m}=D("/cc-dashboard/api/events/stream");O(()=>{e.isAuthenticated&&u()});const p=F(()=>[...f.value].reverse().slice(0,100));function _(t){return t==="session_start"?"text-emerald-400":t==="session_end"?"text-amber-400":t==="activity"?"text-blue-400":"text-muted-foreground"}function y(t){return t==="session_start"?"▶":t==="session_end"?"■":t==="activity"?"●":"○"}function n(t){if(typeof t=="string")return t;if(t&&typeof t=="object"){const a=t;return a.message||a.summary||JSON.stringify(t)}return String(t)}function h(t){if(t&&typeof t=="object"){const a=t;return a.display_name||a.project_id||""}return""}return(t,a)=>(l(),d("div",$,[r("div",I,[a[2]||(a[2]=r("h2",{class:"text-lg font-semibold text-foreground flex-1"},"Live Feed",-1)),r("div",M,[r("div",{class:b(["h-2 w-2 rounded-full",i(o)?"bg-emerald-500 animate-pulse":"bg-red-500"])},null,2),r("span",P,v(i(o)?"Connected":"Disconnected"),1)]),i(o)?k("",!0):(l(),T(w,{key:0,variant:"outline",size:"sm",onClick:i(u)},{default:x(()=>[...a[0]||(a[0]=[S(" Reconnect ",-1)])]),_:1},8,["onClick"])),E(w,{variant:"ghost",size:"sm",onClick:i(m)},{default:x(()=>[...a[1]||(a[1]=[S(" Clear ",-1)])]),_:1},8,["onClick"])]),i(s)&&!i(o)?(l(),d("div",R,v(i(s)),1)):k("",!0),E(z,{class:"flex-1 overflow-hidden"},{default:x(()=>[E(A,{class:"p-0 h-full"},{default:x(()=>[p.value.length===0?(l(),d("div",U,[...a[3]||(a[3]=[r("div",{class:"text-center"},[r("div",{class:"text-2xl mb-2"},"📡"),r("p",null,"Waiting for events..."),r("p",{class:"text-xs mt-1"},"Activity will appear here in real-time")],-1)])])):(l(),d("div",W,[(l(!0),d(V,null,B(p.value,(c,N)=>(l(),d("div",{key:N,class:"flex items-start gap-2 px-4 py-1.5 hover:bg-muted/50 border-b border-border/30"},[r("span",{class:b([_(c.type),"shrink-0 mt-0.5"])},v(y(c.type)),3),r("div",q,[r("div",G,[r("span",{class:b([_(c.type),"font-medium"])},v(c.type),3),h(c.data)?(l(),d("span",H,v(h(c.data)),1)):k("",!0)]),r("p",K,v(n(c.data)),1)])]))),128))]))]),_:1})]),_:1})]))}});export{ee as default}; +import{E as j,r as g,d as L,u as J,x as O,c as d,a as r,p as b,i,t as v,n as T,w as x,j as k,e as E,o as l,k as S,F as V,l as B,m as F}from"./index-CO3lBHVT.js";import{_ as z,a as A}from"./CardContent.vue_vue_type_script_setup_true_lang-UcbhRP8Z.js";import{_ as w}from"./Button.vue_vue_type_script_setup_true_lang-BwCrpRUQ.js";import"./utils-B1YxgOQw.js";function D(C){const e=g([]),f=g(!1),o=g(null);let s=null,u=null,m=!1;function p(){if(!m)try{s=new EventSource(C),s.onopen=()=>{f.value=!0,o.value=null},s.onmessage=n=>{try{const h=JSON.parse(n.data);e.value.push({type:"message",data:h}),e.value.length>200&&e.value.shift()}catch{e.value.push({type:"message",data:n.data})}},s.addEventListener("session_start",n=>{try{e.value.push({type:"session_start",data:JSON.parse(n.data)})}catch{e.value.push({type:"session_start",data:n.data})}e.value.length>200&&e.value.shift()}),s.addEventListener("session_end",n=>{try{e.value.push({type:"session_end",data:JSON.parse(n.data)})}catch{e.value.push({type:"session_end",data:n.data})}e.value.length>200&&e.value.shift()}),s.addEventListener("activity",n=>{try{e.value.push({type:"activity",data:JSON.parse(n.data)})}catch{e.value.push({type:"activity",data:n.data})}e.value.length>200&&e.value.shift()}),s.onerror=()=>{f.value=!1,o.value="Connection lost, reconnecting...",s==null||s.close(),s=null,m||(u=setTimeout(()=>p(),5e3))}}catch{o.value="Failed to connect to event stream",m||(u=setTimeout(()=>p(),5e3))}}function _(){m=!0,u&&clearTimeout(u),s==null||s.close(),s=null,f.value=!1}function y(){e.value=[]}return j(()=>{_()}),{events:e,connected:f,error:o,connect:p,disconnect:_,clearEvents:y}}const $={class:"p-6 h-full flex flex-col"},I={class:"flex items-center gap-3 mb-4"},M={class:"flex items-center gap-2"},P={class:"text-xs text-muted-foreground"},R={key:0,class:"mb-4 text-xs text-amber-400 bg-amber-500/10 border border-amber-500/30 rounded px-3 py-2"},U={key:0,class:"flex items-center justify-center h-full text-sm text-muted-foreground"},W={key:1,class:"overflow-y-auto h-full font-mono text-xs"},q={class:"flex-1 min-w-0"},G={class:"flex items-center gap-2 flex-wrap"},H={key:0,class:"text-muted-foreground"},K={class:"text-muted-foreground truncate mt-0.5"},ee=L({__name:"LiveView",setup(C){const e=J(),{events:f,connected:o,error:s,connect:u,clearEvents:m}=D("/cc-dashboard/api/events/stream");O(()=>{e.isAuthenticated&&u()});const p=F(()=>[...f.value].reverse().slice(0,100));function _(t){return t==="session_start"?"text-emerald-400":t==="session_end"?"text-amber-400":t==="activity"?"text-blue-400":"text-muted-foreground"}function y(t){return t==="session_start"?"▶":t==="session_end"?"■":t==="activity"?"●":"○"}function n(t){if(typeof t=="string")return t;if(t&&typeof t=="object"){const a=t;return a.message||a.summary||JSON.stringify(t)}return String(t)}function h(t){if(t&&typeof t=="object"){const a=t;return a.display_name||a.project_id||""}return""}return(t,a)=>(l(),d("div",$,[r("div",I,[a[2]||(a[2]=r("h2",{class:"text-lg font-semibold text-foreground flex-1"},"Live Feed",-1)),r("div",M,[r("div",{class:b(["h-2 w-2 rounded-full",i(o)?"bg-emerald-500 animate-pulse":"bg-red-500"])},null,2),r("span",P,v(i(o)?"Connected":"Disconnected"),1)]),i(o)?k("",!0):(l(),T(w,{key:0,variant:"outline",size:"sm",onClick:i(u)},{default:x(()=>[...a[0]||(a[0]=[S(" Reconnect ",-1)])]),_:1},8,["onClick"])),E(w,{variant:"ghost",size:"sm",onClick:i(m)},{default:x(()=>[...a[1]||(a[1]=[S(" Clear ",-1)])]),_:1},8,["onClick"])]),i(s)&&!i(o)?(l(),d("div",R,v(i(s)),1)):k("",!0),E(z,{class:"flex-1 overflow-hidden"},{default:x(()=>[E(A,{class:"p-0 h-full"},{default:x(()=>[p.value.length===0?(l(),d("div",U,[...a[3]||(a[3]=[r("div",{class:"text-center"},[r("div",{class:"text-2xl mb-2"},"📡"),r("p",null,"Waiting for events..."),r("p",{class:"text-xs mt-1"},"Activity will appear here in real-time")],-1)])])):(l(),d("div",W,[(l(!0),d(V,null,B(p.value,(c,N)=>(l(),d("div",{key:N,class:"flex items-start gap-2 px-4 py-1.5 hover:bg-muted/50 border-b border-border/30"},[r("span",{class:b([_(c.type),"shrink-0 mt-0.5"])},v(y(c.type)),3),r("div",q,[r("div",G,[r("span",{class:b([_(c.type),"font-medium"])},v(c.type),3),h(c.data)?(l(),d("span",H,v(h(c.data)),1)):k("",!0)]),r("p",K,v(n(c.data)),1)])]))),128))]))]),_:1})]),_:1})]))}});export{ee as default}; diff --git a/src/static/assets/LoginView-9xmDEijf.js b/src/static/assets/LoginView-C8KUpWjz.js similarity index 87% rename from src/static/assets/LoginView-9xmDEijf.js rename to src/static/assets/LoginView-C8KUpWjz.js index c44867b..3cf3c7d 100644 --- a/src/static/assets/LoginView-9xmDEijf.js +++ b/src/static/assets/LoginView-C8KUpWjz.js @@ -1 +1 @@ -import{d as g,u as b,c as u,a as s,b as _,e as a,w as i,o as m,f as h,g as w,h as y,i as o,t as V,j as k,k as C,r as c}from"./index-CsAuQ78D.js";import{_ as S}from"./Button.vue_vue_type_script_setup_true_lang-DnS8FWjO.js";import{_ as p}from"./Input.vue_vue_type_script_setup_true_lang-DbqPHpNb.js";import{_ as N,a as j}from"./CardContent.vue_vue_type_script_setup_true_lang-p2CthxwA.js";import"./utils-BKH6bEpf.js";const B={class:"min-h-screen flex items-center justify-center bg-background p-4"},$={class:"w-full max-w-sm"},q={key:0,class:"rounded-md bg-destructive/10 border border-destructive/30 px-3 py-2 text-sm text-destructive"},z={class:"space-y-1.5"},D={class:"space-y-1.5"},U=g({__name:"LoginView",setup(E){const f=h(),v=w(),t=b(),r=c(""),l=c("");async function x(){try{await t.login(r.value,l.value);const n=v.query.redirect;f.push(n??"/")}catch{}}return(n,e)=>(m(),u("div",B,[s("div",$,[e[5]||(e[5]=_('

CC Dashboard

Corporate Planning Hub

',1)),a(N,null,{default:i(()=>[a(j,{class:"pt-6"},{default:i(()=>[s("form",{class:"space-y-4",onSubmit:y(x,["prevent"])},[o(t).error?(m(),u("div",q,V(o(t).error),1)):k("",!0),s("div",z,[e[2]||(e[2]=s("label",{for:"email",class:"text-sm font-medium text-foreground"},"Email",-1)),a(p,{id:"email",modelValue:r.value,"onUpdate:modelValue":e[0]||(e[0]=d=>r.value=d),type:"email",placeholder:"you@company.com",autocomplete:"email",disabled:o(t).loading,required:""},null,8,["modelValue","disabled"])]),s("div",D,[e[3]||(e[3]=s("label",{for:"password",class:"text-sm font-medium text-foreground"},"Password",-1)),a(p,{id:"password",modelValue:l.value,"onUpdate:modelValue":e[1]||(e[1]=d=>l.value=d),type:"password",placeholder:"••••••••",autocomplete:"current-password",disabled:o(t).loading,required:""},null,8,["modelValue","disabled"])]),a(S,{type:"submit",class:"w-full",loading:o(t).loading},{default:i(()=>[...e[4]||(e[4]=[C(" Sign in ",-1)])]),_:1},8,["loading"])],32)]),_:1})]),_:1})])]))}});export{U as default}; +import{d as g,u as b,c as u,a as s,b as _,e as a,w as i,o as m,f as h,g as w,h as y,i as o,t as V,j as k,k as C,r as c}from"./index-CO3lBHVT.js";import{_ as S}from"./Button.vue_vue_type_script_setup_true_lang-BwCrpRUQ.js";import{_ as p}from"./Input.vue_vue_type_script_setup_true_lang-CDN6a_dJ.js";import{_ as N,a as j}from"./CardContent.vue_vue_type_script_setup_true_lang-UcbhRP8Z.js";import"./utils-B1YxgOQw.js";const B={class:"min-h-screen flex items-center justify-center bg-background p-4"},$={class:"w-full max-w-sm"},q={key:0,class:"rounded-md bg-destructive/10 border border-destructive/30 px-3 py-2 text-sm text-destructive"},z={class:"space-y-1.5"},D={class:"space-y-1.5"},U=g({__name:"LoginView",setup(E){const f=h(),v=w(),t=b(),r=c(""),l=c("");async function x(){try{await t.login(r.value,l.value);const n=v.query.redirect;f.push(n??"/")}catch{}}return(n,e)=>(m(),u("div",B,[s("div",$,[e[5]||(e[5]=_('

CC Dashboard

Corporate Planning Hub

',1)),a(N,null,{default:i(()=>[a(j,{class:"pt-6"},{default:i(()=>[s("form",{class:"space-y-4",onSubmit:y(x,["prevent"])},[o(t).error?(m(),u("div",q,V(o(t).error),1)):k("",!0),s("div",z,[e[2]||(e[2]=s("label",{for:"email",class:"text-sm font-medium text-foreground"},"Email",-1)),a(p,{id:"email",modelValue:r.value,"onUpdate:modelValue":e[0]||(e[0]=d=>r.value=d),type:"email",placeholder:"you@company.com",autocomplete:"email",disabled:o(t).loading,required:""},null,8,["modelValue","disabled"])]),s("div",D,[e[3]||(e[3]=s("label",{for:"password",class:"text-sm font-medium text-foreground"},"Password",-1)),a(p,{id:"password",modelValue:l.value,"onUpdate:modelValue":e[1]||(e[1]=d=>l.value=d),type:"password",placeholder:"••••••••",autocomplete:"current-password",disabled:o(t).loading,required:""},null,8,["modelValue","disabled"])]),a(S,{type:"submit",class:"w-full",loading:o(t).loading},{default:i(()=>[...e[4]||(e[4]=[C(" Sign in ",-1)])]),_:1},8,["loading"])],32)]),_:1})]),_:1})])]))}});export{U as default}; diff --git a/src/static/assets/PlannerView-DBNPY1iT.js b/src/static/assets/PlannerView-D1tzk_DZ.js similarity index 93% rename from src/static/assets/PlannerView-DBNPY1iT.js rename to src/static/assets/PlannerView-D1tzk_DZ.js index 90fc999..48c030e 100644 --- a/src/static/assets/PlannerView-DBNPY1iT.js +++ b/src/static/assets/PlannerView-D1tzk_DZ.js @@ -1 +1 @@ -import{u as N,_ as E}from"./TaskForm.vue_vue_type_script_setup_true_lang-BbiBAO69.js";import{d as L,o as a,c as r,a as t,p as A,t as v,F as _,l as V,A as P,j as h,e as f,w,k as B,i as D,h as z,m as F,y as H,C as U,n as K,r as b,x as I,v as O,K as g}from"./index-CsAuQ78D.js";import{_ as q}from"./Badge.vue_vue_type_script_setup_true_lang-DbHLHOj7.js";import{f as S,i as T}from"./utils-BKH6bEpf.js";import{_ as $}from"./Button.vue_vue_type_script_setup_true_lang-DnS8FWjO.js";import{_ as j}from"./Input.vue_vue_type_script_setup_true_lang-DbqPHpNb.js";import"./Dialog.vue_vue_type_script_setup_true_lang-Cj3qRfUm.js";import"./devops-ICsQ1df0.js";const G=["draggable"],J={class:"flex items-start gap-2"},Q=["title"],R={class:"flex-1 min-w-0"},W={class:"text-sm font-medium text-foreground leading-tight truncate"},X={key:0,class:"flex items-center gap-1 mt-1 flex-wrap"},Y={class:"flex items-center gap-2 mt-1.5 flex-wrap"},Z={key:0,class:"text-xs text-muted-foreground"},ee={key:1,class:"text-xs text-emerald-400"},te={key:2,class:"text-xs text-blue-400 ml-auto",title:"Azure DevOps"},se={class:"flex items-center gap-1 opacity-0 group-hover:opacity-100 shrink-0"},oe=L({__name:"TaskCard",props:{task:{},draggable:{type:Boolean}},emits:["edit","complete","delete"],setup(s,{emit:d}){const n=d,c=u=>({todo:"outline",doing:"default",done:"success",cancelled:"secondary"})[u],m=u=>["","Low","Medium","High","Critical","Blocker"][u]??"Unknown",k=u=>u>=4?"bg-red-500":u===3?"bg-amber-500":"bg-emerald-500";return(u,o)=>(a(),r("div",{draggable:s.draggable,class:"rounded-lg border border-border bg-card p-3 hover:border-primary/50 transition-colors cursor-pointer group",onClick:o[2]||(o[2]=l=>n("edit",s.task))},[t("div",J,[t("div",{class:A(["h-2 w-2 rounded-full mt-1.5 shrink-0",k(s.task.priority)]),title:m(s.task.priority)},null,10,Q),t("div",R,[t("p",W,v(s.task.title),1),s.task.tags.length?(a(),r("div",X,[(a(!0),r(_,null,V(s.task.tags,l=>(a(),r("span",{key:l.id,class:"inline-flex items-center px-1.5 py-0.5 rounded text-xs font-medium",style:P({background:`${l.color_hex}22`,color:l.color_hex})},v(l.name),5))),128))])):h("",!0),t("div",Y,[f(q,{variant:c(s.task.status),class:"text-xs py-0"},{default:w(()=>[B(v(s.task.status),1)]),_:1},8,["variant"]),s.task.estimate_hours?(a(),r("span",Z," ~"+v(D(S)(s.task.estimate_hours)),1)):h("",!0),s.task.actual_hours?(a(),r("span",ee,v(D(S)(s.task.actual_hours))+" actual ",1)):h("",!0),s.task.azure_work_item_id?(a(),r("span",te," #"+v(s.task.azure_work_item_id),1)):h("",!0)])]),t("div",se,[s.task.status!=="done"?(a(),r("button",{key:0,class:"p-1 rounded hover:bg-emerald-500/20 text-emerald-400",title:"Mark done",onClick:o[0]||(o[0]=z(l=>n("complete",s.task),["stop"]))},[...o[3]||(o[3]=[t("svg",{class:"h-3.5 w-3.5",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[t("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M5 13l4 4L19 7"})],-1)])])):h("",!0),t("button",{class:"p-1 rounded hover:bg-red-500/20 text-red-400",title:"Delete",onClick:o[1]||(o[1]=z(l=>n("delete",s.task),["stop"]))},[...o[4]||(o[4]=[t("svg",{class:"h-3.5 w-3.5",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[t("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16"})],-1)])])])])],8,G))}}),ae={class:"space-y-6"},ne={key:0,class:"text-sm text-muted-foreground py-4 text-center"},le={class:"flex items-center gap-2 mb-2"},re={class:"text-xs font-semibold uppercase tracking-wide text-muted-foreground"},ie={class:"text-xs text-muted-foreground bg-muted px-1.5 py-0.5 rounded-full"},de={class:"space-y-2"},ue={key:0,class:"text-sm text-muted-foreground text-center py-8"},ce=L({__name:"TaskList",props:{tasks:{},loading:{type:Boolean}},emits:["edit","complete","delete"],setup(s,{emit:d}){const n=s,c=d,m=F(()=>{var o;const u={doing:[],todo:[],done:[],cancelled:[]};for(const l of n.tasks)(o=u[l.status])==null||o.push(l);return u}),k={doing:"In Progress",todo:"To Do",done:"Done",cancelled:"Cancelled"};return(u,o)=>(a(),r("div",ae,[s.loading?(a(),r("div",ne,"Loading tasks...")):(a(),r(_,{key:1},[(a(!0),r(_,null,V(m.value,(l,y)=>H((a(),r("div",{key:y},[t("div",le,[t("h3",re,v(k[y]),1),t("span",ie,v(l.length),1)]),t("div",de,[(a(!0),r(_,null,V(l,p=>(a(),K(oe,{key:p.id,task:p,draggable:"",onEdit:C=>c("edit",p),onComplete:C=>c("complete",p),onDelete:C=>c("delete",p)},null,8,["task","onEdit","onComplete","onDelete"]))),128))])])),[[U,l.length>0]])),128)),n.tasks.length?h("",!0):(a(),r("div",ue," No tasks found "))],64))]))}}),me={class:"p-6"},ke={class:"flex items-center gap-3 mb-6 flex-wrap"},fe={class:"flex items-center gap-1"},be=L({__name:"PlannerView",setup(s){const d=N(),n=b(T(new Date)),c=b(!1),m=b(null),k=b("");I(()=>{d.fetchAll()}),O(n,()=>{d.fetchForDate(n.value)});const u=F(()=>k.value?d.tasks.filter(i=>{var e;return((e=i.project_id)==null?void 0:e.toLowerCase().includes(k.value.toLowerCase()))||i.title.toLowerCase().includes(k.value.toLowerCase())}):d.tasks);function o(){m.value=null,c.value=!0}function l(i){m.value=i,c.value=!0}async function y(i){try{m.value?(await d.update(m.value.id,i),g.success("Task updated")):(await d.create(i),g.success("Task created")),c.value=!1,d.fetchForDate(n.value)}catch{g.error("Failed to save task")}}async function p(i){try{await d.complete(i.id),g.success("Task completed")}catch{g.error("Failed to complete task")}}async function C(i){if(confirm(`Delete "${i.title}"?`))try{await d.remove(i.id),g.success("Task deleted")}catch{g.error("Failed to delete task")}}function M(i){const e=new Date(n.value);e.setDate(e.getDate()+i),n.value=T(e)}return(i,e)=>(a(),r("div",me,[t("div",ke,[e[10]||(e[10]=t("h2",{class:"text-lg font-semibold text-foreground flex-1"},"Planner",-1)),t("div",fe,[f($,{variant:"outline",size:"sm",onClick:e[0]||(e[0]=x=>M(-1))},{default:w(()=>[...e[6]||(e[6]=[t("svg",{class:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[t("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M15 19l-7-7 7-7"})],-1)])]),_:1}),f(j,{modelValue:n.value,"onUpdate:modelValue":e[1]||(e[1]=x=>n.value=x),type:"date",class:"h-8 w-36 text-xs"},null,8,["modelValue"]),f($,{variant:"outline",size:"sm",onClick:e[2]||(e[2]=x=>M(1))},{default:w(()=>[...e[7]||(e[7]=[t("svg",{class:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[t("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M9 5l7 7-7 7"})],-1)])]),_:1}),f($,{variant:"outline",size:"sm",onClick:e[3]||(e[3]=x=>n.value=D(T)(new Date))},{default:w(()=>[...e[8]||(e[8]=[B("Today",-1)])]),_:1})]),f(j,{modelValue:k.value,"onUpdate:modelValue":e[4]||(e[4]=x=>k.value=x),placeholder:"Search tasks...",class:"h-8 w-40 text-xs"},null,8,["modelValue"]),f($,{size:"sm",onClick:o},{default:w(()=>[...e[9]||(e[9]=[t("svg",{class:"h-4 w-4 mr-1.5",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[t("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M12 4v16m8-8H4"})],-1),B(" New Task ",-1)])]),_:1})]),f(ce,{tasks:u.value,loading:D(d).loading,onEdit:l,onComplete:p,onDelete:C},null,8,["tasks","loading"]),f(E,{open:c.value,task:m.value,"default-date":n.value,onClose:e[5]||(e[5]=x=>c.value=!1),onSave:y},null,8,["open","task","default-date"])]))}});export{be as default}; +import{u as N,_ as E}from"./TaskForm.vue_vue_type_script_setup_true_lang-CUKCWjzn.js";import{d as L,o as a,c as r,a as t,p as A,t as v,F as _,l as V,A as P,j as h,e as f,w,k as B,i as D,h as z,m as F,y as H,C as U,n as K,r as b,x as I,v as O,K as g}from"./index-CO3lBHVT.js";import{_ as q}from"./Badge.vue_vue_type_script_setup_true_lang-CocRK-vO.js";import{f as S,i as T}from"./utils-B1YxgOQw.js";import{_ as $}from"./Button.vue_vue_type_script_setup_true_lang-BwCrpRUQ.js";import{_ as j}from"./Input.vue_vue_type_script_setup_true_lang-CDN6a_dJ.js";import"./Dialog.vue_vue_type_script_setup_true_lang-DU2Z0xrF.js";import"./devops-D_lPg6L8.js";const G=["draggable"],J={class:"flex items-start gap-2"},Q=["title"],R={class:"flex-1 min-w-0"},W={class:"text-sm font-medium text-foreground leading-tight truncate"},X={key:0,class:"flex items-center gap-1 mt-1 flex-wrap"},Y={class:"flex items-center gap-2 mt-1.5 flex-wrap"},Z={key:0,class:"text-xs text-muted-foreground"},ee={key:1,class:"text-xs text-emerald-400"},te={key:2,class:"text-xs text-blue-400 ml-auto",title:"Azure DevOps"},se={class:"flex items-center gap-1 opacity-0 group-hover:opacity-100 shrink-0"},oe=L({__name:"TaskCard",props:{task:{},draggable:{type:Boolean}},emits:["edit","complete","delete"],setup(s,{emit:d}){const n=d,c=u=>({todo:"outline",doing:"default",done:"success",cancelled:"secondary"})[u],m=u=>["","Low","Medium","High","Critical","Blocker"][u]??"Unknown",k=u=>u>=4?"bg-red-500":u===3?"bg-amber-500":"bg-emerald-500";return(u,o)=>(a(),r("div",{draggable:s.draggable,class:"rounded-lg border border-border bg-card p-3 hover:border-primary/50 transition-colors cursor-pointer group",onClick:o[2]||(o[2]=l=>n("edit",s.task))},[t("div",J,[t("div",{class:A(["h-2 w-2 rounded-full mt-1.5 shrink-0",k(s.task.priority)]),title:m(s.task.priority)},null,10,Q),t("div",R,[t("p",W,v(s.task.title),1),s.task.tags.length?(a(),r("div",X,[(a(!0),r(_,null,V(s.task.tags,l=>(a(),r("span",{key:l.id,class:"inline-flex items-center px-1.5 py-0.5 rounded text-xs font-medium",style:P({background:`${l.color_hex}22`,color:l.color_hex})},v(l.name),5))),128))])):h("",!0),t("div",Y,[f(q,{variant:c(s.task.status),class:"text-xs py-0"},{default:w(()=>[B(v(s.task.status),1)]),_:1},8,["variant"]),s.task.estimate_hours?(a(),r("span",Z," ~"+v(D(S)(s.task.estimate_hours)),1)):h("",!0),s.task.actual_hours?(a(),r("span",ee,v(D(S)(s.task.actual_hours))+" actual ",1)):h("",!0),s.task.azure_work_item_id?(a(),r("span",te," #"+v(s.task.azure_work_item_id),1)):h("",!0)])]),t("div",se,[s.task.status!=="done"?(a(),r("button",{key:0,class:"p-1 rounded hover:bg-emerald-500/20 text-emerald-400",title:"Mark done",onClick:o[0]||(o[0]=z(l=>n("complete",s.task),["stop"]))},[...o[3]||(o[3]=[t("svg",{class:"h-3.5 w-3.5",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[t("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M5 13l4 4L19 7"})],-1)])])):h("",!0),t("button",{class:"p-1 rounded hover:bg-red-500/20 text-red-400",title:"Delete",onClick:o[1]||(o[1]=z(l=>n("delete",s.task),["stop"]))},[...o[4]||(o[4]=[t("svg",{class:"h-3.5 w-3.5",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[t("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16"})],-1)])])])])],8,G))}}),ae={class:"space-y-6"},ne={key:0,class:"text-sm text-muted-foreground py-4 text-center"},le={class:"flex items-center gap-2 mb-2"},re={class:"text-xs font-semibold uppercase tracking-wide text-muted-foreground"},ie={class:"text-xs text-muted-foreground bg-muted px-1.5 py-0.5 rounded-full"},de={class:"space-y-2"},ue={key:0,class:"text-sm text-muted-foreground text-center py-8"},ce=L({__name:"TaskList",props:{tasks:{},loading:{type:Boolean}},emits:["edit","complete","delete"],setup(s,{emit:d}){const n=s,c=d,m=F(()=>{var o;const u={doing:[],todo:[],done:[],cancelled:[]};for(const l of n.tasks)(o=u[l.status])==null||o.push(l);return u}),k={doing:"In Progress",todo:"To Do",done:"Done",cancelled:"Cancelled"};return(u,o)=>(a(),r("div",ae,[s.loading?(a(),r("div",ne,"Loading tasks...")):(a(),r(_,{key:1},[(a(!0),r(_,null,V(m.value,(l,y)=>H((a(),r("div",{key:y},[t("div",le,[t("h3",re,v(k[y]),1),t("span",ie,v(l.length),1)]),t("div",de,[(a(!0),r(_,null,V(l,p=>(a(),K(oe,{key:p.id,task:p,draggable:"",onEdit:C=>c("edit",p),onComplete:C=>c("complete",p),onDelete:C=>c("delete",p)},null,8,["task","onEdit","onComplete","onDelete"]))),128))])])),[[U,l.length>0]])),128)),n.tasks.length?h("",!0):(a(),r("div",ue," No tasks found "))],64))]))}}),me={class:"p-6"},ke={class:"flex items-center gap-3 mb-6 flex-wrap"},fe={class:"flex items-center gap-1"},be=L({__name:"PlannerView",setup(s){const d=N(),n=b(T(new Date)),c=b(!1),m=b(null),k=b("");I(()=>{d.fetchAll()}),O(n,()=>{d.fetchForDate(n.value)});const u=F(()=>k.value?d.tasks.filter(i=>{var e;return((e=i.project_id)==null?void 0:e.toLowerCase().includes(k.value.toLowerCase()))||i.title.toLowerCase().includes(k.value.toLowerCase())}):d.tasks);function o(){m.value=null,c.value=!0}function l(i){m.value=i,c.value=!0}async function y(i){try{m.value?(await d.update(m.value.id,i),g.success("Task updated")):(await d.create(i),g.success("Task created")),c.value=!1,d.fetchForDate(n.value)}catch{g.error("Failed to save task")}}async function p(i){try{await d.complete(i.id),g.success("Task completed")}catch{g.error("Failed to complete task")}}async function C(i){if(confirm(`Delete "${i.title}"?`))try{await d.remove(i.id),g.success("Task deleted")}catch{g.error("Failed to delete task")}}function M(i){const e=new Date(n.value);e.setDate(e.getDate()+i),n.value=T(e)}return(i,e)=>(a(),r("div",me,[t("div",ke,[e[10]||(e[10]=t("h2",{class:"text-lg font-semibold text-foreground flex-1"},"Planner",-1)),t("div",fe,[f($,{variant:"outline",size:"sm",onClick:e[0]||(e[0]=x=>M(-1))},{default:w(()=>[...e[6]||(e[6]=[t("svg",{class:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[t("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M15 19l-7-7 7-7"})],-1)])]),_:1}),f(j,{modelValue:n.value,"onUpdate:modelValue":e[1]||(e[1]=x=>n.value=x),type:"date",class:"h-8 w-36 text-xs"},null,8,["modelValue"]),f($,{variant:"outline",size:"sm",onClick:e[2]||(e[2]=x=>M(1))},{default:w(()=>[...e[7]||(e[7]=[t("svg",{class:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[t("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M9 5l7 7-7 7"})],-1)])]),_:1}),f($,{variant:"outline",size:"sm",onClick:e[3]||(e[3]=x=>n.value=D(T)(new Date))},{default:w(()=>[...e[8]||(e[8]=[B("Today",-1)])]),_:1})]),f(j,{modelValue:k.value,"onUpdate:modelValue":e[4]||(e[4]=x=>k.value=x),placeholder:"Search tasks...",class:"h-8 w-40 text-xs"},null,8,["modelValue"]),f($,{size:"sm",onClick:o},{default:w(()=>[...e[9]||(e[9]=[t("svg",{class:"h-4 w-4 mr-1.5",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[t("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M12 4v16m8-8H4"})],-1),B(" New Task ",-1)])]),_:1})]),f(ce,{tasks:u.value,loading:D(d).loading,onEdit:l,onComplete:p,onDelete:C},null,8,["tasks","loading"]),f(E,{open:c.value,task:m.value,"default-date":n.value,onClose:e[5]||(e[5]=x=>c.value=!1),onSave:y},null,8,["open","task","default-date"])]))}});export{be as default}; diff --git a/src/static/assets/Progress.vue_vue_type_script_setup_true_lang-Dd5JfY7g.js b/src/static/assets/Progress.vue_vue_type_script_setup_true_lang-C9HXKxSB.js similarity index 81% rename from src/static/assets/Progress.vue_vue_type_script_setup_true_lang-Dd5JfY7g.js rename to src/static/assets/Progress.vue_vue_type_script_setup_true_lang-C9HXKxSB.js index 4aa75e8..7eaa5ce 100644 --- a/src/static/assets/Progress.vue_vue_type_script_setup_true_lang-Dd5JfY7g.js +++ b/src/static/assets/Progress.vue_vue_type_script_setup_true_lang-C9HXKxSB.js @@ -1 +1 @@ -import{c as r}from"./utils-BKH6bEpf.js";import{d as s,o as n,c as t,p as l,i as c,a as d,A as u}from"./index-CsAuQ78D.js";const h=s({__name:"Progress",props:{value:{},max:{default:100},class:{},color:{default:"default"}},setup(a){const e=a,o=()=>Math.min(100,Math.max(0,e.value/e.max*100));return(i,m)=>(n(),t("div",{class:l(c(r)("relative h-2 w-full overflow-hidden rounded-full bg-secondary",e.class))},[d("div",{class:l(["h-full rounded-full transition-all duration-300",{"bg-primary":a.color==="default","bg-emerald-500":a.color==="success","bg-amber-500":a.color==="warning","bg-red-500":a.color==="danger"}]),style:u({width:`${o()}%`})},null,6)],2))}});export{h as _}; +import{c as r}from"./utils-B1YxgOQw.js";import{d as s,o as n,c as t,p as l,i as c,a as d,A as u}from"./index-CO3lBHVT.js";const h=s({__name:"Progress",props:{value:{},max:{default:100},class:{},color:{default:"default"}},setup(a){const e=a,o=()=>Math.min(100,Math.max(0,e.value/e.max*100));return(i,m)=>(n(),t("div",{class:l(c(r)("relative h-2 w-full overflow-hidden rounded-full bg-secondary",e.class))},[d("div",{class:l(["h-full rounded-full transition-all duration-300",{"bg-primary":a.color==="default","bg-emerald-500":a.color==="success","bg-amber-500":a.color==="warning","bg-red-500":a.color==="danger"}]),style:u({width:`${o()}%`})},null,6)],2))}});export{h as _}; diff --git a/src/static/assets/ProjectDetailView-CZkVgSqx.js b/src/static/assets/ProjectDetailView-CJKn-onp.js similarity index 94% rename from src/static/assets/ProjectDetailView-CZkVgSqx.js rename to src/static/assets/ProjectDetailView-CJKn-onp.js index 1b8a3b7..0f2e260 100644 --- a/src/static/assets/ProjectDetailView-CZkVgSqx.js +++ b/src/static/assets/ProjectDetailView-CJKn-onp.js @@ -1 +1 @@ -import{d as $,x as N,c as t,e as l,F as u,a as o,t as n,j as c,i as _,w as r,g as D,r as b,o as e,k as m,l as x,A as k}from"./index-CsAuQ78D.js";import{d as T}from"./dashboard-Dw2iyYza.js";import{_ as f,a as p}from"./CardContent.vue_vue_type_script_setup_true_lang-p2CthxwA.js";import{_ as h,a as v}from"./CardTitle.vue_vue_type_script_setup_true_lang-Bt6Ti-pL.js";import{f as y,_ as V,b as F}from"./utils-BKH6bEpf.js";const A={class:"p-6"},B={key:0,class:"flex items-center justify-center h-40"},C={class:"mb-6"},R={class:"flex items-start justify-between gap-4 flex-wrap"},S={class:"text-xl font-bold text-foreground"},z={class:"flex items-center gap-3 mt-1 flex-wrap"},M={key:0,class:"text-sm text-muted-foreground"},P={key:1,class:"text-xs bg-muted text-muted-foreground px-2 py-1 rounded"},E=["href"],H={class:"text-right"},I={class:"text-2xl font-bold text-foreground"},L={class:"h-32 flex items-end gap-px"},U=["title"],q={class:"grid grid-cols-1 lg:grid-cols-2 gap-6 mb-6"},G={key:0,class:"text-sm text-muted-foreground"},J={key:1,class:"space-y-1.5"},K=["title"],O={class:"text-foreground shrink-0 ml-2"},Q={key:0,class:"text-sm text-muted-foreground"},W={key:1,class:"space-y-2"},X={class:"text-xs text-foreground w-24 truncate shrink-0"},Y={class:"flex-1 h-2 bg-secondary rounded-full overflow-hidden"},Z={class:"text-xs text-muted-foreground w-8 text-right shrink-0"},tt={key:0,class:"text-sm text-muted-foreground"},et={key:1,class:"space-y-2"},st={class:"flex-1 min-w-0"},ot={class:"text-xs text-foreground"},at={key:0,class:"text-xs text-muted-foreground mt-0.5 line-clamp-2"},lt={class:"text-right shrink-0"},rt={class:"text-xs font-medium text-foreground"},dt={class:"text-xs text-muted-foreground"},nt={key:2,class:"text-center text-muted-foreground py-12"},pt=$({__name:"ProjectDetailView",setup(it){const w=D().params.id,a=b(null),g=b(!1);N(async()=>{g.value=!0;try{const i=await T.project(w);a.value=i.data}finally{g.value=!1}});const j=()=>{var i;return Math.max(...((i=a.value)==null?void 0:i.timeline.map(d=>d.hours))??[1],1)};return(i,d)=>(e(),t("div",A,[g.value?(e(),t("div",B,[l(V,{size:"lg",class:"text-primary"})])):a.value?(e(),t(u,{key:1},[o("div",C,[o("div",R,[o("div",null,[o("h2",S,n(a.value.display_name),1),o("div",z,[a.value.client?(e(),t("span",M,n(a.value.client),1)):c("",!0),a.value.job_number?(e(),t("span",P,n(a.value.job_number),1)):c("",!0),a.value.repo_url?(e(),t("a",{key:2,href:a.value.repo_url,target:"_blank",class:"text-xs text-primary hover:underline"}," Repository → ",8,E)):c("",!0)])]),o("div",H,[o("p",I,n(_(y)(a.value.total_hours)),1),d[0]||(d[0]=o("p",{class:"text-xs text-muted-foreground"},"total hours",-1))])])]),l(f,{class:"mb-6"},{default:r(()=>[l(h,{class:"pb-2"},{default:r(()=>[l(v,{class:"text-sm"},{default:r(()=>[...d[1]||(d[1]=[m("Daily Activity",-1)])]),_:1})]),_:1}),l(p,null,{default:r(()=>[o("div",L,[(e(!0),t(u,null,x(a.value.timeline,s=>(e(),t("div",{key:s.date,class:"flex-1 bg-primary/70 hover:bg-primary rounded-t transition-colors",style:k({height:`${s.hours/j()*100}%`}),title:`${s.date}: ${_(y)(s.hours)}`},null,12,U))),128))])]),_:1})]),_:1}),o("div",q,[l(f,null,{default:r(()=>[l(h,{class:"pb-2"},{default:r(()=>[l(v,{class:"text-sm"},{default:r(()=>[...d[2]||(d[2]=[m("Top Files",-1)])]),_:1})]),_:1}),l(p,null,{default:r(()=>[a.value.top_files.length?(e(),t("div",J,[(e(!0),t(u,null,x(a.value.top_files.slice(0,10),s=>(e(),t("div",{key:s.path,class:"flex items-center justify-between text-xs"},[o("span",{class:"text-muted-foreground truncate max-w-[200px]",title:s.path},n(s.path.split("/").pop()),9,K),o("span",O,n(s.count)+"×",1)]))),128))])):(e(),t("div",G,"No data"))]),_:1})]),_:1}),l(f,null,{default:r(()=>[l(h,{class:"pb-2"},{default:r(()=>[l(v,{class:"text-sm"},{default:r(()=>[...d[3]||(d[3]=[m("Tool Usage",-1)])]),_:1})]),_:1}),l(p,null,{default:r(()=>[a.value.top_tools.length?(e(),t("div",W,[(e(!0),t(u,null,x(a.value.top_tools.slice(0,8),s=>(e(),t("div",{key:s.tool,class:"flex items-center gap-2"},[o("span",X,n(s.tool),1),o("div",Y,[o("div",{class:"h-full bg-primary rounded-full",style:k({width:`${s.pct}%`})},null,4)]),o("span",Z,n(s.pct.toFixed(0))+"% ",1)]))),128))])):(e(),t("div",Q,"No data"))]),_:1})]),_:1})]),l(f,null,{default:r(()=>[l(h,{class:"pb-2"},{default:r(()=>[l(v,{class:"text-sm"},{default:r(()=>[...d[4]||(d[4]=[m("Recent Sessions",-1)])]),_:1})]),_:1}),l(p,null,{default:r(()=>[a.value.sessions.length?(e(),t("div",et,[(e(!0),t(u,null,x(a.value.sessions.slice(0,50),s=>(e(),t("div",{key:s.id,class:"flex items-start gap-3 py-2 border-b border-border last:border-0"},[o("div",st,[o("p",ot,n(_(F)(s.start_at)),1),s.summary?(e(),t("p",at,n(s.summary),1)):c("",!0)]),o("div",lt,[o("p",rt,n(_(y)(s.duration_hours)),1),o("p",dt,n(s.commit_count)+" commits ",1)])]))),128))])):(e(),t("div",tt,"No sessions"))]),_:1})]),_:1})],64)):(e(),t("div",nt," Project not found "))]))}});export{pt as default}; +import{d as $,x as N,c as t,e as l,F as u,a as o,t as n,j as c,i as _,w as r,g as D,r as b,o as e,k as m,l as x,A as k}from"./index-CO3lBHVT.js";import{d as T}from"./dashboard-4_z0ZWLj.js";import{_ as f,a as p}from"./CardContent.vue_vue_type_script_setup_true_lang-UcbhRP8Z.js";import{_ as h,a as v}from"./CardTitle.vue_vue_type_script_setup_true_lang-CpgNrOxB.js";import{f as y,_ as V,b as F}from"./utils-B1YxgOQw.js";const A={class:"p-6"},B={key:0,class:"flex items-center justify-center h-40"},C={class:"mb-6"},R={class:"flex items-start justify-between gap-4 flex-wrap"},S={class:"text-xl font-bold text-foreground"},z={class:"flex items-center gap-3 mt-1 flex-wrap"},M={key:0,class:"text-sm text-muted-foreground"},P={key:1,class:"text-xs bg-muted text-muted-foreground px-2 py-1 rounded"},E=["href"],H={class:"text-right"},I={class:"text-2xl font-bold text-foreground"},L={class:"h-32 flex items-end gap-px"},U=["title"],q={class:"grid grid-cols-1 lg:grid-cols-2 gap-6 mb-6"},G={key:0,class:"text-sm text-muted-foreground"},J={key:1,class:"space-y-1.5"},K=["title"],O={class:"text-foreground shrink-0 ml-2"},Q={key:0,class:"text-sm text-muted-foreground"},W={key:1,class:"space-y-2"},X={class:"text-xs text-foreground w-24 truncate shrink-0"},Y={class:"flex-1 h-2 bg-secondary rounded-full overflow-hidden"},Z={class:"text-xs text-muted-foreground w-8 text-right shrink-0"},tt={key:0,class:"text-sm text-muted-foreground"},et={key:1,class:"space-y-2"},st={class:"flex-1 min-w-0"},ot={class:"text-xs text-foreground"},at={key:0,class:"text-xs text-muted-foreground mt-0.5 line-clamp-2"},lt={class:"text-right shrink-0"},rt={class:"text-xs font-medium text-foreground"},dt={class:"text-xs text-muted-foreground"},nt={key:2,class:"text-center text-muted-foreground py-12"},pt=$({__name:"ProjectDetailView",setup(it){const w=D().params.id,a=b(null),g=b(!1);N(async()=>{g.value=!0;try{const i=await T.project(w);a.value=i.data}finally{g.value=!1}});const j=()=>{var i;return Math.max(...((i=a.value)==null?void 0:i.timeline.map(d=>d.hours))??[1],1)};return(i,d)=>(e(),t("div",A,[g.value?(e(),t("div",B,[l(V,{size:"lg",class:"text-primary"})])):a.value?(e(),t(u,{key:1},[o("div",C,[o("div",R,[o("div",null,[o("h2",S,n(a.value.display_name),1),o("div",z,[a.value.client?(e(),t("span",M,n(a.value.client),1)):c("",!0),a.value.job_number?(e(),t("span",P,n(a.value.job_number),1)):c("",!0),a.value.repo_url?(e(),t("a",{key:2,href:a.value.repo_url,target:"_blank",class:"text-xs text-primary hover:underline"}," Repository → ",8,E)):c("",!0)])]),o("div",H,[o("p",I,n(_(y)(a.value.total_hours)),1),d[0]||(d[0]=o("p",{class:"text-xs text-muted-foreground"},"total hours",-1))])])]),l(f,{class:"mb-6"},{default:r(()=>[l(h,{class:"pb-2"},{default:r(()=>[l(v,{class:"text-sm"},{default:r(()=>[...d[1]||(d[1]=[m("Daily Activity",-1)])]),_:1})]),_:1}),l(p,null,{default:r(()=>[o("div",L,[(e(!0),t(u,null,x(a.value.timeline,s=>(e(),t("div",{key:s.date,class:"flex-1 bg-primary/70 hover:bg-primary rounded-t transition-colors",style:k({height:`${s.hours/j()*100}%`}),title:`${s.date}: ${_(y)(s.hours)}`},null,12,U))),128))])]),_:1})]),_:1}),o("div",q,[l(f,null,{default:r(()=>[l(h,{class:"pb-2"},{default:r(()=>[l(v,{class:"text-sm"},{default:r(()=>[...d[2]||(d[2]=[m("Top Files",-1)])]),_:1})]),_:1}),l(p,null,{default:r(()=>[a.value.top_files.length?(e(),t("div",J,[(e(!0),t(u,null,x(a.value.top_files.slice(0,10),s=>(e(),t("div",{key:s.path,class:"flex items-center justify-between text-xs"},[o("span",{class:"text-muted-foreground truncate max-w-[200px]",title:s.path},n(s.path.split("/").pop()),9,K),o("span",O,n(s.count)+"×",1)]))),128))])):(e(),t("div",G,"No data"))]),_:1})]),_:1}),l(f,null,{default:r(()=>[l(h,{class:"pb-2"},{default:r(()=>[l(v,{class:"text-sm"},{default:r(()=>[...d[3]||(d[3]=[m("Tool Usage",-1)])]),_:1})]),_:1}),l(p,null,{default:r(()=>[a.value.top_tools.length?(e(),t("div",W,[(e(!0),t(u,null,x(a.value.top_tools.slice(0,8),s=>(e(),t("div",{key:s.tool,class:"flex items-center gap-2"},[o("span",X,n(s.tool),1),o("div",Y,[o("div",{class:"h-full bg-primary rounded-full",style:k({width:`${s.pct}%`})},null,4)]),o("span",Z,n(s.pct.toFixed(0))+"% ",1)]))),128))])):(e(),t("div",Q,"No data"))]),_:1})]),_:1})]),l(f,null,{default:r(()=>[l(h,{class:"pb-2"},{default:r(()=>[l(v,{class:"text-sm"},{default:r(()=>[...d[4]||(d[4]=[m("Recent Sessions",-1)])]),_:1})]),_:1}),l(p,null,{default:r(()=>[a.value.sessions.length?(e(),t("div",et,[(e(!0),t(u,null,x(a.value.sessions.slice(0,50),s=>(e(),t("div",{key:s.id,class:"flex items-start gap-3 py-2 border-b border-border last:border-0"},[o("div",st,[o("p",ot,n(_(F)(s.start_at)),1),s.summary?(e(),t("p",at,n(s.summary),1)):c("",!0)]),o("div",lt,[o("p",rt,n(_(y)(s.duration_hours)),1),o("p",dt,n(s.commit_count)+" commits ",1)])]))),128))])):(e(),t("div",tt,"No sessions"))]),_:1})]),_:1})],64)):(e(),t("div",nt," Project not found "))]))}});export{pt as default}; diff --git a/src/static/assets/ProjectsView-DKI4lK5K.js b/src/static/assets/ProjectsView-CmpkpAqw.js similarity index 91% rename from src/static/assets/ProjectsView-DKI4lK5K.js rename to src/static/assets/ProjectsView-CmpkpAqw.js index 599fc93..82756c0 100644 --- a/src/static/assets/ProjectsView-DKI4lK5K.js +++ b/src/static/assets/ProjectsView-CmpkpAqw.js @@ -1 +1 @@ -import{d as p,x as g,c as r,a as s,e as d,F as v,l as y,r as _,o,n as h,w as f,t as a,j as i,i as u,p as b,f as k}from"./index-CsAuQ78D.js";import{d as w}from"./dashboard-Dw2iyYza.js";import{a as C,_ as $}from"./CardContent.vue_vue_type_script_setup_true_lang-p2CthxwA.js";import{_ as B}from"./Progress.vue_vue_type_script_setup_true_lang-Dd5JfY7g.js";import{_ as N,f as V,a as D}from"./utils-BKH6bEpf.js";const F={class:"p-6"},j={key:0,class:"flex items-center justify-center h-40"},z={key:1,class:"text-center text-muted-foreground py-12"},L={key:2,class:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-4"},P={class:"flex items-start justify-between gap-2 mb-3"},S={class:"min-w-0"},A={class:"font-semibold text-sm text-foreground truncate"},E={key:0,class:"text-xs text-muted-foreground truncate"},M={key:0,class:"text-xs bg-muted text-muted-foreground px-1.5 py-0.5 rounded shrink-0"},R={class:"space-y-1.5"},T={class:"flex items-center justify-between text-xs"},q={class:"font-medium text-foreground"},G={class:"flex items-center justify-between text-xs"},H={class:"text-foreground"},I={key:0,class:"flex items-center justify-between text-xs"},J={class:"text-foreground"},K={key:0,class:"mt-3"},O={class:"flex items-center justify-between text-xs mb-1"},st=p({__name:"ProjectsView",setup(Q){const m=k(),l=_([]),c=_(!1);g(async()=>{c.value=!0;try{const n=await w.projects({});l.value=n.data.sort((e,t)=>t.total_hours-e.total_hours)}finally{c.value=!1}});const x=n=>n?n>90?"danger":n>70?"warning":"success":"default";return(n,e)=>(o(),r("div",F,[e[4]||(e[4]=s("h2",{class:"text-lg font-semibold text-foreground mb-6"},"Projects",-1)),c.value?(o(),r("div",j,[d(N,{size:"lg",class:"text-primary"})])):l.value.length===0?(o(),r("div",z," No projects found ")):(o(),r("div",L,[(o(!0),r(v,null,y(l.value,t=>(o(),h($,{key:t.project_id,class:"cursor-pointer hover:border-primary/50 transition-colors",onClick:U=>u(m).push(`/projects/${t.project_id}`)},{default:f(()=>[d(C,{class:"p-4"},{default:f(()=>[s("div",P,[s("div",S,[s("p",A,a(t.display_name),1),t.client?(o(),r("p",E,a(t.client),1)):i("",!0)]),t.job_number?(o(),r("span",M,a(t.job_number),1)):i("",!0)]),s("div",R,[s("div",T,[e[0]||(e[0]=s("span",{class:"text-muted-foreground"},"Total hours",-1)),s("span",q,a(u(V)(t.total_hours)),1)]),s("div",G,[e[1]||(e[1]=s("span",{class:"text-muted-foreground"},"Sessions",-1)),s("span",H,a(t.session_count),1)]),t.last_active?(o(),r("div",I,[e[2]||(e[2]=s("span",{class:"text-muted-foreground"},"Last active",-1)),s("span",J,a(u(D)(t.last_active)),1)])):i("",!0)]),t.progress_pct!==null?(o(),r("div",K,[s("div",O,[e[3]||(e[3]=s("span",{class:"text-muted-foreground"},"Budget",-1)),s("span",{class:b(t.progress_pct>90?"text-red-400":"text-muted-foreground")},a(t.progress_pct.toFixed(0))+"% ",3)]),d(B,{value:t.progress_pct,color:x(t.progress_pct)},null,8,["value","color"])])):i("",!0)]),_:2},1024)]),_:2},1032,["onClick"]))),128))]))]))}});export{st as default}; +import{d as p,x as g,c as r,a as s,e as d,F as v,l as y,r as _,o,n as h,w as f,t as a,j as i,i as u,p as b,f as k}from"./index-CO3lBHVT.js";import{d as w}from"./dashboard-4_z0ZWLj.js";import{a as C,_ as $}from"./CardContent.vue_vue_type_script_setup_true_lang-UcbhRP8Z.js";import{_ as B}from"./Progress.vue_vue_type_script_setup_true_lang-C9HXKxSB.js";import{_ as N,f as V,a as D}from"./utils-B1YxgOQw.js";const F={class:"p-6"},j={key:0,class:"flex items-center justify-center h-40"},z={key:1,class:"text-center text-muted-foreground py-12"},L={key:2,class:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-4"},P={class:"flex items-start justify-between gap-2 mb-3"},S={class:"min-w-0"},A={class:"font-semibold text-sm text-foreground truncate"},E={key:0,class:"text-xs text-muted-foreground truncate"},M={key:0,class:"text-xs bg-muted text-muted-foreground px-1.5 py-0.5 rounded shrink-0"},R={class:"space-y-1.5"},T={class:"flex items-center justify-between text-xs"},q={class:"font-medium text-foreground"},G={class:"flex items-center justify-between text-xs"},H={class:"text-foreground"},I={key:0,class:"flex items-center justify-between text-xs"},J={class:"text-foreground"},K={key:0,class:"mt-3"},O={class:"flex items-center justify-between text-xs mb-1"},st=p({__name:"ProjectsView",setup(Q){const m=k(),l=_([]),c=_(!1);g(async()=>{c.value=!0;try{const n=await w.projects({});l.value=n.data.sort((e,t)=>t.total_hours-e.total_hours)}finally{c.value=!1}});const x=n=>n?n>90?"danger":n>70?"warning":"success":"default";return(n,e)=>(o(),r("div",F,[e[4]||(e[4]=s("h2",{class:"text-lg font-semibold text-foreground mb-6"},"Projects",-1)),c.value?(o(),r("div",j,[d(N,{size:"lg",class:"text-primary"})])):l.value.length===0?(o(),r("div",z," No projects found ")):(o(),r("div",L,[(o(!0),r(v,null,y(l.value,t=>(o(),h($,{key:t.project_id,class:"cursor-pointer hover:border-primary/50 transition-colors",onClick:U=>u(m).push(`/projects/${t.project_id}`)},{default:f(()=>[d(C,{class:"p-4"},{default:f(()=>[s("div",P,[s("div",S,[s("p",A,a(t.display_name),1),t.client?(o(),r("p",E,a(t.client),1)):i("",!0)]),t.job_number?(o(),r("span",M,a(t.job_number),1)):i("",!0)]),s("div",R,[s("div",T,[e[0]||(e[0]=s("span",{class:"text-muted-foreground"},"Total hours",-1)),s("span",q,a(u(V)(t.total_hours)),1)]),s("div",G,[e[1]||(e[1]=s("span",{class:"text-muted-foreground"},"Sessions",-1)),s("span",H,a(t.session_count),1)]),t.last_active?(o(),r("div",I,[e[2]||(e[2]=s("span",{class:"text-muted-foreground"},"Last active",-1)),s("span",J,a(u(D)(t.last_active)),1)])):i("",!0)]),t.progress_pct!==null?(o(),r("div",K,[s("div",O,[e[3]||(e[3]=s("span",{class:"text-muted-foreground"},"Budget",-1)),s("span",{class:b(t.progress_pct>90?"text-red-400":"text-muted-foreground")},a(t.progress_pct.toFixed(0))+"% ",3)]),d(B,{value:t.progress_pct,color:x(t.progress_pct)},null,8,["value","color"])])):i("",!0)]),_:2},1024)]),_:2},1032,["onClick"]))),128))]))]))}});export{st as default}; diff --git a/src/static/assets/ReportsView-muZ7SDGH.js b/src/static/assets/ReportsView-RRBaLOSo.js similarity index 99% rename from src/static/assets/ReportsView-muZ7SDGH.js rename to src/static/assets/ReportsView-RRBaLOSo.js index b054978..9efd1c1 100644 --- a/src/static/assets/ReportsView-muZ7SDGH.js +++ b/src/static/assets/ReportsView-RRBaLOSo.js @@ -1,4 +1,4 @@ -var Ce=Object.defineProperty;var ae=a=>{throw TypeError(a)};var Ee=(a,t,e)=>t in a?Ce(a,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):a[t]=e;var k=(a,t,e)=>Ee(a,typeof t!="symbol"?t+"":t,e),Le=(a,t,e)=>t.has(a)||ae("Cannot "+e);var ce=(a,t,e)=>t.has(a)?ae("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(a):t.set(a,e);var Z=(a,t,e)=>(Le(a,t,"access private method"),e);import{D as V,d as Be,x as qe,c as z,a as x,p as U,e as P,w as I,F as Ze,l as Pe,r as A,o as $,k as G,n as pe,t as W,i as De,j as he,K as ue,_ as Me}from"./index-CsAuQ78D.js";import{a as Qe,_ as je}from"./CardContent.vue_vue_type_script_setup_true_lang-p2CthxwA.js";import{_ as fe}from"./Badge.vue_vue_type_script_setup_true_lang-DbHLHOj7.js";import{_ as Ne}from"./Button.vue_vue_type_script_setup_true_lang-DnS8FWjO.js";import{_ as Oe,a as He,i as Fe}from"./utils-BKH6bEpf.js";const ge={list:()=>V.get("/api/reports"),get:a=>V.get(`/api/reports/${a}`),generate:a=>V.post("/api/reports/generate",a)};function J(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}let S=J();function we(a){S=a}const ye=/[&<>"']/,Ve=new RegExp(ye.source,"g"),$e=/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,Ue=new RegExp($e.source,"g"),Ge={"&":"&","<":"<",">":">",'"':""","'":"'"},de=a=>Ge[a];function m(a,t){if(t){if(ye.test(a))return a.replace(Ve,de)}else if($e.test(a))return a.replace(Ue,de);return a}const We=/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig;function Xe(a){return a.replace(We,(t,e)=>(e=e.toLowerCase(),e==="colon"?":":e.charAt(0)==="#"?e.charAt(1)==="x"?String.fromCharCode(parseInt(e.substring(2),16)):String.fromCharCode(+e.substring(1)):""))}const Ke=/(^|[^\[])\^/g;function d(a,t){let e=typeof a=="string"?a:a.source;t=t||"";const n={replace:(i,r)=>{let s=typeof r=="string"?r:r.source;return s=s.replace(Ke,"$1"),e=e.replace(i,s),n},getRegex:()=>new RegExp(e,t)};return n}function ke(a){try{a=encodeURI(a).replace(/%25/g,"%")}catch{return null}return a}const E={exec:()=>null};function xe(a,t){const e=a.replace(/\|/g,(r,s,l)=>{let o=!1,u=s;for(;--u>=0&&l[u]==="\\";)o=!o;return o?"|":" |"}),n=e.split(/ \|/);let i=0;if(n[0].trim()||n.shift(),n.length>0&&!n[n.length-1].trim()&&n.pop(),t)if(n.length>t)n.splice(t);else for(;n.length{throw TypeError(a)};var Ee=(a,t,e)=>t in a?Ce(a,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):a[t]=e;var k=(a,t,e)=>Ee(a,typeof t!="symbol"?t+"":t,e),Le=(a,t,e)=>t.has(a)||ae("Cannot "+e);var ce=(a,t,e)=>t.has(a)?ae("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(a):t.set(a,e);var Z=(a,t,e)=>(Le(a,t,"access private method"),e);import{D as V,d as Be,x as qe,c as z,a as x,p as U,e as P,w as I,F as Ze,l as Pe,r as A,o as $,k as G,n as pe,t as W,i as De,j as he,K as ue,_ as Me}from"./index-CO3lBHVT.js";import{a as Qe,_ as je}from"./CardContent.vue_vue_type_script_setup_true_lang-UcbhRP8Z.js";import{_ as fe}from"./Badge.vue_vue_type_script_setup_true_lang-CocRK-vO.js";import{_ as Ne}from"./Button.vue_vue_type_script_setup_true_lang-BwCrpRUQ.js";import{_ as Oe,a as He,i as Fe}from"./utils-B1YxgOQw.js";const ge={list:()=>V.get("/api/reports"),get:a=>V.get(`/api/reports/${a}`),generate:a=>V.post("/api/reports/generate",a)};function J(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}let S=J();function we(a){S=a}const ye=/[&<>"']/,Ve=new RegExp(ye.source,"g"),$e=/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,Ue=new RegExp($e.source,"g"),Ge={"&":"&","<":"<",">":">",'"':""","'":"'"},de=a=>Ge[a];function m(a,t){if(t){if(ye.test(a))return a.replace(Ve,de)}else if($e.test(a))return a.replace(Ue,de);return a}const We=/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig;function Xe(a){return a.replace(We,(t,e)=>(e=e.toLowerCase(),e==="colon"?":":e.charAt(0)==="#"?e.charAt(1)==="x"?String.fromCharCode(parseInt(e.substring(2),16)):String.fromCharCode(+e.substring(1)):""))}const Ke=/(^|[^\[])\^/g;function d(a,t){let e=typeof a=="string"?a:a.source;t=t||"";const n={replace:(i,r)=>{let s=typeof r=="string"?r:r.source;return s=s.replace(Ke,"$1"),e=e.replace(i,s),n},getRegex:()=>new RegExp(e,t)};return n}function ke(a){try{a=encodeURI(a).replace(/%25/g,"%")}catch{return null}return a}const E={exec:()=>null};function xe(a,t){const e=a.replace(/\|/g,(r,s,l)=>{let o=!1,u=s;for(;--u>=0&&l[u]==="\\";)o=!o;return o?"|":" |"}),n=e.split(/ \|/);let i=0;if(n[0].trim()||n.shift(),n.length>0&&!n[n.length-1].trim()&&n.pop(),t)if(n.length>t)n.splice(t);else for(;n.length{const r=i.match(/^\s+/);if(r===null)return i;const[s]=r;return s.length>=n.length?i.slice(n.length):i}).join(` `)}class Q{constructor(t){k(this,"options");k(this,"rules");k(this,"lexer");this.options=t||S}space(t){const e=this.rules.block.newline.exec(t);if(e&&e[0].length>0)return{type:"space",raw:e[0]}}code(t){const e=this.rules.block.code.exec(t);if(e){const n=e[0].replace(/^ {1,4}/gm,"");return{type:"code",raw:e[0],codeBlockStyle:"indented",text:this.options.pedantic?n:D(n,` `)}}}fences(t){const e=this.rules.block.fences.exec(t);if(e){const n=e[0],i=Ye(n,e[3]||"");return{type:"code",raw:n,lang:e[2]?e[2].trim().replace(this.rules.inline.anyPunctuation,"$1"):e[2],text:i}}}heading(t){const e=this.rules.block.heading.exec(t);if(e){let n=e[2].trim();if(/#$/.test(n)){const i=D(n,"#");(this.options.pedantic||!i||/ $/.test(i))&&(n=i.trim())}return{type:"heading",raw:e[0],depth:e[1].length,text:n,tokens:this.lexer.inline(n)}}}hr(t){const e=this.rules.block.hr.exec(t);if(e)return{type:"hr",raw:e[0]}}blockquote(t){const e=this.rules.block.blockquote.exec(t);if(e){let n=e[0].replace(/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,` diff --git a/src/static/assets/SettingsView-BvqXXl4L.js b/src/static/assets/SettingsView-451r_a8J.js similarity index 94% rename from src/static/assets/SettingsView-BvqXXl4L.js rename to src/static/assets/SettingsView-451r_a8J.js index 9b01ee7..bfac6f9 100644 --- a/src/static/assets/SettingsView-BvqXXl4L.js +++ b/src/static/assets/SettingsView-451r_a8J.js @@ -1 +1 @@ -import{d as B,u as T,x as H,c as C,a,e as o,w as s,r as u,o as x,k as i,i as n,t as y,j as k,n as j,D as K,K as m}from"./index-CsAuQ78D.js";import{u as L}from"./devops-ICsQ1df0.js";import{_ as A,a as P}from"./CardContent.vue_vue_type_script_setup_true_lang-p2CthxwA.js";import{_ as U,a as I}from"./CardTitle.vue_vue_type_script_setup_true_lang-Bt6Ti-pL.js";import{_ as f}from"./Input.vue_vue_type_script_setup_true_lang-DbqPHpNb.js";import{_}from"./Button.vue_vue_type_script_setup_true_lang-DnS8FWjO.js";import{i as O}from"./utils-BKH6bEpf.js";function M(v,d){const t=`/cc-dashboard/api/export/timesheet.csv?from=${v}&to=${d}`,r=document.createElement("a");r.href=t,r.download=`timesheet-${v}-${d}.csv`,r.click()}function q(v,d){const t=`/cc-dashboard/api/export/timesheet.ics?from=${v}&to=${d}`,r=document.createElement("a");r.href=t,r.download=`timesheet-${v}-${d}.ics`,r.click()}const G={class:"p-6 space-y-6 max-w-2xl"},J={class:"space-y-1.5"},Q={class:"space-y-1.5"},R={key:0,class:"text-xs text-muted-foreground space-y-1"},W={class:"text-foreground"},X={class:"text-foreground"},Y={key:0},Z={key:1,class:"text-red-400"},h={class:"grid grid-cols-2 gap-3"},ee={class:"space-y-1.5"},te={class:"space-y-1.5"},ae={class:"space-y-1.5"},oe={class:"text-sm font-medium text-foreground"},se={class:"flex items-center gap-2"},le={class:"flex items-center gap-3 flex-wrap"},ne={class:"space-y-1.5"},re={class:"space-y-1.5"},ie={class:"flex items-center gap-2"},ge=B({__name:"SettingsView",setup(v){const d=T(),t=L(),r=u(""),D=u(0),S=u(!1),c=u(""),p=u(""),g=u(""),b=u(!1),V=u(""),w=u("");H(()=>{d.user&&(r.value=d.user.username,D.value=d.user.daily_overhead_hours??0),t.fetchIntegration().then(()=>{t.integration&&(c.value=t.integration.org,p.value=t.integration.project)});const $=new Date;w.value=O($);const e=new Date($);e.setDate($.getDate()-30),V.value=O(e)});async function N(){S.value=!0;try{await K.patch("/api/auth/me",{username:r.value,daily_overhead_hours:D.value}),await d.fetchMe(),m.success("Profile saved")}catch{m.error("Failed to save profile")}finally{S.value=!1}}async function z(){if(!c.value||!p.value||!g.value){m.error("All ADO fields are required");return}b.value=!0;try{await t.saveIntegration({org:c.value,project:p.value,pat:g.value}),g.value="",m.success("Integration saved")}catch{m.error("Failed to save integration")}finally{b.value=!1}}async function E(){if(confirm("Delete ADO integration?"))try{await t.deleteIntegration(),c.value="",p.value="",g.value="",m.success("Integration deleted")}catch{m.error("Failed to delete integration")}}async function F(){try{await t.sync(),m.success("Sync complete")}catch{m.error(t.error??"Sync failed")}}return($,e)=>(x(),C("div",G,[e[26]||(e[26]=a("h2",{class:"text-lg font-semibold text-foreground"},"Settings",-1)),o(A,null,{default:s(()=>[o(U,null,{default:s(()=>[o(I,{class:"text-sm"},{default:s(()=>[...e[9]||(e[9]=[i("Profile",-1)])]),_:1})]),_:1}),o(P,{class:"space-y-4"},{default:s(()=>[a("div",J,[e[10]||(e[10]=a("label",{class:"text-sm font-medium text-foreground"},"Username",-1)),o(f,{modelValue:r.value,"onUpdate:modelValue":e[0]||(e[0]=l=>r.value=l),placeholder:"username"},null,8,["modelValue"])]),a("div",Q,[e[11]||(e[11]=a("label",{class:"text-sm font-medium text-foreground"},"Daily Overhead Hours",-1)),o(f,{modelValue:D.value,"onUpdate:modelValue":e[1]||(e[1]=l=>D.value=l),type:"number",min:"0",max:"8",step:"0.25",class:"w-32"},null,8,["modelValue"]),e[12]||(e[12]=a("p",{class:"text-xs text-muted-foreground"}," Hours per day to add for overhead / meetings ",-1))]),o(_,{loading:S.value,onClick:N},{default:s(()=>[...e[13]||(e[13]=[i("Save Profile",-1)])]),_:1},8,["loading"])]),_:1})]),_:1}),o(A,null,{default:s(()=>[o(U,null,{default:s(()=>[o(I,{class:"text-sm"},{default:s(()=>[...e[14]||(e[14]=[i("Azure DevOps Integration",-1)])]),_:1})]),_:1}),o(P,{class:"space-y-4"},{default:s(()=>[n(t).integration?(x(),C("div",R,[a("p",null,[e[15]||(e[15]=i(" Connected to ",-1)),a("strong",W,y(n(t).integration.org),1),e[16]||(e[16]=i(" / ",-1)),a("strong",X,y(n(t).integration.project),1)]),n(t).integration.last_synced_at?(x(),C("p",Y," Last synced: "+y(new Date(n(t).integration.last_synced_at).toLocaleString()),1)):k("",!0),n(t).integration.last_sync_error?(x(),C("p",Z," Error: "+y(n(t).integration.last_sync_error),1)):k("",!0)])):k("",!0),a("div",h,[a("div",ee,[e[17]||(e[17]=a("label",{class:"text-sm font-medium text-foreground"},"Organization",-1)),o(f,{modelValue:c.value,"onUpdate:modelValue":e[2]||(e[2]=l=>c.value=l),placeholder:"myorg"},null,8,["modelValue"])]),a("div",te,[e[18]||(e[18]=a("label",{class:"text-sm font-medium text-foreground"},"Project",-1)),o(f,{modelValue:p.value,"onUpdate:modelValue":e[3]||(e[3]=l=>p.value=l),placeholder:"myproject"},null,8,["modelValue"])])]),a("div",ae,[a("label",oe," Personal Access Token "+y(n(t).integration?"(leave blank to keep current)":""),1),o(f,{modelValue:g.value,"onUpdate:modelValue":e[4]||(e[4]=l=>g.value=l),type:"password",placeholder:"••••••••",autocomplete:"new-password"},null,8,["modelValue"])]),a("div",se,[o(_,{loading:b.value,onClick:z},{default:s(()=>[i(y(n(t).integration?"Update":"Connect"),1)]),_:1},8,["loading"]),n(t).integration?(x(),j(_,{key:0,variant:"outline",loading:n(t).syncing,onClick:F},{default:s(()=>[...e[19]||(e[19]=[i(" Sync Now ",-1)])]),_:1},8,["loading"])):k("",!0),n(t).integration?(x(),j(_,{key:1,variant:"destructive",size:"sm",onClick:E},{default:s(()=>[...e[20]||(e[20]=[i(" Disconnect ",-1)])]),_:1})):k("",!0)])]),_:1})]),_:1}),o(A,null,{default:s(()=>[o(U,null,{default:s(()=>[o(I,{class:"text-sm"},{default:s(()=>[...e[21]||(e[21]=[i("Export",-1)])]),_:1})]),_:1}),o(P,{class:"space-y-4"},{default:s(()=>[a("div",le,[a("div",ne,[e[22]||(e[22]=a("label",{class:"text-xs text-muted-foreground"},"From",-1)),o(f,{modelValue:V.value,"onUpdate:modelValue":e[5]||(e[5]=l=>V.value=l),type:"date",class:"h-8 text-xs"},null,8,["modelValue"])]),a("div",re,[e[23]||(e[23]=a("label",{class:"text-xs text-muted-foreground"},"To",-1)),o(f,{modelValue:w.value,"onUpdate:modelValue":e[6]||(e[6]=l=>w.value=l),type:"date",class:"h-8 text-xs"},null,8,["modelValue"])])]),a("div",ie,[o(_,{variant:"outline",size:"sm",onClick:e[7]||(e[7]=l=>n(M)(V.value,w.value))},{default:s(()=>[...e[24]||(e[24]=[i(" Download CSV ",-1)])]),_:1}),o(_,{variant:"outline",size:"sm",onClick:e[8]||(e[8]=l=>n(q)(V.value,w.value))},{default:s(()=>[...e[25]||(e[25]=[i(" Download ICS ",-1)])]),_:1})])]),_:1})]),_:1})]))}});export{ge as default}; +import{d as B,u as T,x as H,c as C,a,e as o,w as s,r as u,o as x,k as i,i as n,t as y,j as k,n as j,D as K,K as m}from"./index-CO3lBHVT.js";import{u as L}from"./devops-D_lPg6L8.js";import{_ as A,a as P}from"./CardContent.vue_vue_type_script_setup_true_lang-UcbhRP8Z.js";import{_ as U,a as I}from"./CardTitle.vue_vue_type_script_setup_true_lang-CpgNrOxB.js";import{_ as f}from"./Input.vue_vue_type_script_setup_true_lang-CDN6a_dJ.js";import{_}from"./Button.vue_vue_type_script_setup_true_lang-BwCrpRUQ.js";import{i as O}from"./utils-B1YxgOQw.js";function M(v,d){const t=`/cc-dashboard/api/export/timesheet.csv?from=${v}&to=${d}`,r=document.createElement("a");r.href=t,r.download=`timesheet-${v}-${d}.csv`,r.click()}function q(v,d){const t=`/cc-dashboard/api/export/timesheet.ics?from=${v}&to=${d}`,r=document.createElement("a");r.href=t,r.download=`timesheet-${v}-${d}.ics`,r.click()}const G={class:"p-6 space-y-6 max-w-2xl"},J={class:"space-y-1.5"},Q={class:"space-y-1.5"},R={key:0,class:"text-xs text-muted-foreground space-y-1"},W={class:"text-foreground"},X={class:"text-foreground"},Y={key:0},Z={key:1,class:"text-red-400"},h={class:"grid grid-cols-2 gap-3"},ee={class:"space-y-1.5"},te={class:"space-y-1.5"},ae={class:"space-y-1.5"},oe={class:"text-sm font-medium text-foreground"},se={class:"flex items-center gap-2"},le={class:"flex items-center gap-3 flex-wrap"},ne={class:"space-y-1.5"},re={class:"space-y-1.5"},ie={class:"flex items-center gap-2"},ge=B({__name:"SettingsView",setup(v){const d=T(),t=L(),r=u(""),D=u(0),S=u(!1),c=u(""),p=u(""),g=u(""),b=u(!1),V=u(""),w=u("");H(()=>{d.user&&(r.value=d.user.username,D.value=d.user.daily_overhead_hours??0),t.fetchIntegration().then(()=>{t.integration&&(c.value=t.integration.org,p.value=t.integration.project)});const $=new Date;w.value=O($);const e=new Date($);e.setDate($.getDate()-30),V.value=O(e)});async function N(){S.value=!0;try{await K.patch("/api/auth/me",{username:r.value,daily_overhead_hours:D.value}),await d.fetchMe(),m.success("Profile saved")}catch{m.error("Failed to save profile")}finally{S.value=!1}}async function z(){if(!c.value||!p.value||!g.value){m.error("All ADO fields are required");return}b.value=!0;try{await t.saveIntegration({org:c.value,project:p.value,pat:g.value}),g.value="",m.success("Integration saved")}catch{m.error("Failed to save integration")}finally{b.value=!1}}async function E(){if(confirm("Delete ADO integration?"))try{await t.deleteIntegration(),c.value="",p.value="",g.value="",m.success("Integration deleted")}catch{m.error("Failed to delete integration")}}async function F(){try{await t.sync(),m.success("Sync complete")}catch{m.error(t.error??"Sync failed")}}return($,e)=>(x(),C("div",G,[e[26]||(e[26]=a("h2",{class:"text-lg font-semibold text-foreground"},"Settings",-1)),o(A,null,{default:s(()=>[o(U,null,{default:s(()=>[o(I,{class:"text-sm"},{default:s(()=>[...e[9]||(e[9]=[i("Profile",-1)])]),_:1})]),_:1}),o(P,{class:"space-y-4"},{default:s(()=>[a("div",J,[e[10]||(e[10]=a("label",{class:"text-sm font-medium text-foreground"},"Username",-1)),o(f,{modelValue:r.value,"onUpdate:modelValue":e[0]||(e[0]=l=>r.value=l),placeholder:"username"},null,8,["modelValue"])]),a("div",Q,[e[11]||(e[11]=a("label",{class:"text-sm font-medium text-foreground"},"Daily Overhead Hours",-1)),o(f,{modelValue:D.value,"onUpdate:modelValue":e[1]||(e[1]=l=>D.value=l),type:"number",min:"0",max:"8",step:"0.25",class:"w-32"},null,8,["modelValue"]),e[12]||(e[12]=a("p",{class:"text-xs text-muted-foreground"}," Hours per day to add for overhead / meetings ",-1))]),o(_,{loading:S.value,onClick:N},{default:s(()=>[...e[13]||(e[13]=[i("Save Profile",-1)])]),_:1},8,["loading"])]),_:1})]),_:1}),o(A,null,{default:s(()=>[o(U,null,{default:s(()=>[o(I,{class:"text-sm"},{default:s(()=>[...e[14]||(e[14]=[i("Azure DevOps Integration",-1)])]),_:1})]),_:1}),o(P,{class:"space-y-4"},{default:s(()=>[n(t).integration?(x(),C("div",R,[a("p",null,[e[15]||(e[15]=i(" Connected to ",-1)),a("strong",W,y(n(t).integration.org),1),e[16]||(e[16]=i(" / ",-1)),a("strong",X,y(n(t).integration.project),1)]),n(t).integration.last_synced_at?(x(),C("p",Y," Last synced: "+y(new Date(n(t).integration.last_synced_at).toLocaleString()),1)):k("",!0),n(t).integration.last_sync_error?(x(),C("p",Z," Error: "+y(n(t).integration.last_sync_error),1)):k("",!0)])):k("",!0),a("div",h,[a("div",ee,[e[17]||(e[17]=a("label",{class:"text-sm font-medium text-foreground"},"Organization",-1)),o(f,{modelValue:c.value,"onUpdate:modelValue":e[2]||(e[2]=l=>c.value=l),placeholder:"myorg"},null,8,["modelValue"])]),a("div",te,[e[18]||(e[18]=a("label",{class:"text-sm font-medium text-foreground"},"Project",-1)),o(f,{modelValue:p.value,"onUpdate:modelValue":e[3]||(e[3]=l=>p.value=l),placeholder:"myproject"},null,8,["modelValue"])])]),a("div",ae,[a("label",oe," Personal Access Token "+y(n(t).integration?"(leave blank to keep current)":""),1),o(f,{modelValue:g.value,"onUpdate:modelValue":e[4]||(e[4]=l=>g.value=l),type:"password",placeholder:"••••••••",autocomplete:"new-password"},null,8,["modelValue"])]),a("div",se,[o(_,{loading:b.value,onClick:z},{default:s(()=>[i(y(n(t).integration?"Update":"Connect"),1)]),_:1},8,["loading"]),n(t).integration?(x(),j(_,{key:0,variant:"outline",loading:n(t).syncing,onClick:F},{default:s(()=>[...e[19]||(e[19]=[i(" Sync Now ",-1)])]),_:1},8,["loading"])):k("",!0),n(t).integration?(x(),j(_,{key:1,variant:"destructive",size:"sm",onClick:E},{default:s(()=>[...e[20]||(e[20]=[i(" Disconnect ",-1)])]),_:1})):k("",!0)])]),_:1})]),_:1}),o(A,null,{default:s(()=>[o(U,null,{default:s(()=>[o(I,{class:"text-sm"},{default:s(()=>[...e[21]||(e[21]=[i("Export",-1)])]),_:1})]),_:1}),o(P,{class:"space-y-4"},{default:s(()=>[a("div",le,[a("div",ne,[e[22]||(e[22]=a("label",{class:"text-xs text-muted-foreground"},"From",-1)),o(f,{modelValue:V.value,"onUpdate:modelValue":e[5]||(e[5]=l=>V.value=l),type:"date",class:"h-8 text-xs"},null,8,["modelValue"])]),a("div",re,[e[23]||(e[23]=a("label",{class:"text-xs text-muted-foreground"},"To",-1)),o(f,{modelValue:w.value,"onUpdate:modelValue":e[6]||(e[6]=l=>w.value=l),type:"date",class:"h-8 text-xs"},null,8,["modelValue"])])]),a("div",ie,[o(_,{variant:"outline",size:"sm",onClick:e[7]||(e[7]=l=>n(M)(V.value,w.value))},{default:s(()=>[...e[24]||(e[24]=[i(" Download CSV ",-1)])]),_:1}),o(_,{variant:"outline",size:"sm",onClick:e[8]||(e[8]=l=>n(q)(V.value,w.value))},{default:s(()=>[...e[25]||(e[25]=[i(" Download ICS ",-1)])]),_:1})])]),_:1})]),_:1})]))}});export{ge as default}; diff --git a/src/static/assets/TaskForm.vue_vue_type_script_setup_true_lang-BbiBAO69.js b/src/static/assets/TaskForm.vue_vue_type_script_setup_true_lang-CUKCWjzn.js similarity index 95% rename from src/static/assets/TaskForm.vue_vue_type_script_setup_true_lang-BbiBAO69.js rename to src/static/assets/TaskForm.vue_vue_type_script_setup_true_lang-CUKCWjzn.js index 55013c9..09854df 100644 --- a/src/static/assets/TaskForm.vue_vue_type_script_setup_true_lang-BbiBAO69.js +++ b/src/static/assets/TaskForm.vue_vue_type_script_setup_true_lang-CUKCWjzn.js @@ -1 +1 @@ -import{D as c,B as N,r as _,d as C,o as b,c as y,p as D,i as $,t as V,j as T,s as F,v as A,n as E,w as k,a as l,e as v,F as L,l as M,h as P,k as z}from"./index-CsAuQ78D.js";import{_ as W}from"./Dialog.vue_vue_type_script_setup_true_lang-Cj3qRfUm.js";import{_ as B}from"./Input.vue_vue_type_script_setup_true_lang-DbqPHpNb.js";import{c as U}from"./utils-BKH6bEpf.js";import{_ as S}from"./Button.vue_vue_type_script_setup_true_lang-DnS8FWjO.js";import{u as H}from"./devops-ICsQ1df0.js";const f={list:e=>c.get("/api/tasks",{params:e}),get:e=>c.get(`/api/tasks/${e}`),create:e=>c.post("/api/tasks",e),update:(e,n)=>c.patch(`/api/tasks/${e}`,n),remove:e=>c.delete(`/api/tasks/${e}`),complete:e=>c.post(`/api/tasks/${e}/complete`),blocks:e=>c.get(`/api/tasks/${e}/blocks`),createBlock:(e,n)=>c.post(`/api/tasks/${e}/blocks`,n),updateBlock:(e,n)=>c.patch(`/api/tasks/blocks/${e}`,n),deleteBlock:e=>c.delete(`/api/tasks/blocks/${e}`)},re=N("tasks",()=>{const e=_([]),n=_(!1),o=_(null);async function p(d){n.value=!0,o.value=null;try{const i=await f.list({date:d});e.value=i.data}catch(i){const r=i;o.value=r.message??"Failed to fetch tasks"}finally{n.value=!1}}async function m(d){n.value=!0,o.value=null;try{const i=await f.list(d?{project_id:d}:void 0);e.value=i.data}catch(i){const r=i;o.value=r.message??"Failed to fetch tasks"}finally{n.value=!1}}async function a(d){const i=await f.create(d);return e.value.push(i.data),i.data}async function u(d,i){const r=await f.update(d,i),w=e.value.findIndex(I=>I.id===d);return w!==-1&&(e.value[w]=r.data),r.data}async function x(d){await f.remove(d),e.value=e.value.filter(i=>i.id!==d)}async function g(d){const i=await f.complete(d),r=e.value.findIndex(w=>w.id===d);return r!==-1&&(e.value[r]=i.data),i.data}async function t(d,i){return(await f.createBlock(d,i)).data}async function s(d,i){return(await f.updateBlock(d,i)).data}async function j(d){await f.deleteBlock(d)}return{tasks:e,loading:n,error:o,fetchForDate:p,fetchAll:m,create:a,update:u,remove:x,complete:g,createBlock:t,updateBlock:s,deleteBlock:j}}),O=["id","value","placeholder","disabled","rows"],q=C({__name:"Textarea",props:{modelValue:{},placeholder:{},disabled:{type:Boolean},rows:{},class:{},id:{}},emits:["update:modelValue"],setup(e,{emit:n}){const o=e,p=n;return(m,a)=>(b(),y("textarea",{id:e.id,value:e.modelValue,placeholder:e.placeholder,disabled:e.disabled,rows:e.rows??3,class:D($(U)("flex w-full rounded-md border border-input bg-background px-3 py-2 text-sm","ring-offset-background placeholder:text-muted-foreground","focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2","disabled:cursor-not-allowed disabled:opacity-50 resize-none",o.class)),onInput:a[0]||(a[0]=u=>p("update:modelValue",u.target.value))},null,42,O))}}),G=["id","value","disabled"],J=["selected"],h=C({__name:"Select",props:{modelValue:{},disabled:{type:Boolean},class:{},id:{},placeholder:{}},emits:["update:modelValue","change"],setup(e,{emit:n}){const o=e,p=n;return(m,a)=>(b(),y("select",{id:e.id,value:e.modelValue,disabled:e.disabled,class:D($(U)("flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm","ring-offset-background focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2","disabled:cursor-not-allowed disabled:opacity-50",o.class)),onChange:a[0]||(a[0]=u=>p("update:modelValue",u.target.value))},[e.placeholder?(b(),y("option",{key:0,value:"",disabled:"",selected:!e.modelValue},V(e.placeholder),9,J)):T("",!0),F(m.$slots,"default")],42,G))}}),K={class:"space-y-1.5"},Q={class:"space-y-1.5"},R={class:"grid grid-cols-2 gap-3"},X={class:"space-y-1.5"},Y={class:"space-y-1.5"},Z={class:"grid grid-cols-2 gap-3"},ee={class:"space-y-1.5"},te={class:"space-y-1.5"},ae={key:0,class:"space-y-1.5"},le=["value"],me=C({__name:"TaskForm",props:{open:{type:Boolean},task:{default:null},defaultDate:{}},emits:["close","save"],setup(e,{emit:n}){const o=e,p=n,m=H(),a=_({title:"",notes:"",planned_date:"",estimate_hours:1,status:"todo",priority:3,project_id:void 0,azure_work_item_id:void 0});A(()=>o.open,g=>{g&&(o.task?a.value={title:o.task.title,notes:o.task.notes??"",planned_date:o.task.planned_date??"",estimate_hours:o.task.estimate_hours??1,status:o.task.status,priority:o.task.priority,project_id:o.task.project_id??void 0,azure_work_item_id:o.task.azure_work_item_id??void 0}:a.value={title:"",notes:"",planned_date:o.defaultDate??"",estimate_hours:1,status:"todo",priority:3,project_id:void 0,azure_work_item_id:void 0},m.integration&&!m.workItems.length&&m.fetchWorkItems("open"))},{immediate:!0});const u=_(!1);async function x(){if(a.value.title.trim()){u.value=!0;try{const g={title:a.value.title,notes:a.value.notes||void 0,planned_date:a.value.planned_date,estimate_hours:a.value.estimate_hours,status:a.value.status,priority:a.value.priority,project_id:a.value.project_id||null,azure_work_item_id:a.value.azure_work_item_id||null};p("save",g)}finally{u.value=!1}}}return(g,t)=>(b(),E(W,{open:e.open,title:e.task?"Edit Task":"New Task","max-width":"max-w-md",onClose:t[8]||(t[8]=s=>p("close"))},{footer:k(()=>[v(S,{variant:"outline",disabled:u.value,onClick:t[7]||(t[7]=s=>p("close"))},{default:k(()=>[...t[18]||(t[18]=[z("Cancel",-1)])]),_:1},8,["disabled"]),v(S,{loading:u.value,onClick:x},{default:k(()=>[z(V(e.task?"Update":"Create"),1)]),_:1},8,["loading"])]),default:k(()=>[l("form",{class:"space-y-4",onSubmit:P(x,["prevent"])},[l("div",K,[t[9]||(t[9]=l("label",{class:"text-sm font-medium text-foreground"},"Title *",-1)),v(B,{modelValue:a.value.title,"onUpdate:modelValue":t[0]||(t[0]=s=>a.value.title=s),placeholder:"Task title...",disabled:u.value},null,8,["modelValue","disabled"])]),l("div",Q,[t[10]||(t[10]=l("label",{class:"text-sm font-medium text-foreground"},"Notes",-1)),v(q,{modelValue:a.value.notes,"onUpdate:modelValue":t[1]||(t[1]=s=>a.value.notes=s),placeholder:"Additional notes...",disabled:u.value},null,8,["modelValue","disabled"])]),l("div",R,[l("div",X,[t[11]||(t[11]=l("label",{class:"text-sm font-medium text-foreground"},"Planned Date",-1)),v(B,{modelValue:a.value.planned_date,"onUpdate:modelValue":t[2]||(t[2]=s=>a.value.planned_date=s),type:"date",disabled:u.value},null,8,["modelValue","disabled"])]),l("div",Y,[t[12]||(t[12]=l("label",{class:"text-sm font-medium text-foreground"},"Estimate (h)",-1)),v(B,{modelValue:a.value.estimate_hours,"onUpdate:modelValue":t[3]||(t[3]=s=>a.value.estimate_hours=s),type:"number",min:"0.25",max:"24",step:"0.25",disabled:u.value},null,8,["modelValue","disabled"])])]),l("div",Z,[l("div",ee,[t[14]||(t[14]=l("label",{class:"text-sm font-medium text-foreground"},"Status",-1)),v(h,{modelValue:a.value.status,"onUpdate:modelValue":t[4]||(t[4]=s=>a.value.status=s),disabled:u.value},{default:k(()=>[...t[13]||(t[13]=[l("option",{value:"todo"},"Todo",-1),l("option",{value:"doing"},"Doing",-1),l("option",{value:"done"},"Done",-1),l("option",{value:"cancelled"},"Cancelled",-1)])]),_:1},8,["modelValue","disabled"])]),l("div",te,[t[16]||(t[16]=l("label",{class:"text-sm font-medium text-foreground"},"Priority",-1)),v(h,{modelValue:a.value.priority,"onUpdate:modelValue":t[5]||(t[5]=s=>a.value.priority=s),disabled:u.value},{default:k(()=>[...t[15]||(t[15]=[l("option",{value:"1"},"1 - Low",-1),l("option",{value:"2"},"2 - Normal",-1),l("option",{value:"3"},"3 - Medium",-1),l("option",{value:"4"},"4 - High",-1),l("option",{value:"5"},"5 - Critical",-1)])]),_:1},8,["modelValue","disabled"])])]),$(m).workItems.length?(b(),y("div",ae,[t[17]||(t[17]=l("label",{class:"text-sm font-medium text-foreground"},"Azure DevOps Work Item",-1)),v(h,{modelValue:a.value.azure_work_item_id,"onUpdate:modelValue":t[6]||(t[6]=s=>a.value.azure_work_item_id=s),disabled:u.value,placeholder:"Link work item..."},{default:k(()=>[(b(!0),y(L,null,M($(m).workItems,s=>(b(),y("option",{key:s.id,value:String(s.id)}," #"+V(s.id)+" – "+V(s.title),9,le))),128))]),_:1},8,["modelValue","disabled"])])):T("",!0)],32)]),_:1},8,["open","title"]))}});export{me as _,re as u}; +import{D as c,B as N,r as _,d as C,o as b,c as y,p as D,i as $,t as V,j as T,s as F,v as A,n as E,w as k,a as l,e as v,F as L,l as M,h as P,k as z}from"./index-CO3lBHVT.js";import{_ as W}from"./Dialog.vue_vue_type_script_setup_true_lang-DU2Z0xrF.js";import{_ as B}from"./Input.vue_vue_type_script_setup_true_lang-CDN6a_dJ.js";import{c as U}from"./utils-B1YxgOQw.js";import{_ as S}from"./Button.vue_vue_type_script_setup_true_lang-BwCrpRUQ.js";import{u as H}from"./devops-D_lPg6L8.js";const f={list:e=>c.get("/api/tasks",{params:e}),get:e=>c.get(`/api/tasks/${e}`),create:e=>c.post("/api/tasks",e),update:(e,n)=>c.patch(`/api/tasks/${e}`,n),remove:e=>c.delete(`/api/tasks/${e}`),complete:e=>c.post(`/api/tasks/${e}/complete`),blocks:e=>c.get(`/api/tasks/${e}/blocks`),createBlock:(e,n)=>c.post(`/api/tasks/${e}/blocks`,n),updateBlock:(e,n)=>c.patch(`/api/tasks/blocks/${e}`,n),deleteBlock:e=>c.delete(`/api/tasks/blocks/${e}`)},re=N("tasks",()=>{const e=_([]),n=_(!1),o=_(null);async function p(d){n.value=!0,o.value=null;try{const i=await f.list({date:d});e.value=i.data}catch(i){const r=i;o.value=r.message??"Failed to fetch tasks"}finally{n.value=!1}}async function m(d){n.value=!0,o.value=null;try{const i=await f.list(d?{project_id:d}:void 0);e.value=i.data}catch(i){const r=i;o.value=r.message??"Failed to fetch tasks"}finally{n.value=!1}}async function a(d){const i=await f.create(d);return e.value.push(i.data),i.data}async function u(d,i){const r=await f.update(d,i),w=e.value.findIndex(I=>I.id===d);return w!==-1&&(e.value[w]=r.data),r.data}async function x(d){await f.remove(d),e.value=e.value.filter(i=>i.id!==d)}async function g(d){const i=await f.complete(d),r=e.value.findIndex(w=>w.id===d);return r!==-1&&(e.value[r]=i.data),i.data}async function t(d,i){return(await f.createBlock(d,i)).data}async function s(d,i){return(await f.updateBlock(d,i)).data}async function j(d){await f.deleteBlock(d)}return{tasks:e,loading:n,error:o,fetchForDate:p,fetchAll:m,create:a,update:u,remove:x,complete:g,createBlock:t,updateBlock:s,deleteBlock:j}}),O=["id","value","placeholder","disabled","rows"],q=C({__name:"Textarea",props:{modelValue:{},placeholder:{},disabled:{type:Boolean},rows:{},class:{},id:{}},emits:["update:modelValue"],setup(e,{emit:n}){const o=e,p=n;return(m,a)=>(b(),y("textarea",{id:e.id,value:e.modelValue,placeholder:e.placeholder,disabled:e.disabled,rows:e.rows??3,class:D($(U)("flex w-full rounded-md border border-input bg-background px-3 py-2 text-sm","ring-offset-background placeholder:text-muted-foreground","focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2","disabled:cursor-not-allowed disabled:opacity-50 resize-none",o.class)),onInput:a[0]||(a[0]=u=>p("update:modelValue",u.target.value))},null,42,O))}}),G=["id","value","disabled"],J=["selected"],h=C({__name:"Select",props:{modelValue:{},disabled:{type:Boolean},class:{},id:{},placeholder:{}},emits:["update:modelValue","change"],setup(e,{emit:n}){const o=e,p=n;return(m,a)=>(b(),y("select",{id:e.id,value:e.modelValue,disabled:e.disabled,class:D($(U)("flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm","ring-offset-background focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2","disabled:cursor-not-allowed disabled:opacity-50",o.class)),onChange:a[0]||(a[0]=u=>p("update:modelValue",u.target.value))},[e.placeholder?(b(),y("option",{key:0,value:"",disabled:"",selected:!e.modelValue},V(e.placeholder),9,J)):T("",!0),F(m.$slots,"default")],42,G))}}),K={class:"space-y-1.5"},Q={class:"space-y-1.5"},R={class:"grid grid-cols-2 gap-3"},X={class:"space-y-1.5"},Y={class:"space-y-1.5"},Z={class:"grid grid-cols-2 gap-3"},ee={class:"space-y-1.5"},te={class:"space-y-1.5"},ae={key:0,class:"space-y-1.5"},le=["value"],me=C({__name:"TaskForm",props:{open:{type:Boolean},task:{default:null},defaultDate:{}},emits:["close","save"],setup(e,{emit:n}){const o=e,p=n,m=H(),a=_({title:"",notes:"",planned_date:"",estimate_hours:1,status:"todo",priority:3,project_id:void 0,azure_work_item_id:void 0});A(()=>o.open,g=>{g&&(o.task?a.value={title:o.task.title,notes:o.task.notes??"",planned_date:o.task.planned_date??"",estimate_hours:o.task.estimate_hours??1,status:o.task.status,priority:o.task.priority,project_id:o.task.project_id??void 0,azure_work_item_id:o.task.azure_work_item_id??void 0}:a.value={title:"",notes:"",planned_date:o.defaultDate??"",estimate_hours:1,status:"todo",priority:3,project_id:void 0,azure_work_item_id:void 0},m.integration&&!m.workItems.length&&m.fetchWorkItems("open"))},{immediate:!0});const u=_(!1);async function x(){if(a.value.title.trim()){u.value=!0;try{const g={title:a.value.title,notes:a.value.notes||void 0,planned_date:a.value.planned_date,estimate_hours:a.value.estimate_hours,status:a.value.status,priority:a.value.priority,project_id:a.value.project_id||null,azure_work_item_id:a.value.azure_work_item_id||null};p("save",g)}finally{u.value=!1}}}return(g,t)=>(b(),E(W,{open:e.open,title:e.task?"Edit Task":"New Task","max-width":"max-w-md",onClose:t[8]||(t[8]=s=>p("close"))},{footer:k(()=>[v(S,{variant:"outline",disabled:u.value,onClick:t[7]||(t[7]=s=>p("close"))},{default:k(()=>[...t[18]||(t[18]=[z("Cancel",-1)])]),_:1},8,["disabled"]),v(S,{loading:u.value,onClick:x},{default:k(()=>[z(V(e.task?"Update":"Create"),1)]),_:1},8,["loading"])]),default:k(()=>[l("form",{class:"space-y-4",onSubmit:P(x,["prevent"])},[l("div",K,[t[9]||(t[9]=l("label",{class:"text-sm font-medium text-foreground"},"Title *",-1)),v(B,{modelValue:a.value.title,"onUpdate:modelValue":t[0]||(t[0]=s=>a.value.title=s),placeholder:"Task title...",disabled:u.value},null,8,["modelValue","disabled"])]),l("div",Q,[t[10]||(t[10]=l("label",{class:"text-sm font-medium text-foreground"},"Notes",-1)),v(q,{modelValue:a.value.notes,"onUpdate:modelValue":t[1]||(t[1]=s=>a.value.notes=s),placeholder:"Additional notes...",disabled:u.value},null,8,["modelValue","disabled"])]),l("div",R,[l("div",X,[t[11]||(t[11]=l("label",{class:"text-sm font-medium text-foreground"},"Planned Date",-1)),v(B,{modelValue:a.value.planned_date,"onUpdate:modelValue":t[2]||(t[2]=s=>a.value.planned_date=s),type:"date",disabled:u.value},null,8,["modelValue","disabled"])]),l("div",Y,[t[12]||(t[12]=l("label",{class:"text-sm font-medium text-foreground"},"Estimate (h)",-1)),v(B,{modelValue:a.value.estimate_hours,"onUpdate:modelValue":t[3]||(t[3]=s=>a.value.estimate_hours=s),type:"number",min:"0.25",max:"24",step:"0.25",disabled:u.value},null,8,["modelValue","disabled"])])]),l("div",Z,[l("div",ee,[t[14]||(t[14]=l("label",{class:"text-sm font-medium text-foreground"},"Status",-1)),v(h,{modelValue:a.value.status,"onUpdate:modelValue":t[4]||(t[4]=s=>a.value.status=s),disabled:u.value},{default:k(()=>[...t[13]||(t[13]=[l("option",{value:"todo"},"Todo",-1),l("option",{value:"doing"},"Doing",-1),l("option",{value:"done"},"Done",-1),l("option",{value:"cancelled"},"Cancelled",-1)])]),_:1},8,["modelValue","disabled"])]),l("div",te,[t[16]||(t[16]=l("label",{class:"text-sm font-medium text-foreground"},"Priority",-1)),v(h,{modelValue:a.value.priority,"onUpdate:modelValue":t[5]||(t[5]=s=>a.value.priority=s),disabled:u.value},{default:k(()=>[...t[15]||(t[15]=[l("option",{value:"1"},"1 - Low",-1),l("option",{value:"2"},"2 - Normal",-1),l("option",{value:"3"},"3 - Medium",-1),l("option",{value:"4"},"4 - High",-1),l("option",{value:"5"},"5 - Critical",-1)])]),_:1},8,["modelValue","disabled"])])]),$(m).workItems.length?(b(),y("div",ae,[t[17]||(t[17]=l("label",{class:"text-sm font-medium text-foreground"},"Azure DevOps Work Item",-1)),v(h,{modelValue:a.value.azure_work_item_id,"onUpdate:modelValue":t[6]||(t[6]=s=>a.value.azure_work_item_id=s),disabled:u.value,placeholder:"Link work item..."},{default:k(()=>[(b(!0),y(L,null,M($(m).workItems,s=>(b(),y("option",{key:s.id,value:String(s.id)}," #"+V(s.id)+" – "+V(s.title),9,le))),128))]),_:1},8,["modelValue","disabled"])])):T("",!0)],32)]),_:1},8,["open","title"]))}});export{me as _,re as u}; diff --git a/src/static/assets/admin-CFFp_mFQ.js b/src/static/assets/admin-s3id3yDK.js similarity index 68% rename from src/static/assets/admin-CFFp_mFQ.js rename to src/static/assets/admin-s3id3yDK.js index 16d4400..93a6b68 100644 --- a/src/static/assets/admin-CFFp_mFQ.js +++ b/src/static/assets/admin-s3id3yDK.js @@ -1 +1 @@ -import{D as e}from"./index-CsAuQ78D.js";const i={users:()=>e.get("/api/admin/users"),keys:()=>e.get("/api/keys"),createKey:s=>e.post("/api/keys",s),revokeKey:s=>e.delete(`/api/keys/${s}`)};export{i as a}; +import{D as e}from"./index-CO3lBHVT.js";const i={users:()=>e.get("/api/admin/users"),keys:()=>e.get("/api/keys"),createKey:s=>e.post("/api/keys",s),revokeKey:s=>e.delete(`/api/keys/${s}`)};export{i as a}; diff --git a/src/static/assets/dashboard-Dw2iyYza.js b/src/static/assets/dashboard-4_z0ZWLj.js similarity index 88% rename from src/static/assets/dashboard-Dw2iyYza.js rename to src/static/assets/dashboard-4_z0ZWLj.js index f8f3d48..75a422a 100644 --- a/src/static/assets/dashboard-Dw2iyYza.js +++ b/src/static/assets/dashboard-4_z0ZWLj.js @@ -1 +1 @@ -import{D as t}from"./index-CsAuQ78D.js";const e={summary:a=>t.get("/api/dashboard/summary",{params:a}),projects:a=>t.get("/api/dashboard/projects",{params:a}),timeline:a=>t.get("/api/dashboard/timeline",{params:a}),monthly:a=>t.get("/api/dashboard/monthly",{params:a}),dow:a=>t.get("/api/dashboard/dow",{params:a}),tools:a=>t.get("/api/dashboard/tools",{params:a}),activity:a=>t.get("/api/dashboard/activity",{params:a}),calendar:a=>t.get("/api/dashboard/calendar",{params:a}),project:(a,o)=>t.get("/api/dashboard/project/"+a,{params:o})};export{e as d}; +import{D as t}from"./index-CO3lBHVT.js";const e={summary:a=>t.get("/api/dashboard/summary",{params:a}),projects:a=>t.get("/api/dashboard/projects",{params:a}),timeline:a=>t.get("/api/dashboard/timeline",{params:a}),monthly:a=>t.get("/api/dashboard/monthly",{params:a}),dow:a=>t.get("/api/dashboard/dow",{params:a}),tools:a=>t.get("/api/dashboard/tools",{params:a}),activity:a=>t.get("/api/dashboard/activity",{params:a}),calendar:a=>t.get("/api/dashboard/calendar",{params:a}),project:(a,o)=>t.get("/api/dashboard/project/"+a,{params:o})};export{e as d}; diff --git a/src/static/assets/devops-ICsQ1df0.js b/src/static/assets/devops-D_lPg6L8.js similarity index 94% rename from src/static/assets/devops-ICsQ1df0.js rename to src/static/assets/devops-D_lPg6L8.js index 9d7c9ca..e9cd897 100644 --- a/src/static/assets/devops-ICsQ1df0.js +++ b/src/static/assets/devops-D_lPg6L8.js @@ -1 +1 @@ -import{D as s,B as I,r as o}from"./index-CsAuQ78D.js";const i={getIntegration:()=>s.get("/api/devops/integration"),saveIntegration:e=>s.put("/api/devops/integration",e),deleteIntegration:()=>s.delete("/api/devops/integration"),sync:()=>s.post("/api/devops/sync"),workItems:e=>s.get("/api/devops/work-items",{params:e?{state:e}:void 0})},m=I("devops",()=>{const e=o(null),r=o([]),l=o(!1),n=o(!1),c=o(null);async function u(){n.value=!0;try{const t=await i.getIntegration();e.value=t.data}catch{e.value=null}finally{n.value=!1}}async function d(t){const a=await i.saveIntegration(t);e.value=a.data}async function g(){await i.deleteIntegration(),e.value=null}async function f(){var t,a;l.value=!0,c.value=null;try{await i.sync(),await u()}catch(v){const p=v;throw c.value=((a=(t=p.response)==null?void 0:t.data)==null?void 0:a.detail)??p.message??"Sync failed",v}finally{l.value=!1}}async function y(t){n.value=!0;try{const a=await i.workItems(t);r.value=a.data}catch{r.value=[]}finally{n.value=!1}}return{integration:e,workItems:r,syncing:l,loading:n,error:c,fetchIntegration:u,saveIntegration:d,deleteIntegration:g,sync:f,fetchWorkItems:y}});export{m as u}; +import{D as s,B as I,r as o}from"./index-CO3lBHVT.js";const i={getIntegration:()=>s.get("/api/devops/integration"),saveIntegration:e=>s.put("/api/devops/integration",e),deleteIntegration:()=>s.delete("/api/devops/integration"),sync:()=>s.post("/api/devops/sync"),workItems:e=>s.get("/api/devops/work-items",{params:e?{state:e}:void 0})},m=I("devops",()=>{const e=o(null),r=o([]),l=o(!1),n=o(!1),c=o(null);async function u(){n.value=!0;try{const t=await i.getIntegration();e.value=t.data}catch{e.value=null}finally{n.value=!1}}async function d(t){const a=await i.saveIntegration(t);e.value=a.data}async function g(){await i.deleteIntegration(),e.value=null}async function f(){var t,a;l.value=!0,c.value=null;try{await i.sync(),await u()}catch(v){const p=v;throw c.value=((a=(t=p.response)==null?void 0:t.data)==null?void 0:a.detail)??p.message??"Sync failed",v}finally{l.value=!1}}async function y(t){n.value=!0;try{const a=await i.workItems(t);r.value=a.data}catch{r.value=[]}finally{n.value=!1}}return{integration:e,workItems:r,syncing:l,loading:n,error:c,fetchIntegration:u,saveIntegration:d,deleteIntegration:g,sync:f,fetchWorkItems:y}});export{m as u}; diff --git a/src/static/assets/index-CsAuQ78D.js b/src/static/assets/index-CO3lBHVT.js similarity index 99% rename from src/static/assets/index-CsAuQ78D.js rename to src/static/assets/index-CO3lBHVT.js index 60bb229..02483cf 100644 --- a/src/static/assets/index-CsAuQ78D.js +++ b/src/static/assets/index-CO3lBHVT.js @@ -1,4 +1,4 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/LoginView-9xmDEijf.js","assets/Button.vue_vue_type_script_setup_true_lang-DnS8FWjO.js","assets/utils-BKH6bEpf.js","assets/Input.vue_vue_type_script_setup_true_lang-DbqPHpNb.js","assets/CardContent.vue_vue_type_script_setup_true_lang-p2CthxwA.js","assets/DashboardView-DLjSgvQE.js","assets/dashboard-Dw2iyYza.js","assets/CardTitle.vue_vue_type_script_setup_true_lang-Bt6Ti-pL.js","assets/Progress.vue_vue_type_script_setup_true_lang-Dd5JfY7g.js","assets/CalendarView-ZIYAKfCn.js","assets/TaskForm.vue_vue_type_script_setup_true_lang-BbiBAO69.js","assets/Dialog.vue_vue_type_script_setup_true_lang-Cj3qRfUm.js","assets/devops-ICsQ1df0.js","assets/Badge.vue_vue_type_script_setup_true_lang-DbHLHOj7.js","assets/CalendarView-DGmJamL9.css","assets/PlannerView-DBNPY1iT.js","assets/ProjectsView-DKI4lK5K.js","assets/ProjectDetailView-CZkVgSqx.js","assets/LiveView-EzK82NTo.js","assets/ReportsView-muZ7SDGH.js","assets/ReportsView-BczQ2gJa.css","assets/KeysView-CK48n_iC.js","assets/admin-CFFp_mFQ.js","assets/SettingsView-BvqXXl4L.js","assets/AdminView-DtdytqmI.js"])))=>i.map(i=>d[i]); +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/LoginView-C8KUpWjz.js","assets/Button.vue_vue_type_script_setup_true_lang-BwCrpRUQ.js","assets/utils-B1YxgOQw.js","assets/Input.vue_vue_type_script_setup_true_lang-CDN6a_dJ.js","assets/CardContent.vue_vue_type_script_setup_true_lang-UcbhRP8Z.js","assets/DashboardView-CQAK2qP6.js","assets/dashboard-4_z0ZWLj.js","assets/CardTitle.vue_vue_type_script_setup_true_lang-CpgNrOxB.js","assets/Progress.vue_vue_type_script_setup_true_lang-C9HXKxSB.js","assets/CalendarView-DQ2Hqx4H.js","assets/TaskForm.vue_vue_type_script_setup_true_lang-CUKCWjzn.js","assets/Dialog.vue_vue_type_script_setup_true_lang-DU2Z0xrF.js","assets/devops-D_lPg6L8.js","assets/Badge.vue_vue_type_script_setup_true_lang-CocRK-vO.js","assets/CalendarView-DGmJamL9.css","assets/PlannerView-D1tzk_DZ.js","assets/ProjectsView-CmpkpAqw.js","assets/ProjectDetailView-CJKn-onp.js","assets/LiveView-4Mk1DKtX.js","assets/ReportsView-RRBaLOSo.js","assets/ReportsView-BczQ2gJa.css","assets/KeysView-BzDjpAPG.js","assets/admin-s3id3yDK.js","assets/SettingsView-451r_a8J.js","assets/AdminView-CJ79dSWf.js"])))=>i.map(i=>d[i]); var ji=e=>{throw TypeError(e)};var ao=(e,t,n)=>t.has(e)||ji("Cannot "+n);var O=(e,t,n)=>(ao(e,t,"read from private field"),n?n.call(e):t.get(e)),pe=(e,t,n)=>t.has(e)?ji("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,n),ne=(e,t,n,s)=>(ao(e,t,"write to private field"),s?s.call(e,n):t.set(e,n),n),$e=(e,t,n)=>(ao(e,t,"access private method"),n);var lr=(e,t,n,s)=>({set _(r){ne(e,t,r,n)},get _(){return O(e,t,s)}});(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const r of document.querySelectorAll('link[rel="modulepreload"]'))s(r);new MutationObserver(r=>{for(const o of r)if(o.type==="childList")for(const i of o.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&s(i)}).observe(document,{childList:!0,subtree:!0});function n(r){const o={};return r.integrity&&(o.integrity=r.integrity),r.referrerPolicy&&(o.referrerPolicy=r.referrerPolicy),r.crossOrigin==="use-credentials"?o.credentials="include":r.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function s(r){if(r.ep)return;r.ep=!0;const o=n(r);fetch(r.href,o)}})();/** * @vue/shared v3.5.34 * (c) 2018-present Yuxi (Evan) You and Vue contributors @@ -37,4 +37,4 @@ var ji=e=>{throw TypeError(e)};var ao=(e,t,n)=>t.has(e)||ji("Cannot "+n);var O=( * vue-router v4.6.4 * (c) 2025 Eduardo San Martin Morote * @license MIT - */let Yy=()=>location.protocol+"//"+location.host;function Mu(e,t){const{pathname:n,search:s,hash:r}=t,o=e.indexOf("#");if(o>-1){let i=r.includes(e.slice(o))?e.slice(o).length:1,a=r.slice(i);return a[0]!=="/"&&(a="/"+a),nl(a,"")}return nl(n,e)+s+r}function Xy(e,t,n,s){let r=[],o=[],i=null;const a=({state:h})=>{const p=Mu(e,location),x=n.value,g=t.value;let w=0;if(h){if(n.value=p,t.value=h,i&&i===x){i=null;return}w=g?h.position-g.position:0}else s(p);r.forEach(E=>{E(n.value,x,{delta:w,type:si.pop,direction:w?w>0?Oo.forward:Oo.back:Oo.unknown})})};function l(){i=n.value}function u(h){r.push(h);const p=()=>{const x=r.indexOf(h);x>-1&&r.splice(x,1)};return o.push(p),p}function c(){if(document.visibilityState==="hidden"){const{history:h}=window;if(!h.state)return;h.replaceState(we({},h.state,{scroll:ro()}),"")}}function f(){for(const h of o)h();o=[],window.removeEventListener("popstate",a),window.removeEventListener("pagehide",c),document.removeEventListener("visibilitychange",c)}return window.addEventListener("popstate",a),window.addEventListener("pagehide",c),document.addEventListener("visibilitychange",c),{pauseListeners:l,listen:u,destroy:f}}function al(e,t,n,s=!1,r=!1){return{back:e,current:t,forward:n,replaced:s,position:window.history.length,scroll:r?ro():null}}function Zy(e){const{history:t,location:n}=window,s={value:Mu(e,n)},r={value:t.state};r.value||o(s.value,{back:null,current:s.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function o(l,u,c){const f=e.indexOf("#"),h=f>-1?(n.host&&document.querySelector("base")?e:e.slice(f))+l:Yy()+e+l;try{t[c?"replaceState":"pushState"](u,"",h),r.value=u}catch(p){console.error(p),n[c?"replace":"assign"](h)}}function i(l,u){o(l,we({},t.state,al(r.value.back,l,r.value.forward,!0),u,{position:r.value.position}),!0),s.value=l}function a(l,u){const c=we({},r.value,t.state,{forward:l,scroll:ro()});o(c.current,c,!0),o(l,we({},al(s.value,l,null),{position:c.position+1},u),!1),s.value=l}return{location:s,state:r,push:a,replace:i}}function e0(e){e=ky(e);const t=Zy(e),n=Xy(e,t.state,t.location,t.replace);function s(o,i=!0){i||n.pauseListeners(),history.go(o)}const r=we({location:"",base:e,go:s,createHref:jy.bind(null,e)},t,n);return Object.defineProperty(r,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(r,"state",{enumerable:!0,get:()=>t.state.value}),r}let Dn=function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.Group=2]="Group",e}({});var je=function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.ParamRegExp=2]="ParamRegExp",e[e.ParamRegExpEnd=3]="ParamRegExpEnd",e[e.EscapeNext=4]="EscapeNext",e}(je||{});const t0={type:Dn.Static,value:""},n0=/[a-zA-Z0-9_]/;function s0(e){if(!e)return[[]];if(e==="/")return[[t0]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(p){throw new Error(`ERR (${n})/"${u}": ${p}`)}let n=je.Static,s=n;const r=[];let o;function i(){o&&r.push(o),o=[]}let a=0,l,u="",c="";function f(){u&&(n===je.Static?o.push({type:Dn.Static,value:u}):n===je.Param||n===je.ParamRegExp||n===je.ParamRegExpEnd?(o.length>1&&(l==="*"||l==="+")&&t(`A repeatable param (${u}) must be alone in its segment. eg: '/:ids+.`),o.push({type:Dn.Param,value:u,regexp:c,repeatable:l==="*"||l==="+",optional:l==="*"||l==="?"})):t("Invalid state to consume buffer"),u="")}function h(){u+=l}for(;at.length?t.length===1&&t[0]===nt.Static+nt.Segment?1:-1:0}function ku(e,t){let n=0;const s=e.score,r=t.score;for(;n0&&t[t.length-1]<0}const l0={strict:!1,end:!0,sensitive:!1};function c0(e,t,n){const s=i0(s0(e.path),n),r=we(s,{record:e,parent:t,children:[],alias:[]});return t&&!r.record.aliasOf==!t.record.aliasOf&&t.children.push(r),r}function u0(e,t){const n=[],s=new Map;t=tl(l0,t);function r(f){return s.get(f)}function o(f,h,p){const x=!p,g=fl(f);g.aliasOf=p&&p.record;const w=tl(t,f),E=[g];if("alias"in f){const v=typeof f.alias=="string"?[f.alias]:f.alias;for(const D of v)E.push(fl(we({},g,{components:p?p.record.components:g.components,path:D,aliasOf:p?p.record:g})))}let A,y;for(const v of E){const{path:D}=v;if(h&&D[0]!=="/"){const K=h.record.path,j=K[K.length-1]==="/"?"":"/";v.path=h.record.path+(D&&j+D)}if(A=c0(v,h,w),p?p.alias.push(A):(y=y||A,y!==A&&y.alias.push(A),x&&f.name&&!dl(A)&&i(f.name)),Bu(A)&&l(A),g.children){const K=g.children;for(let j=0;j{i(y)}:Fs}function i(f){if(Lu(f)){const h=s.get(f);h&&(s.delete(f),n.splice(n.indexOf(h),1),h.children.forEach(i),h.alias.forEach(i))}else{const h=n.indexOf(f);h>-1&&(n.splice(h,1),f.record.name&&s.delete(f.record.name),f.children.forEach(i),f.alias.forEach(i))}}function a(){return n}function l(f){const h=h0(f,n);n.splice(h,0,f),f.record.name&&!dl(f)&&s.set(f.record.name,f)}function u(f,h){let p,x={},g,w;if("name"in f&&f.name){if(p=s.get(f.name),!p)throw ps(Le.MATCHER_NOT_FOUND,{location:f});w=p.record.name,x=we(ul(h.params,p.keys.filter(y=>!y.optional).concat(p.parent?p.parent.keys.filter(y=>y.optional):[]).map(y=>y.name)),f.params&&ul(f.params,p.keys.map(y=>y.name))),g=p.stringify(x)}else if(f.path!=null)g=f.path,p=n.find(y=>y.re.test(g)),p&&(x=p.parse(g),w=p.record.name);else{if(p=h.name?s.get(h.name):n.find(y=>y.re.test(h.path)),!p)throw ps(Le.MATCHER_NOT_FOUND,{location:f,currentLocation:h});w=p.record.name,x=we({},h.params,f.params),g=p.stringify(x)}const E=[];let A=p;for(;A;)E.unshift(A.record),A=A.parent;return{name:w,path:g,params:x,matched:E,meta:d0(E)}}e.forEach(f=>o(f));function c(){n.length=0,s.clear()}return{addRoute:o,resolve:u,removeRoute:i,clearRoutes:c,getRoutes:a,getRecordMatcher:r}}function ul(e,t){const n={};for(const s of t)s in e&&(n[s]=e[s]);return n}function fl(e){const t={path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:e.aliasOf,beforeEnter:e.beforeEnter,props:f0(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}};return Object.defineProperty(t,"mods",{value:{}}),t}function f0(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(const s in e.components)t[s]=typeof n=="object"?n[s]:n;return t}function dl(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function d0(e){return e.reduce((t,n)=>we(t,n.meta),{})}function h0(e,t){let n=0,s=t.length;for(;n!==s;){const o=n+s>>1;ku(e,t[o])<0?s=o:n=o+1}const r=p0(e);return r&&(s=t.lastIndexOf(r,s-1)),s}function p0(e){let t=e;for(;t=t.parent;)if(Bu(t)&&ku(e,t)===0)return t}function Bu({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function hl(e){const t=xt(oo),n=xt(Fi),s=ge(()=>{const l=Ke(e.to);return t.resolve(l)}),r=ge(()=>{const{matched:l}=s.value,{length:u}=l,c=l[u-1],f=n.matched;if(!c||!f.length)return-1;const h=f.findIndex(hs.bind(null,c));if(h>-1)return h;const p=pl(l[u-2]);return u>1&&pl(c)===p&&f[f.length-1].path!==p?f.findIndex(hs.bind(null,l[u-2])):h}),o=ge(()=>r.value>-1&&b0(n.params,s.value.params)),i=ge(()=>r.value>-1&&r.value===n.matched.length-1&&Iu(n.params,s.value.params));function a(l={}){if(v0(l)){const u=t[Ke(e.replace)?"replace":"push"](Ke(e.to)).catch(Fs);return e.viewTransition&&typeof document<"u"&&"startViewTransition"in document&&document.startViewTransition(()=>u),u}return Promise.resolve()}return{route:s,href:ge(()=>s.value.href),isActive:o,isExactActive:i,navigate:a}}function m0(e){return e.length===1?e[0]:e}const g0=Vn({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"},viewTransition:Boolean},useLink:hl,setup(e,{slots:t}){const n=Zs(hl(e)),{options:s}=xt(oo),r=ge(()=>({[ml(e.activeClass,s.linkActiveClass,"router-link-active")]:n.isActive,[ml(e.exactActiveClass,s.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const o=t.default&&m0(t.default(n));return e.custom?o:Ai("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:r.value},o)}}}),y0=g0;function v0(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function b0(e,t){for(const n in t){const s=t[n],r=e[n];if(typeof s=="string"){if(s!==r)return!1}else if(!Tt(r)||r.length!==s.length||s.some((o,i)=>o.valueOf()!==r[i].valueOf()))return!1}return!0}function pl(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const ml=(e,t,n)=>e??t??n,w0=Vn({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const s=xt(oi),r=ge(()=>e.route||s.value),o=xt(il,0),i=ge(()=>{let u=Ke(o);const{matched:c}=r.value;let f;for(;(f=c[u])&&!f.components;)u++;return u}),a=ge(()=>r.value.matched[i.value]);yr(il,ge(()=>i.value+1)),yr(Gy,a),yr(oi,r);const l=fe();return wn(()=>[l.value,a.value,e.name],([u,c,f],[h,p,x])=>{c&&(c.instances[f]=u,p&&p!==c&&u&&u===h&&(c.leaveGuards.size||(c.leaveGuards=p.leaveGuards),c.updateGuards.size||(c.updateGuards=p.updateGuards))),u&&c&&(!p||!hs(c,p)||!h)&&(c.enterCallbacks[f]||[]).forEach(g=>g(u))},{flush:"post"}),()=>{const u=r.value,c=e.name,f=a.value,h=f&&f.components[c];if(!h)return gl(n.default,{Component:h,route:u});const p=f.props[c],x=p?p===!0?u.params:typeof p=="function"?p(u):p:null,w=Ai(h,we({},x,t,{onVnodeUnmounted:E=>{E.component.isUnmounted&&(f.instances[c]=null)},ref:l}));return gl(n.default,{Component:w,route:u})||w}}});function gl(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const _0=w0;function x0(e){const t=u0(e.routes,e),n=e.parseQuery||zy,s=e.stringifyQuery||ol,r=e.history,o=xs(),i=xs(),a=xs(),l=vf(on);let u=on;Gn&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const c=Ao.bind(null,C=>""+C),f=Ao.bind(null,Py),h=Ao.bind(null,Ws);function p(C,L){let k,Q;return Lu(C)?(k=t.getRecordMatcher(C),Q=L):Q=C,t.addRoute(Q,k)}function x(C){const L=t.getRecordMatcher(C);L&&t.removeRoute(L)}function g(){return t.getRoutes().map(C=>C.record)}function w(C){return!!t.getRecordMatcher(C)}function E(C,L){if(L=we({},L||l.value),typeof C=="string"){const b=Ro(n,C,L.path),T=t.resolve({path:b.path},L),N=r.createHref(b.fullPath);return we(b,T,{params:h(T.params),hash:Ws(b.hash),redirectedFrom:void 0,href:N})}let k;if(C.path!=null)k=we({},C,{path:Ro(n,C.path,L.path).path});else{const b=we({},C.params);for(const T in b)b[T]==null&&delete b[T];k=we({},C,{params:f(b)}),L.params=f(L.params)}const Q=t.resolve(k,L),re=C.hash||"";Q.params=c(h(Q.params));const d=Iy(s,we({},C,{hash:Ry(re),path:Q.path})),m=r.createHref(d);return we({fullPath:d,hash:re,query:s===ol?Wy(C.query):C.query||{}},Q,{redirectedFrom:void 0,href:m})}function A(C){return typeof C=="string"?Ro(n,C,l.value.path):we({},C)}function y(C,L){if(u!==C)return ps(Le.NAVIGATION_CANCELLED,{from:L,to:C})}function v(C){return j(C)}function D(C){return v(we(A(C),{replace:!0}))}function K(C,L){const k=C.matched[C.matched.length-1];if(k&&k.redirect){const{redirect:Q}=k;let re=typeof Q=="function"?Q(C,L):Q;return typeof re=="string"&&(re=re.includes("?")||re.includes("#")?re=A(re):{path:re},re.params={}),we({query:C.query,hash:C.hash,params:re.path!=null?{}:C.params},re)}}function j(C,L){const k=u=E(C),Q=l.value,re=C.state,d=C.force,m=C.replace===!0,b=K(k,Q);if(b)return j(we(A(b),{state:typeof b=="object"?we({},re,b.state):re,force:d,replace:m}),L||k);const T=k;T.redirectedFrom=L;let N;return!d&&Ly(s,Q,k)&&(N=ps(Le.NAVIGATION_DUPLICATED,{to:T,from:Q}),De(Q,Q,!0,!1)),(N?Promise.resolve(N):I(T,Q)).catch(P=>$t(P)?$t(P,Le.NAVIGATION_GUARD_REDIRECT)?P:ue(P):ie(P,T,Q)).then(P=>{if(P){if($t(P,Le.NAVIGATION_GUARD_REDIRECT))return j(we({replace:m},A(P.to),{state:typeof P.to=="object"?we({},re,P.to.state):re,force:d}),L||T)}else P=F(T,Q,!0,m,re);return q(T,Q,P),P})}function B(C,L){const k=y(C,L);return k?Promise.reject(k):Promise.resolve()}function S(C){const L=Ve.values().next().value;return L&&typeof L.runWithContext=="function"?L.runWithContext(C):C()}function I(C,L){let k;const[Q,re,d]=Jy(C,L);k=To(Q.reverse(),"beforeRouteLeave",C,L);for(const b of Q)b.leaveGuards.forEach(T=>{k.push(dn(T,C,L))});const m=B.bind(null,C,L);return k.push(m),ae(k).then(()=>{k=[];for(const b of o.list())k.push(dn(b,C,L));return k.push(m),ae(k)}).then(()=>{k=To(re,"beforeRouteUpdate",C,L);for(const b of re)b.updateGuards.forEach(T=>{k.push(dn(T,C,L))});return k.push(m),ae(k)}).then(()=>{k=[];for(const b of d)if(b.beforeEnter)if(Tt(b.beforeEnter))for(const T of b.beforeEnter)k.push(dn(T,C,L));else k.push(dn(b.beforeEnter,C,L));return k.push(m),ae(k)}).then(()=>(C.matched.forEach(b=>b.enterCallbacks={}),k=To(d,"beforeRouteEnter",C,L,S),k.push(m),ae(k))).then(()=>{k=[];for(const b of i.list())k.push(dn(b,C,L));return k.push(m),ae(k)}).catch(b=>$t(b,Le.NAVIGATION_CANCELLED)?b:Promise.reject(b))}function q(C,L,k){a.list().forEach(Q=>S(()=>Q(C,L,k)))}function F(C,L,k,Q,re){const d=y(C,L);if(d)return d;const m=L===on,b=Gn?history.state:{};k&&(Q||m?r.replace(C.fullPath,we({scroll:m&&b&&b.scroll},re)):r.push(C.fullPath,re)),l.value=C,De(C,L,k,m),ue()}let W;function se(){W||(W=r.listen((C,L,k)=>{if(!R.listening)return;const Q=E(C),re=K(Q,R.currentRoute.value);if(re){j(we(re,{replace:!0,force:!0}),Q).catch(Fs);return}u=Q;const d=l.value;Gn&&qy(rl(d.fullPath,k.delta),ro()),I(Q,d).catch(m=>$t(m,Le.NAVIGATION_ABORTED|Le.NAVIGATION_CANCELLED)?m:$t(m,Le.NAVIGATION_GUARD_REDIRECT)?(j(we(A(m.to),{force:!0}),Q).then(b=>{$t(b,Le.NAVIGATION_ABORTED|Le.NAVIGATION_DUPLICATED)&&!k.delta&&k.type===si.pop&&r.go(-1,!1)}).catch(Fs),Promise.reject()):(k.delta&&r.go(-k.delta,!1),ie(m,Q,d))).then(m=>{m=m||F(Q,d,!1),m&&(k.delta&&!$t(m,Le.NAVIGATION_CANCELLED)?r.go(-k.delta,!1):k.type===si.pop&&$t(m,Le.NAVIGATION_ABORTED|Le.NAVIGATION_DUPLICATED)&&r.go(-1,!1)),q(Q,d,m)}).catch(Fs)}))}let de=xs(),le=xs(),X;function ie(C,L,k){ue(C);const Q=le.list();return Q.length?Q.forEach(re=>re(C,L,k)):console.error(C),Promise.reject(C)}function ve(){return X&&l.value!==on?Promise.resolve():new Promise((C,L)=>{de.add([C,L])})}function ue(C){return X||(X=!C,se(),de.list().forEach(([L,k])=>C?k(C):L()),de.reset()),C}function De(C,L,k,Q){const{scrollBehavior:re}=e;if(!Gn||!re)return Promise.resolve();const d=!k&&Vy(rl(C.fullPath,0))||(Q||!k)&&history.state&&history.state.scroll||null;return Hn().then(()=>re(C,L,d)).then(m=>m&&Hy(m)).catch(m=>ie(m,C,L))}const ke=C=>r.go(C);let Oe;const Ve=new Set,R={currentRoute:l,listening:!0,addRoute:p,removeRoute:x,clearRoutes:t.clearRoutes,hasRoute:w,getRoutes:g,resolve:E,options:e,push:v,replace:D,go:ke,back:()=>ke(-1),forward:()=>ke(1),beforeEach:o.add,beforeResolve:i.add,afterEach:a.add,onError:le.add,isReady:ve,install(C){C.component("RouterLink",y0),C.component("RouterView",_0),C.config.globalProperties.$router=R,Object.defineProperty(C.config.globalProperties,"$route",{enumerable:!0,get:()=>Ke(l)}),Gn&&!Oe&&l.value===on&&(Oe=!0,v(r.location).catch(Q=>{}));const L={};for(const Q in on)Object.defineProperty(L,Q,{get:()=>l.value[Q],enumerable:!0});C.provide(oo,R),C.provide(Fi,Zl(L)),C.provide(oi,l);const k=C.unmount;Ve.add(C),C.unmount=function(){Ve.delete(C),Ve.size<1&&(u=on,W&&W(),W=null,l.value=on,Oe=!1,X=!1),k()}}};function ae(C){return C.reduce((L,k)=>L.then(()=>S(k)),Promise.resolve())}return R}function Z0(){return xt(oo)}function ev(e){return xt(Fi)}const E0=[{path:"/login",name:"login",component:()=>bt(()=>import("./LoginView-9xmDEijf.js"),__vite__mapDeps([0,1,2,3,4])),meta:{public:!0}},{path:"/",component:()=>bt(()=>import("./AppLayout-YazutZmy.js"),[]),children:[{path:"",name:"dashboard",component:()=>bt(()=>import("./DashboardView-DLjSgvQE.js"),__vite__mapDeps([5,6,4,2,7,8,1]))},{path:"calendar",name:"calendar",component:()=>bt(()=>import("./CalendarView-ZIYAKfCn.js"),__vite__mapDeps([9,6,2,1,10,11,3,12,13,14]))},{path:"planner",name:"planner",component:()=>bt(()=>import("./PlannerView-DBNPY1iT.js"),__vite__mapDeps([15,10,11,1,2,3,12,13]))},{path:"projects",name:"projects",component:()=>bt(()=>import("./ProjectsView-DKI4lK5K.js"),__vite__mapDeps([16,6,4,2,8]))},{path:"projects/:id",name:"project-detail",component:()=>bt(()=>import("./ProjectDetailView-CZkVgSqx.js"),__vite__mapDeps([17,6,4,2,7]))},{path:"live",name:"live",component:()=>bt(()=>import("./LiveView-EzK82NTo.js"),__vite__mapDeps([18,4,2,1]))},{path:"reports",name:"reports",component:()=>bt(()=>import("./ReportsView-muZ7SDGH.js"),__vite__mapDeps([19,4,2,13,1,20]))},{path:"keys",name:"keys",component:()=>bt(()=>import("./KeysView-CK48n_iC.js"),__vite__mapDeps([21,22,4,2,1,11,3]))},{path:"settings",name:"settings",component:()=>bt(()=>import("./SettingsView-BvqXXl4L.js"),__vite__mapDeps([23,12,4,2,7,3,1]))},{path:"admin",name:"admin",component:()=>bt(()=>import("./AdminView-DtdytqmI.js"),__vite__mapDeps([24,22,4,2,13])),meta:{adminOnly:!0}}]},{path:"/:pathMatch(.*)*",redirect:"/"}],Mi=x0({history:e0("/cc-dashboard/"),routes:E0});Mi.beforeEach((e,t,n)=>{const s=so();if(e.meta.public){n();return}if(!s.isAuthenticated){n({name:"login",query:{redirect:e.fullPath}});return}if(e.meta.adminOnly&&!s.isAdmin){n({name:"dashboard"});return}n()});const io=vh(py),S0=_h();io.use(S0);io.use(Mi);io.use(lp);const yl=so();qg(()=>yl.getToken(),()=>{yl.logout(),Mi.push({name:"login"})});io.mount("#app");export{bn as A,Rh as B,O0 as C,Ls as D,_i as E,Ae as F,A0 as G,N0 as K,$d as T,dy as _,J as a,R0 as b,ce as c,Vn as d,Te as e,Z0 as f,ev as g,Ra as h,Ke as i,st as j,Vs as k,ts as l,ge as m,Ut as n,ee as o,dt as p,Xf as q,fe as r,_t as s,Ct as t,so as u,wn as v,fn as w,Us as x,Df as y,dh as z}; + */let Yy=()=>location.protocol+"//"+location.host;function Mu(e,t){const{pathname:n,search:s,hash:r}=t,o=e.indexOf("#");if(o>-1){let i=r.includes(e.slice(o))?e.slice(o).length:1,a=r.slice(i);return a[0]!=="/"&&(a="/"+a),nl(a,"")}return nl(n,e)+s+r}function Xy(e,t,n,s){let r=[],o=[],i=null;const a=({state:h})=>{const p=Mu(e,location),x=n.value,g=t.value;let w=0;if(h){if(n.value=p,t.value=h,i&&i===x){i=null;return}w=g?h.position-g.position:0}else s(p);r.forEach(E=>{E(n.value,x,{delta:w,type:si.pop,direction:w?w>0?Oo.forward:Oo.back:Oo.unknown})})};function l(){i=n.value}function u(h){r.push(h);const p=()=>{const x=r.indexOf(h);x>-1&&r.splice(x,1)};return o.push(p),p}function c(){if(document.visibilityState==="hidden"){const{history:h}=window;if(!h.state)return;h.replaceState(we({},h.state,{scroll:ro()}),"")}}function f(){for(const h of o)h();o=[],window.removeEventListener("popstate",a),window.removeEventListener("pagehide",c),document.removeEventListener("visibilitychange",c)}return window.addEventListener("popstate",a),window.addEventListener("pagehide",c),document.addEventListener("visibilitychange",c),{pauseListeners:l,listen:u,destroy:f}}function al(e,t,n,s=!1,r=!1){return{back:e,current:t,forward:n,replaced:s,position:window.history.length,scroll:r?ro():null}}function Zy(e){const{history:t,location:n}=window,s={value:Mu(e,n)},r={value:t.state};r.value||o(s.value,{back:null,current:s.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function o(l,u,c){const f=e.indexOf("#"),h=f>-1?(n.host&&document.querySelector("base")?e:e.slice(f))+l:Yy()+e+l;try{t[c?"replaceState":"pushState"](u,"",h),r.value=u}catch(p){console.error(p),n[c?"replace":"assign"](h)}}function i(l,u){o(l,we({},t.state,al(r.value.back,l,r.value.forward,!0),u,{position:r.value.position}),!0),s.value=l}function a(l,u){const c=we({},r.value,t.state,{forward:l,scroll:ro()});o(c.current,c,!0),o(l,we({},al(s.value,l,null),{position:c.position+1},u),!1),s.value=l}return{location:s,state:r,push:a,replace:i}}function e0(e){e=ky(e);const t=Zy(e),n=Xy(e,t.state,t.location,t.replace);function s(o,i=!0){i||n.pauseListeners(),history.go(o)}const r=we({location:"",base:e,go:s,createHref:jy.bind(null,e)},t,n);return Object.defineProperty(r,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(r,"state",{enumerable:!0,get:()=>t.state.value}),r}let Dn=function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.Group=2]="Group",e}({});var je=function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.ParamRegExp=2]="ParamRegExp",e[e.ParamRegExpEnd=3]="ParamRegExpEnd",e[e.EscapeNext=4]="EscapeNext",e}(je||{});const t0={type:Dn.Static,value:""},n0=/[a-zA-Z0-9_]/;function s0(e){if(!e)return[[]];if(e==="/")return[[t0]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(p){throw new Error(`ERR (${n})/"${u}": ${p}`)}let n=je.Static,s=n;const r=[];let o;function i(){o&&r.push(o),o=[]}let a=0,l,u="",c="";function f(){u&&(n===je.Static?o.push({type:Dn.Static,value:u}):n===je.Param||n===je.ParamRegExp||n===je.ParamRegExpEnd?(o.length>1&&(l==="*"||l==="+")&&t(`A repeatable param (${u}) must be alone in its segment. eg: '/:ids+.`),o.push({type:Dn.Param,value:u,regexp:c,repeatable:l==="*"||l==="+",optional:l==="*"||l==="?"})):t("Invalid state to consume buffer"),u="")}function h(){u+=l}for(;at.length?t.length===1&&t[0]===nt.Static+nt.Segment?1:-1:0}function ku(e,t){let n=0;const s=e.score,r=t.score;for(;n0&&t[t.length-1]<0}const l0={strict:!1,end:!0,sensitive:!1};function c0(e,t,n){const s=i0(s0(e.path),n),r=we(s,{record:e,parent:t,children:[],alias:[]});return t&&!r.record.aliasOf==!t.record.aliasOf&&t.children.push(r),r}function u0(e,t){const n=[],s=new Map;t=tl(l0,t);function r(f){return s.get(f)}function o(f,h,p){const x=!p,g=fl(f);g.aliasOf=p&&p.record;const w=tl(t,f),E=[g];if("alias"in f){const v=typeof f.alias=="string"?[f.alias]:f.alias;for(const D of v)E.push(fl(we({},g,{components:p?p.record.components:g.components,path:D,aliasOf:p?p.record:g})))}let A,y;for(const v of E){const{path:D}=v;if(h&&D[0]!=="/"){const K=h.record.path,j=K[K.length-1]==="/"?"":"/";v.path=h.record.path+(D&&j+D)}if(A=c0(v,h,w),p?p.alias.push(A):(y=y||A,y!==A&&y.alias.push(A),x&&f.name&&!dl(A)&&i(f.name)),Bu(A)&&l(A),g.children){const K=g.children;for(let j=0;j{i(y)}:Fs}function i(f){if(Lu(f)){const h=s.get(f);h&&(s.delete(f),n.splice(n.indexOf(h),1),h.children.forEach(i),h.alias.forEach(i))}else{const h=n.indexOf(f);h>-1&&(n.splice(h,1),f.record.name&&s.delete(f.record.name),f.children.forEach(i),f.alias.forEach(i))}}function a(){return n}function l(f){const h=h0(f,n);n.splice(h,0,f),f.record.name&&!dl(f)&&s.set(f.record.name,f)}function u(f,h){let p,x={},g,w;if("name"in f&&f.name){if(p=s.get(f.name),!p)throw ps(Le.MATCHER_NOT_FOUND,{location:f});w=p.record.name,x=we(ul(h.params,p.keys.filter(y=>!y.optional).concat(p.parent?p.parent.keys.filter(y=>y.optional):[]).map(y=>y.name)),f.params&&ul(f.params,p.keys.map(y=>y.name))),g=p.stringify(x)}else if(f.path!=null)g=f.path,p=n.find(y=>y.re.test(g)),p&&(x=p.parse(g),w=p.record.name);else{if(p=h.name?s.get(h.name):n.find(y=>y.re.test(h.path)),!p)throw ps(Le.MATCHER_NOT_FOUND,{location:f,currentLocation:h});w=p.record.name,x=we({},h.params,f.params),g=p.stringify(x)}const E=[];let A=p;for(;A;)E.unshift(A.record),A=A.parent;return{name:w,path:g,params:x,matched:E,meta:d0(E)}}e.forEach(f=>o(f));function c(){n.length=0,s.clear()}return{addRoute:o,resolve:u,removeRoute:i,clearRoutes:c,getRoutes:a,getRecordMatcher:r}}function ul(e,t){const n={};for(const s of t)s in e&&(n[s]=e[s]);return n}function fl(e){const t={path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:e.aliasOf,beforeEnter:e.beforeEnter,props:f0(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}};return Object.defineProperty(t,"mods",{value:{}}),t}function f0(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(const s in e.components)t[s]=typeof n=="object"?n[s]:n;return t}function dl(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function d0(e){return e.reduce((t,n)=>we(t,n.meta),{})}function h0(e,t){let n=0,s=t.length;for(;n!==s;){const o=n+s>>1;ku(e,t[o])<0?s=o:n=o+1}const r=p0(e);return r&&(s=t.lastIndexOf(r,s-1)),s}function p0(e){let t=e;for(;t=t.parent;)if(Bu(t)&&ku(e,t)===0)return t}function Bu({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function hl(e){const t=xt(oo),n=xt(Fi),s=ge(()=>{const l=Ke(e.to);return t.resolve(l)}),r=ge(()=>{const{matched:l}=s.value,{length:u}=l,c=l[u-1],f=n.matched;if(!c||!f.length)return-1;const h=f.findIndex(hs.bind(null,c));if(h>-1)return h;const p=pl(l[u-2]);return u>1&&pl(c)===p&&f[f.length-1].path!==p?f.findIndex(hs.bind(null,l[u-2])):h}),o=ge(()=>r.value>-1&&b0(n.params,s.value.params)),i=ge(()=>r.value>-1&&r.value===n.matched.length-1&&Iu(n.params,s.value.params));function a(l={}){if(v0(l)){const u=t[Ke(e.replace)?"replace":"push"](Ke(e.to)).catch(Fs);return e.viewTransition&&typeof document<"u"&&"startViewTransition"in document&&document.startViewTransition(()=>u),u}return Promise.resolve()}return{route:s,href:ge(()=>s.value.href),isActive:o,isExactActive:i,navigate:a}}function m0(e){return e.length===1?e[0]:e}const g0=Vn({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"},viewTransition:Boolean},useLink:hl,setup(e,{slots:t}){const n=Zs(hl(e)),{options:s}=xt(oo),r=ge(()=>({[ml(e.activeClass,s.linkActiveClass,"router-link-active")]:n.isActive,[ml(e.exactActiveClass,s.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const o=t.default&&m0(t.default(n));return e.custom?o:Ai("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:r.value},o)}}}),y0=g0;function v0(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function b0(e,t){for(const n in t){const s=t[n],r=e[n];if(typeof s=="string"){if(s!==r)return!1}else if(!Tt(r)||r.length!==s.length||s.some((o,i)=>o.valueOf()!==r[i].valueOf()))return!1}return!0}function pl(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const ml=(e,t,n)=>e??t??n,w0=Vn({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const s=xt(oi),r=ge(()=>e.route||s.value),o=xt(il,0),i=ge(()=>{let u=Ke(o);const{matched:c}=r.value;let f;for(;(f=c[u])&&!f.components;)u++;return u}),a=ge(()=>r.value.matched[i.value]);yr(il,ge(()=>i.value+1)),yr(Gy,a),yr(oi,r);const l=fe();return wn(()=>[l.value,a.value,e.name],([u,c,f],[h,p,x])=>{c&&(c.instances[f]=u,p&&p!==c&&u&&u===h&&(c.leaveGuards.size||(c.leaveGuards=p.leaveGuards),c.updateGuards.size||(c.updateGuards=p.updateGuards))),u&&c&&(!p||!hs(c,p)||!h)&&(c.enterCallbacks[f]||[]).forEach(g=>g(u))},{flush:"post"}),()=>{const u=r.value,c=e.name,f=a.value,h=f&&f.components[c];if(!h)return gl(n.default,{Component:h,route:u});const p=f.props[c],x=p?p===!0?u.params:typeof p=="function"?p(u):p:null,w=Ai(h,we({},x,t,{onVnodeUnmounted:E=>{E.component.isUnmounted&&(f.instances[c]=null)},ref:l}));return gl(n.default,{Component:w,route:u})||w}}});function gl(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const _0=w0;function x0(e){const t=u0(e.routes,e),n=e.parseQuery||zy,s=e.stringifyQuery||ol,r=e.history,o=xs(),i=xs(),a=xs(),l=vf(on);let u=on;Gn&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const c=Ao.bind(null,C=>""+C),f=Ao.bind(null,Py),h=Ao.bind(null,Ws);function p(C,L){let k,Q;return Lu(C)?(k=t.getRecordMatcher(C),Q=L):Q=C,t.addRoute(Q,k)}function x(C){const L=t.getRecordMatcher(C);L&&t.removeRoute(L)}function g(){return t.getRoutes().map(C=>C.record)}function w(C){return!!t.getRecordMatcher(C)}function E(C,L){if(L=we({},L||l.value),typeof C=="string"){const b=Ro(n,C,L.path),T=t.resolve({path:b.path},L),N=r.createHref(b.fullPath);return we(b,T,{params:h(T.params),hash:Ws(b.hash),redirectedFrom:void 0,href:N})}let k;if(C.path!=null)k=we({},C,{path:Ro(n,C.path,L.path).path});else{const b=we({},C.params);for(const T in b)b[T]==null&&delete b[T];k=we({},C,{params:f(b)}),L.params=f(L.params)}const Q=t.resolve(k,L),re=C.hash||"";Q.params=c(h(Q.params));const d=Iy(s,we({},C,{hash:Ry(re),path:Q.path})),m=r.createHref(d);return we({fullPath:d,hash:re,query:s===ol?Wy(C.query):C.query||{}},Q,{redirectedFrom:void 0,href:m})}function A(C){return typeof C=="string"?Ro(n,C,l.value.path):we({},C)}function y(C,L){if(u!==C)return ps(Le.NAVIGATION_CANCELLED,{from:L,to:C})}function v(C){return j(C)}function D(C){return v(we(A(C),{replace:!0}))}function K(C,L){const k=C.matched[C.matched.length-1];if(k&&k.redirect){const{redirect:Q}=k;let re=typeof Q=="function"?Q(C,L):Q;return typeof re=="string"&&(re=re.includes("?")||re.includes("#")?re=A(re):{path:re},re.params={}),we({query:C.query,hash:C.hash,params:re.path!=null?{}:C.params},re)}}function j(C,L){const k=u=E(C),Q=l.value,re=C.state,d=C.force,m=C.replace===!0,b=K(k,Q);if(b)return j(we(A(b),{state:typeof b=="object"?we({},re,b.state):re,force:d,replace:m}),L||k);const T=k;T.redirectedFrom=L;let N;return!d&&Ly(s,Q,k)&&(N=ps(Le.NAVIGATION_DUPLICATED,{to:T,from:Q}),De(Q,Q,!0,!1)),(N?Promise.resolve(N):I(T,Q)).catch(P=>$t(P)?$t(P,Le.NAVIGATION_GUARD_REDIRECT)?P:ue(P):ie(P,T,Q)).then(P=>{if(P){if($t(P,Le.NAVIGATION_GUARD_REDIRECT))return j(we({replace:m},A(P.to),{state:typeof P.to=="object"?we({},re,P.to.state):re,force:d}),L||T)}else P=F(T,Q,!0,m,re);return q(T,Q,P),P})}function B(C,L){const k=y(C,L);return k?Promise.reject(k):Promise.resolve()}function S(C){const L=Ve.values().next().value;return L&&typeof L.runWithContext=="function"?L.runWithContext(C):C()}function I(C,L){let k;const[Q,re,d]=Jy(C,L);k=To(Q.reverse(),"beforeRouteLeave",C,L);for(const b of Q)b.leaveGuards.forEach(T=>{k.push(dn(T,C,L))});const m=B.bind(null,C,L);return k.push(m),ae(k).then(()=>{k=[];for(const b of o.list())k.push(dn(b,C,L));return k.push(m),ae(k)}).then(()=>{k=To(re,"beforeRouteUpdate",C,L);for(const b of re)b.updateGuards.forEach(T=>{k.push(dn(T,C,L))});return k.push(m),ae(k)}).then(()=>{k=[];for(const b of d)if(b.beforeEnter)if(Tt(b.beforeEnter))for(const T of b.beforeEnter)k.push(dn(T,C,L));else k.push(dn(b.beforeEnter,C,L));return k.push(m),ae(k)}).then(()=>(C.matched.forEach(b=>b.enterCallbacks={}),k=To(d,"beforeRouteEnter",C,L,S),k.push(m),ae(k))).then(()=>{k=[];for(const b of i.list())k.push(dn(b,C,L));return k.push(m),ae(k)}).catch(b=>$t(b,Le.NAVIGATION_CANCELLED)?b:Promise.reject(b))}function q(C,L,k){a.list().forEach(Q=>S(()=>Q(C,L,k)))}function F(C,L,k,Q,re){const d=y(C,L);if(d)return d;const m=L===on,b=Gn?history.state:{};k&&(Q||m?r.replace(C.fullPath,we({scroll:m&&b&&b.scroll},re)):r.push(C.fullPath,re)),l.value=C,De(C,L,k,m),ue()}let W;function se(){W||(W=r.listen((C,L,k)=>{if(!R.listening)return;const Q=E(C),re=K(Q,R.currentRoute.value);if(re){j(we(re,{replace:!0,force:!0}),Q).catch(Fs);return}u=Q;const d=l.value;Gn&&qy(rl(d.fullPath,k.delta),ro()),I(Q,d).catch(m=>$t(m,Le.NAVIGATION_ABORTED|Le.NAVIGATION_CANCELLED)?m:$t(m,Le.NAVIGATION_GUARD_REDIRECT)?(j(we(A(m.to),{force:!0}),Q).then(b=>{$t(b,Le.NAVIGATION_ABORTED|Le.NAVIGATION_DUPLICATED)&&!k.delta&&k.type===si.pop&&r.go(-1,!1)}).catch(Fs),Promise.reject()):(k.delta&&r.go(-k.delta,!1),ie(m,Q,d))).then(m=>{m=m||F(Q,d,!1),m&&(k.delta&&!$t(m,Le.NAVIGATION_CANCELLED)?r.go(-k.delta,!1):k.type===si.pop&&$t(m,Le.NAVIGATION_ABORTED|Le.NAVIGATION_DUPLICATED)&&r.go(-1,!1)),q(Q,d,m)}).catch(Fs)}))}let de=xs(),le=xs(),X;function ie(C,L,k){ue(C);const Q=le.list();return Q.length?Q.forEach(re=>re(C,L,k)):console.error(C),Promise.reject(C)}function ve(){return X&&l.value!==on?Promise.resolve():new Promise((C,L)=>{de.add([C,L])})}function ue(C){return X||(X=!C,se(),de.list().forEach(([L,k])=>C?k(C):L()),de.reset()),C}function De(C,L,k,Q){const{scrollBehavior:re}=e;if(!Gn||!re)return Promise.resolve();const d=!k&&Vy(rl(C.fullPath,0))||(Q||!k)&&history.state&&history.state.scroll||null;return Hn().then(()=>re(C,L,d)).then(m=>m&&Hy(m)).catch(m=>ie(m,C,L))}const ke=C=>r.go(C);let Oe;const Ve=new Set,R={currentRoute:l,listening:!0,addRoute:p,removeRoute:x,clearRoutes:t.clearRoutes,hasRoute:w,getRoutes:g,resolve:E,options:e,push:v,replace:D,go:ke,back:()=>ke(-1),forward:()=>ke(1),beforeEach:o.add,beforeResolve:i.add,afterEach:a.add,onError:le.add,isReady:ve,install(C){C.component("RouterLink",y0),C.component("RouterView",_0),C.config.globalProperties.$router=R,Object.defineProperty(C.config.globalProperties,"$route",{enumerable:!0,get:()=>Ke(l)}),Gn&&!Oe&&l.value===on&&(Oe=!0,v(r.location).catch(Q=>{}));const L={};for(const Q in on)Object.defineProperty(L,Q,{get:()=>l.value[Q],enumerable:!0});C.provide(oo,R),C.provide(Fi,Zl(L)),C.provide(oi,l);const k=C.unmount;Ve.add(C),C.unmount=function(){Ve.delete(C),Ve.size<1&&(u=on,W&&W(),W=null,l.value=on,Oe=!1,X=!1),k()}}};function ae(C){return C.reduce((L,k)=>L.then(()=>S(k)),Promise.resolve())}return R}function Z0(){return xt(oo)}function ev(e){return xt(Fi)}const E0=[{path:"/login",name:"login",component:()=>bt(()=>import("./LoginView-C8KUpWjz.js"),__vite__mapDeps([0,1,2,3,4])),meta:{public:!0}},{path:"/",component:()=>bt(()=>import("./AppLayout-DXx1REXd.js"),[]),children:[{path:"",name:"dashboard",component:()=>bt(()=>import("./DashboardView-CQAK2qP6.js"),__vite__mapDeps([5,6,4,2,7,8,1]))},{path:"calendar",name:"calendar",component:()=>bt(()=>import("./CalendarView-DQ2Hqx4H.js"),__vite__mapDeps([9,6,2,1,10,11,3,12,13,14]))},{path:"planner",name:"planner",component:()=>bt(()=>import("./PlannerView-D1tzk_DZ.js"),__vite__mapDeps([15,10,11,1,2,3,12,13]))},{path:"projects",name:"projects",component:()=>bt(()=>import("./ProjectsView-CmpkpAqw.js"),__vite__mapDeps([16,6,4,2,8]))},{path:"projects/:id",name:"project-detail",component:()=>bt(()=>import("./ProjectDetailView-CJKn-onp.js"),__vite__mapDeps([17,6,4,2,7]))},{path:"live",name:"live",component:()=>bt(()=>import("./LiveView-4Mk1DKtX.js"),__vite__mapDeps([18,4,2,1]))},{path:"reports",name:"reports",component:()=>bt(()=>import("./ReportsView-RRBaLOSo.js"),__vite__mapDeps([19,4,2,13,1,20]))},{path:"keys",name:"keys",component:()=>bt(()=>import("./KeysView-BzDjpAPG.js"),__vite__mapDeps([21,22,4,2,1,11,3]))},{path:"settings",name:"settings",component:()=>bt(()=>import("./SettingsView-451r_a8J.js"),__vite__mapDeps([23,12,4,2,7,3,1]))},{path:"admin",name:"admin",component:()=>bt(()=>import("./AdminView-CJ79dSWf.js"),__vite__mapDeps([24,22,4,2,13])),meta:{adminOnly:!0}}]},{path:"/:pathMatch(.*)*",redirect:"/"}],Mi=x0({history:e0("/cc-dashboard/"),routes:E0});Mi.beforeEach((e,t,n)=>{const s=so();if(e.meta.public){n();return}if(!s.isAuthenticated){n({name:"login",query:{redirect:e.fullPath}});return}if(e.meta.adminOnly&&!s.isAdmin){n({name:"dashboard"});return}n()});const io=vh(py),S0=_h();io.use(S0);io.use(Mi);io.use(lp);const yl=so();qg(()=>yl.getToken(),()=>{yl.logout(),Mi.push({name:"login"})});io.mount("#app");export{bn as A,Rh as B,O0 as C,Ls as D,_i as E,Ae as F,A0 as G,N0 as K,$d as T,dy as _,J as a,R0 as b,ce as c,Vn as d,Te as e,Z0 as f,ev as g,Ra as h,Ke as i,st as j,Vs as k,ts as l,ge as m,Ut as n,ee as o,dt as p,Xf as q,fe as r,_t as s,Ct as t,so as u,wn as v,fn as w,Us as x,Df as y,dh as z}; diff --git a/src/static/assets/utils-BKH6bEpf.js b/src/static/assets/utils-B1YxgOQw.js similarity index 99% rename from src/static/assets/utils-BKH6bEpf.js rename to src/static/assets/utils-B1YxgOQw.js index e2f75ac..16237cc 100644 --- a/src/static/assets/utils-BKH6bEpf.js +++ b/src/static/assets/utils-B1YxgOQw.js @@ -1 +1 @@ -import{d as se,o as ie,c as le,p as ae,a as Z}from"./index-CsAuQ78D.js";const Fe=se({__name:"Spinner",props:{size:{},class:{}},setup(e){return(r,t)=>(ie(),le("svg",{class:ae(["animate-spin text-current",e.size==="sm"?"h-3 w-3":e.size==="lg"?"h-6 w-6":"h-4 w-4",r.$props.class]),xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24"},[...t[0]||(t[0]=[Z("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4"},null,-1),Z("path",{class:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"},null,-1)])],2))}});function Q(e){var r,t,o="";if(typeof e=="string"||typeof e=="number")o+=e;else if(typeof e=="object")if(Array.isArray(e)){var i=e.length;for(r=0;r{const r=ue(e),{conflictingClassGroups:t,conflictingClassGroupModifiers:o}=e;return{getClassGroupId:a=>{const s=a.split(O);return s[0]===""&&s.length!==1&&s.shift(),ee(s,r)||pe(a)},getConflictingClassGroupIds:(a,s)=>{const u=t[a]||[];return s&&o[a]?[...u,...o[a]]:u}}},ee=(e,r)=>{var a;if(e.length===0)return r.classGroupId;const t=e[0],o=r.nextPart.get(t),i=o?ee(e.slice(1),o):void 0;if(i)return i;if(r.validators.length===0)return;const n=e.join(O);return(a=r.validators.find(({validator:s})=>s(n)))==null?void 0:a.classGroupId},D=/^\[(.+)\]$/,pe=e=>{if(D.test(e)){const r=D.exec(e)[1],t=r==null?void 0:r.substring(0,r.indexOf(":"));if(t)return"arbitrary.."+t}},ue=e=>{const{theme:r,prefix:t}=e,o={nextPart:new Map,validators:[]};return ge(Object.entries(e.classGroups),t).forEach(([n,a])=>{_(a,o,n,r)}),o},_=(e,r,t,o)=>{e.forEach(i=>{if(typeof i=="string"){const n=i===""?r:K(r,i);n.classGroupId=t;return}if(typeof i=="function"){if(be(i)){_(i(o),r,t,o);return}r.validators.push({validator:i,classGroupId:t});return}Object.entries(i).forEach(([n,a])=>{_(a,K(r,n),t,o)})})},K=(e,r)=>{let t=e;return r.split(O).forEach(o=>{t.nextPart.has(o)||t.nextPart.set(o,{nextPart:new Map,validators:[]}),t=t.nextPart.get(o)}),t},be=e=>e.isThemeGetter,ge=(e,r)=>r?e.map(([t,o])=>{const i=o.map(n=>typeof n=="string"?r+n:typeof n=="object"?Object.fromEntries(Object.entries(n).map(([a,s])=>[r+a,s])):n);return[t,i]}):e,fe=e=>{if(e<1)return{get:()=>{},set:()=>{}};let r=0,t=new Map,o=new Map;const i=(n,a)=>{t.set(n,a),r++,r>e&&(r=0,o=t,t=new Map)};return{get(n){let a=t.get(n);if(a!==void 0)return a;if((a=o.get(n))!==void 0)return i(n,a),a},set(n,a){t.has(n)?t.set(n,a):i(n,a)}}},re="!",me=e=>{const{separator:r,experimentalParseClassName:t}=e,o=r.length===1,i=r[0],n=r.length,a=s=>{const u=[];let g=0,m=0,y;for(let p=0;pm?y-m:void 0;return{modifiers:u,hasImportantModifier:v,baseClassName:w,maybePostfixModifierPosition:b}};return t?s=>t({className:s,parseClassName:a}):a},he=e=>{if(e.length<=1)return e;const r=[];let t=[];return e.forEach(o=>{o[0]==="["?(r.push(...t.sort(),o),t=[]):t.push(o)}),r.push(...t.sort()),r},ye=e=>({cache:fe(e.cacheSize),parseClassName:me(e),...de(e)}),xe=/\s+/,we=(e,r)=>{const{parseClassName:t,getClassGroupId:o,getConflictingClassGroupIds:i}=r,n=[],a=e.trim().split(xe);let s="";for(let u=a.length-1;u>=0;u-=1){const g=a[u],{modifiers:m,hasImportantModifier:y,baseClassName:x,maybePostfixModifierPosition:v}=t(g);let w=!!v,b=o(w?x.substring(0,v):x);if(!b){if(!w){s=g+(s.length>0?" "+s:s);continue}if(b=o(x),!b){s=g+(s.length>0?" "+s:s);continue}w=!1}const p=he(m).join(":"),f=y?p+re:p,h=f+b;if(n.includes(h))continue;n.push(h);const R=i(b,w);for(let A=0;A0?" "+s:s)}return s};function ve(){let e=0,r,t,o="";for(;e{if(typeof e=="string")return e;let r,t="";for(let o=0;oy(m),e());return t=ye(g),o=t.cache.get,i=t.cache.set,n=s,s(u)}function s(u){const g=o(u);if(g)return g;const m=we(u,t);return i(u,m),m}return function(){return n(ve.apply(null,arguments))}}const c=e=>{const r=t=>t[e]||[];return r.isThemeGetter=!0,r},oe=/^\[(?:([a-z-]+):)?(.+)\]$/i,Ce=/^\d+\/\d+$/,ze=new Set(["px","full","screen"]),Se=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,Ae=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,Me=/^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/,Ge=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,Re=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,C=e=>M(e)||ze.has(e)||Ce.test(e),z=e=>G(e,"length",Le),M=e=>!!e&&!Number.isNaN(Number(e)),B=e=>G(e,"number",M),P=e=>!!e&&Number.isInteger(Number(e)),Ie=e=>e.endsWith("%")&&M(e.slice(0,-1)),l=e=>oe.test(e),S=e=>Se.test(e),Pe=new Set(["length","size","percentage"]),je=e=>G(e,Pe,ne),Ee=e=>G(e,"position",ne),Ne=new Set(["image","url"]),Te=e=>G(e,Ne,We),$e=e=>G(e,"",Ve),j=()=>!0,G=(e,r,t)=>{const o=oe.exec(e);return o?o[1]?typeof r=="string"?o[1]===r:r.has(o[1]):t(o[2]):!1},Le=e=>Ae.test(e)&&!Me.test(e),ne=()=>!1,Ve=e=>Ge.test(e),We=e=>Re.test(e),Be=()=>{const e=c("colors"),r=c("spacing"),t=c("blur"),o=c("brightness"),i=c("borderColor"),n=c("borderRadius"),a=c("borderSpacing"),s=c("borderWidth"),u=c("contrast"),g=c("grayscale"),m=c("hueRotate"),y=c("invert"),x=c("gap"),v=c("gradientColorStops"),w=c("gradientColorStopPositions"),b=c("inset"),p=c("margin"),f=c("opacity"),h=c("padding"),R=c("saturate"),A=c("scale"),E=c("sepia"),F=c("skew"),U=c("space"),q=c("translate"),$=()=>["auto","contain","none"],L=()=>["auto","hidden","clip","visible","scroll"],V=()=>["auto",l,r],d=()=>[l,r],H=()=>["",C,z],N=()=>["auto",M,l],J=()=>["bottom","center","left","left-bottom","left-top","right","right-bottom","right-top","top"],T=()=>["solid","dashed","dotted","double","none"],X=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],W=()=>["start","end","center","between","around","evenly","stretch"],I=()=>["","0",l],Y=()=>["auto","avoid","all","avoid-page","page","left","right","column"],k=()=>[M,l];return{cacheSize:500,separator:":",theme:{colors:[j],spacing:[C,z],blur:["none","",S,l],brightness:k(),borderColor:[e],borderRadius:["none","","full",S,l],borderSpacing:d(),borderWidth:H(),contrast:k(),grayscale:I(),hueRotate:k(),invert:I(),gap:d(),gradientColorStops:[e],gradientColorStopPositions:[Ie,z],inset:V(),margin:V(),opacity:k(),padding:d(),saturate:k(),scale:k(),sepia:I(),skew:k(),space:d(),translate:d()},classGroups:{aspect:[{aspect:["auto","square","video",l]}],container:["container"],columns:[{columns:[S]}],"break-after":[{"break-after":Y()}],"break-before":[{"break-before":Y()}],"break-inside":[{"break-inside":["auto","avoid","avoid-page","avoid-column"]}],"box-decoration":[{"box-decoration":["slice","clone"]}],box:[{box:["border","content"]}],display:["block","inline-block","inline","flex","inline-flex","table","inline-table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row-group","table-row","flow-root","grid","inline-grid","contents","list-item","hidden"],float:[{float:["right","left","none","start","end"]}],clear:[{clear:["left","right","both","none","start","end"]}],isolation:["isolate","isolation-auto"],"object-fit":[{object:["contain","cover","fill","none","scale-down"]}],"object-position":[{object:[...J(),l]}],overflow:[{overflow:L()}],"overflow-x":[{"overflow-x":L()}],"overflow-y":[{"overflow-y":L()}],overscroll:[{overscroll:$()}],"overscroll-x":[{"overscroll-x":$()}],"overscroll-y":[{"overscroll-y":$()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:[b]}],"inset-x":[{"inset-x":[b]}],"inset-y":[{"inset-y":[b]}],start:[{start:[b]}],end:[{end:[b]}],top:[{top:[b]}],right:[{right:[b]}],bottom:[{bottom:[b]}],left:[{left:[b]}],visibility:["visible","invisible","collapse"],z:[{z:["auto",P,l]}],basis:[{basis:V()}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["wrap","wrap-reverse","nowrap"]}],flex:[{flex:["1","auto","initial","none",l]}],grow:[{grow:I()}],shrink:[{shrink:I()}],order:[{order:["first","last","none",P,l]}],"grid-cols":[{"grid-cols":[j]}],"col-start-end":[{col:["auto",{span:["full",P,l]},l]}],"col-start":[{"col-start":N()}],"col-end":[{"col-end":N()}],"grid-rows":[{"grid-rows":[j]}],"row-start-end":[{row:["auto",{span:[P,l]},l]}],"row-start":[{"row-start":N()}],"row-end":[{"row-end":N()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":["auto","min","max","fr",l]}],"auto-rows":[{"auto-rows":["auto","min","max","fr",l]}],gap:[{gap:[x]}],"gap-x":[{"gap-x":[x]}],"gap-y":[{"gap-y":[x]}],"justify-content":[{justify:["normal",...W()]}],"justify-items":[{"justify-items":["start","end","center","stretch"]}],"justify-self":[{"justify-self":["auto","start","end","center","stretch"]}],"align-content":[{content:["normal",...W(),"baseline"]}],"align-items":[{items:["start","end","center","baseline","stretch"]}],"align-self":[{self:["auto","start","end","center","stretch","baseline"]}],"place-content":[{"place-content":[...W(),"baseline"]}],"place-items":[{"place-items":["start","end","center","baseline","stretch"]}],"place-self":[{"place-self":["auto","start","end","center","stretch"]}],p:[{p:[h]}],px:[{px:[h]}],py:[{py:[h]}],ps:[{ps:[h]}],pe:[{pe:[h]}],pt:[{pt:[h]}],pr:[{pr:[h]}],pb:[{pb:[h]}],pl:[{pl:[h]}],m:[{m:[p]}],mx:[{mx:[p]}],my:[{my:[p]}],ms:[{ms:[p]}],me:[{me:[p]}],mt:[{mt:[p]}],mr:[{mr:[p]}],mb:[{mb:[p]}],ml:[{ml:[p]}],"space-x":[{"space-x":[U]}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":[U]}],"space-y-reverse":["space-y-reverse"],w:[{w:["auto","min","max","fit","svw","lvw","dvw",l,r]}],"min-w":[{"min-w":[l,r,"min","max","fit"]}],"max-w":[{"max-w":[l,r,"none","full","min","max","fit","prose",{screen:[S]},S]}],h:[{h:[l,r,"auto","min","max","fit","svh","lvh","dvh"]}],"min-h":[{"min-h":[l,r,"min","max","fit","svh","lvh","dvh"]}],"max-h":[{"max-h":[l,r,"min","max","fit","svh","lvh","dvh"]}],size:[{size:[l,r,"auto","min","max","fit"]}],"font-size":[{text:["base",S,z]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:["thin","extralight","light","normal","medium","semibold","bold","extrabold","black",B]}],"font-family":[{font:[j]}],"fvn-normal":["normal-nums"],"fvn-ordinal":["ordinal"],"fvn-slashed-zero":["slashed-zero"],"fvn-figure":["lining-nums","oldstyle-nums"],"fvn-spacing":["proportional-nums","tabular-nums"],"fvn-fraction":["diagonal-fractions","stacked-fractions"],tracking:[{tracking:["tighter","tight","normal","wide","wider","widest",l]}],"line-clamp":[{"line-clamp":["none",M,B]}],leading:[{leading:["none","tight","snug","normal","relaxed","loose",C,l]}],"list-image":[{"list-image":["none",l]}],"list-style-type":[{list:["none","disc","decimal",l]}],"list-style-position":[{list:["inside","outside"]}],"placeholder-color":[{placeholder:[e]}],"placeholder-opacity":[{"placeholder-opacity":[f]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"text-color":[{text:[e]}],"text-opacity":[{"text-opacity":[f]}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[...T(),"wavy"]}],"text-decoration-thickness":[{decoration:["auto","from-font",C,z]}],"underline-offset":[{"underline-offset":["auto",C,l]}],"text-decoration-color":[{decoration:[e]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:d()}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",l]}],whitespace:[{whitespace:["normal","nowrap","pre","pre-line","pre-wrap","break-spaces"]}],break:[{break:["normal","words","all","keep"]}],hyphens:[{hyphens:["none","manual","auto"]}],content:[{content:["none",l]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-opacity":[{"bg-opacity":[f]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:[...J(),Ee]}],"bg-repeat":[{bg:["no-repeat",{repeat:["","x","y","round","space"]}]}],"bg-size":[{bg:["auto","cover","contain",je]}],"bg-image":[{bg:["none",{"gradient-to":["t","tr","r","br","b","bl","l","tl"]},Te]}],"bg-color":[{bg:[e]}],"gradient-from-pos":[{from:[w]}],"gradient-via-pos":[{via:[w]}],"gradient-to-pos":[{to:[w]}],"gradient-from":[{from:[v]}],"gradient-via":[{via:[v]}],"gradient-to":[{to:[v]}],rounded:[{rounded:[n]}],"rounded-s":[{"rounded-s":[n]}],"rounded-e":[{"rounded-e":[n]}],"rounded-t":[{"rounded-t":[n]}],"rounded-r":[{"rounded-r":[n]}],"rounded-b":[{"rounded-b":[n]}],"rounded-l":[{"rounded-l":[n]}],"rounded-ss":[{"rounded-ss":[n]}],"rounded-se":[{"rounded-se":[n]}],"rounded-ee":[{"rounded-ee":[n]}],"rounded-es":[{"rounded-es":[n]}],"rounded-tl":[{"rounded-tl":[n]}],"rounded-tr":[{"rounded-tr":[n]}],"rounded-br":[{"rounded-br":[n]}],"rounded-bl":[{"rounded-bl":[n]}],"border-w":[{border:[s]}],"border-w-x":[{"border-x":[s]}],"border-w-y":[{"border-y":[s]}],"border-w-s":[{"border-s":[s]}],"border-w-e":[{"border-e":[s]}],"border-w-t":[{"border-t":[s]}],"border-w-r":[{"border-r":[s]}],"border-w-b":[{"border-b":[s]}],"border-w-l":[{"border-l":[s]}],"border-opacity":[{"border-opacity":[f]}],"border-style":[{border:[...T(),"hidden"]}],"divide-x":[{"divide-x":[s]}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":[s]}],"divide-y-reverse":["divide-y-reverse"],"divide-opacity":[{"divide-opacity":[f]}],"divide-style":[{divide:T()}],"border-color":[{border:[i]}],"border-color-x":[{"border-x":[i]}],"border-color-y":[{"border-y":[i]}],"border-color-s":[{"border-s":[i]}],"border-color-e":[{"border-e":[i]}],"border-color-t":[{"border-t":[i]}],"border-color-r":[{"border-r":[i]}],"border-color-b":[{"border-b":[i]}],"border-color-l":[{"border-l":[i]}],"divide-color":[{divide:[i]}],"outline-style":[{outline:["",...T()]}],"outline-offset":[{"outline-offset":[C,l]}],"outline-w":[{outline:[C,z]}],"outline-color":[{outline:[e]}],"ring-w":[{ring:H()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:[e]}],"ring-opacity":[{"ring-opacity":[f]}],"ring-offset-w":[{"ring-offset":[C,z]}],"ring-offset-color":[{"ring-offset":[e]}],shadow:[{shadow:["","inner","none",S,$e]}],"shadow-color":[{shadow:[j]}],opacity:[{opacity:[f]}],"mix-blend":[{"mix-blend":[...X(),"plus-lighter","plus-darker"]}],"bg-blend":[{"bg-blend":X()}],filter:[{filter:["","none"]}],blur:[{blur:[t]}],brightness:[{brightness:[o]}],contrast:[{contrast:[u]}],"drop-shadow":[{"drop-shadow":["","none",S,l]}],grayscale:[{grayscale:[g]}],"hue-rotate":[{"hue-rotate":[m]}],invert:[{invert:[y]}],saturate:[{saturate:[R]}],sepia:[{sepia:[E]}],"backdrop-filter":[{"backdrop-filter":["","none"]}],"backdrop-blur":[{"backdrop-blur":[t]}],"backdrop-brightness":[{"backdrop-brightness":[o]}],"backdrop-contrast":[{"backdrop-contrast":[u]}],"backdrop-grayscale":[{"backdrop-grayscale":[g]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[m]}],"backdrop-invert":[{"backdrop-invert":[y]}],"backdrop-opacity":[{"backdrop-opacity":[f]}],"backdrop-saturate":[{"backdrop-saturate":[R]}],"backdrop-sepia":[{"backdrop-sepia":[E]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":[a]}],"border-spacing-x":[{"border-spacing-x":[a]}],"border-spacing-y":[{"border-spacing-y":[a]}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["none","all","","colors","opacity","shadow","transform",l]}],duration:[{duration:k()}],ease:[{ease:["linear","in","out","in-out",l]}],delay:[{delay:k()}],animate:[{animate:["none","spin","ping","pulse","bounce",l]}],transform:[{transform:["","gpu","none"]}],scale:[{scale:[A]}],"scale-x":[{"scale-x":[A]}],"scale-y":[{"scale-y":[A]}],rotate:[{rotate:[P,l]}],"translate-x":[{"translate-x":[q]}],"translate-y":[{"translate-y":[q]}],"skew-x":[{"skew-x":[F]}],"skew-y":[{"skew-y":[F]}],"transform-origin":[{origin:["center","top","top-right","right","bottom-right","bottom","bottom-left","left","top-left",l]}],accent:[{accent:["auto",e]}],appearance:[{appearance:["none","auto"]}],cursor:[{cursor:["auto","default","pointer","wait","text","move","help","not-allowed","none","context-menu","progress","cell","crosshair","vertical-text","alias","copy","no-drop","grab","grabbing","all-scroll","col-resize","row-resize","n-resize","e-resize","s-resize","w-resize","ne-resize","nw-resize","se-resize","sw-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","zoom-in","zoom-out",l]}],"caret-color":[{caret:[e]}],"pointer-events":[{"pointer-events":["none","auto"]}],resize:[{resize:["none","y","x",""]}],"scroll-behavior":[{scroll:["auto","smooth"]}],"scroll-m":[{"scroll-m":d()}],"scroll-mx":[{"scroll-mx":d()}],"scroll-my":[{"scroll-my":d()}],"scroll-ms":[{"scroll-ms":d()}],"scroll-me":[{"scroll-me":d()}],"scroll-mt":[{"scroll-mt":d()}],"scroll-mr":[{"scroll-mr":d()}],"scroll-mb":[{"scroll-mb":d()}],"scroll-ml":[{"scroll-ml":d()}],"scroll-p":[{"scroll-p":d()}],"scroll-px":[{"scroll-px":d()}],"scroll-py":[{"scroll-py":d()}],"scroll-ps":[{"scroll-ps":d()}],"scroll-pe":[{"scroll-pe":d()}],"scroll-pt":[{"scroll-pt":d()}],"scroll-pr":[{"scroll-pr":d()}],"scroll-pb":[{"scroll-pb":d()}],"scroll-pl":[{"scroll-pl":d()}],"snap-align":[{snap:["start","end","center","align-none"]}],"snap-stop":[{snap:["normal","always"]}],"snap-type":[{snap:["none","x","y","both"]}],"snap-strictness":[{snap:["mandatory","proximity"]}],touch:[{touch:["auto","none","manipulation"]}],"touch-x":[{"touch-pan":["x","left","right"]}],"touch-y":[{"touch-pan":["y","up","down"]}],"touch-pz":["touch-pinch-zoom"],select:[{select:["none","text","all","auto"]}],"will-change":[{"will-change":["auto","scroll","contents","transform",l]}],fill:[{fill:[e,"none"]}],"stroke-w":[{stroke:[C,z,B]}],stroke:[{stroke:[e,"none"]}],sr:["sr-only","not-sr-only"],"forced-color-adjust":[{"forced-color-adjust":["auto","none"]}]},conflictingClassGroups:{overflow:["overflow-x","overflow-y"],overscroll:["overscroll-x","overscroll-y"],inset:["inset-x","inset-y","start","end","top","right","bottom","left"],"inset-x":["right","left"],"inset-y":["top","bottom"],flex:["basis","grow","shrink"],gap:["gap-x","gap-y"],p:["px","py","ps","pe","pt","pr","pb","pl"],px:["pr","pl"],py:["pt","pb"],m:["mx","my","ms","me","mt","mr","mb","ml"],mx:["mr","ml"],my:["mt","mb"],size:["w","h"],"font-size":["leading"],"fvn-normal":["fvn-ordinal","fvn-slashed-zero","fvn-figure","fvn-spacing","fvn-fraction"],"fvn-ordinal":["fvn-normal"],"fvn-slashed-zero":["fvn-normal"],"fvn-figure":["fvn-normal"],"fvn-spacing":["fvn-normal"],"fvn-fraction":["fvn-normal"],"line-clamp":["display","overflow"],rounded:["rounded-s","rounded-e","rounded-t","rounded-r","rounded-b","rounded-l","rounded-ss","rounded-se","rounded-ee","rounded-es","rounded-tl","rounded-tr","rounded-br","rounded-bl"],"rounded-s":["rounded-ss","rounded-es"],"rounded-e":["rounded-se","rounded-ee"],"rounded-t":["rounded-tl","rounded-tr"],"rounded-r":["rounded-tr","rounded-br"],"rounded-b":["rounded-br","rounded-bl"],"rounded-l":["rounded-tl","rounded-bl"],"border-spacing":["border-spacing-x","border-spacing-y"],"border-w":["border-w-s","border-w-e","border-w-t","border-w-r","border-w-b","border-w-l"],"border-w-x":["border-w-r","border-w-l"],"border-w-y":["border-w-t","border-w-b"],"border-color":["border-color-s","border-color-e","border-color-t","border-color-r","border-color-b","border-color-l"],"border-color-x":["border-color-r","border-color-l"],"border-color-y":["border-color-t","border-color-b"],"scroll-m":["scroll-mx","scroll-my","scroll-ms","scroll-me","scroll-mt","scroll-mr","scroll-mb","scroll-ml"],"scroll-mx":["scroll-mr","scroll-ml"],"scroll-my":["scroll-mt","scroll-mb"],"scroll-p":["scroll-px","scroll-py","scroll-ps","scroll-pe","scroll-pt","scroll-pr","scroll-pb","scroll-pl"],"scroll-px":["scroll-pr","scroll-pl"],"scroll-py":["scroll-pt","scroll-pb"],touch:["touch-x","touch-y","touch-pz"],"touch-x":["touch"],"touch-y":["touch"],"touch-pz":["touch"]},conflictingClassGroupModifiers:{"font-size":["leading"]}}},_e=ke(Be);function Ue(...e){return _e(ce(e))}function qe(e){const r=Math.floor(e),t=Math.round((e-r)*60);return r===0?`${t}m`:t===0?`${r}h`:`${r}h ${t}m`}function He(e){return new Date(e).toLocaleDateString(void 0,{month:"short",day:"numeric",year:"numeric"})}function Je(e){return new Date(e).toLocaleString(void 0,{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})}function Xe(e){const r=e.getFullYear(),t=String(e.getMonth()+1).padStart(2,"0"),o=String(e.getDate()).padStart(2,"0");return`${r}-${t}-${o}`}export{Fe as _,He as a,Je as b,Ue as c,qe as f,Xe as i}; +import{d as se,o as ie,c as le,p as ae,a as Z}from"./index-CO3lBHVT.js";const Fe=se({__name:"Spinner",props:{size:{},class:{}},setup(e){return(r,t)=>(ie(),le("svg",{class:ae(["animate-spin text-current",e.size==="sm"?"h-3 w-3":e.size==="lg"?"h-6 w-6":"h-4 w-4",r.$props.class]),xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24"},[...t[0]||(t[0]=[Z("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4"},null,-1),Z("path",{class:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"},null,-1)])],2))}});function Q(e){var r,t,o="";if(typeof e=="string"||typeof e=="number")o+=e;else if(typeof e=="object")if(Array.isArray(e)){var i=e.length;for(r=0;r{const r=ue(e),{conflictingClassGroups:t,conflictingClassGroupModifiers:o}=e;return{getClassGroupId:a=>{const s=a.split(O);return s[0]===""&&s.length!==1&&s.shift(),ee(s,r)||pe(a)},getConflictingClassGroupIds:(a,s)=>{const u=t[a]||[];return s&&o[a]?[...u,...o[a]]:u}}},ee=(e,r)=>{var a;if(e.length===0)return r.classGroupId;const t=e[0],o=r.nextPart.get(t),i=o?ee(e.slice(1),o):void 0;if(i)return i;if(r.validators.length===0)return;const n=e.join(O);return(a=r.validators.find(({validator:s})=>s(n)))==null?void 0:a.classGroupId},D=/^\[(.+)\]$/,pe=e=>{if(D.test(e)){const r=D.exec(e)[1],t=r==null?void 0:r.substring(0,r.indexOf(":"));if(t)return"arbitrary.."+t}},ue=e=>{const{theme:r,prefix:t}=e,o={nextPart:new Map,validators:[]};return ge(Object.entries(e.classGroups),t).forEach(([n,a])=>{_(a,o,n,r)}),o},_=(e,r,t,o)=>{e.forEach(i=>{if(typeof i=="string"){const n=i===""?r:K(r,i);n.classGroupId=t;return}if(typeof i=="function"){if(be(i)){_(i(o),r,t,o);return}r.validators.push({validator:i,classGroupId:t});return}Object.entries(i).forEach(([n,a])=>{_(a,K(r,n),t,o)})})},K=(e,r)=>{let t=e;return r.split(O).forEach(o=>{t.nextPart.has(o)||t.nextPart.set(o,{nextPart:new Map,validators:[]}),t=t.nextPart.get(o)}),t},be=e=>e.isThemeGetter,ge=(e,r)=>r?e.map(([t,o])=>{const i=o.map(n=>typeof n=="string"?r+n:typeof n=="object"?Object.fromEntries(Object.entries(n).map(([a,s])=>[r+a,s])):n);return[t,i]}):e,fe=e=>{if(e<1)return{get:()=>{},set:()=>{}};let r=0,t=new Map,o=new Map;const i=(n,a)=>{t.set(n,a),r++,r>e&&(r=0,o=t,t=new Map)};return{get(n){let a=t.get(n);if(a!==void 0)return a;if((a=o.get(n))!==void 0)return i(n,a),a},set(n,a){t.has(n)?t.set(n,a):i(n,a)}}},re="!",me=e=>{const{separator:r,experimentalParseClassName:t}=e,o=r.length===1,i=r[0],n=r.length,a=s=>{const u=[];let g=0,m=0,y;for(let p=0;pm?y-m:void 0;return{modifiers:u,hasImportantModifier:v,baseClassName:w,maybePostfixModifierPosition:b}};return t?s=>t({className:s,parseClassName:a}):a},he=e=>{if(e.length<=1)return e;const r=[];let t=[];return e.forEach(o=>{o[0]==="["?(r.push(...t.sort(),o),t=[]):t.push(o)}),r.push(...t.sort()),r},ye=e=>({cache:fe(e.cacheSize),parseClassName:me(e),...de(e)}),xe=/\s+/,we=(e,r)=>{const{parseClassName:t,getClassGroupId:o,getConflictingClassGroupIds:i}=r,n=[],a=e.trim().split(xe);let s="";for(let u=a.length-1;u>=0;u-=1){const g=a[u],{modifiers:m,hasImportantModifier:y,baseClassName:x,maybePostfixModifierPosition:v}=t(g);let w=!!v,b=o(w?x.substring(0,v):x);if(!b){if(!w){s=g+(s.length>0?" "+s:s);continue}if(b=o(x),!b){s=g+(s.length>0?" "+s:s);continue}w=!1}const p=he(m).join(":"),f=y?p+re:p,h=f+b;if(n.includes(h))continue;n.push(h);const R=i(b,w);for(let A=0;A0?" "+s:s)}return s};function ve(){let e=0,r,t,o="";for(;e{if(typeof e=="string")return e;let r,t="";for(let o=0;oy(m),e());return t=ye(g),o=t.cache.get,i=t.cache.set,n=s,s(u)}function s(u){const g=o(u);if(g)return g;const m=we(u,t);return i(u,m),m}return function(){return n(ve.apply(null,arguments))}}const c=e=>{const r=t=>t[e]||[];return r.isThemeGetter=!0,r},oe=/^\[(?:([a-z-]+):)?(.+)\]$/i,Ce=/^\d+\/\d+$/,ze=new Set(["px","full","screen"]),Se=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,Ae=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,Me=/^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/,Ge=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,Re=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,C=e=>M(e)||ze.has(e)||Ce.test(e),z=e=>G(e,"length",Le),M=e=>!!e&&!Number.isNaN(Number(e)),B=e=>G(e,"number",M),P=e=>!!e&&Number.isInteger(Number(e)),Ie=e=>e.endsWith("%")&&M(e.slice(0,-1)),l=e=>oe.test(e),S=e=>Se.test(e),Pe=new Set(["length","size","percentage"]),je=e=>G(e,Pe,ne),Ee=e=>G(e,"position",ne),Ne=new Set(["image","url"]),Te=e=>G(e,Ne,We),$e=e=>G(e,"",Ve),j=()=>!0,G=(e,r,t)=>{const o=oe.exec(e);return o?o[1]?typeof r=="string"?o[1]===r:r.has(o[1]):t(o[2]):!1},Le=e=>Ae.test(e)&&!Me.test(e),ne=()=>!1,Ve=e=>Ge.test(e),We=e=>Re.test(e),Be=()=>{const e=c("colors"),r=c("spacing"),t=c("blur"),o=c("brightness"),i=c("borderColor"),n=c("borderRadius"),a=c("borderSpacing"),s=c("borderWidth"),u=c("contrast"),g=c("grayscale"),m=c("hueRotate"),y=c("invert"),x=c("gap"),v=c("gradientColorStops"),w=c("gradientColorStopPositions"),b=c("inset"),p=c("margin"),f=c("opacity"),h=c("padding"),R=c("saturate"),A=c("scale"),E=c("sepia"),F=c("skew"),U=c("space"),q=c("translate"),$=()=>["auto","contain","none"],L=()=>["auto","hidden","clip","visible","scroll"],V=()=>["auto",l,r],d=()=>[l,r],H=()=>["",C,z],N=()=>["auto",M,l],J=()=>["bottom","center","left","left-bottom","left-top","right","right-bottom","right-top","top"],T=()=>["solid","dashed","dotted","double","none"],X=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],W=()=>["start","end","center","between","around","evenly","stretch"],I=()=>["","0",l],Y=()=>["auto","avoid","all","avoid-page","page","left","right","column"],k=()=>[M,l];return{cacheSize:500,separator:":",theme:{colors:[j],spacing:[C,z],blur:["none","",S,l],brightness:k(),borderColor:[e],borderRadius:["none","","full",S,l],borderSpacing:d(),borderWidth:H(),contrast:k(),grayscale:I(),hueRotate:k(),invert:I(),gap:d(),gradientColorStops:[e],gradientColorStopPositions:[Ie,z],inset:V(),margin:V(),opacity:k(),padding:d(),saturate:k(),scale:k(),sepia:I(),skew:k(),space:d(),translate:d()},classGroups:{aspect:[{aspect:["auto","square","video",l]}],container:["container"],columns:[{columns:[S]}],"break-after":[{"break-after":Y()}],"break-before":[{"break-before":Y()}],"break-inside":[{"break-inside":["auto","avoid","avoid-page","avoid-column"]}],"box-decoration":[{"box-decoration":["slice","clone"]}],box:[{box:["border","content"]}],display:["block","inline-block","inline","flex","inline-flex","table","inline-table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row-group","table-row","flow-root","grid","inline-grid","contents","list-item","hidden"],float:[{float:["right","left","none","start","end"]}],clear:[{clear:["left","right","both","none","start","end"]}],isolation:["isolate","isolation-auto"],"object-fit":[{object:["contain","cover","fill","none","scale-down"]}],"object-position":[{object:[...J(),l]}],overflow:[{overflow:L()}],"overflow-x":[{"overflow-x":L()}],"overflow-y":[{"overflow-y":L()}],overscroll:[{overscroll:$()}],"overscroll-x":[{"overscroll-x":$()}],"overscroll-y":[{"overscroll-y":$()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:[b]}],"inset-x":[{"inset-x":[b]}],"inset-y":[{"inset-y":[b]}],start:[{start:[b]}],end:[{end:[b]}],top:[{top:[b]}],right:[{right:[b]}],bottom:[{bottom:[b]}],left:[{left:[b]}],visibility:["visible","invisible","collapse"],z:[{z:["auto",P,l]}],basis:[{basis:V()}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["wrap","wrap-reverse","nowrap"]}],flex:[{flex:["1","auto","initial","none",l]}],grow:[{grow:I()}],shrink:[{shrink:I()}],order:[{order:["first","last","none",P,l]}],"grid-cols":[{"grid-cols":[j]}],"col-start-end":[{col:["auto",{span:["full",P,l]},l]}],"col-start":[{"col-start":N()}],"col-end":[{"col-end":N()}],"grid-rows":[{"grid-rows":[j]}],"row-start-end":[{row:["auto",{span:[P,l]},l]}],"row-start":[{"row-start":N()}],"row-end":[{"row-end":N()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":["auto","min","max","fr",l]}],"auto-rows":[{"auto-rows":["auto","min","max","fr",l]}],gap:[{gap:[x]}],"gap-x":[{"gap-x":[x]}],"gap-y":[{"gap-y":[x]}],"justify-content":[{justify:["normal",...W()]}],"justify-items":[{"justify-items":["start","end","center","stretch"]}],"justify-self":[{"justify-self":["auto","start","end","center","stretch"]}],"align-content":[{content:["normal",...W(),"baseline"]}],"align-items":[{items:["start","end","center","baseline","stretch"]}],"align-self":[{self:["auto","start","end","center","stretch","baseline"]}],"place-content":[{"place-content":[...W(),"baseline"]}],"place-items":[{"place-items":["start","end","center","baseline","stretch"]}],"place-self":[{"place-self":["auto","start","end","center","stretch"]}],p:[{p:[h]}],px:[{px:[h]}],py:[{py:[h]}],ps:[{ps:[h]}],pe:[{pe:[h]}],pt:[{pt:[h]}],pr:[{pr:[h]}],pb:[{pb:[h]}],pl:[{pl:[h]}],m:[{m:[p]}],mx:[{mx:[p]}],my:[{my:[p]}],ms:[{ms:[p]}],me:[{me:[p]}],mt:[{mt:[p]}],mr:[{mr:[p]}],mb:[{mb:[p]}],ml:[{ml:[p]}],"space-x":[{"space-x":[U]}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":[U]}],"space-y-reverse":["space-y-reverse"],w:[{w:["auto","min","max","fit","svw","lvw","dvw",l,r]}],"min-w":[{"min-w":[l,r,"min","max","fit"]}],"max-w":[{"max-w":[l,r,"none","full","min","max","fit","prose",{screen:[S]},S]}],h:[{h:[l,r,"auto","min","max","fit","svh","lvh","dvh"]}],"min-h":[{"min-h":[l,r,"min","max","fit","svh","lvh","dvh"]}],"max-h":[{"max-h":[l,r,"min","max","fit","svh","lvh","dvh"]}],size:[{size:[l,r,"auto","min","max","fit"]}],"font-size":[{text:["base",S,z]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:["thin","extralight","light","normal","medium","semibold","bold","extrabold","black",B]}],"font-family":[{font:[j]}],"fvn-normal":["normal-nums"],"fvn-ordinal":["ordinal"],"fvn-slashed-zero":["slashed-zero"],"fvn-figure":["lining-nums","oldstyle-nums"],"fvn-spacing":["proportional-nums","tabular-nums"],"fvn-fraction":["diagonal-fractions","stacked-fractions"],tracking:[{tracking:["tighter","tight","normal","wide","wider","widest",l]}],"line-clamp":[{"line-clamp":["none",M,B]}],leading:[{leading:["none","tight","snug","normal","relaxed","loose",C,l]}],"list-image":[{"list-image":["none",l]}],"list-style-type":[{list:["none","disc","decimal",l]}],"list-style-position":[{list:["inside","outside"]}],"placeholder-color":[{placeholder:[e]}],"placeholder-opacity":[{"placeholder-opacity":[f]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"text-color":[{text:[e]}],"text-opacity":[{"text-opacity":[f]}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[...T(),"wavy"]}],"text-decoration-thickness":[{decoration:["auto","from-font",C,z]}],"underline-offset":[{"underline-offset":["auto",C,l]}],"text-decoration-color":[{decoration:[e]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:d()}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",l]}],whitespace:[{whitespace:["normal","nowrap","pre","pre-line","pre-wrap","break-spaces"]}],break:[{break:["normal","words","all","keep"]}],hyphens:[{hyphens:["none","manual","auto"]}],content:[{content:["none",l]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-opacity":[{"bg-opacity":[f]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:[...J(),Ee]}],"bg-repeat":[{bg:["no-repeat",{repeat:["","x","y","round","space"]}]}],"bg-size":[{bg:["auto","cover","contain",je]}],"bg-image":[{bg:["none",{"gradient-to":["t","tr","r","br","b","bl","l","tl"]},Te]}],"bg-color":[{bg:[e]}],"gradient-from-pos":[{from:[w]}],"gradient-via-pos":[{via:[w]}],"gradient-to-pos":[{to:[w]}],"gradient-from":[{from:[v]}],"gradient-via":[{via:[v]}],"gradient-to":[{to:[v]}],rounded:[{rounded:[n]}],"rounded-s":[{"rounded-s":[n]}],"rounded-e":[{"rounded-e":[n]}],"rounded-t":[{"rounded-t":[n]}],"rounded-r":[{"rounded-r":[n]}],"rounded-b":[{"rounded-b":[n]}],"rounded-l":[{"rounded-l":[n]}],"rounded-ss":[{"rounded-ss":[n]}],"rounded-se":[{"rounded-se":[n]}],"rounded-ee":[{"rounded-ee":[n]}],"rounded-es":[{"rounded-es":[n]}],"rounded-tl":[{"rounded-tl":[n]}],"rounded-tr":[{"rounded-tr":[n]}],"rounded-br":[{"rounded-br":[n]}],"rounded-bl":[{"rounded-bl":[n]}],"border-w":[{border:[s]}],"border-w-x":[{"border-x":[s]}],"border-w-y":[{"border-y":[s]}],"border-w-s":[{"border-s":[s]}],"border-w-e":[{"border-e":[s]}],"border-w-t":[{"border-t":[s]}],"border-w-r":[{"border-r":[s]}],"border-w-b":[{"border-b":[s]}],"border-w-l":[{"border-l":[s]}],"border-opacity":[{"border-opacity":[f]}],"border-style":[{border:[...T(),"hidden"]}],"divide-x":[{"divide-x":[s]}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":[s]}],"divide-y-reverse":["divide-y-reverse"],"divide-opacity":[{"divide-opacity":[f]}],"divide-style":[{divide:T()}],"border-color":[{border:[i]}],"border-color-x":[{"border-x":[i]}],"border-color-y":[{"border-y":[i]}],"border-color-s":[{"border-s":[i]}],"border-color-e":[{"border-e":[i]}],"border-color-t":[{"border-t":[i]}],"border-color-r":[{"border-r":[i]}],"border-color-b":[{"border-b":[i]}],"border-color-l":[{"border-l":[i]}],"divide-color":[{divide:[i]}],"outline-style":[{outline:["",...T()]}],"outline-offset":[{"outline-offset":[C,l]}],"outline-w":[{outline:[C,z]}],"outline-color":[{outline:[e]}],"ring-w":[{ring:H()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:[e]}],"ring-opacity":[{"ring-opacity":[f]}],"ring-offset-w":[{"ring-offset":[C,z]}],"ring-offset-color":[{"ring-offset":[e]}],shadow:[{shadow:["","inner","none",S,$e]}],"shadow-color":[{shadow:[j]}],opacity:[{opacity:[f]}],"mix-blend":[{"mix-blend":[...X(),"plus-lighter","plus-darker"]}],"bg-blend":[{"bg-blend":X()}],filter:[{filter:["","none"]}],blur:[{blur:[t]}],brightness:[{brightness:[o]}],contrast:[{contrast:[u]}],"drop-shadow":[{"drop-shadow":["","none",S,l]}],grayscale:[{grayscale:[g]}],"hue-rotate":[{"hue-rotate":[m]}],invert:[{invert:[y]}],saturate:[{saturate:[R]}],sepia:[{sepia:[E]}],"backdrop-filter":[{"backdrop-filter":["","none"]}],"backdrop-blur":[{"backdrop-blur":[t]}],"backdrop-brightness":[{"backdrop-brightness":[o]}],"backdrop-contrast":[{"backdrop-contrast":[u]}],"backdrop-grayscale":[{"backdrop-grayscale":[g]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[m]}],"backdrop-invert":[{"backdrop-invert":[y]}],"backdrop-opacity":[{"backdrop-opacity":[f]}],"backdrop-saturate":[{"backdrop-saturate":[R]}],"backdrop-sepia":[{"backdrop-sepia":[E]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":[a]}],"border-spacing-x":[{"border-spacing-x":[a]}],"border-spacing-y":[{"border-spacing-y":[a]}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["none","all","","colors","opacity","shadow","transform",l]}],duration:[{duration:k()}],ease:[{ease:["linear","in","out","in-out",l]}],delay:[{delay:k()}],animate:[{animate:["none","spin","ping","pulse","bounce",l]}],transform:[{transform:["","gpu","none"]}],scale:[{scale:[A]}],"scale-x":[{"scale-x":[A]}],"scale-y":[{"scale-y":[A]}],rotate:[{rotate:[P,l]}],"translate-x":[{"translate-x":[q]}],"translate-y":[{"translate-y":[q]}],"skew-x":[{"skew-x":[F]}],"skew-y":[{"skew-y":[F]}],"transform-origin":[{origin:["center","top","top-right","right","bottom-right","bottom","bottom-left","left","top-left",l]}],accent:[{accent:["auto",e]}],appearance:[{appearance:["none","auto"]}],cursor:[{cursor:["auto","default","pointer","wait","text","move","help","not-allowed","none","context-menu","progress","cell","crosshair","vertical-text","alias","copy","no-drop","grab","grabbing","all-scroll","col-resize","row-resize","n-resize","e-resize","s-resize","w-resize","ne-resize","nw-resize","se-resize","sw-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","zoom-in","zoom-out",l]}],"caret-color":[{caret:[e]}],"pointer-events":[{"pointer-events":["none","auto"]}],resize:[{resize:["none","y","x",""]}],"scroll-behavior":[{scroll:["auto","smooth"]}],"scroll-m":[{"scroll-m":d()}],"scroll-mx":[{"scroll-mx":d()}],"scroll-my":[{"scroll-my":d()}],"scroll-ms":[{"scroll-ms":d()}],"scroll-me":[{"scroll-me":d()}],"scroll-mt":[{"scroll-mt":d()}],"scroll-mr":[{"scroll-mr":d()}],"scroll-mb":[{"scroll-mb":d()}],"scroll-ml":[{"scroll-ml":d()}],"scroll-p":[{"scroll-p":d()}],"scroll-px":[{"scroll-px":d()}],"scroll-py":[{"scroll-py":d()}],"scroll-ps":[{"scroll-ps":d()}],"scroll-pe":[{"scroll-pe":d()}],"scroll-pt":[{"scroll-pt":d()}],"scroll-pr":[{"scroll-pr":d()}],"scroll-pb":[{"scroll-pb":d()}],"scroll-pl":[{"scroll-pl":d()}],"snap-align":[{snap:["start","end","center","align-none"]}],"snap-stop":[{snap:["normal","always"]}],"snap-type":[{snap:["none","x","y","both"]}],"snap-strictness":[{snap:["mandatory","proximity"]}],touch:[{touch:["auto","none","manipulation"]}],"touch-x":[{"touch-pan":["x","left","right"]}],"touch-y":[{"touch-pan":["y","up","down"]}],"touch-pz":["touch-pinch-zoom"],select:[{select:["none","text","all","auto"]}],"will-change":[{"will-change":["auto","scroll","contents","transform",l]}],fill:[{fill:[e,"none"]}],"stroke-w":[{stroke:[C,z,B]}],stroke:[{stroke:[e,"none"]}],sr:["sr-only","not-sr-only"],"forced-color-adjust":[{"forced-color-adjust":["auto","none"]}]},conflictingClassGroups:{overflow:["overflow-x","overflow-y"],overscroll:["overscroll-x","overscroll-y"],inset:["inset-x","inset-y","start","end","top","right","bottom","left"],"inset-x":["right","left"],"inset-y":["top","bottom"],flex:["basis","grow","shrink"],gap:["gap-x","gap-y"],p:["px","py","ps","pe","pt","pr","pb","pl"],px:["pr","pl"],py:["pt","pb"],m:["mx","my","ms","me","mt","mr","mb","ml"],mx:["mr","ml"],my:["mt","mb"],size:["w","h"],"font-size":["leading"],"fvn-normal":["fvn-ordinal","fvn-slashed-zero","fvn-figure","fvn-spacing","fvn-fraction"],"fvn-ordinal":["fvn-normal"],"fvn-slashed-zero":["fvn-normal"],"fvn-figure":["fvn-normal"],"fvn-spacing":["fvn-normal"],"fvn-fraction":["fvn-normal"],"line-clamp":["display","overflow"],rounded:["rounded-s","rounded-e","rounded-t","rounded-r","rounded-b","rounded-l","rounded-ss","rounded-se","rounded-ee","rounded-es","rounded-tl","rounded-tr","rounded-br","rounded-bl"],"rounded-s":["rounded-ss","rounded-es"],"rounded-e":["rounded-se","rounded-ee"],"rounded-t":["rounded-tl","rounded-tr"],"rounded-r":["rounded-tr","rounded-br"],"rounded-b":["rounded-br","rounded-bl"],"rounded-l":["rounded-tl","rounded-bl"],"border-spacing":["border-spacing-x","border-spacing-y"],"border-w":["border-w-s","border-w-e","border-w-t","border-w-r","border-w-b","border-w-l"],"border-w-x":["border-w-r","border-w-l"],"border-w-y":["border-w-t","border-w-b"],"border-color":["border-color-s","border-color-e","border-color-t","border-color-r","border-color-b","border-color-l"],"border-color-x":["border-color-r","border-color-l"],"border-color-y":["border-color-t","border-color-b"],"scroll-m":["scroll-mx","scroll-my","scroll-ms","scroll-me","scroll-mt","scroll-mr","scroll-mb","scroll-ml"],"scroll-mx":["scroll-mr","scroll-ml"],"scroll-my":["scroll-mt","scroll-mb"],"scroll-p":["scroll-px","scroll-py","scroll-ps","scroll-pe","scroll-pt","scroll-pr","scroll-pb","scroll-pl"],"scroll-px":["scroll-pr","scroll-pl"],"scroll-py":["scroll-pt","scroll-pb"],touch:["touch-x","touch-y","touch-pz"],"touch-x":["touch"],"touch-y":["touch"],"touch-pz":["touch"]},conflictingClassGroupModifiers:{"font-size":["leading"]}}},_e=ke(Be);function Ue(...e){return _e(ce(e))}function qe(e){const r=Math.floor(e),t=Math.round((e-r)*60);return r===0?`${t}m`:t===0?`${r}h`:`${r}h ${t}m`}function He(e){return new Date(e).toLocaleDateString(void 0,{month:"short",day:"numeric",year:"numeric"})}function Je(e){return new Date(e).toLocaleString(void 0,{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})}function Xe(e){const r=e.getFullYear(),t=String(e.getMonth()+1).padStart(2,"0"),o=String(e.getDate()).padStart(2,"0");return`${r}-${t}-${o}`}export{Fe as _,He as a,Je as b,Ue as c,qe as f,Xe as i}; diff --git a/src/static/index.html b/src/static/index.html index e07d9e7..79b607e 100644 --- a/src/static/index.html +++ b/src/static/index.html @@ -5,7 +5,7 @@ CC Dashboard - + diff --git a/web/src/views/DashboardView.vue b/web/src/views/DashboardView.vue index eeaf77e..567d030 100644 --- a/web/src/views/DashboardView.vue +++ b/web/src/views/DashboardView.vue @@ -249,7 +249,7 @@ const progressColor = (pct: number | null) => { /> - {{ tool.pct.toFixed(0) }}% + {{ (tool.pct ?? 0).toFixed(0) }}%