@defra/flood-webchat 0.0.1-beta.26 → 0.0.1-beta.28

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/client.js CHANGED
@@ -17,6 +17,8 @@ __webpack_require__.r(__webpack_exports__);
17
17
  /* harmony import */ var _lib_classnames__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../lib/classnames */ "./src/client/lib/classnames.js");
18
18
  /* harmony import */ var _panel_panel_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../panel/panel.jsx */ "./src/client/components/panel/panel.jsx");
19
19
  /* harmony import */ var _store_useApp__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../store/useApp */ "./src/client/store/useApp.js");
20
+ /* harmony import */ var _lib_history_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../lib/history.js */ "./src/client/lib/history.js");
21
+
20
22
 
21
23
 
22
24
 
@@ -31,8 +33,10 @@ function Availability() {
31
33
  } = (0,_store_useApp__WEBPACK_IMPORTED_MODULE_3__.useApp)();
32
34
  const [isFixed, setIsFixed] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);
33
35
  const buttonRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)();
34
- const onClick = () => {
36
+ const onClick = e => {
37
+ e.preventDefault();
35
38
  setChatVisibility(!isChatOpen);
39
+ (0,_lib_history_js__WEBPACK_IMPORTED_MODULE_4__.historyPushState)();
36
40
  };
37
41
  const onKeyDown = event => {
38
42
  if (event.key === ' ') {
@@ -64,8 +68,8 @@ function Availability() {
64
68
  };
65
69
  }, [buttonRef, isChatOpen]);
66
70
  (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
67
- document.documentElement.classList.toggle('wc-scroll-padding', isFixed);
68
- document.body.classList.toggle('wc-scroll-padding', isFixed);
71
+ document.documentElement.classList.toggle('wc-u-scroll-padding', isFixed);
72
+ document.body.classList.toggle('wc-u-scroll-padding', isFixed);
69
73
  }, [isFixed]);
70
74
  let TextComponent = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, "Show Chat");
71
75
  if (!threadId) {
@@ -84,9 +88,11 @@ function Availability() {
84
88
  draggable: "false",
85
89
  onClick: onClick,
86
90
  onKeyUp: onKeyUp,
87
- onKeyDown: onKeyDown
91
+ onKeyDown: onKeyDown,
92
+ role: "button",
93
+ "data-module": "govuk-button"
88
94
  }, TextComponent, unseenCount > 0 && !isChatOpen ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", {
89
- className: "wc-open-btn__unseen"
95
+ className: "wc-availability__unseen"
90
96
  }, unseenCount) : null))), isChatOpen && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_panel_panel_jsx__WEBPACK_IMPORTED_MODULE_2__.Panel, null));
91
97
  case 'EXISTING':
92
98
  case 'UNAVAILABLE':
@@ -138,9 +144,11 @@ function Chat({
138
144
  agent,
139
145
  agentStatus,
140
146
  isAgentTyping,
141
- settings
147
+ settings,
148
+ isKeyboard
142
149
  } = (0,_store_useApp_js__WEBPACK_IMPORTED_MODULE_4__.useApp)();
143
150
  const [userMessage, setUserMessage] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)('');
151
+ const [focusVisibleWithin, setFocusVisibleWithin] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);
144
152
  const messageRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)();
145
153
  (0,_hooks_useTextareaAutosize_js__WEBPACK_IMPORTED_MODULE_5__.useTextareaAutosize)(messageRef.current, userMessage);
146
154
  (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
@@ -203,26 +211,25 @@ function Chat({
203
211
  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(_panel_panel_header_jsx__WEBPACK_IMPORTED_MODULE_1__.PanelHeader, null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
204
212
  className: "wc-status"
205
213
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("p", {
206
- className: "wc-status__availability govuk-body-s"
214
+ className: "wc-status__availability"
207
215
  }, connectionHeadlineText), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
208
- className: "wc-status__link govuk-!-font-size-16",
216
+ className: "wc-status__link",
209
217
  href: "#",
210
218
  "data-module": "govuk-button",
211
219
  onClick: onEndChatScreen
212
220
  }, "End chat")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
213
- className: "wc-body"
214
- }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
215
- className: "wc-chat__body"
221
+ className: "wc-body",
222
+ tabIndex: "0"
216
223
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("ul", {
217
- className: "wc-chat__messages"
224
+ className: "wc-chat"
218
225
  }, messages.length ? messages.map((msg, index) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_message_message_jsx__WEBPACK_IMPORTED_MODULE_3__.Message, {
219
226
  key: msg.id,
220
227
  message: msg,
221
228
  previousMessage: messages[index - 1]
222
229
  })) : null, isAgentTyping ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("li", {
223
- className: "wc-chat__message govuk-body outbound"
230
+ className: "wc-chat__message outbound"
224
231
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
225
- className: "wc-chat__from govuk-!-font-size-14"
232
+ className: "wc-chat__from"
226
233
  }, agentName, " is typing"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
227
234
  className: "wc-chat__text outbound"
228
235
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("svg", {
@@ -249,14 +256,12 @@ function Chat({
249
256
  cy: "8",
250
257
  r: "3",
251
258
  fill: "currentColor"
252
- })))) : null))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_panel_panel_footer_jsx__WEBPACK_IMPORTED_MODULE_2__.PanelFooter, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
253
- className: "wc-footer__input"
254
- }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("form", {
255
- className: "wc-form",
259
+ })))) : null)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_panel_panel_footer_jsx__WEBPACK_IMPORTED_MODULE_2__.PanelFooter, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("form", {
260
+ className: `wc-form${focusVisibleWithin ? ' wc-focus-within' : ''}`,
256
261
  noValidate: true,
257
262
  onSubmit: handleSubmit
258
263
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
259
- className: "govuk-label wc-form__label govuk-!-font-size-16",
264
+ className: "govuk-label wc-form__label",
260
265
  htmlFor: "wc-form-textarea"
261
266
  }, "Your message", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", {
262
267
  className: "govuk-visually-hidden"
@@ -264,18 +269,24 @@ function Chat({
264
269
  ref: messageRef,
265
270
  rows: "1",
266
271
  "aria-required": "true",
267
- className: "wc-form__textarea govuk-textarea govuk-!-font-size-16",
272
+ className: "wc-form__textarea",
268
273
  id: "wc-form-textarea",
269
274
  name: "message",
270
275
  onChange: onChange,
271
276
  onKeyDown: handleKeyPress,
277
+ onFocus: () => {
278
+ setFocusVisibleWithin(isKeyboard);
279
+ },
280
+ onBlur: () => {
281
+ setFocusVisibleWithin(false);
282
+ },
272
283
  value: userMessage
273
284
  }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", {
274
285
  type: "submit",
275
- className: "wc-form__button govuk-button govuk-!-font-size-16",
286
+ className: "wc-form__button govuk-button",
276
287
  value: "Send",
277
288
  "data-prevent-double-click": "true"
278
- }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
289
+ })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
279
290
  className: "wc-footer__settings"
280
291
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
281
292
  href: "#",
@@ -328,11 +339,11 @@ const ErrorSummary = ({
328
339
  role: "alert"
329
340
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("h2", {
330
341
  id: "wc-error",
331
- className: "govuk-error-summary__title"
342
+ className: "wc-error-summary__title govuk-error-summary__title"
332
343
  }, "There is a problem"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
333
344
  className: "govuk-error-summary__body"
334
345
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("ul", {
335
- className: "govuk-list govuk-error-summary__list"
346
+ className: "govuk-list govuk-error-summary__list wc-error-summary__list"
336
347
  }, errs.map(key => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("li", {
337
348
  key: key
338
349
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
@@ -366,13 +377,13 @@ function Message({
366
377
  const outbound = message.direction === 'outbound';
367
378
  const messageOwnerSameAsPrevious = message?.direction === previousMessage?.direction;
368
379
  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("li", {
369
- className: (0,_lib_classnames__WEBPACK_IMPORTED_MODULE_1__.classnames)('wc-chat__message govuk-body', outbound ? 'outbound' : 'inbound')
380
+ className: (0,_lib_classnames__WEBPACK_IMPORTED_MODULE_1__.classnames)('wc-chat__message', outbound ? 'outbound' : 'inbound')
370
381
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
371
- className: "wc-chat__from govuk-!-font-size-14"
382
+ className: "wc-chat__from"
372
383
  }, messageOwnerSameAsPrevious ? null : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", null, outbound ? message.assignee : 'You'), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", {
373
384
  className: "govuk-visually-hidden"
374
- }, ":")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("p", {
375
- className: (0,_lib_classnames__WEBPACK_IMPORTED_MODULE_1__.classnames)('wc-chat__text', 'govuk-body-s', outbound ? 'outbound' : 'inbound')
385
+ }, ":")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
386
+ className: (0,_lib_classnames__WEBPACK_IMPORTED_MODULE_1__.classnames)('wc-chat__text', outbound ? 'outbound' : 'inbound')
376
387
  }, message.text));
377
388
  }
378
389
 
@@ -414,24 +425,42 @@ __webpack_require__.r(__webpack_exports__);
414
425
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
415
426
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
416
427
  /* harmony import */ var _store_useApp_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../store/useApp.js */ "./src/client/store/useApp.js");
428
+ /* harmony import */ var _lib_history_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../lib/history.js */ "./src/client/lib/history.js");
429
+
417
430
 
418
431
 
419
432
  function PanelHeader() {
420
433
  const {
421
434
  thread,
435
+ threadId,
422
436
  setChatVisibility,
423
437
  setUnseenCount,
424
- threadId
438
+ isMobile
425
439
  } = (0,_store_useApp_js__WEBPACK_IMPORTED_MODULE_1__.useApp)();
426
440
  const onClose = e => {
427
441
  e.preventDefault();
428
442
  setChatVisibility(false);
443
+ (0,_lib_history_js__WEBPACK_IMPORTED_MODULE_2__.historyReplaceState)();
429
444
  if (threadId) {
430
445
  thread?.lastMessageSeen();
431
446
  setUnseenCount(0);
432
447
  }
433
448
  };
434
- let ButtonComponent = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", {
449
+ const BackButtonComponent = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", {
450
+ className: "wc-header__back",
451
+ "aria-label": "Close the webchat",
452
+ onClick: onClose
453
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("svg", {
454
+ "aria-hidden": "true",
455
+ focusable: "false",
456
+ width: "20",
457
+ height: "20",
458
+ viewBox: "0 0 20 20"
459
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("path", {
460
+ d: "M4.828,11L12.314,18.485L10.899,19.899L1,10L10.899,0.101L12.314,1.515L4.828,9L19,9L19,11L4.828,11Z",
461
+ fill: "currentColor"
462
+ })));
463
+ const CloseButtonComponent = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", {
435
464
  className: "wc-header__close",
436
465
  "aria-label": "Close the webchat",
437
466
  onClick: onClose
@@ -445,28 +474,39 @@ function PanelHeader() {
445
474
  d: "M10,8.6L15.6,3L17,4.4L11.4,10L17,15.6L15.6,17L10,11.4L4.4,17L3,15.6L8.6,10L3,4.4L4.4,3L10,8.6Z",
446
475
  fill: "currentColor"
447
476
  })));
477
+ const MinimiseButtonComponent = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", {
478
+ className: "wc-header__hide",
479
+ "aria-label": "Minimise the webchat",
480
+ onClick: onClose
481
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("svg", {
482
+ "aria-hidden": "true",
483
+ focusable: "false",
484
+ width: "20",
485
+ height: "20",
486
+ viewBox: "0 0 20 20"
487
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("path", {
488
+ d: "M10 14.4l-7-7L4.4 6l5.6 5.6L15.6 6 17 7.4l-7 7z",
489
+ fill: "currentColor"
490
+ })));
491
+ let RightButtonComponent = CloseButtonComponent;
448
492
  if (thread) {
449
- ButtonComponent = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", {
450
- className: "wc-header__hide",
451
- "aria-label": "Minimise the webchat",
452
- onClick: onClose
453
- }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("svg", {
454
- "aria-hidden": "true",
455
- focusable: "false",
456
- width: "20",
457
- height: "20",
458
- viewBox: "0 0 20 20"
459
- }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("path", {
460
- d: "M10 14.4l-7-7L4.4 6l5.6 5.6L15.6 6 17 7.4l-7 7z",
461
- fill: "currentColor"
462
- })));
493
+ RightButtonComponent = MinimiseButtonComponent;
494
+ if (isMobile && !window.history.state) {
495
+ RightButtonComponent = MinimiseButtonComponent;
496
+ }
497
+ }
498
+ if (!thread && isMobile && !window.history.state) {
499
+ RightButtonComponent = CloseButtonComponent;
500
+ }
501
+ if (isMobile && window.history.state) {
502
+ RightButtonComponent = null;
463
503
  }
464
504
  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
465
505
  className: "wc-header"
466
- }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("h2", {
506
+ }, window.history.state ? BackButtonComponent : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("h2", {
467
507
  id: "wc-header-title",
468
- className: "wc-header__title govuk-heading-s"
469
- }, "Floodline Webchat"), ButtonComponent);
508
+ className: "wc-header__title"
509
+ }, "Floodline Webchat"), RightButtonComponent);
470
510
  }
471
511
 
472
512
  /***/ }),
@@ -495,6 +535,8 @@ __webpack_require__.r(__webpack_exports__);
495
535
  /* harmony import */ var _store_useApp_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../store/useApp.js */ "./src/client/store/useApp.js");
496
536
  /* harmony import */ var _store_useChatSdk_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../store/useChatSdk.js */ "./src/client/store/useChatSdk.js");
497
537
  /* harmony import */ var _hooks_useFocusedElements_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../hooks/useFocusedElements.js */ "./src/client/hooks/useFocusedElements.js");
538
+ /* harmony import */ var _lib_history_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../lib/history.js */ "./src/client/lib/history.js");
539
+
498
540
 
499
541
 
500
542
 
@@ -517,7 +559,8 @@ function Panel() {
517
559
  setThreadId,
518
560
  setChatVisibility,
519
561
  setMessages,
520
- setUnseenCount
562
+ setUnseenCount,
563
+ isMobile
521
564
  } = (0,_store_useApp_js__WEBPACK_IMPORTED_MODULE_9__.useApp)();
522
565
  const {
523
566
  fetchThread,
@@ -532,16 +575,30 @@ function Panel() {
532
575
  setUnseenCount(0);
533
576
  }
534
577
  setChatVisibility(false);
578
+ (0,_lib_history_js__WEBPACK_IMPORTED_MODULE_12__.historyReplaceState)();
535
579
  }
536
580
  }, [thread, threadId, setUnseenCount, setChatVisibility]);
537
581
 
582
+ /**
583
+ * We need ammend classes on the body element to handle mobile behaviour
584
+ */
585
+ (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
586
+ document.body.classList.remove('wc-u-hidden');
587
+ document.getElementsByTagName('html')[0].classList.add('wc-u-html');
588
+ document.body.classList.add('wc-u-body');
589
+ return () => {
590
+ document.getElementsByTagName('html')[0].classList.remove('wc-u-html');
591
+ document.body.classList.remove('wc-u-body');
592
+ };
593
+ }, [isMobile]);
594
+
538
595
  /**
539
596
  * Initializes the eventListener for pressing the escape key
540
597
  */
541
598
  (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
542
- const escapeKeyEvent = document.addEventListener('keydown', onEscapeKey);
599
+ document.addEventListener('keydown', onEscapeKey);
543
600
  return () => {
544
- document.removeEventListener('keydown', escapeKeyEvent);
601
+ document.removeEventListener('keydown', onEscapeKey);
545
602
  };
546
603
  }, [onEscapeKey, setChatVisibility]);
547
604
 
@@ -631,7 +688,9 @@ function Panel() {
631
688
  tabIndex: "-1",
632
689
  "aria-modal": "true",
633
690
  "aria-labelledby": "wc-header-title"
634
- }, ScreenComponent);
691
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
692
+ className: "wc-panel__inner"
693
+ }, ScreenComponent));
635
694
  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/(0,react_dom__WEBPACK_IMPORTED_MODULE_1__.createPortal)(Component, document.body));
636
695
  }
637
696
 
@@ -682,22 +741,26 @@ function EndChat({
682
741
  };
683
742
  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(_panel_panel_header_jsx__WEBPACK_IMPORTED_MODULE_1__.PanelHeader, null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
684
743
  className: "wc-body"
744
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
745
+ className: "wc-content"
685
746
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("h3", {
686
- className: "govuk-heading-s",
747
+ className: "wc-heading",
687
748
  "aria-live": "polite"
688
749
  }, "Are you sure you want to end the chat?"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
689
750
  className: "govuk-button-group"
690
751
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
691
752
  href: "#endChat",
692
- className: "govuk-button govuk-!-font-size-16",
753
+ role: "button",
754
+ className: "wc-button govuk-button",
693
755
  "data-module": "govuk-button",
694
756
  id: "confirmEndChat",
695
757
  onClick: confirmEndChat
696
758
  }, "Yes, end chat"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
697
759
  href: "#resumeChat",
698
- className: "govuk-link govuk-!-font-size-16",
760
+ role: "button",
761
+ className: "wc-link govuk-link",
699
762
  onClick: onChatScreen
700
- }, "No, resume chat"))));
763
+ }, "No, resume chat")))));
701
764
  }
702
765
 
703
766
  /***/ }),
@@ -725,23 +788,24 @@ function Feedback({
725
788
  };
726
789
  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(_panel_panel_header_jsx__WEBPACK_IMPORTED_MODULE_1__.PanelHeader, null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
727
790
  className: "wc-body"
791
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
792
+ className: "wc-content"
728
793
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("h3", {
729
794
  id: "wc-subtitle",
730
- className: "govuk-heading-s"
731
- }, "Give Feedback on Floodline webchat"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("p", null, "Please note we\u2019re unable to respond to feedback."), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
795
+ className: "wc-heading"
796
+ }, "Give Feedback on Floodline webchat"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("p", null, "Please note we\u2019re unable to respond to feedback."), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("p", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
732
797
  className: "govuk-link",
733
798
  href: "#",
734
799
  target: "_blank",
735
800
  rel: "noreferrer"
736
- }, "Feedback Link"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
737
- className: "govuk-button-group"
738
- }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
801
+ }, "Feedback Link")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("p", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
739
802
  id: "feedback-cancel",
803
+ className: "wc-link govuk-link",
740
804
  href: "#",
741
805
  "data-module": "govuk-button",
742
806
  role: "button",
743
807
  onClick: feedbackCancel
744
- }, "Close"))));
808
+ }, "Close")))));
745
809
  }
746
810
 
747
811
  /***/ }),
@@ -766,18 +830,14 @@ function PreChat({
766
830
  }) {
767
831
  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(_panel_panel_header_jsx__WEBPACK_IMPORTED_MODULE_1__.PanelHeader, null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
768
832
  className: "wc-body"
833
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
834
+ className: "wc-content"
769
835
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("h3", {
770
- className: "govuk-heading-s",
836
+ className: "wc-heading",
771
837
  "aria-live": "polite"
772
- }, "What you can use webchat for"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("p", {
773
- className: "govuk-body-s"
774
- }, "Webchat lets you talk directly to a Floodline adviser."), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("p", {
775
- className: "govuk-body-s"
776
- }, "You can use webchat to get:"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("ul", {
777
- className: "govuk-list govuk-list--bullet govuk-body-s"
778
- }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("li", null, "current flood warnings and alerts in your area"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("li", null, "information on the flood warning service"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("li", null, "advice on what to do before, during and after a flood")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("p", {
779
- className: "govuk-body-s"
780
- }, "There are other ways to\xA0", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
838
+ }, "What you can use webchat for"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("p", null, "Webchat lets you talk directly to a Floodline adviser."), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("p", null, "You can use webchat to get:"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("ul", {
839
+ className: "wc-list"
840
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("li", null, "current flood warnings and alerts in your area"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("li", null, "information on the flood warning service"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("li", null, "advice on what to do before, during and after a flood")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("p", null, "There are other ways to\xA0", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
781
841
  className: "govuk-link",
782
842
  href: "https://www.gov.uk/sign-up-for-flood-warnings",
783
843
  target: "_blank",
@@ -787,29 +847,23 @@ function PreChat({
787
847
  href: "https://www.fws.environment-agency.gov.uk/app/olr/login",
788
848
  target: "_blank",
789
849
  rel: "noreferrer"
790
- }, "manage your flood warnings account"), "."), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("p", {
791
- className: "govuk-body-s"
792
- }, "Do not use webchat to\xA0", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
850
+ }, "manage your flood warnings account"), "."), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("p", null, "Do not use webchat to\xA0", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
793
851
  className: "govuk-link",
794
852
  href: "https://www.gov.uk/report-flood-cause",
795
853
  target: "_blank",
796
854
  rel: "noreferrer"
797
855
  }, "report a flood"), "."), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", {
798
- className: "govuk-button govuk-!-font-size-16",
856
+ className: "govuk-button wc-button govuk-!-margin-top-1",
799
857
  "data-module": "govuk-button",
800
858
  onClick: onContinue
801
859
  }, "Continue"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("h3", {
802
- className: "govuk-heading-s"
803
- }, "Other flood information"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("p", {
804
- className: "govuk-body-s"
805
- }, "Call Floodline for all other flood and flood warning information."), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("p", {
806
- className: "govuk-body-s"
807
- }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("strong", null, "Floodline helpline"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("br", null), "Telephone: 0345 988 1188", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("br", null), "Textphone: 0345 602 6340", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("br", null), "Open 24 hours a day, 7 days a week", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("br", null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
860
+ className: "wc-heading"
861
+ }, "Other flood information"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("p", null, "Call Floodline for all other flood and flood warning information."), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("p", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("strong", null, "Floodline helpline"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("br", null), "Telephone: 0345 988 1188", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("br", null), "Textphone: 0345 602 6340", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("br", null), "Open 24 hours a day, 7 days a week", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("br", null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
808
862
  className: "govuk-link",
809
863
  href: "https://gov.uk/call-charges",
810
864
  target: "_blank",
811
865
  rel: "noreferrer"
812
- }, "Find out more about call charges"))));
866
+ }, "Find out more about call charges")))));
813
867
  }
814
868
 
815
869
  /***/ }),
@@ -907,6 +961,8 @@ function RequestChat({
907
961
  };
908
962
  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(_panel_panel_header_jsx__WEBPACK_IMPORTED_MODULE_3__.PanelHeader, null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
909
963
  className: "wc-body"
964
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
965
+ className: "wc-content"
910
966
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
911
967
  href: "#",
912
968
  className: "wc-back-link govuk-back-link",
@@ -914,12 +970,12 @@ function RequestChat({
914
970
  }, "What you can use webchat for"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_errorSummary_error_summary_jsx__WEBPACK_IMPORTED_MODULE_6__.ErrorSummary, {
915
971
  errors: errors
916
972
  }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("h3", {
917
- className: "govuk-heading-s",
973
+ className: "wc-heading",
918
974
  "aria-live": "polite"
919
975
  }, "Your name and question"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("form", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
920
- className: (0,_lib_classnames_js__WEBPACK_IMPORTED_MODULE_2__.classnames)('govuk-form-group', errors.name && 'govuk-form-group--error')
976
+ className: (0,_lib_classnames_js__WEBPACK_IMPORTED_MODULE_2__.classnames)('wc-form-group', 'govuk-form-group', errors.name && 'govuk-form-group--error')
921
977
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
922
- className: "govuk-label",
978
+ className: "wc-label govuk-label",
923
979
  htmlFor: "wc-name"
924
980
  }, "Your name"), errors.name && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("p", {
925
981
  className: "govuk-error-message"
@@ -927,19 +983,19 @@ function RequestChat({
927
983
  className: "govuk-visually-hidden"
928
984
  }, "Error:"), " ", errors.name), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", {
929
985
  ref: nameRef,
930
- className: (0,_lib_classnames_js__WEBPACK_IMPORTED_MODULE_2__.classnames)('govuk-input', errors.name && 'govuk-input--error'),
986
+ className: (0,_lib_classnames_js__WEBPACK_IMPORTED_MODULE_2__.classnames)('wc-input', 'govuk-input', errors.name && 'govuk-input--error'),
931
987
  id: "wc-name",
932
988
  name: "name",
933
989
  type: "text",
934
990
  "data-testid": "request-chat-user-name"
935
991
  })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
936
- className: "govuk-character-count",
992
+ className: "wc-form-group govuk-character-count",
937
993
  "data-module": "govuk-character-count",
938
994
  "data-maxlength": "500"
939
995
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
940
996
  className: (0,_lib_classnames_js__WEBPACK_IMPORTED_MODULE_2__.classnames)('govuk-form-group', errors.question && 'govuk-form-group--error')
941
997
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
942
- className: "govuk-label",
998
+ className: "wc-label govuk-label",
943
999
  htmlFor: "wc-question"
944
1000
  }, "Your question"), errors.question && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("p", {
945
1001
  className: "govuk-error-message"
@@ -952,11 +1008,11 @@ function RequestChat({
952
1008
  rows: "5",
953
1009
  "aria-describedby": "wc-question-info",
954
1010
  onChange: onQuestionChange,
955
- className: (0,_lib_classnames_js__WEBPACK_IMPORTED_MODULE_2__.classnames)('govuk-textarea', 'govuk-js-character-count', !isQuestionLengthValid || errors.question ? 'govuk-textarea--error' : ''),
1011
+ className: (0,_lib_classnames_js__WEBPACK_IMPORTED_MODULE_2__.classnames)('wc-textarea', 'govuk-textarea', 'govuk-js-character-count', !isQuestionLengthValid || errors.question ? 'govuk-textarea--error' : ''),
956
1012
  "data-testid": "request-chat-user-question"
957
1013
  }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
958
1014
  id: "wc-question-info",
959
- className: "govuk-hint govuk-character-count__message",
1015
+ className: "wc-hint govuk-hint govuk-char-count__msg",
960
1016
  style: {
961
1017
  color: `${!isQuestionLengthValid ? '#d4351c' : ''}`
962
1018
  },
@@ -965,18 +1021,18 @@ function RequestChat({
965
1021
  className: "govuk-character-count__sr-status govuk-visually-hidden",
966
1022
  "aria-live": "polite"
967
1023
  }, questionHint))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
968
- className: "govuk-inset-text govuk-!-font-size-16"
1024
+ className: "wc-inset-text govuk-inset-text"
969
1025
  }, "By selecting 'Request chat' you agree to the terms of our\xA0", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
970
1026
  href: "https://check-for-flooding.service.gov.uk/privacy-notice",
971
1027
  target: "_blank",
972
1028
  rel: "noreferrer",
973
1029
  className: "govuk-link"
974
1030
  }, "privacy notice"), "."), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", {
975
- className: "govuk-button govuk-!-margin-top-1 govuk-!-font-size-16",
1031
+ className: "wc-button govuk-button govuk-!-margin-top-1",
976
1032
  "data-module": "govuk-button",
977
1033
  onClick: onRequestChat,
978
1034
  disabled: isButtonDisabled
979
- }, buttonLabel))));
1035
+ }, buttonLabel)))));
980
1036
  }
981
1037
 
982
1038
  /***/ }),
@@ -1017,13 +1073,15 @@ function Settings({
1017
1073
  };
1018
1074
  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(_panel_panel_header_jsx__WEBPACK_IMPORTED_MODULE_1__.PanelHeader, null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
1019
1075
  className: "wc-body"
1076
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
1077
+ className: "wc-content"
1020
1078
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("fieldset", {
1021
1079
  className: "govuk-fieldset govuk-!-margin-bottom-4"
1022
1080
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("legend", {
1023
1081
  className: "govuk-fieldset__legend govuk-fieldset__legend"
1024
1082
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("h3", {
1025
1083
  id: "wc-subtitle",
1026
- className: "govuk-heading-s"
1084
+ className: "wc-heading"
1027
1085
  }, "Change settings")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
1028
1086
  className: "govuk-checkboxes govuk-checkboxes--small",
1029
1087
  "data-module": "govuk-checkboxes"
@@ -1038,7 +1096,7 @@ function Settings({
1038
1096
  defaultChecked: optionAudio,
1039
1097
  onChange: () => setOptionAudio(!optionAudio)
1040
1098
  }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
1041
- className: "govuk-label govuk-checkboxes__label govuk-!-font-size-16",
1099
+ className: "wc-label govuk-label govuk-checkboxes__label",
1042
1100
  htmlFor: "audio"
1043
1101
  }, "Play a sound when receiving a new message")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
1044
1102
  className: "govuk-checkboxes__item"
@@ -1051,23 +1109,23 @@ function Settings({
1051
1109
  defaultChecked: optionScroll,
1052
1110
  onChange: () => setOptionScroll(!optionScroll)
1053
1111
  }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
1054
- className: "govuk-label govuk-checkboxes__label govuk-!-font-size-16",
1112
+ className: "wc-label govuk-label govuk-checkboxes__label",
1055
1113
  htmlFor: "scroll"
1056
1114
  }, "Scroll automatically to a new message")))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
1057
1115
  className: "govuk-button-group"
1058
1116
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
1059
1117
  id: "settings-save",
1060
1118
  href: "#",
1061
- className: "govuk-button govuk-!-font-size-16",
1119
+ className: "wc-button govuk-button",
1062
1120
  "data-module": "govuk-button",
1063
1121
  onClick: onSave
1064
1122
  }, "Save"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
1065
1123
  id: "settings-cancel",
1066
1124
  href: "#",
1067
- className: "govuk-link govuk-!-font-size-16",
1125
+ className: "wc-link govuk-link",
1068
1126
  "data-module": "govuk-button",
1069
1127
  onClick: onCancel
1070
- }, "Cancel"))));
1128
+ }, "Cancel")))));
1071
1129
  }
1072
1130
 
1073
1131
  /***/ }),
@@ -1121,10 +1179,19 @@ __webpack_require__.r(__webpack_exports__);
1121
1179
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
1122
1180
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
1123
1181
 
1124
- const setAriaHidden = bool => {
1182
+ const ariaHidden = 'aria-hidden';
1183
+ const dataWcInert = 'data-wc-inert';
1184
+ const setAriaHidden = isInert => {
1125
1185
  for (const node of document.body.children) {
1126
1186
  if (node.id !== 'wc-panel') {
1127
- bool ? node.setAttribute('aria-hidden', 'true') : node.removeAttribute('aria-hidden');
1187
+ // We only want to toggle elements that aren't already inert
1188
+ if (isInert && !node.getAttribute(ariaHidden)) {
1189
+ node.setAttribute(ariaHidden, 'true');
1190
+ node.setAttribute(dataWcInert, '');
1191
+ } else if (node.hasAttribute(dataWcInert)) {
1192
+ node.removeAttribute(ariaHidden);
1193
+ node.removeAttribute(dataWcInert);
1194
+ }
1128
1195
  }
1129
1196
  }
1130
1197
  };
@@ -1233,6 +1300,33 @@ const classnames = (...classes) => classes.filter(classname => classname && type
1233
1300
 
1234
1301
  /***/ }),
1235
1302
 
1303
+ /***/ "./src/client/lib/history.js":
1304
+ /*!***********************************!*\
1305
+ !*** ./src/client/lib/history.js ***!
1306
+ \***********************************/
1307
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1308
+
1309
+ __webpack_require__.r(__webpack_exports__);
1310
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
1311
+ /* harmony export */ historyPushState: () => (/* binding */ historyPushState),
1312
+ /* harmony export */ historyReplaceState: () => (/* binding */ historyReplaceState)
1313
+ /* harmony export */ });
1314
+ const historyPushState = () => {
1315
+ const url = window.location.href.split('#')[0];
1316
+ window.history.pushState({
1317
+ history: true
1318
+ }, null, `${url}#webchat`);
1319
+ };
1320
+ const historyReplaceState = () => {
1321
+ if (window.history.state?.history) {
1322
+ window.history.back();
1323
+ }
1324
+ const url = window.location.href.split('#')[0];
1325
+ window.history.replaceState(null, null, url);
1326
+ };
1327
+
1328
+ /***/ }),
1329
+
1236
1330
  /***/ "./src/client/lib/message-notification.js":
1237
1331
  /*!************************************************!*\
1238
1332
  !*** ./src/client/lib/message-notification.js ***!
@@ -1415,6 +1509,24 @@ const AppProvider = ({
1415
1509
  payload: e.detail.data.case.status
1416
1510
  });
1417
1511
  };
1512
+ const onMatchMedia = e => {
1513
+ dispatch({
1514
+ type: 'TOGGLE_IS_MOBILE',
1515
+ payload: e.matches
1516
+ });
1517
+ };
1518
+ const onKeydown = () => {
1519
+ dispatch({
1520
+ type: 'TOGGLE_IS_KEYBOARD',
1521
+ payload: true
1522
+ });
1523
+ };
1524
+ const onPointerdown = () => {
1525
+ dispatch({
1526
+ type: 'TOGGLE_IS_KEYBOARD',
1527
+ payload: false
1528
+ });
1529
+ };
1418
1530
  (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
1419
1531
  sdk.onChatEvent(_nice_devone_nice_cxone_chat_web_sdk__WEBPACK_IMPORTED_MODULE_1__.ChatEvent.LIVECHAT_RECOVERED, onLiveChatRecovered);
1420
1532
  sdk.onChatEvent(_nice_devone_nice_cxone_chat_web_sdk__WEBPACK_IMPORTED_MODULE_1__.ChatEvent.MESSAGE_CREATED, onMessageCreated);
@@ -1422,6 +1534,16 @@ const AppProvider = ({
1422
1534
  sdk.onChatEvent(_nice_devone_nice_cxone_chat_web_sdk__WEBPACK_IMPORTED_MODULE_1__.ChatEvent.AGENT_TYPING_ENDED, onAgentTypingEnded);
1423
1535
  sdk.onChatEvent(_nice_devone_nice_cxone_chat_web_sdk__WEBPACK_IMPORTED_MODULE_1__.ChatEvent.ASSIGNED_AGENT_CHANGED, onAssignedAgentChanged);
1424
1536
  sdk.onChatEvent(_nice_devone_nice_cxone_chat_web_sdk__WEBPACK_IMPORTED_MODULE_1__.ChatEvent.CONTACT_STATUS_CHANGED, onContactStatusChanged);
1537
+ // We need to know if it is a mobile and if it is a keyboard interaction
1538
+ window.matchMedia('(max-width: 640px)').addEventListener('change', onMatchMedia);
1539
+ window.addEventListener('keydown', onKeydown);
1540
+ window.addEventListener('pointerdown', onPointerdown);
1541
+ // Tidying up
1542
+ return () => {
1543
+ window.removeEventListener('change', onMatchMedia);
1544
+ window.removeEventListener('keydown', onKeydown);
1545
+ window.removeEventListener('pointerdown', onPointerdown);
1546
+ };
1425
1547
  }, [sdk]);
1426
1548
 
1427
1549
  /**
@@ -1435,18 +1557,31 @@ const AppProvider = ({
1435
1557
  setCustomerId(window.localStorage.getItem(_constants_js__WEBPACK_IMPORTED_MODULE_4__.CUSTOMER_ID_STORAGE_KEY));
1436
1558
  setThreadId(window.localStorage.getItem(_constants_js__WEBPACK_IMPORTED_MODULE_4__.THREAD_ID_STORAGE_KEY));
1437
1559
  setSettings(JSON.parse(window.localStorage.getItem(_constants_js__WEBPACK_IMPORTED_MODULE_4__.SETTINGS_STORAGE_KEY)) || state.settings);
1560
+ }, []);
1561
+
1562
+ /**
1563
+ * Set browser history on start chat click
1564
+ */
1565
+ (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
1438
1566
  if (window.location.hash === '#webchat') {
1439
1567
  setChatVisibility(true);
1440
1568
  }
1569
+ const onBrowserNavigation = window.addEventListener('popstate', () => {
1570
+ if (window.location.hash === '#webchat') {
1571
+ setChatVisibility(true);
1572
+ } else {
1573
+ setChatVisibility(false);
1574
+ }
1575
+ });
1576
+ return () => {
1577
+ window.removeEventListener('popstate', onBrowserNavigation);
1578
+ };
1441
1579
  }, []);
1442
1580
 
1443
1581
  /**
1444
1582
  * State update functions
1445
1583
  */
1446
1584
  const setChatVisibility = payload => {
1447
- if (!payload) {
1448
- window.location.hash = '';
1449
- }
1450
1585
  dispatch({
1451
1586
  type: 'SET_CHAT_VISIBILITY',
1452
1587
  payload
@@ -1617,6 +1752,18 @@ const setUnseenCount = (state, payload) => {
1617
1752
  unseenCount: payload
1618
1753
  };
1619
1754
  };
1755
+ const toggleIsMobile = (state, payload) => {
1756
+ return {
1757
+ ...state,
1758
+ isMobile: payload
1759
+ };
1760
+ };
1761
+ const toggleIsKeyboard = (state, payload) => {
1762
+ return {
1763
+ ...state,
1764
+ isKeyboard: payload
1765
+ };
1766
+ };
1620
1767
  const actionsMap = {
1621
1768
  SET_CHAT_VISIBILITY: setChatVisibility,
1622
1769
  SET_AVAILABILITY: setAvailability,
@@ -1629,7 +1776,9 @@ const actionsMap = {
1629
1776
  SET_AGENT: setAgent,
1630
1777
  SET_AGENT_TYPING: setAgentIsTyping,
1631
1778
  SET_AGENT_STATUS: setAgentStatus,
1632
- SET_UNSEEN_COUNT: setUnseenCount
1779
+ SET_UNSEEN_COUNT: setUnseenCount,
1780
+ TOGGLE_IS_MOBILE: toggleIsMobile,
1781
+ TOGGLE_IS_KEYBOARD: toggleIsKeyboard
1633
1782
  };
1634
1783
 
1635
1784
  /***/ }),
@@ -1676,6 +1825,8 @@ const initialState = {
1676
1825
  agentStatus: null,
1677
1826
  isAgentTyping: false,
1678
1827
  isChatOpen: false,
1828
+ isMobile: window.matchMedia('(max-width: 640px)').matches,
1829
+ isKeyboard: false,
1679
1830
  settings: {
1680
1831
  audio: true,
1681
1832
  scroll: true