@oneclick.dev/cms-core-modules 0.0.76 → 0.0.78
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.
- package/dist/AppointmentDetailsCard-BfBwWxTU.js +1 -0
- package/dist/{AppointmentDetailsCard-i4Ky8WnK.mjs → AppointmentDetailsCard-SMNXi117.mjs} +43 -42
- package/dist/AppointmentListTable-Dk-CnNR6.js +1 -0
- package/dist/{AppointmentListTable-G5dIeCYj.mjs → AppointmentListTable-vMSMt0M5.mjs} +24 -23
- package/dist/{ContentEditor-3JFlC9N1.js → ContentEditor-4e80zFyn.js} +1 -1
- package/dist/{ContentEditor-7SDjf5Hk.mjs → ContentEditor-Dk-iDEjl.mjs} +1 -1
- package/dist/{CountryBreakdownCard-Dc_vZ9dJ.mjs → CountryBreakdownCard-B_VhBsm8.mjs} +27 -26
- package/dist/CountryBreakdownCard-Ghg0Wz-h.js +1 -0
- package/dist/{DeviceBreakdownCard-BJcQNo8a.mjs → DeviceBreakdownCard-CQR65Zr_.mjs} +50 -49
- package/dist/DeviceBreakdownCard-Cpcj75Rv.js +1 -0
- package/dist/PeakHoursCard-CFIg8dys.js +1 -0
- package/dist/{PeakHoursCard-hV8PdGsf.mjs → PeakHoursCard-_1JS0tpZ.mjs} +51 -50
- package/dist/{ProductDetailsCard-CJBkZSER.mjs → ProductDetailsCard-C5gqBJag.mjs} +20 -19
- package/dist/ProductDetailsCard-Ce11f_9r.js +1 -0
- package/dist/RealtimeCard-CatAzdxv.js +1 -0
- package/dist/{RealtimeCard-CRJHS64l.mjs → RealtimeCard-CtX6Yyk-.mjs} +33 -32
- package/dist/SearchTermsCard-BPAdRL-r.js +1 -0
- package/dist/{SearchTermsCard-Dwa-P7My.mjs → SearchTermsCard-DzSu9jzo.mjs} +38 -37
- package/dist/TopPagesCard-BA9Are_Z.js +1 -0
- package/dist/{TopPagesCard-Dv52to_J.mjs → TopPagesCard-D7lH_QYV.mjs} +27 -26
- package/dist/TrafficSourcesCard-DV13ZOBq.js +1 -0
- package/dist/{TrafficSourcesCard-CMhcj2k2.mjs → TrafficSourcesCard-Fng3fVh7.mjs} +53 -52
- package/dist/VisitorStatsCard-CAzAZtKD.js +1 -0
- package/dist/{VisitorStatsCard-BHn4oSnt.mjs → VisitorStatsCard-CuXXnMBc.mjs} +22 -21
- package/dist/index.cjs.js +1 -1
- package/dist/index.mjs +12 -12
- package/package.json +3 -2
- package/dist/AppointmentDetailsCard-CtK0Cj_O.js +0 -1
- package/dist/AppointmentListTable-CQ3uXfa8.js +0 -1
- package/dist/CountryBreakdownCard-BUfJ-umQ.js +0 -1
- package/dist/DeviceBreakdownCard-CsoK6JUO.js +0 -1
- package/dist/PeakHoursCard-BNl_U1r_.js +0 -1
- package/dist/ProductDetailsCard-BwktdlIf.js +0 -1
- package/dist/RealtimeCard-CxtqQHee.js +0 -1
- package/dist/SearchTermsCard-DGRbo5ZP.js +0 -1
- package/dist/TopPagesCard-pZ-nAsaI.js +0 -1
- package/dist/TrafficSourcesCard-CBOPV1J1.js +0 -1
- package/dist/VisitorStatsCard-tApB_7v8.js +0 -1
|
@@ -1,27 +1,28 @@
|
|
|
1
|
-
import { defineComponent as I, computed as _, ref as x, onMounted as P, resolveComponent as B, openBlock as r, createElementBlock as a, unref as s, createVNode as m, createElementVNode as
|
|
1
|
+
import { defineComponent as I, computed as _, ref as x, onMounted as P, resolveComponent as B, openBlock as r, createElementBlock as a, unref as s, createVNode as m, createElementVNode as o, toDisplayString as d, Fragment as y, renderList as k, normalizeStyle as q, normalizeClass as N, createCommentVNode as S, createTextVNode as w, withCtx as O } from "vue";
|
|
2
2
|
import { Loader2 as H, Globe as z, MousePointerClick as J, Users as K, ExternalLink as Q } from "lucide-vue-next";
|
|
3
|
-
|
|
3
|
+
import { useRoute as W, useModuleApi as X } from "@oneclick.dev/cms-kit";
|
|
4
|
+
const Y = { class: "w-full" }, Z = {
|
|
4
5
|
key: 0,
|
|
5
6
|
class: "flex items-center gap-2 py-3"
|
|
6
|
-
},
|
|
7
|
+
}, ee = {
|
|
7
8
|
key: 1,
|
|
8
9
|
class: "text-xs text-destructive py-2"
|
|
9
|
-
},
|
|
10
|
+
}, se = {
|
|
10
11
|
key: 2,
|
|
11
12
|
class: "rounded-xl border bg-background p-4 text-center"
|
|
12
|
-
},
|
|
13
|
+
}, te = {
|
|
13
14
|
key: 3,
|
|
14
15
|
class: "rounded-xl border bg-background overflow-hidden"
|
|
15
|
-
},
|
|
16
|
+
}, oe = { class: "px-3 py-2 border-b bg-muted/40 flex items-center justify-between" }, ne = { class: "flex items-center gap-2" }, re = { class: "text-[10px] text-muted-foreground" }, ae = {
|
|
16
17
|
key: 0,
|
|
17
18
|
class: "px-3 pt-3 pb-2"
|
|
18
|
-
},
|
|
19
|
+
}, le = { class: "h-3 rounded-full bg-muted overflow-hidden flex" }, ie = ["title"], ue = { class: "flex flex-wrap gap-x-3 gap-y-1 mt-2" }, de = { class: "text-[10px] text-muted-foreground" }, ce = { class: "text-[10px] font-medium" }, me = {
|
|
19
20
|
key: 1,
|
|
20
21
|
class: "border-t"
|
|
21
|
-
},
|
|
22
|
+
}, pe = { class: "divide-y" }, ge = { class: "text-xs font-medium truncate flex-1" }, fe = { class: "flex items-center gap-3 text-[10px] text-muted-foreground shrink-0" }, xe = { class: "flex items-center gap-1" }, he = { class: "flex items-center gap-1" }, be = { class: "px-3 py-2 border-t bg-muted/20 flex items-center justify-between" }, ve = {
|
|
22
23
|
key: 0,
|
|
23
24
|
class: "text-[10px] text-muted-foreground"
|
|
24
|
-
},
|
|
25
|
+
}, Se = /* @__PURE__ */ I({
|
|
25
26
|
__name: "TrafficSourcesCard",
|
|
26
27
|
props: {
|
|
27
28
|
toolName: {},
|
|
@@ -33,7 +34,7 @@ const W = { class: "w-full" }, X = {
|
|
|
33
34
|
},
|
|
34
35
|
emits: ["submit"],
|
|
35
36
|
setup(D, { emit: G }) {
|
|
36
|
-
const c = D, F = G, R =
|
|
37
|
+
const c = D, F = G, R = W(), T = _(() => R.params.slug), C = X(c.instanceId), h = x(!0), g = x(null), p = x([]), u = x([]), b = x(null);
|
|
37
38
|
function j() {
|
|
38
39
|
const t = c.resolvedArgs?._cachedData;
|
|
39
40
|
return t ? (u.value = (t.topChannels || []).map((e) => ({
|
|
@@ -54,11 +55,11 @@ const W = { class: "w-full" }, X = {
|
|
|
54
55
|
try {
|
|
55
56
|
const l = new URLSearchParams();
|
|
56
57
|
t && l.set("startDate", t), e && l.set("endDate", e);
|
|
57
|
-
const [
|
|
58
|
+
const [n, f] = await Promise.all([
|
|
58
59
|
C.get(`/top-sources?${l.toString()}`),
|
|
59
60
|
C.get(`/acquisition/channels?${l.toString()}`)
|
|
60
61
|
]);
|
|
61
|
-
p.value =
|
|
62
|
+
p.value = n.rows || [], u.value = f.rows || [], b.value = (/* @__PURE__ */ new Date()).toISOString(), $({
|
|
62
63
|
topChannels: u.value.map((i) => ({
|
|
63
64
|
channel: i.sessionDefaultChannelGroup,
|
|
64
65
|
sessions: i.sessions,
|
|
@@ -109,73 +110,73 @@ const W = { class: "w-full" }, X = {
|
|
|
109
110
|
], E = _(() => {
|
|
110
111
|
const { startDate: t, endDate: e } = c.resolvedArgs || {};
|
|
111
112
|
if (!t && !e) return "Last 30 days";
|
|
112
|
-
const l = t || "30daysAgo",
|
|
113
|
-
return
|
|
113
|
+
const l = t || "30daysAgo", n = l.match(/^(\d+)daysAgo$/);
|
|
114
|
+
return n ? `Last ${n[1]} days` : `${l} → ${e || "today"}`;
|
|
114
115
|
});
|
|
115
116
|
return (t, e) => {
|
|
116
117
|
const l = B("NuxtLink");
|
|
117
|
-
return r(), a("div",
|
|
118
|
-
s(h) ? (r(), a("div",
|
|
118
|
+
return r(), a("div", Y, [
|
|
119
|
+
s(h) ? (r(), a("div", Z, [
|
|
119
120
|
m(s(H), { class: "size-4 animate-spin text-muted-foreground" }),
|
|
120
|
-
e[0] || (e[0] =
|
|
121
|
-
])) : s(g) ? (r(), a("div",
|
|
121
|
+
e[0] || (e[0] = o("span", { class: "text-xs text-muted-foreground" }, "Loading traffic sources…", -1))
|
|
122
|
+
])) : s(g) ? (r(), a("div", ee, d(s(g)), 1)) : s(u).length === 0 && s(p).length === 0 ? (r(), a("div", se, [
|
|
122
123
|
m(s(z), { class: "size-8 text-muted-foreground mx-auto mb-2" }),
|
|
123
|
-
e[1] || (e[1] =
|
|
124
|
-
])) : (r(), a("div",
|
|
125
|
-
|
|
126
|
-
|
|
124
|
+
e[1] || (e[1] = o("p", { class: "text-sm text-muted-foreground" }, "No traffic source data found for this period.", -1))
|
|
125
|
+
])) : (r(), a("div", te, [
|
|
126
|
+
o("div", oe, [
|
|
127
|
+
o("div", ne, [
|
|
127
128
|
m(s(z), { class: "size-3.5 text-primary" }),
|
|
128
|
-
e[2] || (e[2] =
|
|
129
|
+
e[2] || (e[2] = o("span", { class: "text-xs font-medium" }, "Traffic Sources", -1))
|
|
129
130
|
]),
|
|
130
|
-
|
|
131
|
+
o("span", re, d(s(E)), 1)
|
|
131
132
|
]),
|
|
132
|
-
s(u).length > 0 ? (r(), a("div",
|
|
133
|
-
|
|
134
|
-
(r(!0), a(y, null, k(s(u), (
|
|
135
|
-
key:
|
|
133
|
+
s(u).length > 0 ? (r(), a("div", ae, [
|
|
134
|
+
o("div", le, [
|
|
135
|
+
(r(!0), a(y, null, k(s(u), (n, f) => (r(), a("div", {
|
|
136
|
+
key: n.sessionDefaultChannelGroup,
|
|
136
137
|
class: N(["h-full first:rounded-l-full last:rounded-r-full", U[f % U.length]]),
|
|
137
|
-
style: q({ width: `${s(L) > 0 ? (
|
|
138
|
-
title: `${
|
|
139
|
-
}, null, 14,
|
|
138
|
+
style: q({ width: `${s(L) > 0 ? (n.sessions || 0) / s(L) * 100 : 0}%` }),
|
|
139
|
+
title: `${n.sessionDefaultChannelGroup}: ${v(n.sessions)} sessions`
|
|
140
|
+
}, null, 14, ie))), 128))
|
|
140
141
|
]),
|
|
141
|
-
|
|
142
|
-
(r(!0), a(y, null, k(s(u).slice(0, 6), (
|
|
143
|
-
key:
|
|
142
|
+
o("div", ue, [
|
|
143
|
+
(r(!0), a(y, null, k(s(u).slice(0, 6), (n, f) => (r(), a("div", {
|
|
144
|
+
key: n.sessionDefaultChannelGroup,
|
|
144
145
|
class: "flex items-center gap-1.5"
|
|
145
146
|
}, [
|
|
146
|
-
|
|
147
|
+
o("span", {
|
|
147
148
|
class: N(["size-2 rounded-full shrink-0", A[f % A.length]])
|
|
148
149
|
}, null, 2),
|
|
149
|
-
|
|
150
|
-
|
|
150
|
+
o("span", de, d(n.sessionDefaultChannelGroup), 1),
|
|
151
|
+
o("span", ce, d(v(n.sessions)), 1)
|
|
151
152
|
]))), 128))
|
|
152
153
|
])
|
|
153
154
|
])) : S("", !0),
|
|
154
|
-
s(p).length > 0 ? (r(), a("div",
|
|
155
|
-
e[3] || (e[3] =
|
|
156
|
-
|
|
155
|
+
s(p).length > 0 ? (r(), a("div", me, [
|
|
156
|
+
e[3] || (e[3] = o("div", { class: "px-3 py-1.5 bg-muted/20" }, [
|
|
157
|
+
o("span", { class: "text-[10px] font-medium text-muted-foreground uppercase tracking-wide" }, "Top Sources")
|
|
157
158
|
], -1)),
|
|
158
|
-
|
|
159
|
-
(r(!0), a(y, null, k(s(p), (
|
|
160
|
-
key:
|
|
159
|
+
o("div", pe, [
|
|
160
|
+
(r(!0), a(y, null, k(s(p), (n) => (r(), a("div", {
|
|
161
|
+
key: n.sessionSource,
|
|
161
162
|
class: "px-3 py-2 flex items-center justify-between hover:bg-muted/30 transition-colors"
|
|
162
163
|
}, [
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
164
|
+
o("span", ge, d(n.sessionSource), 1),
|
|
165
|
+
o("div", fe, [
|
|
166
|
+
o("span", xe, [
|
|
166
167
|
m(s(J), { class: "size-2.5" }),
|
|
167
|
-
w(" " + d(v(
|
|
168
|
+
w(" " + d(v(n.sessions)), 1)
|
|
168
169
|
]),
|
|
169
|
-
|
|
170
|
+
o("span", he, [
|
|
170
171
|
m(s(K), { class: "size-2.5" }),
|
|
171
|
-
w(" " + d(v(
|
|
172
|
+
w(" " + d(v(n.totalUsers)), 1)
|
|
172
173
|
])
|
|
173
174
|
])
|
|
174
175
|
]))), 128))
|
|
175
176
|
])
|
|
176
177
|
])) : S("", !0),
|
|
177
|
-
|
|
178
|
-
s(b) ? (r(), a("span",
|
|
178
|
+
o("div", be, [
|
|
179
|
+
s(b) ? (r(), a("span", ve, " Fetched " + d(V(s(b))), 1)) : S("", !0),
|
|
179
180
|
m(l, {
|
|
180
181
|
to: `/projects/${s(T)}/modules/${D.instanceId}`,
|
|
181
182
|
class: "inline-flex items-center gap-1.5 text-xs text-primary hover:underline"
|
|
@@ -193,5 +194,5 @@ const W = { class: "w-full" }, X = {
|
|
|
193
194
|
}
|
|
194
195
|
});
|
|
195
196
|
export {
|
|
196
|
-
|
|
197
|
+
Se as default
|
|
197
198
|
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),o=require("lucide-vue-next"),w=require("@oneclick.dev/cms-kit"),C={class:"w-full"},M={key:0,class:"flex items-center gap-2 py-3"},F={key:1,class:"text-xs text-destructive py-2"},L={key:2,class:"rounded-xl border bg-background overflow-hidden"},z={class:"px-3 py-2 border-b bg-muted/40 flex items-center justify-between"},j={class:"flex items-center gap-2"},T={class:"text-[10px] text-muted-foreground"},I={class:"grid grid-cols-2 sm:grid-cols-4 divide-x divide-y"},O={class:"flex items-center gap-1.5"},q={class:"text-[10px] text-muted-foreground uppercase tracking-wide"},K={class:"text-sm font-semibold"},Y={key:0,class:"flex items-center gap-0.5"},G={class:"px-3 py-2 border-t bg-muted/20 flex items-center justify-between"},H={key:0,class:"text-[10px] text-muted-foreground"},J=e.defineComponent({__name:"VisitorStatsCard",props:{toolName:{},instanceId:{},instanceName:{},moduleType:{},resolvedArgs:{},status:{}},emits:["submit"],setup(f,{emit:S}){const l=f,V=S,_=w.useRoute(),D=e.computed(()=>_.params.slug),N=w.useModuleApi(l.instanceId),u=e.ref(!0),c=e.ref(null),a=e.ref({}),i=e.ref({}),d=e.ref(null);function B(){const t=l.resolvedArgs?._cachedData;return t?(a.value={totalUsers:t.totalUsers||0,sessions:t.sessions||0,screenPageViews:t.pageViews||0,newUsers:t.newUsers||0,bounceRate:v(t.bounceRate),averageSessionDuration:E(t.avgSessionDuration),engagementRate:v(t.engagementRate),screenPageViewsPerSession:parseFloat(t.pagesPerSession)||0},i.value=Object.fromEntries(Object.entries(t.changes||{}).map(([s,n])=>[s,P(n)])),d.value=l.resolvedArgs._fetchedAt||null,u.value=!1,!0):!1}function v(t){return t?parseFloat(t)/100:0}function E(t){if(!t)return 0;const s=t.match(/(\d+)m/),n=t.match(/(\d+)s/);return(s?parseInt(s[1])*60:0)+(n?parseInt(n[1]):0)}function P(t){return!t||t==="N/A"?null:parseFloat(t.replace("+",""))}async function R(){const{startDate:t,endDate:s}=l.resolvedArgs||{};u.value=!0,c.value=null;try{const n=new URLSearchParams;t&&n.set("startDate",t),s&&n.set("endDate",s);const r=await N.get(`/report?${n.toString()}`);a.value=r.totals||{},i.value=r.changes||{},d.value=new Date().toISOString(),h({period:x.value,totalUsers:Math.round(a.value.totalUsers||0),sessions:Math.round(a.value.sessions||0),pageViews:Math.round(a.value.screenPageViews||0),newUsers:Math.round(a.value.newUsers||0),bounceRate:`${(a.value.bounceRate*100).toFixed(1)}%`,avgSessionDuration:y(a.value.averageSessionDuration),engagementRate:`${(a.value.engagementRate*100).toFixed(1)}%`,pagesPerSession:(a.value.screenPageViewsPerSession||0).toFixed(1),changes:Object.fromEntries(Object.entries(i.value).map(([A,p])=>[A,p!==null?`${p>0?"+":""}${p.toFixed(1)}%`:"N/A"]))})}catch(n){c.value=n?.data?.statusMessage||n?.message||"Failed to load visitor stats",h(`Error loading visitor stats: ${c.value}`)}finally{u.value=!1}}e.onMounted(()=>{l.status==="completed"&&B()||R()});function h(t){l.status!=="completed"&&V("submit",t)}const x=e.computed(()=>{const{startDate:t,endDate:s}=l.resolvedArgs||{};if(!t&&!s)return"Last 30 days";const n=t||"30daysAgo",r=n.match(/^(\d+)daysAgo$/);return n==="yesterday"&&(!s||s==="yesterday")?"Yesterday":r?`Last ${r[1]} days`:`${n} → ${s||"today"}`}),y=t=>{if(!t)return"0s";const s=Math.floor(t/60),n=Math.round(t%60);return s>0?`${s}m ${n}s`:`${n}s`},m=t=>t==null?"0":Math.round(t).toLocaleString(),k=t=>t==null?"0%":`${(t*100).toFixed(1)}%`,U=t=>t?new Date(t).toLocaleString(void 0,{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}):"",g=(t,s=!1)=>{if(t==null)return"text-muted-foreground";const n=s?t<0:t>0,r=s?t>0:t<0;return n?"text-emerald-600 dark:text-emerald-400":r?"text-red-600 dark:text-red-400":"text-muted-foreground"},b=t=>t==null?null:`${t>0?"+":""}${t.toFixed(1)}%`,$=e.computed(()=>[{label:"Users",value:m(a.value.totalUsers),change:i.value.totalUsers,icon:o.Users},{label:"Sessions",value:m(a.value.sessions),change:i.value.sessions,icon:o.MousePointerClick},{label:"Page Views",value:m(a.value.screenPageViews),change:i.value.screenPageViews,icon:o.Eye},{label:"New Users",value:m(a.value.newUsers),change:i.value.newUsers,icon:o.Users},{label:"Bounce Rate",value:k(a.value.bounceRate),change:i.value.bounceRate,inverted:!0,icon:o.ArrowDownRight},{label:"Engagement",value:k(a.value.engagementRate),change:i.value.engagementRate,icon:o.Timer},{label:"Avg Duration",value:y(a.value.averageSessionDuration),change:i.value.averageSessionDuration,icon:o.Timer},{label:"Pages/Session",value:(a.value.screenPageViewsPerSession||0).toFixed(1),change:i.value.screenPageViewsPerSession,icon:o.Eye}]);return(t,s)=>{const n=e.resolveComponent("NuxtLink");return e.openBlock(),e.createElementBlock("div",C,[e.unref(u)?(e.openBlock(),e.createElementBlock("div",M,[e.createVNode(e.unref(o.Loader2),{class:"size-4 animate-spin text-muted-foreground"}),s[0]||(s[0]=e.createElementVNode("span",{class:"text-xs text-muted-foreground"},"Loading visitor statistics…",-1))])):e.unref(c)?(e.openBlock(),e.createElementBlock("div",F,e.toDisplayString(e.unref(c)),1)):(e.openBlock(),e.createElementBlock("div",L,[e.createElementVNode("div",z,[e.createElementVNode("div",j,[e.createVNode(e.unref(o.BarChart3),{class:"size-3.5 text-primary"}),s[1]||(s[1]=e.createElementVNode("span",{class:"text-xs font-medium"},"Visitor Statistics",-1))]),e.createElementVNode("span",T,e.toDisplayString(e.unref(x)),1)]),e.createElementVNode("div",I,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref($),r=>(e.openBlock(),e.createElementBlock("div",{key:r.label,class:"px-3 py-3 space-y-1"},[e.createElementVNode("div",O,[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(r.icon),{class:"size-3 text-muted-foreground"})),e.createElementVNode("span",q,e.toDisplayString(r.label),1)]),e.createElementVNode("p",K,e.toDisplayString(r.value),1),b(r.change)?(e.openBlock(),e.createElementBlock("div",Y,[(r.change??0)>0?(e.openBlock(),e.createBlock(e.unref(o.ArrowUpRight),{key:0,class:e.normalizeClass(["size-2.5",g(r.change,r.inverted)])},null,8,["class"])):(r.change??0)<0?(e.openBlock(),e.createBlock(e.unref(o.ArrowDownRight),{key:1,class:e.normalizeClass(["size-2.5",g(r.change,r.inverted)])},null,8,["class"])):(e.openBlock(),e.createBlock(e.unref(o.Minus),{key:2,class:"size-2.5 text-muted-foreground"})),e.createElementVNode("span",{class:e.normalizeClass(["text-[10px] font-medium",g(r.change,r.inverted)])},e.toDisplayString(b(r.change)),3)])):e.createCommentVNode("",!0)]))),128))]),e.createElementVNode("div",G,[e.unref(d)?(e.openBlock(),e.createElementBlock("span",H," Fetched "+e.toDisplayString(U(e.unref(d))),1)):e.createCommentVNode("",!0),e.createVNode(n,{to:`/projects/${e.unref(D)}/modules/${f.instanceId}`,class:"inline-flex items-center gap-1.5 text-xs text-primary hover:underline"},{default:e.withCtx(()=>[e.createVNode(e.unref(o.ExternalLink),{class:"size-3"}),s[2]||(s[2]=e.createTextVNode(" View full report ",-1))]),_:1},8,["to"])])]))])}}});exports.default=J;
|
|
@@ -1,21 +1,22 @@
|
|
|
1
1
|
import { defineComponent as H, computed as w, ref as m, onMounted as J, resolveComponent as K, openBlock as o, createElementBlock as c, unref as r, createVNode as h, createElementVNode as l, toDisplayString as d, Fragment as Q, renderList as W, createBlock as x, resolveDynamicComponent as X, normalizeClass as _, createCommentVNode as U, withCtx as Z, createTextVNode as ee } from "vue";
|
|
2
2
|
import { Users as A, MousePointerClick as te, Eye as F, ArrowDownRight as M, Timer as C, Loader2 as se, BarChart3 as ne, ArrowUpRight as ae, Minus as re, ExternalLink as oe } from "lucide-vue-next";
|
|
3
|
-
|
|
3
|
+
import { useRoute as ie, useModuleApi as le } from "@oneclick.dev/cms-kit";
|
|
4
|
+
const ce = { class: "w-full" }, ue = {
|
|
4
5
|
key: 0,
|
|
5
6
|
class: "flex items-center gap-2 py-3"
|
|
6
|
-
},
|
|
7
|
+
}, de = {
|
|
7
8
|
key: 1,
|
|
8
9
|
class: "text-xs text-destructive py-2"
|
|
9
|
-
},
|
|
10
|
+
}, ge = {
|
|
10
11
|
key: 2,
|
|
11
12
|
class: "rounded-xl border bg-background overflow-hidden"
|
|
12
|
-
},
|
|
13
|
+
}, me = { class: "px-3 py-2 border-b bg-muted/40 flex items-center justify-between" }, ve = { class: "flex items-center gap-2" }, pe = { class: "text-[10px] text-muted-foreground" }, fe = { class: "grid grid-cols-2 sm:grid-cols-4 divide-x divide-y" }, he = { class: "flex items-center gap-1.5" }, xe = { class: "text-[10px] text-muted-foreground uppercase tracking-wide" }, ye = { class: "text-sm font-semibold" }, be = {
|
|
13
14
|
key: 0,
|
|
14
15
|
class: "flex items-center gap-0.5"
|
|
15
|
-
},
|
|
16
|
+
}, we = { class: "px-3 py-2 border-t bg-muted/20 flex items-center justify-between" }, _e = {
|
|
16
17
|
key: 0,
|
|
17
18
|
class: "text-[10px] text-muted-foreground"
|
|
18
|
-
},
|
|
19
|
+
}, ke = /* @__PURE__ */ H({
|
|
19
20
|
__name: "VisitorStatsCard",
|
|
20
21
|
props: {
|
|
21
22
|
toolName: {},
|
|
@@ -27,7 +28,7 @@ const ie = { class: "w-full" }, le = {
|
|
|
27
28
|
},
|
|
28
29
|
emits: ["submit"],
|
|
29
30
|
setup(S, { emit: L }) {
|
|
30
|
-
const u = S, N = L, j =
|
|
31
|
+
const u = S, N = L, j = ie(), z = w(() => j.params.slug), E = le(u.instanceId), v = m(!0), g = m(null), a = m({}), i = m({}), p = m(null);
|
|
31
32
|
function I() {
|
|
32
33
|
const e = u.resolvedArgs?._cachedData;
|
|
33
34
|
return e ? (a.value = {
|
|
@@ -112,29 +113,29 @@ const ie = { class: "w-full" }, le = {
|
|
|
112
113
|
]);
|
|
113
114
|
return (e, t) => {
|
|
114
115
|
const s = K("NuxtLink");
|
|
115
|
-
return o(), c("div",
|
|
116
|
-
r(v) ? (o(), c("div",
|
|
116
|
+
return o(), c("div", ce, [
|
|
117
|
+
r(v) ? (o(), c("div", ue, [
|
|
117
118
|
h(r(se), { class: "size-4 animate-spin text-muted-foreground" }),
|
|
118
119
|
t[0] || (t[0] = l("span", { class: "text-xs text-muted-foreground" }, "Loading visitor statistics…", -1))
|
|
119
|
-
])) : r(g) ? (o(), c("div",
|
|
120
|
-
l("div",
|
|
121
|
-
l("div",
|
|
120
|
+
])) : r(g) ? (o(), c("div", de, d(r(g)), 1)) : (o(), c("div", ge, [
|
|
121
|
+
l("div", me, [
|
|
122
|
+
l("div", ve, [
|
|
122
123
|
h(r(ne), { class: "size-3.5 text-primary" }),
|
|
123
124
|
t[1] || (t[1] = l("span", { class: "text-xs font-medium" }, "Visitor Statistics", -1))
|
|
124
125
|
]),
|
|
125
|
-
l("span",
|
|
126
|
+
l("span", pe, d(r(k)), 1)
|
|
126
127
|
]),
|
|
127
|
-
l("div",
|
|
128
|
+
l("div", fe, [
|
|
128
129
|
(o(!0), c(Q, null, W(r(q), (n) => (o(), c("div", {
|
|
129
130
|
key: n.label,
|
|
130
131
|
class: "px-3 py-3 space-y-1"
|
|
131
132
|
}, [
|
|
132
|
-
l("div",
|
|
133
|
+
l("div", he, [
|
|
133
134
|
(o(), x(X(n.icon), { class: "size-3 text-muted-foreground" })),
|
|
134
|
-
l("span",
|
|
135
|
+
l("span", xe, d(n.label), 1)
|
|
135
136
|
]),
|
|
136
|
-
l("p",
|
|
137
|
-
R(n.change) ? (o(), c("div",
|
|
137
|
+
l("p", ye, d(n.value), 1),
|
|
138
|
+
R(n.change) ? (o(), c("div", be, [
|
|
138
139
|
(n.change ?? 0) > 0 ? (o(), x(r(ae), {
|
|
139
140
|
key: 0,
|
|
140
141
|
class: _(["size-2.5", y(n.change, n.inverted)])
|
|
@@ -151,8 +152,8 @@ const ie = { class: "w-full" }, le = {
|
|
|
151
152
|
])) : U("", !0)
|
|
152
153
|
]))), 128))
|
|
153
154
|
]),
|
|
154
|
-
l("div",
|
|
155
|
-
r(p) ? (o(), c("span",
|
|
155
|
+
l("div", we, [
|
|
156
|
+
r(p) ? (o(), c("span", _e, " Fetched " + d(Y(r(p))), 1)) : U("", !0),
|
|
156
157
|
h(s, {
|
|
157
158
|
to: `/projects/${r(z)}/modules/${S.instanceId}`,
|
|
158
159
|
class: "inline-flex items-center gap-1.5 text-xs text-primary hover:underline"
|
|
@@ -170,5 +171,5 @@ const ie = { class: "w-full" }, le = {
|
|
|
170
171
|
}
|
|
171
172
|
});
|
|
172
173
|
export {
|
|
173
|
-
|
|
174
|
+
ke as default
|
|
174
175
|
};
|
package/dist/index.cjs.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("@oneclick.dev/cms-kit"),t={name:"Table",description:"Manage tables and structured data.",icon:"mdi-table",version:"1.0.0"},o=e.defineModuleConfig({getItems:{label:"Fetch items",type:"flow"},viewable:{label:"Viewable",type:"checkbox",default:!1},editable:{label:"Editable",type:"checkbox",default:!1},deletable:{label:"Deletable",type:"checkbox",default:!1},addable:{label:"Addable",type:"checkbox",default:!1},searchable:{label:"Searchable",type:"checkbox",default:!1},downloadable:{label:"Downloadable",type:"checkbox",default:!1},allowBulkActions:{label:"Allow Bulk Actions",type:"checkbox",default:!1}}),r=[{path:"",component:()=>Promise.resolve().then(()=>require("./TableView-DD3y_PZ3.js"))}],n=[],i={component:()=>Promise.resolve().then(()=>require("./index-DFQGVHTs.js")),metadata:t,config:o,routes:r,permissions:n},a={name:"Products",description:"Manage products",icon:"mdi-table",version:"1.0.0"},s=e.defineModuleConfig({project:{label:"Database",type:"resource",accept:["FIREBASE"]},productCollection:{label:"Product Collection",type:"input",default:"products"},collectionsCollection:{label:"Collections Collection",type:"input",default:"public/e-commerce:collections"},allowedMediaSources:{label:"Allowed Media Sources",type:"mediaSource",multiple:!0},defaultUploadMediaSource:{label:"Default Upload Media Source",type:"mediaSource",multiple:!1},previewUrl:{label:"Preview URL",type:"input",default:"https://preview.com/shop/{{slug}}"}}),c=[{path:"",component:()=>Promise.resolve().then(()=>require("./Overview-B-8TLLjh.js"))},{path:"/:productId",component:()=>Promise.resolve().then(()=>require("./Detail-BcboL7NF.js"))},{path:"/new",component:()=>Promise.resolve().then(()=>require("./Detail-BcboL7NF.js"))}],p=[{key:"create-product",name:"Create product",description:"Team member can create a new product"},{key:"edit-product",name:"Edit product",description:"Team member can edit a product"},{key:"delete-product",name:"Delete product",description:"Team member can delete a product"}],l=[{name:"getEmptyStock",description:"Get a list of products with empty stock.",executionMode:"api",parameters:{type:"object",properties:{category:{type:"string",description:"Category of the product"}},required:["category"]}},{name:"viewProductDetails",description:"Show a card in chat with details of a product based on product ID.",executionMode:"component",chatComponent:"ProductDetailsCard",parameters:{type:"object",properties:{productId:{type:"string",description:"ID of the product"}},required:["productId"]}}],d={component:()=>Promise.resolve().then(()=>require("./index-R2oUDsjx.js")),metadata:a,config:s,routes:c,permissions:p,tools:l,chatComponents:{ProductDetailsCard:()=>Promise.resolve().then(()=>require("./ProductDetailsCard-BwktdlIf.js"))}},m={name:"Custom",description:"Custom module",icon:"mdi-table",version:"1.0.0"},u=e.defineModuleConfig({formLayout:{label:"Design View",type:"form"}}),h=[{path:"",component:()=>Promise.resolve().then(()=>require("./View-DfzaVOzS.js"))}],f=[],g={component:()=>Promise.resolve().then(()=>require("./index-CSxYBeVA.js")),metadata:m,config:u,routes:h,permissions:f},y={name:"Promo Codes",description:"Create and manage promo codes",icon:"mdi-table",version:"1.0.0"},b=e.defineModuleConfig({project:{label:"Project",type:"resource",accept:["FIREBASE"]},promoCodeCollection:{label:"Promo Code Collection",type:"input",default:"promo-codes"}}),v=[{path:"",component:()=>Promise.resolve().then(()=>require("./Create-CRn2sMHp.js"))},{path:"/promo-codes",component:()=>Promise.resolve().then(()=>require("./Find-Ds6OvuH6.js"))},{path:"/promo-codes/:promoCodeId",component:()=>Promise.resolve().then(()=>require("./Detail-Bxi7lG9x.js"))}],C=[{key:"create-promo-codes",name:"Create promo codes",description:"Team member can create promo codes"},{key:"view-promo-codes",name:"View promo codes",description:"Team member can view promo codes"},{key:"delete-promo-codes",name:"Delete promo codes",description:"Team member can delete promo codes"}],w={component:()=>Promise.resolve().then(()=>require("./index-CkiNvRzs.js")),metadata:y,config:b,routes:v,permissions:C},P={name:"Product Collections",description:"Manage product collections",icon:"mdi-table",version:"1.0.0"},q=e.defineModuleConfig({project:{label:"Project",type:"resource",accept:["FIREBASE"]},collectionsCollection:{label:"Collections Collection",type:"input",default:"public/e-commerce:collections"},allowedMediaSources:{label:"Allowed Media Sources",type:"mediaSource",multiple:!0},defaultUploadMediaSource:{label:"Default Upload Media Source",type:"mediaSource",multiple:!1}}),D=[{path:"",component:()=>Promise.resolve().then(()=>require("./Overview-T-lsy3UZ.js"))},{path:"/:collectionId",component:()=>Promise.resolve().then(()=>require("./Detail-CnK-qbhE.js"))},{path:"/new",component:()=>Promise.resolve().then(()=>require("./Detail-CnK-qbhE.js"))}],S=[{key:"create-collection",name:"Create product collection",description:"Team member can create a new product collection"},{key:"edit-collection",name:"Edit product collection",description:"Team member can edit a product collection"},{key:"delete-collection",name:"Delete product collection",description:"Team member can delete a product collection"}],k={component:()=>Promise.resolve().then(()=>require("./index-CwqrAU-H.js")),metadata:P,config:q,routes:D,permissions:S},M={name:"Shipping Options",description:"Manage shipping options",icon:"mdi-table",version:"1.0.0"},A=e.defineModuleConfig({project:{label:"Project",type:"resource",accept:["FIREBASE"]},shippingOptionsCollection:{label:"Shipping Options Collection",type:"input",default:"public/e-commerce:shipping-options"}}),$=[{path:"",component:()=>Promise.resolve().then(()=>require("./Overview-BbvfH1u-.js"))},{path:"/:optionId",component:()=>Promise.resolve().then(()=>require("./Detail-BayNaAg9.js"))},{path:"/new",component:()=>Promise.resolve().then(()=>require("./Detail-BayNaAg9.js"))}],T=[{key:"create-option",name:"Create shipping option",description:"Team member can create a new shipping option"},{key:"edit-option",name:"Edit shipping option",description:"Team member can edit a shipping option"},{key:"delete-option",name:"Delete shipping option",description:"Team member can delete a shipping option"}],x={component:()=>Promise.resolve().then(()=>require("./index-Co4ON2Di.js")),metadata:M,config:A,routes:$,permissions:T},E={name:"Google Analytics",description:"Configure Google Analytics settings.",icon:"mdi-google-analytics",version:"1.0.0"},I=e.defineModuleConfig({serviceAccount:{label:"Google Service Account",type:"resource",accept:["GOOGLE_SERVICE_ACCOUNT"]},propertyId:{label:"GA4 Property ID",type:"input",default:""},siteUrl:{label:"Search Console Site URL",type:"input",default:"",placeholder:"https://example.com or sc-domain:example.com",description:"Optional. When set, the module will fetch real keyword data from Google Search Console. Use the same site URL format as shown in Search Console."}}),j=[{path:"",component:()=>Promise.resolve().then(()=>require("./Overview-pCO_47Zt.js"))},{path:"/acquisition",component:()=>Promise.resolve().then(()=>require("./Acquisition-_-cq972V.js"))},{path:"/content",component:()=>Promise.resolve().then(()=>require("./Content-C-4Cdniz.js"))},{path:"/audience",component:()=>Promise.resolve().then(()=>require("./Audience-QnFQs93n.js"))},{path:"/seo",component:()=>Promise.resolve().then(()=>require("./SeoHealth-EZzDmPDM.js"))}],U=[],Y=[{name:"getTopPages",description:"Show a card in chat with the most popular/visited pages on the website for a given period.",executionMode:"component",chatComponent:"TopPagesCard",parameters:{type:"object",properties:{startDate:{type:"string",description:"Start date for the report. Use relative formats like 'yesterday', '7daysAgo', '30daysAgo', '90daysAgo', '365daysAgo' or exact dates 'YYYY-MM-DD'. Default: '30daysAgo'"},endDate:{type:"string",description:"End date for the report. Use 'today', 'yesterday', or exact dates 'YYYY-MM-DD'. Default: 'today'"},limit:{type:"number",description:"Number of pages to show. Default: 10, max: 50",default:10}},required:[]}},{name:"getVisitorStats",description:"Show a card in chat with visitor/traffic statistics (sessions, users, page views, bounce rate, etc.) for a given period. Use this when the user asks about traffic, visitors, how many people visited, etc.",executionMode:"component",chatComponent:"VisitorStatsCard",parameters:{type:"object",properties:{startDate:{type:"string",description:"Start date for the report. Use 'yesterday' for yesterday, '7daysAgo' for last week, '30daysAgo' for last month, '90daysAgo' for last quarter, '365daysAgo' for last year, or exact 'YYYY-MM-DD'. Default: '30daysAgo'"},endDate:{type:"string",description:"End date for the report. Use 'today', 'yesterday', or exact 'YYYY-MM-DD'. Default: 'today'"}},required:[]}},{name:"getSearchTerms",description:"Show a card in chat with search terms/keywords that bring visitors to the website. Use this when the user asks about keywords, SEO terms, what people search for, or search queries.",executionMode:"component",chatComponent:"SearchTermsCard",parameters:{type:"object",properties:{startDate:{type:"string",description:"Start date for the report. Default: '30daysAgo'"},endDate:{type:"string",description:"End date for the report. Default: 'today'"}},required:[]}},{name:"getTrafficSources",description:"Show a card in chat with where website visitors are coming from (traffic sources, channels, referrals). Use this when the user asks about traffic sources, where visitors come from, referrals, channels, etc.",executionMode:"component",chatComponent:"TrafficSourcesCard",parameters:{type:"object",properties:{startDate:{type:"string",description:"Start date for the report. Default: '30daysAgo'"},endDate:{type:"string",description:"End date for the report. Default: 'today'"}},required:[]}},{name:"getRealtimeVisitors",description:"Show a card in chat with the current real-time active visitors on the website right now.",executionMode:"component",chatComponent:"RealtimeCard",parameters:{type:"object",properties:{},required:[]}},{name:"getCountryBreakdown",description:"Show a card in chat with a geographic breakdown of where website visitors are located. Use this when the user asks about visitor countries, geographic distribution, or where their audience is from.",executionMode:"component",chatComponent:"CountryBreakdownCard",parameters:{type:"object",properties:{startDate:{type:"string",description:"Start date for the report. Default: '30daysAgo'"},endDate:{type:"string",description:"End date for the report. Default: 'today'"}},required:[]}},{name:"getDeviceBreakdown",description:"Show a card in chat with a device breakdown (desktop, mobile, tablet) of website visitors. Use this when the user asks about what devices people use, mobile vs desktop traffic, or if their site is mobile-friendly.",executionMode:"component",chatComponent:"DeviceBreakdownCard",parameters:{type:"object",properties:{startDate:{type:"string",description:"Start date for the report. Default: '30daysAgo'"},endDate:{type:"string",description:"End date for the report. Default: 'today'"}},required:[]}},{name:"getPeakHours",description:"Show a card in chat with peak traffic hours and a weekly heatmap showing when visitors are most active. Use this when the user asks about best times to post, peak hours, busiest times, or when their audience is online.",executionMode:"component",chatComponent:"PeakHoursCard",parameters:{type:"object",properties:{startDate:{type:"string",description:"Start date for the report. Default: '30daysAgo'"},endDate:{type:"string",description:"End date for the report. Default: 'today'"}},required:[]}}],R={component:()=>Promise.resolve().then(()=>require("./index-DwHYfZl_.js")),metadata:E,config:I,routes:j,permissions:U,tools:Y,chatComponents:{TopPagesCard:()=>Promise.resolve().then(()=>require("./TopPagesCard-pZ-nAsaI.js")),VisitorStatsCard:()=>Promise.resolve().then(()=>require("./VisitorStatsCard-tApB_7v8.js")),SearchTermsCard:()=>Promise.resolve().then(()=>require("./SearchTermsCard-DGRbo5ZP.js")),TrafficSourcesCard:()=>Promise.resolve().then(()=>require("./TrafficSourcesCard-CBOPV1J1.js")),RealtimeCard:()=>Promise.resolve().then(()=>require("./RealtimeCard-CxtqQHee.js")),CountryBreakdownCard:()=>Promise.resolve().then(()=>require("./CountryBreakdownCard-BUfJ-umQ.js")),DeviceBreakdownCard:()=>Promise.resolve().then(()=>require("./DeviceBreakdownCard-CsoK6JUO.js")),PeakHoursCard:()=>Promise.resolve().then(()=>require("./PeakHoursCard-BNl_U1r_.js"))}},B={name:"Content Manager",description:"Create and manage content",icon:"mdi-table",version:"1.0.0"},O=e.defineModuleConfig({project:{label:"Database",type:"resource",accept:["FIREBASE"]},domain:{label:"Domain",type:"input",default:"https://domain.com"},collectionsCollection:{label:"Collections Collection",type:"input",default:"content_collections"},contentCollection:{label:"Content Collection",type:"input",default:"content"},allowedMediaSources:{label:"Allowed Media Sources",type:"mediaSource",multiple:!0},defaultUploadMediaSource:{label:"Default Upload Media Source",type:"mediaSource",multiple:!1},supportedLanguages:{label:"Supported Languages",type:"select",predefinedOptions:"languages",multiple:!0},defaultLanguage:{label:"Default Language",type:"select",predefinedOptions:"languages"}}),L=[{path:"",component:()=>Promise.resolve().then(()=>require("./Overview-CwCAeBnX.js"))},{path:"/collections",component:()=>Promise.resolve().then(()=>require("./Overview-CwCAeBnX.js"))},{path:"/collections/:collectionId",component:()=>Promise.resolve().then(()=>require("./Entries-BPkZ7Jg5.js"))},{path:"/collections/:collectionId/:entryId",component:()=>Promise.resolve().then(()=>require("./ContentEditor-3JFlC9N1.js"))},{path:"/components",component:()=>Promise.resolve().then(()=>require("./Components-DXbx0RLV.js"))},{path:"/global-styling",component:()=>Promise.resolve().then(()=>require("./GlobalStyling-CnSlXkZc.js"))}],G=[{key:"create-content",name:"Create content",description:"Team member can create content"},{key:"edit-content",name:"Edit content",description:"Team member can edit content"},{key:"delete-content",name:"Delete content",description:"Team member can delete content"}],F={component:()=>Promise.resolve().then(()=>require("./index-UtjLbLw-.js")),metadata:B,config:O,routes:L,permissions:G},V={name:"Mail Templates",description:"Build templates for your transactional emails.",icon:"mdi-table",version:"1.0.0"},N=e.defineModuleConfig({project:{label:"Project",type:"resource",accept:["FIREBASE"]},templateCollection:{label:"Mail Templates Collection",type:"input",default:"mail-templates"}}),_=[{path:"",component:()=>Promise.resolve().then(()=>require("./Overview-BDlBCUI_.js"))},{path:"/:optionId",component:()=>Promise.resolve().then(()=>require("./Detail-mvSGbnFU.js"))},{path:"/new",component:()=>Promise.resolve().then(()=>require("./Detail-mvSGbnFU.js"))}],H=[{key:"create-template",name:"Create mail template",description:"Team member can create a new mail template"},{key:"edit-template",name:"Edit mail template",description:"Team member can edit a mail template"},{key:"delete-template",name:"Delete mail template",description:"Team member can delete a mail template"}],K={component:()=>Promise.resolve().then(()=>require("./index-Cz-baGax.js")),metadata:V,config:N,routes:_,permissions:H},W={name:"Appointments",description:"Create and manage agendas for booking appointments.",icon:"mdi-table",version:"1.0.0"},z=e.defineModuleConfig({project:{label:"Project",type:"resource",accept:["FIREBASE"]},mailAccount:{label:"Mail account",type:"resource",accept:["GMAIL"]},agendaCollection:{label:"Agenda Collection",type:"input",default:"agendas"},reservationsCollection:{label:"Reservations Collection",type:"input",default:"bookings_orders"},reservedSpotsCollection:{label:"Reserved Spots Collection",type:"input",default:"reserved_spots"}}),J=[{path:"",component:()=>Promise.resolve().then(()=>require("./Overview-t0pG5xjA.js"))},{path:"/create",component:()=>Promise.resolve().then(()=>require("./index-D2a6wEPh.js"))},{path:"/create/regular",component:()=>Promise.resolve().then(()=>require("./regular-1LXNPviB.js"))},{path:"/edit/:id",component:()=>Promise.resolve().then(()=>require("./index-DTzdHh6g.js"))},{path:"/edit/:id/agenda",component:()=>Promise.resolve().then(()=>require("./agenda-wNFDKn0G.js"))},{path:"/edit/:id/regular-slots",component:()=>Promise.resolve().then(()=>require("./regular-slots-Bs3WJB3U.js"))},{path:"/edit/:id/exceptions",component:()=>Promise.resolve().then(()=>require("./exceptions-wEQEVzIs.js"))},{path:"/edit/:id/availability",component:()=>Promise.resolve().then(()=>require("./availability-BiBbzEIM.js"))},{path:"/edit/:id/payment",component:()=>Promise.resolve().then(()=>require("./payment-BQaAqQ5q.js"))},{path:"/edit/:id/resources",component:()=>Promise.resolve().then(()=>require("./resources-eb0pivDL.js"))},{path:"/edit/:id/orders",component:()=>Promise.resolve().then(()=>require("./orders-D5GJOZXN.js"))}],Q=[{key:"create-agendas",name:"Create agendas",description:"Team member can create agendas"},{key:"edit-agendas",name:"Edit agendas",description:"Team member can edit agendas"},{key:"delete-agendas",name:"Delete agendas",description:"Team member can delete agendas"},{key:"manage-reservations",name:"Manage reservations",description:"Team member can create, edit, and delete reservations"}],X=[{name:"findAppointment",description:"Show a card in chat with details of an appointment/booking/reservation/...",executionMode:"component",chatComponent:"AppointmentDetailsCard",parameters:{type:"object",properties:{name:{type:"string",description:"Name of the booker"},email:{type:"string",description:"Email of the booker"},date:{type:"string",description:"Date of the appointment (YYYY-MM-DD)"}},required:["date"]}},{name:"getRecentAppointments",description:"Show a table in chat with recent appointments, default loading the latest 20 appointments.",executionMode:"component",chatComponent:"AppointmentListTable",parameters:{type:"object",properties:{quantity:{type:"number",description:"Number of appointments to load. default: 20 max: 100",default:20}},required:["quantity"]}},{name:"changeAppointmentDetails",description:"Show a card in chat where user can edit name, email and date of an existing appointment.",executionMode:"component",chatComponent:"AppointmentEditor",parameters:{type:"object",properties:{orderId:{type:"string",description:"ID of the order / appointment. This is NOT the reservation ID."}},required:["orderId"]}}],Z={component:()=>Promise.resolve().then(()=>require("./index-9HVlmvK3.js")),metadata:W,config:z,routes:J,permissions:Q,tools:X,chatComponents:{AppointmentDetailsCard:()=>Promise.resolve().then(()=>require("./AppointmentDetailsCard-CtK0Cj_O.js")),AppointmentListTable:()=>Promise.resolve().then(()=>require("./AppointmentListTable-CQ3uXfa8.js")),AppointmentEditor:()=>Promise.resolve().then(()=>require("./AppointmentEditor-CaTfbkIf.js"))}};exports.appointments=Z;exports.contentManager=F;exports.custom=g;exports.googleAnalytics=R;exports.mailTemplates=K;exports.productCollections=k;exports.products=d;exports.promoCodes=w;exports.shippingOptions=x;exports.table=i;
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("@oneclick.dev/cms-kit"),t={name:"Table",description:"Manage tables and structured data.",icon:"mdi-table",version:"1.0.0"},o=e.defineModuleConfig({getItems:{label:"Fetch items",type:"flow"},viewable:{label:"Viewable",type:"checkbox",default:!1},editable:{label:"Editable",type:"checkbox",default:!1},deletable:{label:"Deletable",type:"checkbox",default:!1},addable:{label:"Addable",type:"checkbox",default:!1},searchable:{label:"Searchable",type:"checkbox",default:!1},downloadable:{label:"Downloadable",type:"checkbox",default:!1},allowBulkActions:{label:"Allow Bulk Actions",type:"checkbox",default:!1}}),r=[{path:"",component:()=>Promise.resolve().then(()=>require("./TableView-DD3y_PZ3.js"))}],n=[],i={component:()=>Promise.resolve().then(()=>require("./index-DFQGVHTs.js")),metadata:t,config:o,routes:r,permissions:n},a={name:"Products",description:"Manage products",icon:"mdi-table",version:"1.0.0"},s=e.defineModuleConfig({project:{label:"Database",type:"resource",accept:["FIREBASE"]},productCollection:{label:"Product Collection",type:"input",default:"products"},collectionsCollection:{label:"Collections Collection",type:"input",default:"public/e-commerce:collections"},allowedMediaSources:{label:"Allowed Media Sources",type:"mediaSource",multiple:!0},defaultUploadMediaSource:{label:"Default Upload Media Source",type:"mediaSource",multiple:!1},previewUrl:{label:"Preview URL",type:"input",default:"https://preview.com/shop/{{slug}}"}}),c=[{path:"",component:()=>Promise.resolve().then(()=>require("./Overview-B-8TLLjh.js"))},{path:"/:productId",component:()=>Promise.resolve().then(()=>require("./Detail-BcboL7NF.js"))},{path:"/new",component:()=>Promise.resolve().then(()=>require("./Detail-BcboL7NF.js"))}],p=[{key:"create-product",name:"Create product",description:"Team member can create a new product"},{key:"edit-product",name:"Edit product",description:"Team member can edit a product"},{key:"delete-product",name:"Delete product",description:"Team member can delete a product"}],l=[{name:"getEmptyStock",description:"Get a list of products with empty stock.",executionMode:"api",parameters:{type:"object",properties:{category:{type:"string",description:"Category of the product"}},required:["category"]}},{name:"viewProductDetails",description:"Show a card in chat with details of a product based on product ID.",executionMode:"component",chatComponent:"ProductDetailsCard",parameters:{type:"object",properties:{productId:{type:"string",description:"ID of the product"}},required:["productId"]}}],d={component:()=>Promise.resolve().then(()=>require("./index-R2oUDsjx.js")),metadata:a,config:s,routes:c,permissions:p,tools:l,chatComponents:{ProductDetailsCard:()=>Promise.resolve().then(()=>require("./ProductDetailsCard-Ce11f_9r.js"))}},m={name:"Custom",description:"Custom module",icon:"mdi-table",version:"1.0.0"},u=e.defineModuleConfig({formLayout:{label:"Design View",type:"form"}}),h=[{path:"",component:()=>Promise.resolve().then(()=>require("./View-DfzaVOzS.js"))}],f=[],g={component:()=>Promise.resolve().then(()=>require("./index-CSxYBeVA.js")),metadata:m,config:u,routes:h,permissions:f},y={name:"Promo Codes",description:"Create and manage promo codes",icon:"mdi-table",version:"1.0.0"},b=e.defineModuleConfig({project:{label:"Project",type:"resource",accept:["FIREBASE"]},promoCodeCollection:{label:"Promo Code Collection",type:"input",default:"promo-codes"}}),v=[{path:"",component:()=>Promise.resolve().then(()=>require("./Create-CRn2sMHp.js"))},{path:"/promo-codes",component:()=>Promise.resolve().then(()=>require("./Find-Ds6OvuH6.js"))},{path:"/promo-codes/:promoCodeId",component:()=>Promise.resolve().then(()=>require("./Detail-Bxi7lG9x.js"))}],C=[{key:"create-promo-codes",name:"Create promo codes",description:"Team member can create promo codes"},{key:"view-promo-codes",name:"View promo codes",description:"Team member can view promo codes"},{key:"delete-promo-codes",name:"Delete promo codes",description:"Team member can delete promo codes"}],w={component:()=>Promise.resolve().then(()=>require("./index-CkiNvRzs.js")),metadata:y,config:b,routes:v,permissions:C},P={name:"Product Collections",description:"Manage product collections",icon:"mdi-table",version:"1.0.0"},q=e.defineModuleConfig({project:{label:"Project",type:"resource",accept:["FIREBASE"]},collectionsCollection:{label:"Collections Collection",type:"input",default:"public/e-commerce:collections"},allowedMediaSources:{label:"Allowed Media Sources",type:"mediaSource",multiple:!0},defaultUploadMediaSource:{label:"Default Upload Media Source",type:"mediaSource",multiple:!1}}),D=[{path:"",component:()=>Promise.resolve().then(()=>require("./Overview-T-lsy3UZ.js"))},{path:"/:collectionId",component:()=>Promise.resolve().then(()=>require("./Detail-CnK-qbhE.js"))},{path:"/new",component:()=>Promise.resolve().then(()=>require("./Detail-CnK-qbhE.js"))}],S=[{key:"create-collection",name:"Create product collection",description:"Team member can create a new product collection"},{key:"edit-collection",name:"Edit product collection",description:"Team member can edit a product collection"},{key:"delete-collection",name:"Delete product collection",description:"Team member can delete a product collection"}],k={component:()=>Promise.resolve().then(()=>require("./index-CwqrAU-H.js")),metadata:P,config:q,routes:D,permissions:S},M={name:"Shipping Options",description:"Manage shipping options",icon:"mdi-table",version:"1.0.0"},A=e.defineModuleConfig({project:{label:"Project",type:"resource",accept:["FIREBASE"]},shippingOptionsCollection:{label:"Shipping Options Collection",type:"input",default:"public/e-commerce:shipping-options"}}),$=[{path:"",component:()=>Promise.resolve().then(()=>require("./Overview-BbvfH1u-.js"))},{path:"/:optionId",component:()=>Promise.resolve().then(()=>require("./Detail-BayNaAg9.js"))},{path:"/new",component:()=>Promise.resolve().then(()=>require("./Detail-BayNaAg9.js"))}],T=[{key:"create-option",name:"Create shipping option",description:"Team member can create a new shipping option"},{key:"edit-option",name:"Edit shipping option",description:"Team member can edit a shipping option"},{key:"delete-option",name:"Delete shipping option",description:"Team member can delete a shipping option"}],x={component:()=>Promise.resolve().then(()=>require("./index-Co4ON2Di.js")),metadata:M,config:A,routes:$,permissions:T},E={name:"Google Analytics",description:"Configure Google Analytics settings.",icon:"mdi-google-analytics",version:"1.0.0"},I=e.defineModuleConfig({serviceAccount:{label:"Google Service Account",type:"resource",accept:["GOOGLE_SERVICE_ACCOUNT"]},propertyId:{label:"GA4 Property ID",type:"input",default:""},siteUrl:{label:"Search Console Site URL",type:"input",default:"",placeholder:"https://example.com or sc-domain:example.com",description:"Optional. When set, the module will fetch real keyword data from Google Search Console. Use the same site URL format as shown in Search Console."}}),j=[{path:"",component:()=>Promise.resolve().then(()=>require("./Overview-pCO_47Zt.js"))},{path:"/acquisition",component:()=>Promise.resolve().then(()=>require("./Acquisition-_-cq972V.js"))},{path:"/content",component:()=>Promise.resolve().then(()=>require("./Content-C-4Cdniz.js"))},{path:"/audience",component:()=>Promise.resolve().then(()=>require("./Audience-QnFQs93n.js"))},{path:"/seo",component:()=>Promise.resolve().then(()=>require("./SeoHealth-EZzDmPDM.js"))}],U=[],Y=[{name:"getTopPages",description:"Show a card in chat with the most popular/visited pages on the website for a given period.",executionMode:"component",chatComponent:"TopPagesCard",parameters:{type:"object",properties:{startDate:{type:"string",description:"Start date for the report. Use relative formats like 'yesterday', '7daysAgo', '30daysAgo', '90daysAgo', '365daysAgo' or exact dates 'YYYY-MM-DD'. Default: '30daysAgo'"},endDate:{type:"string",description:"End date for the report. Use 'today', 'yesterday', or exact dates 'YYYY-MM-DD'. Default: 'today'"},limit:{type:"number",description:"Number of pages to show. Default: 10, max: 50",default:10}},required:[]}},{name:"getVisitorStats",description:"Show a card in chat with visitor/traffic statistics (sessions, users, page views, bounce rate, etc.) for a given period. Use this when the user asks about traffic, visitors, how many people visited, etc.",executionMode:"component",chatComponent:"VisitorStatsCard",parameters:{type:"object",properties:{startDate:{type:"string",description:"Start date for the report. Use 'yesterday' for yesterday, '7daysAgo' for last week, '30daysAgo' for last month, '90daysAgo' for last quarter, '365daysAgo' for last year, or exact 'YYYY-MM-DD'. Default: '30daysAgo'"},endDate:{type:"string",description:"End date for the report. Use 'today', 'yesterday', or exact 'YYYY-MM-DD'. Default: 'today'"}},required:[]}},{name:"getSearchTerms",description:"Show a card in chat with search terms/keywords that bring visitors to the website. Use this when the user asks about keywords, SEO terms, what people search for, or search queries.",executionMode:"component",chatComponent:"SearchTermsCard",parameters:{type:"object",properties:{startDate:{type:"string",description:"Start date for the report. Default: '30daysAgo'"},endDate:{type:"string",description:"End date for the report. Default: 'today'"}},required:[]}},{name:"getTrafficSources",description:"Show a card in chat with where website visitors are coming from (traffic sources, channels, referrals). Use this when the user asks about traffic sources, where visitors come from, referrals, channels, etc.",executionMode:"component",chatComponent:"TrafficSourcesCard",parameters:{type:"object",properties:{startDate:{type:"string",description:"Start date for the report. Default: '30daysAgo'"},endDate:{type:"string",description:"End date for the report. Default: 'today'"}},required:[]}},{name:"getRealtimeVisitors",description:"Show a card in chat with the current real-time active visitors on the website right now.",executionMode:"component",chatComponent:"RealtimeCard",parameters:{type:"object",properties:{},required:[]}},{name:"getCountryBreakdown",description:"Show a card in chat with a geographic breakdown of where website visitors are located. Use this when the user asks about visitor countries, geographic distribution, or where their audience is from.",executionMode:"component",chatComponent:"CountryBreakdownCard",parameters:{type:"object",properties:{startDate:{type:"string",description:"Start date for the report. Default: '30daysAgo'"},endDate:{type:"string",description:"End date for the report. Default: 'today'"}},required:[]}},{name:"getDeviceBreakdown",description:"Show a card in chat with a device breakdown (desktop, mobile, tablet) of website visitors. Use this when the user asks about what devices people use, mobile vs desktop traffic, or if their site is mobile-friendly.",executionMode:"component",chatComponent:"DeviceBreakdownCard",parameters:{type:"object",properties:{startDate:{type:"string",description:"Start date for the report. Default: '30daysAgo'"},endDate:{type:"string",description:"End date for the report. Default: 'today'"}},required:[]}},{name:"getPeakHours",description:"Show a card in chat with peak traffic hours and a weekly heatmap showing when visitors are most active. Use this when the user asks about best times to post, peak hours, busiest times, or when their audience is online.",executionMode:"component",chatComponent:"PeakHoursCard",parameters:{type:"object",properties:{startDate:{type:"string",description:"Start date for the report. Default: '30daysAgo'"},endDate:{type:"string",description:"End date for the report. Default: 'today'"}},required:[]}}],R={component:()=>Promise.resolve().then(()=>require("./index-DwHYfZl_.js")),metadata:E,config:I,routes:j,permissions:U,tools:Y,chatComponents:{TopPagesCard:()=>Promise.resolve().then(()=>require("./TopPagesCard-BA9Are_Z.js")),VisitorStatsCard:()=>Promise.resolve().then(()=>require("./VisitorStatsCard-CAzAZtKD.js")),SearchTermsCard:()=>Promise.resolve().then(()=>require("./SearchTermsCard-BPAdRL-r.js")),TrafficSourcesCard:()=>Promise.resolve().then(()=>require("./TrafficSourcesCard-DV13ZOBq.js")),RealtimeCard:()=>Promise.resolve().then(()=>require("./RealtimeCard-CatAzdxv.js")),CountryBreakdownCard:()=>Promise.resolve().then(()=>require("./CountryBreakdownCard-Ghg0Wz-h.js")),DeviceBreakdownCard:()=>Promise.resolve().then(()=>require("./DeviceBreakdownCard-Cpcj75Rv.js")),PeakHoursCard:()=>Promise.resolve().then(()=>require("./PeakHoursCard-CFIg8dys.js"))}},B={name:"Content Manager",description:"Create and manage content",icon:"mdi-table",version:"1.0.0"},O=e.defineModuleConfig({project:{label:"Database",type:"resource",accept:["FIREBASE"]},domain:{label:"Domain",type:"input",default:"https://domain.com"},collectionsCollection:{label:"Collections Collection",type:"input",default:"content_collections"},contentCollection:{label:"Content Collection",type:"input",default:"content"},allowedMediaSources:{label:"Allowed Media Sources",type:"mediaSource",multiple:!0},defaultUploadMediaSource:{label:"Default Upload Media Source",type:"mediaSource",multiple:!1},supportedLanguages:{label:"Supported Languages",type:"select",predefinedOptions:"languages",multiple:!0},defaultLanguage:{label:"Default Language",type:"select",predefinedOptions:"languages"}}),L=[{path:"",component:()=>Promise.resolve().then(()=>require("./Overview-CwCAeBnX.js"))},{path:"/collections",component:()=>Promise.resolve().then(()=>require("./Overview-CwCAeBnX.js"))},{path:"/collections/:collectionId",component:()=>Promise.resolve().then(()=>require("./Entries-BPkZ7Jg5.js"))},{path:"/collections/:collectionId/:entryId",component:()=>Promise.resolve().then(()=>require("./ContentEditor-4e80zFyn.js"))},{path:"/components",component:()=>Promise.resolve().then(()=>require("./Components-DXbx0RLV.js"))},{path:"/global-styling",component:()=>Promise.resolve().then(()=>require("./GlobalStyling-CnSlXkZc.js"))}],G=[{key:"create-content",name:"Create content",description:"Team member can create content"},{key:"edit-content",name:"Edit content",description:"Team member can edit content"},{key:"delete-content",name:"Delete content",description:"Team member can delete content"}],F={component:()=>Promise.resolve().then(()=>require("./index-UtjLbLw-.js")),metadata:B,config:O,routes:L,permissions:G},V={name:"Mail Templates",description:"Build templates for your transactional emails.",icon:"mdi-table",version:"1.0.0"},N=e.defineModuleConfig({project:{label:"Project",type:"resource",accept:["FIREBASE"]},templateCollection:{label:"Mail Templates Collection",type:"input",default:"mail-templates"}}),_=[{path:"",component:()=>Promise.resolve().then(()=>require("./Overview-BDlBCUI_.js"))},{path:"/:optionId",component:()=>Promise.resolve().then(()=>require("./Detail-mvSGbnFU.js"))},{path:"/new",component:()=>Promise.resolve().then(()=>require("./Detail-mvSGbnFU.js"))}],H=[{key:"create-template",name:"Create mail template",description:"Team member can create a new mail template"},{key:"edit-template",name:"Edit mail template",description:"Team member can edit a mail template"},{key:"delete-template",name:"Delete mail template",description:"Team member can delete a mail template"}],K={component:()=>Promise.resolve().then(()=>require("./index-Cz-baGax.js")),metadata:V,config:N,routes:_,permissions:H},W={name:"Appointments",description:"Create and manage agendas for booking appointments.",icon:"mdi-table",version:"1.0.0"},z=e.defineModuleConfig({project:{label:"Project",type:"resource",accept:["FIREBASE"]},mailAccount:{label:"Mail account",type:"resource",accept:["GMAIL"]},agendaCollection:{label:"Agenda Collection",type:"input",default:"agendas"},reservationsCollection:{label:"Reservations Collection",type:"input",default:"bookings_orders"},reservedSpotsCollection:{label:"Reserved Spots Collection",type:"input",default:"reserved_spots"}}),J=[{path:"",component:()=>Promise.resolve().then(()=>require("./Overview-t0pG5xjA.js"))},{path:"/create",component:()=>Promise.resolve().then(()=>require("./index-D2a6wEPh.js"))},{path:"/create/regular",component:()=>Promise.resolve().then(()=>require("./regular-1LXNPviB.js"))},{path:"/edit/:id",component:()=>Promise.resolve().then(()=>require("./index-DTzdHh6g.js"))},{path:"/edit/:id/agenda",component:()=>Promise.resolve().then(()=>require("./agenda-wNFDKn0G.js"))},{path:"/edit/:id/regular-slots",component:()=>Promise.resolve().then(()=>require("./regular-slots-Bs3WJB3U.js"))},{path:"/edit/:id/exceptions",component:()=>Promise.resolve().then(()=>require("./exceptions-wEQEVzIs.js"))},{path:"/edit/:id/availability",component:()=>Promise.resolve().then(()=>require("./availability-BiBbzEIM.js"))},{path:"/edit/:id/payment",component:()=>Promise.resolve().then(()=>require("./payment-BQaAqQ5q.js"))},{path:"/edit/:id/resources",component:()=>Promise.resolve().then(()=>require("./resources-eb0pivDL.js"))},{path:"/edit/:id/orders",component:()=>Promise.resolve().then(()=>require("./orders-D5GJOZXN.js"))}],Q=[{key:"create-agendas",name:"Create agendas",description:"Team member can create agendas"},{key:"edit-agendas",name:"Edit agendas",description:"Team member can edit agendas"},{key:"delete-agendas",name:"Delete agendas",description:"Team member can delete agendas"},{key:"manage-reservations",name:"Manage reservations",description:"Team member can create, edit, and delete reservations"}],X=[{name:"findAppointment",description:"Show a card in chat with details of an appointment/booking/reservation/...",executionMode:"component",chatComponent:"AppointmentDetailsCard",parameters:{type:"object",properties:{name:{type:"string",description:"Name of the booker"},email:{type:"string",description:"Email of the booker"},date:{type:"string",description:"Date of the appointment (YYYY-MM-DD)"}},required:["date"]}},{name:"getRecentAppointments",description:"Show a table in chat with recent appointments, default loading the latest 20 appointments.",executionMode:"component",chatComponent:"AppointmentListTable",parameters:{type:"object",properties:{quantity:{type:"number",description:"Number of appointments to load. default: 20 max: 100",default:20}},required:["quantity"]}},{name:"changeAppointmentDetails",description:"Show a card in chat where user can edit name, email and date of an existing appointment.",executionMode:"component",chatComponent:"AppointmentEditor",parameters:{type:"object",properties:{orderId:{type:"string",description:"ID of the order / appointment. This is NOT the reservation ID."}},required:["orderId"]}}],Z={component:()=>Promise.resolve().then(()=>require("./index-9HVlmvK3.js")),metadata:W,config:z,routes:J,permissions:Q,tools:X,chatComponents:{AppointmentDetailsCard:()=>Promise.resolve().then(()=>require("./AppointmentDetailsCard-BfBwWxTU.js")),AppointmentListTable:()=>Promise.resolve().then(()=>require("./AppointmentListTable-Dk-CnNR6.js")),AppointmentEditor:()=>Promise.resolve().then(()=>require("./AppointmentEditor-CaTfbkIf.js"))}};exports.appointments=Z;exports.contentManager=F;exports.custom=g;exports.googleAnalytics=R;exports.mailTemplates=K;exports.productCollections=k;exports.products=d;exports.promoCodes=w;exports.shippingOptions=x;exports.table=i;
|
package/dist/index.mjs
CHANGED
|
@@ -140,7 +140,7 @@ const t = {
|
|
|
140
140
|
permissions: s,
|
|
141
141
|
tools: c,
|
|
142
142
|
chatComponents: {
|
|
143
|
-
ProductDetailsCard: () => import("./ProductDetailsCard-
|
|
143
|
+
ProductDetailsCard: () => import("./ProductDetailsCard-C5gqBJag.mjs")
|
|
144
144
|
}
|
|
145
145
|
}, d = {
|
|
146
146
|
name: "Custom",
|
|
@@ -454,14 +454,14 @@ const t = {
|
|
|
454
454
|
permissions: T,
|
|
455
455
|
tools: E,
|
|
456
456
|
chatComponents: {
|
|
457
|
-
TopPagesCard: () => import("./TopPagesCard-
|
|
458
|
-
VisitorStatsCard: () => import("./VisitorStatsCard-
|
|
459
|
-
SearchTermsCard: () => import("./SearchTermsCard-
|
|
460
|
-
TrafficSourcesCard: () => import("./TrafficSourcesCard-
|
|
461
|
-
RealtimeCard: () => import("./RealtimeCard-
|
|
462
|
-
CountryBreakdownCard: () => import("./CountryBreakdownCard-
|
|
463
|
-
DeviceBreakdownCard: () => import("./DeviceBreakdownCard-
|
|
464
|
-
PeakHoursCard: () => import("./PeakHoursCard-
|
|
457
|
+
TopPagesCard: () => import("./TopPagesCard-D7lH_QYV.mjs"),
|
|
458
|
+
VisitorStatsCard: () => import("./VisitorStatsCard-CuXXnMBc.mjs"),
|
|
459
|
+
SearchTermsCard: () => import("./SearchTermsCard-DzSu9jzo.mjs"),
|
|
460
|
+
TrafficSourcesCard: () => import("./TrafficSourcesCard-Fng3fVh7.mjs"),
|
|
461
|
+
RealtimeCard: () => import("./RealtimeCard-CtX6Yyk-.mjs"),
|
|
462
|
+
CountryBreakdownCard: () => import("./CountryBreakdownCard-B_VhBsm8.mjs"),
|
|
463
|
+
DeviceBreakdownCard: () => import("./DeviceBreakdownCard-CQR65Zr_.mjs"),
|
|
464
|
+
PeakHoursCard: () => import("./PeakHoursCard-_1JS0tpZ.mjs")
|
|
465
465
|
}
|
|
466
466
|
}, I = {
|
|
467
467
|
name: "Content Manager",
|
|
@@ -514,7 +514,7 @@ const t = {
|
|
|
514
514
|
{ path: "", component: () => import("./Overview-CgViRnNc.mjs") },
|
|
515
515
|
{ path: "/collections", component: () => import("./Overview-CgViRnNc.mjs") },
|
|
516
516
|
{ path: "/collections/:collectionId", component: () => import("./Entries-D7MHylQE.mjs") },
|
|
517
|
-
{ path: "/collections/:collectionId/:entryId", component: () => import("./ContentEditor-
|
|
517
|
+
{ path: "/collections/:collectionId/:entryId", component: () => import("./ContentEditor-Dk-iDEjl.mjs") },
|
|
518
518
|
{ path: "/components", component: () => import("./Components-C83O-xlF.mjs") },
|
|
519
519
|
{ path: "/global-styling", component: () => import("./GlobalStyling-C9VthHWK.mjs") }
|
|
520
520
|
], P = [
|
|
@@ -680,8 +680,8 @@ const t = {
|
|
|
680
680
|
permissions: F,
|
|
681
681
|
tools: V,
|
|
682
682
|
chatComponents: {
|
|
683
|
-
AppointmentDetailsCard: () => import("./AppointmentDetailsCard-
|
|
684
|
-
AppointmentListTable: () => import("./AppointmentListTable-
|
|
683
|
+
AppointmentDetailsCard: () => import("./AppointmentDetailsCard-SMNXi117.mjs"),
|
|
684
|
+
AppointmentListTable: () => import("./AppointmentListTable-vMSMt0M5.mjs"),
|
|
685
685
|
AppointmentEditor: () => import("./AppointmentEditor-BeOtYV6u.mjs")
|
|
686
686
|
}
|
|
687
687
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@oneclick.dev/cms-core-modules",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.78",
|
|
4
4
|
"main": "dist/index.cjs.js",
|
|
5
5
|
"module": "dist/index.mjs",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
"peerDependencies": {
|
|
29
29
|
"@formkit/drag-and-drop": "^0.5.3",
|
|
30
30
|
"@internationalized/date": "^3.8.0",
|
|
31
|
-
"@oneclick.dev/cms-kit": "0.0.
|
|
31
|
+
"@oneclick.dev/cms-kit": "0.0.88",
|
|
32
32
|
"@tanstack/vue-table": "^8.21.3",
|
|
33
33
|
"@vee-validate/zod": "^4.15.0",
|
|
34
34
|
"@vue-flow/core": "^1.48.1",
|
|
@@ -52,6 +52,7 @@
|
|
|
52
52
|
"@tiptap/y-tiptap": "3.0.2",
|
|
53
53
|
"@vitejs/plugin-vue": "^6.0.3",
|
|
54
54
|
"@vue-flow/core": "^1.48.1",
|
|
55
|
+
"ofetch": "^1.5.1",
|
|
55
56
|
"typescript": "^5.9.3",
|
|
56
57
|
"vite": "^7.3.0",
|
|
57
58
|
"vite-plugin-dts": "^4.5.4"
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),o=require("lucide-vue-next"),V={class:"w-full"},E={key:0,class:"flex items-center gap-2 py-3"},h={key:1,class:"text-xs text-destructive py-2"},S={key:2,class:"rounded-xl border bg-background p-4 text-center"},B={key:3,class:"space-y-3"},D={class:"flex items-start gap-3"},I={class:"shrink-0 size-10 rounded-lg bg-primary/10 flex items-center justify-center"},C={class:"flex-1 min-w-0"},z={class:"text-sm font-semibold truncate"},T={class:"flex items-center gap-2 mt-1 flex-wrap"},w={key:0,class:"text-xs font-medium"},j={class:"grid grid-cols-2 gap-2 text-xs text-muted-foreground"},A={class:"flex items-center gap-1.5"},L={class:"truncate"},P={class:"flex items-center gap-1.5"},$={class:"flex items-center gap-1.5"},M={class:"flex items-center gap-1.5"},F=e.defineComponent({__name:"AppointmentDetailsCard",props:{toolName:{},instanceId:{},instanceName:{},moduleType:{},resolvedArgs:{},status:{}},emits:["submit"],setup(u,{emit:p}){const d=u,f=p,g=useRoute(),x=e.computed(()=>g.params.slug),v=useModuleApi(d.instanceId),c=e.ref(!0),a=e.ref(null),l=e.ref([]);async function N(){const{name:s,email:n,date:i}=d.resolvedArgs||{};if(!i){a.value="No date provided",c.value=!1;return}c.value=!0,a.value=null;try{const t=new URLSearchParams;s&&t.set("name",s),n&&t.set("email",n),i&&t.set("date",i);const b=await v.get(`/appointments/find?${t.toString()}`);l.value=b.appointments||[],m({count:l.value.length,appointments:l.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(t){a.value=t?.data?.statusMessage||t?.message||"Failed to find appointment",m(`Error finding appointment: ${a.value}`)}finally{c.value=!1}}e.onMounted(()=>{N()});function m(s){d.status!=="completed"&&f("submit",s)}const k=s=>{switch(s){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"}},_=s=>{switch(s){case"approved":return"Approved";case"needs_approval":return"Needs Approval";case"rejected":return"Rejected";case"cancelled":return"Cancelled";case"confirmed":return"Confirmed";default:return s||"Pending"}},y=s=>s==null?"":`€${s.toFixed(2)}`;return(s,n)=>{const i=e.resolveComponent("NuxtLink");return e.openBlock(),e.createElementBlock("div",V,[e.unref(c)?(e.openBlock(),e.createElementBlock("div",E,[e.createVNode(e.unref(o.Loader2),{class:"size-4 animate-spin text-muted-foreground"}),n[0]||(n[0]=e.createElementVNode("span",{class:"text-xs text-muted-foreground"},"Searching appointments…",-1))])):e.unref(a)?(e.openBlock(),e.createElementBlock("div",h,e.toDisplayString(e.unref(a)),1)):e.unref(l).length===0?(e.openBlock(),e.createElementBlock("div",S,[e.createVNode(e.unref(o.CalendarDays),{class:"size-8 text-muted-foreground mx-auto mb-2"}),n[1]||(n[1]=e.createElementVNode("p",{class:"text-sm text-muted-foreground"},"No appointments found for the given criteria.",-1))])):(e.openBlock(),e.createElementBlock("div",B,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(l),t=>(e.openBlock(),e.createElementBlock("div",{key:t.reservationId||t.orderId,class:"rounded-xl border bg-background p-3 space-y-3"},[e.createElementVNode("div",D,[e.createElementVNode("div",I,[e.createVNode(e.unref(o.CalendarDays),{class:"size-5 text-primary"})]),e.createElementVNode("div",C,[e.createElementVNode("p",z,e.toDisplayString(t.customerInfo?.firstName)+" "+e.toDisplayString(t.customerInfo?.lastName),1),e.createElementVNode("div",T,[e.createElementVNode("span",{class:e.normalizeClass(["text-[10px] font-medium px-1.5 py-0.5 rounded-full uppercase",k(t.reservationStatus||t.status)])},e.toDisplayString(_(t.reservationStatus||t.status)),3),t.reservationPrice!=null?(e.openBlock(),e.createElementBlock("span",w,e.toDisplayString(y(t.reservationPrice)),1)):e.createCommentVNode("",!0)])])]),e.createElementVNode("div",j,[e.createElementVNode("div",A,[e.createVNode(e.unref(o.Mail),{class:"size-3"}),e.createElementVNode("span",L,e.toDisplayString(t.customerInfo?.email||"—"),1)]),e.createElementVNode("div",P,[e.createVNode(e.unref(o.CalendarDays),{class:"size-3"}),e.createElementVNode("span",null,e.toDisplayString(t.date),1)]),e.createElementVNode("div",$,[e.createVNode(e.unref(o.Clock),{class:"size-3"}),e.createElementVNode("span",null,e.toDisplayString(t.startTime)+" – "+e.toDisplayString(t.endTime),1)]),e.createElementVNode("div",M,[e.createVNode(e.unref(o.Users),{class:"size-3"}),e.createElementVNode("span",null,e.toDisplayString(t.spots||1)+" "+e.toDisplayString((t.spots||1)===1?"spot":"spots"),1)])]),e.createVNode(i,{to:`/projects/${e.unref(x)}/modules/${u.instanceId}`,class:"inline-flex items-center gap-1.5 text-xs text-primary hover:underline"},{default:e.withCtx(()=>[e.createVNode(e.unref(o.ExternalLink),{class:"size-3"}),n[2]||(n[2]=e.createTextVNode(" Open in agenda ",-1))]),_:1},8,["to"])]))),128))]))])}}});exports.default=F;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),c=require("lucide-vue-next"),_={class:"w-full"},k={key:0,class:"flex items-center gap-2 py-3"},E={key:1,class:"text-xs text-destructive py-2"},V={key:2,class:"rounded-xl border bg-background p-4 text-center"},w={key:3,class:"rounded-xl border bg-background overflow-hidden"},S={class:"overflow-x-auto"},D={class:"w-full text-xs"},I={class:"px-3 py-2"},B={class:"font-medium truncate max-w-[160px]"},T={class:"text-muted-foreground truncate max-w-[160px]"},C={class:"px-3 py-2 whitespace-nowrap"},L={class:"px-3 py-2 whitespace-nowrap"},j={class:"px-3 py-2 text-center"},A={class:"px-3 py-2"},$={class:"px-3 py-2 text-right font-medium whitespace-nowrap"},P={class:"px-3 py-2 border-t bg-muted/20 flex items-center justify-between"},q={class:"text-xs text-muted-foreground"},z=e.defineComponent({__name:"AppointmentListTable",props:{toolName:{},instanceId:{},instanceName:{},moduleType:{},resolvedArgs:{},status:{}},emits:["submit"],setup(i,{emit:m}){const d=i,p=m,x=useRoute(),f=e.computed(()=>x.params.slug),g=useModuleApi(d.instanceId),l=e.ref(!0),a=e.ref(null),s=e.ref([]);async function y(){const t=d.resolvedArgs?.quantity||20;l.value=!0,a.value=null;try{const r=await g.get(`/appointments?quantity=${t}`);s.value=r.appointments||[],u({count:s.value.length,appointments:s.value.map(o=>({orderId:o.orderId,reservationId:o.reservationId,customerName:`${o.customerInfo?.firstName||""} ${o.customerInfo?.lastName||""}`.trim(),email:o.customerInfo?.email,date:o.date,startTime:o.startTime,endTime:o.endTime,spots:o.spots,status:o.reservationStatus||o.status,price:o.reservationPrice}))})}catch(r){a.value=r?.data?.statusMessage||r?.message||"Failed to load appointments",u(`Error loading appointments: ${a.value}`)}finally{l.value=!1}}e.onMounted(()=>{y()});function u(t){d.status!=="completed"&&p("submit",t)}const b=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"}},N=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"}},v=t=>t==null?"—":`€${t.toFixed(2)}`,h=t=>{if(!t)return"—";try{return new Date(t).toLocaleDateString("en-US",{weekday:"short",month:"short",day:"numeric"})}catch{return t}};return(t,r)=>{const o=e.resolveComponent("NuxtLink");return e.openBlock(),e.createElementBlock("div",_,[e.unref(l)?(e.openBlock(),e.createElementBlock("div",k,[e.createVNode(e.unref(c.Loader2),{class:"size-4 animate-spin text-muted-foreground"}),r[0]||(r[0]=e.createElementVNode("span",{class:"text-xs text-muted-foreground"},"Loading appointments…",-1))])):e.unref(a)?(e.openBlock(),e.createElementBlock("div",E,e.toDisplayString(e.unref(a)),1)):e.unref(s).length===0?(e.openBlock(),e.createElementBlock("div",V,[e.createVNode(e.unref(c.CalendarDays),{class:"size-8 text-muted-foreground mx-auto mb-2"}),r[1]||(r[1]=e.createElementVNode("p",{class:"text-sm text-muted-foreground"},"No recent appointments found.",-1))])):(e.openBlock(),e.createElementBlock("div",w,[e.createElementVNode("div",S,[e.createElementVNode("table",D,[r[2]||(r[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",I,[e.createElementVNode("div",B,e.toDisplayString(n.customerInfo?.firstName)+" "+e.toDisplayString(n.customerInfo?.lastName),1),e.createElementVNode("div",T,e.toDisplayString(n.customerInfo?.email),1)]),e.createElementVNode("td",C,e.toDisplayString(h(n.date)),1),e.createElementVNode("td",L,e.toDisplayString(n.startTime)+" – "+e.toDisplayString(n.endTime),1),e.createElementVNode("td",j,e.toDisplayString(n.spots||1),1),e.createElementVNode("td",A,[e.createElementVNode("span",{class:e.normalizeClass(["inline-block text-[10px] font-medium px-1.5 py-0.5 rounded-full uppercase whitespace-nowrap",b(n.reservationStatus||n.status)])},e.toDisplayString(N(n.reservationStatus||n.status)),3)]),e.createElementVNode("td",$,e.toDisplayString(v(n.reservationPrice)),1)]))),128))])])]),e.createElementVNode("div",P,[e.createElementVNode("span",q,e.toDisplayString(e.unref(s).length)+" appointment"+e.toDisplayString(e.unref(s).length===1?"":"s"),1),e.createVNode(o,{to:`/projects/${e.unref(f)}/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"}),r[3]||(r[3]=e.createTextVNode(" View all ",-1))]),_:1},8,["to"])])]))])}}});exports.default=z;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),l=require("lucide-vue-next"),w={class:"w-full"},A={key:0,class:"flex items-center gap-2 py-3"},C={key:1,class:"text-xs text-destructive py-2"},L={key:2,class:"rounded-xl border bg-background p-4 text-center space-y-2"},$={key:3,class:"rounded-xl border bg-background overflow-hidden"},z={class:"px-3 py-2 border-b bg-muted/40 flex items-center justify-between"},T={class:"flex items-center gap-2"},F={class:"text-[10px] text-muted-foreground"},U={class:"divide-y"},I={class:"flex items-center gap-2 mb-1.5"},M={class:"text-sm shrink-0"},j={class:"text-xs font-medium truncate flex-1"},P={class:"text-[10px] text-muted-foreground"},R={class:"ml-7 space-y-1.5"},G={class:"h-1.5 rounded-full bg-muted overflow-hidden"},q={class:"flex items-center gap-3 text-[10px] text-muted-foreground"},K={class:"flex items-center gap-1"},O={class:"flex items-center gap-1"},H={class:"px-3 py-2 border-t bg-muted/20 flex items-center justify-between"},J={class:"text-[10px] text-muted-foreground"},Z=e.defineComponent({__name:"CountryBreakdownCard",props:{toolName:{},instanceId:{},instanceName:{},moduleType:{},resolvedArgs:{},status:{}},emits:["submit"],setup(p,{emit:x}){const i=p,y=x,h=useRoute(),v=e.computed(()=>h.params.slug),N=useModuleApi(i.instanceId),d=e.ref(!0),c=e.ref(null),o=e.ref([]),u=e.ref(null),_=t=>({"United States":"🇺🇸","United Kingdom":"🇬🇧",Germany:"🇩🇪",France:"🇫🇷",Netherlands:"🇳🇱",Belgium:"🇧🇪",Canada:"🇨🇦",Australia:"🇦🇺",India:"🇮🇳",Brazil:"🇧🇷",Spain:"🇪🇸",Italy:"🇮🇹",Japan:"🇯🇵",China:"🇨🇳","South Korea":"🇰🇷",Mexico:"🇲🇽",Russia:"🇷🇺",Sweden:"🇸🇪",Norway:"🇳🇴",Denmark:"🇩🇰",Finland:"🇫🇮",Poland:"🇵🇱",Switzerland:"🇨🇭",Austria:"🇦🇹",Portugal:"🇵🇹",Ireland:"🇮🇪","New Zealand":"🇳🇿",Singapore:"🇸🇬","South Africa":"🇿🇦",Turkey:"🇹🇷",Indonesia:"🇮🇩",Thailand:"🇹🇭",Philippines:"🇵🇭",Vietnam:"🇻🇳",Argentina:"🇦🇷",Colombia:"🇨🇴",Israel:"🇮🇱",UAE:"🇦🇪","United Arab Emirates":"🇦🇪","Czech Republic":"🇨🇿",Czechia:"🇨🇿",Romania:"🇷🇴",Hungary:"🇭🇺",Ukraine:"🇺🇦",Greece:"🇬🇷",Luxembourg:"🇱🇺"})[t]||"🌍";function V(){const t=i.resolvedArgs?._cachedData;return t?(o.value=(t.countries||[]).map(s=>({country:s.country,sessions:s.sessions,totalUsers:s.users})),u.value=i.resolvedArgs._fetchedAt||null,d.value=!1,!0):!1}async function b(){const{startDate:t,endDate:s}=i.resolvedArgs||{};d.value=!0,c.value=null;try{const n=new URLSearchParams;t&&n.set("startDate",t),s&&n.set("endDate",s);const r=await N.get(`/countries?${n.toString()}`);o.value=r.rows||[],u.value=new Date().toISOString();const m=o.value.reduce((a,B)=>a+(B.sessions||0),0);f({count:o.value.length,countries:o.value.map(a=>({country:a.country,sessions:a.sessions,users:a.totalUsers,share:`${(a.sessions/m*100).toFixed(1)}%`})),suggestion:o.value.length===0?"No geographic data found for this period.":`Top countries by traffic: ${o.value.slice(0,5).map(a=>`${a.country} (${(a.sessions/m*100).toFixed(0)}%)`).join(", ")}.`})}catch(n){c.value=n?.data?.statusMessage||n?.message||"Failed to load country data",f(`Error loading country data: ${c.value}`)}finally{d.value=!1}}e.onMounted(()=>{i.status==="completed"&&V()||b()});function f(t){i.status!=="completed"&&y("submit",t)}const g=t=>t==null?"0":Math.round(t).toLocaleString(),k=t=>t?new Date(t).toLocaleString(void 0,{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}):"",E=e.computed(()=>o.value.reduce((t,s)=>t+(s.sessions||0),0)||1),S=e.computed(()=>Math.max(...o.value.map(t=>t.sessions||0),1)),D=e.computed(()=>{const{startDate:t,endDate:s}=i.resolvedArgs||{};if(!t&&!s)return"Last 30 days";const n=t||"30daysAgo",r=n.match(/^(\d+)daysAgo$/);return r?`Last ${r[1]} days`:`${n} → ${s||"today"}`});return(t,s)=>{const n=e.resolveComponent("NuxtLink");return e.openBlock(),e.createElementBlock("div",w,[e.unref(d)?(e.openBlock(),e.createElementBlock("div",A,[e.createVNode(e.unref(l.Loader2),{class:"size-4 animate-spin text-muted-foreground"}),s[0]||(s[0]=e.createElementVNode("span",{class:"text-xs text-muted-foreground"},"Loading country data…",-1))])):e.unref(c)?(e.openBlock(),e.createElementBlock("div",C,e.toDisplayString(e.unref(c)),1)):e.unref(o).length===0?(e.openBlock(),e.createElementBlock("div",L,[e.createVNode(e.unref(l.Globe),{class:"size-8 text-muted-foreground mx-auto"}),s[1]||(s[1]=e.createElementVNode("p",{class:"text-sm text-muted-foreground"},"No geographic data found for this period.",-1))])):(e.openBlock(),e.createElementBlock("div",$,[e.createElementVNode("div",z,[e.createElementVNode("div",T,[e.createVNode(e.unref(l.Globe),{class:"size-3.5 text-primary"}),s[2]||(s[2]=e.createElementVNode("span",{class:"text-xs font-medium"},"Visitors by Country",-1))]),e.createElementVNode("span",F,e.toDisplayString(e.unref(D)),1)]),e.createElementVNode("div",U,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(o),(r,m)=>(e.openBlock(),e.createElementBlock("div",{key:m,class:"px-3 py-2.5 hover:bg-muted/30 transition-colors"},[e.createElementVNode("div",I,[e.createElementVNode("span",M,e.toDisplayString(_(r.country)),1),e.createElementVNode("span",j,e.toDisplayString(r.country),1),e.createElementVNode("span",P,e.toDisplayString((r.sessions/e.unref(E)*100).toFixed(1))+"%",1)]),e.createElementVNode("div",R,[e.createElementVNode("div",G,[e.createElementVNode("div",{class:"h-full rounded-full bg-blue-500/70 transition-all",style:e.normalizeStyle({width:`${r.sessions/e.unref(S)*100}%`})},null,4)]),e.createElementVNode("div",q,[e.createElementVNode("span",K,[e.createVNode(e.unref(l.MousePointerClick),{class:"size-2.5"}),e.createTextVNode(" "+e.toDisplayString(g(r.sessions))+" sessions ",1)]),e.createElementVNode("span",O,[e.createVNode(e.unref(l.Users),{class:"size-2.5"}),e.createTextVNode(" "+e.toDisplayString(g(r.totalUsers))+" users ",1)])])])]))),128))]),e.createElementVNode("div",H,[e.createElementVNode("span",J,[e.createTextVNode(e.toDisplayString(e.unref(o).length)+" countr"+e.toDisplayString(e.unref(o).length===1?"y":"ies")+" ",1),e.unref(u)?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(" · fetched "+e.toDisplayString(k(e.unref(u))),1)],64)):e.createCommentVNode("",!0)]),e.createVNode(n,{to:`/projects/${e.unref(v)}/modules/${p.instanceId}`,class:"inline-flex items-center gap-1.5 text-xs text-primary hover:underline"},{default:e.withCtx(()=>[e.createVNode(e.unref(l.ExternalLink),{class:"size-3"}),s[3]||(s[3]=e.createTextVNode(" View full report ",-1))]),_:1},8,["to"])])]))])}}});exports.default=Z;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),l=require("lucide-vue-next"),S={class:"w-full"},L={key:0,class:"flex items-center gap-2 py-3"},$={key:1,class:"text-xs text-destructive py-2"},z={key:2,class:"rounded-xl border bg-background p-4 text-center space-y-2"},A={key:3,class:"rounded-xl border bg-background overflow-hidden"},T={class:"px-3 py-2 border-b bg-muted/40 flex items-center justify-between"},M={class:"flex items-center gap-2"},F={class:"text-[10px] text-muted-foreground"},j={class:"px-3 pt-3 pb-1"},I={class:"flex h-3 rounded-full overflow-hidden"},U={class:"divide-y"},P={class:"flex items-center gap-2"},q={class:"text-xs font-medium capitalize flex-1"},O={class:"text-sm font-semibold tabular-nums"},R={class:"ml-6 mt-1 flex items-center gap-3 text-[10px] text-muted-foreground"},G={class:"flex items-center gap-1"},H={class:"flex items-center gap-1"},J={class:"px-3 py-2 border-t bg-muted/20 flex items-center justify-between"},K={class:"text-[10px] text-muted-foreground"},Q=e.defineComponent({__name:"DeviceBreakdownCard",props:{toolName:{},instanceId:{},instanceName:{},moduleType:{},resolvedArgs:{},status:{}},emits:["submit"],setup(v,{emit:x}){const i=v,y=x,h=useRoute(),b=e.computed(()=>h.params.slug),k=useModuleApi(i.instanceId),u=e.ref(!0),d=e.ref(null),r=e.ref([]),m=e.ref(null),_=s=>{const t=(s||"").toLowerCase();return t==="mobile"||t==="smartphone"?l.Smartphone:t==="tablet"?l.Tablet:l.Monitor},N=s=>{const t=(s||"").toLowerCase();return t==="desktop"?"bg-blue-500":t==="mobile"||t==="smartphone"?"bg-emerald-500":t==="tablet"?"bg-amber-500":"bg-violet-500"},V=s=>{const t=(s||"").toLowerCase();return t==="desktop"?"text-blue-500":t==="mobile"||t==="smartphone"?"text-emerald-500":t==="tablet"?"text-amber-500":"text-violet-500"};function E(){const s=i.resolvedArgs?._cachedData;return s?(r.value=(s.devices||[]).map(t=>({deviceCategory:t.device,sessions:t.sessions,totalUsers:t.users})),m.value=i.resolvedArgs._fetchedAt||null,u.value=!1,!0):!1}async function B(){const{startDate:s,endDate:t}=i.resolvedArgs||{};u.value=!0,d.value=null;try{const n=new URLSearchParams;s&&n.set("startDate",s),t&&n.set("endDate",t);const o=await k.get(`/devices?${n.toString()}`);r.value=o.rows||[],m.value=new Date().toISOString();const c=r.value.reduce((a,D)=>a+(D.sessions||0),0);g({count:r.value.length,devices:r.value.map(a=>({device:a.deviceCategory,sessions:a.sessions,users:a.totalUsers,share:`${(a.sessions/c*100).toFixed(1)}%`})),suggestion:r.value.length===0?"No device data found for this period.":`Device breakdown: ${r.value.map(a=>`${a.deviceCategory} ${(a.sessions/c*100).toFixed(0)}%`).join(", ")}.`})}catch(n){d.value=n?.data?.statusMessage||n?.message||"Failed to load device data",g(`Error loading device data: ${d.value}`)}finally{u.value=!1}}e.onMounted(()=>{i.status==="completed"&&E()||B()});function g(s){i.status!=="completed"&&y("submit",s)}const f=s=>s==null?"0":Math.round(s).toLocaleString(),w=s=>s?new Date(s).toLocaleString(void 0,{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}):"",p=e.computed(()=>r.value.reduce((s,t)=>s+(t.sessions||0),0)||1),C=e.computed(()=>{const{startDate:s,endDate:t}=i.resolvedArgs||{};if(!s&&!t)return"Last 30 days";const n=s||"30daysAgo",o=n.match(/^(\d+)daysAgo$/);return o?`Last ${o[1]} days`:`${n} → ${t||"today"}`});return(s,t)=>{const n=e.resolveComponent("NuxtLink");return e.openBlock(),e.createElementBlock("div",S,[e.unref(u)?(e.openBlock(),e.createElementBlock("div",L,[e.createVNode(e.unref(l.Loader2),{class:"size-4 animate-spin text-muted-foreground"}),t[0]||(t[0]=e.createElementVNode("span",{class:"text-xs text-muted-foreground"},"Loading device data…",-1))])):e.unref(d)?(e.openBlock(),e.createElementBlock("div",$,e.toDisplayString(e.unref(d)),1)):e.unref(r).length===0?(e.openBlock(),e.createElementBlock("div",z,[e.createVNode(e.unref(l.Monitor),{class:"size-8 text-muted-foreground mx-auto"}),t[1]||(t[1]=e.createElementVNode("p",{class:"text-sm text-muted-foreground"},"No device data found for this period.",-1))])):(e.openBlock(),e.createElementBlock("div",A,[e.createElementVNode("div",T,[e.createElementVNode("div",M,[e.createVNode(e.unref(l.Monitor),{class:"size-3.5 text-primary"}),t[2]||(t[2]=e.createElementVNode("span",{class:"text-xs font-medium"},"Device Breakdown",-1))]),e.createElementVNode("span",F,e.toDisplayString(e.unref(C)),1)]),e.createElementVNode("div",j,[e.createElementVNode("div",I,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(r),(o,c)=>(e.openBlock(),e.createElementBlock("div",{key:c,class:e.normalizeClass([N(o.deviceCategory),"transition-all first:rounded-l-full last:rounded-r-full"]),style:e.normalizeStyle({width:`${o.sessions/e.unref(p)*100}%`})},null,6))),128))])]),e.createElementVNode("div",U,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(r),(o,c)=>(e.openBlock(),e.createElementBlock("div",{key:c,class:"px-3 py-2.5 hover:bg-muted/30 transition-colors"},[e.createElementVNode("div",P,[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(_(o.deviceCategory)),{class:e.normalizeClass(["size-4 shrink-0",V(o.deviceCategory)])},null,8,["class"])),e.createElementVNode("span",q,e.toDisplayString(o.deviceCategory),1),e.createElementVNode("span",O,e.toDisplayString((o.sessions/e.unref(p)*100).toFixed(1))+"% ",1)]),e.createElementVNode("div",R,[e.createElementVNode("span",G,[e.createVNode(e.unref(l.MousePointerClick),{class:"size-2.5"}),e.createTextVNode(" "+e.toDisplayString(f(o.sessions))+" sessions ",1)]),e.createElementVNode("span",H,[e.createVNode(e.unref(l.Users),{class:"size-2.5"}),e.createTextVNode(" "+e.toDisplayString(f(o.totalUsers))+" users ",1)])])]))),128))]),e.createElementVNode("div",J,[e.createElementVNode("span",K,[e.createTextVNode(e.toDisplayString(f(e.unref(p)))+" total sessions ",1),e.unref(m)?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(" · fetched "+e.toDisplayString(w(e.unref(m))),1)],64)):e.createCommentVNode("",!0)]),e.createVNode(n,{to:`/projects/${e.unref(b)}/modules/${v.instanceId}`,class:"inline-flex items-center gap-1.5 text-xs text-primary hover:underline"},{default:e.withCtx(()=>[e.createVNode(e.unref(l.ExternalLink),{class:"size-3"}),t[3]||(t[3]=e.createTextVNode(" View full report ",-1))]),_:1},8,["to"])])]))])}}});exports.default=Q;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),v=require("lucide-vue-next"),W={class:"w-full"},j={key:0,class:"flex items-center gap-2 py-3"},z={key:1,class:"text-xs text-destructive py-2"},I={key:2,class:"rounded-xl border bg-background overflow-hidden"},q={class:"px-3 py-2 border-b bg-muted/40 flex items-center justify-between"},R={class:"flex items-center gap-2"},U={class:"text-[10px] text-muted-foreground"},G={key:0,class:"px-3 pt-3 pb-1"},J={class:"flex items-center gap-2 text-xs"},K={class:"inline-flex items-center gap-1 px-2 py-0.5 rounded-full bg-blue-500/10 text-blue-600 dark:text-blue-400 font-medium"},Q={class:"px-3 py-3"},X={class:"flex items-end gap-[2px] h-16"},Y=["title"],Z={key:1,class:"px-3 pb-3"},ee={class:"space-y-[2px]"},te={class:"text-[8px] text-muted-foreground w-6 shrink-0 text-right"},se={class:"flex gap-[2px] flex-1"},oe=["title"],ne={class:"px-3 py-2 border-t bg-muted/20 flex items-center justify-between"},re={class:"text-[10px] text-muted-foreground"},ae=e.defineComponent({__name:"PeakHoursCard",props:{toolName:{},instanceId:{},instanceName:{},moduleType:{},resolvedArgs:{},status:{}},emits:["submit"],setup(N,{emit:B}){const u=N,M=B,D=useRoute(),$=e.computed(()=>D.params.slug),L=useModuleApi(u.instanceId),m=e.ref(!0),c=e.ref(null),f=e.ref([]),i=e.ref(null),p=e.ref(null),A=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],E={Sunday:"Sun",Monday:"Mon",Tuesday:"Tue",Wednesday:"Wed",Thursday:"Thu",Friday:"Fri",Saturday:"Sat"},d=e.ref([]),w=e.computed(()=>Math.max(...d.value.map(t=>t.sessions),1));function P(t){const s=t/w.value;return s===0?"bg-muted/40":s<.2?"bg-blue-100 dark:bg-blue-950":s<.4?"bg-blue-200 dark:bg-blue-900":s<.6?"bg-blue-300 dark:bg-blue-700":s<.8?"bg-blue-400 dark:bg-blue-600":"bg-blue-500 dark:bg-blue-500"}function T(){const t=u.resolvedArgs?._cachedData;return t?(f.value=t.hourly||[],i.value=t.peakHour??null,d.value=t.heatmap||[],p.value=u.resolvedArgs._fetchedAt||null,m.value=!1,!0):!1}async function C(){const{startDate:t,endDate:s}=u.resolvedArgs||{};m.value=!0,c.value=null;try{const r=new URLSearchParams;t&&r.set("startDate",t),s&&r.set("endDate",s);const l=(await L.get(`/audience/hours?${r.toString()}`)).rows||[];d.value=l.map(o=>({day:o.dayOfWeekName,hour:parseInt(o.hour,10),sessions:o.sessions||0}));const a={};for(const o of l){const k=parseInt(o.hour,10);a[k]=(a[k]||0)+(o.sessions||0)}const g=[];for(let o=0;o<24;o++)g.push({hour:o,sessions:a[o]||0});f.value=g;let y=0,h=0;for(const o of g)o.sessions>h&&(y=o.hour,h=o.sessions);i.value=y,p.value=new Date().toISOString();const b={};for(const o of l)b[o.dayOfWeekName]=(b[o.dayOfWeekName]||0)+(o.sessions||0);const S=Object.entries(b).sort((o,k)=>k[1]-o[1])[0]?.[0]||"—";_({peakHour:y,peakDay:S,hourly:g,heatmap:d.value,suggestion:`Peak traffic hour is ${x(y)} with ${h.toLocaleString()} sessions. The busiest day is ${S}.`})}catch(r){c.value=r?.data?.statusMessage||r?.message||"Failed to load peak hours data",_(`Error loading peak hours data: ${c.value}`)}finally{m.value=!1}}e.onMounted(()=>{u.status==="completed"&&T()||C()});function _(t){u.status!=="completed"&&M("submit",t)}function x(t){return t===0?"12 AM":t<12?`${t} AM`:t===12?"12 PM":`${t-12} PM`}const H=t=>t?new Date(t).toLocaleString(void 0,{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}):"",F=e.computed(()=>Math.max(...f.value.map(t=>t.sessions),1)),O=e.computed(()=>{const{startDate:t,endDate:s}=u.resolvedArgs||{};if(!t&&!s)return"Last 30 days";const r=t||"30daysAgo",n=r.match(/^(\d+)daysAgo$/);return n?`Last ${n[1]} days`:`${r} → ${s||"today"}`}),V=e.computed(()=>A.filter(t=>d.value.some(s=>s.day===t)));return(t,s)=>{const r=e.resolveComponent("NuxtLink");return e.openBlock(),e.createElementBlock("div",W,[e.unref(m)?(e.openBlock(),e.createElementBlock("div",j,[e.createVNode(e.unref(v.Loader2),{class:"size-4 animate-spin text-muted-foreground"}),s[0]||(s[0]=e.createElementVNode("span",{class:"text-xs text-muted-foreground"},"Loading peak hours data…",-1))])):e.unref(c)?(e.openBlock(),e.createElementBlock("div",z,e.toDisplayString(e.unref(c)),1)):(e.openBlock(),e.createElementBlock("div",I,[e.createElementVNode("div",q,[e.createElementVNode("div",R,[e.createVNode(e.unref(v.Clock),{class:"size-3.5 text-primary"}),s[1]||(s[1]=e.createElementVNode("span",{class:"text-xs font-medium"},"Peak Traffic Hours",-1))]),e.createElementVNode("span",U,e.toDisplayString(e.unref(O)),1)]),e.unref(i)!==null?(e.openBlock(),e.createElementBlock("div",G,[e.createElementVNode("div",J,[e.createElementVNode("span",K," 🔥 "+e.toDisplayString(x(e.unref(i))),1),s[2]||(s[2]=e.createElementVNode("span",{class:"text-muted-foreground"},"is the busiest hour",-1))])])):e.createCommentVNode("",!0),e.createElementVNode("div",Q,[e.createElementVNode("div",X,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(f),n=>(e.openBlock(),e.createElementBlock("div",{key:n.hour,class:e.normalizeClass(["flex-1 rounded-t transition-all hover:opacity-80 group relative",n.hour===e.unref(i)?"bg-blue-500":"bg-blue-300/60 dark:bg-blue-700/60"]),style:e.normalizeStyle({height:`${Math.max(n.sessions/e.unref(F)*100,2)}%`}),title:`${x(n.hour)}: ${n.sessions.toLocaleString()} sessions`},null,14,Y))),128))]),s[3]||(s[3]=e.createStaticVNode('<div class="flex mt-1 text-[8px] text-muted-foreground"><span class="flex-1 text-left">12AM</span><span class="flex-1 text-center">6AM</span><span class="flex-1 text-center">12PM</span><span class="flex-1 text-center">6PM</span><span class="flex-1 text-right">11PM</span></div>',1))]),e.unref(V).length>0?(e.openBlock(),e.createElementBlock("div",Z,[s[4]||(s[4]=e.createElementVNode("p",{class:"text-[10px] text-muted-foreground mb-1.5 font-medium"},"Weekly Heatmap",-1)),e.createElementVNode("div",ee,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(V),n=>(e.openBlock(),e.createElementBlock("div",{key:n,class:"flex items-center gap-1"},[e.createElementVNode("span",te,e.toDisplayString(E[n]),1),e.createElementVNode("div",se,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(24,l=>e.createElementVNode("div",{key:l,class:e.normalizeClass(["flex-1 h-2.5 rounded-[2px] transition-colors",P(e.unref(d).find(a=>a.day===n&&a.hour===l-1)?.sessions||0)]),title:`${E[n]} ${x(l-1)}: ${(e.unref(d).find(a=>a.day===n&&a.hour===l-1)?.sessions||0).toLocaleString()} sessions`},null,10,oe)),64))])]))),128))]),s[5]||(s[5]=e.createElementVNode("div",{class:"flex mt-1 ml-7 text-[8px] text-muted-foreground"},[e.createElementVNode("span",{class:"flex-1 text-left"},"12AM"),e.createElementVNode("span",{class:"flex-1 text-center"},"12PM"),e.createElementVNode("span",{class:"flex-1 text-right"},"11PM")],-1))])):e.createCommentVNode("",!0),e.createElementVNode("div",ne,[e.createElementVNode("span",re,[e.unref(p)?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode("fetched "+e.toDisplayString(H(e.unref(p))),1)],64)):e.createCommentVNode("",!0)]),e.createVNode(r,{to:`/projects/${e.unref($)}/modules/${N.instanceId}/audience`,class:"inline-flex items-center gap-1.5 text-xs text-primary hover:underline"},{default:e.withCtx(()=>[e.createVNode(e.unref(v.ExternalLink),{class:"size-3"}),s[6]||(s[6]=e.createTextVNode(" View full report ",-1))]),_:1},8,["to"])])]))])}}});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"),y={class:"w-full"},_={key:0,class:"flex items-center gap-2 py-3"},b={key:1,class:"text-xs text-destructive py-2"},N={key:2,class:"rounded-xl border bg-background p-3 space-y-3"},h={class:"flex items-start gap-3"},E={class:"shrink-0 size-16 rounded-lg bg-muted overflow-hidden flex items-center justify-center"},V=["src","alt"],B={class:"flex-1 min-w-0"},S={class:"text-sm font-semibold truncate"},w={class:"text-lg font-bold mt-0.5"},C={class:"flex items-center gap-2 mt-1"},D={class:"text-xs text-muted-foreground"},I={key:0,class:"text-xs text-muted-foreground line-clamp-2"},z=e.defineComponent({__name:"ProductDetailsCard",props:{toolName:{},instanceId:{},instanceName:{},moduleType:{},resolvedArgs:{},status:{}},emits:["submit"],setup(l,{emit:d}){const n=l,i=d,m=useRoute(),p=e.computed(()=>m.params.slug),f=useModuleApi(n.instanceId),a=e.ref(!0),o=e.ref(null),t=e.ref(null);async function g(){const s=n.resolvedArgs?.productId;if(!s){o.value="No product ID provided",a.value=!1;return}a.value=!0,o.value=null;try{const r=await f.get(`/products/${s}`);t.value=r,u({productId:t.value.id,title:t.value.title,price:t.value.price,currency:t.value.currency,stock:t.value.stock,status:t.value.status,available:t.value.available})}catch(r){o.value=r?.data?.statusMessage||r?.message||"Failed to load product",u(`Error fetching product: ${o.value}`)}finally{a.value=!1}}e.onMounted(()=>{g()});function u(s){n.status!=="completed"&&i("submit",s)}const x=e.computed(()=>t.value?new Intl.NumberFormat(void 0,{style:"currency",currency:t.value.currency||"EUR"}).format(t.value.price):""),v=e.computed(()=>{switch(t.value?.status){case"published":return"text-emerald-600 dark:text-emerald-400 bg-emerald-50 dark:bg-emerald-900/20";case"draft":return"text-amber-600 dark:text-amber-400 bg-amber-50 dark:bg-amber-900/20";case"archived":return"text-gray-600 dark:text-gray-400 bg-gray-100 dark:bg-gray-800";default:return"text-muted-foreground bg-muted"}});return(s,r)=>{const k=e.resolveComponent("NuxtLink");return e.openBlock(),e.createElementBlock("div",y,[e.unref(a)?(e.openBlock(),e.createElementBlock("div",_,[e.createVNode(e.unref(c.Loader2),{class:"size-4 animate-spin text-muted-foreground"}),r[0]||(r[0]=e.createElementVNode("span",{class:"text-xs text-muted-foreground"},"Loading product…",-1))])):e.unref(o)?(e.openBlock(),e.createElementBlock("div",b,e.toDisplayString(e.unref(o)),1)):e.unref(t)?(e.openBlock(),e.createElementBlock("div",N,[e.createElementVNode("div",h,[e.createElementVNode("div",E,[e.unref(t).featuredMedia?(e.openBlock(),e.createElementBlock("img",{key:0,src:e.unref(t).featuredMedia,alt:e.unref(t).title,class:"size-full object-cover"},null,8,V)):(e.openBlock(),e.createBlock(e.unref(c.Package),{key:1,class:"size-6 text-muted-foreground"}))]),e.createElementVNode("div",B,[e.createElementVNode("p",S,e.toDisplayString(e.unref(t).title),1),e.createElementVNode("p",w,e.toDisplayString(e.unref(x)),1),e.createElementVNode("div",C,[e.createElementVNode("span",{class:e.normalizeClass(["text-[10px] font-medium px-1.5 py-0.5 rounded-full uppercase",e.unref(v)])},e.toDisplayString(e.unref(t).status),3),e.createElementVNode("span",D," Stock: "+e.toDisplayString(e.unref(t).stock??"—"),1)])])]),e.unref(t).description?(e.openBlock(),e.createElementBlock("p",I,e.toDisplayString(e.unref(t).description),1)):e.createCommentVNode("",!0),e.createVNode(k,{to:`/projects/${e.unref(p)}/modules/${l.instanceId}/${e.unref(t).id}`,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"}),r[1]||(r[1]=e.createTextVNode(" View full details ",-1))]),_:1},8,["to"])])):e.createCommentVNode("",!0)])}}});exports.default=z;
|