@oneclick.dev/cms-core-modules 0.0.101 → 0.0.102

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. package/dist/Acquisition-Br1Pfny3.js +1 -0
  2. package/dist/{Acquisition-BJXNY4ko.mjs → Acquisition-CPlZzUBo.mjs} +40 -40
  3. package/dist/Audience-BfkrmBuQ.js +1 -0
  4. package/dist/{Audience-CIzVtUvV.mjs → Audience-DTblSAiL.mjs} +89 -89
  5. package/dist/Content-BHr_rPVY.js +1 -0
  6. package/dist/{Content-CWhjurn_.mjs → Content-CYOZKvWK.mjs} +56 -56
  7. package/dist/Overview-BrCwozey.js +1 -0
  8. package/dist/{Overview-CGo4jaaA.mjs → Overview-kaMhsIUq.mjs} +21 -21
  9. package/dist/ReservationDetailDialog.vue_vue_type_script_setup_true_lang-CL5kbDII.mjs +2782 -0
  10. package/dist/ReservationDetailDialog.vue_vue_type_script_setup_true_lang-DcyyNvf6.js +349 -0
  11. package/dist/SeoHealth-09sEOu3G.js +1 -0
  12. package/dist/{SeoHealth-DVFDz3em.mjs → SeoHealth-BzcWd_w7.mjs} +29 -29
  13. package/dist/{agenda-DMT75Qfo.mjs → agenda-CCOjPiwP.mjs} +1 -1
  14. package/dist/{agenda-DxD4RMsy.js → agenda-CNPQfaIQ.js} +1 -1
  15. package/dist/cms-core-modules.css +1 -1
  16. package/dist/{index-BbqRTXuU.js → index-BOnqrBfY.js} +1 -1
  17. package/dist/{index-D4GsbUId.mjs → index-Bj0qaL1N.mjs} +1 -1
  18. package/dist/index.cjs.js +1 -1
  19. package/dist/index.mjs +8 -8
  20. package/dist/{orders-BRfXlWgV.mjs → orders-BJV5vRQr.mjs} +1 -1
  21. package/dist/{orders-CrCz1WTR.js → orders-C1C5IEIP.js} +1 -1
  22. package/package.json +2 -2
  23. package/dist/Acquisition-DPScJD4t.js +0 -1
  24. package/dist/Audience-Csw1QLmw.js +0 -1
  25. package/dist/Content-dYr7kYT0.js +0 -1
  26. package/dist/Overview-DBu86Ikb.js +0 -1
  27. package/dist/ReservationDetailDialog.vue_vue_type_script_setup_true_lang-COfCOMsz.js +0 -349
  28. package/dist/ReservationDetailDialog.vue_vue_type_script_setup_true_lang-CYXkhhdp.mjs +0 -2383
  29. package/dist/SeoHealth-DzftZW1m.js +0 -1
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),C=require("@oneclick.dev/cms-kit");require("./index-BuzLn4Km.js");const d=require("lucide-vue-next"),B=require("./index-D3L8WAJI.js"),q={class:"@container/charts flex flex-col gap-6 w-full max-w-7xl mx-auto py-8"},L={class:"flex justify-between gap-4 flex-col @lg:flex-row @lg:items-center"},U={key:0,class:"flex items-center gap-2"},F={class:"flex items-center border rounded-lg overflow-hidden"},A=["onClick"],G={class:"text-sm text-destructive font-medium"},T={key:2,class:"flex items-center justify-center py-20"},j={class:"flex flex-col @4xl/charts:grid @4xl/charts:grid-cols-3 gap-6"},O={class:"relative"},P={class:"absolute inset-0 flex items-center justify-center pointer-events-none"},H={class:"text-center"},I={class:"text-2xl font-bold tabular-nums"},K={class:"mt-4 grid grid-cols-2 gap-x-4 gap-y-1.5 w-full"},W={class:"text-xs truncate"},J={class:"text-xs text-muted-foreground ml-auto tabular-nums"},Q={class:"overflow-x-auto"},X={class:"w-full text-sm"},Y={class:"divide-y"},Z={class:"px-6 py-3"},ee={class:"flex items-center gap-2"},te={class:"font-medium"},oe={class:"px-4 py-3 text-right tabular-nums"},se={class:"px-4 py-3 text-right tabular-nums"},ne={class:"px-4 py-3 text-right tabular-nums"},ae={class:"px-4 py-3 text-right tabular-nums"},le={class:"px-4 py-3 text-right tabular-nums"},re={key:0,class:"px-6 py-8 text-center text-muted-foreground text-sm"},ce={class:"flex items-center gap-4"},ie=["onClick"],de={key:0,class:"divide-y"},ue={class:"overflow-x-auto"},me={class:"w-full text-sm"},pe={class:"divide-y"},xe={class:"px-6 py-3 text-muted-foreground"},fe={class:"px-4 py-3 font-mono text-xs"},ge={class:"px-4 py-3 text-right tabular-nums"},he={class:"px-4 py-3 text-right tabular-nums"},_e={class:"px-4 py-3 text-right tabular-nums"},ye={class:"px-4 py-3 text-right tabular-nums"},ve={key:0,class:"px-6 py-8 text-center text-muted-foreground text-sm"},Ne={key:1,class:"divide-y"},Ve={class:"flex items-center gap-3 min-w-0"},ke={class:"text-muted-foreground w-5 text-right shrink-0"},Ee={class:"truncate font-medium"},Ce={class:"flex items-center gap-6 shrink-0 tabular-nums text-xs text-muted-foreground"},be={class:"w-20 text-right"},Be={class:"w-16 text-right"},we={class:"w-16 text-right"},De={key:0,class:"px-6 py-8 text-center text-muted-foreground text-sm"},Se={key:2,class:"divide-y"},Me={class:"flex items-center gap-3 min-w-0"},$e={class:"text-muted-foreground w-5 text-right shrink-0"},Re={class:"truncate font-medium"},ze={class:"flex items-center gap-6 shrink-0 tabular-nums text-xs text-muted-foreground"},qe={class:"w-20 text-right"},Le={class:"w-16 text-right"},Ue={class:"w-16 text-right"},Fe={key:0,class:"px-6 py-8 text-center text-muted-foreground text-sm"},Ae=e.defineComponent({__name:"Acquisition",setup(Ge){const{config:b}=C.useModule(),{moduleId:w}=C.useModuleRoute();C.useModuleBreadcrumbs(()=>[{label:"Acquisition"}]);const u=e.ref(!0),p=e.ref(null),x=e.ref("30"),m=e.ref("sources"),i=e.ref([]),v=e.ref([]),N=e.ref([]),V=e.ref([]),f=e.computed(()=>!!(b.serviceAccount&&b.propertyId));function g(s){return`/api/v1/modules/${w}${s}`}const D=[{label:"7d",value:"7"},{label:"14d",value:"14"},{label:"30d",value:"30"},{label:"90d",value:"90"}],c=["#3b82f6","#8b5cf6","#10b981","#f59e0b","#ef4444","#06b6d4","#ec4899","#84cc16","#f97316","#6366f1","#14b8a6","#e11d48","#a855f7","#22c55e","#eab308"],S=e.computed(()=>{const s={};return i.value.forEach((o,l)=>{const r=(o.sessionDefaultChannelGroup||"other").toLowerCase().replace(/[^a-z0-9]/g,"_");s[r]={label:o.sessionDefaultChannelGroup||"Other",color:c[l%c.length]}}),s}),M=e.computed(()=>i.value.map((s,o)=>({key:(s.sessionDefaultChannelGroup||"other").toLowerCase().replace(/[^a-z0-9]/g,"_"),label:s.sessionDefaultChannelGroup||"Other",sessions:s.sessions||0,fill:c[o%c.length]}))),$=e.computed(()=>i.value.reduce((s,o)=>s+(o.sessions||0),0));function n(s){return s>=1e6?`${(s/1e6).toFixed(1)}M`:s>=1e3?`${(s/1e3).toFixed(1)}K`:Math.round(s).toString()}function h(s){return`${(s*100).toFixed(1)}%`}function R(s){const o=Math.floor(s/60),l=Math.round(s%60);return o>0?`${o}m ${l}s`:`${l}s`}async function _(){if(!f.value)return;u.value=!0,p.value=null;const s=`${x.value}daysAgo`;try{const[o,l,r,y]=await Promise.all([$fetch(g(`/acquisition/channels?startDate=${s}&endDate=today`)),$fetch(g(`/acquisition/source-medium?startDate=${s}&endDate=today`)),$fetch(g(`/acquisition/referrals?startDate=${s}&endDate=today`)).catch(()=>({rows:[]})),$fetch(g(`/acquisition/campaigns?startDate=${s}&endDate=today`)).catch(()=>({rows:[]}))]);i.value=o.rows||[],v.value=l.rows||[],N.value=r.rows||[],V.value=y.rows||[]}catch(o){p.value=o?.data?.statusMessage||o?.message||"Failed to load acquisition data"}finally{u.value=!1}}return e.watch(x,()=>_()),e.onMounted(()=>{f.value?_():u.value=!1}),(s,o)=>{const l=e.resolveComponent("Button"),r=e.resolveComponent("Card"),y=e.resolveComponent("CardTitle"),k=e.resolveComponent("CardHeader"),z=e.resolveComponent("ChartContainer"),E=e.resolveComponent("CardContent");return e.openBlock(),e.createElementBlock("div",q,[e.createElementVNode("div",L,[o[0]||(o[0]=e.createElementVNode("div",null,[e.createElementVNode("h1",{class:"text-2xl font-semibold"},"Acquisition"),e.createElementVNode("p",{class:"text-muted-foreground text-sm mt-1"},"Where your traffic comes from")],-1)),f.value?(e.openBlock(),e.createElementBlock("div",U,[e.createElementVNode("div",F,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(D,t=>e.createElementVNode("button",{key:t.value,class:e.normalizeClass(["px-3 py-1.5 text-xs font-medium transition-colors",x.value===t.value?"bg-primary text-primary-foreground":"text-muted-foreground hover:text-foreground hover:bg-muted"]),onClick:a=>x.value=t.value},e.toDisplayString(t.label),11,A)),64))]),e.createVNode(l,{variant:"outline",size:"icon",onClick:_,disabled:u.value},{default:e.withCtx(()=>[e.createVNode(e.unref(d.RefreshCw),{class:e.normalizeClass(["size-4",{"animate-spin":u.value}])},null,8,["class"])]),_:1},8,["disabled"])])):e.createCommentVNode("",!0)]),f.value?p.value?(e.openBlock(),e.createBlock(r,{key:1,class:"p-6 border-destructive/50 bg-destructive/5"},{default:e.withCtx(()=>[e.createElementVNode("p",G,e.toDisplayString(p.value),1),e.createVNode(l,{variant:"outline",size:"sm",class:"mt-3",onClick:_},{default:e.withCtx(()=>[...o[2]||(o[2]=[e.createTextVNode("Retry",-1)])]),_:1})]),_:1})):u.value?(e.openBlock(),e.createElementBlock("div",T,[e.createVNode(e.unref(d.Loader2),{class:"size-8 animate-spin text-muted-foreground"})])):(e.openBlock(),e.createElementBlock(e.Fragment,{key:3},[e.createElementVNode("div",j,[e.createVNode(r,{class:"@4xl/charts:col-span-1"},{default:e.withCtx(()=>[e.createVNode(k,{class:"pb-2"},{default:e.withCtx(()=>[e.createVNode(y,{class:"text-base"},{default:e.withCtx(()=>[...o[3]||(o[3]=[e.createTextVNode("Channel Mix",-1)])]),_:1})]),_:1}),e.createVNode(E,{class:"flex flex-col items-center"},{default:e.withCtx(()=>[e.createElementVNode("div",O,[e.createVNode(z,{config:S.value,class:"mx-auto aspect-square max-h-[220px]"},{default:e.withCtx(()=>[e.createVNode(e.unref(B.b),{data:M.value,margin:{top:20,bottom:20,left:20,right:20}},{default:e.withCtx(()=>[e.createVNode(e.unref(B.E),{value:t=>t.sessions,color:t=>t.fill,arcWidth:40,padAngle:.02,cornerRadius:4},null,8,["value","color"])]),_:1},8,["data"])]),_:1},8,["config"]),e.createElementVNode("div",P,[e.createElementVNode("div",H,[e.createElementVNode("p",I,e.toDisplayString(n($.value)),1),o[4]||(o[4]=e.createElementVNode("p",{class:"text-xs text-muted-foreground"},"sessions",-1))])])]),e.createElementVNode("div",K,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value.slice(0,8),(t,a)=>(e.openBlock(),e.createElementBlock("div",{key:t.sessionDefaultChannelGroup,class:"flex items-center gap-2"},[e.createElementVNode("div",{class:"size-2.5 rounded-full shrink-0",style:e.normalizeStyle({backgroundColor:c[a%c.length]})},null,4),e.createElementVNode("span",W,e.toDisplayString(t.sessionDefaultChannelGroup),1),e.createElementVNode("span",J,e.toDisplayString(n(t.sessions)),1)]))),128))])]),_:1})]),_:1}),e.createVNode(r,{class:"@4xl/charts:col-span-2"},{default:e.withCtx(()=>[e.createVNode(k,{class:"pb-2"},{default:e.withCtx(()=>[e.createVNode(y,{class:"text-base"},{default:e.withCtx(()=>[...o[5]||(o[5]=[e.createTextVNode("Channels Performance",-1)])]),_:1})]),_:1}),e.createVNode(E,{class:"p-0"},{default:e.withCtx(()=>[e.createElementVNode("div",Q,[e.createElementVNode("table",X,[o[6]||(o[6]=e.createElementVNode("thead",null,[e.createElementVNode("tr",{class:"border-b text-left"},[e.createElementVNode("th",{class:"px-6 py-3 font-medium text-muted-foreground"},"Channel"),e.createElementVNode("th",{class:"px-4 py-3 font-medium text-muted-foreground text-right"},"Sessions"),e.createElementVNode("th",{class:"px-4 py-3 font-medium text-muted-foreground text-right"},"Users"),e.createElementVNode("th",{class:"px-4 py-3 font-medium text-muted-foreground text-right"},"New Users"),e.createElementVNode("th",{class:"px-4 py-3 font-medium text-muted-foreground text-right"},"Engage Rate"),e.createElementVNode("th",{class:"px-4 py-3 font-medium text-muted-foreground text-right"},"Avg Duration")])],-1)),e.createElementVNode("tbody",Y,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,(t,a)=>(e.openBlock(),e.createElementBlock("tr",{key:t.sessionDefaultChannelGroup,class:"hover:bg-muted/50"},[e.createElementVNode("td",Z,[e.createElementVNode("div",ee,[e.createElementVNode("div",{class:"size-2.5 rounded-full shrink-0",style:e.normalizeStyle({backgroundColor:c[a%c.length]})},null,4),e.createElementVNode("span",te,e.toDisplayString(t.sessionDefaultChannelGroup),1)])]),e.createElementVNode("td",oe,e.toDisplayString(n(t.sessions)),1),e.createElementVNode("td",se,e.toDisplayString(n(t.totalUsers)),1),e.createElementVNode("td",ne,e.toDisplayString(n(t.newUsers)),1),e.createElementVNode("td",ae,e.toDisplayString(h(t.engagementRate||0)),1),e.createElementVNode("td",le,e.toDisplayString(R(t.averageSessionDuration||0)),1)]))),128))])])]),i.value.length?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",re,"No channel data available"))]),_:1})]),_:1})]),e.createVNode(r,null,{default:e.withCtx(()=>[e.createVNode(k,{class:"pb-0"},{default:e.withCtx(()=>[e.createElementVNode("div",ce,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList([{key:"sources",label:"Source / Medium",icon:e.unref(d.Share2)},{key:"referrals",label:"Referrals",icon:e.unref(d.ExternalLink)},{key:"campaigns",label:"Campaigns",icon:e.unref(d.Megaphone)}],t=>(e.openBlock(),e.createElementBlock("button",{key:t.key,class:e.normalizeClass(["flex items-center gap-1.5 px-3 py-2 text-sm font-medium rounded-md transition-colors",m.value===t.key?"bg-muted text-foreground":"text-muted-foreground hover:text-foreground"]),onClick:a=>m.value=t.key},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(t.icon),{class:"size-3.5"})),e.createTextVNode(" "+e.toDisplayString(t.label),1)],10,ie))),128))])]),_:1}),e.createVNode(E,{class:"p-0 mt-4"},{default:e.withCtx(()=>[m.value==="sources"?(e.openBlock(),e.createElementBlock("div",de,[e.createElementVNode("div",ue,[e.createElementVNode("table",me,[o[7]||(o[7]=e.createElementVNode("thead",null,[e.createElementVNode("tr",{class:"border-b text-left"},[e.createElementVNode("th",{class:"px-6 py-3 font-medium text-muted-foreground"},"#"),e.createElementVNode("th",{class:"px-4 py-3 font-medium text-muted-foreground"},"Source / Medium"),e.createElementVNode("th",{class:"px-4 py-3 font-medium text-muted-foreground text-right"},"Sessions"),e.createElementVNode("th",{class:"px-4 py-3 font-medium text-muted-foreground text-right"},"Users"),e.createElementVNode("th",{class:"px-4 py-3 font-medium text-muted-foreground text-right"},"New Users"),e.createElementVNode("th",{class:"px-4 py-3 font-medium text-muted-foreground text-right"},"Bounce Rate")])],-1)),e.createElementVNode("tbody",pe,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(v.value,(t,a)=>(e.openBlock(),e.createElementBlock("tr",{key:t.sessionSourceMedium,class:"hover:bg-muted/50"},[e.createElementVNode("td",xe,e.toDisplayString(a+1),1),e.createElementVNode("td",fe,e.toDisplayString(t.sessionSourceMedium),1),e.createElementVNode("td",ge,e.toDisplayString(n(t.sessions)),1),e.createElementVNode("td",he,e.toDisplayString(n(t.totalUsers)),1),e.createElementVNode("td",_e,e.toDisplayString(n(t.newUsers)),1),e.createElementVNode("td",ye,e.toDisplayString(h(t.bounceRate||0)),1)]))),128))])])]),v.value.length?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",ve,"No data available"))])):e.createCommentVNode("",!0),m.value==="referrals"?(e.openBlock(),e.createElementBlock("div",Ne,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(N.value,(t,a)=>(e.openBlock(),e.createElementBlock("div",{key:t.sessionSource,class:"flex items-center justify-between px-6 py-3 text-sm hover:bg-muted/50"},[e.createElementVNode("div",Ve,[e.createElementVNode("span",ke,e.toDisplayString(a+1),1),e.createVNode(e.unref(d.ExternalLink),{class:"size-3.5 text-muted-foreground shrink-0"}),e.createElementVNode("span",Ee,e.toDisplayString(t.sessionSource),1)]),e.createElementVNode("div",Ce,[e.createElementVNode("span",be,e.toDisplayString(n(t.sessions))+" sessions",1),e.createElementVNode("span",Be,e.toDisplayString(n(t.totalUsers))+" users",1),e.createElementVNode("span",we,e.toDisplayString(h(t.engagementRate||0))+" eng.",1)])]))),128)),N.value.length?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",De,"No referral data available"))])):e.createCommentVNode("",!0),m.value==="campaigns"?(e.openBlock(),e.createElementBlock("div",Se,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(V.value,(t,a)=>(e.openBlock(),e.createElementBlock("div",{key:t.sessionCampaignName,class:"flex items-center justify-between px-6 py-3 text-sm hover:bg-muted/50"},[e.createElementVNode("div",Me,[e.createElementVNode("span",$e,e.toDisplayString(a+1),1),e.createVNode(e.unref(d.Megaphone),{class:"size-3.5 text-muted-foreground shrink-0"}),e.createElementVNode("span",Re,e.toDisplayString(t.sessionCampaignName),1)]),e.createElementVNode("div",ze,[e.createElementVNode("span",qe,e.toDisplayString(n(t.sessions))+" sessions",1),e.createElementVNode("span",Le,e.toDisplayString(n(t.totalUsers))+" users",1),e.createElementVNode("span",Ue,e.toDisplayString(h(t.engagementRate||0))+" eng.",1)])]))),128)),V.value.length?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",Fe,"No campaign data. Use UTM parameters in your URLs to track campaigns."))])):e.createCommentVNode("",!0)]),_:1})]),_:1})],64)):(e.openBlock(),e.createBlock(r,{key:0,class:"p-8 text-center"},{default:e.withCtx(()=>[...o[1]||(o[1]=[e.createElementVNode("p",{class:"text-lg font-medium"},"Setup required",-1),e.createElementVNode("p",{class:"text-sm text-muted-foreground mt-2"},"Configure your GA4 property in module settings.",-1)])]),_:1}))])}}});exports.default=Ae;
@@ -1,15 +1,15 @@
1
- import { defineComponent as Q, ref as p, computed as U, watch as X, onMounted as Y, resolveComponent as b, openBlock as a, createElementBlock as l, createElementVNode as e, Fragment as g, renderList as v, normalizeClass as L, toDisplayString as o, createVNode as r, withCtx as i, unref as f, createCommentVNode as h, createBlock as E, createTextVNode as z, normalizeStyle as F, resolveDynamicComponent as Z } from "vue";
1
+ import { defineComponent as Q, ref as p, computed as U, watch as X, onMounted as Y, resolveComponent as b, openBlock as a, createElementBlock as l, createElementVNode as e, Fragment as h, renderList as v, normalizeClass as L, toDisplayString as o, createVNode as r, withCtx as i, unref as x, createCommentVNode as g, createBlock as E, createTextVNode as z, normalizeStyle as F, resolveDynamicComponent as Z } from "vue";
2
2
  import { useModule as ee, useModuleRoute as te, useModuleBreadcrumbs as se } from "@oneclick.dev/cms-kit";
3
3
  import "./index-CMk3uhUt.mjs";
4
4
  import { RefreshCw as oe, Loader2 as ne, Share2 as ae, ExternalLink as T, Megaphone as V } from "lucide-vue-next";
5
5
  import { b as le, E as re } from "./index-DjDCYQ_6.mjs";
6
- const ie = { class: "flex flex-col gap-6 w-full max-w-7xl mx-auto py-8" }, ue = { class: "flex items-center justify-between" }, de = {
6
+ const ie = { class: "@container/charts flex flex-col gap-6 w-full max-w-7xl mx-auto py-8" }, ue = { class: "flex justify-between gap-4 flex-col @lg:flex-row @lg:items-center" }, de = {
7
7
  key: 0,
8
8
  class: "flex items-center gap-2"
9
- }, ce = { class: "flex items-center border rounded-lg overflow-hidden" }, me = ["onClick"], fe = { class: "text-sm text-destructive font-medium" }, xe = {
9
+ }, ce = { class: "flex items-center border rounded-lg overflow-hidden" }, me = ["onClick"], xe = { class: "text-sm text-destructive font-medium" }, fe = {
10
10
  key: 2,
11
11
  class: "flex items-center justify-center py-20"
12
- }, pe = { class: "grid @lg:grid-cols-3 gap-6" }, ge = { class: "relative" }, he = { class: "absolute inset-0 flex items-center justify-center pointer-events-none" }, _e = { class: "text-center" }, ve = { class: "text-2xl font-bold tabular-nums" }, ye = { class: "mt-4 grid grid-cols-2 gap-x-4 gap-y-1.5 w-full" }, be = { class: "text-xs truncate" }, Ce = { class: "text-xs text-muted-foreground ml-auto tabular-nums" }, ke = { class: "overflow-x-auto" }, we = { class: "w-full text-sm" }, De = { class: "divide-y" }, $e = { class: "px-6 py-3" }, Re = { class: "flex items-center gap-2" }, Me = { class: "font-medium" }, Se = { class: "px-4 py-3 text-right tabular-nums" }, Ue = { class: "px-4 py-3 text-right tabular-nums" }, ze = { class: "px-4 py-3 text-right tabular-nums" }, Ne = { class: "px-4 py-3 text-right tabular-nums" }, qe = { class: "px-4 py-3 text-right tabular-nums" }, Ae = {
12
+ }, pe = { class: "flex flex-col @4xl/charts:grid @4xl/charts:grid-cols-3 gap-6" }, he = { class: "relative" }, ge = { class: "absolute inset-0 flex items-center justify-center pointer-events-none" }, _e = { class: "text-center" }, ve = { class: "text-2xl font-bold tabular-nums" }, ye = { class: "mt-4 grid grid-cols-2 gap-x-4 gap-y-1.5 w-full" }, be = { class: "text-xs truncate" }, Ce = { class: "text-xs text-muted-foreground ml-auto tabular-nums" }, ke = { class: "overflow-x-auto" }, we = { class: "w-full text-sm" }, De = { class: "divide-y" }, $e = { class: "px-6 py-3" }, Re = { class: "flex items-center gap-2" }, Me = { class: "font-medium" }, Se = { class: "px-4 py-3 text-right tabular-nums" }, Ue = { class: "px-4 py-3 text-right tabular-nums" }, ze = { class: "px-4 py-3 text-right tabular-nums" }, Ne = { class: "px-4 py-3 text-right tabular-nums" }, qe = { class: "px-4 py-3 text-right tabular-nums" }, Ae = {
13
13
  key: 0,
14
14
  class: "px-6 py-8 text-center text-muted-foreground text-sm"
15
15
  }, Ge = { class: "flex items-center gap-4" }, Be = ["onClick"], Le = {
@@ -44,7 +44,7 @@ const ie = { class: "flex flex-col gap-6 w-full max-w-7xl mx-auto py-8" }, ue =
44
44
  { label: "14d", value: "14" },
45
45
  { label: "30d", value: "30" },
46
46
  { label: "90d", value: "90" }
47
- ], x = [
47
+ ], f = [
48
48
  "#3b82f6",
49
49
  "#8b5cf6",
50
50
  "#10b981",
@@ -66,7 +66,7 @@ const ie = { class: "flex flex-col gap-6 w-full max-w-7xl mx-auto py-8" }, ue =
66
66
  const m = (s.sessionDefaultChannelGroup || "other").toLowerCase().replace(/[^a-z0-9]/g, "_");
67
67
  n[m] = {
68
68
  label: s.sessionDefaultChannelGroup || "Other",
69
- color: x[c % x.length]
69
+ color: f[c % f.length]
70
70
  };
71
71
  }), n;
72
72
  }), I = U(
@@ -74,7 +74,7 @@ const ie = { class: "flex flex-col gap-6 w-full max-w-7xl mx-auto py-8" }, ue =
74
74
  key: (n.sessionDefaultChannelGroup || "other").toLowerCase().replace(/[^a-z0-9]/g, "_"),
75
75
  label: n.sessionDefaultChannelGroup || "Other",
76
76
  sessions: n.sessions || 0,
77
- fill: x[s % x.length]
77
+ fill: f[s % f.length]
78
78
  }))
79
79
  ), W = U(
80
80
  () => _.value.reduce((n, s) => n + (s.sessions || 0), 0)
@@ -119,7 +119,7 @@ const ie = { class: "flex flex-col gap-6 w-full max-w-7xl mx-auto py-8" }, ue =
119
119
  ], -1)),
120
120
  D.value ? (a(), l("div", de, [
121
121
  e("div", ce, [
122
- (a(), l(g, null, v(P, (t) => e("button", {
122
+ (a(), l(h, null, v(P, (t) => e("button", {
123
123
  key: t.value,
124
124
  class: L(["px-3 py-1.5 text-xs font-medium transition-colors", w.value === t.value ? "bg-primary text-primary-foreground" : "text-muted-foreground hover:text-foreground hover:bg-muted"]),
125
125
  onClick: (d) => w.value = t.value
@@ -132,20 +132,20 @@ const ie = { class: "flex flex-col gap-6 w-full max-w-7xl mx-auto py-8" }, ue =
132
132
  disabled: y.value
133
133
  }, {
134
134
  default: i(() => [
135
- r(f(oe), {
135
+ r(x(oe), {
136
136
  class: L(["size-4", { "animate-spin": y.value }])
137
137
  }, null, 8, ["class"])
138
138
  ]),
139
139
  _: 1
140
140
  }, 8, ["disabled"])
141
- ])) : h("", !0)
141
+ ])) : g("", !0)
142
142
  ]),
143
143
  D.value ? k.value ? (a(), E(m, {
144
144
  key: 1,
145
145
  class: "p-6 border-destructive/50 bg-destructive/5"
146
146
  }, {
147
147
  default: i(() => [
148
- e("p", fe, o(k.value), 1),
148
+ e("p", xe, o(k.value), 1),
149
149
  r(c, {
150
150
  variant: "outline",
151
151
  size: "sm",
@@ -159,11 +159,11 @@ const ie = { class: "flex flex-col gap-6 w-full max-w-7xl mx-auto py-8" }, ue =
159
159
  })
160
160
  ]),
161
161
  _: 1
162
- })) : y.value ? (a(), l("div", xe, [
163
- r(f(ne), { class: "size-8 animate-spin text-muted-foreground" })
164
- ])) : (a(), l(g, { key: 3 }, [
162
+ })) : y.value ? (a(), l("div", fe, [
163
+ r(x(ne), { class: "size-8 animate-spin text-muted-foreground" })
164
+ ])) : (a(), l(h, { key: 3 }, [
165
165
  e("div", pe, [
166
- r(m, { class: "@lg:col-span-1" }, {
166
+ r(m, { class: "@4xl/charts:col-span-1" }, {
167
167
  default: i(() => [
168
168
  r(G, { class: "pb-2" }, {
169
169
  default: i(() => [
@@ -178,18 +178,18 @@ const ie = { class: "flex flex-col gap-6 w-full max-w-7xl mx-auto py-8" }, ue =
178
178
  }),
179
179
  r(B, { class: "flex flex-col items-center" }, {
180
180
  default: i(() => [
181
- e("div", ge, [
181
+ e("div", he, [
182
182
  r(J, {
183
183
  config: H.value,
184
184
  class: "mx-auto aspect-square max-h-[220px]"
185
185
  }, {
186
186
  default: i(() => [
187
- r(f(le), {
187
+ r(x(le), {
188
188
  data: I.value,
189
189
  margin: { top: 20, bottom: 20, left: 20, right: 20 }
190
190
  }, {
191
191
  default: i(() => [
192
- r(f(re), {
192
+ r(x(re), {
193
193
  value: (t) => t.sessions,
194
194
  color: (t) => t.fill,
195
195
  arcWidth: 40,
@@ -202,7 +202,7 @@ const ie = { class: "flex flex-col gap-6 w-full max-w-7xl mx-auto py-8" }, ue =
202
202
  ]),
203
203
  _: 1
204
204
  }, 8, ["config"]),
205
- e("div", he, [
205
+ e("div", ge, [
206
206
  e("div", _e, [
207
207
  e("p", ve, o(u(W.value)), 1),
208
208
  s[4] || (s[4] = e("p", { class: "text-xs text-muted-foreground" }, "sessions", -1))
@@ -210,13 +210,13 @@ const ie = { class: "flex flex-col gap-6 w-full max-w-7xl mx-auto py-8" }, ue =
210
210
  ])
211
211
  ]),
212
212
  e("div", ye, [
213
- (a(!0), l(g, null, v(_.value.slice(0, 8), (t, d) => (a(), l("div", {
213
+ (a(!0), l(h, null, v(_.value.slice(0, 8), (t, d) => (a(), l("div", {
214
214
  key: t.sessionDefaultChannelGroup,
215
215
  class: "flex items-center gap-2"
216
216
  }, [
217
217
  e("div", {
218
218
  class: "size-2.5 rounded-full shrink-0",
219
- style: F({ backgroundColor: x[d % x.length] })
219
+ style: F({ backgroundColor: f[d % f.length] })
220
220
  }, null, 4),
221
221
  e("span", be, o(t.sessionDefaultChannelGroup), 1),
222
222
  e("span", Ce, o(u(t.sessions)), 1)
@@ -228,7 +228,7 @@ const ie = { class: "flex flex-col gap-6 w-full max-w-7xl mx-auto py-8" }, ue =
228
228
  ]),
229
229
  _: 1
230
230
  }),
231
- r(m, { class: "@lg:col-span-2" }, {
231
+ r(m, { class: "@4xl/charts:col-span-2" }, {
232
232
  default: i(() => [
233
233
  r(G, { class: "pb-2" }, {
234
234
  default: i(() => [
@@ -256,7 +256,7 @@ const ie = { class: "flex flex-col gap-6 w-full max-w-7xl mx-auto py-8" }, ue =
256
256
  ])
257
257
  ], -1)),
258
258
  e("tbody", De, [
259
- (a(!0), l(g, null, v(_.value, (t, d) => (a(), l("tr", {
259
+ (a(!0), l(h, null, v(_.value, (t, d) => (a(), l("tr", {
260
260
  key: t.sessionDefaultChannelGroup,
261
261
  class: "hover:bg-muted/50"
262
262
  }, [
@@ -264,7 +264,7 @@ const ie = { class: "flex flex-col gap-6 w-full max-w-7xl mx-auto py-8" }, ue =
264
264
  e("div", Re, [
265
265
  e("div", {
266
266
  class: "size-2.5 rounded-full shrink-0",
267
- style: F({ backgroundColor: x[d % x.length] })
267
+ style: F({ backgroundColor: f[d % f.length] })
268
268
  }, null, 4),
269
269
  e("span", Me, o(t.sessionDefaultChannelGroup), 1)
270
270
  ])
@@ -278,7 +278,7 @@ const ie = { class: "flex flex-col gap-6 w-full max-w-7xl mx-auto py-8" }, ue =
278
278
  ])
279
279
  ])
280
280
  ]),
281
- _.value.length ? h("", !0) : (a(), l("div", Ae, "No channel data available"))
281
+ _.value.length ? g("", !0) : (a(), l("div", Ae, "No channel data available"))
282
282
  ]),
283
283
  _: 1
284
284
  })
@@ -291,10 +291,10 @@ const ie = { class: "flex flex-col gap-6 w-full max-w-7xl mx-auto py-8" }, ue =
291
291
  r(G, { class: "pb-0" }, {
292
292
  default: i(() => [
293
293
  e("div", Ge, [
294
- (a(!0), l(g, null, v([
295
- { key: "sources", label: "Source / Medium", icon: f(ae) },
296
- { key: "referrals", label: "Referrals", icon: f(T) },
297
- { key: "campaigns", label: "Campaigns", icon: f(V) }
294
+ (a(!0), l(h, null, v([
295
+ { key: "sources", label: "Source / Medium", icon: x(ae) },
296
+ { key: "referrals", label: "Referrals", icon: x(T) },
297
+ { key: "campaigns", label: "Campaigns", icon: x(V) }
298
298
  ], (t) => (a(), l("button", {
299
299
  key: t.key,
300
300
  class: L(["flex items-center gap-1.5 px-3 py-2 text-sm font-medium rounded-md transition-colors", C.value === t.key ? "bg-muted text-foreground" : "text-muted-foreground hover:text-foreground"]),
@@ -323,7 +323,7 @@ const ie = { class: "flex flex-col gap-6 w-full max-w-7xl mx-auto py-8" }, ue =
323
323
  ])
324
324
  ], -1)),
325
325
  e("tbody", Fe, [
326
- (a(!0), l(g, null, v(N.value, (t, d) => (a(), l("tr", {
326
+ (a(!0), l(h, null, v(N.value, (t, d) => (a(), l("tr", {
327
327
  key: t.sessionSourceMedium,
328
328
  class: "hover:bg-muted/50"
329
329
  }, [
@@ -337,16 +337,16 @@ const ie = { class: "flex flex-col gap-6 w-full max-w-7xl mx-auto py-8" }, ue =
337
337
  ])
338
338
  ])
339
339
  ]),
340
- N.value.length ? h("", !0) : (a(), l("div", We, "No data available"))
341
- ])) : h("", !0),
340
+ N.value.length ? g("", !0) : (a(), l("div", We, "No data available"))
341
+ ])) : g("", !0),
342
342
  C.value === "referrals" ? (a(), l("div", Ke, [
343
- (a(!0), l(g, null, v(q.value, (t, d) => (a(), l("div", {
343
+ (a(!0), l(h, null, v(q.value, (t, d) => (a(), l("div", {
344
344
  key: t.sessionSource,
345
345
  class: "flex items-center justify-between px-6 py-3 text-sm hover:bg-muted/50"
346
346
  }, [
347
347
  e("div", Je, [
348
348
  e("span", Qe, o(d + 1), 1),
349
- r(f(T), { class: "size-3.5 text-muted-foreground shrink-0" }),
349
+ r(x(T), { class: "size-3.5 text-muted-foreground shrink-0" }),
350
350
  e("span", Xe, o(t.sessionSource), 1)
351
351
  ]),
352
352
  e("div", Ye, [
@@ -355,16 +355,16 @@ const ie = { class: "flex flex-col gap-6 w-full max-w-7xl mx-auto py-8" }, ue =
355
355
  e("span", tt, o(R(t.engagementRate || 0)) + " eng.", 1)
356
356
  ])
357
357
  ]))), 128)),
358
- q.value.length ? h("", !0) : (a(), l("div", st, "No referral data available"))
359
- ])) : h("", !0),
358
+ q.value.length ? g("", !0) : (a(), l("div", st, "No referral data available"))
359
+ ])) : g("", !0),
360
360
  C.value === "campaigns" ? (a(), l("div", ot, [
361
- (a(!0), l(g, null, v(A.value, (t, d) => (a(), l("div", {
361
+ (a(!0), l(h, null, v(A.value, (t, d) => (a(), l("div", {
362
362
  key: t.sessionCampaignName,
363
363
  class: "flex items-center justify-between px-6 py-3 text-sm hover:bg-muted/50"
364
364
  }, [
365
365
  e("div", nt, [
366
366
  e("span", at, o(d + 1), 1),
367
- r(f(V), { class: "size-3.5 text-muted-foreground shrink-0" }),
367
+ r(x(V), { class: "size-3.5 text-muted-foreground shrink-0" }),
368
368
  e("span", lt, o(t.sessionCampaignName), 1)
369
369
  ]),
370
370
  e("div", rt, [
@@ -373,8 +373,8 @@ const ie = { class: "flex flex-col gap-6 w-full max-w-7xl mx-auto py-8" }, ue =
373
373
  e("span", dt, o(R(t.engagementRate || 0)) + " eng.", 1)
374
374
  ])
375
375
  ]))), 128)),
376
- A.value.length ? h("", !0) : (a(), l("div", ct, "No campaign data. Use UTM parameters in your URLs to track campaigns."))
377
- ])) : h("", !0)
376
+ A.value.length ? g("", !0) : (a(), l("div", ct, "No campaign data. Use UTM parameters in your URLs to track campaigns."))
377
+ ])) : g("", !0)
378
378
  ]),
379
379
  _: 1
380
380
  })
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),D=require("@oneclick.dev/cms-kit");require("./index-BuzLn4Km.js");const r=require("lucide-vue-next"),z=require("./index-D3L8WAJI.js"),H=require("./_plugin-vue_export-helper-BHFhmbuH.js"),I={class:"flex flex-col gap-6 w-full max-w-7xl mx-auto py-8"},K={class:"flex justify-between gap-4 flex-col @lg:flex-row @lg:items-center"},G={key:0,class:"flex items-center gap-2"},J={class:"flex items-center border rounded-lg overflow-hidden"},Q=["onClick"],X={class:"text-sm text-destructive font-medium"},Y={key:2,class:"flex items-center justify-center py-20"},Z={class:"flex flex-col @lg:grid @lg:grid-cols-3 gap-6"},ee={class:"relative"},te={class:"absolute inset-0 flex items-center justify-center pointer-events-none"},se={class:"text-center"},oe={class:"text-xl font-bold tabular-nums"},ne={class:"mt-4 flex items-center gap-6"},le={class:"flex items-center gap-2"},ae={class:"text-sm font-semibold tabular-nums"},re={key:0,class:"text-xs text-muted-foreground"},de={class:"flex items-center gap-2"},ce={class:"text-sm font-semibold tabular-nums"},ie={key:0,class:"text-xs text-muted-foreground"},ue={class:"overflow-x-auto"},me={class:"w-full text-sm"},xe={class:"divide-y"},fe={class:"px-4 py-3"},ge={class:"flex items-center gap-2"},pe={class:"font-medium capitalize"},ve={class:"px-4 py-3 text-right tabular-nums"},he={class:"px-4 py-3 text-right tabular-nums"},Ve={class:"px-4 py-3 text-right tabular-nums"},_e={class:"px-4 py-3 text-right tabular-nums"},Ne={class:"px-4 py-3 text-right tabular-nums"},ye={class:"overflow-x-auto"},be={class:"min-w-[600px]"},Ee={class:"flex items-center mb-1.5"},ke={class:"flex-1 grid grid-cols-24 gap-0.5"},Ce={class:"w-10 shrink-0 text-xs text-muted-foreground"},we={class:"flex-1 grid grid-cols-24 gap-0.5"},Be=["title"],De={class:"grid @lg:grid-cols-3 gap-6"},Se={class:"flex items-center justify-between"},$e={class:"flex items-center gap-1"},ze=["onClick","title"],Re={class:"space-y-3"},Ue={class:"text-sm flex-1 truncate"},Te={class:"flex-1 h-2 bg-muted rounded-full overflow-hidden"},Fe={class:"text-xs tabular-nums text-muted-foreground w-12 text-right"},Me={key:0,class:"py-4 text-center text-muted-foreground text-sm"},Le={class:"space-y-3"},Ae={class:"text-sm flex-1 truncate"},qe={class:"flex-1 h-2 bg-muted rounded-full overflow-hidden"},Pe={class:"text-xs tabular-nums text-muted-foreground w-12 text-right"},Oe={key:0,class:"py-4 text-center text-muted-foreground text-sm"},je={class:"space-y-2.5"},We={class:"flex-1 min-w-0"},He={class:"text-sm truncate block"},Ie={class:"text-xs text-muted-foreground truncate block"},Ke={class:"flex-1 h-2 bg-muted rounded-full overflow-hidden"},Ge={class:"text-xs tabular-nums text-muted-foreground w-12 text-right"},Je={key:0,class:"py-4 text-center text-muted-foreground text-sm"},Qe=e.defineComponent({__name:"Audience",setup(Ye){const{config:S}=D.useModule(),{moduleId:R}=D.useModuleRoute();D.useModuleBreadcrumbs(()=>[{label:"Audience"}]);const u=e.ref(!0),h=e.ref(null),g=e.ref("30"),i=e.ref("browser"),V=e.ref([]),p=e.ref([]),_=e.ref([]),$=e.ref([]),N=e.ref([]),y=e.computed(()=>!!(S.serviceAccount&&S.propertyId));function m(o){return`/api/v1/modules/${R}${o}`}const U=[{label:"7d",value:"7"},{label:"14d",value:"14"},{label:"30d",value:"30"},{label:"90d",value:"90"}];function d(o){return o>=1e6?`${(o/1e6).toFixed(1)}M`:o>=1e3?`${(o/1e3).toFixed(1)}K`:Math.round(o).toString()}function T(o){return`${(o*100).toFixed(1)}%`}function F(o){const t=Math.floor(o/60),n=Math.round(o%60);return t>0?`${t}m ${n}s`:`${n}s`}const x={new:"#3b82f6",returning:"#8b5cf6"},M={new:{label:"New Users",color:x.new},returning:{label:"Returning Users",color:x.returning}},b=e.computed(()=>V.value.find(t=>t.newVsReturning==="new")?.totalUsers||0),E=e.computed(()=>V.value.find(t=>t.newVsReturning==="returning")?.totalUsers||0),L=e.computed(()=>[{key:"new",label:"New",value:b.value,fill:x.new},{key:"returning",label:"Returning",value:E.value,fill:x.returning}]),v=e.computed(()=>b.value+E.value),A=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],q=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],B=e.computed(()=>{const o=Array.from({length:7},()=>Array(24).fill(0));let t=1;return $.value.forEach(n=>{const l=A.indexOf(n.dayOfWeekName),a=parseInt(n.hour,10);l>=0&&a>=0&&a<24&&(o[l][a]=n.sessions||0,n.sessions>t&&(t=n.sessions))}),{matrix:o,maxVal:t}});function P(o,t){if(o===0)return"bg-muted";const n=o/t;return n>.75?"bg-blue-600 dark:bg-blue-500":n>.5?"bg-blue-500 dark:bg-blue-400":n>.25?"bg-blue-400/70 dark:bg-blue-400/60":"bg-blue-300/50 dark:bg-blue-300/30"}const O=[{key:"browser",label:"Browser",icon:r.Chrome},{key:"operatingSystem",label:"OS",icon:r.Cpu},{key:"screenResolution",label:"Screen",icon:r.Monitor}];async function k(){if(!y.value)return;u.value=!0,h.value=null;const o=`${g.value}daysAgo`;try{const[t,n,l,a,c]=await Promise.all([$fetch(m(`/audience/overview?startDate=${o}&endDate=today`)),$fetch(m(`/audience/technology?startDate=${o}&endDate=today&dimension=${i.value}`)),$fetch(m(`/audience/languages?startDate=${o}&endDate=today`)),$fetch(m(`/audience/hours?startDate=${o}&endDate=today`)),$fetch(m(`/audience/cities?startDate=${o}&endDate=today`))]);V.value=t.rows||[],p.value=n.rows||[],_.value=l.rows||[],$.value=a.rows||[],N.value=c.rows||[]}catch(t){h.value=t?.data?.statusMessage||t?.message||"Failed to load audience data"}finally{u.value=!1}}async function j(){const o=`${g.value}daysAgo`;try{const t=await $fetch(m(`/audience/technology?startDate=${o}&endDate=today&dimension=${i.value}`));p.value=t.rows||[]}catch{}}return e.watch(g,()=>k()),e.watch(i,()=>j()),e.onMounted(()=>{y.value?k():u.value=!1}),(o,t)=>{const n=e.resolveComponent("Button"),l=e.resolveComponent("Card"),a=e.resolveComponent("CardTitle"),c=e.resolveComponent("CardHeader"),W=e.resolveComponent("ChartContainer"),f=e.resolveComponent("CardContent");return e.openBlock(),e.createElementBlock("div",I,[e.createElementVNode("div",K,[t[0]||(t[0]=e.createElementVNode("div",null,[e.createElementVNode("h1",{class:"text-2xl font-semibold"},"Audience"),e.createElementVNode("p",{class:"text-muted-foreground text-sm mt-1"},"Who visits your site")],-1)),y.value?(e.openBlock(),e.createElementBlock("div",G,[e.createElementVNode("div",J,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(U,s=>e.createElementVNode("button",{key:s.value,class:e.normalizeClass(["px-3 py-1.5 text-xs font-medium transition-colors",g.value===s.value?"bg-primary text-primary-foreground":"text-muted-foreground hover:text-foreground hover:bg-muted"]),onClick:C=>g.value=s.value},e.toDisplayString(s.label),11,Q)),64))]),e.createVNode(n,{variant:"outline",size:"icon",onClick:k,disabled:u.value},{default:e.withCtx(()=>[e.createVNode(e.unref(r.RefreshCw),{class:e.normalizeClass(["size-4",{"animate-spin":u.value}])},null,8,["class"])]),_:1},8,["disabled"])])):e.createCommentVNode("",!0)]),y.value?h.value?(e.openBlock(),e.createBlock(l,{key:1,class:"p-6 border-destructive/50 bg-destructive/5"},{default:e.withCtx(()=>[e.createElementVNode("p",X,e.toDisplayString(h.value),1),e.createVNode(n,{variant:"outline",size:"sm",class:"mt-3",onClick:k},{default:e.withCtx(()=>[...t[2]||(t[2]=[e.createTextVNode("Retry",-1)])]),_:1})]),_:1})):u.value?(e.openBlock(),e.createElementBlock("div",Y,[e.createVNode(e.unref(r.Loader2),{class:"size-8 animate-spin text-muted-foreground"})])):(e.openBlock(),e.createElementBlock(e.Fragment,{key:3},[e.createElementVNode("div",Z,[e.createVNode(l,null,{default:e.withCtx(()=>[e.createVNode(c,{class:"pb-2"},{default:e.withCtx(()=>[e.createVNode(a,{class:"text-base"},{default:e.withCtx(()=>[...t[3]||(t[3]=[e.createTextVNode("New vs Returning",-1)])]),_:1})]),_:1}),e.createVNode(f,{class:"flex flex-col items-center"},{default:e.withCtx(()=>[e.createElementVNode("div",ee,[e.createVNode(W,{config:M,class:"mx-auto aspect-square max-h-[200px]"},{default:e.withCtx(()=>[e.createVNode(e.unref(z.b),{data:L.value,margin:{top:16,bottom:16,left:16,right:16}},{default:e.withCtx(()=>[e.createVNode(e.unref(z.E),{value:s=>s.value,color:s=>s.fill,arcWidth:35,padAngle:.03,cornerRadius:4},null,8,["value","color"])]),_:1},8,["data"])]),_:1}),e.createElementVNode("div",te,[e.createElementVNode("div",se,[e.createElementVNode("p",oe,e.toDisplayString(d(v.value)),1),t[4]||(t[4]=e.createElementVNode("p",{class:"text-xs text-muted-foreground"},"total users",-1))])])]),e.createElementVNode("div",ne,[e.createElementVNode("div",le,[e.createElementVNode("div",{class:"size-2.5 rounded-full",style:e.normalizeStyle({backgroundColor:x.new})},null,4),t[5]||(t[5]=e.createElementVNode("span",{class:"text-sm"},"New",-1)),e.createElementVNode("span",ae,e.toDisplayString(d(b.value)),1),v.value?(e.openBlock(),e.createElementBlock("span",re,e.toDisplayString(Math.round(b.value/v.value*100))+"%",1)):e.createCommentVNode("",!0)]),e.createElementVNode("div",de,[e.createElementVNode("div",{class:"size-2.5 rounded-full",style:e.normalizeStyle({backgroundColor:x.returning})},null,4),t[6]||(t[6]=e.createElementVNode("span",{class:"text-sm"},"Returning",-1)),e.createElementVNode("span",ce,e.toDisplayString(d(E.value)),1),v.value?(e.openBlock(),e.createElementBlock("span",ie,e.toDisplayString(Math.round(E.value/v.value*100))+"%",1)):e.createCommentVNode("",!0)])])]),_:1})]),_:1}),e.createVNode(l,{class:"@lg:col-span-2"},{default:e.withCtx(()=>[e.createVNode(c,{class:"pb-2"},{default:e.withCtx(()=>[e.createVNode(a,{class:"text-base"},{default:e.withCtx(()=>[...t[7]||(t[7]=[e.createTextVNode("Engagement by Visitor Type",-1)])]),_:1})]),_:1}),e.createVNode(f,null,{default:e.withCtx(()=>[e.createElementVNode("div",ue,[e.createElementVNode("table",me,[t[8]||(t[8]=e.createElementVNode("thead",null,[e.createElementVNode("tr",{class:"border-b text-left"},[e.createElementVNode("th",{class:"px-4 py-3 font-medium text-muted-foreground"},"Type"),e.createElementVNode("th",{class:"px-4 py-3 font-medium text-muted-foreground text-right"},"Users"),e.createElementVNode("th",{class:"px-4 py-3 font-medium text-muted-foreground text-right"},"Sessions"),e.createElementVNode("th",{class:"px-4 py-3 font-medium text-muted-foreground text-right"},"Engagement Rate"),e.createElementVNode("th",{class:"px-4 py-3 font-medium text-muted-foreground text-right"},"Avg Duration"),e.createElementVNode("th",{class:"px-4 py-3 font-medium text-muted-foreground text-right"},"Pages/Session")])],-1)),e.createElementVNode("tbody",xe,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(V.value,s=>(e.openBlock(),e.createElementBlock("tr",{key:s.newVsReturning,class:"hover:bg-muted/50"},[e.createElementVNode("td",fe,[e.createElementVNode("div",ge,[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(s.newVsReturning==="new"?e.unref(r.UserPlus):e.unref(r.UserCheck)),{class:"size-4 text-muted-foreground"})),e.createElementVNode("span",pe,e.toDisplayString(s.newVsReturning),1)])]),e.createElementVNode("td",ve,e.toDisplayString(d(s.totalUsers)),1),e.createElementVNode("td",he,e.toDisplayString(d(s.sessions)),1),e.createElementVNode("td",Ve,e.toDisplayString(T(s.engagementRate||0)),1),e.createElementVNode("td",_e,e.toDisplayString(F(s.averageSessionDuration||0)),1),e.createElementVNode("td",Ne,e.toDisplayString((s.screenPageViewsPerSession||0).toFixed(1)),1)]))),128))])])])]),_:1})]),_:1})]),e.createVNode(l,null,{default:e.withCtx(()=>[e.createVNode(c,{class:"pb-2"},{default:e.withCtx(()=>[e.createVNode(a,{class:"text-base flex items-center gap-2"},{default:e.withCtx(()=>[e.createVNode(e.unref(r.Clock),{class:"size-4"}),t[9]||(t[9]=e.createTextVNode(" Peak Hours ",-1))]),_:1}),t[10]||(t[10]=e.createElementVNode("p",{class:"text-xs text-muted-foreground mt-1"},"When your visitors are most active (based on sessions)",-1))]),_:1}),e.createVNode(f,null,{default:e.withCtx(()=>[e.createElementVNode("div",ye,[e.createElementVNode("div",be,[e.createElementVNode("div",Ee,[t[11]||(t[11]=e.createElementVNode("div",{class:"w-10 shrink-0"},null,-1)),e.createElementVNode("div",ke,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(24,s=>e.createElementVNode("div",{key:s,class:"text-[10px] text-muted-foreground text-center"},e.toDisplayString(s-1),1)),64))])]),(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(q,(s,C)=>e.createElementVNode("div",{key:s,class:"flex items-center mb-0.5"},[e.createElementVNode("div",Ce,e.toDisplayString(s),1),e.createElementVNode("div",we,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(24,w=>e.createElementVNode("div",{key:w,class:e.normalizeClass(["aspect-square rounded-sm transition-colors",P(B.value.matrix[C]?.[w-1]||0,B.value.maxVal)]),title:`${s} ${w-1}:00 — ${B.value.matrix[C]?.[w-1]||0} sessions`},null,10,Be)),64))])])),64)),t[12]||(t[12]=e.createElementVNode("div",{class:"flex items-center justify-end gap-1.5 mt-3"},[e.createElementVNode("span",{class:"text-[10px] text-muted-foreground"},"Less"),e.createElementVNode("div",{class:"size-3 rounded-sm bg-muted"}),e.createElementVNode("div",{class:"size-3 rounded-sm bg-blue-300/50 dark:bg-blue-300/30"}),e.createElementVNode("div",{class:"size-3 rounded-sm bg-blue-400/70 dark:bg-blue-400/60"}),e.createElementVNode("div",{class:"size-3 rounded-sm bg-blue-500 dark:bg-blue-400"}),e.createElementVNode("div",{class:"size-3 rounded-sm bg-blue-600 dark:bg-blue-500"}),e.createElementVNode("span",{class:"text-[10px] text-muted-foreground"},"More")],-1))])])]),_:1})]),_:1}),e.createElementVNode("div",De,[e.createVNode(l,null,{default:e.withCtx(()=>[e.createVNode(c,{class:"pb-2"},{default:e.withCtx(()=>[e.createElementVNode("div",Se,[e.createVNode(a,{class:"text-base"},{default:e.withCtx(()=>[...t[13]||(t[13]=[e.createTextVNode("Technology",-1)])]),_:1}),e.createElementVNode("div",$e,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(O,s=>e.createElementVNode("button",{key:s.key,class:e.normalizeClass(["p-1.5 rounded-md transition-colors",i.value===s.key?"bg-muted text-foreground":"text-muted-foreground hover:text-foreground"]),onClick:C=>i.value=s.key,title:s.label},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(s.icon),{class:"size-3.5"}))],10,ze)),64))])])]),_:1}),e.createVNode(f,null,{default:e.withCtx(()=>[e.createElementVNode("div",Re,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(p.value,s=>(e.openBlock(),e.createElementBlock("div",{key:s[i.value],class:"flex items-center gap-3"},[e.createElementVNode("span",Ue,e.toDisplayString(s[i.value]||"(not set)"),1),e.createElementVNode("div",Te,[e.createElementVNode("div",{class:"h-full bg-primary rounded-full transition-all",style:e.normalizeStyle({width:`${s.totalUsers/(p.value[0]?.totalUsers||1)*100}%`})},null,4)]),e.createElementVNode("span",Fe,e.toDisplayString(d(s.totalUsers)),1)]))),128)),p.value.length?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",Me,"No data"))])]),_:1})]),_:1}),e.createVNode(l,null,{default:e.withCtx(()=>[e.createVNode(c,{class:"pb-2"},{default:e.withCtx(()=>[e.createVNode(a,{class:"text-base flex items-center gap-2"},{default:e.withCtx(()=>[e.createVNode(e.unref(r.Languages),{class:"size-4"}),t[14]||(t[14]=e.createTextVNode(" Languages ",-1))]),_:1})]),_:1}),e.createVNode(f,null,{default:e.withCtx(()=>[e.createElementVNode("div",Le,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(_.value,s=>(e.openBlock(),e.createElementBlock("div",{key:s.language,class:"flex items-center gap-3"},[e.createElementVNode("span",Ae,e.toDisplayString(s.language),1),e.createElementVNode("div",qe,[e.createElementVNode("div",{class:"h-full bg-primary rounded-full transition-all",style:e.normalizeStyle({width:`${s.totalUsers/(_.value[0]?.totalUsers||1)*100}%`})},null,4)]),e.createElementVNode("span",Pe,e.toDisplayString(d(s.totalUsers)),1)]))),128)),_.value.length?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",Oe,"No data"))])]),_:1})]),_:1}),e.createVNode(l,null,{default:e.withCtx(()=>[e.createVNode(c,{class:"pb-2"},{default:e.withCtx(()=>[e.createVNode(a,{class:"text-base flex items-center gap-2"},{default:e.withCtx(()=>[e.createVNode(e.unref(r.MapPin),{class:"size-4"}),t[15]||(t[15]=e.createTextVNode(" Top Cities ",-1))]),_:1})]),_:1}),e.createVNode(f,null,{default:e.withCtx(()=>[e.createElementVNode("div",je,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(N.value,s=>(e.openBlock(),e.createElementBlock("div",{key:`${s.city}-${s.country}`,class:"flex items-center gap-3"},[e.createElementVNode("div",We,[e.createElementVNode("span",He,e.toDisplayString(s.city),1),e.createElementVNode("span",Ie,e.toDisplayString(s.country),1)]),e.createElementVNode("div",Ke,[e.createElementVNode("div",{class:"h-full bg-primary rounded-full transition-all",style:e.normalizeStyle({width:`${s.totalUsers/(N.value[0]?.totalUsers||1)*100}%`})},null,4)]),e.createElementVNode("span",Ge,e.toDisplayString(d(s.totalUsers)),1)]))),128)),N.value.length?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",Je,"No data"))])]),_:1})]),_:1})])],64)):(e.openBlock(),e.createBlock(l,{key:0,class:"p-8 text-center"},{default:e.withCtx(()=>[...t[1]||(t[1]=[e.createElementVNode("p",{class:"text-lg font-medium"},"Setup required",-1)])]),_:1}))])}}}),Xe=H._export_sfc(Qe,[["__scopeId","data-v-4f3ae270"]]);exports.default=Xe;