@cognigy/webchat 3.49.0 → 3.51.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
1
  /*!
2
- * webchat.esm.js v3.49.0
3
- * https://github.com/Cognigy/Webchat/tree/v3.49.0
4
- * https://github.com/Cognigy/Webchat/tree/v3.49.0/OSS_LICENSES.txt
2
+ * webchat.esm.js v3.51.0
3
+ * https://github.com/Cognigy/Webchat/tree/v3.51.0
4
+ * https://github.com/Cognigy/Webchat/tree/v3.51.0/OSS_LICENSES.txt
5
5
  */
6
6
  import * as __WEBPACK_EXTERNAL_MODULE_react__ from "react";
7
7
  import * as __WEBPACK_EXTERNAL_MODULE_react_dom_7dac9eee__ from "react-dom";
@@ -35390,17 +35390,19 @@ const DeleteConfirmModal = props => {
35390
35390
  cancelButtonBackground,
35391
35391
  confirmButtonBackground
35392
35392
  } = props;
35393
+
35394
+ // Focus the safe default (Cancel) action via the Modal's deferred focus
35395
+ // path, not React's autoFocus: autoFocus fires in the same task that
35396
+ // inserts the dialog subtree, and VoiceOver then reads a stale
35397
+ // accessibility tree — the dialog role/title and the focused button are
35398
+ // never announced (CGY-3274). The deferral lets the tree settle first.
35399
+ const cancelButtonRef = react__WEBPACK_IMPORTED_MODULE_0__["default"].useRef(null);
35393
35400
  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__["default"].createElement(_Modal__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A, {
35394
35401
  footer: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__["default"].createElement(react__WEBPACK_IMPORTED_MODULE_0__["default"].Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__["default"].createElement(CancelButton, {
35402
+ ref: cancelButtonRef,
35395
35403
  className: "webchat-delete-confirmation-cancel-button",
35396
35404
  onClick: () => onClose(false),
35397
35405
  background: cancelButtonBackground
35398
- // Intentional: move focus to the safe default (Cancel) action
35399
- // when this confirmation modal opens — expected dialog focus
35400
- // management, not an unexpected focus shift.
35401
- // eslint-disable-next-line jsx-a11y/no-autofocus
35402
- ,
35403
- autoFocus: true
35404
35406
  }, cancelText), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__["default"].createElement(DeleteConfirmation, {
35405
35407
  className: "webchat-delete-confirmation-confirm-button",
35406
35408
  onClick: onConfirmDelete,
@@ -35408,7 +35410,8 @@ const DeleteConfirmModal = props => {
35408
35410
  }, confirmText)),
35409
35411
  isOpen: isOpen,
35410
35412
  onClose: onClose,
35411
- title: title
35413
+ title: title,
35414
+ initialFocusRef: cancelButtonRef
35412
35415
  }, children);
35413
35416
  };
35414
35417
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (DeleteConfirmModal);
@@ -35774,21 +35777,22 @@ const Modal = ({
35774
35777
  /* harmony import */ var _plugins_input_file_DropZone__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(1339);
35775
35778
  /* harmony import */ var react_transition_group__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(66492);
35776
35779
  /* harmony import */ var _presentational_TeaserMessage__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(49888);
35777
- /* harmony import */ var _functional_xapp_overlay_XAppOverlay__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(12381);
35778
- /* harmony import */ var _utils_sourceMapping__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(25091);
35779
- /* harmony import */ var _plugins_speech_output__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(83679);
35780
- /* harmony import */ var _utils_filter_out_control_commands__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(70562);
35781
- /* harmony import */ var _utils_isMobile__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(40794);
35782
- /* harmony import */ var _webchat_helper_handleMarkdown__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(71621);
35783
- /* harmony import */ var _presentational_previous_conversations_DeleteAllConversations__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(5196);
35784
- /* harmony import */ var _presentational_ScreenReaderLiveRegion__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(41426);
35785
- /* harmony import */ var _presentational_StatusLiveRegion__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(63813);
35786
- /* harmony import */ var _presentational_FreezeOnExit__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(97475);
35787
- /* harmony import */ var _presentational_HomeScreenAnnouncer__WEBPACK_IMPORTED_MODULE_53__ = __webpack_require__(55115);
35788
- /* harmony import */ var _utils_ai_agent_notice__WEBPACK_IMPORTED_MODULE_54__ = __webpack_require__(39191);
35789
- /* harmony import */ var _utils_screen_visibility__WEBPACK_IMPORTED_MODULE_55__ = __webpack_require__(48245);
35790
- /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_56__ = __webpack_require__(14176);
35791
- /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_56___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_56__);
35780
+ /* harmony import */ var _presentational_TeaserMessageAnnouncer__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(59359);
35781
+ /* harmony import */ var _functional_xapp_overlay_XAppOverlay__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(12381);
35782
+ /* harmony import */ var _utils_sourceMapping__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(25091);
35783
+ /* harmony import */ var _plugins_speech_output__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(83679);
35784
+ /* harmony import */ var _utils_filter_out_control_commands__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(70562);
35785
+ /* harmony import */ var _utils_isMobile__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(40794);
35786
+ /* harmony import */ var _webchat_helper_handleMarkdown__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(71621);
35787
+ /* harmony import */ var _presentational_previous_conversations_DeleteAllConversations__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(5196);
35788
+ /* harmony import */ var _presentational_ScreenReaderLiveRegion__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(41426);
35789
+ /* harmony import */ var _presentational_StatusLiveRegion__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(63813);
35790
+ /* harmony import */ var _presentational_FreezeOnExit__WEBPACK_IMPORTED_MODULE_53__ = __webpack_require__(97475);
35791
+ /* harmony import */ var _presentational_HomeScreenAnnouncer__WEBPACK_IMPORTED_MODULE_54__ = __webpack_require__(55115);
35792
+ /* harmony import */ var _utils_ai_agent_notice__WEBPACK_IMPORTED_MODULE_55__ = __webpack_require__(39191);
35793
+ /* harmony import */ var _utils_screen_visibility__WEBPACK_IMPORTED_MODULE_56__ = __webpack_require__(48245);
35794
+ /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_57__ = __webpack_require__(14176);
35795
+ /* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_57___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_57__);
35792
35796
  function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
35793
35797
 
35794
35798
 
@@ -35845,6 +35849,7 @@ function _extends() { return _extends = Object.assign ? Object.assign.bind() : f
35845
35849
 
35846
35850
 
35847
35851
 
35852
+
35848
35853
 
35849
35854
 
35850
35855
  const stylisPlugins = [(0,_utils_css__WEBPACK_IMPORTED_MODULE_8__/* .isolate */ .az)("[data-cognigy-webchat-root]")];
@@ -35897,9 +35902,6 @@ const DisconnectableContentWrapper = _emotion_styled__WEBPACK_IMPORTED_MODULE_3_
35897
35902
  flexDirection: "column",
35898
35903
  minHeight: 0
35899
35904
  });
35900
-
35901
- // `inert` is typed here because React 18's prop types don't know it yet;
35902
- // the string form ("") renders the bare attribute, and emotion forwards it.
35903
35905
  const RegularLayoutContentWrapper = _emotion_styled__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A.div(({
35904
35906
  theme
35905
35907
  }) => ({
@@ -35952,7 +35954,7 @@ class WebchatUI extends react__WEBPACK_IMPORTED_MODULE_0__["default"].PureCompon
35952
35954
  deleteConversationsModalState: false,
35953
35955
  liveContent: {},
35954
35956
  isMobile: false,
35955
- noticeSession: _utils_ai_agent_notice__WEBPACK_IMPORTED_MODULE_54__/* .INITIAL_NOTICE_SESSION */ .j_
35957
+ noticeSession: _utils_ai_agent_notice__WEBPACK_IMPORTED_MODULE_55__/* .INITIAL_NOTICE_SESSION */ .j_
35956
35958
  };
35957
35959
  unreadTitleIndicatorInterval = null;
35958
35960
  originalTitle = window.document.title;
@@ -35962,6 +35964,18 @@ class WebchatUI extends react__WEBPACK_IMPORTED_MODULE_0__["default"].PureCompon
35962
35964
  visibilityCheckCompleted = false;
35963
35965
  engagementMessageTimeout = null;
35964
35966
  ratingFocusTimeout = null;
35967
+ homeScreenExitFocusTimeout = null;
35968
+
35969
+ // Disarms the pending home-screen exit focus fallback. Also registered as
35970
+ // a capture-phase document pointerdown listener while the fallback is
35971
+ // armed, so a deliberate click/tap during the 450ms window cancels it.
35972
+ cancelHomeScreenExitFocusFallback = () => {
35973
+ if (this.homeScreenExitFocusTimeout) {
35974
+ clearTimeout(this.homeScreenExitFocusTimeout);
35975
+ this.homeScreenExitFocusTimeout = null;
35976
+ }
35977
+ document.removeEventListener("pointerdown", this.cancelHomeScreenExitFocusFallback, true);
35978
+ };
35965
35979
 
35966
35980
  /**
35967
35981
  * Announce keys of conversations whose AI-agent notice was already
@@ -35988,9 +36002,9 @@ class WebchatUI extends react__WEBPACK_IMPORTED_MODULE_0__["default"].PureCompon
35988
36002
  const secondaryColor = props?.config?.settings?.colors?.secondaryColor;
35989
36003
  const chatInterfaceColor = props?.config?.settings?.colors?.chatInterfaceColor;
35990
36004
  const sourceColorMapping = props?.config?.settings?.widgetSettings?.sourceColorMapping;
35991
- const overrideBotMessageColor = (0,_utils_sourceMapping__WEBPACK_IMPORTED_MODULE_44__/* .getSourceBackgroundColor */ .N)(sourceColorMapping?.bot, props?.config?.settings?.colors);
35992
- const overrideUserMessageColor = (0,_utils_sourceMapping__WEBPACK_IMPORTED_MODULE_44__/* .getSourceBackgroundColor */ .N)(sourceColorMapping?.user, props?.config?.settings?.colors);
35993
- const overrideAgentMessageColor = (0,_utils_sourceMapping__WEBPACK_IMPORTED_MODULE_44__/* .getSourceBackgroundColor */ .N)(sourceColorMapping?.agent, props?.config?.settings?.colors);
36005
+ const overrideBotMessageColor = (0,_utils_sourceMapping__WEBPACK_IMPORTED_MODULE_45__/* .getSourceBackgroundColor */ .N)(sourceColorMapping?.bot, props?.config?.settings?.colors);
36006
+ const overrideUserMessageColor = (0,_utils_sourceMapping__WEBPACK_IMPORTED_MODULE_45__/* .getSourceBackgroundColor */ .N)(sourceColorMapping?.user, props?.config?.settings?.colors);
36007
+ const overrideAgentMessageColor = (0,_utils_sourceMapping__WEBPACK_IMPORTED_MODULE_45__/* .getSourceBackgroundColor */ .N)(sourceColorMapping?.agent, props?.config?.settings?.colors);
35994
36008
  const overrideBotMessageBorderColor = sourceColorMapping?.bot === "user" ? "transparent" : null;
35995
36009
  const overrideUserMessageBorderColor = sourceColorMapping?.user === "bot" ? state.theme.black80 : null;
35996
36010
  const overrideAgentMessageBorderColor = sourceColorMapping?.agent === "user" ? "transparent" : null;
@@ -36094,14 +36108,14 @@ class WebchatUI extends react__WEBPACK_IMPORTED_MODULE_0__["default"].PureCompon
36094
36108
  evaluateNoticeSession(prevConversationsSnapshot) {
36095
36109
  const id = this.props.currentSession || "";
36096
36110
  this.setState(prev => ({
36097
- noticeSession: (0,_utils_ai_agent_notice__WEBPACK_IMPORTED_MODULE_54__/* .computeNoticeSession */ .Kr)(prev.noticeSession, id, prevConversationsSnapshot, this.props.hasRestoredPersistedHistory)
36111
+ noticeSession: (0,_utils_ai_agent_notice__WEBPACK_IMPORTED_MODULE_55__/* .computeNoticeSession */ .Kr)(prev.noticeSession, id, prevConversationsSnapshot, this.props.hasRestoredPersistedHistory)
36098
36112
  }));
36099
36113
  }
36100
36114
  handleNoticeIntroAnnounced = introKey => {
36101
36115
  this.announcedNoticeKeys.add(introKey);
36102
36116
  };
36103
36117
  getNoticeIntro() {
36104
- const text = (0,_utils_ai_agent_notice__WEBPACK_IMPORTED_MODULE_54__/* .getAIAgentNoticeIntroText */ .bu)({
36118
+ const text = (0,_utils_ai_agent_notice__WEBPACK_IMPORTED_MODULE_55__/* .getAIAgentNoticeIntroText */ .bu)({
36105
36119
  behavior: this.props.config.settings.behavior,
36106
36120
  showDisconnectOverlay: this.showDisconnectOverlay,
36107
36121
  noticeSession: this.state.noticeSession,
@@ -36117,12 +36131,12 @@ class WebchatUI extends react__WEBPACK_IMPORTED_MODULE_0__["default"].PureCompon
36117
36131
  componentDidMount() {
36118
36132
  const defaultMessagePlugins = [];
36119
36133
  if (this.props.ttsActive) {
36120
- defaultMessagePlugins.push(_plugins_speech_output__WEBPACK_IMPORTED_MODULE_45__/* ["default"] */ .A);
36134
+ defaultMessagePlugins.push(_plugins_speech_output__WEBPACK_IMPORTED_MODULE_46__/* ["default"] */ .A);
36121
36135
  }
36122
36136
  this.setState({
36123
36137
  inputPlugins: [...(this.props.inputPlugins || []), _plugins_input_base__WEBPACK_IMPORTED_MODULE_11__/* ["default"] */ .A],
36124
36138
  messagePlugins: [...(this.props.messagePlugins || []), ...defaultMessagePlugins],
36125
- isMobile: (0,_utils_isMobile__WEBPACK_IMPORTED_MODULE_47__/* .isMobileViewport */ .$)()
36139
+ isMobile: (0,_utils_isMobile__WEBPACK_IMPORTED_MODULE_48__/* .isMobileViewport */ .$)()
36126
36140
  });
36127
36141
  this.setupIconAnimationInterval();
36128
36142
 
@@ -36131,7 +36145,21 @@ class WebchatUI extends react__WEBPACK_IMPORTED_MODULE_0__["default"].PureCompon
36131
36145
  this.evaluateNoticeSession(this.props.prevConversations);
36132
36146
  window.addEventListener("resize", this.handleResize);
36133
36147
  }
36134
- async componentDidUpdate(prevProps, prevState) {
36148
+
36149
+ // Hiding the home screen applies `inert` to its root, which blurs any
36150
+ // focused descendant. This hook runs just before that DOM update — the
36151
+ // last moment to see whether focus is inside the home screen (user is
36152
+ // leaving it) or elsewhere (programmatic exit). componentDidUpdate arms
36153
+ // the exit-focus fallback only in the first case, so a programmatic exit
36154
+ // never has focus stolen.
36155
+ getSnapshotBeforeUpdate(prevProps) {
36156
+ if (prevProps.showHomeScreen && !this.props.showHomeScreen) {
36157
+ const homeScreenRoot = this.webchatWindowRef?.current?.querySelector(".webchat-homescreen-root");
36158
+ return !!homeScreenRoot?.contains(document.activeElement);
36159
+ }
36160
+ return null;
36161
+ }
36162
+ async componentDidUpdate(prevProps, prevState, focusWasInsideHomeScreen) {
36135
36163
  // When the webchat is opened, focus is moved to the first focusable element inside the webchat window.
36136
36164
  // This happens only if the currently focused element is the toggle button, ensuring no interruption to other interactions or auto-focus behavior.
36137
36165
  // This prevents focus loss when no element with auto-focus is found inside the webchat window.
@@ -36145,13 +36173,48 @@ class WebchatUI extends react__WEBPACK_IMPORTED_MODULE_0__["default"].PureCompon
36145
36173
  firstFocusable.focus();
36146
36174
  }
36147
36175
  }
36176
+
36177
+ // Leaving the home screen: `inert` on its root blurs the control that
36178
+ // triggered the exit (e.g. the just-clicked Start conversation button),
36179
+ // so focus can drop to document.body and Tab would restart at the top
36180
+ // of the host page (SC 2.4.3). Most exits re-focus on their own — the
36181
+ // privacy notice / previous conversations / chat options via
36182
+ // autoFocusScreenTitle, the chat screen via the message input's
36183
+ // autofocus — so this fallback checks late (450ms, after BaseInput's
36184
+ // 200ms autofocus and the Header's 200ms title focus, matching the
36185
+ // back-to-home timing) and only acts if focus is still on document.body
36186
+ // or stuck inside the hidden home screen. That is the case when
36187
+ // entering the chat screen with `disableInputAutofocus: true`.
36188
+ // It is armed only when the exit blurred focus out of the home screen
36189
+ // (the getSnapshotBeforeUpdate result), and a pointerdown anywhere
36190
+ // during the window disarms it — so a programmatic exit or a deliberate
36191
+ // click (e.g. on a non-focusable area of the host page) never has focus
36192
+ // pulled away.
36193
+ if (prevProps.showHomeScreen && !this.props.showHomeScreen && focusWasInsideHomeScreen) {
36194
+ this.cancelHomeScreenExitFocusFallback();
36195
+ document.addEventListener("pointerdown", this.cancelHomeScreenExitFocusFallback, true);
36196
+ this.homeScreenExitFocusTimeout = setTimeout(() => {
36197
+ this.cancelHomeScreenExitFocusFallback();
36198
+ const webchatWindowEl = this.webchatWindowRef?.current;
36199
+ if (!webchatWindowEl) return;
36200
+ const active = document.activeElement;
36201
+ const homeScreenRoot = webchatWindowEl.querySelector(".webchat-homescreen-root");
36202
+ if (active === document.body || homeScreenRoot?.contains(active)) {
36203
+ // Scoped to the header bar because id "webchatHeaderTitle" is
36204
+ // duplicated across Header, HomeScreen and TeaserMessage. The
36205
+ // Header is not rendered while the xApp overlay is open, so
36206
+ // fall back to the window's first focusable element.
36207
+ (webchatWindowEl.querySelector(".webchat-header-bar .webchat-header-title") ?? (0,_utils_find_focusable__WEBPACK_IMPORTED_MODULE_23__/* ["default"] */ .A)(webchatWindowEl).firstFocusable)?.focus();
36208
+ }
36209
+ }, 450);
36210
+ }
36148
36211
  if (prevProps.currentSession !== this.props.currentSession) {
36149
36212
  this.evaluateNoticeSession(prevProps.prevConversations);
36150
36213
  }
36151
36214
  if (prevProps.ttsActive !== this.props.ttsActive || prevProps.inputPlugins !== this.props.inputPlugins || prevProps.messagePlugins !== this.props.messagePlugins) {
36152
36215
  const defaultMessagePlugins = [];
36153
36216
  if (this.props.ttsActive) {
36154
- defaultMessagePlugins.push(_plugins_speech_output__WEBPACK_IMPORTED_MODULE_45__/* ["default"] */ .A);
36217
+ defaultMessagePlugins.push(_plugins_speech_output__WEBPACK_IMPORTED_MODULE_46__/* ["default"] */ .A);
36155
36218
  }
36156
36219
  this.setState({
36157
36220
  inputPlugins: [...(this.props.inputPlugins || []), _plugins_input_base__WEBPACK_IMPORTED_MODULE_11__/* ["default"] */ .A],
@@ -36201,7 +36264,7 @@ class WebchatUI extends react__WEBPACK_IMPORTED_MODULE_0__["default"].PureCompon
36201
36264
  // TODO: Add markdown rendering if there is valid markdown and renderMarkdown is enabled
36202
36265
  // adding react-markdown is blocked by updating React to v18
36203
36266
  if (!this.props.config.settings.widgetSettings.disableTeaserMarkdownRemoval) {
36204
- lastUnseenMessageText = (0,_webchat_helper_handleMarkdown__WEBPACK_IMPORTED_MODULE_48__/* .removeMarkdownChars */ .$)(lastUnseenMessageText);
36267
+ lastUnseenMessageText = (0,_webchat_helper_handleMarkdown__WEBPACK_IMPORTED_MODULE_49__/* .removeMarkdownChars */ .$)(lastUnseenMessageText);
36205
36268
  }
36206
36269
  this.setState({
36207
36270
  lastUnseenMessageText
@@ -36259,6 +36322,9 @@ class WebchatUI extends react__WEBPACK_IMPORTED_MODULE_0__["default"].PureCompon
36259
36322
  this.ratingFocusTimeout = null;
36260
36323
  }
36261
36324
 
36325
+ // also removes the fallback's document pointerdown listener
36326
+ this.cancelHomeScreenExitFocusFallback();
36327
+
36262
36328
  // Teardown icon animation interval
36263
36329
  if (this.iconAnimationIntervalHandle) {
36264
36330
  clearInterval(this.iconAnimationIntervalHandle);
@@ -36267,7 +36333,7 @@ class WebchatUI extends react__WEBPACK_IMPORTED_MODULE_0__["default"].PureCompon
36267
36333
  window.removeEventListener("resize", this.handleResize);
36268
36334
  }
36269
36335
  handleResize() {
36270
- const isMobile = (0,_utils_isMobile__WEBPACK_IMPORTED_MODULE_47__/* .isMobileViewport */ .$)();
36336
+ const isMobile = (0,_utils_isMobile__WEBPACK_IMPORTED_MODULE_48__/* .isMobileViewport */ .$)();
36271
36337
  if (isMobile !== this.state.isMobile) {
36272
36338
  this.setState({
36273
36339
  isMobile
@@ -36677,7 +36743,7 @@ class WebchatUI extends react__WEBPACK_IMPORTED_MODULE_0__["default"].PureCompon
36677
36743
  // while the webchat is open, so no `open` check is needed here.
36678
36744
  const {
36679
36745
  showHomeScreenView
36680
- } = (0,_utils_screen_visibility__WEBPACK_IMPORTED_MODULE_55__/* .getScreenVisibility */ .p)(this.props, isInforming);
36746
+ } = (0,_utils_screen_visibility__WEBPACK_IMPORTED_MODULE_56__/* .getScreenVisibility */ .p)(this.props, isInforming);
36681
36747
  const openChatAriaLabel = () => {
36682
36748
  if (open) return config.settings.customTranslations?.ariaLabels?.closeChat ?? "Close chat";
36683
36749
  const openChat = config.settings.customTranslations?.ariaLabels?.openChat ?? "Open chat";
@@ -36752,7 +36818,7 @@ class WebchatUI extends react__WEBPACK_IMPORTED_MODULE_0__["default"].PureCompon
36752
36818
  el.removeAttribute("inert");
36753
36819
  }
36754
36820
  }
36755
- }, !fullscreenMessage ? this.renderRegularLayout(isInforming) : this.renderFullscreenMessageLayout()), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__["default"].createElement(_presentational_StatusLiveRegion__WEBPACK_IMPORTED_MODULE_51__/* .StatusLiveRegion */ .t, null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__["default"].createElement(_presentational_HomeScreenAnnouncer__WEBPACK_IMPORTED_MODULE_53__/* ["default"] */ .A, {
36821
+ }, !fullscreenMessage ? this.renderRegularLayout(isInforming) : this.renderFullscreenMessageLayout()), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__["default"].createElement(_presentational_StatusLiveRegion__WEBPACK_IMPORTED_MODULE_52__/* .StatusLiveRegion */ .t, null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__["default"].createElement(_presentational_HomeScreenAnnouncer__WEBPACK_IMPORTED_MODULE_54__/* ["default"] */ .A, {
36756
36822
  active: showHomeScreenView,
36757
36823
  label: config.settings.customTranslations?.ariaLabels?.homeScreen ?? "Chat window home screen"
36758
36824
  }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__["default"].createElement(_presentational_DisconnectOverlay__WEBPACK_IMPORTED_MODULE_20__/* ["default"] */ .A, {
@@ -36762,7 +36828,11 @@ class WebchatUI extends react__WEBPACK_IMPORTED_MODULE_0__["default"].PureCompon
36762
36828
  isConnecting: !!this.props.connecting,
36763
36829
  onClose: handleClose,
36764
36830
  config: config
36765
- })), !disableToggleButton && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__["default"].createElement("div", null,
36831
+ })), !disableToggleButton && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__["default"].createElement("div", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__["default"].createElement(_presentational_TeaserMessageAnnouncer__WEBPACK_IMPORTED_MODULE_43__/* ["default"] */ .A, {
36832
+ active: !!lastUnseenMessageText && !open,
36833
+ text: lastUnseenMessageText,
36834
+ label: config.settings.customTranslations?.ariaLabels?.newMessagePreview ?? "New message preview"
36835
+ }),
36766
36836
  // Show the message teaser if there is a last bot message and the webchat is closed
36767
36837
  lastUnseenMessageText && !open && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__["default"].createElement(_presentational_TeaserMessage__WEBPACK_IMPORTED_MODULE_42__/* .TeaserMessage */ .I, {
36768
36838
  messageText: lastUnseenMessageText,
@@ -36792,7 +36862,7 @@ class WebchatUI extends react__WEBPACK_IMPORTED_MODULE_0__["default"].PureCompon
36792
36862
  onClick: this.handleFabClick
36793
36863
  }, webchatToggleProps, {
36794
36864
  type: "button",
36795
- className: classnames__WEBPACK_IMPORTED_MODULE_56___default()("webchat-toggle-button burst", config.settings?.layout?.iconAnimation),
36865
+ className: classnames__WEBPACK_IMPORTED_MODULE_57___default()("webchat-toggle-button burst", config.settings?.layout?.iconAnimation),
36796
36866
  id: "webchatWindowToggleButton",
36797
36867
  "aria-label": openChatAriaLabel(),
36798
36868
  ref: this.chatToggleButtonRef,
@@ -36930,7 +37000,7 @@ class WebchatUI extends react__WEBPACK_IMPORTED_MODULE_0__["default"].PureCompon
36930
37000
  onAcceptTerms: handleAcceptTerms,
36931
37001
  isHomeScreenEnabled: isHomeScreenEnabled
36932
37002
  });
36933
- if (isXAppOverlayOpen) return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__["default"].createElement(_functional_xapp_overlay_XAppOverlay__WEBPACK_IMPORTED_MODULE_43__/* ["default"] */ .A, null);
37003
+ if (isXAppOverlayOpen) return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__["default"].createElement(_functional_xapp_overlay_XAppOverlay__WEBPACK_IMPORTED_MODULE_44__/* ["default"] */ .A, null);
36934
37004
  if (showPrevConversations) return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__["default"].createElement(_presentational_previous_conversations_ConversationsList__WEBPACK_IMPORTED_MODULE_33__/* .PrevConversationsList */ .K, {
36935
37005
  conversations: this.props.prevConversations,
36936
37006
  onSetShowPrevConversations: onSetShowPrevConversations,
@@ -36969,7 +37039,7 @@ class WebchatUI extends react__WEBPACK_IMPORTED_MODULE_0__["default"].PureCompon
36969
37039
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__["default"].createElement("h3", {
36970
37040
  className: "sr-only",
36971
37041
  id: "webchatChatHistoryHeading"
36972
- }, config.settings.customTranslations?.ariaLabels?.chatHistory ?? "Chat history"), this.renderHistory()), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__["default"].createElement(_presentational_ScreenReaderLiveRegion__WEBPACK_IMPORTED_MODULE_50__/* ["default"] */ .A, {
37042
+ }, config.settings.customTranslations?.ariaLabels?.chatHistory ?? "Chat history"), this.renderHistory()), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__["default"].createElement(_presentational_ScreenReaderLiveRegion__WEBPACK_IMPORTED_MODULE_51__/* ["default"] */ .A, {
36973
37043
  liveContent: this.state.liveContent,
36974
37044
  intro: this.getNoticeIntro(),
36975
37045
  onIntroAnnounced: this.handleNoticeIntroAnnounced
@@ -37000,7 +37070,7 @@ class WebchatUI extends react__WEBPACK_IMPORTED_MODULE_0__["default"].PureCompon
37000
37070
  const {
37001
37071
  showEnabledHomeScreen,
37002
37072
  showChatScreen
37003
- } = (0,_utils_screen_visibility__WEBPACK_IMPORTED_MODULE_55__/* .getScreenVisibility */ .p)(this.props, isInforming);
37073
+ } = (0,_utils_screen_visibility__WEBPACK_IMPORTED_MODULE_56__/* .getScreenVisibility */ .p)(this.props, isInforming);
37004
37074
  const isChatOptionsButtonVisible = config.settings.chatOptions.enabled && showChatScreen;
37005
37075
  const hideBackButton = showChatScreen && !isHomeScreenEnabled;
37006
37076
  const showDeleteAllConversationButton = !!((config.settings.privacyNotice.enabled && this.props.hasAcceptedTerms || !config.settings.privacyNotice.enabled) && config.settings.homeScreen.previousConversations.enableDeleteAllConversations && showPrevConversations && Object.keys(this.props.prevConversations).length);
@@ -37072,9 +37142,9 @@ class WebchatUI extends react__WEBPACK_IMPORTED_MODULE_0__["default"].PureCompon
37072
37142
  className: "webchat-regular-layout-content",
37073
37143
  "aria-hidden": isRegularLayoutActiveView ? undefined : true,
37074
37144
  inert: isRegularLayoutActiveView ? undefined : ""
37075
- }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__["default"].createElement(_presentational_FreezeOnExit__WEBPACK_IMPORTED_MODULE_52__/* ["default"] */ .A, {
37145
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__["default"].createElement(_presentational_FreezeOnExit__WEBPACK_IMPORTED_MODULE_53__/* ["default"] */ .A, {
37076
37146
  active: isRegularLayoutActiveView
37077
- }, getRegularLayoutContent()), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__["default"].createElement(_presentational_previous_conversations_DeleteAllConversations__WEBPACK_IMPORTED_MODULE_49__/* ["default"] */ .A, {
37147
+ }, getRegularLayoutContent()), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__["default"].createElement(_presentational_previous_conversations_DeleteAllConversations__WEBPACK_IMPORTED_MODULE_50__/* ["default"] */ .A, {
37078
37148
  config: config,
37079
37149
  isOpen: this.state.showDeleteAllConversationsModal,
37080
37150
  onOpenChange: (open, confirmDelete) => {
@@ -37137,7 +37207,7 @@ class WebchatUI extends react__WEBPACK_IMPORTED_MODULE_0__["default"].PureCompon
37137
37207
 
37138
37208
  // Find privacy message and remove it from the messages list (these message types are not displayed in the chat log).
37139
37209
  // If we do not remove, it will cause the collatation of the first user message.
37140
- const messagesExcludingPrivacyMessage = (0,_utils_filter_out_control_commands__WEBPACK_IMPORTED_MODULE_46__/* ["default"] */ .A)(messages, ["acceptPrivacyPolicy"]);
37210
+ const messagesExcludingPrivacyMessage = (0,_utils_filter_out_control_commands__WEBPACK_IMPORTED_MODULE_47__/* ["default"] */ .A)(messages, ["acceptPrivacyPolicy"]);
37141
37211
 
37142
37212
  // Filter messages based on progressive rendering settings
37143
37213
  const visibleMessages = progressiveMessageRendering ? messagesExcludingPrivacyMessage.filter(message => {
@@ -37158,7 +37228,7 @@ class WebchatUI extends react__WEBPACK_IMPORTED_MODULE_0__["default"].PureCompon
37158
37228
  variant: "body-regular",
37159
37229
  component: "div",
37160
37230
  className: "webchat-log-ai-agent-notice-text"
37161
- }, AIAgentNoticeText || _utils_ai_agent_notice__WEBPACK_IMPORTED_MODULE_54__/* .DEFAULT_AI_AGENT_NOTICE_TEXT */ .S5), visibleMessages.map((message, index) => {
37231
+ }, AIAgentNoticeText || _utils_ai_agent_notice__WEBPACK_IMPORTED_MODULE_55__/* .DEFAULT_AI_AGENT_NOTICE_TEXT */ .S5), visibleMessages.map((message, index) => {
37162
37232
  // Lookahead if there is a user reply that includes text or attachments
37163
37233
  const hasReply = visibleMessages.slice(index + 1).some(message => {
37164
37234
  const isUser = message.source === "user";
@@ -37195,7 +37265,8 @@ class WebchatUI extends react__WEBPACK_IMPORTED_MODULE_0__["default"].PureCompon
37195
37265
  active: isTyping,
37196
37266
  delay: messageDelay,
37197
37267
  direction: config?.settings?.widgetSettings?.sourceDirectionMapping?.bot || "incoming",
37198
- disableBorder: config?.settings?.layout?.disableBotOutputBorder
37268
+ disableBorder: config?.settings?.layout?.disableBotOutputBorder,
37269
+ announcementText: config?.settings?.customTranslations?.ariaLabels?.typingIndicator
37199
37270
  }));
37200
37271
  }
37201
37272
  }
@@ -37787,10 +37858,23 @@ const QueueUpdates = props => {
37787
37858
  /* harmony import */ var _emotion_styled__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(84937);
37788
37859
  /* harmony import */ var _cognigy_chat_components__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(2854);
37789
37860
  /* harmony import */ var _utils_is_mounted__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(3657);
37861
+ /* harmony import */ var _presentational_SrOnlyLiveRegion__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(65766);
37862
+
37863
+
37790
37864
 
37791
37865
 
37792
37866
 
37867
+ // How long typing must be continuously visible before it is announced to
37868
+ // screen readers (CGY-3146). Short bursts stay silent on purpose: when the
37869
+ // reply lands within this window, its own announcement (through
37870
+ // <ScreenReaderLiveRegion>) supersedes a "typing" heads-up, which would only
37871
+ // add noise to the polite queue.
37872
+ const ANNOUNCE_DELAY_MS = 2000;
37793
37873
 
37874
+ // Module-global so every typing session gets a fresh LiveRegionMessage id —
37875
+ // a repeated announcement with the same text still needs a new node to be
37876
+ // re-announced (see SrOnlyLiveRegion's keying).
37877
+ let announcementCounter = 0;
37794
37878
  const ChatTypingIndicator = (0,_emotion_styled__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(_cognigy_chat_components__WEBPACK_IMPORTED_MODULE_2__/* .TypingIndicator */ .Vp)({
37795
37879
  marginBlock: 0
37796
37880
  });
@@ -37802,7 +37886,8 @@ const TypingIndicator = props => {
37802
37886
  active,
37803
37887
  delay,
37804
37888
  direction,
37805
- disableBorder
37889
+ disableBorder,
37890
+ announcementText
37806
37891
  } = props;
37807
37892
  const isMounted = (0,_utils_is_mounted__WEBPACK_IMPORTED_MODULE_3__/* .useIsMounted */ .a)();
37808
37893
 
@@ -37817,6 +37902,7 @@ const TypingIndicator = props => {
37817
37902
  * -----++++++++++++++++++++++--------++++++++-
37818
37903
  */
37819
37904
  const [isVisible, setIsVisible] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(active);
37905
+ const [announcement, setAnnouncement] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);
37820
37906
  (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
37821
37907
  let timeout;
37822
37908
  if (active) {
@@ -37830,11 +37916,51 @@ const TypingIndicator = props => {
37830
37916
  if (timeout) clearTimeout(timeout);
37831
37917
  };
37832
37918
  }, [active]);
37833
- if (!isVisible) return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__["default"].createElement(HiddenChatTypingIndicator, null);
37834
- return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__["default"].createElement(ChatTypingIndicator, {
37919
+
37920
+ // Read at fire time through a ref so a translations/config update while
37921
+ // typing is visible neither restarts the delay nor emits a duplicate
37922
+ // announcement mid-session.
37923
+ const announcementTextRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(announcementText);
37924
+ announcementTextRef.current = announcementText;
37925
+
37926
+ // Announce a sustained typing session once (WCAG 4.1.3 Status Messages).
37927
+ //
37928
+ // The delay counts continuous typing ("active"): typing stopping (typingOff,
37929
+ // or an output removing the indicator) cancels the pending announcement,
37930
+ // resuming restarts it. The indicator's visible hide tail (`delay`) is not
37931
+ // typing, so nothing can be announced after the reply has already landed.
37932
+ //
37933
+ // The emitted announcement lives as long as the indicator is visible: at
37934
+ // most one per visible session, so typing flapping off/on between queued
37935
+ // delayed messages of one bot turn doesn't re-announce. When the indicator
37936
+ // hides, the text is removed silently (removals aren't announced) so it
37937
+ // can't be read later as stale status. Typing-stopped itself is not
37938
+ // announced — the arriving message covers it.
37939
+ const hasAnnouncedRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(false);
37940
+ (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
37941
+ if (isVisible) return;
37942
+ hasAnnouncedRef.current = false;
37943
+ setAnnouncement(null);
37944
+ }, [isVisible]);
37945
+ (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
37946
+ if (!active || hasAnnouncedRef.current) return;
37947
+ const timeout = setTimeout(() => {
37948
+ hasAnnouncedRef.current = true;
37949
+ setAnnouncement({
37950
+ id: `typing-${++announcementCounter}`,
37951
+ text: announcementTextRef.current ?? "A reply is being typed"
37952
+ });
37953
+ }, ANNOUNCE_DELAY_MS);
37954
+ return () => clearTimeout(timeout);
37955
+ }, [active]);
37956
+ return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__["default"].createElement(react__WEBPACK_IMPORTED_MODULE_0__["default"].Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__["default"].createElement(_presentational_SrOnlyLiveRegion__WEBPACK_IMPORTED_MODULE_4__/* .SrOnlyLiveRegion */ .Y, {
37957
+ id: "webchatTypingIndicatorLiveRegion",
37958
+ role: "status",
37959
+ message: announcement
37960
+ }), isVisible ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__["default"].createElement(ChatTypingIndicator, {
37835
37961
  direction: direction,
37836
37962
  disableBorder: disableBorder
37837
- });
37963
+ }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__["default"].createElement(HiddenChatTypingIndicator, null));
37838
37964
  };
37839
37965
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (TypingIndicator);
37840
37966
 
@@ -40135,74 +40261,90 @@ const HomeScreen = props => {
40135
40261
  }
40136
40262
  }, []);
40137
40263
 
40138
- // Get all focusable elemnents inside homeScreen root and set tabindex to -1, if the homescreen is visually hidden
40264
+ // Fallback for browsers without `inert` support (CGY-3278): toggle tabindex
40265
+ // on all interactive elements while the home screen is visually hidden.
40266
+ // Uses focusableIgnoringInert because the plain `focusable` list skips
40267
+ // [inert] subtrees — which the hidden home screen root is.
40139
40268
  (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
40140
40269
  const tabIndex = showHomeScreen ? 0 : -1;
40141
40270
  if (homeScreenRef.current) {
40142
40271
  const {
40143
- focusable
40272
+ focusableIgnoringInert
40144
40273
  } = (0,_utils_find_focusable__WEBPACK_IMPORTED_MODULE_11__/* ["default"] */ .A)(homeScreenRef.current);
40145
- focusable.forEach(el => {
40274
+ focusableIgnoringInert.forEach(el => {
40146
40275
  el.setAttribute("tabindex", tabIndex.toString());
40147
40276
  });
40148
40277
  }
40149
40278
  }, [showHomeScreen]);
40150
- return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__["default"].createElement(HomeScreenRoot, {
40151
- className: "webchat-homescreen-root",
40152
- "aria-hidden": !showHomeScreen,
40153
- ref: homeScreenRef
40154
- }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__["default"].createElement("h2", {
40155
- className: "sr-only"
40156
- }, config.settings.customTranslations?.ariaLabels?.homeScreen ?? "Chat window home screen"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__["default"].createElement(HomeScreenContent, {
40157
- className: "webchat-homescreen-content",
40158
- settings: config?.settings
40159
- }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__["default"].createElement(HomeScreenHeader, {
40160
- className: "webchat-homescreen-header"
40161
- }, config?.settings?.layout?.logoUrl ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__["default"].createElement(_Header__WEBPACK_IMPORTED_MODULE_10__/* .Logo */ .g, {
40162
- src: config?.settings?.layout?.logoUrl,
40163
- className: "webchat-homescreen-header-logo",
40164
- alt: ""
40165
- }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__["default"].createElement(_assets_cognigy_ai_avatar_28px_svg__WEBPACK_IMPORTED_MODULE_9__/* ["default"] */ .A, {
40166
- className: "webchat-homescreen-header-cognigy-logo",
40167
- role: "img",
40168
- title: "Cognigy.AI Logo"
40169
- }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__["default"].createElement(HomeScreenHeaderIconButton, {
40170
- ref: closeButtonRef,
40171
- onClick: onClose,
40172
- className: "webchat-homescreen-close-button",
40173
- "aria-label": config.settings.customTranslations?.ariaLabels?.closeChat ?? "Close chat",
40174
- color: "primary"
40175
- }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__["default"].createElement(_assets_close_16px_svg__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A, null))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__["default"].createElement(FullWidthContainer, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__["default"].createElement(_Notifications__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .Ay, null)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__["default"].createElement(HomeScreenTitle, {
40176
- variant: "title1-semibold",
40177
- component: "h3",
40178
- className: "webchat-homescreen-title",
40179
- id: "webchatHeaderTitle"
40180
- }, homeScreen.welcomeText || "Welcome to the Cognigy Webchat"), homeScreen?.conversationStarters?.enabled && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__["default"].createElement(HomeScreenButtons, {
40181
- className: "webchat-homescreen-buttons"
40182
- }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__["default"].createElement(_cognigy_chat_components__WEBPACK_IMPORTED_MODULE_8__/* .ActionButtons */ .wr, {
40183
- size: "large",
40184
- showUrlIcon: true,
40185
- buttonClassName: "webchat-homescreen-button",
40186
- containerClassName: "webchat-homescreen-button-container",
40187
- payload: buttons,
40188
- config: config,
40189
- action: showHomeScreen ? onSendActionButtonMessage : undefined,
40190
- onEmitAnalytics: onEmitAnalytics
40191
- }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__["default"].createElement(HomeScreenActions, {
40192
- className: "webchat-homescreen-actions"
40193
- }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__["default"].createElement(StartButton, {
40194
- onClick: onStartConversation,
40195
- className: "webchat-homescreen-send-button",
40196
- "data-test": "webchat-start-chat-button"
40197
- }, config.settings.homeScreen.startConversationButtonText || "Start conversation"), config.settings.homeScreen.previousConversations.enabled && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__["default"].createElement(PrevConversationsButton, {
40198
- onClick: handleShowPrevConversations,
40199
- className: "webchat-homescreen-previous-conversation-button"
40200
- }, config.settings.homeScreen.previousConversations.buttonText || "Previous conversations"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__["default"].createElement(_branding_Branding__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .A, {
40201
- id: "cognigyHomeScreenBranding",
40202
- watermark: config?.settings?.layout?.watermark,
40203
- watermarkText: config?.settings?.layout?.watermarkText,
40204
- watermarkUrl: config?.settings?.layout?.watermarkUrl
40205
- })));
40279
+ return (
40280
+ /*#__PURE__*/
40281
+ // While another screen (privacy notice, previous conversations, chat,
40282
+ // chat options) is active, the home screen stays mounted behind it for
40283
+ // the exit/enter transition. `inert` removes it from the accessibility
40284
+ // tree, tab order and pointer events — aria-hidden alone still let NVDA
40285
+ // arrow-key browsing reach the content (CGY-3278, WCAG 1.3.2).
40286
+ // aria-hidden="true" stays as a fallback for browsers without inert
40287
+ // support. While visible, neither attribute is rendered:
40288
+ // aria-hidden="false" has inconsistent AT support and reads as hidden
40289
+ // to attribute-presence checks.
40290
+ react__WEBPACK_IMPORTED_MODULE_0__["default"].createElement(HomeScreenRoot, {
40291
+ className: "webchat-homescreen-root",
40292
+ "aria-hidden": showHomeScreen ? undefined : true,
40293
+ inert: showHomeScreen ? undefined : "",
40294
+ ref: homeScreenRef
40295
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__["default"].createElement("h2", {
40296
+ className: "sr-only"
40297
+ }, config.settings.customTranslations?.ariaLabels?.homeScreen ?? "Chat window home screen"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__["default"].createElement(HomeScreenContent, {
40298
+ className: "webchat-homescreen-content",
40299
+ settings: config?.settings
40300
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__["default"].createElement(HomeScreenHeader, {
40301
+ className: "webchat-homescreen-header"
40302
+ }, config?.settings?.layout?.logoUrl ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__["default"].createElement(_Header__WEBPACK_IMPORTED_MODULE_10__/* .Logo */ .g, {
40303
+ src: config?.settings?.layout?.logoUrl,
40304
+ className: "webchat-homescreen-header-logo",
40305
+ alt: ""
40306
+ }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__["default"].createElement(_assets_cognigy_ai_avatar_28px_svg__WEBPACK_IMPORTED_MODULE_9__/* ["default"] */ .A, {
40307
+ className: "webchat-homescreen-header-cognigy-logo",
40308
+ role: "img",
40309
+ title: "Cognigy.AI Logo"
40310
+ }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__["default"].createElement(HomeScreenHeaderIconButton, {
40311
+ ref: closeButtonRef,
40312
+ onClick: onClose,
40313
+ className: "webchat-homescreen-close-button",
40314
+ "aria-label": config.settings.customTranslations?.ariaLabels?.closeChat ?? "Close chat",
40315
+ color: "primary"
40316
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__["default"].createElement(_assets_close_16px_svg__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A, null))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__["default"].createElement(FullWidthContainer, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__["default"].createElement(_Notifications__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .Ay, null)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__["default"].createElement(HomeScreenTitle, {
40317
+ variant: "title1-semibold",
40318
+ component: "h3",
40319
+ className: "webchat-homescreen-title",
40320
+ id: "webchatHeaderTitle"
40321
+ }, homeScreen.welcomeText || "Welcome to the Cognigy Webchat"), homeScreen?.conversationStarters?.enabled && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__["default"].createElement(HomeScreenButtons, {
40322
+ className: "webchat-homescreen-buttons"
40323
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__["default"].createElement(_cognigy_chat_components__WEBPACK_IMPORTED_MODULE_8__/* .ActionButtons */ .wr, {
40324
+ size: "large",
40325
+ showUrlIcon: true,
40326
+ buttonClassName: "webchat-homescreen-button",
40327
+ containerClassName: "webchat-homescreen-button-container",
40328
+ payload: buttons,
40329
+ config: config,
40330
+ action: showHomeScreen ? onSendActionButtonMessage : undefined,
40331
+ onEmitAnalytics: onEmitAnalytics
40332
+ }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__["default"].createElement(HomeScreenActions, {
40333
+ className: "webchat-homescreen-actions"
40334
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__["default"].createElement(StartButton, {
40335
+ onClick: onStartConversation,
40336
+ className: "webchat-homescreen-send-button",
40337
+ "data-test": "webchat-start-chat-button"
40338
+ }, config.settings.homeScreen.startConversationButtonText || "Start conversation"), config.settings.homeScreen.previousConversations.enabled && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__["default"].createElement(PrevConversationsButton, {
40339
+ onClick: handleShowPrevConversations,
40340
+ className: "webchat-homescreen-previous-conversation-button"
40341
+ }, config.settings.homeScreen.previousConversations.buttonText || "Previous conversations"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__["default"].createElement(_branding_Branding__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .A, {
40342
+ id: "cognigyHomeScreenBranding",
40343
+ watermark: config?.settings?.layout?.watermark,
40344
+ watermarkText: config?.settings?.layout?.watermarkText,
40345
+ watermarkUrl: config?.settings?.layout?.watermarkUrl
40346
+ })))
40347
+ );
40206
40348
  };
40207
40349
 
40208
40350
  /***/ },
@@ -41311,8 +41453,7 @@ const TeaserMessage = props => {
41311
41453
  className: "webchat-teaser-message-root"
41312
41454
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__["default"].createElement(_UnreadMessagePreview__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A, {
41313
41455
  className: "webchat-teaser-message-bubble",
41314
- onClick: handleMessageClick,
41315
- "aria-live": "polite"
41456
+ onClick: handleMessageClick
41316
41457
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__["default"].createElement(TeaserMessageHeader, {
41317
41458
  className: "webchat-teaser-message-header"
41318
41459
  }, config?.settings?.layout?.logoUrl ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__["default"].createElement(HeaderLogo, {
@@ -41353,6 +41494,63 @@ const TeaserMessage = props => {
41353
41494
 
41354
41495
  /***/ },
41355
41496
 
41497
+ /***/ 59359
41498
+ (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
41499
+
41500
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
41501
+ /* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__)
41502
+ /* harmony export */ });
41503
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(51649);
41504
+ /* harmony import */ var _SrOnlyLiveRegion__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(65766);
41505
+
41506
+
41507
+ let teaserAnnouncementCounter = 0;
41508
+
41509
+ /**
41510
+ * Announces the teaser message popup when it appears next to the toggle
41511
+ * button (WCAG 4.1.3 Status Messages, CGY-3270). The teaser shows while the
41512
+ * webchat is CLOSED, so it cannot announce through <StatusLiveRegion> —
41513
+ * that region lives inside the open chat window and is unmounted at that
41514
+ * point. This announcer therefore owns a separate region that is mounted
41515
+ * with the toggle button for the whole page lifetime, so it pre-exists any
41516
+ * teaser (a live region only announces changes to a node already in the
41517
+ * accessibility tree — an `aria-live` attribute on the teaser bubble itself
41518
+ * mounts together with its content and is never voiced).
41519
+ *
41520
+ * role="status" (polite), not role="alert": a proactive teaser is advisory
41521
+ * and must not interrupt what the user is currently doing on the host page.
41522
+ *
41523
+ * Announces again when the preview text changes while the teaser is showing
41524
+ * (a newer bot message replaces the preview). Hiding the teaser (dismissed,
41525
+ * chat opened) clears the region silently so users browsing the page later
41526
+ * don't find stale preview text.
41527
+ */
41528
+ const TeaserMessageAnnouncer = ({
41529
+ active,
41530
+ text,
41531
+ label
41532
+ }) => {
41533
+ const [message, setMessage] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);
41534
+ (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
41535
+ if (!active || !text) {
41536
+ setMessage(null);
41537
+ return;
41538
+ }
41539
+ setMessage({
41540
+ id: `webchatTeaserMessage-${++teaserAnnouncementCounter}`,
41541
+ text: `${label}: ${text}`
41542
+ });
41543
+ }, [active, text, label]);
41544
+ return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__["default"].createElement(_SrOnlyLiveRegion__WEBPACK_IMPORTED_MODULE_1__/* .SrOnlyLiveRegion */ .Y, {
41545
+ id: "webchatTeaserMessageLiveRegion",
41546
+ role: "status",
41547
+ message: message
41548
+ });
41549
+ };
41550
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (TeaserMessageAnnouncer);
41551
+
41552
+ /***/ },
41553
+
41356
41554
  /***/ 52077
41357
41555
  (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
41358
41556
 
@@ -41377,10 +41575,28 @@ const StyledToggleButtonOuter = _emotion_styled__WEBPACK_IMPORTED_MODULE_1__/* [
41377
41575
  width: 30,
41378
41576
  height: 16,
41379
41577
  borderRadius: 15,
41380
- border: `1px solid ${theme.black80}`,
41578
+ // black50 (#808080) keeps the track boundary ≥ 3:1 on white (WCAG 1.4.11) — black80 was ~1.6:1
41579
+ border: `1px solid ${theme.black50}`,
41381
41580
  backgroundColor: theme.white,
41382
41581
  cursor: disabled ? "default" : "pointer",
41383
41582
  transition: "background-color 0.2s ease-in-out",
41583
+ // Invisible hit-area extension so the pointer target is ≥ 24x24px (WCAG 2.2 SC 2.5.8)
41584
+ position: "relative",
41585
+ "&::before": {
41586
+ content: '""',
41587
+ position: "absolute",
41588
+ top: -5,
41589
+ bottom: -5,
41590
+ left: 0,
41591
+ right: 0
41592
+ },
41593
+ "&:focus-visible": {
41594
+ outline: `2px solid ${theme.primaryColorFocus}`,
41595
+ outlineOffset: 2
41596
+ },
41597
+ "@media (prefers-reduced-motion: reduce)": {
41598
+ transition: "none"
41599
+ },
41384
41600
  "&.active": {
41385
41601
  backgroundColor: disabled ? theme.secondaryColorDisabled : theme.secondaryColor,
41386
41602
  "&:hover": {
@@ -41400,6 +41616,9 @@ const StyledToggleButtonInner = _emotion_styled__WEBPACK_IMPORTED_MODULE_1__/* [
41400
41616
  cursor: disabled ? "default" : "pointer",
41401
41617
  transform: isActive ? "translateX(14px)" : "translateX(0px)",
41402
41618
  transition: "transform 0.2s ease-in-out, background-color 0.2s ease-in-out",
41619
+ "@media (prefers-reduced-motion: reduce)": {
41620
+ transition: "none"
41621
+ },
41403
41622
  "&:hover": {
41404
41623
  backgroundColor: disabled ? theme.secondaryColorDisabled : theme.secondaryColorHover
41405
41624
  },
@@ -41416,10 +41635,13 @@ const ToggleButton = props => {
41416
41635
  isActive,
41417
41636
  className,
41418
41637
  disabled,
41638
+ id,
41419
41639
  "aria-labelledby": ariaLabelledBy
41420
41640
  } = props;
41421
41641
  const [isHovered, setIsHovered] = react__WEBPACK_IMPORTED_MODULE_0__["default"].useState(false);
41422
41642
  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__["default"].createElement(StyledToggleButtonOuter, {
41643
+ type: "button",
41644
+ id: id,
41423
41645
  className: classnames__WEBPACK_IMPORTED_MODULE_2___default()(className, "webchat-toggle-button-root", isActive && "active"),
41424
41646
  onClick: onClick,
41425
41647
  isActive: isActive,
@@ -41431,7 +41653,6 @@ const ToggleButton = props => {
41431
41653
  onMouseLeave: () => setIsHovered(false)
41432
41654
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__["default"].createElement(StyledToggleButtonInner, {
41433
41655
  className: classnames__WEBPACK_IMPORTED_MODULE_2___default()("webchat-toggle-button-inner-circle", isActive && "active", isHovered && "hovered"),
41434
- onClick: onClick,
41435
41656
  isActive: isActive,
41436
41657
  disabled: disabled
41437
41658
  }));
@@ -41768,8 +41989,7 @@ const ChatOptionsFooter = props => {
41768
41989
  /* harmony import */ var _emotion_styled__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(84937);
41769
41990
  /* harmony import */ var _webchat_store_messages_message_reducer__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(22284);
41770
41991
  /* harmony import */ var _Modal_DeleteConfirmModal__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(75691);
41771
- /* harmony import */ var _webchat_store_previous_conversations_previous_conversations_middleware__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(92101);
41772
- /* harmony import */ var _webchat_store_options_options__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(48242);
41992
+ /* harmony import */ var _webchat_store_options_options__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(48242);
41773
41993
 
41774
41994
 
41775
41995
 
@@ -41811,14 +42031,14 @@ const DeleteConversation = props => {
41811
42031
  const handleConfirmDelete = () => {
41812
42032
  dispatch((0,_webchat_store_previous_conversations_previous_conversations_reducer__WEBPACK_IMPORTED_MODULE_3__/* .deletePrevConversation */ .YD)(sessionId));
41813
42033
  dispatch((0,_webchat_store_messages_message_reducer__WEBPACK_IMPORTED_MODULE_7__/* .clearMessages */ .oI)());
41814
- dispatch((0,_webchat_store_previous_conversations_previous_conversations_middleware__WEBPACK_IMPORTED_MODULE_9__/* .switchSession */ .r)());
42034
+ dispatch((0,_webchat_store_previous_conversations_previous_conversations_reducer__WEBPACK_IMPORTED_MODULE_3__/* .switchSession */ .rm)());
41815
42035
  const storage = (0,_webchat_helper_storage__WEBPACK_IMPORTED_MODULE_4__/* .getStorage */ .c)({
41816
42036
  disableLocalStorage: props.config.settings.embeddingConfiguration?.disableLocalStorage ?? false,
41817
42037
  useSessionStorage: props.config.settings.embeddingConfiguration?.useSessionStorage ?? false
41818
42038
  });
41819
42039
  if (storage) {
41820
42040
  Object.keys(storage).forEach(_ => {
41821
- const key = (0,_webchat_store_options_options__WEBPACK_IMPORTED_MODULE_10__/* .getOptionsKey */ .W)({
42041
+ const key = (0,_webchat_store_options_options__WEBPACK_IMPORTED_MODULE_9__/* .getOptionsKey */ .W)({
41822
42042
  channel,
41823
42043
  userId,
41824
42044
  sessionId
@@ -42113,6 +42333,11 @@ const TTSOptionRoot = _emotion_styled__WEBPACK_IMPORTED_MODULE_1__/* ["default"]
42113
42333
  alignItems: "center",
42114
42334
  height: 50
42115
42335
  }));
42336
+
42337
+ // Native <label for> so clicking the visible text also activates the switch (WCAG technique H44)
42338
+ const ToggleLabel = _emotion_styled__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A.label(() => ({
42339
+ cursor: "pointer"
42340
+ }));
42116
42341
  const TTSOption = props => {
42117
42342
  const {
42118
42343
  config,
@@ -42120,6 +42345,7 @@ const TTSOption = props => {
42120
42345
  } = props;
42121
42346
  const isActive = (0,_webchat_helper_useSelector__WEBPACK_IMPORTED_MODULE_4__/* .useSelector */ .d)(state => state.ui.ttsActive);
42122
42347
  const labelId = react__WEBPACK_IMPORTED_MODULE_0__["default"].useId();
42348
+ const toggleId = react__WEBPACK_IMPORTED_MODULE_0__["default"].useId();
42123
42349
  const label = config.settings.chatOptions.labelTTSToggle || "Enable Text-to-Speech";
42124
42350
  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__["default"].createElement(TTSOptionRoot, {
42125
42351
  className: "webchat-tts-option-root"
@@ -42128,7 +42354,10 @@ const TTSOption = props => {
42128
42354
  variant: "title1-semibold",
42129
42355
  margin: 0,
42130
42356
  className: "webchat-chat-options-tts-option-label"
42131
- }, label), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__["default"].createElement(_ToggleButton__WEBPACK_IMPORTED_MODULE_3__/* .ToggleButton */ .f, {
42357
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__["default"].createElement(ToggleLabel, {
42358
+ htmlFor: toggleId
42359
+ }, label)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__["default"].createElement(_ToggleButton__WEBPACK_IMPORTED_MODULE_3__/* .ToggleButton */ .f, {
42360
+ id: toggleId,
42132
42361
  onClick: onToggle,
42133
42362
  className: "webchat-chat-options-tts-option-toggle",
42134
42363
  isActive: isActive,
@@ -42455,7 +42684,6 @@ const ConversationsListItem = props => {
42455
42684
  /* harmony import */ var _cognigy_chat_components__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(2854);
42456
42685
  /* harmony import */ var _webchat_store_connection_connection_middleware__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(12193);
42457
42686
  /* harmony import */ var _webchat_store_messages_message_reducer__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(22284);
42458
- /* harmony import */ var _webchat_store_previous_conversations_previous_conversations_middleware__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(92101);
42459
42687
 
42460
42688
 
42461
42689
 
@@ -42479,7 +42707,7 @@ const DeleteAllConversationsModal = props => {
42479
42707
  const handleConfirmDelete = () => {
42480
42708
  dispatch((0,_webchat_store_previous_conversations_previous_conversations_reducer__WEBPACK_IMPORTED_MODULE_2__/* .setConversations */ .dU)({}));
42481
42709
  dispatch((0,_webchat_store_messages_message_reducer__WEBPACK_IMPORTED_MODULE_7__/* .clearMessages */ .oI)()); // Clear any existing messages
42482
- dispatch((0,_webchat_store_previous_conversations_previous_conversations_middleware__WEBPACK_IMPORTED_MODULE_8__/* .switchSession */ .r)()); // Switch the session to a new one
42710
+ dispatch((0,_webchat_store_previous_conversations_previous_conversations_reducer__WEBPACK_IMPORTED_MODULE_2__/* .switchSession */ .rm)()); // Switch the session to a new one
42483
42711
  dispatch((0,_webchat_store_connection_connection_middleware__WEBPACK_IMPORTED_MODULE_6__/* .disconnect */ .Zf)()); // Disconnect the socket to prevent from receiving any new messages. Socket will be reconnected upon starting a new conversation
42484
42712
  const storage = (0,_webchat_helper_storage__WEBPACK_IMPORTED_MODULE_3__/* .getStorage */ .c)({
42485
42713
  disableLocalStorage: config.settings.embeddingConfiguration?.disableLocalStorage ?? false,
@@ -43119,21 +43347,33 @@ const getKeyboardFocusableElements = element => {
43119
43347
  const interactiveEls = element?.querySelectorAll('a[href], button, input, textarea, select, details,[tabindex]:not([tabindex="-1"])');
43120
43348
  const interactiveElsArray = interactiveEls && Array.from(interactiveEls);
43121
43349
 
43122
- // Filter out interactive elements that are disabled, aria-hidden, or inside
43123
- // an inert subtree (e.g. the chat layout behind the disconnect overlay, or
43124
- // a leaving screen during its exit transition — see
43125
- // RegularLayoutContentWrapper in WebchatUI.tsx) — those cannot receive
43126
- // focus. Matching aria-hidden="true" explicitly (not attribute presence)
43127
- // keeps elements with aria-hidden="false" focusable. Ancestor aria-hidden
43128
- // is deliberately NOT filtered: the HomeScreen show/hide pattern queries
43129
- // focusables inside its aria-hidden root to toggle their tabindex.
43130
- const focusable = interactiveElsArray?.filter(el => !el.hasAttribute("disabled") && el.getAttribute("aria-hidden") !== "true" && !el.closest("[inert]"));
43350
+ // Two lists are derived from the interactive elements:
43351
+ //
43352
+ // 1. focusableIgnoringInert — drops only elements that are disabled or
43353
+ // aria-hidden themselves, but KEEPS elements inside [inert] subtrees.
43354
+ // Needed by HomeScreen's tabindex-toggle fallback, which must reach the
43355
+ // interactive elements of its own inert-hidden root in browsers without
43356
+ // inert support. Matching aria-hidden="true" explicitly (not attribute
43357
+ // presence) keeps elements with aria-hidden="false" focusable. Ancestor
43358
+ // aria-hidden is deliberately NOT filtered in either list — hidden
43359
+ // surfaces that must be excluded from focus logic carry `inert`
43360
+ // alongside aria-hidden (HomeScreen, RegularLayoutContentWrapper,
43361
+ // DisconnectableContentWrapper).
43362
+ const focusableIgnoringInert = interactiveElsArray?.filter(el => !el.hasAttribute("disabled") && el.getAttribute("aria-hidden") !== "true");
43363
+
43364
+ // 2. focusable — additionally drops elements inside an inert subtree
43365
+ // (e.g. the chat layout behind the disconnect overlay, or a leaving
43366
+ // screen during its exit transition — see RegularLayoutContentWrapper
43367
+ // in WebchatUI.tsx) — those cannot receive focus. This is the list for
43368
+ // focus traps and focus-first-on-open logic.
43369
+ const focusable = focusableIgnoringInert?.filter(el => !el.closest("[inert]"));
43131
43370
  const firstFocusable = focusable && focusable[0];
43132
43371
  const lastFocusable = focusable && focusable[focusable.length - 1];
43133
43372
  return {
43134
43373
  firstFocusable,
43135
43374
  lastFocusable,
43136
- focusable
43375
+ focusable,
43376
+ focusableIgnoringInert
43137
43377
  };
43138
43378
  };
43139
43379
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getKeyboardFocusableElements);
@@ -43458,9 +43698,9 @@ function getSourceBackgroundColor(mappedValue, colors) {
43458
43698
  /* harmony import */ var _store_messages_message_middleware__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(20570);
43459
43699
  /* harmony import */ var _store_ui_ui_reducer__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(55361);
43460
43700
  /* harmony import */ var _plugins_helper__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(59977);
43461
- /* harmony import */ var _store_connection_connection_middleware__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(12193);
43701
+ /* harmony import */ var _store_connection_connection_reducer__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(64789);
43462
43702
  /* harmony import */ var _store_rating_rating_reducer__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(69823);
43463
- /* harmony import */ var _store_previous_conversations_previous_conversations_middleware__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(92101);
43703
+ /* harmony import */ var _store_previous_conversations_previous_conversations_reducer__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(39801);
43464
43704
  /* harmony import */ var _store_input_input_reducer__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(16967);
43465
43705
  /* harmony import */ var _store_xapp_overlay_slice__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(97114);
43466
43706
  /* harmony import */ var _store_messages_message_reducer__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(22284);
@@ -43574,14 +43814,14 @@ const ConnectedWebchatUI = (0,react_redux__WEBPACK_IMPORTED_MODULE_1__/* .connec
43574
43814
  onMinimize: () => dispatch((0,_store_ui_ui_reducer__WEBPACK_IMPORTED_MODULE_3__/* .setMinimize */ .R1)()),
43575
43815
  onToggle: () => dispatch((0,_store_ui_ui_reducer__WEBPACK_IMPORTED_MODULE_3__/* .toggleOpen */ .nL)()),
43576
43816
  onTriggerEngagementMessage: () => dispatch((0,_store_messages_message_middleware__WEBPACK_IMPORTED_MODULE_2__/* .triggerEngagementMessage */ .Nh)()),
43577
- onConnect: () => dispatch((0,_store_connection_connection_middleware__WEBPACK_IMPORTED_MODULE_5__/* .connect */ .Ng)()),
43817
+ onConnect: () => dispatch((0,_store_connection_connection_reducer__WEBPACK_IMPORTED_MODULE_5__/* .connect */ .Ng)()),
43578
43818
  onShowRatingScreen: show => dispatch((0,_store_rating_rating_reducer__WEBPACK_IMPORTED_MODULE_6__/* .showRatingScreen */ .xW)(show)),
43579
43819
  onSetHasGivenRating: () => dispatch((0,_store_rating_rating_reducer__WEBPACK_IMPORTED_MODULE_6__/* .setHasGivenRating */ .n_)()),
43580
43820
  onSetShowHomeScreen: show => dispatch((0,_store_ui_ui_reducer__WEBPACK_IMPORTED_MODULE_3__/* .setShowHomeScreen */ .zn)(show)),
43581
43821
  onSetShowPrevConversations: show => dispatch((0,_store_ui_ui_reducer__WEBPACK_IMPORTED_MODULE_3__/* .setShowPrevConversations */ .Rg)(show)),
43582
43822
  onSetShowChatOptionsScreen: show => dispatch((0,_store_ui_ui_reducer__WEBPACK_IMPORTED_MODULE_3__/* .setShowChatOptionsScreen */ .QE)(show)),
43583
43823
  onShowChatScreen: () => dispatch((0,_store_ui_ui_reducer__WEBPACK_IMPORTED_MODULE_3__/* .showChatScreen */ .YW)()),
43584
- onSwitchSession: (sessionId, conversation) => dispatch((0,_store_previous_conversations_previous_conversations_middleware__WEBPACK_IMPORTED_MODULE_7__/* .switchSession */ .r)(sessionId, conversation)),
43824
+ onSwitchSession: (sessionId, conversation) => dispatch((0,_store_previous_conversations_previous_conversations_reducer__WEBPACK_IMPORTED_MODULE_7__/* .switchSession */ .rm)(sessionId, conversation)),
43585
43825
  onAcceptTerms: userId => dispatch((0,_store_ui_ui_reducer__WEBPACK_IMPORTED_MODULE_3__/* .setHasAcceptedTerms */ .Pk)(userId)),
43586
43826
  onSetStoredMessage: message => dispatch((0,_store_ui_ui_reducer__WEBPACK_IMPORTED_MODULE_3__/* .setStoredMessage */ .LK)(message)),
43587
43827
  onSetDropZoneVisible: isVisible => dispatch((0,_store_input_input_reducer__WEBPACK_IMPORTED_MODULE_8__/* .setDropZoneVisible */ .aJ)(isVisible)),
@@ -43623,19 +43863,20 @@ const ConnectedWebchatUI = (0,react_redux__WEBPACK_IMPORTED_MODULE_1__/* .connec
43623
43863
  /* harmony import */ var _store_ui_ui_reducer__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(55361);
43624
43864
  /* harmony import */ var _store_config_config_middleware__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(56121);
43625
43865
  /* harmony import */ var _store_connection_connection_middleware__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(12193);
43626
- /* harmony import */ var events__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(98657);
43627
- /* harmony import */ var events__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(events__WEBPACK_IMPORTED_MODULE_8__);
43628
- /* harmony import */ var _cognigy_socket_client__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(72166);
43629
- /* harmony import */ var _cognigy_socket_client__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(_cognigy_socket_client__WEBPACK_IMPORTED_MODULE_9__);
43630
- /* harmony import */ var _helper_endpoint__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(11351);
43631
- /* harmony import */ var _store_config_config_reducer__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(46509);
43632
- /* harmony import */ var _store_messages_message_handler__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(59788);
43633
- /* harmony import */ var _webchat_ui_components_presentational_Notifications__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(82833);
43634
- /* harmony import */ var _helper_storage__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(62473);
43635
- /* harmony import */ var _helper_privacyPolicy__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(8470);
43636
- /* harmony import */ var _store_options_options_reducer__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(74327);
43637
- /* harmony import */ var _store_previous_conversations_previous_conversations_middleware__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(92101);
43638
- /* harmony import */ var _store_messages_message_reducer__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(22284);
43866
+ /* harmony import */ var _store_connection_connection_reducer__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(64789);
43867
+ /* harmony import */ var events__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(98657);
43868
+ /* harmony import */ var events__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(events__WEBPACK_IMPORTED_MODULE_9__);
43869
+ /* harmony import */ var _cognigy_socket_client__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(72166);
43870
+ /* harmony import */ var _cognigy_socket_client__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(_cognigy_socket_client__WEBPACK_IMPORTED_MODULE_10__);
43871
+ /* harmony import */ var _helper_endpoint__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(11351);
43872
+ /* harmony import */ var _store_config_config_reducer__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(46509);
43873
+ /* harmony import */ var _store_messages_message_handler__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(59788);
43874
+ /* harmony import */ var _webchat_ui_components_presentational_Notifications__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(82833);
43875
+ /* harmony import */ var _helper_storage__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(62473);
43876
+ /* harmony import */ var _helper_privacyPolicy__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(8470);
43877
+ /* harmony import */ var _store_options_options_reducer__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(74327);
43878
+ /* harmony import */ var _store_previous_conversations_previous_conversations_reducer__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(39801);
43879
+ /* harmony import */ var _store_messages_message_reducer__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(22284);
43639
43880
  function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
43640
43881
 
43641
43882
 
@@ -43656,8 +43897,9 @@ function _extends() { return _extends = Object.assign ? Object.assign.bind() : f
43656
43897
 
43657
43898
 
43658
43899
 
43900
+
43659
43901
  class Webchat extends react__WEBPACK_IMPORTED_MODULE_0__.PureComponent {
43660
- analytics = new events__WEBPACK_IMPORTED_MODULE_8__.EventEmitter();
43902
+ analytics = new events__WEBPACK_IMPORTED_MODULE_9__.EventEmitter();
43661
43903
  // component lifecycle methods
43662
43904
  constructor(props) {
43663
43905
  super(props);
@@ -43666,17 +43908,17 @@ class Webchat extends react__WEBPACK_IMPORTED_MODULE_0__.PureComponent {
43666
43908
  options,
43667
43909
  settings
43668
43910
  } = props;
43669
- const baseUrl = (0,_helper_endpoint__WEBPACK_IMPORTED_MODULE_10__/* .getEndpointBaseUrl */ .Ul)(url);
43670
- const token = (0,_helper_endpoint__WEBPACK_IMPORTED_MODULE_10__/* .getEndpointUrlToken */ .a4)(url);
43911
+ const baseUrl = (0,_helper_endpoint__WEBPACK_IMPORTED_MODULE_11__/* .getEndpointBaseUrl */ .Ul)(url);
43912
+ const token = (0,_helper_endpoint__WEBPACK_IMPORTED_MODULE_11__/* .getEndpointUrlToken */ .a4)(url);
43671
43913
  const socketOptions = {
43672
43914
  channel: options?.channel || "webchat3",
43673
43915
  ...options
43674
43916
  };
43675
- const client = new _cognigy_socket_client__WEBPACK_IMPORTED_MODULE_9__.SocketClient(baseUrl, token, socketOptions);
43917
+ const client = new _cognigy_socket_client__WEBPACK_IMPORTED_MODULE_10__.SocketClient(baseUrl, token, socketOptions);
43676
43918
  this.client = client;
43677
43919
  const store = (0,_store_store__WEBPACK_IMPORTED_MODULE_1__/* .createWebchatStore */ .E7)(this, url, settings);
43678
43920
  this.store = store;
43679
- this._handleOutput = (0,_store_messages_message_handler__WEBPACK_IMPORTED_MODULE_12__/* .createOutputHandler */ .i0)(this.store);
43921
+ this._handleOutput = (0,_store_messages_message_handler__WEBPACK_IMPORTED_MODULE_13__/* .createOutputHandler */ .i0)(this.store);
43680
43922
  }
43681
43923
  UNSAFE_componentWillMount() {
43682
43924
  const {
@@ -43684,20 +43926,20 @@ class Webchat extends react__WEBPACK_IMPORTED_MODULE_0__.PureComponent {
43684
43926
  } = this.props;
43685
43927
  const disableLocalStorage = settings?.embeddingConfiguration?.disableLocalStorage ?? false;
43686
43928
  const useSessionStorage = settings?.embeddingConfiguration?.useSessionStorage ?? false;
43687
- const browserStorage = (0,_helper_storage__WEBPACK_IMPORTED_MODULE_14__/* .getStorage */ .c)({
43929
+ const browserStorage = (0,_helper_storage__WEBPACK_IMPORTED_MODULE_15__/* .getStorage */ .c)({
43688
43930
  disableLocalStorage,
43689
43931
  useSessionStorage
43690
43932
  });
43691
43933
  const userId = this.client.socketOptions.userId;
43692
- if ((0,_helper_privacyPolicy__WEBPACK_IMPORTED_MODULE_15__/* .hasAcceptedTermsInStorage */ .z)(browserStorage, userId)) {
43934
+ if ((0,_helper_privacyPolicy__WEBPACK_IMPORTED_MODULE_16__/* .hasAcceptedTermsInStorage */ .z)(browserStorage, userId)) {
43693
43935
  this.store.dispatch((0,_store_ui_ui_reducer__WEBPACK_IMPORTED_MODULE_5__/* .setHasAcceptedTerms */ .Pk)(userId));
43694
43936
  }
43695
43937
  this.store.dispatch((0,_store_config_config_middleware__WEBPACK_IMPORTED_MODULE_6__/* .loadConfig */ .Z)());
43696
43938
  if (this.props.options?.sessionId) {
43697
- this.store.dispatch((0,_store_config_config_reducer__WEBPACK_IMPORTED_MODULE_11__/* .setInitialSessionId */ .mD)(this.props.options.sessionId));
43939
+ this.store.dispatch((0,_store_config_config_reducer__WEBPACK_IMPORTED_MODULE_12__/* .setInitialSessionId */ .mD)(this.props.options.sessionId));
43698
43940
  }
43699
43941
  if (this.props.options?.userId) {
43700
- this.store.dispatch((0,_store_options_options_reducer__WEBPACK_IMPORTED_MODULE_16__/* .setUserId */ ["do"])(this.props.options?.userId));
43942
+ this.store.dispatch((0,_store_options_options_reducer__WEBPACK_IMPORTED_MODULE_17__/* .setUserId */ ["do"])(this.props.options?.userId));
43701
43943
  }
43702
43944
  }
43703
43945
  componentWillUnmount() {
@@ -43715,7 +43957,7 @@ class Webchat extends react__WEBPACK_IMPORTED_MODULE_0__.PureComponent {
43715
43957
 
43716
43958
  // component API (for usage via ref)
43717
43959
  connect = async () => {
43718
- this.store.dispatch((0,_store_connection_connection_middleware__WEBPACK_IMPORTED_MODULE_7__/* .connect */ .Ng)());
43960
+ this.store.dispatch((0,_store_connection_connection_reducer__WEBPACK_IMPORTED_MODULE_8__/* .connect */ .Ng)());
43719
43961
  };
43720
43962
 
43721
43963
  /**
@@ -43747,14 +43989,14 @@ class Webchat extends react__WEBPACK_IMPORTED_MODULE_0__.PureComponent {
43747
43989
  } = this.store.getState().config;
43748
43990
  const disableLocalStorage = settings?.embeddingConfiguration?.disableLocalStorage ?? false;
43749
43991
  const useSessionStorage = settings?.embeddingConfiguration?.useSessionStorage ?? false;
43750
- const browserStorage = (0,_helper_storage__WEBPACK_IMPORTED_MODULE_14__/* .getStorage */ .c)({
43992
+ const browserStorage = (0,_helper_storage__WEBPACK_IMPORTED_MODULE_15__/* .getStorage */ .c)({
43751
43993
  disableLocalStorage,
43752
43994
  useSessionStorage
43753
43995
  });
43754
43996
  const userId = this.client.socketOptions.userId;
43755
43997
  const homeScreenEnabled = settings?.homeScreen?.enabled === true;
43756
43998
  const privacyNoticeEnabled = settings?.privacyNotice?.enabled === true;
43757
- const skipPrivacyNotice = !privacyNoticeEnabled || (0,_helper_privacyPolicy__WEBPACK_IMPORTED_MODULE_15__/* .hasAcceptedTermsInStorage */ .z)(browserStorage, userId);
43999
+ const skipPrivacyNotice = !privacyNoticeEnabled || (0,_helper_privacyPolicy__WEBPACK_IMPORTED_MODULE_16__/* .hasAcceptedTermsInStorage */ .z)(browserStorage, userId);
43758
44000
  if (!homeScreenEnabled && skipPrivacyNotice) {
43759
44001
  this.store.dispatch((0,_store_ui_ui_reducer__WEBPACK_IMPORTED_MODULE_5__/* .setShowHomeScreen */ .zn)(false));
43760
44002
  this.store.dispatch((0,_store_ui_ui_reducer__WEBPACK_IMPORTED_MODULE_5__/* .setShowChatOptionsScreen */ .QE)(false));
@@ -43792,7 +44034,7 @@ class Webchat extends react__WEBPACK_IMPORTED_MODULE_0__.PureComponent {
43792
44034
  this.store.dispatch((0,_store_ui_ui_reducer__WEBPACK_IMPORTED_MODULE_5__/* .toggleOpen */ .nL)());
43793
44035
  };
43794
44036
  showNotification = message => {
43795
- (0,_webchat_ui_components_presentational_Notifications__WEBPACK_IMPORTED_MODULE_13__/* .createNotification */ .UI)(message);
44037
+ (0,_webchat_ui_components_presentational_Notifications__WEBPACK_IMPORTED_MODULE_14__/* .createNotification */ .UI)(message);
43796
44038
  };
43797
44039
  startConversation = () => {
43798
44040
  this.store.dispatch((0,_store_ui_ui_reducer__WEBPACK_IMPORTED_MODULE_5__/* .setShowHomeScreen */ .zn)(false));
@@ -43805,15 +44047,15 @@ class Webchat extends react__WEBPACK_IMPORTED_MODULE_0__.PureComponent {
43805
44047
  this.client.on("output", handler);
43806
44048
  };
43807
44049
  updateSettings = settings => {
43808
- this.store.dispatch((0,_store_config_config_reducer__WEBPACK_IMPORTED_MODULE_11__/* .updateSettings */ .Xx)(settings));
44050
+ this.store.dispatch((0,_store_config_config_reducer__WEBPACK_IMPORTED_MODULE_12__/* .updateSettings */ .Xx)(settings));
43809
44051
  };
43810
44052
 
43811
44053
  /**
43812
44054
  * This method will switch to a new session and clear the messages in the current session.
43813
44055
  */
43814
44056
  endSession = () => {
43815
- this.store.dispatch((0,_store_previous_conversations_previous_conversations_middleware__WEBPACK_IMPORTED_MODULE_17__/* .switchSession */ .r)());
43816
- this.store.dispatch((0,_store_messages_message_reducer__WEBPACK_IMPORTED_MODULE_18__/* .clearMessages */ .oI)());
44057
+ this.store.dispatch((0,_store_previous_conversations_previous_conversations_reducer__WEBPACK_IMPORTED_MODULE_18__/* .switchSession */ .rm)());
44058
+ this.store.dispatch((0,_store_messages_message_reducer__WEBPACK_IMPORTED_MODULE_19__/* .clearMessages */ .oI)());
43817
44059
  };
43818
44060
  render() {
43819
44061
  const {
@@ -43940,7 +44182,7 @@ const isInformingOutOfBusinessHours = businessHours => {
43940
44182
  /* harmony export */ R: () => (/* binding */ onNetworkOn),
43941
44183
  /* harmony export */ s: () => (/* binding */ shouldReestablishConnection)
43942
44184
  /* harmony export */ });
43943
- const shouldReestablishConnection = store => store?.autoInject?.isConnectedOnce;
44185
+ const shouldReestablishConnection = store => store?.connection?.hasAttemptedConnection;
43944
44186
  const onNetworkOn = handler => {
43945
44187
  window.addEventListener("online", handler, false);
43946
44188
  return () => {
@@ -44969,7 +45211,6 @@ const registerConnectionHandler = (store, client) => {
44969
45211
  (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
44970
45212
 
44971
45213
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
44972
- /* harmony export */ Ng: () => (/* binding */ connect),
44973
45214
  /* harmony export */ PJ: () => (/* binding */ createConnectionMiddleware),
44974
45215
  /* harmony export */ Zf: () => (/* binding */ disconnect),
44975
45216
  /* harmony export */ vD: () => (/* binding */ announceNetworkOn)
@@ -44984,10 +45225,6 @@ const registerConnectionHandler = (store, client) => {
44984
45225
 
44985
45226
 
44986
45227
 
44987
- const CONNECT = "CONNECT";
44988
- const connect = () => ({
44989
- type: CONNECT
44990
- });
44991
45228
  const DISCONNECT = "DISCONNECT";
44992
45229
  const disconnect = () => ({
44993
45230
  type: DISCONNECT
@@ -45027,19 +45264,19 @@ const createConnectionMiddleware = client => store => next => action => {
45027
45264
  case "SHOW_CHAT_SCREEN":
45028
45265
  {
45029
45266
  if (!client.connected) {
45030
- store.dispatch(connect());
45267
+ store.dispatch((0,_connection_reducer__WEBPACK_IMPORTED_MODULE_3__/* .connect */ .Ng)());
45031
45268
  }
45032
45269
  break;
45033
45270
  }
45034
45271
  case "SEND_MESSAGE":
45035
45272
  {
45036
- store.dispatch(connect());
45273
+ store.dispatch((0,_connection_reducer__WEBPACK_IMPORTED_MODULE_3__/* .connect */ .Ng)());
45037
45274
  break;
45038
45275
  }
45039
45276
  case "SET_PAGE_VISIBLE":
45040
45277
  {
45041
45278
  if (action.visible && (0,_helper_connection_watchdog__WEBPACK_IMPORTED_MODULE_4__/* .shouldReestablishConnection */ .s)(store.getState())) {
45042
- store.dispatch(connect());
45279
+ store.dispatch((0,_connection_reducer__WEBPACK_IMPORTED_MODULE_3__/* .connect */ .Ng)());
45043
45280
  }
45044
45281
  break;
45045
45282
  }
@@ -45051,7 +45288,7 @@ const createConnectionMiddleware = client => store => next => action => {
45051
45288
  case "NETWORK_ON":
45052
45289
  {
45053
45290
  if ((0,_helper_connection_watchdog__WEBPACK_IMPORTED_MODULE_4__/* .shouldReestablishConnection */ .s)(store.getState())) {
45054
- store.dispatch(connect());
45291
+ store.dispatch((0,_connection_reducer__WEBPACK_IMPORTED_MODULE_3__/* .connect */ .Ng)());
45055
45292
  }
45056
45293
  break;
45057
45294
  }
@@ -45066,16 +45303,22 @@ const createConnectionMiddleware = client => store => next => action => {
45066
45303
 
45067
45304
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
45068
45305
  /* harmony export */ FI: () => (/* binding */ connection),
45306
+ /* harmony export */ Ng: () => (/* binding */ connect),
45069
45307
  /* harmony export */ Pr: () => (/* binding */ setReconnectionLimit),
45070
45308
  /* harmony export */ pE: () => (/* binding */ setConnecting),
45071
45309
  /* harmony export */ qJ: () => (/* binding */ setConnected)
45072
45310
  /* harmony export */ });
45073
- /* unused harmony exports SET_CONNECTING, SET_CONNECTED, SET_RECONNECTION_LIMIT */
45311
+ /* unused harmony exports CONNECT, SET_CONNECTING, SET_CONNECTED, SET_RECONNECTION_LIMIT */
45074
45312
  const initialState = {
45075
45313
  connected: false,
45076
45314
  connecting: false,
45077
- reconnectionLimit: false
45315
+ reconnectionLimit: false,
45316
+ hasAttemptedConnection: false
45078
45317
  };
45318
+ const CONNECT = "CONNECT";
45319
+ const connect = () => ({
45320
+ type: CONNECT
45321
+ });
45079
45322
  const SET_CONNECTING = "SET_CONNECTING";
45080
45323
  const setConnecting = connecting => ({
45081
45324
  type: SET_CONNECTING,
@@ -45097,7 +45340,10 @@ const connection = (state = initialState, action) => {
45097
45340
  {
45098
45341
  return {
45099
45342
  ...state,
45100
- connected: action.connected
45343
+ connected: action.connected,
45344
+ // Never reset once true: a past connection attempt is what gates
45345
+ // automatic reconnection, regardless of the current connected state.
45346
+ hasAttemptedConnection: state.hasAttemptedConnection || action.connected
45101
45347
  };
45102
45348
  }
45103
45349
  case "SET_CONNECTING":
@@ -45114,6 +45360,18 @@ const connection = (state = initialState, action) => {
45114
45360
  reconnectionLimit: action.reconnectionLimit
45115
45361
  };
45116
45362
  }
45363
+ case "CONNECT":
45364
+ case "SWITCH_SESSION":
45365
+ {
45366
+ // A session switch connects the socket directly, bypassing CONNECT.
45367
+ // It is still a deliberate connection request, so it must arm the
45368
+ // reconnect latch even if this first attempt fails (e.g. offline).
45369
+ if (state.hasAttemptedConnection) return state;
45370
+ return {
45371
+ ...state,
45372
+ hasAttemptedConnection: true
45373
+ };
45374
+ }
45117
45375
  default:
45118
45376
  {
45119
45377
  return state;
@@ -45494,8 +45752,10 @@ const input = (state = getInitialState(), action) => {
45494
45752
  /* harmony export */ mN: () => (/* binding */ isAnimatedRichBotMessage),
45495
45753
  /* harmony export */ oy: () => (/* binding */ isTextOnlyEscapeSequence)
45496
45754
  /* harmony export */ });
45755
+ /* harmony import */ var uuid__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(55252);
45756
+
45497
45757
  function generateRandomId() {
45498
- return String(Math.random()).slice(2, 18);
45758
+ return crypto.randomUUID?.() ?? (0,uuid__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)();
45499
45759
  }
45500
45760
  function isAnimatedRichBotMessage(message) {
45501
45761
  const {
@@ -45795,7 +46055,7 @@ const createMessageMiddleware = client => store => next => action => {
45795
46055
  if (text) {
45796
46056
  store.dispatch((0,_message_handler__WEBPACK_IMPORTED_MODULE_2__/* .receiveMessage */ .VI)({
45797
46057
  source: "engagement",
45798
- traceId: `engagement-${Math.random()}`,
46058
+ traceId: `engagement-${(0,_helper__WEBPACK_IMPORTED_MODULE_5__/* .generateRandomId */ .MZ)()}`,
45799
46059
  text
45800
46060
  }));
45801
46061
  }
@@ -46241,7 +46501,6 @@ const getOptionsKey = ({
46241
46501
  (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
46242
46502
 
46243
46503
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
46244
- /* harmony export */ r: () => (/* binding */ switchSession),
46245
46504
  /* harmony export */ w: () => (/* binding */ createPrevConversationsMiddleware)
46246
46505
  /* harmony export */ });
46247
46506
  /* harmony import */ var _previous_conversations_reducer__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(39801);
@@ -46256,12 +46515,6 @@ const getOptionsKey = ({
46256
46515
 
46257
46516
 
46258
46517
 
46259
- const SWITCH_SESSION = "SWITCH_SESSION";
46260
- const switchSession = (sessionId = self.crypto?.randomUUID?.(), conversation) => ({
46261
- type: SWITCH_SESSION,
46262
- sessionId,
46263
- conversation
46264
- });
46265
46518
  const createPrevConversationsMiddleware = client => store => next => action => {
46266
46519
  switch (action.type) {
46267
46520
  case "SWITCH_SESSION":
@@ -46318,9 +46571,16 @@ const createPrevConversationsMiddleware = client => store => next => action => {
46318
46571
  /* harmony export */ CK: () => (/* binding */ prevConversations),
46319
46572
  /* harmony export */ Wu: () => (/* binding */ upsertPrevConversation),
46320
46573
  /* harmony export */ YD: () => (/* binding */ deletePrevConversation),
46321
- /* harmony export */ dU: () => (/* binding */ setConversations)
46574
+ /* harmony export */ dU: () => (/* binding */ setConversations),
46575
+ /* harmony export */ rm: () => (/* binding */ switchSession)
46322
46576
  /* harmony export */ });
46323
46577
  const getInitialState = () => ({});
46578
+ const SWITCH_SESSION = "SWITCH_SESSION";
46579
+ const switchSession = (sessionId = self.crypto?.randomUUID?.(), conversation) => ({
46580
+ type: SWITCH_SESSION,
46581
+ sessionId,
46582
+ conversation
46583
+ });
46324
46584
  const SET_CONVERSATIONS = "SET_CONVERSATIONS";
46325
46585
  const setConversations = conversations => ({
46326
46586
  type: SET_CONVERSATIONS,
@@ -56888,7 +57148,7 @@ article
56888
57148
  .swiper-pagination-horizontal.swiper-pagination-bullets .swiper-pagination-bullet {
56889
57149
  margin: 0 4px;
56890
57150
  }
56891
- ._wrapper_18n3o_1 {
57151
+ ._wrapper_1h4l4_1 {
56892
57152
  background-color: white;
56893
57153
  position: absolute;
56894
57154
  z-index: 5000;
@@ -56902,7 +57162,7 @@ article
56902
57162
  flex-direction: column;
56903
57163
  }
56904
57164
 
56905
- ._header_18n3o_15 {
57165
+ ._header_1h4l4_15 {
56906
57166
  display: flex;
56907
57167
  border-bottom: 1px solid var(--cc-black-80);
56908
57168
  padding: 20px;
@@ -56911,18 +57171,18 @@ article
56911
57171
  background-color: var(--cc-white);
56912
57172
  }
56913
57173
 
56914
- ._header_18n3o_15 ._left_18n3o_24 {
57174
+ ._header_1h4l4_15 ._left_1h4l4_24 {
56915
57175
  width: 20px;
56916
57176
  }
56917
57177
 
56918
- ._header_18n3o_15 ._center_18n3o_28 {
57178
+ ._header_1h4l4_15 ._center_1h4l4_28 {
56919
57179
  display: flex;
56920
57180
  align-items: center;
56921
57181
  justify-content: center;
56922
57182
  height: 28px;
56923
57183
  }
56924
57184
 
56925
- ._header_18n3o_15 ._right_18n3o_35 {
57185
+ ._header_1h4l4_15 ._right_1h4l4_35 {
56926
57186
  display: flex;
56927
57187
  align-items: center;
56928
57188
  justify-content: center;
@@ -56938,16 +57198,16 @@ article
56938
57198
  border-radius: 4px;
56939
57199
  }
56940
57200
 
56941
- ._header_18n3o_15 ._right_18n3o_35:focus {
57201
+ ._header_1h4l4_15 ._right_1h4l4_35:focus {
56942
57202
  outline: 2px solid var(--cc-primary-color-focus);
56943
57203
  outline-offset: 2px;
56944
57204
  }
56945
57205
 
56946
- ._content_18n3o_56 {
57206
+ ._content_1h4l4_56 {
56947
57207
  padding: 20px 10px 0px 10px;
56948
57208
  }
56949
57209
 
56950
- ._footer_18n3o_60 {
57210
+ ._footer_1h4l4_60 {
56951
57211
  display: flex;
56952
57212
  justify-content: center;
56953
57213
  align-items: center;
@@ -56955,7 +57215,7 @@ article
56955
57215
  padding: 0px 20px;
56956
57216
  }
56957
57217
 
56958
- ._footer_18n3o_60._hasTime_18n3o_68:not(._noCalendar_18n3o_68) {
57218
+ ._footer_1h4l4_60._hasTime_1h4l4_68:not(._noCalendar_1h4l4_68) {
56959
57219
  margin-top: 30px;
56960
57220
  }
56961
57221
 
@@ -56965,59 +57225,59 @@ article
56965
57225
  ** The idea is to integrate with modules CSS in order to increase the specificity
56966
57226
  ** and avoid conflicts on consumer apps
56967
57227
  */
56968
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-calendar {
57228
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-calendar {
56969
57229
  font-size: 16px;
56970
57230
  }
56971
57231
 
56972
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-calendar.open,
56973
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-calendar.inline {
57232
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-calendar.open,
57233
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-calendar.inline {
56974
57234
  opacity: 1;
56975
57235
  visibility: visible;
56976
57236
  }
56977
57237
 
56978
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-calendar.open {
57238
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-calendar.open {
56979
57239
  display: inline-block;
56980
57240
  z-index: 99999;
56981
57241
  }
56982
57242
 
56983
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-calendar.inline {
57243
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-calendar.inline {
56984
57244
  display: flex;
56985
57245
  flex-direction: column;
56986
57246
  position: relative;
56987
57247
  width: 100%;
56988
57248
  }
56989
57249
 
56990
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-calendar.static {
57250
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-calendar.static {
56991
57251
  position: absolute;
56992
57252
  top: calc(100% + 2px);
56993
57253
  }
56994
57254
 
56995
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-calendar.static.open {
57255
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-calendar.static.open {
56996
57256
  z-index: 999;
56997
57257
  display: block;
56998
57258
  }
56999
57259
 
57000
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-calendar .hasWeeks .dayContainer,
57001
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-calendar .hasTime .dayContainer {
57260
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-calendar .hasWeeks .dayContainer,
57261
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-calendar .hasTime .dayContainer {
57002
57262
  border-bottom: 0;
57003
57263
  border-bottom-right-radius: 0;
57004
57264
  border-bottom-left-radius: 0;
57005
57265
  }
57006
57266
 
57007
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-calendar .hasWeeks .dayContainer {
57267
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-calendar .hasWeeks .dayContainer {
57008
57268
  border-left: 0;
57009
57269
  }
57010
57270
 
57011
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-calendar:focus {
57271
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-calendar:focus {
57012
57272
  outline: 0;
57013
57273
  }
57014
57274
 
57015
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-calendar .flatpickr-innerContainer:focus-visible {
57275
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-calendar .flatpickr-innerContainer:focus-visible {
57016
57276
  outline: 2px solid var(--cc-primary-color-focus);
57017
57277
  outline-offset: 2px;
57018
57278
  }
57019
57279
 
57020
- @keyframes _flatpickr-flash-focus_18n3o_1 {
57280
+ @keyframes _flatpickr-flash-focus_1h4l4_1 {
57021
57281
  0% {
57022
57282
  background-color: var(--cc-black-95);
57023
57283
  }
@@ -57026,12 +57286,12 @@ article
57026
57286
  }
57027
57287
  }
57028
57288
 
57029
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-wrapper {
57289
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-wrapper {
57030
57290
  width: 100%;
57031
57291
  display: flex;
57032
57292
  }
57033
57293
 
57034
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-months {
57294
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-months {
57035
57295
  display: flex;
57036
57296
  align-items: center;
57037
57297
  justify-content: space-between;
@@ -57041,8 +57301,8 @@ article
57041
57301
  margin-bottom: 24px;
57042
57302
  }
57043
57303
 
57044
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-months .flatpickr-prev-month,
57045
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-months .flatpickr-next-month {
57304
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-months .flatpickr-prev-month,
57305
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-months .flatpickr-next-month {
57046
57306
  text-decoration: none;
57047
57307
  cursor: pointer;
57048
57308
  display: inline-flex;
@@ -57054,72 +57314,72 @@ article
57054
57314
  border-radius: 4px;
57055
57315
  }
57056
57316
 
57057
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-months .flatpickr-prev-month:focus-visible,
57058
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-months .flatpickr-next-month:focus-visible {
57317
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-months .flatpickr-prev-month:focus-visible,
57318
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-months .flatpickr-next-month:focus-visible {
57059
57319
  outline: 2px solid var(--cc-primary-color-focus);
57060
57320
  outline-offset: 2px;
57061
57321
  }
57062
57322
 
57063
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-months .flatpickr-prev-month.flatpickr-disabled,
57064
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-months .flatpickr-next-month.flatpickr-disabled {
57323
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-months .flatpickr-prev-month.flatpickr-disabled,
57324
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-months .flatpickr-next-month.flatpickr-disabled {
57065
57325
  cursor: default;
57066
57326
  }
57067
57327
 
57068
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-months .flatpickr-prev-month.flatpickr-prev-month,
57069
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-months .flatpickr-next-month.flatpickr-prev-month {
57328
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-months .flatpickr-prev-month.flatpickr-prev-month,
57329
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-months .flatpickr-next-month.flatpickr-prev-month {
57070
57330
  left: 0;
57071
57331
  }
57072
57332
 
57073
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-months .flatpickr-prev-month.flatpickr-next-month,
57074
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-months .flatpickr-next-month.flatpickr-next-month {
57333
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-months .flatpickr-prev-month.flatpickr-next-month,
57334
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-months .flatpickr-next-month.flatpickr-next-month {
57075
57335
  right: 0;
57076
57336
  }
57077
57337
 
57078
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-months .flatpickr-prev-month svg path,
57079
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-months .flatpickr-next-month svg path {
57338
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-months .flatpickr-prev-month svg path,
57339
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-months .flatpickr-next-month svg path {
57080
57340
  fill: var(--cc-black-10);
57081
57341
  }
57082
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-months .flatpickr-prev-month.flatpickr-disabled svg path,
57083
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-months .flatpickr-next-month.flatpickr-disabled svg path {
57342
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-months .flatpickr-prev-month.flatpickr-disabled svg path,
57343
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-months .flatpickr-next-month.flatpickr-disabled svg path {
57084
57344
  fill: var(--cc-black-80);
57085
57345
  }
57086
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-months .flatpickr-next-month svg {
57346
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-months .flatpickr-next-month svg {
57087
57347
  transform: rotate(180deg);
57088
57348
  }
57089
57349
 
57090
- ._wrapper_18n3o_1 ._content_18n3o_56 .numInputWrapper {
57350
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .numInputWrapper {
57091
57351
  position: relative;
57092
57352
  height: auto;
57093
57353
  }
57094
57354
 
57095
- ._wrapper_18n3o_1 ._content_18n3o_56 .numInputWrapper input,
57096
- ._wrapper_18n3o_1 ._content_18n3o_56 .numInputWrapper span {
57355
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .numInputWrapper input,
57356
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .numInputWrapper span {
57097
57357
  display: inline-block;
57098
57358
  }
57099
57359
 
57100
- ._wrapper_18n3o_1 ._content_18n3o_56 .numInputWrapper input {
57360
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .numInputWrapper input {
57101
57361
  width: 100%;
57102
57362
  -moz-appearance: textfield;
57103
57363
  appearance: textfield;
57104
57364
  }
57105
57365
 
57106
- ._wrapper_18n3o_1 ._content_18n3o_56 .numInputWrapper input::-ms-clear {
57366
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .numInputWrapper input::-ms-clear {
57107
57367
  display: none;
57108
57368
  }
57109
57369
 
57110
- ._wrapper_18n3o_1 ._content_18n3o_56 .numInputWrapper input::-webkit-outer-spin-button,
57111
- ._wrapper_18n3o_1 ._content_18n3o_56 .numInputWrapper input::-webkit-inner-spin-button {
57370
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .numInputWrapper input::-webkit-outer-spin-button,
57371
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .numInputWrapper input::-webkit-inner-spin-button {
57112
57372
  margin: 0;
57113
57373
  -webkit-appearance: none;
57114
57374
  }
57115
57375
 
57116
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-current-month {
57376
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-current-month {
57117
57377
  display: flex;
57118
57378
  gap: 10px;
57119
57379
  position: var(--cc-datepicker-current-month-position, static);
57120
57380
  }
57121
57381
 
57122
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-current-month .flatpickr-monthDropdown-months {
57382
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-current-month .flatpickr-monthDropdown-months {
57123
57383
  display: block;
57124
57384
  padding: 12px;
57125
57385
  width: 100%;
@@ -57135,7 +57395,7 @@ article
57135
57395
  font-size: 14px;
57136
57396
  }
57137
57397
 
57138
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-current-month label {
57398
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-current-month label {
57139
57399
  color: var(--cc-black-40);
57140
57400
  position: absolute;
57141
57401
  top: var(--cc-datepicker-label-top, -15px);
@@ -57144,16 +57404,16 @@ article
57144
57404
  font-size: 12px;
57145
57405
  }
57146
57406
 
57147
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-current-month .flatpickr-monthDropdown-months::-ms-expand {
57407
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-current-month .flatpickr-monthDropdown-months::-ms-expand {
57148
57408
  display: none;
57149
57409
  }
57150
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-current-month .flatpickr-monthDropdown-months:hover {
57410
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-current-month .flatpickr-monthDropdown-months:hover {
57151
57411
  border-color: var(--cc-black-60);
57152
57412
  }
57153
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-current-month .flatpickr-monthDropdown-months:focus {
57413
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-current-month .flatpickr-monthDropdown-months:focus {
57154
57414
  outline: 2px solid var(--cc-primary-color-focus);
57155
57415
  }
57156
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-current-month .flatpickr-monthDropdown-months option {
57416
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-current-month .flatpickr-monthDropdown-months option {
57157
57417
  font-weight: normal;
57158
57418
  }
57159
57419
 
@@ -57162,17 +57422,113 @@ article
57162
57422
  display: none;
57163
57423
  } */
57164
57424
 
57165
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-current-month .numInputWrapper {
57166
- width: 60px;
57425
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-current-month .numInputWrapper {
57426
+ /* Wide enough that the centred 4-digit year clears the 24px arrow column on the right. */
57427
+ width: 76px;
57167
57428
  height: 44px;
57168
57429
  }
57169
57430
 
57170
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-current-month .numInputWrapper span.arrowUp,
57171
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-current-month .numInputWrapper span.arrowDown {
57172
- display: none;
57431
+ /*
57432
+ ** Year stepper arrows. Flatpickr builds these itself (createNumberInput("cur-year")) and wires
57433
+ ** up click-to-increment natively, but the flatpickr.css port above only copied the
57434
+ ** .numInputWrapper wrapper/input rules and skipped every \`.numInputWrapper span\` rule, so the
57435
+ ** arrows had no geometry and were explicitly hidden. Restore flatpickr's own geometry, with
57436
+ ** three deliberate departures from stock:
57437
+ **
57438
+ ** 1. The glyph colour comes from a theme token instead of flatpickr's hardcoded rgba(), and the
57439
+ ** arrows carry no hover background.
57440
+ ** 2. They reveal on \`:focus-within\` as well as \`:hover\`. Stock flatpickr is hover-only, which
57441
+ ** leaves keyboard users with no visible affordance. Keeping them hidden at rest matters
57442
+ ** because this library is exact-pinned by Webchat: anything that changes the at-rest
57443
+ ** rendering ships to every end customer on the next version bump, and CSA-92602 is a
57444
+ ** functional complaint (no way to change the year with the mouse), which hover/focus reveal
57445
+ ** fully addresses.
57446
+ ** 3. 24x24 hit areas instead of flatpickr's cramped 14px column, so target size (WCAG 2.2
57447
+ ** SC 2.5.8) is met outright rather than leaning on the "equivalent means" exemption that the
57448
+ ** input's type-a-year and ArrowUp/ArrowDown paths provide. The spans are 24px tall inside a
57449
+ ** 44px field, so they overhang it by 2px above and below; nothing in the month header clips
57450
+ ** them. They meet exactly at the midline (-2px + 24px = 22px = 50% of 44px), so the two
57451
+ ** targets do not overlap and a click cannot be captured by the wrong arrow.
57452
+ **
57453
+ ** While hidden they are also inert, so a click near the right edge of the year field cannot
57454
+ ** step the year before the arrows have appeared.
57455
+ */
57456
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-current-month .numInputWrapper span.arrowUp,
57457
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-current-month .numInputWrapper span.arrowDown {
57458
+ position: absolute;
57459
+ right: 1px;
57460
+ width: 24px;
57461
+ height: 24px;
57462
+ padding: 0 7px 0 7px;
57463
+ box-sizing: border-box;
57464
+ line-height: 50%;
57465
+ cursor: pointer;
57466
+ opacity: 0;
57467
+ pointer-events: none;
57468
+ }
57469
+
57470
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-current-month .numInputWrapper span.arrowUp {
57471
+ top: -2px;
57173
57472
  }
57174
57473
 
57175
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-current-month input.cur-year {
57474
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-current-month .numInputWrapper span.arrowDown {
57475
+ top: 50%;
57476
+ }
57477
+
57478
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-current-month .numInputWrapper:hover span.arrowUp,
57479
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-current-month .numInputWrapper:hover span.arrowDown,
57480
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-current-month .numInputWrapper:focus-within span.arrowUp,
57481
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-current-month .numInputWrapper:focus-within span.arrowDown {
57482
+ opacity: 1;
57483
+ pointer-events: auto;
57484
+ }
57485
+
57486
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-current-month .numInputWrapper span:after {
57487
+ display: block;
57488
+ content: "";
57489
+ position: absolute;
57490
+ border-left: 4px solid transparent;
57491
+ border-right: 4px solid transparent;
57492
+ }
57493
+
57494
+ /*
57495
+ ** The glyphs are decorations inside the hit areas, so they can be pulled toward the field's
57496
+ ** vertical midline without shrinking the 24x24 targets. These percentages are relative to the
57497
+ ** 24px spans and land the two triangles ~8px apart, centred on the midline, instead of pushed
57498
+ ** to the top and bottom of the 44px field.
57499
+ */
57500
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-current-month .numInputWrapper span.arrowUp:after {
57501
+ border-bottom: 4px solid var(--cc-black-10);
57502
+ top: 66%;
57503
+ }
57504
+
57505
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-current-month .numInputWrapper span.arrowDown:after {
57506
+ border-top: 4px solid var(--cc-black-10);
57507
+ top: 18%;
57508
+ }
57509
+
57510
+ /*
57511
+ ** flatpickr disables the year input when minDate/maxDate pin it to a single year, but it does
57512
+ ** not disable the arrows. Mute them off the input's state (they follow it in the DOM) so they
57513
+ ** match the disabled treatment the nav and time arrows already get. This rule outranks the
57514
+ ** hover/focus reveal above, so the arrows stay inert even once hover makes them visible — a
57515
+ ** disabled year still shows why it cannot be stepped rather than silently offering nothing.
57516
+ */
57517
+ ._wrapper_1h4l4_1
57518
+ ._content_1h4l4_56
57519
+ .flatpickr-current-month .numInputWrapper input.cur-year[disabled] ~ span {
57520
+ cursor: default;
57521
+ pointer-events: none;
57522
+ }
57523
+
57524
+ ._wrapper_1h4l4_1
57525
+ ._content_1h4l4_56
57526
+ .flatpickr-current-month .numInputWrapper input.cur-year[disabled] ~ span:after {
57527
+ border-bottom-color: var(--cc-black-80);
57528
+ border-top-color: var(--cc-black-80);
57529
+ }
57530
+
57531
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-current-month input.cur-year {
57176
57532
  border-radius: 10px;
57177
57533
  border: 1px solid var(--cc-black-60);
57178
57534
  background: var(--cc-white);
@@ -57187,16 +57543,16 @@ article
57187
57543
  color: var(--cc-black-10);
57188
57544
  }
57189
57545
 
57190
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-current-month input.cur-year:focus {
57546
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-current-month input.cur-year:focus {
57191
57547
  outline: 2px solid var(--cc-primary-color-focus);
57192
57548
  }
57193
57549
 
57194
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-current-month input.cur-year[disabled],
57195
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-current-month input.cur-year[disabled]:hover {
57550
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-current-month input.cur-year[disabled],
57551
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-current-month input.cur-year[disabled]:hover {
57196
57552
  pointer-events: none;
57197
57553
  }
57198
57554
 
57199
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-weekdays {
57555
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-weekdays {
57200
57556
  background: transparent;
57201
57557
  text-align: center;
57202
57558
  overflow: hidden;
@@ -57212,7 +57568,7 @@ article
57212
57568
  height: 28px;
57213
57569
  }
57214
57570
 
57215
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-weekdays .flatpickr-weekdaycontainer {
57571
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-weekdays .flatpickr-weekdaycontainer {
57216
57572
  display: -webkit-box;
57217
57573
  display: -webkit-flex;
57218
57574
  display: -ms-flexbox;
@@ -57223,7 +57579,7 @@ article
57223
57579
  flex: 1;
57224
57580
  }
57225
57581
 
57226
- ._wrapper_18n3o_1 ._content_18n3o_56 span.flatpickr-weekday {
57582
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 span.flatpickr-weekday {
57227
57583
  cursor: default;
57228
57584
  background: transparent;
57229
57585
  color: var(--cc-black-40);
@@ -57235,23 +57591,23 @@ article
57235
57591
  font-weight: 400;
57236
57592
  }
57237
57593
 
57238
- ._wrapper_18n3o_1 ._content_18n3o_56 .dayContainer,
57239
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-weeks {
57594
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .dayContainer,
57595
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-weeks {
57240
57596
  padding: 1px 0 0 0;
57241
57597
  }
57242
57598
 
57243
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-days {
57599
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-days {
57244
57600
  position: relative;
57245
57601
  overflow: visible;
57246
57602
  width: 100%;
57247
57603
  text-align: center;
57248
57604
  }
57249
57605
 
57250
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-days:focus {
57606
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-days:focus {
57251
57607
  outline: 0;
57252
57608
  }
57253
57609
 
57254
- ._wrapper_18n3o_1 ._content_18n3o_56 .dayContainer {
57610
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .dayContainer {
57255
57611
  padding: 0;
57256
57612
  outline: 0;
57257
57613
  text-align: left;
@@ -57273,7 +57629,7 @@ article
57273
57629
  opacity: 1;
57274
57630
  }
57275
57631
 
57276
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-day {
57632
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-day {
57277
57633
  background: none;
57278
57634
  -webkit-box-sizing: border-box;
57279
57635
  box-sizing: border-box;
@@ -57291,13 +57647,13 @@ article
57291
57647
  aspect-ratio: 1/1;
57292
57648
  }
57293
57649
 
57294
- ._wrapper_18n3o_1 ._content_18n3o_56 .hasWeeks .flatpickr-day {
57650
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .hasWeeks .flatpickr-day {
57295
57651
  -webkit-flex-basis: 14.2857143%;
57296
57652
  -ms-flex-preferred-size: 14.2857143%;
57297
57653
  flex-basis: 14.2857143%;
57298
57654
  }
57299
57655
 
57300
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-day .dayInner {
57656
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-day .dayInner {
57301
57657
  width: 32px;
57302
57658
  height: 32px;
57303
57659
  border-radius: 10px;
@@ -57306,77 +57662,77 @@ article
57306
57662
  justify-content: center;
57307
57663
  }
57308
57664
 
57309
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-day:hover .dayInner,
57310
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-day.nextMonthDay:hover .dayInner,
57311
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-day.prevMonthDay:hover .dayInner,
57312
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-day:focus .dayInner,
57313
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-day.prevMonthDay:focus .dayInner,
57314
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-day.nextMonthDay:focus .dayInner {
57665
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-day:hover .dayInner,
57666
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-day.nextMonthDay:hover .dayInner,
57667
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-day.prevMonthDay:hover .dayInner,
57668
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-day:focus .dayInner,
57669
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-day.prevMonthDay:focus .dayInner,
57670
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-day.nextMonthDay:focus .dayInner {
57315
57671
  background-color: var(--cc-black-95);
57316
57672
  }
57317
57673
 
57318
57674
  /* Visible focus ring for the roving-tabindex day. The .flatpickr-day cell receives DOM
57319
57675
  focus; the ring hugs the inner pill so keyboard users can see which date is focused. */
57320
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-day {
57676
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-day {
57321
57677
  outline: none;
57322
57678
  }
57323
57679
 
57324
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-day:focus-visible .dayInner,
57325
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-day:focus .dayInner {
57680
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-day:focus-visible .dayInner,
57681
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-day:focus .dayInner {
57326
57682
  outline: 2px solid var(--cc-primary-color);
57327
57683
  outline-offset: 2px;
57328
57684
  }
57329
57685
 
57330
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-day.flatpickr-disabled .dayInner,
57331
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-day.prevMonthDay.flatpickr-disabled .dayInner,
57332
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-day.nextMonthDay.flatpickr-disabled .dayInner {
57686
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-day.flatpickr-disabled .dayInner,
57687
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-day.prevMonthDay.flatpickr-disabled .dayInner,
57688
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-day.nextMonthDay.flatpickr-disabled .dayInner {
57333
57689
  background-color: transparent;
57334
57690
  }
57335
57691
 
57336
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-day.today .dayInner {
57692
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-day.today .dayInner {
57337
57693
  background-color: var(--cc-datepicker-today-background, var(--cc-primary-color-opacity-20));
57338
57694
  color: var(--cc-datepicker-today-color, inherit);
57339
57695
  }
57340
57696
 
57341
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-day.selected .dayInner {
57697
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-day.selected .dayInner {
57342
57698
  background-color: var(--cc-primary-color);
57343
57699
  color: var(--cc-primary-contrast-color);
57344
57700
  }
57345
57701
 
57346
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-day.inRange .dayInner,
57347
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-day.inRange:hover .dayInner,
57348
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-day.prevMonthDay.inRange .dayInner,
57349
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-day.nextMonthDay.inRange .dayInner,
57350
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-day.today.inRange .dayInner,
57351
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-day.prevMonthDay.today.inRange .dayInner,
57352
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-day.nextMonthDay.today.inRange .dayInner {
57702
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-day.inRange .dayInner,
57703
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-day.inRange:hover .dayInner,
57704
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-day.prevMonthDay.inRange .dayInner,
57705
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-day.nextMonthDay.inRange .dayInner,
57706
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-day.today.inRange .dayInner,
57707
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-day.prevMonthDay.today.inRange .dayInner,
57708
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-day.nextMonthDay.today.inRange .dayInner {
57353
57709
  width: 100%;
57354
57710
  background-color: var(--cc-primary-color);
57355
57711
  color: var(--cc-primary-contrast-color);
57356
57712
  }
57357
57713
 
57358
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-day.startRange .dayInner,
57359
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-day.startRange:hover .dayInner,
57360
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-day.endRange .dayInner,
57361
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-day.endRange:hover .dayInner {
57714
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-day.startRange .dayInner,
57715
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-day.startRange:hover .dayInner,
57716
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-day.endRange .dayInner,
57717
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-day.endRange:hover .dayInner {
57362
57718
  background-color: var(--cc-primary-color);
57363
57719
  color: var(--cc-primary-contrast-color);
57364
57720
  }
57365
57721
 
57366
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-day.startRange:not(.endRange) .dayInner {
57722
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-day.startRange:not(.endRange) .dayInner {
57367
57723
  border-top-right-radius: unset;
57368
57724
  border-bottom-right-radius: unset;
57369
57725
  }
57370
57726
 
57371
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-day.endRange:not(.startRange) .dayInner {
57727
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-day.endRange:not(.startRange) .dayInner {
57372
57728
  border-top-left-radius: unset;
57373
57729
  border-bottom-left-radius: unset;
57374
57730
  }
57375
57731
 
57376
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-day.inRange .dayInner::after,
57377
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-day.startRange:not(.endRange) .dayInner::after,
57378
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-day.inRange .dayInner::before,
57379
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-day.endRange:not(.startRange) .dayInner::before {
57732
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-day.inRange .dayInner::after,
57733
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-day.startRange:not(.endRange) .dayInner::after,
57734
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-day.inRange .dayInner::before,
57735
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-day.endRange:not(.startRange) .dayInner::before {
57380
57736
  content: "";
57381
57737
  height: 32px;
57382
57738
  width: 32px;
@@ -57384,43 +57740,43 @@ article
57384
57740
  background-color: var(--cc-primary-color);
57385
57741
  z-index: -1;
57386
57742
  }
57387
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-day.inRange .dayInner::after,
57388
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-day.startRange:not(.endRange) .dayInner::after {
57743
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-day.inRange .dayInner::after,
57744
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-day.startRange:not(.endRange) .dayInner::after {
57389
57745
  right: -13px;
57390
57746
  }
57391
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-day.inRange .dayInner::before,
57392
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-day.endRange:not(.startRange) .dayInner::before {
57747
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-day.inRange .dayInner::before,
57748
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-day.endRange:not(.startRange) .dayInner::before {
57393
57749
  left: -13px;
57394
57750
  }
57395
57751
 
57396
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-day.flatpickr-disabled,
57397
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-disabled.flatpickr-day,
57398
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-day.flatpickr-disabled:hover,
57399
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-day.prevMonthDay,
57400
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-day.nextMonthDay,
57401
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-day.notAllowed,
57402
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-day.notAllowed.prevMonthDay,
57403
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-day.notAllowed.nextMonthDay {
57752
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-day.flatpickr-disabled,
57753
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-disabled.flatpickr-day,
57754
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-day.flatpickr-disabled:hover,
57755
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-day.prevMonthDay,
57756
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-day.nextMonthDay,
57757
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-day.notAllowed,
57758
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-day.notAllowed.prevMonthDay,
57759
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-day.notAllowed.nextMonthDay {
57404
57760
  color: var(--cc-black-80);
57405
57761
  background: transparent;
57406
57762
  border-color: transparent;
57407
57763
  cursor: default;
57408
57764
  }
57409
57765
 
57410
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-day.flatpickr-disabled,
57411
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-day.flatpickr-disabled:hover {
57766
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-day.flatpickr-disabled,
57767
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-day.flatpickr-disabled:hover {
57412
57768
  cursor: not-allowed;
57413
57769
  }
57414
57770
 
57415
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-day.hidden {
57771
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-day.hidden {
57416
57772
  visibility: hidden;
57417
57773
  }
57418
57774
 
57419
- ._wrapper_18n3o_1 ._content_18n3o_56 .rangeMode .flatpickr-day {
57775
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .rangeMode .flatpickr-day {
57420
57776
  margin-top: 1px;
57421
57777
  }
57422
57778
 
57423
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-weekwrapper .flatpickr-weekday {
57779
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-weekwrapper .flatpickr-weekday {
57424
57780
  background: transparent;
57425
57781
  text-align: center;
57426
57782
  overflow: hidden;
@@ -57431,8 +57787,8 @@ article
57431
57787
  height: 28px;
57432
57788
  }
57433
57789
 
57434
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-weekwrapper span.flatpickr-day,
57435
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-weekwrapper span.flatpickr-day:hover {
57790
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-weekwrapper span.flatpickr-day,
57791
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-weekwrapper span.flatpickr-day:hover {
57436
57792
  background: none;
57437
57793
  -webkit-box-sizing: border-box;
57438
57794
  box-sizing: border-box;
@@ -57451,14 +57807,14 @@ article
57451
57807
  width: 100%;
57452
57808
  }
57453
57809
 
57454
- ._wrapper_18n3o_1 ._content_18n3o_56 .hasWeeks .flatpickr-weekwrapper span.flatpickr-day,
57455
- ._wrapper_18n3o_1 ._content_18n3o_56 .hasWeeks .flatpickr-weekwrapper span.flatpickr-day:hover {
57810
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .hasWeeks .flatpickr-weekwrapper span.flatpickr-day,
57811
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .hasWeeks .flatpickr-weekwrapper span.flatpickr-day:hover {
57456
57812
  -webkit-flex-basis: 14.2857143%;
57457
57813
  -ms-flex-preferred-size: 14.2857143%;
57458
57814
  flex-basis: 14.2857143%;
57459
57815
  }
57460
57816
 
57461
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-weekwrapper span.flatpickr-day span.weekdayInner {
57817
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-weekwrapper span.flatpickr-day span.weekdayInner {
57462
57818
  width: 27px;
57463
57819
  height: 100%;
57464
57820
  display: flex;
@@ -57466,17 +57822,17 @@ article
57466
57822
  justify-content: center;
57467
57823
  background-color: var(--cc-black-80);
57468
57824
  }
57469
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-weekwrapper span.flatpickr-day span.weekdayInner.currentWeek {
57825
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-weekwrapper span.flatpickr-day span.weekdayInner.currentWeek {
57470
57826
  color: var(--cc-black-40);
57471
57827
  }
57472
57828
 
57473
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-weekwrapper span.flatpickr-day:first-child span.weekdayInner {
57829
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-weekwrapper span.flatpickr-day:first-child span.weekdayInner {
57474
57830
  height: 27px;
57475
57831
  border-top-right-radius: 10px;
57476
57832
  border-top-left-radius: 10px;
57477
57833
  }
57478
- ._wrapper_18n3o_1
57479
- ._content_18n3o_56
57834
+ ._wrapper_1h4l4_1
57835
+ ._content_1h4l4_56
57480
57836
  .flatpickr-weekwrapper span.flatpickr-day:first-child span.weekdayInner::after {
57481
57837
  content: "";
57482
57838
  width: 27px;
@@ -57486,13 +57842,13 @@ article
57486
57842
  background-color: var(--cc-black-80);
57487
57843
  }
57488
57844
 
57489
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-weekwrapper span.flatpickr-day:last-child span.weekdayInner {
57845
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-weekwrapper span.flatpickr-day:last-child span.weekdayInner {
57490
57846
  height: 27px;
57491
57847
  border-bottom-right-radius: 10px;
57492
57848
  border-bottom-left-radius: 10px;
57493
57849
  }
57494
- ._wrapper_18n3o_1
57495
- ._content_18n3o_56
57850
+ ._wrapper_1h4l4_1
57851
+ ._content_1h4l4_56
57496
57852
  .flatpickr-weekwrapper span.flatpickr-day:last-child span.weekdayInner::after {
57497
57853
  content: "";
57498
57854
  width: 27px;
@@ -57502,20 +57858,20 @@ article
57502
57858
  background-color: var(--cc-black-80);
57503
57859
  }
57504
57860
 
57505
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-weekwrapper {
57861
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-weekwrapper {
57506
57862
  float: left;
57507
57863
  width: 12.5%;
57508
57864
  position: relative;
57509
57865
  z-index: 1;
57510
57866
  }
57511
57867
 
57512
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-rContainer {
57868
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-rContainer {
57513
57869
  display: flex;
57514
57870
  flex-direction: column;
57515
57871
  flex-grow: 1;
57516
57872
  }
57517
57873
 
57518
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-time {
57874
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-time {
57519
57875
  text-align: center;
57520
57876
  outline: 0;
57521
57877
  height: 116px;
@@ -57529,17 +57885,17 @@ article
57529
57885
  justify-content: center;
57530
57886
  }
57531
57887
 
57532
- ._wrapper_18n3o_1 ._content_18n3o_56 .noCalendar .flatpickr-time {
57888
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .noCalendar .flatpickr-time {
57533
57889
  border-top: none;
57534
57890
  }
57535
57891
 
57536
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-time:after {
57892
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-time:after {
57537
57893
  content: "";
57538
57894
  display: table;
57539
57895
  clear: both;
57540
57896
  }
57541
57897
 
57542
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-time .numInputWrapper {
57898
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-time .numInputWrapper {
57543
57899
  width: 44px;
57544
57900
  height: 100%;
57545
57901
  position: relative;
@@ -57547,13 +57903,13 @@ article
57547
57903
  align-items: center;
57548
57904
  }
57549
57905
 
57550
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-time span.arrowUp:after,
57551
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-time span.arrowDown:after {
57906
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-time span.arrowUp:after,
57907
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-time span.arrowDown:after {
57552
57908
  display: none;
57553
57909
  }
57554
57910
 
57555
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-time span.arrowUp,
57556
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-time span.arrowDown {
57911
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-time span.arrowUp,
57912
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-time span.arrowDown {
57557
57913
  position: absolute;
57558
57914
  width: 44px;
57559
57915
  display: flex;
@@ -57561,33 +57917,33 @@ article
57561
57917
  cursor: pointer;
57562
57918
  }
57563
57919
 
57564
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-time span.arrowUp.disabled,
57565
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-time span.arrowDown.disabled {
57920
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-time span.arrowUp.disabled,
57921
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-time span.arrowDown.disabled {
57566
57922
  cursor: default;
57567
57923
  }
57568
57924
 
57569
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-time svg {
57925
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-time svg {
57570
57926
  pointer-events: none;
57571
57927
  }
57572
57928
 
57573
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-time svg path {
57929
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-time svg path {
57574
57930
  fill: var(--cc-black-10);
57575
57931
  }
57576
57932
 
57577
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-time span.disabled svg path {
57933
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-time span.disabled svg path {
57578
57934
  fill: var(--cc-black-80);
57579
57935
  }
57580
57936
 
57581
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-time span.arrowUp {
57937
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-time span.arrowUp {
57582
57938
  top: 0;
57583
57939
  transform: rotate(90deg);
57584
57940
  }
57585
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-time span.arrowDown {
57941
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-time span.arrowDown {
57586
57942
  bottom: 0;
57587
57943
  transform: rotate(270deg);
57588
57944
  }
57589
57945
 
57590
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-time input {
57946
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-time input {
57591
57947
  border-radius: 10px;
57592
57948
  border: 1px solid var(--cc-black-60, #999);
57593
57949
  background: var(--cc-white, #fff);
@@ -57604,31 +57960,31 @@ article
57604
57960
  color: var(--cc-black-10);
57605
57961
  }
57606
57962
 
57607
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-time input.flatpickr-minute,
57608
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-time input.flatpickr-second {
57963
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-time input.flatpickr-minute,
57964
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-time input.flatpickr-second {
57609
57965
  font-weight: 400;
57610
57966
  }
57611
57967
 
57612
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-time input.flatpickr-hour:focus,
57613
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-time input.flatpickr-minute:focus,
57614
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-time input.flatpickr-second:focus {
57968
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-time input.flatpickr-hour:focus,
57969
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-time input.flatpickr-minute:focus,
57970
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-time input.flatpickr-second:focus {
57615
57971
  outline: 2px solid var(--cc-primary-color-focus);
57616
57972
  }
57617
57973
 
57618
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-time span.flatpickr-am-pm:focus-visible {
57974
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-time span.flatpickr-am-pm:focus-visible {
57619
57975
  outline: 2px solid var(--cc-primary-color-focus);
57620
57976
  outline-offset: -2px;
57621
57977
  }
57622
57978
 
57623
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-time input:focus {
57979
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-time input:focus {
57624
57980
  outline: 0;
57625
57981
  }
57626
57982
 
57627
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-time .flatpickr-time-separator {
57983
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-time .flatpickr-time-separator {
57628
57984
  width: 20px;
57629
57985
  }
57630
57986
 
57631
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-time .flatpickr-am-pm {
57987
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-time .flatpickr-am-pm {
57632
57988
  font-size: 14px;
57633
57989
  outline: 0;
57634
57990
  cursor: pointer;
@@ -57642,21 +57998,21 @@ article
57642
57998
  color: var(--cc-black-10);
57643
57999
  }
57644
58000
 
57645
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-time .flatpickr-am-pm span:not(.disabled) {
58001
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-time .flatpickr-am-pm span:not(.disabled) {
57646
58002
  pointer-events: none;
57647
58003
  }
57648
58004
 
57649
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-input {
58005
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-input {
57650
58006
  display: none;
57651
58007
  }
57652
58008
 
57653
58009
  @media screen and (max-height: 780px) {
57654
- ._wrapper_18n3o_1 ._contentWrapper_18n3o_764 {
58010
+ ._wrapper_1h4l4_1 ._contentWrapper_1h4l4_860 {
57655
58011
  overflow-y: auto;
57656
58012
  }
57657
58013
  }
57658
58014
  @media screen and (max-width: 575px) {
57659
- ._wrapper_18n3o_1 ._contentWrapper_18n3o_764 {
58015
+ ._wrapper_1h4l4_1 ._contentWrapper_1h4l4_860 {
57660
58016
  overflow-y: auto;
57661
58017
  overflow-x: hidden;
57662
58018
  padding-bottom: 40px;
@@ -57665,32 +58021,33 @@ article
57665
58021
  /*
57666
58022
  * Prevent auto-zoom on mobile devices
57667
58023
  */
57668
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-current-month .flatpickr-monthDropdown-months {
58024
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-current-month .flatpickr-monthDropdown-months {
57669
58025
  font-size: 16px;
57670
58026
  }
57671
58027
 
57672
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-current-month .numInputWrapper {
57673
- width: 64px;
58028
+ /* Same reasoning as the base rule, scaled for the 16px anti-auto-zoom font size. */
58029
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-current-month .numInputWrapper {
58030
+ width: 80px;
57674
58031
  }
57675
58032
 
57676
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-current-month input.cur-year {
58033
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-current-month input.cur-year {
57677
58034
  font-size: 16px;
57678
58035
  }
57679
58036
 
57680
- ._wrapper_18n3o_1 ._content_18n3o_56._content_18n3o_56 .flatpickr-time .numInputWrapper {
58037
+ ._wrapper_1h4l4_1 ._content_1h4l4_56._content_1h4l4_56 .flatpickr-time .numInputWrapper {
57681
58038
  width: 46px;
57682
58039
  }
57683
58040
 
57684
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-time span.arrowUp,
57685
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-time span.arrowDown {
58041
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-time span.arrowUp,
58042
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-time span.arrowDown {
57686
58043
  width: 46px;
57687
58044
  }
57688
58045
 
57689
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-time input {
58046
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-time input {
57690
58047
  font-size: 16px;
57691
58048
  }
57692
58049
 
57693
- ._wrapper_18n3o_1 ._content_18n3o_56 .flatpickr-time .flatpickr-am-pm {
58050
+ ._wrapper_1h4l4_1 ._content_1h4l4_56 .flatpickr-time .flatpickr-am-pm {
57694
58051
  font-size: 16px;
57695
58052
  }
57696
58053
  }
@@ -85023,7 +85380,7 @@ const ActionButton = props2 => {
85023
85380
  const sanitizedButtonUrl = isWebURL ? distExports.sanitizeUrl(button2.url) : void 0;
85024
85381
  const webUrlHref = config2?.settings?.layout?.disableUrlButtonSanitization ? button2.url : sanitizedButtonUrl === "about:blank" ? "about:blank" : button2.url;
85025
85382
  const isWebURLButtonTargetBlank = isWebURL && button2.target !== "_self";
85026
- const opensInNewTab = config2?.settings?.layout?.disableUrlButtonSanitization ? isWebURL && button2.target === "_blank" : isWebURLButtonTargetBlank;
85383
+ const opensInNewTab = isWebURLButtonTargetBlank;
85027
85384
  const opensInNewTabLabel = config2?.settings?.customTranslations?.ariaLabels?.opensInNewTab || "Opens in new tab";
85028
85385
  const positionText = total > 1 ? interpolateString(config2?.settings?.customTranslations?.ariaLabels?.actionButtonPositionText ?? "{position} of {total}", {
85029
85386
  position: position2.toString(),
@@ -85062,15 +85419,15 @@ const ActionButton = props2 => {
85062
85419
  return;
85063
85420
  }
85064
85421
  if (isWebURL) {
85065
- if (config2?.settings?.layout?.disableUrlButtonSanitization) {
85066
- if (disabled2) event.preventDefault();
85067
- return;
85068
- }
85422
+ const url = config2?.settings?.layout?.disableUrlButtonSanitization ? button2.url : sanitizedButtonUrl;
85069
85423
  event.preventDefault();
85070
85424
  if (disabled2) return;
85071
- const url = sanitizedButtonUrl;
85072
- if (url === "about:blank") return;
85073
- window.open(url, isWebURLButtonTargetBlank ? "_blank" : "_self");
85425
+ if (!url || url === "about:blank") return;
85426
+ if (isWebURLButtonTargetBlank) {
85427
+ window.open(url, "_blank", "noopener");
85428
+ } else {
85429
+ window.open(url, "_self");
85430
+ }
85074
85431
  return;
85075
85432
  }
85076
85433
  if (disabled2) return;
@@ -85190,9 +85547,11 @@ const ActionButtons = props2 => {
85190
85547
  }, index2) : actionButton2;
85191
85548
  });
85192
85549
  const Component = buttons2.length > 1 ? "ul" : "div";
85550
+ const singleButtonRole = Component === "div" && templateTextId ? "group" : void 0;
85193
85551
  return /* @__PURE__ */(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(Component, {
85194
85552
  className: classnames$1(className, classes$d.buttons, containerClassName),
85195
85553
  style: containerStyle || {},
85554
+ role: singleButtonRole,
85196
85555
  "aria-labelledby": templateTextId,
85197
85556
  "data-testid": "action-buttons",
85198
85557
  children: buttonElements
@@ -98261,7 +98620,8 @@ const Gallery = () => {
98261
98620
  nextEl: ".gallery-button-next"
98262
98621
  },
98263
98622
  pagination: {
98264
- clickable: true
98623
+ clickable: true,
98624
+ el: ".gallery-pagination"
98265
98625
  },
98266
98626
  className: classnames$1("webchat-carousel-template-root", classes$8.wrapper),
98267
98627
  "data-testid": "gallery-message",
@@ -98282,19 +98642,21 @@ const Gallery = () => {
98282
98642
  }), /* @__PURE__ */(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("button", {
98283
98643
  className: "gallery-button-next",
98284
98644
  children: /* @__PURE__ */(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(SvgArrowBack, {})
98645
+ }), /* @__PURE__ */(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("div", {
98646
+ className: "gallery-pagination swiper-pagination"
98285
98647
  })]
98286
98648
  });
98287
98649
  };
98288
- const wrapper = "_wrapper_18n3o_1";
98289
- const header$1 = "_header_18n3o_15";
98290
- const left = "_left_18n3o_24";
98291
- const center = "_center_18n3o_28";
98292
- const right = "_right_18n3o_35";
98293
- const content = "_content_18n3o_56";
98294
- const footer = "_footer_18n3o_60";
98295
- const hasTime = "_hasTime_18n3o_68";
98296
- const noCalendar = "_noCalendar_18n3o_68";
98297
- const contentWrapper = "_contentWrapper_18n3o_764";
98650
+ const wrapper = "_wrapper_1h4l4_1";
98651
+ const header$1 = "_header_1h4l4_15";
98652
+ const left = "_left_1h4l4_24";
98653
+ const center = "_center_1h4l4_28";
98654
+ const right = "_right_1h4l4_35";
98655
+ const content = "_content_1h4l4_56";
98656
+ const footer = "_footer_1h4l4_60";
98657
+ const hasTime = "_hasTime_1h4l4_68";
98658
+ const noCalendar = "_noCalendar_1h4l4_68";
98659
+ const contentWrapper = "_contentWrapper_1h4l4_860";
98298
98660
  const classes$6 = {
98299
98661
  wrapper,
98300
98662
  header: header$1,
@@ -117905,7 +118267,7 @@ const TextWithButtons = props2 => {
117905
118267
  showUrlIcon: true,
117906
118268
  config: config2,
117907
118269
  onEmitAnalytics,
117908
- templateTextId: webchatButtonTemplateTextId,
118270
+ templateTextId: text2 ? webchatButtonTemplateTextId : void 0,
117909
118271
  openXAppOverlay
117910
118272
  })]
117911
118273
  });
@@ -133596,12 +133958,14 @@ const AdaptiveCards = () => {
133596
133958
  }
133597
133959
  case "Action.OpenUrl":
133598
133960
  {
133599
- const url = action._propertyBag?.url;
133600
- window.open(url, "_blank");
133961
+ const rawUrl = action._propertyBag?.url;
133962
+ const url = config2?.settings?.layout?.disableUrlButtonSanitization ? rawUrl : distExports.sanitizeUrl(rawUrl);
133963
+ if (!url || url === "about:blank") return;
133964
+ window.open(url, "_blank", "noopener");
133601
133965
  return;
133602
133966
  }
133603
133967
  }
133604
- }, [onSendMessage, shouldBeDisabled]);
133968
+ }, [onSendMessage, shouldBeDisabled, config2?.settings?.layout?.disableUrlButtonSanitization]);
133605
133969
  return /* @__PURE__ */(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(ChatBubble, {
133606
133970
  className: classnames$1(styles["adaptivecard-wrapper"], "adaptivecard-wrapper internal", shouldBeDisabled && styles.chatDisabled),
133607
133971
  children: /* @__PURE__ */(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(AdaptiveCard, {
@@ -138440,6 +138804,17 @@ function getAdapter(adapters, config) {
138440
138804
 
138441
138805
 
138442
138806
  const DEFAULT_CHUNK_SIZE = 64 * 1024;
138807
+ const DEFAULT_REQUEST_OPTIONS = {
138808
+ cache: 'default',
138809
+ redirect: 'follow',
138810
+ referrer: 'about:client',
138811
+ referrerPolicy: '',
138812
+ mode: 'cors',
138813
+ integrity: '',
138814
+ keepalive: false,
138815
+ priority: 'auto',
138816
+ window: null
138817
+ };
138443
138818
  const {
138444
138819
  isFunction
138445
138820
  } = _utils_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A;
@@ -138582,7 +138957,8 @@ const factory = env => {
138582
138957
  withCredentials = 'same-origin',
138583
138958
  fetchOptions,
138584
138959
  maxContentLength,
138585
- maxBodyLength
138960
+ maxBodyLength,
138961
+ maxRedirects
138586
138962
  } = (0,_helpers_resolveConfig_js__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .A)(config);
138587
138963
  const hasMaxContentLength = _utils_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A.isNumber(maxContentLength) && maxContentLength > -1;
138588
138964
  const hasMaxBodyLength = _utils_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A.isNumber(maxBodyLength) && maxBodyLength > -1;
@@ -138713,17 +139089,46 @@ const factory = env => {
138713
139089
 
138714
139090
  // Set User-Agent header if not already set (fetch defaults to 'node' in Node.js)
138715
139091
  headers.set('User-Agent', 'axios/' + _env_data_js__WEBPACK_IMPORTED_MODULE_10__/* .VERSION */ .x, false);
138716
- const resolvedOptions = {
138717
- ...fetchOptions,
139092
+ const safeFetchOptions = fetchOptions == null ? fetchOptions : Object.assign(Object.create(null), fetchOptions);
139093
+ if (safeFetchOptions) {
139094
+ // These options are owned by Axios and are already reflected in the
139095
+ // resolved Request passed to fetch.
139096
+ delete safeFetchOptions.body;
139097
+ delete safeFetchOptions.headers;
139098
+ delete safeFetchOptions.method;
139099
+ delete safeFetchOptions.signal;
139100
+ delete safeFetchOptions.duplex;
139101
+ delete safeFetchOptions.credentials;
139102
+ }
139103
+ const resolvedOptions = Object.assign(Object.create(null), safeFetchOptions, {
138718
139104
  signal: composedSignal,
138719
139105
  method: method.toUpperCase(),
138720
139106
  headers: (0,_helpers_sanitizeHeaderValue_js__WEBPACK_IMPORTED_MODULE_11__/* .toByteStringHeaderObject */ .$$)(headers.normalize()),
138721
139107
  body: data,
138722
139108
  duplex: 'half',
138723
139109
  credentials: isCredentialsSupported ? withCredentials : undefined
138724
- };
139110
+ });
139111
+ if (isRequestSupported) {
139112
+ _utils_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A.forEach(DEFAULT_REQUEST_OPTIONS, (value, key) => {
139113
+ if (resolvedOptions[key] === undefined) {
139114
+ resolvedOptions[key] = value;
139115
+ }
139116
+ });
139117
+ if (resolvedOptions.signal === undefined) {
139118
+ resolvedOptions.signal = null;
139119
+ }
139120
+ if (resolvedOptions.body === undefined) {
139121
+ resolvedOptions.body = null;
139122
+ }
139123
+ }
139124
+ if (maxRedirects === 0) {
139125
+ resolvedOptions.redirect = 'manual';
139126
+ if (safeFetchOptions) {
139127
+ safeFetchOptions.redirect = 'manual';
139128
+ }
139129
+ }
138725
139130
  request = isRequestSupported && new Request(url, resolvedOptions);
138726
- let response = await (isRequestSupported ? _fetch(request, fetchOptions) : _fetch(url, resolvedOptions));
139131
+ let response = await (isRequestSupported ? _fetch(request, safeFetchOptions) : _fetch(url, resolvedOptions));
138727
139132
  const responseHeaders = _core_AxiosHeaders_js__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .A.from(response.headers);
138728
139133
 
138729
139134
  // Cheap pre-check: if the server honestly declares a content-length that
@@ -138884,12 +139289,14 @@ const adapter = getFetch();
138884
139289
  /* harmony import */ var _defaults_transitional_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(96458);
138885
139290
  /* harmony import */ var _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(7996);
138886
139291
  /* harmony import */ var _cancel_CanceledError_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(62200);
138887
- /* harmony import */ var _helpers_parseProtocol_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(58177);
138888
- /* harmony import */ var _platform_index_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(75194);
138889
- /* harmony import */ var _core_AxiosHeaders_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(88580);
138890
- /* harmony import */ var _helpers_progressEventReducer_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(41487);
138891
- /* harmony import */ var _helpers_resolveConfig_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(38652);
138892
- /* harmony import */ var _helpers_sanitizeHeaderValue_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(5681);
139292
+ /* harmony import */ var _helpers_normalizeURLForProtocolCheck_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(69893);
139293
+ /* harmony import */ var _helpers_parseProtocol_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(58177);
139294
+ /* harmony import */ var _platform_index_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(75194);
139295
+ /* harmony import */ var _core_AxiosHeaders_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(88580);
139296
+ /* harmony import */ var _helpers_progressEventReducer_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(41487);
139297
+ /* harmony import */ var _helpers_resolveConfig_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(38652);
139298
+ /* harmony import */ var _helpers_sanitizeHeaderValue_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(5681);
139299
+
138893
139300
 
138894
139301
 
138895
139302
 
@@ -138904,9 +139311,9 @@ const adapter = getFetch();
138904
139311
  const isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';
138905
139312
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isXHRAdapterSupported && function (config) {
138906
139313
  return new Promise(function dispatchXhrRequest(resolve, reject) {
138907
- const _config = (0,_helpers_resolveConfig_js__WEBPACK_IMPORTED_MODULE_9__/* ["default"] */ .A)(config);
139314
+ const _config = (0,_helpers_resolveConfig_js__WEBPACK_IMPORTED_MODULE_10__/* ["default"] */ .A)(config);
138908
139315
  let requestData = _config.data;
138909
- const requestHeaders = _core_AxiosHeaders_js__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .A.from(_config.headers).normalize();
139316
+ const requestHeaders = _core_AxiosHeaders_js__WEBPACK_IMPORTED_MODULE_8__/* ["default"] */ .A.from(_config.headers).normalize();
138910
139317
  let {
138911
139318
  responseType,
138912
139319
  onUploadProgress,
@@ -138914,7 +139321,7 @@ const isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';
138914
139321
  } = _config;
138915
139322
  let onCanceled;
138916
139323
  let uploadThrottled, downloadThrottled;
138917
- let flushUpload, flushDownload;
139324
+ let flushUpload, flushDownload, flushDownloadWithEvent;
138918
139325
  function done() {
138919
139326
  flushUpload && flushUpload(); // flush events
138920
139327
  flushDownload && flushDownload(); // flush events
@@ -138927,12 +139334,52 @@ const isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';
138927
139334
 
138928
139335
  // Set the request timeout in MS
138929
139336
  request.timeout = _config.timeout;
138930
- function onloadend() {
139337
+ function onloadend(event) {
138931
139338
  if (!request) {
138932
139339
  return;
138933
139340
  }
139341
+
139342
+ // Status 0 means no response was received, which onerror and onabort normally
139343
+ // reject before this runs. Firefox 152 fires only readystatechange and loadend for
139344
+ // navigation-canceled requests (https://bugzilla.mozilla.org/show_bug.cgi?id=1505389),
139345
+ // leaving settle() to resolve them as an empty success. ECONNABORTED is the error
139346
+ // onabort raised on Firefox 151. Reads over file:, which some environments report as
139347
+ // status 0 on success, are excluded by the request URL's scheme after browser-style
139348
+ // preprocessing, by the page origin's scheme for relative URLs (which inherit it), or
139349
+ // by responseURL where implemented.
139350
+ if (request.status === 0 && ((0,_helpers_parseProtocol_js__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .A)((0,_helpers_normalizeURLForProtocolCheck_js__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .A)(_config.url)) || (0,_helpers_parseProtocol_js__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .A)(_platform_index_js__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .A.origin)) !== 'file' && !(request.responseURL && request.responseURL.startsWith('file:'))) {
139351
+ reject(new _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A('Request aborted', _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A.ECONNABORTED, config, request));
139352
+ done();
139353
+
139354
+ // Clean up request
139355
+ request = null;
139356
+ return;
139357
+ }
139358
+
139359
+ // When loadend is still dispatching, flushing with it gives progress
139360
+ // listeners a final delivery whose event has a live target. The legacy
139361
+ // ready-state fallback has no event, so replay its pending progress.
139362
+ // A throwing listener must not block settlement; rethrow asynchronously,
139363
+ // matching how listener errors surface on the throttle timer path.
139364
+ try {
139365
+ if (event) {
139366
+ flushDownloadWithEvent && flushDownloadWithEvent(event);
139367
+ } else {
139368
+ flushDownload && flushDownload();
139369
+ }
139370
+ } catch (err) {
139371
+ setTimeout(() => {
139372
+ throw err;
139373
+ });
139374
+ }
139375
+
139376
+ // A final progress callback can cancel the request synchronously.
139377
+ if (!request) {
139378
+ return;
139379
+ }
139380
+
138934
139381
  // Prepare the response
138935
- const responseHeaders = _core_AxiosHeaders_js__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .A.from('getAllResponseHeaders' in request && request.getAllResponseHeaders());
139382
+ const responseHeaders = _core_AxiosHeaders_js__WEBPACK_IMPORTED_MODULE_8__/* ["default"] */ .A.from('getAllResponseHeaders' in request && request.getAllResponseHeaders());
138936
139383
  const responseData = !responseType || responseType === 'text' || responseType === 'json' ? request.responseText : request.response;
138937
139384
  const response = {
138938
139385
  data: responseData,
@@ -139021,7 +139468,7 @@ const isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';
139021
139468
 
139022
139469
  // Add headers to the request
139023
139470
  if ('setRequestHeader' in request) {
139024
- _utils_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.forEach((0,_helpers_sanitizeHeaderValue_js__WEBPACK_IMPORTED_MODULE_10__/* .toByteStringHeaderObject */ .$$)(requestHeaders), function setRequestHeader(val, key) {
139471
+ _utils_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.forEach((0,_helpers_sanitizeHeaderValue_js__WEBPACK_IMPORTED_MODULE_11__/* .toByteStringHeaderObject */ .$$)(requestHeaders), function setRequestHeader(val, key) {
139025
139472
  request.setRequestHeader(key, val);
139026
139473
  });
139027
139474
  }
@@ -139038,13 +139485,13 @@ const isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';
139038
139485
 
139039
139486
  // Handle progress if needed
139040
139487
  if (onDownloadProgress) {
139041
- [downloadThrottled, flushDownload] = (0,_helpers_progressEventReducer_js__WEBPACK_IMPORTED_MODULE_8__/* .progressEventReducer */ .C1)(onDownloadProgress, true);
139488
+ [downloadThrottled, flushDownload, flushDownloadWithEvent] = (0,_helpers_progressEventReducer_js__WEBPACK_IMPORTED_MODULE_9__/* .progressEventReducer */ .C1)(onDownloadProgress, true);
139042
139489
  request.addEventListener('progress', downloadThrottled);
139043
139490
  }
139044
139491
 
139045
139492
  // Not all browsers support upload events
139046
139493
  if (onUploadProgress && request.upload) {
139047
- [uploadThrottled, flushUpload] = (0,_helpers_progressEventReducer_js__WEBPACK_IMPORTED_MODULE_8__/* .progressEventReducer */ .C1)(onUploadProgress);
139494
+ [uploadThrottled, flushUpload] = (0,_helpers_progressEventReducer_js__WEBPACK_IMPORTED_MODULE_9__/* .progressEventReducer */ .C1)(onUploadProgress);
139048
139495
  request.upload.addEventListener('progress', uploadThrottled);
139049
139496
  request.upload.addEventListener('loadend', flushUpload);
139050
139497
  }
@@ -139065,8 +139512,8 @@ const isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';
139065
139512
  _config.signal.aborted ? onCanceled() : _config.signal.addEventListener('abort', onCanceled);
139066
139513
  }
139067
139514
  }
139068
- const protocol = (0,_helpers_parseProtocol_js__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .A)(_config.url);
139069
- if (protocol && !_platform_index_js__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .A.protocols.includes(protocol)) {
139515
+ const protocol = (0,_helpers_parseProtocol_js__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .A)(_config.url);
139516
+ if (protocol && !_platform_index_js__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .A.protocols.includes(protocol)) {
139070
139517
  reject(new _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A('Unsupported protocol ' + protocol + ':', _core_AxiosError_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A.ERR_BAD_REQUEST, config));
139071
139518
  done();
139072
139519
  return;
@@ -139376,9 +139823,11 @@ function isCancel(value) {
139376
139823
  /* harmony import */ var _dispatchRequest_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(11669);
139377
139824
  /* harmony import */ var _mergeConfig_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(6068);
139378
139825
  /* harmony import */ var _buildFullPath_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(1216);
139379
- /* harmony import */ var _helpers_validator_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(83092);
139380
- /* harmony import */ var _AxiosHeaders_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(88580);
139381
- /* harmony import */ var _defaults_transitional_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(96458);
139826
+ /* harmony import */ var _methodList_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(31109);
139827
+ /* harmony import */ var _helpers_validator_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(83092);
139828
+ /* harmony import */ var _AxiosHeaders_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(88580);
139829
+ /* harmony import */ var _defaults_transitional_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(96458);
139830
+
139382
139831
 
139383
139832
 
139384
139833
 
@@ -139390,7 +139839,7 @@ function isCancel(value) {
139390
139839
 
139391
139840
 
139392
139841
 
139393
- const validators = _helpers_validator_js__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .A.validators;
139842
+ const validators = _helpers_validator_js__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .A.validators;
139394
139843
 
139395
139844
  /**
139396
139845
  * Create a new instance of Axios
@@ -139421,18 +139870,17 @@ class Axios {
139421
139870
  return await this._request(configOrUrl, config);
139422
139871
  } catch (err) {
139423
139872
  if (err instanceof Error) {
139424
- let dummy = {};
139425
- Error.captureStackTrace ? Error.captureStackTrace(dummy) : dummy = new Error();
139873
+ try {
139874
+ let dummy = {};
139875
+ Error.captureStackTrace ? Error.captureStackTrace(dummy) : dummy = new Error();
139876
+ const dummyStack = dummy.stack;
139877
+ let stack = '';
139426
139878
 
139427
- // slice off the Error: ... line
139428
- const stack = (() => {
139429
- if (!dummy.stack) {
139430
- return '';
139879
+ // slice off the Error: ... line
139880
+ if (typeof dummyStack === 'string') {
139881
+ const firstNewlineIndex = dummyStack.indexOf('\n');
139882
+ stack = firstNewlineIndex === -1 ? '' : dummyStack.slice(firstNewlineIndex + 1);
139431
139883
  }
139432
- const firstNewlineIndex = dummy.stack.indexOf('\n');
139433
- return firstNewlineIndex === -1 ? '' : dummy.stack.slice(firstNewlineIndex + 1);
139434
- })();
139435
- try {
139436
139884
  if (!err.stack) {
139437
139885
  err.stack = stack;
139438
139886
  // match without the 2 top stack lines
@@ -139445,7 +139893,7 @@ class Axios {
139445
139893
  }
139446
139894
  }
139447
139895
  } catch (e) {
139448
- // ignore the case where "stack" is an un-writable property
139896
+ // Ignore failures from custom stack hooks or un-writable stack properties.
139449
139897
  }
139450
139898
  }
139451
139899
  throw err;
@@ -139467,7 +139915,7 @@ class Axios {
139467
139915
  headers
139468
139916
  } = config;
139469
139917
  if (transitional !== undefined) {
139470
- _helpers_validator_js__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .A.assertOptions(transitional, {
139918
+ _helpers_validator_js__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .A.assertOptions(transitional, {
139471
139919
  silentJSONParsing: validators.transitional(validators.boolean),
139472
139920
  forcedJSONParsing: validators.transitional(validators.boolean),
139473
139921
  clarifyTimeoutError: validators.transitional(validators.boolean),
@@ -139482,7 +139930,7 @@ class Axios {
139482
139930
  serialize: paramsSerializer
139483
139931
  };
139484
139932
  } else {
139485
- _helpers_validator_js__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .A.assertOptions(paramsSerializer, {
139933
+ _helpers_validator_js__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .A.assertOptions(paramsSerializer, {
139486
139934
  encode: validators.function,
139487
139935
  serialize: validators.function
139488
139936
  }, true);
@@ -139497,20 +139945,20 @@ class Axios {
139497
139945
  } else {
139498
139946
  config.allowAbsoluteUrls = true;
139499
139947
  }
139500
- _helpers_validator_js__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .A.assertOptions(config, {
139948
+ _helpers_validator_js__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .A.assertOptions(config, {
139501
139949
  baseUrl: validators.spelling('baseURL'),
139502
139950
  withXsrfToken: validators.spelling('withXSRFToken')
139503
139951
  }, true);
139504
139952
 
139505
139953
  // Set config.method
139506
- config.method = (config.method || this.defaults.method || 'get').toLowerCase();
139954
+ config.method = (_utils_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.getSafeProp(config, 'method') || _utils_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.getSafeProp(this.defaults, 'method') || 'get').toLowerCase();
139507
139955
 
139508
139956
  // Flatten headers
139509
139957
  let contextHeaders = headers && _utils_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.merge(headers.common, headers[config.method]);
139510
- headers && _utils_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.forEach(['delete', 'get', 'head', 'post', 'put', 'patch', 'query', 'common'], method => {
139958
+ headers && _utils_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.forEach(_methodList_js__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .A.concat('common'), method => {
139511
139959
  delete headers[method];
139512
139960
  });
139513
- config.headers = _AxiosHeaders_js__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .A.concat(contextHeaders, headers);
139961
+ config.headers = _AxiosHeaders_js__WEBPACK_IMPORTED_MODULE_8__/* ["default"] */ .A.concat(contextHeaders, headers);
139514
139962
 
139515
139963
  // filter out skipped interceptors
139516
139964
  const requestInterceptorChain = [];
@@ -139520,7 +139968,7 @@ class Axios {
139520
139968
  return;
139521
139969
  }
139522
139970
  synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;
139523
- const transitional = config.transitional || _defaults_transitional_js__WEBPACK_IMPORTED_MODULE_8__/* ["default"] */ .A;
139971
+ const transitional = config.transitional || _defaults_transitional_js__WEBPACK_IMPORTED_MODULE_9__/* ["default"] */ .A;
139524
139972
  const legacyInterceptorReqResOrdering = transitional && transitional.legacyInterceptorReqResOrdering;
139525
139973
  if (legacyInterceptorReqResOrdering) {
139526
139974
  requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);
@@ -140185,9 +140633,51 @@ _utils_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.freezeMethods(AxiosHe
140185
140633
 
140186
140634
 
140187
140635
 
140636
+ const $internals = Symbol('internals');
140637
+
140638
+ // `handlers` is public and may be replaced with a nullish value by user code;
140639
+ // `clear()` has always tolerated that. Treat it as an empty stack rather than
140640
+ // dereferencing it.
140641
+ function countHandlers(handlers) {
140642
+ return handlers ? handlers.length : 0;
140643
+ }
140644
+ function trimHandlers(handlers) {
140645
+ if (!handlers) {
140646
+ return;
140647
+ }
140648
+ while (handlers.length && handlers[handlers.length - 1] === null) {
140649
+ handlers.pop();
140650
+ }
140651
+ }
140652
+ function syncHandlerEntries(manager, internals) {
140653
+ const handlers = manager.handlers;
140654
+ const length = countHandlers(handlers);
140655
+ if (handlers !== internals.handlersRef) {
140656
+ internals.handlersRef = handlers;
140657
+ internals.handlerEntries.clear();
140658
+ } else if (length !== internals.handlersLength) {
140659
+ if (!length) {
140660
+ internals.handlerEntries.clear();
140661
+ } else {
140662
+ internals.handlerEntries.forEach(function removeStaleEntry(entry, id) {
140663
+ if (handlers[entry.index] !== entry.handler) {
140664
+ internals.handlerEntries.delete(id);
140665
+ }
140666
+ });
140667
+ }
140668
+ }
140669
+ internals.handlersLength = length;
140670
+ }
140188
140671
  class InterceptorManager {
140189
140672
  constructor() {
140190
140673
  this.handlers = [];
140674
+ this[$internals] = {
140675
+ handlersRef: this.handlers,
140676
+ handlersLength: this.handlers.length,
140677
+ handlerEntries: new Map(),
140678
+ iterationDepth: 0,
140679
+ nextId: 0
140680
+ };
140191
140681
  }
140192
140682
 
140193
140683
  /**
@@ -140200,13 +140690,25 @@ class InterceptorManager {
140200
140690
  * @return {Number} An ID used to remove interceptor later
140201
140691
  */
140202
140692
  use(fulfilled, rejected, options) {
140203
- this.handlers.push({
140693
+ const handler = {
140204
140694
  fulfilled,
140205
140695
  rejected,
140206
140696
  synchronous: options ? options.synchronous : false,
140207
140697
  runWhen: options ? options.runWhen : null
140698
+ };
140699
+ const internals = this[$internals];
140700
+ if (this.handlers == null) {
140701
+ this.handlers = [];
140702
+ }
140703
+ syncHandlerEntries(this, internals);
140704
+ const id = internals.nextId++;
140705
+ this.handlers.push(handler);
140706
+ internals.handlerEntries.set(id, {
140707
+ handler,
140708
+ index: this.handlers.length - 1
140208
140709
  });
140209
- return this.handlers.length - 1;
140710
+ internals.handlersLength = this.handlers.length;
140711
+ return id;
140210
140712
  }
140211
140713
 
140212
140714
  /**
@@ -140217,8 +140719,23 @@ class InterceptorManager {
140217
140719
  * @returns {void}
140218
140720
  */
140219
140721
  eject(id) {
140220
- if (this.handlers[id]) {
140221
- this.handlers[id] = null;
140722
+ const internals = this[$internals];
140723
+ syncHandlerEntries(this, internals);
140724
+ const entry = internals.handlerEntries.get(id);
140725
+ if (entry) {
140726
+ internals.handlerEntries.delete(id);
140727
+
140728
+ // Ignore IDs invalidated by clear or direct replacement of handlers.
140729
+ if (this.handlers[entry.index] !== entry.handler) {
140730
+ return;
140731
+ }
140732
+ this.handlers[entry.index] = null;
140733
+
140734
+ // Do not reuse an index while forEach is walking its length snapshot.
140735
+ if (!internals.iterationDepth) {
140736
+ trimHandlers(this.handlers);
140737
+ internals.handlersLength = this.handlers.length;
140738
+ }
140222
140739
  }
140223
140740
  }
140224
140741
 
@@ -140230,6 +140747,7 @@ class InterceptorManager {
140230
140747
  clear() {
140231
140748
  if (this.handlers) {
140232
140749
  this.handlers = [];
140750
+ syncHandlerEntries(this, this[$internals]);
140233
140751
  }
140234
140752
  }
140235
140753
 
@@ -140244,11 +140762,22 @@ class InterceptorManager {
140244
140762
  * @returns {void}
140245
140763
  */
140246
140764
  forEach(fn) {
140247
- _utils_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.forEach(this.handlers, function forEachHandler(h) {
140248
- if (h !== null) {
140249
- fn(h);
140765
+ const internals = this[$internals];
140766
+ syncHandlerEntries(this, internals);
140767
+ internals.iterationDepth++;
140768
+ try {
140769
+ _utils_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.forEach(this.handlers, function forEachHandler(h) {
140770
+ if (h !== null) {
140771
+ fn(h);
140772
+ }
140773
+ });
140774
+ } finally {
140775
+ if (! --internals.iterationDepth) {
140776
+ syncHandlerEntries(this, internals);
140777
+ trimHandlers(this.handlers);
140778
+ internals.handlersLength = countHandlers(this.handlers);
140250
140779
  }
140251
- });
140780
+ }
140252
140781
  }
140253
140782
  }
140254
140783
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (InterceptorManager);
@@ -140264,23 +140793,14 @@ class InterceptorManager {
140264
140793
  /* harmony import */ var _AxiosError_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7996);
140265
140794
  /* harmony import */ var _helpers_isAbsoluteURL_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6392);
140266
140795
  /* harmony import */ var _helpers_combineURLs_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(64133);
140796
+ /* harmony import */ var _helpers_normalizeURLForProtocolCheck_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(69893);
140797
+
140267
140798
 
140268
140799
 
140269
140800
 
140270
140801
 
140271
140802
 
140272
140803
  const malformedHttpProtocol = /^https?:(?!\/\/)/i;
140273
- const httpProtocolControlCharacters = /[\t\n\r]/g;
140274
- function stripLeadingC0ControlOrSpace(url) {
140275
- let i = 0;
140276
- while (i < url.length && url.charCodeAt(i) <= 0x20) {
140277
- i++;
140278
- }
140279
- return url.slice(i);
140280
- }
140281
- function normalizeURLForProtocolCheck(url) {
140282
- return stripLeadingC0ControlOrSpace(url).replace(httpProtocolControlCharacters, '');
140283
- }
140284
140804
 
140285
140805
  // Redact the parts of a URL that can carry secrets before it is embedded in an
140286
140806
  // error message. AxiosError.toJSON() serializes `message` verbatim and errors
@@ -140310,7 +140830,7 @@ function redactSensitiveURLParts(url) {
140310
140830
  }
140311
140831
  function assertValidHttpProtocolURL(url, config) {
140312
140832
  if (typeof url === 'string') {
140313
- const normalizedURL = normalizeURLForProtocolCheck(url);
140833
+ const normalizedURL = (0,_helpers_normalizeURLForProtocolCheck_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A)(url);
140314
140834
  if (malformedHttpProtocol.test(normalizedURL)) {
140315
140835
  throw new _AxiosError_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A(`Invalid URL ${JSON.stringify(redactSensitiveURLParts(normalizedURL))}: missing "//" after protocol`, _AxiosError_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.ERR_INVALID_URL, config);
140316
140836
  }
@@ -140351,6 +140871,8 @@ function buildFullPath(baseURL, requestedURL, allowAbsoluteUrls, config) {
140351
140871
  /* harmony import */ var _cancel_CanceledError_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(62200);
140352
140872
  /* harmony import */ var _core_AxiosHeaders_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(88580);
140353
140873
  /* harmony import */ var _adapters_adapters_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(93129);
140874
+ /* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(21285);
140875
+
140354
140876
 
140355
140877
 
140356
140878
 
@@ -140383,9 +140905,13 @@ function throwIfCancellationRequested(config) {
140383
140905
  *
140384
140906
  * @returns {Promise} The Promise to be fulfilled
140385
140907
  */
140386
- function dispatchRequest(config) {
140908
+ function dispatchRequest(_config) {
140909
+ // Interceptors may replace the merged config with an ordinary object. Flatten
140910
+ // it at the dispatch boundary so shared prototype members cannot become
140911
+ // request behavior, while preserving intentional template/class members.
140912
+ const config = _utils_js__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .A.toSafeFlatObject(_config);
140387
140913
  throwIfCancellationRequested(config);
140388
- config.headers = _core_AxiosHeaders_js__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .A.from(config.headers);
140914
+ config.headers = _core_AxiosHeaders_js__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .A.from(_utils_js__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .A.getSafeProp(config, 'headers'));
140389
140915
 
140390
140916
  // Transform request data
140391
140917
  config.data = _transformData_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.call(config, config.transformRequest);
@@ -140548,7 +141074,7 @@ function mergeConfig(config1, config2) {
140548
141074
  transformResponse: defaultToConfig2,
140549
141075
  paramsSerializer: defaultToConfig2,
140550
141076
  timeout: defaultToConfig2,
140551
- timeoutMessage: defaultToConfig2,
141077
+ timeoutErrorMessage: defaultToConfig2,
140552
141078
  withCredentials: defaultToConfig2,
140553
141079
  withXSRFToken: defaultToConfig2,
140554
141080
  adapter: defaultToConfig2,
@@ -140594,6 +141120,19 @@ function mergeConfig(config1, config2) {
140594
141120
 
140595
141121
  /***/ },
140596
141122
 
141123
+ /***/ 31109
141124
+ (__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
141125
+
141126
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
141127
+ /* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__)
141128
+ /* harmony export */ });
141129
+
141130
+
141131
+ const methodList = Object.freeze(['get', 'delete', 'head', 'options', 'post', 'put', 'patch', 'purge', 'link', 'unlink', 'query']);
141132
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (methodList);
141133
+
141134
+ /***/ },
141135
+
140597
141136
  /***/ 19524
140598
141137
  (__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
140599
141138
 
@@ -140710,6 +141249,8 @@ function transformData(fns, response) {
140710
141249
  /* harmony import */ var _helpers_toURLEncodedForm_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(88898);
140711
141250
  /* harmony import */ var _platform_index_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(75194);
140712
141251
  /* harmony import */ var _helpers_formDataToJSON_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(17757);
141252
+ /* harmony import */ var _core_methodList_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(31109);
141253
+
140713
141254
 
140714
141255
 
140715
141256
 
@@ -140835,7 +141376,7 @@ const defaults = {
140835
141376
  }
140836
141377
  }
140837
141378
  };
140838
- _utils_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.forEach(['delete', 'get', 'head', 'post', 'put', 'patch', 'query'], method => {
141379
+ _utils_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.forEach(_core_methodList_js__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .A, method => {
140839
141380
  defaults.headers[method] = {};
140840
141381
  });
140841
141382
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (defaults);
@@ -140867,7 +141408,7 @@ _utils_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.forEach(['delete', 'g
140867
141408
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
140868
141409
  /* harmony export */ x: () => (/* binding */ VERSION)
140869
141410
  /* harmony export */ });
140870
- const VERSION = "1.19.0";
141411
+ const VERSION = "1.20.0";
140871
141412
 
140872
141413
  /***/ },
140873
141414
 
@@ -140973,14 +141514,22 @@ const HttpStatusCode = {
140973
141514
  Gone: 410,
140974
141515
  LengthRequired: 411,
140975
141516
  PreconditionFailed: 412,
141517
+ /**
141518
+ * @deprecated Use `ContentTooLarge` instead.
141519
+ */
140976
141520
  PayloadTooLarge: 413,
141521
+ ContentTooLarge: 413,
140977
141522
  UriTooLong: 414,
140978
141523
  UnsupportedMediaType: 415,
140979
141524
  RangeNotSatisfiable: 416,
140980
141525
  ExpectationFailed: 417,
140981
141526
  ImATeapot: 418,
140982
141527
  MisdirectedRequest: 421,
141528
+ /**
141529
+ * @deprecated Use `UnprocessableContent` instead.
141530
+ */
140983
141531
  UnprocessableEntity: 422,
141532
+ UnprocessableContent: 422,
140984
141533
  Locked: 423,
140985
141534
  FailedDependency: 424,
140986
141535
  TooEarly: 425,
@@ -141009,7 +141558,9 @@ const HttpStatusCode = {
141009
141558
  InvalidSslCertificate: 526
141010
141559
  };
141011
141560
  Object.entries(HttpStatusCode).forEach(([key, value]) => {
141012
- HttpStatusCode[value] = key;
141561
+ if (HttpStatusCode[value] === undefined) {
141562
+ HttpStatusCode[value] = key;
141563
+ }
141013
141564
  });
141014
141565
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (HttpStatusCode);
141015
141566
 
@@ -141595,6 +142146,36 @@ function isAxiosError(payload) {
141595
142146
 
141596
142147
  /***/ },
141597
142148
 
142149
+ /***/ 69893
142150
+ (__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
142151
+
142152
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
142153
+ /* harmony export */ A: () => (/* binding */ normalizeURLForProtocolCheck)
142154
+ /* harmony export */ });
142155
+
142156
+
142157
+ const urlParserControlCharacters = /[\t\n\r]/g;
142158
+
142159
+ /**
142160
+ * Match WHATWG URL preprocessing before checking a URL's protocol.
142161
+ *
142162
+ * @param {string} url
142163
+ *
142164
+ * @returns {string}
142165
+ */
142166
+ function normalizeURLForProtocolCheck(url) {
142167
+ if (typeof url !== 'string') {
142168
+ return url;
142169
+ }
142170
+ let start = 0;
142171
+ while (start < url.length && url.charCodeAt(start) <= 0x20) {
142172
+ start++;
142173
+ }
142174
+ return url.slice(start).replace(urlParserControlCharacters, '');
142175
+ }
142176
+
142177
+ /***/ },
142178
+
141598
142179
  /***/ 65265
141599
142180
  (__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
141600
142181
 
@@ -141697,7 +142278,7 @@ const progressEventReducer = (listener, isDownloadStream, freq = 3) => {
141697
142278
  let bytesNotified = 0;
141698
142279
  const _speedometer = (0,_speedometer_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(50, 250);
141699
142280
  return (0,_throttle_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(e => {
141700
- if (!e || typeof e.loaded !== 'number') {
142281
+ if (!e || !_utils_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A.isNumber(e.loaded)) {
141701
142282
  return;
141702
142283
  }
141703
142284
  const rawLoaded = e.loaded;
@@ -141797,11 +142378,12 @@ function resolveConfig(config) {
141797
142378
  }
141798
142379
  }
141799
142380
  if (_utils_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A.isFormData(data)) {
142381
+ const getHeaders = _utils_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A.getSafeProp(data, 'getHeaders');
141800
142382
  if (_platform_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.hasStandardBrowserEnv || _platform_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.hasStandardBrowserWebWorkerEnv || _utils_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A.isReactNative(data)) {
141801
142383
  headers.setContentType(undefined); // browser/web worker/RN handles it
141802
- } else if (_utils_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A.isFunction(data.getHeaders)) {
142384
+ } else if (_utils_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A.isFunction(getHeaders)) {
141803
142385
  // Node.js FormData (like form-data package)
141804
- (0,_core_setFormDataHeaders_js__WEBPACK_IMPORTED_MODULE_8__/* ["default"] */ .A)(headers, data.getHeaders(), own('formDataHeaderPolicy'));
142386
+ (0,_core_setFormDataHeaders_js__WEBPACK_IMPORTED_MODULE_8__/* ["default"] */ .A)(headers, getHeaders.call(data), own('formDataHeaderPolicy'));
141805
142387
  }
141806
142388
  }
141807
142389
 
@@ -141984,7 +142566,7 @@ function spread(callback) {
141984
142566
  * Throttle decorator
141985
142567
  * @param {Function} fn
141986
142568
  * @param {Number} freq
141987
- * @return {Function}
142569
+ * @return {Array<Function>}
141988
142570
  */
141989
142571
  function throttle(fn, freq) {
141990
142572
  let timestamp = 0;
@@ -142016,7 +142598,8 @@ function throttle(fn, freq) {
142016
142598
  }
142017
142599
  };
142018
142600
  const flush = () => lastArgs && invoke(lastArgs);
142019
- return [throttled, flush];
142601
+ const flushWith = (...args) => invoke(args);
142602
+ return [throttled, flush, flushWith];
142020
142603
  }
142021
142604
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (throttle);
142022
142605
 
@@ -142128,23 +142711,17 @@ function toFormData(obj, formData, options) {
142128
142711
 
142129
142712
  // eslint-disable-next-line no-param-reassign
142130
142713
  formData = formData || new (_platform_node_classes_FormData_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A || FormData)();
142131
-
142132
- // eslint-disable-next-line no-param-reassign
142133
- options = _utils_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.toFlatObject(options, {
142134
- metaTokens: true,
142135
- dots: false,
142136
- indexes: false
142137
- }, false, function defined(option, source) {
142138
- // eslint-disable-next-line no-eq-null,eqeqeq
142139
- return !_utils_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.isUndefined(source[option]);
142140
- });
142141
- const metaTokens = options.metaTokens;
142714
+ const option = (name, fallback) => {
142715
+ const value = _utils_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.getSafeProp(options, name);
142716
+ return _utils_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.isUndefined(value) ? fallback : value;
142717
+ };
142718
+ const metaTokens = option('metaTokens', true);
142142
142719
  // eslint-disable-next-line no-use-before-define
142143
- const visitor = options.visitor || defaultVisitor;
142144
- const dots = options.dots;
142145
- const indexes = options.indexes;
142146
- const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob;
142147
- const maxDepth = options.maxDepth === undefined ? DEFAULT_FORM_DATA_MAX_DEPTH : options.maxDepth;
142720
+ const visitor = option('visitor') || defaultVisitor;
142721
+ const dots = option('dots', false);
142722
+ const indexes = option('indexes', false);
142723
+ const _Blob = option('Blob') || typeof Blob !== 'undefined' && Blob;
142724
+ const maxDepth = option('maxDepth', DEFAULT_FORM_DATA_MAX_DEPTH);
142148
142725
  const useBlob = _Blob && _utils_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.isSpecCompliantForm(formData);
142149
142726
  const stack = [];
142150
142727
  if (!_utils_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.isFunction(visitor)) {
@@ -142641,13 +143218,57 @@ const {
142641
143218
  const hasOwnProperty = (({
142642
143219
  hasOwnProperty
142643
143220
  }) => (obj, prop) => hasOwnProperty.call(obj, prop))(Object.prototype);
143221
+ const isUnsafeObjectKey = prop => typeof prop === 'string' && (prop === '__proto__' || prop === 'constructor' || prop === 'prototype');
142644
143222
 
142645
143223
  /**
142646
- * Walk the prototype chain (excluding the shared Object.prototype) looking for
142647
- * an own `prop`. This distinguishes genuine own/inherited members — including
142648
- * class accessors and template prototypes — from members injected via
142649
- * Object.prototype pollution (e.g. `Object.prototype.username = '...'`), which
142650
- * live on Object.prototype itself and are therefore never matched.
143224
+ * Determine whether an inherited object must be treated as a shared-prototype
143225
+ * boundary. Cross-realm Object.prototype objects cannot be distinguished
143226
+ * reliably from application-created null-prototype objects because their
143227
+ * properties are mutable, so all inherited terminal prototypes are excluded
143228
+ * as a fail-closed boundary. A null-prototype source still keeps its own
143229
+ * properties, as produced by mergeConfig and other safe materialization paths.
143230
+ *
143231
+ * @param {*} obj The object to inspect
143232
+ * @param {*} prototype The object's prototype
143233
+ * @param {boolean} source Whether obj is the original traversal source
143234
+ *
143235
+ * @returns {boolean} True when obj is a safe prototype traversal boundary
143236
+ */
143237
+ const isPrototypeBoundary = (obj, prototype, source) => obj === Object.prototype || !source && prototype === null;
143238
+
143239
+ /**
143240
+ * Determine whether an object can retain its identity through code paths that
143241
+ * add, replace, and remove config properties without bypassing unsafe-key
143242
+ * filtering. Immutable objects, unsafe-key-bearing objects, and objects with
143243
+ * accessor or restricted data properties must be materialized instead.
143244
+ *
143245
+ * @param {*} obj The object to inspect
143246
+ *
143247
+ * @returns {boolean} True when every own property is safe and fully mutable
143248
+ */
143249
+ const isSafeAndFullyMutable = obj => {
143250
+ if (!Object.isExtensible(obj)) {
143251
+ return false;
143252
+ }
143253
+ const props = Object.getOwnPropertyNames(obj);
143254
+ if (Object.getOwnPropertySymbols) {
143255
+ props.push(...Object.getOwnPropertySymbols(obj));
143256
+ }
143257
+ return props.every(prop => {
143258
+ if (isUnsafeObjectKey(prop)) {
143259
+ return false;
143260
+ }
143261
+ const descriptor = Object.getOwnPropertyDescriptor(obj, prop);
143262
+ return !!descriptor && descriptor.configurable && descriptor.writable === true;
143263
+ });
143264
+ };
143265
+
143266
+ /**
143267
+ * Walk the prototype chain (excluding the source realm's Object.prototype)
143268
+ * looking for an own `prop`. This distinguishes genuine own/inherited members
143269
+ * — including class accessors and template prototypes — from members injected
143270
+ * via Object.prototype pollution (e.g. `Object.prototype.username = '...'`),
143271
+ * which live on Object.prototype itself and are therefore never matched.
142651
143272
  *
142652
143273
  * @param {*} thing The value whose chain to inspect
142653
143274
  * @param {string|symbol} prop The property key to look for
@@ -142657,15 +143278,19 @@ const hasOwnProperty = (({
142657
143278
  const hasOwnInPrototypeChain = (thing, prop) => {
142658
143279
  let obj = thing;
142659
143280
  const seen = [];
142660
- while (obj != null && obj !== Object.prototype) {
143281
+ while (obj != null) {
142661
143282
  if (seen.indexOf(obj) !== -1) {
142662
143283
  return false;
142663
143284
  }
142664
143285
  seen.push(obj);
143286
+ const prototype = getPrototypeOf(obj);
143287
+ if (isPrototypeBoundary(obj, prototype, obj === thing)) {
143288
+ return false;
143289
+ }
142665
143290
  if (hasOwnProperty(obj, prop)) {
142666
143291
  return true;
142667
143292
  }
142668
- obj = getPrototypeOf(obj);
143293
+ obj = prototype;
142669
143294
  }
142670
143295
  return false;
142671
143296
  };
@@ -142682,6 +143307,56 @@ const hasOwnInPrototypeChain = (thing, prop) => {
142682
143307
  * @returns {*} The resolved value, or undefined when unsafe/absent
142683
143308
  */
142684
143309
  const getSafeProp = (obj, prop) => obj != null && hasOwnInPrototypeChain(obj, prop) ? obj[prop] : undefined;
143310
+
143311
+ /**
143312
+ * Flatten an object and its application-defined prototype chain into a
143313
+ * null-prototype object. Members inherited only from the source realm's
143314
+ * Object.prototype are deliberately excluded, while class/template members
143315
+ * below that boundary are preserved.
143316
+ *
143317
+ * @param {*} thing The value to flatten
143318
+ *
143319
+ * @returns {*} A null-prototype copy, or the original value when it is already
143320
+ * structurally safe or is not an object
143321
+ */
143322
+ const toSafeFlatObject = thing => {
143323
+ if (thing == null || typeof thing !== 'object' && typeof thing !== 'function') {
143324
+ return thing;
143325
+ }
143326
+ const sourcePrototype = getPrototypeOf(thing);
143327
+ if (sourcePrototype === null && isSafeAndFullyMutable(thing)) {
143328
+ return thing;
143329
+ }
143330
+ const result = Object.create(null);
143331
+ const merged = Object.create(null);
143332
+ const seen = [];
143333
+ let current = thing;
143334
+ while (current != null) {
143335
+ if (seen.indexOf(current) !== -1) {
143336
+ break;
143337
+ }
143338
+ seen.push(current);
143339
+ const prototype = current === thing ? sourcePrototype : getPrototypeOf(current);
143340
+ if (isPrototypeBoundary(current, prototype, current === thing)) {
143341
+ break;
143342
+ }
143343
+ const props = Object.getOwnPropertyNames(current);
143344
+ if (Object.getOwnPropertySymbols) {
143345
+ props.push(...Object.getOwnPropertySymbols(current));
143346
+ }
143347
+ for (const prop of props) {
143348
+ if (isUnsafeObjectKey(prop)) {
143349
+ continue;
143350
+ }
143351
+ if (!hasOwnProperty(merged, prop)) {
143352
+ result[prop] = thing[prop];
143353
+ merged[prop] = true;
143354
+ }
143355
+ }
143356
+ current = prototype;
143357
+ }
143358
+ return result;
143359
+ };
142685
143360
  const kindOf = (cache => thing => {
142686
143361
  const str = toString.call(thing);
142687
143362
  return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());
@@ -142805,9 +143480,9 @@ const isPlainObject = val => {
142805
143480
  }
142806
143481
  const prototype = getPrototypeOf(val);
142807
143482
  return (prototype === null || prototype === Object.prototype || getPrototypeOf(prototype) === null) &&
142808
- // Treat any genuine (non-Object.prototype-polluted) Symbol.toStringTag or
142809
- // Symbol.iterator as evidence the value is a tagged/iterable type rather
142810
- // than a plain object, while ignoring keys injected onto Object.prototype.
143483
+ // Treat safe own/inherited Symbol.toStringTag or Symbol.iterator members as
143484
+ // evidence the value is tagged/iterable, while ignoring members reachable
143485
+ // only through shared or terminal prototype boundaries.
142811
143486
  !hasOwnInPrototypeChain(val, toStringTag) && !hasOwnInPrototypeChain(val, iterator);
142812
143487
  };
142813
143488
 
@@ -143555,6 +144230,7 @@ const isSafeIterable = thing => thing != null && hasOwnInPrototypeChain(thing, i
143555
144230
  // an alias to avoid ESLint no-prototype-builtins detection
143556
144231
  hasOwnInPrototypeChain,
143557
144232
  getSafeProp,
144233
+ toSafeFlatObject,
143558
144234
  reduceDescriptors,
143559
144235
  freezeMethods,
143560
144236
  toObjectSet,