@xapp/chat-widget 1.29.1 → 1.32.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,631 @@ 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
+ var MessageBubble = function (props) {
2146
+ return (React__default["default"].createElement("div", { className: "xappw-message-bubble" }, props.children));
2147
+ };
2148
+
2149
+ // compile time full switch-case verification
2150
+ function throwBadKind(x) {
2151
+ throw new Error("Unknown kind " + x);
2152
+ }
2153
+
2154
+ var RichTextBoldSpan = function (props) {
2155
+ var format = props.format, text = props.text;
2156
+ return (React__default["default"].createElement("span", { "data-rich-text-type": "bold", className: "xapp-search-rich-text-bold-span" }, text.substring(format.start, format.end)));
2157
+ };
2158
+
2159
+ var RichTextInputSpan = function (props) {
2160
+ var format = props.format, text = props.text, readOnly = props.readOnly;
2161
+ var defaultValue = format.text || text.substring(format.start, format.end);
2162
+ var _a = React.useState(defaultValue), value = _a[0], setValue = _a[1];
2163
+ var handleChange = React.useCallback(function (ev) {
2164
+ setValue(ev.target.value);
2165
+ }, []);
2166
+ if (readOnly) {
2167
+ return (React__default["default"].createElement("span", { className: "xapp-search-rich-text-input-span xapp-search-rich-text-input-span--readonly" }, defaultValue));
2168
+ }
2169
+ 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 }));
2170
+ };
2171
+
2172
+ var RichTextNormalSpan = function (props) {
2173
+ var format = props.format, text = props.text;
2174
+ return (React__default["default"].createElement("span", { "data-rich-text-type": "normal", className: "xapp-search-rich-text-normal-span" }, text.substring(format.start, format.end)));
2175
+ };
2176
+
2177
+ var RichTextSpan = function (props) {
2178
+ var format = props.format, text = props.text, readOnly = props.readOnly;
2179
+ var type = format.type;
2180
+ switch (type) {
2181
+ case "normal":
2182
+ return (React__default["default"].createElement(RichTextNormalSpan, { text: text, format: format, readOnly: readOnly }));
2183
+ case "bold":
2184
+ return (React__default["default"].createElement(RichTextBoldSpan, { text: text, format: format, readOnly: readOnly }));
2185
+ case "inputText":
2186
+ return (React__default["default"].createElement(RichTextInputSpan, { text: text, format: format, readOnly: readOnly }));
2187
+ default:
2188
+ throwBadKind(type);
2189
+ }
2190
+ };
2191
+
2192
+ function cleanRichTextValue(value) {
2193
+ var text = value.text, formats = value.formats;
2194
+ var newFormats = [];
2195
+ for (var _i = 0, formats_1 = formats; _i < formats_1.length; _i++) {
2196
+ var format = formats_1[_i];
2197
+ var type = format.type;
2198
+ switch (type) {
2199
+ case "normal":
2200
+ continue;
2201
+ case "inputText":
2202
+ newFormats.push(format);
2203
+ break;
2204
+ case "bold":
2205
+ if (newFormats.length > 0) {
2206
+ var prev = newFormats[newFormats.length - 1];
2207
+ if (prev.type === type && prev.end === format.start) {
2208
+ newFormats.pop();
2209
+ newFormats.push({
2210
+ type: type,
2211
+ start: prev.start,
2212
+ end: format.end
2213
+ });
2214
+ }
2215
+ }
2216
+ else {
2217
+ newFormats.push(format);
2218
+ }
2219
+ break;
2220
+ }
2221
+ }
2222
+ return {
2223
+ text: text,
2224
+ formats: newFormats
2225
+ };
2226
+ }
2227
+
2228
+ function extendFormat(formats, length) {
2229
+ var res = [];
2230
+ var walkerIndex = 0;
2231
+ for (var _i = 0, formats_1 = formats; _i < formats_1.length; _i++) {
2232
+ var format = formats_1[_i];
2233
+ var start = format.start, end = format.end, type = format.type, text = format.text;
2234
+ if (walkerIndex < start) {
2235
+ res.push({
2236
+ type: "normal",
2237
+ start: walkerIndex,
2238
+ end: start
2239
+ });
2240
+ }
2241
+ res.push({
2242
+ type: type,
2243
+ start: start,
2244
+ end: end,
2245
+ text: text
2246
+ });
2247
+ walkerIndex = end;
2248
+ }
2249
+ if (walkerIndex < length) {
2250
+ res.push({
2251
+ type: "normal",
2252
+ start: walkerIndex,
2253
+ end: length
2254
+ });
2255
+ }
2256
+ return res;
2257
+ }
2258
+
2259
+ function parseContent(node) {
2260
+ var children = node.childNodes;
2261
+ var formats = [];
2262
+ var text = "";
2263
+ children.forEach(function (child) {
2264
+ if (child.nodeType === Node.ELEMENT_NODE) {
2265
+ var node_1 = child;
2266
+ var innerText = node_1.tagName === "INPUT" ? node_1.value : node_1.innerText;
2267
+ var type = node_1.dataset.richTextType;
2268
+ formats.push({
2269
+ type: type,
2270
+ start: text.length,
2271
+ end: text.length + innerText.length
2272
+ });
2273
+ text += innerText;
2274
+ }
2275
+ if (child.nodeType === Node.TEXT_NODE) {
2276
+ var node_2 = child;
2277
+ var innerText = node_2.nodeValue;
2278
+ if (innerText) {
2279
+ formats.push({
2280
+ type: "normal",
2281
+ start: text.length,
2282
+ end: text.length + innerText.length
2283
+ });
2284
+ text += innerText;
2285
+ }
2286
+ }
2287
+ });
2288
+ return cleanRichTextValue({
2289
+ text: text,
2290
+ formats: formats
2291
+ });
2292
+ }
2293
+ function cleanContent(node) {
2294
+ var _a;
2295
+ var trash = [];
2296
+ var raw = node.childNodes;
2297
+ for (var i = 0; i < raw.length; i++) {
2298
+ var c = raw.item(i);
2299
+ if ((c === null || c === void 0 ? void 0 : c.nodeType) === Node.TEXT_NODE) {
2300
+ trash.push(c);
2301
+ }
2302
+ }
2303
+ for (var _i = 0, trash_1 = trash; _i < trash_1.length; _i++) {
2304
+ var c = trash_1[_i];
2305
+ try {
2306
+ (_a = c.parentElement) === null || _a === void 0 ? void 0 : _a.removeChild(c);
2307
+ }
2308
+ catch (_b) {
2309
+ }
2310
+ }
2311
+ }
2312
+ var RichText = function (props) {
2313
+ var value = props.value, className = props.className, readOnly = props.readOnly, onInput = props.onInput, onChange = props.onChange;
2314
+ var formatsRaw = value.formats, text = value.text;
2315
+ var formats = React.useMemo(function () { return extendFormat(formatsRaw, text.length); }, [formatsRaw, text.length]);
2316
+ var handleInput = React.useCallback(function (ev) {
2317
+ var target = ev.currentTarget;
2318
+ var newValue = parseContent(target);
2319
+ if (onInput) {
2320
+ onInput(newValue);
2321
+ }
2322
+ }, [onInput]);
2323
+ var handleBlur = React.useCallback(function (ev) {
2324
+ var target = ev.currentTarget;
2325
+ var newValue = parseContent(target);
2326
+ cleanContent(target);
2327
+ if (onChange) {
2328
+ onChange(newValue);
2329
+ }
2330
+ }, [onChange]);
2331
+ 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 })); })));
2332
+ };
2333
+
2334
+ var RichInput = function (props) {
2335
+ var id = props.id, value = props.value, type = props.type, autoFocus = props.autoFocus, onChange = props.onChange, onInput = props.onInput, onKeyDown = props.onKeyDown;
2336
+ var rich = value.formats.some(function (f) { return f.type === "inputText"; });
2337
+ var handleChange = React.useCallback(function (ev) {
2338
+ onChange({
2339
+ text: ev.target.value,
2340
+ formats: []
2341
+ });
2342
+ }, [onChange]);
2343
+ var handleRichChange = React.useCallback(function (val) {
2344
+ onChange(val);
2345
+ }, [onChange]);
2346
+ var handleInput = React.useCallback(function (ev) {
2347
+ if (onInput) {
2348
+ onInput({
2349
+ text: ev.target.value,
2350
+ formats: []
2351
+ });
2352
+ }
2353
+ }, [onInput]);
2354
+ var handleRichInput = React.useCallback(function (val) {
2355
+ if (onInput) {
2356
+ onInput(val);
2357
+ }
2358
+ }, [onInput]);
2359
+ var handleKeyDown = React.useCallback(function (event) {
2360
+ if (onKeyDown) {
2361
+ onKeyDown(event);
2362
+ }
2363
+ }, [onKeyDown]);
2364
+ return (React__default["default"].createElement("div", { className: "xappw-rich-input ".concat(props.className) }, rich ?
2365
+ 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 })));
2366
+ };
2367
+
2368
+ var SuggestionsGroupHeading = function (props) {
2369
+ return (React__default["default"].createElement("div", { className: "xappw-suggestions-group-heading" }, props.label));
2370
+ };
2371
+
2372
+ function getScrollContainer(node) {
2373
+ var walker = node;
2374
+ while (walker && !walker.classList.contains("xapp-search-result__suggestions")) {
2375
+ walker = walker.parentElement;
2376
+ }
2377
+ return walker || undefined;
2378
+ }
2379
+ var SuggestionsItem = function (props) {
2380
+ var data = props.data, current = props.current, ActionsComponent = props.actions, onClick = props.onClick, onHover = props.onHover;
2381
+ var handleClick = React.useCallback(function () {
2382
+ onClick(data);
2383
+ }, [data, onClick]);
2384
+ var handleHover = React.useCallback(function () {
2385
+ if (onHover) {
2386
+ onHover(data);
2387
+ }
2388
+ }, [data, onHover]);
2389
+ var ref = React.useRef(null);
2390
+ React.useEffect(function () {
2391
+ var node = ref.current;
2392
+ if (current && node) {
2393
+ var scrollContainer = getScrollContainer(node);
2394
+ if (scrollContainer) {
2395
+ var scrollBox = scrollContainer.getBoundingClientRect();
2396
+ var nodeBox = node.getBoundingClientRect();
2397
+ var maxTop = Math.max(scrollBox.top, nodeBox.top);
2398
+ var minBottom = Math.min(scrollBox.bottom, nodeBox.bottom);
2399
+ var visibleHeight = minBottom - maxTop;
2400
+ var actualHeight = nodeBox.height;
2401
+ if (visibleHeight < actualHeight * 0.99) {
2402
+ node.scrollIntoView({ behavior: "smooth" });
2403
+ }
2404
+ }
2405
+ }
2406
+ }, [current]);
2407
+ return (React__default["default"].createElement("div", { ref: ref, className: "xappw-suggestions-item ".concat(current ? "xappw-suggestions-item--current" : ""), onClick: handleClick, onMouseEnter: handleHover },
2408
+ React__default["default"].createElement(RichText, { value: data, className: "xappw-suggestions-item__texts", readOnly: true }),
2409
+ ActionsComponent &&
2410
+ React__default["default"].createElement("div", { className: "xappw-suggestions-item__actions" },
2411
+ React__default["default"].createElement(ActionsComponent, { data: data, current: current }))));
2412
+ };
2413
+
2414
+ var SuggestionsGroup = function (props) {
2415
+ var group = props.group, currentIndex = props.currentIndex, itemActions = props.itemActions;
2416
+ var heading = group.heading, items = group.items;
2417
+ return (React__default["default"].createElement("div", { className: "xappw-suggestions-group" },
2418
+ React__default["default"].createElement("div", { className: "xappw-suggestions-group__heading" },
2419
+ React__default["default"].createElement(SuggestionsGroupHeading, { label: heading })),
2420
+ React__default["default"].createElement("div", { className: "xappw-suggestions-group__items" }, items.map(function (item, itemIndex) {
2421
+ return React__default["default"].createElement(SuggestionsItem, { key: itemIndex, data: item, current: currentIndex === itemIndex, actions: itemActions, onClick: props.onItemClick, onHover: props.onItemHover });
2422
+ }))));
2423
+ };
2424
+
2425
+ function getItemsLength(result) {
2426
+ return result.reduce(function (prev, cur) { return prev + cur.items.length; }, 0);
2427
+ }
2428
+
2429
+ var SuggestionsList = function (props) {
2430
+ var suggestions = props.suggestions, itemActions = props.itemActions, className = props.className;
2431
+ var length = React.useMemo(function () { return getItemsLength(suggestions); }, [suggestions]);
2432
+ var currentIndex = length >= 0 ? props.index : NaN;
2433
+ var indexWalker = 0;
2434
+ return (React__default["default"].createElement("div", { className: "xappw-suggestions-list ".concat(className || "") }, suggestions.map(function (group, index) {
2435
+ var res = (React__default["default"].createElement(SuggestionsGroup, { key: index, group: group, currentIndex: currentIndex - indexWalker, itemActions: itemActions, onItemClick: props.onItemClick, onItemHover: props.onItemHover }));
2436
+ indexWalker += group.items.length;
2437
+ return res;
2438
+ })));
2439
+ };
2440
+
2441
+ function findItemByIndex(groups, index) {
2442
+ if (index >= 0) {
2443
+ for (var _i = 0, groups_1 = groups; _i < groups_1.length; _i++) {
2444
+ var group = groups_1[_i];
2445
+ for (var _a = 0, _b = group.items; _a < _b.length; _a++) {
2446
+ var item = _b[_a];
2447
+ if (index <= 0) {
2448
+ return item;
2449
+ }
2450
+ index--;
2451
+ }
2452
+ }
2453
+ }
2454
+ return undefined;
2455
+ }
2456
+
2457
+ function parseSuggestionsFormat(format) {
2458
+ var types = Object.keys(format);
2459
+ var type = types[0];
2460
+ var item = format[type];
2461
+ if (!item) {
2462
+ throw new Error();
2463
+ }
2464
+ return {
2465
+ type: type,
2466
+ start: item.start,
2467
+ end: item.end
2468
+ };
2469
+ }
2470
+ function parseSuggestionsFormats(formats) {
2471
+ return formats.map(parseSuggestionsFormat);
2472
+ }
2473
+ function parseSuggestionsResponseItem(item) {
2474
+ return {
2475
+ text: item.suggestion,
2476
+ content: item.answer,
2477
+ formats: parseSuggestionsFormats(item.format),
2478
+ type: item.type
2479
+ };
2480
+ }
2481
+ function getHeading(type) {
2482
+ switch (type) {
2483
+ case "FAQ":
2484
+ return "FAQs";
2485
+ case "INTENT":
2486
+ return "Suggestions";
2487
+ case "HISTORICAL":
2488
+ return "Suggestions";
2489
+ default:
2490
+ return type;
2491
+ }
2492
+ }
2493
+ function parseSuggestionsResponse(response, direction) {
2494
+ if (direction === void 0) { direction = 1; }
2495
+ if (!response) {
2496
+ return undefined;
2497
+ }
2498
+ var items = sortSuggestionItems(response.suggestions, direction);
2499
+ return items.reduce(function (result, current) {
2500
+ var mappedItem = parseSuggestionsResponseItem(current);
2501
+ if (result.length) {
2502
+ var prevGroup = result[result.length - 1];
2503
+ if (prevGroup.heading === getHeading(current.type)) {
2504
+ prevGroup.items.push(mappedItem);
2505
+ return result;
2506
+ }
2507
+ }
2508
+ result.push({
2509
+ heading: getHeading(current.type),
2510
+ items: [mappedItem]
2511
+ });
2512
+ return result;
2513
+ }, []);
2514
+ }
2515
+
2516
+ /*! *****************************************************************************
2517
+ Copyright (c) Microsoft Corporation.
2518
+
2519
+ Permission to use, copy, modify, and/or distribute this software for any
2520
+ purpose with or without fee is hereby granted.
2521
+
2522
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
2523
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
2524
+ AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
2525
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
2526
+ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
2527
+ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
2528
+ PERFORMANCE OF THIS SOFTWARE.
2529
+ ***************************************************************************** */
2530
+
2531
+ function __awaiter(thisArg, _arguments, P, generator) {
2532
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
2533
+ return new (P || (P = Promise))(function (resolve, reject) {
2534
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
2535
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
2536
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
2537
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
2538
+ });
2539
+ }
2540
+
2541
+ function __generator(thisArg, body) {
2542
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
2543
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
2544
+ function verb(n) { return function (v) { return step([n, v]); }; }
2545
+ function step(op) {
2546
+ if (f) throw new TypeError("Generator is already executing.");
2547
+ while (_) try {
2548
+ 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;
2549
+ if (y = 0, t) op = [op[0] & 2, t.value];
2550
+ switch (op[0]) {
2551
+ case 0: case 1: t = op; break;
2552
+ case 4: _.label++; return { value: op[1], done: false };
2553
+ case 5: _.label++; y = op[1]; op = [0]; continue;
2554
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
2555
+ default:
2556
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
2557
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
2558
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
2559
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
2560
+ if (t[2]) _.ops.pop();
2561
+ _.trys.pop(); continue;
2562
+ }
2563
+ op = body.call(thisArg, _);
2564
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
2565
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
2566
+ }
2567
+ }
2568
+
2569
+ function __spreadArray(to, from, pack) {
2570
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
2571
+ if (ar || !(i in from)) {
2572
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
2573
+ ar[i] = from[i];
2574
+ }
2575
+ }
2576
+ return to.concat(ar || Array.prototype.slice.call(from));
2577
+ }
2578
+
2579
+ var order = ["FAQ", "INTENT", "HISTORICAL"];
2580
+ var ordersMap = order.reduce(function (prev, cur, index) {
2581
+ prev[cur] = index;
2582
+ return prev;
2583
+ }, {});
2584
+ function compareSuggestionItems(left, right, direction) {
2585
+ return direction * (ordersMap[right.type] - ordersMap[left.type]);
2586
+ }
2587
+ function sortSuggestionItems(items, direction) {
2588
+ return __spreadArray([], items, true).sort(function (left, right) { return compareSuggestionItems(left, right, direction); });
2589
+ }
2590
+
2591
+ /**
2592
+ * Append the provided query params to the URL
2593
+ *
2594
+ * It will overwrite existing params on the URL if there are conflicts
2595
+ * @param url
2596
+ * @param params
2597
+ */
2598
+ function addQueryParametersToURL(url, params) {
2599
+ var existingParams = new URL(url).searchParams;
2600
+ params.forEach(function (value, key) {
2601
+ existingParams.append(key, value);
2602
+ });
2603
+ var newUrl = new URL(url);
2604
+ newUrl.search = existingParams.toString();
2605
+ return newUrl;
2606
+ }
2607
+
2608
+ var defaultOptions = {};
2609
+ function noop$1() {
2610
+ }
2611
+ function useJsonFetch(url, options) {
2612
+ if (options === void 0) { options = defaultOptions; }
2613
+ var _a = React.useState({
2614
+ state: "paused"
2615
+ }), value = _a[0], setValue = _a[1];
2616
+ var pause = options.pause;
2617
+ React.useEffect(function () {
2618
+ if (pause) {
2619
+ setValue({
2620
+ state: "paused"
2621
+ });
2622
+ return noop$1;
2623
+ }
2624
+ var controller = new AbortController();
2625
+ var signal = controller.signal;
2626
+ var mounted = true;
2627
+ (function () {
2628
+ return __awaiter(this, void 0, void 0, function () {
2629
+ var response, json, e_1;
2630
+ return __generator(this, function (_a) {
2631
+ switch (_a.label) {
2632
+ case 0:
2633
+ _a.trys.push([0, 4, , 5]);
2634
+ setValue({
2635
+ state: "fetching"
2636
+ });
2637
+ return [4 /*yield*/, fetch(url, { signal: signal })];
2638
+ case 1:
2639
+ response = _a.sent();
2640
+ if (!mounted) return [3 /*break*/, 3];
2641
+ return [4 /*yield*/, response.json()];
2642
+ case 2:
2643
+ json = _a.sent();
2644
+ if (response.ok) {
2645
+ setValue({
2646
+ state: "success",
2647
+ data: json
2648
+ });
2649
+ }
2650
+ else {
2651
+ setValue({
2652
+ state: "error",
2653
+ error: json
2654
+ });
2655
+ }
2656
+ _a.label = 3;
2657
+ case 3: return [3 /*break*/, 5];
2658
+ case 4:
2659
+ e_1 = _a.sent();
2660
+ if (e_1.name === "AbortError") {
2661
+ setValue({
2662
+ state: "paused"
2663
+ });
2664
+ return [2 /*return*/];
2665
+ }
2666
+ throw e_1;
2667
+ case 5: return [2 /*return*/];
2668
+ }
2669
+ });
2670
+ });
2671
+ })();
2672
+ return function () {
2673
+ mounted = false;
2674
+ controller.abort();
2675
+ };
2676
+ }, [url, pause]);
2677
+ return value;
2678
+ }
2679
+
2680
+ function useSuggestionsFetch$1(options) {
2681
+ var baseUrl = options.url, context = options.context, query = options.query;
2682
+ var url = React.useMemo(function () {
2683
+ if (!baseUrl) {
2684
+ return undefined;
2685
+ }
2686
+ var params = new URLSearchParams();
2687
+ params.append("size", "5");
2688
+ params.append("queryText", query);
2689
+ if (context === null || context === void 0 ? void 0 : context.length) {
2690
+ params.append("activeContexts", context.join(","));
2691
+ }
2692
+ return addQueryParametersToURL(baseUrl, params);
2693
+ }, [query, context, baseUrl]);
2694
+ var response = useJsonFetch(url ? "".concat(url.toString()) : "", {
2695
+ pause: !query || !baseUrl
2696
+ });
2697
+ return response;
2698
+ }
2699
+
2700
+ /**
2701
+ * Quicker configurable uuid
2702
+ *
2703
+ * @export
2704
+ * @returns {string}
2705
+ */
2706
+ function uuid() {
2707
+ var d = new Date().getTime();
2708
+ var newUuid = "xxxxxxxx-xxxx-65xx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) {
2709
+ /* tslint:disable:no-magic-numbers */
2710
+ /* tslint:disable:no-bitwise */
2711
+ var r = (d + Math.random() * 16) % 16 | 0;
2712
+ d = Math.floor(d / 16);
2713
+ return (c === "x" ? r : (r & 0x3) | 0x8).toString(16);
2714
+ /* tslint:enable:no-magic-numbers */
2715
+ /* tslint:disable:no-bitwise */
2716
+ });
2717
+ return newUuid;
2718
+ }
2719
+
2720
+ var IconButton_1 = dist.IconButton = IconButton;
2721
+ dist.MessageBubble = MessageBubble;
2722
+ var RichInput_1 = dist.RichInput = RichInput;
2723
+ dist.RichText = RichText;
2724
+ dist.SuggestionsGroup = SuggestionsGroup;
2725
+ dist.SuggestionsGroupHeading = SuggestionsGroupHeading;
2726
+ dist.SuggestionsItem = SuggestionsItem;
2727
+ var SuggestionsList_1 = dist.SuggestionsList = SuggestionsList;
2728
+ dist.addQueryParametersToURL = addQueryParametersToURL;
2729
+ dist.extendFormat = extendFormat;
2730
+ var findItemByIndex_1 = dist.findItemByIndex = findItemByIndex;
2731
+ var getItemsLength_1 = dist.getItemsLength = getItemsLength;
2732
+ var parseSuggestionsResponse_1 = dist.parseSuggestionsResponse = parseSuggestionsResponse;
2733
+ dist.sortSuggestionItems = sortSuggestionItems;
2734
+ dist.useJsonFetch = useJsonFetch;
2735
+ var useSuggestionsFetch_1 = dist.useSuggestionsFetch = useSuggestionsFetch$1;
2736
+ var uuid_1 = dist.uuid = uuid;
2737
+
2143
2738
  function postMessageToStentor(data, url, key) {
2144
- return __awaiter(this, void 0, void 0, function () {
2739
+ return __awaiter$1(this, void 0, void 0, function () {
2145
2740
  var body, response;
2146
- return __generator(this, function (_a) {
2741
+ return __generator$1(this, function (_a) {
2147
2742
  switch (_a.label) {
2148
2743
  case 0:
2149
2744
  body = JSON.stringify(data);
2150
- log("URL: " + url);
2151
- log("BODY: " + body);
2745
+ log("URL: ".concat(url));
2746
+ log("BODY: ".concat(body));
2152
2747
  return [4 /*yield*/, fetch(url, {
2153
2748
  method: "POST",
2154
2749
  headers: {
2155
2750
  "Content-Type": "application/json",
2156
- "Authorization": "Bearer " + key,
2751
+ "Authorization": "Bearer ".concat(key),
2157
2752
  "User-Agent": "Stentor Chat Server"
2158
2753
  },
2159
2754
  body: body,
@@ -2162,7 +2757,7 @@ function postMessageToStentor(data, url, key) {
2162
2757
  case 1:
2163
2758
  response = _a.sent();
2164
2759
  if (!response.ok) {
2165
- throw new Error("Status " + response.status + ", Text: " + response.statusText);
2760
+ throw new Error("Status ".concat(response.status, ", Text: ").concat(response.statusText));
2166
2761
  }
2167
2762
  return [2 /*return*/, response.json()];
2168
2763
  }
@@ -2230,7 +2825,7 @@ function getOutput(value) {
2230
2825
  * @returns
2231
2826
  */
2232
2827
  function responseToMessage(botResponse, now) {
2233
- var _a, _b, _c, _d;
2828
+ var _a, _b, _c, _d, _e;
2234
2829
  if (now === void 0) { now = new Date().getTime(); }
2235
2830
  var responseMessage;
2236
2831
  if (!botResponse) {
@@ -2276,24 +2871,20 @@ function responseToMessage(botResponse, now) {
2276
2871
  if (html) {
2277
2872
  responseMessage.msg = __assign(__assign({}, responseMessage.msg), { html: html });
2278
2873
  }
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
- }
2874
+ if ((_e = outputSpeech.suggestions) === null || _e === void 0 ? void 0 : _e.length) {
2875
+ responseMessage.msg.options = outputSpeech.suggestions.map(function (suggestion) {
2876
+ if (typeof suggestion === "string") {
2877
+ // Simple chips (strings)
2878
+ return suggestion;
2879
+ }
2880
+ else {
2881
+ // "call out" chips
2882
+ return {
2883
+ label: suggestion.title,
2884
+ actionUrl: suggestion.url
2885
+ };
2295
2886
  }
2296
- }
2887
+ });
2297
2888
  }
2298
2889
  }
2299
2890
  return responseMessage;
@@ -2305,7 +2896,7 @@ function getPermissionRequestType(type) {
2305
2896
  case "PERMISSION_LOCATION_PRECISE":
2306
2897
  return "LOCATION_PRECISE";
2307
2898
  default:
2308
- throw new Error("Unsupported permission: " + type);
2899
+ throw new Error("Unsupported permission: ".concat(type));
2309
2900
  }
2310
2901
  }
2311
2902
  function getPermissionResponse(botResponse, now) {
@@ -2318,7 +2909,7 @@ function getPermissionResponse(botResponse, now) {
2318
2909
  type: "permissionRequest",
2319
2910
  timestamp: now,
2320
2911
  msg: {
2321
- text: (_a = outputSpeech === null || outputSpeech === void 0 ? void 0 : outputSpeech.displayText) !== null && _a !== void 0 ? _a : "" + botResponse.data.permissionRequestTTSContext,
2912
+ text: (_a = outputSpeech === null || outputSpeech === void 0 ? void 0 : outputSpeech.displayText) !== null && _a !== void 0 ? _a : "".concat(botResponse.data.permissionRequestTTSContext),
2322
2913
  permissionRequest: {
2323
2914
  time: now,
2324
2915
  type: type,
@@ -2335,26 +2926,6 @@ function getPermissionResponse(botResponse, now) {
2335
2926
  };
2336
2927
  }
2337
2928
 
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
2929
  var PERMISSION_QUESTION_EXPIRATION_MS = 300000; // 5 minutes
2359
2930
  var StentorDirectChat = /** @class */ (function () {
2360
2931
  function StentorDirectChat(config) {
@@ -2366,15 +2937,15 @@ var StentorDirectChat = /** @class */ (function () {
2366
2937
  */
2367
2938
  this.widget = {
2368
2939
  setConnectionStatus: function (status) {
2369
- log("SERVER: connection_update: " + JSON.stringify(status));
2940
+ log("SERVER: connection_update: ".concat(JSON.stringify(status)));
2370
2941
  _this.dispatch(setConnectionStatus(status));
2371
2942
  },
2372
2943
  setAccountStatus: function (status) {
2373
- log("SERVER: account_status: " + JSON.stringify(status));
2944
+ log("SERVER: account_status: ".concat(JSON.stringify(status)));
2374
2945
  _this.dispatch(setAccountStatus(status));
2375
2946
  },
2376
2947
  sendNewMessage: function (data) {
2377
- log("SERVER: new message: " + JSON.stringify(data));
2948
+ log("SERVER: new message: ".concat(JSON.stringify(data)));
2378
2949
  _this.dispatch({
2379
2950
  type: "chat",
2380
2951
  detail: {
@@ -2386,7 +2957,7 @@ var StentorDirectChat = /** @class */ (function () {
2386
2957
  });
2387
2958
  },
2388
2959
  userJoined: function (data) {
2389
- log("SERVER: user joined: " + JSON.stringify(data));
2960
+ log("SERVER: user joined: ".concat(JSON.stringify(data)));
2390
2961
  _this.visitorInfo.token = data.token;
2391
2962
  _this.dispatch({
2392
2963
  type: "chat",
@@ -2398,7 +2969,7 @@ var StentorDirectChat = /** @class */ (function () {
2398
2969
  });
2399
2970
  },
2400
2971
  userLeft: function (data) {
2401
- log("SERVER: user left: " + JSON.stringify(data));
2972
+ log("SERVER: user left: ".concat(JSON.stringify(data)));
2402
2973
  _this.dispatch({
2403
2974
  type: "chat",
2404
2975
  detail: {
@@ -2457,7 +3028,7 @@ var StentorDirectChat = /** @class */ (function () {
2457
3028
  StentorDirectChat.prototype.init = function (dispatch) {
2458
3029
  this.dispatch = dispatch;
2459
3030
  // TODO: Authenticate - or at least tell the server who you are
2460
- log("got init auth: " + this.config.key);
3031
+ log("got init auth: ".concat(this.config.key));
2461
3032
  // We are connected
2462
3033
  this.widget.setConnectionStatus("online");
2463
3034
  this.widget.setAccountStatus("online");
@@ -2469,8 +3040,8 @@ var StentorDirectChat = /** @class */ (function () {
2469
3040
  cb();
2470
3041
  };
2471
3042
  StentorDirectChat.prototype.sendChatMsg = function (message, cb) {
2472
- return __awaiter(this, void 0, void 0, function () {
2473
- return __generator(this, function (_a) {
3043
+ return __awaiter$1(this, void 0, void 0, function () {
3044
+ return __generator$1(this, function (_a) {
2474
3045
  return [2 /*return*/, this.sendChatMsgRequest({
2475
3046
  msg: message,
2476
3047
  timestamp: new Date().getTime(),
@@ -2483,9 +3054,9 @@ var StentorDirectChat = /** @class */ (function () {
2483
3054
  };
2484
3055
  StentorDirectChat.prototype.sendChatMsgRequest = function (serviceRequest, cb) {
2485
3056
  var _a;
2486
- return __awaiter(this, void 0, void 0, function () {
3057
+ return __awaiter$1(this, void 0, void 0, function () {
2487
3058
  var agentResponse;
2488
- return __generator(this, function (_b) {
3059
+ return __generator$1(this, function (_b) {
2489
3060
  switch (_b.label) {
2490
3061
  case 0: return [4 /*yield*/, this.postMessage(serviceRequest)];
2491
3062
  case 1:
@@ -2528,9 +3099,9 @@ var StentorDirectChat = /** @class */ (function () {
2528
3099
  };
2529
3100
  StentorDirectChat.prototype.postMessage = function (message) {
2530
3101
  var _a, _b, _c, _d;
2531
- return __awaiter(this, void 0, void 0, function () {
3102
+ return __awaiter$1(this, void 0, void 0, function () {
2532
3103
  var request, now, permissionRequest, expired, text, granted, userProfile, isEmail, botResponse, responseMessage;
2533
- return __generator(this, function (_e) {
3104
+ return __generator$1(this, function (_e) {
2534
3105
  switch (_e.label) {
2535
3106
  case 0:
2536
3107
  now = new Date().getTime();
@@ -2617,20 +3188,20 @@ var StentorDirectChat = /** @class */ (function () {
2617
3188
  };
2618
3189
  }
2619
3190
  }
2620
- log("Visitor says: " + JSON.stringify(request, undefined, 2));
3191
+ log("Visitor says: ".concat(JSON.stringify(request, undefined, 2)));
2621
3192
  // Bot is "typing"
2622
3193
  this.widget.typing();
2623
3194
  return [4 /*yield*/, postMessageToStentor(request, this.config.url, this.config.key).catch(function (postError) {
2624
- err("POST failed: " + postError.message);
3195
+ err("POST failed: ".concat(postError.message));
2625
3196
  return {
2626
- text: "Bot doesn't respond. Reason: " + postError.message
3197
+ text: "Bot doesn't respond. Reason: ".concat(postError.message)
2627
3198
  };
2628
3199
  })];
2629
3200
  case 1:
2630
3201
  botResponse = _e.sent();
2631
3202
  // Bot stopped "typing"
2632
3203
  this.widget.stopTyping();
2633
- log("Bot says: " + JSON.stringify(botResponse, undefined, 2));
3204
+ log("Bot says: ".concat(JSON.stringify(botResponse, undefined, 2)));
2634
3205
  // Now translate the response to server dialect
2635
3206
  // new session no more
2636
3207
  this.isNewSession = false;
@@ -2654,15 +3225,15 @@ var StentorDirectChat = /** @class */ (function () {
2654
3225
  };
2655
3226
  StentorDirectChat.prototype.startSession = function () {
2656
3227
  if (this.visitorInfo.visitorId) {
2657
- this._userId = "stentor-widget-user-" + this.visitorInfo.visitorId;
3228
+ this._userId = "stentor-widget-user-".concat(this.visitorInfo.visitorId);
2658
3229
  }
2659
3230
  else if (this.visitorInfo.email) {
2660
- this._userId = "stentor-widget-user-" + this.visitorInfo.email;
3231
+ this._userId = "stentor-widget-user-".concat(this.visitorInfo.email);
2661
3232
  }
2662
3233
  else {
2663
- this._userId = "stentor-widget-user-" + uuid();
3234
+ this._userId = "stentor-widget-user-".concat(uuid_1());
2664
3235
  }
2665
- this._sessionId = "stentor-widget-session-" + uuid();
3236
+ this._sessionId = "stentor-widget-session-".concat(uuid_1());
2666
3237
  this.isNewSession = true;
2667
3238
  };
2668
3239
  Object.defineProperty(StentorDirectChat.prototype, "userId", {
@@ -5184,8 +5755,10 @@ class Socket extends Emitter_1 {
5184
5755
  packet.options.compress = this.flags.compress !== false;
5185
5756
  // event ack callback
5186
5757
  if ("function" === typeof args[args.length - 1]) {
5187
- this.acks[this.ids] = args.pop();
5188
- packet.id = this.ids++;
5758
+ const id = this.ids++;
5759
+ const ack = args.pop();
5760
+ this._registerAckCallback(id, ack);
5761
+ packet.id = id;
5189
5762
  }
5190
5763
  const isTransportWritable = this.io.engine &&
5191
5764
  this.io.engine.transport &&
@@ -5201,6 +5774,31 @@ class Socket extends Emitter_1 {
5201
5774
  this.flags = {};
5202
5775
  return this;
5203
5776
  }
5777
+ /**
5778
+ * @private
5779
+ */
5780
+ _registerAckCallback(id, ack) {
5781
+ const timeout = this.flags.timeout;
5782
+ if (timeout === undefined) {
5783
+ this.acks[id] = ack;
5784
+ return;
5785
+ }
5786
+ // @ts-ignore
5787
+ const timer = this.io.setTimeoutFn(() => {
5788
+ delete this.acks[id];
5789
+ for (let i = 0; i < this.sendBuffer.length; i++) {
5790
+ if (this.sendBuffer[i].id === id) {
5791
+ this.sendBuffer.splice(i, 1);
5792
+ }
5793
+ }
5794
+ ack.call(this, new Error("operation has timed out"));
5795
+ }, timeout);
5796
+ this.acks[id] = (...args) => {
5797
+ // @ts-ignore
5798
+ this.io.clearTimeoutFn(timer);
5799
+ ack.apply(this, [null, ...args]);
5800
+ };
5801
+ }
5204
5802
  /**
5205
5803
  * Sends a packet.
5206
5804
  *
@@ -5285,6 +5883,7 @@ class Socket extends Emitter_1 {
5285
5883
  this.ondisconnect();
5286
5884
  break;
5287
5885
  case PacketType.CONNECT_ERROR:
5886
+ this.destroy();
5288
5887
  const err = new Error(packet.data.message);
5289
5888
  // @ts-ignore
5290
5889
  err.data = packet.data.data;
@@ -5448,6 +6047,25 @@ class Socket extends Emitter_1 {
5448
6047
  this.flags.volatile = true;
5449
6048
  return this;
5450
6049
  }
6050
+ /**
6051
+ * Sets a modifier for a subsequent event emission that the callback will be called with an error when the
6052
+ * given number of milliseconds have elapsed without an acknowledgement from the server:
6053
+ *
6054
+ * ```
6055
+ * socket.timeout(5000).emit("my-event", (err) => {
6056
+ * if (err) {
6057
+ * // the server did not acknowledge the event in the given delay
6058
+ * }
6059
+ * });
6060
+ * ```
6061
+ *
6062
+ * @returns self
6063
+ * @public
6064
+ */
6065
+ timeout(timeout) {
6066
+ this.flags.timeout = timeout;
6067
+ return this;
6068
+ }
5451
6069
  /**
5452
6070
  * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the
5453
6071
  * callback.
@@ -5854,13 +6472,7 @@ class Manager extends Emitter_1 {
5854
6472
  _close() {
5855
6473
  this.skipReconnect = true;
5856
6474
  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";
6475
+ this.onclose("forced close");
5864
6476
  if (this.engine)
5865
6477
  this.engine.close();
5866
6478
  }
@@ -6003,12 +6615,12 @@ var StentorServerChat = /** @class */ (function () {
6003
6615
  // TODO: Authenticate - or at least tell the server who you are
6004
6616
  // Socket events
6005
6617
  this.socket.on("account_status", function (data) {
6006
- log("SERVER: account_status: " + JSON.stringify(data));
6618
+ log("SERVER: account_status: ".concat(JSON.stringify(data)));
6007
6619
  // Register the "communication" with the server
6008
6620
  if (!_this.token) {
6009
- _this.token = uuid();
6621
+ _this.token = uuid_1();
6010
6622
  dispatch(receiveToken(_this.token));
6011
- log("CLIENT: created token: " + _this.token);
6623
+ log("CLIENT: created token: ".concat(_this.token));
6012
6624
  }
6013
6625
  _this.socket.emit("connection update", _this.token);
6014
6626
  dispatch({
@@ -6020,7 +6632,7 @@ var StentorServerChat = /** @class */ (function () {
6020
6632
  });
6021
6633
  });
6022
6634
  this.socket.on("new message", function (data) {
6023
- log("SERVER: new message: " + JSON.stringify(data));
6635
+ log("SERVER: new message: ".concat(JSON.stringify(data)));
6024
6636
  _this.dispatch({
6025
6637
  type: "chat",
6026
6638
  detail: {
@@ -6035,7 +6647,7 @@ var StentorServerChat = /** @class */ (function () {
6035
6647
  });
6036
6648
  });
6037
6649
  this.socket.on("user joined", function (data) {
6038
- log("SERVER: user joined: " + JSON.stringify(data));
6650
+ log("SERVER: user joined: ".concat(JSON.stringify(data)));
6039
6651
  _this.visitorInfo.token = data.token;
6040
6652
  _this.dispatch({
6041
6653
  type: "chat",
@@ -6051,7 +6663,7 @@ var StentorServerChat = /** @class */ (function () {
6051
6663
  });
6052
6664
  });
6053
6665
  this.socket.on("user left", function (data) {
6054
- log("SERVER: user left: " + JSON.stringify(data));
6666
+ log("SERVER: user left: ".concat(JSON.stringify(data)));
6055
6667
  _this.dispatch({
6056
6668
  type: "chat",
6057
6669
  detail: {
@@ -6065,7 +6677,7 @@ var StentorServerChat = /** @class */ (function () {
6065
6677
  });
6066
6678
  });
6067
6679
  this.socket.on("typing", function (data) {
6068
- log("SERVER: typing: " + JSON.stringify(data));
6680
+ log("SERVER: typing: ".concat(JSON.stringify(data)));
6069
6681
  _this.dispatch({
6070
6682
  type: "chat",
6071
6683
  detail: {
@@ -6079,7 +6691,7 @@ var StentorServerChat = /** @class */ (function () {
6079
6691
  });
6080
6692
  });
6081
6693
  this.socket.on("stop typing", function (data) {
6082
- log("SERVER: stop typing: " + JSON.stringify(data));
6694
+ log("SERVER: stop typing: ".concat(JSON.stringify(data)));
6083
6695
  _this.dispatch({
6084
6696
  type: "chat",
6085
6697
  detail: {
@@ -6163,18 +6775,18 @@ function createChatServerCore(config, token) {
6163
6775
  case "local":
6164
6776
  return new StentorLocalChat();
6165
6777
  default:
6166
- throw throwBadKind(config.type);
6778
+ throw throwBadKind$1(config.type);
6167
6779
  }
6168
6780
  }
6169
6781
  function createChatServer(config, token) {
6170
6782
  return new LogChat(createChatServerCore(config, token));
6171
6783
  }
6172
- var ChatServerContext = React.createContext(null);
6784
+ var ChatServerContext = React$1.createContext(null);
6173
6785
  function useChatServer(config) {
6174
- var _a = React.useState(), server = _a[0], setServer = _a[1];
6786
+ var _a = React$1.useState(), server = _a[0], setServer = _a[1];
6175
6787
  var token = reactRedux.useSelector(function (state) { return state.connection.token; });
6176
6788
  var dispatch = useChatDispatch();
6177
- React.useEffect(function () {
6789
+ React$1.useEffect(function () {
6178
6790
  var newServer = createChatServer(config, token);
6179
6791
  newServer.init(dispatch);
6180
6792
  setServer(newServer);
@@ -6187,8 +6799,8 @@ function useChatServer(config) {
6187
6799
 
6188
6800
  function useChatServerDispatch() {
6189
6801
  var inner = useChatDispatch();
6190
- var chatServer = React.useContext(ChatServerContext);
6191
- return React.useCallback(function (action) {
6802
+ var chatServer = React$1.useContext(ChatServerContext);
6803
+ return React$1.useCallback(function (action) {
6192
6804
  if (!action) {
6193
6805
  console.warn("react bug? Someone invokes with null");
6194
6806
  return;
@@ -6212,8 +6824,8 @@ var ChatChipsContainer = function (_) {
6212
6824
  dispatch(executeAction(getChatServerActionLinkLabel(option)));
6213
6825
  }
6214
6826
  }
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 })));
6827
+ 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" : "") },
6828
+ React__default$1["default"].createElement(ChatChips, { options: chips, onOptionClick: optionOnChange })));
6217
6829
  };
6218
6830
 
6219
6831
  var ChatMenuItem = function (props) {
@@ -6222,31 +6834,31 @@ var ChatMenuItem = function (props) {
6222
6834
  props.onClick(props.label);
6223
6835
  }
6224
6836
  }
6225
- return (React__default["default"].createElement("button", { type: "button", className: "chat-menu-item", onClick: handleClick }, props.label));
6837
+ return (React__default$1["default"].createElement("button", { type: "button", className: "chat-menu-item", onClick: handleClick }, props.label));
6226
6838
  };
6227
6839
 
6228
6840
  var ChatMenu = function (props) {
6229
6841
  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 });
6842
+ return (React__default$1["default"].createElement("div", { className: "chat-menu ".concat(props.opened ? "chat-menu--opened" : "chat-menu--closed") }, items.map(function (label, i) {
6843
+ return React__default$1["default"].createElement(ChatMenuItem, { key: i, onClick: props.onItemClick, label: label });
6232
6844
  })));
6233
6845
  };
6234
6846
 
6235
- var UnknownMessage = function () { return React__default["default"].createElement(React__default["default"].Fragment, null); };
6847
+ var UnknownMessage = function () { return React__default$1["default"].createElement(React__default$1["default"].Fragment, null); };
6236
6848
 
6237
6849
  function renderAvatar(entity) {
6238
- return (React__default["default"].createElement("div", { className: "xappw-chat-msg-part__avatar" },
6239
- React__default["default"].createElement(Avatar, { entity: entity })));
6850
+ return (React__default$1["default"].createElement("div", { className: "xappw-chat-msg-part__avatar" },
6851
+ React__default$1["default"].createElement(Avatar, { entity: entity })));
6240
6852
  }
6241
6853
  var ChatMessagePart = function (props) {
6242
- return (React__default["default"].createElement("div", { className: "xappw-chat-msg-part" },
6854
+ return (React__default$1["default"].createElement("div", { className: "xappw-chat-msg-part" },
6243
6855
  props.showAvatar && renderAvatar(props.user),
6244
6856
  props.children));
6245
6857
  };
6246
6858
 
6247
6859
  function useExecuteActionCallback() {
6248
6860
  var dispatch = useChatServerDispatch();
6249
- return React.useCallback(function (text, token) {
6861
+ return React$1.useCallback(function (text, token) {
6250
6862
  dispatch(executeAction(text, token));
6251
6863
  }, [dispatch]);
6252
6864
  }
@@ -6254,7 +6866,7 @@ function useExecuteActionCallback() {
6254
6866
  function useButtonCallback() {
6255
6867
  var handleOpenUrl = useOpenUrlCallback();
6256
6868
  var executeAction = useExecuteActionCallback();
6257
- return React.useCallback(function (button) {
6869
+ return React$1.useCallback(function (button) {
6258
6870
  if (button.actionUrl) {
6259
6871
  handleOpenUrl(button.actionUrl);
6260
6872
  }
@@ -6287,17 +6899,17 @@ function isList(display) {
6287
6899
 
6288
6900
  var CardMiddlewareWidget = function (props) {
6289
6901
  var msg = props.msg, ctx = props.ctx;
6290
- var card = React.useMemo(function () { return convertFromCardDisplay(msg); }, [msg]);
6902
+ var card = React$1.useMemo(function () { return convertFromCardDisplay(msg); }, [msg]);
6291
6903
  var user = ctx.user;
6292
6904
  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 }))));
6905
+ return (React__default$1["default"].createElement(ChatMessagePart, { showAvatar: true, user: user },
6906
+ React__default$1["default"].createElement("div", { className: "chat-msg" },
6907
+ React__default$1["default"].createElement(ChatCard, { card: card, onButtonClick: handleButton }))));
6296
6908
  };
6297
6909
  var CardMiddleware = function (next) { return function (props) {
6298
6910
  var msg = props.msg, ctx = props.ctx;
6299
6911
  if (isCard(msg)) {
6300
- return React__default["default"].createElement(CardMiddlewareWidget, { msg: msg, ctx: ctx });
6912
+ return React__default$1["default"].createElement(CardMiddlewareWidget, { msg: msg, ctx: ctx });
6301
6913
  }
6302
6914
  return next(props);
6303
6915
  }; };
@@ -6318,11 +6930,11 @@ function createSubscribableArray(originalValue) {
6318
6930
  return {
6319
6931
  getArray: function () { return cache; },
6320
6932
  push: function (val) {
6321
- cache = __spreadArray(__spreadArray([], cache, true), [val], false);
6933
+ cache = __spreadArray$1(__spreadArray$1([], cache, true), [val], false);
6322
6934
  notify();
6323
6935
  },
6324
6936
  unshift: function (val) {
6325
- cache = __spreadArray([val], cache, true);
6937
+ cache = __spreadArray$1([val], cache, true);
6326
6938
  notify();
6327
6939
  },
6328
6940
  subscribe: function (callback) {
@@ -6339,9 +6951,9 @@ function createSubscribableArray(originalValue) {
6339
6951
  };
6340
6952
  }
6341
6953
  function useSubscribableArray(array) {
6342
- var _a = React.useState(array.getArray()), res = _a[0], setRes = _a[1];
6954
+ var _a = React$1.useState(array.getArray()), res = _a[0], setRes = _a[1];
6343
6955
  var mounted = useIsMounted();
6344
- React.useEffect(function () {
6956
+ React$1.useEffect(function () {
6345
6957
  var subscription = array.subscribe(function (newVal) {
6346
6958
  if (mounted()) {
6347
6959
  setRes(newVal);
@@ -6373,24 +6985,24 @@ function useGlobalSubscribableArray(storage) {
6373
6985
  }
6374
6986
  function useLateMiddlewaresBuilder(storage) {
6375
6987
  var middlewares = useGlobalSubscribableArray(storage);
6376
- return React.useMemo(function () { return joinMiddlewares(middlewares); }, [middlewares]);
6988
+ return React$1.useMemo(function () { return joinMiddlewares(middlewares); }, [middlewares]);
6377
6989
  }
6378
- var storage = createStorage(window, "xappMsgMiddlewares");
6990
+ var storage = createStorage(globalThis, "xappMsgMiddlewares");
6379
6991
  function useLateMiddleware() {
6380
6992
  return useLateMiddlewaresBuilder(storage);
6381
6993
  }
6382
6994
 
6383
6995
  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" })));
6996
+ return (React__default$1["default"].createElement("svg", { viewBox: "0 0 20 20" },
6997
+ 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" }),
6998
+ 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
6999
  }
6388
7000
  var ExternalLink = function (props) {
6389
7001
  var url = props.url;
6390
- var handleClick = React.useCallback(function (ev) {
7002
+ var handleClick = React$1.useCallback(function (ev) {
6391
7003
  ev.preventDefault();
6392
7004
  }, []);
6393
- return (React__default["default"].createElement("a", { href: url, target: "_blank", rel: "noreferrer", className: props.className, onClick: handleClick }, getSvg()));
7005
+ return (React__default$1["default"].createElement("a", { href: url, target: "_blank", rel: "noreferrer", className: props.className, onClick: handleClick }, getSvg()));
6394
7006
  };
6395
7007
 
6396
7008
  function firstIndex(val, patterns) {
@@ -6442,7 +7054,7 @@ var parsers = [
6442
7054
  pathParser,
6443
7055
  queryParser
6444
7056
  ];
6445
- function parse$1(val) {
7057
+ function parse(val) {
6446
7058
  var parts = [];
6447
7059
  var rest = val;
6448
7060
  for (var _i = 0, parsers_1 = parsers; _i < parsers_1.length; _i++) {
@@ -6461,7 +7073,7 @@ var ellipsis = "/...";
6461
7073
  function reduceLink(url, maxLength) {
6462
7074
  if (url.length < maxLength)
6463
7075
  return url;
6464
- var parts = parse$1(url); // [scheme, domain, port, path, query, hash]
7076
+ var parts = parse(url); // [scheme, domain, port, path, query, hash]
6465
7077
  function getText() {
6466
7078
  return parts.join("");
6467
7079
  }
@@ -6500,10 +7112,10 @@ function reduceLink(url, maxLength) {
6500
7112
 
6501
7113
  var SmartLink = function (props) {
6502
7114
  var url = props.url, className = props.className;
6503
- var handleClick = React.useCallback(function (ev) {
7115
+ var handleClick = React$1.useCallback(function (ev) {
6504
7116
  ev.preventDefault();
6505
7117
  }, []);
6506
- return (React__default["default"].createElement("a", { href: url, target: "_blank", rel: "noreferrer", className: className, onClick: handleClick }, reduceLink(url, 40)));
7118
+ return (React__default$1["default"].createElement("a", { href: url, target: "_blank", rel: "noreferrer", className: className, onClick: handleClick }, reduceLink(url, 40)));
6507
7119
  };
6508
7120
 
6509
7121
  var ListItem = function (props) {
@@ -6511,66 +7123,66 @@ var ListItem = function (props) {
6511
7123
  var item = props.item;
6512
7124
  var layout = props.layout || "normal";
6513
7125
  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 })))));
7126
+ return (React__default$1["default"].createElement(ActionItem, { className: "xappw-vlist-item-container", item: item, onButtonClick: props.onButtonClick, onExecute: props.onExecute, onOpenUrl: props.onOpenUrl },
7127
+ React__default$1["default"].createElement("div", { className: "xappw-vlist-item xappw-vlist-item--".concat(layout) },
7128
+ React__default$1["default"].createElement("div", { className: "xappw-vlist-item__description" },
7129
+ item.title && React__default$1["default"].createElement("div", { className: "xappw-vlist-item__title" },
7130
+ React__default$1["default"].createElement("span", null, item.title)),
7131
+ url && React__default$1["default"].createElement(SmartLink, { url: url, className: "xappw-vlist-item__link" }),
7132
+ item.subTitle && React__default$1["default"].createElement("div", { className: "xappw-vlist-item__subtitle" },
7133
+ React__default$1["default"].createElement("span", null, item.subTitle)),
7134
+ !!((_a = item.buttons) === null || _a === void 0 ? void 0 : _a.length) && React__default$1["default"].createElement(ChatActionButtons, { buttons: item.buttons, onClick: props.onButtonClick })),
7135
+ React__default$1["default"].createElement("div", { className: "xappw-vlist-item__side" },
7136
+ url && React__default$1["default"].createElement(ExternalLink, { url: "url", className: "xappw-vlist-item__external-link" }),
7137
+ React__default$1["default"].createElement(ActionItemImage, { item: item, className: "xappw-vlist-item__img", emptyImageVisible: props.emptyImageVisible })))));
6526
7138
  };
6527
7139
 
6528
7140
  var List = function (props) {
6529
7141
  var list = props.list;
6530
- var listRef = React.useRef(null);
7142
+ var listRef = React$1.useRef(null);
6531
7143
  var hasImage = list.items.some(function (item) { return item.imageUrl; });
6532
7144
  var titlesOnly = !list.items.some(function (item) { var _a; return item.subTitle || ((_a = item.buttons) === null || _a === void 0 ? void 0 : _a.length); });
6533
7145
  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 })));
7146
+ return (React__default$1["default"].createElement("div", { className: "xappw-vlist-container__item", key: "item-key-".concat(itemIndex) },
7147
+ React__default$1["default"].createElement(ListItem, { item: item, layout: titlesOnly ? "titles" : "normal", emptyImageVisible: hasImage, onExecute: props.onExecute, onButtonClick: props.onButtonClick, onOpenUrl: props.onOpenUrl })));
6536
7148
  });
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),
7149
+ return (React__default$1["default"].createElement("div", { className: "xappw-vlist" },
7150
+ React__default$1["default"].createElement("div", { ref: listRef, className: "xappw-vlist-container" },
7151
+ props.list.title && React__default$1["default"].createElement("div", { className: "xappw-vlist__header" }, props.list.title),
6540
7152
  listItems)));
6541
7153
  };
6542
7154
 
6543
7155
  var ListMiddlewareWidget = function (props) {
6544
7156
  var msg = props.msg, ctx = props.ctx;
6545
- var list = React.useMemo(function () { return convertFromListDisplay(msg); }, [msg]);
7157
+ var list = React$1.useMemo(function () { return convertFromListDisplay(msg); }, [msg]);
6546
7158
  var handleExecute = useExecuteActionCallback();
6547
7159
  var handleButton = useButtonCallback();
6548
7160
  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 }))));
7161
+ return (React__default$1["default"].createElement(ChatMessagePart, { showAvatar: true, user: user },
7162
+ list.type === "CAROUSEL" && React__default$1["default"].createElement("div", { className: "chat-msg chat-msg--fullwidth chat-msg--no-ava" },
7163
+ React__default$1["default"].createElement(Carousel, { list: list, onExecute: handleExecute, onButtonClick: handleButton, onOpenUrl: ctx.openUrl })),
7164
+ list.type === "LIST" && React__default$1["default"].createElement("div", { className: "chat-msg chat-msg--expand" },
7165
+ React__default$1["default"].createElement(List, { list: list, onExecute: handleExecute, onButtonClick: handleButton, onOpenUrl: ctx.openUrl }))));
6554
7166
  };
6555
7167
  var ListMiddleware = function (next) { return function (props) {
6556
7168
  var msg = props.msg, ctx = props.ctx;
6557
7169
  if (isList(msg)) {
6558
- return React__default["default"].createElement(ListMiddlewareWidget, { msg: msg, ctx: ctx });
7170
+ return React__default$1["default"].createElement(ListMiddlewareWidget, { msg: msg, ctx: ctx });
6559
7171
  }
6560
7172
  return next(props);
6561
7173
  }; };
6562
7174
 
6563
7175
  var MultiSelect = function (props) {
6564
7176
  var items = props.items, checked = props.checked, onChange = props.onChange;
6565
- var handleToggle = React.useCallback(function (ev) {
7177
+ var handleToggle = React$1.useCallback(function (ev) {
6566
7178
  var _a;
6567
7179
  var id = ev.target.value;
6568
7180
  onChange(__assign(__assign({}, checked), (_a = {}, _a[id] = !checked[id], _a)));
6569
7181
  }, [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)))); })));
7182
+ return (React__default$1["default"].createElement("ul", { className: "xappw-multiselect" }, items.map(function (item) { return (React__default$1["default"].createElement("li", { key: item.id },
7183
+ React__default$1["default"].createElement("label", null,
7184
+ React__default$1["default"].createElement("input", { type: "checkbox", checked: checked[item.id] || false, onChange: handleToggle, value: item.id }),
7185
+ React__default$1["default"].createElement("span", null, item.title)))); })));
6574
7186
  };
6575
7187
 
6576
7188
  function isMultiSelect(display) {
@@ -6581,10 +7193,10 @@ function convertToMultiSelectItems(display) {
6581
7193
  }
6582
7194
  var MultiSelectMiddlewareWidget = function (props) {
6583
7195
  var msg = props.msg, ctx = props.ctx;
6584
- var items = React.useMemo(function () { return convertToMultiSelectItems(msg); }, [msg]);
7196
+ var items = React$1.useMemo(function () { return convertToMultiSelectItems(msg); }, [msg]);
6585
7197
  var user = ctx.user;
6586
- var _a = React.useState({}), checked = _a[0], setChecked = _a[1];
6587
- var handleSubmit = React.useCallback(function () {
7198
+ var _a = React$1.useState({}), checked = _a[0], setChecked = _a[1];
7199
+ var handleSubmit = React$1.useCallback(function () {
6588
7200
  ctx.send({
6589
7201
  type: "custom",
6590
7202
  payload: JSON.stringify({
@@ -6594,16 +7206,16 @@ var MultiSelectMiddlewareWidget = function (props) {
6594
7206
  })
6595
7207
  });
6596
7208
  }, [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 })))));
7209
+ return (React__default$1["default"].createElement(ChatMessagePart, { showAvatar: true, user: user },
7210
+ React__default$1["default"].createElement("div", { className: "chat-msg" },
7211
+ React__default$1["default"].createElement("div", null,
7212
+ React__default$1["default"].createElement(MultiSelect, { items: items, checked: checked, onChange: setChecked }),
7213
+ React__default$1["default"].createElement(ActionButton, { label: "Submit", onClick: handleSubmit })))));
6602
7214
  };
6603
7215
  var MultiSelectMiddleware = function (next) { return function (props) {
6604
7216
  var msg = props.msg, ctx = props.ctx;
6605
7217
  if (isMultiSelect(msg)) {
6606
- return React__default["default"].createElement(MultiSelectMiddlewareWidget, { msg: msg, ctx: ctx });
7218
+ return React__default$1["default"].createElement(MultiSelectMiddlewareWidget, { msg: msg, ctx: ctx });
6607
7219
  }
6608
7220
  return next(props);
6609
7221
  }; };
@@ -6615,14 +7227,14 @@ var StandardMiddlewaresBuilder = joinMiddlewares([
6615
7227
  ]);
6616
7228
  function useStandardMiddlewareBuilder() {
6617
7229
  var lateMiddleware = useLateMiddleware();
6618
- return React.useMemo(function () { return joinMiddlewares([
7230
+ return React$1.useMemo(function () { return joinMiddlewares([
6619
7231
  lateMiddleware,
6620
7232
  StandardMiddlewaresBuilder,
6621
7233
  ]); }, [lateMiddleware]);
6622
7234
  }
6623
7235
  function useStandardMiddleware() {
6624
7236
  var builder = useStandardMiddlewareBuilder();
6625
- return React.useMemo(function () { return builder(UnknownMessage); }, [builder]);
7237
+ return React$1.useMemo(function () { return builder(UnknownMessage); }, [builder]);
6626
7238
  }
6627
7239
  var StandardMiddlewares = StandardMiddlewaresBuilder(UnknownMessage);
6628
7240
 
@@ -6633,17 +7245,17 @@ function getTailSvgPath(owner) {
6633
7245
  return "m 0 0 v 240 h 60 c -40 -40 -60 -160 -60 -240";
6634
7246
  }
6635
7247
  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" })));
7248
+ return (React__default$1["default"].createElement("svg", { className: "chat-text-bubble__tail", xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 80 240" },
7249
+ React__default$1["default"].createElement("path", { d: getTailSvgPath(owner), fill: "currentColor" })));
6638
7250
  }
6639
7251
  var ChatMessageBubble = function (props) {
6640
7252
  var owner = props.owner, onClick = props.onClick;
6641
- var handleClick = React.useCallback(function () {
7253
+ var handleClick = React$1.useCallback(function () {
6642
7254
  if (onClick) {
6643
7255
  onClick();
6644
7256
  }
6645
7257
  }, [onClick]);
6646
- return (React__default["default"].createElement("div", { onClick: handleClick, className: "chat-text-bubble " + (owner === "mine" ? "chat-text-bubble--mine" : "chat-text-bubble--others") },
7258
+ 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
7259
  (props.hasTail) && getTailSvg(owner),
6648
7260
  props.children));
6649
7261
  };
@@ -6651,16 +7263,16 @@ var ChatMessageBubble = function (props) {
6651
7263
  var ChatMarkdownMessage = function (props) {
6652
7264
  var onOpenUrl = props.onOpenUrl;
6653
7265
  var agentMessage = isAgent(props.message.user.nick);
6654
- var ref = React.useRef();
7266
+ var ref = React$1.useRef();
6655
7267
  var html = props.message.msg.html;
6656
- var handleLinkClick = React.useCallback(function (ev) {
7268
+ var handleLinkClick = React$1.useCallback(function (ev) {
6657
7269
  if (onOpenUrl) {
6658
7270
  var link = ev.target;
6659
7271
  ev.preventDefault();
6660
7272
  onOpenUrl(link.href);
6661
7273
  }
6662
7274
  }, [onOpenUrl]);
6663
- React.useEffect(function () {
7275
+ React$1.useEffect(function () {
6664
7276
  if (ref.current) {
6665
7277
  ref.current.innerHTML = html;
6666
7278
  if (onOpenUrl) {
@@ -6677,10 +7289,10 @@ var ChatMarkdownMessage = function (props) {
6677
7289
  }
6678
7290
  return undefined;
6679
7291
  }, [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 })))));
7292
+ return (React__default$1["default"].createElement("div", { className: "chat-msg" },
7293
+ React__default$1["default"].createElement("div", { className: "chat-text-container" },
7294
+ React__default$1["default"].createElement(ChatMessageBubble, { owner: agentMessage ? "others" : "mine", hasTail: agentMessage && !props.sibling },
7295
+ React__default$1["default"].createElement("div", { ref: ref })))));
6684
7296
  };
6685
7297
 
6686
7298
  var ChatPermissionMessage = function (props) {
@@ -6690,21 +7302,21 @@ var ChatPermissionMessage = function (props) {
6690
7302
  var author = message.user;
6691
7303
  var allowLabel = "Allow";
6692
7304
  var denyLabel = "Deny";
6693
- var writeAsAgent = React.useCallback(function (msg) {
7305
+ var writeAsAgent = React$1.useCallback(function (msg) {
6694
7306
  ctx.write({
6695
7307
  type: "msg",
6696
7308
  user: author,
6697
7309
  msg: msg
6698
7310
  });
6699
7311
  }, [ctx, author]);
6700
- var writeAsUser = React.useCallback(function (msg) {
7312
+ var writeAsUser = React$1.useCallback(function (msg) {
6701
7313
  ctx.write({
6702
7314
  type: "msg",
6703
7315
  user: user,
6704
7316
  msg: msg
6705
7317
  });
6706
7318
  }, [ctx, user]);
6707
- var handleFail = React.useCallback(function () {
7319
+ var handleFail = React$1.useCallback(function () {
6708
7320
  ctx.send({
6709
7321
  type: "msg",
6710
7322
  user: undefined,
@@ -6713,14 +7325,14 @@ var ChatPermissionMessage = function (props) {
6713
7325
  }
6714
7326
  });
6715
7327
  }, [ctx]);
6716
- var handleSend = React.useCallback(function (msg) {
7328
+ var handleSend = React$1.useCallback(function (msg) {
6717
7329
  ctx.send({
6718
7330
  type: "permissionGrant",
6719
7331
  user: author,
6720
7332
  msg: msg
6721
7333
  });
6722
7334
  }, [author, ctx]);
6723
- var handleResult = React.useCallback(function (position, userMsg) {
7335
+ var handleResult = React$1.useCallback(function (position, userMsg) {
6724
7336
  handleSend({
6725
7337
  text: userMsg,
6726
7338
  location: position ? {
@@ -6737,10 +7349,10 @@ var ChatPermissionMessage = function (props) {
6737
7349
  writeAsAgent(agentMsg);
6738
7350
  }
6739
7351
  }, [permissionRequest, writeAsUser, writeAsAgent, handleSend]);
6740
- var handleDeny = React.useCallback(function (label) {
7352
+ var handleDeny = React$1.useCallback(function (label) {
6741
7353
  handleResult(undefined, label);
6742
7354
  }, [handleResult]);
6743
- var handleAllow = React.useCallback(function (label) {
7355
+ var handleAllow = React$1.useCallback(function (label) {
6744
7356
  if (navigator.geolocation) {
6745
7357
  navigator.geolocation.getCurrentPosition(function (position) {
6746
7358
  handleResult(position, label);
@@ -6750,20 +7362,20 @@ var ChatPermissionMessage = function (props) {
6750
7362
  }
6751
7363
  }, [handleFail, handleResult]);
6752
7364
  if (!permissionRequest) {
6753
- return React__default["default"].createElement(React__default["default"].Fragment, null);
7365
+ return React__default$1["default"].createElement(React__default$1["default"].Fragment, null);
6754
7366
  }
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 }))));
7367
+ return (React__default$1["default"].createElement("div", { className: "chat-msg" },
7368
+ React__default$1["default"].createElement("div", { className: "buttons-container" },
7369
+ React__default$1["default"].createElement(ActionButton, { label: allowLabel, addClass: "button", onClick: handleAllow }),
7370
+ React__default$1["default"].createElement(ActionButton, { label: denyLabel, addClass: "button", onClick: handleDeny }))));
6759
7371
  };
6760
7372
 
6761
7373
  var ChatTextMessage = function (props) {
6762
7374
  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)))));
7375
+ return (React__default$1["default"].createElement("div", { className: "chat-msg" },
7376
+ React__default$1["default"].createElement("div", { className: "chat-text-container" },
7377
+ React__default$1["default"].createElement(ChatMessageBubble, { owner: agentMessage ? "others" : "mine", hasTail: agentMessage && !props.sibling },
7378
+ React__default$1["default"].createElement("span", null, props.message.msg.text)))));
6767
7379
  };
6768
7380
 
6769
7381
  function getClassName(msg) {
@@ -6787,30 +7399,30 @@ var ChatMessage = function (props) {
6787
7399
  // Here is the deal. If we have text (output speech), then text - card - list - options
6788
7400
  // OR card OR list only. Avatar with text bubble.
6789
7401
  var avaKey = avaKeys.find(function (key) { return !!msg[key]; });
6790
- return (React__default["default"].createElement(React__default["default"].Fragment, null,
7402
+ return (React__default$1["default"].createElement(React__default$1["default"].Fragment, null,
6791
7403
  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 })),
7404
+ React__default$1["default"].createElement(ChatMessagePart, { showAvatar: avaKey === "text", user: user },
7405
+ React__default$1["default"].createElement(ChatTextMessage, { message: props.message, sibling: props.sibling })),
6794
7406
  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 })),
7407
+ React__default$1["default"].createElement(ChatMessagePart, { showAvatar: avaKey === "html", user: user },
7408
+ 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
7409
  msg.displays && middleware && msg.displays.map(function (display, index) {
6798
7410
  var Middleware = middleware;
6799
- return React__default["default"].createElement(Middleware, { key: index, msg: display, ctx: props.middlewareContext });
7411
+ return React__default$1["default"].createElement(Middleware, { key: index, msg: display, ctx: props.middlewareContext });
6800
7412
  }),
6801
7413
  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 }))));
7414
+ React__default$1["default"].createElement(ChatMessagePart, { showAvatar: avaKey === "permissionRequest", user: user },
7415
+ React__default$1["default"].createElement(ChatPermissionMessage, { message: props.message, sibling: props.sibling, ctx: props.middlewareContext }))));
6804
7416
  }
6805
- return (React__default["default"].createElement(React__default["default"].Fragment, null));
7417
+ return (React__default$1["default"].createElement(React__default$1["default"].Fragment, null));
6806
7418
  }
6807
7419
  // 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())));
7420
+ return (React__default$1["default"].createElement("div", { className: "chat-msg-container-wrapper ".concat(isAgent(props.message.user.nick) ? "agent" : "visitor", " ").concat(props.sibling ? "sibling" : "") },
7421
+ React__default$1["default"].createElement("div", { className: "chat-msg-container ".concat(getClassName(props.message)) }, renderByType())));
6810
7422
  };
6811
7423
 
6812
7424
  function useExternalScript(url) {
6813
- React.useEffect(function () {
7425
+ React$1.useEffect(function () {
6814
7426
  if (!url) {
6815
7427
  return;
6816
7428
  }
@@ -6834,7 +7446,7 @@ function getSafeCh(ch) {
6834
7446
  if (ch >= "A" && ch <= "Z") {
6835
7447
  return ch;
6836
7448
  }
6837
- return "_" + ch.charCodeAt(0) + "_";
7449
+ return "_".concat(ch.charCodeAt(0), "_");
6838
7450
  }
6839
7451
  function getSrcId(url) {
6840
7452
  var res = "es-";
@@ -6847,7 +7459,7 @@ function getSrcId(url) {
6847
7459
  function useChatServerVisitorId() {
6848
7460
  var dispatch = useChatServerDispatch();
6849
7461
  var clientVisitorId = reactRedux.useSelector(function (state) { return state.visitorId; });
6850
- return React.useMemo(function () { return ({
7462
+ return React$1.useMemo(function () { return ({
6851
7463
  dispatch: dispatch,
6852
7464
  visitorId: clientVisitorId
6853
7465
  }); }, [dispatch, clientVisitorId]);
@@ -6855,8 +7467,8 @@ function useChatServerVisitorId() {
6855
7467
  //send whenever server settings or visitor id changes
6856
7468
  function useGreeting(active) {
6857
7469
  var curr = useChatServerVisitorId();
6858
- var snapshotRef = React.useRef(null);
6859
- React.useEffect(function () {
7470
+ var snapshotRef = React$1.useRef(null);
7471
+ React$1.useEffect(function () {
6860
7472
  if (active) {
6861
7473
  if (snapshotRef.current !== curr) {
6862
7474
  snapshotRef.current = curr;
@@ -6880,215 +7492,45 @@ function useGreeting(active) {
6880
7492
  }
6881
7493
 
6882
7494
  function match(item, pattern) {
6883
- var value = item.suggestion;
7495
+ var value = item.text;
6884
7496
  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
7497
  }
7003
7498
 
7004
7499
  function useSuggestionsFetch(search, context) {
7005
7500
  var env = useWidgetEnv();
7006
7501
  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
7502
+ return useSuggestionsFetch_1({
7503
+ url: baseUrl,
7504
+ query: search,
7505
+ context: context
7018
7506
  });
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
7507
  }
7034
7508
 
7035
7509
  function norm(index, len) {
7036
7510
  return (index + len) % len;
7037
7511
  }
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
7512
  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 () {
7513
+ var _a = React$1.useState(), suggestions = _a[0], setSuggestions = _a[1];
7514
+ var _b = React$1.useState(-1), suggestionIndex = _b[0], setSuggestionIndex = _b[1];
7515
+ var _c = React$1.useState(search), query = _c[0], setQuery = _c[1];
7516
+ var _d = React$1.useState(context), contextState = _d[0], setContextState = _d[1];
7517
+ React$1.useEffect(function () {
7071
7518
  setQuery(search);
7072
7519
  }, [search]);
7073
- React.useEffect(function () {
7520
+ React$1.useEffect(function () {
7074
7521
  setContextState(context);
7075
7522
  }, [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) {
7523
+ var suggestionItem = React$1.useMemo(function () { return suggestions ? findItemByIndex_1(suggestions, suggestionIndex) : undefined; }, [suggestions, suggestionIndex]);
7524
+ var shift = React$1.useCallback(function (delta) {
7083
7525
  if (suggestions) {
7084
- var len_1 = suggestions.items.length;
7526
+ var len_1 = getItemsLength_1(suggestions);
7085
7527
  setSuggestionIndex(function (index) { return norm(index + delta + ((index < 0 && delta <= 0) ? 1 : 0), len_1); });
7086
7528
  }
7087
7529
  else {
7088
7530
  setSuggestionIndex(-1);
7089
7531
  }
7090
7532
  }, [suggestions]);
7091
- var execute = React.useCallback(function (cmd) {
7533
+ var execute = React$1.useCallback(function (cmd) {
7092
7534
  switch (cmd) {
7093
7535
  case "prev":
7094
7536
  shift(-1);
@@ -7103,20 +7545,26 @@ function useSuggestions(search, context) {
7103
7545
  break;
7104
7546
  }
7105
7547
  }, [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 () {
7548
+ var suggestionsResponse = useSuggestionsFetch(query || "", contextState);
7549
+ var suggestionsData = suggestionsResponse.state === "success" ? suggestionsResponse.data : undefined;
7550
+ var raw = React$1.useMemo(function () {
7551
+ return suggestionsData ? parseSuggestionsResponse_1(suggestionsData, -1) : undefined;
7552
+ }, [suggestionsData]);
7553
+ React$1.useEffect(function () {
7111
7554
  var prev = suggestionItem;
7112
7555
  setSuggestions(raw);
7113
7556
  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;
7557
+ var prevValue = prev.text;
7558
+ var index = 0;
7559
+ for (var _i = 0, raw_1 = raw; _i < raw_1.length; _i++) {
7560
+ var group = raw_1[_i];
7561
+ for (var _a = 0, _b = group.items; _a < _b.length; _a++) {
7562
+ var item = _b[_a];
7563
+ if (match(item, prevValue)) {
7564
+ setSuggestionIndex(index);
7565
+ break;
7566
+ }
7567
+ index++;
7120
7568
  }
7121
7569
  }
7122
7570
  }
@@ -7124,7 +7572,7 @@ function useSuggestions(search, context) {
7124
7572
  setSuggestionIndex(-1);
7125
7573
  }
7126
7574
  }, [raw, suggestionItem]);
7127
- return React.useMemo(function () { return ({
7575
+ return React$1.useMemo(function () { return ({
7128
7576
  suggestions: suggestions,
7129
7577
  index: suggestionIndex,
7130
7578
  execute: execute,
@@ -7133,43 +7581,36 @@ function useSuggestions(search, context) {
7133
7581
  }
7134
7582
 
7135
7583
  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)));
7584
+ return (React__default$1["default"].createElement("div", { className: "drawer-bars", onClick: props.onToggle },
7585
+ React__default$1["default"].createElement("div", { className: "drawer-bar bar1" }),
7586
+ React__default$1["default"].createElement("div", { className: "drawer-bar bar2" })));
7146
7587
  };
7147
7588
 
7148
7589
  var CloseIcon = function () {
7149
7590
  // 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" })));
7591
+ 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" },
7592
+ 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
7593
  };
7153
7594
 
7154
7595
  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" })));
7596
+ return (React__default$1["default"].createElement("svg", { xmlns: "http://www.w3.org/2000/svg", fill: "currentColor", viewBox: "0 0 16 16" },
7597
+ 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
7598
  };
7158
7599
 
7159
7600
  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" }))));
7601
+ return (React__default$1["default"].createElement("svg", { viewBox: "80.208 98.129 313.069 282.823", xmlns: "http://www.w3.org/2000/svg" },
7602
+ React__default$1["default"].createElement("g", { transform: "matrix(0.024498, 0, 0, -0.038359, 79.83091, 381.182404)", fill: "currentColor", stroke: "none" },
7603
+ 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" }),
7604
+ 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
7605
  };
7165
7606
 
7166
7607
  var SendButton = function (props) {
7167
- return (React__default["default"].createElement(IconButton, { className: "xappw-send-button", onClick: props.onClick, icon: SendIcon }));
7608
+ return (React__default$1["default"].createElement(IconButton_1, { className: "xappw-send-button ".concat(props.className || ""), onClick: props.onClick, icon: SendIcon }));
7168
7609
  };
7169
7610
 
7170
7611
  var Input = function (props) {
7171
- 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];
7612
+ var value = props.value, suggestion = props.suggestion, onChange = props.onChange, onSubmit = props.onSubmit, onSuggestionCommand = props.onSuggestionCommand;
7613
+ var _a = React$1.useState(false), dragover = _a[0], setDragover = _a[1];
7173
7614
  function onDragOver(event) {
7174
7615
  setDragover(true);
7175
7616
  event.preventDefault();
@@ -7182,32 +7623,30 @@ var Input = function (props) {
7182
7623
  function onDragLeave() {
7183
7624
  setDragover(false);
7184
7625
  }
7185
- function handleOnSubmit(event) {
7626
+ var handleOnSubmit = React$1.useCallback(function (event) {
7186
7627
  event && event.preventDefault();
7187
- props.onSubmit(value); // send to the widget
7188
- }
7189
- var handleOnChange = React.useCallback(function (event) {
7190
- var val = event.target.value;
7191
- onChange(val);
7192
- }, [onChange]);
7193
- var handleClear = React.useCallback(function () {
7194
- onChange("");
7628
+ onSubmit(value); // send to the widget
7629
+ }, [value, onSubmit]);
7630
+ var handleClear = React$1.useCallback(function () {
7631
+ onChange({
7632
+ text: "",
7633
+ formats: []
7634
+ });
7195
7635
  }, [onChange]);
7196
- var handleKeyDown = React.useCallback(function (event) {
7636
+ var handleKeyDown = React$1.useCallback(function (event) {
7197
7637
  if (suggestion) {
7198
7638
  if (event.key === "End" || event.key === "ArrowRight" || event.key === "Enter") {
7199
- var newVal = suggestion.suggestion;
7200
- onChange(newVal);
7639
+ onChange(suggestion);
7201
7640
  return;
7202
7641
  }
7203
7642
  }
7204
7643
  if (onSuggestionCommand) {
7205
7644
  if (event.key === "ArrowUp") {
7206
- onSuggestionCommand("next");
7645
+ onSuggestionCommand("prev");
7207
7646
  event.preventDefault();
7208
7647
  }
7209
7648
  else if (event.key === "ArrowDown") {
7210
- onSuggestionCommand("prev");
7649
+ onSuggestionCommand("next");
7211
7650
  event.preventDefault();
7212
7651
  }
7213
7652
  else if (event.key === "Escape") {
@@ -7216,116 +7655,59 @@ var Input = function (props) {
7216
7655
  }
7217
7656
  }
7218
7657
  }, [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,
7658
+ 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 },
7659
+ React__default$1["default"].createElement("form", { className: "xappw-input-form", onSubmit: handleOnSubmit },
7660
+ React__default$1["default"].createElement(RichInput_1, { key: "input", className: "xappw-input", placeholder: "Type your question here...", onInput: onChange, onChange: onChange, onKeyDown: handleKeyDown,
7223
7661
  // 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
- }))));
7662
+ value: value }),
7663
+ React__default$1["default"].createElement("div", { className: "xappw-input-form__buttons" },
7664
+ value.text && React__default$1["default"].createElement(IconButton_1, { icon: CloseIcon, className: "xappw-input-form__btn", onClick: handleClear }),
7665
+ React__default$1["default"].createElement(SendButton, { className: "xappw-input-form__btn", onClick: handleOnSubmit })))));
7270
7666
  };
7271
7667
 
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]);
7668
+ function createActions(onItemUse) {
7669
+ return function (innerProps) {
7670
+ var data = innerProps.data;
7671
+ var canUse = data.type !== "FAQ";
7672
+ var handleUse = React$1.useCallback(function (ev) {
7673
+ onItemUse(data);
7674
+ ev.stopPropagation();
7675
+ }, [data]);
7676
+ if (!canUse) {
7677
+ return React__default$1["default"].createElement(React__default$1["default"].Fragment, null);
7678
+ }
7679
+ return (React__default$1["default"].createElement(IconButton_1, { className: "xappw-suggestions__use", onClick: handleUse, icon: LeftDownArrowIcon }));
7680
+ };
7287
7681
  }
7288
7682
  var Suggestions = function (props) {
7289
- var len = props.data.items.length;
7683
+ var data = props.data, onItemUse = props.onItemUse;
7684
+ var len = data.length;
7290
7685
  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 () {
7686
+ var _a = React$1.useState(), activeItem = _a[0], setActiveItem = _a[1];
7687
+ var item = React$1.useMemo(function () { return findItemByIndex_1(data, currentIndex); }, [data, currentIndex]);
7688
+ React$1.useEffect(function () {
7294
7689
  setActiveItem(item);
7295
7690
  }, [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 })); }))));
7691
+ var actions = React$1.useMemo(function () { return createActions(onItemUse); }, [onItemUse]);
7692
+ return (React__default$1["default"].createElement("div", { className: "xappw-suggestions ".concat(props.className || "") },
7693
+ (activeItem === null || activeItem === void 0 ? void 0 : activeItem.content) && React__default$1["default"].createElement("div", { className: "xappw-suggestions__answer" }, activeItem.content),
7694
+ !!data.length &&
7695
+ React__default$1["default"].createElement(SuggestionsList_1, { suggestions: data, index: currentIndex, className: "xappw-suggestions__groups", itemActions: actions, onItemClick: props.onItemClick, onItemHover: setActiveItem })));
7317
7696
  };
7318
7697
 
7319
7698
  var ChatFooter = function (props) {
7320
- var _a, _b, _c, _d;
7699
+ var _a, _b, _c;
7321
7700
  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];
7701
+ var _d = React$1.useState(false), drawer = _d[0], setDrawerState = _d[1]; // false initially
7702
+ var _e = React$1.useState(), suggestionSearch = _e[0], setSuggestionSearch = _e[1];
7324
7703
  var contexts = reactRedux.useSelector(function (state) { return state.activeContexts; });
7325
7704
  var suggestions = useSuggestions(suggestionSearch, contexts);
7326
7705
  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];
7706
+ var menuItems = React$1.useMemo(function () { return menuItemsRaw ? menuItemsRaw.map(function (item) { return item.label; }) : []; }, [menuItemsRaw]);
7707
+ var _f = React$1.useState({
7708
+ text: "",
7709
+ formats: []
7710
+ }), input = _f[0], setInput = _f[1];
7329
7711
  function toggleDrawer() {
7330
7712
  var newDrawer = !drawer;
7331
7713
  setDrawerState(newDrawer);
@@ -7337,29 +7719,32 @@ var ChatFooter = function (props) {
7337
7719
  }
7338
7720
  function handleChange(val) {
7339
7721
  setInput(val);
7340
- props.onChange(val);
7341
- setSuggestionSearch(val);
7722
+ props.onChange(val.text);
7723
+ setSuggestionSearch(val.text);
7342
7724
  }
7343
- var handleSubmit = React.useCallback(function (message) {
7725
+ var handleSubmit = React$1.useCallback(function (message) {
7344
7726
  setSuggestionSearch("");
7345
- setInput("");
7346
- onSubmit(message);
7727
+ setInput({
7728
+ text: "",
7729
+ formats: []
7730
+ });
7731
+ onSubmit(message.text);
7347
7732
  }, [onSubmit]);
7348
- var handleItemClick = React.useCallback(function (data) {
7349
- handleSubmit(data.suggestion);
7733
+ var handleItemClick = React$1.useCallback(function (data) {
7734
+ handleSubmit(data);
7350
7735
  }, [handleSubmit]);
7351
- var handleItemUse = React.useCallback(function (data) {
7352
- setInput(data.suggestion);
7353
- setSuggestionSearch(data.suggestion);
7736
+ var handleItemUse = React$1.useCallback(function (data) {
7737
+ setInput(data);
7738
+ setSuggestionSearch(data.text);
7354
7739
  }, []);
7355
- return (React__default["default"].createElement("div", { className: "chat-footer" },
7740
+ return (React__default$1["default"].createElement("div", { className: "chat-footer" },
7356
7741
  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,
7742
+ React__default$1["default"].createElement(React__default$1["default"].Fragment, null,
7743
+ React__default$1["default"].createElement(ChatMenu, { opened: drawer, onItemClick: handleMenuItem, items: menuItems }),
7744
+ React__default$1["default"].createElement("div", { className: "chat-footer__menu-icon" },
7745
+ React__default$1["default"].createElement(DrawerBars, { onToggle: toggleDrawer }))) : React__default$1["default"].createElement(React__default$1["default"].Fragment, null),
7746
+ ((_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 }),
7747
+ 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
7748
  // onFocus={this.inputOnFocus}
7364
7749
  onFileUpload: props.onFileUpload })));
7365
7750
  };
@@ -7395,12 +7780,12 @@ var MiddlewareContextFactory = /** @class */ (function () {
7395
7780
  var CardContainer = function (props) {
7396
7781
  function renderIcon() {
7397
7782
  var isString = typeof (props.icon) === "string";
7398
- return (React__default["default"].createElement("div", { className: "card-container__icon" }, !isString && props.icon));
7783
+ return (React__default$1["default"].createElement("div", { className: "card-container__icon" }, !isString && props.icon));
7399
7784
  }
7400
- return (React__default["default"].createElement("div", { className: "card-container " + props.addClass },
7785
+ return (React__default$1["default"].createElement("div", { className: "card-container ".concat(props.addClass) },
7401
7786
  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),
7787
+ React__default$1["default"].createElement("div", { className: "card-container__content ".concat(props.contentAddClass) },
7788
+ React__default$1["default"].createElement("div", { className: "card-container__title" }, props.title),
7404
7789
  props.children)));
7405
7790
  };
7406
7791
 
@@ -7415,13 +7800,13 @@ var defaultProps$2 = {
7415
7800
  var ChatRating = function (props) {
7416
7801
  if (props === void 0) { props = defaultProps$2; }
7417
7802
  var onRate = props.onRate;
7418
- var rateBadButtonOnClick = React.useCallback(function () {
7803
+ var rateBadButtonOnClick = React$1.useCallback(function () {
7419
7804
  onRate("bad");
7420
7805
  }, [onRate]);
7421
- var rateGoodButtonOnClick = React.useCallback(function () {
7806
+ var rateGoodButtonOnClick = React$1.useCallback(function () {
7422
7807
  onRate("good");
7423
7808
  }, [onRate]);
7424
- var rateAgainButtonOnClick = React.useCallback(function () {
7809
+ var rateAgainButtonOnClick = React$1.useCallback(function () {
7425
7810
  onRate(undefined);
7426
7811
  }, [onRate]);
7427
7812
  // Do not think this prop should be here
@@ -7429,40 +7814,40 @@ var ChatRating = function (props) {
7429
7814
  return null;
7430
7815
  }
7431
7816
  if (!props.hasRating) {
7432
- return (React__default["default"].createElement(CardContainer, { title: "Chat Rating", addClass: "chat-rating-card" },
7817
+ return (React__default$1["default"].createElement(CardContainer, { title: "Chat Rating", addClass: "chat-rating-card" },
7433
7818
  props.agent.displayName,
7434
7819
  " 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 }))));
7820
+ React__default$1["default"].createElement("div", { className: "buttons-container" },
7821
+ React__default$1["default"].createElement(ActionButton, { addClass: "button button-rate-bad", label: "Rate Bad", onClick: rateBadButtonOnClick }),
7822
+ React__default$1["default"].createElement(ActionButton, { addClass: "button button-rate-good", label: "Rate Good", onClick: rateGoodButtonOnClick }))));
7438
7823
  }
7439
7824
  else {
7440
- return (React__default["default"].createElement(CardContainer, { title: "Chat Rating", addClass: "chat-rating-card" },
7825
+ return (React__default$1["default"].createElement(CardContainer, { title: "Chat Rating", addClass: "chat-rating-card" },
7441
7826
  "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 }))));
7827
+ React__default$1["default"].createElement("div", { className: "buttons-container" },
7828
+ React__default$1["default"].createElement(ActionButton, { addClass: "button button-rate-again", label: "Rate again", onClick: rateAgainButtonOnClick }))));
7444
7829
  }
7445
7830
  };
7446
7831
 
7447
7832
  var ChatRatingContainer = function (props) {
7448
7833
  var dispatch = useChatServerDispatch();
7449
- var handleRate = React.useCallback(function (rating) {
7834
+ var handleRate = React$1.useCallback(function (rating) {
7450
7835
  dispatch(sendChatRating(rating));
7451
7836
  }, [dispatch]);
7452
- return React__default["default"].createElement(ChatRating, { agent: props.agent, hasRating: props.hasRating, shouldDisplay: props.shouldDisplay, onRate: handleRate });
7837
+ return React__default$1["default"].createElement(ChatRating, { agent: props.agent, hasRating: props.hasRating, shouldDisplay: props.shouldDisplay, onRate: handleRate });
7453
7838
  };
7454
7839
 
7455
7840
  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" })));
7841
+ return (React__default$1["default"].createElement("svg", { className: "message-svg", width: "16", height: "12", viewBox: "0 0 16 12" },
7842
+ 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
7843
  };
7459
7844
 
7460
7845
  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];
7846
+ var name = React$1.useRef(null);
7847
+ var email = React$1.useRef(null);
7848
+ var message = React$1.useRef(null);
7849
+ var form = React$1.useRef(null);
7850
+ var _a = React$1.useState(false), sent = _a[0], setSent = _a[1];
7466
7851
  function emailChanged() {
7467
7852
  var _a, _b, _c;
7468
7853
  if ((_a = email.current) === null || _a === void 0 ? void 0 : _a.validity.patternMismatch) {
@@ -7490,53 +7875,53 @@ var MessageForm = function (props) {
7490
7875
  setSent(false);
7491
7876
  }
7492
7877
  function renderSent() {
7493
- return (React__default["default"].createElement("div", { key: "sent", className: "message-form--sent" },
7878
+ return (React__default$1["default"].createElement("div", { key: "sent", className: "message-form--sent" },
7494
7879
  "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 })));
7880
+ React__default$1["default"].createElement(ActionButton, { addClass: "button-resend", label: "Send another", onClick: sendAnother })));
7496
7881
  }
7497
7882
  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()));
7883
+ return (React__default$1["default"].createElement("form", { ref: form, key: "not-sent", className: "message-form", onSubmit: send },
7884
+ React__default$1["default"].createElement("div", { className: "content" },
7885
+ React__default$1["default"].createElement("div", { className: "section" },
7886
+ React__default$1["default"].createElement("label", { className: "label" }, "Name"),
7887
+ React__default$1["default"].createElement("input", { ref: name, maxLength: 255 })),
7888
+ React__default$1["default"].createElement("div", { className: "section" },
7889
+ React__default$1["default"].createElement("label", { className: "label" }, "Email"),
7890
+ React__default$1["default"].createElement("input", { ref: email, onChange: emailChanged, type: "email", required: true, pattern: EMAIL_REGEX })),
7891
+ React__default$1["default"].createElement("div", { className: "section" },
7892
+ React__default$1["default"].createElement("label", { className: "label" }, "Message"),
7893
+ React__default$1["default"].createElement("textarea", { required: true, ref: message }))),
7894
+ React__default$1["default"].createElement("div", { className: "button-container" },
7895
+ React__default$1["default"].createElement(ActionButton, { type: "submit", addClass: "message-form__submit", label: "Send" }))));
7896
+ }
7897
+ 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
7898
  };
7514
7899
 
7515
7900
  var OfflineForm = function (props) {
7516
- return React__default["default"].createElement(MessageForm, { title: "Offline message card title", onSubmit: props.onSubmit });
7901
+ return React__default$1["default"].createElement(MessageForm, { title: "Offline message card title", onSubmit: props.onSubmit });
7517
7902
  };
7518
7903
 
7519
7904
  var OfflineFormContainer = function (_) {
7520
7905
  var dispatch = useChatServerDispatch();
7521
- var handleSubmit = React.useCallback(function (data) {
7906
+ var handleSubmit = React$1.useCallback(function (data) {
7522
7907
  dispatch(sendOfflineMsg(data));
7523
7908
  }, [dispatch]);
7524
- return React__default["default"].createElement(OfflineForm, { onSubmit: handleSubmit });
7909
+ return React__default$1["default"].createElement(OfflineForm, { onSubmit: handleSubmit });
7525
7910
  };
7526
7911
 
7527
7912
  var PrechatForm = function (props) {
7528
- var _a = React.useState(false), sent = _a[0], setSent = _a[1];
7913
+ var _a = React$1.useState(false), sent = _a[0], setSent = _a[1];
7529
7914
  var onSubmit = props.onSubmit;
7530
- var handleSubmit = React.useCallback(function (msg) {
7915
+ var handleSubmit = React$1.useCallback(function (msg) {
7531
7916
  onSubmit(msg);
7532
7917
  setSent(true);
7533
7918
  }, [onSubmit]);
7534
- return (React__default["default"].createElement(React__default["default"].Fragment, null, !sent && React__default["default"].createElement(MessageForm, { title: "Introduce yourself!", onSubmit: handleSubmit })));
7919
+ 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
7920
  };
7536
7921
 
7537
7922
  var PrechatFormContainer = function (_) {
7538
7923
  var dispatch = useChatServerDispatch();
7539
- var handleSubmit = React.useCallback(function (data) {
7924
+ var handleSubmit = React$1.useCallback(function (data) {
7540
7925
  // Don't send empty messages
7541
7926
  if (!data.message)
7542
7927
  return;
@@ -7546,7 +7931,7 @@ var PrechatFormContainer = function (_) {
7546
7931
  }));
7547
7932
  dispatch(executeAction(data.message));
7548
7933
  }, [dispatch]);
7549
- return React__default["default"].createElement(PrechatForm, { onSubmit: handleSubmit });
7934
+ return React__default$1["default"].createElement(PrechatForm, { onSubmit: handleSubmit });
7550
7935
  };
7551
7936
 
7552
7937
  var defaultProps$1 = {
@@ -7556,8 +7941,8 @@ var QueuePosition = function (props) {
7556
7941
  if (props === void 0) { props = defaultProps$1; }
7557
7942
  if (props.position <= 0)
7558
7943
  return null;
7559
- return (React__default["default"].createElement("div", { className: "system-msg-container" },
7560
- React__default["default"].createElement("span", { className: "system-msg" },
7944
+ return (React__default$1["default"].createElement("div", { className: "system-msg-container" },
7945
+ React__default$1["default"].createElement("span", { className: "system-msg" },
7561
7946
  "Queue position: ",
7562
7947
  props.position)));
7563
7948
  };
@@ -7565,34 +7950,34 @@ var QueuePosition = function (props) {
7565
7950
  function getMessageByType(msg) {
7566
7951
  switch (msg.type) {
7567
7952
  case "chat.memberjoin":
7568
- return msg.user.displayName + " has joined the chat";
7953
+ return "".concat(msg.user.displayName, " has joined the chat");
7569
7954
  case "chat.memberleave":
7570
- return msg.user.displayName + " has left the chat";
7955
+ return "".concat(msg.user.displayName, " has left the chat");
7571
7956
  case "chat.rating":
7572
7957
  if (!msg.newRating) {
7573
7958
  return "You have removed the chat rating";
7574
7959
  }
7575
7960
  else {
7576
7961
  var rating = convertToSentenceCase(msg.newRating);
7577
- return "You have rated the chat service " + rating;
7962
+ return "You have rated the chat service ".concat(rating);
7578
7963
  }
7579
7964
  default:
7580
7965
  return JSON.stringify(msg);
7581
7966
  }
7582
7967
  }
7583
7968
  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))));
7969
+ return (React__default$1["default"].createElement("div", { className: "system-msg-container" },
7970
+ React__default$1["default"].createElement("span", { className: "system-msg" }, getMessageByType(props.message))));
7586
7971
  };
7587
7972
  function convertToSentenceCase(s) {
7588
7973
  return s[0].toUpperCase() + s.slice(1);
7589
7974
  }
7590
7975
 
7591
7976
  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" })));
7977
+ return (React__default$1["default"].createElement("div", { className: "typing-indicator" },
7978
+ React__default$1["default"].createElement("div", { className: "typing-indicator-part" }),
7979
+ React__default$1["default"].createElement("div", { className: "typing-indicator-part" }),
7980
+ React__default$1["default"].createElement("div", { className: "typing-indicator-part" })));
7596
7981
  };
7597
7982
 
7598
7983
  /**
@@ -7601,13 +7986,13 @@ var TypingIndicator = function (_) {
7601
7986
  var TypingStatus = function (props) {
7602
7987
  var agent_names = Object.values(props.agents)
7603
7988
  .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)))))));
7989
+ return (React__default$1["default"].createElement(React__default$1["default"].Fragment, null, agent_names.map(function (agent) {
7990
+ return (React__default$1["default"].createElement("div", { className: "chat-msg-container-wrapper", key: "typing-status-".concat(agent.user.nick) },
7991
+ React__default$1["default"].createElement("div", { key: agent.user.nick, className: "chat-msg-container agent chat-typing-progress" },
7992
+ React__default$1["default"].createElement(ChatMessagePart, { user: agent.user, showAvatar: true },
7993
+ React__default$1["default"].createElement("div", { className: "chat-msg" },
7994
+ React__default$1["default"].createElement(ChatMessageBubble, { owner: "others", hasTail: true },
7995
+ React__default$1["default"].createElement(TypingIndicator, null)))))));
7611
7996
  })));
7612
7997
  };
7613
7998
 
@@ -7628,19 +8013,19 @@ var defaultProps = {
7628
8013
  var MessageList = function (props) {
7629
8014
  if (props === void 0) { props = defaultProps; }
7630
8015
  var onSend = props.onSend, onWrite = props.onWrite, onOpenUrl = props.onOpenUrl;
7631
- var messagesEndRef = React.useRef(null);
7632
- React.useEffect(function () {
8016
+ var messagesEndRef = React$1.useRef(null);
8017
+ React$1.useEffect(function () {
7633
8018
  messagesEndRef.current.scrollIntoView({ behavior: "smooth" });
7634
8019
  }, [props.messages]);
7635
- var handleSend = React.useCallback(function (msg) {
8020
+ var handleSend = React$1.useCallback(function (msg) {
7636
8021
  onSend(msg);
7637
8022
  messagesEndRef.current.scrollIntoView({ behavior: "smooth" });
7638
8023
  }, [onSend]);
7639
- var handleWrite = React.useCallback(function (msg) {
8024
+ var handleWrite = React$1.useCallback(function (msg) {
7640
8025
  onWrite(msg);
7641
8026
  messagesEndRef.current.scrollIntoView({ behavior: "smooth" });
7642
8027
  }, [onWrite]);
7643
- var ctxCache = React.useMemo(function () { return new MiddlewareContextFactory({
8028
+ var ctxCache = React$1.useMemo(function () { return new MiddlewareContextFactory({
7644
8029
  send: handleSend,
7645
8030
  write: handleWrite,
7646
8031
  openUrl: onOpenUrl
@@ -7652,24 +8037,25 @@ var MessageList = function (props) {
7652
8037
  * @param addClass
7653
8038
  */
7654
8039
  function renderByType(msg, sibling) {
7655
- var user = props.agents[msg.user.nick];
8040
+ var _a;
8041
+ var user = (_a = props.agents[msg.user.nick]) === null || _a === void 0 ? void 0 : _a.user;
7656
8042
  switch (msg.type) {
7657
8043
  case "chat.file":
7658
8044
  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) }));
8045
+ 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
8046
  case "chat.memberjoin":
7661
8047
  case "chat.memberleave":
7662
8048
  case "chat.rating":
7663
8049
  case "chat.typing":
7664
- return (React__default["default"].createElement(SystemMessage, { key: msg.type + msg.timestamp, message: msg }));
8050
+ return (React__default$1["default"].createElement(SystemMessage, { key: msg.type + msg.timestamp, message: msg }));
7665
8051
  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 }));
8052
+ return (React__default$1["default"].createElement(ChatRatingContainer, { key: msg.type + msg.timestamp, agent: user, hasRating: props.hasRating, shouldDisplay: msg.timestamp === props.lastRatingRequestTimestamp }));
7667
8053
  case "chat.offline":
7668
- return React__default["default"].createElement(OfflineFormContainer, { key: "offline-" + msg.timestamp });
8054
+ return React__default$1["default"].createElement(OfflineFormContainer, { key: "offline-".concat(msg.timestamp) });
7669
8055
  case "chat.prechat":
7670
- return React__default["default"].createElement(PrechatFormContainer, { key: "prechat" });
8056
+ return React__default$1["default"].createElement(PrechatFormContainer, { key: "prechat" });
7671
8057
  default:
7672
- return React__default["default"].createElement("div", { key: +new Date() },
8058
+ return React__default$1["default"].createElement("div", { key: +new Date() },
7673
8059
  "Unhandled message: ",
7674
8060
  JSON.stringify(msg));
7675
8061
  }
@@ -7692,23 +8078,23 @@ var MessageList = function (props) {
7692
8078
  });
7693
8079
  }
7694
8080
  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" },
8081
+ return (React__default$1["default"].createElement("div", { className: "message-list-container" },
8082
+ React__default$1["default"].createElement("div", { className: "message-list-container__msgs" },
7697
8083
  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)));
8084
+ React__default$1["default"].createElement("div", { ref: messagesEndRef, style: { float: "left", clear: "both" } }),
8085
+ React__default$1["default"].createElement(QueuePosition, { position: queuePosition }),
8086
+ React__default$1["default"].createElement(TypingStatus, { agents: agents })),
8087
+ React__default$1["default"].createElement(ChatChipsContainer, null)));
7702
8088
  };
7703
8089
 
7704
8090
  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"));
8091
+ return React__default$1["default"].createElement("div", { className: "server-offline" },
8092
+ React__default$1["default"].createElement("h2", null, "Chat is currently unavailable"),
8093
+ React__default$1["default"].createElement("h3", null, "Server is offline"));
7708
8094
  };
7709
8095
 
7710
8096
  var MinimizeButton = function (props) {
7711
- return React__default["default"].createElement("div", { className: "minimize-button", onClick: props.onClick });
8097
+ return React__default$1["default"].createElement("div", { className: "minimize-button", onClick: props.onClick });
7712
8098
  };
7713
8099
 
7714
8100
  var DEFAULT_STATUS_CONFIG = {
@@ -7728,23 +8114,23 @@ function getStatusText(status, config) {
7728
8114
  }
7729
8115
  var StatusContainer = function (props) {
7730
8116
  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))),
8117
+ return (React__default$1["default"].createElement("div", { className: "status-container" },
8118
+ React__default$1["default"].createElement("div", { className: "status-container__avatar" },
8119
+ React__default$1["default"].createElement(Avatar, { entity: props.agent })),
8120
+ React__default$1["default"].createElement("div", { className: "status-text" },
8121
+ React__default$1["default"].createElement("span", null, getStatusText(props.accountStatus, (_a = props.config) === null || _a === void 0 ? void 0 : _a.status))),
7736
8122
  props.canMinimize &&
7737
- React__default["default"].createElement(MinimizeButton, { onClick: props.minimizeOnClick })));
8123
+ React__default$1["default"].createElement(MinimizeButton, { onClick: props.minimizeOnClick })));
7738
8124
  };
7739
8125
 
7740
8126
  function buildStyleContent(theme) {
7741
8127
  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}";
8128
+ 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
8129
  }
7744
8130
  function WidgetStylesheet(props) {
7745
8131
  var theme = props.theme;
7746
8132
  var stylesContent = buildStyleContent(theme);
7747
- return (React__default["default"].createElement("style", null, stylesContent));
8133
+ return (React__default$1["default"].createElement("style", null, stylesContent));
7748
8134
  }
7749
8135
  function buildVariables(gen) {
7750
8136
  var result = gen.next();
@@ -7752,7 +8138,7 @@ function buildVariables(gen) {
7752
8138
  while (result.done === false) {
7753
8139
  var _a = result.value, key = _a[0], value = _a[1];
7754
8140
  if (value !== undefined && value !== null && value !== "") {
7755
- res += key + ": " + value + ";\n\r";
8141
+ res += "".concat(key, ": ").concat(value, ";\n\r");
7756
8142
  }
7757
8143
  result = gen.next();
7758
8144
  }
@@ -7760,14 +8146,14 @@ function buildVariables(gen) {
7760
8146
  }
7761
8147
  function withPrefix(prefix, gen) {
7762
8148
  var result;
7763
- return __generator(this, function (_a) {
8149
+ return __generator$1(this, function (_a) {
7764
8150
  switch (_a.label) {
7765
8151
  case 0:
7766
8152
  result = gen.next();
7767
8153
  _a.label = 1;
7768
8154
  case 1:
7769
8155
  if (!!result.done) return [3 /*break*/, 3];
7770
- return [4 /*yield*/, ["" + prefix + result.value[0], result.value[1]]];
8156
+ return [4 /*yield*/, ["".concat(prefix).concat(result.value[0]), result.value[1]]];
7771
8157
  case 2:
7772
8158
  _a.sent();
7773
8159
  result = gen.next();
@@ -7782,7 +8168,7 @@ function union() {
7782
8168
  for (_i = 0; _i < arguments.length; _i++) {
7783
8169
  children[_i] = arguments[_i];
7784
8170
  }
7785
- return __generator(this, function (_b) {
8171
+ return __generator$1(this, function (_b) {
7786
8172
  switch (_b.label) {
7787
8173
  case 0:
7788
8174
  _a = 0, children_1 = children;
@@ -7807,7 +8193,7 @@ function union() {
7807
8193
  });
7808
8194
  }
7809
8195
  function single(key, value) {
7810
- return __generator(this, function (_a) {
8196
+ return __generator$1(this, function (_a) {
7811
8197
  switch (_a.label) {
7812
8198
  case 0: return [4 /*yield*/, [key, value]];
7813
8199
  case 1:
@@ -7817,7 +8203,7 @@ function single(key, value) {
7817
8203
  });
7818
8204
  }
7819
8205
  function empty() {
7820
- return __generator(this, function (_a) {
8206
+ return __generator$1(this, function (_a) {
7821
8207
  return [2 /*return*/];
7822
8208
  });
7823
8209
  }
@@ -7837,7 +8223,7 @@ function getMessageStyle(style) {
7837
8223
  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
8224
  }
7839
8225
  function getSize(style) {
7840
- return __generator(this, function (_a) {
8226
+ return __generator$1(this, function (_a) {
7841
8227
  switch (_a.label) {
7842
8228
  case 0: return [4 /*yield*/, ['width', style === null || style === void 0 ? void 0 : style.width]];
7843
8229
  case 1:
@@ -7850,7 +8236,7 @@ function getSize(style) {
7850
8236
  });
7851
8237
  }
7852
8238
  function getMargins(style) {
7853
- return __generator(this, function (_a) {
8239
+ return __generator$1(this, function (_a) {
7854
8240
  switch (_a.label) {
7855
8241
  case 0:
7856
8242
  if (!style) return [3 /*break*/, 5];
@@ -7872,7 +8258,7 @@ function getMargins(style) {
7872
8258
  });
7873
8259
  }
7874
8260
  function getPaddings(style) {
7875
- return __generator(this, function (_a) {
8261
+ return __generator$1(this, function (_a) {
7876
8262
  switch (_a.label) {
7877
8263
  case 0:
7878
8264
  if (!style) return [3 /*break*/, 5];
@@ -7894,7 +8280,7 @@ function getPaddings(style) {
7894
8280
  });
7895
8281
  }
7896
8282
  function getTextStyle(style) {
7897
- return __generator(this, function (_a) {
8283
+ return __generator$1(this, function (_a) {
7898
8284
  switch (_a.label) {
7899
8285
  case 0:
7900
8286
  if (!style) return [3 /*break*/, 6];
@@ -7919,7 +8305,7 @@ function getTextStyle(style) {
7919
8305
  });
7920
8306
  }
7921
8307
  function getBackgroundStyle(style) {
7922
- return __generator(this, function (_a) {
8308
+ return __generator$1(this, function (_a) {
7923
8309
  switch (_a.label) {
7924
8310
  case 0: return [4 /*yield*/, ["background", style]];
7925
8311
  case 1:
@@ -7929,7 +8315,7 @@ function getBackgroundStyle(style) {
7929
8315
  });
7930
8316
  }
7931
8317
  function getButtonStyle(style) {
7932
- return __generator(this, function (_a) {
8318
+ return __generator$1(this, function (_a) {
7933
8319
  switch (_a.label) {
7934
8320
  case 0: return [4 /*yield*/, ['button-color', style === null || style === void 0 ? void 0 : style.color]];
7935
8321
  case 1:
@@ -7945,7 +8331,7 @@ function getMenuStyle(style) {
7945
8331
  return union(withPrefix("item-", getMenuItemStyle(style === null || style === void 0 ? void 0 : style.item)));
7946
8332
  }
7947
8333
  function getBorderStyle(style) {
7948
- return __generator(this, function (_a) {
8334
+ return __generator$1(this, function (_a) {
7949
8335
  switch (_a.label) {
7950
8336
  case 0:
7951
8337
  if (!style) return [3 /*break*/, 4];
@@ -7991,14 +8377,14 @@ function getCtaStyle(style) {
7991
8377
  var ChatWidgetWrapper = function (props) {
7992
8378
  var rawConfig = props.config;
7993
8379
  var connection = useConnectionInfo(rawConfig);
7994
- var config = React.useMemo(function () {
8380
+ var config = React$1.useMemo(function () {
7995
8381
  var _a;
7996
8382
  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
8383
  }, [connection, rawConfig]);
7998
8384
  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)))));
8385
+ return (React__default$1["default"].createElement(ChatConfigContext.Provider, { value: config },
8386
+ React__default$1["default"].createElement(ChatServerContext.Provider, { value: chatServer },
8387
+ React__default$1["default"].createElement(ChatWidget, __assign({}, props)))));
8002
8388
  };
8003
8389
  var ChatWidget = function (props) {
8004
8390
  var _a, _b, _c, _d, _e, _f;
@@ -8009,12 +8395,12 @@ var ChatWidget = function (props) {
8009
8395
  var mode = (_a = props.mode) !== null && _a !== void 0 ? _a : "normal";
8010
8396
  var dockedMode = mode === "docked";
8011
8397
  var staticMode = mode === "static";
8012
- var modeClass = "widget-container--" + mode;
8398
+ var modeClass = "widget-container--".concat(mode);
8013
8399
  var canMinimize = !dockedMode && !staticMode;
8014
8400
  // 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);
8401
+ 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];
8402
+ var _h = React$1.useState(false), typing = _h[0], setTypingState = _h[1]; // false initially
8403
+ var chatServer = React$1.useContext(ChatServerContext);
8018
8404
  function setVisible(newVisible) {
8019
8405
  if (staticMode) {
8020
8406
  return;
@@ -8108,22 +8494,22 @@ var ChatWidget = function (props) {
8108
8494
  useGreeting(!isOffline && !props.preChatFormEnabled && visible);
8109
8495
  var config = props.config, onConnectionStatusChange = props.onConnectionStatusChange;
8110
8496
  var connectionStatus = chatState.connection.connectionStatus;
8111
- React.useEffect(function () {
8497
+ React$1.useEffect(function () {
8112
8498
  if (onConnectionStatusChange) {
8113
8499
  onConnectionStatusChange(connectionStatus);
8114
8500
  }
8115
8501
  }, [connectionStatus, onConnectionStatusChange]);
8116
8502
  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 })));
8503
+ return (React__default$1["default"].createElement(React__default$1["default"].Fragment, null,
8504
+ React__default$1["default"].createElement("div", { className: "widget-container ".concat(modeClass, " ").concat(getVisibilityClass()) },
8505
+ React__default$1["default"].createElement(WidgetStylesheet, { theme: config === null || config === void 0 ? void 0 : config.theme }),
8506
+ 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 }),
8507
+ 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 }),
8508
+ React__default$1["default"].createElement("div", { className: "spinner-container ".concat(visible && connectionStatus === "pending" ? "visible" : "") },
8509
+ React__default$1["default"].createElement("div", { className: "spinner" })),
8510
+ connectionStatus === "offline" && React__default$1["default"].createElement(ServerOffline, null),
8511
+ React__default$1["default"].createElement(ChatFooter, { isChatting: chatState.isChatting, onChange: handleOnChange, onSubmit: handleOnSubmit, onFileUpload: handleFileUpload })),
8512
+ 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
8513
  };
8128
8514
 
8129
8515
  function tryParseJson(str) {
@@ -8162,7 +8548,7 @@ var BrowserStateStorage = /** @class */ (function () {
8162
8548
  * @returns {string}
8163
8549
  */
8164
8550
  function visitorFingerprint() {
8165
- return uuid();
8551
+ return uuid_1();
8166
8552
  }
8167
8553
 
8168
8554
  var DEFAULT_VISITOR = {
@@ -8218,7 +8604,7 @@ function connectionReducer(state, action) {
8218
8604
  }
8219
8605
 
8220
8606
  function joinMessages(messages, msg) {
8221
- return insertSorted(__spreadArray([], messages, true), msg, function (left, right) { return left.timestamp - right.timestamp; });
8607
+ return insertSorted(__spreadArray$1([], messages, true), msg, function (left, right) { return left.timestamp - right.timestamp; });
8222
8608
  }
8223
8609
 
8224
8610
  function memberJoin(state, detail) {
@@ -8249,7 +8635,7 @@ function memberLeave(state, detail) {
8249
8635
 
8250
8636
  function resetReducer(state) {
8251
8637
  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 });
8638
+ return __assign(__assign({}, createDefaultState()), { connection: __assign(__assign({}, state.connection), { nonce: uuid_1() }), visitor: state.visitor, visitorId: state.visitorId });
8253
8639
  }
8254
8640
 
8255
8641
  // todo: create reducer (requires redux-thunk dependncy)
@@ -8348,7 +8734,7 @@ function mapSynthetic(state, action) {
8348
8734
  }
8349
8735
  };
8350
8736
  default:
8351
- throw new Error("Unknown synthetic action. Detail type: " + action.detail.type);
8737
+ throw new Error("Unknown synthetic action. Detail type: ".concat(action.detail.type));
8352
8738
  }
8353
8739
  }
8354
8740
  function storeHandler(state, action) {
@@ -8363,13 +8749,14 @@ function storeHandler(state, action) {
8363
8749
  }
8364
8750
  }
8365
8751
 
8366
- function createChatStore(config) {
8367
- var storage = new BrowserStateStorage(sessionStorage, "xappchat." + config.serverUrl + "." + config.accountKey);
8752
+ function createChatStore(config, dataStorage) {
8753
+ if (dataStorage === void 0) { dataStorage = sessionStorage; }
8754
+ var storage = new BrowserStateStorage(dataStorage, "xappchat.".concat(config.serverUrl, ".").concat(config.accountKey));
8368
8755
  var chatReducer = persistStateReducer(storage, DEFAULT_STATE, storeHandler);
8369
8756
  var middlewares = [
8370
8757
  thunk__default["default"]
8371
8758
  ];
8372
- var composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || redux.compose;
8759
+ var composeEnhancers = globalThis.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || redux.compose;
8373
8760
  return redux.createStore(chatReducer, composeEnhancers(redux.applyMiddleware.apply(void 0, middlewares)));
8374
8761
  }
8375
8762
 
@@ -8377,13 +8764,13 @@ var ChatWidgetContainer = function (props) {
8377
8764
  var _a;
8378
8765
  var messageMiddleware = useStandardMiddleware();
8379
8766
  var connection = useServerConfig(props.config);
8380
- var chatStore = React.useMemo(function () { return createChatStore(connection); }, [connection]);
8767
+ var chatStore = React$1.useMemo(function () { return createChatStore(connection); }, [connection]);
8381
8768
  if ((_a = props.config) === null || _a === void 0 ? void 0 : _a.disabled) {
8382
- return React__default["default"].createElement(React__default["default"].Fragment, null);
8769
+ return React__default$1["default"].createElement(React__default$1["default"].Fragment, null);
8383
8770
  }
8384
8771
  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))));
8772
+ return (React__default$1["default"].createElement(reactRedux.Provider, { store: chatStore },
8773
+ React__default$1["default"].createElement(ChatWidgetWrapper, __assign({}, widgetProps))));
8387
8774
  };
8388
8775
 
8389
8776
  function createStaticReducer(state) {
@@ -8404,35 +8791,35 @@ function createStaticStore(state) {
8404
8791
 
8405
8792
  var StaticChatWidgetContainer = function (props) {
8406
8793
  var state = props.state;
8407
- var store = React.useMemo(function () {
8794
+ var store = React$1.useMemo(function () {
8408
8795
  return createStaticStore(state);
8409
8796
  }, [state]);
8410
- var config = React.useMemo(function () {
8797
+ var config = React$1.useMemo(function () {
8411
8798
  return __assign(__assign({}, props.config), { connection: {
8412
8799
  serverUrl: "",
8413
8800
  type: "local"
8414
8801
  } });
8415
8802
  }, [props.config]);
8416
- return (React__default["default"].createElement(reactRedux.Provider, { store: store },
8417
- React__default["default"].createElement(ChatWidgetWrapper, __assign({}, props, { config: config }))));
8803
+ return (React__default$1["default"].createElement(reactRedux.Provider, { store: store },
8804
+ React__default$1["default"].createElement(ChatWidgetWrapper, __assign({}, props, { config: config }))));
8418
8805
  };
8419
8806
 
8420
8807
  function createStateFromMessages(messages) {
8421
8808
  var def = createDefaultState();
8422
- return __assign(__assign({}, def), { connection: __assign(__assign({}, def.connection), { connectionStatus: "online" }), accountStatus: "online", chats: __spreadArray([], messages, true), isChatting: true });
8809
+ return __assign(__assign({}, def), { connection: __assign(__assign({}, def.connection), { connectionStatus: "online" }), accountStatus: "online", chats: __spreadArray$1([], messages, true), isChatting: true });
8423
8810
  }
8424
8811
 
8425
8812
  var StaticMessagesChatWidgetContainer = function (props) {
8426
8813
  var messages = props.messages;
8427
- var state = React.useMemo(function () {
8814
+ var state = React$1.useMemo(function () {
8428
8815
  return createStateFromMessages(messages);
8429
8816
  }, [messages]);
8430
- return (React__default["default"].createElement(StaticChatWidgetContainer, { state: state, mode: props.mode, config: props.config }));
8817
+ return (React__default$1["default"].createElement(StaticChatWidgetContainer, { state: state, mode: props.mode, config: props.config }));
8431
8818
  };
8432
8819
 
8433
8820
  Object.defineProperty(exports, 'React', {
8434
8821
  enumerable: true,
8435
- get: function () { return React__default["default"]; }
8822
+ get: function () { return React__default$1["default"]; }
8436
8823
  });
8437
8824
  exports.ActionButton = ActionButton;
8438
8825
  exports.Avatar = Avatar;