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