@telia-ace/widget-conversation 1.0.26 → 1.0.28

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/README.md +246 -106
  2. package/dist/{ui → components}/conversation/conversation.d.ts +0 -0
  3. package/dist/{ui/conversation/conversation-component.d.ts → components/conversation/plugin.d.ts} +13 -2
  4. package/dist/components/conversation/ui/content.d.ts +2 -0
  5. package/dist/{ui/conversation/conversation-input.d.ts → components/conversation/ui/input.d.ts} +0 -0
  6. package/dist/components/conversation/ui/loader.d.ts +9 -0
  7. package/dist/components/conversation/ui/message-list-items/button-list.d.ts +8 -0
  8. package/dist/components/conversation/ui/message-list-items/custom.d.ts +9 -0
  9. package/dist/components/conversation/ui/message-list-items/html.d.ts +5 -0
  10. package/dist/components/conversation/ui/message-list-items/link-list.d.ts +8 -0
  11. package/dist/components/conversation/ui/message-list-items/separator.d.ts +2 -0
  12. package/dist/components/conversation/ui/message-list-items/text.d.ts +6 -0
  13. package/dist/components/conversation/ui/message-list-items/video-request.d.ts +8 -0
  14. package/dist/{ui/conversation → components/conversation/ui}/message-types/agent.d.ts +1 -1
  15. package/dist/{ui/conversation → components/conversation/ui}/message-types/index.d.ts +0 -1
  16. package/dist/components/conversation/ui/message-types/message-list.d.ts +9 -0
  17. package/dist/{ui/conversation → components/conversation/ui}/message-types/system.d.ts +1 -1
  18. package/dist/{ui/conversation → components/conversation/ui}/message-types/timestamp.d.ts +0 -0
  19. package/dist/{ui/conversation → components/conversation/ui}/message-types/user.d.ts +0 -0
  20. package/dist/components/conversation/ui/message.d.ts +5 -0
  21. package/dist/components/conversation/ui/overlay-outlets.d.ts +13 -0
  22. package/dist/components/conversation/ui/styles.d.ts +31 -0
  23. package/dist/{ui/return-button/return-button-component.d.ts → components/return-button/plugin.d.ts} +1 -2
  24. package/dist/{ui → components}/return-button/return-button.d.ts +0 -0
  25. package/dist/conversation.d7aad569.js +1153 -0
  26. package/dist/conversation.d7aad569.js.map +1 -0
  27. package/dist/index.d.ts +2 -1
  28. package/dist/index.js +453 -341
  29. package/dist/index.js.map +1 -1
  30. package/dist/{return-button.8773c0de.js → return-button.9c517bbe.js} +11 -14
  31. package/dist/return-button.9c517bbe.js.map +1 -0
  32. package/dist/types.d.ts +34 -41
  33. package/dist/utils/map-actions.d.ts +1 -0
  34. package/dist/utils/open-chat-widget.d.ts +1 -1
  35. package/package.json +10 -9
  36. package/dist/conversation.3981560b.js +0 -1100
  37. package/dist/conversation.3981560b.js.map +0 -1
  38. package/dist/return-button.8773c0de.js.map +0 -1
  39. package/dist/ui/conversation/conversation-content.d.ts +0 -11
  40. package/dist/ui/conversation/conversation-loader.d.ts +0 -8
  41. package/dist/ui/conversation/conversation-message.d.ts +0 -7
  42. package/dist/ui/conversation/conversation-styles.d.ts +0 -11
  43. package/dist/ui/conversation/index.d.ts +0 -2
  44. package/dist/ui/conversation/message-types/custom.d.ts +0 -9
  45. package/dist/ui/index.d.ts +0 -2
  46. package/dist/ui/return-button/index.d.ts +0 -2
@@ -0,0 +1,1153 @@
1
+ var Ee = Object.defineProperty, xe = Object.defineProperties;
2
+ var we = Object.getOwnPropertyDescriptors;
3
+ var A = Object.getOwnPropertySymbols;
4
+ var ee = Object.prototype.hasOwnProperty, te = Object.prototype.propertyIsEnumerable;
5
+ var Z = (t, e, r) => e in t ? Ee(t, e, { enumerable: !0, configurable: !0, writable: !0, value: r }) : t[e] = r, h = (t, e) => {
6
+ for (var r in e || (e = {}))
7
+ ee.call(e, r) && Z(t, r, e[r]);
8
+ if (A)
9
+ for (var r of A(e))
10
+ te.call(e, r) && Z(t, r, e[r]);
11
+ return t;
12
+ }, x = (t, e) => xe(t, we(e));
13
+ var j = (t, e) => {
14
+ var r = {};
15
+ for (var o in t)
16
+ ee.call(t, o) && e.indexOf(o) < 0 && (r[o] = t[o]);
17
+ if (t != null && A)
18
+ for (var o of A(t))
19
+ e.indexOf(o) < 0 && te.call(t, o) && (r[o] = t[o]);
20
+ return r;
21
+ };
22
+ import { Input as oe, Button as L, borderTabStyle as b, SymbolBadge as w, useIsTabbing as ke, useDispatch as V, useProperties as M, useScroll as ae, Typography as q, invertedHoverButton as Ce, Html as Y, List as le, buttonCss as G, ItemList as J, itemList as Q, useComponent as Se, genericHtml as ze, headingElement as se, list as Le, WidgetOverlayOutlet as ie } from "@telia-ace/widget-ui";
23
+ import { appendClassNames as H } from "@telia-ace/widget-utilities";
24
+ import n, { useState as R, useEffect as ce, forwardRef as X, Suspense as Me, useMemo as He, useCallback as me, useRef as Te } from "react";
25
+ import a, { css as g, keyframes as Ie } from "styled-components";
26
+ import { FormComponent as Ae } from "@telia-ace/widget-forms";
27
+ import { ConversationMessageListItemType as C, ConversationMessageType as F } from "./index.js";
28
+ import "@telia-ace/widget-core";
29
+ import "@telia-ace/widget-services";
30
+ import "@telia-ace/widget-plugins";
31
+ const Re = ({ className: t }) => {
32
+ const [e, r] = R(""), [o, l] = R(!1), [s, u] = R(0), [c, f] = R(0), v = ke(), m = V(), {
33
+ inputPlaceholder: i = "Type your message",
34
+ inputHidden: $ = !1,
35
+ inputDisabled: k = !1,
36
+ sendButtonLabel: S = "Send message",
37
+ inputMultiline: E = !0,
38
+ secondaryAction: p
39
+ } = M(), [pe, y] = ae(!0);
40
+ ce(() => {
41
+ if (y.current) {
42
+ const { lineHeight: d, maxHeight: I } = getComputedStyle(y.current);
43
+ if (d && d.indexOf("px") > -1) {
44
+ const z = d.split("px"), $e = parseInt(z[0], 10);
45
+ u($e);
46
+ const ve = I.split("px");
47
+ f(parseInt(ve[0], 10));
48
+ }
49
+ }
50
+ }, [y.current]);
51
+ const N = (d) => {
52
+ !d.shiftKey || !E ? (d.preventDefault(), e && e.length > 0 && (m("user-submit", { text: e }), r(""), O(""))) : e.length < 1 && d.preventDefault();
53
+ }, ye = (d) => {
54
+ !p || (d.preventDefault(), m("action", h({
55
+ actionKey: p.action
56
+ }, p)));
57
+ }, be = (d) => {
58
+ if (E && y.current) {
59
+ const I = y.current.scrollHeight;
60
+ if (I > s) {
61
+ y.current.style.height = "auto";
62
+ let z = I;
63
+ d.length < 1 && (z = s), y.current.style.height = `${z}px`, z >= c ? y.current.style.overflowY = "scroll" : y.current.style.overflowY = "hidden";
64
+ }
65
+ }
66
+ }, O = (d) => {
67
+ be(d), r(d), d && d.length > 0 && m("user-typing", { textLength: d.length });
68
+ };
69
+ return $ ? null : /* @__PURE__ */ n.createElement(Ne, {
70
+ grow: E,
71
+ className: H("humany-conversation-input", t),
72
+ "data-has-focus": o,
73
+ scrollableCss: pe,
74
+ isTabbing: v
75
+ }, p && /* @__PURE__ */ n.createElement(Ke, {
76
+ disabled: k,
77
+ onClick: ye,
78
+ title: p.label,
79
+ "aria-label": p.label
80
+ }, /* @__PURE__ */ n.createElement(w, {
81
+ size: 24,
82
+ symbol: { type: "Svg", content: p.icon || "browse" }
83
+ })), E ? /* @__PURE__ */ n.createElement(de, {
84
+ value: e,
85
+ onChange: O,
86
+ onEnter: N,
87
+ disabled: k,
88
+ "aria-label": i,
89
+ placeholder: i,
90
+ onFocusChange: l,
91
+ type: "textarea",
92
+ rows: 1,
93
+ ref: y
94
+ }) : /* @__PURE__ */ n.createElement(Be, {
95
+ value: e,
96
+ onChange: O,
97
+ onEnter: N,
98
+ disabled: k,
99
+ "aria-label": i,
100
+ placeholder: i,
101
+ onFocusChange: l
102
+ }), /* @__PURE__ */ n.createElement(ue, {
103
+ disabled: k,
104
+ onClick: N,
105
+ title: S,
106
+ "aria-label": S
107
+ }, /* @__PURE__ */ n.createElement(Oe, {
108
+ size: 22,
109
+ symbol: { type: "Svg", content: "send" },
110
+ hasContent: e && e.length
111
+ })));
112
+ }, de = a(oe)`
113
+ resize: none;
114
+ flex: 1;
115
+ flex-shrink: 1;
116
+ min-height: 1.2em;
117
+ max-height: 148px;
118
+ line-height: 1.2em;
119
+ height: 1.2em;
120
+ padding: 0;
121
+ margin: ${(t) => {
122
+ var e;
123
+ return (e = t.theme.sizes) == null ? void 0 : e.medium;
124
+ }};
125
+ font-size: ${(t) => {
126
+ var e;
127
+ return (e = t.theme.fonts) == null ? void 0 : e.normal;
128
+ }};
129
+ border: none;
130
+ transition: height 200ms linear;
131
+ outline: none;
132
+ `, Be = a(oe)`
133
+ flex: 1;
134
+ border: none;
135
+ background-color: transparent;
136
+ font-weight: 300;
137
+ font-size: ${(t) => {
138
+ var e;
139
+ return (e = t.theme.fonts) == null ? void 0 : e.normal;
140
+ }};
141
+ line-height: 1.2em;
142
+ outline: none;
143
+ padding: ${(t) => {
144
+ var e;
145
+ return (e = t.theme.sizes) == null ? void 0 : e.medium;
146
+ }};
147
+ color: ${(t) => {
148
+ var e;
149
+ return (e = t.theme.colors) == null ? void 0 : e.text;
150
+ }};
151
+ &::placeholder {
152
+ color: ${(t) => {
153
+ var e;
154
+ return (e = t.theme.colors) == null ? void 0 : e.textLight;
155
+ }};
156
+ font-style: italic;
157
+ }
158
+ `, ue = a(L)`
159
+ flex: 0 0 50px;
160
+ align-self: stretch;
161
+ background-color: transparent;
162
+ display: flex;
163
+ align-items: center;
164
+ justify-content: center;
165
+ border: none;
166
+ color: #a6a6a6;
167
+ &:focus-visible {
168
+ ${b};
169
+ }
170
+ `, Ke = a(ue)`
171
+ border-right: ${(t) => t.theme.border};
172
+ margin: ${(t) => {
173
+ var e;
174
+ return (e = t.theme.sizes) == null ? void 0 : e.normal;
175
+ }} 0;
176
+ `, Ne = a.div`
177
+ ${(t) => t.grow ? g`
178
+ min-height: 50px;
179
+ max-height: 150px;
180
+ ` : g`
181
+ height: 50px;
182
+ `}
183
+ flex: 0 0 auto;
184
+ display: flex;
185
+ align-items: center;
186
+ background-color: ${(t) => {
187
+ var e;
188
+ return (e = t.theme.colors) == null ? void 0 : e.accent;
189
+ }};
190
+ border-top: ${(t) => t.theme.inputBorder};
191
+ ${(t) => t["data-has-focus"] && t.isTabbing && b}
192
+ ${de} {
193
+ ${(t) => !!t.scrollableCss && t.scrollableCss}
194
+ }
195
+ `, Oe = a((r) => {
196
+ var o = r, { hasContent: t } = o, e = j(o, ["hasContent"]);
197
+ return /* @__PURE__ */ n.createElement(w, h({}, e));
198
+ })`
199
+ line,
200
+ path {
201
+ stroke: ${(t) => {
202
+ var e;
203
+ return t.hasContent ? (e = t.theme.colors) == null ? void 0 : e.primary : "#a6a6a6";
204
+ }};
205
+ fill: ${(t) => {
206
+ var e;
207
+ return t.hasContent ? (e = t.theme.colors) == null ? void 0 : e.primary : "#a6a6a6";
208
+ }};
209
+ }
210
+ `, je = a.div`
211
+ width: ${(t) => t.avatarSize || "32px"};
212
+ height: ${(t) => t.avatarSize || "32px"};
213
+ border-radius: 50%;
214
+ background-color: ${(t) => {
215
+ var e;
216
+ return (e = t.theme.colors) == null ? void 0 : e.accent;
217
+ }};
218
+ border: ${(t) => t.theme.border};
219
+ grid-area: avatar;
220
+ align-self: flex-end;
221
+ justify-self: center;
222
+ overflow: hidden;
223
+ margin-right: 10px;
224
+ display: flex;
225
+ justify-content: center;
226
+ align-items: center;
227
+ color: ${(t) => {
228
+ var e;
229
+ return (e = t.theme.colors) == null ? void 0 : e.text;
230
+ }};
231
+
232
+ > img {
233
+ height: 100%;
234
+ width: 100%;
235
+ object-fit: cover;
236
+ }
237
+
238
+ > svg {
239
+ width: 90%;
240
+ height: 90%;
241
+ padding: 10%;
242
+ color: ${(t) => {
243
+ var e;
244
+ return (e = t.theme.colors) == null ? void 0 : e.text;
245
+ }};
246
+
247
+ line,
248
+ path,
249
+ circle,
250
+ fill {
251
+ stroke: ${(t) => {
252
+ var e;
253
+ return (e = t.theme.colors) == null ? void 0 : e.text;
254
+ }};
255
+ }
256
+ }
257
+ `, Fe = Ie`
258
+ 0% {
259
+ opacity: 0;
260
+ }
261
+ 75% {
262
+ opacity: 1;
263
+ }
264
+ 100% {
265
+ opacity: 0;
266
+ }
267
+ `, De = a.div`
268
+ display: flex;
269
+ justify-content: center;
270
+ > div {
271
+ height: 10px;
272
+ width: 10px;
273
+ border-radius: 50%;
274
+ margin: 5px;
275
+ background-color: ${(t) => {
276
+ var e;
277
+ return (e = t.theme.colors) == null ? void 0 : e.text;
278
+ }};
279
+ animation: ${Fe} 1s infinite;
280
+ }
281
+ > div:nth-child(2) {
282
+ animation-delay: 100ms;
283
+ }
284
+ > div:nth-child(3) {
285
+ animation-delay: 200ms;
286
+ }
287
+ `, P = a.div`
288
+ grid-area: content;
289
+ max-width: 100%;
290
+ overflow: hidden;
291
+ `, We = a(q)`
292
+ font-size: ${(t) => {
293
+ var e;
294
+ return (e = t.theme.fonts) == null ? void 0 : e.normal;
295
+ }};
296
+ font-weight: normal;
297
+ margin: 0;
298
+ `, U = a.div`
299
+ display: flex;
300
+ ${(t) => t.left && "justify-content: start;"};
301
+ ${(t) => t.center && "justify-content: center;"};
302
+ ${(t) => t.right && "justify-content: end;"};
303
+ `, _ = a.div`
304
+ ${(t) => {
305
+ var e;
306
+ return t.padded && `padding: ${(e = t.theme.sizes) == null ? void 0 : e.medium};`;
307
+ }}
308
+ ${(t) => !t.user && t.stacked && Pe(t.stacked, t.theme)}
309
+ ${(t) => t.user && t.stacked && Ue(t.stacked, t.theme)}
310
+
311
+ display: inline-block;
312
+ margin-top: ${(t) => {
313
+ var e;
314
+ return (e = t.theme.sizes) == null ? void 0 : e.normal;
315
+ }};
316
+ && > * {
317
+ overflow-wrap: break-word;
318
+ word-wrap: break-word;
319
+ word-break: break-all;
320
+ word-break: break-word;
321
+ hyphens: auto;
322
+ }
323
+ max-width: 100%;
324
+ ${(t) => t.fullWidth && "width: 100%;"}
325
+ `, Pe = (t, e) => {
326
+ var o, l;
327
+ const r = g`
328
+ background-color: ${(o = e.colors) == null ? void 0 : o.accent};
329
+ color: ${(l = e.colors) == null ? void 0 : l.text};
330
+ ${e.border && `border: ${e.border};`};
331
+ `;
332
+ return e.borderRadius ? g`
333
+ ${r}
334
+
335
+ border-top-right-radius: ${e.borderRadius};
336
+ border-bottom-right-radius: ${e.borderRadius};
337
+
338
+ ${t === "first" && `
339
+ border-top-left-radius: ${e.borderRadius};
340
+ `}
341
+
342
+ ${t === "last" && `
343
+ border-bottom-left-radius: ${e.borderRadius};
344
+ `}
345
+ ` : r;
346
+ }, Ue = (t, e) => {
347
+ var o, l;
348
+ const r = g`
349
+ background-color: ${(o = e.colors) == null ? void 0 : o.primary};
350
+ color: ${(l = e.colors) == null ? void 0 : l.accent};
351
+ `;
352
+ return e.borderRadius ? g`
353
+ ${r}
354
+
355
+ border-top-left-radius: ${e.borderRadius};
356
+ border-bottom-left-radius: ${e.borderRadius};
357
+
358
+ ${t === "first" && `
359
+ border-top-right-radius: ${e.borderRadius};
360
+ `}
361
+
362
+ ${t === "last" && `
363
+ border-bottom-right-radius: ${e.borderRadius};
364
+ `}
365
+ ` : r;
366
+ }, B = a.div`
367
+ margin-bottom: ${(t) => {
368
+ var e;
369
+ return (e = t.theme.sizes) == null ? void 0 : e.normal;
370
+ }};
371
+ &:last-child {
372
+ margin-bottom: 0;
373
+ }
374
+ `, T = g`
375
+ margin: ${(t) => {
376
+ var e;
377
+ return (e = t.theme.sizes) == null ? void 0 : e.medium;
378
+ }} 0;
379
+ padding: 0 ${(t) => {
380
+ var e;
381
+ return (e = t.theme.sizes) == null ? void 0 : e.medium;
382
+ }};
383
+ `, _e = a(Ae)`
384
+ & button.humany-form-component-button {
385
+ ${(t) => {
386
+ var e, r;
387
+ return Ce({
388
+ active: !1,
389
+ primaryColor: (e = t.theme.colors) == null ? void 0 : e.primary,
390
+ secondaryColor: (r = t.theme.colors) == null ? void 0 : r.accent
391
+ });
392
+ }};
393
+ display: block;
394
+ width: 100%;
395
+ margin-bottom: ${(t) => {
396
+ var e;
397
+ return (e = t.theme.sizes) == null ? void 0 : e.normal;
398
+ }};
399
+ }
400
+ & button.humany-form-component-submit {
401
+ width: 100%;
402
+ margin: 0;
403
+ :not(:last-child) {
404
+ margin-bottom: ${(t) => {
405
+ var e;
406
+ return (e = t.theme.sizes) == null ? void 0 : e.normal;
407
+ }};
408
+ }
409
+ }
410
+ `, Ve = a(Y)`
411
+ white-space: pre-wrap;
412
+ a {
413
+ color: ${(t) => t.theme.colors.link};
414
+ &:focus {
415
+ ${(t) => {
416
+ var e;
417
+ return ((e = t.theme.accessibility) == null ? void 0 : e.isTabbing) && b;
418
+ }};
419
+ }
420
+ }
421
+ `, qe = a(le)`
422
+ padding: 0;
423
+ list-style: none;
424
+ margin: 0 -${(t) => {
425
+ var e;
426
+ return (e = t.theme.sizes) == null ? void 0 : e.normal;
427
+ }};
428
+ > li {
429
+ margin: ${(t) => {
430
+ var e;
431
+ return (e = t.theme.sizes) == null ? void 0 : e.normal;
432
+ }};
433
+ }
434
+ `, Ye = a.button`
435
+ ${G};
436
+ display: block;
437
+ background-color: ${(t) => {
438
+ var e;
439
+ return (e = t.theme.colors) == null ? void 0 : e.primary;
440
+ }};
441
+ width: 100%;
442
+ color: #fff;
443
+ &:focus-visible {
444
+ ${b}
445
+ background-color: transparent;
446
+ }
447
+ `, ne = X(
448
+ ({ boxed: t, className: e, agentData: r }, o) => /* @__PURE__ */ n.createElement(P, {
449
+ ref: o
450
+ }, /* @__PURE__ */ n.createElement(U, {
451
+ left: t,
452
+ center: !t
453
+ }, /* @__PURE__ */ n.createElement(_, {
454
+ padded: !!t,
455
+ stacked: t ? "first" : void 0
456
+ }, /* @__PURE__ */ n.createElement(De, null, /* @__PURE__ */ n.createElement("div", null), /* @__PURE__ */ n.createElement("div", null), /* @__PURE__ */ n.createElement("div", null)))))
457
+ ), Ge = a.p`
458
+ && {
459
+ font-size: ${(t) => {
460
+ var e;
461
+ return (e = t.theme.fonts) == null ? void 0 : e.small;
462
+ }};
463
+ font-weight: 300;
464
+ }
465
+ margin: 0;
466
+ line-height: 1.5em;
467
+ grid-area: info;
468
+ color: ${(t) => {
469
+ var e;
470
+ return (e = t.theme.colors) == null ? void 0 : e.text;
471
+ }};
472
+ `, re = (t) => new Date(t).toLocaleTimeString([], { hour: "2-digit", minute: "2-digit" }), K = ({ className: t, name: e, timestamp: r }) => {
473
+ if (!e && !r)
474
+ return null;
475
+ let o = "";
476
+ return e ? r ? o = `${e}: ${re(r)}` : o = e : r && (o = re(r)), /* @__PURE__ */ n.createElement(Ge, null, o);
477
+ }, he = ({ className: t, children: e, sender: r, timestamp: o }) => {
478
+ const { avatar: l, name: s } = r, { avatarSize: u } = M();
479
+ return /* @__PURE__ */ n.createElement(Je, {
480
+ hasAvatar: !!l,
481
+ className: H(t, "humany-conversation-agent-message")
482
+ }, l && /* @__PURE__ */ n.createElement(je, {
483
+ avatarSize: u
484
+ }, typeof l == "string" ? /* @__PURE__ */ n.createElement("img", {
485
+ src: l
486
+ }) : /* @__PURE__ */ n.createElement(w, {
487
+ symbol: l
488
+ })), e, /* @__PURE__ */ n.createElement(K, {
489
+ name: s,
490
+ timestamp: o
491
+ }));
492
+ }, Je = a.div`
493
+ display: grid;
494
+ margin-right: 10%;
495
+ width: 90%;
496
+ ${(t) => t.hasAvatar ? g`
497
+ grid-template-columns: auto 1fr;
498
+ grid-template-rows: 1fr auto;
499
+ grid-template-areas:
500
+ 'avatar content'
501
+ '. info';
502
+ ` : g`
503
+ grid-template-columns: 1fr;
504
+ grid-template-rows: 1fr auto;
505
+ grid-template-areas:
506
+ 'content'
507
+ 'info';
508
+ `};
509
+ `, Qe = X(
510
+ ({ className: t, children: e, timestamp: r, discrete: o, fullWidth: l }, s) => /* @__PURE__ */ n.createElement(Xe, {
511
+ ref: s,
512
+ className: H(t, "humany-conversation-system-message"),
513
+ fullWidth: l
514
+ }, o ? /* @__PURE__ */ n.createElement(Ze, {
515
+ className: "humany-conversation-discrete-message"
516
+ }, e, /* @__PURE__ */ n.createElement(K, {
517
+ timestamp: r
518
+ })) : /* @__PURE__ */ n.createElement(n.Fragment, null, e, /* @__PURE__ */ n.createElement(K, {
519
+ timestamp: r
520
+ })))
521
+ ), Xe = a.div`
522
+ ${(t) => t.fullWidth && "width: 100%"};
523
+ padding: 0 ${(t) => {
524
+ var e;
525
+ return (e = t.theme.sizes) == null ? void 0 : e.large;
526
+ }};
527
+ overflow: auto;
528
+ `, Ze = a.div`
529
+ text-align: center;
530
+ word-wrap: break-word;
531
+ font-size: ${(t) => {
532
+ var e;
533
+ return (e = t.theme.fonts) == null ? void 0 : e.normal;
534
+ }};
535
+ color: ${(t) => {
536
+ var e;
537
+ return (e = t.theme.colors) == null ? void 0 : e.text;
538
+ }};
539
+ > p {
540
+ margin: 0;
541
+ }
542
+ `, et = ({ className: t, children: e, timestamp: r }) => {
543
+ const { userLabel: o = "" } = M();
544
+ return /* @__PURE__ */ n.createElement(tt, {
545
+ className: H(t, "humany-conversation-user-message")
546
+ }, e, /* @__PURE__ */ n.createElement(K, {
547
+ name: o,
548
+ timestamp: r
549
+ }));
550
+ }, tt = a.div`
551
+ margin-left: 10%;
552
+ width: 90%;
553
+ display: flex;
554
+ flex-direction: column;
555
+ align-items: flex-end;
556
+ `, ge = (t) => Array.isArray(t) ? t : Object.keys(t).map((e) => ({
557
+ label: t[e],
558
+ actionKey: e
559
+ })), nt = ({ header: t, actions: e, dispatch: r }) => /* @__PURE__ */ n.createElement(rt, {
560
+ header: t,
561
+ items: ge(e),
562
+ renderItem: (o) => /* @__PURE__ */ n.createElement("li", {
563
+ key: o.actionKey
564
+ }, /* @__PURE__ */ n.createElement(ot, {
565
+ onClick: () => {
566
+ r("action", o);
567
+ },
568
+ "aria-label": o.label,
569
+ title: o.label
570
+ }, /* @__PURE__ */ n.createElement(w, {
571
+ symbol: o.symbol
572
+ }), o.label))
573
+ }), rt = a(J)`
574
+ ${Q}
575
+ > ul {
576
+ display: flex;
577
+ flex-wrap: wrap;
578
+ gap: ${(t) => {
579
+ var e;
580
+ return (e = t.theme.sizes) == null ? void 0 : e.normal;
581
+ }};
582
+ > li {
583
+ margin: 0;
584
+ }
585
+ }
586
+ ${T}
587
+ `, ot = a(L)`
588
+ ${G};
589
+
590
+ display: block;
591
+ padding: ${(t) => {
592
+ var e;
593
+ return (e = t.theme.sizes) == null ? void 0 : e.normal;
594
+ }};
595
+ background-color: ${(t) => {
596
+ var e;
597
+ return (e = t.theme.colors) == null ? void 0 : e.primary;
598
+ }};
599
+ width: 100%;
600
+ color: #ffffff;
601
+ overflow: hidden;
602
+ text-overflow: ellipsis;
603
+ &:focus-visible {
604
+ ${b}
605
+ background-color: transparent;
606
+ }
607
+
608
+ i,
609
+ svg {
610
+ margin-right: ${(t) => {
611
+ var e;
612
+ return (e = t.theme.sizes) == null ? void 0 : e.small;
613
+ }};
614
+ }
615
+ `, at = ({ type: t, content: e = {} }) => {
616
+ const r = Se(t);
617
+ return !r || !t ? null : /* @__PURE__ */ n.createElement(Me, {
618
+ fallback: null
619
+ }, /* @__PURE__ */ n.createElement(r, h({}, e)));
620
+ }, lt = ({ body: t }) => /* @__PURE__ */ n.createElement(st, {
621
+ html: t
622
+ }), st = a(Y)`
623
+ ${ze}
624
+ color: inherit;
625
+ white-space: pre-wrap;
626
+ ${T}
627
+ a {
628
+ color: ${(t) => t.theme.colors.link};
629
+ &:focus-visible {
630
+ ${b};
631
+ }
632
+ }
633
+ `, it = ({ header: t, actions: e, dispatch: r }) => /* @__PURE__ */ n.createElement(ct, {
634
+ header: t,
635
+ items: ge(e),
636
+ renderItem: (o) => /* @__PURE__ */ n.createElement("li", {
637
+ key: o.actionKey
638
+ }, /* @__PURE__ */ n.createElement(mt, {
639
+ help: o.actionKey === "help",
640
+ onClick: () => {
641
+ r("action", o);
642
+ },
643
+ "aria-label": o.label,
644
+ title: o.label
645
+ }, o.label, o.actionKey === "help" && /* @__PURE__ */ n.createElement(w, {
646
+ size: 14,
647
+ symbol: {
648
+ type: "Svg",
649
+ content: "caret-down"
650
+ }
651
+ })))
652
+ }), ct = a(J)`
653
+ ${Q}
654
+ ${T}
655
+
656
+ ${se(
657
+ "h1",
658
+ g`
659
+ white-space: normal;
660
+ `
661
+ )}
662
+
663
+ > ul {
664
+ display: flex;
665
+ flex-direction: column;
666
+ gap: ${(t) => {
667
+ var e;
668
+ return (e = t.theme.sizes) == null ? void 0 : e.normal;
669
+ }};
670
+ > li {
671
+ margin: 0;
672
+ }
673
+ }
674
+ `, mt = a(L)`
675
+ display: block;
676
+ text-align: left;
677
+ font-weight: 300;
678
+ color: ${(t) => {
679
+ var e;
680
+ return (e = t.theme.colors) == null ? void 0 : e.primary;
681
+ }};
682
+ max-width: 100%;
683
+ text-overflow: ellipsis;
684
+ overflow: hidden;
685
+
686
+ ${(t) => {
687
+ var e, r;
688
+ return t.help && g`
689
+ color: ${(e = t.theme.colors) == null ? void 0 : e.text};
690
+ text-decoration: underline;
691
+
692
+ i,
693
+ svg {
694
+ margin-left: ${(r = t.theme.sizes) == null ? void 0 : r.small};
695
+ }
696
+ `;
697
+ }}
698
+
699
+ &:focus-visible {
700
+ ${b}
701
+ span {
702
+ color: ${(t) => {
703
+ var e;
704
+ return (e = t.theme.colors) == null ? void 0 : e.primary;
705
+ }};
706
+ text-decoration: underline;
707
+ }
708
+ }
709
+ `, dt = () => /* @__PURE__ */ n.createElement(ut, null), ut = a.div`
710
+ ${(t) => t.theme.border && `border-bottom: ${t.theme.border};`}
711
+ width: 100%;
712
+ `, ht = ({ text: t }) => /* @__PURE__ */ n.createElement(gt, {
713
+ variant: "span"
714
+ }, t), gt = a(q)`
715
+ ${T}
716
+ `, ft = ({
717
+ header: t = "Video call",
718
+ acceptLabel: e = "Accept",
719
+ declineLabel: r = "Decline",
720
+ dispatch: o
721
+ }) => {
722
+ const l = He(() => [
723
+ {
724
+ label: e,
725
+ actionKey: "accept-video-call",
726
+ symbol: {
727
+ type: "Svg",
728
+ content: "video"
729
+ }
730
+ },
731
+ {
732
+ label: r,
733
+ actionKey: "decline-video-call",
734
+ symbol: {
735
+ type: "Svg",
736
+ content: "close"
737
+ }
738
+ }
739
+ ], [e, r]);
740
+ return /* @__PURE__ */ n.createElement(pt, {
741
+ header: t,
742
+ items: l,
743
+ renderItem: (s) => {
744
+ const u = s.actionKey === "accept-video-call" ? "#70c48e" : "#da5c85";
745
+ return /* @__PURE__ */ n.createElement("li", {
746
+ key: s.actionKey
747
+ }, /* @__PURE__ */ n.createElement(yt, {
748
+ onClick: () => {
749
+ o("action", s);
750
+ },
751
+ "aria-label": s.label,
752
+ title: s.label,
753
+ bgColor: u
754
+ }, /* @__PURE__ */ n.createElement(w, {
755
+ symbol: s.symbol,
756
+ size: 25
757
+ })));
758
+ }
759
+ });
760
+ }, pt = a(J)`
761
+ ${Q}
762
+ > ul {
763
+ display: flex;
764
+ flex-wrap: wrap;
765
+ gap: ${(t) => {
766
+ var e;
767
+ return (e = t.theme.sizes) == null ? void 0 : e.normal;
768
+ }};
769
+ > li {
770
+ margin: 0;
771
+ }
772
+ }
773
+ ${T}
774
+ `, yt = a(L)`
775
+ ${G};
776
+
777
+ background-color: ${(t) => t.bgColor};
778
+ display: flex;
779
+ justify-content: center;
780
+ align-items: center;
781
+ color: #ffffff;
782
+ width: 46px;
783
+ height: 46px;
784
+ border-radius: 100%;
785
+
786
+ &:focus-visible {
787
+ ${b}
788
+ background-color: transparent;
789
+
790
+ i,
791
+ svg {
792
+ color: ${(t) => {
793
+ var e;
794
+ return (e = t.theme.colors) == null ? void 0 : e.primary;
795
+ }};
796
+
797
+ path {
798
+ stroke: ${(t) => {
799
+ var e;
800
+ return (e = t.theme.colors) == null ? void 0 : e.primary;
801
+ }};
802
+ }
803
+ }
804
+ }
805
+
806
+ i,
807
+ svg {
808
+ color: #fff;
809
+
810
+ path {
811
+ stroke: #fff;
812
+ }
813
+ }
814
+ `, bt = ([t, e]) => ({ type: t, content: e }), $t = ({ items: t, dispatch: e }) => /* @__PURE__ */ n.createElement(vt, {
815
+ items: t.map(bt),
816
+ renderLi: !0,
817
+ renderItem: (r) => {
818
+ switch (r.type) {
819
+ case C.Text:
820
+ return /* @__PURE__ */ n.createElement(ht, {
821
+ text: r.content
822
+ });
823
+ case C.HTML:
824
+ return /* @__PURE__ */ n.createElement(lt, h({}, r.content));
825
+ case C.Separator:
826
+ return /* @__PURE__ */ n.createElement(dt, h({}, r.content));
827
+ case C.LinkList:
828
+ return /* @__PURE__ */ n.createElement(it, x(h({}, r.content), {
829
+ dispatch: e
830
+ }));
831
+ case C.ButtonList:
832
+ return /* @__PURE__ */ n.createElement(nt, x(h({}, r.content), {
833
+ dispatch: e
834
+ }));
835
+ case C.VideoRequest:
836
+ return /* @__PURE__ */ n.createElement(ft, x(h({}, r.content), {
837
+ dispatch: e
838
+ }));
839
+ default:
840
+ return /* @__PURE__ */ n.createElement(at, {
841
+ type: r.type,
842
+ content: r.content
843
+ });
844
+ }
845
+ }
846
+ }), vt = a(le)`
847
+ ${Le}
848
+
849
+ > li {
850
+ margin: 0;
851
+ }
852
+ `, Et = X(
853
+ ({ className: t, timestamp: e, sender: r, type: o, content: l }, s) => {
854
+ const u = me(
855
+ (m) => {
856
+ let i = "first";
857
+ return l.length > 1 && (i = m === 0 ? "first" : m + 1 === l.length ? "last" : "middle"), i;
858
+ },
859
+ [l]
860
+ ), c = () => /* @__PURE__ */ n.createElement(n.Fragment, null, l.map((m) => {
861
+ const { key: i, body: $, title: k, form: S, actions: E } = m, p = !!$ && !k && !S && !E;
862
+ return /* @__PURE__ */ n.createElement(Qe, {
863
+ className: t,
864
+ key: i,
865
+ discrete: p,
866
+ ref: s,
867
+ timestamp: e,
868
+ fullWidth: !!S || !!E
869
+ }, p && $ ? /* @__PURE__ */ n.createElement(Y, {
870
+ html: $
871
+ }) : /* @__PURE__ */ n.createElement(D, {
872
+ isSystem: !0,
873
+ content: m
874
+ }));
875
+ })), f = () => /* @__PURE__ */ n.createElement(he, {
876
+ sender: r,
877
+ timestamp: e,
878
+ className: t
879
+ }, /* @__PURE__ */ n.createElement(P, null, l.map((m, i) => /* @__PURE__ */ n.createElement(U, {
880
+ left: !0,
881
+ key: m.key,
882
+ ref: s
883
+ }, /* @__PURE__ */ n.createElement(D, {
884
+ content: m,
885
+ stacked: u(i)
886
+ }))))), v = () => /* @__PURE__ */ n.createElement(et, {
887
+ timestamp: e,
888
+ className: t
889
+ }, /* @__PURE__ */ n.createElement(P, null, l.map((m, i) => /* @__PURE__ */ n.createElement(U, {
890
+ right: !0,
891
+ key: m.key,
892
+ ref: s
893
+ }, /* @__PURE__ */ n.createElement(D, {
894
+ isUser: !0,
895
+ content: m,
896
+ stacked: u(i)
897
+ })))));
898
+ switch (o) {
899
+ case F.System:
900
+ return c();
901
+ case F.Agent:
902
+ return f();
903
+ case F.User:
904
+ return v();
905
+ default:
906
+ return null;
907
+ }
908
+ }
909
+ ), D = ({ content: t, isUser: e, isSystem: r, stacked: o }) => {
910
+ const l = V(), { title: s, body: u, actions: c, form: f, items: v } = t;
911
+ return v ? /* @__PURE__ */ n.createElement(_, {
912
+ user: !!e,
913
+ stacked: o
914
+ }, /* @__PURE__ */ n.createElement($t, {
915
+ items: v,
916
+ dispatch: l
917
+ })) : /* @__PURE__ */ n.createElement(_, {
918
+ padded: !r,
919
+ user: !!e,
920
+ stacked: o,
921
+ fullWidth: !!f || !!c
922
+ }, s && /* @__PURE__ */ n.createElement(B, null, /* @__PURE__ */ n.createElement(We, {
923
+ variant: "h2"
924
+ }, s)), u && /* @__PURE__ */ n.createElement(B, null, /* @__PURE__ */ n.createElement(Ve, {
925
+ html: u
926
+ })), f && /* @__PURE__ */ n.createElement(B, null, /* @__PURE__ */ n.createElement(_e, x(h({}, f), {
927
+ onChange: (i, $) => {
928
+ l("form", {
929
+ data: $,
930
+ formKey: f.schema.id,
931
+ actionKey: i
932
+ });
933
+ }
934
+ }))), c && /* @__PURE__ */ n.createElement(B, null, /* @__PURE__ */ n.createElement(qe, {
935
+ items: Object.keys(c).map((i) => ({ label: c[i], actionKey: i })),
936
+ renderItem: (i) => /* @__PURE__ */ n.createElement("li", {
937
+ key: i.actionKey
938
+ }, /* @__PURE__ */ n.createElement(Ye, {
939
+ onClick: () => {
940
+ l("action", i.actionKey);
941
+ }
942
+ }, i.label))
943
+ })));
944
+ }, fe = () => {
945
+ const t = me((c) => {
946
+ c && setTimeout(() => {
947
+ c.scrollIntoView({
948
+ block: "start",
949
+ behavior: "smooth"
950
+ });
951
+ }, 250);
952
+ }, []), [e, r] = ae(!0), {
953
+ messages: o,
954
+ loading: l,
955
+ typingActors: s = []
956
+ } = M(), u = () => s && s.length ? s.map((c, f) => /* @__PURE__ */ n.createElement(W, {
957
+ id: `typing_${c.name}`,
958
+ key: `typing_${c.name}`
959
+ }, /* @__PURE__ */ n.createElement(he, {
960
+ timestamp: Date.now(),
961
+ sender: c
962
+ }, /* @__PURE__ */ n.createElement(ne, {
963
+ boxed: !0,
964
+ ref: t
965
+ })))) : null;
966
+ return /* @__PURE__ */ n.createElement(n.Fragment, null, /* @__PURE__ */ n.createElement(xt, {
967
+ tabIndex: 0,
968
+ scrollableCss: e,
969
+ ref: r
970
+ }, o && o.length ? o.map((c, f) => {
971
+ const { type: v, timestamp: m, sender: i, content: $ } = c;
972
+ return /* @__PURE__ */ n.createElement(W, {
973
+ className: "humany-conversation-entry",
974
+ tabIndex: -1,
975
+ key: `${v}_${i == null ? void 0 : i.name}_${m}_${$[0].key}`
976
+ }, /* @__PURE__ */ n.createElement(Et, x(h({}, c), {
977
+ ref: t
978
+ })));
979
+ }) : null, u(), l && /* @__PURE__ */ n.createElement(W, null, /* @__PURE__ */ n.createElement(ne, {
980
+ ref: t
981
+ }))), /* @__PURE__ */ n.createElement(Re, null));
982
+ }, xt = a.div`
983
+ display: flex;
984
+ flex-direction: column;
985
+ align-items: stretch;
986
+ flex: 0 1 100%;
987
+ padding: 0 ${(t) => {
988
+ var e;
989
+ return (e = t.theme.sizes) == null ? void 0 : e.medium;
990
+ }};
991
+ ${(t) => !!t.scrollableCss && t.scrollableCss};
992
+ &:focus-visible {
993
+ ${b};
994
+ }
995
+ `, W = a.div`
996
+ margin: 0;
997
+ margin-bottom: ${(t) => {
998
+ var e;
999
+ return (e = t.theme.sizes) == null ? void 0 : e.medium;
1000
+ }};
1001
+
1002
+ &:first-of-type {
1003
+ margin-top: ${(t) => {
1004
+ var e;
1005
+ return (e = t.theme.sizes) == null ? void 0 : e.medium;
1006
+ }};
1007
+ }
1008
+
1009
+ &:last-of-type {
1010
+ padding-bottom: ${(t) => {
1011
+ var e;
1012
+ return (e = t.theme.sizes) == null ? void 0 : e.medium;
1013
+ }};
1014
+ }
1015
+
1016
+ & span,
1017
+ p,
1018
+ a,
1019
+ div {
1020
+ font-weight: 300;
1021
+ }
1022
+
1023
+ & b,
1024
+ h1 {
1025
+ font-weight: normal;
1026
+ }
1027
+
1028
+ ${se(
1029
+ "h1",
1030
+ g`
1031
+ font-weight: normal;
1032
+ `
1033
+ )}
1034
+ `, wt = ({ dispatch: t }) => {
1035
+ const e = Te(null);
1036
+ return ce(() => {
1037
+ e.current && e.current.parentNode && t("overlay-mounted", e.current);
1038
+ }, [e]), /* @__PURE__ */ n.createElement(ie, {
1039
+ portalId: "humany-conversation-overlay-portal",
1040
+ className: "humany-conversation-overlay-outlet",
1041
+ ref: e
1042
+ });
1043
+ }, kt = ({
1044
+ dispatch: t,
1045
+ header: e,
1046
+ buttonLabel: r
1047
+ }) => /* @__PURE__ */ n.createElement(Ct, {
1048
+ portalId: "humany-conversation-portal",
1049
+ className: "humany-conversation-outlet"
1050
+ }, /* @__PURE__ */ n.createElement(St, {
1051
+ className: "humany-conversation-outlet-head"
1052
+ }, /* @__PURE__ */ n.createElement(Lt, {
1053
+ className: "humany-conversation-outlet-head-button",
1054
+ "aria-label": r,
1055
+ title: r,
1056
+ onClick: () => t("hide-overlay-conversation")
1057
+ }, /* @__PURE__ */ n.createElement(w, {
1058
+ symbol: {
1059
+ type: "Svg",
1060
+ content: "caret-down"
1061
+ },
1062
+ size: 20
1063
+ })), e && /* @__PURE__ */ n.createElement(zt, {
1064
+ className: "humany-conversation-outlet-header",
1065
+ variant: "h1"
1066
+ }, e)), /* @__PURE__ */ n.createElement(fe, null)), Ct = a(ie)`
1067
+ z-index: 11;
1068
+ top: auto;
1069
+ height: 65%;
1070
+ background-color: #ffffff;
1071
+ display: flex;
1072
+ flex-direction: column;
1073
+ border-top-right-radius: ${(t) => {
1074
+ var e;
1075
+ return (e = t.theme.sizes) == null ? void 0 : e.large;
1076
+ }};
1077
+ border-top-left-radius: ${(t) => {
1078
+ var e;
1079
+ return (e = t.theme.sizes) == null ? void 0 : e.large;
1080
+ }};
1081
+ `, St = a.div`
1082
+ display: flex;
1083
+ flex-direction: column;
1084
+ justify-content: center;
1085
+ align-items: center;
1086
+ gap: ${(t) => {
1087
+ var e;
1088
+ return (e = t.theme.sizes) == null ? void 0 : e.normal;
1089
+ }};
1090
+ padding: ${(t) => {
1091
+ var e;
1092
+ return (e = t.theme.sizes) == null ? void 0 : e.normal;
1093
+ }};
1094
+ ${(t) => t.theme.border && `border-bottom: ${t.theme.border};`}
1095
+ `, zt = a(q)`
1096
+ font-size: ${(t) => {
1097
+ var e;
1098
+ return (e = t.theme.fonts) == null ? void 0 : e.medium;
1099
+ }};
1100
+ color: ${(t) => {
1101
+ var e;
1102
+ return (e = t.theme.colors) == null ? void 0 : e.text;
1103
+ }};
1104
+ margin: 0;
1105
+ `, Lt = a(L)`
1106
+ display: flex;
1107
+ align-items: center;
1108
+ justify-content: center;
1109
+ padding: ${(t) => {
1110
+ var e;
1111
+ return (e = t.theme.sizes) == null ? void 0 : e.small;
1112
+ }} ${(t) => {
1113
+ var e;
1114
+ return (e = t.theme.sizes) == null ? void 0 : e.medium;
1115
+ }};
1116
+ ${(t) => t.theme.borderRadius && `border-radius: ${t.theme.borderRadius};`}
1117
+
1118
+ &:focus-visible {
1119
+ ${b};
1120
+ }
1121
+
1122
+ svg line {
1123
+ stroke: ${(t) => {
1124
+ var e;
1125
+ return (e = t.theme.colors) == null ? void 0 : e.text;
1126
+ }};
1127
+ }
1128
+ `, Ft = (r) => {
1129
+ var o = r, { className: t } = o, e = j(o, ["className"]);
1130
+ const { overlay: l, overlayConversationHeader: s, overlayConversationCloseLabel: u } = M(), c = V();
1131
+ return /* @__PURE__ */ n.createElement(n.Fragment, null, /* @__PURE__ */ n.createElement(Mt, x(h({}, e), {
1132
+ className: H(t, "humany-conversation-component")
1133
+ }), /* @__PURE__ */ n.createElement(fe, null)), l && /* @__PURE__ */ n.createElement(n.Fragment, null, /* @__PURE__ */ n.createElement(wt, {
1134
+ dispatch: c
1135
+ }), l.conversation && /* @__PURE__ */ n.createElement(kt, {
1136
+ dispatch: c,
1137
+ header: s,
1138
+ buttonLabel: u
1139
+ })));
1140
+ }, Mt = a.div`
1141
+ position: absolute;
1142
+ right: 0;
1143
+ left: 0;
1144
+ bottom: 0;
1145
+ top: 0;
1146
+ overflow: hidden;
1147
+ display: flex;
1148
+ flex-direction: column;
1149
+ `;
1150
+ export {
1151
+ Ft as default
1152
+ };
1153
+ //# sourceMappingURL=conversation.d7aad569.js.map