@xapp/chat-widget 1.48.0 → 1.49.2

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
@@ -1642,7 +1642,7 @@ var ChatImage = function (props) {
1642
1642
  return (React__default$1["default"].createElement("div", { className: "chat-card-img" }, content));
1643
1643
  }
1644
1644
  else {
1645
- return (React__default$1["default"].createElement("a", { href: props.imageActionUrl, target: "_blank", rel: "noopener noreferrer", className: "chat-card-img" }, content));
1645
+ return (React__default$1["default"].createElement("a", { href: props.imageActionUrl, "aria-label": "read more", target: "_blank", rel: "noopener noreferrer", className: "chat-card-img" }, content));
1646
1646
  }
1647
1647
  };
1648
1648
 
@@ -1894,12 +1894,12 @@ var CtaBubbleContainer = function (props) {
1894
1894
  };
1895
1895
 
1896
1896
  var ChatButton = function (props) {
1897
- return (React__default$1["default"].createElement("div", { className: "chat-button ".concat(props.addClass) },
1898
- React__default$1["default"].createElement("div", { id: "xapp-widget-button", className: "chat-button__btn", onClick: props.onClick },
1897
+ return (React__default$1["default"].createElement("button", { className: "chat-button ".concat(props.addClass), onClick: props.onClick },
1898
+ React__default$1["default"].createElement("div", { id: "xapp-widget-button", className: "chat-button__btn" },
1899
1899
  React__default$1["default"].createElement("svg", { width: "22", height: "22", viewBox: "0 0 22 22" },
1900
1900
  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" }))),
1901
1901
  props.config && props.config.message && (React__default$1["default"].createElement("div", { className: "chat-button__cta" },
1902
- React__default$1["default"].createElement(CtaBubbleContainer, { timeout: props.config.timeout, visible: !props.visible, onClick: props.onClick }, props.config.message)))));
1902
+ React__default$1["default"].createElement(CtaBubbleContainer, { timeout: props.config.timeout, visible: !props.visible }, props.config.message)))));
1903
1903
  };
1904
1904
 
1905
1905
  var ChatCard = function (props) {
@@ -7202,14 +7202,14 @@ var ChatMenu = function (props) {
7202
7202
  return React__default$1["default"].createElement(ChatMenuItem, { key: i, onClick: props.onItemClick, label: item.label, subtitle: item.subtitle });
7203
7203
  }
7204
7204
  else if (lib.isStaticImageMenuItem(item)) {
7205
- return (React__default$1["default"].createElement("div", { className: "chat-menu-item-static" },
7205
+ return (React__default$1["default"].createElement("div", { key: i, className: "chat-menu-item-static" },
7206
7206
  React__default$1["default"].createElement("img", { style: {
7207
7207
  maxHeight: "100%",
7208
7208
  maxWidth: "auto"
7209
7209
  }, src: item.imageUrl, alt: "Menu Item" })));
7210
7210
  }
7211
7211
  else if (lib.isStaticTextMenuItem(item)) {
7212
- return (React__default$1["default"].createElement("div", { className: "chat-menu-item-static" },
7212
+ return (React__default$1["default"].createElement("div", { key: i, className: "chat-menu-item-static" },
7213
7213
  React__default$1["default"].createElement("div", null,
7214
7214
  React__default$1["default"].createElement("div", null, item.title),
7215
7215
  React__default$1["default"].createElement("div", { className: "chat-menu-item-static--body" }, item.body))));
@@ -7376,7 +7376,7 @@ var ExternalLink = function (props) {
7376
7376
  var handleClick = React$1.useCallback(function (ev) {
7377
7377
  ev.preventDefault();
7378
7378
  }, []);
7379
- return (React__default$1["default"].createElement("a", { href: url, target: "_blank", rel: "noreferrer", className: props.className, onClick: handleClick }, getSvg()));
7379
+ return (React__default$1["default"].createElement("a", { href: url, "aria-label": "read more", target: "_blank", rel: "noreferrer", className: props.className, onClick: handleClick }, getSvg()));
7380
7380
  };
7381
7381
 
7382
7382
  function firstIndex(val, patterns) {
@@ -7489,7 +7489,7 @@ var SmartLink = function (props) {
7489
7489
  var handleClick = React$1.useCallback(function (ev) {
7490
7490
  ev.preventDefault();
7491
7491
  }, []);
7492
- return (React__default$1["default"].createElement("a", { href: url, target: "_blank", rel: "noreferrer", className: className, onClick: handleClick }, reduceLink(url, 40)));
7492
+ return (React__default$1["default"].createElement("a", { href: url, "aria-label": "read more", target: "_blank", rel: "noreferrer", className: className, onClick: handleClick }, reduceLink(url, 40)));
7493
7493
  };
7494
7494
 
7495
7495
  var ListItem = function (props) {
@@ -7666,6 +7666,7 @@ var ChatMarkdownMessage = function (props) {
7666
7666
  return (React__default$1["default"].createElement("div", { className: "chat-msg" },
7667
7667
  React__default$1["default"].createElement("div", { className: "chat-text-container" },
7668
7668
  React__default$1["default"].createElement(ChatMessageBubble, { owner: agentMessage ? "others" : "mine", hasTail: agentMessage && !props.sibling },
7669
+ React__default$1["default"].createElement("span", { className: "message-sr-only" }, "at " + props.time + (agentMessage ? " the bot said" : " the user said")),
7669
7670
  React__default$1["default"].createElement("div", { ref: ref })))));
7670
7671
  };
7671
7672
 
@@ -7673,6 +7674,7 @@ var ChatPermissionMessage = function (props) {
7673
7674
  var message = props.message, ctx = props.ctx;
7674
7675
  var user = ctx.user;
7675
7676
  var permissionRequest = message.msg.permissionRequest;
7677
+ var agentMessage = isAgent(props.message.user.nick);
7676
7678
  var author = message.user;
7677
7679
  var allowLabel = "Allow";
7678
7680
  var denyLabel = "Deny";
@@ -7739,6 +7741,7 @@ var ChatPermissionMessage = function (props) {
7739
7741
  return React__default$1["default"].createElement(React__default$1["default"].Fragment, null);
7740
7742
  }
7741
7743
  return (React__default$1["default"].createElement("div", { className: "chat-msg" },
7744
+ React__default$1["default"].createElement("span", { className: "message-sr-only" }, "at " + props.time + (agentMessage ? " the bot said" : " the user said")),
7742
7745
  React__default$1["default"].createElement("div", { className: "buttons-container" },
7743
7746
  React__default$1["default"].createElement(ActionButton, { label: allowLabel, addClass: "button", onClick: handleAllow }),
7744
7747
  React__default$1["default"].createElement(ActionButton, { label: denyLabel, addClass: "button", onClick: handleDeny }))));
@@ -7749,6 +7752,7 @@ var ChatTextMessage = function (props) {
7749
7752
  return (React__default$1["default"].createElement("div", { className: "chat-msg" },
7750
7753
  React__default$1["default"].createElement("div", { className: "chat-text-container" },
7751
7754
  React__default$1["default"].createElement(ChatMessageBubble, { owner: agentMessage ? "others" : "mine", hasTail: agentMessage && !props.sibling },
7755
+ React__default$1["default"].createElement("span", { className: "message-sr-only" }, "at " + props.time + (agentMessage ? " the bot said" : " the user said")),
7752
7756
  React__default$1["default"].createElement("span", null, props.message.msg.text)))));
7753
7757
  };
7754
7758
 
@@ -7776,17 +7780,19 @@ var ChatMessage = function (props) {
7776
7780
  return (React__default$1["default"].createElement(React__default$1["default"].Fragment, null,
7777
7781
  msg.text &&
7778
7782
  React__default$1["default"].createElement(ChatMessagePart, { showAvatar: avaKey === "text", user: user },
7779
- React__default$1["default"].createElement(ChatTextMessage, { message: props.message, sibling: props.sibling })),
7783
+ React__default$1["default"].createElement(ChatTextMessage, { message: props.message, sibling: props.sibling, time: props.time })),
7780
7784
  msg.html &&
7781
7785
  React__default$1["default"].createElement(ChatMessagePart, { showAvatar: avaKey === "html", user: user },
7782
- React__default$1["default"].createElement(ChatMarkdownMessage, { message: props.message, sibling: props.sibling, onOpenUrl: (_a = props.middlewareContext) === null || _a === void 0 ? void 0 : _a.openUrl })),
7786
+ React__default$1["default"].createElement(ChatMarkdownMessage, { message: props.message, sibling: props.sibling, time: props.time, onOpenUrl: (_a = props.middlewareContext) === null || _a === void 0 ? void 0 : _a.openUrl })),
7783
7787
  msg.displays && middleware && msg.displays.map(function (display, index) {
7784
7788
  var Middleware = middleware;
7785
- return React__default$1["default"].createElement(Middleware, { key: index, msg: display, ctx: props.middlewareContext });
7789
+ return (React__default$1["default"].createElement(React__default$1["default"].Fragment, null,
7790
+ React__default$1["default"].createElement("span", { className: "message-sr-only" }, "at " + props.time + " the bot said"),
7791
+ React__default$1["default"].createElement(Middleware, { key: index, msg: display, ctx: props.middlewareContext })));
7786
7792
  }),
7787
7793
  msg.permissionRequest &&
7788
7794
  React__default$1["default"].createElement(ChatMessagePart, { showAvatar: avaKey === "permissionRequest", user: user },
7789
- React__default$1["default"].createElement(ChatPermissionMessage, { message: props.message, sibling: props.sibling, ctx: props.middlewareContext }))));
7795
+ React__default$1["default"].createElement(ChatPermissionMessage, { message: props.message, sibling: props.sibling, ctx: props.middlewareContext, time: props.time }))));
7790
7796
  }
7791
7797
  return (React__default$1["default"].createElement(React__default$1["default"].Fragment, null));
7792
7798
  }
@@ -7986,7 +7992,7 @@ var ChatBranding = function (props) {
7986
7992
  };
7987
7993
 
7988
7994
  var DrawerBars = function (props) {
7989
- return (React__default$1["default"].createElement("div", { className: "drawer-bars", onClick: props.onToggle },
7995
+ return (React__default$1["default"].createElement("button", { className: "drawer-bars", onClick: props.onToggle },
7990
7996
  React__default$1["default"].createElement("div", { className: "drawer-bar bar1" }),
7991
7997
  React__default$1["default"].createElement("div", { className: "drawer-bar bar2" })));
7992
7998
  };
@@ -8011,7 +8017,7 @@ var SendIcon = function () {
8011
8017
 
8012
8018
  var SendButton = function (props) {
8013
8019
  return (React__default$1["default"].createElement(React__default$1["default"].Fragment, null, !props.sendButtonIcon ? (React__default$1["default"].createElement(IconButton_1, { className: "xappw-send-button ".concat(props.className || ""), onClick: props.onClick, icon: SendIcon })) : (React__default$1["default"].createElement("span", { className: "xappw-custom-send-button", onClick: props.onClick },
8014
- React__default$1["default"].createElement("img", { src: props.sendButtonIcon, alt: "", draggable: false })))));
8020
+ React__default$1["default"].createElement("img", { src: props.sendButtonIcon, alt: "Send button", draggable: false })))));
8015
8021
  };
8016
8022
 
8017
8023
  var Input = function (props) {
@@ -8063,7 +8069,7 @@ var Input = function (props) {
8063
8069
  }, [suggestion, onChange, onSuggestionCommand]);
8064
8070
  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 },
8065
8071
  React__default$1["default"].createElement("form", { className: "xappw-input-form", onSubmit: handleOnSubmit },
8066
- React__default$1["default"].createElement(RichInput_1, { key: "input", className: "xappw-input", placeholder: placeholder !== null && placeholder !== void 0 ? placeholder : "Type your question here...", onInput: onChange, onChange: onChange, onKeyDown: handleKeyDown,
8072
+ React__default$1["default"].createElement(RichInput_1, { key: "input", id: "chatWidgetInput", className: "xappw-input", placeholder: placeholder !== null && placeholder !== void 0 ? placeholder : "Type your question here...", onInput: onChange, onChange: onChange, onKeyDown: handleKeyDown,
8067
8073
  // onFocus={onFocus}
8068
8074
  value: value, spellCheck: true }),
8069
8075
  React__default$1["default"].createElement("div", { className: "xappw-input-form__buttons" },
@@ -8155,7 +8161,7 @@ var ChatFooter = function (props) {
8155
8161
  return (React__default$1["default"].createElement("div", { className: "chat-footer" },
8156
8162
  menuItems.length ?
8157
8163
  React__default$1["default"].createElement(React__default$1["default"].Fragment, null,
8158
- React__default$1["default"].createElement(ChatMenu, { opened: drawer, onItemClick: handleMenuItem, items: menuItems }),
8164
+ drawer && React__default$1["default"].createElement(ChatMenu, { opened: drawer, onItemClick: handleMenuItem, items: menuItems }),
8159
8165
  React__default$1["default"].createElement("div", { className: "chat-footer__menu-icon" },
8160
8166
  React__default$1["default"].createElement(DrawerBars, { onToggle: toggleDrawer }))) : React__default$1["default"].createElement(React__default$1["default"].Fragment, null),
8161
8167
  ((_j = suggestions.suggestions) === null || _j === void 0 ? void 0 : _j.length) > 0 && React__default$1["default"].createElement(Suggestions, { className: "xappw-chat-footer__suggestions", data: suggestions.suggestions, index: suggestions.index, onItemClick: handleItemClick, onItemUse: handleItemUse }),
@@ -8250,7 +8256,9 @@ var ChatRatingContainer = function (props) {
8250
8256
  var handleRate = React$1.useCallback(function (rating) {
8251
8257
  dispatch(sendChatRating(rating));
8252
8258
  }, [dispatch]);
8253
- return React__default$1["default"].createElement(ChatRating, { agent: props.agent, hasRating: props.hasRating, shouldDisplay: props.shouldDisplay, onRate: handleRate });
8259
+ return (React__default$1["default"].createElement(React__default$1["default"].Fragment, null,
8260
+ React__default$1["default"].createElement("span", { className: "message-sr-only" }, "at " + props.time + " system message"),
8261
+ React__default$1["default"].createElement(ChatRating, { agent: props.agent, hasRating: props.hasRating, shouldDisplay: props.shouldDisplay, onRate: handleRate })));
8254
8262
  };
8255
8263
 
8256
8264
  var dateFns = {};
@@ -30369,7 +30377,7 @@ function compileSlotValues(responseOutput, slots, replaceWhenUndefined) {
30369
30377
  }
30370
30378
 
30371
30379
  var FailureMessage = function (props) {
30372
- var agents = props.agents, text = props.text, delay = props.delay;
30380
+ var agents = props.agents, text = props.text, delay = props.delay, time = props.time;
30373
30381
  var _a = React$1.useState(delay), countdown = _a[0], setCountdown = _a[1];
30374
30382
  var agent_names = Object.values(agents).filter(function (agent) { return agent.requestFailed; });
30375
30383
  React$1.useEffect(function () {
@@ -30407,6 +30415,7 @@ var FailureMessage = function (props) {
30407
30415
  React__default$1["default"].createElement(ChatMessagePart, { user: agent.user, showAvatar: true },
30408
30416
  React__default$1["default"].createElement("div", { className: "chat-msg" },
30409
30417
  React__default$1["default"].createElement(ChatMessageBubble, { owner: "others", hasTail: true },
30418
+ React__default$1["default"].createElement("span", { className: "message-sr-only" }, "at " + time + " the bot said"),
30410
30419
  React__default$1["default"].createElement("span", null, failureMessage)))))));
30411
30420
  })));
30412
30421
  };
@@ -30475,12 +30484,14 @@ var OfflineForm = function (props) {
30475
30484
  return React__default$1["default"].createElement(MessageForm, { title: "Offline message card title", onSubmit: props.onSubmit });
30476
30485
  };
30477
30486
 
30478
- var OfflineFormContainer = function (_) {
30487
+ var OfflineFormContainer = function (props) {
30479
30488
  var dispatch = useChatServerDispatch();
30480
30489
  var handleSubmit = React$1.useCallback(function (data) {
30481
30490
  dispatch(sendOfflineMsg(data));
30482
30491
  }, [dispatch]);
30483
- return React__default$1["default"].createElement(OfflineForm, { onSubmit: handleSubmit });
30492
+ return (React__default$1["default"].createElement(React__default$1["default"].Fragment, null,
30493
+ React__default$1["default"].createElement("span", { className: "message-sr-only" }, "at " + props.time + " system message"),
30494
+ React__default$1["default"].createElement(OfflineForm, { onSubmit: handleSubmit })));
30484
30495
  };
30485
30496
 
30486
30497
  var PrechatForm = function (props) {
@@ -30493,7 +30504,7 @@ var PrechatForm = function (props) {
30493
30504
  return (React__default$1["default"].createElement(React__default$1["default"].Fragment, null, !sent && React__default$1["default"].createElement(MessageForm, { title: "Introduce yourself!", onSubmit: handleSubmit })));
30494
30505
  };
30495
30506
 
30496
- var PrechatFormContainer = function (_) {
30507
+ var PrechatFormContainer = function (props) {
30497
30508
  var dispatch = useChatServerDispatch();
30498
30509
  var handleSubmit = React$1.useCallback(function (data) {
30499
30510
  // Don't send empty messages
@@ -30505,7 +30516,9 @@ var PrechatFormContainer = function (_) {
30505
30516
  }));
30506
30517
  dispatch(executeAction(data.message));
30507
30518
  }, [dispatch]);
30508
- return React__default$1["default"].createElement(PrechatForm, { onSubmit: handleSubmit });
30519
+ return (React__default$1["default"].createElement(React__default$1["default"].Fragment, null,
30520
+ React__default$1["default"].createElement("span", { className: "message-sr-only" }, "at " + props.time + " system message"),
30521
+ React__default$1["default"].createElement(PrechatForm, { onSubmit: handleSubmit })));
30509
30522
  };
30510
30523
 
30511
30524
  var defaultProps$1 = {
@@ -30541,6 +30554,7 @@ function getMessageByType(msg) {
30541
30554
  }
30542
30555
  var SystemMessage = function (props) {
30543
30556
  return (React__default$1["default"].createElement("div", { className: "system-msg-container" },
30557
+ React__default$1["default"].createElement("span", { className: "message-sr-only" }, "at " + props.time + " system message"),
30544
30558
  React__default$1["default"].createElement("span", { className: "system-msg" }, getMessageByType(props.message))));
30545
30559
  };
30546
30560
  function convertToSentenceCase(s) {
@@ -30605,6 +30619,8 @@ var MessageList = function (props) {
30605
30619
  write: handleWrite,
30606
30620
  openUrl: onOpenUrl
30607
30621
  }); }, [handleSend, handleWrite, onOpenUrl]);
30622
+ var date = new Date();
30623
+ var time = date.getHours() + ':' + date.getMinutes();
30608
30624
  /**
30609
30625
  * Render the message based on widget state or message type. offline and pre chat are pseudo messages.
30610
30626
  *
@@ -30617,24 +30633,26 @@ var MessageList = function (props) {
30617
30633
  switch (msg.type) {
30618
30634
  case "chat.file":
30619
30635
  case "chat.msg":
30620
- 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) }));
30636
+ return (React__default$1["default"].createElement(ChatMessage, { key: msg.type + msg.timestamp, message: msg, sibling: sibling, agent: user, time: time, messageMiddleware: props.messageMiddleware, middlewareContext: ctxCache.resolve(user) }));
30621
30637
  case "chat.failureMsg":
30622
- return (React__default$1["default"].createElement(FailureMessage, __assign({ key: msg.type + msg.timestamp, agents: props.agents }, msg.failureMsg)));
30638
+ return (React__default$1["default"].createElement(FailureMessage, __assign({ key: msg.type + msg.timestamp, agents: props.agents, time: time }, msg.failureMsg)));
30623
30639
  case "chat.memberjoin":
30624
30640
  case "chat.memberleave":
30625
30641
  case "chat.rating":
30626
30642
  case "chat.typing":
30627
- return (React__default$1["default"].createElement(SystemMessage, { key: msg.type + msg.timestamp, message: msg }));
30643
+ return (React__default$1["default"].createElement(SystemMessage, { key: msg.type + msg.timestamp, time: time, message: msg }));
30628
30644
  case "chat.request.rating":
30629
- return (React__default$1["default"].createElement(ChatRatingContainer, { key: msg.type + msg.timestamp, agent: user, hasRating: props.hasRating, shouldDisplay: msg.timestamp === props.lastRatingRequestTimestamp }));
30645
+ return (React__default$1["default"].createElement(ChatRatingContainer, { key: msg.type + msg.timestamp, agent: user, hasRating: props.hasRating, time: time, shouldDisplay: msg.timestamp === props.lastRatingRequestTimestamp }));
30630
30646
  case "chat.offline":
30631
- return React__default$1["default"].createElement(OfflineFormContainer, { key: "offline-".concat(msg.timestamp) });
30647
+ return React__default$1["default"].createElement(OfflineFormContainer, { key: "offline-".concat(msg.timestamp), time: time });
30632
30648
  case "chat.prechat":
30633
- return React__default$1["default"].createElement(PrechatFormContainer, { key: "prechat" });
30649
+ return React__default$1["default"].createElement(PrechatFormContainer, { key: "prechat", time: time });
30634
30650
  default:
30635
- return React__default$1["default"].createElement("div", { key: +new Date() },
30636
- "Unhandled message: ",
30637
- JSON.stringify(msg));
30651
+ return (React__default$1["default"].createElement(React__default$1["default"].Fragment, null,
30652
+ React__default$1["default"].createElement("span", { className: "message-sr-only" }, "at " + time + " system message"),
30653
+ React__default$1["default"].createElement("div", { key: +new Date() },
30654
+ "Unhandled message: ",
30655
+ JSON.stringify(msg))));
30638
30656
  }
30639
30657
  }
30640
30658
  /**
@@ -30671,15 +30689,15 @@ var ServerOffline = function () {
30671
30689
  };
30672
30690
 
30673
30691
  var CancelButton = function (props) {
30674
- return React__default$1["default"].createElement("div", { id: "xapp-widget-close", className: "cancel-button", onClick: props.onClick });
30692
+ return React__default$1["default"].createElement("button", { id: "xapp-widget-close", className: "cancel-button", onClick: props.onClick });
30675
30693
  };
30676
30694
 
30677
30695
  var MinimizeButton = function (props) {
30678
- return (React__default$1["default"].createElement("div", { id: "xapp-widget-minimize", className: "minimize-button ".concat(props.showInRight ? "positionRight" : ""), onClick: props.onClick }));
30696
+ return (React__default$1["default"].createElement("button", { id: "xapp-widget-minimize", className: "minimize-button ".concat(props.showInRight ? "positionRight" : ""), onClick: props.onClick }));
30679
30697
  };
30680
30698
 
30681
30699
  var RefreshButton = function (props) {
30682
- return (React__default$1["default"].createElement("div", { id: "xapp-widget-refresh", className: "refresh-button ".concat(props.showInRight ? "positionRight" : props.showInLeft ? "positionLeft" : ""), onClick: props.onClick }));
30700
+ return (React__default$1["default"].createElement("button", { id: "xapp-widget-refresh", className: "refresh-button ".concat(props.showInRight ? "positionRight" : props.showInLeft ? "positionLeft" : ""), onClick: props.onClick }));
30683
30701
  };
30684
30702
 
30685
30703
  var DEFAULT_STATUS_CONFIG = {
@@ -30931,7 +30949,7 @@ function getButtonStyle(style) {
30931
30949
  });
30932
30950
  }
30933
30951
  function getMenuItemStyle(style) {
30934
- return union(getTextStyle(style === null || style === void 0 ? void 0 : style.text), withPrefix("subtitle-", getTextStyle(style.subtitle)), getBorderStyle(style.border), getBackgroundStyle(style === null || style === void 0 ? void 0 : style.background), single("height", style === null || style === void 0 ? void 0 : style.height));
30952
+ return union(getTextStyle(style === null || style === void 0 ? void 0 : style.text), withPrefix("subtitle-", getTextStyle(style === null || style === void 0 ? void 0 : style.subtitle)), getBorderStyle(style === null || style === void 0 ? void 0 : style.border), getBackgroundStyle(style === null || style === void 0 ? void 0 : style.background), single("height", style === null || style === void 0 ? void 0 : style.height));
30935
30953
  }
30936
30954
  function getMenuStyle(style) {
30937
30955
  return union(withPrefix("item-", getMenuItemStyle(style === null || style === void 0 ? void 0 : style.item)));
@@ -31042,6 +31060,13 @@ var ChatWidget = function (props) {
31042
31060
  }, [staticMode]);
31043
31061
  React$1.useEffect(function () {
31044
31062
  var _a;
31063
+ document.addEventListener('keydown', function (event) {
31064
+ var body = document.getElementsByTagName("body")[0];
31065
+ body.tabIndex = -1;
31066
+ if (event.key === "Escape") {
31067
+ body.focus();
31068
+ }
31069
+ });
31045
31070
  if (checkSessionExpiration(chatState === null || chatState === void 0 ? void 0 : chatState.sessionExpiration, (_a = chatState === null || chatState === void 0 ? void 0 : chatState.chats[chatState.chats.length - 1]) === null || _a === void 0 ? void 0 : _a.timestamp, chatState === null || chatState === void 0 ? void 0 : chatState.lastTimestamp)) {
31046
31071
  innerDispatch(reset());
31047
31072
  }
@@ -31112,6 +31137,9 @@ var ChatWidget = function (props) {
31112
31137
  function chatButtonOnClick() {
31113
31138
  set$1("opened", true);
31114
31139
  setVisible(true);
31140
+ setTimeout(function () {
31141
+ document.getElementById("chatWidgetInput").focus();
31142
+ }, 100);
31115
31143
  }
31116
31144
  var isOffline = chatState.accountStatus === "offline" && !chatState.isChatting;
31117
31145
  var messages = chatState && chatState.chats;