@oneclick.dev/cms-core-modules 0.0.123 → 0.0.124
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/{ContentEditor-C-Wm48ai.js → ContentEditor-BcIUumah.js} +39 -39
- package/dist/{ContentEditor-MDGolnIP.mjs → ContentEditor-DX1bTQKs.mjs} +4910 -4793
- package/dist/{Detail-Dk8E6_uF.mjs → Detail-B7pe808q.mjs} +15 -14
- package/dist/Detail-BESGmY7z.js +1 -0
- package/dist/{Detail-Cn9Bk0u0.mjs → Detail-B_Q7Qkuz.mjs} +26 -25
- package/dist/Detail-CNiLIEh9.js +1 -0
- package/dist/{Detail-B_scnidb.mjs → Detail-DNxAzeCs.mjs} +35 -34
- package/dist/Detail-t3tOcy3X.js +1 -0
- package/dist/Editor-D4evcdhv.mjs +768 -0
- package/dist/Editor-gLLtuJbY.js +1 -0
- package/dist/FormStatusBadge.vue_vue_type_script_setup_true_lang-BjKpsqT9.js +1 -0
- package/dist/FormStatusBadge.vue_vue_type_script_setup_true_lang-D5v5AhLe.mjs +76 -0
- package/dist/Knowledge-B66vxz--.js +1 -0
- package/dist/Knowledge-BnMTTuJ7.mjs +742 -0
- package/dist/Overview-BE4uYPx0.mjs +745 -0
- package/dist/Overview-CQRpFhbJ.mjs +286 -0
- package/dist/Overview-CTs7sX4d.js +1 -0
- package/dist/Overview-Cj89XXKN.js +1 -0
- package/dist/Overview-D_c18mbR.mjs +248 -0
- package/dist/Overview-g4Rcj245.js +1 -0
- package/dist/TableView-6mdrL3zx.js +4 -0
- package/dist/{TableView-C4Zyp8d7.mjs → TableView-Du5nOE6R.mjs} +2 -2
- package/dist/Test-CzmOmi53.mjs +447 -0
- package/dist/Test-USDtNFY1.js +1 -0
- package/dist/UserDetail-DpUL3mhk.mjs +1483 -0
- package/dist/UserDetail-KRIfxaYd.js +1 -0
- package/dist/cms-core-modules.css +1 -1
- package/dist/index-CQuN5rKx.js +1 -0
- package/dist/index-CnDGeInm.js +1 -0
- package/dist/index-CqDTc5Ig.mjs +20 -0
- package/dist/index-CyvvAdt4.js +1 -0
- package/dist/index-DIRD7t5_.mjs +20 -0
- package/dist/index-OJuBYR60.mjs +57 -0
- package/dist/index.cjs.js +1 -1
- package/dist/index.mjs +327 -84
- package/dist/server-handlers.cjs.js +1 -1
- package/dist/server-handlers.mjs +1764 -605
- package/dist/src/contentManager/components/content-editor/tiptap-extensions/Container.d.ts +1 -1
- package/dist/src/contentManager/components/content-editor/tiptap-extensions/Row.d.ts +7 -0
- package/dist/src/contentManager/components/content-editor/tiptap-extensions/Stack.d.ts +7 -0
- package/dist/src/contentManager/components/content-editor/tiptap-extensions/helpers/resizeHistory.d.ts +9 -0
- package/dist/src/contentManager/components/content-editor/tiptap-menus/ElementEditorMenu.vue.d.ts +3 -1
- package/dist/src/firebaseAuthManager/components/DeleteUserDialog.vue.d.ts +25 -0
- package/dist/src/firebaseAuthManager/components/ReasonActionDialog.vue.d.ts +23 -0
- package/dist/src/firebaseAuthManager/components/UserStatusBadge.vue.d.ts +5 -0
- package/dist/src/firebaseAuthManager/config.d.ts +151 -0
- package/dist/src/firebaseAuthManager/index.d.ts +163 -0
- package/dist/src/firebaseAuthManager/index.vue.d.ts +14 -0
- package/dist/src/firebaseAuthManager/metadata.d.ts +2 -0
- package/dist/src/firebaseAuthManager/pages/Overview.vue.d.ts +2 -0
- package/dist/src/firebaseAuthManager/pages/UserDetail.vue.d.ts +2 -0
- package/dist/src/firebaseAuthManager/permissions.d.ts +5 -0
- package/dist/src/firebaseAuthManager/routes.d.ts +5 -0
- package/dist/src/firebaseAuthManager/server.d.ts +162 -0
- package/dist/src/firebaseAuthManager/types.d.ts +84 -0
- package/dist/src/formBuilder/components/FormPreviewDialog.vue.d.ts +12 -0
- package/dist/src/formBuilder/components/FormStatusBadge.vue.d.ts +9 -0
- package/dist/src/formBuilder/config.d.ts +31 -0
- package/dist/src/formBuilder/index.d.ts +44 -0
- package/dist/src/formBuilder/index.vue.d.ts +14 -0
- package/dist/src/formBuilder/lib/forms.d.ts +11 -0
- package/dist/src/formBuilder/metadata.d.ts +2 -0
- package/dist/src/formBuilder/pages/Editor.vue.d.ts +2 -0
- package/dist/src/formBuilder/pages/Overview.vue.d.ts +2 -0
- package/dist/src/formBuilder/permissions.d.ts +5 -0
- package/dist/src/formBuilder/routes.d.ts +5 -0
- package/dist/src/formBuilder/server.d.ts +87 -0
- package/dist/src/formBuilder/tools.d.ts +1 -0
- package/dist/src/formBuilder/types.d.ts +46 -0
- package/dist/src/helpbot/composables/useHelpbotApi.d.ts +18 -0
- package/dist/src/helpbot/config.d.ts +17 -0
- package/dist/src/helpbot/index.d.ts +29 -0
- package/dist/src/helpbot/index.vue.d.ts +2 -0
- package/dist/src/helpbot/metadata.d.ts +2 -0
- package/dist/src/helpbot/pages/Knowledge.vue.d.ts +4 -0
- package/dist/src/helpbot/pages/Overview.vue.d.ts +2 -0
- package/dist/src/helpbot/pages/Test.vue.d.ts +4 -0
- package/dist/src/helpbot/permissions.d.ts +5 -0
- package/dist/src/helpbot/routes.d.ts +5 -0
- package/dist/src/helpbot/types.d.ts +42 -0
- package/dist/src/index.d.ts +3 -0
- package/dist/src/server-handlers.d.ts +2 -0
- package/dist/types-9N-DKxNj.mjs +250 -0
- package/dist/types-BMraG1kN.js +1 -0
- package/dist/types-Cem0vPo_.js +1 -0
- package/dist/types-ibC3-e1N.mjs +2630 -0
- package/dist/useHelpbotApi-BIIungOh.js +1 -0
- package/dist/useHelpbotApi-HC9JSiSn.mjs +229 -0
- package/dist/vee-validate-zod-BQElPD0m.js +1 -0
- package/dist/vee-validate-zod-CN16K2x9.mjs +1780 -0
- package/package.json +2 -2
- package/src/formBuilder/tools.ts +1 -0
- package/dist/Detail-BCUUNWvp.js +0 -1
- package/dist/Detail-DGg_xXZc.js +0 -1
- package/dist/Detail-Sc2qZdxj.js +0 -1
- package/dist/TableView-BkwoKREo.js +0 -4
- package/dist/vee-validate-zod-SjDT8X35.mjs +0 -4404
- package/dist/vee-validate-zod-VCmLnrtQ.js +0 -1
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
import { defineComponent as Q, ref as v, computed as g, onMounted as Y, resolveComponent as f, openBlock as o, createElementBlock as r, createElementVNode as t, normalizeClass as R, createTextVNode as c, toDisplayString as i, unref as d, createCommentVNode as F, createBlock as y, withCtx as n, createVNode as s, Fragment as w, renderList as j } from "vue";
|
|
2
|
+
import { Plus as D, ShieldAlert as G, Search as J, AlertCircle as K, RefreshCw as W, FileText as X, ArrowRight as Z } from "lucide-vue-next";
|
|
3
|
+
import { useModule as ee, useModuleRoute as te, useModulePermissions as se, useModuleApi as le, useModuleBreadcrumbs as oe } from "@oneclick.dev/cms-kit";
|
|
4
|
+
import { _ as ae, f as ne, u as re, r as ie } from "./FormStatusBadge.vue_vue_type_script_setup_true_lang-D5v5AhLe.mjs";
|
|
5
|
+
const de = { class: "mx-auto flex w-full max-w-7xl flex-1 flex-col px-4 py-6 sm:px-6 sm:py-10 lg:px-8" }, ue = { class: "flex flex-col gap-5 sm:flex-row sm:items-start sm:justify-between" }, ce = { class: "max-w-2xl" }, me = { class: "flex flex-wrap items-center gap-2" }, fe = {
|
|
6
|
+
key: 0,
|
|
7
|
+
class: "mt-1 text-xs text-muted-foreground"
|
|
8
|
+
}, pe = { class: "break-all rounded bg-muted px-1 py-0.5" }, xe = {
|
|
9
|
+
key: 0,
|
|
10
|
+
class: "mt-10 flex flex-1 items-center justify-center rounded-xl border border-dashed p-8"
|
|
11
|
+
}, ve = { class: "max-w-md text-center" }, ge = { class: "mx-auto flex size-11 items-center justify-center rounded-full bg-muted" }, he = { class: "mt-8 flex flex-col gap-4 border-b pb-5 lg:flex-row lg:items-center lg:justify-between" }, be = {
|
|
12
|
+
class: "flex max-w-full gap-1 overflow-x-auto pb-1 lg:pb-0",
|
|
13
|
+
"aria-label": "Filter forms by status"
|
|
14
|
+
}, _e = { class: "rounded-full bg-background/80 px-1.5 py-0.5 text-[11px] text-muted-foreground" }, ye = { class: "relative w-full lg:w-80" }, we = {
|
|
15
|
+
key: 0,
|
|
16
|
+
class: "grid gap-4 py-6 sm:grid-cols-2 xl:grid-cols-3",
|
|
17
|
+
"aria-label": "Loading forms"
|
|
18
|
+
}, ke = { class: "flex items-start justify-between gap-4" }, Ce = {
|
|
19
|
+
key: 1,
|
|
20
|
+
class: "mt-6 rounded-xl border border-destructive/30 bg-destructive/5 p-6"
|
|
21
|
+
}, ze = { class: "flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between" }, Fe = { class: "flex items-start gap-3" }, je = { class: "mt-1 text-sm text-muted-foreground" }, Ne = {
|
|
22
|
+
key: 2,
|
|
23
|
+
class: "mt-6 flex min-h-80 items-center justify-center rounded-xl border border-dashed p-8"
|
|
24
|
+
}, Ve = { class: "max-w-md text-center" }, Be = { class: "mx-auto flex size-12 items-center justify-center rounded-full bg-muted" }, Se = { class: "mt-4 font-semibold" }, $e = { class: "mt-1 text-sm leading-6 text-muted-foreground" }, Te = {
|
|
25
|
+
key: 3,
|
|
26
|
+
class: "grid gap-4 py-6 sm:grid-cols-2 xl:grid-cols-3"
|
|
27
|
+
}, Ae = { class: "flex items-start justify-between gap-3" }, Le = { class: "w-fit max-w-full truncate rounded bg-muted px-2 py-1 text-xs text-muted-foreground" }, Me = { class: "line-clamp-3 text-sm leading-6 text-muted-foreground" }, Re = { class: "min-w-0 text-xs text-muted-foreground" }, De = { class: "truncate" }, Ie = {
|
|
28
|
+
key: 0,
|
|
29
|
+
class: "mt-0.5"
|
|
30
|
+
}, Ee = {
|
|
31
|
+
key: 1,
|
|
32
|
+
class: "mt-0.5"
|
|
33
|
+
}, Qe = /* @__PURE__ */ Q({
|
|
34
|
+
__name: "Overview",
|
|
35
|
+
setup(Pe) {
|
|
36
|
+
const { config: N } = ee(), { moduleId: I, navigateTo: k } = te(), { hasPermission: V } = se(), E = le();
|
|
37
|
+
oe(() => []);
|
|
38
|
+
const u = v([]), C = v(!1), h = v(""), b = v(""), x = v("all"), z = g(() => V("view-forms")), B = g(() => z.value && V("create-form")), _ = g(() => !!N.databaseIntegration), P = g(() => ({
|
|
39
|
+
all: u.value.length,
|
|
40
|
+
draft: u.value.filter((a) => a.status === "draft").length,
|
|
41
|
+
published: u.value.filter((a) => a.status === "published").length,
|
|
42
|
+
archived: u.value.filter((a) => a.status === "archived").length
|
|
43
|
+
})), S = g(() => {
|
|
44
|
+
const a = b.value.trim().toLocaleLowerCase();
|
|
45
|
+
return u.value.filter((e) => x.value !== "all" && e.status !== x.value ? !1 : a ? [e.name, e.key, e.description].some((m) => m?.toLocaleLowerCase().includes(a)) : !0);
|
|
46
|
+
});
|
|
47
|
+
async function $() {
|
|
48
|
+
if (z.value) {
|
|
49
|
+
C.value = !0, h.value = "";
|
|
50
|
+
try {
|
|
51
|
+
const a = await E.get("/forms");
|
|
52
|
+
u.value = re(a);
|
|
53
|
+
} catch (a) {
|
|
54
|
+
h.value = ie(a, "The forms could not be loaded from Firebase.");
|
|
55
|
+
} finally {
|
|
56
|
+
C.value = !1;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
function U(a) {
|
|
61
|
+
k(`forms/${encodeURIComponent(a.id)}`);
|
|
62
|
+
}
|
|
63
|
+
return Y($), (a, e) => {
|
|
64
|
+
const m = f("Button"), q = f("Input"), p = f("Skeleton"), T = f("CardHeader"), A = f("CardContent"), L = f("CardFooter"), M = f("Card"), H = f("CardTitle");
|
|
65
|
+
return o(), r("main", de, [
|
|
66
|
+
t("header", ue, [
|
|
67
|
+
t("div", ce, [
|
|
68
|
+
t("div", me, [
|
|
69
|
+
e[4] || (e[4] = t("h1", { class: "text-2xl font-semibold tracking-tight sm:text-3xl" }, "Forms", -1)),
|
|
70
|
+
t("span", {
|
|
71
|
+
class: R(["inline-flex items-center gap-1.5 rounded-full border px-2.5 py-1 text-xs font-medium", _.value ? "border-emerald-300/70 bg-emerald-50 text-emerald-800 dark:border-emerald-700/70 dark:bg-emerald-950/40 dark:text-emerald-300" : "border-destructive/30 bg-destructive/10 text-destructive"])
|
|
72
|
+
}, [
|
|
73
|
+
t("span", {
|
|
74
|
+
class: R(["size-1.5 rounded-full", _.value ? "bg-emerald-500" : "bg-destructive"])
|
|
75
|
+
}, null, 2),
|
|
76
|
+
c(" " + i(_.value ? "Firebase configured" : "Database not configured"), 1)
|
|
77
|
+
], 2)
|
|
78
|
+
]),
|
|
79
|
+
e[7] || (e[7] = t("p", { class: "mt-2 text-sm leading-6 text-muted-foreground sm:text-base" }, " Build drafts, preview their behavior, and publish exact revisions for your apps to load. ", -1)),
|
|
80
|
+
_.value ? (o(), r("p", fe, [
|
|
81
|
+
e[5] || (e[5] = c(" Definitions are stored in ", -1)),
|
|
82
|
+
t("code", pe, i(d(N).formsCollection) + "/" + i(d(I)) + "/forms", 1),
|
|
83
|
+
e[6] || (e[6] = c(". ", -1))
|
|
84
|
+
])) : F("", !0)
|
|
85
|
+
]),
|
|
86
|
+
B.value ? (o(), y(m, {
|
|
87
|
+
key: 0,
|
|
88
|
+
class: "w-full shrink-0 sm:w-auto",
|
|
89
|
+
onClick: e[0] || (e[0] = (l) => d(k)("forms/new"))
|
|
90
|
+
}, {
|
|
91
|
+
default: n(() => [
|
|
92
|
+
s(d(D), { class: "size-4" }),
|
|
93
|
+
e[8] || (e[8] = c(" New form ", -1))
|
|
94
|
+
]),
|
|
95
|
+
_: 1
|
|
96
|
+
})) : F("", !0)
|
|
97
|
+
]),
|
|
98
|
+
z.value ? (o(), r(w, { key: 1 }, [
|
|
99
|
+
t("section", he, [
|
|
100
|
+
t("div", be, [
|
|
101
|
+
(o(), r(w, null, j(["all", "draft", "published", "archived"], (l) => s(m, {
|
|
102
|
+
key: l,
|
|
103
|
+
size: "sm",
|
|
104
|
+
variant: x.value === l ? "secondary" : "ghost",
|
|
105
|
+
class: "shrink-0 capitalize",
|
|
106
|
+
onClick: (O) => x.value = l
|
|
107
|
+
}, {
|
|
108
|
+
default: n(() => [
|
|
109
|
+
c(i(l) + " ", 1),
|
|
110
|
+
t("span", _e, i(P.value[l]), 1)
|
|
111
|
+
]),
|
|
112
|
+
_: 2
|
|
113
|
+
}, 1032, ["variant", "onClick"])), 64))
|
|
114
|
+
]),
|
|
115
|
+
t("div", ye, [
|
|
116
|
+
s(d(J), { class: "pointer-events-none absolute left-3 top-1/2 size-4 -translate-y-1/2 text-muted-foreground" }),
|
|
117
|
+
s(q, {
|
|
118
|
+
modelValue: b.value,
|
|
119
|
+
"onUpdate:modelValue": e[1] || (e[1] = (l) => b.value = l),
|
|
120
|
+
type: "search",
|
|
121
|
+
placeholder: "Search by name, key, or description",
|
|
122
|
+
class: "pl-9",
|
|
123
|
+
"aria-label": "Search forms"
|
|
124
|
+
}, null, 8, ["modelValue"])
|
|
125
|
+
])
|
|
126
|
+
]),
|
|
127
|
+
C.value ? (o(), r("section", we, [
|
|
128
|
+
(o(), r(w, null, j(6, (l) => s(M, {
|
|
129
|
+
key: l,
|
|
130
|
+
class: "overflow-hidden"
|
|
131
|
+
}, {
|
|
132
|
+
default: n(() => [
|
|
133
|
+
s(T, { class: "gap-3" }, {
|
|
134
|
+
default: n(() => [
|
|
135
|
+
t("div", ke, [
|
|
136
|
+
s(p, { class: "h-5 w-2/3" }),
|
|
137
|
+
s(p, { class: "h-5 w-20 rounded-full" })
|
|
138
|
+
]),
|
|
139
|
+
s(p, { class: "h-4 w-2/5" })
|
|
140
|
+
]),
|
|
141
|
+
_: 1
|
|
142
|
+
}),
|
|
143
|
+
s(A, { class: "space-y-2" }, {
|
|
144
|
+
default: n(() => [
|
|
145
|
+
s(p, { class: "h-4 w-full" }),
|
|
146
|
+
s(p, { class: "h-4 w-4/5" })
|
|
147
|
+
]),
|
|
148
|
+
_: 1
|
|
149
|
+
}),
|
|
150
|
+
s(L, { class: "justify-between border-t pt-4" }, {
|
|
151
|
+
default: n(() => [
|
|
152
|
+
s(p, { class: "h-4 w-28" }),
|
|
153
|
+
s(p, { class: "size-8 rounded-md" })
|
|
154
|
+
]),
|
|
155
|
+
_: 1
|
|
156
|
+
})
|
|
157
|
+
]),
|
|
158
|
+
_: 1
|
|
159
|
+
})), 64))
|
|
160
|
+
])) : h.value ? (o(), r("section", Ce, [
|
|
161
|
+
t("div", ze, [
|
|
162
|
+
t("div", Fe, [
|
|
163
|
+
s(d(K), { class: "mt-0.5 size-5 shrink-0 text-destructive" }),
|
|
164
|
+
t("div", null, [
|
|
165
|
+
e[11] || (e[11] = t("h2", { class: "font-medium" }, "Could not load forms", -1)),
|
|
166
|
+
t("p", je, i(h.value), 1)
|
|
167
|
+
])
|
|
168
|
+
]),
|
|
169
|
+
s(m, {
|
|
170
|
+
variant: "outline",
|
|
171
|
+
class: "shrink-0",
|
|
172
|
+
onClick: $
|
|
173
|
+
}, {
|
|
174
|
+
default: n(() => [
|
|
175
|
+
s(d(W), { class: "size-4" }),
|
|
176
|
+
e[12] || (e[12] = c(" Try again ", -1))
|
|
177
|
+
]),
|
|
178
|
+
_: 1
|
|
179
|
+
})
|
|
180
|
+
])
|
|
181
|
+
])) : S.value.length === 0 ? (o(), r("section", Ne, [
|
|
182
|
+
t("div", Ve, [
|
|
183
|
+
t("div", Be, [
|
|
184
|
+
s(d(X), { class: "size-5 text-muted-foreground" })
|
|
185
|
+
]),
|
|
186
|
+
t("h2", Se, i(u.value.length === 0 ? "Create your first form" : "No forms match this view"), 1),
|
|
187
|
+
t("p", $e, i(u.value.length === 0 ? "Start with a blank draft, build its fields, then publish an immutable revision." : "Change the status filter or search query to find another form."), 1),
|
|
188
|
+
u.value.length === 0 && B.value ? (o(), y(m, {
|
|
189
|
+
key: 0,
|
|
190
|
+
class: "mt-5",
|
|
191
|
+
onClick: e[2] || (e[2] = (l) => d(k)("forms/new"))
|
|
192
|
+
}, {
|
|
193
|
+
default: n(() => [
|
|
194
|
+
s(d(D), { class: "size-4" }),
|
|
195
|
+
e[13] || (e[13] = c(" New form ", -1))
|
|
196
|
+
]),
|
|
197
|
+
_: 1
|
|
198
|
+
})) : u.value.length > 0 ? (o(), y(m, {
|
|
199
|
+
key: 1,
|
|
200
|
+
variant: "outline",
|
|
201
|
+
class: "mt-5",
|
|
202
|
+
onClick: e[3] || (e[3] = (l) => {
|
|
203
|
+
b.value = "", x.value = "all";
|
|
204
|
+
})
|
|
205
|
+
}, {
|
|
206
|
+
default: n(() => [...e[14] || (e[14] = [
|
|
207
|
+
c(" Clear filters ", -1)
|
|
208
|
+
])]),
|
|
209
|
+
_: 1
|
|
210
|
+
})) : F("", !0)
|
|
211
|
+
])
|
|
212
|
+
])) : (o(), r("section", Te, [
|
|
213
|
+
(o(!0), r(w, null, j(S.value, (l) => (o(), y(M, {
|
|
214
|
+
key: l.id,
|
|
215
|
+
class: "group flex min-h-56 flex-col transition-colors hover:border-foreground/20"
|
|
216
|
+
}, {
|
|
217
|
+
default: n(() => [
|
|
218
|
+
s(T, { class: "gap-3" }, {
|
|
219
|
+
default: n(() => [
|
|
220
|
+
t("div", Ae, [
|
|
221
|
+
s(H, {
|
|
222
|
+
class: "min-w-0 truncate text-base",
|
|
223
|
+
title: l.name
|
|
224
|
+
}, {
|
|
225
|
+
default: n(() => [
|
|
226
|
+
c(i(l.name), 1)
|
|
227
|
+
]),
|
|
228
|
+
_: 2
|
|
229
|
+
}, 1032, ["title"]),
|
|
230
|
+
s(ae, {
|
|
231
|
+
class: "shrink-0",
|
|
232
|
+
status: l.status,
|
|
233
|
+
"has-unpublished-changes": l.hasUnpublishedChanges
|
|
234
|
+
}, null, 8, ["status", "has-unpublished-changes"])
|
|
235
|
+
]),
|
|
236
|
+
t("code", Le, i(l.key), 1)
|
|
237
|
+
]),
|
|
238
|
+
_: 2
|
|
239
|
+
}, 1024),
|
|
240
|
+
s(A, { class: "flex-1" }, {
|
|
241
|
+
default: n(() => [
|
|
242
|
+
t("p", Me, i(l.description || "No description has been added."), 1)
|
|
243
|
+
]),
|
|
244
|
+
_: 2
|
|
245
|
+
}, 1024),
|
|
246
|
+
s(L, { class: "flex items-center justify-between gap-3 border-t pt-4" }, {
|
|
247
|
+
default: n(() => [
|
|
248
|
+
t("div", Re, [
|
|
249
|
+
t("p", De, "Updated " + i(d(ne)(l.updatedAt)), 1),
|
|
250
|
+
l.publishedRevision ? (o(), r("p", Ie, "Published revision " + i(l.publishedRevision), 1)) : (o(), r("p", Ee, "Not published"))
|
|
251
|
+
]),
|
|
252
|
+
s(m, {
|
|
253
|
+
size: "icon",
|
|
254
|
+
variant: "ghost",
|
|
255
|
+
class: "shrink-0",
|
|
256
|
+
"aria-label": `Open ${l.name}`,
|
|
257
|
+
onClick: (O) => U(l)
|
|
258
|
+
}, {
|
|
259
|
+
default: n(() => [
|
|
260
|
+
s(d(Z), { class: "size-4 transition-transform group-hover:translate-x-0.5" })
|
|
261
|
+
]),
|
|
262
|
+
_: 1
|
|
263
|
+
}, 8, ["aria-label", "onClick"])
|
|
264
|
+
]),
|
|
265
|
+
_: 2
|
|
266
|
+
}, 1024)
|
|
267
|
+
]),
|
|
268
|
+
_: 2
|
|
269
|
+
}, 1024))), 128))
|
|
270
|
+
]))
|
|
271
|
+
], 64)) : (o(), r("section", xe, [
|
|
272
|
+
t("div", ve, [
|
|
273
|
+
t("div", ge, [
|
|
274
|
+
s(d(G), { class: "size-5 text-muted-foreground" })
|
|
275
|
+
]),
|
|
276
|
+
e[9] || (e[9] = t("h2", { class: "mt-4 font-semibold" }, "You cannot view forms", -1)),
|
|
277
|
+
e[10] || (e[10] = t("p", { class: "mt-1 text-sm leading-6 text-muted-foreground" }, " Ask a project administrator for the View forms permission. ", -1))
|
|
278
|
+
])
|
|
279
|
+
]))
|
|
280
|
+
]);
|
|
281
|
+
};
|
|
282
|
+
}
|
|
283
|
+
});
|
|
284
|
+
export {
|
|
285
|
+
Qe as default
|
|
286
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),s=require("lucide-vue-next"),h=require("@oneclick.dev/cms-kit"),C=require("./useHelpbotApi-BIIungOh.js"),y={class:"mx-auto flex w-full max-w-7xl flex-col gap-6 py-6 @3xl:py-8"},E={class:"flex flex-col gap-4 @2xl:flex-row @2xl:items-start @2xl:justify-between"},B={class:"max-w-2xl"},S={class:"mb-2 flex items-center gap-2 text-sm font-medium text-primary"},z={class:"text-2xl font-semibold tracking-tight @2xl:text-3xl"},D={key:0,class:"flex items-start gap-3 rounded-xl border border-amber-500/30 bg-amber-500/5 px-4 py-3 text-sm",role:"status"},T={class:"mt-0.5 text-muted-foreground"},A={class:"flex flex-col gap-5 p-5 @2xl:flex-row @2xl:items-center @2xl:justify-between @3xl:p-6"},R={class:"flex min-w-0 items-start gap-4"},M={class:"grid size-11 shrink-0 place-items-center rounded-xl bg-muted"},j={class:"min-w-0"},F={class:"flex flex-wrap items-center gap-2"},L={class:"mt-1 text-sm leading-6 text-muted-foreground"},q={key:0,class:"mt-1 text-xs text-muted-foreground"},H={"aria-labelledby":"knowledge-summary-heading"},P={class:"grid gap-3 @xl:grid-cols-3"},K={class:"grid size-10 shrink-0 place-items-center rounded-lg bg-primary/10 text-primary"},O={class:"min-w-0"},W={class:"text-2xl font-semibold tabular-nums"},Y={class:"mt-0.5 text-sm font-medium"},I={class:"mt-1 text-xs leading-5 text-muted-foreground"},U={class:"grid gap-4 @2xl:grid-cols-2"},G={class:"flex items-start justify-between gap-4"},J={class:"grid size-10 place-items-center rounded-lg bg-primary/10 text-primary"},Q={class:"flex items-start justify-between gap-4"},X={class:"grid size-10 place-items-center rounded-lg bg-primary/10 text-primary"},Z={class:"rounded-xl border bg-muted/30 p-5"},$={class:"flex items-start gap-3"},ee=e.defineComponent({__name:"Overview",setup(te){h.useModuleBreadcrumbs(()=>[{text:"Overview"}]);const{config:N}=h.useModule(),{resolvePath:f}=h.useModuleRoute(),g=C.useHelpbotApi(),o=e.ref(null),u=e.ref(null),m=e.ref(null),x=e.ref(null),l=e.ref(!0),d=e.ref(""),v=e.ref(null),b=e.computed(()=>!!N.agentId),V=e.computed(()=>b.value&&o.value?.configured!==!1),c=e.computed(()=>V.value?d.value&&!o.value?{label:"Connection unavailable",description:"The helpbot could not be reached during the latest check.",icon:s.AlertCircle,iconClass:"text-destructive",badgeClass:"bg-destructive/10 text-destructive"}:o.value?.connected===!1?{label:"Connection needs attention",description:o.value.message||"Ask your agency to check the website helpbot connection.",icon:s.AlertCircle,iconClass:"text-destructive",badgeClass:"bg-destructive/10 text-destructive"}:o.value?.connected===!0?{label:"Connected",description:o.value.connectionName||"Your saved knowledge is connected to the website helpbot.",icon:s.CheckCircle2,iconClass:"text-emerald-600 dark:text-emerald-400",badgeClass:"bg-emerald-500/10 text-emerald-700 dark:bg-emerald-500/15 dark:text-emerald-300"}:{label:l.value?"Checking connection":"Connection checked",description:l.value?"Confirming that the website helpbot can reach its knowledge.":"The helpbot responded, but did not report a detailed connection state.",icon:l.value?s.Loader2:s.CheckCircle2,iconClass:l.value?"animate-spin text-muted-foreground":"text-emerald-600 dark:text-emerald-400",badgeClass:"bg-muted text-muted-foreground"}:{label:"Setup required",description:"Your agency still needs to assign the website helpbot.",icon:s.Settings2,iconClass:"text-amber-600 dark:text-amber-400",badgeClass:"bg-amber-500/10 text-amber-700 dark:bg-amber-500/15 dark:text-amber-300"}),_=e.computed(()=>[{label:"Saved answers",value:u.value,icon:s.BookOpen,description:"Short answers and business information"},{label:"PDF guides",value:m.value,icon:s.FileText,description:"Documents available to the helpbot"},{label:"Knowledge chunks",value:x.value,icon:s.Clock3,description:"Searchable sections across all knowledge"}]);async function w(){if(!b.value){l.value=!1;return}l.value=!0,d.value="";const[n,t,a]=await Promise.allSettled([g.getStatus(),g.listTexts(),g.listFiles()]);n.status==="fulfilled"&&(o.value=n.value),n.status==="fulfilled"?(u.value=n.value.sourceCounts.texts??(t.status==="fulfilled"?t.value.length:u.value),m.value=n.value.sourceCounts.pdfs??(a.status==="fulfilled"?a.value.length:m.value),x.value=n.value.sourceCounts.chunks??x.value):(t.status==="fulfilled"&&(u.value=t.value.length),a.status==="fulfilled"&&(m.value=a.value.length));const r=[n,t,a].filter(p=>p.status==="rejected");r.length&&(d.value=C.getHelpbotErrorMessage(r[0].reason,r.length===3?"The helpbot could not be reached.":"Some helpbot information could not be refreshed.")),v.value=new Date,l.value=!1}return e.onMounted(w),(n,t)=>{const a=e.resolveComponent("Button"),r=e.resolveComponent("NuxtLink"),p=e.resolveComponent("CardContent"),k=e.resolveComponent("Card");return e.openBlock(),e.createElementBlock("main",y,[e.createElementVNode("header",E,[e.createElementVNode("div",B,[e.createElementVNode("div",S,[e.createVNode(e.unref(s.Bot),{class:"size-4"}),t[0]||(t[0]=e.createTextVNode(" Website helpbot ",-1))]),e.createElementVNode("h1",z,e.toDisplayString(o.value?.helpbotName||"Helpbot overview"),1),t[1]||(t[1]=e.createElementVNode("p",{class:"mt-2 text-sm leading-6 text-muted-foreground"}," Keep the answers on your website accurate, then privately test what visitors will receive. ",-1))]),e.createVNode(a,{variant:"outline",class:"w-full @2xl:w-auto",disabled:l.value||!b.value,onClick:w},{default:e.withCtx(()=>[e.createVNode(e.unref(s.RefreshCw),{class:e.normalizeClass(["mr-2 size-4",{"animate-spin":l.value}])},null,8,["class"]),t[2]||(t[2]=e.createTextVNode(" Refresh ",-1))]),_:1},8,["disabled"])]),d.value?(e.openBlock(),e.createElementBlock("div",D,[e.createVNode(e.unref(s.AlertCircle),{class:"mt-0.5 size-4 shrink-0 text-amber-600 dark:text-amber-400"}),e.createElementVNode("div",null,[t[3]||(t[3]=e.createElementVNode("p",{class:"font-medium"},"Latest refresh was incomplete",-1)),e.createElementVNode("p",T,e.toDisplayString(d.value),1)])])):e.createCommentVNode("",!0),e.createVNode(k,{class:"overflow-hidden"},{default:e.withCtx(()=>[e.createVNode(p,{class:"p-0"},{default:e.withCtx(()=>[e.createElementVNode("div",A,[e.createElementVNode("div",R,[e.createElementVNode("div",M,[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(c.value.icon),{class:e.normalizeClass(["size-5",c.value.iconClass])},null,8,["class"]))]),e.createElementVNode("div",j,[e.createElementVNode("div",F,[t[4]||(t[4]=e.createElementVNode("h2",{class:"font-semibold"},"Helpbot connection",-1)),e.createElementVNode("span",{class:e.normalizeClass(["rounded-full px-2.5 py-1 text-xs font-medium",c.value.badgeClass])},e.toDisplayString(c.value.label),3)]),e.createElementVNode("p",L,e.toDisplayString(c.value.description),1),v.value?(e.openBlock(),e.createElementBlock("p",q," Checked "+e.toDisplayString(v.value.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"})),1)):e.createCommentVNode("",!0)])]),e.createVNode(r,{to:e.unref(f)("/knowledge"),class:"inline-flex h-10 w-full shrink-0 items-center justify-center rounded-md bg-primary px-4 text-sm font-medium text-primary-foreground shadow-sm transition-colors hover:bg-primary/90 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 @2xl:w-auto"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(o.value?.permissions.canManageKnowledge?"Manage knowledge":"Review knowledge")+" ",1),e.createVNode(e.unref(s.ArrowRight),{class:"ml-2 size-4"})]),_:1},8,["to"])])]),_:1})]),_:1}),e.createElementVNode("section",H,[t[5]||(t[5]=e.createElementVNode("div",{class:"mb-3 flex items-center justify-between gap-3"},[e.createElementVNode("h2",{id:"knowledge-summary-heading",class:"text-sm font-semibold"}," Knowledge summary "),e.createElementVNode("span",{class:"text-xs text-muted-foreground"},"Live connection data")],-1)),e.createElementVNode("div",P,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(_.value,i=>(e.openBlock(),e.createBlock(k,{key:i.label},{default:e.withCtx(()=>[e.createVNode(p,{class:"flex items-start gap-4 p-5"},{default:e.withCtx(()=>[e.createElementVNode("div",K,[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(i.icon),{class:"size-5"}))]),e.createElementVNode("div",O,[e.createElementVNode("p",W,[l.value&&i.value===null?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode("—")],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(i.value??"—"),1)],64))]),e.createElementVNode("p",Y,e.toDisplayString(i.label),1),e.createElementVNode("p",I,e.toDisplayString(i.description),1)])]),_:2},1024)]),_:2},1024))),128))])]),e.createElementVNode("div",U,[e.createVNode(r,{to:e.unref(f)("/knowledge"),class:"group rounded-xl border bg-card p-5 text-card-foreground shadow-sm transition-colors hover:border-primary/40"},{default:e.withCtx(()=>[e.createElementVNode("div",G,[e.createElementVNode("div",J,[e.createVNode(e.unref(s.BookOpen),{class:"size-5"})]),e.createVNode(e.unref(s.ArrowRight),{class:"size-4 text-muted-foreground transition-transform group-hover:translate-x-0.5"})]),t[6]||(t[6]=e.createElementVNode("h2",{class:"mt-5 font-semibold"},"Knowledge",-1)),t[7]||(t[7]=e.createElementVNode("p",{class:"mt-1 text-sm leading-6 text-muted-foreground"}," Add clear business answers and PDF guides that the helpbot may use. ",-1))]),_:1},8,["to"]),o.value?.permissions.canTestHelpbot?(e.openBlock(),e.createBlock(r,{key:0,to:e.unref(f)("/test"),class:"group rounded-xl border bg-card p-5 text-card-foreground shadow-sm transition-colors hover:border-primary/40"},{default:e.withCtx(()=>[e.createElementVNode("div",Q,[e.createElementVNode("div",X,[e.createVNode(e.unref(s.MessagesSquare),{class:"size-5"})]),e.createVNode(e.unref(s.ArrowRight),{class:"size-4 text-muted-foreground transition-transform group-hover:translate-x-0.5"})]),t[8]||(t[8]=e.createElementVNode("h2",{class:"mt-5 font-semibold"},"Private test",-1)),t[9]||(t[9]=e.createElementVNode("p",{class:"mt-1 text-sm leading-6 text-muted-foreground"}," Ask visitor questions and check which saved sources support the reply. ",-1))]),_:1},8,["to"])):e.createCommentVNode("",!0)]),e.createElementVNode("div",Z,[e.createElementVNode("div",$,[e.createVNode(e.unref(s.RefreshCw),{class:"mt-0.5 size-4 shrink-0 text-primary"}),t[10]||(t[10]=e.createElementVNode("div",null,[e.createElementVNode("h2",{class:"text-sm font-semibold"},"How knowledge updates work"),e.createElementVNode("p",{class:"mt-1 text-sm leading-6 text-muted-foreground"}," When an answer or PDF changes, it is prepared again for the helpbot. The updated information becomes available after processing completes. Use the private test to verify important answers. ")],-1))])])])}}});exports.default=ee;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),J=require("./index-ijdf0d9-.js"),a=require("lucide-vue-next"),B=require("@oneclick.dev/cms-kit"),s=require("./types-Cem0vPo_.js"),Se={class:"mx-auto flex w-full max-w-7xl flex-1 flex-col px-4 py-6 sm:px-6 sm:py-10 lg:px-8"},De={class:"flex flex-col gap-5 sm:flex-row sm:items-start sm:justify-between"},Ae={class:"max-w-2xl"},ze={class:"flex flex-wrap items-center gap-2"},Me={key:0,class:"mt-10 flex flex-1 items-center justify-center rounded-xl border border-dashed p-8"},Pe={class:"max-w-md text-center"},Ue={class:"mx-auto flex size-11 items-center justify-center rounded-full bg-muted"},Fe={class:"mt-8 border-b pb-5"},Re={class:"w-full max-w-2xl space-y-2"},Ie={class:"grid gap-2 sm:grid-cols-[8rem_minmax(0,1fr)_auto]"},Le={class:"relative min-w-0 flex-1"},$e={key:1,class:"mt-6 overflow-hidden rounded-xl border","aria-label":"Loading Firebase users"},je={class:"min-w-0 flex-1 space-y-2"},qe={class:"flex min-w-0 items-center gap-3"},He={class:"min-w-0"},Ge={class:"truncate font-medium"},Oe=["title"],Xe={class:"mt-2 flex flex-wrap gap-1 @2xl:hidden"},Ke={key:2,class:"text-sm text-muted-foreground"},We={class:"flex max-w-64 flex-wrap gap-1"},Ye={key:0,class:"text-sm text-muted-foreground"},Je={class:"mt-5 flex flex-col gap-3 text-sm text-muted-foreground sm:flex-row sm:items-center sm:justify-between"},Qe={key:0},Ze=e.defineComponent({__name:"Overview",setup(et){const{config:$}=B.useModule(),A=B.useModuleApi(),{navigateTo:C}=B.useModuleRoute(),{hasPermission:k}=B.useModulePermissions();B.useModuleBreadcrumbs(()=>[]);const u=e.ref([]),d=e.ref(!1),T=e.ref(""),z=e.ref(""),b=e.ref(""),m=e.ref(""),h=e.ref("uid"),E=e.ref("uid"),w=e.ref(null),g=e.ref(null),c=e.ref([]),i=e.ref(null),S=e.ref(!1),V=e.ref(""),M=e.computed(()=>k("view-auth-users")),p=e.computed(()=>k("view-auth-user-pii")),j=e.computed(()=>k("create-auth-users")),q=e.computed(()=>k("manage-auth-status")),H=e.computed(()=>k("manage-auth-sessions")),Q=e.computed(()=>q.value||H.value),P=e.computed(()=>!!$.linkFirestoreProfiles),Z=e.computed(()=>{const l=Number($.pageSize)||50;return Math.min(100,Math.max(10,l))}),ee=e.computed(()=>c.value.length+1);function U(l){return p.value?l.displayName||l.email||l.phoneNumber||"Unnamed user":`User ${l.uid.slice(0,8)}`}function F(l){return p.value&&(l.email||l.phoneNumber)||l.uid}async function f(l=w.value){if(!M.value)return!1;d.value=!0,T.value="";const t={limit:Z.value};l&&(t.pageToken=l),m.value&&(t.search=m.value,t.searchBy=E.value);try{const n=await A.get("/users",{query:t});return u.value=Array.isArray(n.users)?n.users:[],g.value=n.nextPageToken||null,w.value=l,!0}catch(n){return u.value=[],g.value=null,T.value=s.getReadableError(n,"Firebase Authentication users could not be loaded."),!1}finally{d.value=!1}}async function te(){m.value=b.value,E.value=h.value,c.value=[],w.value=null,await f(null)}async function G(){b.value="",m.value="",c.value=[],w.value=null,await f(null)}async function oe(){if(!g.value||d.value)return;const l=w.value;await f(g.value)&&c.value.push(l)}async function le(){if(c.value.length===0||d.value)return;const l=c.value[c.value.length-1]||null;await f(l)&&c.value.pop()}function ae(l){const t=l.disabled;i.value={user:l,kind:"status",disabled:!t,title:t?"Restore sign-in":"Suspend sign-in",description:t?"This user will be allowed to authenticate with the connected Firebase project again.":"This user will no longer be able to sign in or refresh their Firebase session.",confirmLabel:t?"Restore sign-in":"Suspend sign-in",destructive:!t},V.value=""}function ne(l){i.value={user:l,kind:"sessions",title:"Revoke all sessions",description:"All Firebase refresh tokens for this user will be revoked. Existing ID tokens can remain valid until they expire unless the connected app checks revocation.",confirmLabel:"Revoke sessions",destructive:!0},V.value=""}function O(l){l||(i.value=null,V.value="")}async function re(l){const t=i.value;if(!(!t||S.value)){S.value=!0,V.value="";try{let n;const r=s.encodeFirebaseUid(t.user.uid);t.kind==="status"?n=await A.post(`/users/${r}/status`,{body:{disabled:!!t.disabled,reason:l}}):n=await A.post(`/users/${r}/revoke-sessions`,{body:{reason:l}});const _=s.unwrapFirebaseAuthUser(n),D=u.value.findIndex(R=>R.uid===_.uid);D>=0&&(u.value[D]=_),J.toast.success(t.kind==="status"?_.disabled?"Sign-in suspended":"Sign-in restored":"Sessions revoked"),s.mutationAuditWasNotRecorded(n)&&(z.value="The account action completed, but Studio could not confirm that its activity entry was recorded.",J.toast.warning("Action completed without a confirmed activity entry")),O(!1)}catch(n){V.value=s.getReadableError(n,"The account action could not be completed.")}finally{S.value=!1}}}return e.onMounted(()=>{M.value&&f(null)}),(l,t)=>{const n=e.resolveComponent("Badge"),r=e.resolveComponent("Button"),_=e.resolveComponent("Label"),D=e.resolveComponent("SelectValue"),R=e.resolveComponent("SelectTrigger"),I=e.resolveComponent("SelectItem"),se=e.resolveComponent("SelectContent"),ie=e.resolveComponent("Select"),de=e.resolveComponent("Input"),X=e.resolveComponent("AlertTitle"),K=e.resolveComponent("AlertDescription"),W=e.resolveComponent("Alert"),y=e.resolveComponent("Skeleton"),ce=e.resolveComponent("EmptyMedia"),ue=e.resolveComponent("EmptyTitle"),me=e.resolveComponent("EmptyDescription"),pe=e.resolveComponent("EmptyHeader"),fe=e.resolveComponent("EmptyContent"),ve=e.resolveComponent("Empty"),v=e.resolveComponent("TableHead"),Y=e.resolveComponent("TableRow"),xe=e.resolveComponent("TableHeader"),Ne=e.resolveComponent("AvatarImage"),be=e.resolveComponent("AvatarFallback"),Ve=e.resolveComponent("Avatar"),x=e.resolveComponent("TableCell"),Ce=e.resolveComponent("DropdownMenuTrigger"),ke=e.resolveComponent("DropdownMenuLabel"),he=e.resolveComponent("DropdownMenuSeparator"),L=e.resolveComponent("DropdownMenuItem"),we=e.resolveComponent("DropdownMenuContent"),ge=e.resolveComponent("DropdownMenu"),_e=e.resolveComponent("TableBody"),ye=e.resolveComponent("Table"),Be=e.resolveComponent("Card"),Te=e.resolveComponent("ButtonGroupText"),Ee=e.resolveComponent("ButtonGroup");return e.openBlock(),e.createElementBlock("main",Se,[e.createElementVNode("header",De,[e.createElementVNode("div",Ae,[e.createElementVNode("div",ze,[t[8]||(t[8]=e.createElementVNode("h1",{class:"text-2xl font-semibold tracking-tight sm:text-3xl"},"Firebase users",-1)),e.createVNode(n,{variant:"outline",class:"gap-1.5"},{default:e.withCtx(()=>[...t[7]||(t[7]=[e.createElementVNode("span",{class:"size-1.5 rounded-full bg-emerald-500"},null,-1),e.createTextVNode(" Firebase integration configured ",-1)])]),_:1})]),t[9]||(t[9]=e.createElementVNode("p",{class:"mt-2 text-sm leading-6 text-muted-foreground sm:text-base"}," Find an exact identity, review access state, and perform accountable account actions. ",-1))]),j.value?(e.openBlock(),e.createBlock(r,{key:0,class:"w-full shrink-0 sm:w-auto",onClick:t[0]||(t[0]=o=>e.unref(C)("new"))},{default:e.withCtx(()=>[e.createVNode(e.unref(a.Plus),{class:"size-4"}),t[10]||(t[10]=e.createTextVNode(" New user ",-1))]),_:1})):e.createCommentVNode("",!0)]),M.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createElementVNode("section",Fe,[e.createElementVNode("form",{class:"flex flex-col gap-3 lg:flex-row lg:items-end lg:justify-between",onSubmit:e.withModifiers(te,["prevent"])},[e.createElementVNode("div",Re,[e.createVNode(_,{for:"firebase-auth-user-search"},{default:e.withCtx(()=>[...t[13]||(t[13]=[e.createTextVNode("Exact user search",-1)])]),_:1}),e.createElementVNode("div",Ie,[e.createVNode(ie,{modelValue:h.value,"onUpdate:modelValue":t[1]||(t[1]=o=>h.value=o)},{default:e.withCtx(()=>[e.createVNode(R,{"aria-label":"Search Firebase users by"},{default:e.withCtx(()=>[e.createVNode(D)]),_:1}),e.createVNode(se,null,{default:e.withCtx(()=>[e.createVNode(I,{value:"uid"},{default:e.withCtx(()=>[...t[14]||(t[14]=[e.createTextVNode("UID",-1)])]),_:1}),e.createVNode(I,{value:"email",disabled:!p.value},{default:e.withCtx(()=>[...t[15]||(t[15]=[e.createTextVNode("Email",-1)])]),_:1},8,["disabled"]),e.createVNode(I,{value:"phone",disabled:!p.value},{default:e.withCtx(()=>[...t[16]||(t[16]=[e.createTextVNode("Phone",-1)])]),_:1},8,["disabled"])]),_:1})]),_:1},8,["modelValue"]),e.createElementVNode("div",Le,[e.createVNode(e.unref(a.Search),{class:"pointer-events-none absolute left-3 top-1/2 size-4 -translate-y-1/2 text-muted-foreground"}),e.createVNode(de,{id:"firebase-auth-user-search",modelValue:b.value,"onUpdate:modelValue":t[2]||(t[2]=o=>b.value=o),type:"search",placeholder:h.value==="uid"?"Exact Firebase UID":h.value==="email"?"user@example.com":"+32470000000",class:"pl-9 pr-9",autocomplete:"off"},null,8,["modelValue","placeholder"]),b.value?(e.openBlock(),e.createBlock(r,{key:0,type:"button",variant:"ghost",size:"icon",class:"absolute right-0 top-0","aria-label":"Clear search",onClick:G},{default:e.withCtx(()=>[e.createVNode(e.unref(a.X),{class:"size-4"})]),_:1})):e.createCommentVNode("",!0)]),e.createVNode(r,{type:"submit",variant:"outline",class:"w-full sm:w-auto",disabled:d.value||!b.value},{default:e.withCtx(()=>[e.createVNode(e.unref(a.Search),{class:"size-4"}),t[17]||(t[17]=e.createTextVNode(" Search ",-1))]),_:1},8,["disabled"])]),t[18]||(t[18]=e.createElementVNode("p",{class:"text-xs text-muted-foreground"}," Choose the identifier type explicitly. Matching is exact; browse the directory with Previous and Next below. ",-1))]),e.createVNode(r,{type:"button",variant:"ghost",disabled:d.value,onClick:t[3]||(t[3]=o=>f())},{default:e.withCtx(()=>[e.createVNode(e.unref(a.RefreshCw),{class:e.normalizeClass(["size-4",{"animate-spin":d.value}])},null,8,["class"]),t[19]||(t[19]=e.createTextVNode(" Refresh ",-1))]),_:1},8,["disabled"])],32)]),z.value?(e.openBlock(),e.createBlock(W,{key:0,class:"mt-6 border-amber-400/60 bg-amber-50 dark:border-amber-800/70 dark:bg-amber-950/30"},{default:e.withCtx(()=>[e.createVNode(e.unref(a.ShieldAlert)),e.createVNode(X,null,{default:e.withCtx(()=>[...t[20]||(t[20]=[e.createTextVNode("Activity entry confirmation missing",-1)])]),_:1}),e.createVNode(K,null,{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(z.value),1)]),_:1})]),_:1})):e.createCommentVNode("",!0),d.value?(e.openBlock(),e.createElementBlock("section",$e,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(6,o=>e.createElementVNode("div",{key:o,class:"flex items-center gap-4 border-b p-4 last:border-b-0"},[e.createVNode(y,{class:"size-10 shrink-0 rounded-full"}),e.createElementVNode("div",je,[e.createVNode(y,{class:"h-4 w-48 max-w-full"}),e.createVNode(y,{class:"h-3 w-72 max-w-full"})]),e.createVNode(y,{class:"hidden h-6 w-24 rounded-full sm:block"}),e.createVNode(y,{class:"size-8 rounded-md"})])),64))])):T.value?(e.openBlock(),e.createBlock(W,{key:2,variant:"destructive",class:"mt-6"},{default:e.withCtx(()=>[e.createVNode(e.unref(a.AlertCircle)),e.createVNode(X,null,{default:e.withCtx(()=>[...t[21]||(t[21]=[e.createTextVNode("Could not load Firebase users",-1)])]),_:1}),e.createVNode(K,{class:"flex flex-col items-start gap-3 sm:flex-row sm:items-center sm:justify-between"},{default:e.withCtx(()=>[e.createElementVNode("span",null,e.toDisplayString(T.value),1),e.createVNode(r,{variant:"outline",size:"sm",onClick:t[4]||(t[4]=o=>f())},{default:e.withCtx(()=>[e.createVNode(e.unref(a.RefreshCw),{class:"size-4"}),t[22]||(t[22]=e.createTextVNode(" Try again ",-1))]),_:1})]),_:1})]),_:1})):u.value.length===0?(e.openBlock(),e.createBlock(ve,{key:3,class:"mt-6 min-h-80 rounded-xl border border-dashed"},{default:e.withCtx(()=>[e.createVNode(pe,null,{default:e.withCtx(()=>[e.createVNode(ce,{variant:"icon"},{default:e.withCtx(()=>[e.createVNode(e.unref(a.Users))]),_:1}),e.createVNode(ue,null,{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(m.value?"No exact user match":"No users on this page"),1)]),_:1}),e.createVNode(me,null,{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(m.value?E.value==="uid"?"Check the complete Firebase UID and try again.":E.value==="email"?"Check the complete email address and try again.":"Check the complete E.164 phone number and try again.":"Create the first Authentication user or refresh this directory."),1)]),_:1})]),_:1}),e.createVNode(fe,null,{default:e.withCtx(()=>[m.value?(e.openBlock(),e.createBlock(r,{key:0,variant:"outline",onClick:G},{default:e.withCtx(()=>[...t[23]||(t[23]=[e.createTextVNode("Clear search",-1)])]),_:1})):j.value?(e.openBlock(),e.createBlock(r,{key:1,onClick:t[5]||(t[5]=o=>e.unref(C)("new"))},{default:e.withCtx(()=>[e.createVNode(e.unref(a.Plus),{class:"size-4"}),t[24]||(t[24]=e.createTextVNode(" New user ",-1))]),_:1})):e.createCommentVNode("",!0)]),_:1})]),_:1})):(e.openBlock(),e.createElementBlock(e.Fragment,{key:4},[e.createVNode(Be,{class:"mt-6 gap-0 overflow-hidden py-0"},{default:e.withCtx(()=>[e.createVNode(ye,{class:"table-fixed @2xl:table-auto"},{default:e.withCtx(()=>[e.createVNode(xe,null,{default:e.withCtx(()=>[e.createVNode(Y,null,{default:e.withCtx(()=>[e.createVNode(v,null,{default:e.withCtx(()=>[...t[25]||(t[25]=[e.createTextVNode("User",-1)])]),_:1}),e.createVNode(v,{class:"hidden @2xl:table-cell"},{default:e.withCtx(()=>[...t[26]||(t[26]=[e.createTextVNode("Access",-1)])]),_:1}),p.value?(e.openBlock(),e.createBlock(v,{key:0,class:"hidden @4xl:table-cell"},{default:e.withCtx(()=>[...t[27]||(t[27]=[e.createTextVNode("Verification",-1)])]),_:1})):e.createCommentVNode("",!0),e.createVNode(v,{class:"hidden @5xl:table-cell"},{default:e.withCtx(()=>[...t[28]||(t[28]=[e.createTextVNode("Providers",-1)])]),_:1}),e.createVNode(v,{class:"hidden @6xl:table-cell"},{default:e.withCtx(()=>[...t[29]||(t[29]=[e.createTextVNode("Last sign-in",-1)])]),_:1}),P.value?(e.openBlock(),e.createBlock(v,{key:1,class:"hidden @3xl:table-cell"},{default:e.withCtx(()=>[...t[30]||(t[30]=[e.createTextVNode("Profile",-1)])]),_:1})):e.createCommentVNode("",!0),e.createVNode(v,{class:"w-16 text-right"},{default:e.withCtx(()=>[...t[31]||(t[31]=[e.createElementVNode("span",{class:"sr-only"},"Actions",-1)])]),_:1})]),_:1})]),_:1}),e.createVNode(_e,null,{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(u.value,o=>(e.openBlock(),e.createBlock(Y,{key:o.uid,class:"cursor-pointer",onClick:N=>e.unref(C)(e.unref(s.firebaseAuthUserPath)(o.uid))},{default:e.withCtx(()=>[e.createVNode(x,null,{default:e.withCtx(()=>[e.createElementVNode("div",qe,[e.createVNode(Ve,{class:"size-10 shrink-0"},{default:e.withCtx(()=>[p.value&&o.photoURL?(e.openBlock(),e.createBlock(Ne,{key:0,src:o.photoURL,alt:U(o)},null,8,["src","alt"])):e.createCommentVNode("",!0),e.createVNode(be,null,{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(p.value?e.unref(s.getUserInitials)(o):"U"),1)]),_:2},1024)]),_:2},1024),e.createElementVNode("div",He,[e.createElementVNode("p",Ge,e.toDisplayString(U(o)),1),e.createElementVNode("p",{class:"truncate text-xs text-muted-foreground",title:F(o)},e.toDisplayString(F(o)),9,Oe),e.createElementVNode("div",Xe,[e.createVNode(s._sfc_main,{disabled:o.disabled},null,8,["disabled"]),P.value?(e.openBlock(),e.createBlock(n,{key:0,variant:"outline",class:e.normalizeClass(o.profile?.enabled&&o.profile.exists?"border-emerald-400/60 text-emerald-700 dark:text-emerald-300":o.profile?.enabled?"border-amber-400/60 text-amber-700 dark:text-amber-300":"text-muted-foreground")},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(o.profile?.enabled?o.profile.exists?"Profile linked":"Profile missing":"Profile unavailable"),1)]),_:2},1032,["class"])):e.createCommentVNode("",!0)])])])]),_:2},1024),e.createVNode(x,{class:"hidden @2xl:table-cell"},{default:e.withCtx(()=>[e.createVNode(s._sfc_main,{disabled:o.disabled},null,8,["disabled"])]),_:2},1024),p.value?(e.openBlock(),e.createBlock(x,{key:0,class:"hidden @4xl:table-cell"},{default:e.withCtx(()=>[o.email&&o.emailVerified?(e.openBlock(),e.createBlock(n,{key:0,variant:"outline",class:"gap-1 text-emerald-700 dark:text-emerald-300"},{default:e.withCtx(()=>[e.createVNode(e.unref(a.ShieldCheck),{class:"size-3"}),t[32]||(t[32]=e.createTextVNode(" Verified ",-1))]),_:1})):o.email?(e.openBlock(),e.createBlock(n,{key:1,variant:"outline",class:"gap-1 text-amber-700 dark:text-amber-300"},{default:e.withCtx(()=>[e.createVNode(e.unref(a.ShieldX),{class:"size-3"}),t[33]||(t[33]=e.createTextVNode(" Unverified ",-1))]),_:1})):(e.openBlock(),e.createElementBlock("span",Ke,"No email"))]),_:2},1024)):e.createCommentVNode("",!0),e.createVNode(x,{class:"hidden @5xl:table-cell"},{default:e.withCtx(()=>[e.createElementVNode("div",We,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.providers,N=>(e.openBlock(),e.createBlock(n,{key:N,variant:"secondary"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(e.unref(s.formatProvider)(N)),1)]),_:2},1024))),128)),o.providers.length===0?(e.openBlock(),e.createElementBlock("span",Ye,"None")):e.createCommentVNode("",!0)])]),_:2},1024),e.createVNode(x,{class:"hidden whitespace-nowrap @6xl:table-cell"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(e.unref(s.formatFirebaseDate)(o.lastSignInAt)),1)]),_:2},1024),P.value?(e.openBlock(),e.createBlock(x,{key:1,class:"hidden @3xl:table-cell"},{default:e.withCtx(()=>[e.createVNode(n,{variant:"outline",class:e.normalizeClass(o.profile?.enabled&&o.profile.exists?"border-emerald-400/60 text-emerald-700 dark:text-emerald-300":o.profile?.enabled?"border-amber-400/60 text-amber-700 dark:text-amber-300":"text-muted-foreground")},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(o.profile?.enabled?o.profile.exists?"Linked":"Missing":"Unavailable"),1)]),_:2},1032,["class"])]),_:2},1024)):e.createCommentVNode("",!0),e.createVNode(x,{class:"text-right",onClick:t[6]||(t[6]=e.withModifiers(()=>{},["stop"]))},{default:e.withCtx(()=>[Q.value?(e.openBlock(),e.createBlock(ge,{key:0},{default:e.withCtx(()=>[e.createVNode(Ce,{"as-child":""},{default:e.withCtx(()=>[e.createVNode(r,{variant:"ghost",size:"icon","aria-label":"User actions"},{default:e.withCtx(()=>[e.createVNode(e.unref(a.Ellipsis),{class:"size-4"})]),_:1})]),_:1}),e.createVNode(we,{align:"end",class:"w-56"},{default:e.withCtx(()=>[e.createVNode(ke,{class:"truncate"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(U(o)),1)]),_:2},1024),e.createVNode(he),e.createVNode(L,{onClick:N=>e.unref(C)(e.unref(s.firebaseAuthUserPath)(o.uid))},{default:e.withCtx(()=>[e.createVNode(e.unref(a.UserRound),{class:"size-4"}),t[34]||(t[34]=e.createTextVNode(" Open user ",-1))]),_:1},8,["onClick"]),q.value?(e.openBlock(),e.createBlock(L,{key:0,onClick:N=>ae(o)},{default:e.withCtx(()=>[o.disabled?(e.openBlock(),e.createBlock(e.unref(a.ShieldCheck),{key:0,class:"size-4"})):(e.openBlock(),e.createBlock(e.unref(a.ShieldX),{key:1,class:"size-4"})),e.createTextVNode(" "+e.toDisplayString(o.disabled?"Restore sign-in":"Suspend sign-in"),1)]),_:2},1032,["onClick"])):e.createCommentVNode("",!0),H.value?(e.openBlock(),e.createBlock(L,{key:1,onClick:N=>ne(o)},{default:e.withCtx(()=>[e.createVNode(e.unref(a.KeyRound),{class:"size-4"}),t[35]||(t[35]=e.createTextVNode(" Revoke sessions ",-1))]),_:1},8,["onClick"])):e.createCommentVNode("",!0)]),_:2},1024)]),_:2},1024)):(e.openBlock(),e.createBlock(r,{key:1,variant:"ghost",size:"icon","aria-label":"Open user",onClick:N=>e.unref(C)(e.unref(s.firebaseAuthUserPath)(o.uid))},{default:e.withCtx(()=>[e.createVNode(e.unref(a.UserRound),{class:"size-4"})]),_:1},8,["onClick"]))]),_:2},1024)]),_:2},1032,["onClick"]))),128))]),_:1})]),_:1})]),_:1}),e.createElementVNode("footer",Je,[e.createElementVNode("p",null,[e.createTextVNode(" Showing "+e.toDisplayString(u.value.length)+" "+e.toDisplayString(u.value.length===1?"user":"users")+" ",1),m.value?(e.openBlock(),e.createElementBlock("span",Qe," for the exact search")):e.createCommentVNode("",!0)]),e.createVNode(Ee,null,{default:e.withCtx(()=>[e.createVNode(r,{variant:"outline",size:"sm",disabled:c.value.length===0||d.value,onClick:le},{default:e.withCtx(()=>[e.createVNode(e.unref(a.ChevronLeft),{class:"size-4"}),t[36]||(t[36]=e.createTextVNode(" Previous ",-1))]),_:1},8,["disabled"]),e.createVNode(Te,{class:"min-w-20 justify-center"},{default:e.withCtx(()=>[e.createTextVNode("Page "+e.toDisplayString(ee.value),1)]),_:1}),e.createVNode(r,{variant:"outline",size:"sm",disabled:!g.value||d.value,onClick:oe},{default:e.withCtx(()=>[t[37]||(t[37]=e.createTextVNode(" Next ",-1)),e.createVNode(e.unref(a.ChevronRight),{class:"size-4"})]),_:1},8,["disabled"])]),_:1})])],64))],64)):(e.openBlock(),e.createElementBlock("section",Me,[e.createElementVNode("div",Pe,[e.createElementVNode("div",Ue,[e.createVNode(e.unref(a.ShieldAlert),{class:"size-5 text-muted-foreground"})]),t[11]||(t[11]=e.createElementVNode("h2",{class:"mt-4 font-semibold"},"You cannot view Firebase users",-1)),t[12]||(t[12]=e.createElementVNode("p",{class:"mt-1 text-sm leading-6 text-muted-foreground"}," Ask a project administrator for the View Firebase users permission. ",-1))])])),i.value?(e.openBlock(),e.createBlock(s._sfc_main$1,{key:2,open:!!i.value,title:i.value.title,description:i.value.description,"confirm-label":i.value.confirmLabel,subject:F(i.value.user),destructive:i.value.destructive,busy:S.value,error:V.value,"onUpdate:open":O,onConfirm:re},null,8,["open","title","description","confirm-label","subject","destructive","busy","error"])):e.createCommentVNode("",!0)])}}});exports.default=Ze;
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
import { defineComponent as O, ref as m, computed as _, onMounted as W, resolveComponent as k, openBlock as n, createElementBlock as g, createElementVNode as e, createVNode as s, unref as l, createTextVNode as x, toDisplayString as i, withCtx as d, normalizeClass as A, createCommentVNode as L, createBlock as C, resolveDynamicComponent as F, Fragment as M, renderList as Y } from "vue";
|
|
2
|
+
import { Settings2 as I, AlertCircle as N, CheckCircle2 as H, Loader2 as U, BookOpen as P, FileText as G, Clock3 as J, Bot as Q, RefreshCw as K, ArrowRight as R, MessagesSquare as X } from "lucide-vue-next";
|
|
3
|
+
import { useModuleBreadcrumbs as Z, useModule as $, useModuleRoute as ee } from "@oneclick.dev/cms-kit";
|
|
4
|
+
import { u as te, g as se } from "./useHelpbotApi-HC9JSiSn.mjs";
|
|
5
|
+
const le = { class: "mx-auto flex w-full max-w-7xl flex-col gap-6 py-6 @3xl:py-8" }, oe = { class: "flex flex-col gap-4 @2xl:flex-row @2xl:items-start @2xl:justify-between" }, ae = { class: "max-w-2xl" }, ne = { class: "mb-2 flex items-center gap-2 text-sm font-medium text-primary" }, ie = { class: "text-2xl font-semibold tracking-tight @2xl:text-3xl" }, re = {
|
|
6
|
+
key: 0,
|
|
7
|
+
class: "flex items-start gap-3 rounded-xl border border-amber-500/30 bg-amber-500/5 px-4 py-3 text-sm",
|
|
8
|
+
role: "status"
|
|
9
|
+
}, de = { class: "mt-0.5 text-muted-foreground" }, ue = { class: "flex flex-col gap-5 p-5 @2xl:flex-row @2xl:items-center @2xl:justify-between @3xl:p-6" }, ce = { class: "flex min-w-0 items-start gap-4" }, me = { class: "grid size-11 shrink-0 place-items-center rounded-xl bg-muted" }, pe = { class: "min-w-0" }, ge = { class: "flex flex-wrap items-center gap-2" }, fe = { class: "mt-1 text-sm leading-6 text-muted-foreground" }, ve = {
|
|
10
|
+
key: 0,
|
|
11
|
+
class: "mt-1 text-xs text-muted-foreground"
|
|
12
|
+
}, xe = { "aria-labelledby": "knowledge-summary-heading" }, be = { class: "grid gap-3 @xl:grid-cols-3" }, he = { class: "grid size-10 shrink-0 place-items-center rounded-lg bg-primary/10 text-primary" }, we = { class: "min-w-0" }, _e = { class: "text-2xl font-semibold tabular-nums" }, ke = { class: "mt-0.5 text-sm font-medium" }, Ce = { class: "mt-1 text-xs leading-5 text-muted-foreground" }, ye = { class: "grid gap-4 @2xl:grid-cols-2" }, ze = { class: "flex items-start justify-between gap-4" }, Se = { class: "grid size-10 place-items-center rounded-lg bg-primary/10 text-primary" }, Be = { class: "flex items-start justify-between gap-4" }, Te = { class: "grid size-10 place-items-center rounded-lg bg-primary/10 text-primary" }, Ae = { class: "rounded-xl border bg-muted/30 p-5" }, Le = { class: "flex items-start gap-3" }, Fe = /* @__PURE__ */ O({
|
|
13
|
+
__name: "Overview",
|
|
14
|
+
setup(Me) {
|
|
15
|
+
Z(() => [{ text: "Overview" }]);
|
|
16
|
+
const { config: E } = $(), { resolvePath: y } = ee(), z = te(), o = m(null), b = m(null), h = m(null), S = m(null), a = m(!0), f = m(""), B = m(null), T = _(() => !!E.agentId), V = _(
|
|
17
|
+
() => T.value && o.value?.configured !== !1
|
|
18
|
+
), v = _(() => V.value ? f.value && !o.value ? {
|
|
19
|
+
label: "Connection unavailable",
|
|
20
|
+
description: "The helpbot could not be reached during the latest check.",
|
|
21
|
+
icon: N,
|
|
22
|
+
iconClass: "text-destructive",
|
|
23
|
+
badgeClass: "bg-destructive/10 text-destructive"
|
|
24
|
+
} : o.value?.connected === !1 ? {
|
|
25
|
+
label: "Connection needs attention",
|
|
26
|
+
description: o.value.message || "Ask your agency to check the website helpbot connection.",
|
|
27
|
+
icon: N,
|
|
28
|
+
iconClass: "text-destructive",
|
|
29
|
+
badgeClass: "bg-destructive/10 text-destructive"
|
|
30
|
+
} : o.value?.connected === !0 ? {
|
|
31
|
+
label: "Connected",
|
|
32
|
+
description: o.value.connectionName || "Your saved knowledge is connected to the website helpbot.",
|
|
33
|
+
icon: H,
|
|
34
|
+
iconClass: "text-emerald-600 dark:text-emerald-400",
|
|
35
|
+
badgeClass: "bg-emerald-500/10 text-emerald-700 dark:bg-emerald-500/15 dark:text-emerald-300"
|
|
36
|
+
} : {
|
|
37
|
+
label: a.value ? "Checking connection" : "Connection checked",
|
|
38
|
+
description: a.value ? "Confirming that the website helpbot can reach its knowledge." : "The helpbot responded, but did not report a detailed connection state.",
|
|
39
|
+
icon: a.value ? U : H,
|
|
40
|
+
iconClass: a.value ? "animate-spin text-muted-foreground" : "text-emerald-600 dark:text-emerald-400",
|
|
41
|
+
badgeClass: "bg-muted text-muted-foreground"
|
|
42
|
+
} : {
|
|
43
|
+
label: "Setup required",
|
|
44
|
+
description: "Your agency still needs to assign the website helpbot.",
|
|
45
|
+
icon: I,
|
|
46
|
+
iconClass: "text-amber-600 dark:text-amber-400",
|
|
47
|
+
badgeClass: "bg-amber-500/10 text-amber-700 dark:bg-amber-500/15 dark:text-amber-300"
|
|
48
|
+
}), q = _(() => [
|
|
49
|
+
{
|
|
50
|
+
label: "Saved answers",
|
|
51
|
+
value: b.value,
|
|
52
|
+
icon: P,
|
|
53
|
+
description: "Short answers and business information"
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
label: "PDF guides",
|
|
57
|
+
value: h.value,
|
|
58
|
+
icon: G,
|
|
59
|
+
description: "Documents available to the helpbot"
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
label: "Knowledge chunks",
|
|
63
|
+
value: S.value,
|
|
64
|
+
icon: J,
|
|
65
|
+
description: "Searchable sections across all knowledge"
|
|
66
|
+
}
|
|
67
|
+
]);
|
|
68
|
+
async function j() {
|
|
69
|
+
if (!T.value) {
|
|
70
|
+
a.value = !1;
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
a.value = !0, f.value = "";
|
|
74
|
+
const [r, t, u] = await Promise.allSettled([
|
|
75
|
+
z.getStatus(),
|
|
76
|
+
z.listTexts(),
|
|
77
|
+
z.listFiles()
|
|
78
|
+
]);
|
|
79
|
+
r.status === "fulfilled" && (o.value = r.value), r.status === "fulfilled" ? (b.value = r.value.sourceCounts.texts ?? (t.status === "fulfilled" ? t.value.length : b.value), h.value = r.value.sourceCounts.pdfs ?? (u.status === "fulfilled" ? u.value.length : h.value), S.value = r.value.sourceCounts.chunks ?? S.value) : (t.status === "fulfilled" && (b.value = t.value.length), u.status === "fulfilled" && (h.value = u.value.length));
|
|
80
|
+
const c = [r, t, u].filter(
|
|
81
|
+
(w) => w.status === "rejected"
|
|
82
|
+
);
|
|
83
|
+
c.length && (f.value = se(
|
|
84
|
+
c[0].reason,
|
|
85
|
+
c.length === 3 ? "The helpbot could not be reached." : "Some helpbot information could not be refreshed."
|
|
86
|
+
)), B.value = /* @__PURE__ */ new Date(), a.value = !1;
|
|
87
|
+
}
|
|
88
|
+
return W(j), (r, t) => {
|
|
89
|
+
const u = k("Button"), c = k("NuxtLink"), w = k("CardContent"), D = k("Card");
|
|
90
|
+
return n(), g("main", le, [
|
|
91
|
+
e("header", oe, [
|
|
92
|
+
e("div", ae, [
|
|
93
|
+
e("div", ne, [
|
|
94
|
+
s(l(Q), { class: "size-4" }),
|
|
95
|
+
t[0] || (t[0] = x(" Website helpbot ", -1))
|
|
96
|
+
]),
|
|
97
|
+
e("h1", ie, i(o.value?.helpbotName || "Helpbot overview"), 1),
|
|
98
|
+
t[1] || (t[1] = e("p", { class: "mt-2 text-sm leading-6 text-muted-foreground" }, " Keep the answers on your website accurate, then privately test what visitors will receive. ", -1))
|
|
99
|
+
]),
|
|
100
|
+
s(u, {
|
|
101
|
+
variant: "outline",
|
|
102
|
+
class: "w-full @2xl:w-auto",
|
|
103
|
+
disabled: a.value || !T.value,
|
|
104
|
+
onClick: j
|
|
105
|
+
}, {
|
|
106
|
+
default: d(() => [
|
|
107
|
+
s(l(K), {
|
|
108
|
+
class: A(["mr-2 size-4", { "animate-spin": a.value }])
|
|
109
|
+
}, null, 8, ["class"]),
|
|
110
|
+
t[2] || (t[2] = x(" Refresh ", -1))
|
|
111
|
+
]),
|
|
112
|
+
_: 1
|
|
113
|
+
}, 8, ["disabled"])
|
|
114
|
+
]),
|
|
115
|
+
f.value ? (n(), g("div", re, [
|
|
116
|
+
s(l(N), { class: "mt-0.5 size-4 shrink-0 text-amber-600 dark:text-amber-400" }),
|
|
117
|
+
e("div", null, [
|
|
118
|
+
t[3] || (t[3] = e("p", { class: "font-medium" }, "Latest refresh was incomplete", -1)),
|
|
119
|
+
e("p", de, i(f.value), 1)
|
|
120
|
+
])
|
|
121
|
+
])) : L("", !0),
|
|
122
|
+
s(D, { class: "overflow-hidden" }, {
|
|
123
|
+
default: d(() => [
|
|
124
|
+
s(w, { class: "p-0" }, {
|
|
125
|
+
default: d(() => [
|
|
126
|
+
e("div", ue, [
|
|
127
|
+
e("div", ce, [
|
|
128
|
+
e("div", me, [
|
|
129
|
+
(n(), C(F(v.value.icon), {
|
|
130
|
+
class: A(["size-5", v.value.iconClass])
|
|
131
|
+
}, null, 8, ["class"]))
|
|
132
|
+
]),
|
|
133
|
+
e("div", pe, [
|
|
134
|
+
e("div", ge, [
|
|
135
|
+
t[4] || (t[4] = e("h2", { class: "font-semibold" }, "Helpbot connection", -1)),
|
|
136
|
+
e("span", {
|
|
137
|
+
class: A(["rounded-full px-2.5 py-1 text-xs font-medium", v.value.badgeClass])
|
|
138
|
+
}, i(v.value.label), 3)
|
|
139
|
+
]),
|
|
140
|
+
e("p", fe, i(v.value.description), 1),
|
|
141
|
+
B.value ? (n(), g("p", ve, " Checked " + i(B.value.toLocaleTimeString([], { hour: "2-digit", minute: "2-digit" })), 1)) : L("", !0)
|
|
142
|
+
])
|
|
143
|
+
]),
|
|
144
|
+
s(c, {
|
|
145
|
+
to: l(y)("/knowledge"),
|
|
146
|
+
class: "inline-flex h-10 w-full shrink-0 items-center justify-center rounded-md bg-primary px-4 text-sm font-medium text-primary-foreground shadow-sm transition-colors hover:bg-primary/90 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 @2xl:w-auto"
|
|
147
|
+
}, {
|
|
148
|
+
default: d(() => [
|
|
149
|
+
x(i(o.value?.permissions.canManageKnowledge ? "Manage knowledge" : "Review knowledge") + " ", 1),
|
|
150
|
+
s(l(R), { class: "ml-2 size-4" })
|
|
151
|
+
]),
|
|
152
|
+
_: 1
|
|
153
|
+
}, 8, ["to"])
|
|
154
|
+
])
|
|
155
|
+
]),
|
|
156
|
+
_: 1
|
|
157
|
+
})
|
|
158
|
+
]),
|
|
159
|
+
_: 1
|
|
160
|
+
}),
|
|
161
|
+
e("section", xe, [
|
|
162
|
+
t[5] || (t[5] = e("div", { class: "mb-3 flex items-center justify-between gap-3" }, [
|
|
163
|
+
e("h2", {
|
|
164
|
+
id: "knowledge-summary-heading",
|
|
165
|
+
class: "text-sm font-semibold"
|
|
166
|
+
}, " Knowledge summary "),
|
|
167
|
+
e("span", { class: "text-xs text-muted-foreground" }, "Live connection data")
|
|
168
|
+
], -1)),
|
|
169
|
+
e("div", be, [
|
|
170
|
+
(n(!0), g(M, null, Y(q.value, (p) => (n(), C(D, {
|
|
171
|
+
key: p.label
|
|
172
|
+
}, {
|
|
173
|
+
default: d(() => [
|
|
174
|
+
s(w, { class: "flex items-start gap-4 p-5" }, {
|
|
175
|
+
default: d(() => [
|
|
176
|
+
e("div", he, [
|
|
177
|
+
(n(), C(F(p.icon), { class: "size-5" }))
|
|
178
|
+
]),
|
|
179
|
+
e("div", we, [
|
|
180
|
+
e("p", _e, [
|
|
181
|
+
a.value && p.value === null ? (n(), g(M, { key: 0 }, [
|
|
182
|
+
x("—")
|
|
183
|
+
], 64)) : (n(), g(M, { key: 1 }, [
|
|
184
|
+
x(i(p.value ?? "—"), 1)
|
|
185
|
+
], 64))
|
|
186
|
+
]),
|
|
187
|
+
e("p", ke, i(p.label), 1),
|
|
188
|
+
e("p", Ce, i(p.description), 1)
|
|
189
|
+
])
|
|
190
|
+
]),
|
|
191
|
+
_: 2
|
|
192
|
+
}, 1024)
|
|
193
|
+
]),
|
|
194
|
+
_: 2
|
|
195
|
+
}, 1024))), 128))
|
|
196
|
+
])
|
|
197
|
+
]),
|
|
198
|
+
e("div", ye, [
|
|
199
|
+
s(c, {
|
|
200
|
+
to: l(y)("/knowledge"),
|
|
201
|
+
class: "group rounded-xl border bg-card p-5 text-card-foreground shadow-sm transition-colors hover:border-primary/40"
|
|
202
|
+
}, {
|
|
203
|
+
default: d(() => [
|
|
204
|
+
e("div", ze, [
|
|
205
|
+
e("div", Se, [
|
|
206
|
+
s(l(P), { class: "size-5" })
|
|
207
|
+
]),
|
|
208
|
+
s(l(R), { class: "size-4 text-muted-foreground transition-transform group-hover:translate-x-0.5" })
|
|
209
|
+
]),
|
|
210
|
+
t[6] || (t[6] = e("h2", { class: "mt-5 font-semibold" }, "Knowledge", -1)),
|
|
211
|
+
t[7] || (t[7] = e("p", { class: "mt-1 text-sm leading-6 text-muted-foreground" }, " Add clear business answers and PDF guides that the helpbot may use. ", -1))
|
|
212
|
+
]),
|
|
213
|
+
_: 1
|
|
214
|
+
}, 8, ["to"]),
|
|
215
|
+
o.value?.permissions.canTestHelpbot ? (n(), C(c, {
|
|
216
|
+
key: 0,
|
|
217
|
+
to: l(y)("/test"),
|
|
218
|
+
class: "group rounded-xl border bg-card p-5 text-card-foreground shadow-sm transition-colors hover:border-primary/40"
|
|
219
|
+
}, {
|
|
220
|
+
default: d(() => [
|
|
221
|
+
e("div", Be, [
|
|
222
|
+
e("div", Te, [
|
|
223
|
+
s(l(X), { class: "size-5" })
|
|
224
|
+
]),
|
|
225
|
+
s(l(R), { class: "size-4 text-muted-foreground transition-transform group-hover:translate-x-0.5" })
|
|
226
|
+
]),
|
|
227
|
+
t[8] || (t[8] = e("h2", { class: "mt-5 font-semibold" }, "Private test", -1)),
|
|
228
|
+
t[9] || (t[9] = e("p", { class: "mt-1 text-sm leading-6 text-muted-foreground" }, " Ask visitor questions and check which saved sources support the reply. ", -1))
|
|
229
|
+
]),
|
|
230
|
+
_: 1
|
|
231
|
+
}, 8, ["to"])) : L("", !0)
|
|
232
|
+
]),
|
|
233
|
+
e("div", Ae, [
|
|
234
|
+
e("div", Le, [
|
|
235
|
+
s(l(K), { class: "mt-0.5 size-4 shrink-0 text-primary" }),
|
|
236
|
+
t[10] || (t[10] = e("div", null, [
|
|
237
|
+
e("h2", { class: "text-sm font-semibold" }, "How knowledge updates work"),
|
|
238
|
+
e("p", { class: "mt-1 text-sm leading-6 text-muted-foreground" }, " When an answer or PDF changes, it is prepared again for the helpbot. The updated information becomes available after processing completes. Use the private test to verify important answers. ")
|
|
239
|
+
], -1))
|
|
240
|
+
])
|
|
241
|
+
])
|
|
242
|
+
]);
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
});
|
|
246
|
+
export {
|
|
247
|
+
Fe as default
|
|
248
|
+
};
|