@mailoo/chat 0.0.0-stage → 1.32.2
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/LICENSE +16 -0
- package/README.md +150 -2
- package/dist/chat-message-Dw6tKBEb.d.cts +10 -0
- package/dist/chat-message-Dw6tKBEb.d.ts +10 -0
- package/dist/chunk-2Y37RYEL.js +141 -0
- package/dist/chunk-2Y37RYEL.js.map +1 -0
- package/dist/chunk-4TNHJERE.js +19 -0
- package/dist/chunk-4TNHJERE.js.map +1 -0
- package/dist/chunk-77E6HUHY.js +41 -0
- package/dist/chunk-77E6HUHY.js.map +1 -0
- package/dist/chunk-AU6EFFLV.js +431 -0
- package/dist/chunk-AU6EFFLV.js.map +1 -0
- package/dist/chunk-QZ7HWQDO.js +839 -0
- package/dist/chunk-QZ7HWQDO.js.map +1 -0
- package/dist/client/index.cjs +1658 -0
- package/dist/client/index.cjs.map +1 -0
- package/dist/client/index.d.cts +33 -0
- package/dist/client/index.d.ts +33 -0
- package/dist/client/index.js +597 -0
- package/dist/client/index.js.map +1 -0
- package/dist/hooks/index.cjs +751 -0
- package/dist/hooks/index.cjs.map +1 -0
- package/dist/hooks/index.d.cts +79 -0
- package/dist/hooks/index.d.ts +79 -0
- package/dist/hooks/index.js +32 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/index.cjs +213 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +53 -0
- package/dist/index.d.ts +53 -0
- package/dist/index.js +27 -0
- package/dist/index.js.map +1 -0
- package/dist/mailoo-site-chat-widget-C7B797Lu.d.ts +130 -0
- package/dist/mailoo-site-chat-widget-h_cBqsJw.d.cts +130 -0
- package/dist/routes/index.cjs +204 -0
- package/dist/routes/index.cjs.map +1 -0
- package/dist/routes/index.d.cts +30 -0
- package/dist/routes/index.d.ts +30 -0
- package/dist/routes/index.js +174 -0
- package/dist/routes/index.js.map +1 -0
- package/dist/shared-glVmghqk.d.cts +40 -0
- package/dist/shared-glVmghqk.d.ts +40 -0
- package/dist/styles/widget.css +122 -0
- package/dist/welcome-presets/index.cjs +479 -0
- package/dist/welcome-presets/index.cjs.map +1 -0
- package/dist/welcome-presets/index.d.cts +53 -0
- package/dist/welcome-presets/index.d.ts +53 -0
- package/dist/welcome-presets/index.js +38 -0
- package/dist/welcome-presets/index.js.map +1 -0
- package/dist/welcome-presets/parse.cjs +44 -0
- package/dist/welcome-presets/parse.cjs.map +1 -0
- package/dist/welcome-presets/parse.d.cts +11 -0
- package/dist/welcome-presets/parse.d.ts +11 -0
- package/dist/welcome-presets/parse.js +9 -0
- package/dist/welcome-presets/parse.js.map +1 -0
- package/dist/widget-config-B5Tf7gqn.d.cts +32 -0
- package/dist/widget-config-B5Tf7gqn.d.ts +32 -0
- package/package.json +85 -3
|
@@ -0,0 +1,431 @@
|
|
|
1
|
+
import {
|
|
2
|
+
normalizeLegacyWelcomePresetId
|
|
3
|
+
} from "./chunk-4TNHJERE.js";
|
|
4
|
+
|
|
5
|
+
// src/welcome-presets/shared.tsx
|
|
6
|
+
import { useId } from "react";
|
|
7
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
8
|
+
function operatorInitials(name) {
|
|
9
|
+
const base = (name ?? "?").trim();
|
|
10
|
+
const parts = base.split(/\s+/).filter(Boolean);
|
|
11
|
+
if (parts.length >= 2) {
|
|
12
|
+
return `${parts[0][0] ?? ""}${parts[1][0] ?? ""}`.toUpperCase();
|
|
13
|
+
}
|
|
14
|
+
return base.slice(0, 2).toUpperCase();
|
|
15
|
+
}
|
|
16
|
+
function GuestContactFields({
|
|
17
|
+
args,
|
|
18
|
+
compact = false
|
|
19
|
+
}) {
|
|
20
|
+
const id = useId();
|
|
21
|
+
const emailId = `${id}-guest-email`;
|
|
22
|
+
const nameId = `${id}-guest-name`;
|
|
23
|
+
const {
|
|
24
|
+
labels,
|
|
25
|
+
guestEmail,
|
|
26
|
+
setGuestEmail,
|
|
27
|
+
guestName,
|
|
28
|
+
setGuestName,
|
|
29
|
+
error,
|
|
30
|
+
needsGuestFields
|
|
31
|
+
} = args;
|
|
32
|
+
if (!needsGuestFields) return null;
|
|
33
|
+
return /* @__PURE__ */ jsxs("div", { className: compact ? "space-y-2" : "space-y-3", children: [
|
|
34
|
+
/* @__PURE__ */ jsxs("div", { children: [
|
|
35
|
+
/* @__PURE__ */ jsx(
|
|
36
|
+
"label",
|
|
37
|
+
{
|
|
38
|
+
htmlFor: emailId,
|
|
39
|
+
className: "mb-1 block text-xs font-medium text-gray-600 dark:text-gray-400",
|
|
40
|
+
children: labels.emailLabel
|
|
41
|
+
}
|
|
42
|
+
),
|
|
43
|
+
/* @__PURE__ */ jsx(
|
|
44
|
+
"input",
|
|
45
|
+
{
|
|
46
|
+
id: emailId,
|
|
47
|
+
type: "email",
|
|
48
|
+
autoComplete: "email",
|
|
49
|
+
value: guestEmail,
|
|
50
|
+
onChange: (e) => setGuestEmail(e.target.value),
|
|
51
|
+
placeholder: labels.emailPlaceholder,
|
|
52
|
+
className: "w-full rounded border border-gray-300 bg-white px-2 py-1.5 text-sm dark:border-gray-600 dark:bg-gray-800"
|
|
53
|
+
}
|
|
54
|
+
)
|
|
55
|
+
] }),
|
|
56
|
+
/* @__PURE__ */ jsxs("div", { children: [
|
|
57
|
+
/* @__PURE__ */ jsx(
|
|
58
|
+
"label",
|
|
59
|
+
{
|
|
60
|
+
htmlFor: nameId,
|
|
61
|
+
className: "mb-1 block text-xs font-medium text-gray-600 dark:text-gray-400",
|
|
62
|
+
children: labels.nameLabel
|
|
63
|
+
}
|
|
64
|
+
),
|
|
65
|
+
/* @__PURE__ */ jsx(
|
|
66
|
+
"input",
|
|
67
|
+
{
|
|
68
|
+
id: nameId,
|
|
69
|
+
type: "text",
|
|
70
|
+
autoComplete: "name",
|
|
71
|
+
value: guestName,
|
|
72
|
+
onChange: (e) => setGuestName(e.target.value),
|
|
73
|
+
placeholder: labels.namePlaceholder,
|
|
74
|
+
className: "w-full rounded border border-gray-300 bg-white px-2 py-1.5 text-sm dark:border-gray-600 dark:bg-gray-800"
|
|
75
|
+
}
|
|
76
|
+
)
|
|
77
|
+
] }),
|
|
78
|
+
error && /* @__PURE__ */ jsx("p", { className: "text-xs text-red-600 dark:text-red-400", children: error })
|
|
79
|
+
] });
|
|
80
|
+
}
|
|
81
|
+
function PrivacyFooter({
|
|
82
|
+
privacyPolicyUrl,
|
|
83
|
+
className = ""
|
|
84
|
+
}) {
|
|
85
|
+
if (!privacyPolicyUrl) return null;
|
|
86
|
+
return /* @__PURE__ */ jsxs(
|
|
87
|
+
"p",
|
|
88
|
+
{
|
|
89
|
+
className: `text-center text-[10px] leading-snug text-gray-500 dark:text-gray-400 ${className}`,
|
|
90
|
+
children: [
|
|
91
|
+
"By continuing, you agree to our",
|
|
92
|
+
" ",
|
|
93
|
+
/* @__PURE__ */ jsx(
|
|
94
|
+
"a",
|
|
95
|
+
{
|
|
96
|
+
href: privacyPolicyUrl,
|
|
97
|
+
target: "_blank",
|
|
98
|
+
rel: "noopener noreferrer",
|
|
99
|
+
className: "underline hover:text-gray-700 dark:hover:text-gray-300",
|
|
100
|
+
children: "privacy policy"
|
|
101
|
+
}
|
|
102
|
+
),
|
|
103
|
+
"."
|
|
104
|
+
]
|
|
105
|
+
}
|
|
106
|
+
);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// src/welcome-presets/assistant.tsx
|
|
110
|
+
import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
111
|
+
function AssistantWelcomePreset(args) {
|
|
112
|
+
const {
|
|
113
|
+
widgetConfig,
|
|
114
|
+
title,
|
|
115
|
+
welcomeMessage,
|
|
116
|
+
brandBtnClass,
|
|
117
|
+
brandStyle,
|
|
118
|
+
topics,
|
|
119
|
+
selectedTopicId,
|
|
120
|
+
setSelectedTopicId,
|
|
121
|
+
labels,
|
|
122
|
+
needsGuestFields,
|
|
123
|
+
confirmGuestContact
|
|
124
|
+
} = args;
|
|
125
|
+
const personaName = widgetConfig?.welcomeTitle?.trim() || title;
|
|
126
|
+
const heroLine = widgetConfig?.welcomeTagline?.trim() || welcomeMessage;
|
|
127
|
+
const headerBg = "bg-[var(--mailoo-chat-brand,#5b21b6)] text-[var(--mailoo-chat-brand-on,#ffffff)]";
|
|
128
|
+
return /* @__PURE__ */ jsxs2(
|
|
129
|
+
"div",
|
|
130
|
+
{
|
|
131
|
+
className: "flex min-h-0 flex-1 flex-col overflow-hidden",
|
|
132
|
+
style: brandStyle,
|
|
133
|
+
children: [
|
|
134
|
+
/* @__PURE__ */ jsxs2("div", { className: `shrink-0 px-4 pb-3 pt-5 ${headerBg}`, children: [
|
|
135
|
+
/* @__PURE__ */ jsxs2("div", { className: "mb-3 flex items-center gap-3", children: [
|
|
136
|
+
/* @__PURE__ */ jsx2("span", { className: "flex h-12 w-12 items-center justify-center rounded-full bg-white/20 text-lg font-bold", children: personaName.slice(0, 1).toUpperCase() }),
|
|
137
|
+
/* @__PURE__ */ jsxs2("div", { children: [
|
|
138
|
+
/* @__PURE__ */ jsx2("p", { className: "text-xs uppercase tracking-wide opacity-80", children: "Assistant" }),
|
|
139
|
+
/* @__PURE__ */ jsx2("h2", { className: "text-base font-semibold", children: personaName })
|
|
140
|
+
] })
|
|
141
|
+
] }),
|
|
142
|
+
/* @__PURE__ */ jsx2("div", { className: "rounded-2xl rounded-tl-sm bg-white/15 px-3 py-2.5 text-sm leading-relaxed", children: heroLine })
|
|
143
|
+
] }),
|
|
144
|
+
/* @__PURE__ */ jsxs2("div", { className: "flex min-h-0 flex-1 flex-col overflow-y-auto bg-white px-4 py-4 text-gray-900 dark:bg-gray-950 dark:text-gray-100", children: [
|
|
145
|
+
topics.length > 0 && /* @__PURE__ */ jsx2("div", { className: "mb-4 flex flex-wrap gap-2", children: topics.map(
|
|
146
|
+
(topic) => topic.action === "external_url" && topic.externalUrl ? /* @__PURE__ */ jsx2(
|
|
147
|
+
"a",
|
|
148
|
+
{
|
|
149
|
+
href: topic.externalUrl,
|
|
150
|
+
target: "_blank",
|
|
151
|
+
rel: "noopener noreferrer",
|
|
152
|
+
className: `rounded-full px-4 py-2 text-xs font-semibold ${brandBtnClass}`,
|
|
153
|
+
children: topic.label
|
|
154
|
+
},
|
|
155
|
+
topic.id
|
|
156
|
+
) : /* @__PURE__ */ jsx2(
|
|
157
|
+
"button",
|
|
158
|
+
{
|
|
159
|
+
type: "button",
|
|
160
|
+
onClick: () => setSelectedTopicId(
|
|
161
|
+
selectedTopicId === topic.id ? null : topic.id
|
|
162
|
+
),
|
|
163
|
+
className: `rounded-full px-4 py-2 text-xs font-semibold ${selectedTopicId === topic.id ? brandBtnClass : "border border-gray-300 text-gray-700 dark:border-gray-600 dark:text-gray-200"}`,
|
|
164
|
+
children: topic.label
|
|
165
|
+
},
|
|
166
|
+
topic.id
|
|
167
|
+
)
|
|
168
|
+
) }),
|
|
169
|
+
needsGuestFields && /* @__PURE__ */ jsx2("p", { className: "mb-3 text-sm text-gray-600 dark:text-gray-300", children: labels.intro }),
|
|
170
|
+
/* @__PURE__ */ jsx2(GuestContactFields, { args, compact: true }),
|
|
171
|
+
/* @__PURE__ */ jsx2(
|
|
172
|
+
"button",
|
|
173
|
+
{
|
|
174
|
+
type: "button",
|
|
175
|
+
onClick: () => confirmGuestContact(labels.emailInvalid),
|
|
176
|
+
className: `mt-4 w-full py-2.5 text-sm font-semibold ${brandBtnClass}`,
|
|
177
|
+
children: labels.continueCta
|
|
178
|
+
}
|
|
179
|
+
),
|
|
180
|
+
/* @__PURE__ */ jsx2(
|
|
181
|
+
PrivacyFooter,
|
|
182
|
+
{
|
|
183
|
+
privacyPolicyUrl: widgetConfig?.privacyPolicyUrl,
|
|
184
|
+
className: "mt-4 text-gray-500 dark:text-gray-400"
|
|
185
|
+
}
|
|
186
|
+
)
|
|
187
|
+
] })
|
|
188
|
+
]
|
|
189
|
+
}
|
|
190
|
+
);
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
// src/welcome-presets/team.tsx
|
|
194
|
+
import { jsx as jsx3, jsxs as jsxs3 } from "react/jsx-runtime";
|
|
195
|
+
function TeamWelcomePreset(args) {
|
|
196
|
+
const {
|
|
197
|
+
widgetConfig,
|
|
198
|
+
title,
|
|
199
|
+
welcomeMessage,
|
|
200
|
+
brandBtnClass,
|
|
201
|
+
brandStyle,
|
|
202
|
+
topics,
|
|
203
|
+
selectedTopicId,
|
|
204
|
+
setSelectedTopicId,
|
|
205
|
+
labels,
|
|
206
|
+
needsGuestFields,
|
|
207
|
+
confirmGuestContact
|
|
208
|
+
} = args;
|
|
209
|
+
const operators = widgetConfig?.operators ?? [];
|
|
210
|
+
const headerBg = "bg-[var(--mailoo-chat-brand,#5b21b6)] text-[var(--mailoo-chat-brand-on,#ffffff)]";
|
|
211
|
+
return /* @__PURE__ */ jsxs3(
|
|
212
|
+
"div",
|
|
213
|
+
{
|
|
214
|
+
className: "flex min-h-0 flex-1 flex-col overflow-hidden",
|
|
215
|
+
style: brandStyle,
|
|
216
|
+
children: [
|
|
217
|
+
/* @__PURE__ */ jsxs3("div", { className: `shrink-0 px-4 pb-4 pt-5 ${headerBg}`, children: [
|
|
218
|
+
operators.length > 0 && /* @__PURE__ */ jsx3("div", { className: "mb-3 flex -space-x-2", children: operators.slice(0, 5).map((op) => /* @__PURE__ */ jsxs3("div", { className: "relative", children: [
|
|
219
|
+
op.image ? /* @__PURE__ */ jsx3(
|
|
220
|
+
"img",
|
|
221
|
+
{
|
|
222
|
+
src: op.image,
|
|
223
|
+
alt: "",
|
|
224
|
+
className: "h-9 w-9 rounded-full border-2 border-white/30 object-cover"
|
|
225
|
+
}
|
|
226
|
+
) : /* @__PURE__ */ jsx3("span", { className: "flex h-9 w-9 items-center justify-center rounded-full border-2 border-white/30 bg-white/20 text-xs font-semibold", children: operatorInitials(op.name) }),
|
|
227
|
+
op.online && /* @__PURE__ */ jsx3(
|
|
228
|
+
"span",
|
|
229
|
+
{
|
|
230
|
+
className: "absolute bottom-0 right-0 h-2.5 w-2.5 rounded-full border-2 border-[var(--mailoo-chat-brand,#5b21b6)] bg-emerald-400",
|
|
231
|
+
"aria-hidden": true
|
|
232
|
+
}
|
|
233
|
+
)
|
|
234
|
+
] }, op.userId)) }),
|
|
235
|
+
/* @__PURE__ */ jsx3("h2", { className: "text-lg font-semibold leading-tight", children: title }),
|
|
236
|
+
/* @__PURE__ */ jsx3("p", { className: "mt-1 text-sm opacity-90", children: welcomeMessage })
|
|
237
|
+
] }),
|
|
238
|
+
/* @__PURE__ */ jsxs3("div", { className: "flex min-h-0 flex-1 flex-col overflow-y-auto bg-white p-4 dark:bg-gray-900", children: [
|
|
239
|
+
topics.length > 0 && /* @__PURE__ */ jsx3("div", { className: "mb-4 grid grid-cols-2 gap-2", children: topics.map(
|
|
240
|
+
(topic) => topic.action === "external_url" && topic.externalUrl ? /* @__PURE__ */ jsx3(
|
|
241
|
+
"a",
|
|
242
|
+
{
|
|
243
|
+
href: topic.externalUrl,
|
|
244
|
+
target: "_blank",
|
|
245
|
+
rel: "noopener noreferrer",
|
|
246
|
+
className: "rounded-lg border border-gray-200 px-3 py-2.5 text-center text-xs font-medium text-gray-800 hover:border-[var(--mailoo-chat-brand,#5b21b6)] dark:border-gray-600 dark:text-gray-100",
|
|
247
|
+
children: topic.label
|
|
248
|
+
},
|
|
249
|
+
topic.id
|
|
250
|
+
) : /* @__PURE__ */ jsx3(
|
|
251
|
+
"button",
|
|
252
|
+
{
|
|
253
|
+
type: "button",
|
|
254
|
+
onClick: () => setSelectedTopicId(
|
|
255
|
+
selectedTopicId === topic.id ? null : topic.id
|
|
256
|
+
),
|
|
257
|
+
className: `rounded-lg border px-3 py-2.5 text-center text-xs font-medium ${selectedTopicId === topic.id ? `${brandBtnClass} border-transparent` : "border-gray-200 text-gray-800 hover:border-[var(--mailoo-chat-brand,#5b21b6)] dark:border-gray-600 dark:text-gray-100"}`,
|
|
258
|
+
children: topic.label
|
|
259
|
+
},
|
|
260
|
+
topic.id
|
|
261
|
+
)
|
|
262
|
+
) }),
|
|
263
|
+
needsGuestFields && /* @__PURE__ */ jsx3("p", { className: "mb-3 text-sm text-gray-600 dark:text-gray-300", children: labels.intro }),
|
|
264
|
+
/* @__PURE__ */ jsx3(GuestContactFields, { args, compact: true }),
|
|
265
|
+
/* @__PURE__ */ jsx3(
|
|
266
|
+
"button",
|
|
267
|
+
{
|
|
268
|
+
type: "button",
|
|
269
|
+
onClick: () => confirmGuestContact(labels.emailInvalid),
|
|
270
|
+
className: `mt-4 w-full py-2.5 text-sm font-semibold ${brandBtnClass}`,
|
|
271
|
+
children: labels.continueCta
|
|
272
|
+
}
|
|
273
|
+
),
|
|
274
|
+
/* @__PURE__ */ jsx3(
|
|
275
|
+
PrivacyFooter,
|
|
276
|
+
{
|
|
277
|
+
privacyPolicyUrl: widgetConfig?.privacyPolicyUrl,
|
|
278
|
+
className: "mt-4"
|
|
279
|
+
}
|
|
280
|
+
)
|
|
281
|
+
] })
|
|
282
|
+
]
|
|
283
|
+
}
|
|
284
|
+
);
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
// src/welcome-presets/preset-context.tsx
|
|
288
|
+
import {
|
|
289
|
+
createContext,
|
|
290
|
+
useCallback,
|
|
291
|
+
useContext,
|
|
292
|
+
useEffect,
|
|
293
|
+
useMemo,
|
|
294
|
+
useState
|
|
295
|
+
} from "react";
|
|
296
|
+
import { jsx as jsx4 } from "react/jsx-runtime";
|
|
297
|
+
var DEFAULT_STORAGE_KEY = "mailoo-chat-welcome-preset";
|
|
298
|
+
var MailooChatWelcomePresetContext = createContext(null);
|
|
299
|
+
function MailooChatWelcomePresetProvider({
|
|
300
|
+
children,
|
|
301
|
+
defaultPreset = "builtin",
|
|
302
|
+
storageKey = DEFAULT_STORAGE_KEY
|
|
303
|
+
}) {
|
|
304
|
+
const [preset, setPresetState] = useState(defaultPreset);
|
|
305
|
+
useEffect(() => {
|
|
306
|
+
try {
|
|
307
|
+
const stored = localStorage.getItem(storageKey);
|
|
308
|
+
if (!stored) return;
|
|
309
|
+
const normalized = normalizeLegacyWelcomePresetId(stored);
|
|
310
|
+
if (normalized) {
|
|
311
|
+
setPresetState(normalized);
|
|
312
|
+
}
|
|
313
|
+
} catch {
|
|
314
|
+
}
|
|
315
|
+
}, [storageKey]);
|
|
316
|
+
const setPreset = useCallback(
|
|
317
|
+
(next) => {
|
|
318
|
+
setPresetState(next);
|
|
319
|
+
try {
|
|
320
|
+
localStorage.setItem(storageKey, next);
|
|
321
|
+
} catch {
|
|
322
|
+
}
|
|
323
|
+
},
|
|
324
|
+
[storageKey]
|
|
325
|
+
);
|
|
326
|
+
const value = useMemo(() => ({ preset, setPreset }), [preset, setPreset]);
|
|
327
|
+
return /* @__PURE__ */ jsx4(MailooChatWelcomePresetContext.Provider, { value, children });
|
|
328
|
+
}
|
|
329
|
+
function useMailooChatWelcomePreset() {
|
|
330
|
+
const ctx = useContext(MailooChatWelcomePresetContext);
|
|
331
|
+
if (!ctx) {
|
|
332
|
+
throw new Error(
|
|
333
|
+
"useMailooChatWelcomePreset must be used within MailooChatWelcomePresetProvider"
|
|
334
|
+
);
|
|
335
|
+
}
|
|
336
|
+
return ctx;
|
|
337
|
+
}
|
|
338
|
+
function useOptionalMailooChatWelcomePreset() {
|
|
339
|
+
return useContext(MailooChatWelcomePresetContext);
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
// src/welcome-presets/preset-options.ts
|
|
343
|
+
var MAILOO_CHAT_WELCOME_PRESET_OPTIONS = [
|
|
344
|
+
{
|
|
345
|
+
id: "builtin",
|
|
346
|
+
label: "Built-in",
|
|
347
|
+
description: "Default guest gate with panel header, topics, and email form."
|
|
348
|
+
},
|
|
349
|
+
{
|
|
350
|
+
id: "team",
|
|
351
|
+
label: "Team",
|
|
352
|
+
description: "Brand header with operator avatars, online indicators, and a topic grid."
|
|
353
|
+
},
|
|
354
|
+
{
|
|
355
|
+
id: "assistant",
|
|
356
|
+
label: "Assistant",
|
|
357
|
+
description: "Persona hero, welcome message bubble, and rounded topic chips."
|
|
358
|
+
}
|
|
359
|
+
];
|
|
360
|
+
|
|
361
|
+
// src/welcome-presets/preset-switcher.tsx
|
|
362
|
+
import { jsx as jsx5, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
363
|
+
function MailooChatWelcomePresetSwitcher({
|
|
364
|
+
title = "Welcome preset",
|
|
365
|
+
description = "Preview optional welcome layouts via renderWelcome on MailooSiteChatWidget.",
|
|
366
|
+
className = "",
|
|
367
|
+
optionClassName
|
|
368
|
+
}) {
|
|
369
|
+
const { preset, setPreset } = useMailooChatWelcomePreset();
|
|
370
|
+
const defaultOptionClass = (active) => [
|
|
371
|
+
"rounded-lg border p-3 text-left transition-colors",
|
|
372
|
+
active ? "border-blue-600 bg-blue-50 ring-1 ring-blue-600 dark:border-blue-400 dark:bg-blue-950/40 dark:ring-blue-400" : "border-gray-200 hover:border-blue-400/50 dark:border-gray-700"
|
|
373
|
+
].join(" ");
|
|
374
|
+
const resolveOptionClass = optionClassName ?? defaultOptionClass;
|
|
375
|
+
return /* @__PURE__ */ jsxs4("div", { className, children: [
|
|
376
|
+
/* @__PURE__ */ jsx5("h2", { className: "text-sm font-semibold text-gray-900 dark:text-white", children: title }),
|
|
377
|
+
description ? /* @__PURE__ */ jsx5("p", { className: "mt-1 text-sm text-gray-600 dark:text-gray-400", children: description }) : null,
|
|
378
|
+
/* @__PURE__ */ jsx5("div", { className: "mt-4 grid gap-3 sm:grid-cols-3", children: MAILOO_CHAT_WELCOME_PRESET_OPTIONS.map(
|
|
379
|
+
(option) => {
|
|
380
|
+
const active = preset === option.id;
|
|
381
|
+
return /* @__PURE__ */ jsxs4(
|
|
382
|
+
"button",
|
|
383
|
+
{
|
|
384
|
+
type: "button",
|
|
385
|
+
onClick: () => setPreset(option.id),
|
|
386
|
+
className: resolveOptionClass(active),
|
|
387
|
+
children: [
|
|
388
|
+
/* @__PURE__ */ jsx5("span", { className: "block text-sm font-medium text-gray-900 dark:text-white", children: option.label }),
|
|
389
|
+
/* @__PURE__ */ jsx5("span", { className: "mt-1 block text-xs text-gray-600 dark:text-gray-400", children: option.description })
|
|
390
|
+
]
|
|
391
|
+
},
|
|
392
|
+
option.id
|
|
393
|
+
);
|
|
394
|
+
}
|
|
395
|
+
) })
|
|
396
|
+
] });
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
// src/welcome-presets/index.ts
|
|
400
|
+
function renderMailooChatWelcomePreset(preset, args) {
|
|
401
|
+
if (preset === "team") return TeamWelcomePreset(args);
|
|
402
|
+
if (preset === "assistant") return AssistantWelcomePreset(args);
|
|
403
|
+
return null;
|
|
404
|
+
}
|
|
405
|
+
function createMailooChatWelcomePresetRenderer(preset) {
|
|
406
|
+
if (preset === "builtin") return void 0;
|
|
407
|
+
return (args) => renderMailooChatWelcomePreset(preset, args);
|
|
408
|
+
}
|
|
409
|
+
function mailooChatWelcomePresetPanelClassName(preset) {
|
|
410
|
+
if (preset === "team" || preset === "assistant") {
|
|
411
|
+
return "border-0 shadow-2xl";
|
|
412
|
+
}
|
|
413
|
+
return void 0;
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
export {
|
|
417
|
+
operatorInitials,
|
|
418
|
+
GuestContactFields,
|
|
419
|
+
PrivacyFooter,
|
|
420
|
+
AssistantWelcomePreset,
|
|
421
|
+
TeamWelcomePreset,
|
|
422
|
+
MailooChatWelcomePresetProvider,
|
|
423
|
+
useMailooChatWelcomePreset,
|
|
424
|
+
useOptionalMailooChatWelcomePreset,
|
|
425
|
+
MAILOO_CHAT_WELCOME_PRESET_OPTIONS,
|
|
426
|
+
MailooChatWelcomePresetSwitcher,
|
|
427
|
+
renderMailooChatWelcomePreset,
|
|
428
|
+
createMailooChatWelcomePresetRenderer,
|
|
429
|
+
mailooChatWelcomePresetPanelClassName
|
|
430
|
+
};
|
|
431
|
+
//# sourceMappingURL=chunk-AU6EFFLV.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/welcome-presets/shared.tsx","../src/welcome-presets/assistant.tsx","../src/welcome-presets/team.tsx","../src/welcome-presets/preset-context.tsx","../src/welcome-presets/preset-options.ts","../src/welcome-presets/preset-switcher.tsx","../src/welcome-presets/index.ts"],"sourcesContent":["'use client'\n\nimport { useId } from 'react'\nimport type { MailooChatWelcomeRenderArgs } from '../components/mailoo-site-chat-widget.js'\n\nexport function operatorInitials(name: string | null): string {\n const base = (name ?? '?').trim()\n const parts = base.split(/\\s+/).filter(Boolean)\n if (parts.length >= 2) {\n return `${parts[0]![0] ?? ''}${parts[1]![0] ?? ''}`.toUpperCase()\n }\n return base.slice(0, 2).toUpperCase()\n}\n\nexport function GuestContactFields({\n args,\n compact = false,\n}: {\n args: MailooChatWelcomeRenderArgs\n compact?: boolean\n}) {\n const id = useId()\n const emailId = `${id}-guest-email`\n const nameId = `${id}-guest-name`\n const {\n labels,\n guestEmail,\n setGuestEmail,\n guestName,\n setGuestName,\n error,\n needsGuestFields,\n } = args\n\n if (!needsGuestFields) return null\n\n return (\n <div className={compact ? 'space-y-2' : 'space-y-3'}>\n <div>\n <label\n htmlFor={emailId}\n className=\"mb-1 block text-xs font-medium text-gray-600 dark:text-gray-400\"\n >\n {labels.emailLabel}\n </label>\n <input\n id={emailId}\n type=\"email\"\n autoComplete=\"email\"\n value={guestEmail}\n onChange={(e) => setGuestEmail(e.target.value)}\n placeholder={labels.emailPlaceholder}\n className=\"w-full rounded border border-gray-300 bg-white px-2 py-1.5 text-sm dark:border-gray-600 dark:bg-gray-800\"\n />\n </div>\n <div>\n <label\n htmlFor={nameId}\n className=\"mb-1 block text-xs font-medium text-gray-600 dark:text-gray-400\"\n >\n {labels.nameLabel}\n </label>\n <input\n id={nameId}\n type=\"text\"\n autoComplete=\"name\"\n value={guestName}\n onChange={(e) => setGuestName(e.target.value)}\n placeholder={labels.namePlaceholder}\n className=\"w-full rounded border border-gray-300 bg-white px-2 py-1.5 text-sm dark:border-gray-600 dark:bg-gray-800\"\n />\n </div>\n {error && (\n <p className=\"text-xs text-red-600 dark:text-red-400\">{error}</p>\n )}\n </div>\n )\n}\n\nexport function PrivacyFooter({\n privacyPolicyUrl,\n className = '',\n}: {\n privacyPolicyUrl?: string\n className?: string\n}) {\n if (!privacyPolicyUrl) return null\n return (\n <p\n className={`text-center text-[10px] leading-snug text-gray-500 dark:text-gray-400 ${className}`}\n >\n By continuing, you agree to our{' '}\n <a\n href={privacyPolicyUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"underline hover:text-gray-700 dark:hover:text-gray-300\"\n >\n privacy policy\n </a>\n .\n </p>\n )\n}\n","'use client'\n\nimport type { MailooChatWelcomeRenderArgs } from '../components/mailoo-site-chat-widget.js'\nimport { GuestContactFields, PrivacyFooter } from './shared.js'\n\n/** Assistant welcome: persona hero, intro bubble, topic chips. */\nexport function AssistantWelcomePreset(args: MailooChatWelcomeRenderArgs) {\n const {\n widgetConfig,\n title,\n welcomeMessage,\n brandBtnClass,\n brandStyle,\n topics,\n selectedTopicId,\n setSelectedTopicId,\n labels,\n needsGuestFields,\n confirmGuestContact,\n } = args\n\n const personaName = widgetConfig?.welcomeTitle?.trim() || title\n const heroLine = widgetConfig?.welcomeTagline?.trim() || welcomeMessage\n const headerBg =\n 'bg-[var(--mailoo-chat-brand,#5b21b6)] text-[var(--mailoo-chat-brand-on,#ffffff)]'\n\n return (\n <div\n className=\"flex min-h-0 flex-1 flex-col overflow-hidden\"\n style={brandStyle}\n >\n <div className={`shrink-0 px-4 pb-3 pt-5 ${headerBg}`}>\n <div className=\"mb-3 flex items-center gap-3\">\n <span className=\"flex h-12 w-12 items-center justify-center rounded-full bg-white/20 text-lg font-bold\">\n {personaName.slice(0, 1).toUpperCase()}\n </span>\n <div>\n <p className=\"text-xs uppercase tracking-wide opacity-80\">\n Assistant\n </p>\n <h2 className=\"text-base font-semibold\">{personaName}</h2>\n </div>\n </div>\n <div className=\"rounded-2xl rounded-tl-sm bg-white/15 px-3 py-2.5 text-sm leading-relaxed\">\n {heroLine}\n </div>\n </div>\n\n <div className=\"flex min-h-0 flex-1 flex-col overflow-y-auto bg-white px-4 py-4 text-gray-900 dark:bg-gray-950 dark:text-gray-100\">\n {topics.length > 0 && (\n <div className=\"mb-4 flex flex-wrap gap-2\">\n {topics.map((topic) =>\n topic.action === 'external_url' && topic.externalUrl ? (\n <a\n key={topic.id}\n href={topic.externalUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={`rounded-full px-4 py-2 text-xs font-semibold ${brandBtnClass}`}\n >\n {topic.label}\n </a>\n ) : (\n <button\n key={topic.id}\n type=\"button\"\n onClick={() =>\n setSelectedTopicId(\n selectedTopicId === topic.id ? null : topic.id\n )\n }\n className={`rounded-full px-4 py-2 text-xs font-semibold ${\n selectedTopicId === topic.id\n ? brandBtnClass\n : 'border border-gray-300 text-gray-700 dark:border-gray-600 dark:text-gray-200'\n }`}\n >\n {topic.label}\n </button>\n )\n )}\n </div>\n )}\n\n {needsGuestFields && (\n <p className=\"mb-3 text-sm text-gray-600 dark:text-gray-300\">\n {labels.intro}\n </p>\n )}\n <GuestContactFields args={args} compact />\n\n <button\n type=\"button\"\n onClick={() => confirmGuestContact(labels.emailInvalid)}\n className={`mt-4 w-full py-2.5 text-sm font-semibold ${brandBtnClass}`}\n >\n {labels.continueCta}\n </button>\n\n <PrivacyFooter\n privacyPolicyUrl={widgetConfig?.privacyPolicyUrl}\n className=\"mt-4 text-gray-500 dark:text-gray-400\"\n />\n </div>\n </div>\n )\n}\n","'use client'\n\nimport type { MailooChatWelcomeRenderArgs } from '../components/mailoo-site-chat-widget.js'\nimport {\n GuestContactFields,\n operatorInitials,\n PrivacyFooter,\n} from './shared.js'\n\n/** Team roster welcome: brand header, operator avatars, topic grid, privacy. */\nexport function TeamWelcomePreset(args: MailooChatWelcomeRenderArgs) {\n const {\n widgetConfig,\n title,\n welcomeMessage,\n brandBtnClass,\n brandStyle,\n topics,\n selectedTopicId,\n setSelectedTopicId,\n labels,\n needsGuestFields,\n confirmGuestContact,\n } = args\n\n const operators = widgetConfig?.operators ?? []\n const headerBg =\n 'bg-[var(--mailoo-chat-brand,#5b21b6)] text-[var(--mailoo-chat-brand-on,#ffffff)]'\n\n return (\n <div\n className=\"flex min-h-0 flex-1 flex-col overflow-hidden\"\n style={brandStyle}\n >\n <div className={`shrink-0 px-4 pb-4 pt-5 ${headerBg}`}>\n {operators.length > 0 && (\n <div className=\"mb-3 flex -space-x-2\">\n {operators.slice(0, 5).map((op) => (\n <div key={op.userId} className=\"relative\">\n {op.image ? (\n <img\n src={op.image}\n alt=\"\"\n className=\"h-9 w-9 rounded-full border-2 border-white/30 object-cover\"\n />\n ) : (\n <span className=\"flex h-9 w-9 items-center justify-center rounded-full border-2 border-white/30 bg-white/20 text-xs font-semibold\">\n {operatorInitials(op.name)}\n </span>\n )}\n {op.online && (\n <span\n className=\"absolute bottom-0 right-0 h-2.5 w-2.5 rounded-full border-2 border-[var(--mailoo-chat-brand,#5b21b6)] bg-emerald-400\"\n aria-hidden\n />\n )}\n </div>\n ))}\n </div>\n )}\n <h2 className=\"text-lg font-semibold leading-tight\">{title}</h2>\n <p className=\"mt-1 text-sm opacity-90\">{welcomeMessage}</p>\n </div>\n\n <div className=\"flex min-h-0 flex-1 flex-col overflow-y-auto bg-white p-4 dark:bg-gray-900\">\n {topics.length > 0 && (\n <div className=\"mb-4 grid grid-cols-2 gap-2\">\n {topics.map((topic) =>\n topic.action === 'external_url' && topic.externalUrl ? (\n <a\n key={topic.id}\n href={topic.externalUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"rounded-lg border border-gray-200 px-3 py-2.5 text-center text-xs font-medium text-gray-800 hover:border-[var(--mailoo-chat-brand,#5b21b6)] dark:border-gray-600 dark:text-gray-100\"\n >\n {topic.label}\n </a>\n ) : (\n <button\n key={topic.id}\n type=\"button\"\n onClick={() =>\n setSelectedTopicId(\n selectedTopicId === topic.id ? null : topic.id\n )\n }\n className={`rounded-lg border px-3 py-2.5 text-center text-xs font-medium ${\n selectedTopicId === topic.id\n ? `${brandBtnClass} border-transparent`\n : 'border-gray-200 text-gray-800 hover:border-[var(--mailoo-chat-brand,#5b21b6)] dark:border-gray-600 dark:text-gray-100'\n }`}\n >\n {topic.label}\n </button>\n )\n )}\n </div>\n )}\n\n {needsGuestFields && (\n <p className=\"mb-3 text-sm text-gray-600 dark:text-gray-300\">\n {labels.intro}\n </p>\n )}\n <GuestContactFields args={args} compact />\n\n <button\n type=\"button\"\n onClick={() => confirmGuestContact(labels.emailInvalid)}\n className={`mt-4 w-full py-2.5 text-sm font-semibold ${brandBtnClass}`}\n >\n {labels.continueCta}\n </button>\n\n <PrivacyFooter\n privacyPolicyUrl={widgetConfig?.privacyPolicyUrl}\n className=\"mt-4\"\n />\n </div>\n </div>\n )\n}\n","'use client'\n\nimport {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useState,\n type ReactNode,\n} from 'react'\nimport type { MailooChatWelcomePresetId } from './types.js'\nimport { normalizeLegacyWelcomePresetId } from './types.js'\n\nconst DEFAULT_STORAGE_KEY = 'mailoo-chat-welcome-preset'\n\ntype MailooChatWelcomePresetContextValue = {\n preset: MailooChatWelcomePresetId\n setPreset: (preset: MailooChatWelcomePresetId) => void\n}\n\nconst MailooChatWelcomePresetContext =\n createContext<MailooChatWelcomePresetContextValue | null>(null)\n\nexport function MailooChatWelcomePresetProvider({\n children,\n defaultPreset = 'builtin',\n storageKey = DEFAULT_STORAGE_KEY,\n}: {\n children: ReactNode\n defaultPreset?: MailooChatWelcomePresetId\n storageKey?: string\n}) {\n const [preset, setPresetState] =\n useState<MailooChatWelcomePresetId>(defaultPreset)\n\n useEffect(() => {\n try {\n const stored = localStorage.getItem(storageKey)\n if (!stored) return\n const normalized = normalizeLegacyWelcomePresetId(stored)\n if (normalized) {\n setPresetState(normalized)\n }\n } catch {\n /* ignore */\n }\n }, [storageKey])\n\n const setPreset = useCallback(\n (next: MailooChatWelcomePresetId) => {\n setPresetState(next)\n try {\n localStorage.setItem(storageKey, next)\n } catch {\n /* ignore */\n }\n },\n [storageKey]\n )\n\n const value = useMemo(() => ({ preset, setPreset }), [preset, setPreset])\n\n return (\n <MailooChatWelcomePresetContext.Provider value={value}>\n {children}\n </MailooChatWelcomePresetContext.Provider>\n )\n}\n\nexport function useMailooChatWelcomePreset(): MailooChatWelcomePresetContextValue {\n const ctx = useContext(MailooChatWelcomePresetContext)\n if (!ctx) {\n throw new Error(\n 'useMailooChatWelcomePreset must be used within MailooChatWelcomePresetProvider'\n )\n }\n return ctx\n}\n\n/** Returns null when no {@link MailooChatWelcomePresetProvider} is present. */\nexport function useOptionalMailooChatWelcomePreset(): MailooChatWelcomePresetContextValue | null {\n return useContext(MailooChatWelcomePresetContext)\n}\n","import type { MailooChatWelcomePresetOption } from './types.js'\n\nexport const MAILOO_CHAT_WELCOME_PRESET_OPTIONS: MailooChatWelcomePresetOption[] =\n [\n {\n id: 'builtin',\n label: 'Built-in',\n description:\n 'Default guest gate with panel header, topics, and email form.',\n },\n {\n id: 'team',\n label: 'Team',\n description:\n 'Brand header with operator avatars, online indicators, and a topic grid.',\n },\n {\n id: 'assistant',\n label: 'Assistant',\n description:\n 'Persona hero, welcome message bubble, and rounded topic chips.',\n },\n ]\n","'use client'\n\nimport { MAILOO_CHAT_WELCOME_PRESET_OPTIONS } from './preset-options.js'\nimport { useMailooChatWelcomePreset } from './preset-context.js'\nimport type {\n MailooChatWelcomePresetId,\n MailooChatWelcomePresetOption,\n} from './types.js'\n\nexport type MailooChatWelcomePresetSwitcherProps = {\n title?: string\n description?: string\n className?: string\n optionClassName?: (active: boolean) => string\n}\n\nexport function MailooChatWelcomePresetSwitcher({\n title = 'Welcome preset',\n description = 'Preview optional welcome layouts via renderWelcome on MailooSiteChatWidget.',\n className = '',\n optionClassName,\n}: MailooChatWelcomePresetSwitcherProps) {\n const { preset, setPreset } = useMailooChatWelcomePreset()\n\n const defaultOptionClass = (active: boolean) =>\n [\n 'rounded-lg border p-3 text-left transition-colors',\n active\n ? 'border-blue-600 bg-blue-50 ring-1 ring-blue-600 dark:border-blue-400 dark:bg-blue-950/40 dark:ring-blue-400'\n : 'border-gray-200 hover:border-blue-400/50 dark:border-gray-700',\n ].join(' ')\n\n const resolveOptionClass = optionClassName ?? defaultOptionClass\n\n return (\n <div className={className}>\n <h2 className=\"text-sm font-semibold text-gray-900 dark:text-white\">\n {title}\n </h2>\n {description ? (\n <p className=\"mt-1 text-sm text-gray-600 dark:text-gray-400\">\n {description}\n </p>\n ) : null}\n <div className=\"mt-4 grid gap-3 sm:grid-cols-3\">\n {MAILOO_CHAT_WELCOME_PRESET_OPTIONS.map(\n (option: MailooChatWelcomePresetOption) => {\n const active = preset === option.id\n return (\n <button\n key={option.id}\n type=\"button\"\n onClick={() => setPreset(option.id as MailooChatWelcomePresetId)}\n className={resolveOptionClass(active)}\n >\n <span className=\"block text-sm font-medium text-gray-900 dark:text-white\">\n {option.label}\n </span>\n <span className=\"mt-1 block text-xs text-gray-600 dark:text-gray-400\">\n {option.description}\n </span>\n </button>\n )\n }\n )}\n </div>\n </div>\n )\n}\n","'use client'\n\nimport type { ReactNode } from 'react'\nimport type { MailooChatWelcomeRenderArgs } from '../components/mailoo-site-chat-widget.js'\nimport { AssistantWelcomePreset } from './assistant.js'\nimport { TeamWelcomePreset } from './team.js'\nimport {\n parseMailooChatWelcomePreset,\n type MailooChatWelcomePresetId,\n type MailooChatWelcomePresetOption,\n} from './types.js'\nimport { MAILOO_CHAT_WELCOME_PRESET_OPTIONS } from './preset-options.js'\n\nexport {\n MailooChatWelcomePresetProvider,\n useMailooChatWelcomePreset,\n useOptionalMailooChatWelcomePreset,\n} from './preset-context.js'\nexport { AssistantWelcomePreset } from './assistant.js'\nexport { TeamWelcomePreset } from './team.js'\nexport {\n GuestContactFields,\n operatorInitials,\n PrivacyFooter,\n} from './shared.js'\nexport {\n normalizeLegacyWelcomePresetId,\n parseMailooChatWelcomePreset,\n type MailooChatWelcomePresetId,\n type MailooChatWelcomePresetOption,\n} from './types.js'\nexport { MAILOO_CHAT_WELCOME_PRESET_OPTIONS } from './preset-options.js'\n\nexport function renderMailooChatWelcomePreset(\n preset: MailooChatWelcomePresetId,\n args: MailooChatWelcomeRenderArgs\n): ReactNode {\n if (preset === 'team') return TeamWelcomePreset(args)\n if (preset === 'assistant') return AssistantWelcomePreset(args)\n return null\n}\n\n/** Returns `renderWelcome` callback for MailooSiteChatWidget, or undefined for built-in. */\nexport function createMailooChatWelcomePresetRenderer(\n preset: MailooChatWelcomePresetId\n): ((args: MailooChatWelcomeRenderArgs) => ReactNode) | undefined {\n if (preset === 'builtin') return undefined\n return (args) => renderMailooChatWelcomePreset(preset, args)\n}\n\nexport function mailooChatWelcomePresetPanelClassName(\n preset: MailooChatWelcomePresetId\n): string | undefined {\n if (preset === 'team' || preset === 'assistant') {\n return 'border-0 shadow-2xl'\n }\n return undefined\n}\n\nexport { MailooChatWelcomePresetSwitcher } from './preset-switcher.js'\nexport type { MailooChatWelcomePresetSwitcherProps } from './preset-switcher.js'\n"],"mappings":"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","names":["jsx","jsxs","jsx","jsxs","jsx","jsx","jsxs"]}
|