@xapp/chat-widget 1.29.0 → 1.31.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/dist/index.js CHANGED
@@ -2,14 +2,14 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var React = require('react');
5
+ var React$1 = require('react');
6
6
  var reactRedux = require('react-redux');
7
7
  var redux = require('redux');
8
8
  var thunk = require('redux-thunk');
9
9
 
10
10
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
11
11
 
12
- var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
12
+ var React__default$1 = /*#__PURE__*/_interopDefaultLegacy(React$1);
13
13
  var thunk__default = /*#__PURE__*/_interopDefaultLegacy(thunk);
14
14
 
15
15
  var ActionButton = function (props) {
@@ -19,30 +19,14 @@ var ActionButton = function (props) {
19
19
  props.onClick(props.label);
20
20
  }
21
21
  }
22
- return (React__default["default"].createElement("button", { type: props.type, className: "action-button " + props.addClass, onClick: handleClick }, props.label));
22
+ return (React__default$1["default"].createElement("button", { type: props.type, className: "action-button ".concat(props.addClass), onClick: handleClick }, props.label));
23
23
  };
24
24
 
25
- var paramsObj = {};
26
- // todo: read only from xappScriptNode?
27
- for (var _i = 0, _a = document.scripts; _i < _a.length; _i++) {
28
- var script = _a[_i];
29
- if (!script.src) {
30
- continue;
31
- }
32
- var params = script.src.split("?");
33
- if (params.length < 2) {
34
- continue;
35
- }
36
- var searchParams = new URLSearchParams(params[1]);
37
- searchParams.forEach(function (value, key) {
38
- paramsObj[key] = value;
39
- });
40
- }
41
25
  var defaultServerUrl = process.env.SERVER_URL;
42
26
  process.env.ACCOUNT_KEY;
43
- var ChatConfigContext = React.createContext(null);
27
+ var ChatConfigContext = React$1.createContext(null);
44
28
  function useWidgetEnv() {
45
- var ctx = React.useContext(ChatConfigContext);
29
+ var ctx = React$1.useContext(ChatConfigContext);
46
30
  return ctx === null || ctx === void 0 ? void 0 : ctx.env;
47
31
  }
48
32
  function getServerConfig(env) {
@@ -58,7 +42,7 @@ function getServerConfig(env) {
58
42
  function useServerConfig(env, nonce) {
59
43
  var connection = getServerConfig(env);
60
44
  var accountKey = connection.accountKey, serverUrl = connection.serverUrl, type = connection.type;
61
- return React.useMemo(function () { return ({
45
+ return React$1.useMemo(function () { return ({
62
46
  accountKey: accountKey,
63
47
  serverUrl: serverUrl,
64
48
  type: type,
@@ -96,7 +80,7 @@ var __assign = function() {
96
80
  return __assign.apply(this, arguments);
97
81
  };
98
82
 
99
- function __awaiter(thisArg, _arguments, P, generator) {
83
+ function __awaiter$1(thisArg, _arguments, P, generator) {
100
84
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
101
85
  return new (P || (P = Promise))(function (resolve, reject) {
102
86
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -106,7 +90,7 @@ function __awaiter(thisArg, _arguments, P, generator) {
106
90
  });
107
91
  }
108
92
 
109
- function __generator(thisArg, body) {
93
+ function __generator$1(thisArg, body) {
110
94
  var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
111
95
  return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
112
96
  function verb(n) { return function (v) { return step([n, v]); }; }
@@ -134,7 +118,7 @@ function __generator(thisArg, body) {
134
118
  }
135
119
  }
136
120
 
137
- function __spreadArray(to, from, pack) {
121
+ function __spreadArray$1(to, from, pack) {
138
122
  if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
139
123
  if (ar || !(i in from)) {
140
124
  if (!ar) ar = Array.prototype.slice.call(from, 0, i);
@@ -1453,14 +1437,14 @@ function set(key, value) {
1453
1437
  }
1454
1438
 
1455
1439
  function useIsMounted() {
1456
- var ref = React.useRef(false);
1457
- React.useEffect(function () {
1440
+ var ref = React$1.useRef(false);
1441
+ React$1.useEffect(function () {
1458
1442
  ref.current = true;
1459
1443
  return function () {
1460
1444
  ref.current = false;
1461
1445
  };
1462
1446
  }, []);
1463
- return React.useCallback(function () { return ref.current; }, []);
1447
+ return React$1.useCallback(function () { return ref.current; }, []);
1464
1448
  }
1465
1449
 
1466
1450
  var EMAIL_REGEX = "^\\w+([\\.-]?\\w+)*@\\w+([\\.-]?\\w+)*(\\.\\w{2,3})+$";
@@ -1474,14 +1458,14 @@ function log() {
1474
1458
  args[_i] = arguments[_i];
1475
1459
  }
1476
1460
  // TODO: only log in debug
1477
- console.log.apply(console, __spreadArray([getCurrentDateString()], args, false));
1461
+ console.log.apply(console, __spreadArray$1([getCurrentDateString()], args, false));
1478
1462
  }
1479
1463
  function err() {
1480
1464
  var args = [];
1481
1465
  for (var _i = 0; _i < arguments.length; _i++) {
1482
1466
  args[_i] = arguments[_i];
1483
1467
  }
1484
- console.error.apply(console, __spreadArray([getCurrentDateString()], args, false));
1468
+ console.error.apply(console, __spreadArray$1([getCurrentDateString()], args, false));
1485
1469
  }
1486
1470
  var logOnce = function (key) {
1487
1471
  var args = [];
@@ -1496,8 +1480,8 @@ var logOnce = function (key) {
1496
1480
  };
1497
1481
 
1498
1482
  function getVisitorSvg() {
1499
- return (React__default["default"].createElement("svg", { width: "16", height: "19", viewBox: "0 0 16 19" },
1500
- React__default["default"].createElement("path", { d: "M11.5 5c0-1.933-1.567-3.5-3.5-3.5S4.5 3.067 4.5 5 6.067 8.5 8 8.5s3.5-1.567 3.5-3.5zM3 5c0-2.76 2.24-5 5-5s5 2.24 5 5-2.24 5-5 5-5-2.24-5-5zM1.955 17.294c.21-.642.504-1.285.898-1.88C3.963 13.74 5.615 12.75 8 12.75c2.385 0 4.038.99 5.147 2.664.394.595.69 1.238.898 1.88.124.382.19.672.214.822.063.41.447.69.856.625.41-.063.69-.447.625-.856-.034-.225-.118-.59-.27-1.053-.247-.763-.598-1.527-1.073-2.244C13.024 12.51 10.917 11.25 8 11.25c-2.916 0-5.024 1.26-6.397 3.336-.475.717-.826 1.48-1.074 2.245-.152.463-.236.83-.27 1.054-.065.41.215.793.624.857.41.065.793-.215.857-.624.025-.15.09-.44.215-.822z", fill: "#FFF", fillRule: "evenodd" })));
1483
+ return (React__default$1["default"].createElement("svg", { width: "16", height: "19", viewBox: "0 0 16 19" },
1484
+ React__default$1["default"].createElement("path", { d: "M11.5 5c0-1.933-1.567-3.5-3.5-3.5S4.5 3.067 4.5 5 6.067 8.5 8 8.5s3.5-1.567 3.5-3.5zM3 5c0-2.76 2.24-5 5-5s5 2.24 5 5-2.24 5-5 5-5-2.24-5-5zM1.955 17.294c.21-.642.504-1.285.898-1.88C3.963 13.74 5.615 12.75 8 12.75c2.385 0 4.038.99 5.147 2.664.394.595.69 1.238.898 1.88.124.382.19.672.214.822.063.41.447.69.856.625.41-.063.69-.447.625-.856-.034-.225-.118-.59-.27-1.053-.247-.763-.598-1.527-1.073-2.244C13.024 12.51 10.917 11.25 8 11.25c-2.916 0-5.024 1.26-6.397 3.336-.475.717-.826 1.48-1.074 2.245-.152.463-.236.83-.27 1.054-.065.41.215.793.624.857.41.065.793-.215.857-.624.025-.15.09-.44.215-.822z", fill: "#FFF", fillRule: "evenodd" })));
1501
1485
  }
1502
1486
  var Avatar = function (props) {
1503
1487
  var _a, _b;
@@ -1506,25 +1490,25 @@ var Avatar = function (props) {
1506
1490
  var entity = props.entity;
1507
1491
  var avatarPath = entity === null || entity === void 0 ? void 0 : entity.avatarPath;
1508
1492
  var agentAva = entity && isAgent(entity.nick);
1509
- var ctx = React.useContext(ChatConfigContext);
1493
+ var ctx = React$1.useContext(ChatConfigContext);
1510
1494
  if (agentAva) {
1511
1495
  if (avatarPath) {
1512
1496
  // absolute or relative url (chat server may send relative, if it hosts the file)
1513
1497
  if (avatarPath.startsWith("http")) {
1514
- style.backgroundImage = "url('" + avatarPath + "')";
1498
+ style.backgroundImage = "url('".concat(avatarPath, "')");
1515
1499
  }
1516
1500
  else if (ctx === null || ctx === void 0 ? void 0 : ctx.assetUrl) {
1517
- style.backgroundImage = "url('" + (ctx === null || ctx === void 0 ? void 0 : ctx.assetUrl) + "/" + avatarPath + "')";
1501
+ style.backgroundImage = "url('".concat(ctx === null || ctx === void 0 ? void 0 : ctx.assetUrl, "/").concat(avatarPath, "')");
1518
1502
  }
1519
1503
  style.backgroundColor = "none";
1520
1504
  }
1521
- (_a = style.backgroundImage) !== null && _a !== void 0 ? _a : (style.backgroundImage = "url('" + ((_b = ctx === null || ctx === void 0 ? void 0 : ctx.env) === null || _b === void 0 ? void 0 : _b.avatarUrl) + "')");
1505
+ (_a = style.backgroundImage) !== null && _a !== void 0 ? _a : (style.backgroundImage = "url('".concat((_b = ctx === null || ctx === void 0 ? void 0 : ctx.env) === null || _b === void 0 ? void 0 : _b.avatarUrl, "')"));
1522
1506
  }
1523
1507
  else {
1524
1508
  child = getVisitorSvg();
1525
1509
  }
1526
1510
  var hasImage = !!style.backgroundImage || !!child;
1527
- return (React__default["default"].createElement("div", { className: "avatar " + (agentAva ? "avatar--agent" : "avatar--visitor") + " " + (!hasImage ? "avatar--empty" : ""), style: style, title: entity ? entity.display_name : "Agent" }, child));
1511
+ return (React__default$1["default"].createElement("div", { className: "avatar ".concat(agentAva ? "avatar--agent" : "avatar--visitor", " ").concat(!hasImage ? "avatar--empty" : ""), style: style, title: entity ? entity.display_name : "Agent" }, child));
1528
1512
  };
1529
1513
 
1530
1514
  /**
@@ -1545,16 +1529,16 @@ function getItemUrl(item) {
1545
1529
 
1546
1530
  var OptionalLink = function (props) {
1547
1531
  var url = props.url, className = props.className, onOpen = props.onOpen;
1548
- var handleOpenUrl = React.useCallback(function () {
1532
+ var handleOpenUrl = React$1.useCallback(function () {
1549
1533
  if (onOpen) {
1550
1534
  onOpen(url);
1551
1535
  }
1552
1536
  }, [url, onOpen]);
1553
1537
  if (url) {
1554
- return (React__default["default"].createElement("div", { onClick: handleOpenUrl, className: className }, props.children));
1538
+ return (React__default$1["default"].createElement("div", { onClick: handleOpenUrl, className: className }, props.children));
1555
1539
  }
1556
1540
  else {
1557
- return (React__default["default"].createElement("div", { onClick: props.onClick, className: className }, props.children));
1541
+ return (React__default$1["default"].createElement("div", { onClick: props.onClick, className: className }, props.children));
1558
1542
  }
1559
1543
  };
1560
1544
 
@@ -1562,7 +1546,7 @@ var ActionItem = function (props) {
1562
1546
  var _a;
1563
1547
  var item = props.item, onButtonClick = props.onButtonClick, onExecute = props.onExecute;
1564
1548
  var singleButton = ((_a = item.buttons) === null || _a === void 0 ? void 0 : _a.length) === 1;
1565
- var handleClick = React.useCallback(function () {
1549
+ var handleClick = React$1.useCallback(function () {
1566
1550
  var _a;
1567
1551
  var btns = (_a = item.buttons) === null || _a === void 0 ? void 0 : _a.length;
1568
1552
  // If there is only one button, it takes precedent
@@ -1574,18 +1558,18 @@ var ActionItem = function (props) {
1574
1558
  onExecute(item.title, item.token);
1575
1559
  }
1576
1560
  }, [item, onExecute, onButtonClick]);
1577
- var className = "xappw-chat-action-item " + (singleButton ? "xappw-chat-action-item--action" : "") + " " + props.className;
1578
- return (React__default["default"].createElement(OptionalLink, { className: className, url: getItemUrl(item), onClick: handleClick, onOpen: props.onOpenUrl }, props.children));
1561
+ var className = "xappw-chat-action-item ".concat(singleButton ? "xappw-chat-action-item--action" : "", " ").concat(props.className);
1562
+ return (React__default$1["default"].createElement(OptionalLink, { className: className, url: getItemUrl(item), onClick: handleClick, onOpen: props.onOpenUrl }, props.children));
1579
1563
  };
1580
1564
 
1581
1565
  var ChatImage = function (props) {
1582
1566
  var cleanUrl = props.imageUrl.replace(/'/g, "%27");
1583
- var content = React__default["default"].createElement("div", { className: "chat-card-img__content", style: { backgroundImage: "url(" + cleanUrl + ")" } });
1567
+ var content = React__default$1["default"].createElement("div", { className: "chat-card-img__content", style: { backgroundImage: "url(".concat(cleanUrl, ")") } });
1584
1568
  if (!props.imageActionUrl) {
1585
- return (React__default["default"].createElement("div", { className: "chat-card-img" }, content));
1569
+ return (React__default$1["default"].createElement("div", { className: "chat-card-img" }, content));
1586
1570
  }
1587
1571
  else {
1588
- return (React__default["default"].createElement("a", { href: props.imageActionUrl, target: "_blank", rel: "noopener noreferrer", className: "chat-card-img" }, content));
1572
+ return (React__default$1["default"].createElement("a", { href: props.imageActionUrl, target: "_blank", rel: "noopener noreferrer", className: "chat-card-img" }, content));
1589
1573
  }
1590
1574
  };
1591
1575
 
@@ -1596,63 +1580,63 @@ var ActionItemImage = function (props) {
1596
1580
  var itemUrl = getItemUrl(item);
1597
1581
  if (item.imageUrl) {
1598
1582
  var imageActionUrl = !singleButton ? item.imageActionUrl : null;
1599
- return (React__default["default"].createElement("div", { className: props.className },
1600
- React__default["default"].createElement(ChatImage, { imageUrl: item.imageUrl, imageActionUrl: !itemUrl && imageActionUrl })));
1583
+ return (React__default$1["default"].createElement("div", { className: props.className },
1584
+ React__default$1["default"].createElement(ChatImage, { imageUrl: item.imageUrl, imageActionUrl: !itemUrl && imageActionUrl })));
1601
1585
  }
1602
1586
  else if (props.emptyImageVisible) {
1603
- return (React__default["default"].createElement("div", { className: props.className }));
1587
+ return (React__default$1["default"].createElement("div", { className: props.className }));
1604
1588
  }
1605
- return React__default["default"].createElement(React__default["default"].Fragment, null);
1589
+ return React__default$1["default"].createElement(React__default$1["default"].Fragment, null);
1606
1590
  };
1607
1591
 
1608
1592
  var ChatActionButtonInner = function (props) {
1609
1593
  var button = props.button, onClick = props.onClick;
1610
- var handleButton = React.useCallback(function () {
1594
+ var handleButton = React$1.useCallback(function () {
1611
1595
  onClick(button);
1612
1596
  }, [button, onClick]);
1613
- return (React__default["default"].createElement(ActionButton, { onClick: handleButton, addClass: "button-card", label: button.label }));
1597
+ return (React__default$1["default"].createElement(ActionButton, { onClick: handleButton, addClass: "button-card", label: button.label }));
1614
1598
  };
1615
- var ChatActionButton = React__default["default"].memo(ChatActionButtonInner);
1599
+ var ChatActionButton = React__default$1["default"].memo(ChatActionButtonInner);
1616
1600
 
1617
1601
  var ChatActionButtonsInner = function (props) {
1618
- return (React__default["default"].createElement("div", { className: "buttons-container " + (props.className || "") }, props.buttons.map(function (button, i) {
1619
- return React__default["default"].createElement(ChatActionButton, { button: button, onClick: props.onClick, key: i });
1602
+ return (React__default$1["default"].createElement("div", { className: "buttons-container " + (props.className || "") }, props.buttons.map(function (button, i) {
1603
+ return React__default$1["default"].createElement(ChatActionButton, { button: button, onClick: props.onClick, key: i });
1620
1604
  })));
1621
1605
  };
1622
- var ChatActionButtons = React__default["default"].memo(ChatActionButtonsInner);
1606
+ var ChatActionButtons = React__default$1["default"].memo(ChatActionButtonsInner);
1623
1607
 
1624
1608
  var CarouselItem = function (props) {
1625
1609
  var _a;
1626
1610
  var item = props.item;
1627
- return (React__default["default"].createElement(ActionItem, { className: "chat-list-item-container", item: item, onButtonClick: props.onButtonClick, onExecute: props.onExecute, onOpenUrl: props.onOpenUrl },
1628
- React__default["default"].createElement("div", { className: "chat-list-item" },
1629
- React__default["default"].createElement(ActionItemImage, { item: item, className: "chat-list-item__img", emptyImageVisible: props.emptyImageVisible }),
1630
- item.title && React__default["default"].createElement("div", { className: "chat-list-item__title" },
1631
- React__default["default"].createElement("span", null, item.title)),
1632
- item.subTitle && React__default["default"].createElement("div", { className: "chat-list-item__subtitle" },
1633
- React__default["default"].createElement("span", null, item.subTitle)),
1634
- !!((_a = item.buttons) === null || _a === void 0 ? void 0 : _a.length) && React__default["default"].createElement(ChatActionButtons, { className: "chat-list-item__actions", buttons: item.buttons, onClick: props.onButtonClick }))));
1611
+ return (React__default$1["default"].createElement(ActionItem, { className: "chat-list-item-container", item: item, onButtonClick: props.onButtonClick, onExecute: props.onExecute, onOpenUrl: props.onOpenUrl },
1612
+ React__default$1["default"].createElement("div", { className: "chat-list-item" },
1613
+ React__default$1["default"].createElement(ActionItemImage, { item: item, className: "chat-list-item__img", emptyImageVisible: props.emptyImageVisible }),
1614
+ item.title && React__default$1["default"].createElement("div", { className: "chat-list-item__title" },
1615
+ React__default$1["default"].createElement("span", null, item.title)),
1616
+ item.subTitle && React__default$1["default"].createElement("div", { className: "chat-list-item__subtitle" },
1617
+ React__default$1["default"].createElement("span", null, item.subTitle)),
1618
+ !!((_a = item.buttons) === null || _a === void 0 ? void 0 : _a.length) && React__default$1["default"].createElement(ChatActionButtons, { className: "chat-list-item__actions", buttons: item.buttons, onClick: props.onButtonClick }))));
1635
1619
  };
1636
1620
 
1637
1621
  function getLeftArrowSvg() {
1638
- return (React__default["default"].createElement("svg", { viewBox: "-5 -18 10 36" },
1639
- React__default["default"].createElement("path", { d: "M 2.5 -15 L -2.5 0 L 2.5 15", stroke: "currentColor", strokeLinecap: "square", strokeWidth: "4px", fill: "none" })));
1622
+ return (React__default$1["default"].createElement("svg", { viewBox: "-5 -18 10 36" },
1623
+ React__default$1["default"].createElement("path", { d: "M 2.5 -15 L -2.5 0 L 2.5 15", stroke: "currentColor", strokeLinecap: "square", strokeWidth: "4px", fill: "none" })));
1640
1624
  }
1641
1625
  var ChevronLeft = function (props) {
1642
- return (React__default["default"].createElement("div", { onClick: props.onClick, className: "chevron" }, getLeftArrowSvg()));
1626
+ return (React__default$1["default"].createElement("div", { onClick: props.onClick, className: "chevron" }, getLeftArrowSvg()));
1643
1627
  };
1644
1628
 
1645
1629
  function getRightArrowSvg() {
1646
- return (React__default["default"].createElement("svg", { viewBox: "-5 -18 10 36" },
1647
- React__default["default"].createElement("path", { d: "M -2.5 -15 L 2.5 0 L -2.5 15", stroke: "currentColor", strokeLinecap: "square", strokeWidth: "4px", fill: "none" })));
1630
+ return (React__default$1["default"].createElement("svg", { viewBox: "-5 -18 10 36" },
1631
+ React__default$1["default"].createElement("path", { d: "M -2.5 -15 L 2.5 0 L -2.5 15", stroke: "currentColor", strokeLinecap: "square", strokeWidth: "4px", fill: "none" })));
1648
1632
  }
1649
1633
  var ChevronRight = function (props) {
1650
- return (React__default["default"].createElement("div", { onClick: props.onClick, className: "chevron" }, getRightArrowSvg()));
1634
+ return (React__default$1["default"].createElement("div", { onClick: props.onClick, className: "chevron" }, getRightArrowSvg()));
1651
1635
  };
1652
1636
 
1653
1637
  var Carousel = function (props) {
1654
- var listRef = React.useRef(null);
1655
- var _a = React.useState(0), visibleIndex = _a[0], setSetVisibleIndex = _a[1];
1638
+ var listRef = React$1.useRef(null);
1639
+ var _a = React$1.useState(0), visibleIndex = _a[0], setSetVisibleIndex = _a[1];
1656
1640
  function scrollMe(direction) {
1657
1641
  var _a, _b;
1658
1642
  var scrollArea = listRef.current;
@@ -1685,21 +1669,21 @@ var Carousel = function (props) {
1685
1669
  }
1686
1670
  var hasImage = props.list.items.some(function (item) { return item.imageUrl; });
1687
1671
  var listItems = props.list.items.map(function (item, itemIndex) {
1688
- return (React__default["default"].createElement("div", { className: "xappw-carousel-items__item", key: "item-key-" + itemIndex },
1689
- React__default["default"].createElement(CarouselItem, { item: item, emptyImageVisible: hasImage, onExecute: props.onExecute, onButtonClick: props.onButtonClick, onOpenUrl: props.onOpenUrl })));
1672
+ return (React__default$1["default"].createElement("div", { className: "xappw-carousel-items__item", key: "item-key-".concat(itemIndex) },
1673
+ React__default$1["default"].createElement(CarouselItem, { item: item, emptyImageVisible: hasImage, onExecute: props.onExecute, onButtonClick: props.onButtonClick, onOpenUrl: props.onOpenUrl })));
1690
1674
  });
1691
- return (React__default["default"].createElement("div", { className: "xappw-carousel" },
1692
- React__default["default"].createElement("div", { className: "xappw-carousel__prev" },
1693
- React__default["default"].createElement(ChevronLeft, { onClick: function () { return scrollMe(-1); } })),
1694
- React__default["default"].createElement("div", { ref: listRef, className: "xappw-carousel-items" }, listItems),
1695
- React__default["default"].createElement("div", { className: "xappw-carousel__next" },
1696
- React__default["default"].createElement(ChevronRight, { onClick: function () { return scrollMe(1); } }))));
1675
+ return (React__default$1["default"].createElement("div", { className: "xappw-carousel" },
1676
+ React__default$1["default"].createElement("div", { className: "xappw-carousel__prev" },
1677
+ React__default$1["default"].createElement(ChevronLeft, { onClick: function () { return scrollMe(-1); } })),
1678
+ React__default$1["default"].createElement("div", { ref: listRef, className: "xappw-carousel-items" }, listItems),
1679
+ React__default$1["default"].createElement("div", { className: "xappw-carousel__next" },
1680
+ React__default$1["default"].createElement(ChevronRight, { onClick: function () { return scrollMe(1); } }))));
1697
1681
  };
1698
1682
 
1699
1683
  function useDimensions() {
1700
- var ref = React.useRef();
1701
- var _a = React.useState(), dimensions = _a[0], setDimensions = _a[1];
1702
- React.useLayoutEffect(function () {
1684
+ var ref = React$1.useRef(null);
1685
+ var _a = React$1.useState(), dimensions = _a[0], setDimensions = _a[1];
1686
+ React$1.useLayoutEffect(function () {
1703
1687
  var _a, _b;
1704
1688
  setDimensions((_b = (_a = ref.current) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect()) === null || _b === void 0 ? void 0 : _b.toJSON());
1705
1689
  }, []);
@@ -1786,36 +1770,36 @@ function getTailSvgPath$1(props, viewport) {
1786
1770
  start: far,
1787
1771
  direction: rightDirection
1788
1772
  });
1789
- return "m " + far.x + " " + far.y + " L " + left.x + " " + left.y + " L " + right.x + " " + right.y + " z";
1773
+ return "m ".concat(far.x, " ").concat(far.y, " L ").concat(left.x, " ").concat(left.y, " L ").concat(right.x, " ").concat(right.y, " z");
1790
1774
  }
1791
1775
  var CtaBubbleTail = function (props) {
1792
1776
  var _a, _b;
1793
1777
  var _c = useDimensions(), ref = _c[0], rect = _c[1];
1794
1778
  var viewPort = { x: (_a = rect === null || rect === void 0 ? void 0 : rect.width) !== null && _a !== void 0 ? _a : 0, y: (_b = rect === null || rect === void 0 ? void 0 : rect.height) !== null && _b !== void 0 ? _b : 0 };
1795
- return React__default["default"].createElement("div", { ref: ref, className: "cta-bubble__tail" },
1796
- React__default["default"].createElement("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 " + viewPort.x + " " + viewPort.y },
1797
- React__default["default"].createElement("path", { d: getTailSvgPath$1(props, viewPort), fill: "currentColor" })));
1779
+ return React__default$1["default"].createElement("div", { ref: ref, className: "cta-bubble__tail" },
1780
+ React__default$1["default"].createElement("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 ".concat(viewPort.x, " ").concat(viewPort.y) },
1781
+ React__default$1["default"].createElement("path", { d: getTailSvgPath$1(props, viewPort), fill: "currentColor" })));
1798
1782
  };
1799
1783
  var CtaBubble = function (props) {
1800
1784
  var _a, _b;
1801
1785
  var _c = useDimensions(), ref = _c[0], rect = _c[1];
1802
- return (React__default["default"].createElement("div", { ref: ref, className: "cta-bubble", onClick: props.onClick },
1803
- React__default["default"].createElement(CtaBubbleTail, { width: (_a = rect === null || rect === void 0 ? void 0 : rect.width) !== null && _a !== void 0 ? _a : 0, height: (_b = rect === null || rect === void 0 ? void 0 : rect.height) !== null && _b !== void 0 ? _b : 0, direction: 60, angle: 45, length: 16 }),
1804
- React__default["default"].createElement("div", { className: "cta-bubble__content" }, props.children)));
1786
+ return (React__default$1["default"].createElement("div", { ref: ref, className: "cta-bubble", onClick: props.onClick },
1787
+ React__default$1["default"].createElement(CtaBubbleTail, { width: (_a = rect === null || rect === void 0 ? void 0 : rect.width) !== null && _a !== void 0 ? _a : 0, height: (_b = rect === null || rect === void 0 ? void 0 : rect.height) !== null && _b !== void 0 ? _b : 0, direction: 60, angle: 45, length: 16 }),
1788
+ React__default$1["default"].createElement("div", { className: "cta-bubble__content" }, props.children)));
1805
1789
  };
1806
1790
 
1807
1791
  var CtaBubbleContainer = function (props) {
1808
- var startTime = React.useMemo(function () {
1792
+ var startTime = React$1.useMemo(function () {
1809
1793
  if (props.visible) {
1810
1794
  return new Date().valueOf();
1811
1795
  }
1812
1796
  return undefined;
1813
1797
  }, [props.visible]);
1814
- var _a = React.useState(new Date().valueOf()), currentTime = _a[0], setCurrentTime = _a[1];
1798
+ var _a = React$1.useState(new Date().valueOf()), currentTime = _a[0], setCurrentTime = _a[1];
1815
1799
  var timeout = props.timeout;
1816
1800
  var duration = currentTime - startTime;
1817
1801
  var pastDue = startTime && props.timeout && (duration >= props.timeout);
1818
- React.useEffect(function () {
1802
+ React$1.useEffect(function () {
1819
1803
  if (!startTime) {
1820
1804
  return undefined;
1821
1805
  }
@@ -1832,16 +1816,16 @@ var CtaBubbleContainer = function (props) {
1832
1816
  clearTimeout(handle);
1833
1817
  };
1834
1818
  }, [startTime, timeout]);
1835
- return (React__default["default"].createElement(React__default["default"].Fragment, null, props.visible && !pastDue && React__default["default"].createElement(CtaBubble, { onClick: props.onClick }, props.children)));
1819
+ return (React__default$1["default"].createElement(React__default$1["default"].Fragment, null, props.visible && !pastDue && React__default$1["default"].createElement(CtaBubble, { onClick: props.onClick }, props.children)));
1836
1820
  };
1837
1821
 
1838
1822
  var ChatButton = function (props) {
1839
- return (React__default["default"].createElement("div", { className: "chat-button " + props.addClass },
1840
- React__default["default"].createElement("div", { className: "chat-button__btn", onClick: props.onClick },
1841
- React__default["default"].createElement("svg", { width: "22", height: "22", viewBox: "0 0 22 22" },
1842
- React__default["default"].createElement("path", { d: "M13 22l-4-6H2c-1.11-.043-2-.935-2-2V2C0 .89.89 0 2 0h18c1.11 0 2 .892 2 2v12c0 1.067-.89 1.957-2 2h-3l-4 6zm3-8h4c-.005.3-.01-12 0-12-.01.004-18 .006-18 0 .005.006 0 12 0 12h8l3 5 3-5z", fill: "#FFF", fillRule: "evenodd" }))),
1843
- props.config && props.config.message && (React__default["default"].createElement("div", { className: "chat-button__cta" },
1844
- React__default["default"].createElement(CtaBubbleContainer, { timeout: props.config.timeout, visible: !props.visible, onClick: props.onClick }, props.config.message)))));
1823
+ return (React__default$1["default"].createElement("div", { className: "chat-button ".concat(props.addClass) },
1824
+ React__default$1["default"].createElement("div", { className: "chat-button__btn", onClick: props.onClick },
1825
+ React__default$1["default"].createElement("svg", { width: "22", height: "22", viewBox: "0 0 22 22" },
1826
+ React__default$1["default"].createElement("path", { d: "M13 22l-4-6H2c-1.11-.043-2-.935-2-2V2C0 .89.89 0 2 0h18c1.11 0 2 .892 2 2v12c0 1.067-.89 1.957-2 2h-3l-4 6zm3-8h4c-.005.3-.01-12 0-12-.01.004-18 .006-18 0 .005.006 0 12 0 12h8l3 5 3-5z", fill: "#FFF", fillRule: "evenodd" }))),
1827
+ props.config && props.config.message && (React__default$1["default"].createElement("div", { className: "chat-button__cta" },
1828
+ React__default$1["default"].createElement(CtaBubbleContainer, { timeout: props.config.timeout, visible: !props.visible, onClick: props.onClick }, props.config.message)))));
1845
1829
  };
1846
1830
 
1847
1831
  var ChatCard = function (props) {
@@ -1851,39 +1835,39 @@ var ChatCard = function (props) {
1851
1835
  var image;
1852
1836
  var content;
1853
1837
  if (card.imageUrl) {
1854
- image = React__default["default"].createElement("div", { className: "chat-card-container__img" },
1855
- React__default["default"].createElement(ChatImage, { imageUrl: card.imageUrl, imageActionUrl: card.imageActionUrl }));
1838
+ image = React__default$1["default"].createElement("div", { className: "chat-card-container__img" },
1839
+ React__default$1["default"].createElement(ChatImage, { imageUrl: card.imageUrl, imageActionUrl: card.imageActionUrl }));
1856
1840
  }
1857
1841
  if (card.title) {
1858
1842
  title =
1859
- React__default["default"].createElement("div", { className: "chat-card-title" },
1860
- React__default["default"].createElement("span", null, card.title));
1843
+ React__default$1["default"].createElement("div", { className: "chat-card-title" },
1844
+ React__default$1["default"].createElement("span", null, card.title));
1861
1845
  }
1862
1846
  if (card.content) {
1863
1847
  content =
1864
- React__default["default"].createElement("div", { className: "chat-card-sub-title" },
1865
- React__default["default"].createElement("span", null, card.content));
1848
+ React__default$1["default"].createElement("div", { className: "chat-card-sub-title" },
1849
+ React__default$1["default"].createElement("span", null, card.content));
1866
1850
  }
1867
- return (React__default["default"].createElement("div", { className: "chat-card-container" },
1851
+ return (React__default$1["default"].createElement("div", { className: "chat-card-container" },
1868
1852
  image,
1869
1853
  title,
1870
1854
  content,
1871
- !!((_a = card.buttons) === null || _a === void 0 ? void 0 : _a.length) && React__default["default"].createElement(ChatActionButtons, { buttons: card.buttons, onClick: props.onButtonClick })));
1855
+ !!((_a = card.buttons) === null || _a === void 0 ? void 0 : _a.length) && React__default$1["default"].createElement(ChatActionButtons, { buttons: card.buttons, onClick: props.onButtonClick })));
1872
1856
  };
1873
1857
 
1874
1858
  var ChatChip = function (props) {
1875
1859
  var option = props.option;
1876
1860
  var className = option.actionUrl ? "chat-chip chat-chip-link" : "chat-chip";
1877
- return (React__default["default"].createElement("div", { onClick: function () { return props === null || props === void 0 ? void 0 : props.onClick(option); }, className: className },
1878
- React__default["default"].createElement("span", null, option.label || option)));
1861
+ return (React__default$1["default"].createElement("div", { onClick: function () { return props === null || props === void 0 ? void 0 : props.onClick(option); }, className: className },
1862
+ React__default$1["default"].createElement("span", null, option.label || option)));
1879
1863
  };
1880
1864
 
1881
1865
  /**
1882
1866
  * Render option list. We just follow the order.
1883
1867
  */
1884
1868
  var ChatChips = function (props) {
1885
- return (React__default["default"].createElement("div", { className: "chat-chips" }, props.options.map(function (option, i) {
1886
- return React__default["default"].createElement(ChatChip, { key: i, onClick: props.onOptionClick, option: option });
1869
+ return (React__default$1["default"].createElement("div", { className: "chat-chips" }, props.options.map(function (option, i) {
1870
+ return React__default$1["default"].createElement(ChatChip, { key: i, onClick: props.onOptionClick, option: option });
1887
1871
  })));
1888
1872
  };
1889
1873
 
@@ -1908,7 +1892,7 @@ function resolveUrlPolicy(url, config) {
1908
1892
  }
1909
1893
 
1910
1894
  // compile time full switch-case verification
1911
- function throwBadKind(x) {
1895
+ function throwBadKind$1(x) {
1912
1896
  throw new Error("Unknown kind " + x);
1913
1897
  }
1914
1898
 
@@ -1916,7 +1900,7 @@ function execute(url, behavior) {
1916
1900
  var type = behavior.type;
1917
1901
  switch (type) {
1918
1902
  case "newWindow":
1919
- window.open(url, "callout-option", "toolbar=0,status=0,width=" + (behavior.width || 1000) + ",height=" + (behavior.height || 700));
1903
+ window.open(url, "callout-option", "toolbar=0,status=0,width=".concat(behavior.width || 1000, ",height=").concat(behavior.height || 700));
1920
1904
  break;
1921
1905
  case "newTab":
1922
1906
  window.open(url, "_blank");
@@ -1925,12 +1909,12 @@ function execute(url, behavior) {
1925
1909
  window.open(url, "_self");
1926
1910
  break;
1927
1911
  default:
1928
- throwBadKind(type);
1912
+ throwBadKind$1(type);
1929
1913
  }
1930
1914
  }
1931
1915
  function useOpenUrlCallback() {
1932
1916
  var env = useWidgetEnv();
1933
- return React.useCallback(function (url) {
1917
+ return React$1.useCallback(function (url) {
1934
1918
  var policy = (env === null || env === void 0 ? void 0 : env.urls) ? resolveUrlPolicy(url, env.urls) : defaultBehavior;
1935
1919
  execute(url, policy);
1936
1920
  }, [env]);
@@ -1958,7 +1942,7 @@ function executeAction(text, token) {
1958
1942
  });
1959
1943
  var visitor = getState().visitor;
1960
1944
  dispatch(writeMessage({
1961
- text: !token ? text : text + " (from the list)"
1945
+ text: !token ? text : "".concat(text, " (from the list)")
1962
1946
  }, visitor));
1963
1947
  }; };
1964
1948
  }
@@ -2098,31 +2082,31 @@ var LogChat = /** @class */ (function () {
2098
2082
  this.inner.init(dispatch);
2099
2083
  };
2100
2084
  LogChat.prototype.sendOfflineMsg = function (message, cb) {
2101
- log("CLIENT: sendOfflineMsg: " + JSON.stringify(message));
2085
+ log("CLIENT: sendOfflineMsg: ".concat(JSON.stringify(message)));
2102
2086
  this.inner.sendOfflineMsg(message, cb);
2103
2087
  };
2104
2088
  LogChat.prototype.sendChatMsg = function (message, cb) {
2105
- log("CLIENT: sendChatMsg: " + JSON.stringify(message));
2089
+ log("CLIENT: sendChatMsg: ".concat(JSON.stringify(message)));
2106
2090
  this.inner.sendChatMsg(message, cb);
2107
2091
  };
2108
2092
  LogChat.prototype.sendChatMsgRequest = function (message, cb) {
2109
- log("CLIENT: sendChatMsgRequest: " + JSON.stringify(message));
2093
+ log("CLIENT: sendChatMsgRequest: ".concat(JSON.stringify(message)));
2110
2094
  this.inner.sendChatMsgRequest(message, cb);
2111
2095
  };
2112
2096
  LogChat.prototype.sendTyping = function (isTyping) {
2113
- log("CLIENT: sendTyping: " + JSON.stringify(isTyping));
2097
+ log("CLIENT: sendTyping: ".concat(JSON.stringify(isTyping)));
2114
2098
  this.inner.sendTyping(isTyping);
2115
2099
  };
2116
2100
  LogChat.prototype.setVisitorInfo = function (visitorInfo, cb) {
2117
- log("CLIENT: setVisitorInfo: " + JSON.stringify(visitorInfo));
2101
+ log("CLIENT: setVisitorInfo: ".concat(JSON.stringify(visitorInfo)));
2118
2102
  this.inner.setVisitorInfo(visitorInfo, cb);
2119
2103
  };
2120
2104
  LogChat.prototype.sendChatRating = function (rating) {
2121
- log("CLIENT: sendChatRating: " + JSON.stringify(rating));
2105
+ log("CLIENT: sendChatRating: ".concat(JSON.stringify(rating)));
2122
2106
  this.inner.sendChatRating(rating);
2123
2107
  };
2124
2108
  LogChat.prototype.sendFile = function (file, cb) {
2125
- log("CLIENT: sendFile: " + JSON.stringify(file));
2109
+ log("CLIENT: sendFile: ".concat(JSON.stringify(file)));
2126
2110
  this.inner.sendFile(file, cb);
2127
2111
  };
2128
2112
  LogChat.prototype.markAsRead = function () {
@@ -2140,20 +2124,616 @@ var LogChat = /** @class */ (function () {
2140
2124
  return LogChat;
2141
2125
  }());
2142
2126
 
2127
+ var dist = {};
2128
+
2129
+ Object.defineProperty(dist, '__esModule', { value: true });
2130
+
2131
+ var React = React__default$1["default"];
2132
+
2133
+ function _interopDefaultLegacy$1 (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
2134
+
2135
+ var React__default = /*#__PURE__*/_interopDefaultLegacy$1(React);
2136
+
2137
+ var IconButton = function (props) {
2138
+ var type = props.type || "button";
2139
+ var Icon = props.icon;
2140
+ return (React__default["default"].createElement("button", { type: type, className: "xapp-search-icon-button ".concat(props.className || ""), onClick: props.onClick },
2141
+ React__default["default"].createElement("div", { className: "xapp-search-icon-button__content" },
2142
+ React__default["default"].createElement(Icon, null))));
2143
+ };
2144
+
2145
+ // compile time full switch-case verification
2146
+ function throwBadKind(x) {
2147
+ throw new Error("Unknown kind " + x);
2148
+ }
2149
+
2150
+ var RichTextBoldSpan = function (props) {
2151
+ var format = props.format, text = props.text;
2152
+ return (React__default["default"].createElement("span", { "data-rich-text-type": "bold", className: "xapp-search-rich-text-bold-span" }, text.substring(format.start, format.end)));
2153
+ };
2154
+
2155
+ var RichTextInputSpan = function (props) {
2156
+ var format = props.format, text = props.text, readOnly = props.readOnly;
2157
+ var defaultValue = text.substring(format.start, format.end);
2158
+ var _a = React.useState(defaultValue), value = _a[0], setValue = _a[1];
2159
+ var handleChange = React.useCallback(function (ev) {
2160
+ setValue(ev.target.value);
2161
+ }, []);
2162
+ if (readOnly) {
2163
+ return (React__default["default"].createElement("span", { className: "xapp-search-rich-text-input-span" }, defaultValue));
2164
+ }
2165
+ return (React__default["default"].createElement("input", { type: "text", value: value, className: "xapp-search-rich-text-input-span", "data-rich-text-type": "inputText", onChange: handleChange, readOnly: readOnly }));
2166
+ };
2167
+
2168
+ var RichTextNormalSpan = function (props) {
2169
+ var format = props.format, text = props.text;
2170
+ return (React__default["default"].createElement("span", { "data-rich-text-type": "normal", className: "xapp-search-rich-text-normal-span" }, text.substring(format.start, format.end)));
2171
+ };
2172
+
2173
+ var RichTextSpan = function (props) {
2174
+ var format = props.format, text = props.text, readOnly = props.readOnly;
2175
+ var type = format.type;
2176
+ switch (type) {
2177
+ case "normal":
2178
+ return (React__default["default"].createElement(RichTextNormalSpan, { text: text, format: format, readOnly: readOnly }));
2179
+ case "bold":
2180
+ return (React__default["default"].createElement(RichTextBoldSpan, { text: text, format: format, readOnly: readOnly }));
2181
+ case "inputText":
2182
+ return (React__default["default"].createElement(RichTextInputSpan, { text: text, format: format, readOnly: readOnly }));
2183
+ default:
2184
+ throwBadKind(type);
2185
+ }
2186
+ };
2187
+
2188
+ function cleanRichTextValue(value) {
2189
+ var text = value.text, formats = value.formats;
2190
+ var newFormats = [];
2191
+ for (var _i = 0, formats_1 = formats; _i < formats_1.length; _i++) {
2192
+ var format = formats_1[_i];
2193
+ var type = format.type;
2194
+ switch (type) {
2195
+ case "normal":
2196
+ continue;
2197
+ case "inputText":
2198
+ newFormats.push(format);
2199
+ break;
2200
+ case "bold":
2201
+ if (newFormats.length > 0) {
2202
+ var prev = newFormats[newFormats.length - 1];
2203
+ if (prev.type === type && prev.end === format.start) {
2204
+ newFormats.pop();
2205
+ newFormats.push({
2206
+ type: type,
2207
+ start: prev.start,
2208
+ end: format.end
2209
+ });
2210
+ }
2211
+ }
2212
+ else {
2213
+ newFormats.push(format);
2214
+ }
2215
+ break;
2216
+ }
2217
+ }
2218
+ return {
2219
+ text: text,
2220
+ formats: newFormats
2221
+ };
2222
+ }
2223
+
2224
+ function extendFormat(formats, length) {
2225
+ var res = [];
2226
+ var walkerIndex = 0;
2227
+ for (var _i = 0, formats_1 = formats; _i < formats_1.length; _i++) {
2228
+ var format = formats_1[_i];
2229
+ var start = format.start, end = format.end, type = format.type;
2230
+ if (walkerIndex < start) {
2231
+ res.push({
2232
+ type: "normal",
2233
+ start: walkerIndex,
2234
+ end: start
2235
+ });
2236
+ }
2237
+ res.push({
2238
+ type: type,
2239
+ start: start,
2240
+ end: end
2241
+ });
2242
+ walkerIndex = end;
2243
+ }
2244
+ if (walkerIndex < length) {
2245
+ res.push({
2246
+ type: "normal",
2247
+ start: walkerIndex,
2248
+ end: length
2249
+ });
2250
+ }
2251
+ return res;
2252
+ }
2253
+
2254
+ function parseContent(node) {
2255
+ var children = node.childNodes;
2256
+ var formats = [];
2257
+ var text = "";
2258
+ children.forEach(function (child) {
2259
+ if (child.nodeType === Node.ELEMENT_NODE) {
2260
+ var node_1 = child;
2261
+ var innerText = node_1.tagName === "INPUT" ? node_1.value : node_1.innerText;
2262
+ var type = node_1.dataset.richTextType;
2263
+ formats.push({
2264
+ type: type,
2265
+ start: text.length,
2266
+ end: text.length + innerText.length
2267
+ });
2268
+ text += innerText;
2269
+ }
2270
+ if (child.nodeType === Node.TEXT_NODE) {
2271
+ var node_2 = child;
2272
+ var innerText = node_2.nodeValue;
2273
+ if (innerText) {
2274
+ formats.push({
2275
+ type: "normal",
2276
+ start: text.length,
2277
+ end: text.length + innerText.length
2278
+ });
2279
+ text += innerText;
2280
+ }
2281
+ }
2282
+ });
2283
+ return cleanRichTextValue({
2284
+ text: text,
2285
+ formats: formats
2286
+ });
2287
+ }
2288
+ function cleanContent(node) {
2289
+ var _a;
2290
+ var trash = [];
2291
+ var raw = node.childNodes;
2292
+ for (var i = 0; i < raw.length; i++) {
2293
+ var c = raw.item(i);
2294
+ if ((c === null || c === void 0 ? void 0 : c.nodeType) === Node.TEXT_NODE) {
2295
+ trash.push(c);
2296
+ }
2297
+ }
2298
+ for (var _i = 0, trash_1 = trash; _i < trash_1.length; _i++) {
2299
+ var c = trash_1[_i];
2300
+ try {
2301
+ (_a = c.parentElement) === null || _a === void 0 ? void 0 : _a.removeChild(c);
2302
+ }
2303
+ catch (_b) {
2304
+ }
2305
+ }
2306
+ }
2307
+ var RichText = function (props) {
2308
+ var value = props.value, className = props.className, readOnly = props.readOnly, onInput = props.onInput, onChange = props.onChange;
2309
+ var formatsRaw = value.formats, text = value.text;
2310
+ var formats = React.useMemo(function () { return extendFormat(formatsRaw, text.length); }, [formatsRaw, text.length]);
2311
+ var handleInput = React.useCallback(function (ev) {
2312
+ var target = ev.currentTarget;
2313
+ var newValue = parseContent(target);
2314
+ if (onInput) {
2315
+ onInput(newValue);
2316
+ }
2317
+ }, [onInput]);
2318
+ var handleBlur = React.useCallback(function (ev) {
2319
+ var target = ev.currentTarget;
2320
+ var newValue = parseContent(target);
2321
+ cleanContent(target);
2322
+ if (onChange) {
2323
+ onChange(newValue);
2324
+ }
2325
+ }, [onChange]);
2326
+ return (React__default["default"].createElement("div", { id: props.id, className: "xapp-search-rich-text ".concat(className || ""), contentEditable: !readOnly, suppressContentEditableWarning: true, onInput: handleInput, onBlur: handleBlur }, formats.map(function (format, index) { return (React__default["default"].createElement(RichTextSpan, { format: format, text: text, key: index, readOnly: readOnly })); })));
2327
+ };
2328
+
2329
+ var RichInput = function (props) {
2330
+ var id = props.id, value = props.value, type = props.type, autoFocus = props.autoFocus, onChange = props.onChange, onInput = props.onInput, onKeyDown = props.onKeyDown;
2331
+ var rich = value.formats.some(function (f) { return f.type === "inputText"; });
2332
+ var handleChange = React.useCallback(function (ev) {
2333
+ onChange({
2334
+ text: ev.target.value,
2335
+ formats: []
2336
+ });
2337
+ }, [onChange]);
2338
+ var handleRichChange = React.useCallback(function (val) {
2339
+ onChange(val);
2340
+ }, [onChange]);
2341
+ var handleInput = React.useCallback(function (ev) {
2342
+ if (onInput) {
2343
+ onInput({
2344
+ text: ev.target.value,
2345
+ formats: []
2346
+ });
2347
+ }
2348
+ }, [onInput]);
2349
+ var handleRichInput = React.useCallback(function (val) {
2350
+ if (onInput) {
2351
+ onInput(val);
2352
+ }
2353
+ }, [onInput]);
2354
+ var handleKeyDown = React.useCallback(function (event) {
2355
+ if (onKeyDown) {
2356
+ onKeyDown(event);
2357
+ }
2358
+ }, [onKeyDown]);
2359
+ return (React__default["default"].createElement("div", { className: "xappw-rich-input ".concat(props.className) }, rich ?
2360
+ React__default["default"].createElement(RichText, { id: id, value: value, onChange: handleRichChange, onInput: handleRichInput, className: "xappw-rich-input__input ".concat(props.className, "__input") }) : React__default["default"].createElement("input", { id: id, type: type, value: value.text, autoFocus: autoFocus, placeholder: props.placeholder, className: "xappw-rich-input__input ".concat(props.className, "__input"), onFocus: props.onFocus, onChange: handleChange, onInput: handleInput, onKeyDown: handleKeyDown })));
2361
+ };
2362
+
2363
+ var SuggestionsGroupHeading = function (props) {
2364
+ return (React__default["default"].createElement("div", { className: "xappw-suggestions-group-heading" }, props.label));
2365
+ };
2366
+
2367
+ function getScrollContainer(node) {
2368
+ var walker = node;
2369
+ while (walker && !walker.classList.contains("xapp-search-result__suggestions")) {
2370
+ walker = walker.parentElement;
2371
+ }
2372
+ return walker || undefined;
2373
+ }
2374
+ var SuggestionsItem = function (props) {
2375
+ var data = props.data, current = props.current, ActionsComponent = props.actions, onClick = props.onClick, onHover = props.onHover;
2376
+ var handleClick = React.useCallback(function () {
2377
+ onClick(data);
2378
+ }, [data, onClick]);
2379
+ var handleHover = React.useCallback(function () {
2380
+ if (onHover) {
2381
+ onHover(data);
2382
+ }
2383
+ }, [data, onHover]);
2384
+ var ref = React.useRef(null);
2385
+ React.useEffect(function () {
2386
+ var node = ref.current;
2387
+ if (current && node) {
2388
+ var scrollContainer = getScrollContainer(node);
2389
+ if (scrollContainer) {
2390
+ var scrollBox = scrollContainer.getBoundingClientRect();
2391
+ var nodeBox = node.getBoundingClientRect();
2392
+ var maxTop = Math.max(scrollBox.top, nodeBox.top);
2393
+ var minBottom = Math.min(scrollBox.bottom, nodeBox.bottom);
2394
+ var visibleHeight = minBottom - maxTop;
2395
+ var actualHeight = nodeBox.height;
2396
+ if (visibleHeight < actualHeight * 0.99) {
2397
+ node.scrollIntoView({ behavior: "smooth" });
2398
+ }
2399
+ }
2400
+ }
2401
+ }, [current]);
2402
+ return (React__default["default"].createElement("div", { ref: ref, className: "xappw-suggestions-item ".concat(current ? "xappw-suggestions-item--current" : ""), onClick: handleClick, onMouseEnter: handleHover },
2403
+ React__default["default"].createElement(RichText, { value: data, className: "xappw-suggestions-item__texts", readOnly: true }),
2404
+ ActionsComponent &&
2405
+ React__default["default"].createElement("div", { className: "xappw-suggestions-item__actions" },
2406
+ React__default["default"].createElement(ActionsComponent, { data: data, current: current }))));
2407
+ };
2408
+
2409
+ var SuggestionsGroup = function (props) {
2410
+ var group = props.group, currentIndex = props.currentIndex, itemActions = props.itemActions;
2411
+ var heading = group.heading, items = group.items;
2412
+ return (React__default["default"].createElement("div", { className: "xappw-suggestions-group" },
2413
+ React__default["default"].createElement("div", { className: "xappw-suggestions-group__heading" },
2414
+ React__default["default"].createElement(SuggestionsGroupHeading, { label: heading })),
2415
+ React__default["default"].createElement("div", { className: "xappw-suggestions-group__items" }, items.map(function (item, itemIndex) {
2416
+ return React__default["default"].createElement(SuggestionsItem, { key: itemIndex, data: item, current: currentIndex === itemIndex, actions: itemActions, onClick: props.onItemClick, onHover: props.onItemHover });
2417
+ }))));
2418
+ };
2419
+
2420
+ function getItemsLength(result) {
2421
+ return result.reduce(function (prev, cur) { return prev + cur.items.length; }, 0);
2422
+ }
2423
+
2424
+ var SuggestionsList = function (props) {
2425
+ var suggestions = props.suggestions, itemActions = props.itemActions, className = props.className;
2426
+ var length = React.useMemo(function () { return getItemsLength(suggestions); }, [suggestions]);
2427
+ var currentIndex = length >= 0 ? props.index : NaN;
2428
+ var indexWalker = 0;
2429
+ return (React__default["default"].createElement("div", { className: "xappw-suggestions-list ".concat(className || "") }, suggestions.map(function (group, index) {
2430
+ var res = (React__default["default"].createElement(SuggestionsGroup, { key: index, group: group, currentIndex: currentIndex - indexWalker, itemActions: itemActions, onItemClick: props.onItemClick, onItemHover: props.onItemHover }));
2431
+ indexWalker += group.items.length;
2432
+ return res;
2433
+ })));
2434
+ };
2435
+
2436
+ function findItemByIndex(groups, index) {
2437
+ for (var _i = 0, groups_1 = groups; _i < groups_1.length; _i++) {
2438
+ var group = groups_1[_i];
2439
+ for (var _a = 0, _b = group.items; _a < _b.length; _a++) {
2440
+ var item = _b[_a];
2441
+ if (index <= 0) {
2442
+ return item;
2443
+ }
2444
+ index--;
2445
+ }
2446
+ }
2447
+ return undefined;
2448
+ }
2449
+
2450
+ /*! *****************************************************************************
2451
+ Copyright (c) Microsoft Corporation.
2452
+
2453
+ Permission to use, copy, modify, and/or distribute this software for any
2454
+ purpose with or without fee is hereby granted.
2455
+
2456
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
2457
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
2458
+ AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
2459
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
2460
+ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
2461
+ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
2462
+ PERFORMANCE OF THIS SOFTWARE.
2463
+ ***************************************************************************** */
2464
+
2465
+ function __awaiter(thisArg, _arguments, P, generator) {
2466
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
2467
+ return new (P || (P = Promise))(function (resolve, reject) {
2468
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
2469
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
2470
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
2471
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
2472
+ });
2473
+ }
2474
+
2475
+ function __generator(thisArg, body) {
2476
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
2477
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
2478
+ function verb(n) { return function (v) { return step([n, v]); }; }
2479
+ function step(op) {
2480
+ if (f) throw new TypeError("Generator is already executing.");
2481
+ while (_) try {
2482
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
2483
+ if (y = 0, t) op = [op[0] & 2, t.value];
2484
+ switch (op[0]) {
2485
+ case 0: case 1: t = op; break;
2486
+ case 4: _.label++; return { value: op[1], done: false };
2487
+ case 5: _.label++; y = op[1]; op = [0]; continue;
2488
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
2489
+ default:
2490
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
2491
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
2492
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
2493
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
2494
+ if (t[2]) _.ops.pop();
2495
+ _.trys.pop(); continue;
2496
+ }
2497
+ op = body.call(thisArg, _);
2498
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
2499
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
2500
+ }
2501
+ }
2502
+
2503
+ function __spreadArray(to, from, pack) {
2504
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
2505
+ if (ar || !(i in from)) {
2506
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
2507
+ ar[i] = from[i];
2508
+ }
2509
+ }
2510
+ return to.concat(ar || Array.prototype.slice.call(from));
2511
+ }
2512
+
2513
+ function parseSuggestionsFormat(format) {
2514
+ var types = Object.keys(format);
2515
+ var type = types[0];
2516
+ var item = format[type];
2517
+ if (!item) {
2518
+ throw new Error();
2519
+ }
2520
+ return {
2521
+ type: type,
2522
+ start: item.start,
2523
+ end: item.end
2524
+ };
2525
+ }
2526
+ function parseSuggestionsFormats(formats) {
2527
+ return formats.map(parseSuggestionsFormat);
2528
+ }
2529
+ function parseSuggestionsResponseItem(item) {
2530
+ return {
2531
+ text: item.suggestion,
2532
+ content: item.answer,
2533
+ formats: parseSuggestionsFormats(item.format),
2534
+ type: item.type
2535
+ };
2536
+ }
2537
+ function normalizeType(type) {
2538
+ switch (type) {
2539
+ case "HISTORICAL":
2540
+ return "INTENT";
2541
+ default:
2542
+ return type;
2543
+ }
2544
+ }
2545
+ function getHeading(type) {
2546
+ return normalizeType(type);
2547
+ }
2548
+ var order = ["FAQ", "INTENT", "HISTORICAL"];
2549
+ var ordersMap = order.reduce(function (prev, cur, index) {
2550
+ prev[cur] = index;
2551
+ return prev;
2552
+ }, {});
2553
+ function compareSuggestionItems(left, right) {
2554
+ return (ordersMap[right.type] - ordersMap[left.type]);
2555
+ }
2556
+ function parseSuggestionsResponse(response) {
2557
+ if (!response) {
2558
+ return undefined;
2559
+ }
2560
+ var items = __spreadArray([], response.suggestions, true).sort(compareSuggestionItems);
2561
+ return items.reduce(function (result, current) {
2562
+ var mappedItem = parseSuggestionsResponseItem(current);
2563
+ if (result.length) {
2564
+ var prevGroup = result[result.length - 1];
2565
+ if (prevGroup.heading === getHeading(current.type)) {
2566
+ prevGroup.items.push(mappedItem);
2567
+ return result;
2568
+ }
2569
+ }
2570
+ result.push({
2571
+ heading: getHeading(current.type),
2572
+ items: [mappedItem]
2573
+ });
2574
+ return result;
2575
+ }, []);
2576
+ }
2577
+
2578
+ /**
2579
+ * Append the provided query params to the URL
2580
+ *
2581
+ * It will overwrite existing params on the URL if there are conflicts
2582
+ * @param url
2583
+ * @param params
2584
+ */
2585
+ function addQueryParametersToURL(url, params) {
2586
+ var existingParams = new URL(url).searchParams;
2587
+ params.forEach(function (value, key) {
2588
+ existingParams.append(key, value);
2589
+ });
2590
+ var newUrl = new URL(url);
2591
+ newUrl.search = existingParams.toString();
2592
+ return newUrl;
2593
+ }
2594
+
2595
+ var defaultOptions = {};
2596
+ function noop$1() {
2597
+ }
2598
+ function useJsonFetch(url, options) {
2599
+ if (options === void 0) { options = defaultOptions; }
2600
+ var _a = React.useState({
2601
+ state: "paused"
2602
+ }), value = _a[0], setValue = _a[1];
2603
+ var pause = options.pause;
2604
+ React.useEffect(function () {
2605
+ if (pause) {
2606
+ setValue({
2607
+ state: "paused"
2608
+ });
2609
+ return noop$1;
2610
+ }
2611
+ var controller = new AbortController();
2612
+ var signal = controller.signal;
2613
+ var mounted = true;
2614
+ (function () {
2615
+ return __awaiter(this, void 0, void 0, function () {
2616
+ var response, json, e_1;
2617
+ return __generator(this, function (_a) {
2618
+ switch (_a.label) {
2619
+ case 0:
2620
+ _a.trys.push([0, 4, , 5]);
2621
+ setValue({
2622
+ state: "fetching"
2623
+ });
2624
+ return [4 /*yield*/, fetch(url, { signal: signal })];
2625
+ case 1:
2626
+ response = _a.sent();
2627
+ if (!mounted) return [3 /*break*/, 3];
2628
+ return [4 /*yield*/, response.json()];
2629
+ case 2:
2630
+ json = _a.sent();
2631
+ if (response.ok) {
2632
+ setValue({
2633
+ state: "success",
2634
+ data: json
2635
+ });
2636
+ }
2637
+ else {
2638
+ setValue({
2639
+ state: "error",
2640
+ error: json
2641
+ });
2642
+ }
2643
+ _a.label = 3;
2644
+ case 3: return [3 /*break*/, 5];
2645
+ case 4:
2646
+ e_1 = _a.sent();
2647
+ if (e_1.name === "AbortError") {
2648
+ setValue({
2649
+ state: "paused"
2650
+ });
2651
+ return [2 /*return*/];
2652
+ }
2653
+ throw e_1;
2654
+ case 5: return [2 /*return*/];
2655
+ }
2656
+ });
2657
+ });
2658
+ })();
2659
+ return function () {
2660
+ mounted = false;
2661
+ controller.abort();
2662
+ };
2663
+ }, [url, pause]);
2664
+ return value;
2665
+ }
2666
+
2667
+ function useSuggestionsFetch$1(options) {
2668
+ var baseUrl = options.url, context = options.context, query = options.query;
2669
+ var url = React.useMemo(function () {
2670
+ if (!baseUrl) {
2671
+ return undefined;
2672
+ }
2673
+ var params = new URLSearchParams();
2674
+ params.append("size", "5");
2675
+ params.append("queryText", query);
2676
+ if (context === null || context === void 0 ? void 0 : context.length) {
2677
+ params.append("activeContexts", context.join(","));
2678
+ }
2679
+ return addQueryParametersToURL(baseUrl, params);
2680
+ }, [query, context, baseUrl]);
2681
+ var response = useJsonFetch(url ? "".concat(url.toString()) : "", {
2682
+ pause: !query || !baseUrl
2683
+ });
2684
+ return response;
2685
+ }
2686
+
2687
+ /**
2688
+ * Quicker configurable uuid
2689
+ *
2690
+ * @export
2691
+ * @returns {string}
2692
+ */
2693
+ function uuid() {
2694
+ var d = new Date().getTime();
2695
+ var newUuid = "xxxxxxxx-xxxx-65xx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) {
2696
+ /* tslint:disable:no-magic-numbers */
2697
+ /* tslint:disable:no-bitwise */
2698
+ var r = (d + Math.random() * 16) % 16 | 0;
2699
+ d = Math.floor(d / 16);
2700
+ return (c === "x" ? r : (r & 0x3) | 0x8).toString(16);
2701
+ /* tslint:enable:no-magic-numbers */
2702
+ /* tslint:disable:no-bitwise */
2703
+ });
2704
+ return newUuid;
2705
+ }
2706
+
2707
+ var IconButton_1 = dist.IconButton = IconButton;
2708
+ var RichInput_1 = dist.RichInput = RichInput;
2709
+ dist.RichText = RichText;
2710
+ dist.SuggestionsGroup = SuggestionsGroup;
2711
+ dist.SuggestionsGroupHeading = SuggestionsGroupHeading;
2712
+ dist.SuggestionsItem = SuggestionsItem;
2713
+ var SuggestionsList_1 = dist.SuggestionsList = SuggestionsList;
2714
+ dist.addQueryParametersToURL = addQueryParametersToURL;
2715
+ dist.extendFormat = extendFormat;
2716
+ var findItemByIndex_1 = dist.findItemByIndex = findItemByIndex;
2717
+ var getItemsLength_1 = dist.getItemsLength = getItemsLength;
2718
+ var parseSuggestionsResponse_1 = dist.parseSuggestionsResponse = parseSuggestionsResponse;
2719
+ dist.useJsonFetch = useJsonFetch;
2720
+ var useSuggestionsFetch_1 = dist.useSuggestionsFetch = useSuggestionsFetch$1;
2721
+ var uuid_1 = dist.uuid = uuid;
2722
+
2143
2723
  function postMessageToStentor(data, url, key) {
2144
- return __awaiter(this, void 0, void 0, function () {
2724
+ return __awaiter$1(this, void 0, void 0, function () {
2145
2725
  var body, response;
2146
- return __generator(this, function (_a) {
2726
+ return __generator$1(this, function (_a) {
2147
2727
  switch (_a.label) {
2148
2728
  case 0:
2149
2729
  body = JSON.stringify(data);
2150
- log("URL: " + url);
2151
- log("BODY: " + body);
2730
+ log("URL: ".concat(url));
2731
+ log("BODY: ".concat(body));
2152
2732
  return [4 /*yield*/, fetch(url, {
2153
2733
  method: "POST",
2154
2734
  headers: {
2155
2735
  "Content-Type": "application/json",
2156
- "Authorization": "Bearer " + key,
2736
+ "Authorization": "Bearer ".concat(key),
2157
2737
  "User-Agent": "Stentor Chat Server"
2158
2738
  },
2159
2739
  body: body,
@@ -2162,7 +2742,7 @@ function postMessageToStentor(data, url, key) {
2162
2742
  case 1:
2163
2743
  response = _a.sent();
2164
2744
  if (!response.ok) {
2165
- throw new Error("Status " + response.status + ", Text: " + response.statusText);
2745
+ throw new Error("Status ".concat(response.status, ", Text: ").concat(response.statusText));
2166
2746
  }
2167
2747
  return [2 /*return*/, response.json()];
2168
2748
  }
@@ -2230,7 +2810,7 @@ function getOutput(value) {
2230
2810
  * @returns
2231
2811
  */
2232
2812
  function responseToMessage(botResponse, now) {
2233
- var _a, _b, _c, _d;
2813
+ var _a, _b, _c, _d, _e;
2234
2814
  if (now === void 0) { now = new Date().getTime(); }
2235
2815
  var responseMessage;
2236
2816
  if (!botResponse) {
@@ -2276,24 +2856,20 @@ function responseToMessage(botResponse, now) {
2276
2856
  if (html) {
2277
2857
  responseMessage.msg = __assign(__assign({}, responseMessage.msg), { html: html });
2278
2858
  }
2279
- if (text || html) {
2280
- responseMessage.msg.options = [];
2281
- if (outputSpeech.suggestions && outputSpeech.suggestions.length > 0) {
2282
- for (var _i = 0, _e = outputSpeech.suggestions; _i < _e.length; _i++) {
2283
- var suggestion = _e[_i];
2284
- if (typeof suggestion === "string") {
2285
- // Simple chips (strings)
2286
- responseMessage.msg.options.push(suggestion);
2287
- }
2288
- else {
2289
- // "call out" chips
2290
- responseMessage.msg.options.push({
2291
- label: suggestion.title,
2292
- actionUrl: suggestion.url
2293
- });
2294
- }
2859
+ if ((_e = outputSpeech.suggestions) === null || _e === void 0 ? void 0 : _e.length) {
2860
+ responseMessage.msg.options = outputSpeech.suggestions.map(function (suggestion) {
2861
+ if (typeof suggestion === "string") {
2862
+ // Simple chips (strings)
2863
+ return suggestion;
2295
2864
  }
2296
- }
2865
+ else {
2866
+ // "call out" chips
2867
+ return {
2868
+ label: suggestion.title,
2869
+ actionUrl: suggestion.url
2870
+ };
2871
+ }
2872
+ });
2297
2873
  }
2298
2874
  }
2299
2875
  return responseMessage;
@@ -2305,7 +2881,7 @@ function getPermissionRequestType(type) {
2305
2881
  case "PERMISSION_LOCATION_PRECISE":
2306
2882
  return "LOCATION_PRECISE";
2307
2883
  default:
2308
- throw new Error("Unsupported permission: " + type);
2884
+ throw new Error("Unsupported permission: ".concat(type));
2309
2885
  }
2310
2886
  }
2311
2887
  function getPermissionResponse(botResponse, now) {
@@ -2318,7 +2894,7 @@ function getPermissionResponse(botResponse, now) {
2318
2894
  type: "permissionRequest",
2319
2895
  timestamp: now,
2320
2896
  msg: {
2321
- text: (_a = outputSpeech === null || outputSpeech === void 0 ? void 0 : outputSpeech.displayText) !== null && _a !== void 0 ? _a : "" + botResponse.data.permissionRequestTTSContext,
2897
+ text: (_a = outputSpeech === null || outputSpeech === void 0 ? void 0 : outputSpeech.displayText) !== null && _a !== void 0 ? _a : "".concat(botResponse.data.permissionRequestTTSContext),
2322
2898
  permissionRequest: {
2323
2899
  time: now,
2324
2900
  type: type,
@@ -2335,26 +2911,6 @@ function getPermissionResponse(botResponse, now) {
2335
2911
  };
2336
2912
  }
2337
2913
 
2338
- /**
2339
- * Quicker configurable uuid
2340
- *
2341
- * @export
2342
- * @returns {string}
2343
- */
2344
- function uuid() {
2345
- var d = new Date().getTime();
2346
- var newUuid = "xxxxxxxx-xxxx-65xx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) {
2347
- /* tslint:disable:no-magic-numbers */
2348
- /* tslint:disable:no-bitwise */
2349
- var r = (d + Math.random() * 16) % 16 | 0;
2350
- d = Math.floor(d / 16);
2351
- return (c === "x" ? r : (r & 0x3) | 0x8).toString(16);
2352
- /* tslint:enable:no-magic-numbers */
2353
- /* tslint:disable:no-bitwise */
2354
- });
2355
- return newUuid;
2356
- }
2357
-
2358
2914
  var PERMISSION_QUESTION_EXPIRATION_MS = 300000; // 5 minutes
2359
2915
  var StentorDirectChat = /** @class */ (function () {
2360
2916
  function StentorDirectChat(config) {
@@ -2366,15 +2922,15 @@ var StentorDirectChat = /** @class */ (function () {
2366
2922
  */
2367
2923
  this.widget = {
2368
2924
  setConnectionStatus: function (status) {
2369
- log("SERVER: connection_update: " + JSON.stringify(status));
2925
+ log("SERVER: connection_update: ".concat(JSON.stringify(status)));
2370
2926
  _this.dispatch(setConnectionStatus(status));
2371
2927
  },
2372
2928
  setAccountStatus: function (status) {
2373
- log("SERVER: account_status: " + JSON.stringify(status));
2929
+ log("SERVER: account_status: ".concat(JSON.stringify(status)));
2374
2930
  _this.dispatch(setAccountStatus(status));
2375
2931
  },
2376
2932
  sendNewMessage: function (data) {
2377
- log("SERVER: new message: " + JSON.stringify(data));
2933
+ log("SERVER: new message: ".concat(JSON.stringify(data)));
2378
2934
  _this.dispatch({
2379
2935
  type: "chat",
2380
2936
  detail: {
@@ -2386,7 +2942,7 @@ var StentorDirectChat = /** @class */ (function () {
2386
2942
  });
2387
2943
  },
2388
2944
  userJoined: function (data) {
2389
- log("SERVER: user joined: " + JSON.stringify(data));
2945
+ log("SERVER: user joined: ".concat(JSON.stringify(data)));
2390
2946
  _this.visitorInfo.token = data.token;
2391
2947
  _this.dispatch({
2392
2948
  type: "chat",
@@ -2398,7 +2954,7 @@ var StentorDirectChat = /** @class */ (function () {
2398
2954
  });
2399
2955
  },
2400
2956
  userLeft: function (data) {
2401
- log("SERVER: user left: " + JSON.stringify(data));
2957
+ log("SERVER: user left: ".concat(JSON.stringify(data)));
2402
2958
  _this.dispatch({
2403
2959
  type: "chat",
2404
2960
  detail: {
@@ -2457,7 +3013,7 @@ var StentorDirectChat = /** @class */ (function () {
2457
3013
  StentorDirectChat.prototype.init = function (dispatch) {
2458
3014
  this.dispatch = dispatch;
2459
3015
  // TODO: Authenticate - or at least tell the server who you are
2460
- log("got init auth: " + this.config.key);
3016
+ log("got init auth: ".concat(this.config.key));
2461
3017
  // We are connected
2462
3018
  this.widget.setConnectionStatus("online");
2463
3019
  this.widget.setAccountStatus("online");
@@ -2469,8 +3025,8 @@ var StentorDirectChat = /** @class */ (function () {
2469
3025
  cb();
2470
3026
  };
2471
3027
  StentorDirectChat.prototype.sendChatMsg = function (message, cb) {
2472
- return __awaiter(this, void 0, void 0, function () {
2473
- return __generator(this, function (_a) {
3028
+ return __awaiter$1(this, void 0, void 0, function () {
3029
+ return __generator$1(this, function (_a) {
2474
3030
  return [2 /*return*/, this.sendChatMsgRequest({
2475
3031
  msg: message,
2476
3032
  timestamp: new Date().getTime(),
@@ -2483,9 +3039,9 @@ var StentorDirectChat = /** @class */ (function () {
2483
3039
  };
2484
3040
  StentorDirectChat.prototype.sendChatMsgRequest = function (serviceRequest, cb) {
2485
3041
  var _a;
2486
- return __awaiter(this, void 0, void 0, function () {
3042
+ return __awaiter$1(this, void 0, void 0, function () {
2487
3043
  var agentResponse;
2488
- return __generator(this, function (_b) {
3044
+ return __generator$1(this, function (_b) {
2489
3045
  switch (_b.label) {
2490
3046
  case 0: return [4 /*yield*/, this.postMessage(serviceRequest)];
2491
3047
  case 1:
@@ -2528,9 +3084,9 @@ var StentorDirectChat = /** @class */ (function () {
2528
3084
  };
2529
3085
  StentorDirectChat.prototype.postMessage = function (message) {
2530
3086
  var _a, _b, _c, _d;
2531
- return __awaiter(this, void 0, void 0, function () {
3087
+ return __awaiter$1(this, void 0, void 0, function () {
2532
3088
  var request, now, permissionRequest, expired, text, granted, userProfile, isEmail, botResponse, responseMessage;
2533
- return __generator(this, function (_e) {
3089
+ return __generator$1(this, function (_e) {
2534
3090
  switch (_e.label) {
2535
3091
  case 0:
2536
3092
  now = new Date().getTime();
@@ -2617,20 +3173,20 @@ var StentorDirectChat = /** @class */ (function () {
2617
3173
  };
2618
3174
  }
2619
3175
  }
2620
- log("Visitor says: " + JSON.stringify(request, undefined, 2));
3176
+ log("Visitor says: ".concat(JSON.stringify(request, undefined, 2)));
2621
3177
  // Bot is "typing"
2622
3178
  this.widget.typing();
2623
3179
  return [4 /*yield*/, postMessageToStentor(request, this.config.url, this.config.key).catch(function (postError) {
2624
- err("POST failed: " + postError.message);
3180
+ err("POST failed: ".concat(postError.message));
2625
3181
  return {
2626
- text: "Bot doesn't respond. Reason: " + postError.message
3182
+ text: "Bot doesn't respond. Reason: ".concat(postError.message)
2627
3183
  };
2628
3184
  })];
2629
3185
  case 1:
2630
3186
  botResponse = _e.sent();
2631
3187
  // Bot stopped "typing"
2632
3188
  this.widget.stopTyping();
2633
- log("Bot says: " + JSON.stringify(botResponse, undefined, 2));
3189
+ log("Bot says: ".concat(JSON.stringify(botResponse, undefined, 2)));
2634
3190
  // Now translate the response to server dialect
2635
3191
  // new session no more
2636
3192
  this.isNewSession = false;
@@ -2654,15 +3210,15 @@ var StentorDirectChat = /** @class */ (function () {
2654
3210
  };
2655
3211
  StentorDirectChat.prototype.startSession = function () {
2656
3212
  if (this.visitorInfo.visitorId) {
2657
- this._userId = "stentor-widget-user-" + this.visitorInfo.visitorId;
3213
+ this._userId = "stentor-widget-user-".concat(this.visitorInfo.visitorId);
2658
3214
  }
2659
3215
  else if (this.visitorInfo.email) {
2660
- this._userId = "stentor-widget-user-" + this.visitorInfo.email;
3216
+ this._userId = "stentor-widget-user-".concat(this.visitorInfo.email);
2661
3217
  }
2662
3218
  else {
2663
- this._userId = "stentor-widget-user-" + uuid();
3219
+ this._userId = "stentor-widget-user-".concat(uuid_1());
2664
3220
  }
2665
- this._sessionId = "stentor-widget-session-" + uuid();
3221
+ this._sessionId = "stentor-widget-session-".concat(uuid_1());
2666
3222
  this.isNewSession = true;
2667
3223
  };
2668
3224
  Object.defineProperty(StentorDirectChat.prototype, "userId", {
@@ -5184,8 +5740,10 @@ class Socket extends Emitter_1 {
5184
5740
  packet.options.compress = this.flags.compress !== false;
5185
5741
  // event ack callback
5186
5742
  if ("function" === typeof args[args.length - 1]) {
5187
- this.acks[this.ids] = args.pop();
5188
- packet.id = this.ids++;
5743
+ const id = this.ids++;
5744
+ const ack = args.pop();
5745
+ this._registerAckCallback(id, ack);
5746
+ packet.id = id;
5189
5747
  }
5190
5748
  const isTransportWritable = this.io.engine &&
5191
5749
  this.io.engine.transport &&
@@ -5201,6 +5759,31 @@ class Socket extends Emitter_1 {
5201
5759
  this.flags = {};
5202
5760
  return this;
5203
5761
  }
5762
+ /**
5763
+ * @private
5764
+ */
5765
+ _registerAckCallback(id, ack) {
5766
+ const timeout = this.flags.timeout;
5767
+ if (timeout === undefined) {
5768
+ this.acks[id] = ack;
5769
+ return;
5770
+ }
5771
+ // @ts-ignore
5772
+ const timer = this.io.setTimeoutFn(() => {
5773
+ delete this.acks[id];
5774
+ for (let i = 0; i < this.sendBuffer.length; i++) {
5775
+ if (this.sendBuffer[i].id === id) {
5776
+ this.sendBuffer.splice(i, 1);
5777
+ }
5778
+ }
5779
+ ack.call(this, new Error("operation has timed out"));
5780
+ }, timeout);
5781
+ this.acks[id] = (...args) => {
5782
+ // @ts-ignore
5783
+ this.io.clearTimeoutFn(timer);
5784
+ ack.apply(this, [null, ...args]);
5785
+ };
5786
+ }
5204
5787
  /**
5205
5788
  * Sends a packet.
5206
5789
  *
@@ -5285,6 +5868,7 @@ class Socket extends Emitter_1 {
5285
5868
  this.ondisconnect();
5286
5869
  break;
5287
5870
  case PacketType.CONNECT_ERROR:
5871
+ this.destroy();
5288
5872
  const err = new Error(packet.data.message);
5289
5873
  // @ts-ignore
5290
5874
  err.data = packet.data.data;
@@ -5448,6 +6032,25 @@ class Socket extends Emitter_1 {
5448
6032
  this.flags.volatile = true;
5449
6033
  return this;
5450
6034
  }
6035
+ /**
6036
+ * Sets a modifier for a subsequent event emission that the callback will be called with an error when the
6037
+ * given number of milliseconds have elapsed without an acknowledgement from the server:
6038
+ *
6039
+ * ```
6040
+ * socket.timeout(5000).emit("my-event", (err) => {
6041
+ * if (err) {
6042
+ * // the server did not acknowledge the event in the given delay
6043
+ * }
6044
+ * });
6045
+ * ```
6046
+ *
6047
+ * @returns self
6048
+ * @public
6049
+ */
6050
+ timeout(timeout) {
6051
+ this.flags.timeout = timeout;
6052
+ return this;
6053
+ }
5451
6054
  /**
5452
6055
  * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the
5453
6056
  * callback.
@@ -5854,13 +6457,7 @@ class Manager extends Emitter_1 {
5854
6457
  _close() {
5855
6458
  this.skipReconnect = true;
5856
6459
  this._reconnecting = false;
5857
- if ("opening" === this._readyState) {
5858
- // `onclose` will not fire because
5859
- // an open event never happened
5860
- this.cleanup();
5861
- }
5862
- this.backoff.reset();
5863
- this._readyState = "closed";
6460
+ this.onclose("forced close");
5864
6461
  if (this.engine)
5865
6462
  this.engine.close();
5866
6463
  }
@@ -6003,12 +6600,12 @@ var StentorServerChat = /** @class */ (function () {
6003
6600
  // TODO: Authenticate - or at least tell the server who you are
6004
6601
  // Socket events
6005
6602
  this.socket.on("account_status", function (data) {
6006
- log("SERVER: account_status: " + JSON.stringify(data));
6603
+ log("SERVER: account_status: ".concat(JSON.stringify(data)));
6007
6604
  // Register the "communication" with the server
6008
6605
  if (!_this.token) {
6009
- _this.token = uuid();
6606
+ _this.token = uuid_1();
6010
6607
  dispatch(receiveToken(_this.token));
6011
- log("CLIENT: created token: " + _this.token);
6608
+ log("CLIENT: created token: ".concat(_this.token));
6012
6609
  }
6013
6610
  _this.socket.emit("connection update", _this.token);
6014
6611
  dispatch({
@@ -6020,7 +6617,7 @@ var StentorServerChat = /** @class */ (function () {
6020
6617
  });
6021
6618
  });
6022
6619
  this.socket.on("new message", function (data) {
6023
- log("SERVER: new message: " + JSON.stringify(data));
6620
+ log("SERVER: new message: ".concat(JSON.stringify(data)));
6024
6621
  _this.dispatch({
6025
6622
  type: "chat",
6026
6623
  detail: {
@@ -6035,7 +6632,7 @@ var StentorServerChat = /** @class */ (function () {
6035
6632
  });
6036
6633
  });
6037
6634
  this.socket.on("user joined", function (data) {
6038
- log("SERVER: user joined: " + JSON.stringify(data));
6635
+ log("SERVER: user joined: ".concat(JSON.stringify(data)));
6039
6636
  _this.visitorInfo.token = data.token;
6040
6637
  _this.dispatch({
6041
6638
  type: "chat",
@@ -6051,7 +6648,7 @@ var StentorServerChat = /** @class */ (function () {
6051
6648
  });
6052
6649
  });
6053
6650
  this.socket.on("user left", function (data) {
6054
- log("SERVER: user left: " + JSON.stringify(data));
6651
+ log("SERVER: user left: ".concat(JSON.stringify(data)));
6055
6652
  _this.dispatch({
6056
6653
  type: "chat",
6057
6654
  detail: {
@@ -6065,7 +6662,7 @@ var StentorServerChat = /** @class */ (function () {
6065
6662
  });
6066
6663
  });
6067
6664
  this.socket.on("typing", function (data) {
6068
- log("SERVER: typing: " + JSON.stringify(data));
6665
+ log("SERVER: typing: ".concat(JSON.stringify(data)));
6069
6666
  _this.dispatch({
6070
6667
  type: "chat",
6071
6668
  detail: {
@@ -6079,7 +6676,7 @@ var StentorServerChat = /** @class */ (function () {
6079
6676
  });
6080
6677
  });
6081
6678
  this.socket.on("stop typing", function (data) {
6082
- log("SERVER: stop typing: " + JSON.stringify(data));
6679
+ log("SERVER: stop typing: ".concat(JSON.stringify(data)));
6083
6680
  _this.dispatch({
6084
6681
  type: "chat",
6085
6682
  detail: {
@@ -6163,18 +6760,18 @@ function createChatServerCore(config, token) {
6163
6760
  case "local":
6164
6761
  return new StentorLocalChat();
6165
6762
  default:
6166
- throw throwBadKind(config.type);
6763
+ throw throwBadKind$1(config.type);
6167
6764
  }
6168
6765
  }
6169
6766
  function createChatServer(config, token) {
6170
6767
  return new LogChat(createChatServerCore(config, token));
6171
6768
  }
6172
- var ChatServerContext = React.createContext(null);
6769
+ var ChatServerContext = React$1.createContext(null);
6173
6770
  function useChatServer(config) {
6174
- var _a = React.useState(), server = _a[0], setServer = _a[1];
6771
+ var _a = React$1.useState(), server = _a[0], setServer = _a[1];
6175
6772
  var token = reactRedux.useSelector(function (state) { return state.connection.token; });
6176
6773
  var dispatch = useChatDispatch();
6177
- React.useEffect(function () {
6774
+ React$1.useEffect(function () {
6178
6775
  var newServer = createChatServer(config, token);
6179
6776
  newServer.init(dispatch);
6180
6777
  setServer(newServer);
@@ -6187,8 +6784,8 @@ function useChatServer(config) {
6187
6784
 
6188
6785
  function useChatServerDispatch() {
6189
6786
  var inner = useChatDispatch();
6190
- var chatServer = React.useContext(ChatServerContext);
6191
- return React.useCallback(function (action) {
6787
+ var chatServer = React$1.useContext(ChatServerContext);
6788
+ return React$1.useCallback(function (action) {
6192
6789
  if (!action) {
6193
6790
  console.warn("react bug? Someone invokes with null");
6194
6791
  return;
@@ -6212,8 +6809,8 @@ var ChatChipsContainer = function (_) {
6212
6809
  dispatch(executeAction(getChatServerActionLinkLabel(option)));
6213
6810
  }
6214
6811
  }
6215
- return (React__default["default"].createElement("div", { className: "message-list-container__chips " + (!(chips === null || chips === void 0 ? void 0 : chips.length) ? "message-list-container__chips--empty" : "") },
6216
- React__default["default"].createElement(ChatChips, { options: chips, onOptionClick: optionOnChange })));
6812
+ return (React__default$1["default"].createElement("div", { className: "message-list-container__chips ".concat(!(chips === null || chips === void 0 ? void 0 : chips.length) ? "message-list-container__chips--empty" : "") },
6813
+ React__default$1["default"].createElement(ChatChips, { options: chips, onOptionClick: optionOnChange })));
6217
6814
  };
6218
6815
 
6219
6816
  var ChatMenuItem = function (props) {
@@ -6222,31 +6819,31 @@ var ChatMenuItem = function (props) {
6222
6819
  props.onClick(props.label);
6223
6820
  }
6224
6821
  }
6225
- return (React__default["default"].createElement("button", { type: "button", className: "chat-menu-item", onClick: handleClick }, props.label));
6822
+ return (React__default$1["default"].createElement("button", { type: "button", className: "chat-menu-item", onClick: handleClick }, props.label));
6226
6823
  };
6227
6824
 
6228
6825
  var ChatMenu = function (props) {
6229
6826
  var items = props.items;
6230
- return (React__default["default"].createElement("div", { className: "chat-menu " + (props.opened ? "chat-menu--opened" : "chat-menu--closed") }, items.map(function (label, i) {
6231
- return React__default["default"].createElement(ChatMenuItem, { key: i, onClick: props.onItemClick, label: label });
6827
+ return (React__default$1["default"].createElement("div", { className: "chat-menu ".concat(props.opened ? "chat-menu--opened" : "chat-menu--closed") }, items.map(function (label, i) {
6828
+ return React__default$1["default"].createElement(ChatMenuItem, { key: i, onClick: props.onItemClick, label: label });
6232
6829
  })));
6233
6830
  };
6234
6831
 
6235
- var UnknownMessage = function () { return React__default["default"].createElement(React__default["default"].Fragment, null); };
6832
+ var UnknownMessage = function () { return React__default$1["default"].createElement(React__default$1["default"].Fragment, null); };
6236
6833
 
6237
6834
  function renderAvatar(entity) {
6238
- return (React__default["default"].createElement("div", { className: "xappw-chat-msg-part__avatar" },
6239
- React__default["default"].createElement(Avatar, { entity: entity })));
6835
+ return (React__default$1["default"].createElement("div", { className: "xappw-chat-msg-part__avatar" },
6836
+ React__default$1["default"].createElement(Avatar, { entity: entity })));
6240
6837
  }
6241
6838
  var ChatMessagePart = function (props) {
6242
- return (React__default["default"].createElement("div", { className: "xappw-chat-msg-part" },
6839
+ return (React__default$1["default"].createElement("div", { className: "xappw-chat-msg-part" },
6243
6840
  props.showAvatar && renderAvatar(props.user),
6244
6841
  props.children));
6245
6842
  };
6246
6843
 
6247
6844
  function useExecuteActionCallback() {
6248
6845
  var dispatch = useChatServerDispatch();
6249
- return React.useCallback(function (text, token) {
6846
+ return React$1.useCallback(function (text, token) {
6250
6847
  dispatch(executeAction(text, token));
6251
6848
  }, [dispatch]);
6252
6849
  }
@@ -6254,7 +6851,7 @@ function useExecuteActionCallback() {
6254
6851
  function useButtonCallback() {
6255
6852
  var handleOpenUrl = useOpenUrlCallback();
6256
6853
  var executeAction = useExecuteActionCallback();
6257
- return React.useCallback(function (button) {
6854
+ return React$1.useCallback(function (button) {
6258
6855
  if (button.actionUrl) {
6259
6856
  handleOpenUrl(button.actionUrl);
6260
6857
  }
@@ -6287,17 +6884,17 @@ function isList(display) {
6287
6884
 
6288
6885
  var CardMiddlewareWidget = function (props) {
6289
6886
  var msg = props.msg, ctx = props.ctx;
6290
- var card = React.useMemo(function () { return convertFromCardDisplay(msg); }, [msg]);
6887
+ var card = React$1.useMemo(function () { return convertFromCardDisplay(msg); }, [msg]);
6291
6888
  var user = ctx.user;
6292
6889
  var handleButton = useButtonCallback();
6293
- return (React__default["default"].createElement(ChatMessagePart, { showAvatar: true, user: user },
6294
- React__default["default"].createElement("div", { className: "chat-msg" },
6295
- React__default["default"].createElement(ChatCard, { card: card, onButtonClick: handleButton }))));
6890
+ return (React__default$1["default"].createElement(ChatMessagePart, { showAvatar: true, user: user },
6891
+ React__default$1["default"].createElement("div", { className: "chat-msg" },
6892
+ React__default$1["default"].createElement(ChatCard, { card: card, onButtonClick: handleButton }))));
6296
6893
  };
6297
6894
  var CardMiddleware = function (next) { return function (props) {
6298
6895
  var msg = props.msg, ctx = props.ctx;
6299
6896
  if (isCard(msg)) {
6300
- return React__default["default"].createElement(CardMiddlewareWidget, { msg: msg, ctx: ctx });
6897
+ return React__default$1["default"].createElement(CardMiddlewareWidget, { msg: msg, ctx: ctx });
6301
6898
  }
6302
6899
  return next(props);
6303
6900
  }; };
@@ -6318,11 +6915,11 @@ function createSubscribableArray(originalValue) {
6318
6915
  return {
6319
6916
  getArray: function () { return cache; },
6320
6917
  push: function (val) {
6321
- cache = __spreadArray(__spreadArray([], cache, true), [val], false);
6918
+ cache = __spreadArray$1(__spreadArray$1([], cache, true), [val], false);
6322
6919
  notify();
6323
6920
  },
6324
6921
  unshift: function (val) {
6325
- cache = __spreadArray([val], cache, true);
6922
+ cache = __spreadArray$1([val], cache, true);
6326
6923
  notify();
6327
6924
  },
6328
6925
  subscribe: function (callback) {
@@ -6339,9 +6936,9 @@ function createSubscribableArray(originalValue) {
6339
6936
  };
6340
6937
  }
6341
6938
  function useSubscribableArray(array) {
6342
- var _a = React.useState(array.getArray()), res = _a[0], setRes = _a[1];
6939
+ var _a = React$1.useState(array.getArray()), res = _a[0], setRes = _a[1];
6343
6940
  var mounted = useIsMounted();
6344
- React.useEffect(function () {
6941
+ React$1.useEffect(function () {
6345
6942
  var subscription = array.subscribe(function (newVal) {
6346
6943
  if (mounted()) {
6347
6944
  setRes(newVal);
@@ -6373,24 +6970,24 @@ function useGlobalSubscribableArray(storage) {
6373
6970
  }
6374
6971
  function useLateMiddlewaresBuilder(storage) {
6375
6972
  var middlewares = useGlobalSubscribableArray(storage);
6376
- return React.useMemo(function () { return joinMiddlewares(middlewares); }, [middlewares]);
6973
+ return React$1.useMemo(function () { return joinMiddlewares(middlewares); }, [middlewares]);
6377
6974
  }
6378
- var storage = createStorage(window, "xappMsgMiddlewares");
6975
+ var storage = createStorage(globalThis, "xappMsgMiddlewares");
6379
6976
  function useLateMiddleware() {
6380
6977
  return useLateMiddlewaresBuilder(storage);
6381
6978
  }
6382
6979
 
6383
6980
  function getSvg() {
6384
- return (React__default["default"].createElement("svg", { viewBox: "0 0 20 20" },
6385
- React__default["default"].createElement("path", { d: "M17 17H3V3h5V1H3a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-5h-2z" }),
6386
- React__default["default"].createElement("path", { d: "M19 1h-8l3.29 3.29-5.73 5.73 1.42 1.42 5.73-5.73L19 9V1z" })));
6981
+ return (React__default$1["default"].createElement("svg", { viewBox: "0 0 20 20" },
6982
+ React__default$1["default"].createElement("path", { d: "M17 17H3V3h5V1H3a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-5h-2z" }),
6983
+ React__default$1["default"].createElement("path", { d: "M19 1h-8l3.29 3.29-5.73 5.73 1.42 1.42 5.73-5.73L19 9V1z" })));
6387
6984
  }
6388
6985
  var ExternalLink = function (props) {
6389
6986
  var url = props.url;
6390
- var handleClick = React.useCallback(function (ev) {
6987
+ var handleClick = React$1.useCallback(function (ev) {
6391
6988
  ev.preventDefault();
6392
6989
  }, []);
6393
- return (React__default["default"].createElement("a", { href: url, target: "_blank", rel: "noreferrer", className: props.className, onClick: handleClick }, getSvg()));
6990
+ return (React__default$1["default"].createElement("a", { href: url, target: "_blank", rel: "noreferrer", className: props.className, onClick: handleClick }, getSvg()));
6394
6991
  };
6395
6992
 
6396
6993
  function firstIndex(val, patterns) {
@@ -6442,7 +7039,7 @@ var parsers = [
6442
7039
  pathParser,
6443
7040
  queryParser
6444
7041
  ];
6445
- function parse$1(val) {
7042
+ function parse(val) {
6446
7043
  var parts = [];
6447
7044
  var rest = val;
6448
7045
  for (var _i = 0, parsers_1 = parsers; _i < parsers_1.length; _i++) {
@@ -6461,7 +7058,7 @@ var ellipsis = "/...";
6461
7058
  function reduceLink(url, maxLength) {
6462
7059
  if (url.length < maxLength)
6463
7060
  return url;
6464
- var parts = parse$1(url); // [scheme, domain, port, path, query, hash]
7061
+ var parts = parse(url); // [scheme, domain, port, path, query, hash]
6465
7062
  function getText() {
6466
7063
  return parts.join("");
6467
7064
  }
@@ -6500,10 +7097,10 @@ function reduceLink(url, maxLength) {
6500
7097
 
6501
7098
  var SmartLink = function (props) {
6502
7099
  var url = props.url, className = props.className;
6503
- var handleClick = React.useCallback(function (ev) {
7100
+ var handleClick = React$1.useCallback(function (ev) {
6504
7101
  ev.preventDefault();
6505
7102
  }, []);
6506
- return (React__default["default"].createElement("a", { href: url, target: "_blank", rel: "noreferrer", className: className, onClick: handleClick }, reduceLink(url, 40)));
7103
+ return (React__default$1["default"].createElement("a", { href: url, target: "_blank", rel: "noreferrer", className: className, onClick: handleClick }, reduceLink(url, 40)));
6507
7104
  };
6508
7105
 
6509
7106
  var ListItem = function (props) {
@@ -6511,66 +7108,66 @@ var ListItem = function (props) {
6511
7108
  var item = props.item;
6512
7109
  var layout = props.layout || "normal";
6513
7110
  var url = item.url || item.imageActionUrl;
6514
- return (React__default["default"].createElement(ActionItem, { className: "xappw-vlist-item-container", item: item, onButtonClick: props.onButtonClick, onExecute: props.onExecute, onOpenUrl: props.onOpenUrl },
6515
- React__default["default"].createElement("div", { className: "xappw-vlist-item xappw-vlist-item--" + layout },
6516
- React__default["default"].createElement("div", { className: "xappw-vlist-item__description" },
6517
- item.title && React__default["default"].createElement("div", { className: "xappw-vlist-item__title" },
6518
- React__default["default"].createElement("span", null, item.title)),
6519
- url && React__default["default"].createElement(SmartLink, { url: url, className: "xappw-vlist-item__link" }),
6520
- item.subTitle && React__default["default"].createElement("div", { className: "xappw-vlist-item__subtitle" },
6521
- React__default["default"].createElement("span", null, item.subTitle)),
6522
- !!((_a = item.buttons) === null || _a === void 0 ? void 0 : _a.length) && React__default["default"].createElement(ChatActionButtons, { buttons: item.buttons, onClick: props.onButtonClick })),
6523
- React__default["default"].createElement("div", { className: "xappw-vlist-item__side" },
6524
- url && React__default["default"].createElement(ExternalLink, { url: "url", className: "xappw-vlist-item__external-link" }),
6525
- React__default["default"].createElement(ActionItemImage, { item: item, className: "xappw-vlist-item__img", emptyImageVisible: props.emptyImageVisible })))));
7111
+ return (React__default$1["default"].createElement(ActionItem, { className: "xappw-vlist-item-container", item: item, onButtonClick: props.onButtonClick, onExecute: props.onExecute, onOpenUrl: props.onOpenUrl },
7112
+ React__default$1["default"].createElement("div", { className: "xappw-vlist-item xappw-vlist-item--".concat(layout) },
7113
+ React__default$1["default"].createElement("div", { className: "xappw-vlist-item__description" },
7114
+ item.title && React__default$1["default"].createElement("div", { className: "xappw-vlist-item__title" },
7115
+ React__default$1["default"].createElement("span", null, item.title)),
7116
+ url && React__default$1["default"].createElement(SmartLink, { url: url, className: "xappw-vlist-item__link" }),
7117
+ item.subTitle && React__default$1["default"].createElement("div", { className: "xappw-vlist-item__subtitle" },
7118
+ React__default$1["default"].createElement("span", null, item.subTitle)),
7119
+ !!((_a = item.buttons) === null || _a === void 0 ? void 0 : _a.length) && React__default$1["default"].createElement(ChatActionButtons, { buttons: item.buttons, onClick: props.onButtonClick })),
7120
+ React__default$1["default"].createElement("div", { className: "xappw-vlist-item__side" },
7121
+ url && React__default$1["default"].createElement(ExternalLink, { url: "url", className: "xappw-vlist-item__external-link" }),
7122
+ React__default$1["default"].createElement(ActionItemImage, { item: item, className: "xappw-vlist-item__img", emptyImageVisible: props.emptyImageVisible })))));
6526
7123
  };
6527
7124
 
6528
7125
  var List = function (props) {
6529
7126
  var list = props.list;
6530
- var listRef = React.useRef(null);
7127
+ var listRef = React$1.useRef(null);
6531
7128
  var hasImage = list.items.some(function (item) { return item.imageUrl; });
6532
7129
  var titlesOnly = !list.items.some(function (item) { var _a; return item.subTitle || ((_a = item.buttons) === null || _a === void 0 ? void 0 : _a.length); });
6533
7130
  var listItems = list.items.map(function (item, itemIndex) {
6534
- return (React__default["default"].createElement("div", { className: "xappw-vlist-container__item", key: "item-key-" + itemIndex },
6535
- React__default["default"].createElement(ListItem, { item: item, layout: titlesOnly ? "titles" : "normal", emptyImageVisible: hasImage, onExecute: props.onExecute, onButtonClick: props.onButtonClick, onOpenUrl: props.onOpenUrl })));
7131
+ return (React__default$1["default"].createElement("div", { className: "xappw-vlist-container__item", key: "item-key-".concat(itemIndex) },
7132
+ React__default$1["default"].createElement(ListItem, { item: item, layout: titlesOnly ? "titles" : "normal", emptyImageVisible: hasImage, onExecute: props.onExecute, onButtonClick: props.onButtonClick, onOpenUrl: props.onOpenUrl })));
6536
7133
  });
6537
- return (React__default["default"].createElement("div", { className: "xappw-vlist" },
6538
- React__default["default"].createElement("div", { ref: listRef, className: "xappw-vlist-container" },
6539
- props.list.title && React__default["default"].createElement("div", { className: "xappw-vlist__header" }, props.list.title),
7134
+ return (React__default$1["default"].createElement("div", { className: "xappw-vlist" },
7135
+ React__default$1["default"].createElement("div", { ref: listRef, className: "xappw-vlist-container" },
7136
+ props.list.title && React__default$1["default"].createElement("div", { className: "xappw-vlist__header" }, props.list.title),
6540
7137
  listItems)));
6541
7138
  };
6542
7139
 
6543
7140
  var ListMiddlewareWidget = function (props) {
6544
7141
  var msg = props.msg, ctx = props.ctx;
6545
- var list = React.useMemo(function () { return convertFromListDisplay(msg); }, [msg]);
7142
+ var list = React$1.useMemo(function () { return convertFromListDisplay(msg); }, [msg]);
6546
7143
  var handleExecute = useExecuteActionCallback();
6547
7144
  var handleButton = useButtonCallback();
6548
7145
  var user = ctx.user;
6549
- return (React__default["default"].createElement(ChatMessagePart, { showAvatar: true, user: user },
6550
- list.type === "CAROUSEL" && React__default["default"].createElement("div", { className: "chat-msg chat-msg--fullwidth chat-msg--no-ava" },
6551
- React__default["default"].createElement(Carousel, { list: list, onExecute: handleExecute, onButtonClick: handleButton, onOpenUrl: ctx.openUrl })),
6552
- list.type === "LIST" && React__default["default"].createElement("div", { className: "chat-msg chat-msg--expand" },
6553
- React__default["default"].createElement(List, { list: list, onExecute: handleExecute, onButtonClick: handleButton, onOpenUrl: ctx.openUrl }))));
7146
+ return (React__default$1["default"].createElement(ChatMessagePart, { showAvatar: true, user: user },
7147
+ list.type === "CAROUSEL" && React__default$1["default"].createElement("div", { className: "chat-msg chat-msg--fullwidth chat-msg--no-ava" },
7148
+ React__default$1["default"].createElement(Carousel, { list: list, onExecute: handleExecute, onButtonClick: handleButton, onOpenUrl: ctx.openUrl })),
7149
+ list.type === "LIST" && React__default$1["default"].createElement("div", { className: "chat-msg chat-msg--expand" },
7150
+ React__default$1["default"].createElement(List, { list: list, onExecute: handleExecute, onButtonClick: handleButton, onOpenUrl: ctx.openUrl }))));
6554
7151
  };
6555
7152
  var ListMiddleware = function (next) { return function (props) {
6556
7153
  var msg = props.msg, ctx = props.ctx;
6557
7154
  if (isList(msg)) {
6558
- return React__default["default"].createElement(ListMiddlewareWidget, { msg: msg, ctx: ctx });
7155
+ return React__default$1["default"].createElement(ListMiddlewareWidget, { msg: msg, ctx: ctx });
6559
7156
  }
6560
7157
  return next(props);
6561
7158
  }; };
6562
7159
 
6563
7160
  var MultiSelect = function (props) {
6564
7161
  var items = props.items, checked = props.checked, onChange = props.onChange;
6565
- var handleToggle = React.useCallback(function (ev) {
7162
+ var handleToggle = React$1.useCallback(function (ev) {
6566
7163
  var _a;
6567
7164
  var id = ev.target.value;
6568
7165
  onChange(__assign(__assign({}, checked), (_a = {}, _a[id] = !checked[id], _a)));
6569
7166
  }, [checked, onChange]);
6570
- return (React__default["default"].createElement("ul", { className: "xappw-multiselect" }, items.map(function (item) { return (React__default["default"].createElement("li", { key: item.id },
6571
- React__default["default"].createElement("label", null,
6572
- React__default["default"].createElement("input", { type: "checkbox", checked: checked[item.id] || false, onChange: handleToggle, value: item.id }),
6573
- React__default["default"].createElement("span", null, item.title)))); })));
7167
+ return (React__default$1["default"].createElement("ul", { className: "xappw-multiselect" }, items.map(function (item) { return (React__default$1["default"].createElement("li", { key: item.id },
7168
+ React__default$1["default"].createElement("label", null,
7169
+ React__default$1["default"].createElement("input", { type: "checkbox", checked: checked[item.id] || false, onChange: handleToggle, value: item.id }),
7170
+ React__default$1["default"].createElement("span", null, item.title)))); })));
6574
7171
  };
6575
7172
 
6576
7173
  function isMultiSelect(display) {
@@ -6581,10 +7178,10 @@ function convertToMultiSelectItems(display) {
6581
7178
  }
6582
7179
  var MultiSelectMiddlewareWidget = function (props) {
6583
7180
  var msg = props.msg, ctx = props.ctx;
6584
- var items = React.useMemo(function () { return convertToMultiSelectItems(msg); }, [msg]);
7181
+ var items = React$1.useMemo(function () { return convertToMultiSelectItems(msg); }, [msg]);
6585
7182
  var user = ctx.user;
6586
- var _a = React.useState({}), checked = _a[0], setChecked = _a[1];
6587
- var handleSubmit = React.useCallback(function () {
7183
+ var _a = React$1.useState({}), checked = _a[0], setChecked = _a[1];
7184
+ var handleSubmit = React$1.useCallback(function () {
6588
7185
  ctx.send({
6589
7186
  type: "custom",
6590
7187
  payload: JSON.stringify({
@@ -6594,16 +7191,16 @@ var MultiSelectMiddlewareWidget = function (props) {
6594
7191
  })
6595
7192
  });
6596
7193
  }, [ctx, checked]);
6597
- return (React__default["default"].createElement(ChatMessagePart, { showAvatar: true, user: user },
6598
- React__default["default"].createElement("div", { className: "chat-msg" },
6599
- React__default["default"].createElement("div", null,
6600
- React__default["default"].createElement(MultiSelect, { items: items, checked: checked, onChange: setChecked }),
6601
- React__default["default"].createElement(ActionButton, { label: "Submit", onClick: handleSubmit })))));
7194
+ return (React__default$1["default"].createElement(ChatMessagePart, { showAvatar: true, user: user },
7195
+ React__default$1["default"].createElement("div", { className: "chat-msg" },
7196
+ React__default$1["default"].createElement("div", null,
7197
+ React__default$1["default"].createElement(MultiSelect, { items: items, checked: checked, onChange: setChecked }),
7198
+ React__default$1["default"].createElement(ActionButton, { label: "Submit", onClick: handleSubmit })))));
6602
7199
  };
6603
7200
  var MultiSelectMiddleware = function (next) { return function (props) {
6604
7201
  var msg = props.msg, ctx = props.ctx;
6605
7202
  if (isMultiSelect(msg)) {
6606
- return React__default["default"].createElement(MultiSelectMiddlewareWidget, { msg: msg, ctx: ctx });
7203
+ return React__default$1["default"].createElement(MultiSelectMiddlewareWidget, { msg: msg, ctx: ctx });
6607
7204
  }
6608
7205
  return next(props);
6609
7206
  }; };
@@ -6615,14 +7212,14 @@ var StandardMiddlewaresBuilder = joinMiddlewares([
6615
7212
  ]);
6616
7213
  function useStandardMiddlewareBuilder() {
6617
7214
  var lateMiddleware = useLateMiddleware();
6618
- return React.useMemo(function () { return joinMiddlewares([
7215
+ return React$1.useMemo(function () { return joinMiddlewares([
6619
7216
  lateMiddleware,
6620
7217
  StandardMiddlewaresBuilder,
6621
7218
  ]); }, [lateMiddleware]);
6622
7219
  }
6623
7220
  function useStandardMiddleware() {
6624
7221
  var builder = useStandardMiddlewareBuilder();
6625
- return React.useMemo(function () { return builder(UnknownMessage); }, [builder]);
7222
+ return React$1.useMemo(function () { return builder(UnknownMessage); }, [builder]);
6626
7223
  }
6627
7224
  var StandardMiddlewares = StandardMiddlewaresBuilder(UnknownMessage);
6628
7225
 
@@ -6633,17 +7230,17 @@ function getTailSvgPath(owner) {
6633
7230
  return "m 0 0 v 240 h 60 c -40 -40 -60 -160 -60 -240";
6634
7231
  }
6635
7232
  function getTailSvg(owner) {
6636
- return (React__default["default"].createElement("svg", { className: "chat-text-bubble__tail", xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 80 240" },
6637
- React__default["default"].createElement("path", { d: getTailSvgPath(owner), fill: "currentColor" })));
7233
+ return (React__default$1["default"].createElement("svg", { className: "chat-text-bubble__tail", xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 80 240" },
7234
+ React__default$1["default"].createElement("path", { d: getTailSvgPath(owner), fill: "currentColor" })));
6638
7235
  }
6639
7236
  var ChatMessageBubble = function (props) {
6640
7237
  var owner = props.owner, onClick = props.onClick;
6641
- var handleClick = React.useCallback(function () {
7238
+ var handleClick = React$1.useCallback(function () {
6642
7239
  if (onClick) {
6643
7240
  onClick();
6644
7241
  }
6645
7242
  }, [onClick]);
6646
- return (React__default["default"].createElement("div", { onClick: handleClick, className: "chat-text-bubble " + (owner === "mine" ? "chat-text-bubble--mine" : "chat-text-bubble--others") },
7243
+ return (React__default$1["default"].createElement("div", { onClick: handleClick, className: "chat-text-bubble ".concat(owner === "mine" ? "chat-text-bubble--mine" : "chat-text-bubble--others") },
6647
7244
  (props.hasTail) && getTailSvg(owner),
6648
7245
  props.children));
6649
7246
  };
@@ -6651,16 +7248,16 @@ var ChatMessageBubble = function (props) {
6651
7248
  var ChatMarkdownMessage = function (props) {
6652
7249
  var onOpenUrl = props.onOpenUrl;
6653
7250
  var agentMessage = isAgent(props.message.user.nick);
6654
- var ref = React.useRef();
7251
+ var ref = React$1.useRef();
6655
7252
  var html = props.message.msg.html;
6656
- var handleLinkClick = React.useCallback(function (ev) {
7253
+ var handleLinkClick = React$1.useCallback(function (ev) {
6657
7254
  if (onOpenUrl) {
6658
7255
  var link = ev.target;
6659
7256
  ev.preventDefault();
6660
7257
  onOpenUrl(link.href);
6661
7258
  }
6662
7259
  }, [onOpenUrl]);
6663
- React.useEffect(function () {
7260
+ React$1.useEffect(function () {
6664
7261
  if (ref.current) {
6665
7262
  ref.current.innerHTML = html;
6666
7263
  if (onOpenUrl) {
@@ -6677,10 +7274,10 @@ var ChatMarkdownMessage = function (props) {
6677
7274
  }
6678
7275
  return undefined;
6679
7276
  }, [ref, html, onOpenUrl, handleLinkClick]);
6680
- return (React__default["default"].createElement("div", { className: "chat-msg" },
6681
- React__default["default"].createElement("div", { className: "chat-text-container" },
6682
- React__default["default"].createElement(ChatMessageBubble, { owner: agentMessage ? "others" : "mine", hasTail: agentMessage && !props.sibling },
6683
- React__default["default"].createElement("div", { ref: ref })))));
7277
+ return (React__default$1["default"].createElement("div", { className: "chat-msg" },
7278
+ React__default$1["default"].createElement("div", { className: "chat-text-container" },
7279
+ React__default$1["default"].createElement(ChatMessageBubble, { owner: agentMessage ? "others" : "mine", hasTail: agentMessage && !props.sibling },
7280
+ React__default$1["default"].createElement("div", { ref: ref })))));
6684
7281
  };
6685
7282
 
6686
7283
  var ChatPermissionMessage = function (props) {
@@ -6690,21 +7287,21 @@ var ChatPermissionMessage = function (props) {
6690
7287
  var author = message.user;
6691
7288
  var allowLabel = "Allow";
6692
7289
  var denyLabel = "Deny";
6693
- var writeAsAgent = React.useCallback(function (msg) {
7290
+ var writeAsAgent = React$1.useCallback(function (msg) {
6694
7291
  ctx.write({
6695
7292
  type: "msg",
6696
7293
  user: author,
6697
7294
  msg: msg
6698
7295
  });
6699
7296
  }, [ctx, author]);
6700
- var writeAsUser = React.useCallback(function (msg) {
7297
+ var writeAsUser = React$1.useCallback(function (msg) {
6701
7298
  ctx.write({
6702
7299
  type: "msg",
6703
7300
  user: user,
6704
7301
  msg: msg
6705
7302
  });
6706
7303
  }, [ctx, user]);
6707
- var handleFail = React.useCallback(function () {
7304
+ var handleFail = React$1.useCallback(function () {
6708
7305
  ctx.send({
6709
7306
  type: "msg",
6710
7307
  user: undefined,
@@ -6713,14 +7310,14 @@ var ChatPermissionMessage = function (props) {
6713
7310
  }
6714
7311
  });
6715
7312
  }, [ctx]);
6716
- var handleSend = React.useCallback(function (msg) {
7313
+ var handleSend = React$1.useCallback(function (msg) {
6717
7314
  ctx.send({
6718
7315
  type: "permissionGrant",
6719
7316
  user: author,
6720
7317
  msg: msg
6721
7318
  });
6722
7319
  }, [author, ctx]);
6723
- var handleResult = React.useCallback(function (position, userMsg) {
7320
+ var handleResult = React$1.useCallback(function (position, userMsg) {
6724
7321
  handleSend({
6725
7322
  text: userMsg,
6726
7323
  location: position ? {
@@ -6737,10 +7334,10 @@ var ChatPermissionMessage = function (props) {
6737
7334
  writeAsAgent(agentMsg);
6738
7335
  }
6739
7336
  }, [permissionRequest, writeAsUser, writeAsAgent, handleSend]);
6740
- var handleDeny = React.useCallback(function (label) {
7337
+ var handleDeny = React$1.useCallback(function (label) {
6741
7338
  handleResult(undefined, label);
6742
7339
  }, [handleResult]);
6743
- var handleAllow = React.useCallback(function (label) {
7340
+ var handleAllow = React$1.useCallback(function (label) {
6744
7341
  if (navigator.geolocation) {
6745
7342
  navigator.geolocation.getCurrentPosition(function (position) {
6746
7343
  handleResult(position, label);
@@ -6750,20 +7347,20 @@ var ChatPermissionMessage = function (props) {
6750
7347
  }
6751
7348
  }, [handleFail, handleResult]);
6752
7349
  if (!permissionRequest) {
6753
- return React__default["default"].createElement(React__default["default"].Fragment, null);
7350
+ return React__default$1["default"].createElement(React__default$1["default"].Fragment, null);
6754
7351
  }
6755
- return (React__default["default"].createElement("div", { className: "chat-msg" },
6756
- React__default["default"].createElement("div", { className: "buttons-container" },
6757
- React__default["default"].createElement(ActionButton, { label: allowLabel, addClass: "button", onClick: handleAllow }),
6758
- React__default["default"].createElement(ActionButton, { label: denyLabel, addClass: "button", onClick: handleDeny }))));
7352
+ return (React__default$1["default"].createElement("div", { className: "chat-msg" },
7353
+ React__default$1["default"].createElement("div", { className: "buttons-container" },
7354
+ React__default$1["default"].createElement(ActionButton, { label: allowLabel, addClass: "button", onClick: handleAllow }),
7355
+ React__default$1["default"].createElement(ActionButton, { label: denyLabel, addClass: "button", onClick: handleDeny }))));
6759
7356
  };
6760
7357
 
6761
7358
  var ChatTextMessage = function (props) {
6762
7359
  var agentMessage = isAgent(props.message.user.nick);
6763
- return (React__default["default"].createElement("div", { className: "chat-msg" },
6764
- React__default["default"].createElement("div", { className: "chat-text-container" },
6765
- React__default["default"].createElement(ChatMessageBubble, { owner: agentMessage ? "others" : "mine", hasTail: agentMessage && !props.sibling },
6766
- React__default["default"].createElement("span", null, props.message.msg.text)))));
7360
+ return (React__default$1["default"].createElement("div", { className: "chat-msg" },
7361
+ React__default$1["default"].createElement("div", { className: "chat-text-container" },
7362
+ React__default$1["default"].createElement(ChatMessageBubble, { owner: agentMessage ? "others" : "mine", hasTail: agentMessage && !props.sibling },
7363
+ React__default$1["default"].createElement("span", null, props.message.msg.text)))));
6767
7364
  };
6768
7365
 
6769
7366
  function getClassName(msg) {
@@ -6787,30 +7384,30 @@ var ChatMessage = function (props) {
6787
7384
  // Here is the deal. If we have text (output speech), then text - card - list - options
6788
7385
  // OR card OR list only. Avatar with text bubble.
6789
7386
  var avaKey = avaKeys.find(function (key) { return !!msg[key]; });
6790
- return (React__default["default"].createElement(React__default["default"].Fragment, null,
7387
+ return (React__default$1["default"].createElement(React__default$1["default"].Fragment, null,
6791
7388
  msg.text &&
6792
- React__default["default"].createElement(ChatMessagePart, { showAvatar: avaKey === "text", user: user },
6793
- React__default["default"].createElement(ChatTextMessage, { message: props.message, sibling: props.sibling })),
7389
+ React__default$1["default"].createElement(ChatMessagePart, { showAvatar: avaKey === "text", user: user },
7390
+ React__default$1["default"].createElement(ChatTextMessage, { message: props.message, sibling: props.sibling })),
6794
7391
  msg.html &&
6795
- React__default["default"].createElement(ChatMessagePart, { showAvatar: avaKey === "html", user: user },
6796
- React__default["default"].createElement(ChatMarkdownMessage, { message: props.message, sibling: props.sibling, onOpenUrl: (_a = props.middlewareContext) === null || _a === void 0 ? void 0 : _a.openUrl })),
7392
+ React__default$1["default"].createElement(ChatMessagePart, { showAvatar: avaKey === "html", user: user },
7393
+ React__default$1["default"].createElement(ChatMarkdownMessage, { message: props.message, sibling: props.sibling, onOpenUrl: (_a = props.middlewareContext) === null || _a === void 0 ? void 0 : _a.openUrl })),
6797
7394
  msg.displays && middleware && msg.displays.map(function (display, index) {
6798
7395
  var Middleware = middleware;
6799
- return React__default["default"].createElement(Middleware, { key: index, msg: display, ctx: props.middlewareContext });
7396
+ return React__default$1["default"].createElement(Middleware, { key: index, msg: display, ctx: props.middlewareContext });
6800
7397
  }),
6801
7398
  msg.permissionRequest &&
6802
- React__default["default"].createElement(ChatMessagePart, { showAvatar: avaKey === "permissionRequest", user: user },
6803
- React__default["default"].createElement(ChatPermissionMessage, { message: props.message, sibling: props.sibling, ctx: props.middlewareContext }))));
7399
+ React__default$1["default"].createElement(ChatMessagePart, { showAvatar: avaKey === "permissionRequest", user: user },
7400
+ React__default$1["default"].createElement(ChatPermissionMessage, { message: props.message, sibling: props.sibling, ctx: props.middlewareContext }))));
6804
7401
  }
6805
- return (React__default["default"].createElement(React__default["default"].Fragment, null));
7402
+ return (React__default$1["default"].createElement(React__default$1["default"].Fragment, null));
6806
7403
  }
6807
7404
  // empty
6808
- return (React__default["default"].createElement("div", { className: "chat-msg-container-wrapper " + (isAgent(props.message.user.nick) ? "agent" : "visitor") + " " + (props.sibling ? "sibling" : "") },
6809
- React__default["default"].createElement("div", { className: "chat-msg-container " + getClassName(props.message) }, renderByType())));
7405
+ return (React__default$1["default"].createElement("div", { className: "chat-msg-container-wrapper ".concat(isAgent(props.message.user.nick) ? "agent" : "visitor", " ").concat(props.sibling ? "sibling" : "") },
7406
+ React__default$1["default"].createElement("div", { className: "chat-msg-container ".concat(getClassName(props.message)) }, renderByType())));
6810
7407
  };
6811
7408
 
6812
7409
  function useExternalScript(url) {
6813
- React.useEffect(function () {
7410
+ React$1.useEffect(function () {
6814
7411
  if (!url) {
6815
7412
  return;
6816
7413
  }
@@ -6834,7 +7431,7 @@ function getSafeCh(ch) {
6834
7431
  if (ch >= "A" && ch <= "Z") {
6835
7432
  return ch;
6836
7433
  }
6837
- return "_" + ch.charCodeAt(0) + "_";
7434
+ return "_".concat(ch.charCodeAt(0), "_");
6838
7435
  }
6839
7436
  function getSrcId(url) {
6840
7437
  var res = "es-";
@@ -6847,7 +7444,7 @@ function getSrcId(url) {
6847
7444
  function useChatServerVisitorId() {
6848
7445
  var dispatch = useChatServerDispatch();
6849
7446
  var clientVisitorId = reactRedux.useSelector(function (state) { return state.visitorId; });
6850
- return React.useMemo(function () { return ({
7447
+ return React$1.useMemo(function () { return ({
6851
7448
  dispatch: dispatch,
6852
7449
  visitorId: clientVisitorId
6853
7450
  }); }, [dispatch, clientVisitorId]);
@@ -6855,8 +7452,8 @@ function useChatServerVisitorId() {
6855
7452
  //send whenever server settings or visitor id changes
6856
7453
  function useGreeting(active) {
6857
7454
  var curr = useChatServerVisitorId();
6858
- var snapshotRef = React.useRef(null);
6859
- React.useEffect(function () {
7455
+ var snapshotRef = React$1.useRef(null);
7456
+ React$1.useEffect(function () {
6860
7457
  if (active) {
6861
7458
  if (snapshotRef.current !== curr) {
6862
7459
  snapshotRef.current = curr;
@@ -6880,215 +7477,45 @@ function useGreeting(active) {
6880
7477
  }
6881
7478
 
6882
7479
  function match(item, pattern) {
6883
- var value = item.suggestion;
7480
+ var value = item.text;
6884
7481
  return value.toLocaleLowerCase().indexOf(pattern.toLocaleLowerCase()) >= 0;
6885
- }
6886
- function mapFormat$1(formats, length) {
6887
- var res = [];
6888
- var walkerIndex = 0;
6889
- for (var _i = 0, formats_1 = formats; _i < formats_1.length; _i++) {
6890
- var format = formats_1[_i];
6891
- var start = format.start, end = format.end, type = format.type;
6892
- if (walkerIndex < start) {
6893
- res.push({
6894
- type: "normal",
6895
- start: walkerIndex,
6896
- end: start
6897
- });
6898
- }
6899
- res.push({
6900
- type: type,
6901
- start: start,
6902
- end: end
6903
- });
6904
- walkerIndex = end;
6905
- }
6906
- if (walkerIndex < length) {
6907
- res.push({
6908
- type: "normal",
6909
- start: walkerIndex,
6910
- end: length
6911
- });
6912
- }
6913
- return res;
6914
- }
6915
-
6916
- /**
6917
- * Append the provided query params to the URL
6918
- *
6919
- * It will overwrite existing params on the URL if there are conflicts
6920
- * @param url
6921
- * @param params
6922
- */
6923
- function addQueryParametersToURL(url, params) {
6924
- if (!url) {
6925
- return undefined;
6926
- }
6927
- var existingParams = new URL(url).searchParams;
6928
- params.forEach(function (value, key) {
6929
- existingParams.append(key, value);
6930
- });
6931
- var newUrl = new URL(url);
6932
- newUrl.search = existingParams.toString();
6933
- return newUrl;
6934
- }
6935
-
6936
- var defaultOptions = {};
6937
- function noop$1() {
6938
- }
6939
- function useJsonFetch(url, options) {
6940
- if (options === void 0) { options = defaultOptions; }
6941
- var _a = React.useState({
6942
- fetching: true
6943
- }), value = _a[0], setValue = _a[1];
6944
- var pause = options.pause;
6945
- React.useEffect(function () {
6946
- if (pause) {
6947
- setValue({
6948
- fetching: true
6949
- });
6950
- return noop$1;
6951
- }
6952
- var controller = new AbortController();
6953
- var signal = controller.signal;
6954
- var mounted = true;
6955
- (function () {
6956
- return __awaiter(this, void 0, void 0, function () {
6957
- var response, json, e_1;
6958
- return __generator(this, function (_a) {
6959
- switch (_a.label) {
6960
- case 0:
6961
- _a.trys.push([0, 4, , 5]);
6962
- return [4 /*yield*/, fetch(url, { signal: signal })];
6963
- case 1:
6964
- response = _a.sent();
6965
- if (!mounted) return [3 /*break*/, 3];
6966
- return [4 /*yield*/, response.json()];
6967
- case 2:
6968
- json = _a.sent();
6969
- if (response.ok) {
6970
- setValue({
6971
- fetching: false,
6972
- success: true,
6973
- data: json
6974
- });
6975
- }
6976
- else {
6977
- setValue({
6978
- fetching: false,
6979
- success: false,
6980
- error: json
6981
- });
6982
- }
6983
- _a.label = 3;
6984
- case 3: return [3 /*break*/, 5];
6985
- case 4:
6986
- e_1 = _a.sent();
6987
- if (e_1.name === "AbortError") {
6988
- return [2 /*return*/];
6989
- }
6990
- throw e_1;
6991
- case 5: return [2 /*return*/];
6992
- }
6993
- });
6994
- });
6995
- })();
6996
- return function () {
6997
- mounted = false;
6998
- controller.abort();
6999
- };
7000
- }, [url, pause]);
7001
- return value;
7002
7482
  }
7003
7483
 
7004
7484
  function useSuggestionsFetch(search, context) {
7005
7485
  var env = useWidgetEnv();
7006
7486
  var baseUrl = env === null || env === void 0 ? void 0 : env.autocompleteSuggestionsUrl;
7007
- var url = React.useMemo(function () {
7008
- var params = new URLSearchParams();
7009
- params.append("size", "5");
7010
- params.append("queryText", search);
7011
- if (context === null || context === void 0 ? void 0 : context.length) {
7012
- params.append("activeContexts", context.join(","));
7013
- }
7014
- return addQueryParametersToURL(baseUrl, params);
7015
- }, [search, context, baseUrl]);
7016
- var response = useJsonFetch(url ? "" + url.toString() : "", {
7017
- pause: !search || !baseUrl
7487
+ return useSuggestionsFetch_1({
7488
+ url: baseUrl,
7489
+ query: search,
7490
+ context: context
7018
7491
  });
7019
- return React.useMemo(function () {
7020
- if (!search) {
7021
- return undefined;
7022
- }
7023
- if (response.fetching === false) {
7024
- if (response.success) {
7025
- return response.data;
7026
- }
7027
- else {
7028
- return undefined;
7029
- }
7030
- }
7031
- return undefined;
7032
- }, [search, response]);
7033
7492
  }
7034
7493
 
7035
7494
  function norm(index, len) {
7036
7495
  return (index + len) % len;
7037
7496
  }
7038
- function mapFormat(format) {
7039
- var types = Object.keys(format);
7040
- var type = types[0];
7041
- var item = format[type];
7042
- return {
7043
- type: type,
7044
- start: item.start,
7045
- end: item.end
7046
- };
7047
- }
7048
- function mapFormats(formats) {
7049
- return formats.map(mapFormat);
7050
- }
7051
- function parseItem(responseItem) {
7052
- var suggestion = responseItem.suggestion;
7053
- return {
7054
- suggestion: suggestion,
7055
- answer: responseItem.answer,
7056
- type: responseItem.type,
7057
- format: mapFormats(responseItem.format)
7058
- };
7059
- }
7060
- function parse(response) {
7061
- return {
7062
- items: response.suggestions.map(parseItem)
7063
- };
7064
- }
7065
7497
  function useSuggestions(search, context) {
7066
- var _a = React.useState(), suggestions = _a[0], setSuggestions = _a[1];
7067
- var _b = React.useState(0), suggestionIndex = _b[0], setSuggestionIndex = _b[1];
7068
- var _c = React.useState(search), query = _c[0], setQuery = _c[1];
7069
- var _d = React.useState(context), contextState = _d[0], setContextState = _d[1];
7070
- React.useEffect(function () {
7498
+ var _a = React$1.useState(), suggestions = _a[0], setSuggestions = _a[1];
7499
+ var _b = React$1.useState(0), suggestionIndex = _b[0], setSuggestionIndex = _b[1];
7500
+ var _c = React$1.useState(search), query = _c[0], setQuery = _c[1];
7501
+ var _d = React$1.useState(context), contextState = _d[0], setContextState = _d[1];
7502
+ React$1.useEffect(function () {
7071
7503
  setQuery(search);
7072
7504
  }, [search]);
7073
- React.useEffect(function () {
7505
+ React$1.useEffect(function () {
7074
7506
  setContextState(context);
7075
7507
  }, [context]);
7076
- var suggestionItem = React.useMemo(function () {
7077
- if (suggestionIndex >= 0 && suggestions) {
7078
- return suggestions.items[suggestionIndex];
7079
- }
7080
- return undefined;
7081
- }, [suggestions, suggestionIndex]);
7082
- var shift = React.useCallback(function (delta) {
7508
+ var suggestionItem = React$1.useMemo(function () { return suggestions ? findItemByIndex_1(suggestions, suggestionIndex) : undefined; }, [suggestions, suggestionIndex]);
7509
+ var shift = React$1.useCallback(function (delta) {
7083
7510
  if (suggestions) {
7084
- var len_1 = suggestions.items.length;
7511
+ var len_1 = getItemsLength_1(suggestions);
7085
7512
  setSuggestionIndex(function (index) { return norm(index + delta + ((index < 0 && delta <= 0) ? 1 : 0), len_1); });
7086
7513
  }
7087
7514
  else {
7088
7515
  setSuggestionIndex(-1);
7089
7516
  }
7090
7517
  }, [suggestions]);
7091
- var execute = React.useCallback(function (cmd) {
7518
+ var execute = React$1.useCallback(function (cmd) {
7092
7519
  switch (cmd) {
7093
7520
  case "prev":
7094
7521
  shift(-1);
@@ -7103,20 +7530,26 @@ function useSuggestions(search, context) {
7103
7530
  break;
7104
7531
  }
7105
7532
  }, [shift]);
7106
- var suggestionsResponse = useSuggestionsFetch(query, contextState);
7107
- var raw = React.useMemo(function () {
7108
- return suggestionsResponse ? parse(suggestionsResponse) : undefined;
7109
- }, [suggestionsResponse]);
7110
- React.useEffect(function () {
7533
+ var suggestionsResponse = useSuggestionsFetch(query || "", contextState);
7534
+ var suggestionsData = suggestionsResponse.state === "success" ? suggestionsResponse.data : undefined;
7535
+ var raw = React$1.useMemo(function () {
7536
+ return suggestionsData ? parseSuggestionsResponse_1(suggestionsData) : undefined;
7537
+ }, [suggestionsData]);
7538
+ React$1.useEffect(function () {
7111
7539
  var prev = suggestionItem;
7112
7540
  setSuggestions(raw);
7113
7541
  if (prev && raw) {
7114
- var prevValue = prev.suggestion;
7115
- for (var i = 0; i < raw.items.length; i++) {
7116
- var item = raw.items[i];
7117
- if (match(item, prevValue)) {
7118
- setSuggestionIndex(i);
7119
- break;
7542
+ var prevValue = prev.text;
7543
+ var index = 0;
7544
+ for (var _i = 0, raw_1 = raw; _i < raw_1.length; _i++) {
7545
+ var group = raw_1[_i];
7546
+ for (var _a = 0, _b = group.items; _a < _b.length; _a++) {
7547
+ var item = _b[_a];
7548
+ if (match(item, prevValue)) {
7549
+ setSuggestionIndex(index);
7550
+ break;
7551
+ }
7552
+ index++;
7120
7553
  }
7121
7554
  }
7122
7555
  }
@@ -7124,7 +7557,7 @@ function useSuggestions(search, context) {
7124
7557
  setSuggestionIndex(-1);
7125
7558
  }
7126
7559
  }, [raw, suggestionItem]);
7127
- return React.useMemo(function () { return ({
7560
+ return React$1.useMemo(function () { return ({
7128
7561
  suggestions: suggestions,
7129
7562
  index: suggestionIndex,
7130
7563
  execute: execute,
@@ -7133,43 +7566,36 @@ function useSuggestions(search, context) {
7133
7566
  }
7134
7567
 
7135
7568
  var DrawerBars = function (props) {
7136
- return (React__default["default"].createElement("div", { className: "drawer-bars", onClick: props.onToggle },
7137
- React__default["default"].createElement("div", { className: "drawer-bar bar1" }),
7138
- React__default["default"].createElement("div", { className: "drawer-bar bar2" })));
7139
- };
7140
-
7141
- var IconButton = function (props) {
7142
- var type = props.type || "button";
7143
- var Icon = props.icon;
7144
- return (React__default["default"].createElement("button", { type: type, className: "xappw-icon-button " + (props.className || ""), onClick: props.onClick },
7145
- React__default["default"].createElement(Icon, null)));
7569
+ return (React__default$1["default"].createElement("div", { className: "drawer-bars", onClick: props.onToggle },
7570
+ React__default$1["default"].createElement("div", { className: "drawer-bar bar1" }),
7571
+ React__default$1["default"].createElement("div", { className: "drawer-bar bar2" })));
7146
7572
  };
7147
7573
 
7148
7574
  var CloseIcon = function () {
7149
7575
  // Sergey, I added this style, you will probably want to change it to be more appropriate
7150
- return (React__default["default"].createElement("svg", { style: { color: "grey", paddingRight: "5px" }, xmlns: "http://www.w3.org/2000/svg", fill: "currentColor", viewBox: "0 0 16 16" },
7151
- React__default["default"].createElement("path", { d: "M1.293 1.293a1 1 0 0 1 1.414 0L8 6.586l5.293-5.293a1 1 0 1 1 1.414 1.414L9.414 8l5.293 5.293a1 1 0 0 1-1.414 1.414L8 9.414l-5.293 5.293a1 1 0 0 1-1.414-1.414L6.586 8 1.293 2.707a1 1 0 0 1 0-1.414z" })));
7576
+ return (React__default$1["default"].createElement("svg", { style: { color: "grey", paddingRight: "5px" }, xmlns: "http://www.w3.org/2000/svg", fill: "currentColor", viewBox: "0 0 16 16" },
7577
+ React__default$1["default"].createElement("path", { d: "M1.293 1.293a1 1 0 0 1 1.414 0L8 6.586l5.293-5.293a1 1 0 1 1 1.414 1.414L9.414 8l5.293 5.293a1 1 0 0 1-1.414 1.414L8 9.414l-5.293 5.293a1 1 0 0 1-1.414-1.414L6.586 8 1.293 2.707a1 1 0 0 1 0-1.414z" })));
7152
7578
  };
7153
7579
 
7154
7580
  var LeftDownArrowIcon = function () {
7155
- return (React__default["default"].createElement("svg", { xmlns: "http://www.w3.org/2000/svg", fill: "currentColor", viewBox: "0 0 16 16" },
7156
- React__default["default"].createElement("path", { fillRule: "evenodd", d: "M2 13.5a.5.5 0 0 0 .5.5h6a.5.5 0 0 0 0-1H3.707L13.854 2.854a.5.5 0 0 0-.708-.708L3 12.293V7.5a.5.5 0 0 0-1 0v6z" })));
7581
+ return (React__default$1["default"].createElement("svg", { xmlns: "http://www.w3.org/2000/svg", fill: "currentColor", viewBox: "0 0 16 16" },
7582
+ React__default$1["default"].createElement("path", { fillRule: "evenodd", d: "M2 13.5a.5.5 0 0 0 .5.5h6a.5.5 0 0 0 0-1H3.707L13.854 2.854a.5.5 0 0 0-.708-.708L3 12.293V7.5a.5.5 0 0 0-1 0v6z" })));
7157
7583
  };
7158
7584
 
7159
7585
  var SendIcon = function () {
7160
- return (React__default["default"].createElement("svg", { viewBox: "80.208 98.129 313.069 282.823", xmlns: "http://www.w3.org/2000/svg" },
7161
- React__default["default"].createElement("g", { transform: "matrix(0.024498, 0, 0, -0.038359, 79.83091, 381.182404)", fill: "currentColor", stroke: "none" },
7162
- React__default["default"].createElement("path", { d: "M12670 7345 c-63 -18 -272 -77 -465 -130 -192 -53 -478 -132 -635 -175 -508 -141 -1091 -302 -2345 -649 -676 -187 -2038 -563 -3025 -836 -987 -273 -2072 -573 -2410 -666 -338 -94 -802 -222 -1030 -285 -1857 -514 -2579 -714 -2684 -742 -38 -10 -65 -21 -60 -24 5 -3 67 -22 139 -41 72 -20 326 -90 565 -157 239 -67 611 -170 825 -230 215 -60 586 -163 825 -230 239 -67 491 -137 560 -156 l126 -34 974 439 c1397 629 4128 1858 6050 2724 910 410 1826 822 2035 917 209 94 387 173 395 176 35 10 -66 -39 -8200 -3928 -586 -280 -1068 -512 -1071 -516 -3 -4 33 -117 82 -252 76 -213 355 -996 765 -2147 65 -183 120 -330 122 -329 1 2 114 558 250 1236 l248 1233 3455 2064 c1900 1135 3670 2193 3933 2351 264 158 491 293 505 301 62 33 -5 -12 -271 -182 -1671 -1070 -7188 -4613 -7188 -4617 0 -7 3661 -2455 3669 -2454 4 1 3713 6853 3977 7347 8 15 11 27 7 26 -5 0 -60 -15 -123 -34z" }),
7163
- React__default["default"].createElement("path", { d: "M5030 2232 c-15 -61 -479 -1861 -531 -2058 -21 -83 -39 -154 -39 -158 0 -3 369 330 820 740 452 411 817 750 813 754 -11 10 -1025 754 -1039 763 -8 4 -16 -10 -24 -41z" }))));
7586
+ return (React__default$1["default"].createElement("svg", { viewBox: "80.208 98.129 313.069 282.823", xmlns: "http://www.w3.org/2000/svg" },
7587
+ React__default$1["default"].createElement("g", { transform: "matrix(0.024498, 0, 0, -0.038359, 79.83091, 381.182404)", fill: "currentColor", stroke: "none" },
7588
+ React__default$1["default"].createElement("path", { d: "M12670 7345 c-63 -18 -272 -77 -465 -130 -192 -53 -478 -132 -635 -175 -508 -141 -1091 -302 -2345 -649 -676 -187 -2038 -563 -3025 -836 -987 -273 -2072 -573 -2410 -666 -338 -94 -802 -222 -1030 -285 -1857 -514 -2579 -714 -2684 -742 -38 -10 -65 -21 -60 -24 5 -3 67 -22 139 -41 72 -20 326 -90 565 -157 239 -67 611 -170 825 -230 215 -60 586 -163 825 -230 239 -67 491 -137 560 -156 l126 -34 974 439 c1397 629 4128 1858 6050 2724 910 410 1826 822 2035 917 209 94 387 173 395 176 35 10 -66 -39 -8200 -3928 -586 -280 -1068 -512 -1071 -516 -3 -4 33 -117 82 -252 76 -213 355 -996 765 -2147 65 -183 120 -330 122 -329 1 2 114 558 250 1236 l248 1233 3455 2064 c1900 1135 3670 2193 3933 2351 264 158 491 293 505 301 62 33 -5 -12 -271 -182 -1671 -1070 -7188 -4613 -7188 -4617 0 -7 3661 -2455 3669 -2454 4 1 3713 6853 3977 7347 8 15 11 27 7 26 -5 0 -60 -15 -123 -34z" }),
7589
+ React__default$1["default"].createElement("path", { d: "M5030 2232 c-15 -61 -479 -1861 -531 -2058 -21 -83 -39 -154 -39 -158 0 -3 369 330 820 740 452 411 817 750 813 754 -11 10 -1025 754 -1039 763 -8 4 -16 -10 -24 -41z" }))));
7164
7590
  };
7165
7591
 
7166
7592
  var SendButton = function (props) {
7167
- return (React__default["default"].createElement(IconButton, { className: "xappw-send-button", onClick: props.onClick, icon: SendIcon }));
7593
+ return (React__default$1["default"].createElement(IconButton_1, { className: "xappw-send-button ".concat(props.className || ""), onClick: props.onClick, icon: SendIcon }));
7168
7594
  };
7169
7595
 
7170
7596
  var Input = function (props) {
7171
7597
  var value = props.value, suggestion = props.suggestion, onChange = props.onChange, onSuggestionCommand = props.onSuggestionCommand;
7172
- var _a = React.useState(false), dragover = _a[0], setDragover = _a[1];
7598
+ var _a = React$1.useState(false), dragover = _a[0], setDragover = _a[1];
7173
7599
  function onDragOver(event) {
7174
7600
  setDragover(true);
7175
7601
  event.preventDefault();
@@ -7182,22 +7608,23 @@ var Input = function (props) {
7182
7608
  function onDragLeave() {
7183
7609
  setDragover(false);
7184
7610
  }
7185
- function handleOnSubmit(event) {
7611
+ var handleOnSubmit = React$1.useCallback(function (event) {
7186
7612
  event && event.preventDefault();
7187
7613
  props.onSubmit(value); // send to the widget
7188
- }
7189
- var handleOnChange = React.useCallback(function (event) {
7190
- var val = event.target.value;
7191
- onChange(val);
7614
+ }, [value]);
7615
+ var handleOnChange = React$1.useCallback(function (value) {
7616
+ onChange(value);
7192
7617
  }, [onChange]);
7193
- var handleClear = React.useCallback(function () {
7194
- onChange("");
7618
+ var handleClear = React$1.useCallback(function () {
7619
+ onChange({
7620
+ text: "",
7621
+ formats: []
7622
+ });
7195
7623
  }, [onChange]);
7196
- var handleKeyDown = React.useCallback(function (event) {
7624
+ var handleKeyDown = React$1.useCallback(function (event) {
7197
7625
  if (suggestion) {
7198
7626
  if (event.key === "End" || event.key === "ArrowRight" || event.key === "Enter") {
7199
- var newVal = suggestion.suggestion;
7200
- onChange(newVal);
7627
+ onChange(suggestion);
7201
7628
  return;
7202
7629
  }
7203
7630
  }
@@ -7216,116 +7643,59 @@ var Input = function (props) {
7216
7643
  }
7217
7644
  }
7218
7645
  }, [suggestion, onChange, onSuggestionCommand]);
7219
- return (React__default["default"].createElement("div", { className: "xappw-input-container " + props.addClass + " " + (dragover ? "drag-drop-zone" : ""), onDrop: onDrop, onDragOver: onDragOver, onDragLeave: onDragLeave },
7220
- React__default["default"].createElement("form", { className: "xappw-input-form", onSubmit: handleOnSubmit },
7221
- suggestion && React__default["default"].createElement("div", { className: "xappw-input-back", key: "suggestion" }),
7222
- React__default["default"].createElement("input", { key: "input", className: "xappw-input", placeholder: "Type your question here...", onChange: handleOnChange, onKeyDown: handleKeyDown,
7646
+ return (React__default$1["default"].createElement("div", { className: "xappw-input-container ".concat(props.addClass, " ").concat(dragover ? "drag-drop-zone" : ""), onDrop: onDrop, onDragOver: onDragOver, onDragLeave: onDragLeave },
7647
+ React__default$1["default"].createElement("form", { className: "xappw-input-form", onSubmit: handleOnSubmit },
7648
+ React__default$1["default"].createElement(RichInput_1, { key: "input", className: "xappw-input", placeholder: "Type your question here...", onChange: handleOnChange, onKeyDown: handleKeyDown,
7223
7649
  // onFocus={onFocus}
7224
- value: value || "" }),
7225
- React__default["default"].createElement("div", { className: "xappw-input-form__buttons" },
7226
- value && React__default["default"].createElement(IconButton, { icon: CloseIcon, onClick: handleClear }),
7227
- React__default["default"].createElement(SendButton, { onClick: handleOnSubmit })))));
7228
- };
7229
-
7230
- var SuggestionsItem = function (props) {
7231
- var data = props.data, onClick = props.onClick, onUse = props.onUse, onHover = props.onHover;
7232
- var suggestion = data.suggestion;
7233
- var handleClick = React.useCallback(function () {
7234
- onClick(data);
7235
- }, [data, onClick]);
7236
- var handleUse = React.useCallback(function (ev) {
7237
- onUse(data);
7238
- ev.stopPropagation();
7239
- }, [data, onUse]);
7240
- var handleHover = React.useCallback(function () {
7241
- onHover(data);
7242
- }, [data, onHover]);
7243
- var formats = React.useMemo(function () { return mapFormat$1(data.format, suggestion.length); }, [data.format, suggestion]);
7244
- var canUse = data.type !== "FAQ";
7245
- return (React__default["default"].createElement("div", { className: "xappw-suggestions-item " + (props.current ? "xappw-suggestions-item--current" : ""), onClick: handleClick, onMouseEnter: handleHover },
7246
- React__default["default"].createElement("div", { className: "xappw-suggestions-item__texts" }, formats.map(function (format, index) { return (React__default["default"].createElement("span", { className: "xappw-suggestions-item__text xappw-suggestions-item__text--" + format.type, key: index }, suggestion.substring(format.start, format.end))); })),
7247
- canUse && React__default["default"].createElement(IconButton, { className: "xappw-suggestions-item__use", onClick: handleUse, icon: LeftDownArrowIcon })));
7248
- };
7249
-
7250
- function getLabel(type) {
7251
- switch (type) {
7252
- case "FAQ":
7253
- return "FAQs";
7254
- case "INTENT":
7255
- return "Suggestions";
7256
- case "HISTORICAL":
7257
- return "Suggestions";
7258
- default:
7259
- throw throwBadKind(type);
7260
- }
7261
- }
7262
- var SuggestionsGroupItem = function (props) {
7263
- var group = props.group, currentIndex = props.currentIndex;
7264
- var type = group.type, items = group.items, startIndex = group.startIndex;
7265
- return (React__default["default"].createElement("div", { className: "xappw-suggestions-group" },
7266
- React__default["default"].createElement("label", { className: "xappw-suggestions-group__label" }, getLabel(type)),
7267
- React__default["default"].createElement("div", { className: "xappw-suggestions-group__items" }, items.map(function (item, itemIndex) {
7268
- return React__default["default"].createElement(SuggestionsItem, { key: itemIndex, data: item, current: currentIndex === itemIndex + startIndex, onClick: props.onItemClick, onUse: props.onItemUse, onHover: props.onItemHover });
7269
- }))));
7650
+ value: value }),
7651
+ React__default$1["default"].createElement("div", { className: "xappw-input-form__buttons" },
7652
+ value.text && React__default$1["default"].createElement(IconButton_1, { icon: CloseIcon, className: "xappw-input-form__btn", onClick: handleClear }),
7653
+ React__default$1["default"].createElement(SendButton, { className: "xappw-input-form__btn", onClick: handleOnSubmit })))));
7270
7654
  };
7271
7655
 
7272
- function normalizeType(type) {
7273
- switch (type) {
7274
- case "HISTORICAL":
7275
- return "INTENT";
7276
- default:
7277
- return type;
7278
- }
7279
- }
7280
- var order = ["FAQ", "INTENT", "HISTORICAL"];
7281
- var ordersMap = order.reduce(function (prev, cur, index) {
7282
- prev[cur] = index;
7283
- return prev;
7284
- }, {});
7285
- function compareSuggestionItems(left, right) {
7286
- return (ordersMap[right.type] - ordersMap[left.type]);
7656
+ function createActions(onItemUse) {
7657
+ return function (innerProps) {
7658
+ var data = innerProps.data;
7659
+ var canUse = data.type !== "FAQ";
7660
+ var handleUse = React$1.useCallback(function (ev) {
7661
+ onItemUse(data);
7662
+ ev.stopPropagation();
7663
+ }, [data]);
7664
+ if (!canUse) {
7665
+ return React__default$1["default"].createElement(React__default$1["default"].Fragment, null);
7666
+ }
7667
+ return (React__default$1["default"].createElement(IconButton_1, { className: "xappw-suggestions__use", onClick: handleUse, icon: LeftDownArrowIcon }));
7668
+ };
7287
7669
  }
7288
7670
  var Suggestions = function (props) {
7289
- var len = props.data.items.length;
7671
+ var data = props.data, onItemUse = props.onItemUse;
7672
+ var len = data.length;
7290
7673
  var currentIndex = len > 0 ? props.index : NaN;
7291
- var _a = React.useState(), activeItem = _a[0], setActiveItem = _a[1];
7292
- var item = props.data.items[currentIndex];
7293
- React.useEffect(function () {
7674
+ var _a = React$1.useState(), activeItem = _a[0], setActiveItem = _a[1];
7675
+ var item = React$1.useMemo(function () { return findItemByIndex_1(data, currentIndex); }, [data, currentIndex]);
7676
+ React$1.useEffect(function () {
7294
7677
  setActiveItem(item);
7295
7678
  }, [item]);
7296
- var groups = React.useMemo(function () {
7297
- var items = __spreadArray([], props.data.items, true).sort(compareSuggestionItems);
7298
- return items.reduce(function (result, current, index) {
7299
- if (result.length) {
7300
- var prevGroup = result[result.length - 1];
7301
- if (prevGroup.type === normalizeType(current.type)) {
7302
- prevGroup.items.push(current);
7303
- return result;
7304
- }
7305
- }
7306
- result.push({
7307
- type: normalizeType(current.type),
7308
- items: [current],
7309
- startIndex: index
7310
- });
7311
- return result;
7312
- }, []);
7313
- }, [props.data]);
7314
- return (React__default["default"].createElement("div", { className: "xappw-suggestions " + (props.className || "") },
7315
- (activeItem === null || activeItem === void 0 ? void 0 : activeItem.answer) && React__default["default"].createElement("div", { className: "xappw-suggestions__answer" }, activeItem.answer),
7316
- !!groups.length && React__default["default"].createElement("div", { className: "xappw-suggestions__groups" }, groups.map(function (group, index) { return (React__default["default"].createElement(SuggestionsGroupItem, { key: index, group: group, currentIndex: currentIndex, onItemClick: props.onItemClick, onItemUse: props.onItemUse, onItemHover: setActiveItem })); }))));
7679
+ var actions = React$1.useMemo(function () { return createActions(onItemUse); }, [onItemUse]);
7680
+ return (React__default$1["default"].createElement("div", { className: "xappw-suggestions ".concat(props.className || "") },
7681
+ (activeItem === null || activeItem === void 0 ? void 0 : activeItem.content) && React__default$1["default"].createElement("div", { className: "xappw-suggestions__answer" }, activeItem.content),
7682
+ !!data.length &&
7683
+ React__default$1["default"].createElement(SuggestionsList_1, { suggestions: data, index: currentIndex, className: "xappw-suggestions__groups", itemActions: actions, onItemClick: props.onItemClick, onItemHover: setActiveItem })));
7317
7684
  };
7318
7685
 
7319
7686
  var ChatFooter = function (props) {
7320
- var _a, _b, _c, _d;
7687
+ var _a, _b, _c;
7321
7688
  var onSubmit = props.onSubmit;
7322
- var _e = React.useState(false), drawer = _e[0], setDrawerState = _e[1]; // false initially
7323
- var _f = React.useState(), suggestionSearch = _f[0], setSuggestionSearch = _f[1];
7689
+ var _d = React$1.useState(false), drawer = _d[0], setDrawerState = _d[1]; // false initially
7690
+ var _e = React$1.useState(), suggestionSearch = _e[0], setSuggestionSearch = _e[1];
7324
7691
  var contexts = reactRedux.useSelector(function (state) { return state.activeContexts; });
7325
7692
  var suggestions = useSuggestions(suggestionSearch, contexts);
7326
7693
  var menuItemsRaw = (_b = (_a = useWidgetEnv()) === null || _a === void 0 ? void 0 : _a.menu) === null || _b === void 0 ? void 0 : _b.items;
7327
- var menuItems = React.useMemo(function () { return menuItemsRaw ? menuItemsRaw.map(function (item) { return item.label; }) : []; }, [menuItemsRaw]);
7328
- var _g = React.useState(""), input = _g[0], setInput = _g[1];
7694
+ var menuItems = React$1.useMemo(function () { return menuItemsRaw ? menuItemsRaw.map(function (item) { return item.label; }) : []; }, [menuItemsRaw]);
7695
+ var _f = React$1.useState({
7696
+ text: "",
7697
+ formats: []
7698
+ }), input = _f[0], setInput = _f[1];
7329
7699
  function toggleDrawer() {
7330
7700
  var newDrawer = !drawer;
7331
7701
  setDrawerState(newDrawer);
@@ -7337,29 +7707,32 @@ var ChatFooter = function (props) {
7337
7707
  }
7338
7708
  function handleChange(val) {
7339
7709
  setInput(val);
7340
- props.onChange(val);
7341
- setSuggestionSearch(val);
7710
+ props.onChange(val.text);
7711
+ setSuggestionSearch(val.text);
7342
7712
  }
7343
- var handleSubmit = React.useCallback(function (message) {
7713
+ var handleSubmit = React$1.useCallback(function (message) {
7344
7714
  setSuggestionSearch("");
7345
- setInput("");
7346
- onSubmit(message);
7715
+ setInput({
7716
+ text: "",
7717
+ formats: []
7718
+ });
7719
+ onSubmit(message.text);
7347
7720
  }, [onSubmit]);
7348
- var handleItemClick = React.useCallback(function (data) {
7349
- handleSubmit(data.suggestion);
7721
+ var handleItemClick = React$1.useCallback(function (data) {
7722
+ handleSubmit(data);
7350
7723
  }, [handleSubmit]);
7351
- var handleItemUse = React.useCallback(function (data) {
7352
- setInput(data.suggestion);
7353
- setSuggestionSearch(data.suggestion);
7724
+ var handleItemUse = React$1.useCallback(function (data) {
7725
+ setInput(data);
7726
+ setSuggestionSearch(data.text);
7354
7727
  }, []);
7355
- return (React__default["default"].createElement("div", { className: "chat-footer" },
7728
+ return (React__default$1["default"].createElement("div", { className: "chat-footer" },
7356
7729
  menuItems.length ?
7357
- React__default["default"].createElement(React__default["default"].Fragment, null,
7358
- React__default["default"].createElement(ChatMenu, { opened: drawer, onItemClick: handleMenuItem, items: menuItems }),
7359
- React__default["default"].createElement("div", { className: "chat-footer__menu-icon" },
7360
- React__default["default"].createElement(DrawerBars, { onToggle: toggleDrawer }))) : React__default["default"].createElement(React__default["default"].Fragment, null),
7361
- ((_d = (_c = suggestions.suggestions) === null || _c === void 0 ? void 0 : _c.items) === null || _d === void 0 ? void 0 : _d.length) > 0 && React__default["default"].createElement(Suggestions, { className: "xappw-chat-footer__suggestions", data: suggestions.suggestions, index: suggestions.index, onItemClick: handleItemClick, onItemUse: handleItemUse }),
7362
- React__default["default"].createElement(Input, { addClass: "chat-footer__input " + (props.isChatting ? "visible" : ""), suggestion: suggestions.item, value: input, onSubmit: handleSubmit, onChange: handleChange, onSuggestionCommand: suggestions.execute,
7730
+ React__default$1["default"].createElement(React__default$1["default"].Fragment, null,
7731
+ React__default$1["default"].createElement(ChatMenu, { opened: drawer, onItemClick: handleMenuItem, items: menuItems }),
7732
+ React__default$1["default"].createElement("div", { className: "chat-footer__menu-icon" },
7733
+ React__default$1["default"].createElement(DrawerBars, { onToggle: toggleDrawer }))) : React__default$1["default"].createElement(React__default$1["default"].Fragment, null),
7734
+ ((_c = suggestions.suggestions) === null || _c === void 0 ? void 0 : _c.length) > 0 && React__default$1["default"].createElement(Suggestions, { className: "xappw-chat-footer__suggestions", data: suggestions.suggestions, index: suggestions.index, onItemClick: handleItemClick, onItemUse: handleItemUse }),
7735
+ React__default$1["default"].createElement(Input, { addClass: "chat-footer__input " + (props.isChatting ? "visible" : ""), suggestion: suggestions.item, value: input, onSubmit: handleSubmit, onChange: handleChange, onSuggestionCommand: suggestions.execute,
7363
7736
  // onFocus={this.inputOnFocus}
7364
7737
  onFileUpload: props.onFileUpload })));
7365
7738
  };
@@ -7395,12 +7768,12 @@ var MiddlewareContextFactory = /** @class */ (function () {
7395
7768
  var CardContainer = function (props) {
7396
7769
  function renderIcon() {
7397
7770
  var isString = typeof (props.icon) === "string";
7398
- return (React__default["default"].createElement("div", { className: "card-container__icon" }, !isString && props.icon));
7771
+ return (React__default$1["default"].createElement("div", { className: "card-container__icon" }, !isString && props.icon));
7399
7772
  }
7400
- return (React__default["default"].createElement("div", { className: "card-container " + props.addClass },
7773
+ return (React__default$1["default"].createElement("div", { className: "card-container ".concat(props.addClass) },
7401
7774
  renderIcon(),
7402
- React__default["default"].createElement("div", { className: "card-container__content " + props.contentAddClass },
7403
- React__default["default"].createElement("div", { className: "card-container__title" }, props.title),
7775
+ React__default$1["default"].createElement("div", { className: "card-container__content ".concat(props.contentAddClass) },
7776
+ React__default$1["default"].createElement("div", { className: "card-container__title" }, props.title),
7404
7777
  props.children)));
7405
7778
  };
7406
7779
 
@@ -7415,13 +7788,13 @@ var defaultProps$2 = {
7415
7788
  var ChatRating = function (props) {
7416
7789
  if (props === void 0) { props = defaultProps$2; }
7417
7790
  var onRate = props.onRate;
7418
- var rateBadButtonOnClick = React.useCallback(function () {
7791
+ var rateBadButtonOnClick = React$1.useCallback(function () {
7419
7792
  onRate("bad");
7420
7793
  }, [onRate]);
7421
- var rateGoodButtonOnClick = React.useCallback(function () {
7794
+ var rateGoodButtonOnClick = React$1.useCallback(function () {
7422
7795
  onRate("good");
7423
7796
  }, [onRate]);
7424
- var rateAgainButtonOnClick = React.useCallback(function () {
7797
+ var rateAgainButtonOnClick = React$1.useCallback(function () {
7425
7798
  onRate(undefined);
7426
7799
  }, [onRate]);
7427
7800
  // Do not think this prop should be here
@@ -7429,40 +7802,40 @@ var ChatRating = function (props) {
7429
7802
  return null;
7430
7803
  }
7431
7804
  if (!props.hasRating) {
7432
- return (React__default["default"].createElement(CardContainer, { title: "Chat Rating", addClass: "chat-rating-card" },
7805
+ return (React__default$1["default"].createElement(CardContainer, { title: "Chat Rating", addClass: "chat-rating-card" },
7433
7806
  props.agent.displayName,
7434
7807
  " has requested you to rate the chat service.",
7435
- React__default["default"].createElement("div", { className: "buttons-container" },
7436
- React__default["default"].createElement(ActionButton, { addClass: "button button-rate-bad", label: "Rate Bad", onClick: rateBadButtonOnClick }),
7437
- React__default["default"].createElement(ActionButton, { addClass: "button button-rate-good", label: "Rate Good", onClick: rateGoodButtonOnClick }))));
7808
+ React__default$1["default"].createElement("div", { className: "buttons-container" },
7809
+ React__default$1["default"].createElement(ActionButton, { addClass: "button button-rate-bad", label: "Rate Bad", onClick: rateBadButtonOnClick }),
7810
+ React__default$1["default"].createElement(ActionButton, { addClass: "button button-rate-good", label: "Rate Good", onClick: rateGoodButtonOnClick }))));
7438
7811
  }
7439
7812
  else {
7440
- return (React__default["default"].createElement(CardContainer, { title: "Chat Rating", addClass: "chat-rating-card" },
7813
+ return (React__default$1["default"].createElement(CardContainer, { title: "Chat Rating", addClass: "chat-rating-card" },
7441
7814
  "You have rated the chat service.",
7442
- React__default["default"].createElement("div", { className: "buttons-container" },
7443
- React__default["default"].createElement(ActionButton, { addClass: "button button-rate-again", label: "Rate again", onClick: rateAgainButtonOnClick }))));
7815
+ React__default$1["default"].createElement("div", { className: "buttons-container" },
7816
+ React__default$1["default"].createElement(ActionButton, { addClass: "button button-rate-again", label: "Rate again", onClick: rateAgainButtonOnClick }))));
7444
7817
  }
7445
7818
  };
7446
7819
 
7447
7820
  var ChatRatingContainer = function (props) {
7448
7821
  var dispatch = useChatServerDispatch();
7449
- var handleRate = React.useCallback(function (rating) {
7822
+ var handleRate = React$1.useCallback(function (rating) {
7450
7823
  dispatch(sendChatRating(rating));
7451
7824
  }, [dispatch]);
7452
- return React__default["default"].createElement(ChatRating, { agent: props.agent, hasRating: props.hasRating, shouldDisplay: props.shouldDisplay, onRate: handleRate });
7825
+ return React__default$1["default"].createElement(ChatRating, { agent: props.agent, hasRating: props.hasRating, shouldDisplay: props.shouldDisplay, onRate: handleRate });
7453
7826
  };
7454
7827
 
7455
7828
  var MessageSvg = function (_) {
7456
- return (React__default["default"].createElement("svg", { className: "message-svg", width: "16", height: "12", viewBox: "0 0 16 12" },
7457
- React__default["default"].createElement("path", { d: "M14.4 0H1.6C.72 0 .008.675.008 1.5L0 10.5c0 .825.72 1.5 1.6 1.5h12.8c.88 0 1.6-.675 1.6-1.5v-9c0-.825-.72-1.5-1.6-1.5zm0 3L8 6.75 1.6 3V1.5L8 5.25l6.4-3.75V3z", fill: "#424242", fillRule: "evenodd" })));
7829
+ return (React__default$1["default"].createElement("svg", { className: "message-svg", width: "16", height: "12", viewBox: "0 0 16 12" },
7830
+ React__default$1["default"].createElement("path", { d: "M14.4 0H1.6C.72 0 .008.675.008 1.5L0 10.5c0 .825.72 1.5 1.6 1.5h12.8c.88 0 1.6-.675 1.6-1.5v-9c0-.825-.72-1.5-1.6-1.5zm0 3L8 6.75 1.6 3V1.5L8 5.25l6.4-3.75V3z", fill: "#424242", fillRule: "evenodd" })));
7458
7831
  };
7459
7832
 
7460
7833
  var MessageForm = function (props) {
7461
- var name = React.useRef(null);
7462
- var email = React.useRef(null);
7463
- var message = React.useRef(null);
7464
- var form = React.useRef(null);
7465
- var _a = React.useState(false), sent = _a[0], setSent = _a[1];
7834
+ var name = React$1.useRef(null);
7835
+ var email = React$1.useRef(null);
7836
+ var message = React$1.useRef(null);
7837
+ var form = React$1.useRef(null);
7838
+ var _a = React$1.useState(false), sent = _a[0], setSent = _a[1];
7466
7839
  function emailChanged() {
7467
7840
  var _a, _b, _c;
7468
7841
  if ((_a = email.current) === null || _a === void 0 ? void 0 : _a.validity.patternMismatch) {
@@ -7490,53 +7863,53 @@ var MessageForm = function (props) {
7490
7863
  setSent(false);
7491
7864
  }
7492
7865
  function renderSent() {
7493
- return (React__default["default"].createElement("div", { key: "sent", className: "message-form--sent" },
7866
+ return (React__default$1["default"].createElement("div", { key: "sent", className: "message-form--sent" },
7494
7867
  "Your message has been sent. We will get back to you as soon as possible.",
7495
- React__default["default"].createElement(ActionButton, { addClass: "button-resend", label: "Send another", onClick: sendAnother })));
7868
+ React__default$1["default"].createElement(ActionButton, { addClass: "button-resend", label: "Send another", onClick: sendAnother })));
7496
7869
  }
7497
7870
  function renderForm() {
7498
- return (React__default["default"].createElement("form", { ref: form, key: "not-sent", className: "message-form", onSubmit: send },
7499
- React__default["default"].createElement("div", { className: "content" },
7500
- React__default["default"].createElement("div", { className: "section" },
7501
- React__default["default"].createElement("label", { className: "label" }, "Name"),
7502
- React__default["default"].createElement("input", { ref: name, maxLength: 255 })),
7503
- React__default["default"].createElement("div", { className: "section" },
7504
- React__default["default"].createElement("label", { className: "label" }, "Email"),
7505
- React__default["default"].createElement("input", { ref: email, onChange: emailChanged, type: "email", required: true, pattern: EMAIL_REGEX })),
7506
- React__default["default"].createElement("div", { className: "section" },
7507
- React__default["default"].createElement("label", { className: "label" }, "Message"),
7508
- React__default["default"].createElement("textarea", { required: true, ref: message }))),
7509
- React__default["default"].createElement("div", { className: "button-container" },
7510
- React__default["default"].createElement(ActionButton, { type: "submit", addClass: "message-form__submit", label: "Send" }))));
7511
- }
7512
- return (React__default["default"].createElement(CardContainer, { title: props.title, addClass: "offline-card", contentAddClass: sent ? "sent" : "", icon: React__default["default"].createElement(MessageSvg, null) }, sent ? renderSent() : renderForm()));
7871
+ return (React__default$1["default"].createElement("form", { ref: form, key: "not-sent", className: "message-form", onSubmit: send },
7872
+ React__default$1["default"].createElement("div", { className: "content" },
7873
+ React__default$1["default"].createElement("div", { className: "section" },
7874
+ React__default$1["default"].createElement("label", { className: "label" }, "Name"),
7875
+ React__default$1["default"].createElement("input", { ref: name, maxLength: 255 })),
7876
+ React__default$1["default"].createElement("div", { className: "section" },
7877
+ React__default$1["default"].createElement("label", { className: "label" }, "Email"),
7878
+ React__default$1["default"].createElement("input", { ref: email, onChange: emailChanged, type: "email", required: true, pattern: EMAIL_REGEX })),
7879
+ React__default$1["default"].createElement("div", { className: "section" },
7880
+ React__default$1["default"].createElement("label", { className: "label" }, "Message"),
7881
+ React__default$1["default"].createElement("textarea", { required: true, ref: message }))),
7882
+ React__default$1["default"].createElement("div", { className: "button-container" },
7883
+ React__default$1["default"].createElement(ActionButton, { type: "submit", addClass: "message-form__submit", label: "Send" }))));
7884
+ }
7885
+ return (React__default$1["default"].createElement(CardContainer, { title: props.title, addClass: "offline-card", contentAddClass: sent ? "sent" : "", icon: React__default$1["default"].createElement(MessageSvg, null) }, sent ? renderSent() : renderForm()));
7513
7886
  };
7514
7887
 
7515
7888
  var OfflineForm = function (props) {
7516
- return React__default["default"].createElement(MessageForm, { title: "Offline message card title", onSubmit: props.onSubmit });
7889
+ return React__default$1["default"].createElement(MessageForm, { title: "Offline message card title", onSubmit: props.onSubmit });
7517
7890
  };
7518
7891
 
7519
7892
  var OfflineFormContainer = function (_) {
7520
7893
  var dispatch = useChatServerDispatch();
7521
- var handleSubmit = React.useCallback(function (data) {
7894
+ var handleSubmit = React$1.useCallback(function (data) {
7522
7895
  dispatch(sendOfflineMsg(data));
7523
7896
  }, [dispatch]);
7524
- return React__default["default"].createElement(OfflineForm, { onSubmit: handleSubmit });
7897
+ return React__default$1["default"].createElement(OfflineForm, { onSubmit: handleSubmit });
7525
7898
  };
7526
7899
 
7527
7900
  var PrechatForm = function (props) {
7528
- var _a = React.useState(false), sent = _a[0], setSent = _a[1];
7901
+ var _a = React$1.useState(false), sent = _a[0], setSent = _a[1];
7529
7902
  var onSubmit = props.onSubmit;
7530
- var handleSubmit = React.useCallback(function (msg) {
7903
+ var handleSubmit = React$1.useCallback(function (msg) {
7531
7904
  onSubmit(msg);
7532
7905
  setSent(true);
7533
7906
  }, [onSubmit]);
7534
- return (React__default["default"].createElement(React__default["default"].Fragment, null, !sent && React__default["default"].createElement(MessageForm, { title: "Introduce yourself!", onSubmit: handleSubmit })));
7907
+ return (React__default$1["default"].createElement(React__default$1["default"].Fragment, null, !sent && React__default$1["default"].createElement(MessageForm, { title: "Introduce yourself!", onSubmit: handleSubmit })));
7535
7908
  };
7536
7909
 
7537
7910
  var PrechatFormContainer = function (_) {
7538
7911
  var dispatch = useChatServerDispatch();
7539
- var handleSubmit = React.useCallback(function (data) {
7912
+ var handleSubmit = React$1.useCallback(function (data) {
7540
7913
  // Don't send empty messages
7541
7914
  if (!data.message)
7542
7915
  return;
@@ -7546,7 +7919,7 @@ var PrechatFormContainer = function (_) {
7546
7919
  }));
7547
7920
  dispatch(executeAction(data.message));
7548
7921
  }, [dispatch]);
7549
- return React__default["default"].createElement(PrechatForm, { onSubmit: handleSubmit });
7922
+ return React__default$1["default"].createElement(PrechatForm, { onSubmit: handleSubmit });
7550
7923
  };
7551
7924
 
7552
7925
  var defaultProps$1 = {
@@ -7556,8 +7929,8 @@ var QueuePosition = function (props) {
7556
7929
  if (props === void 0) { props = defaultProps$1; }
7557
7930
  if (props.position <= 0)
7558
7931
  return null;
7559
- return (React__default["default"].createElement("div", { className: "system-msg-container" },
7560
- React__default["default"].createElement("span", { className: "system-msg" },
7932
+ return (React__default$1["default"].createElement("div", { className: "system-msg-container" },
7933
+ React__default$1["default"].createElement("span", { className: "system-msg" },
7561
7934
  "Queue position: ",
7562
7935
  props.position)));
7563
7936
  };
@@ -7565,34 +7938,34 @@ var QueuePosition = function (props) {
7565
7938
  function getMessageByType(msg) {
7566
7939
  switch (msg.type) {
7567
7940
  case "chat.memberjoin":
7568
- return msg.user.displayName + " has joined the chat";
7941
+ return "".concat(msg.user.displayName, " has joined the chat");
7569
7942
  case "chat.memberleave":
7570
- return msg.user.displayName + " has left the chat";
7943
+ return "".concat(msg.user.displayName, " has left the chat");
7571
7944
  case "chat.rating":
7572
7945
  if (!msg.newRating) {
7573
7946
  return "You have removed the chat rating";
7574
7947
  }
7575
7948
  else {
7576
7949
  var rating = convertToSentenceCase(msg.newRating);
7577
- return "You have rated the chat service " + rating;
7950
+ return "You have rated the chat service ".concat(rating);
7578
7951
  }
7579
7952
  default:
7580
7953
  return JSON.stringify(msg);
7581
7954
  }
7582
7955
  }
7583
7956
  var SystemMessage = function (props) {
7584
- return (React__default["default"].createElement("div", { className: "system-msg-container" },
7585
- React__default["default"].createElement("span", { className: "system-msg" }, getMessageByType(props.message))));
7957
+ return (React__default$1["default"].createElement("div", { className: "system-msg-container" },
7958
+ React__default$1["default"].createElement("span", { className: "system-msg" }, getMessageByType(props.message))));
7586
7959
  };
7587
7960
  function convertToSentenceCase(s) {
7588
7961
  return s[0].toUpperCase() + s.slice(1);
7589
7962
  }
7590
7963
 
7591
7964
  var TypingIndicator = function (_) {
7592
- return (React__default["default"].createElement("div", { className: "typing-indicator" },
7593
- React__default["default"].createElement("div", { className: "typing-indicator-part" }),
7594
- React__default["default"].createElement("div", { className: "typing-indicator-part" }),
7595
- React__default["default"].createElement("div", { className: "typing-indicator-part" })));
7965
+ return (React__default$1["default"].createElement("div", { className: "typing-indicator" },
7966
+ React__default$1["default"].createElement("div", { className: "typing-indicator-part" }),
7967
+ React__default$1["default"].createElement("div", { className: "typing-indicator-part" }),
7968
+ React__default$1["default"].createElement("div", { className: "typing-indicator-part" })));
7596
7969
  };
7597
7970
 
7598
7971
  /**
@@ -7601,13 +7974,13 @@ var TypingIndicator = function (_) {
7601
7974
  var TypingStatus = function (props) {
7602
7975
  var agent_names = Object.values(props.agents)
7603
7976
  .filter(function (agent) { return agent.typing; });
7604
- return (React__default["default"].createElement(React__default["default"].Fragment, null, agent_names.map(function (agent) {
7605
- return (React__default["default"].createElement("div", { className: "chat-msg-container-wrapper", key: "typing-status-" + agent.nick },
7606
- React__default["default"].createElement("div", { key: agent.nick, className: "chat-msg-container agent chat-typing-progress" },
7607
- React__default["default"].createElement(ChatMessagePart, { user: agent, showAvatar: true },
7608
- React__default["default"].createElement("div", { className: "chat-msg" },
7609
- React__default["default"].createElement(ChatMessageBubble, { owner: "others", hasTail: true },
7610
- React__default["default"].createElement(TypingIndicator, null)))))));
7977
+ return (React__default$1["default"].createElement(React__default$1["default"].Fragment, null, agent_names.map(function (agent) {
7978
+ return (React__default$1["default"].createElement("div", { className: "chat-msg-container-wrapper", key: "typing-status-".concat(agent.user.nick) },
7979
+ React__default$1["default"].createElement("div", { key: agent.user.nick, className: "chat-msg-container agent chat-typing-progress" },
7980
+ React__default$1["default"].createElement(ChatMessagePart, { user: agent.user, showAvatar: true },
7981
+ React__default$1["default"].createElement("div", { className: "chat-msg" },
7982
+ React__default$1["default"].createElement(ChatMessageBubble, { owner: "others", hasTail: true },
7983
+ React__default$1["default"].createElement(TypingIndicator, null)))))));
7611
7984
  })));
7612
7985
  };
7613
7986
 
@@ -7628,19 +8001,19 @@ var defaultProps = {
7628
8001
  var MessageList = function (props) {
7629
8002
  if (props === void 0) { props = defaultProps; }
7630
8003
  var onSend = props.onSend, onWrite = props.onWrite, onOpenUrl = props.onOpenUrl;
7631
- var messagesEndRef = React.useRef(null);
7632
- React.useEffect(function () {
8004
+ var messagesEndRef = React$1.useRef(null);
8005
+ React$1.useEffect(function () {
7633
8006
  messagesEndRef.current.scrollIntoView({ behavior: "smooth" });
7634
8007
  }, [props.messages]);
7635
- var handleSend = React.useCallback(function (msg) {
8008
+ var handleSend = React$1.useCallback(function (msg) {
7636
8009
  onSend(msg);
7637
8010
  messagesEndRef.current.scrollIntoView({ behavior: "smooth" });
7638
8011
  }, [onSend]);
7639
- var handleWrite = React.useCallback(function (msg) {
8012
+ var handleWrite = React$1.useCallback(function (msg) {
7640
8013
  onWrite(msg);
7641
8014
  messagesEndRef.current.scrollIntoView({ behavior: "smooth" });
7642
8015
  }, [onWrite]);
7643
- var ctxCache = React.useMemo(function () { return new MiddlewareContextFactory({
8016
+ var ctxCache = React$1.useMemo(function () { return new MiddlewareContextFactory({
7644
8017
  send: handleSend,
7645
8018
  write: handleWrite,
7646
8019
  openUrl: onOpenUrl
@@ -7652,24 +8025,25 @@ var MessageList = function (props) {
7652
8025
  * @param addClass
7653
8026
  */
7654
8027
  function renderByType(msg, sibling) {
7655
- var user = props.agents[msg.user.nick];
8028
+ var _a;
8029
+ var user = (_a = props.agents[msg.user.nick]) === null || _a === void 0 ? void 0 : _a.user;
7656
8030
  switch (msg.type) {
7657
8031
  case "chat.file":
7658
8032
  case "chat.msg":
7659
- return (React__default["default"].createElement(ChatMessage, { key: msg.type + msg.timestamp, message: msg, sibling: sibling, agent: user, messageMiddleware: props.messageMiddleware, middlewareContext: ctxCache.resolve(user) }));
8033
+ return (React__default$1["default"].createElement(ChatMessage, { key: msg.type + msg.timestamp, message: msg, sibling: sibling, agent: user, messageMiddleware: props.messageMiddleware, middlewareContext: ctxCache.resolve(user) }));
7660
8034
  case "chat.memberjoin":
7661
8035
  case "chat.memberleave":
7662
8036
  case "chat.rating":
7663
8037
  case "chat.typing":
7664
- return (React__default["default"].createElement(SystemMessage, { key: msg.type + msg.timestamp, message: msg }));
8038
+ return (React__default$1["default"].createElement(SystemMessage, { key: msg.type + msg.timestamp, message: msg }));
7665
8039
  case "chat.request.rating":
7666
- return (React__default["default"].createElement(ChatRatingContainer, { key: msg.type + msg.timestamp, agent: props.agents[msg.user.nick], hasRating: props.hasRating, shouldDisplay: msg.timestamp === props.lastRatingRequestTimestamp }));
8040
+ return (React__default$1["default"].createElement(ChatRatingContainer, { key: msg.type + msg.timestamp, agent: user, hasRating: props.hasRating, shouldDisplay: msg.timestamp === props.lastRatingRequestTimestamp }));
7667
8041
  case "chat.offline":
7668
- return React__default["default"].createElement(OfflineFormContainer, { key: "offline-" + msg.timestamp });
8042
+ return React__default$1["default"].createElement(OfflineFormContainer, { key: "offline-".concat(msg.timestamp) });
7669
8043
  case "chat.prechat":
7670
- return React__default["default"].createElement(PrechatFormContainer, { key: "prechat" });
8044
+ return React__default$1["default"].createElement(PrechatFormContainer, { key: "prechat" });
7671
8045
  default:
7672
- return React__default["default"].createElement("div", { key: +new Date() },
8046
+ return React__default$1["default"].createElement("div", { key: +new Date() },
7673
8047
  "Unhandled message: ",
7674
8048
  JSON.stringify(msg));
7675
8049
  }
@@ -7692,23 +8066,23 @@ var MessageList = function (props) {
7692
8066
  });
7693
8067
  }
7694
8068
  var agents = props.agents, queuePosition = props.queuePosition;
7695
- return (React__default["default"].createElement("div", { className: "message-list-container" },
7696
- React__default["default"].createElement("div", { className: "message-list-container__msgs" },
8069
+ return (React__default$1["default"].createElement("div", { className: "message-list-container" },
8070
+ React__default$1["default"].createElement("div", { className: "message-list-container__msgs" },
7697
8071
  renderAll(),
7698
- React__default["default"].createElement("div", { ref: messagesEndRef, style: { float: "left", clear: "both" } }),
7699
- React__default["default"].createElement(QueuePosition, { position: queuePosition }),
7700
- React__default["default"].createElement(TypingStatus, { agents: agents })),
7701
- React__default["default"].createElement(ChatChipsContainer, null)));
8072
+ React__default$1["default"].createElement("div", { ref: messagesEndRef, style: { float: "left", clear: "both" } }),
8073
+ React__default$1["default"].createElement(QueuePosition, { position: queuePosition }),
8074
+ React__default$1["default"].createElement(TypingStatus, { agents: agents })),
8075
+ React__default$1["default"].createElement(ChatChipsContainer, null)));
7702
8076
  };
7703
8077
 
7704
8078
  var ServerOffline = function () {
7705
- return React__default["default"].createElement("div", { className: "server-offline" },
7706
- React__default["default"].createElement("h2", null, "Chat is currently unavailable"),
7707
- React__default["default"].createElement("h3", null, "Server is offline"));
8079
+ return React__default$1["default"].createElement("div", { className: "server-offline" },
8080
+ React__default$1["default"].createElement("h2", null, "Chat is currently unavailable"),
8081
+ React__default$1["default"].createElement("h3", null, "Server is offline"));
7708
8082
  };
7709
8083
 
7710
8084
  var MinimizeButton = function (props) {
7711
- return React__default["default"].createElement("div", { className: "minimize-button", onClick: props.onClick });
8085
+ return React__default$1["default"].createElement("div", { className: "minimize-button", onClick: props.onClick });
7712
8086
  };
7713
8087
 
7714
8088
  var DEFAULT_STATUS_CONFIG = {
@@ -7728,31 +8102,31 @@ function getStatusText(status, config) {
7728
8102
  }
7729
8103
  var StatusContainer = function (props) {
7730
8104
  var _a;
7731
- return (React__default["default"].createElement("div", { className: "status-container" },
7732
- React__default["default"].createElement("div", { className: "status-container__avatar" },
7733
- React__default["default"].createElement(Avatar, { entity: props.agent })),
7734
- React__default["default"].createElement("div", { className: "status-text" },
7735
- React__default["default"].createElement("span", null, getStatusText(props.accountStatus, (_a = props.config) === null || _a === void 0 ? void 0 : _a.status))),
8105
+ return (React__default$1["default"].createElement("div", { className: "status-container" },
8106
+ React__default$1["default"].createElement("div", { className: "status-container__avatar" },
8107
+ React__default$1["default"].createElement(Avatar, { entity: props.agent })),
8108
+ React__default$1["default"].createElement("div", { className: "status-text" },
8109
+ React__default$1["default"].createElement("span", null, getStatusText(props.accountStatus, (_a = props.config) === null || _a === void 0 ? void 0 : _a.status))),
7736
8110
  props.canMinimize &&
7737
- React__default["default"].createElement(MinimizeButton, { onClick: props.minimizeOnClick })));
8111
+ React__default$1["default"].createElement(MinimizeButton, { onClick: props.minimizeOnClick })));
7738
8112
  };
7739
8113
 
7740
8114
  function buildStyleContent(theme) {
7741
8115
  var _a, _b, _c, _d;
7742
- return "\n:root {\n" + buildVariables(withPrefix("\t--xapp-", union(single("primary-color", theme === null || theme === void 0 ? void 0 : theme.primaryColor), withPrefix("widget-", union(getSize(theme === null || theme === void 0 ? void 0 : theme.size), getMargins(theme === null || theme === void 0 ? void 0 : theme.margin), getBorderStyle(theme === null || theme === void 0 ? void 0 : theme.border))), getChatButtonStyle(theme === null || theme === void 0 ? void 0 : theme.chatButton), withPrefix("header-", getHeaderStyle(theme === null || theme === void 0 ? void 0 : theme.header)), withPrefix("footer-", getFooterStyle(theme === null || theme === void 0 ? void 0 : theme.footer)), withPrefix("content-", union(getBackgroundStyle((_a = theme === null || theme === void 0 ? void 0 : theme.content) === null || _a === void 0 ? void 0 : _a.background))), withPrefix("messages-", getMessagesStyle(theme === null || theme === void 0 ? void 0 : theme.messages)), withPrefix("send-", getButtonStyle(theme === null || theme === void 0 ? void 0 : theme.sendButton)), withPrefix("menu-", getButtonStyle(theme === null || theme === void 0 ? void 0 : theme.menuButton)), withPrefix("menu-", getMenuStyle(theme === null || theme === void 0 ? void 0 : theme.menu)), withPrefix("minimize-", getButtonStyle(theme === null || theme === void 0 ? void 0 : theme.minimizeButton)), withPrefix("carousel-", union(withPrefix("title-", getTextStyle((_b = theme === null || theme === void 0 ? void 0 : theme.carousel) === null || _b === void 0 ? void 0 : _b.title)), withPrefix("subtitle-", getTextStyle((_c = theme === null || theme === void 0 ? void 0 : theme.carousel) === null || _c === void 0 ? void 0 : _c.subtitle)), withPrefix("action-", getButtonStyle((_d = theme === null || theme === void 0 ? void 0 : theme.carousel) === null || _d === void 0 ? void 0 : _d.button)))), withPrefix("input-", getInputStyle(theme === null || theme === void 0 ? void 0 : theme.input)), withPrefix("cta-", getCtaStyle(theme === null || theme === void 0 ? void 0 : theme.cta))))) + "\n}";
8116
+ return "\n:root {\n".concat(buildVariables(withPrefix("\t--xapp-", union(single("primary-color", theme === null || theme === void 0 ? void 0 : theme.primaryColor), withPrefix("widget-", union(getSize(theme === null || theme === void 0 ? void 0 : theme.size), getMargins(theme === null || theme === void 0 ? void 0 : theme.margin), getBorderStyle(theme === null || theme === void 0 ? void 0 : theme.border))), getChatButtonStyle(theme === null || theme === void 0 ? void 0 : theme.chatButton), withPrefix("header-", getHeaderStyle(theme === null || theme === void 0 ? void 0 : theme.header)), withPrefix("footer-", getFooterStyle(theme === null || theme === void 0 ? void 0 : theme.footer)), withPrefix("content-", union(getBackgroundStyle((_a = theme === null || theme === void 0 ? void 0 : theme.content) === null || _a === void 0 ? void 0 : _a.background))), withPrefix("messages-", getMessagesStyle(theme === null || theme === void 0 ? void 0 : theme.messages)), withPrefix("send-", getButtonStyle(theme === null || theme === void 0 ? void 0 : theme.sendButton)), withPrefix("menu-", getButtonStyle(theme === null || theme === void 0 ? void 0 : theme.menuButton)), withPrefix("menu-", getMenuStyle(theme === null || theme === void 0 ? void 0 : theme.menu)), withPrefix("minimize-", getButtonStyle(theme === null || theme === void 0 ? void 0 : theme.minimizeButton)), withPrefix("carousel-", union(withPrefix("title-", getTextStyle((_b = theme === null || theme === void 0 ? void 0 : theme.carousel) === null || _b === void 0 ? void 0 : _b.title)), withPrefix("subtitle-", getTextStyle((_c = theme === null || theme === void 0 ? void 0 : theme.carousel) === null || _c === void 0 ? void 0 : _c.subtitle)), withPrefix("action-", getButtonStyle((_d = theme === null || theme === void 0 ? void 0 : theme.carousel) === null || _d === void 0 ? void 0 : _d.button)))), withPrefix("input-", getInputStyle(theme === null || theme === void 0 ? void 0 : theme.input)), withPrefix("cta-", getCtaStyle(theme === null || theme === void 0 ? void 0 : theme.cta))))), "\n}");
7743
8117
  }
7744
8118
  function WidgetStylesheet(props) {
7745
8119
  var theme = props.theme;
7746
8120
  var stylesContent = buildStyleContent(theme);
7747
- return (React__default["default"].createElement("style", null, stylesContent));
8121
+ return (React__default$1["default"].createElement("style", null, stylesContent));
7748
8122
  }
7749
8123
  function buildVariables(gen) {
7750
8124
  var result = gen.next();
7751
8125
  var res = "";
7752
8126
  while (result.done === false) {
7753
8127
  var _a = result.value, key = _a[0], value = _a[1];
7754
- if (value !== undefined) {
7755
- res += key + ": " + value + ";\n\r";
8128
+ if (value !== undefined && value !== null && value !== "") {
8129
+ res += "".concat(key, ": ").concat(value, ";\n\r");
7756
8130
  }
7757
8131
  result = gen.next();
7758
8132
  }
@@ -7760,14 +8134,14 @@ function buildVariables(gen) {
7760
8134
  }
7761
8135
  function withPrefix(prefix, gen) {
7762
8136
  var result;
7763
- return __generator(this, function (_a) {
8137
+ return __generator$1(this, function (_a) {
7764
8138
  switch (_a.label) {
7765
8139
  case 0:
7766
8140
  result = gen.next();
7767
8141
  _a.label = 1;
7768
8142
  case 1:
7769
8143
  if (!!result.done) return [3 /*break*/, 3];
7770
- return [4 /*yield*/, ["" + prefix + result.value[0], result.value[1]]];
8144
+ return [4 /*yield*/, ["".concat(prefix).concat(result.value[0]), result.value[1]]];
7771
8145
  case 2:
7772
8146
  _a.sent();
7773
8147
  result = gen.next();
@@ -7782,7 +8156,7 @@ function union() {
7782
8156
  for (_i = 0; _i < arguments.length; _i++) {
7783
8157
  children[_i] = arguments[_i];
7784
8158
  }
7785
- return __generator(this, function (_b) {
8159
+ return __generator$1(this, function (_b) {
7786
8160
  switch (_b.label) {
7787
8161
  case 0:
7788
8162
  _a = 0, children_1 = children;
@@ -7807,7 +8181,7 @@ function union() {
7807
8181
  });
7808
8182
  }
7809
8183
  function single(key, value) {
7810
- return __generator(this, function (_a) {
8184
+ return __generator$1(this, function (_a) {
7811
8185
  switch (_a.label) {
7812
8186
  case 0: return [4 /*yield*/, [key, value]];
7813
8187
  case 1:
@@ -7817,7 +8191,7 @@ function single(key, value) {
7817
8191
  });
7818
8192
  }
7819
8193
  function empty() {
7820
- return __generator(this, function (_a) {
8194
+ return __generator$1(this, function (_a) {
7821
8195
  return [2 /*return*/];
7822
8196
  });
7823
8197
  }
@@ -7837,7 +8211,7 @@ function getMessageStyle(style) {
7837
8211
  return union(single('bubble-color', style === null || style === void 0 ? void 0 : style.bubbleColor), getTextStyle(style === null || style === void 0 ? void 0 : style.text));
7838
8212
  }
7839
8213
  function getSize(style) {
7840
- return __generator(this, function (_a) {
8214
+ return __generator$1(this, function (_a) {
7841
8215
  switch (_a.label) {
7842
8216
  case 0: return [4 /*yield*/, ['width', style === null || style === void 0 ? void 0 : style.width]];
7843
8217
  case 1:
@@ -7850,7 +8224,7 @@ function getSize(style) {
7850
8224
  });
7851
8225
  }
7852
8226
  function getMargins(style) {
7853
- return __generator(this, function (_a) {
8227
+ return __generator$1(this, function (_a) {
7854
8228
  switch (_a.label) {
7855
8229
  case 0:
7856
8230
  if (!style) return [3 /*break*/, 5];
@@ -7872,7 +8246,7 @@ function getMargins(style) {
7872
8246
  });
7873
8247
  }
7874
8248
  function getPaddings(style) {
7875
- return __generator(this, function (_a) {
8249
+ return __generator$1(this, function (_a) {
7876
8250
  switch (_a.label) {
7877
8251
  case 0:
7878
8252
  if (!style) return [3 /*break*/, 5];
@@ -7894,7 +8268,7 @@ function getPaddings(style) {
7894
8268
  });
7895
8269
  }
7896
8270
  function getTextStyle(style) {
7897
- return __generator(this, function (_a) {
8271
+ return __generator$1(this, function (_a) {
7898
8272
  switch (_a.label) {
7899
8273
  case 0:
7900
8274
  if (!style) return [3 /*break*/, 6];
@@ -7919,7 +8293,7 @@ function getTextStyle(style) {
7919
8293
  });
7920
8294
  }
7921
8295
  function getBackgroundStyle(style) {
7922
- return __generator(this, function (_a) {
8296
+ return __generator$1(this, function (_a) {
7923
8297
  switch (_a.label) {
7924
8298
  case 0: return [4 /*yield*/, ["background", style]];
7925
8299
  case 1:
@@ -7929,7 +8303,7 @@ function getBackgroundStyle(style) {
7929
8303
  });
7930
8304
  }
7931
8305
  function getButtonStyle(style) {
7932
- return __generator(this, function (_a) {
8306
+ return __generator$1(this, function (_a) {
7933
8307
  switch (_a.label) {
7934
8308
  case 0: return [4 /*yield*/, ['button-color', style === null || style === void 0 ? void 0 : style.color]];
7935
8309
  case 1:
@@ -7945,7 +8319,7 @@ function getMenuStyle(style) {
7945
8319
  return union(withPrefix("item-", getMenuItemStyle(style === null || style === void 0 ? void 0 : style.item)));
7946
8320
  }
7947
8321
  function getBorderStyle(style) {
7948
- return __generator(this, function (_a) {
8322
+ return __generator$1(this, function (_a) {
7949
8323
  switch (_a.label) {
7950
8324
  case 0:
7951
8325
  if (!style) return [3 /*break*/, 4];
@@ -7991,14 +8365,14 @@ function getCtaStyle(style) {
7991
8365
  var ChatWidgetWrapper = function (props) {
7992
8366
  var rawConfig = props.config;
7993
8367
  var connection = useConnectionInfo(rawConfig);
7994
- var config = React.useMemo(function () {
8368
+ var config = React$1.useMemo(function () {
7995
8369
  var _a;
7996
8370
  return (__assign(__assign({}, rawConfig), { connection: connection, assetUrl: (_a = connection === null || connection === void 0 ? void 0 : connection.serverUrl) !== null && _a !== void 0 ? _a : defaultServerUrl, env: rawConfig }));
7997
8371
  }, [connection, rawConfig]);
7998
8372
  var chatServer = useChatServer(connection);
7999
- return (React__default["default"].createElement(ChatConfigContext.Provider, { value: config },
8000
- React__default["default"].createElement(ChatServerContext.Provider, { value: chatServer },
8001
- React__default["default"].createElement(ChatWidget, __assign({}, props)))));
8373
+ return (React__default$1["default"].createElement(ChatConfigContext.Provider, { value: config },
8374
+ React__default$1["default"].createElement(ChatServerContext.Provider, { value: chatServer },
8375
+ React__default$1["default"].createElement(ChatWidget, __assign({}, props)))));
8002
8376
  };
8003
8377
  var ChatWidget = function (props) {
8004
8378
  var _a, _b, _c, _d, _e, _f;
@@ -8009,12 +8383,12 @@ var ChatWidget = function (props) {
8009
8383
  var mode = (_a = props.mode) !== null && _a !== void 0 ? _a : "normal";
8010
8384
  var dockedMode = mode === "docked";
8011
8385
  var staticMode = mode === "static";
8012
- var modeClass = "widget-container--" + mode;
8386
+ var modeClass = "widget-container--".concat(mode);
8013
8387
  var canMinimize = !dockedMode && !staticMode;
8014
8388
  // Our state - pull from storage
8015
- var _g = React.useState(!canMinimize || !!get("visible)") || (((_b = props.config) === null || _b === void 0 ? void 0 : _b.autoOpenOnWidth) && window.matchMedia("(min-width: " + ((_c = props.config) === null || _c === void 0 ? void 0 : _c.autoOpenOnWidth) + ")").matches)), visible = _g[0], setVisibleState = _g[1];
8016
- var _h = React.useState(false), typing = _h[0], setTypingState = _h[1]; // false initially
8017
- var chatServer = React.useContext(ChatServerContext);
8389
+ var _g = React$1.useState(!canMinimize || !!get("visible)") || (((_b = props.config) === null || _b === void 0 ? void 0 : _b.autoOpenOnWidth) && window.matchMedia("(min-width: ".concat((_c = props.config) === null || _c === void 0 ? void 0 : _c.autoOpenOnWidth, ")")).matches)), visible = _g[0], setVisibleState = _g[1];
8390
+ var _h = React$1.useState(false), typing = _h[0], setTypingState = _h[1]; // false initially
8391
+ var chatServer = React$1.useContext(ChatServerContext);
8018
8392
  function setVisible(newVisible) {
8019
8393
  if (staticMode) {
8020
8394
  return;
@@ -8108,22 +8482,22 @@ var ChatWidget = function (props) {
8108
8482
  useGreeting(!isOffline && !props.preChatFormEnabled && visible);
8109
8483
  var config = props.config, onConnectionStatusChange = props.onConnectionStatusChange;
8110
8484
  var connectionStatus = chatState.connection.connectionStatus;
8111
- React.useEffect(function () {
8485
+ React$1.useEffect(function () {
8112
8486
  if (onConnectionStatusChange) {
8113
8487
  onConnectionStatusChange(connectionStatus);
8114
8488
  }
8115
8489
  }, [connectionStatus, onConnectionStatusChange]);
8116
8490
  useExternalScript((_d = props.config) === null || _d === void 0 ? void 0 : _d.middlewareUrl);
8117
- return (React__default["default"].createElement(React__default["default"].Fragment, null,
8118
- React__default["default"].createElement("div", { className: "widget-container " + modeClass + " " + getVisibilityClass() },
8119
- React__default["default"].createElement(WidgetStylesheet, { theme: config === null || config === void 0 ? void 0 : config.theme }),
8120
- React__default["default"].createElement(StatusContainer, { accountStatus: chatState.accountStatus, minimizeOnClick: minimizeOnClick, agent: (_e = chatState.agents["agent:robot"]) === null || _e === void 0 ? void 0 : _e.user, canMinimize: canMinimize, config: config === null || config === void 0 ? void 0 : config.header }),
8121
- React__default["default"].createElement(MessageList, { visible: visible, queuePosition: chatState.queuePosition, isChatting: chatState.isChatting, isOffline: isOffline, messages: messages, agents: chatState.agents, lastRatingRequestTimestamp: chatState.lastRatingRequestTimestamp, hasRating: chatState.hasRating, visitorId: chatState.visitorId, messageMiddleware: props.messageMiddleware, onSend: handleSendMessage, onWrite: handleWriteMessage, onOpenUrl: handleOpenUrl }),
8122
- React__default["default"].createElement("div", { className: "spinner-container " + (visible && connectionStatus === "pending" ? "visible" : "") },
8123
- React__default["default"].createElement("div", { className: "spinner" })),
8124
- connectionStatus === "offline" && React__default["default"].createElement(ServerOffline, null),
8125
- React__default["default"].createElement(ChatFooter, { isChatting: chatState.isChatting, onChange: handleOnChange, onSubmit: handleOnSubmit, onFileUpload: handleFileUpload })),
8126
- React__default["default"].createElement(ChatButton, { addClass: getVisibilityClass(), onClick: chatButtonOnClick, config: (_f = props.config) === null || _f === void 0 ? void 0 : _f.cta, visible: visible })));
8491
+ return (React__default$1["default"].createElement(React__default$1["default"].Fragment, null,
8492
+ React__default$1["default"].createElement("div", { className: "widget-container ".concat(modeClass, " ").concat(getVisibilityClass()) },
8493
+ React__default$1["default"].createElement(WidgetStylesheet, { theme: config === null || config === void 0 ? void 0 : config.theme }),
8494
+ React__default$1["default"].createElement(StatusContainer, { accountStatus: chatState.accountStatus, minimizeOnClick: minimizeOnClick, agent: (_e = chatState.agents["agent:robot"]) === null || _e === void 0 ? void 0 : _e.user, canMinimize: canMinimize, config: config === null || config === void 0 ? void 0 : config.header }),
8495
+ React__default$1["default"].createElement(MessageList, { visible: visible, queuePosition: chatState.queuePosition, isChatting: chatState.isChatting, isOffline: isOffline, messages: messages, agents: chatState.agents, lastRatingRequestTimestamp: chatState.lastRatingRequestTimestamp, hasRating: chatState.hasRating, visitorId: chatState.visitorId, messageMiddleware: props.messageMiddleware, onSend: handleSendMessage, onWrite: handleWriteMessage, onOpenUrl: handleOpenUrl }),
8496
+ React__default$1["default"].createElement("div", { className: "spinner-container ".concat(visible && connectionStatus === "pending" ? "visible" : "") },
8497
+ React__default$1["default"].createElement("div", { className: "spinner" })),
8498
+ connectionStatus === "offline" && React__default$1["default"].createElement(ServerOffline, null),
8499
+ React__default$1["default"].createElement(ChatFooter, { isChatting: chatState.isChatting, onChange: handleOnChange, onSubmit: handleOnSubmit, onFileUpload: handleFileUpload })),
8500
+ React__default$1["default"].createElement(ChatButton, { addClass: getVisibilityClass(), onClick: chatButtonOnClick, config: (_f = props.config) === null || _f === void 0 ? void 0 : _f.cta, visible: visible })));
8127
8501
  };
8128
8502
 
8129
8503
  function tryParseJson(str) {
@@ -8162,7 +8536,7 @@ var BrowserStateStorage = /** @class */ (function () {
8162
8536
  * @returns {string}
8163
8537
  */
8164
8538
  function visitorFingerprint() {
8165
- return uuid();
8539
+ return uuid_1();
8166
8540
  }
8167
8541
 
8168
8542
  var DEFAULT_VISITOR = {
@@ -8218,7 +8592,7 @@ function connectionReducer(state, action) {
8218
8592
  }
8219
8593
 
8220
8594
  function joinMessages(messages, msg) {
8221
- return insertSorted(__spreadArray([], messages, true), msg, function (left, right) { return left.timestamp - right.timestamp; });
8595
+ return insertSorted(__spreadArray$1([], messages, true), msg, function (left, right) { return left.timestamp - right.timestamp; });
8222
8596
  }
8223
8597
 
8224
8598
  function memberJoin(state, detail) {
@@ -8249,7 +8623,7 @@ function memberLeave(state, detail) {
8249
8623
 
8250
8624
  function resetReducer(state) {
8251
8625
  if (state === void 0) { state = DEFAULT_STATE; }
8252
- return __assign(__assign({}, createDefaultState()), { connection: __assign(__assign({}, state.connection), { nonce: uuid() }), visitor: state.visitor, visitorId: state.visitorId });
8626
+ return __assign(__assign({}, createDefaultState()), { connection: __assign(__assign({}, state.connection), { nonce: uuid_1() }), visitor: state.visitor, visitorId: state.visitorId });
8253
8627
  }
8254
8628
 
8255
8629
  // todo: create reducer (requires redux-thunk dependncy)
@@ -8348,7 +8722,7 @@ function mapSynthetic(state, action) {
8348
8722
  }
8349
8723
  };
8350
8724
  default:
8351
- throw new Error("Unknown synthetic action. Detail type: " + action.detail.type);
8725
+ throw new Error("Unknown synthetic action. Detail type: ".concat(action.detail.type));
8352
8726
  }
8353
8727
  }
8354
8728
  function storeHandler(state, action) {
@@ -8363,13 +8737,14 @@ function storeHandler(state, action) {
8363
8737
  }
8364
8738
  }
8365
8739
 
8366
- function createChatStore(config) {
8367
- var storage = new BrowserStateStorage(sessionStorage, "xappchat." + config.serverUrl + "." + config.accountKey);
8740
+ function createChatStore(config, dataStorage) {
8741
+ if (dataStorage === void 0) { dataStorage = sessionStorage; }
8742
+ var storage = new BrowserStateStorage(dataStorage, "xappchat.".concat(config.serverUrl, ".").concat(config.accountKey));
8368
8743
  var chatReducer = persistStateReducer(storage, DEFAULT_STATE, storeHandler);
8369
8744
  var middlewares = [
8370
8745
  thunk__default["default"]
8371
8746
  ];
8372
- var composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || redux.compose;
8747
+ var composeEnhancers = globalThis.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || redux.compose;
8373
8748
  return redux.createStore(chatReducer, composeEnhancers(redux.applyMiddleware.apply(void 0, middlewares)));
8374
8749
  }
8375
8750
 
@@ -8377,13 +8752,13 @@ var ChatWidgetContainer = function (props) {
8377
8752
  var _a;
8378
8753
  var messageMiddleware = useStandardMiddleware();
8379
8754
  var connection = useServerConfig(props.config);
8380
- var chatStore = React.useMemo(function () { return createChatStore(connection); }, [connection]);
8755
+ var chatStore = React$1.useMemo(function () { return createChatStore(connection); }, [connection]);
8381
8756
  if ((_a = props.config) === null || _a === void 0 ? void 0 : _a.disabled) {
8382
- return React__default["default"].createElement(React__default["default"].Fragment, null);
8757
+ return React__default$1["default"].createElement(React__default$1["default"].Fragment, null);
8383
8758
  }
8384
8759
  var widgetProps = __assign(__assign({}, props), { messageMiddleware: messageMiddleware });
8385
- return (React__default["default"].createElement(reactRedux.Provider, { store: chatStore },
8386
- React__default["default"].createElement(ChatWidgetWrapper, __assign({}, widgetProps))));
8760
+ return (React__default$1["default"].createElement(reactRedux.Provider, { store: chatStore },
8761
+ React__default$1["default"].createElement(ChatWidgetWrapper, __assign({}, widgetProps))));
8387
8762
  };
8388
8763
 
8389
8764
  function createStaticReducer(state) {
@@ -8404,35 +8779,35 @@ function createStaticStore(state) {
8404
8779
 
8405
8780
  var StaticChatWidgetContainer = function (props) {
8406
8781
  var state = props.state;
8407
- var store = React.useMemo(function () {
8782
+ var store = React$1.useMemo(function () {
8408
8783
  return createStaticStore(state);
8409
8784
  }, [state]);
8410
- var config = React.useMemo(function () {
8785
+ var config = React$1.useMemo(function () {
8411
8786
  return __assign(__assign({}, props.config), { connection: {
8412
8787
  serverUrl: "",
8413
8788
  type: "local"
8414
8789
  } });
8415
8790
  }, [props.config]);
8416
- return (React__default["default"].createElement(reactRedux.Provider, { store: store },
8417
- React__default["default"].createElement(ChatWidgetWrapper, __assign({}, props, { config: config }))));
8791
+ return (React__default$1["default"].createElement(reactRedux.Provider, { store: store },
8792
+ React__default$1["default"].createElement(ChatWidgetWrapper, __assign({}, props, { config: config }))));
8418
8793
  };
8419
8794
 
8420
8795
  function createStateFromMessages(messages) {
8421
8796
  var def = createDefaultState();
8422
- return __assign(__assign({}, def), { connection: __assign(__assign({}, def.connection), { connectionStatus: "online" }), accountStatus: "online", chats: __spreadArray([], messages, true), isChatting: true });
8797
+ return __assign(__assign({}, def), { connection: __assign(__assign({}, def.connection), { connectionStatus: "online" }), accountStatus: "online", chats: __spreadArray$1([], messages, true), isChatting: true });
8423
8798
  }
8424
8799
 
8425
8800
  var StaticMessagesChatWidgetContainer = function (props) {
8426
8801
  var messages = props.messages;
8427
- var state = React.useMemo(function () {
8802
+ var state = React$1.useMemo(function () {
8428
8803
  return createStateFromMessages(messages);
8429
8804
  }, [messages]);
8430
- return (React__default["default"].createElement(StaticChatWidgetContainer, { state: state, mode: props.mode, config: props.config }));
8805
+ return (React__default$1["default"].createElement(StaticChatWidgetContainer, { state: state, mode: props.mode, config: props.config }));
8431
8806
  };
8432
8807
 
8433
8808
  Object.defineProperty(exports, 'React', {
8434
8809
  enumerable: true,
8435
- get: function () { return React__default["default"]; }
8810
+ get: function () { return React__default$1["default"]; }
8436
8811
  });
8437
8812
  exports.ActionButton = ActionButton;
8438
8813
  exports.Avatar = Avatar;