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

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 (117) hide show
  1. package/dist/Acquisition-Br1Pfny3.js +1 -0
  2. package/dist/{Acquisition-BJXNY4ko.mjs → Acquisition-CPlZzUBo.mjs} +40 -40
  3. package/dist/AgendaOpeningHoursCard-B7ROIPWw.js +1 -0
  4. package/dist/AgendaOpeningHoursCard-Cp4wxUeK.mjs +172 -0
  5. package/dist/AppointmentListTable-DZJNmTMb.mjs +177 -0
  6. package/dist/AppointmentListTable-Dieu9US_.js +1 -0
  7. package/dist/Audience-BfkrmBuQ.js +1 -0
  8. package/dist/{Audience-CIzVtUvV.mjs → Audience-DTblSAiL.mjs} +89 -89
  9. package/dist/Content-BHr_rPVY.js +1 -0
  10. package/dist/{Content-CWhjurn_.mjs → Content-CYOZKvWK.mjs} +56 -56
  11. package/dist/{ContentEditor-Cjqgb64R.mjs → ContentEditor-B1nfKG_5.mjs} +706 -677
  12. package/dist/{ContentEditor-YgOS3kxS.js → ContentEditor-DdFU8piH.js} +15 -16
  13. package/dist/{Create-6uT9HWar.mjs → Create-BRBh0xjM.mjs} +2 -2
  14. package/dist/{Create-DuZ5nZrX.js → Create-qPeQxkdl.js} +1 -1
  15. package/dist/{DateFormatter-2B0R-DY4.mjs → DateFormatter-Bw-87W31.mjs} +212 -227
  16. package/dist/DateFormatter-CYAD4GBN.js +1 -0
  17. package/dist/{Detail-BZ-iE9vf.js → Detail-C857g62L.js} +1 -1
  18. package/dist/{Detail-CJVMJDP7.mjs → Detail-CujdFApD.mjs} +2 -2
  19. package/dist/EditLayout.vue_vue_type_script_setup_true_lang-DWMqQvHl.mjs +76 -0
  20. package/dist/EditLayout.vue_vue_type_script_setup_true_lang-kpjbVSXg.js +1 -0
  21. package/dist/{Entries-DkRhOt95.js → Entries-BaS6H6ak.js} +1 -1
  22. package/dist/{Entries-dLlCrXXe.mjs → Entries-C8UJkrVC.mjs} +1 -1
  23. package/dist/{Find-Bd1uLqSa.mjs → Find-B24ZEhYM.mjs} +1 -1
  24. package/dist/{NewReservationDialog.vue_vue_type_script_setup_true_lang-Bc946oSc.mjs → NewReservationDialog.vue_vue_type_script_setup_true_lang-9Q7TMm4u.mjs} +37 -37
  25. package/dist/{NewReservationDialog.vue_vue_type_script_setup_true_lang-CqERfyYb.js → NewReservationDialog.vue_vue_type_script_setup_true_lang-DiNzGl-q.js} +1 -1
  26. package/dist/{Overview-DoOASlNz.mjs → Overview-3HWhsqaz.mjs} +2 -2
  27. package/dist/Overview-BrCwozey.js +1 -0
  28. package/dist/{Overview-37nilXzE.js → Overview-CpHhuiaV.js} +1 -1
  29. package/dist/{Overview-DeQQ0FY3.js → Overview-DAxCu9XC.js} +1 -1
  30. package/dist/{Overview-C--dq51X.mjs → Overview-D_T3K6aq.mjs} +1 -1
  31. package/dist/{Overview-CGo4jaaA.mjs → Overview-kaMhsIUq.mjs} +21 -21
  32. package/dist/ReservationDetailDialog.vue_vue_type_script_setup_true_lang-Cz_22Oce.mjs +2927 -0
  33. package/dist/ReservationDetailDialog.vue_vue_type_script_setup_true_lang-DPPNc-Z5.js +349 -0
  34. package/dist/SeoHealth-09sEOu3G.js +1 -0
  35. package/dist/{SeoHealth-DVFDz3em.mjs → SeoHealth-BzcWd_w7.mjs} +29 -29
  36. package/dist/TableView-CPAw3h8g.js +4 -0
  37. package/dist/TableView-DXmEF6pY.mjs +6143 -0
  38. package/dist/agenda-BNG05SAq.js +1 -0
  39. package/dist/agenda-D1RxMxBS.mjs +1152 -0
  40. package/dist/availability-CMrRa5y2.mjs +269 -0
  41. package/dist/availability-Cf2YfMwM.js +1 -0
  42. package/dist/booking-data-DgJd0BcM.mjs +889 -0
  43. package/dist/booking-data-Di5GmH_8.js +1 -0
  44. package/dist/cms-core-modules.css +1 -1
  45. package/dist/{exceptions-Bp5BSvxO.js → exceptions-CI0B4xVj.js} +1 -1
  46. package/dist/{exceptions-C97cNZYl.mjs → exceptions-vo8SA5SE.mjs} +68 -68
  47. package/dist/index-BtujSJeg.js +35 -0
  48. package/dist/{index-CrGjxSwa.mjs → index-CrgzoTyR.mjs} +1 -1
  49. package/dist/{index-D2a6wEPh.js → index-DPd3waTN.js} +1 -1
  50. package/dist/{index-CABh6Qn6.mjs → index-DrXxXB2F.mjs} +15 -15
  51. package/dist/{index-B-lVEpFX.mjs → index-MYWjg0zi.mjs} +3 -3
  52. package/dist/index-dOdMm1pV.mjs +1105 -0
  53. package/dist/index.cjs.js +1 -1
  54. package/dist/index.mjs +201 -148
  55. package/dist/interpolation-DEDSLETn.mjs +128 -0
  56. package/dist/interpolation-DERg6Lwt.js +1 -0
  57. package/dist/orders-CzzcFQha.mjs +559 -0
  58. package/dist/orders-ETtbA4aQ.js +1 -0
  59. package/dist/{payment-Bosr0m3u.mjs → payment-C3ohkehF.mjs} +1 -1
  60. package/dist/{payment-DDnC03jb.js → payment-Dfr-Ro-a.js} +1 -1
  61. package/dist/{resources-BtF5RUUq.js → resources-CxeFd57z.js} +1 -1
  62. package/dist/{resources-B7qDBC91.mjs → resources-WI_4SO6T.mjs} +2 -2
  63. package/dist/server-handlers.cjs.js +1 -1
  64. package/dist/server-handlers.mjs +457 -387
  65. package/dist/src/appointments/chat-components/AgendaOpeningHoursCard.vue.d.ts +15 -0
  66. package/dist/src/appointments/components/edit/CustomerInformationFieldEditorDialog.vue.d.ts +17 -5
  67. package/dist/src/appointments/components/edit/EventDialog/BookingsList.vue.d.ts +8 -3
  68. package/dist/src/appointments/components/edit/EventDialog/EventDialog.vue.d.ts +1 -0
  69. package/dist/src/appointments/components/edit/EventDialog/ReservationDetailDialog.vue.d.ts +6 -3
  70. package/dist/src/appointments/components/edit/EventTimeline.vue.d.ts +3 -0
  71. package/dist/src/appointments/components/edit/EventView.vue.d.ts +6 -1
  72. package/dist/src/appointments/components/edit/MetadataSchemaEditorDialog.vue.d.ts +12 -0
  73. package/dist/src/appointments/components/edit/OrderMetadataDisplay.vue.d.ts +21 -0
  74. package/dist/src/appointments/components/edit/dashboard/BookingsList.vue.d.ts +8 -3
  75. package/dist/src/appointments/index.d.ts +53 -0
  76. package/dist/src/appointments/pages/edit/agenda.vue.d.ts +3 -1
  77. package/dist/src/appointments/pages/edit/availability.vue.d.ts +1 -26
  78. package/dist/src/appointments/pages/edit/booking-data.vue.d.ts +65 -0
  79. package/dist/src/appointments/pages/edit/orders.vue.d.ts +7 -3
  80. package/dist/src/appointments/tools.d.ts +52 -0
  81. package/dist/src/appointments/types.d.ts +12 -0
  82. package/dist/src/table/config.d.ts +200 -0
  83. package/dist/src/table/get_data_flow-DEFAULT.json.d.ts +129 -0
  84. package/dist/src/table/index.d.ts +200 -0
  85. package/dist/utils-CanmrIWO.mjs +47 -0
  86. package/dist/utils-Yd6F5mea.js +3 -0
  87. package/package.json +2 -2
  88. package/src/appointments/tools.ts +38 -0
  89. package/dist/Acquisition-DPScJD4t.js +0 -1
  90. package/dist/AppointmentListTable-CQ0WIXtj.js +0 -1
  91. package/dist/AppointmentListTable-aV_UJd6j.mjs +0 -159
  92. package/dist/Audience-Csw1QLmw.js +0 -1
  93. package/dist/Content-dYr7kYT0.js +0 -1
  94. package/dist/DateFormatter-DbtOLV0L.js +0 -1
  95. package/dist/EditLayout.vue_vue_type_script_setup_true_lang-DXa-Xxue.mjs +0 -74
  96. package/dist/EditLayout.vue_vue_type_script_setup_true_lang-ozYrxb2g.js +0 -1
  97. package/dist/Overview-DBu86Ikb.js +0 -1
  98. package/dist/ReservationDetailDialog.vue_vue_type_script_setup_true_lang-COfCOMsz.js +0 -349
  99. package/dist/ReservationDetailDialog.vue_vue_type_script_setup_true_lang-CYXkhhdp.mjs +0 -2383
  100. package/dist/SeoHealth-DzftZW1m.js +0 -1
  101. package/dist/TableView-CIJs118q.mjs +0 -5929
  102. package/dist/TableView-DzZYf34i.js +0 -4
  103. package/dist/agenda-DMT75Qfo.mjs +0 -1133
  104. package/dist/agenda-DxD4RMsy.js +0 -1
  105. package/dist/availability-B1D4Fyzi.mjs +0 -629
  106. package/dist/availability-DxrUcYbW.js +0 -1
  107. package/dist/index-BbqRTXuU.js +0 -35
  108. package/dist/index-D4GsbUId.mjs +0 -1091
  109. package/dist/interpolation-BBwG_ON6.mjs +0 -65
  110. package/dist/interpolation-CsOrww73.js +0 -1
  111. package/dist/orders-BRfXlWgV.mjs +0 -397
  112. package/dist/orders-CrCz1WTR.js +0 -1
  113. package/dist/regular-slots-Cc1jmKuC.mjs +0 -222
  114. package/dist/regular-slots-DBs1XVeN.js +0 -1
  115. package/dist/src/appointments/pages/edit/regular-slots.vue.d.ts +0 -2
  116. package/dist/utils-BVKy9S2J.mjs +0 -29
  117. package/dist/utils-D6CaKJbp.js +0 -2
@@ -1 +0,0 @@
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:"flex flex-col gap-6 w-full max-w-7xl mx-auto py-8"},L={class:"flex items-center justify-between"},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:"grid @lg: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"},re={class:"px-4 py-3 text-right tabular-nums"},le={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,r)=>{const l=(o.sessionDefaultChannelGroup||"other").toLowerCase().replace(/[^a-z0-9]/g,"_");s[l]={label:o.sessionDefaultChannelGroup||"Other",color:c[r%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),r=Math.round(s%60);return o>0?`${o}m ${r}s`:`${r}s`}async function _(){if(!f.value)return;u.value=!0,p.value=null;const s=`${x.value}daysAgo`;try{const[o,r,l,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=r.rows||[],N.value=l.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 r=e.resolveComponent("Button"),l=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(r,{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(l,{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(r,{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(l,{class:"@lg: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(l,{class:"@lg: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",re,e.toDisplayString(R(t.averageSessionDuration||0)),1)]))),128))])])]),i.value.length?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",le,"No channel data available"))]),_:1})]),_:1})]),e.createVNode(l,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(l,{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 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),c=require("lucide-vue-next"),E={class:"w-full"},V={key:0,class:"flex items-center gap-2 py-3"},w={key:1,class:"text-xs text-destructive py-2"},S={key:2,class:"rounded-xl border bg-background p-4 text-center"},D={key:3,class:"rounded-xl border bg-background overflow-hidden"},I={class:"overflow-x-auto"},B={class:"w-full text-xs"},T={class:"px-3 py-2"},C={class:"font-medium truncate max-w-[160px]"},L={class:"text-muted-foreground truncate max-w-[160px]"},$={class:"px-3 py-2 whitespace-nowrap"},A={class:"px-3 py-2 whitespace-nowrap"},j={class:"px-3 py-2 text-center"},P={class:"px-3 py-2"},q={class:"px-3 py-2 text-right font-medium whitespace-nowrap"},z={class:"px-3 py-2 border-t bg-muted/20 flex items-center justify-between"},M={class:"text-xs text-muted-foreground"},F=e.defineComponent({__name:"AppointmentListTable",props:{toolName:{},instanceId:{},instanceName:{},moduleType:{},resolvedArgs:{},status:{}},emits:["submit"],setup(i,{emit:m}){const{$useRoute:p,$useModuleApi:x}=useNuxtApp(),d=i,f=m,g=p(),y=e.computed(()=>g.params.slug),b=x(d.instanceId),l=e.ref(!0),a=e.ref(null),s=e.ref([]);async function N(){const t=d.resolvedArgs?.quantity||20;l.value=!0,a.value=null;try{const o=await b.get(`/appointments?quantity=${t}`);s.value=o.appointments||[],u({count:s.value.length,appointments:s.value.map(r=>({orderId:r.orderId,reservationId:r.reservationId,customerName:`${r.customerInfo?.firstName||""} ${r.customerInfo?.lastName||""}`.trim(),email:r.customerInfo?.email,date:r.date,startTime:r.startTime,endTime:r.endTime,spots:r.spots,status:r.reservationStatus||r.status,price:r.reservationPrice}))})}catch(o){a.value=o?.data?.statusMessage||o?.message||"Failed to load appointments",u(`Error loading appointments: ${a.value}`)}finally{l.value=!1}}e.onMounted(()=>{N()});function u(t){d.status!=="completed"&&f("submit",t)}const v=t=>{switch(t){case"approved":return"text-emerald-600 dark:text-emerald-400 bg-emerald-50 dark:bg-emerald-900/20";case"needs_approval":return"text-blue-600 dark:text-blue-400 bg-blue-50 dark:bg-blue-900/20";case"rejected":case"cancelled":return"text-red-600 dark:text-red-400 bg-red-50 dark:bg-red-900/20";default:return"text-amber-600 dark:text-amber-400 bg-amber-50 dark:bg-amber-900/20"}},h=t=>{switch(t){case"approved":return"Approved";case"needs_approval":return"Needs Approval";case"rejected":return"Rejected";case"cancelled":return"Cancelled";case"confirmed":return"Confirmed";default:return t||"Pending"}},_=t=>t==null?"—":`€${t.toFixed(2)}`,k=t=>{if(!t)return"—";try{return new Date(t).toLocaleDateString("en-US",{weekday:"short",month:"short",day:"numeric"})}catch{return t}};return(t,o)=>{const r=e.resolveComponent("NuxtLink");return e.openBlock(),e.createElementBlock("div",E,[e.unref(l)?(e.openBlock(),e.createElementBlock("div",V,[e.createVNode(e.unref(c.Loader2),{class:"size-4 animate-spin text-muted-foreground"}),o[0]||(o[0]=e.createElementVNode("span",{class:"text-xs text-muted-foreground"},"Loading appointments…",-1))])):e.unref(a)?(e.openBlock(),e.createElementBlock("div",w,e.toDisplayString(e.unref(a)),1)):e.unref(s).length===0?(e.openBlock(),e.createElementBlock("div",S,[e.createVNode(e.unref(c.CalendarDays),{class:"size-8 text-muted-foreground mx-auto mb-2"}),o[1]||(o[1]=e.createElementVNode("p",{class:"text-sm text-muted-foreground"},"No recent appointments found.",-1))])):(e.openBlock(),e.createElementBlock("div",D,[e.createElementVNode("div",I,[e.createElementVNode("table",B,[o[2]||(o[2]=e.createElementVNode("thead",null,[e.createElementVNode("tr",{class:"border-b bg-muted/40"},[e.createElementVNode("th",{class:"text-left px-3 py-2 font-medium text-muted-foreground"},"Customer"),e.createElementVNode("th",{class:"text-left px-3 py-2 font-medium text-muted-foreground"},"Date"),e.createElementVNode("th",{class:"text-left px-3 py-2 font-medium text-muted-foreground"},"Time"),e.createElementVNode("th",{class:"text-center px-3 py-2 font-medium text-muted-foreground"},"Spots"),e.createElementVNode("th",{class:"text-left px-3 py-2 font-medium text-muted-foreground"},"Status"),e.createElementVNode("th",{class:"text-right px-3 py-2 font-medium text-muted-foreground"},"Price")])],-1)),e.createElementVNode("tbody",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(s),n=>(e.openBlock(),e.createElementBlock("tr",{key:n.reservationId||n.orderId,class:"border-b last:border-b-0 hover:bg-muted/30 transition-colors"},[e.createElementVNode("td",T,[e.createElementVNode("div",C,e.toDisplayString(n.customerInfo?.firstName)+" "+e.toDisplayString(n.customerInfo?.lastName),1),e.createElementVNode("div",L,e.toDisplayString(n.customerInfo?.email),1)]),e.createElementVNode("td",$,e.toDisplayString(k(n.date)),1),e.createElementVNode("td",A,e.toDisplayString(n.startTime)+" – "+e.toDisplayString(n.endTime),1),e.createElementVNode("td",j,e.toDisplayString(n.spots||1),1),e.createElementVNode("td",P,[e.createElementVNode("span",{class:e.normalizeClass(["inline-block text-[10px] font-medium px-1.5 py-0.5 rounded-full uppercase whitespace-nowrap",v(n.reservationStatus||n.status)])},e.toDisplayString(h(n.reservationStatus||n.status)),3)]),e.createElementVNode("td",q,e.toDisplayString(_(n.reservationPrice)),1)]))),128))])])]),e.createElementVNode("div",z,[e.createElementVNode("span",M,e.toDisplayString(e.unref(s).length)+" appointment"+e.toDisplayString(e.unref(s).length===1?"":"s"),1),e.createVNode(r,{to:`/projects/${e.unref(y)}/modules/${i.instanceId}`,class:"inline-flex items-center gap-1.5 text-xs text-primary hover:underline"},{default:e.withCtx(()=>[e.createVNode(e.unref(c.ExternalLink),{class:"size-3"}),o[3]||(o[3]=e.createTextVNode(" View all ",-1))]),_:1},8,["to"])])]))])}}});exports.default=F;
@@ -1,159 +0,0 @@
1
- import { defineComponent as $, computed as A, ref as x, onMounted as S, resolveComponent as j, openBlock as i, createElementBlock as u, unref as a, createVNode as c, createElementVNode as e, toDisplayString as n, Fragment as D, renderList as P, normalizeClass as z, withCtx as E, createTextVNode as V } from "vue";
2
- import { Loader2 as q, CalendarDays as F, ExternalLink as M } from "lucide-vue-next";
3
- const B = { class: "w-full" }, R = {
4
- key: 0,
5
- class: "flex items-center gap-2 py-3"
6
- }, U = {
7
- key: 1,
8
- class: "text-xs text-destructive py-2"
9
- }, G = {
10
- key: 2,
11
- class: "rounded-xl border bg-background p-4 text-center"
12
- }, H = {
13
- key: 3,
14
- class: "rounded-xl border bg-background overflow-hidden"
15
- }, J = { class: "overflow-x-auto" }, K = { class: "w-full text-xs" }, O = { class: "px-3 py-2" }, Q = { class: "font-medium truncate max-w-[160px]" }, W = { class: "text-muted-foreground truncate max-w-[160px]" }, X = { class: "px-3 py-2 whitespace-nowrap" }, Y = { class: "px-3 py-2 whitespace-nowrap" }, Z = { class: "px-3 py-2 text-center" }, ee = { class: "px-3 py-2" }, te = { class: "px-3 py-2 text-right font-medium whitespace-nowrap" }, se = { class: "px-3 py-2 border-t bg-muted/20 flex items-center justify-between" }, oe = { class: "text-xs text-muted-foreground" }, ae = /* @__PURE__ */ $({
16
- __name: "AppointmentListTable",
17
- props: {
18
- toolName: {},
19
- instanceId: {},
20
- instanceName: {},
21
- moduleType: {},
22
- resolvedArgs: {},
23
- status: {}
24
- },
25
- emits: ["submit"],
26
- setup(f, { emit: b }) {
27
- const { $useRoute: h, $useModuleApi: v } = useNuxtApp(), m = f, y = b, _ = h(), k = A(() => _.params.slug), w = v(m.instanceId), p = x(!0), l = x(null), d = x([]);
28
- async function I() {
29
- const t = m.resolvedArgs?.quantity || 20;
30
- p.value = !0, l.value = null;
31
- try {
32
- const s = await w.get(`/appointments?quantity=${t}`);
33
- d.value = s.appointments || [], g({
34
- count: d.value.length,
35
- appointments: d.value.map((o) => ({
36
- orderId: o.orderId,
37
- reservationId: o.reservationId,
38
- customerName: `${o.customerInfo?.firstName || ""} ${o.customerInfo?.lastName || ""}`.trim(),
39
- email: o.customerInfo?.email,
40
- date: o.date,
41
- startTime: o.startTime,
42
- endTime: o.endTime,
43
- spots: o.spots,
44
- status: o.reservationStatus || o.status,
45
- price: o.reservationPrice
46
- }))
47
- });
48
- } catch (s) {
49
- l.value = s?.data?.statusMessage || s?.message || "Failed to load appointments", g(`Error loading appointments: ${l.value}`);
50
- } finally {
51
- p.value = !1;
52
- }
53
- }
54
- S(() => {
55
- I();
56
- });
57
- function g(t) {
58
- m.status !== "completed" && y("submit", t);
59
- }
60
- const N = (t) => {
61
- switch (t) {
62
- case "approved":
63
- return "text-emerald-600 dark:text-emerald-400 bg-emerald-50 dark:bg-emerald-900/20";
64
- case "needs_approval":
65
- return "text-blue-600 dark:text-blue-400 bg-blue-50 dark:bg-blue-900/20";
66
- case "rejected":
67
- case "cancelled":
68
- return "text-red-600 dark:text-red-400 bg-red-50 dark:bg-red-900/20";
69
- default:
70
- return "text-amber-600 dark:text-amber-400 bg-amber-50 dark:bg-amber-900/20";
71
- }
72
- }, T = (t) => {
73
- switch (t) {
74
- case "approved":
75
- return "Approved";
76
- case "needs_approval":
77
- return "Needs Approval";
78
- case "rejected":
79
- return "Rejected";
80
- case "cancelled":
81
- return "Cancelled";
82
- case "confirmed":
83
- return "Confirmed";
84
- default:
85
- return t || "Pending";
86
- }
87
- }, C = (t) => t == null ? "—" : `€${t.toFixed(2)}`, L = (t) => {
88
- if (!t) return "—";
89
- try {
90
- return new Date(t).toLocaleDateString("en-US", { weekday: "short", month: "short", day: "numeric" });
91
- } catch {
92
- return t;
93
- }
94
- };
95
- return (t, s) => {
96
- const o = j("NuxtLink");
97
- return i(), u("div", B, [
98
- a(p) ? (i(), u("div", R, [
99
- c(a(q), { class: "size-4 animate-spin text-muted-foreground" }),
100
- s[0] || (s[0] = e("span", { class: "text-xs text-muted-foreground" }, "Loading appointments…", -1))
101
- ])) : a(l) ? (i(), u("div", U, n(a(l)), 1)) : a(d).length === 0 ? (i(), u("div", G, [
102
- c(a(F), { class: "size-8 text-muted-foreground mx-auto mb-2" }),
103
- s[1] || (s[1] = e("p", { class: "text-sm text-muted-foreground" }, "No recent appointments found.", -1))
104
- ])) : (i(), u("div", H, [
105
- e("div", J, [
106
- e("table", K, [
107
- s[2] || (s[2] = e("thead", null, [
108
- e("tr", { class: "border-b bg-muted/40" }, [
109
- e("th", { class: "text-left px-3 py-2 font-medium text-muted-foreground" }, "Customer"),
110
- e("th", { class: "text-left px-3 py-2 font-medium text-muted-foreground" }, "Date"),
111
- e("th", { class: "text-left px-3 py-2 font-medium text-muted-foreground" }, "Time"),
112
- e("th", { class: "text-center px-3 py-2 font-medium text-muted-foreground" }, "Spots"),
113
- e("th", { class: "text-left px-3 py-2 font-medium text-muted-foreground" }, "Status"),
114
- e("th", { class: "text-right px-3 py-2 font-medium text-muted-foreground" }, "Price")
115
- ])
116
- ], -1)),
117
- e("tbody", null, [
118
- (i(!0), u(D, null, P(a(d), (r) => (i(), u("tr", {
119
- key: r.reservationId || r.orderId,
120
- class: "border-b last:border-b-0 hover:bg-muted/30 transition-colors"
121
- }, [
122
- e("td", O, [
123
- e("div", Q, n(r.customerInfo?.firstName) + " " + n(r.customerInfo?.lastName), 1),
124
- e("div", W, n(r.customerInfo?.email), 1)
125
- ]),
126
- e("td", X, n(L(r.date)), 1),
127
- e("td", Y, n(r.startTime) + " – " + n(r.endTime), 1),
128
- e("td", Z, n(r.spots || 1), 1),
129
- e("td", ee, [
130
- e("span", {
131
- class: z(["inline-block text-[10px] font-medium px-1.5 py-0.5 rounded-full uppercase whitespace-nowrap", N(r.reservationStatus || r.status)])
132
- }, n(T(r.reservationStatus || r.status)), 3)
133
- ]),
134
- e("td", te, n(C(r.reservationPrice)), 1)
135
- ]))), 128))
136
- ])
137
- ])
138
- ]),
139
- e("div", se, [
140
- e("span", oe, n(a(d).length) + " appointment" + n(a(d).length === 1 ? "" : "s"), 1),
141
- c(o, {
142
- to: `/projects/${a(k)}/modules/${f.instanceId}`,
143
- class: "inline-flex items-center gap-1.5 text-xs text-primary hover:underline"
144
- }, {
145
- default: E(() => [
146
- c(a(M), { class: "size-3" }),
147
- s[3] || (s[3] = V(" View all ", -1))
148
- ]),
149
- _: 1
150
- }, 8, ["to"])
151
- ])
152
- ]))
153
- ]);
154
- };
155
- }
156
- });
157
- export {
158
- ae as default
159
- };
@@ -1 +0,0 @@
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 items-center justify-between"},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:"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-4c7905b1"]]);exports.default=Xe;
@@ -1 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),E=require("@oneclick.dev/cms-kit"),i=require("lucide-vue-next"),$={class:"flex flex-col gap-6 w-full max-w-7xl mx-auto py-8"},z={class:"flex items-center justify-between"},T={key:0,class:"flex items-center gap-2"},L={class:"flex items-center border rounded-lg overflow-hidden"},M=["onClick"],F={class:"text-sm text-destructive font-medium"},j={key:2,class:"flex items-center justify-center py-20"},A={class:"flex items-center justify-between gap-4"},U={class:"flex items-center gap-2"},q=["onClick"],H={key:0,class:"relative"},I={class:"overflow-x-auto"},O={class:"w-full text-sm"},Q={class:"divide-y"},K={class:"px-6 py-3 text-muted-foreground"},W={class:"px-4 py-3 max-w-[300px]"},G={class:"truncate font-mono text-xs"},J={key:0,class:"truncate text-xs text-muted-foreground mt-0.5"},X={class:"px-4 py-3 text-right tabular-nums"},Y={class:"px-4 py-3 text-right tabular-nums"},Z={class:"px-4 py-3 text-right tabular-nums"},ee={class:"px-4 py-3 text-right tabular-nums"},te={class:"px-4 py-3 text-right tabular-nums"},oe={class:"px-4 py-3 text-right"},ne={class:"flex items-center justify-end gap-2"},ae={class:"w-12 h-1.5 bg-muted rounded-full overflow-hidden"},re={key:0,class:"px-6 py-8 text-center text-muted-foreground text-sm"},se={class:"overflow-x-auto"},le={class:"w-full text-sm"},de={class:"divide-y"},ce={class:"px-6 py-3 text-muted-foreground"},ie={class:"px-4 py-3 font-mono text-xs truncate max-w-[300px]"},ue={class:"px-4 py-3 text-right tabular-nums"},me={class:"px-4 py-3 text-right tabular-nums"},xe={class:"px-4 py-3 text-right tabular-nums"},ge={class:"px-4 py-3 text-right tabular-nums"},pe={class:"px-4 py-3 text-right tabular-nums"},fe={key:0,class:"px-6 py-8 text-center text-muted-foreground text-sm"},he={class:"overflow-x-auto"},ye={class:"w-full text-sm"},ve={class:"divide-y"},Ve={class:"px-6 py-3 text-muted-foreground"},Ne={class:"px-4 py-3 font-mono text-xs truncate max-w-[300px]"},_e={class:"px-4 py-3 text-right tabular-nums"},Ee={class:"px-4 py-3 text-right tabular-nums"},ke={class:"px-4 py-3 text-right"},be={class:"flex items-center justify-end gap-2"},Ce={class:"w-16 h-1.5 bg-muted rounded-full overflow-hidden"},we={key:0,class:"px-6 py-8 text-center text-muted-foreground text-sm"},Be=e.defineComponent({__name:"Content",setup(Se){const{config:k}=E.useModule(),{moduleId:S}=E.useModuleRoute();E.useModuleBreadcrumbs(()=>[{label:"Content"}]);const l=e.ref(!0),x=e.ref(null),g=e.ref("30"),d=e.ref("all"),u=e.ref(""),y=e.ref([]),v=e.ref([]),V=e.ref([]),p=e.computed(()=>!!(k.serviceAccount&&k.propertyId));function N(n){return`/api/v1/modules/${S}${n}`}const D=[{label:"7d",value:"7"},{label:"14d",value:"14"},{label:"30d",value:"30"},{label:"90d",value:"90"}];function c(n){return n>=1e6?`${(n/1e6).toFixed(1)}M`:n>=1e3?`${(n/1e3).toFixed(1)}K`:Math.round(n).toString()}function m(n){return`${(n*100).toFixed(1)}%`}function b(n){const o=Math.floor(n/60),a=Math.round(n%60);return o>0?`${o}m ${a}s`:`${a}s`}function f(n){const o=n.engagementRate||0,a=Math.min((n.averageSessionDuration||0)/300,1),r=Math.min((n.screenPageViews||0)/1e3,1);return(o*.4+a*.35+r*.25)*100}function P(n){return n>=70?"text-emerald-600 dark:text-emerald-400":n>=40?"text-amber-600 dark:text-amber-400":"text-red-500 dark:text-red-400"}function R(n){return n>=70?"bg-emerald-500":n>=40?"bg-amber-500":"bg-red-500"}const C=e.computed(()=>{if(!u.value)return y.value;const n=u.value.toLowerCase();return y.value.filter(o=>(o.pagePath||"").toLowerCase().includes(n)||(o.pageTitle||"").toLowerCase().includes(n))});async function h(){if(!p.value)return;l.value=!0,x.value=null;const n=`${g.value}daysAgo`;try{const[o,a,r]=await Promise.all([$fetch(N(`/content/all-pages?startDate=${n}&endDate=today&limit=50`)),$fetch(N(`/content/landing-pages?startDate=${n}&endDate=today`)),$fetch(N(`/content/exit-pages?startDate=${n}&endDate=today`))]);y.value=o.rows||[],v.value=a.rows||[],V.value=r.rows||[]}catch(o){x.value=o?.data?.statusMessage||o?.message||"Failed to load content data"}finally{l.value=!1}}return e.watch(g,()=>h()),e.onMounted(()=>{p.value?h():l.value=!1}),(n,o)=>{const a=e.resolveComponent("Button"),r=e.resolveComponent("Card"),_=e.resolveComponent("CardContent"),w=e.resolveComponent("CardTitle"),B=e.resolveComponent("CardHeader");return e.openBlock(),e.createElementBlock("div",$,[e.createElementVNode("div",z,[o[1]||(o[1]=e.createElementVNode("div",null,[e.createElementVNode("h1",{class:"text-2xl font-semibold"},"Content Performance"),e.createElementVNode("p",{class:"text-muted-foreground text-sm mt-1"},"How your pages perform")],-1)),p.value?(e.openBlock(),e.createElementBlock("div",T,[e.createElementVNode("div",L,[(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",g.value===t.value?"bg-primary text-primary-foreground":"text-muted-foreground hover:text-foreground hover:bg-muted"]),onClick:s=>g.value=t.value},e.toDisplayString(t.label),11,M)),64))]),e.createVNode(a,{variant:"outline",size:"icon",onClick:h,disabled:l.value},{default:e.withCtx(()=>[e.createVNode(e.unref(i.RefreshCw),{class:e.normalizeClass(["size-4",{"animate-spin":l.value}])},null,8,["class"])]),_:1},8,["disabled"])])):e.createCommentVNode("",!0)]),p.value?x.value?(e.openBlock(),e.createBlock(r,{key:1,class:"p-6 border-destructive/50 bg-destructive/5"},{default:e.withCtx(()=>[e.createElementVNode("p",F,e.toDisplayString(x.value),1),e.createVNode(a,{variant:"outline",size:"sm",class:"mt-3",onClick:h},{default:e.withCtx(()=>[...o[3]||(o[3]=[e.createTextVNode("Retry",-1)])]),_:1})]),_:1})):l.value?(e.openBlock(),e.createElementBlock("div",j,[e.createVNode(e.unref(i.Loader2),{class:"size-8 animate-spin text-muted-foreground"})])):(e.openBlock(),e.createElementBlock(e.Fragment,{key:3},[e.createElementVNode("div",A,[e.createElementVNode("div",U,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList([{key:"all",label:"All Pages",icon:e.unref(i.FileText)},{key:"landing",label:"Landing Pages",icon:e.unref(i.LogIn)},{key:"exit",label:"Exit Pages",icon:e.unref(i.LogOut)}],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",d.value===t.key?"bg-muted text-foreground":"text-muted-foreground hover:text-foreground"]),onClick:s=>d.value=t.key},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(t.icon),{class:"size-3.5"})),e.createTextVNode(" "+e.toDisplayString(t.label),1)],10,q))),128))]),d.value==="all"?(e.openBlock(),e.createElementBlock("div",H,[e.createVNode(e.unref(i.Search),{class:"absolute left-2.5 top-1/2 -translate-y-1/2 size-3.5 text-muted-foreground"}),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":o[0]||(o[0]=t=>u.value=t),type:"text",placeholder:"Filter pages...",class:"pl-8 pr-3 py-1.5 text-sm border rounded-md bg-transparent w-48 focus:outline-none focus:ring-1 focus:ring-ring"},null,512),[[e.vModelText,u.value]])])):e.createCommentVNode("",!0)]),d.value==="all"?(e.openBlock(),e.createBlock(r,{key:0},{default:e.withCtx(()=>[e.createVNode(_,{class:"p-0"},{default:e.withCtx(()=>[e.createElementVNode("div",I,[e.createElementVNode("table",O,[o[4]||(o[4]=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 w-8"},"#"),e.createElementVNode("th",{class:"px-4 py-3 font-medium text-muted-foreground"},"Page"),e.createElementVNode("th",{class:"px-4 py-3 font-medium text-muted-foreground text-right"},"Views"),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"},"Avg Time"),e.createElementVNode("th",{class:"px-4 py-3 font-medium text-muted-foreground text-right"},"Bounce"),e.createElementVNode("th",{class:"px-4 py-3 font-medium text-muted-foreground text-right"},"Engagement"),e.createElementVNode("th",{class:"px-4 py-3 font-medium text-muted-foreground text-right"},"Score")])],-1)),e.createElementVNode("tbody",Q,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(C.value,(t,s)=>(e.openBlock(),e.createElementBlock("tr",{key:t.pagePath,class:"hover:bg-muted/50 group"},[e.createElementVNode("td",K,e.toDisplayString(s+1),1),e.createElementVNode("td",W,[e.createElementVNode("div",G,e.toDisplayString(t.pagePath),1),t.pageTitle?(e.openBlock(),e.createElementBlock("div",J,e.toDisplayString(t.pageTitle),1)):e.createCommentVNode("",!0)]),e.createElementVNode("td",X,e.toDisplayString(c(t.screenPageViews)),1),e.createElementVNode("td",Y,e.toDisplayString(c(t.totalUsers)),1),e.createElementVNode("td",Z,e.toDisplayString(b(t.averageSessionDuration||0)),1),e.createElementVNode("td",ee,e.toDisplayString(m(t.bounceRate||0)),1),e.createElementVNode("td",te,e.toDisplayString(m(t.engagementRate||0)),1),e.createElementVNode("td",oe,[e.createElementVNode("div",ne,[e.createElementVNode("div",ae,[e.createElementVNode("div",{class:e.normalizeClass(["h-full rounded-full transition-all",R(f(t))]),style:e.normalizeStyle({width:`${Math.min(f(t),100)}%`})},null,6)]),e.createElementVNode("span",{class:e.normalizeClass(["text-xs font-medium tabular-nums w-8 text-right",P(f(t))])},e.toDisplayString(Math.round(f(t))),3)])])]))),128))])])]),C.value.length?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",re,e.toDisplayString(u.value?"No pages matching your search":"No page data available"),1))]),_:1})]),_:1})):e.createCommentVNode("",!0),d.value==="landing"?(e.openBlock(),e.createBlock(r,{key:1},{default:e.withCtx(()=>[e.createVNode(B,{class:"pb-2"},{default:e.withCtx(()=>[e.createVNode(w,{class:"text-base"},{default:e.withCtx(()=>[...o[5]||(o[5]=[e.createTextVNode("Top Landing Pages",-1)])]),_:1}),o[6]||(o[6]=e.createElementVNode("p",{class:"text-xs text-muted-foreground mt-1"},"Where users first enter your site. Low bounce + high engagement = great landing page.",-1))]),_:1}),e.createVNode(_,{class:"p-0"},{default:e.withCtx(()=>[e.createElementVNode("div",se,[e.createElementVNode("table",le,[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 w-8"},"#"),e.createElementVNode("th",{class:"px-4 py-3 font-medium text-muted-foreground"},"Landing Page"),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"},"Bounce"),e.createElementVNode("th",{class:"px-4 py-3 font-medium text-muted-foreground text-right"},"Avg Time"),e.createElementVNode("th",{class:"px-4 py-3 font-medium text-muted-foreground text-right"},"Engagement")])],-1)),e.createElementVNode("tbody",de,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(v.value,(t,s)=>(e.openBlock(),e.createElementBlock("tr",{key:t.landingPagePlusQueryString,class:"hover:bg-muted/50"},[e.createElementVNode("td",ce,e.toDisplayString(s+1),1),e.createElementVNode("td",ie,e.toDisplayString(t.landingPagePlusQueryString),1),e.createElementVNode("td",ue,e.toDisplayString(c(t.sessions)),1),e.createElementVNode("td",me,e.toDisplayString(c(t.totalUsers)),1),e.createElementVNode("td",xe,[e.createElementVNode("span",{class:e.normalizeClass((t.bounceRate||0)>.6?"text-red-500":(t.bounceRate||0)<.3?"text-emerald-600 dark:text-emerald-400":"")},e.toDisplayString(m(t.bounceRate||0)),3)]),e.createElementVNode("td",ge,e.toDisplayString(b(t.averageSessionDuration||0)),1),e.createElementVNode("td",pe,[e.createElementVNode("span",{class:e.normalizeClass((t.engagementRate||0)>.6?"text-emerald-600 dark:text-emerald-400":"")},e.toDisplayString(m(t.engagementRate||0)),3)])]))),128))])])]),v.value.length?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",fe,"No landing page data"))]),_:1})]),_:1})):e.createCommentVNode("",!0),d.value==="exit"?(e.openBlock(),e.createBlock(r,{key:2},{default:e.withCtx(()=>[e.createVNode(B,{class:"pb-2"},{default:e.withCtx(()=>[e.createVNode(w,{class:"text-base"},{default:e.withCtx(()=>[...o[8]||(o[8]=[e.createTextVNode("Top Exit Pages",-1)])]),_:1}),o[9]||(o[9]=e.createElementVNode("p",{class:"text-xs text-muted-foreground mt-1"},"Where users leave your site. High exit rate might indicate issues.",-1))]),_:1}),e.createVNode(_,{class:"p-0"},{default:e.withCtx(()=>[e.createElementVNode("div",he,[e.createElementVNode("table",ye,[o[10]||(o[10]=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 w-8"},"#"),e.createElementVNode("th",{class:"px-4 py-3 font-medium text-muted-foreground"},"Page"),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"},"Page Views"),e.createElementVNode("th",{class:"px-4 py-3 font-medium text-muted-foreground text-right"},"Bounce Rate")])],-1)),e.createElementVNode("tbody",ve,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(V.value,(t,s)=>(e.openBlock(),e.createElementBlock("tr",{key:t.pagePath,class:"hover:bg-muted/50"},[e.createElementVNode("td",Ve,e.toDisplayString(s+1),1),e.createElementVNode("td",Ne,e.toDisplayString(t.pagePath),1),e.createElementVNode("td",_e,e.toDisplayString(c(t.sessions)),1),e.createElementVNode("td",Ee,e.toDisplayString(c(t.screenPageViews)),1),e.createElementVNode("td",ke,[e.createElementVNode("div",be,[e.createElementVNode("div",Ce,[e.createElementVNode("div",{class:e.normalizeClass(["h-full rounded-full transition-all",(t.exitRate||0)>.7?"bg-red-500":(t.exitRate||0)>.4?"bg-amber-500":"bg-emerald-500"]),style:e.normalizeStyle({width:`${(t.exitRate||0)*100}%`})},null,6)]),e.createElementVNode("span",{class:e.normalizeClass(["text-xs tabular-nums",(t.exitRate||0)>.7?"text-red-500":""])},e.toDisplayString(m(t.exitRate||0)),3)])])]))),128))])])]),V.value.length?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",we,"No exit page data"))]),_:1})]),_:1})):e.createCommentVNode("",!0)],64)):(e.openBlock(),e.createBlock(r,{key:0,class:"p-8 text-center"},{default:e.withCtx(()=>[...o[2]||(o[2]=[e.createElementVNode("p",{class:"text-lg font-medium"},"Setup required",-1)])]),_:1}))])}}});exports.default=Be;
@@ -1 +0,0 @@
1
- "use strict";function R(e,t){return e-t*Math.floor(e/t)}const Q=1721426;function E(e,t,r,n){t=j(e,t);let a=t-1,o=-2;return r<=2?o=0:T(t)&&(o=-1),Q-1+365*a+Math.floor(a/4)-Math.floor(a/100)+Math.floor(a/400)+Math.floor((367*r-362)/12+o+n)}function T(e){return e%4===0&&(e%100!==0||e%400===0)}function j(e,t){return e==="BC"?1-t:t}function $e(e){let t="AD";return e<=0&&(t="BC",e=1-e),[t,e]}const ye={standard:[31,28,31,30,31,30,31,31,30,31,30,31],leapyear:[31,29,31,30,31,30,31,31,30,31,30,31]};class v{fromJulianDay(t){let r=t,n=r-Q,a=Math.floor(n/146097),o=R(n,146097),c=Math.floor(o/36524),i=R(o,36524),l=Math.floor(i/1461),h=R(i,1461),M=Math.floor(h/365),w=a*400+c*100+l*4+M+(c!==4&&M!==4?1:0),[g,m]=$e(w),y=r-E(g,m,1,1),O=2;r<E(g,m,3,1)?O=0:T(m)&&(O=1);let z=Math.floor(((y+O)*12+373)/367),de=r-E(g,m,z,1)+1;return new p(g,m,z,de)}toJulianDay(t){return E(t.era,t.year,t.month,t.day)}getDaysInMonth(t){return ye[T(t.year)?"leapyear":"standard"][t.month-1]}getMonthsInYear(t){return 12}getDaysInYear(t){return T(t.year)?366:365}getMaximumMonthsInYear(){return 12}getMaximumDaysInMonth(){return 31}getYearsInEra(t){return 9999}getEras(){return["BC","AD"]}isInverseEra(t){return t.era==="BC"}balanceDate(t){t.year<=0&&(t.era=t.era==="BC"?"AD":"BC",t.year=1-t.year)}constructor(){this.identifier="gregory"}}function me(e,t){var r,n,a,o;return(o=(a=(r=e.isEqual)===null||r===void 0?void 0:r.call(e,t))!==null&&a!==void 0?a:(n=t.isEqual)===null||n===void 0?void 0:n.call(t,e))!==null&&o!==void 0?o:e.identifier===t.identifier}function be(e){return d(Date.now(),e)}function pe(e){return De(be(e))}function X(e,t){return e.calendar.toJulianDay(e)-t.calendar.toJulianDay(t)}function Me(e,t){return L(e)-L(t)}function L(e){return e.hour*36e5+e.minute*6e4+e.second*1e3+e.millisecond}let P=null,we=!1;function _(){return P==null&&(P=new Intl.DateTimeFormat().resolvedOptions().timeZone),P}function ee(){return we}function D(e){e=f(e,new v);let t=j(e.era,e.year);return te(t,e.month,e.day,e.hour,e.minute,e.second,e.millisecond)}function te(e,t,r,n,a,o,c){let i=new Date;return i.setUTCHours(n,a,o,c),i.setUTCFullYear(e,t-1,r),i.getTime()}function H(e,t){if(t==="UTC")return 0;if(e>0&&t===_()&&!ee())return new Date(e).getTimezoneOffset()*-6e4;let{year:r,month:n,day:a,hour:o,minute:c,second:i}=re(e,t);return te(r,n,a,o,c,i,0)-Math.floor(e/1e3)*1e3}const K=new Map;function re(e,t){let r=K.get(t);r||(r=new Intl.DateTimeFormat("en-US",{timeZone:t,hour12:!1,era:"short",year:"numeric",month:"numeric",day:"numeric",hour:"numeric",minute:"numeric",second:"numeric"}),K.set(t,r));let n=r.formatToParts(new Date(e)),a={};for(let o of n)o.type!=="literal"&&(a[o.type]=o.value);return{year:a.era==="BC"||a.era==="B"?-a.year+1:+a.year,month:+a.month,day:+a.day,hour:a.hour==="24"?0:+a.hour,minute:+a.minute,second:+a.second}}const G=864e5;function ge(e,t,r,n){return(r===n?[r]:[r,n]).filter(o=>ve(e,t,o))}function ve(e,t,r){let n=re(r,t);return e.year===n.year&&e.month===n.month&&e.day===n.day&&e.hour===n.hour&&e.minute===n.minute&&e.second===n.second}function u(e,t,r="compatible"){let n=x(e);if(t==="UTC")return D(n);if(t===_()&&r==="compatible"&&!ee()){n=f(n,new v);let l=new Date,h=j(n.era,n.year);return l.setFullYear(h,n.month-1,n.day),l.setHours(n.hour,n.minute,n.second,n.millisecond),l.getTime()}let a=D(n),o=H(a-G,t),c=H(a+G,t),i=ge(n,t,a-o,a-c);if(i.length===1)return i[0];if(i.length>1)switch(r){case"compatible":case"earlier":return i[0];case"later":return i[i.length-1];case"reject":throw new RangeError("Multiple possible absolute times found")}switch(r){case"earlier":return Math.min(a-o,a-c);case"compatible":case"later":return Math.max(a-o,a-c);case"reject":throw new RangeError("No such absolute time found")}}function ne(e,t,r="compatible"){return new Date(u(e,t,r))}function d(e,t){let r=H(e,t),n=new Date(e+r),a=n.getUTCFullYear(),o=n.getUTCMonth()+1,c=n.getUTCDate(),i=n.getUTCHours(),l=n.getUTCMinutes(),h=n.getUTCSeconds(),M=n.getUTCMilliseconds();return new C(a<1?"BC":"AD",a<1?-a+1:a,o,c,t,r,i,l,h,M)}function De(e){return new p(e.calendar,e.era,e.year,e.month,e.day)}function x(e,t){let r=0,n=0,a=0,o=0;if("timeZone"in e)({hour:r,minute:n,second:a,millisecond:o}=e);else if("hour"in e&&!t)return e;return t&&({hour:r,minute:n,second:a,millisecond:o}=t),new S(e.calendar,e.era,e.year,e.month,e.day,r,n,a,o)}function f(e,t){if(me(e.calendar,t))return e;let r=t.fromJulianDay(e.calendar.toJulianDay(e)),n=e.copy();return n.calendar=t,n.era=r.era,n.year=r.year,n.month=r.month,n.day=r.day,b(n),n}function xe(e,t,r){if(e instanceof C)return e.timeZone===t?e:Se(e,t);let n=u(e,t,r);return d(n,t)}function Ie(e){let t=D(e)-e.offset;return new Date(t)}function Se(e,t){let r=D(e)-e.offset;return f(d(r,t),e.calendar)}const I=36e5;function B(e,t){let r=e.copy(),n="hour"in r?Te(r,t):0;F(r,t.years||0),r.calendar.balanceYearMonth&&r.calendar.balanceYearMonth(r,e),r.month+=t.months||0,q(r),ae(r),r.day+=(t.weeks||0)*7,r.day+=t.days||0,r.day+=n,Ce(r),r.calendar.balanceDate&&r.calendar.balanceDate(r),r.year<1&&(r.year=1,r.month=1,r.day=1);let a=r.calendar.getYearsInEra(r);if(r.year>a){var o,c;let l=(o=(c=r.calendar).isInverseEra)===null||o===void 0?void 0:o.call(c,r);r.year=a,r.month=l?1:r.calendar.getMonthsInYear(r),r.day=l?1:r.calendar.getDaysInMonth(r)}r.month<1&&(r.month=1,r.day=1);let i=r.calendar.getMonthsInYear(r);return r.month>i&&(r.month=i,r.day=r.calendar.getDaysInMonth(r)),r.day=Math.max(1,Math.min(r.calendar.getDaysInMonth(r),r.day)),r}function F(e,t){var r,n;!((r=(n=e.calendar).isInverseEra)===null||r===void 0)&&r.call(n,e)&&(t=-t),e.year+=t}function q(e){for(;e.month<1;)F(e,-1),e.month+=e.calendar.getMonthsInYear(e);let t=0;for(;e.month>(t=e.calendar.getMonthsInYear(e));)e.month-=t,F(e,1)}function Ce(e){for(;e.day<1;)e.month--,q(e),e.day+=e.calendar.getDaysInMonth(e);for(;e.day>e.calendar.getDaysInMonth(e);)e.day-=e.calendar.getDaysInMonth(e),e.month++,q(e)}function ae(e){e.month=Math.max(1,Math.min(e.calendar.getMonthsInYear(e),e.month)),e.day=Math.max(1,Math.min(e.calendar.getDaysInMonth(e),e.day))}function b(e){e.calendar.constrainDate&&e.calendar.constrainDate(e),e.year=Math.max(1,Math.min(e.calendar.getYearsInEra(e),e.year)),ae(e)}function oe(e){let t={};for(let r in e)typeof e[r]=="number"&&(t[r]=-e[r]);return t}function ce(e,t){return B(e,oe(t))}function J(e,t){let r=e.copy();return t.era!=null&&(r.era=t.era),t.year!=null&&(r.year=t.year),t.month!=null&&(r.month=t.month),t.day!=null&&(r.day=t.day),b(r),r}function U(e,t){let r=e.copy();return t.hour!=null&&(r.hour=t.hour),t.minute!=null&&(r.minute=t.minute),t.second!=null&&(r.second=t.second),t.millisecond!=null&&(r.millisecond=t.millisecond),Ye(r),r}function Ee(e){e.second+=Math.floor(e.millisecond/1e3),e.millisecond=Y(e.millisecond,1e3),e.minute+=Math.floor(e.second/60),e.second=Y(e.second,60),e.hour+=Math.floor(e.minute/60),e.minute=Y(e.minute,60);let t=Math.floor(e.hour/24);return e.hour=Y(e.hour,24),t}function Ye(e){e.millisecond=Math.max(0,Math.min(e.millisecond,1e3)),e.second=Math.max(0,Math.min(e.second,59)),e.minute=Math.max(0,Math.min(e.minute,59)),e.hour=Math.max(0,Math.min(e.hour,23))}function Y(e,t){let r=e%t;return r<0&&(r+=t),r}function Te(e,t){return e.hour+=t.hours||0,e.minute+=t.minutes||0,e.second+=t.seconds||0,e.millisecond+=t.milliseconds||0,Ee(e)}function N(e,t,r,n){let a=e.copy();switch(t){case"era":{let i=e.calendar.getEras(),l=i.indexOf(e.era);if(l<0)throw new Error("Invalid era: "+e.era);l=$(l,r,0,i.length-1,n?.round),a.era=i[l],b(a);break}case"year":var o,c;!((o=(c=a.calendar).isInverseEra)===null||o===void 0)&&o.call(c,a)&&(r=-r),a.year=$(e.year,r,-1/0,9999,n?.round),a.year===-1/0&&(a.year=1),a.calendar.balanceYearMonth&&a.calendar.balanceYearMonth(a,e);break;case"month":a.month=$(e.month,r,1,e.calendar.getMonthsInYear(e),n?.round);break;case"day":a.day=$(e.day,r,1,e.calendar.getDaysInMonth(e),n?.round);break;default:throw new Error("Unsupported field "+t)}return e.calendar.balanceDate&&e.calendar.balanceDate(a),b(a),a}function ie(e,t,r,n){let a=e.copy();switch(t){case"hour":{let o=e.hour,c=0,i=23;if(n?.hourCycle===12){let l=o>=12;c=l?12:0,i=l?23:11}a.hour=$(o,r,c,i,n?.round);break}case"minute":a.minute=$(e.minute,r,0,59,n?.round);break;case"second":a.second=$(e.second,r,0,59,n?.round);break;case"millisecond":a.millisecond=$(e.millisecond,r,0,999,n?.round);break;default:throw new Error("Unsupported field "+t)}return a}function $(e,t,r,n,a=!1){if(a){e+=Math.sign(t),e<r&&(e=n);let o=Math.abs(t);t>0?e=Math.ceil(e/o)*o:e=Math.floor(e/o)*o,e>n&&(e=r)}else e+=t,e<r?e=n-(r-e-1):e>n&&(e=r+(e-n-1));return e}function le(e,t){let r;if(t.years!=null&&t.years!==0||t.months!=null&&t.months!==0||t.weeks!=null&&t.weeks!==0||t.days!=null&&t.days!==0){let a=B(x(e),{years:t.years,months:t.months,weeks:t.weeks,days:t.days});r=u(a,e.timeZone)}else r=D(e)-e.offset;r+=t.milliseconds||0,r+=(t.seconds||0)*1e3,r+=(t.minutes||0)*6e4,r+=(t.hours||0)*36e5;let n=d(r,e.timeZone);return f(n,e.calendar)}function Ue(e,t){return le(e,oe(t))}function Be(e,t,r,n){switch(t){case"hour":{let a=0,o=23;if(n?.hourCycle===12){let y=e.hour>=12;a=y?12:0,o=y?23:11}let c=x(e),i=f(U(c,{hour:a}),new v),l=[u(i,e.timeZone,"earlier"),u(i,e.timeZone,"later")].filter(y=>d(y,e.timeZone).day===i.day)[0],h=f(U(c,{hour:o}),new v),M=[u(h,e.timeZone,"earlier"),u(h,e.timeZone,"later")].filter(y=>d(y,e.timeZone).day===h.day).pop(),w=D(e)-e.offset,g=Math.floor(w/I),m=w%I;return w=$(g,r,Math.floor(l/I),Math.floor(M/I),n?.round)*I+m,f(d(w,e.timeZone),e.calendar)}case"minute":case"second":case"millisecond":return ie(e,t,r,n);case"era":case"year":case"month":case"day":{let a=N(x(e),t,r,n),o=u(a,e.timeZone);return f(d(o,e.timeZone),e.calendar)}default:throw new Error("Unsupported field "+t)}}function Oe(e,t,r){let n=x(e),a=U(J(n,t),t);if(a.compare(n)===0)return e;let o=u(a,e.timeZone,r);return f(d(o,e.timeZone),e.calendar)}const Re=/^([+-]\d{6}|\d{4})-(\d{2})-(\d{2})$/,Pe=/^([+-]\d{6}|\d{4})-(\d{2})-(\d{2})(?:T(\d{2}))?(?::(\d{2}))?(?::(\d{2}))?(\.\d+)?$/,se=/^([+-]\d{6}|\d{4})-(\d{2})-(\d{2})(?:T(\d{2}))?(?::(\d{2}))?(?::(\d{2}))?(\.\d+)?(?:(?:([+-]\d{2})(?::?(\d{2}))?)|Z)$/;function ke(e){let t=e.match(Re);if(!t)throw se.test(e)?new Error(`Invalid ISO 8601 date string: ${e}. Use parseAbsolute() instead.`):new Error("Invalid ISO 8601 date string: "+e);let r=new p(s(t[1],0,9999),s(t[2],1,12),1);return r.day=s(t[3],1,r.calendar.getDaysInMonth(r)),r}function Ae(e){let t=e.match(Pe);if(!t)throw se.test(e)?new Error(`Invalid ISO 8601 date time string: ${e}. Use parseAbsolute() instead.`):new Error("Invalid ISO 8601 date time string: "+e);let r=s(t[1],-9999,9999),n=r<1?"BC":"AD",a=new S(n,r<1?-r+1:r,s(t[2],1,12),1,t[4]?s(t[4],0,23):0,t[5]?s(t[5],0,59):0,t[6]?s(t[6],0,59):0,t[7]?s(t[7],0,1/0)*1e3:0);return a.day=s(t[3],0,a.calendar.getDaysInMonth(a)),a}function s(e,t,r){let n=Number(e);if(n<t||n>r)throw new RangeError(`Value out of range: ${t} <= ${n} <= ${r}`);return n}function Ze(e){return`${String(e.hour).padStart(2,"0")}:${String(e.minute).padStart(2,"0")}:${String(e.second).padStart(2,"0")}${e.millisecond?String(e.millisecond/1e3).slice(1):""}`}function fe(e){let t=f(e,new v),r;return t.era==="BC"?r=t.year===1?"0000":"-"+String(Math.abs(1-t.year)).padStart(6,"00"):r=String(t.year).padStart(4,"0"),`${r}-${String(t.month).padStart(2,"0")}-${String(t.day).padStart(2,"0")}`}function he(e){return`${fe(e)}T${Ze(e)}`}function He(e){let t=Math.sign(e)<0?"-":"+";e=Math.abs(e);let r=Math.floor(e/36e5),n=Math.floor(e%36e5/6e4),a=Math.floor(e%36e5%6e4/1e3),o=`${t}${String(r).padStart(2,"0")}:${String(n).padStart(2,"0")}`;return a!==0&&(o+=`:${String(a).padStart(2,"0")}`),o}function Fe(e){return`${he(e)}${He(e.offset)}[${e.timeZone}]`}function qe(e,t){if(t.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")}function V(e,t,r){qe(e,t),t.set(e,r)}function W(e){let t=typeof e[0]=="object"?e.shift():new v,r;if(typeof e[0]=="string")r=e.shift();else{let c=t.getEras();r=c[c.length-1]}let n=e.shift(),a=e.shift(),o=e.shift();return[t,r,n,a,o]}var je=new WeakMap;class p{copy(){return this.era?new p(this.calendar,this.era,this.year,this.month,this.day):new p(this.calendar,this.year,this.month,this.day)}add(t){return B(this,t)}subtract(t){return ce(this,t)}set(t){return J(this,t)}cycle(t,r,n){return N(this,t,r,n)}toDate(t){return ne(this,t)}toString(){return fe(this)}compare(t){return X(this,t)}constructor(...t){V(this,je,{writable:!0,value:void 0});let[r,n,a,o,c]=W(t);this.calendar=r,this.era=n,this.year=a,this.month=o,this.day=c,b(this)}}var _e=new WeakMap;class S{copy(){return this.era?new S(this.calendar,this.era,this.year,this.month,this.day,this.hour,this.minute,this.second,this.millisecond):new S(this.calendar,this.year,this.month,this.day,this.hour,this.minute,this.second,this.millisecond)}add(t){return B(this,t)}subtract(t){return ce(this,t)}set(t){return J(U(this,t),t)}cycle(t,r,n){switch(t){case"era":case"year":case"month":case"day":return N(this,t,r,n);default:return ie(this,t,r,n)}}toDate(t,r){return ne(this,t,r)}toString(){return he(this)}compare(t){let r=X(this,t);return r===0?Me(this,x(t)):r}constructor(...t){V(this,_e,{writable:!0,value:void 0});let[r,n,a,o,c]=W(t);this.calendar=r,this.era=n,this.year=a,this.month=o,this.day=c,this.hour=t.shift()||0,this.minute=t.shift()||0,this.second=t.shift()||0,this.millisecond=t.shift()||0,b(this)}}var Je=new WeakMap;class C{copy(){return this.era?new C(this.calendar,this.era,this.year,this.month,this.day,this.timeZone,this.offset,this.hour,this.minute,this.second,this.millisecond):new C(this.calendar,this.year,this.month,this.day,this.timeZone,this.offset,this.hour,this.minute,this.second,this.millisecond)}add(t){return le(this,t)}subtract(t){return Ue(this,t)}set(t,r){return Oe(this,t,r)}cycle(t,r,n){return Be(this,t,r,n)}toDate(){return Ie(this)}toString(){return Fe(this)}toAbsoluteString(){return this.toDate().toISOString()}compare(t){return this.toDate().getTime()-xe(t,this.timeZone).toDate().getTime()}constructor(...t){V(this,Je,{writable:!0,value:void 0});let[r,n,a,o,c]=W(t),i=t.shift(),l=t.shift();this.calendar=r,this.era=n,this.year=a,this.month=o,this.day=c,this.timeZone=i,this.offset=l,this.hour=t.shift()||0,this.minute=t.shift()||0,this.second=t.shift()||0,this.millisecond=t.shift()||0,b(this)}}let k=new Map;class Ne{format(t){return this.formatter.format(t)}formatToParts(t){return this.formatter.formatToParts(t)}formatRange(t,r){if(typeof this.formatter.formatRange=="function")return this.formatter.formatRange(t,r);if(r<t)throw new RangeError("End date must be >= start date");return`${this.formatter.format(t)} – ${this.formatter.format(r)}`}formatRangeToParts(t,r){if(typeof this.formatter.formatRangeToParts=="function")return this.formatter.formatRangeToParts(t,r);if(r<t)throw new RangeError("End date must be >= start date");let n=this.formatter.formatToParts(t),a=this.formatter.formatToParts(r);return[...n.map(o=>({...o,source:"startRange"})),{type:"literal",value:" – ",source:"shared"},...a.map(o=>({...o,source:"endRange"}))]}resolvedOptions(){let t=this.formatter.resolvedOptions();return ze()&&(this.resolvedHourCycle||(this.resolvedHourCycle=Le(t.locale,this.options)),t.hourCycle=this.resolvedHourCycle,t.hour12=this.resolvedHourCycle==="h11"||this.resolvedHourCycle==="h12"),t.calendar==="ethiopic-amete-alem"&&(t.calendar="ethioaa"),t}constructor(t,r={}){this.formatter=ue(t,r),this.options=r}}const Ve={true:{ja:"h11"},false:{}};function ue(e,t={}){if(typeof t.hour12=="boolean"&&We()){t={...t};let a=Ve[String(t.hour12)][e.split("-")[0]],o=t.hour12?"h12":"h23";t.hourCycle=a??o,delete t.hour12}let r=e+(t?Object.entries(t).sort((a,o)=>a[0]<o[0]?-1:1).join():"");if(k.has(r))return k.get(r);let n=new Intl.DateTimeFormat(e,t);return k.set(r,n),n}let A=null;function We(){return A==null&&(A=new Intl.DateTimeFormat("en-US",{hour:"numeric",hour12:!1}).format(new Date(2020,2,3,0))==="24"),A}let Z=null;function ze(){return Z==null&&(Z=new Intl.DateTimeFormat("fr",{hour:"numeric",hour12:!1}).resolvedOptions().hourCycle==="h12"),Z}function Le(e,t){if(!t.timeStyle&&!t.hour)return;e=e.replace(/(-u-)?-nu-[a-zA-Z0-9]+/,""),e+=(e.includes("-u-")?"":"-u")+"-nu-latn";let r=ue(e,{...t,timeZone:void 0}),n=parseInt(r.formatToParts(new Date(2020,2,3,0)).find(o=>o.type==="hour").value,10),a=parseInt(r.formatToParts(new Date(2020,2,3,23)).find(o=>o.type==="hour").value,10);if(n===0&&a===23)return"h23";if(n===24&&a===23)return"h24";if(n===0&&a===11)return"h11";if(n===12&&a===11)return"h12";throw new Error("Unexpected hour cycle result")}exports.$14e0f24ef4ac5c92$export$aa8b41735afcabd2=_;exports.$14e0f24ef4ac5c92$export$d0bdf45af03a6ea3=pe;exports.$35ea8db9cb2ccb90$export$99faa760c7908e4f=p;exports.$fae977aafc393c5c$export$588937bcd60ade55=Ae;exports.$fae977aafc393c5c$export$6b862160d295c8e=ke;exports.$fb18d541ea1ad717$export$ad991b66133851cf=Ne;
@@ -1,74 +0,0 @@
1
- import { defineComponent as y, ref as w, resolveComponent as n, unref as o, openBlock as s, createBlock as N, withCtx as d, createTextVNode as $, createElementVNode as c, createElementBlock as r, createVNode as a, createCommentVNode as v, renderSlot as M } from "vue";
2
- import { useModuleRoute as V, useModulePermissions as P, useRoute as A, useModuleBreadcrumbs as B, useModule as E, useFirebaseIntegration as L } from "@oneclick.dev/cms-kit";
3
- import { ClipboardClock as R, Calendar as S, Receipt as O, User as j, CalendarCog as D, Tickets as T, HandCoins as q } from "lucide-vue-next";
4
- const F = {
5
- key: 1,
6
- class: "@container mt-4 w-full"
7
- }, G = { class: "flex flex-col space-y-8 @5xl:flex-row @5xl:space-x-8 @5xl:space-y-0 w-full" }, H = {
8
- key: 0,
9
- class: "hidden @5xl:block @5xl:w-1/4 @7xl:w-1/5"
10
- }, I = { class: "flex flex-col flex-1" }, U = {
11
- key: 0,
12
- class: "@5xl:hidden"
13
- }, Q = /* @__PURE__ */ y({
14
- __name: "EditLayout",
15
- setup(W) {
16
- const { params: e, resolvePath: t } = V(), { hasPermission: i } = P(), _ = A();
17
- B(() => [
18
- { text: "Edit" }
19
- ]);
20
- const { config: u } = E(), g = L(u.project), f = w(null);
21
- (async () => {
22
- let l = await g.get(u.agendaCollection, e.value.id);
23
- f.value = l;
24
- })();
25
- const m = [
26
- { to: t(`/edit/${e.value.id}/`), title: "Overview", icon: R, subtitle: "General info and quick details" },
27
- { to: t(`/edit/${e.value.id}/agenda`), title: "Agenda", icon: S, subtitle: "Manage scheduled events and sessions" },
28
- { to: t(`/edit/${e.value.id}/orders`), title: "Orders", icon: O, subtitle: "Manage orders and payments" },
29
- { to: t(`/edit/${e.value.id}/resources`), title: "Resource Management", icon: j, subtitle: "Manage resources" },
30
- { to: t(`/edit/${e.value.id}/exceptions`), title: "Override Slots", icon: D, subtitle: "Adjust or block times" },
31
- { to: t(`/edit/${e.value.id}/availability`), title: "Availability Settings", icon: T, subtitle: "Booking rules & limits" },
32
- { to: t(`/edit/${e.value.id}/payment`), title: "Payment Settings", icon: q, subtitle: "Payment options & policies" }
33
- ];
34
- return (l, p) => {
35
- const x = n("NuxtLink"), k = n("VerticalNav"), C = n("DrawerNav"), b = n("CardContent"), h = n("Card");
36
- return !o(i)("edit-agendas") && !o(_).fullPath.endsWith("/agenda") ? (s(), N(x, {
37
- key: 0,
38
- class: "group",
39
- to: o(t)(`/edit/${o(e).id}/agenda`)
40
- }, {
41
- default: d(() => [...p[0] || (p[0] = [
42
- $("You have no access to this page. ", -1),
43
- c("span", { class: "group-hover:underline" }, "View agenda", -1)
44
- ])]),
45
- _: 1
46
- }, 8, ["to"])) : (s(), r("div", F, [
47
- c("div", G, [
48
- o(i)("edit-agendas") ? (s(), r("div", H, [
49
- a(k, { links: m })
50
- ])) : v("", !0),
51
- c("div", I, [
52
- o(i)("edit-agendas") ? (s(), r("div", U, [
53
- a(C, { links: m })
54
- ])) : v("", !0),
55
- a(h, { class: "flex-1 w-full" }, {
56
- default: d(() => [
57
- a(b, null, {
58
- default: d(() => [
59
- M(l.$slots, "default")
60
- ]),
61
- _: 3
62
- })
63
- ]),
64
- _: 3
65
- })
66
- ])
67
- ])
68
- ]));
69
- };
70
- }
71
- });
72
- export {
73
- Q as _
74
- };
@@ -1 +0,0 @@
1
- "use strict";const e=require("vue"),s=require("@oneclick.dev/cms-kit"),n=require("lucide-vue-next"),x={key:1,class:"@container mt-4 w-full"},C={class:"flex flex-col space-y-8 @5xl:flex-row @5xl:space-x-8 @5xl:space-y-0 w-full"},k={key:0,class:"hidden @5xl:block @5xl:w-1/4 @7xl:w-1/5"},h={class:"flex flex-col flex-1"},N={key:0,class:"@5xl:hidden"},b=e.defineComponent({__name:"EditLayout",setup(w){const{params:t,resolvePath:o}=s.useModuleRoute(),{hasPermission:a}=s.useModulePermissions(),r=s.useRoute();s.useModuleBreadcrumbs(()=>[{text:"Edit"}]);const{config:i}=s.useModule(),u=s.useFirebaseIntegration(i.project),m=e.ref(null);(async()=>{let l=await u.get(i.agendaCollection,t.value.id);m.value=l})();const c=[{to:o(`/edit/${t.value.id}/`),title:"Overview",icon:n.ClipboardClock,subtitle:"General info and quick details"},{to:o(`/edit/${t.value.id}/agenda`),title:"Agenda",icon:n.Calendar,subtitle:"Manage scheduled events and sessions"},{to:o(`/edit/${t.value.id}/orders`),title:"Orders",icon:n.Receipt,subtitle:"Manage orders and payments"},{to:o(`/edit/${t.value.id}/resources`),title:"Resource Management",icon:n.User,subtitle:"Manage resources"},{to:o(`/edit/${t.value.id}/exceptions`),title:"Override Slots",icon:n.CalendarCog,subtitle:"Adjust or block times"},{to:o(`/edit/${t.value.id}/availability`),title:"Availability Settings",icon:n.Tickets,subtitle:"Booking rules & limits"},{to:o(`/edit/${t.value.id}/payment`),title:"Payment Settings",icon:n.HandCoins,subtitle:"Payment options & policies"}];return(l,d)=>{const p=e.resolveComponent("NuxtLink"),v=e.resolveComponent("VerticalNav"),_=e.resolveComponent("DrawerNav"),g=e.resolveComponent("CardContent"),f=e.resolveComponent("Card");return!e.unref(a)("edit-agendas")&&!e.unref(r).fullPath.endsWith("/agenda")?(e.openBlock(),e.createBlock(p,{key:0,class:"group",to:e.unref(o)(`/edit/${e.unref(t).id}/agenda`)},{default:e.withCtx(()=>[...d[0]||(d[0]=[e.createTextVNode("You have no access to this page. ",-1),e.createElementVNode("span",{class:"group-hover:underline"},"View agenda",-1)])]),_:1},8,["to"])):(e.openBlock(),e.createElementBlock("div",x,[e.createElementVNode("div",C,[e.unref(a)("edit-agendas")?(e.openBlock(),e.createElementBlock("div",k,[e.createVNode(v,{links:c})])):e.createCommentVNode("",!0),e.createElementVNode("div",h,[e.unref(a)("edit-agendas")?(e.openBlock(),e.createElementBlock("div",N,[e.createVNode(_,{links:c})])):e.createCommentVNode("",!0),e.createVNode(f,{class:"flex-1 w-full"},{default:e.withCtx(()=>[e.createVNode(g,null,{default:e.withCtx(()=>[e.renderSlot(l.$slots,"default")]),_:3})]),_:3})])])]))}}});exports._sfc_main=b;
@@ -1 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),U=require("@oneclick.dev/cms-kit");require("./index-BuzLn4Km.js");const D=require("@oneclick.dev/cms-kit/charts"),a=require("lucide-vue-next"),c=require("./index-DQYBP8Js.js"),N=require("./index-C4YUVWzJ.js"),Z={class:"flex flex-col gap-6 w-full max-w-7xl mx-auto py-8"},J={class:"flex items-center justify-between"},Q={class:"text-muted-foreground text-sm mt-1"},Y={key:0,class:"flex items-center gap-2"},ee={class:"flex items-center border rounded-lg overflow-hidden"},te=["onClick"],oe={class:"text-sm text-destructive font-medium"},se={key:2,class:"flex items-center justify-center py-20"},ae={class:"flex items-start justify-between"},ne={class:"flex items-center gap-2"},le={class:"text-sm font-medium"},re={class:"grid grid-cols-2 @sm:grid-cols-4 gap-4"},ce={class:"flex items-center gap-1.5 text-muted-foreground mb-2"},ie={class:"text-xs font-medium uppercase tracking-wide"},de={class:"text-2xl font-semibold tabular-nums"},ue={key:0,class:"flex items-center gap-1 mt-1"},me={class:"grid @lg:grid-cols-2 gap-6"},pe={class:"grid @lg:grid-cols-2 gap-6"},fe={class:"divide-y"},xe={class:"flex items-center gap-3 min-w-0"},ge={class:"text-muted-foreground w-5 text-right shrink-0"},ve={class:"truncate font-mono text-xs"},he={class:"flex items-center gap-4 shrink-0 tabular-nums"},Ve={class:"text-muted-foreground text-xs w-16 text-right"},Ne={class:"text-muted-foreground text-xs w-16 text-right"},_e={key:0,class:"px-6 py-8 text-center text-muted-foreground text-sm"},ye={class:"divide-y"},Ce={class:"flex items-center gap-3 min-w-0"},we={class:"text-muted-foreground w-5 text-right shrink-0"},ke={class:"truncate"},be={class:"flex items-center gap-4 shrink-0 tabular-nums"},Ee={class:"text-muted-foreground text-xs w-20 text-right"},Be={key:0,class:"px-6 py-8 text-center text-muted-foreground text-sm"},De={class:"grid @lg:grid-cols-2 gap-6"},Se={class:"space-y-3"},Te={class:"text-sm capitalize flex-1"},$e={class:"flex-1 h-2 bg-muted rounded-full overflow-hidden"},Pe={class:"text-xs tabular-nums text-muted-foreground w-16 text-right"},Fe={key:0,class:"py-4 text-center text-muted-foreground text-sm"},Ue={class:"space-y-3"},ze={class:"text-sm flex-1"},Re={class:"flex-1 h-2 bg-muted rounded-full overflow-hidden"},Me={class:"text-xs tabular-nums text-muted-foreground w-16 text-right"},Ae={key:0,class:"py-4 text-center text-muted-foreground text-sm"},Le=e.defineComponent({__name:"Overview",setup(qe){const{config:S}=U.useModule(),{moduleId:G}=U.useModuleRoute();U.useModuleBreadcrumbs(()=>[{label:"Overview"}]);const x=e.ref(!0),_=e.ref(null),y=e.ref("30"),h=e.ref([]),r=e.ref({}),I=e.ref({}),i=e.ref({}),z=e.ref(0),T=e.ref([]),$=e.ref([]),C=e.ref([]),w=e.ref([]),k=e.computed(()=>!!(S.serviceAccount&&S.propertyId));function g(s){return`/api/v1/modules/${G}${s}`}const O=[{label:"7 days",value:"7"},{label:"14 days",value:"14"},{label:"30 days",value:"30"},{label:"90 days",value:"90"}],m={sessions:"#3b82f6",users:"#8b5cf6",pageViews:"#10b981"},P={sessions:{label:"Sessions",color:m.sessions},totalUsers:{label:"Users",color:m.users}},F={screenPageViews:{label:"Page Views",color:m.pageViews}},V=(s,t)=>t,R=s=>s.sessions||0,X=s=>s.totalUsers||0,M=s=>s.screenPageViews||0,A=s=>{const t=h.value[Math.round(s)];if(!t)return"";const l=new Date(t.date);return`${l.getDate()}/${l.getMonth()+1}`},L=s=>{const t=h.value[Math.round(Number(s))];return t?new Date(t.date).toLocaleDateString(void 0,{weekday:"short",month:"short",day:"numeric"}):""},W=e.computed(()=>[{label:"Sessions",value:d(r.value.sessions||0),icon:a.MousePointerClick,change:i.value.sessions},{label:"Users",value:d(r.value.totalUsers||0),icon:a.Users,change:i.value.totalUsers},{label:"Page Views",value:d(r.value.screenPageViews||0),icon:a.Eye,change:i.value.screenPageViews},{label:"Avg. Duration",value:H(r.value.averageSessionDuration||0),icon:a.Clock,change:i.value.averageSessionDuration},{label:"Engagement",value:`${((r.value.engagementRate||0)*100).toFixed(1)}%`,icon:a.Zap,change:i.value.engagementRate,positive:!0},{label:"Bounce Rate",value:`${((r.value.bounceRate||0)*100).toFixed(1)}%`,icon:(r.value.bounceRate||0)>.5?a.TrendingDown:a.TrendingUp,change:i.value.bounceRate,positive:!1},{label:"New Users",value:d(r.value.newUsers||0),icon:a.UserPlus,change:i.value.newUsers},{label:"Pages / Session",value:(r.value.screenPageViewsPerSession||0).toFixed(1),icon:a.Activity,change:i.value.screenPageViewsPerSession}]);function d(s){return s>=1e6?`${(s/1e6).toFixed(1)}M`:s>=1e3?`${(s/1e3).toFixed(1)}K`:Math.round(s).toString()}function H(s){const t=Math.floor(s/60),l=Math.round(s%60);return t>0?`${t}m ${l}s`:`${l}s`}function b(s,t=!0){if(s==null)return{text:"—",cls:"text-muted-foreground",icon:a.Minus};const n=`${Math.abs(s).toFixed(1)}%`,f=s>0;return{text:n,cls:(t?f:!f)?"text-emerald-600 dark:text-emerald-400":"text-red-500 dark:text-red-400",icon:f?a.TrendingUp:a.TrendingDown}}function K(s){const t=s.toLowerCase();return t==="mobile"?a.Smartphone:t==="tablet"?a.Tablet:a.Monitor}async function E(){if(!k.value)return;x.value=!0,_.value=null;const s=`${y.value}daysAgo`;try{const[t,l,n,f,u,p]=await Promise.all([$fetch(g(`/report?startDate=${s}&endDate=today`)),$fetch(g("/realtime")).catch(()=>({activeUsers:0})),$fetch(g(`/top-pages?startDate=${s}&endDate=today&limit=10`)),$fetch(g(`/top-sources?startDate=${s}&endDate=today`)),$fetch(g(`/devices?startDate=${s}&endDate=today`)),$fetch(g(`/countries?startDate=${s}&endDate=today`))]);h.value=t.rows||[],r.value=t.totals||{},I.value=t.previousTotals||{},i.value=t.changes||{},z.value=l.activeUsers||0,T.value=n.rows||[],$.value=f.rows||[],C.value=u.rows||[],w.value=p.rows||[]}catch(t){console.error("Failed to fetch analytics data:",t),_.value=t?.data?.statusMessage||t?.message||"Failed to load analytics data"}finally{x.value=!1}}return e.watch(y,()=>E()),e.onMounted(()=>{k.value?E():x.value=!1}),(s,t)=>{const l=e.resolveComponent("Button"),n=e.resolveComponent("Card"),f=e.resolveComponent("Badge"),u=e.resolveComponent("CardTitle"),p=e.resolveComponent("CardHeader"),q=e.resolveComponent("ChartLegendContent"),j=e.resolveComponent("ChartContainer"),v=e.resolveComponent("CardContent");return e.openBlock(),e.createElementBlock("div",Z,[e.createElementVNode("div",J,[e.createElementVNode("div",null,[t[0]||(t[0]=e.createElementVNode("h1",{class:"text-2xl font-semibold"},"Analytics Overview",-1)),e.createElementVNode("p",Q,"Property "+e.toDisplayString(e.unref(S).propertyId||"—"),1)]),k.value?(e.openBlock(),e.createElementBlock("div",Y,[e.createElementVNode("div",ee,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(O,o=>e.createElementVNode("button",{key:o.value,class:e.normalizeClass(["px-3 py-1.5 text-xs font-medium transition-colors",y.value===o.value?"bg-primary text-primary-foreground":"text-muted-foreground hover:text-foreground hover:bg-muted"]),onClick:B=>y.value=o.value},e.toDisplayString(o.label),11,te)),64))]),e.createVNode(l,{variant:"outline",size:"icon",onClick:E,disabled:x.value},{default:e.withCtx(()=>[e.createVNode(e.unref(a.RefreshCw),{class:e.normalizeClass(["size-4",{"animate-spin":x.value}])},null,8,["class"])]),_:1},8,["disabled"])])):e.createCommentVNode("",!0)]),k.value?_.value?(e.openBlock(),e.createBlock(n,{key:1,class:"p-6 border-destructive/50 bg-destructive/5"},{default:e.withCtx(()=>[e.createElementVNode("p",oe,e.toDisplayString(_.value),1),e.createVNode(l,{variant:"outline",size:"sm",class:"mt-3",onClick:E},{default:e.withCtx(()=>[...t[2]||(t[2]=[e.createTextVNode("Retry",-1)])]),_:1})]),_:1})):x.value?(e.openBlock(),e.createElementBlock("div",se,[e.createVNode(e.unref(a.Loader2),{class:"size-8 animate-spin text-muted-foreground"})])):(e.openBlock(),e.createElementBlock(e.Fragment,{key:3},[e.createVNode(n,{class:"p-4"},{default:e.withCtx(()=>[e.createElementVNode("div",ae,[e.createElementVNode("div",ne,[t[3]||(t[3]=e.createElementVNode("span",{class:"relative flex h-2.5 w-2.5"},[e.createElementVNode("span",{class:"animate-ping absolute inline-flex h-full w-full rounded-full bg-green-400 opacity-75"}),e.createElementVNode("span",{class:"relative inline-flex rounded-full h-2.5 w-2.5 bg-green-500"})],-1)),e.createElementVNode("span",le,e.toDisplayString(z.value)+" visitors",1),t[4]||(t[4]=e.createElementVNode("span",{class:"text-xs text-muted-foreground translate-y-0.25"},"in the last 30 minutes",-1))]),e.createVNode(f,{variant:"outline",class:"text-xs"},{default:e.withCtx(()=>[...t[5]||(t[5]=[e.createTextVNode("Live",-1)])]),_:1})])]),_:1}),e.createElementVNode("div",re,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(W.value,o=>(e.openBlock(),e.createBlock(n,{key:o.label,class:"p-4"},{default:e.withCtx(()=>[e.createElementVNode("div",ce,[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(o.icon),{class:"size-3.5"})),e.createElementVNode("span",ie,e.toDisplayString(o.label),1)]),e.createElementVNode("p",de,e.toDisplayString(o.value),1),o.change!==void 0?(e.openBlock(),e.createElementBlock("div",ue,[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(b(o.change,o.positive!==!1).icon),{class:e.normalizeClass(["size-3",b(o.change,o.positive!==!1).cls])},null,8,["class"])),e.createElementVNode("span",{class:e.normalizeClass(["text-xs font-medium",b(o.change,o.positive!==!1).cls])},e.toDisplayString(b(o.change,o.positive!==!1).text),3),t[6]||(t[6]=e.createElementVNode("span",{class:"text-xs text-muted-foreground"},"vs prev.",-1))])):e.createCommentVNode("",!0)]),_:2},1024))),128))]),e.createElementVNode("div",me,[e.createVNode(n,null,{default:e.withCtx(()=>[e.createVNode(p,{class:"pb-2"},{default:e.withCtx(()=>[e.createVNode(u,{class:"text-base"},{default:e.withCtx(()=>[...t[7]||(t[7]=[e.createTextVNode("Sessions & Users",-1)])]),_:1})]),_:1}),e.createVNode(v,null,{default:e.withCtx(()=>[e.createVNode(j,{config:P,class:"h-[240px] w-full"},{default:e.withCtx(()=>[e.createVNode(e.unref(c.S),{data:h.value,margin:{top:8,right:8,bottom:24,left:40}},{default:e.withCtx(()=>[e.createVNode(e.unref(N.C),{x:V,y:R,color:m.sessions,opacity:.1,curveType:"monotoneX"},null,8,["color"]),e.createVNode(e.unref(N.C$1),{x:V,y:R,color:m.sessions,lineWidth:2,curveType:"monotoneX"},null,8,["color"]),e.createVNode(e.unref(N.C$1),{x:V,y:X,color:m.users,lineWidth:2,curveType:"monotoneX"},null,8,["color"]),e.createVNode(e.unref(c.C),{type:"x",tickFormat:A,numTicks:6}),e.createVNode(e.unref(c.C),{type:"y",numTicks:4}),e.createVNode(e.unref(c.A),{template:e.unref(D.componentToString)(P,e.unref(D.ChartTooltipContent),{labelFormatter:L})},null,8,["template"]),e.createVNode(e.unref(c.z))]),_:1},8,["data"]),e.createVNode(q,{config:P})]),_:1})]),_:1})]),_:1}),e.createVNode(n,null,{default:e.withCtx(()=>[e.createVNode(p,{class:"pb-2"},{default:e.withCtx(()=>[e.createVNode(u,{class:"text-base"},{default:e.withCtx(()=>[...t[8]||(t[8]=[e.createTextVNode("Page Views",-1)])]),_:1})]),_:1}),e.createVNode(v,null,{default:e.withCtx(()=>[e.createVNode(j,{config:F,class:"h-[240px] w-full"},{default:e.withCtx(()=>[e.createVNode(e.unref(c.S),{data:h.value,margin:{top:8,right:8,bottom:24,left:40}},{default:e.withCtx(()=>[e.createVNode(e.unref(N.C),{x:V,y:M,color:m.pageViews,opacity:.15,curveType:"monotoneX"},null,8,["color"]),e.createVNode(e.unref(N.C$1),{x:V,y:M,color:m.pageViews,lineWidth:2,curveType:"monotoneX"},null,8,["color"]),e.createVNode(e.unref(c.C),{type:"x",tickFormat:A,numTicks:6}),e.createVNode(e.unref(c.C),{type:"y",numTicks:4}),e.createVNode(e.unref(c.A),{template:e.unref(D.componentToString)(F,e.unref(D.ChartTooltipContent),{labelFormatter:L})},null,8,["template"]),e.createVNode(e.unref(c.z))]),_:1},8,["data"]),e.createVNode(q,{config:F})]),_:1})]),_:1})]),_:1})]),e.createElementVNode("div",pe,[e.createVNode(n,null,{default:e.withCtx(()=>[e.createVNode(p,{class:"pb-2"},{default:e.withCtx(()=>[e.createVNode(u,{class:"text-base"},{default:e.withCtx(()=>[...t[9]||(t[9]=[e.createTextVNode("Top Pages",-1)])]),_:1})]),_:1}),e.createVNode(v,{class:"p-0"},{default:e.withCtx(()=>[e.createElementVNode("div",fe,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(T.value,(o,B)=>(e.openBlock(),e.createElementBlock("div",{key:o.pagePath,class:"flex items-center justify-between px-6 py-3 text-sm"},[e.createElementVNode("div",xe,[e.createElementVNode("span",ge,e.toDisplayString(B+1),1),e.createElementVNode("span",ve,e.toDisplayString(o.pagePath),1)]),e.createElementVNode("div",he,[e.createElementVNode("span",Ve,e.toDisplayString(d(o.screenPageViews))+" views",1),e.createElementVNode("span",Ne,e.toDisplayString(d(o.totalUsers))+" users",1)])]))),128)),T.value.length?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",_e,"No data available"))])]),_:1})]),_:1}),e.createVNode(n,null,{default:e.withCtx(()=>[e.createVNode(p,{class:"pb-2"},{default:e.withCtx(()=>[e.createVNode(u,{class:"text-base"},{default:e.withCtx(()=>[...t[10]||(t[10]=[e.createTextVNode("Traffic Sources",-1)])]),_:1})]),_:1}),e.createVNode(v,{class:"p-0"},{default:e.withCtx(()=>[e.createElementVNode("div",ye,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList($.value,(o,B)=>(e.openBlock(),e.createElementBlock("div",{key:o.sessionSource,class:"flex items-center justify-between px-6 py-3 text-sm"},[e.createElementVNode("div",Ce,[e.createElementVNode("span",we,e.toDisplayString(B+1),1),e.createVNode(e.unref(a.ArrowUpRight),{class:"size-3.5 text-muted-foreground shrink-0"}),e.createElementVNode("span",ke,e.toDisplayString(o.sessionSource||"(direct)"),1)]),e.createElementVNode("div",be,[e.createElementVNode("span",Ee,e.toDisplayString(d(o.sessions))+" sessions",1)])]))),128)),$.value.length?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",Be,"No data available"))])]),_:1})]),_:1})]),e.createElementVNode("div",De,[e.createVNode(n,null,{default:e.withCtx(()=>[e.createVNode(p,{class:"pb-2"},{default:e.withCtx(()=>[e.createVNode(u,{class:"text-base"},{default:e.withCtx(()=>[...t[11]||(t[11]=[e.createTextVNode("Devices",-1)])]),_:1})]),_:1}),e.createVNode(v,null,{default:e.withCtx(()=>[e.createElementVNode("div",Se,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(C.value,o=>(e.openBlock(),e.createElementBlock("div",{key:o.deviceCategory,class:"flex items-center gap-3"},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(K(o.deviceCategory)),{class:"size-4 text-muted-foreground shrink-0"})),e.createElementVNode("span",Te,e.toDisplayString(o.deviceCategory),1),e.createElementVNode("div",$e,[e.createElementVNode("div",{class:"h-full bg-primary rounded-full transition-all",style:e.normalizeStyle({width:`${o.sessions/(C.value[0]?.sessions||1)*100}%`})},null,4)]),e.createElementVNode("span",Pe,e.toDisplayString(d(o.sessions)),1)]))),128)),C.value.length?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",Fe,"No data available"))])]),_:1})]),_:1}),e.createVNode(n,null,{default:e.withCtx(()=>[e.createVNode(p,{class:"pb-2"},{default:e.withCtx(()=>[e.createVNode(u,{class:"text-base"},{default:e.withCtx(()=>[...t[12]||(t[12]=[e.createTextVNode("Top Countries",-1)])]),_:1})]),_:1}),e.createVNode(v,null,{default:e.withCtx(()=>[e.createElementVNode("div",Ue,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(w.value,o=>(e.openBlock(),e.createElementBlock("div",{key:o.country,class:"flex items-center gap-3"},[e.createVNode(e.unref(a.Globe),{class:"size-4 text-muted-foreground shrink-0"}),e.createElementVNode("span",ze,e.toDisplayString(o.country),1),e.createElementVNode("div",Re,[e.createElementVNode("div",{class:"h-full bg-primary rounded-full transition-all",style:e.normalizeStyle({width:`${o.sessions/(w.value[0]?.sessions||1)*100}%`})},null,4)]),e.createElementVNode("span",Me,e.toDisplayString(d(o.sessions)),1)]))),128)),w.value.length?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",Ae,"No data available"))])]),_:1})]),_:1})])],64)):(e.openBlock(),e.createBlock(n,{key:0,class:"p-8 text-center"},{default:e.withCtx(()=>[...t[1]||(t[1]=[e.createElementVNode("div",{class:"mx-auto max-w-md space-y-3"},[e.createElementVNode("p",{class:"text-lg font-medium"},"Setup required"),e.createElementVNode("p",{class:"text-sm text-muted-foreground"},"Connect a Google Service Account and enter your GA4 Property ID in the module settings to start seeing analytics.")],-1)])]),_:1}))])}}});exports.default=Le;