@xapp/chat-widget 1.29.2 → 1.32.1

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,651 @@ 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, onSearch = props.onSearch;
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
+ var inputRef = React.useRef(null);
2365
+ var inputNode = inputRef.current;
2366
+ React.useEffect(function () {
2367
+ if (inputNode && onSearch) {
2368
+ var handler_1 = function (ev) {
2369
+ var target = ev.target;
2370
+ if (target) {
2371
+ onSearch({
2372
+ text: target.value,
2373
+ formats: []
2374
+ });
2375
+ }
2376
+ };
2377
+ inputNode.addEventListener("search", handler_1);
2378
+ return function () {
2379
+ inputNode.removeEventListener("search", handler_1);
2380
+ };
2381
+ }
2382
+ return undefined;
2383
+ }, [inputNode, onSearch]);
2384
+ return (React__default["default"].createElement("div", { className: "xappw-rich-input ".concat(props.className) }, rich ?
2385
+ 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, ref: inputRef, 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 })));
2386
+ };
2387
+
2388
+ var SuggestionsGroupHeading = function (props) {
2389
+ return (React__default["default"].createElement("div", { className: "xappw-suggestions-group-heading" }, props.label));
2390
+ };
2391
+
2392
+ function getScrollContainer(node) {
2393
+ var walker = node;
2394
+ while (walker && !walker.classList.contains("xapp-search-result__suggestions")) {
2395
+ walker = walker.parentElement;
2396
+ }
2397
+ return walker || undefined;
2398
+ }
2399
+ var SuggestionsItem = function (props) {
2400
+ var data = props.data, current = props.current, ActionsComponent = props.actions, onClick = props.onClick, onHover = props.onHover;
2401
+ var handleClick = React.useCallback(function () {
2402
+ onClick(data);
2403
+ }, [data, onClick]);
2404
+ var handleHover = React.useCallback(function () {
2405
+ if (onHover) {
2406
+ onHover(data);
2407
+ }
2408
+ }, [data, onHover]);
2409
+ var ref = React.useRef(null);
2410
+ React.useEffect(function () {
2411
+ var node = ref.current;
2412
+ if (current && node) {
2413
+ var scrollContainer = getScrollContainer(node);
2414
+ if (scrollContainer) {
2415
+ var scrollBox = scrollContainer.getBoundingClientRect();
2416
+ var nodeBox = node.getBoundingClientRect();
2417
+ var maxTop = Math.max(scrollBox.top, nodeBox.top);
2418
+ var minBottom = Math.min(scrollBox.bottom, nodeBox.bottom);
2419
+ var visibleHeight = minBottom - maxTop;
2420
+ var actualHeight = nodeBox.height;
2421
+ if (visibleHeight < actualHeight * 0.99) {
2422
+ node.scrollIntoView({ behavior: "smooth" });
2423
+ }
2424
+ }
2425
+ }
2426
+ }, [current]);
2427
+ return (React__default["default"].createElement("div", { ref: ref, className: "xappw-suggestions-item ".concat(current ? "xappw-suggestions-item--current" : ""), onClick: handleClick, onMouseEnter: handleHover },
2428
+ React__default["default"].createElement(RichText, { value: data, className: "xappw-suggestions-item__texts", readOnly: true }),
2429
+ ActionsComponent &&
2430
+ React__default["default"].createElement("div", { className: "xappw-suggestions-item__actions" },
2431
+ React__default["default"].createElement(ActionsComponent, { data: data, current: current }))));
2432
+ };
2433
+
2434
+ var SuggestionsGroup = function (props) {
2435
+ var group = props.group, currentIndex = props.currentIndex, itemActions = props.itemActions;
2436
+ var heading = group.heading, items = group.items;
2437
+ return (React__default["default"].createElement("div", { className: "xappw-suggestions-group" },
2438
+ React__default["default"].createElement("div", { className: "xappw-suggestions-group__heading" },
2439
+ React__default["default"].createElement(SuggestionsGroupHeading, { label: heading })),
2440
+ React__default["default"].createElement("div", { className: "xappw-suggestions-group__items" }, items.map(function (item, itemIndex) {
2441
+ return React__default["default"].createElement(SuggestionsItem, { key: itemIndex, data: item, current: currentIndex === itemIndex, actions: itemActions, onClick: props.onItemClick, onHover: props.onItemHover });
2442
+ }))));
2443
+ };
2444
+
2445
+ function getItemsLength(result) {
2446
+ return result.reduce(function (prev, cur) { return prev + cur.items.length; }, 0);
2447
+ }
2448
+
2449
+ var SuggestionsList = function (props) {
2450
+ var suggestions = props.suggestions, itemActions = props.itemActions, className = props.className;
2451
+ var length = React.useMemo(function () { return getItemsLength(suggestions); }, [suggestions]);
2452
+ var currentIndex = length >= 0 ? props.index : NaN;
2453
+ var indexWalker = 0;
2454
+ return (React__default["default"].createElement("div", { className: "xappw-suggestions-list ".concat(className || "") }, suggestions.map(function (group, index) {
2455
+ var res = (React__default["default"].createElement(SuggestionsGroup, { key: index, group: group, currentIndex: currentIndex - indexWalker, itemActions: itemActions, onItemClick: props.onItemClick, onItemHover: props.onItemHover }));
2456
+ indexWalker += group.items.length;
2457
+ return res;
2458
+ })));
2459
+ };
2460
+
2461
+ function findItemByIndex(groups, index) {
2462
+ if (index >= 0) {
2463
+ for (var _i = 0, groups_1 = groups; _i < groups_1.length; _i++) {
2464
+ var group = groups_1[_i];
2465
+ for (var _a = 0, _b = group.items; _a < _b.length; _a++) {
2466
+ var item = _b[_a];
2467
+ if (index <= 0) {
2468
+ return item;
2469
+ }
2470
+ index--;
2471
+ }
2472
+ }
2473
+ }
2474
+ return undefined;
2475
+ }
2476
+
2477
+ function parseSuggestionsFormat(format) {
2478
+ var types = Object.keys(format);
2479
+ var type = types[0];
2480
+ var item = format[type];
2481
+ if (!item) {
2482
+ throw new Error();
2483
+ }
2484
+ return {
2485
+ type: type,
2486
+ start: item.start,
2487
+ end: item.end
2488
+ };
2489
+ }
2490
+ function parseSuggestionsFormats(formats) {
2491
+ return formats.map(parseSuggestionsFormat);
2492
+ }
2493
+ function parseSuggestionsResponseItem(item) {
2494
+ return {
2495
+ text: item.suggestion,
2496
+ content: item.answer,
2497
+ formats: parseSuggestionsFormats(item.format),
2498
+ type: item.type
2499
+ };
2500
+ }
2501
+ function getHeading(type) {
2502
+ switch (type) {
2503
+ case "FAQ":
2504
+ return "FAQs";
2505
+ case "INTENT":
2506
+ return "Suggestions";
2507
+ case "HISTORICAL":
2508
+ return "Suggestions";
2509
+ default:
2510
+ return type;
2511
+ }
2512
+ }
2513
+ function parseSuggestionsResponse(response, direction) {
2514
+ if (direction === void 0) { direction = 1; }
2515
+ if (!response) {
2516
+ return undefined;
2517
+ }
2518
+ var items = sortSuggestionItems(response.suggestions, direction);
2519
+ return items.reduce(function (result, current) {
2520
+ var mappedItem = parseSuggestionsResponseItem(current);
2521
+ if (result.length) {
2522
+ var prevGroup = result[result.length - 1];
2523
+ if (prevGroup.heading === getHeading(current.type)) {
2524
+ prevGroup.items.push(mappedItem);
2525
+ return result;
2526
+ }
2527
+ }
2528
+ result.push({
2529
+ heading: getHeading(current.type),
2530
+ items: [mappedItem]
2531
+ });
2532
+ return result;
2533
+ }, []);
2534
+ }
2535
+
2536
+ /*! *****************************************************************************
2537
+ Copyright (c) Microsoft Corporation.
2538
+
2539
+ Permission to use, copy, modify, and/or distribute this software for any
2540
+ purpose with or without fee is hereby granted.
2541
+
2542
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
2543
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
2544
+ AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
2545
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
2546
+ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
2547
+ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
2548
+ PERFORMANCE OF THIS SOFTWARE.
2549
+ ***************************************************************************** */
2550
+
2551
+ function __awaiter(thisArg, _arguments, P, generator) {
2552
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
2553
+ return new (P || (P = Promise))(function (resolve, reject) {
2554
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
2555
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
2556
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
2557
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
2558
+ });
2559
+ }
2560
+
2561
+ function __generator(thisArg, body) {
2562
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
2563
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
2564
+ function verb(n) { return function (v) { return step([n, v]); }; }
2565
+ function step(op) {
2566
+ if (f) throw new TypeError("Generator is already executing.");
2567
+ while (_) try {
2568
+ 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;
2569
+ if (y = 0, t) op = [op[0] & 2, t.value];
2570
+ switch (op[0]) {
2571
+ case 0: case 1: t = op; break;
2572
+ case 4: _.label++; return { value: op[1], done: false };
2573
+ case 5: _.label++; y = op[1]; op = [0]; continue;
2574
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
2575
+ default:
2576
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
2577
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
2578
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
2579
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
2580
+ if (t[2]) _.ops.pop();
2581
+ _.trys.pop(); continue;
2582
+ }
2583
+ op = body.call(thisArg, _);
2584
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
2585
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
2586
+ }
2587
+ }
2588
+
2589
+ function __spreadArray(to, from, pack) {
2590
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
2591
+ if (ar || !(i in from)) {
2592
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
2593
+ ar[i] = from[i];
2594
+ }
2595
+ }
2596
+ return to.concat(ar || Array.prototype.slice.call(from));
2597
+ }
2598
+
2599
+ var order = ["FAQ", "INTENT", "HISTORICAL"];
2600
+ var ordersMap = order.reduce(function (prev, cur, index) {
2601
+ prev[cur] = index;
2602
+ return prev;
2603
+ }, {});
2604
+ function compareSuggestionItems(left, right, direction) {
2605
+ return direction * (ordersMap[right.type] - ordersMap[left.type]);
2606
+ }
2607
+ function sortSuggestionItems(items, direction) {
2608
+ return __spreadArray([], items, true).sort(function (left, right) { return compareSuggestionItems(left, right, direction); });
2609
+ }
2610
+
2611
+ /**
2612
+ * Append the provided query params to the URL
2613
+ *
2614
+ * It will overwrite existing params on the URL if there are conflicts
2615
+ * @param url
2616
+ * @param params
2617
+ */
2618
+ function addQueryParametersToURL(url, params) {
2619
+ var existingParams = new URL(url).searchParams;
2620
+ params.forEach(function (value, key) {
2621
+ existingParams.append(key, value);
2622
+ });
2623
+ var newUrl = new URL(url);
2624
+ newUrl.search = existingParams.toString();
2625
+ return newUrl;
2626
+ }
2627
+
2628
+ var defaultOptions = {};
2629
+ function noop$1() {
2630
+ }
2631
+ function useJsonFetch(url, options) {
2632
+ if (options === void 0) { options = defaultOptions; }
2633
+ var _a = React.useState({
2634
+ state: "paused"
2635
+ }), value = _a[0], setValue = _a[1];
2636
+ var pause = options.pause;
2637
+ React.useEffect(function () {
2638
+ if (pause) {
2639
+ setValue({
2640
+ state: "paused"
2641
+ });
2642
+ return noop$1;
2643
+ }
2644
+ var controller = new AbortController();
2645
+ var signal = controller.signal;
2646
+ var mounted = true;
2647
+ (function () {
2648
+ return __awaiter(this, void 0, void 0, function () {
2649
+ var response, json, e_1;
2650
+ return __generator(this, function (_a) {
2651
+ switch (_a.label) {
2652
+ case 0:
2653
+ _a.trys.push([0, 4, , 5]);
2654
+ setValue({
2655
+ state: "fetching"
2656
+ });
2657
+ return [4 /*yield*/, fetch(url, { signal: signal })];
2658
+ case 1:
2659
+ response = _a.sent();
2660
+ if (!mounted) return [3 /*break*/, 3];
2661
+ return [4 /*yield*/, response.json()];
2662
+ case 2:
2663
+ json = _a.sent();
2664
+ if (response.ok) {
2665
+ setValue({
2666
+ state: "success",
2667
+ data: json
2668
+ });
2669
+ }
2670
+ else {
2671
+ setValue({
2672
+ state: "error",
2673
+ error: json
2674
+ });
2675
+ }
2676
+ _a.label = 3;
2677
+ case 3: return [3 /*break*/, 5];
2678
+ case 4:
2679
+ e_1 = _a.sent();
2680
+ if (e_1.name === "AbortError") {
2681
+ setValue({
2682
+ state: "paused"
2683
+ });
2684
+ return [2 /*return*/];
2685
+ }
2686
+ throw e_1;
2687
+ case 5: return [2 /*return*/];
2688
+ }
2689
+ });
2690
+ });
2691
+ })();
2692
+ return function () {
2693
+ mounted = false;
2694
+ controller.abort();
2695
+ };
2696
+ }, [url, pause]);
2697
+ return value;
2698
+ }
2699
+
2700
+ function useSuggestionsFetch$1(options) {
2701
+ var baseUrl = options.url, context = options.context, query = options.query;
2702
+ var url = React.useMemo(function () {
2703
+ if (!baseUrl) {
2704
+ return undefined;
2705
+ }
2706
+ var params = new URLSearchParams();
2707
+ params.append("size", "5");
2708
+ params.append("queryText", query);
2709
+ if (context === null || context === void 0 ? void 0 : context.length) {
2710
+ params.append("activeContexts", context.join(","));
2711
+ }
2712
+ return addQueryParametersToURL(baseUrl, params);
2713
+ }, [query, context, baseUrl]);
2714
+ var response = useJsonFetch(url ? "".concat(url.toString()) : "", {
2715
+ pause: !query || !baseUrl
2716
+ });
2717
+ return response;
2718
+ }
2719
+
2720
+ /**
2721
+ * Quicker configurable uuid
2722
+ *
2723
+ * @export
2724
+ * @returns {string}
2725
+ */
2726
+ function uuid() {
2727
+ var d = new Date().getTime();
2728
+ var newUuid = "xxxxxxxx-xxxx-65xx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) {
2729
+ /* tslint:disable:no-magic-numbers */
2730
+ /* tslint:disable:no-bitwise */
2731
+ var r = (d + Math.random() * 16) % 16 | 0;
2732
+ d = Math.floor(d / 16);
2733
+ return (c === "x" ? r : (r & 0x3) | 0x8).toString(16);
2734
+ /* tslint:enable:no-magic-numbers */
2735
+ /* tslint:disable:no-bitwise */
2736
+ });
2737
+ return newUuid;
2738
+ }
2739
+
2740
+ var IconButton_1 = dist.IconButton = IconButton;
2741
+ dist.MessageBubble = MessageBubble;
2742
+ var RichInput_1 = dist.RichInput = RichInput;
2743
+ dist.RichText = RichText;
2744
+ dist.SuggestionsGroup = SuggestionsGroup;
2745
+ dist.SuggestionsGroupHeading = SuggestionsGroupHeading;
2746
+ dist.SuggestionsItem = SuggestionsItem;
2747
+ var SuggestionsList_1 = dist.SuggestionsList = SuggestionsList;
2748
+ dist.addQueryParametersToURL = addQueryParametersToURL;
2749
+ dist.extendFormat = extendFormat;
2750
+ var findItemByIndex_1 = dist.findItemByIndex = findItemByIndex;
2751
+ var getItemsLength_1 = dist.getItemsLength = getItemsLength;
2752
+ var parseSuggestionsResponse_1 = dist.parseSuggestionsResponse = parseSuggestionsResponse;
2753
+ dist.sortSuggestionItems = sortSuggestionItems;
2754
+ dist.useJsonFetch = useJsonFetch;
2755
+ var useSuggestionsFetch_1 = dist.useSuggestionsFetch = useSuggestionsFetch$1;
2756
+ var uuid_1 = dist.uuid = uuid;
2757
+
2143
2758
  function postMessageToStentor(data, url, key) {
2144
- return __awaiter(this, void 0, void 0, function () {
2759
+ return __awaiter$1(this, void 0, void 0, function () {
2145
2760
  var body, response;
2146
- return __generator(this, function (_a) {
2761
+ return __generator$1(this, function (_a) {
2147
2762
  switch (_a.label) {
2148
2763
  case 0:
2149
2764
  body = JSON.stringify(data);
2150
- log("URL: " + url);
2151
- log("BODY: " + body);
2765
+ log("URL: ".concat(url));
2766
+ log("BODY: ".concat(body));
2152
2767
  return [4 /*yield*/, fetch(url, {
2153
2768
  method: "POST",
2154
2769
  headers: {
2155
2770
  "Content-Type": "application/json",
2156
- "Authorization": "Bearer " + key,
2771
+ "Authorization": "Bearer ".concat(key),
2157
2772
  "User-Agent": "Stentor Chat Server"
2158
2773
  },
2159
2774
  body: body,
@@ -2162,7 +2777,7 @@ function postMessageToStentor(data, url, key) {
2162
2777
  case 1:
2163
2778
  response = _a.sent();
2164
2779
  if (!response.ok) {
2165
- throw new Error("Status " + response.status + ", Text: " + response.statusText);
2780
+ throw new Error("Status ".concat(response.status, ", Text: ").concat(response.statusText));
2166
2781
  }
2167
2782
  return [2 /*return*/, response.json()];
2168
2783
  }
@@ -2230,7 +2845,7 @@ function getOutput(value) {
2230
2845
  * @returns
2231
2846
  */
2232
2847
  function responseToMessage(botResponse, now) {
2233
- var _a, _b, _c, _d;
2848
+ var _a, _b, _c, _d, _e;
2234
2849
  if (now === void 0) { now = new Date().getTime(); }
2235
2850
  var responseMessage;
2236
2851
  if (!botResponse) {
@@ -2276,24 +2891,20 @@ function responseToMessage(botResponse, now) {
2276
2891
  if (html) {
2277
2892
  responseMessage.msg = __assign(__assign({}, responseMessage.msg), { html: html });
2278
2893
  }
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
- }
2894
+ if ((_e = outputSpeech.suggestions) === null || _e === void 0 ? void 0 : _e.length) {
2895
+ responseMessage.msg.options = outputSpeech.suggestions.map(function (suggestion) {
2896
+ if (typeof suggestion === "string") {
2897
+ // Simple chips (strings)
2898
+ return suggestion;
2295
2899
  }
2296
- }
2900
+ else {
2901
+ // "call out" chips
2902
+ return {
2903
+ label: suggestion.title,
2904
+ actionUrl: suggestion.url
2905
+ };
2906
+ }
2907
+ });
2297
2908
  }
2298
2909
  }
2299
2910
  return responseMessage;
@@ -2305,7 +2916,7 @@ function getPermissionRequestType(type) {
2305
2916
  case "PERMISSION_LOCATION_PRECISE":
2306
2917
  return "LOCATION_PRECISE";
2307
2918
  default:
2308
- throw new Error("Unsupported permission: " + type);
2919
+ throw new Error("Unsupported permission: ".concat(type));
2309
2920
  }
2310
2921
  }
2311
2922
  function getPermissionResponse(botResponse, now) {
@@ -2318,7 +2929,7 @@ function getPermissionResponse(botResponse, now) {
2318
2929
  type: "permissionRequest",
2319
2930
  timestamp: now,
2320
2931
  msg: {
2321
- text: (_a = outputSpeech === null || outputSpeech === void 0 ? void 0 : outputSpeech.displayText) !== null && _a !== void 0 ? _a : "" + botResponse.data.permissionRequestTTSContext,
2932
+ text: (_a = outputSpeech === null || outputSpeech === void 0 ? void 0 : outputSpeech.displayText) !== null && _a !== void 0 ? _a : "".concat(botResponse.data.permissionRequestTTSContext),
2322
2933
  permissionRequest: {
2323
2934
  time: now,
2324
2935
  type: type,
@@ -2335,26 +2946,6 @@ function getPermissionResponse(botResponse, now) {
2335
2946
  };
2336
2947
  }
2337
2948
 
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
2949
  var PERMISSION_QUESTION_EXPIRATION_MS = 300000; // 5 minutes
2359
2950
  var StentorDirectChat = /** @class */ (function () {
2360
2951
  function StentorDirectChat(config) {
@@ -2366,15 +2957,15 @@ var StentorDirectChat = /** @class */ (function () {
2366
2957
  */
2367
2958
  this.widget = {
2368
2959
  setConnectionStatus: function (status) {
2369
- log("SERVER: connection_update: " + JSON.stringify(status));
2960
+ log("SERVER: connection_update: ".concat(JSON.stringify(status)));
2370
2961
  _this.dispatch(setConnectionStatus(status));
2371
2962
  },
2372
2963
  setAccountStatus: function (status) {
2373
- log("SERVER: account_status: " + JSON.stringify(status));
2964
+ log("SERVER: account_status: ".concat(JSON.stringify(status)));
2374
2965
  _this.dispatch(setAccountStatus(status));
2375
2966
  },
2376
2967
  sendNewMessage: function (data) {
2377
- log("SERVER: new message: " + JSON.stringify(data));
2968
+ log("SERVER: new message: ".concat(JSON.stringify(data)));
2378
2969
  _this.dispatch({
2379
2970
  type: "chat",
2380
2971
  detail: {
@@ -2386,7 +2977,7 @@ var StentorDirectChat = /** @class */ (function () {
2386
2977
  });
2387
2978
  },
2388
2979
  userJoined: function (data) {
2389
- log("SERVER: user joined: " + JSON.stringify(data));
2980
+ log("SERVER: user joined: ".concat(JSON.stringify(data)));
2390
2981
  _this.visitorInfo.token = data.token;
2391
2982
  _this.dispatch({
2392
2983
  type: "chat",
@@ -2398,7 +2989,7 @@ var StentorDirectChat = /** @class */ (function () {
2398
2989
  });
2399
2990
  },
2400
2991
  userLeft: function (data) {
2401
- log("SERVER: user left: " + JSON.stringify(data));
2992
+ log("SERVER: user left: ".concat(JSON.stringify(data)));
2402
2993
  _this.dispatch({
2403
2994
  type: "chat",
2404
2995
  detail: {
@@ -2457,7 +3048,7 @@ var StentorDirectChat = /** @class */ (function () {
2457
3048
  StentorDirectChat.prototype.init = function (dispatch) {
2458
3049
  this.dispatch = dispatch;
2459
3050
  // TODO: Authenticate - or at least tell the server who you are
2460
- log("got init auth: " + this.config.key);
3051
+ log("got init auth: ".concat(this.config.key));
2461
3052
  // We are connected
2462
3053
  this.widget.setConnectionStatus("online");
2463
3054
  this.widget.setAccountStatus("online");
@@ -2469,8 +3060,8 @@ var StentorDirectChat = /** @class */ (function () {
2469
3060
  cb();
2470
3061
  };
2471
3062
  StentorDirectChat.prototype.sendChatMsg = function (message, cb) {
2472
- return __awaiter(this, void 0, void 0, function () {
2473
- return __generator(this, function (_a) {
3063
+ return __awaiter$1(this, void 0, void 0, function () {
3064
+ return __generator$1(this, function (_a) {
2474
3065
  return [2 /*return*/, this.sendChatMsgRequest({
2475
3066
  msg: message,
2476
3067
  timestamp: new Date().getTime(),
@@ -2483,9 +3074,9 @@ var StentorDirectChat = /** @class */ (function () {
2483
3074
  };
2484
3075
  StentorDirectChat.prototype.sendChatMsgRequest = function (serviceRequest, cb) {
2485
3076
  var _a;
2486
- return __awaiter(this, void 0, void 0, function () {
3077
+ return __awaiter$1(this, void 0, void 0, function () {
2487
3078
  var agentResponse;
2488
- return __generator(this, function (_b) {
3079
+ return __generator$1(this, function (_b) {
2489
3080
  switch (_b.label) {
2490
3081
  case 0: return [4 /*yield*/, this.postMessage(serviceRequest)];
2491
3082
  case 1:
@@ -2528,9 +3119,9 @@ var StentorDirectChat = /** @class */ (function () {
2528
3119
  };
2529
3120
  StentorDirectChat.prototype.postMessage = function (message) {
2530
3121
  var _a, _b, _c, _d;
2531
- return __awaiter(this, void 0, void 0, function () {
3122
+ return __awaiter$1(this, void 0, void 0, function () {
2532
3123
  var request, now, permissionRequest, expired, text, granted, userProfile, isEmail, botResponse, responseMessage;
2533
- return __generator(this, function (_e) {
3124
+ return __generator$1(this, function (_e) {
2534
3125
  switch (_e.label) {
2535
3126
  case 0:
2536
3127
  now = new Date().getTime();
@@ -2617,20 +3208,20 @@ var StentorDirectChat = /** @class */ (function () {
2617
3208
  };
2618
3209
  }
2619
3210
  }
2620
- log("Visitor says: " + JSON.stringify(request, undefined, 2));
3211
+ log("Visitor says: ".concat(JSON.stringify(request, undefined, 2)));
2621
3212
  // Bot is "typing"
2622
3213
  this.widget.typing();
2623
3214
  return [4 /*yield*/, postMessageToStentor(request, this.config.url, this.config.key).catch(function (postError) {
2624
- err("POST failed: " + postError.message);
3215
+ err("POST failed: ".concat(postError.message));
2625
3216
  return {
2626
- text: "Bot doesn't respond. Reason: " + postError.message
3217
+ text: "Bot doesn't respond. Reason: ".concat(postError.message)
2627
3218
  };
2628
3219
  })];
2629
3220
  case 1:
2630
3221
  botResponse = _e.sent();
2631
3222
  // Bot stopped "typing"
2632
3223
  this.widget.stopTyping();
2633
- log("Bot says: " + JSON.stringify(botResponse, undefined, 2));
3224
+ log("Bot says: ".concat(JSON.stringify(botResponse, undefined, 2)));
2634
3225
  // Now translate the response to server dialect
2635
3226
  // new session no more
2636
3227
  this.isNewSession = false;
@@ -2654,15 +3245,15 @@ var StentorDirectChat = /** @class */ (function () {
2654
3245
  };
2655
3246
  StentorDirectChat.prototype.startSession = function () {
2656
3247
  if (this.visitorInfo.visitorId) {
2657
- this._userId = "stentor-widget-user-" + this.visitorInfo.visitorId;
3248
+ this._userId = "stentor-widget-user-".concat(this.visitorInfo.visitorId);
2658
3249
  }
2659
3250
  else if (this.visitorInfo.email) {
2660
- this._userId = "stentor-widget-user-" + this.visitorInfo.email;
3251
+ this._userId = "stentor-widget-user-".concat(this.visitorInfo.email);
2661
3252
  }
2662
3253
  else {
2663
- this._userId = "stentor-widget-user-" + uuid();
3254
+ this._userId = "stentor-widget-user-".concat(uuid_1());
2664
3255
  }
2665
- this._sessionId = "stentor-widget-session-" + uuid();
3256
+ this._sessionId = "stentor-widget-session-".concat(uuid_1());
2666
3257
  this.isNewSession = true;
2667
3258
  };
2668
3259
  Object.defineProperty(StentorDirectChat.prototype, "userId", {
@@ -5184,8 +5775,10 @@ class Socket extends Emitter_1 {
5184
5775
  packet.options.compress = this.flags.compress !== false;
5185
5776
  // event ack callback
5186
5777
  if ("function" === typeof args[args.length - 1]) {
5187
- this.acks[this.ids] = args.pop();
5188
- packet.id = this.ids++;
5778
+ const id = this.ids++;
5779
+ const ack = args.pop();
5780
+ this._registerAckCallback(id, ack);
5781
+ packet.id = id;
5189
5782
  }
5190
5783
  const isTransportWritable = this.io.engine &&
5191
5784
  this.io.engine.transport &&
@@ -5201,6 +5794,31 @@ class Socket extends Emitter_1 {
5201
5794
  this.flags = {};
5202
5795
  return this;
5203
5796
  }
5797
+ /**
5798
+ * @private
5799
+ */
5800
+ _registerAckCallback(id, ack) {
5801
+ const timeout = this.flags.timeout;
5802
+ if (timeout === undefined) {
5803
+ this.acks[id] = ack;
5804
+ return;
5805
+ }
5806
+ // @ts-ignore
5807
+ const timer = this.io.setTimeoutFn(() => {
5808
+ delete this.acks[id];
5809
+ for (let i = 0; i < this.sendBuffer.length; i++) {
5810
+ if (this.sendBuffer[i].id === id) {
5811
+ this.sendBuffer.splice(i, 1);
5812
+ }
5813
+ }
5814
+ ack.call(this, new Error("operation has timed out"));
5815
+ }, timeout);
5816
+ this.acks[id] = (...args) => {
5817
+ // @ts-ignore
5818
+ this.io.clearTimeoutFn(timer);
5819
+ ack.apply(this, [null, ...args]);
5820
+ };
5821
+ }
5204
5822
  /**
5205
5823
  * Sends a packet.
5206
5824
  *
@@ -5285,6 +5903,7 @@ class Socket extends Emitter_1 {
5285
5903
  this.ondisconnect();
5286
5904
  break;
5287
5905
  case PacketType.CONNECT_ERROR:
5906
+ this.destroy();
5288
5907
  const err = new Error(packet.data.message);
5289
5908
  // @ts-ignore
5290
5909
  err.data = packet.data.data;
@@ -5448,6 +6067,25 @@ class Socket extends Emitter_1 {
5448
6067
  this.flags.volatile = true;
5449
6068
  return this;
5450
6069
  }
6070
+ /**
6071
+ * Sets a modifier for a subsequent event emission that the callback will be called with an error when the
6072
+ * given number of milliseconds have elapsed without an acknowledgement from the server:
6073
+ *
6074
+ * ```
6075
+ * socket.timeout(5000).emit("my-event", (err) => {
6076
+ * if (err) {
6077
+ * // the server did not acknowledge the event in the given delay
6078
+ * }
6079
+ * });
6080
+ * ```
6081
+ *
6082
+ * @returns self
6083
+ * @public
6084
+ */
6085
+ timeout(timeout) {
6086
+ this.flags.timeout = timeout;
6087
+ return this;
6088
+ }
5451
6089
  /**
5452
6090
  * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the
5453
6091
  * callback.
@@ -5854,13 +6492,7 @@ class Manager extends Emitter_1 {
5854
6492
  _close() {
5855
6493
  this.skipReconnect = true;
5856
6494
  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";
6495
+ this.onclose("forced close");
5864
6496
  if (this.engine)
5865
6497
  this.engine.close();
5866
6498
  }
@@ -6003,12 +6635,12 @@ var StentorServerChat = /** @class */ (function () {
6003
6635
  // TODO: Authenticate - or at least tell the server who you are
6004
6636
  // Socket events
6005
6637
  this.socket.on("account_status", function (data) {
6006
- log("SERVER: account_status: " + JSON.stringify(data));
6638
+ log("SERVER: account_status: ".concat(JSON.stringify(data)));
6007
6639
  // Register the "communication" with the server
6008
6640
  if (!_this.token) {
6009
- _this.token = uuid();
6641
+ _this.token = uuid_1();
6010
6642
  dispatch(receiveToken(_this.token));
6011
- log("CLIENT: created token: " + _this.token);
6643
+ log("CLIENT: created token: ".concat(_this.token));
6012
6644
  }
6013
6645
  _this.socket.emit("connection update", _this.token);
6014
6646
  dispatch({
@@ -6020,7 +6652,7 @@ var StentorServerChat = /** @class */ (function () {
6020
6652
  });
6021
6653
  });
6022
6654
  this.socket.on("new message", function (data) {
6023
- log("SERVER: new message: " + JSON.stringify(data));
6655
+ log("SERVER: new message: ".concat(JSON.stringify(data)));
6024
6656
  _this.dispatch({
6025
6657
  type: "chat",
6026
6658
  detail: {
@@ -6035,7 +6667,7 @@ var StentorServerChat = /** @class */ (function () {
6035
6667
  });
6036
6668
  });
6037
6669
  this.socket.on("user joined", function (data) {
6038
- log("SERVER: user joined: " + JSON.stringify(data));
6670
+ log("SERVER: user joined: ".concat(JSON.stringify(data)));
6039
6671
  _this.visitorInfo.token = data.token;
6040
6672
  _this.dispatch({
6041
6673
  type: "chat",
@@ -6051,7 +6683,7 @@ var StentorServerChat = /** @class */ (function () {
6051
6683
  });
6052
6684
  });
6053
6685
  this.socket.on("user left", function (data) {
6054
- log("SERVER: user left: " + JSON.stringify(data));
6686
+ log("SERVER: user left: ".concat(JSON.stringify(data)));
6055
6687
  _this.dispatch({
6056
6688
  type: "chat",
6057
6689
  detail: {
@@ -6065,7 +6697,7 @@ var StentorServerChat = /** @class */ (function () {
6065
6697
  });
6066
6698
  });
6067
6699
  this.socket.on("typing", function (data) {
6068
- log("SERVER: typing: " + JSON.stringify(data));
6700
+ log("SERVER: typing: ".concat(JSON.stringify(data)));
6069
6701
  _this.dispatch({
6070
6702
  type: "chat",
6071
6703
  detail: {
@@ -6079,7 +6711,7 @@ var StentorServerChat = /** @class */ (function () {
6079
6711
  });
6080
6712
  });
6081
6713
  this.socket.on("stop typing", function (data) {
6082
- log("SERVER: stop typing: " + JSON.stringify(data));
6714
+ log("SERVER: stop typing: ".concat(JSON.stringify(data)));
6083
6715
  _this.dispatch({
6084
6716
  type: "chat",
6085
6717
  detail: {
@@ -6163,18 +6795,18 @@ function createChatServerCore(config, token) {
6163
6795
  case "local":
6164
6796
  return new StentorLocalChat();
6165
6797
  default:
6166
- throw throwBadKind(config.type);
6798
+ throw throwBadKind$1(config.type);
6167
6799
  }
6168
6800
  }
6169
6801
  function createChatServer(config, token) {
6170
6802
  return new LogChat(createChatServerCore(config, token));
6171
6803
  }
6172
- var ChatServerContext = React.createContext(null);
6804
+ var ChatServerContext = React$1.createContext(null);
6173
6805
  function useChatServer(config) {
6174
- var _a = React.useState(), server = _a[0], setServer = _a[1];
6806
+ var _a = React$1.useState(), server = _a[0], setServer = _a[1];
6175
6807
  var token = reactRedux.useSelector(function (state) { return state.connection.token; });
6176
6808
  var dispatch = useChatDispatch();
6177
- React.useEffect(function () {
6809
+ React$1.useEffect(function () {
6178
6810
  var newServer = createChatServer(config, token);
6179
6811
  newServer.init(dispatch);
6180
6812
  setServer(newServer);
@@ -6187,8 +6819,8 @@ function useChatServer(config) {
6187
6819
 
6188
6820
  function useChatServerDispatch() {
6189
6821
  var inner = useChatDispatch();
6190
- var chatServer = React.useContext(ChatServerContext);
6191
- return React.useCallback(function (action) {
6822
+ var chatServer = React$1.useContext(ChatServerContext);
6823
+ return React$1.useCallback(function (action) {
6192
6824
  if (!action) {
6193
6825
  console.warn("react bug? Someone invokes with null");
6194
6826
  return;
@@ -6212,8 +6844,8 @@ var ChatChipsContainer = function (_) {
6212
6844
  dispatch(executeAction(getChatServerActionLinkLabel(option)));
6213
6845
  }
6214
6846
  }
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 })));
6847
+ 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" : "") },
6848
+ React__default$1["default"].createElement(ChatChips, { options: chips, onOptionClick: optionOnChange })));
6217
6849
  };
6218
6850
 
6219
6851
  var ChatMenuItem = function (props) {
@@ -6222,31 +6854,31 @@ var ChatMenuItem = function (props) {
6222
6854
  props.onClick(props.label);
6223
6855
  }
6224
6856
  }
6225
- return (React__default["default"].createElement("button", { type: "button", className: "chat-menu-item", onClick: handleClick }, props.label));
6857
+ return (React__default$1["default"].createElement("button", { type: "button", className: "chat-menu-item", onClick: handleClick }, props.label));
6226
6858
  };
6227
6859
 
6228
6860
  var ChatMenu = function (props) {
6229
6861
  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 });
6862
+ return (React__default$1["default"].createElement("div", { className: "chat-menu ".concat(props.opened ? "chat-menu--opened" : "chat-menu--closed") }, items.map(function (label, i) {
6863
+ return React__default$1["default"].createElement(ChatMenuItem, { key: i, onClick: props.onItemClick, label: label });
6232
6864
  })));
6233
6865
  };
6234
6866
 
6235
- var UnknownMessage = function () { return React__default["default"].createElement(React__default["default"].Fragment, null); };
6867
+ var UnknownMessage = function () { return React__default$1["default"].createElement(React__default$1["default"].Fragment, null); };
6236
6868
 
6237
6869
  function renderAvatar(entity) {
6238
- return (React__default["default"].createElement("div", { className: "xappw-chat-msg-part__avatar" },
6239
- React__default["default"].createElement(Avatar, { entity: entity })));
6870
+ return (React__default$1["default"].createElement("div", { className: "xappw-chat-msg-part__avatar" },
6871
+ React__default$1["default"].createElement(Avatar, { entity: entity })));
6240
6872
  }
6241
6873
  var ChatMessagePart = function (props) {
6242
- return (React__default["default"].createElement("div", { className: "xappw-chat-msg-part" },
6874
+ return (React__default$1["default"].createElement("div", { className: "xappw-chat-msg-part" },
6243
6875
  props.showAvatar && renderAvatar(props.user),
6244
6876
  props.children));
6245
6877
  };
6246
6878
 
6247
6879
  function useExecuteActionCallback() {
6248
6880
  var dispatch = useChatServerDispatch();
6249
- return React.useCallback(function (text, token) {
6881
+ return React$1.useCallback(function (text, token) {
6250
6882
  dispatch(executeAction(text, token));
6251
6883
  }, [dispatch]);
6252
6884
  }
@@ -6254,7 +6886,7 @@ function useExecuteActionCallback() {
6254
6886
  function useButtonCallback() {
6255
6887
  var handleOpenUrl = useOpenUrlCallback();
6256
6888
  var executeAction = useExecuteActionCallback();
6257
- return React.useCallback(function (button) {
6889
+ return React$1.useCallback(function (button) {
6258
6890
  if (button.actionUrl) {
6259
6891
  handleOpenUrl(button.actionUrl);
6260
6892
  }
@@ -6287,17 +6919,17 @@ function isList(display) {
6287
6919
 
6288
6920
  var CardMiddlewareWidget = function (props) {
6289
6921
  var msg = props.msg, ctx = props.ctx;
6290
- var card = React.useMemo(function () { return convertFromCardDisplay(msg); }, [msg]);
6922
+ var card = React$1.useMemo(function () { return convertFromCardDisplay(msg); }, [msg]);
6291
6923
  var user = ctx.user;
6292
6924
  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 }))));
6925
+ return (React__default$1["default"].createElement(ChatMessagePart, { showAvatar: true, user: user },
6926
+ React__default$1["default"].createElement("div", { className: "chat-msg" },
6927
+ React__default$1["default"].createElement(ChatCard, { card: card, onButtonClick: handleButton }))));
6296
6928
  };
6297
6929
  var CardMiddleware = function (next) { return function (props) {
6298
6930
  var msg = props.msg, ctx = props.ctx;
6299
6931
  if (isCard(msg)) {
6300
- return React__default["default"].createElement(CardMiddlewareWidget, { msg: msg, ctx: ctx });
6932
+ return React__default$1["default"].createElement(CardMiddlewareWidget, { msg: msg, ctx: ctx });
6301
6933
  }
6302
6934
  return next(props);
6303
6935
  }; };
@@ -6318,11 +6950,11 @@ function createSubscribableArray(originalValue) {
6318
6950
  return {
6319
6951
  getArray: function () { return cache; },
6320
6952
  push: function (val) {
6321
- cache = __spreadArray(__spreadArray([], cache, true), [val], false);
6953
+ cache = __spreadArray$1(__spreadArray$1([], cache, true), [val], false);
6322
6954
  notify();
6323
6955
  },
6324
6956
  unshift: function (val) {
6325
- cache = __spreadArray([val], cache, true);
6957
+ cache = __spreadArray$1([val], cache, true);
6326
6958
  notify();
6327
6959
  },
6328
6960
  subscribe: function (callback) {
@@ -6339,9 +6971,9 @@ function createSubscribableArray(originalValue) {
6339
6971
  };
6340
6972
  }
6341
6973
  function useSubscribableArray(array) {
6342
- var _a = React.useState(array.getArray()), res = _a[0], setRes = _a[1];
6974
+ var _a = React$1.useState(array.getArray()), res = _a[0], setRes = _a[1];
6343
6975
  var mounted = useIsMounted();
6344
- React.useEffect(function () {
6976
+ React$1.useEffect(function () {
6345
6977
  var subscription = array.subscribe(function (newVal) {
6346
6978
  if (mounted()) {
6347
6979
  setRes(newVal);
@@ -6373,24 +7005,24 @@ function useGlobalSubscribableArray(storage) {
6373
7005
  }
6374
7006
  function useLateMiddlewaresBuilder(storage) {
6375
7007
  var middlewares = useGlobalSubscribableArray(storage);
6376
- return React.useMemo(function () { return joinMiddlewares(middlewares); }, [middlewares]);
7008
+ return React$1.useMemo(function () { return joinMiddlewares(middlewares); }, [middlewares]);
6377
7009
  }
6378
- var storage = createStorage(window, "xappMsgMiddlewares");
7010
+ var storage = createStorage(globalThis, "xappMsgMiddlewares");
6379
7011
  function useLateMiddleware() {
6380
7012
  return useLateMiddlewaresBuilder(storage);
6381
7013
  }
6382
7014
 
6383
7015
  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" })));
7016
+ return (React__default$1["default"].createElement("svg", { viewBox: "0 0 20 20" },
7017
+ 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" }),
7018
+ 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
7019
  }
6388
7020
  var ExternalLink = function (props) {
6389
7021
  var url = props.url;
6390
- var handleClick = React.useCallback(function (ev) {
7022
+ var handleClick = React$1.useCallback(function (ev) {
6391
7023
  ev.preventDefault();
6392
7024
  }, []);
6393
- return (React__default["default"].createElement("a", { href: url, target: "_blank", rel: "noreferrer", className: props.className, onClick: handleClick }, getSvg()));
7025
+ return (React__default$1["default"].createElement("a", { href: url, target: "_blank", rel: "noreferrer", className: props.className, onClick: handleClick }, getSvg()));
6394
7026
  };
6395
7027
 
6396
7028
  function firstIndex(val, patterns) {
@@ -6442,7 +7074,7 @@ var parsers = [
6442
7074
  pathParser,
6443
7075
  queryParser
6444
7076
  ];
6445
- function parse$1(val) {
7077
+ function parse(val) {
6446
7078
  var parts = [];
6447
7079
  var rest = val;
6448
7080
  for (var _i = 0, parsers_1 = parsers; _i < parsers_1.length; _i++) {
@@ -6461,7 +7093,7 @@ var ellipsis = "/...";
6461
7093
  function reduceLink(url, maxLength) {
6462
7094
  if (url.length < maxLength)
6463
7095
  return url;
6464
- var parts = parse$1(url); // [scheme, domain, port, path, query, hash]
7096
+ var parts = parse(url); // [scheme, domain, port, path, query, hash]
6465
7097
  function getText() {
6466
7098
  return parts.join("");
6467
7099
  }
@@ -6500,10 +7132,10 @@ function reduceLink(url, maxLength) {
6500
7132
 
6501
7133
  var SmartLink = function (props) {
6502
7134
  var url = props.url, className = props.className;
6503
- var handleClick = React.useCallback(function (ev) {
7135
+ var handleClick = React$1.useCallback(function (ev) {
6504
7136
  ev.preventDefault();
6505
7137
  }, []);
6506
- return (React__default["default"].createElement("a", { href: url, target: "_blank", rel: "noreferrer", className: className, onClick: handleClick }, reduceLink(url, 40)));
7138
+ return (React__default$1["default"].createElement("a", { href: url, target: "_blank", rel: "noreferrer", className: className, onClick: handleClick }, reduceLink(url, 40)));
6507
7139
  };
6508
7140
 
6509
7141
  var ListItem = function (props) {
@@ -6511,66 +7143,66 @@ var ListItem = function (props) {
6511
7143
  var item = props.item;
6512
7144
  var layout = props.layout || "normal";
6513
7145
  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 })))));
7146
+ return (React__default$1["default"].createElement(ActionItem, { className: "xappw-vlist-item-container", item: item, onButtonClick: props.onButtonClick, onExecute: props.onExecute, onOpenUrl: props.onOpenUrl },
7147
+ React__default$1["default"].createElement("div", { className: "xappw-vlist-item xappw-vlist-item--".concat(layout) },
7148
+ React__default$1["default"].createElement("div", { className: "xappw-vlist-item__description" },
7149
+ item.title && React__default$1["default"].createElement("div", { className: "xappw-vlist-item__title" },
7150
+ React__default$1["default"].createElement("span", null, item.title)),
7151
+ url && React__default$1["default"].createElement(SmartLink, { url: url, className: "xappw-vlist-item__link" }),
7152
+ item.subTitle && React__default$1["default"].createElement("div", { className: "xappw-vlist-item__subtitle" },
7153
+ React__default$1["default"].createElement("span", null, item.subTitle)),
7154
+ !!((_a = item.buttons) === null || _a === void 0 ? void 0 : _a.length) && React__default$1["default"].createElement(ChatActionButtons, { buttons: item.buttons, onClick: props.onButtonClick })),
7155
+ React__default$1["default"].createElement("div", { className: "xappw-vlist-item__side" },
7156
+ url && React__default$1["default"].createElement(ExternalLink, { url: "url", className: "xappw-vlist-item__external-link" }),
7157
+ React__default$1["default"].createElement(ActionItemImage, { item: item, className: "xappw-vlist-item__img", emptyImageVisible: props.emptyImageVisible })))));
6526
7158
  };
6527
7159
 
6528
7160
  var List = function (props) {
6529
7161
  var list = props.list;
6530
- var listRef = React.useRef(null);
7162
+ var listRef = React$1.useRef(null);
6531
7163
  var hasImage = list.items.some(function (item) { return item.imageUrl; });
6532
7164
  var titlesOnly = !list.items.some(function (item) { var _a; return item.subTitle || ((_a = item.buttons) === null || _a === void 0 ? void 0 : _a.length); });
6533
7165
  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 })));
7166
+ return (React__default$1["default"].createElement("div", { className: "xappw-vlist-container__item", key: "item-key-".concat(itemIndex) },
7167
+ React__default$1["default"].createElement(ListItem, { item: item, layout: titlesOnly ? "titles" : "normal", emptyImageVisible: hasImage, onExecute: props.onExecute, onButtonClick: props.onButtonClick, onOpenUrl: props.onOpenUrl })));
6536
7168
  });
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),
7169
+ return (React__default$1["default"].createElement("div", { className: "xappw-vlist" },
7170
+ React__default$1["default"].createElement("div", { ref: listRef, className: "xappw-vlist-container" },
7171
+ props.list.title && React__default$1["default"].createElement("div", { className: "xappw-vlist__header" }, props.list.title),
6540
7172
  listItems)));
6541
7173
  };
6542
7174
 
6543
7175
  var ListMiddlewareWidget = function (props) {
6544
7176
  var msg = props.msg, ctx = props.ctx;
6545
- var list = React.useMemo(function () { return convertFromListDisplay(msg); }, [msg]);
7177
+ var list = React$1.useMemo(function () { return convertFromListDisplay(msg); }, [msg]);
6546
7178
  var handleExecute = useExecuteActionCallback();
6547
7179
  var handleButton = useButtonCallback();
6548
7180
  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 }))));
7181
+ return (React__default$1["default"].createElement(ChatMessagePart, { showAvatar: true, user: user },
7182
+ list.type === "CAROUSEL" && React__default$1["default"].createElement("div", { className: "chat-msg chat-msg--fullwidth chat-msg--no-ava" },
7183
+ React__default$1["default"].createElement(Carousel, { list: list, onExecute: handleExecute, onButtonClick: handleButton, onOpenUrl: ctx.openUrl })),
7184
+ list.type === "LIST" && React__default$1["default"].createElement("div", { className: "chat-msg chat-msg--expand" },
7185
+ React__default$1["default"].createElement(List, { list: list, onExecute: handleExecute, onButtonClick: handleButton, onOpenUrl: ctx.openUrl }))));
6554
7186
  };
6555
7187
  var ListMiddleware = function (next) { return function (props) {
6556
7188
  var msg = props.msg, ctx = props.ctx;
6557
7189
  if (isList(msg)) {
6558
- return React__default["default"].createElement(ListMiddlewareWidget, { msg: msg, ctx: ctx });
7190
+ return React__default$1["default"].createElement(ListMiddlewareWidget, { msg: msg, ctx: ctx });
6559
7191
  }
6560
7192
  return next(props);
6561
7193
  }; };
6562
7194
 
6563
7195
  var MultiSelect = function (props) {
6564
7196
  var items = props.items, checked = props.checked, onChange = props.onChange;
6565
- var handleToggle = React.useCallback(function (ev) {
7197
+ var handleToggle = React$1.useCallback(function (ev) {
6566
7198
  var _a;
6567
7199
  var id = ev.target.value;
6568
7200
  onChange(__assign(__assign({}, checked), (_a = {}, _a[id] = !checked[id], _a)));
6569
7201
  }, [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)))); })));
7202
+ return (React__default$1["default"].createElement("ul", { className: "xappw-multiselect" }, items.map(function (item) { return (React__default$1["default"].createElement("li", { key: item.id },
7203
+ React__default$1["default"].createElement("label", null,
7204
+ React__default$1["default"].createElement("input", { type: "checkbox", checked: checked[item.id] || false, onChange: handleToggle, value: item.id }),
7205
+ React__default$1["default"].createElement("span", null, item.title)))); })));
6574
7206
  };
6575
7207
 
6576
7208
  function isMultiSelect(display) {
@@ -6581,10 +7213,10 @@ function convertToMultiSelectItems(display) {
6581
7213
  }
6582
7214
  var MultiSelectMiddlewareWidget = function (props) {
6583
7215
  var msg = props.msg, ctx = props.ctx;
6584
- var items = React.useMemo(function () { return convertToMultiSelectItems(msg); }, [msg]);
7216
+ var items = React$1.useMemo(function () { return convertToMultiSelectItems(msg); }, [msg]);
6585
7217
  var user = ctx.user;
6586
- var _a = React.useState({}), checked = _a[0], setChecked = _a[1];
6587
- var handleSubmit = React.useCallback(function () {
7218
+ var _a = React$1.useState({}), checked = _a[0], setChecked = _a[1];
7219
+ var handleSubmit = React$1.useCallback(function () {
6588
7220
  ctx.send({
6589
7221
  type: "custom",
6590
7222
  payload: JSON.stringify({
@@ -6594,16 +7226,16 @@ var MultiSelectMiddlewareWidget = function (props) {
6594
7226
  })
6595
7227
  });
6596
7228
  }, [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 })))));
7229
+ return (React__default$1["default"].createElement(ChatMessagePart, { showAvatar: true, user: user },
7230
+ React__default$1["default"].createElement("div", { className: "chat-msg" },
7231
+ React__default$1["default"].createElement("div", null,
7232
+ React__default$1["default"].createElement(MultiSelect, { items: items, checked: checked, onChange: setChecked }),
7233
+ React__default$1["default"].createElement(ActionButton, { label: "Submit", onClick: handleSubmit })))));
6602
7234
  };
6603
7235
  var MultiSelectMiddleware = function (next) { return function (props) {
6604
7236
  var msg = props.msg, ctx = props.ctx;
6605
7237
  if (isMultiSelect(msg)) {
6606
- return React__default["default"].createElement(MultiSelectMiddlewareWidget, { msg: msg, ctx: ctx });
7238
+ return React__default$1["default"].createElement(MultiSelectMiddlewareWidget, { msg: msg, ctx: ctx });
6607
7239
  }
6608
7240
  return next(props);
6609
7241
  }; };
@@ -6615,14 +7247,14 @@ var StandardMiddlewaresBuilder = joinMiddlewares([
6615
7247
  ]);
6616
7248
  function useStandardMiddlewareBuilder() {
6617
7249
  var lateMiddleware = useLateMiddleware();
6618
- return React.useMemo(function () { return joinMiddlewares([
7250
+ return React$1.useMemo(function () { return joinMiddlewares([
6619
7251
  lateMiddleware,
6620
7252
  StandardMiddlewaresBuilder,
6621
7253
  ]); }, [lateMiddleware]);
6622
7254
  }
6623
7255
  function useStandardMiddleware() {
6624
7256
  var builder = useStandardMiddlewareBuilder();
6625
- return React.useMemo(function () { return builder(UnknownMessage); }, [builder]);
7257
+ return React$1.useMemo(function () { return builder(UnknownMessage); }, [builder]);
6626
7258
  }
6627
7259
  var StandardMiddlewares = StandardMiddlewaresBuilder(UnknownMessage);
6628
7260
 
@@ -6633,17 +7265,17 @@ function getTailSvgPath(owner) {
6633
7265
  return "m 0 0 v 240 h 60 c -40 -40 -60 -160 -60 -240";
6634
7266
  }
6635
7267
  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" })));
7268
+ return (React__default$1["default"].createElement("svg", { className: "chat-text-bubble__tail", xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 80 240" },
7269
+ React__default$1["default"].createElement("path", { d: getTailSvgPath(owner), fill: "currentColor" })));
6638
7270
  }
6639
7271
  var ChatMessageBubble = function (props) {
6640
7272
  var owner = props.owner, onClick = props.onClick;
6641
- var handleClick = React.useCallback(function () {
7273
+ var handleClick = React$1.useCallback(function () {
6642
7274
  if (onClick) {
6643
7275
  onClick();
6644
7276
  }
6645
7277
  }, [onClick]);
6646
- return (React__default["default"].createElement("div", { onClick: handleClick, className: "chat-text-bubble " + (owner === "mine" ? "chat-text-bubble--mine" : "chat-text-bubble--others") },
7278
+ 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
7279
  (props.hasTail) && getTailSvg(owner),
6648
7280
  props.children));
6649
7281
  };
@@ -6651,16 +7283,16 @@ var ChatMessageBubble = function (props) {
6651
7283
  var ChatMarkdownMessage = function (props) {
6652
7284
  var onOpenUrl = props.onOpenUrl;
6653
7285
  var agentMessage = isAgent(props.message.user.nick);
6654
- var ref = React.useRef();
7286
+ var ref = React$1.useRef();
6655
7287
  var html = props.message.msg.html;
6656
- var handleLinkClick = React.useCallback(function (ev) {
7288
+ var handleLinkClick = React$1.useCallback(function (ev) {
6657
7289
  if (onOpenUrl) {
6658
7290
  var link = ev.target;
6659
7291
  ev.preventDefault();
6660
7292
  onOpenUrl(link.href);
6661
7293
  }
6662
7294
  }, [onOpenUrl]);
6663
- React.useEffect(function () {
7295
+ React$1.useEffect(function () {
6664
7296
  if (ref.current) {
6665
7297
  ref.current.innerHTML = html;
6666
7298
  if (onOpenUrl) {
@@ -6677,10 +7309,10 @@ var ChatMarkdownMessage = function (props) {
6677
7309
  }
6678
7310
  return undefined;
6679
7311
  }, [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 })))));
7312
+ return (React__default$1["default"].createElement("div", { className: "chat-msg" },
7313
+ React__default$1["default"].createElement("div", { className: "chat-text-container" },
7314
+ React__default$1["default"].createElement(ChatMessageBubble, { owner: agentMessage ? "others" : "mine", hasTail: agentMessage && !props.sibling },
7315
+ React__default$1["default"].createElement("div", { ref: ref })))));
6684
7316
  };
6685
7317
 
6686
7318
  var ChatPermissionMessage = function (props) {
@@ -6690,21 +7322,21 @@ var ChatPermissionMessage = function (props) {
6690
7322
  var author = message.user;
6691
7323
  var allowLabel = "Allow";
6692
7324
  var denyLabel = "Deny";
6693
- var writeAsAgent = React.useCallback(function (msg) {
7325
+ var writeAsAgent = React$1.useCallback(function (msg) {
6694
7326
  ctx.write({
6695
7327
  type: "msg",
6696
7328
  user: author,
6697
7329
  msg: msg
6698
7330
  });
6699
7331
  }, [ctx, author]);
6700
- var writeAsUser = React.useCallback(function (msg) {
7332
+ var writeAsUser = React$1.useCallback(function (msg) {
6701
7333
  ctx.write({
6702
7334
  type: "msg",
6703
7335
  user: user,
6704
7336
  msg: msg
6705
7337
  });
6706
7338
  }, [ctx, user]);
6707
- var handleFail = React.useCallback(function () {
7339
+ var handleFail = React$1.useCallback(function () {
6708
7340
  ctx.send({
6709
7341
  type: "msg",
6710
7342
  user: undefined,
@@ -6713,14 +7345,14 @@ var ChatPermissionMessage = function (props) {
6713
7345
  }
6714
7346
  });
6715
7347
  }, [ctx]);
6716
- var handleSend = React.useCallback(function (msg) {
7348
+ var handleSend = React$1.useCallback(function (msg) {
6717
7349
  ctx.send({
6718
7350
  type: "permissionGrant",
6719
7351
  user: author,
6720
7352
  msg: msg
6721
7353
  });
6722
7354
  }, [author, ctx]);
6723
- var handleResult = React.useCallback(function (position, userMsg) {
7355
+ var handleResult = React$1.useCallback(function (position, userMsg) {
6724
7356
  handleSend({
6725
7357
  text: userMsg,
6726
7358
  location: position ? {
@@ -6737,10 +7369,10 @@ var ChatPermissionMessage = function (props) {
6737
7369
  writeAsAgent(agentMsg);
6738
7370
  }
6739
7371
  }, [permissionRequest, writeAsUser, writeAsAgent, handleSend]);
6740
- var handleDeny = React.useCallback(function (label) {
7372
+ var handleDeny = React$1.useCallback(function (label) {
6741
7373
  handleResult(undefined, label);
6742
7374
  }, [handleResult]);
6743
- var handleAllow = React.useCallback(function (label) {
7375
+ var handleAllow = React$1.useCallback(function (label) {
6744
7376
  if (navigator.geolocation) {
6745
7377
  navigator.geolocation.getCurrentPosition(function (position) {
6746
7378
  handleResult(position, label);
@@ -6750,20 +7382,20 @@ var ChatPermissionMessage = function (props) {
6750
7382
  }
6751
7383
  }, [handleFail, handleResult]);
6752
7384
  if (!permissionRequest) {
6753
- return React__default["default"].createElement(React__default["default"].Fragment, null);
7385
+ return React__default$1["default"].createElement(React__default$1["default"].Fragment, null);
6754
7386
  }
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 }))));
7387
+ return (React__default$1["default"].createElement("div", { className: "chat-msg" },
7388
+ React__default$1["default"].createElement("div", { className: "buttons-container" },
7389
+ React__default$1["default"].createElement(ActionButton, { label: allowLabel, addClass: "button", onClick: handleAllow }),
7390
+ React__default$1["default"].createElement(ActionButton, { label: denyLabel, addClass: "button", onClick: handleDeny }))));
6759
7391
  };
6760
7392
 
6761
7393
  var ChatTextMessage = function (props) {
6762
7394
  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)))));
7395
+ return (React__default$1["default"].createElement("div", { className: "chat-msg" },
7396
+ React__default$1["default"].createElement("div", { className: "chat-text-container" },
7397
+ React__default$1["default"].createElement(ChatMessageBubble, { owner: agentMessage ? "others" : "mine", hasTail: agentMessage && !props.sibling },
7398
+ React__default$1["default"].createElement("span", null, props.message.msg.text)))));
6767
7399
  };
6768
7400
 
6769
7401
  function getClassName(msg) {
@@ -6787,30 +7419,30 @@ var ChatMessage = function (props) {
6787
7419
  // Here is the deal. If we have text (output speech), then text - card - list - options
6788
7420
  // OR card OR list only. Avatar with text bubble.
6789
7421
  var avaKey = avaKeys.find(function (key) { return !!msg[key]; });
6790
- return (React__default["default"].createElement(React__default["default"].Fragment, null,
7422
+ return (React__default$1["default"].createElement(React__default$1["default"].Fragment, null,
6791
7423
  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 })),
7424
+ React__default$1["default"].createElement(ChatMessagePart, { showAvatar: avaKey === "text", user: user },
7425
+ React__default$1["default"].createElement(ChatTextMessage, { message: props.message, sibling: props.sibling })),
6794
7426
  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 })),
7427
+ React__default$1["default"].createElement(ChatMessagePart, { showAvatar: avaKey === "html", user: user },
7428
+ 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
7429
  msg.displays && middleware && msg.displays.map(function (display, index) {
6798
7430
  var Middleware = middleware;
6799
- return React__default["default"].createElement(Middleware, { key: index, msg: display, ctx: props.middlewareContext });
7431
+ return React__default$1["default"].createElement(Middleware, { key: index, msg: display, ctx: props.middlewareContext });
6800
7432
  }),
6801
7433
  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 }))));
7434
+ React__default$1["default"].createElement(ChatMessagePart, { showAvatar: avaKey === "permissionRequest", user: user },
7435
+ React__default$1["default"].createElement(ChatPermissionMessage, { message: props.message, sibling: props.sibling, ctx: props.middlewareContext }))));
6804
7436
  }
6805
- return (React__default["default"].createElement(React__default["default"].Fragment, null));
7437
+ return (React__default$1["default"].createElement(React__default$1["default"].Fragment, null));
6806
7438
  }
6807
7439
  // 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())));
7440
+ return (React__default$1["default"].createElement("div", { className: "chat-msg-container-wrapper ".concat(isAgent(props.message.user.nick) ? "agent" : "visitor", " ").concat(props.sibling ? "sibling" : "") },
7441
+ React__default$1["default"].createElement("div", { className: "chat-msg-container ".concat(getClassName(props.message)) }, renderByType())));
6810
7442
  };
6811
7443
 
6812
7444
  function useExternalScript(url) {
6813
- React.useEffect(function () {
7445
+ React$1.useEffect(function () {
6814
7446
  if (!url) {
6815
7447
  return;
6816
7448
  }
@@ -6834,7 +7466,7 @@ function getSafeCh(ch) {
6834
7466
  if (ch >= "A" && ch <= "Z") {
6835
7467
  return ch;
6836
7468
  }
6837
- return "_" + ch.charCodeAt(0) + "_";
7469
+ return "_".concat(ch.charCodeAt(0), "_");
6838
7470
  }
6839
7471
  function getSrcId(url) {
6840
7472
  var res = "es-";
@@ -6847,7 +7479,7 @@ function getSrcId(url) {
6847
7479
  function useChatServerVisitorId() {
6848
7480
  var dispatch = useChatServerDispatch();
6849
7481
  var clientVisitorId = reactRedux.useSelector(function (state) { return state.visitorId; });
6850
- return React.useMemo(function () { return ({
7482
+ return React$1.useMemo(function () { return ({
6851
7483
  dispatch: dispatch,
6852
7484
  visitorId: clientVisitorId
6853
7485
  }); }, [dispatch, clientVisitorId]);
@@ -6855,8 +7487,8 @@ function useChatServerVisitorId() {
6855
7487
  //send whenever server settings or visitor id changes
6856
7488
  function useGreeting(active) {
6857
7489
  var curr = useChatServerVisitorId();
6858
- var snapshotRef = React.useRef(null);
6859
- React.useEffect(function () {
7490
+ var snapshotRef = React$1.useRef(null);
7491
+ React$1.useEffect(function () {
6860
7492
  if (active) {
6861
7493
  if (snapshotRef.current !== curr) {
6862
7494
  snapshotRef.current = curr;
@@ -6880,215 +7512,45 @@ function useGreeting(active) {
6880
7512
  }
6881
7513
 
6882
7514
  function match(item, pattern) {
6883
- var value = item.suggestion;
7515
+ var value = item.text;
6884
7516
  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
7517
  }
7003
7518
 
7004
7519
  function useSuggestionsFetch(search, context) {
7005
7520
  var env = useWidgetEnv();
7006
7521
  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
7522
+ return useSuggestionsFetch_1({
7523
+ url: baseUrl,
7524
+ query: search,
7525
+ context: context
7018
7526
  });
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
7527
  }
7034
7528
 
7035
7529
  function norm(index, len) {
7036
7530
  return (index + len) % len;
7037
7531
  }
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
7532
  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 () {
7533
+ var _a = React$1.useState(), suggestions = _a[0], setSuggestions = _a[1];
7534
+ var _b = React$1.useState(-1), suggestionIndex = _b[0], setSuggestionIndex = _b[1];
7535
+ var _c = React$1.useState(search), query = _c[0], setQuery = _c[1];
7536
+ var _d = React$1.useState(context), contextState = _d[0], setContextState = _d[1];
7537
+ React$1.useEffect(function () {
7071
7538
  setQuery(search);
7072
7539
  }, [search]);
7073
- React.useEffect(function () {
7540
+ React$1.useEffect(function () {
7074
7541
  setContextState(context);
7075
7542
  }, [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) {
7543
+ var suggestionItem = React$1.useMemo(function () { return suggestions ? findItemByIndex_1(suggestions, suggestionIndex) : undefined; }, [suggestions, suggestionIndex]);
7544
+ var shift = React$1.useCallback(function (delta) {
7083
7545
  if (suggestions) {
7084
- var len_1 = suggestions.items.length;
7546
+ var len_1 = getItemsLength_1(suggestions);
7085
7547
  setSuggestionIndex(function (index) { return norm(index + delta + ((index < 0 && delta <= 0) ? 1 : 0), len_1); });
7086
7548
  }
7087
7549
  else {
7088
7550
  setSuggestionIndex(-1);
7089
7551
  }
7090
7552
  }, [suggestions]);
7091
- var execute = React.useCallback(function (cmd) {
7553
+ var execute = React$1.useCallback(function (cmd) {
7092
7554
  switch (cmd) {
7093
7555
  case "prev":
7094
7556
  shift(-1);
@@ -7103,20 +7565,26 @@ function useSuggestions(search, context) {
7103
7565
  break;
7104
7566
  }
7105
7567
  }, [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 () {
7568
+ var suggestionsResponse = useSuggestionsFetch(query || "", contextState);
7569
+ var suggestionsData = suggestionsResponse.state === "success" ? suggestionsResponse.data : undefined;
7570
+ var raw = React$1.useMemo(function () {
7571
+ return suggestionsData ? parseSuggestionsResponse_1(suggestionsData, -1) : undefined;
7572
+ }, [suggestionsData]);
7573
+ React$1.useEffect(function () {
7111
7574
  var prev = suggestionItem;
7112
7575
  setSuggestions(raw);
7113
7576
  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;
7577
+ var prevValue = prev.text;
7578
+ var index = 0;
7579
+ for (var _i = 0, raw_1 = raw; _i < raw_1.length; _i++) {
7580
+ var group = raw_1[_i];
7581
+ for (var _a = 0, _b = group.items; _a < _b.length; _a++) {
7582
+ var item = _b[_a];
7583
+ if (match(item, prevValue)) {
7584
+ setSuggestionIndex(index);
7585
+ break;
7586
+ }
7587
+ index++;
7120
7588
  }
7121
7589
  }
7122
7590
  }
@@ -7124,7 +7592,7 @@ function useSuggestions(search, context) {
7124
7592
  setSuggestionIndex(-1);
7125
7593
  }
7126
7594
  }, [raw, suggestionItem]);
7127
- return React.useMemo(function () { return ({
7595
+ return React$1.useMemo(function () { return ({
7128
7596
  suggestions: suggestions,
7129
7597
  index: suggestionIndex,
7130
7598
  execute: execute,
@@ -7133,43 +7601,36 @@ function useSuggestions(search, context) {
7133
7601
  }
7134
7602
 
7135
7603
  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)));
7604
+ return (React__default$1["default"].createElement("div", { className: "drawer-bars", onClick: props.onToggle },
7605
+ React__default$1["default"].createElement("div", { className: "drawer-bar bar1" }),
7606
+ React__default$1["default"].createElement("div", { className: "drawer-bar bar2" })));
7146
7607
  };
7147
7608
 
7148
7609
  var CloseIcon = function () {
7149
7610
  // 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" })));
7611
+ 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" },
7612
+ 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
7613
  };
7153
7614
 
7154
7615
  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" })));
7616
+ return (React__default$1["default"].createElement("svg", { xmlns: "http://www.w3.org/2000/svg", fill: "currentColor", viewBox: "0 0 16 16" },
7617
+ 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
7618
  };
7158
7619
 
7159
7620
  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" }))));
7621
+ return (React__default$1["default"].createElement("svg", { viewBox: "80.208 98.129 313.069 282.823", xmlns: "http://www.w3.org/2000/svg" },
7622
+ React__default$1["default"].createElement("g", { transform: "matrix(0.024498, 0, 0, -0.038359, 79.83091, 381.182404)", fill: "currentColor", stroke: "none" },
7623
+ 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" }),
7624
+ 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
7625
  };
7165
7626
 
7166
7627
  var SendButton = function (props) {
7167
- return (React__default["default"].createElement(IconButton, { className: "xappw-send-button", onClick: props.onClick, icon: SendIcon }));
7628
+ return (React__default$1["default"].createElement(IconButton_1, { className: "xappw-send-button ".concat(props.className || ""), onClick: props.onClick, icon: SendIcon }));
7168
7629
  };
7169
7630
 
7170
7631
  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];
7632
+ var value = props.value, suggestion = props.suggestion, onChange = props.onChange, onSubmit = props.onSubmit, onSuggestionCommand = props.onSuggestionCommand;
7633
+ var _a = React$1.useState(false), dragover = _a[0], setDragover = _a[1];
7173
7634
  function onDragOver(event) {
7174
7635
  setDragover(true);
7175
7636
  event.preventDefault();
@@ -7182,32 +7643,30 @@ var Input = function (props) {
7182
7643
  function onDragLeave() {
7183
7644
  setDragover(false);
7184
7645
  }
7185
- function handleOnSubmit(event) {
7646
+ var handleOnSubmit = React$1.useCallback(function (event) {
7186
7647
  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("");
7648
+ onSubmit(value); // send to the widget
7649
+ }, [value, onSubmit]);
7650
+ var handleClear = React$1.useCallback(function () {
7651
+ onChange({
7652
+ text: "",
7653
+ formats: []
7654
+ });
7195
7655
  }, [onChange]);
7196
- var handleKeyDown = React.useCallback(function (event) {
7656
+ var handleKeyDown = React$1.useCallback(function (event) {
7197
7657
  if (suggestion) {
7198
7658
  if (event.key === "End" || event.key === "ArrowRight" || event.key === "Enter") {
7199
- var newVal = suggestion.suggestion;
7200
- onChange(newVal);
7659
+ onChange(suggestion);
7201
7660
  return;
7202
7661
  }
7203
7662
  }
7204
7663
  if (onSuggestionCommand) {
7205
7664
  if (event.key === "ArrowUp") {
7206
- onSuggestionCommand("next");
7665
+ onSuggestionCommand("prev");
7207
7666
  event.preventDefault();
7208
7667
  }
7209
7668
  else if (event.key === "ArrowDown") {
7210
- onSuggestionCommand("prev");
7669
+ onSuggestionCommand("next");
7211
7670
  event.preventDefault();
7212
7671
  }
7213
7672
  else if (event.key === "Escape") {
@@ -7216,116 +7675,59 @@ var Input = function (props) {
7216
7675
  }
7217
7676
  }
7218
7677
  }, [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,
7678
+ 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 },
7679
+ React__default$1["default"].createElement("form", { className: "xappw-input-form", onSubmit: handleOnSubmit },
7680
+ React__default$1["default"].createElement(RichInput_1, { key: "input", className: "xappw-input", placeholder: "Type your question here...", onInput: onChange, onChange: onChange, onKeyDown: handleKeyDown,
7223
7681
  // 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
- }))));
7682
+ value: value }),
7683
+ React__default$1["default"].createElement("div", { className: "xappw-input-form__buttons" },
7684
+ value.text && React__default$1["default"].createElement(IconButton_1, { icon: CloseIcon, className: "xappw-input-form__btn", onClick: handleClear }),
7685
+ React__default$1["default"].createElement(SendButton, { className: "xappw-input-form__btn", onClick: handleOnSubmit })))));
7270
7686
  };
7271
7687
 
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]);
7688
+ function createActions(onItemUse) {
7689
+ return function (innerProps) {
7690
+ var data = innerProps.data;
7691
+ var canUse = data.type !== "FAQ";
7692
+ var handleUse = React$1.useCallback(function (ev) {
7693
+ onItemUse(data);
7694
+ ev.stopPropagation();
7695
+ }, [data]);
7696
+ if (!canUse) {
7697
+ return React__default$1["default"].createElement(React__default$1["default"].Fragment, null);
7698
+ }
7699
+ return (React__default$1["default"].createElement(IconButton_1, { className: "xappw-suggestions__use", onClick: handleUse, icon: LeftDownArrowIcon }));
7700
+ };
7287
7701
  }
7288
7702
  var Suggestions = function (props) {
7289
- var len = props.data.items.length;
7703
+ var data = props.data, onItemUse = props.onItemUse;
7704
+ var len = data.length;
7290
7705
  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 () {
7706
+ var _a = React$1.useState(), activeItem = _a[0], setActiveItem = _a[1];
7707
+ var item = React$1.useMemo(function () { return findItemByIndex_1(data, currentIndex); }, [data, currentIndex]);
7708
+ React$1.useEffect(function () {
7294
7709
  setActiveItem(item);
7295
7710
  }, [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 })); }))));
7711
+ var actions = React$1.useMemo(function () { return createActions(onItemUse); }, [onItemUse]);
7712
+ return (React__default$1["default"].createElement("div", { className: "xappw-suggestions ".concat(props.className || "") },
7713
+ (activeItem === null || activeItem === void 0 ? void 0 : activeItem.content) && React__default$1["default"].createElement("div", { className: "xappw-suggestions__answer" }, activeItem.content),
7714
+ !!data.length &&
7715
+ React__default$1["default"].createElement(SuggestionsList_1, { suggestions: data, index: currentIndex, className: "xappw-suggestions__groups", itemActions: actions, onItemClick: props.onItemClick, onItemHover: setActiveItem })));
7317
7716
  };
7318
7717
 
7319
7718
  var ChatFooter = function (props) {
7320
- var _a, _b, _c, _d;
7719
+ var _a, _b, _c;
7321
7720
  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];
7721
+ var _d = React$1.useState(false), drawer = _d[0], setDrawerState = _d[1]; // false initially
7722
+ var _e = React$1.useState(), suggestionSearch = _e[0], setSuggestionSearch = _e[1];
7324
7723
  var contexts = reactRedux.useSelector(function (state) { return state.activeContexts; });
7325
7724
  var suggestions = useSuggestions(suggestionSearch, contexts);
7326
7725
  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];
7726
+ var menuItems = React$1.useMemo(function () { return menuItemsRaw ? menuItemsRaw.map(function (item) { return item.label; }) : []; }, [menuItemsRaw]);
7727
+ var _f = React$1.useState({
7728
+ text: "",
7729
+ formats: []
7730
+ }), input = _f[0], setInput = _f[1];
7329
7731
  function toggleDrawer() {
7330
7732
  var newDrawer = !drawer;
7331
7733
  setDrawerState(newDrawer);
@@ -7337,29 +7739,32 @@ var ChatFooter = function (props) {
7337
7739
  }
7338
7740
  function handleChange(val) {
7339
7741
  setInput(val);
7340
- props.onChange(val);
7341
- setSuggestionSearch(val);
7742
+ props.onChange(val.text);
7743
+ setSuggestionSearch(val.text);
7342
7744
  }
7343
- var handleSubmit = React.useCallback(function (message) {
7745
+ var handleSubmit = React$1.useCallback(function (message) {
7344
7746
  setSuggestionSearch("");
7345
- setInput("");
7346
- onSubmit(message);
7747
+ setInput({
7748
+ text: "",
7749
+ formats: []
7750
+ });
7751
+ onSubmit(message.text);
7347
7752
  }, [onSubmit]);
7348
- var handleItemClick = React.useCallback(function (data) {
7349
- handleSubmit(data.suggestion);
7753
+ var handleItemClick = React$1.useCallback(function (data) {
7754
+ handleSubmit(data);
7350
7755
  }, [handleSubmit]);
7351
- var handleItemUse = React.useCallback(function (data) {
7352
- setInput(data.suggestion);
7353
- setSuggestionSearch(data.suggestion);
7756
+ var handleItemUse = React$1.useCallback(function (data) {
7757
+ setInput(data);
7758
+ setSuggestionSearch(data.text);
7354
7759
  }, []);
7355
- return (React__default["default"].createElement("div", { className: "chat-footer" },
7760
+ return (React__default$1["default"].createElement("div", { className: "chat-footer" },
7356
7761
  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,
7762
+ React__default$1["default"].createElement(React__default$1["default"].Fragment, null,
7763
+ React__default$1["default"].createElement(ChatMenu, { opened: drawer, onItemClick: handleMenuItem, items: menuItems }),
7764
+ React__default$1["default"].createElement("div", { className: "chat-footer__menu-icon" },
7765
+ React__default$1["default"].createElement(DrawerBars, { onToggle: toggleDrawer }))) : React__default$1["default"].createElement(React__default$1["default"].Fragment, null),
7766
+ ((_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 }),
7767
+ 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
7768
  // onFocus={this.inputOnFocus}
7364
7769
  onFileUpload: props.onFileUpload })));
7365
7770
  };
@@ -7395,12 +7800,12 @@ var MiddlewareContextFactory = /** @class */ (function () {
7395
7800
  var CardContainer = function (props) {
7396
7801
  function renderIcon() {
7397
7802
  var isString = typeof (props.icon) === "string";
7398
- return (React__default["default"].createElement("div", { className: "card-container__icon" }, !isString && props.icon));
7803
+ return (React__default$1["default"].createElement("div", { className: "card-container__icon" }, !isString && props.icon));
7399
7804
  }
7400
- return (React__default["default"].createElement("div", { className: "card-container " + props.addClass },
7805
+ return (React__default$1["default"].createElement("div", { className: "card-container ".concat(props.addClass) },
7401
7806
  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),
7807
+ React__default$1["default"].createElement("div", { className: "card-container__content ".concat(props.contentAddClass) },
7808
+ React__default$1["default"].createElement("div", { className: "card-container__title" }, props.title),
7404
7809
  props.children)));
7405
7810
  };
7406
7811
 
@@ -7415,13 +7820,13 @@ var defaultProps$2 = {
7415
7820
  var ChatRating = function (props) {
7416
7821
  if (props === void 0) { props = defaultProps$2; }
7417
7822
  var onRate = props.onRate;
7418
- var rateBadButtonOnClick = React.useCallback(function () {
7823
+ var rateBadButtonOnClick = React$1.useCallback(function () {
7419
7824
  onRate("bad");
7420
7825
  }, [onRate]);
7421
- var rateGoodButtonOnClick = React.useCallback(function () {
7826
+ var rateGoodButtonOnClick = React$1.useCallback(function () {
7422
7827
  onRate("good");
7423
7828
  }, [onRate]);
7424
- var rateAgainButtonOnClick = React.useCallback(function () {
7829
+ var rateAgainButtonOnClick = React$1.useCallback(function () {
7425
7830
  onRate(undefined);
7426
7831
  }, [onRate]);
7427
7832
  // Do not think this prop should be here
@@ -7429,40 +7834,40 @@ var ChatRating = function (props) {
7429
7834
  return null;
7430
7835
  }
7431
7836
  if (!props.hasRating) {
7432
- return (React__default["default"].createElement(CardContainer, { title: "Chat Rating", addClass: "chat-rating-card" },
7837
+ return (React__default$1["default"].createElement(CardContainer, { title: "Chat Rating", addClass: "chat-rating-card" },
7433
7838
  props.agent.displayName,
7434
7839
  " 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 }))));
7840
+ React__default$1["default"].createElement("div", { className: "buttons-container" },
7841
+ React__default$1["default"].createElement(ActionButton, { addClass: "button button-rate-bad", label: "Rate Bad", onClick: rateBadButtonOnClick }),
7842
+ React__default$1["default"].createElement(ActionButton, { addClass: "button button-rate-good", label: "Rate Good", onClick: rateGoodButtonOnClick }))));
7438
7843
  }
7439
7844
  else {
7440
- return (React__default["default"].createElement(CardContainer, { title: "Chat Rating", addClass: "chat-rating-card" },
7845
+ return (React__default$1["default"].createElement(CardContainer, { title: "Chat Rating", addClass: "chat-rating-card" },
7441
7846
  "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 }))));
7847
+ React__default$1["default"].createElement("div", { className: "buttons-container" },
7848
+ React__default$1["default"].createElement(ActionButton, { addClass: "button button-rate-again", label: "Rate again", onClick: rateAgainButtonOnClick }))));
7444
7849
  }
7445
7850
  };
7446
7851
 
7447
7852
  var ChatRatingContainer = function (props) {
7448
7853
  var dispatch = useChatServerDispatch();
7449
- var handleRate = React.useCallback(function (rating) {
7854
+ var handleRate = React$1.useCallback(function (rating) {
7450
7855
  dispatch(sendChatRating(rating));
7451
7856
  }, [dispatch]);
7452
- return React__default["default"].createElement(ChatRating, { agent: props.agent, hasRating: props.hasRating, shouldDisplay: props.shouldDisplay, onRate: handleRate });
7857
+ return React__default$1["default"].createElement(ChatRating, { agent: props.agent, hasRating: props.hasRating, shouldDisplay: props.shouldDisplay, onRate: handleRate });
7453
7858
  };
7454
7859
 
7455
7860
  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" })));
7861
+ return (React__default$1["default"].createElement("svg", { className: "message-svg", width: "16", height: "12", viewBox: "0 0 16 12" },
7862
+ 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
7863
  };
7459
7864
 
7460
7865
  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];
7866
+ var name = React$1.useRef(null);
7867
+ var email = React$1.useRef(null);
7868
+ var message = React$1.useRef(null);
7869
+ var form = React$1.useRef(null);
7870
+ var _a = React$1.useState(false), sent = _a[0], setSent = _a[1];
7466
7871
  function emailChanged() {
7467
7872
  var _a, _b, _c;
7468
7873
  if ((_a = email.current) === null || _a === void 0 ? void 0 : _a.validity.patternMismatch) {
@@ -7490,53 +7895,53 @@ var MessageForm = function (props) {
7490
7895
  setSent(false);
7491
7896
  }
7492
7897
  function renderSent() {
7493
- return (React__default["default"].createElement("div", { key: "sent", className: "message-form--sent" },
7898
+ return (React__default$1["default"].createElement("div", { key: "sent", className: "message-form--sent" },
7494
7899
  "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 })));
7900
+ React__default$1["default"].createElement(ActionButton, { addClass: "button-resend", label: "Send another", onClick: sendAnother })));
7496
7901
  }
7497
7902
  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()));
7903
+ return (React__default$1["default"].createElement("form", { ref: form, key: "not-sent", className: "message-form", onSubmit: send },
7904
+ React__default$1["default"].createElement("div", { className: "content" },
7905
+ React__default$1["default"].createElement("div", { className: "section" },
7906
+ React__default$1["default"].createElement("label", { className: "label" }, "Name"),
7907
+ React__default$1["default"].createElement("input", { ref: name, maxLength: 255 })),
7908
+ React__default$1["default"].createElement("div", { className: "section" },
7909
+ React__default$1["default"].createElement("label", { className: "label" }, "Email"),
7910
+ React__default$1["default"].createElement("input", { ref: email, onChange: emailChanged, type: "email", required: true, pattern: EMAIL_REGEX })),
7911
+ React__default$1["default"].createElement("div", { className: "section" },
7912
+ React__default$1["default"].createElement("label", { className: "label" }, "Message"),
7913
+ React__default$1["default"].createElement("textarea", { required: true, ref: message }))),
7914
+ React__default$1["default"].createElement("div", { className: "button-container" },
7915
+ React__default$1["default"].createElement(ActionButton, { type: "submit", addClass: "message-form__submit", label: "Send" }))));
7916
+ }
7917
+ 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
7918
  };
7514
7919
 
7515
7920
  var OfflineForm = function (props) {
7516
- return React__default["default"].createElement(MessageForm, { title: "Offline message card title", onSubmit: props.onSubmit });
7921
+ return React__default$1["default"].createElement(MessageForm, { title: "Offline message card title", onSubmit: props.onSubmit });
7517
7922
  };
7518
7923
 
7519
7924
  var OfflineFormContainer = function (_) {
7520
7925
  var dispatch = useChatServerDispatch();
7521
- var handleSubmit = React.useCallback(function (data) {
7926
+ var handleSubmit = React$1.useCallback(function (data) {
7522
7927
  dispatch(sendOfflineMsg(data));
7523
7928
  }, [dispatch]);
7524
- return React__default["default"].createElement(OfflineForm, { onSubmit: handleSubmit });
7929
+ return React__default$1["default"].createElement(OfflineForm, { onSubmit: handleSubmit });
7525
7930
  };
7526
7931
 
7527
7932
  var PrechatForm = function (props) {
7528
- var _a = React.useState(false), sent = _a[0], setSent = _a[1];
7933
+ var _a = React$1.useState(false), sent = _a[0], setSent = _a[1];
7529
7934
  var onSubmit = props.onSubmit;
7530
- var handleSubmit = React.useCallback(function (msg) {
7935
+ var handleSubmit = React$1.useCallback(function (msg) {
7531
7936
  onSubmit(msg);
7532
7937
  setSent(true);
7533
7938
  }, [onSubmit]);
7534
- return (React__default["default"].createElement(React__default["default"].Fragment, null, !sent && React__default["default"].createElement(MessageForm, { title: "Introduce yourself!", onSubmit: handleSubmit })));
7939
+ 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
7940
  };
7536
7941
 
7537
7942
  var PrechatFormContainer = function (_) {
7538
7943
  var dispatch = useChatServerDispatch();
7539
- var handleSubmit = React.useCallback(function (data) {
7944
+ var handleSubmit = React$1.useCallback(function (data) {
7540
7945
  // Don't send empty messages
7541
7946
  if (!data.message)
7542
7947
  return;
@@ -7546,7 +7951,7 @@ var PrechatFormContainer = function (_) {
7546
7951
  }));
7547
7952
  dispatch(executeAction(data.message));
7548
7953
  }, [dispatch]);
7549
- return React__default["default"].createElement(PrechatForm, { onSubmit: handleSubmit });
7954
+ return React__default$1["default"].createElement(PrechatForm, { onSubmit: handleSubmit });
7550
7955
  };
7551
7956
 
7552
7957
  var defaultProps$1 = {
@@ -7556,8 +7961,8 @@ var QueuePosition = function (props) {
7556
7961
  if (props === void 0) { props = defaultProps$1; }
7557
7962
  if (props.position <= 0)
7558
7963
  return null;
7559
- return (React__default["default"].createElement("div", { className: "system-msg-container" },
7560
- React__default["default"].createElement("span", { className: "system-msg" },
7964
+ return (React__default$1["default"].createElement("div", { className: "system-msg-container" },
7965
+ React__default$1["default"].createElement("span", { className: "system-msg" },
7561
7966
  "Queue position: ",
7562
7967
  props.position)));
7563
7968
  };
@@ -7565,34 +7970,34 @@ var QueuePosition = function (props) {
7565
7970
  function getMessageByType(msg) {
7566
7971
  switch (msg.type) {
7567
7972
  case "chat.memberjoin":
7568
- return msg.user.displayName + " has joined the chat";
7973
+ return "".concat(msg.user.displayName, " has joined the chat");
7569
7974
  case "chat.memberleave":
7570
- return msg.user.displayName + " has left the chat";
7975
+ return "".concat(msg.user.displayName, " has left the chat");
7571
7976
  case "chat.rating":
7572
7977
  if (!msg.newRating) {
7573
7978
  return "You have removed the chat rating";
7574
7979
  }
7575
7980
  else {
7576
7981
  var rating = convertToSentenceCase(msg.newRating);
7577
- return "You have rated the chat service " + rating;
7982
+ return "You have rated the chat service ".concat(rating);
7578
7983
  }
7579
7984
  default:
7580
7985
  return JSON.stringify(msg);
7581
7986
  }
7582
7987
  }
7583
7988
  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))));
7989
+ return (React__default$1["default"].createElement("div", { className: "system-msg-container" },
7990
+ React__default$1["default"].createElement("span", { className: "system-msg" }, getMessageByType(props.message))));
7586
7991
  };
7587
7992
  function convertToSentenceCase(s) {
7588
7993
  return s[0].toUpperCase() + s.slice(1);
7589
7994
  }
7590
7995
 
7591
7996
  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" })));
7997
+ return (React__default$1["default"].createElement("div", { className: "typing-indicator" },
7998
+ React__default$1["default"].createElement("div", { className: "typing-indicator-part" }),
7999
+ React__default$1["default"].createElement("div", { className: "typing-indicator-part" }),
8000
+ React__default$1["default"].createElement("div", { className: "typing-indicator-part" })));
7596
8001
  };
7597
8002
 
7598
8003
  /**
@@ -7601,13 +8006,13 @@ var TypingIndicator = function (_) {
7601
8006
  var TypingStatus = function (props) {
7602
8007
  var agent_names = Object.values(props.agents)
7603
8008
  .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.user.nick },
7606
- React__default["default"].createElement("div", { key: agent.user.nick, className: "chat-msg-container agent chat-typing-progress" },
7607
- React__default["default"].createElement(ChatMessagePart, { user: agent.user, 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)))))));
8009
+ return (React__default$1["default"].createElement(React__default$1["default"].Fragment, null, agent_names.map(function (agent) {
8010
+ return (React__default$1["default"].createElement("div", { className: "chat-msg-container-wrapper", key: "typing-status-".concat(agent.user.nick) },
8011
+ React__default$1["default"].createElement("div", { key: agent.user.nick, className: "chat-msg-container agent chat-typing-progress" },
8012
+ React__default$1["default"].createElement(ChatMessagePart, { user: agent.user, showAvatar: true },
8013
+ React__default$1["default"].createElement("div", { className: "chat-msg" },
8014
+ React__default$1["default"].createElement(ChatMessageBubble, { owner: "others", hasTail: true },
8015
+ React__default$1["default"].createElement(TypingIndicator, null)))))));
7611
8016
  })));
7612
8017
  };
7613
8018
 
@@ -7628,19 +8033,19 @@ var defaultProps = {
7628
8033
  var MessageList = function (props) {
7629
8034
  if (props === void 0) { props = defaultProps; }
7630
8035
  var onSend = props.onSend, onWrite = props.onWrite, onOpenUrl = props.onOpenUrl;
7631
- var messagesEndRef = React.useRef(null);
7632
- React.useEffect(function () {
8036
+ var messagesEndRef = React$1.useRef(null);
8037
+ React$1.useEffect(function () {
7633
8038
  messagesEndRef.current.scrollIntoView({ behavior: "smooth" });
7634
8039
  }, [props.messages]);
7635
- var handleSend = React.useCallback(function (msg) {
8040
+ var handleSend = React$1.useCallback(function (msg) {
7636
8041
  onSend(msg);
7637
8042
  messagesEndRef.current.scrollIntoView({ behavior: "smooth" });
7638
8043
  }, [onSend]);
7639
- var handleWrite = React.useCallback(function (msg) {
8044
+ var handleWrite = React$1.useCallback(function (msg) {
7640
8045
  onWrite(msg);
7641
8046
  messagesEndRef.current.scrollIntoView({ behavior: "smooth" });
7642
8047
  }, [onWrite]);
7643
- var ctxCache = React.useMemo(function () { return new MiddlewareContextFactory({
8048
+ var ctxCache = React$1.useMemo(function () { return new MiddlewareContextFactory({
7644
8049
  send: handleSend,
7645
8050
  write: handleWrite,
7646
8051
  openUrl: onOpenUrl
@@ -7657,20 +8062,20 @@ var MessageList = function (props) {
7657
8062
  switch (msg.type) {
7658
8063
  case "chat.file":
7659
8064
  case "chat.msg":
7660
- return (React__default["default"].createElement(ChatMessage, { key: msg.type + msg.timestamp, message: msg, sibling: sibling, agent: user, messageMiddleware: props.messageMiddleware, middlewareContext: ctxCache.resolve(user) }));
8065
+ 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) }));
7661
8066
  case "chat.memberjoin":
7662
8067
  case "chat.memberleave":
7663
8068
  case "chat.rating":
7664
8069
  case "chat.typing":
7665
- return (React__default["default"].createElement(SystemMessage, { key: msg.type + msg.timestamp, message: msg }));
8070
+ return (React__default$1["default"].createElement(SystemMessage, { key: msg.type + msg.timestamp, message: msg }));
7666
8071
  case "chat.request.rating":
7667
- return (React__default["default"].createElement(ChatRatingContainer, { key: msg.type + msg.timestamp, agent: user, hasRating: props.hasRating, shouldDisplay: msg.timestamp === props.lastRatingRequestTimestamp }));
8072
+ return (React__default$1["default"].createElement(ChatRatingContainer, { key: msg.type + msg.timestamp, agent: user, hasRating: props.hasRating, shouldDisplay: msg.timestamp === props.lastRatingRequestTimestamp }));
7668
8073
  case "chat.offline":
7669
- return React__default["default"].createElement(OfflineFormContainer, { key: "offline-" + msg.timestamp });
8074
+ return React__default$1["default"].createElement(OfflineFormContainer, { key: "offline-".concat(msg.timestamp) });
7670
8075
  case "chat.prechat":
7671
- return React__default["default"].createElement(PrechatFormContainer, { key: "prechat" });
8076
+ return React__default$1["default"].createElement(PrechatFormContainer, { key: "prechat" });
7672
8077
  default:
7673
- return React__default["default"].createElement("div", { key: +new Date() },
8078
+ return React__default$1["default"].createElement("div", { key: +new Date() },
7674
8079
  "Unhandled message: ",
7675
8080
  JSON.stringify(msg));
7676
8081
  }
@@ -7693,23 +8098,23 @@ var MessageList = function (props) {
7693
8098
  });
7694
8099
  }
7695
8100
  var agents = props.agents, queuePosition = props.queuePosition;
7696
- return (React__default["default"].createElement("div", { className: "message-list-container" },
7697
- React__default["default"].createElement("div", { className: "message-list-container__msgs" },
8101
+ return (React__default$1["default"].createElement("div", { className: "message-list-container" },
8102
+ React__default$1["default"].createElement("div", { className: "message-list-container__msgs" },
7698
8103
  renderAll(),
7699
- React__default["default"].createElement("div", { ref: messagesEndRef, style: { float: "left", clear: "both" } }),
7700
- React__default["default"].createElement(QueuePosition, { position: queuePosition }),
7701
- React__default["default"].createElement(TypingStatus, { agents: agents })),
7702
- React__default["default"].createElement(ChatChipsContainer, null)));
8104
+ React__default$1["default"].createElement("div", { ref: messagesEndRef, style: { float: "left", clear: "both" } }),
8105
+ React__default$1["default"].createElement(QueuePosition, { position: queuePosition }),
8106
+ React__default$1["default"].createElement(TypingStatus, { agents: agents })),
8107
+ React__default$1["default"].createElement(ChatChipsContainer, null)));
7703
8108
  };
7704
8109
 
7705
8110
  var ServerOffline = function () {
7706
- return React__default["default"].createElement("div", { className: "server-offline" },
7707
- React__default["default"].createElement("h2", null, "Chat is currently unavailable"),
7708
- React__default["default"].createElement("h3", null, "Server is offline"));
8111
+ return React__default$1["default"].createElement("div", { className: "server-offline" },
8112
+ React__default$1["default"].createElement("h2", null, "Chat is currently unavailable"),
8113
+ React__default$1["default"].createElement("h3", null, "Server is offline"));
7709
8114
  };
7710
8115
 
7711
8116
  var MinimizeButton = function (props) {
7712
- return React__default["default"].createElement("div", { className: "minimize-button", onClick: props.onClick });
8117
+ return React__default$1["default"].createElement("div", { className: "minimize-button", onClick: props.onClick });
7713
8118
  };
7714
8119
 
7715
8120
  var DEFAULT_STATUS_CONFIG = {
@@ -7729,23 +8134,23 @@ function getStatusText(status, config) {
7729
8134
  }
7730
8135
  var StatusContainer = function (props) {
7731
8136
  var _a;
7732
- return (React__default["default"].createElement("div", { className: "status-container" },
7733
- React__default["default"].createElement("div", { className: "status-container__avatar" },
7734
- React__default["default"].createElement(Avatar, { entity: props.agent })),
7735
- React__default["default"].createElement("div", { className: "status-text" },
7736
- React__default["default"].createElement("span", null, getStatusText(props.accountStatus, (_a = props.config) === null || _a === void 0 ? void 0 : _a.status))),
8137
+ return (React__default$1["default"].createElement("div", { className: "status-container" },
8138
+ React__default$1["default"].createElement("div", { className: "status-container__avatar" },
8139
+ React__default$1["default"].createElement(Avatar, { entity: props.agent })),
8140
+ React__default$1["default"].createElement("div", { className: "status-text" },
8141
+ React__default$1["default"].createElement("span", null, getStatusText(props.accountStatus, (_a = props.config) === null || _a === void 0 ? void 0 : _a.status))),
7737
8142
  props.canMinimize &&
7738
- React__default["default"].createElement(MinimizeButton, { onClick: props.minimizeOnClick })));
8143
+ React__default$1["default"].createElement(MinimizeButton, { onClick: props.minimizeOnClick })));
7739
8144
  };
7740
8145
 
7741
8146
  function buildStyleContent(theme) {
7742
8147
  var _a, _b, _c, _d;
7743
- 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}";
8148
+ 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}");
7744
8149
  }
7745
8150
  function WidgetStylesheet(props) {
7746
8151
  var theme = props.theme;
7747
8152
  var stylesContent = buildStyleContent(theme);
7748
- return (React__default["default"].createElement("style", null, stylesContent));
8153
+ return (React__default$1["default"].createElement("style", null, stylesContent));
7749
8154
  }
7750
8155
  function buildVariables(gen) {
7751
8156
  var result = gen.next();
@@ -7753,7 +8158,7 @@ function buildVariables(gen) {
7753
8158
  while (result.done === false) {
7754
8159
  var _a = result.value, key = _a[0], value = _a[1];
7755
8160
  if (value !== undefined && value !== null && value !== "") {
7756
- res += key + ": " + value + ";\n\r";
8161
+ res += "".concat(key, ": ").concat(value, ";\n\r");
7757
8162
  }
7758
8163
  result = gen.next();
7759
8164
  }
@@ -7761,14 +8166,14 @@ function buildVariables(gen) {
7761
8166
  }
7762
8167
  function withPrefix(prefix, gen) {
7763
8168
  var result;
7764
- return __generator(this, function (_a) {
8169
+ return __generator$1(this, function (_a) {
7765
8170
  switch (_a.label) {
7766
8171
  case 0:
7767
8172
  result = gen.next();
7768
8173
  _a.label = 1;
7769
8174
  case 1:
7770
8175
  if (!!result.done) return [3 /*break*/, 3];
7771
- return [4 /*yield*/, ["" + prefix + result.value[0], result.value[1]]];
8176
+ return [4 /*yield*/, ["".concat(prefix).concat(result.value[0]), result.value[1]]];
7772
8177
  case 2:
7773
8178
  _a.sent();
7774
8179
  result = gen.next();
@@ -7783,7 +8188,7 @@ function union() {
7783
8188
  for (_i = 0; _i < arguments.length; _i++) {
7784
8189
  children[_i] = arguments[_i];
7785
8190
  }
7786
- return __generator(this, function (_b) {
8191
+ return __generator$1(this, function (_b) {
7787
8192
  switch (_b.label) {
7788
8193
  case 0:
7789
8194
  _a = 0, children_1 = children;
@@ -7808,7 +8213,7 @@ function union() {
7808
8213
  });
7809
8214
  }
7810
8215
  function single(key, value) {
7811
- return __generator(this, function (_a) {
8216
+ return __generator$1(this, function (_a) {
7812
8217
  switch (_a.label) {
7813
8218
  case 0: return [4 /*yield*/, [key, value]];
7814
8219
  case 1:
@@ -7818,7 +8223,7 @@ function single(key, value) {
7818
8223
  });
7819
8224
  }
7820
8225
  function empty() {
7821
- return __generator(this, function (_a) {
8226
+ return __generator$1(this, function (_a) {
7822
8227
  return [2 /*return*/];
7823
8228
  });
7824
8229
  }
@@ -7838,7 +8243,7 @@ function getMessageStyle(style) {
7838
8243
  return union(single('bubble-color', style === null || style === void 0 ? void 0 : style.bubbleColor), getTextStyle(style === null || style === void 0 ? void 0 : style.text));
7839
8244
  }
7840
8245
  function getSize(style) {
7841
- return __generator(this, function (_a) {
8246
+ return __generator$1(this, function (_a) {
7842
8247
  switch (_a.label) {
7843
8248
  case 0: return [4 /*yield*/, ['width', style === null || style === void 0 ? void 0 : style.width]];
7844
8249
  case 1:
@@ -7851,7 +8256,7 @@ function getSize(style) {
7851
8256
  });
7852
8257
  }
7853
8258
  function getMargins(style) {
7854
- return __generator(this, function (_a) {
8259
+ return __generator$1(this, function (_a) {
7855
8260
  switch (_a.label) {
7856
8261
  case 0:
7857
8262
  if (!style) return [3 /*break*/, 5];
@@ -7873,7 +8278,7 @@ function getMargins(style) {
7873
8278
  });
7874
8279
  }
7875
8280
  function getPaddings(style) {
7876
- return __generator(this, function (_a) {
8281
+ return __generator$1(this, function (_a) {
7877
8282
  switch (_a.label) {
7878
8283
  case 0:
7879
8284
  if (!style) return [3 /*break*/, 5];
@@ -7895,7 +8300,7 @@ function getPaddings(style) {
7895
8300
  });
7896
8301
  }
7897
8302
  function getTextStyle(style) {
7898
- return __generator(this, function (_a) {
8303
+ return __generator$1(this, function (_a) {
7899
8304
  switch (_a.label) {
7900
8305
  case 0:
7901
8306
  if (!style) return [3 /*break*/, 6];
@@ -7920,7 +8325,7 @@ function getTextStyle(style) {
7920
8325
  });
7921
8326
  }
7922
8327
  function getBackgroundStyle(style) {
7923
- return __generator(this, function (_a) {
8328
+ return __generator$1(this, function (_a) {
7924
8329
  switch (_a.label) {
7925
8330
  case 0: return [4 /*yield*/, ["background", style]];
7926
8331
  case 1:
@@ -7930,7 +8335,7 @@ function getBackgroundStyle(style) {
7930
8335
  });
7931
8336
  }
7932
8337
  function getButtonStyle(style) {
7933
- return __generator(this, function (_a) {
8338
+ return __generator$1(this, function (_a) {
7934
8339
  switch (_a.label) {
7935
8340
  case 0: return [4 /*yield*/, ['button-color', style === null || style === void 0 ? void 0 : style.color]];
7936
8341
  case 1:
@@ -7946,7 +8351,7 @@ function getMenuStyle(style) {
7946
8351
  return union(withPrefix("item-", getMenuItemStyle(style === null || style === void 0 ? void 0 : style.item)));
7947
8352
  }
7948
8353
  function getBorderStyle(style) {
7949
- return __generator(this, function (_a) {
8354
+ return __generator$1(this, function (_a) {
7950
8355
  switch (_a.label) {
7951
8356
  case 0:
7952
8357
  if (!style) return [3 /*break*/, 4];
@@ -7992,14 +8397,14 @@ function getCtaStyle(style) {
7992
8397
  var ChatWidgetWrapper = function (props) {
7993
8398
  var rawConfig = props.config;
7994
8399
  var connection = useConnectionInfo(rawConfig);
7995
- var config = React.useMemo(function () {
8400
+ var config = React$1.useMemo(function () {
7996
8401
  var _a;
7997
8402
  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 }));
7998
8403
  }, [connection, rawConfig]);
7999
8404
  var chatServer = useChatServer(connection);
8000
- return (React__default["default"].createElement(ChatConfigContext.Provider, { value: config },
8001
- React__default["default"].createElement(ChatServerContext.Provider, { value: chatServer },
8002
- React__default["default"].createElement(ChatWidget, __assign({}, props)))));
8405
+ return (React__default$1["default"].createElement(ChatConfigContext.Provider, { value: config },
8406
+ React__default$1["default"].createElement(ChatServerContext.Provider, { value: chatServer },
8407
+ React__default$1["default"].createElement(ChatWidget, __assign({}, props)))));
8003
8408
  };
8004
8409
  var ChatWidget = function (props) {
8005
8410
  var _a, _b, _c, _d, _e, _f;
@@ -8010,12 +8415,12 @@ var ChatWidget = function (props) {
8010
8415
  var mode = (_a = props.mode) !== null && _a !== void 0 ? _a : "normal";
8011
8416
  var dockedMode = mode === "docked";
8012
8417
  var staticMode = mode === "static";
8013
- var modeClass = "widget-container--" + mode;
8418
+ var modeClass = "widget-container--".concat(mode);
8014
8419
  var canMinimize = !dockedMode && !staticMode;
8015
8420
  // Our state - pull from storage
8016
- 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];
8017
- var _h = React.useState(false), typing = _h[0], setTypingState = _h[1]; // false initially
8018
- var chatServer = React.useContext(ChatServerContext);
8421
+ 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];
8422
+ var _h = React$1.useState(false), typing = _h[0], setTypingState = _h[1]; // false initially
8423
+ var chatServer = React$1.useContext(ChatServerContext);
8019
8424
  function setVisible(newVisible) {
8020
8425
  if (staticMode) {
8021
8426
  return;
@@ -8109,22 +8514,22 @@ var ChatWidget = function (props) {
8109
8514
  useGreeting(!isOffline && !props.preChatFormEnabled && visible);
8110
8515
  var config = props.config, onConnectionStatusChange = props.onConnectionStatusChange;
8111
8516
  var connectionStatus = chatState.connection.connectionStatus;
8112
- React.useEffect(function () {
8517
+ React$1.useEffect(function () {
8113
8518
  if (onConnectionStatusChange) {
8114
8519
  onConnectionStatusChange(connectionStatus);
8115
8520
  }
8116
8521
  }, [connectionStatus, onConnectionStatusChange]);
8117
8522
  useExternalScript((_d = props.config) === null || _d === void 0 ? void 0 : _d.middlewareUrl);
8118
- return (React__default["default"].createElement(React__default["default"].Fragment, null,
8119
- React__default["default"].createElement("div", { className: "widget-container " + modeClass + " " + getVisibilityClass() },
8120
- React__default["default"].createElement(WidgetStylesheet, { theme: config === null || config === void 0 ? void 0 : config.theme }),
8121
- 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 }),
8122
- 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 }),
8123
- React__default["default"].createElement("div", { className: "spinner-container " + (visible && connectionStatus === "pending" ? "visible" : "") },
8124
- React__default["default"].createElement("div", { className: "spinner" })),
8125
- connectionStatus === "offline" && React__default["default"].createElement(ServerOffline, null),
8126
- React__default["default"].createElement(ChatFooter, { isChatting: chatState.isChatting, onChange: handleOnChange, onSubmit: handleOnSubmit, onFileUpload: handleFileUpload })),
8127
- React__default["default"].createElement(ChatButton, { addClass: getVisibilityClass(), onClick: chatButtonOnClick, config: (_f = props.config) === null || _f === void 0 ? void 0 : _f.cta, visible: visible })));
8523
+ return (React__default$1["default"].createElement(React__default$1["default"].Fragment, null,
8524
+ React__default$1["default"].createElement("div", { className: "widget-container ".concat(modeClass, " ").concat(getVisibilityClass()) },
8525
+ React__default$1["default"].createElement(WidgetStylesheet, { theme: config === null || config === void 0 ? void 0 : config.theme }),
8526
+ 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 }),
8527
+ 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 }),
8528
+ React__default$1["default"].createElement("div", { className: "spinner-container ".concat(visible && connectionStatus === "pending" ? "visible" : "") },
8529
+ React__default$1["default"].createElement("div", { className: "spinner" })),
8530
+ connectionStatus === "offline" && React__default$1["default"].createElement(ServerOffline, null),
8531
+ React__default$1["default"].createElement(ChatFooter, { isChatting: chatState.isChatting, onChange: handleOnChange, onSubmit: handleOnSubmit, onFileUpload: handleFileUpload })),
8532
+ React__default$1["default"].createElement(ChatButton, { addClass: getVisibilityClass(), onClick: chatButtonOnClick, config: (_f = props.config) === null || _f === void 0 ? void 0 : _f.cta, visible: visible })));
8128
8533
  };
8129
8534
 
8130
8535
  function tryParseJson(str) {
@@ -8163,7 +8568,7 @@ var BrowserStateStorage = /** @class */ (function () {
8163
8568
  * @returns {string}
8164
8569
  */
8165
8570
  function visitorFingerprint() {
8166
- return uuid();
8571
+ return uuid_1();
8167
8572
  }
8168
8573
 
8169
8574
  var DEFAULT_VISITOR = {
@@ -8219,7 +8624,7 @@ function connectionReducer(state, action) {
8219
8624
  }
8220
8625
 
8221
8626
  function joinMessages(messages, msg) {
8222
- return insertSorted(__spreadArray([], messages, true), msg, function (left, right) { return left.timestamp - right.timestamp; });
8627
+ return insertSorted(__spreadArray$1([], messages, true), msg, function (left, right) { return left.timestamp - right.timestamp; });
8223
8628
  }
8224
8629
 
8225
8630
  function memberJoin(state, detail) {
@@ -8250,7 +8655,7 @@ function memberLeave(state, detail) {
8250
8655
 
8251
8656
  function resetReducer(state) {
8252
8657
  if (state === void 0) { state = DEFAULT_STATE; }
8253
- return __assign(__assign({}, createDefaultState()), { connection: __assign(__assign({}, state.connection), { nonce: uuid() }), visitor: state.visitor, visitorId: state.visitorId });
8658
+ return __assign(__assign({}, createDefaultState()), { connection: __assign(__assign({}, state.connection), { nonce: uuid_1() }), visitor: state.visitor, visitorId: state.visitorId });
8254
8659
  }
8255
8660
 
8256
8661
  // todo: create reducer (requires redux-thunk dependncy)
@@ -8349,7 +8754,7 @@ function mapSynthetic(state, action) {
8349
8754
  }
8350
8755
  };
8351
8756
  default:
8352
- throw new Error("Unknown synthetic action. Detail type: " + action.detail.type);
8757
+ throw new Error("Unknown synthetic action. Detail type: ".concat(action.detail.type));
8353
8758
  }
8354
8759
  }
8355
8760
  function storeHandler(state, action) {
@@ -8364,13 +8769,14 @@ function storeHandler(state, action) {
8364
8769
  }
8365
8770
  }
8366
8771
 
8367
- function createChatStore(config) {
8368
- var storage = new BrowserStateStorage(sessionStorage, "xappchat." + config.serverUrl + "." + config.accountKey);
8772
+ function createChatStore(config, dataStorage) {
8773
+ if (dataStorage === void 0) { dataStorage = sessionStorage; }
8774
+ var storage = new BrowserStateStorage(dataStorage, "xappchat.".concat(config.serverUrl, ".").concat(config.accountKey));
8369
8775
  var chatReducer = persistStateReducer(storage, DEFAULT_STATE, storeHandler);
8370
8776
  var middlewares = [
8371
8777
  thunk__default["default"]
8372
8778
  ];
8373
- var composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || redux.compose;
8779
+ var composeEnhancers = globalThis.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || redux.compose;
8374
8780
  return redux.createStore(chatReducer, composeEnhancers(redux.applyMiddleware.apply(void 0, middlewares)));
8375
8781
  }
8376
8782
 
@@ -8378,13 +8784,13 @@ var ChatWidgetContainer = function (props) {
8378
8784
  var _a;
8379
8785
  var messageMiddleware = useStandardMiddleware();
8380
8786
  var connection = useServerConfig(props.config);
8381
- var chatStore = React.useMemo(function () { return createChatStore(connection); }, [connection]);
8787
+ var chatStore = React$1.useMemo(function () { return createChatStore(connection); }, [connection]);
8382
8788
  if ((_a = props.config) === null || _a === void 0 ? void 0 : _a.disabled) {
8383
- return React__default["default"].createElement(React__default["default"].Fragment, null);
8789
+ return React__default$1["default"].createElement(React__default$1["default"].Fragment, null);
8384
8790
  }
8385
8791
  var widgetProps = __assign(__assign({}, props), { messageMiddleware: messageMiddleware });
8386
- return (React__default["default"].createElement(reactRedux.Provider, { store: chatStore },
8387
- React__default["default"].createElement(ChatWidgetWrapper, __assign({}, widgetProps))));
8792
+ return (React__default$1["default"].createElement(reactRedux.Provider, { store: chatStore },
8793
+ React__default$1["default"].createElement(ChatWidgetWrapper, __assign({}, widgetProps))));
8388
8794
  };
8389
8795
 
8390
8796
  function createStaticReducer(state) {
@@ -8405,35 +8811,35 @@ function createStaticStore(state) {
8405
8811
 
8406
8812
  var StaticChatWidgetContainer = function (props) {
8407
8813
  var state = props.state;
8408
- var store = React.useMemo(function () {
8814
+ var store = React$1.useMemo(function () {
8409
8815
  return createStaticStore(state);
8410
8816
  }, [state]);
8411
- var config = React.useMemo(function () {
8817
+ var config = React$1.useMemo(function () {
8412
8818
  return __assign(__assign({}, props.config), { connection: {
8413
8819
  serverUrl: "",
8414
8820
  type: "local"
8415
8821
  } });
8416
8822
  }, [props.config]);
8417
- return (React__default["default"].createElement(reactRedux.Provider, { store: store },
8418
- React__default["default"].createElement(ChatWidgetWrapper, __assign({}, props, { config: config }))));
8823
+ return (React__default$1["default"].createElement(reactRedux.Provider, { store: store },
8824
+ React__default$1["default"].createElement(ChatWidgetWrapper, __assign({}, props, { config: config }))));
8419
8825
  };
8420
8826
 
8421
8827
  function createStateFromMessages(messages) {
8422
8828
  var def = createDefaultState();
8423
- return __assign(__assign({}, def), { connection: __assign(__assign({}, def.connection), { connectionStatus: "online" }), accountStatus: "online", chats: __spreadArray([], messages, true), isChatting: true });
8829
+ return __assign(__assign({}, def), { connection: __assign(__assign({}, def.connection), { connectionStatus: "online" }), accountStatus: "online", chats: __spreadArray$1([], messages, true), isChatting: true });
8424
8830
  }
8425
8831
 
8426
8832
  var StaticMessagesChatWidgetContainer = function (props) {
8427
8833
  var messages = props.messages;
8428
- var state = React.useMemo(function () {
8834
+ var state = React$1.useMemo(function () {
8429
8835
  return createStateFromMessages(messages);
8430
8836
  }, [messages]);
8431
- return (React__default["default"].createElement(StaticChatWidgetContainer, { state: state, mode: props.mode, config: props.config }));
8837
+ return (React__default$1["default"].createElement(StaticChatWidgetContainer, { state: state, mode: props.mode, config: props.config }));
8432
8838
  };
8433
8839
 
8434
8840
  Object.defineProperty(exports, 'React', {
8435
8841
  enumerable: true,
8436
- get: function () { return React__default["default"]; }
8842
+ get: function () { return React__default$1["default"]; }
8437
8843
  });
8438
8844
  exports.ActionButton = ActionButton;
8439
8845
  exports.Avatar = Avatar;