@seamly/web-ui 19.1.3 → 20.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (182) hide show
  1. package/CHANGELOG.md +625 -0
  2. package/build/dist/lib/components.js +2 -1
  3. package/build/dist/lib/components.min.js +1 -1
  4. package/build/dist/lib/index.debug.js +180 -125
  5. package/build/dist/lib/index.debug.min.js +1 -1
  6. package/build/dist/lib/index.debug.min.js.LICENSE.txt +45 -25
  7. package/build/dist/lib/index.js +7279 -7756
  8. package/build/dist/lib/index.min.js +1 -1
  9. package/build/dist/lib/index.min.js.LICENSE.txt +0 -5
  10. package/build/dist/lib/standalone.js +5700 -6184
  11. package/build/dist/lib/standalone.min.js +1 -1
  12. package/build/dist/lib/standalone.min.js.LICENSE.txt +0 -5
  13. package/build/dist/lib/style-guide.js +10820 -4993
  14. package/build/dist/lib/style-guide.min.js +2 -1
  15. package/build/dist/lib/style-guide.min.js.LICENSE.txt +9 -0
  16. package/build/dist/lib/styles.css +1 -1
  17. package/package.json +1 -2
  18. package/src/icons/icon_file-32.svg +1 -1
  19. package/src/javascripts/api/index.js +48 -37
  20. package/src/javascripts/config.js +1 -5
  21. package/src/javascripts/domains/app/actions.js +22 -5
  22. package/src/javascripts/domains/config/actions.js +3 -0
  23. package/src/javascripts/domains/config/reducer.js +9 -0
  24. package/src/javascripts/domains/forms/hooks.js +3 -1
  25. package/src/javascripts/domains/forms/provider.js +12 -0
  26. package/src/javascripts/domains/forms/reducer.js +2 -0
  27. package/src/javascripts/domains/i18n/hooks.js +2 -1
  28. package/src/javascripts/domains/i18n/reducer.js +2 -0
  29. package/src/javascripts/domains/interrupt/reducer.js +2 -2
  30. package/src/javascripts/domains/options/middleware.js +15 -31
  31. package/src/javascripts/domains/store/index.js +2 -1
  32. package/src/javascripts/domains/store/state-reducer.js +3 -8
  33. package/src/javascripts/domains/translations/components/options-dialog/form.js +1 -1
  34. package/src/javascripts/domains/translations/components/options-dialog/index.js +15 -1
  35. package/src/javascripts/domains/translations/reducer.js +2 -0
  36. package/src/javascripts/domains/visibility/actions.js +1 -1
  37. package/src/javascripts/domains/visibility/hooks.js +10 -8
  38. package/src/javascripts/domains/visibility/utils.js +1 -2
  39. package/src/javascripts/index.js +5 -3
  40. package/src/javascripts/lib/css.js +7 -1
  41. package/src/javascripts/lib/engine/index.js +4 -3
  42. package/src/javascripts/lib/external-api/index.js +38 -29
  43. package/src/javascripts/package/components.js +2 -1
  44. package/src/javascripts/style-guide/components/app.js +1 -1
  45. package/src/javascripts/style-guide/components/static-core.js +9 -3
  46. package/src/javascripts/style-guide/states.js +203 -298
  47. package/src/javascripts/ui/components/chat-app.js +1 -1
  48. package/src/javascripts/ui/components/conversation/component-filter.js +6 -0
  49. package/src/javascripts/ui/components/conversation/event/carousel-component/index.js +8 -1
  50. package/src/javascripts/ui/components/conversation/event/carousel-message/components/slide.js +2 -3
  51. package/src/javascripts/ui/components/conversation/event/conversation-suggestions.js +70 -0
  52. package/src/javascripts/ui/components/conversation/event/participant.js +2 -5
  53. package/src/javascripts/ui/components/conversation/event/splash.js +26 -0
  54. package/src/javascripts/ui/components/conversation/event/text.js +1 -2
  55. package/src/javascripts/ui/components/core/seamly-core.js +12 -9
  56. package/src/javascripts/ui/components/core/seamly-event-subscriber.js +4 -10
  57. package/src/javascripts/ui/components/core/seamly-instance-functions-loader.js +1 -8
  58. package/src/javascripts/ui/components/entry/entry-container.js +5 -3
  59. package/src/javascripts/ui/components/entry/text-entry/index.js +7 -1
  60. package/src/javascripts/ui/components/entry/text-entry/text-entry-form.js +5 -1
  61. package/src/javascripts/ui/components/entry/toggle-button.js +4 -2
  62. package/src/javascripts/ui/components/entry/upload/file-upload-form.js +1 -1
  63. package/src/javascripts/ui/components/form-controls/error.js +6 -2
  64. package/src/javascripts/ui/components/form-controls/form.js +26 -3
  65. package/src/javascripts/ui/components/layout/app-frame.js +24 -15
  66. package/src/javascripts/ui/components/layout/chat-frame.js +0 -2
  67. package/src/javascripts/ui/components/layout/modal-wrapper.js +0 -80
  68. package/src/javascripts/ui/components/layout/pre-chat-messages.js +45 -0
  69. package/src/javascripts/ui/components/options/options-frame.js +9 -4
  70. package/src/javascripts/ui/components/options/options.js +1 -4
  71. package/src/javascripts/ui/components/options/transcript/index.js +15 -1
  72. package/src/javascripts/ui/components/options/transcript/transcript-form.js +1 -1
  73. package/src/javascripts/ui/components/suggestions/index.js +174 -0
  74. package/src/javascripts/ui/components/suggestions/suggestions-item.js +40 -0
  75. package/src/javascripts/ui/components/suggestions/suggestions-list.js +24 -0
  76. package/src/javascripts/ui/components/view/app-view.js +21 -0
  77. package/src/javascripts/ui/components/view/deprecated-view.js +30 -0
  78. package/src/javascripts/ui/components/view/index.js +27 -0
  79. package/src/javascripts/ui/components/view/inline-view.js +45 -0
  80. package/src/javascripts/ui/components/view/window-view/collapse-button.js +20 -0
  81. package/src/javascripts/ui/components/view/window-view/index.js +82 -0
  82. package/src/javascripts/ui/components/view/window-view/window-open-button.js +68 -0
  83. package/src/javascripts/ui/components/widgets/lightbox.js +7 -2
  84. package/src/javascripts/ui/hooks/component-helper-hooks.js +0 -9
  85. package/src/javascripts/ui/hooks/seamly-hooks.js +0 -1
  86. package/src/javascripts/ui/hooks/seamly-state-hooks.js +28 -4
  87. package/src/javascripts/ui/hooks/use-seamly-chat.js +12 -3
  88. package/src/javascripts/ui/hooks/use-seamly-commands.js +4 -31
  89. package/src/javascripts/ui/utils/seamly-utils.js +2 -14
  90. package/src/stylesheets/1-settings/_animations.scss +0 -6
  91. package/src/stylesheets/1-settings/_config.scss +34 -35
  92. package/src/stylesheets/2-tools/_functions.scss +0 -5
  93. package/src/stylesheets/2-tools/_mixins.scss +4 -16
  94. package/src/stylesheets/3-app/_app.scss +78 -135
  95. package/src/stylesheets/4-base/_a11y.scss +0 -3
  96. package/src/stylesheets/4-base/_elements.scss +0 -11
  97. package/src/stylesheets/4-base/_formelements.scss +4 -14
  98. package/src/stylesheets/5-components/_avatar.scss +2 -44
  99. package/src/stylesheets/5-components/_buttons.scss +6 -45
  100. package/src/stylesheets/5-components/_chat-status.scss +14 -38
  101. package/src/stylesheets/5-components/_choice-prompt.scss +33 -2
  102. package/src/stylesheets/5-components/_collapse-button.scss +16 -0
  103. package/src/stylesheets/5-components/_conversation.scss +26 -2
  104. package/src/stylesheets/5-components/_disclaimer.scss +10 -12
  105. package/src/stylesheets/5-components/_divider.scss +7 -4
  106. package/src/stylesheets/5-components/_error.scss +1 -1
  107. package/src/stylesheets/5-components/_form.scss +9 -0
  108. package/src/stylesheets/5-components/_icon.scss +10 -1
  109. package/src/stylesheets/5-components/_idle.scss +0 -8
  110. package/src/stylesheets/5-components/_input.scss +14 -20
  111. package/src/stylesheets/5-components/_interrupt.scss +0 -2
  112. package/src/stylesheets/5-components/_loader.scss +0 -32
  113. package/src/stylesheets/5-components/_message-author.scss +40 -0
  114. package/src/stylesheets/5-components/_message-body.scss +194 -0
  115. package/src/stylesheets/5-components/_message-card.scss +55 -0
  116. package/src/stylesheets/5-components/_message-carousel.scss +143 -0
  117. package/src/stylesheets/5-components/_message-count.scss +11 -28
  118. package/src/stylesheets/5-components/_message-cta.scss +23 -0
  119. package/src/stylesheets/5-components/_message-info.scss +11 -0
  120. package/src/stylesheets/5-components/_message-translation-info.scss +17 -0
  121. package/src/stylesheets/5-components/_message.scss +13 -364
  122. package/src/stylesheets/5-components/_modal.scss +28 -58
  123. package/src/stylesheets/5-components/_notification.scss +0 -5
  124. package/src/stylesheets/5-components/_options.scss +27 -42
  125. package/src/stylesheets/5-components/_pre-chat-messages.scss +30 -0
  126. package/src/stylesheets/5-components/_prompt.scss +0 -8
  127. package/src/stylesheets/5-components/_skip-link.scss +3 -3
  128. package/src/stylesheets/5-components/_suggestions.scss +96 -0
  129. package/src/stylesheets/5-components/_unstarted.scss +50 -0
  130. package/src/stylesheets/5-components/_upload.scss +26 -28
  131. package/src/stylesheets/5-components/_window-open-button.scss +39 -0
  132. package/src/stylesheets/6-webui-only/_hover.scss +151 -0
  133. package/src/stylesheets/6-webui-only/_scrollbar.scss +31 -0
  134. package/src/stylesheets/7-deprecated/1-settings/_animations.scss +43 -0
  135. package/src/stylesheets/7-deprecated/1-settings/_config.scss +105 -0
  136. package/src/stylesheets/7-deprecated/2-tools/_functions.scss +22 -0
  137. package/src/stylesheets/7-deprecated/2-tools/_mixins.scss +77 -0
  138. package/src/stylesheets/7-deprecated/3-app/_app.scss +214 -0
  139. package/src/stylesheets/7-deprecated/4-base/_a11y.scss +14 -0
  140. package/src/stylesheets/7-deprecated/4-base/_elements.scss +21 -0
  141. package/src/stylesheets/7-deprecated/4-base/_formelements.scss +57 -0
  142. package/src/stylesheets/{5-components → 7-deprecated/5-components}/_agent-info.scss +0 -0
  143. package/src/stylesheets/7-deprecated/5-components/_avatar.scss +64 -0
  144. package/src/stylesheets/7-deprecated/5-components/_buttons.scss +94 -0
  145. package/src/stylesheets/{5-components → 7-deprecated/5-components}/_card.scss +0 -0
  146. package/src/stylesheets/{5-components → 7-deprecated/5-components}/_carousel.scss +0 -0
  147. package/src/stylesheets/7-deprecated/5-components/_character-limit.scss +36 -0
  148. package/src/stylesheets/{5-components/_cobrowsing.scss → 7-deprecated/5-components/_chat-status.scss} +18 -16
  149. package/src/stylesheets/7-deprecated/5-components/_choice-prompt.scss +27 -0
  150. package/src/stylesheets/7-deprecated/5-components/_collapse-button.scss +17 -0
  151. package/src/stylesheets/7-deprecated/5-components/_conversation.scss +44 -0
  152. package/src/stylesheets/7-deprecated/5-components/_disclaimer.scss +36 -0
  153. package/src/stylesheets/7-deprecated/5-components/_divider.scss +91 -0
  154. package/src/stylesheets/7-deprecated/5-components/_error.scss +24 -0
  155. package/src/stylesheets/{5-components → 7-deprecated/5-components}/_faq.scss +8 -3
  156. package/src/stylesheets/{5-components → 7-deprecated/5-components}/_header-controls.scss +0 -0
  157. package/src/stylesheets/7-deprecated/5-components/_icon.scss +4 -0
  158. package/src/stylesheets/7-deprecated/5-components/_idle.scss +61 -0
  159. package/src/stylesheets/7-deprecated/5-components/_input.scss +78 -0
  160. package/src/stylesheets/7-deprecated/5-components/_interrupt.scss +35 -0
  161. package/src/stylesheets/7-deprecated/5-components/_loader.scss +78 -0
  162. package/src/stylesheets/7-deprecated/5-components/_message-count.scss +41 -0
  163. package/src/stylesheets/7-deprecated/5-components/_message.scss +385 -0
  164. package/src/stylesheets/7-deprecated/5-components/_modal.scss +138 -0
  165. package/src/stylesheets/7-deprecated/5-components/_notification.scss +20 -0
  166. package/src/stylesheets/7-deprecated/5-components/_options.scss +286 -0
  167. package/src/stylesheets/7-deprecated/5-components/_prompt.scss +44 -0
  168. package/src/stylesheets/7-deprecated/5-components/_skip-link.scss +21 -0
  169. package/src/stylesheets/{5-components → 7-deprecated/5-components}/_svg-graphic.scss +0 -0
  170. package/src/stylesheets/7-deprecated/5-components/_upload.scss +213 -0
  171. package/src/stylesheets/deprecated-view.scss +64 -0
  172. package/src/stylesheets/styles-webui-only.scss +3 -0
  173. package/src/stylesheets/styles.scss +15 -25
  174. package/webpack/config.site.js +4 -0
  175. package/webpack/defaults.js +5 -0
  176. package/src/javascripts/ui/components/conversation/event/hooks/use-text-rendering.js +0 -35
  177. package/src/javascripts/ui/components/faq/faq.js +0 -162
  178. package/src/javascripts/ui/components/layout/view.js +0 -36
  179. package/src/javascripts/ui/components/options/cobrowsing.js +0 -110
  180. package/src/javascripts/ui/components/warnings/cobrowsing-active-frame.js +0 -29
  181. package/src/javascripts/ui/components/warnings/cobrowsing-active.js +0 -33
  182. package/src/stylesheets/5-components/_modal_mode.scss +0 -108
@@ -244,7 +244,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
244
244
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
245
245
 
246
246
  "use strict";
247
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"API\": () => (/* binding */ API)\n/* harmony export */ });\n/* harmony import */ var xstream__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! xstream */ \"./node_modules/xstream/index.js\");\n/* harmony import */ var xstream__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(xstream__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var superagent__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! superagent */ \"./node_modules/superagent/lib/client.js\");\n/* harmony import */ var superagent__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(superagent__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../config */ \"./src/javascripts/config.js\");\n/* harmony import */ var _lib_store_index__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../lib/store/index */ \"./src/javascripts/lib/store/index.js\");\n/* harmony import */ var _lib_id__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../lib/id */ \"./src/javascripts/lib/id.js\");\n/* harmony import */ var _producer__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./producer */ \"./src/javascripts/api/producer.js\");\n/* harmony import */ var _lib_store_providers_session_storage__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../lib/store/providers/session-storage */ \"./src/javascripts/lib/store/providers/session-storage.js\");\n/* harmony import */ var _event_producer__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./event-producer */ \"./src/javascripts/api/event-producer.js\");\n/* harmony import */ var _errors_seamly_session_expired_error__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./errors/seamly-session-expired-error */ \"./src/javascripts/api/errors/seamly-session-expired-error.js\");\n/* harmony import */ var _errors_seamly_configuration_error__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./errors/seamly-configuration-error */ \"./src/javascripts/api/errors/seamly-configuration-error.js\");\n/* harmony import */ var _errors_seamly_general_error__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./errors/seamly-general-error */ \"./src/javascripts/api/errors/seamly-general-error.js\");\n/* harmony import */ var _errors_seamly_unauthorized_error__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./errors/seamly-unauthorized-error */ \"./src/javascripts/api/errors/seamly-unauthorized-error.js\");\n/* harmony import */ var _lib_debug__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../lib/debug */ \"./src/javascripts/lib/debug.js\");\n/* harmony import */ var _lib_debug__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(_lib_debug__WEBPACK_IMPORTED_MODULE_12__);\n/* harmony import */ var _ui_utils_general_utils__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../ui/utils/general-utils */ \"./src/javascripts/ui/utils/general-utils.js\");\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst log = _lib_debug__WEBPACK_IMPORTED_MODULE_12___default()('seamly');\nconst DOMAIN = 'api.seamly-app.com';\nconst TRANSLATIONS_VERSION = 1;\n\nfunction buildPayload(command, payload) {\n if (command !== 'message') {\n return payload;\n }\n\n const {\n type,\n body\n } = payload;\n let {\n transactionId\n } = payload;\n\n if (!transactionId) {\n transactionId = (0,_lib_id__WEBPACK_IMPORTED_MODULE_4__.randomId)();\n }\n\n return {\n type,\n body,\n transactionId\n };\n}\n/**\n * Tries to get the time zone key directly from the operating system for those\n * environments that support the ECMAScript Internationalization API.\n *\n * Based on https://github.com/pellepim/jstimezonedetect/blob/master/jstz.main.js\n */\n\n\nfunction getTimeZone() {\n if (!Intl || typeof Intl === 'undefined' || typeof Intl.DateTimeFormat === 'undefined') {\n return null;\n }\n\n const format = Intl.DateTimeFormat();\n\n if (typeof format === 'undefined' || typeof format.resolvedOptions === 'undefined') {\n return null;\n }\n\n const timezone = format.resolvedOptions().timeZone; // Ensure we get a valid timezone\n\n if (timezone && (timezone.indexOf('/') > -1 || timezone === 'UTC')) {\n return timezone;\n } else {\n return null;\n }\n}\n\nfunction getEnvironment() {\n return {\n screenResolution: `${window.screen.width}x${window.screen.height}`,\n userAgent: navigator.userAgent,\n currentUrl: window.location.toString(),\n timezone: getTimeZone()\n };\n}\n\nclass API {\n /**\n * Creates an instance of API.\n * @param {Object} [config={}]\n * @param {string} config.key Api key\n * @param {string} config.domain Domain to connect to\n * @param {string} config.secure Connect securely\n * @param {string} config.externalId Unique visitor identifier (optional)\n * @memberof API\n */\n constructor({\n namespace,\n config = {},\n locale\n }) {\n this.store = (0,_lib_store_index__WEBPACK_IMPORTED_MODULE_3__.objectStore)(`${namespace}.connection${locale ? '.' + locale : ''}`, config.storageProvider || _lib_store_providers_session_storage__WEBPACK_IMPORTED_MODULE_6__[\"default\"]);\n this.connectionInfo = {\n apiKey: config.key,\n domain: config.domain || DOMAIN,\n secure: config.secure !== false ? config.secure || true : false\n };\n this.sendEnvironment = config.sendEnvironment !== undefined ? config.sendEnvironment : true;\n this.connected = false;\n this.configReady = false;\n this.externalId = config.externalId;\n this.internalProducer = new _event_producer__WEBPACK_IMPORTED_MODULE_7__[\"default\"]('API');\n this.internal$ = xstream__WEBPACK_IMPORTED_MODULE_0___default().create(this.internalProducer).flatten();\n this.connection$ = this.internal$.filter(event => event.type === 'connection');\n this.connection$.subscribe({\n next: ({\n connected,\n ready\n }) => {\n this.connected = connected;\n this.ready = ready;\n }\n });\n this.URLS = {};\n }\n\n getAccessToken() {\n return this.store.get('accessToken');\n }\n\n setAccessToken(accessToken) {\n this.store.set('accessToken', accessToken);\n }\n\n getConversationUrl() {\n return this.store.get('conversationUrl');\n }\n\n setConversationUrl(url) {\n this.store.set('conversationUrl', url);\n }\n\n hasConversation() {\n return !!this.getConversationUrl();\n }\n\n getChannelName() {\n return this.store.get('channelName');\n }\n\n setChannelName(name) {\n this.store.set('channelName', name);\n }\n\n clearStore() {\n this.store.delete('accessToken');\n this.store.delete('conversationUrl');\n this.store.delete('channelName');\n }\n\n getUrlPrefix(protocol) {\n const realProtocol = this.connectionInfo.secure ? `${protocol}s` : protocol;\n return `${realProtocol}://${this.connectionInfo.domain}`;\n }\n\n updateUrls({\n _links: responseLinks\n }) {\n this.URLS = Object.entries(responseLinks).filter(([key]) => key !== 'self').reduce((urls, [key, {\n href\n }]) => {\n return _objectSpread(_objectSpread({}, urls), {}, {\n [key]: href\n });\n }, this.URLS);\n }\n\n async reset() {\n await this.disconnect();\n this.clearStore();\n return this.getConfig();\n }\n\n async disconnect() {\n if (this.conversationProducer) {\n await this.conversationProducer.disconnect();\n }\n\n this.connected = false;\n this.configReady = false;\n }\n\n async createConversation() {\n try {\n const request = superagent__WEBPACK_IMPORTED_MODULE_1___default().post(`${this.getUrlPrefix('http')}${this.URLS.conversations}`).set('Content-Type', 'application/json').query({\n v: _config__WEBPACK_IMPORTED_MODULE_2__.apiVersion\n }) // withCredentials() is necessary to allow browsers to save received\n // cookies in CORS requests.\n .withCredentials().send({\n externalId: this.externalId || undefined\n });\n const {\n body\n } = await request;\n const {\n conversation\n } = body;\n\n const initialState = _objectSpread({}, conversation);\n\n delete initialState.accessToken;\n delete initialState.channelName;\n this.setAccessToken(conversation.accessToken);\n this.setChannelName(conversation.channelName);\n this.updateUrls(body);\n this.setConversationUrl(this.URLS.conversation);\n return initialState;\n } catch (error) {\n if (error.status >= 500) {\n throw new _errors_seamly_general_error__WEBPACK_IMPORTED_MODULE_10__[\"default\"](error);\n }\n\n throw error;\n }\n }\n\n async getConversation() {\n if (!this.hasConversation()) {\n return null;\n }\n\n try {\n const {\n body\n } = await superagent__WEBPACK_IMPORTED_MODULE_1___default().get(`${this.getUrlPrefix('http')}${this.URLS.history}`).set('Authorization', `Bearer ${this.getAccessToken()}`).query({\n v: _config__WEBPACK_IMPORTED_MODULE_2__.apiVersion\n });\n this.updateUrls(body);\n const {\n messages,\n participants,\n activeServiceSessionId,\n activeServiceSettings,\n serviceData,\n ui,\n translation\n } = body.history;\n return {\n events: messages.map(([type, msg]) => {\n return {\n type,\n payload: _objectSpread(_objectSpread({}, msg), {}, {\n type: type === 'participant' ? type : msg.type\n })\n };\n }),\n participants,\n activeServiceSessionId,\n activeServiceSettings,\n serviceData,\n resumeConversationPrompt: ui ? Boolean(ui.resumeConversationPrompt) : false,\n translation\n };\n } catch (error) {\n if (error.status === 401) {\n throw new _errors_seamly_unauthorized_error__WEBPACK_IMPORTED_MODULE_11__[\"default\"](error);\n }\n\n if (error.status === 404) {\n throw new _errors_seamly_session_expired_error__WEBPACK_IMPORTED_MODULE_8__[\"default\"](error);\n }\n\n if (error.status >= 500) {\n throw new _errors_seamly_general_error__WEBPACK_IMPORTED_MODULE_10__[\"default\"](error);\n }\n\n throw error;\n }\n }\n\n async connect() {\n this.connected = false;\n let conversationInitialState = null;\n\n if (!this.hasConversation()) {\n conversationInitialState = await this.createConversation();\n }\n\n this.conversationProducer = new _producer__WEBPACK_IMPORTED_MODULE_5__[\"default\"](`${this.getUrlPrefix('ws')}${this.URLS.socket}`, this.getChannelName(), this.getAccessToken());\n this.internalProducer.emit(xstream__WEBPACK_IMPORTED_MODULE_0___default().create(this.conversationProducer)); // Send environment\n\n if (this.sendEnvironment) {\n this.send('context', {\n environment: this.sendEnvironment === true ? getEnvironment() : this.sendEnvironment\n }, false);\n }\n\n return conversationInitialState;\n }\n\n uploadFile(file, progressCallback, successCallback, errorCallback) {\n const formData = new FormData();\n formData.append('upload', file);\n const req = superagent__WEBPACK_IMPORTED_MODULE_1___default().post(`${this.getUrlPrefix('http')}${this.URLS.uploads}`).set('Authorization', `Bearer ${this.getAccessToken()}`).send(formData);\n req.on('progress', function (e) {\n const {\n direction,\n percent\n } = e;\n\n if (direction === 'upload' && typeof progressCallback === 'function') {\n progressCallback(percent);\n }\n });\n req.then(uploadResponse => {\n if (successCallback) {\n successCallback(uploadResponse);\n }\n }).catch(err => {\n if (errorCallback) {\n errorCallback(err.response);\n } else {\n throw err;\n }\n });\n return req;\n }\n\n getAccountConfig() {\n return superagent__WEBPACK_IMPORTED_MODULE_1___default().post(`${this.getUrlPrefix('http')}/client/${this.connectionInfo.apiKey}/configs`).set('Content-Type', 'application/json').query({\n v: _config__WEBPACK_IMPORTED_MODULE_2__.apiVersion\n }).then(({\n body\n }) => {\n this.updateUrls(body);\n return body.config;\n }).catch(error => {\n if (error.status === 404) {\n throw new _errors_seamly_configuration_error__WEBPACK_IMPORTED_MODULE_9__[\"default\"](error);\n }\n\n if (error.status >= 500) {\n throw new _errors_seamly_general_error__WEBPACK_IMPORTED_MODULE_10__[\"default\"](error);\n }\n\n throw error;\n });\n }\n\n getConversationIntitialState() {\n return superagent__WEBPACK_IMPORTED_MODULE_1___default().get(`${this.getUrlPrefix('http')}${this.getConversationUrl()}`).set('Authorization', `Bearer ${this.getAccessToken()}`).query({\n v: _config__WEBPACK_IMPORTED_MODULE_2__.apiVersion\n }).then(({\n body\n }) => {\n this.updateUrls(body);\n return (0,_ui_utils_general_utils__WEBPACK_IMPORTED_MODULE_13__.omit)(body.conversation, ['accessToken', 'channelName']);\n }).catch(error => {\n if (error.status === 401) {\n throw new _errors_seamly_unauthorized_error__WEBPACK_IMPORTED_MODULE_11__[\"default\"](error);\n }\n\n if (error.status === 404) {\n throw new _errors_seamly_session_expired_error__WEBPACK_IMPORTED_MODULE_8__[\"default\"](error);\n }\n\n if (error.status >= 500) {\n throw new _errors_seamly_general_error__WEBPACK_IMPORTED_MODULE_10__[\"default\"](error);\n }\n\n throw error;\n });\n }\n\n async getConfig() {\n const config = await this.getAccountConfig();\n this.configReady = true;\n return config;\n }\n\n async getTranslations(locale) {\n try {\n const url = `${this.getUrlPrefix('http')}${this.URLS.translations}`.replace('{version}', String(TRANSLATIONS_VERSION)).replace('{locale}', locale);\n const request = superagent__WEBPACK_IMPORTED_MODULE_1___default().get(url);\n const {\n body\n } = await request;\n return body.translations;\n } catch (error) {\n if (error.status >= 500) {\n throw new _errors_seamly_general_error__WEBPACK_IMPORTED_MODULE_10__[\"default\"](error);\n }\n\n throw error;\n }\n }\n\n send(command, payload, waitForReady = true) {\n if (!this.connected || waitForReady && !this.ready) {\n // Wait for connection\n this.connection$.filter(e => waitForReady ? e.connected && e.ready : e.connected).take(1).subscribe({\n next: () => this.send(command, payload, waitForReady)\n });\n return;\n }\n\n log('[SEND]', command, payload);\n this.conversationProducer.push(command, buildPayload(command, payload), 10000);\n }\n\n sendContext(context = {}) {\n const {\n locale,\n variables\n } = context;\n const payload = {};\n\n if (locale) {\n if (typeof locale !== 'string') {\n throw new Error('Locale must be a string');\n }\n\n payload.locale = locale;\n }\n\n if (variables) {\n if (typeof variables !== 'object') {\n throw new Error('Variables must be an object');\n }\n\n payload.variables = variables;\n } // If we have empty context don't send context message\n\n\n if (Object.keys(payload).length === 0 && payload.constructor === Object) {\n return;\n }\n\n this.send('context', payload, false);\n }\n\n stream() {\n return this.internal$.filter(event => event.type !== 'connection');\n }\n\n}\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/api/index.js?");
247
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"API\": () => (/* binding */ API)\n/* harmony export */ });\n/* harmony import */ var xstream__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! xstream */ \"./node_modules/xstream/index.js\");\n/* harmony import */ var xstream__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(xstream__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var superagent__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! superagent */ \"./node_modules/superagent/lib/client.js\");\n/* harmony import */ var superagent__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(superagent__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../config */ \"./src/javascripts/config.js\");\n/* harmony import */ var _lib_store_index__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../lib/store/index */ \"./src/javascripts/lib/store/index.js\");\n/* harmony import */ var _lib_id__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../lib/id */ \"./src/javascripts/lib/id.js\");\n/* harmony import */ var _producer__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./producer */ \"./src/javascripts/api/producer.js\");\n/* harmony import */ var _lib_store_providers_session_storage__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../lib/store/providers/session-storage */ \"./src/javascripts/lib/store/providers/session-storage.js\");\n/* harmony import */ var _event_producer__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./event-producer */ \"./src/javascripts/api/event-producer.js\");\n/* harmony import */ var _errors_seamly_session_expired_error__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./errors/seamly-session-expired-error */ \"./src/javascripts/api/errors/seamly-session-expired-error.js\");\n/* harmony import */ var _errors_seamly_configuration_error__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./errors/seamly-configuration-error */ \"./src/javascripts/api/errors/seamly-configuration-error.js\");\n/* harmony import */ var _errors_seamly_general_error__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./errors/seamly-general-error */ \"./src/javascripts/api/errors/seamly-general-error.js\");\n/* harmony import */ var _errors_seamly_unauthorized_error__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./errors/seamly-unauthorized-error */ \"./src/javascripts/api/errors/seamly-unauthorized-error.js\");\n/* harmony import */ var _lib_debug__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../lib/debug */ \"./src/javascripts/lib/debug.js\");\n/* harmony import */ var _lib_debug__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(_lib_debug__WEBPACK_IMPORTED_MODULE_12__);\n/* harmony import */ var _ui_utils_general_utils__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../ui/utils/general-utils */ \"./src/javascripts/ui/utils/general-utils.js\");\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst log = _lib_debug__WEBPACK_IMPORTED_MODULE_12___default()('seamly');\nconst DOMAIN = 'api.seamly-app.com';\nconst TRANSLATIONS_VERSION = 1;\n\nfunction buildPayload(command, payload) {\n if (command !== 'message') {\n return payload;\n }\n\n const {\n type,\n body\n } = payload;\n let {\n transactionId\n } = payload;\n\n if (!transactionId) {\n transactionId = (0,_lib_id__WEBPACK_IMPORTED_MODULE_4__.randomId)();\n }\n\n return {\n type,\n body,\n transactionId\n };\n}\n/**\n * Tries to get the time zone key directly from the operating system for those\n * environments that support the ECMAScript Internationalization API.\n *\n * Based on https://github.com/pellepim/jstimezonedetect/blob/master/jstz.main.js\n */\n\n\nfunction getTimeZone() {\n if (!Intl || typeof Intl === 'undefined' || typeof Intl.DateTimeFormat === 'undefined') {\n return null;\n }\n\n const format = Intl.DateTimeFormat();\n\n if (typeof format === 'undefined' || typeof format.resolvedOptions === 'undefined') {\n return null;\n }\n\n const timezone = format.resolvedOptions().timeZone; // Ensure we get a valid timezone\n\n if (timezone && (timezone.indexOf('/') > -1 || timezone === 'UTC')) {\n return timezone;\n } else {\n return null;\n }\n}\n\nfunction getEnvironment() {\n return {\n screenResolution: `${window.screen.width}x${window.screen.height}`,\n userAgent: navigator.userAgent,\n currentUrl: window.location.toString(),\n timezone: getTimeZone()\n };\n}\n\nclass API {\n /**\n * Creates an instance of API.\n * @param {Object} [config={}]\n * @param {string} config.key Api key\n * @param {string} config.domain Domain to connect to\n * @param {string} config.secure Connect securely\n * @param {string} config.externalId Unique visitor identifier (optional)\n * @param {boolean} config.sendEnvironment\n * @param {string} namespace\n * @param {Object} [context={ variables: undefined, locale: undefined }]\n * @param {object} context.variables\n * @param {string} context.locale\n * @memberof API\n */\n constructor({\n namespace,\n config = {},\n context = {}\n }) {\n var _config$sendEnvironme;\n\n this.store = (0,_lib_store_index__WEBPACK_IMPORTED_MODULE_3__.objectStore)(`${namespace}.connection${context.locale ? '.' + context.locale : ''}`, config.storageProvider || _lib_store_providers_session_storage__WEBPACK_IMPORTED_MODULE_6__[\"default\"]);\n this.connectionInfo = {\n apiKey: config.key,\n domain: config.domain || DOMAIN,\n secure: config.secure !== false ? config.secure || true : false\n };\n this.config = {\n sendEnvironment: (_config$sendEnvironme = config.sendEnvironment) !== null && _config$sendEnvironme !== void 0 ? _config$sendEnvironme : true,\n context\n };\n this.connected = false;\n this.configReady = false;\n this.externalId = config.externalId;\n this.internalProducer = new _event_producer__WEBPACK_IMPORTED_MODULE_7__[\"default\"]('API');\n this.internal$ = xstream__WEBPACK_IMPORTED_MODULE_0___default().create(this.internalProducer).flatten();\n this.connection$ = this.internal$.filter(event => event.type === 'connection');\n this.connection$.subscribe({\n next: ({\n connected,\n ready\n }) => {\n this.connected = connected;\n this.ready = ready;\n }\n });\n this.URLS = {};\n }\n\n getAccessToken() {\n return this.store.get('accessToken');\n }\n\n setAccessToken(accessToken) {\n this.store.set('accessToken', accessToken);\n }\n\n getConversationUrl() {\n return this.store.get('conversationUrl');\n }\n\n setConversationUrl(url) {\n this.store.set('conversationUrl', url);\n }\n\n hasConversation() {\n return !!this.getConversationUrl();\n }\n\n getChannelName() {\n return this.store.get('channelName');\n }\n\n setChannelName(name) {\n this.store.set('channelName', name);\n }\n\n clearStore() {\n this.store.delete('accessToken');\n this.store.delete('conversationUrl');\n this.store.delete('channelName');\n }\n\n getUrlPrefix(protocol) {\n const realProtocol = this.connectionInfo.secure ? `${protocol}s` : protocol;\n return `${realProtocol}://${this.connectionInfo.domain}`;\n }\n\n updateUrls({\n _links: responseLinks\n }) {\n this.URLS = Object.entries(responseLinks).filter(([key]) => key !== 'self').reduce((urls, [key, {\n href\n }]) => {\n return _objectSpread(_objectSpread({}, urls), {}, {\n [key]: href\n });\n }, this.URLS);\n }\n\n async reset() {\n await this.disconnect();\n this.clearStore();\n return this.getConfig();\n }\n\n async disconnect() {\n if (this.conversationProducer) {\n await this.conversationProducer.disconnect();\n }\n\n this.connected = false;\n this.configReady = false;\n }\n\n async createConversation() {\n try {\n const request = superagent__WEBPACK_IMPORTED_MODULE_1___default().post(`${this.getUrlPrefix('http')}${this.URLS.conversations}`).set('Content-Type', 'application/json').query({\n v: _config__WEBPACK_IMPORTED_MODULE_2__.apiVersion\n }) // withCredentials() is necessary to allow browsers to save received\n // cookies in CORS requests.\n .withCredentials().send({\n externalId: this.externalId || undefined\n });\n const {\n body\n } = await request;\n const {\n conversation\n } = body;\n\n const initialState = _objectSpread({}, conversation);\n\n delete initialState.accessToken;\n delete initialState.channelName;\n this.setAccessToken(conversation.accessToken);\n this.setChannelName(conversation.channelName);\n this.updateUrls(body);\n this.setConversationUrl(this.URLS.conversation);\n return initialState;\n } catch (error) {\n if (error.status >= 500) {\n throw new _errors_seamly_general_error__WEBPACK_IMPORTED_MODULE_10__[\"default\"](error);\n }\n\n throw error;\n }\n }\n\n getConfig() {\n return superagent__WEBPACK_IMPORTED_MODULE_1___default().post(`${this.getUrlPrefix('http')}/client/${this.connectionInfo.apiKey}/configs`).set('Content-Type', 'application/json').query({\n v: _config__WEBPACK_IMPORTED_MODULE_2__.apiVersion\n }).send({\n context: _objectSpread(_objectSpread({}, this.config.context), {}, {\n environment: this.config.sendEnvironment === true ? getEnvironment() : this.config.sendEnvironment\n })\n }).then(({\n body\n }) => {\n this.updateUrls(body);\n this.configReady = true;\n return body.config;\n }).catch(error => {\n if (error.status === 404) {\n throw new _errors_seamly_configuration_error__WEBPACK_IMPORTED_MODULE_9__[\"default\"]();\n }\n\n if (error.status >= 500) {\n throw new _errors_seamly_general_error__WEBPACK_IMPORTED_MODULE_10__[\"default\"]();\n }\n\n throw error;\n });\n }\n\n async getConversation() {\n if (!this.hasConversation()) {\n return null;\n }\n\n try {\n const {\n body\n } = await superagent__WEBPACK_IMPORTED_MODULE_1___default().get(`${this.getUrlPrefix('http')}${this.URLS.history}`).set('Authorization', `Bearer ${this.getAccessToken()}`).query({\n v: _config__WEBPACK_IMPORTED_MODULE_2__.apiVersion\n });\n this.updateUrls(body);\n const {\n messages,\n participants,\n activeServiceSessionId,\n activeServiceSettings,\n serviceData,\n ui,\n translation\n } = body.history;\n return {\n events: messages.map(([type, msg]) => {\n return {\n type,\n payload: _objectSpread(_objectSpread({}, msg), {}, {\n type: type === 'participant' ? type : msg.type\n })\n };\n }),\n participants,\n activeServiceSessionId,\n activeServiceSettings,\n serviceData,\n resumeConversationPrompt: ui ? Boolean(ui.resumeConversationPrompt) : false,\n translation\n };\n } catch (error) {\n if (error.status === 401) {\n throw new _errors_seamly_unauthorized_error__WEBPACK_IMPORTED_MODULE_11__[\"default\"](error);\n }\n\n if (error.status === 404) {\n throw new _errors_seamly_session_expired_error__WEBPACK_IMPORTED_MODULE_8__[\"default\"](error);\n }\n\n if (error.status >= 500) {\n throw new _errors_seamly_general_error__WEBPACK_IMPORTED_MODULE_10__[\"default\"](error);\n }\n\n throw error;\n }\n }\n\n async connect() {\n this.connected = false;\n let conversationInitialState = null;\n\n if (!this.hasConversation()) {\n conversationInitialState = await this.createConversation();\n }\n\n this.conversationProducer = new _producer__WEBPACK_IMPORTED_MODULE_5__[\"default\"](`${this.getUrlPrefix('ws')}${this.URLS.socket}`, this.getChannelName(), this.getAccessToken());\n this.internalProducer.emit(xstream__WEBPACK_IMPORTED_MODULE_0___default().create(this.conversationProducer)); // Send environment\n\n if (this.config.sendEnvironment) {\n this.send('context', {\n environment: this.config.sendEnvironment === true ? getEnvironment() : this.config.sendEnvironment\n }, false);\n }\n\n return conversationInitialState;\n }\n\n uploadFile(file, progressCallback, successCallback, errorCallback) {\n const formData = new FormData();\n formData.append('upload', file);\n const req = superagent__WEBPACK_IMPORTED_MODULE_1___default().post(`${this.getUrlPrefix('http')}${this.URLS.uploads}`).set('Authorization', `Bearer ${this.getAccessToken()}`).send(formData);\n req.on('progress', function (e) {\n const {\n direction,\n percent\n } = e;\n\n if (direction === 'upload' && typeof progressCallback === 'function') {\n progressCallback(percent);\n }\n });\n req.then(uploadResponse => {\n if (successCallback) {\n successCallback(uploadResponse);\n }\n }).catch(err => {\n if (errorCallback) {\n errorCallback(err.response);\n } else {\n throw err;\n }\n });\n return req;\n }\n\n getConversationIntitialState() {\n return superagent__WEBPACK_IMPORTED_MODULE_1___default().get(`${this.getUrlPrefix('http')}${this.getConversationUrl()}`).set('Authorization', `Bearer ${this.getAccessToken()}`).query({\n v: _config__WEBPACK_IMPORTED_MODULE_2__.apiVersion\n }).then(({\n body\n }) => {\n this.updateUrls(body);\n return (0,_ui_utils_general_utils__WEBPACK_IMPORTED_MODULE_13__.omit)(body.conversation, ['accessToken', 'channelName']);\n }).catch(error => {\n if (error.status === 401) {\n throw new _errors_seamly_unauthorized_error__WEBPACK_IMPORTED_MODULE_11__[\"default\"](error);\n }\n\n if (error.status === 404) {\n throw new _errors_seamly_session_expired_error__WEBPACK_IMPORTED_MODULE_8__[\"default\"](error);\n }\n\n if (error.status >= 500) {\n throw new _errors_seamly_general_error__WEBPACK_IMPORTED_MODULE_10__[\"default\"](error);\n }\n\n throw error;\n });\n }\n\n async getTranslations(locale) {\n try {\n const url = `${this.getUrlPrefix('http')}${this.URLS.translations}`.replace('{version}', String(TRANSLATIONS_VERSION)).replace('{locale}', locale);\n const request = superagent__WEBPACK_IMPORTED_MODULE_1___default().get(url);\n const {\n body\n } = await request;\n return body.translations;\n } catch (error) {\n if (error.status >= 500) {\n throw new _errors_seamly_general_error__WEBPACK_IMPORTED_MODULE_10__[\"default\"](error);\n }\n\n throw error;\n }\n }\n\n send(command, payload, waitForReady = true) {\n if (!this.connected || waitForReady && !this.ready) {\n // Wait for connection\n this.connection$.filter(e => waitForReady ? e.connected && e.ready : e.connected).take(1).subscribe({\n next: () => this.send(command, payload, waitForReady)\n });\n return;\n }\n\n log('[SEND]', command, payload);\n this.conversationProducer.push(command, buildPayload(command, payload), 10000);\n }\n\n sendContext(context = {}) {\n const {\n locale,\n variables\n } = context;\n const payload = {};\n\n if (locale) {\n if (typeof locale !== 'string') {\n throw new Error('Locale must be a string');\n }\n\n payload.locale = locale;\n }\n\n if (variables) {\n if (typeof variables !== 'object') {\n throw new Error('Variables must be an object');\n }\n\n payload.variables = variables;\n } // If we have empty context don't send context message\n\n\n if (Object.keys(payload).length === 0 && payload.constructor === Object) {\n return;\n }\n\n this.send('context', payload, false);\n }\n\n stream() {\n return this.internal$.filter(event => event.type !== 'connection');\n }\n\n}\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/api/index.js?");
248
248
 
249
249
  /***/ }),
250
250
 
@@ -266,7 +266,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
266
266
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
267
267
 
268
268
  "use strict";
269
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"CSS_NAME\": () => (/* binding */ CSS_NAME),\n/* harmony export */ \"apiVersion\": () => (/* binding */ apiVersion),\n/* harmony export */ \"userParticipantId\": () => (/* binding */ userParticipantId),\n/* harmony export */ \"unreadScreenReaderWait\": () => (/* binding */ unreadScreenReaderWait),\n/* harmony export */ \"newMessageScreenReaderWait\": () => (/* binding */ newMessageScreenReaderWait),\n/* harmony export */ \"screenReaderDebounceDelaySeconds\": () => (/* binding */ screenReaderDebounceDelaySeconds),\n/* harmony export */ \"activitySendDelay\": () => (/* binding */ activitySendDelay),\n/* harmony export */ \"maxCharacterWarningLimit\": () => (/* binding */ maxCharacterWarningLimit),\n/* harmony export */ \"maxCharacterSrDebounceDelay\": () => (/* binding */ maxCharacterSrDebounceDelay),\n/* harmony export */ \"defaultTransitionTimeMs\": () => (/* binding */ defaultTransitionTimeMs),\n/* harmony export */ \"typingTimeout\": () => (/* binding */ typingTimeout),\n/* harmony export */ \"defaultConfig\": () => (/* binding */ defaultConfig)\n/* harmony export */ });\nconst CSS_NAME = 'cvco';\nconst apiVersion = '2';\nconst userParticipantId = 'seamly-client-participant'; // How long to debounce distinct changes in unread messages for before\n// broadcasting to the screen reader. This is done to avoid verbosity.\n\nconst unreadScreenReaderWait = 2000;\nconst newMessageScreenReaderWait = 1000;\nconst screenReaderDebounceDelaySeconds = 10;\nconst activitySendDelay = 15000;\nconst maxCharacterWarningLimit = 50;\nconst maxCharacterSrDebounceDelay = 300;\nconst defaultTransitionTimeMs = 300; // How long to wait before we decide the user isn't typing\n\nconst typingTimeout = 2000;\nconst defaultConfig = {\n namespace: 'default',\n layoutMode: 'window',\n // \"window\", \"inline\" (\"sidebar\"), \"modal\"\n messages: {\n agent: {\n showAvatar: false,\n // true, \"inline\"\n showName: false\n },\n user: {\n showAvatar: false,\n // true, \"inline\"\n showName: false\n },\n timeIndicator: {\n enabled: false,\n threshold: 3600000 // Default threshold is an hour in milliseconds\n\n }\n },\n appContainerClassNames: config => [`app--layout-${config.layoutMode}`, `namespace--${config.namespace}`]\n};\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/config.js?");
269
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"CSS_NAME\": () => (/* binding */ CSS_NAME),\n/* harmony export */ \"apiVersion\": () => (/* binding */ apiVersion),\n/* harmony export */ \"userParticipantId\": () => (/* binding */ userParticipantId),\n/* harmony export */ \"unreadScreenReaderWait\": () => (/* binding */ unreadScreenReaderWait),\n/* harmony export */ \"newMessageScreenReaderWait\": () => (/* binding */ newMessageScreenReaderWait),\n/* harmony export */ \"screenReaderDebounceDelaySeconds\": () => (/* binding */ screenReaderDebounceDelaySeconds),\n/* harmony export */ \"activitySendDelay\": () => (/* binding */ activitySendDelay),\n/* harmony export */ \"maxCharacterWarningLimit\": () => (/* binding */ maxCharacterWarningLimit),\n/* harmony export */ \"maxCharacterSrDebounceDelay\": () => (/* binding */ maxCharacterSrDebounceDelay),\n/* harmony export */ \"defaultTransitionTimeMs\": () => (/* binding */ defaultTransitionTimeMs),\n/* harmony export */ \"typingTimeout\": () => (/* binding */ typingTimeout),\n/* harmony export */ \"defaultConfig\": () => (/* binding */ defaultConfig)\n/* harmony export */ });\nconst CSS_NAME = 'cvco';\nconst apiVersion = '2';\nconst userParticipantId = 'seamly-client-participant'; // How long to debounce distinct changes in unread messages for before\n// broadcasting to the screen reader. This is done to avoid verbosity.\n\nconst unreadScreenReaderWait = 2000;\nconst newMessageScreenReaderWait = 1000;\nconst screenReaderDebounceDelaySeconds = 10;\nconst activitySendDelay = 15000;\nconst maxCharacterWarningLimit = 50;\nconst maxCharacterSrDebounceDelay = 300;\nconst defaultTransitionTimeMs = 300; // How long to wait before we decide the user isn't typing\n\nconst typingTimeout = 2000;\nconst defaultConfig = {\n namespace: 'default',\n layoutMode: 'window',\n // \"window\", \"inline\" (\"sidebar\")\n messages: {\n agent: {\n showAvatar: false,\n // true, \"inline\"\n showName: false\n },\n user: {\n showAvatar: false,\n // true, \"inline\"\n showName: false\n },\n timeIndicator: {\n enabled: false,\n threshold: 3600000 // Default threshold is an hour in milliseconds\n\n }\n }\n};\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/config.js?");
270
270
 
271
271
  /***/ }),
272
272
 
@@ -277,7 +277,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
277
277
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
278
278
 
279
279
  "use strict";
280
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"setHasResponded\": () => (/* binding */ setHasResponded),\n/* harmony export */ \"initialize\": () => (/* binding */ initialize),\n/* harmony export */ \"reset\": () => (/* binding */ reset)\n/* harmony export */ });\n/* harmony import */ var _ui_utils_seamly_utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../ui/utils/seamly-utils */ \"./src/javascripts/ui/utils/seamly-utils.js\");\n/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../config */ \"./src/javascripts/domains/config/index.js\");\n/* harmony import */ var _i18n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../i18n */ \"./src/javascripts/domains/i18n/index.js\");\n/* harmony import */ var _visibility_actions__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../visibility/actions */ \"./src/javascripts/domains/visibility/actions.js\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./utils */ \"./src/javascripts/domains/app/utils.js\");\n/* harmony import */ var _api_errors_seamly_unavailable_error__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../api/errors/seamly-unavailable-error */ \"./src/javascripts/api/errors/seamly-unavailable-error.js\");\n/* harmony import */ var _api_errors_seamly_session_expired_error__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../api/errors/seamly-session-expired-error */ \"./src/javascripts/api/errors/seamly-session-expired-error.js\");\n\n\n\n\n\n\n\nconst setHasResponded = (0,_utils__WEBPACK_IMPORTED_MODULE_4__.createAction)('setHasResponded', hasResponded => ({\n hasResponded\n}));\nconst initialize = (0,_utils__WEBPACK_IMPORTED_MODULE_4__.createThunk)('initialize', async (config, {\n dispatch,\n extra: {\n api\n }\n}) => {\n var _config$context;\n\n dispatch(_config__WEBPACK_IMPORTED_MODULE_1__.Actions.initialize(config));\n let locale = config === null || config === void 0 ? void 0 : (_config$context = config.context) === null || _config$context === void 0 ? void 0 : _config$context.locale;\n\n try {\n const {\n features,\n defaultLocale\n } = await api.getConfig();\n dispatch({\n type: _ui_utils_seamly_utils__WEBPACK_IMPORTED_MODULE_0__.seamlyActions.SET_FEATURES,\n features\n });\n locale = locale || defaultLocale;\n dispatch(_i18n__WEBPACK_IMPORTED_MODULE_2__.Actions.setInitialLocale(locale));\n } catch (e) {\n throw new _api_errors_seamly_unavailable_error__WEBPACK_IMPORTED_MODULE_5__[\"default\"]();\n }\n\n try {\n if (api.hasConversation()) {\n var _initialState$transla;\n\n const initialState = await api.getConversationIntitialState();\n dispatch({\n type: _ui_utils_seamly_utils__WEBPACK_IMPORTED_MODULE_0__.seamlyActions.SET_INITIAL_STATE,\n initialState\n });\n locale = ((_initialState$transla = initialState.translation) === null || _initialState$transla === void 0 ? void 0 : _initialState$transla.locale) || locale;\n\n if ('userResponded' in initialState) {\n dispatch(setHasResponded(initialState.userResponded));\n }\n }\n } catch (e) {\n if (e instanceof _api_errors_seamly_session_expired_error__WEBPACK_IMPORTED_MODULE_6__[\"default\"]) {\n throw e;\n }\n\n throw new _api_errors_seamly_unavailable_error__WEBPACK_IMPORTED_MODULE_5__[\"default\"]();\n } finally {\n await dispatch(_i18n__WEBPACK_IMPORTED_MODULE_2__.Actions.setLocale(locale));\n dispatch(_visibility_actions__WEBPACK_IMPORTED_MODULE_3__.initialize());\n }\n});\nconst reset = (0,_utils__WEBPACK_IMPORTED_MODULE_4__.createAction)('reset', () => {});\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/domains/app/actions.js?");
280
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"setHasResponded\": () => (/* binding */ setHasResponded),\n/* harmony export */ \"initialize\": () => (/* binding */ initialize),\n/* harmony export */ \"reset\": () => (/* binding */ reset)\n/* harmony export */ });\n/* harmony import */ var _ui_utils_seamly_utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../ui/utils/seamly-utils */ \"./src/javascripts/ui/utils/seamly-utils.js\");\n/* harmony import */ var _config_actions__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../config/actions */ \"./src/javascripts/domains/config/actions.js\");\n/* harmony import */ var _i18n_actions__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../i18n/actions */ \"./src/javascripts/domains/i18n/actions.js\");\n/* harmony import */ var _visibility_actions__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../visibility/actions */ \"./src/javascripts/domains/visibility/actions.js\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./utils */ \"./src/javascripts/domains/app/utils.js\");\n/* harmony import */ var _api_errors_seamly_unavailable_error__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../api/errors/seamly-unavailable-error */ \"./src/javascripts/api/errors/seamly-unavailable-error.js\");\n/* harmony import */ var _api_errors_seamly_session_expired_error__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../api/errors/seamly-session-expired-error */ \"./src/javascripts/api/errors/seamly-session-expired-error.js\");\n/* harmony import */ var _interrupt_actions__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../interrupt/actions */ \"./src/javascripts/domains/interrupt/actions.js\");\n\n\n\n\n\n\n\n\nconst setHasResponded = (0,_utils__WEBPACK_IMPORTED_MODULE_4__.createAction)('setHasResponded', hasResponded => ({\n hasResponded\n}));\nconst initialize = (0,_utils__WEBPACK_IMPORTED_MODULE_4__.createThunk)('initialize', async (_, {\n dispatch,\n extra: {\n api,\n config\n }\n}) => {\n var _config$context;\n\n dispatch(_config_actions__WEBPACK_IMPORTED_MODULE_1__.initialize(config));\n let locale = config === null || config === void 0 ? void 0 : (_config$context = config.context) === null || _config$context === void 0 ? void 0 : _config$context.locale;\n\n try {\n const {\n features,\n defaultLocale,\n preChat\n } = await api.getConfig();\n dispatch({\n type: _ui_utils_seamly_utils__WEBPACK_IMPORTED_MODULE_0__.seamlyActions.SET_FEATURES,\n features\n });\n locale = locale || defaultLocale;\n dispatch(_i18n_actions__WEBPACK_IMPORTED_MODULE_2__.setInitialLocale(locale));\n dispatch(_config_actions__WEBPACK_IMPORTED_MODULE_1__.setPreChatEvents(preChat.map(payload => ({\n type: 'message',\n payload\n }))));\n } catch (e) {\n throw new _api_errors_seamly_unavailable_error__WEBPACK_IMPORTED_MODULE_5__[\"default\"]();\n }\n\n try {\n if (api.hasConversation()) {\n var _initialState$transla;\n\n const initialState = await api.getConversationIntitialState();\n dispatch({\n type: _ui_utils_seamly_utils__WEBPACK_IMPORTED_MODULE_0__.seamlyActions.SET_INITIAL_STATE,\n initialState\n });\n locale = ((_initialState$transla = initialState.translation) === null || _initialState$transla === void 0 ? void 0 : _initialState$transla.locale) || locale;\n\n if ('userResponded' in initialState) {\n dispatch(setHasResponded(initialState.userResponded));\n }\n }\n } catch (e) {\n if (e instanceof _api_errors_seamly_session_expired_error__WEBPACK_IMPORTED_MODULE_6__[\"default\"]) {\n throw e;\n }\n\n throw new _api_errors_seamly_unavailable_error__WEBPACK_IMPORTED_MODULE_5__[\"default\"]();\n } finally {\n await dispatch(_i18n_actions__WEBPACK_IMPORTED_MODULE_2__.setLocale(locale));\n dispatch(_visibility_actions__WEBPACK_IMPORTED_MODULE_3__.initialize());\n }\n});\nconst reset = (0,_utils__WEBPACK_IMPORTED_MODULE_4__.createThunk)('reset', async (config, {\n dispatch,\n extra: {\n api\n }\n}) => {\n try {\n await api.disconnect();\n await api.clearStore();\n dispatch(initialize());\n } catch (error) {\n dispatch(_interrupt_actions__WEBPACK_IMPORTED_MODULE_7__.set(error));\n }\n});\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/domains/app/actions.js?");
281
281
 
282
282
  /***/ }),
283
283
 
@@ -343,7 +343,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
343
343
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
344
344
 
345
345
  "use strict";
346
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"initialize\": () => (/* binding */ initialize),\n/* harmony export */ \"update\": () => (/* binding */ update)\n/* harmony export */ });\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils */ \"./src/javascripts/domains/config/utils.js\");\n\nconst initialize = (0,_utils__WEBPACK_IMPORTED_MODULE_0__.createAction)('initialize', config => ({\n config\n}));\nconst update = (0,_utils__WEBPACK_IMPORTED_MODULE_0__.createAction)('update', config => ({\n config\n}));\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/domains/config/actions.js?");
346
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"initialize\": () => (/* binding */ initialize),\n/* harmony export */ \"update\": () => (/* binding */ update),\n/* harmony export */ \"setPreChatEvents\": () => (/* binding */ setPreChatEvents)\n/* harmony export */ });\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils */ \"./src/javascripts/domains/config/utils.js\");\n\nconst initialize = (0,_utils__WEBPACK_IMPORTED_MODULE_0__.createAction)('initialize', config => ({\n config\n}));\nconst update = (0,_utils__WEBPACK_IMPORTED_MODULE_0__.createAction)('update', config => ({\n config\n}));\nconst setPreChatEvents = (0,_utils__WEBPACK_IMPORTED_MODULE_0__.createAction)('setPreChatEvents', events => ({\n events\n}));\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/domains/config/actions.js?");
347
347
 
348
348
  /***/ }),
349
349
 
@@ -387,7 +387,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
387
387
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
388
388
 
389
389
  "use strict";
390
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../config */ \"./src/javascripts/config.js\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils */ \"./src/javascripts/domains/config/utils.js\");\n/* harmony import */ var _actions__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./actions */ \"./src/javascripts/domains/config/actions.js\");\n/* harmony import */ var _ui_utils_general_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../ui/utils/general-utils */ \"./src/javascripts/ui/utils/general-utils.js\");\nconst _excluded = [\"messages\"];\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n\n\n\n\n\nconst initialState = _objectSpread(_objectSpread({}, _config__WEBPACK_IMPORTED_MODULE_0__.defaultConfig), {}, {\n hideOnNoUserResponse: false,\n showDisclaimer: false,\n showFaq: false,\n customComponents: {},\n defaults: {}\n});\n\nconst configKeys = ['hideOnNoUserResponse', 'showDisclaimer', 'showFaq', 'namespace', 'customComponents', 'defaults', 'layoutMode', 'api', 'zIndex', 'context', 'appContainerClassNames', 'messages', 'visible', 'visibilityCallback', 'errorCallback'];\n\nconst updateState = (state, {\n config\n}) => {\n const _pick = (0,_ui_utils_general_utils__WEBPACK_IMPORTED_MODULE_3__.pick)(config, configKeys),\n {\n messages\n } = _pick,\n partialConfig = _objectWithoutProperties(_pick, _excluded);\n\n let newState = state;\n\n if (Object.keys(partialConfig).length > 0) {\n newState = _objectSpread(_objectSpread({}, newState), partialConfig);\n }\n\n if (messages) {\n newState = _objectSpread(_objectSpread({}, newState), {}, {\n messages: _objectSpread(_objectSpread({}, newState.messages), messages)\n });\n }\n\n return newState;\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_utils__WEBPACK_IMPORTED_MODULE_1__.createReducer)({\n [_actions__WEBPACK_IMPORTED_MODULE_2__.initialize]: (state, action) => {\n return updateState(state, action);\n },\n [_actions__WEBPACK_IMPORTED_MODULE_2__.update]: (state, action) => {\n return updateState(state, action);\n }\n}, initialState));\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/domains/config/reducer.js?");
390
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../config */ \"./src/javascripts/config.js\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils */ \"./src/javascripts/domains/config/utils.js\");\n/* harmony import */ var _actions__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./actions */ \"./src/javascripts/domains/config/actions.js\");\n/* harmony import */ var _ui_utils_general_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../ui/utils/general-utils */ \"./src/javascripts/ui/utils/general-utils.js\");\n/* harmony import */ var _app_actions__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../app/actions */ \"./src/javascripts/domains/app/actions.js\");\nconst _excluded = [\"messages\"];\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n\n\n\n\n\n\nconst initialState = _objectSpread(_objectSpread({}, _config__WEBPACK_IMPORTED_MODULE_0__.defaultConfig), {}, {\n hideOnNoUserResponse: false,\n showDisclaimer: false,\n showFaq: false,\n customComponents: {},\n defaults: {},\n preChatEvents: []\n});\n\nconst configKeys = ['hideOnNoUserResponse', 'showDisclaimer', 'showFaq', 'namespace', 'customComponents', 'defaults', 'layoutMode', 'api', 'zIndex', 'context', 'appContainerClassNames', 'messages', 'visible', 'visibilityCallback', 'errorCallback'];\n\nconst updateState = (state, {\n config\n}) => {\n const _pick = (0,_ui_utils_general_utils__WEBPACK_IMPORTED_MODULE_3__.pick)(config, configKeys),\n {\n messages\n } = _pick,\n partialConfig = _objectWithoutProperties(_pick, _excluded);\n\n let newState = state;\n\n if (Object.keys(partialConfig).length > 0) {\n newState = _objectSpread(_objectSpread({}, newState), partialConfig);\n }\n\n if (messages) {\n newState = _objectSpread(_objectSpread({}, newState), {}, {\n messages: _objectSpread(_objectSpread({}, newState.messages), messages)\n });\n }\n\n return newState;\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_utils__WEBPACK_IMPORTED_MODULE_1__.createReducer)({\n [_actions__WEBPACK_IMPORTED_MODULE_2__.initialize]: (state, action) => {\n return updateState(state, action);\n },\n [_actions__WEBPACK_IMPORTED_MODULE_2__.update]: (state, action) => {\n return updateState(state, action);\n },\n [_app_actions__WEBPACK_IMPORTED_MODULE_4__.initialize.pending]: () => initialState,\n [_actions__WEBPACK_IMPORTED_MODULE_2__.setPreChatEvents]: (state, {\n events\n }) => {\n return _objectSpread(_objectSpread({}, state), {}, {\n preChatEvents: events\n });\n }\n}, initialState));\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/domains/config/reducer.js?");
391
391
 
392
392
  /***/ }),
393
393
 
@@ -453,7 +453,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
453
453
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
454
454
 
455
455
  "use strict";
456
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"useFormContext\": () => (/* binding */ useFormContext),\n/* harmony export */ \"useForm\": () => (/* binding */ useForm),\n/* harmony export */ \"useValidations\": () => (/* binding */ useValidations),\n/* harmony export */ \"useFormControl\": () => (/* binding */ useFormControl)\n/* harmony export */ });\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact/hooks */ \"preact/hooks\");\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(preact_hooks__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../redux */ \"./src/javascripts/domains/redux/index.js\");\n/* harmony import */ var _context__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./context */ \"./src/javascripts/domains/forms/context.js\");\n/* harmony import */ var _actions__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./actions */ \"./src/javascripts/domains/forms/actions.js\");\n/* harmony import */ var _selectors__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./selectors */ \"./src/javascripts/domains/forms/selectors.js\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./utils */ \"./src/javascripts/domains/forms/utils.js\");\n\n\n\n\n\n\nfunction useFormContext() {\n return (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context__WEBPACK_IMPORTED_MODULE_2__[\"default\"]);\n}\nfunction useForm() {\n const {\n handleSubmit\n } = useFormContext();\n return {\n handleSubmit\n };\n}\nfunction useValidations(values, validationSchema) {\n const errors = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => (0,_utils__WEBPACK_IMPORTED_MODULE_5__.validate)(values, validationSchema), [values, validationSchema]);\n return {\n isValid: Object.keys(errors).length === 0,\n errors\n };\n}\nfunction useFormControl(name) {\n const dispatch = (0,_redux__WEBPACK_IMPORTED_MODULE_1__.useStoreDispatch)();\n const {\n formId,\n updateControlValue,\n updateControlTouched,\n errors\n } = useFormContext();\n const form = (0,_redux__WEBPACK_IMPORTED_MODULE_1__.useSelectorWithProps)(_selectors__WEBPACK_IMPORTED_MODULE_4__.getFormById, {\n formId\n }, [formId]);\n const isRegistered = !!form;\n const isRegisteredRef = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)();\n isRegisteredRef.current = isRegistered;\n const value = (0,_redux__WEBPACK_IMPORTED_MODULE_1__.useSelectorWithProps)(_selectors__WEBPACK_IMPORTED_MODULE_4__.getControlValueByName, {\n formId,\n name\n }, [formId, name]);\n const touched = (0,_redux__WEBPACK_IMPORTED_MODULE_1__.useSelectorWithProps)(_selectors__WEBPACK_IMPORTED_MODULE_4__.getControlTouchedByName, {\n formId,\n name\n }, [formId, name]);\n const error = errors === null || errors === void 0 ? void 0 : errors[name];\n const isValid = !error;\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n // Make sure the form is registered\n // Since child useEffect runs before FormProvider useEffect\n if (isRegisteredRef.current) {\n dispatch(_actions__WEBPACK_IMPORTED_MODULE_3__.registerControl(formId, name));\n }\n }, [isRegistered, formId, name, dispatch]);\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect)(() => {\n return () => {\n dispatch(_actions__WEBPACK_IMPORTED_MODULE_3__.deregisterControl(formId, name));\n };\n }, [isRegistered, formId, name, dispatch]); // preact uses onInput instead of onChange\n\n const onInput = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)(e => updateControlValue(name, e.target.value), [name, updateControlValue]);\n const onBlur = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {\n updateControlTouched(name, true);\n }, [updateControlTouched, name]);\n const field = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => ({\n name,\n onInput,\n onBlur,\n value\n }), [name, onInput, onBlur, value]);\n const meta = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => ({\n isValid,\n error,\n touched\n }), [isValid, error, touched]);\n return [field, meta];\n}\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/domains/forms/hooks.js?");
456
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"useFormContext\": () => (/* binding */ useFormContext),\n/* harmony export */ \"useForm\": () => (/* binding */ useForm),\n/* harmony export */ \"useValidations\": () => (/* binding */ useValidations),\n/* harmony export */ \"useFormControl\": () => (/* binding */ useFormControl)\n/* harmony export */ });\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact/hooks */ \"preact/hooks\");\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(preact_hooks__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../redux */ \"./src/javascripts/domains/redux/index.js\");\n/* harmony import */ var _context__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./context */ \"./src/javascripts/domains/forms/context.js\");\n/* harmony import */ var _actions__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./actions */ \"./src/javascripts/domains/forms/actions.js\");\n/* harmony import */ var _selectors__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./selectors */ \"./src/javascripts/domains/forms/selectors.js\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./utils */ \"./src/javascripts/domains/forms/utils.js\");\n\n\n\n\n\n\nfunction useFormContext() {\n return (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context__WEBPACK_IMPORTED_MODULE_2__[\"default\"]);\n}\nfunction useForm() {\n const {\n handleSubmit,\n isSubmitted,\n isValid\n } = useFormContext();\n return {\n handleSubmit,\n isSubmitted,\n isValid\n };\n}\nfunction useValidations(values, validationSchema) {\n const errors = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => (0,_utils__WEBPACK_IMPORTED_MODULE_5__.validate)(values, validationSchema), [values, validationSchema]);\n return {\n isValid: Object.keys(errors).length === 0,\n errors\n };\n}\nfunction useFormControl(name) {\n const dispatch = (0,_redux__WEBPACK_IMPORTED_MODULE_1__.useStoreDispatch)();\n const {\n formId,\n updateControlValue,\n updateControlTouched,\n errors\n } = useFormContext();\n const form = (0,_redux__WEBPACK_IMPORTED_MODULE_1__.useSelectorWithProps)(_selectors__WEBPACK_IMPORTED_MODULE_4__.getFormById, {\n formId\n }, [formId]);\n const isRegistered = !!form;\n const isRegisteredRef = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)();\n isRegisteredRef.current = isRegistered;\n const value = (0,_redux__WEBPACK_IMPORTED_MODULE_1__.useSelectorWithProps)(_selectors__WEBPACK_IMPORTED_MODULE_4__.getControlValueByName, {\n formId,\n name\n }, [formId, name]);\n const touched = (0,_redux__WEBPACK_IMPORTED_MODULE_1__.useSelectorWithProps)(_selectors__WEBPACK_IMPORTED_MODULE_4__.getControlTouchedByName, {\n formId,\n name\n }, [formId, name]);\n const error = errors === null || errors === void 0 ? void 0 : errors[name];\n const isValid = !error;\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n // Make sure the form is registered\n // Since child useEffect runs before FormProvider useEffect\n if (isRegisteredRef.current) {\n dispatch(_actions__WEBPACK_IMPORTED_MODULE_3__.registerControl(formId, name));\n }\n }, [isRegistered, formId, name, dispatch]);\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect)(() => {\n return () => {\n dispatch(_actions__WEBPACK_IMPORTED_MODULE_3__.deregisterControl(formId, name));\n };\n }, [isRegistered, formId, name, dispatch]); // preact uses onInput instead of onChange\n\n const onInput = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)(e => updateControlValue(name, e.target.value), [name, updateControlValue]);\n const onBlur = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {\n updateControlTouched(name, true);\n }, [updateControlTouched, name]);\n const field = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => ({\n name,\n onInput,\n onBlur,\n value\n }), [name, onInput, onBlur, value]);\n const meta = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => ({\n isValid,\n error,\n touched\n }), [isValid, error, touched]);\n return [field, meta];\n}\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/domains/forms/hooks.js?");
457
457
 
458
458
  /***/ }),
459
459
 
@@ -475,7 +475,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
475
475
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
476
476
 
477
477
  "use strict";
478
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ FormProvider)\n/* harmony export */ });\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact/hooks */ \"preact/hooks\");\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(preact_hooks__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../redux */ \"./src/javascripts/domains/redux/index.js\");\n/* harmony import */ var _context__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./context */ \"./src/javascripts/domains/forms/context.js\");\n/* harmony import */ var _actions__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./actions */ \"./src/javascripts/domains/forms/actions.js\");\n/* harmony import */ var _selectors__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./selectors */ \"./src/javascripts/domains/forms/selectors.js\");\n/* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./hooks */ \"./src/javascripts/domains/forms/hooks.js\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__);\nconst _excluded = [\"children\", \"formId\", \"persistData\", \"onSubmit\", \"validationSchema\"];\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n\n\n\n\n\n\n\nfunction FormProvider(_ref) {\n let {\n children,\n formId,\n persistData,\n onSubmit,\n validationSchema\n } = _ref,\n props = _objectWithoutProperties(_ref, _excluded);\n\n const dispatch = (0,_redux__WEBPACK_IMPORTED_MODULE_1__.useStoreDispatch)();\n const values = (0,_redux__WEBPACK_IMPORTED_MODULE_1__.useSelectorWithProps)(_selectors__WEBPACK_IMPORTED_MODULE_4__.getFormValuesByFormId, {\n formId\n }, [formId]);\n const [isSubmitted, setIsSubmitted] = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n const [externalErrors, setExternalErrors] = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useState)({});\n const {\n isValid: validationIsValid,\n errors: validationErrors\n } = (0,_hooks__WEBPACK_IMPORTED_MODULE_5__.useValidations)(values, validationSchema);\n const errors = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => _objectSpread(_objectSpread({}, validationErrors), externalErrors), [validationErrors, externalErrors]); // register\n\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect)(() => {\n // register form in redux store\n dispatch(_actions__WEBPACK_IMPORTED_MODULE_3__.registerForm(formId, persistData));\n }, [formId, persistData, dispatch]); // deregister\n\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n return () => {\n // deregister form from redux store\n dispatch(_actions__WEBPACK_IMPORTED_MODULE_3__.deregisterForm(formId));\n };\n }, [formId, persistData, dispatch]);\n const updateControlValue = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)((name, value) => {\n dispatch(_actions__WEBPACK_IMPORTED_MODULE_3__.updateControlValue(formId, name, value));\n }, [formId, dispatch]);\n const updateControlTouched = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)((name, touched) => {\n dispatch(_actions__WEBPACK_IMPORTED_MODULE_3__.updateControlTouched(formId, name, touched));\n }, [dispatch, formId]); // Function to manually set an error\n\n const setError = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)((name, error) => {\n setExternalErrors(val => {\n return _objectSpread(_objectSpread({}, val), {}, {\n [name]: error\n });\n });\n }, [setExternalErrors]);\n const handleSubmit = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)(e => {\n e.preventDefault();\n setIsSubmitted(true);\n\n if (validationIsValid) {\n onSubmit(values, {\n updateControlValue,\n setError\n });\n }\n }, [validationIsValid, onSubmit, values, updateControlValue, setError]);\n const contextValue = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => ({\n formId,\n values,\n errors,\n isValid: Object.keys(errors).length === 0,\n isSubmitted,\n handleSubmit,\n validationSchema,\n updateControlValue,\n updateControlTouched\n }), [formId, values, errors, isSubmitted, handleSubmit, validationSchema, updateControlValue, updateControlTouched]);\n\n if (!formId) {\n console.error('\"formId\" is required.');\n return null;\n }\n\n if (!onSubmit) {\n console.error('\"onSubmit\" is required.');\n return null;\n }\n\n return (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_context__WEBPACK_IMPORTED_MODULE_2__.Provider, _objectSpread(_objectSpread({}, props), {}, {\n value: contextValue,\n children: children\n }));\n}\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/domains/forms/provider.js?");
478
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ FormProvider)\n/* harmony export */ });\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact/hooks */ \"preact/hooks\");\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(preact_hooks__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../redux */ \"./src/javascripts/domains/redux/index.js\");\n/* harmony import */ var _context__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./context */ \"./src/javascripts/domains/forms/context.js\");\n/* harmony import */ var _actions__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./actions */ \"./src/javascripts/domains/forms/actions.js\");\n/* harmony import */ var _selectors__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./selectors */ \"./src/javascripts/domains/forms/selectors.js\");\n/* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./hooks */ \"./src/javascripts/domains/forms/hooks.js\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__);\nconst _excluded = [\"children\", \"formId\", \"persistData\", \"onError\", \"onSubmit\", \"validationSchema\"];\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n\n\n\n\n\n\n\nfunction FormProvider(_ref) {\n let {\n children,\n formId,\n persistData,\n onError,\n onSubmit,\n validationSchema\n } = _ref,\n props = _objectWithoutProperties(_ref, _excluded);\n\n const dispatch = (0,_redux__WEBPACK_IMPORTED_MODULE_1__.useStoreDispatch)();\n const values = (0,_redux__WEBPACK_IMPORTED_MODULE_1__.useSelectorWithProps)(_selectors__WEBPACK_IMPORTED_MODULE_4__.getFormValuesByFormId, {\n formId\n }, [formId]);\n const [isSubmitted, setIsSubmitted] = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n const [externalErrors, setExternalErrors] = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useState)({});\n const {\n isValid: validationIsValid,\n errors: validationErrors\n } = (0,_hooks__WEBPACK_IMPORTED_MODULE_5__.useValidations)(values, validationSchema);\n const errors = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => _objectSpread(_objectSpread({}, validationErrors), externalErrors), [validationErrors, externalErrors]); // register\n\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect)(() => {\n // register form in redux store\n dispatch(_actions__WEBPACK_IMPORTED_MODULE_3__.registerForm(formId, persistData));\n }, [formId, persistData, dispatch]); // deregister\n\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n return () => {\n // deregister form from redux store\n dispatch(_actions__WEBPACK_IMPORTED_MODULE_3__.deregisterForm(formId));\n };\n }, [formId, persistData, dispatch]);\n const updateControlValue = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)((name, value) => {\n dispatch(_actions__WEBPACK_IMPORTED_MODULE_3__.updateControlValue(formId, name, value));\n }, [formId, dispatch]);\n const updateControlTouched = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)((name, touched) => {\n dispatch(_actions__WEBPACK_IMPORTED_MODULE_3__.updateControlTouched(formId, name, touched));\n }, [dispatch, formId]); // Function to manually set an error\n\n const setError = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)((name, error) => {\n setExternalErrors(val => {\n return _objectSpread(_objectSpread({}, val), {}, {\n [name]: error\n });\n });\n }, [setExternalErrors]);\n const handleSubmit = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)(e => {\n e.preventDefault();\n setIsSubmitted(true);\n\n if (validationIsValid) {\n onSubmit(values, {\n updateControlValue,\n setError\n });\n }\n }, [validationIsValid, onSubmit, values, updateControlValue, setError]); //\n\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (onError) {\n onError({\n errors,\n isSubmitted,\n isValid: Object.keys(errors).length === 0\n });\n }\n }, [isSubmitted, errors, onError]);\n const contextValue = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => ({\n formId,\n values,\n errors,\n isValid: Object.keys(errors).length === 0,\n isSubmitted,\n handleSubmit,\n validationSchema,\n updateControlValue,\n updateControlTouched\n }), [formId, values, errors, isSubmitted, handleSubmit, validationSchema, updateControlValue, updateControlTouched]);\n\n if (!formId) {\n console.error('\"formId\" is required.');\n return null;\n }\n\n if (!onSubmit) {\n console.error('\"onSubmit\" is required.');\n return null;\n }\n\n return (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_context__WEBPACK_IMPORTED_MODULE_2__.Provider, _objectSpread(_objectSpread({}, props), {}, {\n value: contextValue,\n children: children\n }));\n}\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/domains/forms/provider.js?");
479
479
 
480
480
  /***/ }),
481
481
 
@@ -486,7 +486,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
486
486
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
487
487
 
488
488
  "use strict";
489
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils */ \"./src/javascripts/domains/forms/utils.js\");\n/* harmony import */ var _actions__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./actions */ \"./src/javascripts/domains/forms/actions.js\");\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n\n\nconst initialState = {};\nconst initialFormState = {\n controls: {}\n};\nconst initialControlState = {\n value: '',\n touched: false\n};\n\nfunction updateFormControl(state, formId, name, controlState) {\n var _state$formId;\n\n const currentControlState = ((_state$formId = state[formId]) === null || _state$formId === void 0 ? void 0 : _state$formId.controls[name]) || initialControlState;\n return _objectSpread(_objectSpread({}, state), {}, {\n [formId]: _objectSpread(_objectSpread({}, state[formId]), {}, {\n controls: _objectSpread(_objectSpread({}, state[formId].controls), {}, {\n [name]: _objectSpread(_objectSpread({}, currentControlState), controlState)\n })\n })\n });\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_utils__WEBPACK_IMPORTED_MODULE_0__.createReducer)({\n // Form handlers\n [_actions__WEBPACK_IMPORTED_MODULE_1__.registerForm]: (state, {\n formId,\n persistData\n }) => {\n const formState = persistData ? state[formId] ?? _objectSpread(_objectSpread({}, initialFormState), {}, {\n persistData\n }) : _objectSpread(_objectSpread({}, initialFormState), {}, {\n persistData\n });\n return _objectSpread(_objectSpread({}, state), {}, {\n [formId]: formState\n });\n },\n [_actions__WEBPACK_IMPORTED_MODULE_1__.deregisterForm]: (state, {\n formId\n }) => {\n var _newState$formId;\n\n const newState = _objectSpread({}, state);\n\n if (!((_newState$formId = newState[formId]) !== null && _newState$formId !== void 0 && _newState$formId.persistData)) {\n delete newState[formId];\n }\n\n return newState;\n },\n // Form control handlers\n [_actions__WEBPACK_IMPORTED_MODULE_1__.registerControl]: (state, {\n name,\n formId\n }) => {\n return updateFormControl(state, formId, name);\n },\n [_actions__WEBPACK_IMPORTED_MODULE_1__.deregisterControl]: (state, {\n formId,\n name\n }) => {\n const form = state[formId];\n\n if (!form) {\n return state;\n }\n\n if (form.persistData) {\n return state;\n }\n\n const controls = _objectSpread({}, form.controls);\n\n delete controls[name];\n return _objectSpread(_objectSpread({}, state), {}, {\n [formId]: _objectSpread(_objectSpread({}, form), {}, {\n controls\n })\n });\n },\n [_actions__WEBPACK_IMPORTED_MODULE_1__.updateControlValue]: (state, {\n formId,\n name,\n value\n }) => {\n return updateFormControl(state, formId, name, {\n value\n });\n },\n [_actions__WEBPACK_IMPORTED_MODULE_1__.updateControlTouched]: (state, {\n formId,\n name,\n touched\n }) => {\n return updateFormControl(state, formId, name, {\n touched\n });\n }\n}, initialState));\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/domains/forms/reducer.js?");
489
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils */ \"./src/javascripts/domains/forms/utils.js\");\n/* harmony import */ var _actions__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./actions */ \"./src/javascripts/domains/forms/actions.js\");\n/* harmony import */ var _app_actions__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../app/actions */ \"./src/javascripts/domains/app/actions.js\");\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n\n\n\nconst initialState = {};\nconst initialFormState = {\n controls: {}\n};\nconst initialControlState = {\n value: '',\n touched: false\n};\n\nfunction updateFormControl(state, formId, name, controlState) {\n var _state$formId;\n\n const currentControlState = ((_state$formId = state[formId]) === null || _state$formId === void 0 ? void 0 : _state$formId.controls[name]) || initialControlState;\n return _objectSpread(_objectSpread({}, state), {}, {\n [formId]: _objectSpread(_objectSpread({}, state[formId]), {}, {\n controls: _objectSpread(_objectSpread({}, state[formId].controls), {}, {\n [name]: _objectSpread(_objectSpread({}, currentControlState), controlState)\n })\n })\n });\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_utils__WEBPACK_IMPORTED_MODULE_0__.createReducer)({\n // Form handlers\n [_actions__WEBPACK_IMPORTED_MODULE_1__.registerForm]: (state, {\n formId,\n persistData\n }) => {\n var _state$formId2;\n\n const formState = persistData ? (_state$formId2 = state[formId]) !== null && _state$formId2 !== void 0 ? _state$formId2 : _objectSpread(_objectSpread({}, initialFormState), {}, {\n persistData\n }) : _objectSpread(_objectSpread({}, initialFormState), {}, {\n persistData\n });\n return _objectSpread(_objectSpread({}, state), {}, {\n [formId]: formState\n });\n },\n [_actions__WEBPACK_IMPORTED_MODULE_1__.deregisterForm]: (state, {\n formId\n }) => {\n var _newState$formId;\n\n const newState = _objectSpread({}, state);\n\n if (!((_newState$formId = newState[formId]) !== null && _newState$formId !== void 0 && _newState$formId.persistData)) {\n delete newState[formId];\n }\n\n return newState;\n },\n // Form control handlers\n [_actions__WEBPACK_IMPORTED_MODULE_1__.registerControl]: (state, {\n name,\n formId\n }) => {\n return updateFormControl(state, formId, name);\n },\n [_actions__WEBPACK_IMPORTED_MODULE_1__.deregisterControl]: (state, {\n formId,\n name\n }) => {\n const form = state[formId];\n\n if (!form) {\n return state;\n }\n\n if (form.persistData) {\n return state;\n }\n\n const controls = _objectSpread({}, form.controls);\n\n delete controls[name];\n return _objectSpread(_objectSpread({}, state), {}, {\n [formId]: _objectSpread(_objectSpread({}, form), {}, {\n controls\n })\n });\n },\n [_actions__WEBPACK_IMPORTED_MODULE_1__.updateControlValue]: (state, {\n formId,\n name,\n value\n }) => {\n return updateFormControl(state, formId, name, {\n value\n });\n },\n [_actions__WEBPACK_IMPORTED_MODULE_1__.updateControlTouched]: (state, {\n formId,\n name,\n touched\n }) => {\n return updateFormControl(state, formId, name, {\n touched\n });\n },\n [_app_actions__WEBPACK_IMPORTED_MODULE_2__.initialize.pending]: () => initialState\n}, initialState));\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/domains/forms/reducer.js?");
490
490
 
491
491
  /***/ }),
492
492
 
@@ -508,7 +508,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
508
508
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
509
509
 
510
510
  "use strict";
511
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"createActions\": () => (/* binding */ createActions),\n/* harmony export */ \"createReducer\": () => (/* binding */ createReducer),\n/* harmony export */ \"selectState\": () => (/* binding */ selectState),\n/* harmony export */ \"validate\": () => (/* binding */ validate)\n/* harmony export */ });\n/* harmony import */ var _lib_redux_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../lib/redux-helpers */ \"./src/javascripts/lib/redux-helpers/index.js\");\n\nconst {\n createActions,\n createReducer,\n selectState\n} = (0,_lib_redux_helpers__WEBPACK_IMPORTED_MODULE_0__.createDomain)('forms');\nfunction validate(values, schema = {}) {\n return Object.entries(schema).reduce((errors, [key, validations]) => {\n if (validations && !Array.isArray(validations)) {\n // eslint-disable-next-line no-param-reassign\n validations = [validations];\n }\n\n for (let i = 0; i < ((_validations = validations) === null || _validations === void 0 ? void 0 : _validations.length) ?? 0; i++) {\n var _validations;\n\n if (!validations[i].fn(values[key], validations[i].compareValue)) {\n errors[key] = validations[i].errorText;\n break;\n }\n }\n\n return errors;\n }, {});\n}\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/domains/forms/utils.js?");
511
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"createActions\": () => (/* binding */ createActions),\n/* harmony export */ \"createReducer\": () => (/* binding */ createReducer),\n/* harmony export */ \"selectState\": () => (/* binding */ selectState),\n/* harmony export */ \"validate\": () => (/* binding */ validate)\n/* harmony export */ });\n/* harmony import */ var _lib_redux_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../lib/redux-helpers */ \"./src/javascripts/lib/redux-helpers/index.js\");\n\nconst {\n createActions,\n createReducer,\n selectState\n} = (0,_lib_redux_helpers__WEBPACK_IMPORTED_MODULE_0__.createDomain)('forms');\nfunction validate(values, schema = {}) {\n return Object.entries(schema).reduce((errors, [key, validations]) => {\n if (validations && !Array.isArray(validations)) {\n // eslint-disable-next-line no-param-reassign\n validations = [validations];\n }\n\n for (let i = 0; (_ref = i < ((_validations = validations) === null || _validations === void 0 ? void 0 : _validations.length)) !== null && _ref !== void 0 ? _ref : 0; i++) {\n var _ref, _validations;\n\n if (!validations[i].fn(values[key], validations[i].compareValue)) {\n errors[key] = validations[i].errorText;\n break;\n }\n }\n\n return errors;\n }, {});\n}\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/domains/forms/utils.js?");
512
512
 
513
513
  /***/ }),
514
514
 
@@ -530,7 +530,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
530
530
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
531
531
 
532
532
  "use strict";
533
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"useI18n\": () => (/* binding */ useI18n)\n/* harmony export */ });\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact/hooks */ \"preact/hooks\");\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(preact_hooks__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _ultraq_icu_message_formatter__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @ultraq/icu-message-formatter */ \"./node_modules/@ultraq/icu-message-formatter/lib/icu-message-formatter.es.js\");\n/* harmony import */ var _redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../redux */ \"./src/javascripts/domains/redux/index.js\");\n/* harmony import */ var _selectors__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./selectors */ \"./src/javascripts/domains/i18n/selectors.js\");\n\n\n\n // The passed in locale (en-GB) is only used to call Intl.PluralRules.select() in\n// pluralTypeHandler. Since we only use exact plural matches (=0, =1 etc) we can\n// safely use en-GB all the time.\n\nconst formatter = new _ultraq_icu_message_formatter__WEBPACK_IMPORTED_MODULE_3__.MessageFormatter('en-GB', {\n plural: _ultraq_icu_message_formatter__WEBPACK_IMPORTED_MODULE_3__.pluralTypeHandler,\n select: _ultraq_icu_message_formatter__WEBPACK_IMPORTED_MODULE_3__.selectTypeHandler\n});\nfunction useI18n() {\n const translations = (0,_redux__WEBPACK_IMPORTED_MODULE_1__.useSelector)(_selectors__WEBPACK_IMPORTED_MODULE_2__.selectTranslations);\n const locale = (0,_redux__WEBPACK_IMPORTED_MODULE_1__.useSelector)(_selectors__WEBPACK_IMPORTED_MODULE_2__.selectLocale);\n const initialLocale = (0,_redux__WEBPACK_IMPORTED_MODULE_1__.useSelector)(_selectors__WEBPACK_IMPORTED_MODULE_2__.selectInitialLocale);\n const t = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)((key, values = {}) => {\n const translation = translations[key];\n\n if (!translation) {\n return null;\n }\n\n return formatter.format(translation, values);\n }, [translations]);\n return {\n t,\n locale,\n initialLocale\n };\n}\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/domains/i18n/hooks.js?");
533
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"useI18n\": () => (/* binding */ useI18n)\n/* harmony export */ });\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact/hooks */ \"preact/hooks\");\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(preact_hooks__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _ultraq_icu_message_formatter__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @ultraq/icu-message-formatter */ \"./node_modules/@ultraq/icu-message-formatter/lib/icu-message-formatter.es.js\");\n/* harmony import */ var _redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../redux */ \"./src/javascripts/domains/redux/index.js\");\n/* harmony import */ var _selectors__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./selectors */ \"./src/javascripts/domains/i18n/selectors.js\");\n\n\n\n // The passed in locale (en-GB) is only used to call Intl.PluralRules.select() in\n// pluralTypeHandler. Since we only use exact plural matches (=0, =1 etc) we can\n// safely use en-GB all the time.\n\nconst formatter = new _ultraq_icu_message_formatter__WEBPACK_IMPORTED_MODULE_3__.MessageFormatter('en-GB', {\n plural: _ultraq_icu_message_formatter__WEBPACK_IMPORTED_MODULE_3__.pluralTypeHandler,\n select: _ultraq_icu_message_formatter__WEBPACK_IMPORTED_MODULE_3__.selectTypeHandler\n});\nfunction useI18n() {\n const translations = (0,_redux__WEBPACK_IMPORTED_MODULE_1__.useSelector)(_selectors__WEBPACK_IMPORTED_MODULE_2__.selectTranslations);\n const locale = (0,_redux__WEBPACK_IMPORTED_MODULE_1__.useSelector)(_selectors__WEBPACK_IMPORTED_MODULE_2__.selectLocale);\n const initialLocale = (0,_redux__WEBPACK_IMPORTED_MODULE_1__.useSelector)(_selectors__WEBPACK_IMPORTED_MODULE_2__.selectInitialLocale);\n const t = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)((key, values = {}) => {\n const translation = translations[key];\n\n if (!translation) {\n console.warn(`Translation key: ${key} is missing in locale: ${locale}`);\n return null;\n }\n\n return formatter.format(translation, values);\n }, [translations, locale]);\n return {\n t,\n locale,\n initialLocale\n };\n}\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/domains/i18n/hooks.js?");
534
534
 
535
535
  /***/ }),
536
536
 
@@ -552,7 +552,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
552
552
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
553
553
 
554
554
  "use strict";
555
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _actions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./actions */ \"./src/javascripts/domains/i18n/actions.js\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils */ \"./src/javascripts/domains/i18n/utils.js\");\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n\n\nconst defaultState = {\n translations: {\n 'errors.configError.message': 'We are sorry this happened, please retry at a later time.',\n 'errors.configError.srText': 'A chat configuration error occurred. Our apologies, please retry at a later time.',\n 'errors.configError.title': 'Chat configuration error.',\n 'errors.general.buttonText': 'Restart chat',\n 'errors.general.message': 'Do you want to start a new chat session?',\n 'errors.general.srText': 'Something went wrong with the chat session. You can restart the chat.',\n 'errors.general.title': 'Something went wrong',\n 'errors.seamlyOffline.message': 'There might be a problem with your or our network connection. The chat session should resume as soon the connection is available again.',\n 'errors.seamlyOffline.srText': 'The chat has connection issues. There might be a problem with your or our network connection. The chat session should resume as soon as the connection is available again.',\n 'errors.seamlyOffline.title': 'Connection issues',\n 'errors.seamlyUnavailable.buttonText': 'Try again',\n 'errors.seamlyUnavailable.message': 'The server could not be reached. Try again in a little while.',\n 'errors.seamlyUnavailable.srText': 'The chat server could not be reached. Try again in a little while.',\n 'errors.seamlyUnavailable.title': 'Server unavailable'\n },\n isLoading: false,\n initialLocale: undefined\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_utils__WEBPACK_IMPORTED_MODULE_1__.createReducer)({\n [_actions__WEBPACK_IMPORTED_MODULE_0__.setInitialLocale]: (state, {\n locale\n }) => _objectSpread(_objectSpread({}, state), {}, {\n initialLocale: locale\n }),\n [_actions__WEBPACK_IMPORTED_MODULE_0__.setLocale.pending]: state => _objectSpread(_objectSpread({}, state), {}, {\n isLoading: true\n }),\n [_actions__WEBPACK_IMPORTED_MODULE_0__.setLocale.fulfilled]: (state, {\n payload: translations,\n meta: {\n arg: locale\n }\n }) => {\n if (!translations) {\n return _objectSpread(_objectSpread({}, state), {}, {\n isLoading: false\n });\n }\n\n return _objectSpread(_objectSpread({}, state), {}, {\n isLoading: false,\n locale,\n translations: Object.keys(translations).sort().reduce((accum, key) => _objectSpread(_objectSpread({}, accum), {}, {\n [key]: translations[key]\n }), {})\n });\n },\n [_actions__WEBPACK_IMPORTED_MODULE_0__.setLocale.rejected]: state => _objectSpread(_objectSpread({}, state), {}, {\n isLoading: false\n })\n}, defaultState));\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/domains/i18n/reducer.js?");
555
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _actions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./actions */ \"./src/javascripts/domains/i18n/actions.js\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils */ \"./src/javascripts/domains/i18n/utils.js\");\n/* harmony import */ var _app_actions__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../app/actions */ \"./src/javascripts/domains/app/actions.js\");\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n\n\n\nconst defaultState = {\n translations: {\n 'errors.configError.message': 'We are sorry this happened, please retry at a later time.',\n 'errors.configError.srText': 'A chat configuration error occurred. Our apologies, please retry at a later time.',\n 'errors.configError.title': 'Chat configuration error.',\n 'errors.general.buttonText': 'Restart chat',\n 'errors.general.message': 'Do you want to start a new chat session?',\n 'errors.general.srText': 'Something went wrong with the chat session. You can restart the chat.',\n 'errors.general.title': 'Something went wrong',\n 'errors.seamlyOffline.message': 'There might be a problem with your or our network connection. The chat session should resume as soon the connection is available again.',\n 'errors.seamlyOffline.srText': 'The chat has connection issues. There might be a problem with your or our network connection. The chat session should resume as soon as the connection is available again.',\n 'errors.seamlyOffline.title': 'Connection issues',\n 'errors.seamlyUnavailable.buttonText': 'Try again',\n 'errors.seamlyUnavailable.message': 'The server could not be reached. Try again in a little while.',\n 'errors.seamlyUnavailable.srText': 'The chat server could not be reached. Try again in a little while.',\n 'errors.seamlyUnavailable.title': 'Server unavailable'\n },\n isLoading: false,\n initialLocale: undefined\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_utils__WEBPACK_IMPORTED_MODULE_1__.createReducer)({\n [_actions__WEBPACK_IMPORTED_MODULE_0__.setInitialLocale]: (state, {\n locale\n }) => _objectSpread(_objectSpread({}, state), {}, {\n initialLocale: locale\n }),\n [_actions__WEBPACK_IMPORTED_MODULE_0__.setLocale.pending]: state => _objectSpread(_objectSpread({}, state), {}, {\n isLoading: true\n }),\n [_actions__WEBPACK_IMPORTED_MODULE_0__.setLocale.fulfilled]: (state, {\n payload: translations,\n meta: {\n arg: locale\n }\n }) => {\n if (!translations) {\n return _objectSpread(_objectSpread({}, state), {}, {\n isLoading: false\n });\n }\n\n return _objectSpread(_objectSpread({}, state), {}, {\n isLoading: false,\n locale,\n translations: Object.keys(translations).sort().reduce((accum, key) => _objectSpread(_objectSpread({}, accum), {}, {\n [key]: translations[key]\n }), {})\n });\n },\n [_actions__WEBPACK_IMPORTED_MODULE_0__.setLocale.rejected]: state => _objectSpread(_objectSpread({}, state), {}, {\n isLoading: false\n }),\n [_app_actions__WEBPACK_IMPORTED_MODULE_2__.initialize.pending]: () => defaultState\n}, defaultState));\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/domains/i18n/reducer.js?");
556
556
 
557
557
  /***/ }),
558
558
 
@@ -629,7 +629,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
629
629
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
630
630
 
631
631
  "use strict";
632
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils */ \"./src/javascripts/domains/interrupt/utils.js\");\n/* harmony import */ var _actions__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./actions */ \"./src/javascripts/domains/interrupt/actions.js\");\n/* harmony import */ var _app__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../app */ \"./src/javascripts/domains/app/index.js\");\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n\n\n\nconst initialState = {\n error: undefined\n};\n\nconst handleError = (state, {\n error\n}) => _objectSpread(_objectSpread({}, state), {}, {\n error\n});\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_utils__WEBPACK_IMPORTED_MODULE_0__.createReducer)({\n [_actions__WEBPACK_IMPORTED_MODULE_1__.set]: handleError,\n [_app__WEBPACK_IMPORTED_MODULE_2__.Actions.initialize.rejected]: handleError,\n [_actions__WEBPACK_IMPORTED_MODULE_1__.clear]: () => initialState,\n [_app__WEBPACK_IMPORTED_MODULE_2__.Actions.reset]: () => initialState\n}, initialState));\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/domains/interrupt/reducer.js?");
632
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils */ \"./src/javascripts/domains/interrupt/utils.js\");\n/* harmony import */ var _actions__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./actions */ \"./src/javascripts/domains/interrupt/actions.js\");\n/* harmony import */ var _app_actions__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../app/actions */ \"./src/javascripts/domains/app/actions.js\");\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n\n\n\nconst initialState = {\n error: undefined\n};\n\nconst handleError = (state, {\n error\n}) => _objectSpread(_objectSpread({}, state), {}, {\n error\n});\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_utils__WEBPACK_IMPORTED_MODULE_0__.createReducer)({\n [_actions__WEBPACK_IMPORTED_MODULE_1__.set]: handleError,\n [_app_actions__WEBPACK_IMPORTED_MODULE_2__.initialize.rejected]: handleError,\n [_actions__WEBPACK_IMPORTED_MODULE_1__.clear]: () => initialState,\n [_app_actions__WEBPACK_IMPORTED_MODULE_2__.initialize.pending]: () => initialState\n}, initialState));\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/domains/interrupt/reducer.js?");
633
633
 
634
634
  /***/ }),
635
635
 
@@ -673,7 +673,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
673
673
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
674
674
 
675
675
  "use strict";
676
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ createMiddleware)\n/* harmony export */ });\n/* harmony import */ var _ui_utils_seamly_utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../ui/utils/seamly-utils */ \"./src/javascripts/ui/utils/seamly-utils.js\");\n/* harmony import */ var _interrupt__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../interrupt */ \"./src/javascripts/domains/interrupt/index.js\");\n/* harmony import */ var _api_errors_seamly_offline_error__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../api/errors/seamly-offline-error */ \"./src/javascripts/api/errors/seamly-offline-error.js\");\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n\n\n\nfunction createMiddleware({\n api\n}) {\n return ({\n dispatch\n }) => next => action => {\n const result = next(action);\n\n switch (action.type) {\n // This is needed for backwards compatibility. If there's an error,\n // Cobrowsing has to be disabled in order to not \"re-start\" into co-browsing\n case String(_interrupt__WEBPACK_IMPORTED_MODULE_1__.Actions.set):\n if (!(action.error instanceof _api_errors_seamly_offline_error__WEBPACK_IMPORTED_MODULE_2__[\"default\"])) {\n dispatch({\n type: _ui_utils_seamly_utils__WEBPACK_IMPORTED_MODULE_0__.seamlyActions.SET_USER_SELECTED_OPTION,\n option: _ui_utils_seamly_utils__WEBPACK_IMPORTED_MODULE_0__.featureKeys.cobrowsing,\n value: false\n });\n }\n\n break;\n\n case _ui_utils_seamly_utils__WEBPACK_IMPORTED_MODULE_0__.seamlyActions.SET_USER_SELECTED_OPTIONS:\n api.store.set('options', action.options);\n break;\n\n case _ui_utils_seamly_utils__WEBPACK_IMPORTED_MODULE_0__.seamlyActions.SET_USER_SELECTED_OPTION:\n api.store.set('options', _objectSpread(_objectSpread({}, api.store.get('options') || {}), {}, {\n [action.option]: action.value\n }));\n break;\n }\n\n return result;\n };\n}\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/domains/options/middleware.js?");
676
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ createMiddleware)\n/* harmony export */ });\n/* harmony import */ var _ui_utils_seamly_utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../ui/utils/seamly-utils */ \"./src/javascripts/ui/utils/seamly-utils.js\");\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n\nfunction createMiddleware({\n api\n}) {\n return () => next => action => {\n const result = next(action);\n\n switch (action.type) {\n case _ui_utils_seamly_utils__WEBPACK_IMPORTED_MODULE_0__.seamlyActions.SET_USER_SELECTED_OPTIONS:\n api.store.set('options', action.options);\n break;\n\n case _ui_utils_seamly_utils__WEBPACK_IMPORTED_MODULE_0__.seamlyActions.SET_USER_SELECTED_OPTION:\n api.store.set('options', _objectSpread(_objectSpread({}, api.store.get('options') || {}), {}, {\n [action.option]: action.value\n }));\n break;\n }\n\n return result;\n };\n}\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/domains/options/middleware.js?");
677
677
 
678
678
  /***/ }),
679
679
 
@@ -750,7 +750,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
750
750
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
751
751
 
752
752
  "use strict";
753
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"createStore\": () => (/* binding */ createStore)\n/* harmony export */ });\n/* harmony import */ var redux_thunk__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! redux-thunk */ \"./node_modules/redux-thunk/es/index.js\");\n/* harmony import */ var _redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../redux */ \"./src/javascripts/domains/redux/index.js\");\n/* harmony import */ var _app__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../app */ \"./src/javascripts/domains/app/index.js\");\n/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../config */ \"./src/javascripts/domains/config/index.js\");\n/* harmony import */ var _forms__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../forms */ \"./src/javascripts/domains/forms/index.js\");\n/* harmony import */ var _translations__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../translations */ \"./src/javascripts/domains/translations/index.js\");\n/* harmony import */ var _i18n__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../i18n */ \"./src/javascripts/domains/i18n/index.js\");\n/* harmony import */ var _visibility__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../visibility */ \"./src/javascripts/domains/visibility/index.js\");\n/* harmony import */ var _interrupt__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../interrupt */ \"./src/javascripts/domains/interrupt/index.js\");\n/* harmony import */ var _options__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../options */ \"./src/javascripts/domains/options/index.js\");\n/* harmony import */ var _errors__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../errors */ \"./src/javascripts/domains/errors/index.js\");\n/* harmony import */ var _state_reducer__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./state-reducer */ \"./src/javascripts/domains/store/state-reducer.js\");\n\n\n\n\n\n\n\n\n\n\n\n\nfunction createStore({\n initialState,\n api,\n eventBus\n} = {}) {\n const store = (0,_redux__WEBPACK_IMPORTED_MODULE_1__.createReduxStore)({\n reducers: {\n state: _state_reducer__WEBPACK_IMPORTED_MODULE_11__[\"default\"],\n [String(_app__WEBPACK_IMPORTED_MODULE_2__.Reducer)]: _app__WEBPACK_IMPORTED_MODULE_2__.Reducer,\n [String(_config__WEBPACK_IMPORTED_MODULE_3__.Reducer)]: _config__WEBPACK_IMPORTED_MODULE_3__.Reducer,\n [String(_forms__WEBPACK_IMPORTED_MODULE_4__.Reducer)]: _forms__WEBPACK_IMPORTED_MODULE_4__.Reducer,\n [String(_translations__WEBPACK_IMPORTED_MODULE_5__.Reducer)]: _translations__WEBPACK_IMPORTED_MODULE_5__.Reducer,\n [String(_i18n__WEBPACK_IMPORTED_MODULE_6__.Reducer)]: _i18n__WEBPACK_IMPORTED_MODULE_6__.Reducer,\n [String(_interrupt__WEBPACK_IMPORTED_MODULE_8__.Reducer)]: _interrupt__WEBPACK_IMPORTED_MODULE_8__.Reducer,\n [String(_visibility__WEBPACK_IMPORTED_MODULE_7__.Reducer)]: _visibility__WEBPACK_IMPORTED_MODULE_7__.Reducer\n },\n initialState,\n middlewares: [(0,_errors__WEBPACK_IMPORTED_MODULE_10__.createMiddleware)({\n api\n }), redux_thunk__WEBPACK_IMPORTED_MODULE_0__[\"default\"].withExtraArgument({\n api,\n eventBus\n }), (0,_config__WEBPACK_IMPORTED_MODULE_3__.createMiddleware)(), (0,_interrupt__WEBPACK_IMPORTED_MODULE_8__.createMiddleware)({\n api\n }), (0,_options__WEBPACK_IMPORTED_MODULE_9__.createMiddleware)({\n api\n }), (0,_translations__WEBPACK_IMPORTED_MODULE_5__.createMiddleware)()]\n });\n return store;\n}\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/domains/store/index.js?");
753
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"createStore\": () => (/* binding */ createStore)\n/* harmony export */ });\n/* harmony import */ var redux_thunk__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! redux-thunk */ \"./node_modules/redux-thunk/es/index.js\");\n/* harmony import */ var _redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../redux */ \"./src/javascripts/domains/redux/index.js\");\n/* harmony import */ var _app__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../app */ \"./src/javascripts/domains/app/index.js\");\n/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../config */ \"./src/javascripts/domains/config/index.js\");\n/* harmony import */ var _forms__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../forms */ \"./src/javascripts/domains/forms/index.js\");\n/* harmony import */ var _translations__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../translations */ \"./src/javascripts/domains/translations/index.js\");\n/* harmony import */ var _i18n__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../i18n */ \"./src/javascripts/domains/i18n/index.js\");\n/* harmony import */ var _visibility__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../visibility */ \"./src/javascripts/domains/visibility/index.js\");\n/* harmony import */ var _interrupt__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../interrupt */ \"./src/javascripts/domains/interrupt/index.js\");\n/* harmony import */ var _options__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../options */ \"./src/javascripts/domains/options/index.js\");\n/* harmony import */ var _errors__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../errors */ \"./src/javascripts/domains/errors/index.js\");\n/* harmony import */ var _state_reducer__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./state-reducer */ \"./src/javascripts/domains/store/state-reducer.js\");\n\n\n\n\n\n\n\n\n\n\n\n\nfunction createStore({\n initialState,\n api,\n eventBus,\n config\n} = {}) {\n const store = (0,_redux__WEBPACK_IMPORTED_MODULE_1__.createReduxStore)({\n reducers: {\n state: _state_reducer__WEBPACK_IMPORTED_MODULE_11__[\"default\"],\n [String(_app__WEBPACK_IMPORTED_MODULE_2__.Reducer)]: _app__WEBPACK_IMPORTED_MODULE_2__.Reducer,\n [String(_config__WEBPACK_IMPORTED_MODULE_3__.Reducer)]: _config__WEBPACK_IMPORTED_MODULE_3__.Reducer,\n [String(_forms__WEBPACK_IMPORTED_MODULE_4__.Reducer)]: _forms__WEBPACK_IMPORTED_MODULE_4__.Reducer,\n [String(_translations__WEBPACK_IMPORTED_MODULE_5__.Reducer)]: _translations__WEBPACK_IMPORTED_MODULE_5__.Reducer,\n [String(_i18n__WEBPACK_IMPORTED_MODULE_6__.Reducer)]: _i18n__WEBPACK_IMPORTED_MODULE_6__.Reducer,\n [String(_interrupt__WEBPACK_IMPORTED_MODULE_8__.Reducer)]: _interrupt__WEBPACK_IMPORTED_MODULE_8__.Reducer,\n [String(_visibility__WEBPACK_IMPORTED_MODULE_7__.Reducer)]: _visibility__WEBPACK_IMPORTED_MODULE_7__.Reducer\n },\n initialState,\n middlewares: [(0,_errors__WEBPACK_IMPORTED_MODULE_10__.createMiddleware)({\n api\n }), redux_thunk__WEBPACK_IMPORTED_MODULE_0__[\"default\"].withExtraArgument({\n api,\n eventBus,\n config\n }), (0,_config__WEBPACK_IMPORTED_MODULE_3__.createMiddleware)(), (0,_interrupt__WEBPACK_IMPORTED_MODULE_8__.createMiddleware)({\n api\n }), (0,_options__WEBPACK_IMPORTED_MODULE_9__.createMiddleware)({\n api\n }), (0,_translations__WEBPACK_IMPORTED_MODULE_5__.createMiddleware)()]\n });\n return store;\n}\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/domains/store/index.js?");
754
754
 
755
755
  /***/ }),
756
756
 
@@ -761,7 +761,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
761
761
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
762
762
 
763
763
  "use strict";
764
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ stateReducer)\n/* harmony export */ });\n/* harmony import */ var _lib_id__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../lib/id */ \"./src/javascripts/lib/id.js\");\n/* harmony import */ var _ui_utils_seamly_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../ui/utils/seamly-utils */ \"./src/javascripts/ui/utils/seamly-utils.js\");\n/* harmony import */ var _app__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../app */ \"./src/javascripts/domains/app/index.js\");\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n// Legacy state reducer. Do not add new features here but extract/create new reducers as needed\n\n\n\nconst initialState = {\n events: [],\n initialState: {},\n unreadEvents: 0,\n isLoading: false,\n idleDetachCountdown: {\n hasCountdown: false,\n isActive: false\n },\n resumeConversationPrompt: false,\n serviceInfo: {\n activeServiceSessionId: ''\n },\n participantInfo: {\n participants: {},\n currentAgent: ''\n },\n headerTitles: {\n title: null,\n subTitle: ''\n },\n historyLoaded: false,\n skiplinkTargetId: (0,_lib_id__WEBPACK_IMPORTED_MODULE_0__.randomId)(),\n optionsButtonId: (0,_lib_id__WEBPACK_IMPORTED_MODULE_0__.randomId)(),\n cobrowsingContainerId: (0,_lib_id__WEBPACK_IMPORTED_MODULE_0__.randomId)(),\n headerCollapseButtonId: (0,_lib_id__WEBPACK_IMPORTED_MODULE_0__.randomId)(),\n serviceData: {},\n options: {\n features: {},\n panelActive: false,\n optionActive: '',\n userSelectedOptions: {}\n },\n showFileUpload: false,\n currentUploads: [],\n entryMeta: {\n default: _ui_utils_seamly_utils__WEBPACK_IMPORTED_MODULE_1__.entryTypes.text,\n active: _ui_utils_seamly_utils__WEBPACK_IMPORTED_MODULE_1__.entryTypes.text,\n userSelected: null,\n blockAutoEntrySwitch: false,\n options: {},\n optionsOverride: {}\n },\n seamlyContainerElement: null\n};\nfunction stateReducer(state = initialState, action) {\n if (action.type === String(_app__WEBPACK_IMPORTED_MODULE_2__.Actions.reset)) {\n const {\n visible\n } = state;\n return _objectSpread(_objectSpread({}, initialState), {}, {\n visible\n });\n }\n\n return (0,_ui_utils_seamly_utils__WEBPACK_IMPORTED_MODULE_1__.seamlyStateReducer)(state, action);\n}\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/domains/store/state-reducer.js?");
764
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ stateReducer)\n/* harmony export */ });\n/* harmony import */ var _lib_id__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../lib/id */ \"./src/javascripts/lib/id.js\");\n/* harmony import */ var _ui_utils_seamly_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../ui/utils/seamly-utils */ \"./src/javascripts/ui/utils/seamly-utils.js\");\n/* harmony import */ var _app_actions__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../app/actions */ \"./src/javascripts/domains/app/actions.js\");\n// Legacy state reducer. Do not add new features here but extract/create new reducers as needed\n\n\n\nconst initialState = {\n events: [],\n initialState: {},\n unreadEvents: 0,\n isLoading: false,\n idleDetachCountdown: {\n hasCountdown: false,\n isActive: false\n },\n resumeConversationPrompt: false,\n serviceInfo: {\n activeServiceSessionId: ''\n },\n participantInfo: {\n participants: {},\n currentAgent: ''\n },\n headerTitles: {\n title: null,\n subTitle: ''\n },\n historyLoaded: false,\n skiplinkTargetId: (0,_lib_id__WEBPACK_IMPORTED_MODULE_0__.randomId)(),\n optionsButtonId: (0,_lib_id__WEBPACK_IMPORTED_MODULE_0__.randomId)(),\n headerCollapseButtonId: (0,_lib_id__WEBPACK_IMPORTED_MODULE_0__.randomId)(),\n serviceData: {},\n options: {\n features: {},\n panelActive: false,\n optionActive: '',\n userSelectedOptions: {}\n },\n showFileUpload: false,\n currentUploads: [],\n entryMeta: {\n default: _ui_utils_seamly_utils__WEBPACK_IMPORTED_MODULE_1__.entryTypes.text,\n active: _ui_utils_seamly_utils__WEBPACK_IMPORTED_MODULE_1__.entryTypes.text,\n userSelected: null,\n blockAutoEntrySwitch: false,\n options: {},\n optionsOverride: {}\n },\n seamlyContainerElement: null\n};\nfunction stateReducer(state = initialState, action) {\n if (action.type === String(_app_actions__WEBPACK_IMPORTED_MODULE_2__.initialize.pending)) {\n return initialState;\n }\n\n return (0,_ui_utils_seamly_utils__WEBPACK_IMPORTED_MODULE_1__.seamlyStateReducer)(state, action);\n}\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/domains/store/state-reducer.js?");
765
765
 
766
766
  /***/ }),
767
767
 
@@ -805,7 +805,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
805
805
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
806
806
 
807
807
  "use strict";
808
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact/hooks */ \"preact/hooks\");\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(preact_hooks__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _ui_components_form_controls_form__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../ui/components/form-controls/form */ \"./src/javascripts/ui/components/form-controls/form.js\");\n/* harmony import */ var _lib_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../lib/css */ \"./src/javascripts/lib/css.js\");\n/* harmony import */ var _i18n__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../i18n */ \"./src/javascripts/domains/i18n/index.js\");\n/* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../hooks */ \"./src/javascripts/domains/translations/hooks.js\");\n/* harmony import */ var _ui_components_form_controls_select__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../../ui/components/form-controls/select */ \"./src/javascripts/ui/components/form-controls/select.js\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__);\n\n\n\n\n\n\n\n\n\n\nfunction TranslationsOptionsDialogForm({\n controlName,\n descriptionId\n}) {\n const {\n t\n } = (0,_i18n__WEBPACK_IMPORTED_MODULE_3__.useI18n)();\n const {\n isActive,\n languages,\n currentLocale\n } = (0,_hooks__WEBPACK_IMPORTED_MODULE_4__.useTranslations)();\n const {\n locale: uiLocale\n } = (0,_i18n__WEBPACK_IMPORTED_MODULE_3__.useI18n)();\n const languageName = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => {\n var _languages$find;\n\n return languages === null || languages === void 0 ? void 0 : (_languages$find = languages.find(lang => lang.locale === currentLocale)) === null || _languages$find === void 0 ? void 0 : _languages$find.nativeName;\n }, [languages, currentLocale]);\n const options = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => {\n return [{\n value: '',\n label: t('translations.settings.defaultOptionLabel')\n }, ...languages.filter(language => language.locale.toLowerCase() !== String(uiLocale).toLowerCase()).map(language => ({\n value: language.locale,\n label: language.nativeName\n }))];\n }, [t, languages, uiLocale]);\n return (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(_ui_components_form_controls_form__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n noValidate: \"true\",\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(\"p\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_2__.className)('options__description'),\n id: descriptionId,\n children: t('translations.settings.description')\n }), isActive ? (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.Fragment, {\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(\"h3\", {\n children: t('translations.settings.currentTranslationLabel')\n }), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(\"p\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_2__.className)('options__active-language'),\n children: languageName\n })]\n }) : (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_ui_components_form_controls_select__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n name: controlName,\n type: \"text\",\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_2__.className)('input__select'),\n \"aria-describedby\": descriptionId,\n labelClass: (0,_lib_css__WEBPACK_IMPORTED_MODULE_2__.className)('label'),\n labelText: t('translations.settings.inputLabel'),\n options: options,\n defaultValue: currentLocale || ''\n }), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(\"div\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_2__.className)('options__actions'),\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(\"button\", {\n type: \"submit\",\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_2__.className)('button', 'button--primary', 'options__submit'),\n children: isActive ? t('translations.settings.endButtonText') : t('translations.settings.startButtonText')\n })\n })]\n });\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (TranslationsOptionsDialogForm);\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/domains/translations/components/options-dialog/form.js?");
808
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact/hooks */ \"preact/hooks\");\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(preact_hooks__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _ui_components_form_controls_form__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../ui/components/form-controls/form */ \"./src/javascripts/ui/components/form-controls/form.js\");\n/* harmony import */ var _lib_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../lib/css */ \"./src/javascripts/lib/css.js\");\n/* harmony import */ var _i18n__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../i18n */ \"./src/javascripts/domains/i18n/index.js\");\n/* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../hooks */ \"./src/javascripts/domains/translations/hooks.js\");\n/* harmony import */ var _ui_components_form_controls_select__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../../ui/components/form-controls/select */ \"./src/javascripts/ui/components/form-controls/select.js\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__);\n\n\n\n\n\n\n\n\n\n\nfunction TranslationsOptionsDialogForm({\n controlName,\n descriptionId\n}) {\n const {\n t\n } = (0,_i18n__WEBPACK_IMPORTED_MODULE_3__.useI18n)();\n const {\n isActive,\n languages,\n currentLocale\n } = (0,_hooks__WEBPACK_IMPORTED_MODULE_4__.useTranslations)();\n const {\n locale: uiLocale\n } = (0,_i18n__WEBPACK_IMPORTED_MODULE_3__.useI18n)();\n const languageName = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => {\n var _languages$find;\n\n return languages === null || languages === void 0 ? void 0 : (_languages$find = languages.find(lang => lang.locale === currentLocale)) === null || _languages$find === void 0 ? void 0 : _languages$find.nativeName;\n }, [languages, currentLocale]);\n const options = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => {\n return [{\n value: '',\n label: t('translations.settings.defaultOptionLabel')\n }, ...languages.filter(language => language.locale.toLowerCase() !== String(uiLocale).toLowerCase()).map(language => ({\n value: language.locale,\n label: language.nativeName\n }))];\n }, [t, languages, uiLocale]);\n return (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(_ui_components_form_controls_form__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n noValidate: \"true\",\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_2__.className)('options__form'),\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(\"p\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_2__.className)('options__description'),\n id: descriptionId,\n children: t('translations.settings.description')\n }), isActive ? (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.Fragment, {\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(\"h3\", {\n children: t('translations.settings.currentTranslationLabel')\n }), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(\"p\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_2__.className)('options__active-language'),\n children: languageName\n })]\n }) : (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_ui_components_form_controls_select__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n name: controlName,\n type: \"text\",\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_2__.className)('input__select'),\n \"aria-describedby\": descriptionId,\n labelClass: (0,_lib_css__WEBPACK_IMPORTED_MODULE_2__.className)('label'),\n labelText: t('translations.settings.inputLabel'),\n options: options,\n defaultValue: currentLocale || ''\n }), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(\"div\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_2__.className)('options__actions'),\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(\"button\", {\n type: \"submit\",\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_2__.className)('button', 'button--primary', 'options__submit'),\n children: isActive ? t('translations.settings.endButtonText') : t('translations.settings.startButtonText')\n })\n })]\n });\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (TranslationsOptionsDialogForm);\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/domains/translations/components/options-dialog/form.js?");
809
809
 
810
810
  /***/ }),
811
811
 
@@ -816,7 +816,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
816
816
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
817
817
 
818
818
  "use strict";
819
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"formName\": () => (/* binding */ formName),\n/* harmony export */ \"inputName\": () => (/* binding */ inputName),\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact/hooks */ \"preact/hooks\");\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(preact_hooks__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _ui_components_options_options_frame__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../ui/components/options/options-frame */ \"./src/javascripts/ui/components/options/options-frame.js\");\n/* harmony import */ var _forms__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../forms */ \"./src/javascripts/domains/forms/index.js\");\n/* harmony import */ var _form__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./form */ \"./src/javascripts/domains/translations/components/options-dialog/form.js\");\n/* harmony import */ var _ui_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../../ui/hooks/seamly-hooks */ \"./src/javascripts/ui/hooks/seamly-hooks.js\");\n/* harmony import */ var _ui_utils_form_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../../ui/utils/form-utils */ \"./src/javascripts/ui/utils/form-utils.js\");\n/* harmony import */ var _ui_utils_validations__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../../../ui/utils/validations */ \"./src/javascripts/ui/utils/validations.js\");\n/* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../hooks */ \"./src/javascripts/domains/translations/hooks.js\");\n/* harmony import */ var _i18n__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../../i18n */ \"./src/javascripts/domains/i18n/index.js\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__);\n\n\n\n\n\n\n\n\n\n\nconst formName = 'translation-settings';\nconst inputName = 'locale';\n\nfunction TranslationsOptionsDialog({\n onClose\n}) {\n const {\n t\n } = (0,_i18n__WEBPACK_IMPORTED_MODULE_8__.useI18n)();\n const {\n isActive,\n enableTranslations,\n disableTranslations\n } = (0,_hooks__WEBPACK_IMPORTED_MODULE_7__.useTranslations)();\n const descriptionId = (0,_ui_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_4__.useGeneratedId)();\n const {\n focusContainer\n } = (0,_hooks__WEBPACK_IMPORTED_MODULE_7__.useTranslationsContainer)();\n\n const handleSubmit = ({\n locale\n }) => {\n if (isActive) {\n disableTranslations();\n } else {\n enableTranslations(locale);\n onClose();\n focusContainer();\n }\n }; // we need a key to fully reset the form when we enable/disable translations\n\n\n const formKeyRef = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)(0);\n const validationSchema = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => {\n formKeyRef.current += 1;\n if (isActive) return {};\n return {\n [inputName]: (0,_ui_utils_form_utils__WEBPACK_IMPORTED_MODULE_5__.getValidator)(_ui_utils_validations__WEBPACK_IMPORTED_MODULE_6__.isNotEmptyString, t('translations.settings.noLocaleText'))\n };\n }, [isActive, t]);\n return (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsx)(_ui_components_options_options_frame__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n onCancel: onClose,\n formName: formName,\n headingText: t('translations.settings.title'),\n cancelButtonText: t('translations.settings.cancelButtonText'),\n position: \"left\",\n disableButtonFocusing: true,\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsx)(_forms__WEBPACK_IMPORTED_MODULE_2__.FormProvider, {\n onSubmit: handleSubmit,\n formId: formName,\n validationSchema: validationSchema,\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsx)(_form__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n controlName: inputName,\n descriptionId: descriptionId\n })\n }, formKeyRef.current)\n });\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (TranslationsOptionsDialog);\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/domains/translations/components/options-dialog/index.js?");
819
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"formName\": () => (/* binding */ formName),\n/* harmony export */ \"inputName\": () => (/* binding */ inputName),\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact/hooks */ \"preact/hooks\");\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(preact_hooks__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _ui_components_options_options_frame__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../ui/components/options/options-frame */ \"./src/javascripts/ui/components/options/options-frame.js\");\n/* harmony import */ var _forms__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../forms */ \"./src/javascripts/domains/forms/index.js\");\n/* harmony import */ var _form__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./form */ \"./src/javascripts/domains/translations/components/options-dialog/form.js\");\n/* harmony import */ var _ui_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../../ui/hooks/seamly-hooks */ \"./src/javascripts/ui/hooks/seamly-hooks.js\");\n/* harmony import */ var _ui_utils_form_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../../ui/utils/form-utils */ \"./src/javascripts/ui/utils/form-utils.js\");\n/* harmony import */ var _ui_utils_validations__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../../../ui/utils/validations */ \"./src/javascripts/ui/utils/validations.js\");\n/* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../hooks */ \"./src/javascripts/domains/translations/hooks.js\");\n/* harmony import */ var _i18n__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../../i18n */ \"./src/javascripts/domains/i18n/index.js\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__);\n\n\n\n\n\n\n\n\n\n\nconst formName = 'translation-settings';\nconst inputName = 'locale';\n\nfunction TranslationsOptionsDialog({\n onClose\n}) {\n const [errorClass, setErrorClass] = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useState)(undefined);\n const {\n t\n } = (0,_i18n__WEBPACK_IMPORTED_MODULE_8__.useI18n)();\n const {\n isActive,\n enableTranslations,\n disableTranslations\n } = (0,_hooks__WEBPACK_IMPORTED_MODULE_7__.useTranslations)();\n const descriptionId = (0,_ui_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_4__.useGeneratedId)();\n const {\n focusContainer\n } = (0,_hooks__WEBPACK_IMPORTED_MODULE_7__.useTranslationsContainer)();\n\n const handleSubmit = ({\n locale\n }) => {\n if (isActive) {\n disableTranslations();\n } else {\n enableTranslations(locale);\n onClose();\n focusContainer();\n }\n };\n\n const handleError = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)(({\n isValid,\n isSubmitted\n }) => {\n if (isSubmitted && !isValid) {\n setErrorClass('options--error');\n } else {\n setErrorClass(undefined);\n }\n }, [setErrorClass]); // we need a key to fully reset the form when we enable/disable translations\n\n const formKeyRef = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)(0);\n const validationSchema = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => {\n formKeyRef.current += 1;\n if (isActive) return {};\n return {\n [inputName]: (0,_ui_utils_form_utils__WEBPACK_IMPORTED_MODULE_5__.getValidator)(_ui_utils_validations__WEBPACK_IMPORTED_MODULE_6__.isNotEmptyString, t('translations.settings.noLocaleText'))\n };\n }, [isActive, t]);\n return (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsx)(_ui_components_options_options_frame__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n className: errorClass,\n onCancel: onClose,\n formName: formName,\n headingText: t('translations.settings.title'),\n cancelButtonText: t('translations.settings.cancelButtonText'),\n position: \"left\",\n disableButtonFocusing: true,\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsx)(_forms__WEBPACK_IMPORTED_MODULE_2__.FormProvider, {\n onSubmit: handleSubmit,\n formId: formName,\n validationSchema: validationSchema,\n onError: handleError,\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsx)(_form__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n controlName: inputName,\n descriptionId: descriptionId\n })\n }, formKeyRef.current)\n });\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (TranslationsOptionsDialog);\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/domains/translations/components/options-dialog/index.js?");
820
820
 
821
821
  /***/ }),
822
822
 
@@ -860,7 +860,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
860
860
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
861
861
 
862
862
  "use strict";
863
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils */ \"./src/javascripts/domains/translations/utils.js\");\n/* harmony import */ var _ui_utils_seamly_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../ui/utils/seamly-utils */ \"./src/javascripts/ui/utils/seamly-utils.js\");\n/* harmony import */ var _lib_id__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../lib/id */ \"./src/javascripts/lib/id.js\");\n/* harmony import */ var _actions__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./actions */ \"./src/javascripts/domains/translations/actions.js\");\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n\n\n\n\nconst initialState = {\n isActive: false,\n currentLocale: undefined,\n isAvailable: false,\n languages: [],\n originalPayloadIds: [],\n containerId: (0,_lib_id__WEBPACK_IMPORTED_MODULE_2__.randomId)()\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_utils__WEBPACK_IMPORTED_MODULE_0__.createReducer)({\n [_ui_utils_seamly_utils__WEBPACK_IMPORTED_MODULE_1__.seamlyActions.SET_FEATURES]: (state, action) => {\n var _action$features;\n\n const feature = action === null || action === void 0 ? void 0 : (_action$features = action.features) === null || _action$features === void 0 ? void 0 : _action$features.translation;\n\n if (!feature) {\n return state;\n }\n\n return _objectSpread(_objectSpread({}, state), {}, {\n isAvailable: feature.enabled === true,\n languages: feature.languages || []\n });\n },\n [_ui_utils_seamly_utils__WEBPACK_IMPORTED_MODULE_1__.seamlyActions.CLEAR_FEATURES]: () => initialState,\n [_actions__WEBPACK_IMPORTED_MODULE_3__.enable]: (state, {\n locale\n }) => {\n return _objectSpread(_objectSpread({}, state), {}, {\n isActive: true,\n currentLocale: locale\n });\n },\n [_actions__WEBPACK_IMPORTED_MODULE_3__.disable]: state => {\n return _objectSpread(_objectSpread({}, state), {}, {\n isActive: false,\n currentLocale: undefined\n });\n },\n [_actions__WEBPACK_IMPORTED_MODULE_3__.enableEvent]: (state, {\n payloadId\n }) => {\n if (!state.originalPayloadIds.includes(payloadId)) {\n return state;\n }\n\n return _objectSpread(_objectSpread({}, state), {}, {\n originalPayloadIds: state.originalPayloadIds.filter(id => id !== payloadId)\n });\n },\n [_actions__WEBPACK_IMPORTED_MODULE_3__.disableEvent]: (state, {\n payloadId\n }) => {\n if (state.originalPayloadIds.includes(payloadId)) {\n return state;\n }\n\n return _objectSpread(_objectSpread({}, state), {}, {\n originalPayloadIds: [...state.originalPayloadIds, payloadId]\n });\n }\n}, initialState));\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/domains/translations/reducer.js?");
863
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils */ \"./src/javascripts/domains/translations/utils.js\");\n/* harmony import */ var _ui_utils_seamly_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../ui/utils/seamly-utils */ \"./src/javascripts/ui/utils/seamly-utils.js\");\n/* harmony import */ var _lib_id__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../lib/id */ \"./src/javascripts/lib/id.js\");\n/* harmony import */ var _actions__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./actions */ \"./src/javascripts/domains/translations/actions.js\");\n/* harmony import */ var _app_actions__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../app/actions */ \"./src/javascripts/domains/app/actions.js\");\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n\n\n\n\n\nconst initialState = {\n isActive: false,\n currentLocale: undefined,\n isAvailable: false,\n languages: [],\n originalPayloadIds: [],\n containerId: (0,_lib_id__WEBPACK_IMPORTED_MODULE_2__.randomId)()\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_utils__WEBPACK_IMPORTED_MODULE_0__.createReducer)({\n [_ui_utils_seamly_utils__WEBPACK_IMPORTED_MODULE_1__.seamlyActions.SET_FEATURES]: (state, action) => {\n var _action$features;\n\n const feature = action === null || action === void 0 ? void 0 : (_action$features = action.features) === null || _action$features === void 0 ? void 0 : _action$features.translation;\n\n if (!feature) {\n return state;\n }\n\n return _objectSpread(_objectSpread({}, state), {}, {\n isAvailable: feature.enabled === true,\n languages: feature.languages || []\n });\n },\n [_ui_utils_seamly_utils__WEBPACK_IMPORTED_MODULE_1__.seamlyActions.CLEAR_FEATURES]: () => initialState,\n [_actions__WEBPACK_IMPORTED_MODULE_3__.enable]: (state, {\n locale\n }) => {\n return _objectSpread(_objectSpread({}, state), {}, {\n isActive: true,\n currentLocale: locale\n });\n },\n [_actions__WEBPACK_IMPORTED_MODULE_3__.disable]: state => {\n return _objectSpread(_objectSpread({}, state), {}, {\n isActive: false,\n currentLocale: undefined\n });\n },\n [_actions__WEBPACK_IMPORTED_MODULE_3__.enableEvent]: (state, {\n payloadId\n }) => {\n if (!state.originalPayloadIds.includes(payloadId)) {\n return state;\n }\n\n return _objectSpread(_objectSpread({}, state), {}, {\n originalPayloadIds: state.originalPayloadIds.filter(id => id !== payloadId)\n });\n },\n [_actions__WEBPACK_IMPORTED_MODULE_3__.disableEvent]: (state, {\n payloadId\n }) => {\n if (state.originalPayloadIds.includes(payloadId)) {\n return state;\n }\n\n return _objectSpread(_objectSpread({}, state), {}, {\n originalPayloadIds: [...state.originalPayloadIds, payloadId]\n });\n },\n [_app_actions__WEBPACK_IMPORTED_MODULE_4__.initialize.pending]: () => initialState\n}, initialState));\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/domains/translations/reducer.js?");
864
864
 
865
865
  /***/ }),
866
866
 
@@ -893,7 +893,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
893
893
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
894
894
 
895
895
  "use strict";
896
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"setFromStorage\": () => (/* binding */ setFromStorage),\n/* harmony export */ \"setVisibility\": () => (/* binding */ setVisibility),\n/* harmony export */ \"initialize\": () => (/* binding */ initialize)\n/* harmony export */ });\n/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../config */ \"./src/javascripts/domains/config/index.js\");\n/* harmony import */ var _app_selectors__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../app/selectors */ \"./src/javascripts/domains/app/selectors.js\");\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./constants */ \"./src/javascripts/domains/visibility/constants.js\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utils */ \"./src/javascripts/domains/visibility/utils.js\");\n/* harmony import */ var _selectors__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./selectors */ \"./src/javascripts/domains/visibility/selectors.js\");\n/* harmony import */ var _ui_hooks_seamly_state_hooks__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../ui/hooks/seamly-state-hooks */ \"./src/javascripts/ui/hooks/seamly-state-hooks.js\");\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n\n\n\n\n\n\nconst setFromStorage = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.createAction)('setFromStorage', visibility => ({\n visibility\n}));\nconst validVisibilityStates = [_constants__WEBPACK_IMPORTED_MODULE_2__.visibilityStates.open, _constants__WEBPACK_IMPORTED_MODULE_2__.visibilityStates.minimized, _constants__WEBPACK_IMPORTED_MODULE_2__.visibilityStates.hidden];\nconst setVisibility = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.createThunk)('set', (requestedVisibility, {\n getState,\n extra: {\n api,\n eventBus\n }\n}) => {\n const state = getState();\n const previousVisibility = _selectors__WEBPACK_IMPORTED_MODULE_4__.selectVisibility(state);\n const hasResponded = _app_selectors__WEBPACK_IMPORTED_MODULE_1__.selectUserHasResponded(state);\n const hasConversation = api.hasConversation();\n const config = _config__WEBPACK_IMPORTED_MODULE_0__.Selectors.selectConfig(state);\n const {\n visibilityCallback = _utils__WEBPACK_IMPORTED_MODULE_3__.calculateVisibility,\n layoutMode\n } = config;\n const {\n unreadEvents: unreadMessageCount\n } = (0,_ui_hooks_seamly_state_hooks__WEBPACK_IMPORTED_MODULE_5__.selectState)(state);\n const calculatedVisibility = visibilityCallback({\n hasConversation,\n hasResponded,\n previousVisibility,\n requestedVisibility,\n config\n });\n\n if (!validVisibilityStates.includes(calculatedVisibility)) {\n console.error('The visibilityCallback function should return \"open\", \"minimized\" or \"hidden\".');\n return undefined;\n }\n\n if (previousVisibility === calculatedVisibility) {\n return undefined;\n } // Store the user-requested visibility in order to reinitialize after refresh\n\n\n api.store.set(_constants__WEBPACK_IMPORTED_MODULE_2__.StoreKey, _objectSpread(_objectSpread({}, api.store.get(_constants__WEBPACK_IMPORTED_MODULE_2__.StoreKey) || {}), {}, {\n [layoutMode]: requestedVisibility\n }));\n\n if (requestedVisibility) {\n eventBus.emit('ui.visible', requestedVisibility, {\n visibility: requestedVisibility,\n hasConversation,\n hasResponded,\n unreadMessageCount\n });\n }\n\n return calculatedVisibility;\n});\nconst initialize = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.createThunk)('initialize', async (locale, {\n dispatch,\n getState,\n extra: {\n api\n }\n}) => {\n var _api$store$get;\n\n // initialize stored visibility\n const {\n layoutMode\n } = _config__WEBPACK_IMPORTED_MODULE_0__.Selectors.selectConfig(getState());\n const storedVisibility = (_api$store$get = api.store.get(_constants__WEBPACK_IMPORTED_MODULE_2__.StoreKey)) === null || _api$store$get === void 0 ? void 0 : _api$store$get[layoutMode];\n\n if (storedVisibility) {\n dispatch(setFromStorage(storedVisibility));\n }\n\n dispatch(setVisibility(_constants__WEBPACK_IMPORTED_MODULE_2__.visibilityStates.initialize));\n});\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/domains/visibility/actions.js?");
896
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"setFromStorage\": () => (/* binding */ setFromStorage),\n/* harmony export */ \"setVisibility\": () => (/* binding */ setVisibility),\n/* harmony export */ \"initialize\": () => (/* binding */ initialize)\n/* harmony export */ });\n/* harmony import */ var _config_selectors__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../config/selectors */ \"./src/javascripts/domains/config/selectors.js\");\n/* harmony import */ var _app_selectors__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../app/selectors */ \"./src/javascripts/domains/app/selectors.js\");\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./constants */ \"./src/javascripts/domains/visibility/constants.js\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utils */ \"./src/javascripts/domains/visibility/utils.js\");\n/* harmony import */ var _selectors__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./selectors */ \"./src/javascripts/domains/visibility/selectors.js\");\n/* harmony import */ var _ui_hooks_seamly_state_hooks__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../ui/hooks/seamly-state-hooks */ \"./src/javascripts/ui/hooks/seamly-state-hooks.js\");\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n\n\n\n\n\n\nconst setFromStorage = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.createAction)('setFromStorage', visibility => ({\n visibility\n}));\nconst validVisibilityStates = [_constants__WEBPACK_IMPORTED_MODULE_2__.visibilityStates.open, _constants__WEBPACK_IMPORTED_MODULE_2__.visibilityStates.minimized, _constants__WEBPACK_IMPORTED_MODULE_2__.visibilityStates.hidden];\nconst setVisibility = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.createThunk)('set', (requestedVisibility, {\n getState,\n extra: {\n api,\n eventBus\n }\n}) => {\n const state = getState();\n const previousVisibility = _selectors__WEBPACK_IMPORTED_MODULE_4__.selectVisibility(state);\n const hasResponded = _app_selectors__WEBPACK_IMPORTED_MODULE_1__.selectUserHasResponded(state);\n const hasConversation = api.hasConversation();\n const config = _config_selectors__WEBPACK_IMPORTED_MODULE_0__.selectConfig(state);\n const {\n visibilityCallback = _utils__WEBPACK_IMPORTED_MODULE_3__.calculateVisibility,\n layoutMode\n } = config;\n const {\n unreadEvents: unreadMessageCount\n } = (0,_ui_hooks_seamly_state_hooks__WEBPACK_IMPORTED_MODULE_5__.selectState)(state);\n const calculatedVisibility = visibilityCallback({\n hasConversation,\n hasResponded,\n previousVisibility,\n requestedVisibility,\n config\n });\n\n if (!validVisibilityStates.includes(calculatedVisibility)) {\n console.error('The visibilityCallback function should return \"open\", \"minimized\" or \"hidden\".');\n return undefined;\n }\n\n if (previousVisibility === calculatedVisibility) {\n return undefined;\n } // Store the user-requested visibility in order to reinitialize after refresh\n\n\n api.store.set(_constants__WEBPACK_IMPORTED_MODULE_2__.StoreKey, _objectSpread(_objectSpread({}, api.store.get(_constants__WEBPACK_IMPORTED_MODULE_2__.StoreKey) || {}), {}, {\n [layoutMode]: requestedVisibility\n }));\n\n if (requestedVisibility) {\n eventBus.emit('ui.visible', requestedVisibility, {\n visibility: requestedVisibility,\n hasConversation,\n hasResponded,\n unreadMessageCount\n });\n }\n\n return calculatedVisibility;\n});\nconst initialize = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.createThunk)('initialize', async (locale, {\n dispatch,\n getState,\n extra: {\n api\n }\n}) => {\n var _api$store$get;\n\n // initialize stored visibility\n const {\n layoutMode\n } = _config_selectors__WEBPACK_IMPORTED_MODULE_0__.selectConfig(getState());\n const storedVisibility = (_api$store$get = api.store.get(_constants__WEBPACK_IMPORTED_MODULE_2__.StoreKey)) === null || _api$store$get === void 0 ? void 0 : _api$store$get[layoutMode];\n\n if (storedVisibility) {\n dispatch(setFromStorage(storedVisibility));\n }\n\n dispatch(setVisibility(_constants__WEBPACK_IMPORTED_MODULE_2__.visibilityStates.initialize));\n});\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/domains/visibility/actions.js?");
897
897
 
898
898
  /***/ }),
899
899
 
@@ -915,7 +915,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
915
915
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
916
916
 
917
917
  "use strict";
918
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"useVisibility\": () => (/* binding */ useVisibility)\n/* harmony export */ });\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact/hooks */ \"preact/hooks\");\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(preact_hooks__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../config */ \"./src/javascripts/domains/config/index.js\");\n/* harmony import */ var _redux__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../redux */ \"./src/javascripts/domains/redux/index.js\");\n/* harmony import */ var _actions__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./actions */ \"./src/javascripts/domains/visibility/actions.js\");\n/* harmony import */ var _selectors__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./selectors */ \"./src/javascripts/domains/visibility/selectors.js\");\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./constants */ \"./src/javascripts/domains/visibility/constants.js\");\n\n\n\n\n\n\nconst useVisibility = () => {\n const dispatch = (0,_redux__WEBPACK_IMPORTED_MODULE_2__.useStoreDispatch)();\n const visible = (0,_redux__WEBPACK_IMPORTED_MODULE_2__.useSelector)(_selectors__WEBPACK_IMPORTED_MODULE_4__.selectVisibility);\n const isVisible = visible ? visible !== _constants__WEBPACK_IMPORTED_MODULE_5__.visibilityStates.hidden : false;\n const {\n layoutMode\n } = (0,_config__WEBPACK_IMPORTED_MODULE_1__.useConfig)();\n const isOpen = visible && layoutMode ? visible === _constants__WEBPACK_IMPORTED_MODULE_5__.visibilityStates.open || layoutMode === 'inline' && visible !== _constants__WEBPACK_IMPORTED_MODULE_5__.visibilityStates.hidden : false;\n const setVisibility = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)(visibility => dispatch(_actions__WEBPACK_IMPORTED_MODULE_3__.setVisibility(visibility)), [dispatch]);\n return {\n isVisible,\n isOpen,\n visible,\n setVisibility\n };\n};\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/domains/visibility/hooks.js?");
918
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"useVisibility\": () => (/* binding */ useVisibility)\n/* harmony export */ });\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact/hooks */ \"preact/hooks\");\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(preact_hooks__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../redux */ \"./src/javascripts/domains/redux/index.js\");\n/* harmony import */ var _actions__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./actions */ \"./src/javascripts/domains/visibility/actions.js\");\n/* harmony import */ var _selectors__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./selectors */ \"./src/javascripts/domains/visibility/selectors.js\");\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./constants */ \"./src/javascripts/domains/visibility/constants.js\");\n\n\n\n\n\nconst useVisibility = () => {\n const dispatch = (0,_redux__WEBPACK_IMPORTED_MODULE_1__.useStoreDispatch)();\n const visible = (0,_redux__WEBPACK_IMPORTED_MODULE_1__.useSelector)(_selectors__WEBPACK_IMPORTED_MODULE_3__.selectVisibility);\n const isVisible = visible ? visible !== _constants__WEBPACK_IMPORTED_MODULE_4__.visibilityStates.hidden : false;\n const isOpen = visible === _constants__WEBPACK_IMPORTED_MODULE_4__.visibilityStates.open;\n const isMinimized = visible === _constants__WEBPACK_IMPORTED_MODULE_4__.visibilityStates.minimized;\n const setVisibility = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)(visibility => dispatch(_actions__WEBPACK_IMPORTED_MODULE_2__.setVisibility(visibility)), [dispatch]);\n return {\n isVisible,\n isOpen,\n isMinimized,\n visible,\n setVisibility\n };\n};\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/domains/visibility/hooks.js?");
919
919
 
920
920
  /***/ }),
921
921
 
@@ -959,7 +959,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
959
959
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
960
960
 
961
961
  "use strict";
962
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"createAction\": () => (/* binding */ createAction),\n/* harmony export */ \"createActions\": () => (/* binding */ createActions),\n/* harmony export */ \"createThunk\": () => (/* binding */ createThunk),\n/* harmony export */ \"createReducer\": () => (/* binding */ createReducer),\n/* harmony export */ \"selectState\": () => (/* binding */ selectState),\n/* harmony export */ \"calculateVisibility\": () => (/* binding */ calculateVisibility)\n/* harmony export */ });\n/* harmony import */ var _lib_redux_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../lib/redux-helpers */ \"./src/javascripts/lib/redux-helpers/index.js\");\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./constants */ \"./src/javascripts/domains/visibility/constants.js\");\n\n\nconst {\n createAction,\n createActions,\n createThunk,\n createReducer,\n selectState\n} = (0,_lib_redux_helpers__WEBPACK_IMPORTED_MODULE_0__.createDomain)('visibility');\nconst calculateVisibility = ({\n hasResponded,\n previousVisibility,\n requestedVisibility,\n config\n}) => {\n const {\n defaults,\n layoutMode,\n hideOnNoUserResponse\n } = config;\n const {\n visible: defaultVisibility\n } = defaults || {}; // Requesting open should override the responded check.\n\n if (layoutMode === 'window' && hideOnNoUserResponse && requestedVisibility !== _constants__WEBPACK_IMPORTED_MODULE_1__.visibilityStates.open) {\n return hasResponded ? requestedVisibility || previousVisibility || _constants__WEBPACK_IMPORTED_MODULE_1__.visibilityStates.open : _constants__WEBPACK_IMPORTED_MODULE_1__.visibilityStates.hidden;\n }\n\n const baseVisibility = layoutMode === 'inline' ? _constants__WEBPACK_IMPORTED_MODULE_1__.visibilityStates.open : _constants__WEBPACK_IMPORTED_MODULE_1__.visibilityStates.minimized;\n return requestedVisibility || previousVisibility || defaultVisibility || baseVisibility;\n};\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/domains/visibility/utils.js?");
962
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"createAction\": () => (/* binding */ createAction),\n/* harmony export */ \"createActions\": () => (/* binding */ createActions),\n/* harmony export */ \"createThunk\": () => (/* binding */ createThunk),\n/* harmony export */ \"createReducer\": () => (/* binding */ createReducer),\n/* harmony export */ \"selectState\": () => (/* binding */ selectState),\n/* harmony export */ \"calculateVisibility\": () => (/* binding */ calculateVisibility)\n/* harmony export */ });\n/* harmony import */ var _lib_redux_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../lib/redux-helpers */ \"./src/javascripts/lib/redux-helpers/index.js\");\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./constants */ \"./src/javascripts/domains/visibility/constants.js\");\n\n\nconst {\n createAction,\n createActions,\n createThunk,\n createReducer,\n selectState\n} = (0,_lib_redux_helpers__WEBPACK_IMPORTED_MODULE_0__.createDomain)('visibility');\nconst calculateVisibility = ({\n hasResponded,\n previousVisibility,\n requestedVisibility,\n config\n}) => {\n const {\n defaults,\n layoutMode,\n hideOnNoUserResponse\n } = config;\n const {\n visible: defaultVisibility\n } = defaults || {}; // Requesting open should override the responded check.\n\n if (layoutMode === 'window' && hideOnNoUserResponse && requestedVisibility !== _constants__WEBPACK_IMPORTED_MODULE_1__.visibilityStates.open) {\n return hasResponded ? requestedVisibility || previousVisibility || _constants__WEBPACK_IMPORTED_MODULE_1__.visibilityStates.open : _constants__WEBPACK_IMPORTED_MODULE_1__.visibilityStates.hidden;\n }\n\n const baseVisibility = _constants__WEBPACK_IMPORTED_MODULE_1__.visibilityStates.minimized;\n return requestedVisibility || previousVisibility || defaultVisibility || baseVisibility;\n};\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/domains/visibility/utils.js?");
963
963
 
964
964
  /***/ }),
965
965
 
@@ -970,7 +970,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
970
970
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
971
971
 
972
972
  "use strict";
973
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"AgentInfo\": () => (/* reexport safe */ _ui_components_layout_agent_info__WEBPACK_IMPORTED_MODULE_2__[\"default\"]),\n/* harmony export */ \"AppFrame\": () => (/* reexport safe */ _ui_components_layout_app_frame__WEBPACK_IMPORTED_MODULE_3__[\"default\"]),\n/* harmony export */ \"calculateVisibility\": () => (/* reexport safe */ _domains_visibility__WEBPACK_IMPORTED_MODULE_4__.calculateVisibility),\n/* harmony export */ \"ChatFrame\": () => (/* reexport safe */ _ui_components_layout_chat_frame__WEBPACK_IMPORTED_MODULE_5__[\"default\"]),\n/* harmony export */ \"className\": () => (/* reexport safe */ _lib_css__WEBPACK_IMPORTED_MODULE_6__.className),\n/* harmony export */ \"Conversation\": () => (/* reexport safe */ _ui_components_conversation_conversation__WEBPACK_IMPORTED_MODULE_7__[\"default\"]),\n/* harmony export */ \"createReduxStore\": () => (/* reexport safe */ _domains_redux__WEBPACK_IMPORTED_MODULE_8__.createReduxStore),\n/* harmony export */ \"Engine\": () => (/* reexport safe */ _lib_engine__WEBPACK_IMPORTED_MODULE_9__[\"default\"]),\n/* harmony export */ \"EntryContainer\": () => (/* reexport safe */ _ui_components_entry_entry_container__WEBPACK_IMPORTED_MODULE_10__[\"default\"]),\n/* harmony export */ \"EventParticipant\": () => (/* reexport safe */ _ui_components_conversation_event_event_participant__WEBPACK_IMPORTED_MODULE_11__[\"default\"]),\n/* harmony export */ \"eventTypes\": () => (/* reexport safe */ _ui_utils_seamly_utils__WEBPACK_IMPORTED_MODULE_12__.eventTypes),\n/* harmony export */ \"ExternalApi\": () => (/* reexport safe */ _lib_external_api__WEBPACK_IMPORTED_MODULE_13__[\"default\"]),\n/* harmony export */ \"getUrlParams\": () => (/* reexport safe */ _ui_utils_general_utils__WEBPACK_IMPORTED_MODULE_14__.getUrlParams),\n/* harmony export */ \"getUrlSearchString\": () => (/* reexport safe */ _ui_utils_general_utils__WEBPACK_IMPORTED_MODULE_14__.getUrlSearchString),\n/* harmony export */ \"Header\": () => (/* reexport safe */ _ui_components_layout_header__WEBPACK_IMPORTED_MODULE_15__[\"default\"]),\n/* harmony export */ \"Icon\": () => (/* reexport safe */ _ui_components_layout_icon__WEBPACK_IMPORTED_MODULE_16__[\"default\"]),\n/* harmony export */ \"Interrupt\": () => (/* reexport safe */ _ui_components_layout_interrupt__WEBPACK_IMPORTED_MODULE_17__[\"default\"]),\n/* harmony export */ \"MessageContainer\": () => (/* reexport safe */ _ui_components_conversation_message_container__WEBPACK_IMPORTED_MODULE_18__[\"default\"]),\n/* harmony export */ \"randomId\": () => (/* reexport safe */ _lib_id__WEBPACK_IMPORTED_MODULE_19__.randomId),\n/* harmony export */ \"seamlyActions\": () => (/* reexport safe */ _ui_utils_seamly_utils__WEBPACK_IMPORTED_MODULE_12__.seamlyActions),\n/* harmony export */ \"SeamlyApiContext\": () => (/* reexport safe */ _ui_components_core_seamly_api_context__WEBPACK_IMPORTED_MODULE_20__.SeamlyApiContext),\n/* harmony export */ \"SeamlyEventBusContext\": () => (/* reexport safe */ _ui_components_core_seamly_api_context__WEBPACK_IMPORTED_MODULE_20__.SeamlyEventBusContext),\n/* harmony export */ \"SeamlyLiveRegionContext\": () => (/* reexport safe */ _ui_components_core_seamly_live_region_context__WEBPACK_IMPORTED_MODULE_21__.SeamlyLiveRegionContext),\n/* harmony export */ \"StoreProvider\": () => (/* reexport safe */ _domains_redux__WEBPACK_IMPORTED_MODULE_8__.StoreProvider),\n/* harmony export */ \"useChoicePrompt\": () => (/* reexport safe */ _ui_components_conversation_event_choice_prompt__WEBPACK_IMPORTED_MODULE_22__.useChoicePrompt),\n/* harmony export */ \"useDispatch\": () => (/* reexport safe */ _ui_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_23__.useSeamlyDispatchContext),\n/* harmony export */ \"useSeamlyChat\": () => (/* reexport safe */ _ui_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_23__.useSeamlyChat),\n/* harmony export */ \"useSeamlyCommands\": () => (/* reexport safe */ _ui_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_23__.useSeamlyCommands),\n/* harmony export */ \"useSeamlyConfig\": () => (/* reexport safe */ _domains_config__WEBPACK_IMPORTED_MODULE_24__.useConfig),\n/* harmony export */ \"useEvents\": () => (/* reexport safe */ _ui_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_23__.useEvents),\n/* harmony export */ \"useGeneratedId\": () => (/* reexport safe */ _ui_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_23__.useGeneratedId),\n/* harmony export */ \"useI18n\": () => (/* reexport safe */ _domains_i18n__WEBPACK_IMPORTED_MODULE_25__.useI18n),\n/* harmony export */ \"useSeamlyEventStream\": () => (/* reexport safe */ _ui_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_23__.useSeamlyEventStream),\n/* harmony export */ \"useSeamlyIdleDetachCountdown\": () => (/* reexport safe */ _ui_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_23__.useSeamlyIdleDetachCountdown),\n/* harmony export */ \"useSeamlyMessageContainerClassNames\": () => (/* reexport safe */ _ui_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_23__.useSeamlyMessageContainerClassNames),\n/* harmony export */ \"useSeamlyOptions\": () => (/* reexport safe */ _ui_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_23__.useSeamlyOptions),\n/* harmony export */ \"useSeamlyVisibility\": () => (/* reexport safe */ _domains_visibility__WEBPACK_IMPORTED_MODULE_4__.useVisibility),\n/* harmony export */ \"useTranslations\": () => (/* reexport safe */ _domains_translations__WEBPACK_IMPORTED_MODULE_26__.useTranslations),\n/* harmony export */ \"useTranslatedEventData\": () => (/* reexport safe */ _domains_translations__WEBPACK_IMPORTED_MODULE_26__.useTranslatedEventData),\n/* harmony export */ \"useTranslationsContainer\": () => (/* reexport safe */ _domains_translations__WEBPACK_IMPORTED_MODULE_26__.useTranslationsContainer),\n/* harmony export */ \"Text\": () => (/* reexport safe */ _ui_components_conversation_event_text__WEBPACK_IMPORTED_MODULE_27__[\"default\"]),\n/* harmony export */ \"ToggleButton\": () => (/* reexport safe */ _ui_components_entry_toggle_button__WEBPACK_IMPORTED_MODULE_28__[\"default\"]),\n/* harmony export */ \"View\": () => (/* reexport safe */ _ui_components_layout_view__WEBPACK_IMPORTED_MODULE_29__[\"default\"]),\n/* harmony export */ \"visibilityStates\": () => (/* reexport safe */ _domains_visibility__WEBPACK_IMPORTED_MODULE_4__.visibilityStates),\n/* harmony export */ \"API\": () => (/* reexport safe */ _api__WEBPACK_IMPORTED_MODULE_30__.API),\n/* harmony export */ \"SeamlyGeneralError\": () => (/* reexport safe */ _api_errors_seamly_general_error__WEBPACK_IMPORTED_MODULE_31__[\"default\"]),\n/* harmony export */ \"SeamlyOfflineError\": () => (/* reexport safe */ _api_errors_seamly_offline_error__WEBPACK_IMPORTED_MODULE_32__[\"default\"])\n/* harmony export */ });\n/* harmony import */ var _lib_preact_debug__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./lib/preact-debug */ \"./src/javascripts/lib/preact-debug.js\");\n/* harmony import */ var _lib_preact_debug__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_lib_preact_debug__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _lib_external_api_initialize_api__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./lib/external-api/initialize-api */ \"./src/javascripts/lib/external-api/initialize-api.js\");\n/* harmony import */ var _ui_components_layout_agent_info__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./ui/components/layout/agent-info */ \"./src/javascripts/ui/components/layout/agent-info.js\");\n/* harmony import */ var _ui_components_layout_app_frame__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./ui/components/layout/app-frame */ \"./src/javascripts/ui/components/layout/app-frame.js\");\n/* harmony import */ var _domains_visibility__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./domains/visibility */ \"./src/javascripts/domains/visibility/index.js\");\n/* harmony import */ var _ui_components_layout_chat_frame__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./ui/components/layout/chat-frame */ \"./src/javascripts/ui/components/layout/chat-frame.js\");\n/* harmony import */ var _lib_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./lib/css */ \"./src/javascripts/lib/css.js\");\n/* harmony import */ var _ui_components_conversation_conversation__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./ui/components/conversation/conversation */ \"./src/javascripts/ui/components/conversation/conversation.js\");\n/* harmony import */ var _domains_redux__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./domains/redux */ \"./src/javascripts/domains/redux/index.js\");\n/* harmony import */ var _lib_engine__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./lib/engine */ \"./src/javascripts/lib/engine/index.js\");\n/* harmony import */ var _ui_components_entry_entry_container__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./ui/components/entry/entry-container */ \"./src/javascripts/ui/components/entry/entry-container.js\");\n/* harmony import */ var _ui_components_conversation_event_event_participant__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./ui/components/conversation/event/event-participant */ \"./src/javascripts/ui/components/conversation/event/event-participant.js\");\n/* harmony import */ var _ui_utils_seamly_utils__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./ui/utils/seamly-utils */ \"./src/javascripts/ui/utils/seamly-utils.js\");\n/* harmony import */ var _lib_external_api__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./lib/external-api */ \"./src/javascripts/lib/external-api/index.js\");\n/* harmony import */ var _ui_utils_general_utils__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./ui/utils/general-utils */ \"./src/javascripts/ui/utils/general-utils.js\");\n/* harmony import */ var _ui_components_layout_header__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./ui/components/layout/header */ \"./src/javascripts/ui/components/layout/header.js\");\n/* harmony import */ var _ui_components_layout_icon__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./ui/components/layout/icon */ \"./src/javascripts/ui/components/layout/icon.js\");\n/* harmony import */ var _ui_components_layout_interrupt__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./ui/components/layout/interrupt */ \"./src/javascripts/ui/components/layout/interrupt.js\");\n/* harmony import */ var _ui_components_conversation_message_container__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./ui/components/conversation/message-container */ \"./src/javascripts/ui/components/conversation/message-container.js\");\n/* harmony import */ var _lib_id__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./lib/id */ \"./src/javascripts/lib/id.js\");\n/* harmony import */ var _ui_components_core_seamly_api_context__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./ui/components/core/seamly-api-context */ \"./src/javascripts/ui/components/core/seamly-api-context.js\");\n/* harmony import */ var _ui_components_core_seamly_live_region_context__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./ui/components/core/seamly-live-region-context */ \"./src/javascripts/ui/components/core/seamly-live-region-context.js\");\n/* harmony import */ var _ui_components_conversation_event_choice_prompt__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./ui/components/conversation/event/choice-prompt */ \"./src/javascripts/ui/components/conversation/event/choice-prompt.js\");\n/* harmony import */ var _ui_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./ui/hooks/seamly-hooks */ \"./src/javascripts/ui/hooks/seamly-hooks.js\");\n/* harmony import */ var _domains_config__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./domains/config */ \"./src/javascripts/domains/config/index.js\");\n/* harmony import */ var _domains_i18n__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./domains/i18n */ \"./src/javascripts/domains/i18n/index.js\");\n/* harmony import */ var _domains_translations__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./domains/translations */ \"./src/javascripts/domains/translations/index.js\");\n/* harmony import */ var _ui_components_conversation_event_text__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./ui/components/conversation/event/text */ \"./src/javascripts/ui/components/conversation/event/text.js\");\n/* harmony import */ var _ui_components_entry_toggle_button__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./ui/components/entry/toggle-button */ \"./src/javascripts/ui/components/entry/toggle-button.js\");\n/* harmony import */ var _ui_components_layout_view__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./ui/components/layout/view */ \"./src/javascripts/ui/components/layout/view.js\");\n/* harmony import */ var _api__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./api */ \"./src/javascripts/api/index.js\");\n/* harmony import */ var _api_errors_seamly_general_error__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./api/errors/seamly-general-error */ \"./src/javascripts/api/errors/seamly-general-error.js\");\n/* harmony import */ var _api_errors_seamly_offline_error__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./api/errors/seamly-offline-error */ \"./src/javascripts/api/errors/seamly-offline-error.js\");\n // eslint-disable-line\n// Used by: Client\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_lib_external_api_initialize_api__WEBPACK_IMPORTED_MODULE_1__[\"default\"]); // Used by: Client\n\n // Used by: Client\n\n // Used by: Client\n\n // Used by: Client\n\n // Used by: Client\n\n // Used by: Client\n\n // Used by: StyleGuide\n\n // Used by: StyleGuide\n\n // Used by: Client\n\n // Used by: Demo\n\n // Used by: Client\n\n // Used by: StyleGuide\n\n // Used by: StyleGuide\n\n // Used by: StyleGuide\n\n // Used by: Client\n\n // Used by: Client\n\n // Used by: Client\n\n // Used by: Client\n\n // Used by: StyleGuide\n\n // Used by: Client\n\n // Used by: StyleGuide\n\n // Used by: StyleGuide\n\n // Used by: StyleGuide\n\n // Used by: StyleGuide\n\n // Used by: Client\n\n // Used by: Client\n\n // Used by: Client\n\n // Used by: Client\n\n // Used by: Client\n\n // Used by: Client\n\n // Used by: Client\n\n // Used by: Client\n\n // Used by: Client\n\n // Used by: Client\n\n // Used by: Client\n\n // Used by: Client\n\n // Used by: Client\n\n // Used by: Client\n\n // Used by: Client\n\n // Used by: Client\n\n // Used by: Client\n// Used by: StyleGuide\n\n // Used by: Client\n// Used by: StyleGuide\n\n // Used by: StyleGuide\n\n // Used by: StyleGuide\n\n // Used by: StyleGuide\n\n\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/index.js?");
973
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"AgentInfo\": () => (/* reexport safe */ _ui_components_layout_agent_info__WEBPACK_IMPORTED_MODULE_2__[\"default\"]),\n/* harmony export */ \"AppFrame\": () => (/* reexport safe */ _ui_components_layout_app_frame__WEBPACK_IMPORTED_MODULE_3__[\"default\"]),\n/* harmony export */ \"calculateVisibility\": () => (/* reexport safe */ _domains_visibility__WEBPACK_IMPORTED_MODULE_4__.calculateVisibility),\n/* harmony export */ \"ChatFrame\": () => (/* reexport safe */ _ui_components_layout_chat_frame__WEBPACK_IMPORTED_MODULE_5__[\"default\"]),\n/* harmony export */ \"className\": () => (/* reexport safe */ _lib_css__WEBPACK_IMPORTED_MODULE_6__.className),\n/* harmony export */ \"Conversation\": () => (/* reexport safe */ _ui_components_conversation_conversation__WEBPACK_IMPORTED_MODULE_7__[\"default\"]),\n/* harmony export */ \"createReduxStore\": () => (/* reexport safe */ _domains_redux__WEBPACK_IMPORTED_MODULE_8__.createReduxStore),\n/* harmony export */ \"Engine\": () => (/* reexport safe */ _lib_engine__WEBPACK_IMPORTED_MODULE_9__[\"default\"]),\n/* harmony export */ \"EntryContainer\": () => (/* reexport safe */ _ui_components_entry_entry_container__WEBPACK_IMPORTED_MODULE_10__[\"default\"]),\n/* harmony export */ \"EventParticipant\": () => (/* reexport safe */ _ui_components_conversation_event_event_participant__WEBPACK_IMPORTED_MODULE_11__[\"default\"]),\n/* harmony export */ \"eventTypes\": () => (/* reexport safe */ _ui_utils_seamly_utils__WEBPACK_IMPORTED_MODULE_12__.eventTypes),\n/* harmony export */ \"ExternalApi\": () => (/* reexport safe */ _lib_external_api__WEBPACK_IMPORTED_MODULE_13__[\"default\"]),\n/* harmony export */ \"getUrlParams\": () => (/* reexport safe */ _ui_utils_general_utils__WEBPACK_IMPORTED_MODULE_14__.getUrlParams),\n/* harmony export */ \"getUrlSearchString\": () => (/* reexport safe */ _ui_utils_general_utils__WEBPACK_IMPORTED_MODULE_14__.getUrlSearchString),\n/* harmony export */ \"Header\": () => (/* reexport safe */ _ui_components_layout_header__WEBPACK_IMPORTED_MODULE_15__[\"default\"]),\n/* harmony export */ \"Icon\": () => (/* reexport safe */ _ui_components_layout_icon__WEBPACK_IMPORTED_MODULE_16__[\"default\"]),\n/* harmony export */ \"Interrupt\": () => (/* reexport safe */ _ui_components_layout_interrupt__WEBPACK_IMPORTED_MODULE_17__[\"default\"]),\n/* harmony export */ \"MessageContainer\": () => (/* reexport safe */ _ui_components_conversation_message_container__WEBPACK_IMPORTED_MODULE_18__[\"default\"]),\n/* harmony export */ \"randomId\": () => (/* reexport safe */ _lib_id__WEBPACK_IMPORTED_MODULE_19__.randomId),\n/* harmony export */ \"seamlyActions\": () => (/* reexport safe */ _ui_utils_seamly_utils__WEBPACK_IMPORTED_MODULE_12__.seamlyActions),\n/* harmony export */ \"SeamlyApiContext\": () => (/* reexport safe */ _ui_components_core_seamly_api_context__WEBPACK_IMPORTED_MODULE_20__.SeamlyApiContext),\n/* harmony export */ \"SeamlyEventBusContext\": () => (/* reexport safe */ _ui_components_core_seamly_api_context__WEBPACK_IMPORTED_MODULE_20__.SeamlyEventBusContext),\n/* harmony export */ \"SeamlyLiveRegionContext\": () => (/* reexport safe */ _ui_components_core_seamly_live_region_context__WEBPACK_IMPORTED_MODULE_21__.SeamlyLiveRegionContext),\n/* harmony export */ \"StoreProvider\": () => (/* reexport safe */ _domains_redux__WEBPACK_IMPORTED_MODULE_8__.StoreProvider),\n/* harmony export */ \"useChoicePrompt\": () => (/* reexport safe */ _ui_components_conversation_event_choice_prompt__WEBPACK_IMPORTED_MODULE_22__.useChoicePrompt),\n/* harmony export */ \"useDispatch\": () => (/* reexport safe */ _ui_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_23__.useSeamlyDispatchContext),\n/* harmony export */ \"useSeamlyChat\": () => (/* reexport safe */ _ui_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_23__.useSeamlyChat),\n/* harmony export */ \"useSeamlyCommands\": () => (/* reexport safe */ _ui_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_23__.useSeamlyCommands),\n/* harmony export */ \"useSeamlyConfig\": () => (/* reexport safe */ _domains_config__WEBPACK_IMPORTED_MODULE_24__.useConfig),\n/* harmony export */ \"useEvents\": () => (/* reexport safe */ _ui_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_23__.useEvents),\n/* harmony export */ \"useGeneratedId\": () => (/* reexport safe */ _ui_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_23__.useGeneratedId),\n/* harmony export */ \"useI18n\": () => (/* reexport safe */ _domains_i18n__WEBPACK_IMPORTED_MODULE_25__.useI18n),\n/* harmony export */ \"useSeamlyEventStream\": () => (/* reexport safe */ _ui_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_23__.useSeamlyEventStream),\n/* harmony export */ \"useSeamlyIdleDetachCountdown\": () => (/* reexport safe */ _ui_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_23__.useSeamlyIdleDetachCountdown),\n/* harmony export */ \"useSeamlyMessageContainerClassNames\": () => (/* reexport safe */ _ui_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_23__.useSeamlyMessageContainerClassNames),\n/* harmony export */ \"useSeamlyOptions\": () => (/* reexport safe */ _ui_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_23__.useSeamlyOptions),\n/* harmony export */ \"useSeamlyVisibility\": () => (/* reexport safe */ _domains_visibility__WEBPACK_IMPORTED_MODULE_4__.useVisibility),\n/* harmony export */ \"useTranslations\": () => (/* reexport safe */ _domains_translations__WEBPACK_IMPORTED_MODULE_26__.useTranslations),\n/* harmony export */ \"useTranslatedEventData\": () => (/* reexport safe */ _domains_translations__WEBPACK_IMPORTED_MODULE_26__.useTranslatedEventData),\n/* harmony export */ \"useTranslationsContainer\": () => (/* reexport safe */ _domains_translations__WEBPACK_IMPORTED_MODULE_26__.useTranslationsContainer),\n/* harmony export */ \"Text\": () => (/* reexport safe */ _ui_components_conversation_event_text__WEBPACK_IMPORTED_MODULE_27__[\"default\"]),\n/* harmony export */ \"DeprecatedToggleButton\": () => (/* reexport safe */ _ui_components_entry_toggle_button__WEBPACK_IMPORTED_MODULE_28__[\"default\"]),\n/* harmony export */ \"View\": () => (/* reexport safe */ _ui_components_view__WEBPACK_IMPORTED_MODULE_29__[\"default\"]),\n/* harmony export */ \"DeprecatedView\": () => (/* reexport safe */ _ui_components_view_deprecated_view__WEBPACK_IMPORTED_MODULE_30__[\"default\"]),\n/* harmony export */ \"visibilityStates\": () => (/* reexport safe */ _domains_visibility__WEBPACK_IMPORTED_MODULE_4__.visibilityStates),\n/* harmony export */ \"API\": () => (/* reexport safe */ _api__WEBPACK_IMPORTED_MODULE_31__.API),\n/* harmony export */ \"SeamlyGeneralError\": () => (/* reexport safe */ _api_errors_seamly_general_error__WEBPACK_IMPORTED_MODULE_32__[\"default\"]),\n/* harmony export */ \"SeamlyOfflineError\": () => (/* reexport safe */ _api_errors_seamly_offline_error__WEBPACK_IMPORTED_MODULE_33__[\"default\"])\n/* harmony export */ });\n/* harmony import */ var _lib_preact_debug__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./lib/preact-debug */ \"./src/javascripts/lib/preact-debug.js\");\n/* harmony import */ var _lib_preact_debug__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_lib_preact_debug__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _lib_external_api_initialize_api__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./lib/external-api/initialize-api */ \"./src/javascripts/lib/external-api/initialize-api.js\");\n/* harmony import */ var _ui_components_layout_agent_info__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./ui/components/layout/agent-info */ \"./src/javascripts/ui/components/layout/agent-info.js\");\n/* harmony import */ var _ui_components_layout_app_frame__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./ui/components/layout/app-frame */ \"./src/javascripts/ui/components/layout/app-frame.js\");\n/* harmony import */ var _domains_visibility__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./domains/visibility */ \"./src/javascripts/domains/visibility/index.js\");\n/* harmony import */ var _ui_components_layout_chat_frame__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./ui/components/layout/chat-frame */ \"./src/javascripts/ui/components/layout/chat-frame.js\");\n/* harmony import */ var _lib_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./lib/css */ \"./src/javascripts/lib/css.js\");\n/* harmony import */ var _ui_components_conversation_conversation__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./ui/components/conversation/conversation */ \"./src/javascripts/ui/components/conversation/conversation.js\");\n/* harmony import */ var _domains_redux__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./domains/redux */ \"./src/javascripts/domains/redux/index.js\");\n/* harmony import */ var _lib_engine__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./lib/engine */ \"./src/javascripts/lib/engine/index.js\");\n/* harmony import */ var _ui_components_entry_entry_container__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./ui/components/entry/entry-container */ \"./src/javascripts/ui/components/entry/entry-container.js\");\n/* harmony import */ var _ui_components_conversation_event_event_participant__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./ui/components/conversation/event/event-participant */ \"./src/javascripts/ui/components/conversation/event/event-participant.js\");\n/* harmony import */ var _ui_utils_seamly_utils__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./ui/utils/seamly-utils */ \"./src/javascripts/ui/utils/seamly-utils.js\");\n/* harmony import */ var _lib_external_api__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./lib/external-api */ \"./src/javascripts/lib/external-api/index.js\");\n/* harmony import */ var _ui_utils_general_utils__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./ui/utils/general-utils */ \"./src/javascripts/ui/utils/general-utils.js\");\n/* harmony import */ var _ui_components_layout_header__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./ui/components/layout/header */ \"./src/javascripts/ui/components/layout/header.js\");\n/* harmony import */ var _ui_components_layout_icon__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./ui/components/layout/icon */ \"./src/javascripts/ui/components/layout/icon.js\");\n/* harmony import */ var _ui_components_layout_interrupt__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./ui/components/layout/interrupt */ \"./src/javascripts/ui/components/layout/interrupt.js\");\n/* harmony import */ var _ui_components_conversation_message_container__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./ui/components/conversation/message-container */ \"./src/javascripts/ui/components/conversation/message-container.js\");\n/* harmony import */ var _lib_id__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./lib/id */ \"./src/javascripts/lib/id.js\");\n/* harmony import */ var _ui_components_core_seamly_api_context__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./ui/components/core/seamly-api-context */ \"./src/javascripts/ui/components/core/seamly-api-context.js\");\n/* harmony import */ var _ui_components_core_seamly_live_region_context__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./ui/components/core/seamly-live-region-context */ \"./src/javascripts/ui/components/core/seamly-live-region-context.js\");\n/* harmony import */ var _ui_components_conversation_event_choice_prompt__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./ui/components/conversation/event/choice-prompt */ \"./src/javascripts/ui/components/conversation/event/choice-prompt.js\");\n/* harmony import */ var _ui_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./ui/hooks/seamly-hooks */ \"./src/javascripts/ui/hooks/seamly-hooks.js\");\n/* harmony import */ var _domains_config__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./domains/config */ \"./src/javascripts/domains/config/index.js\");\n/* harmony import */ var _domains_i18n__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./domains/i18n */ \"./src/javascripts/domains/i18n/index.js\");\n/* harmony import */ var _domains_translations__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./domains/translations */ \"./src/javascripts/domains/translations/index.js\");\n/* harmony import */ var _ui_components_conversation_event_text__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./ui/components/conversation/event/text */ \"./src/javascripts/ui/components/conversation/event/text.js\");\n/* harmony import */ var _ui_components_entry_toggle_button__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./ui/components/entry/toggle-button */ \"./src/javascripts/ui/components/entry/toggle-button.js\");\n/* harmony import */ var _ui_components_view__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./ui/components/view */ \"./src/javascripts/ui/components/view/index.js\");\n/* harmony import */ var _ui_components_view_deprecated_view__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./ui/components/view/deprecated-view */ \"./src/javascripts/ui/components/view/deprecated-view.js\");\n/* harmony import */ var _api__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./api */ \"./src/javascripts/api/index.js\");\n/* harmony import */ var _api_errors_seamly_general_error__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./api/errors/seamly-general-error */ \"./src/javascripts/api/errors/seamly-general-error.js\");\n/* harmony import */ var _api_errors_seamly_offline_error__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./api/errors/seamly-offline-error */ \"./src/javascripts/api/errors/seamly-offline-error.js\");\n // eslint-disable-line\n// Used by: Client\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_lib_external_api_initialize_api__WEBPACK_IMPORTED_MODULE_1__[\"default\"]); // Used by: Client\n\n // Used by: Client\n\n // Used by: Client\n\n // Used by: Client\n\n // Used by: Client\n\n // Used by: Client\n\n // Used by: StyleGuide\n\n // Used by: StyleGuide\n\n // Used by: Client\n\n // Used by: Demo\n\n // Used by: Client\n\n // Used by: StyleGuide\n\n // Used by: StyleGuide\n\n // Used by: StyleGuide\n\n // Used by: Client\n\n // Used by: Client\n\n // Used by: Client\n\n // Used by: Client\n\n // Used by: StyleGuide\n\n // Used by: Client\n\n // Used by: StyleGuide\n\n // Used by: StyleGuide\n\n // Used by: StyleGuide\n\n // Used by: StyleGuide\n\n // Used by: Client\n\n // Used by: Client\n\n // Used by: Client\n\n // Used by: Client\n\n // Used by: Client\n\n // Used by: Client\n\n // Used by: Client\n\n // Used by: Client\n\n // Used by: Client\n\n // Used by: Client\n\n // Used by: Client\n\n // Used by: Client\n\n // Used by: Client\n\n // Used by: Client\n\n // Used by: Client\n\n // Used by: Client\n\n // Used by: StyleGuide\n\n // Used by: Client\n\n // Used by: Client\n// Used by: StyleGuide\n\n // Used by: StyleGuide\n\n // Used by: StyleGuide\n\n // Used by: StyleGuide\n\n\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/index.js?");
974
974
 
975
975
  /***/ }),
976
976
 
@@ -981,7 +981,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
981
981
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
982
982
 
983
983
  "use strict";
984
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"className\": () => (/* binding */ className)\n/* harmony export */ });\n/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../config */ \"./src/javascripts/config.js\");\n\n/**\n * Generate a className with all classes prefixed with the CSS_NAME\n *\n * @export\n * @param {*} names\n */\n\nconst className = (...classes) => classes.flat().map(c => {\n if (typeof c === 'object') {\n return Object.entries(c).map(([key, value]) => value ? key : '').join(' ');\n }\n\n return c;\n}).filter(c => typeof c === 'string').map(c => c.split(' ')).flat().filter(c => c.length).map(c => [_config__WEBPACK_IMPORTED_MODULE_0__.CSS_NAME, c].join('-')).join(' ');\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/lib/css.js?");
984
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"className\": () => (/* binding */ className)\n/* harmony export */ });\n/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../config */ \"./src/javascripts/config.js\");\n\n/**\n * Generate a className with all classes prefixed with the CSS_NAME\n *\n * @export\n * @param {*} names\n */\n\nconst className = (...classes) => classes.flat().map(c => {\n if (typeof c === 'object') {\n return Object.entries(c).map(([key, value]) => value ? key : '').join(' ');\n }\n\n return c;\n}).filter(c => typeof c === 'string').map(c => c.split(' ')).flat().filter(c => c.length).map(c => {\n // This rule makes sure the CSS_NAME is not added yet\n if (c.indexOf(_config__WEBPACK_IMPORTED_MODULE_0__.CSS_NAME) > -1) {\n return c;\n }\n\n return [_config__WEBPACK_IMPORTED_MODULE_0__.CSS_NAME, c].join('-');\n}).join(' ');\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/lib/css.js?");
985
985
 
986
986
  /***/ }),
987
987
 
@@ -1002,7 +1002,7 @@ eval("if (true) {\n module.exports = __webpack_require__(/*! debug */ \"./node_
1002
1002
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1003
1003
 
1004
1004
  "use strict";
1005
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ Engine)\n/* harmony export */ });\n/* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact */ \"preact\");\n/* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(preact__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var minivents__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! minivents */ \"./node_modules/minivents/dist/minivents.commonjs.min.js\");\n/* harmony import */ var minivents__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(minivents__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _ui_components_chat_app__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../ui/components/chat-app */ \"./src/javascripts/ui/components/chat-app.js\");\n/* harmony import */ var _ui_components_core_seamly_core__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../ui/components/core/seamly-core */ \"./src/javascripts/ui/components/core/seamly-core.js\");\n/* harmony import */ var _api__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../api */ \"./src/javascripts/api/index.js\");\n/* harmony import */ var _domains_store__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../domains/store */ \"./src/javascripts/domains/store/index.js\");\n/* harmony import */ var _domains_app__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../domains/app */ \"./src/javascripts/domains/app/index.js\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__);\nconst _excluded = [\"namespace\", \"parentElement\", \"showFaq\"],\n _excluded2 = [\"view\"];\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n\n\n\n\n\n\n\n\nclass Engine {\n constructor(config, externalApi) {\n var _config$context;\n\n const {\n namespace = '',\n parentElement,\n showFaq\n } = config,\n restConfig = _objectWithoutProperties(config, _excluded);\n\n this.config = _objectSpread(_objectSpread({}, restConfig), {}, {\n showFaq: showFaq !== false,\n namespace\n });\n this.namespace = namespace;\n this.parentElement = parentElement;\n this.externalApi = externalApi;\n this.api = new _api__WEBPACK_IMPORTED_MODULE_4__.API({\n namespace: config.namespace,\n config: config.api,\n locale: config === null || config === void 0 ? void 0 : (_config$context = config.context) === null || _config$context === void 0 ? void 0 : _config$context.locale\n });\n this.eventBus = new (minivents__WEBPACK_IMPORTED_MODULE_1___default())();\n this.functions = {};\n this.registerFunctions({\n on: this.eventBus.on,\n off: this.eventBus.off\n });\n this.eventBus.on('function.register', (functionName, fn) => this.registerFunction(functionName, fn));\n this.eventBus.on('function.unregister', (functionName, fn) => this.unregisterFunction(functionName, fn));\n }\n\n async render() {\n const _ref = this.config.customComponents || {},\n {\n view: View\n } = _ref,\n restComponents = _objectWithoutProperties(_ref, _excluded2);\n\n const renderConfig = _objectSpread(_objectSpread({}, this.config), {}, {\n customComponents: Object.keys(restComponents).length ? restComponents : undefined\n });\n\n const store = (0,_domains_store__WEBPACK_IMPORTED_MODULE_5__.createStore)({\n api: this.api,\n eventBus: this.eventBus\n });\n await store.dispatch(_domains_app__WEBPACK_IMPORTED_MODULE_6__.Actions.initialize(renderConfig));\n\n if (View) {\n (0,preact__WEBPACK_IMPORTED_MODULE_0__.render)((0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_ui_components_core_seamly_core__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n config: renderConfig,\n eventBus: this.eventBus,\n store: store,\n api: this.api,\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(View, {})\n }), this.parentElement);\n } else {\n (0,preact__WEBPACK_IMPORTED_MODULE_0__.render)((0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_ui_components_chat_app__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n config: renderConfig,\n eventBus: this.eventBus,\n store: store,\n api: this.api\n }), this.parentElement);\n }\n }\n\n destroy() {\n (0,preact__WEBPACK_IMPORTED_MODULE_0__.render)(null, this.parentElement);\n this.eventBus.off();\n this.api.disconnect();\n delete this.functions;\n }\n\n registerFunctions(functionMap) {\n Object.entries(functionMap).forEach(([functionName, fn]) => {\n this.registerFunction(functionName, fn);\n });\n }\n\n registerFunction(functionName, fn) {\n this.functions[functionName] = this.functions[functionName] || [];\n this.functions[functionName].push(fn);\n this.externalApi.handleActions();\n }\n\n unregisterFunction(functionName, fn) {\n const functions = this.functions[functionName];\n\n if (functions && functions.length) {\n this.functions[functionName] = functions.filter(fn2 => fn2 !== fn);\n }\n }\n\n execFunction(functionName, ...args) {\n const functions = this.functions[functionName];\n\n if (!functions || !functions.length) {\n return false;\n }\n\n functions.forEach(fn => {\n try {\n fn(...args);\n } catch (e) {\n console.error(`Action(${functionName}) failed: `, e);\n }\n });\n return true;\n }\n\n}\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/lib/engine/index.js?");
1005
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ Engine)\n/* harmony export */ });\n/* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact */ \"preact\");\n/* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(preact__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var minivents__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! minivents */ \"./node_modules/minivents/dist/minivents.commonjs.min.js\");\n/* harmony import */ var minivents__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(minivents__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _ui_components_chat_app__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../ui/components/chat-app */ \"./src/javascripts/ui/components/chat-app.js\");\n/* harmony import */ var _ui_components_core_seamly_core__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../ui/components/core/seamly-core */ \"./src/javascripts/ui/components/core/seamly-core.js\");\n/* harmony import */ var _api__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../api */ \"./src/javascripts/api/index.js\");\n/* harmony import */ var _domains_store__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../domains/store */ \"./src/javascripts/domains/store/index.js\");\n/* harmony import */ var _domains_app_actions__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../domains/app/actions */ \"./src/javascripts/domains/app/actions.js\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__);\nconst _excluded = [\"namespace\", \"parentElement\", \"showFaq\"],\n _excluded2 = [\"view\"];\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n\n\n\n\n\n\n\n\nclass Engine {\n constructor(config, externalApi) {\n const {\n namespace = '',\n parentElement,\n showFaq\n } = config,\n restConfig = _objectWithoutProperties(config, _excluded);\n\n this.config = _objectSpread(_objectSpread({}, restConfig), {}, {\n showFaq: showFaq !== false,\n namespace\n });\n this.namespace = namespace;\n this.parentElement = parentElement;\n this.externalApi = externalApi;\n this.api = new _api__WEBPACK_IMPORTED_MODULE_4__.API({\n namespace: config.namespace,\n config: config.api,\n context: config.context\n });\n this.eventBus = new (minivents__WEBPACK_IMPORTED_MODULE_1___default())();\n this.functions = {};\n this.registerFunctions({\n on: this.eventBus.on,\n off: this.eventBus.off\n });\n this.eventBus.on('function.register', (functionName, fn) => this.registerFunction(functionName, fn));\n this.eventBus.on('function.unregister', (functionName, fn) => this.unregisterFunction(functionName, fn));\n }\n\n async render() {\n const _ref = this.config.customComponents || {},\n {\n view: View\n } = _ref,\n restComponents = _objectWithoutProperties(_ref, _excluded2);\n\n const renderConfig = _objectSpread(_objectSpread({}, this.config), {}, {\n customComponents: Object.keys(restComponents).length ? restComponents : undefined\n });\n\n const store = (0,_domains_store__WEBPACK_IMPORTED_MODULE_5__.createStore)({\n api: this.api,\n eventBus: this.eventBus,\n config: renderConfig\n });\n await store.dispatch(_domains_app_actions__WEBPACK_IMPORTED_MODULE_6__.initialize());\n\n if (View) {\n (0,preact__WEBPACK_IMPORTED_MODULE_0__.render)((0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_ui_components_core_seamly_core__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n config: renderConfig,\n eventBus: this.eventBus,\n store: store,\n api: this.api,\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(View, {})\n }), this.parentElement);\n } else {\n (0,preact__WEBPACK_IMPORTED_MODULE_0__.render)((0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_ui_components_chat_app__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n config: renderConfig,\n eventBus: this.eventBus,\n store: store,\n api: this.api\n }), this.parentElement);\n }\n }\n\n destroy() {\n (0,preact__WEBPACK_IMPORTED_MODULE_0__.render)(null, this.parentElement);\n this.eventBus.off();\n this.api.disconnect();\n delete this.functions;\n }\n\n registerFunctions(functionMap) {\n Object.entries(functionMap).forEach(([functionName, fn]) => {\n this.registerFunction(functionName, fn);\n });\n }\n\n registerFunction(functionName, fn) {\n this.functions[functionName] = this.functions[functionName] || [];\n this.functions[functionName].push(fn);\n this.externalApi.handleActions();\n }\n\n unregisterFunction(functionName, fn) {\n const functions = this.functions[functionName];\n\n if (functions && functions.length) {\n this.functions[functionName] = functions.filter(fn2 => fn2 !== fn);\n }\n }\n\n execFunction(functionName, ...args) {\n const functions = this.functions[functionName];\n\n if (!functions || !functions.length) {\n return false;\n }\n\n functions.forEach(fn => {\n try {\n fn(...args);\n } catch (e) {\n console.error(`Action(${functionName}) failed: `, e);\n }\n });\n return true;\n }\n\n}\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/lib/engine/index.js?");
1006
1006
 
1007
1007
  /***/ }),
1008
1008
 
@@ -1013,7 +1013,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
1013
1013
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1014
1014
 
1015
1015
  "use strict";
1016
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _engine__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../engine */ \"./src/javascripts/lib/engine/index.js\");\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n\n\nconst isActionObject = actionObj => typeof actionObj === 'object' && 'action' in actionObj;\n\nconst fixActionObjectArgs = actionObj => _objectSpread(_objectSpread({}, actionObj), {}, {\n args: Array.isArray(actionObj.args) ? actionObj.args : [actionObj.args]\n});\n\nclass ExternalApi {\n constructor(appConfig) {\n this._waitingActions = [];\n this._instances = {};\n this.appConfig = appConfig;\n }\n\n push(...actionObjects) {\n // eslint-disable-next-line no-param-reassign\n actionObjects = actionObjects.filter(isActionObject).map(fixActionObjectArgs);\n\n if (actionObjects.length) {\n this._waitingActions.push(...actionObjects);\n\n this.handleActions();\n }\n }\n\n handleActions() {\n const actions = this._waitingActions;\n this._waitingActions = [];\n actions.forEach(actionObj => {\n switch (actionObj.action) {\n case 'init':\n this.handleInit(actionObj);\n break;\n\n case 'destroy':\n this.handleDestroy(actionObj);\n break;\n\n default:\n if (!this.handleAction(actionObj)) {\n this._waitingActions.push(actionObj);\n }\n\n break;\n }\n });\n }\n\n handleInit(actionObj) {\n const userConfig = this.getUserConfig(...actionObj.args);\n const config = this.getCombinedConfig(userConfig); // if this.appConfig is a function, it might return an invalid configuration (false, null, undefined)\n\n if (!config) {\n this.destroy(userConfig.namespace);\n return;\n }\n\n const {\n parentElement,\n namespace\n } = config;\n Object.values(this._instances).forEach(instance => {\n if (instance.parentElement === parentElement || instance.namespace === namespace) {\n this.destroy(instance);\n }\n });\n const instance = this.createInstance(config);\n this._instances[config.namespace] = instance;\n instance.render();\n }\n\n handleDestroy(actionObj) {\n if (actionObj.instance !== undefined) {\n this.destroy(actionObj.instance);\n } else {\n Object.values(this._instances).forEach(instance => {\n this.destroy(instance);\n });\n }\n }\n\n handleAction(actionObj) {\n const {\n action,\n instance: namespace,\n args\n } = actionObj;\n const instances = Object.values(this._instances);\n\n if (!namespace && instances.length > 1) {\n console.warn(`Multiple instances detected. Due to potential race conditions, it is recommended to target a specific instance with the action: ${action}`);\n } // results will be an array containing the results of wether an instance has\n // handled the action or not\n\n\n const results = instances.map(instance => {\n return !namespace || instance.namespace === namespace ? instance.execFunction(action, ...args) : false;\n }); // test if any of the instances has handled the action\n\n return results.some(Boolean);\n }\n\n createInstance(config) {\n return new _engine__WEBPACK_IMPORTED_MODULE_0__[\"default\"](config, this);\n }\n\n destroy(instance) {\n if (typeof instance === 'string') {\n // eslint-disable-next-line no-param-reassign\n instance = this._instances[instance];\n }\n\n if (instance) {\n instance.destroy();\n delete this._instances[instance.namespace];\n }\n } // eslint-disable-next-line class-methods-use-this\n\n\n getUserConfig(userConfig = {}) {\n return userConfig;\n }\n\n getCombinedConfig(userConfig) {\n if (typeof this.appConfig === 'function') {\n return this.appConfig(userConfig);\n }\n\n return _objectSpread(_objectSpread(_objectSpread({}, this.appConfig), userConfig), {}, {\n api: _objectSpread(_objectSpread({}, this.appConfig.api), userConfig.api)\n });\n }\n\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ExternalApi);\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/lib/external-api/index.js?");
1016
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _engine__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../engine */ \"./src/javascripts/lib/engine/index.js\");\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n\n\nconst isActionObject = actionObj => typeof actionObj === 'object' && 'action' in actionObj;\n\nconst fixActionObjectArgs = actionObj => _objectSpread(_objectSpread({}, actionObj), {}, {\n args: Array.isArray(actionObj.args) ? actionObj.args : [actionObj.args]\n});\n\nclass ExternalApi {\n constructor(appConfig) {\n this._waitingActions = [];\n this._instances = {};\n this.appConfig = appConfig;\n }\n\n push(...actionObjects) {\n // eslint-disable-next-line no-param-reassign\n actionObjects = actionObjects.filter(isActionObject).map(fixActionObjectArgs);\n\n if (actionObjects.length) {\n this._waitingActions.push(...actionObjects);\n\n this.handleActions();\n }\n }\n\n handleActions() {\n const actions = this._waitingActions;\n this._waitingActions = [];\n actions.forEach(actionObj => {\n switch (actionObj.action) {\n case 'init':\n this.handleInit(actionObj);\n break;\n\n case 'destroy':\n this.handleDestroy(actionObj);\n break;\n\n default:\n if (!this.handleAction(actionObj)) {\n this._waitingActions.push(actionObj);\n }\n\n break;\n }\n });\n }\n\n handleInit(actionObj) {\n const userConfig = this.getUserConfig(...actionObj.args);\n const config = this.getCombinedConfig(userConfig); // if this.appConfig is a function, it might return an invalid configuration (false, null, undefined)\n\n const {\n parentElement,\n namespace\n } = config || userConfig;\n\n if (!namespace) {\n this.destroy();\n } else {\n Object.values(this._instances).forEach(instance => {\n if (instance.parentElement === parentElement || instance.namespace === namespace) {\n this.destroy(instance);\n }\n });\n }\n\n if (config) {\n const instance = this.createInstance(config);\n this._instances[config.namespace] = instance;\n instance.render();\n }\n }\n\n handleDestroy(actionObj) {\n this.destroy(actionObj.instance);\n }\n\n handleAction(actionObj) {\n const {\n action,\n instance: namespace,\n args\n } = actionObj;\n const instances = Object.values(this._instances);\n\n if (!namespace && instances.length > 1) {\n console.warn(`Multiple instances detected. Due to potential race conditions, it is recommended to target a specific instance with the action: ${action}`);\n } // results will be an array containing the results of wether an instance has\n // handled the action or not\n\n\n const results = instances.map(instance => {\n return !namespace || instance.namespace === namespace ? instance.execFunction(action, ...args) : false;\n }); // test if any of the instances has handled the action\n\n return results.some(Boolean);\n }\n\n createInstance(config) {\n return new _engine__WEBPACK_IMPORTED_MODULE_0__[\"default\"](config, this);\n }\n\n destroy(instance) {\n if (!instance) {\n Object.entries(this._instances).forEach(([namespace, _instance]) => {\n _instance.destroy();\n\n delete this._instances[namespace];\n });\n } else {\n if (typeof instance === 'string') {\n // eslint-disable-next-line no-param-reassign\n instance = this._instances[instance];\n }\n\n if (instance) {\n instance.destroy();\n delete this._instances[instance.namespace];\n }\n }\n } // eslint-disable-next-line class-methods-use-this\n\n\n getUserConfig(userConfig = {}) {\n return userConfig;\n }\n\n getCombinedConfig(userConfig) {\n if (typeof this.appConfig === 'function') {\n return this.appConfig(userConfig);\n }\n\n const defaults = _objectSpread(_objectSpread({}, this.appConfig.defaults), userConfig.defaults);\n\n return _objectSpread(_objectSpread(_objectSpread({}, this.appConfig), userConfig), {}, {\n api: _objectSpread(_objectSpread({}, this.appConfig.api), userConfig.api),\n defaults: Object.keys(defaults).length ? defaults : undefined\n });\n }\n\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ExternalApi);\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/lib/external-api/index.js?");
1017
1017
 
1018
1018
  /***/ }),
1019
1019
 
@@ -1133,7 +1133,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
1133
1133
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1134
1134
 
1135
1135
  "use strict";
1136
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _layout_view__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./layout/view */ \"./src/javascripts/ui/components/layout/view.js\");\n/* harmony import */ var _core_seamly_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./core/seamly-core */ \"./src/javascripts/ui/components/core/seamly-core.js\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__);\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n\n\n\n\nconst ChatApp = props => {\n return (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(_core_seamly_core__WEBPACK_IMPORTED_MODULE_1__[\"default\"], _objectSpread(_objectSpread({}, props), {}, {\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(_layout_view__WEBPACK_IMPORTED_MODULE_0__[\"default\"], {})\n }));\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ChatApp);\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/chat-app.js?");
1136
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _view__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./view */ \"./src/javascripts/ui/components/view/index.js\");\n/* harmony import */ var _core_seamly_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./core/seamly-core */ \"./src/javascripts/ui/components/core/seamly-core.js\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__);\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n\n\n\n\nconst ChatApp = props => {\n return (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(_core_seamly_core__WEBPACK_IMPORTED_MODULE_1__[\"default\"], _objectSpread(_objectSpread({}, props), {}, {\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(_view__WEBPACK_IMPORTED_MODULE_0__[\"default\"], {})\n }));\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ChatApp);\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/chat-app.js?");
1137
1137
 
1138
1138
  /***/ }),
1139
1139
 
@@ -1166,7 +1166,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
1166
1166
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1167
1167
 
1168
1168
  "use strict";
1169
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact/hooks */ \"preact/hooks\");\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(preact_hooks__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _domains_config__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../domains/config */ \"./src/javascripts/domains/config/index.js\");\n/* harmony import */ var _component_context__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./component-context */ \"./src/javascripts/ui/components/conversation/component-context.js\");\n/* harmony import */ var _event_choice_prompt__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./event/choice-prompt */ \"./src/javascripts/ui/components/conversation/event/choice-prompt.js\");\n/* harmony import */ var _event_text__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./event/text */ \"./src/javascripts/ui/components/conversation/event/text.js\");\n/* harmony import */ var _event_image__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./event/image */ \"./src/javascripts/ui/components/conversation/event/image.js\");\n/* harmony import */ var _event_video__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./event/video */ \"./src/javascripts/ui/components/conversation/event/video.js\");\n/* harmony import */ var _event_divider__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./event/divider */ \"./src/javascripts/ui/components/conversation/event/divider/index.js\");\n/* harmony import */ var _event_translation__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./event/translation */ \"./src/javascripts/ui/components/conversation/event/translation.js\");\n/* harmony import */ var _event_participant__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./event/participant */ \"./src/javascripts/ui/components/conversation/event/participant.js\");\n/* harmony import */ var _event_upload__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./event/upload */ \"./src/javascripts/ui/components/conversation/event/upload.js\");\n/* harmony import */ var _event_cta__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./event/cta */ \"./src/javascripts/ui/components/conversation/event/cta.js\");\n/* harmony import */ var _event_divider_variants_time_indicator__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./event/divider/variants/time-indicator */ \"./src/javascripts/ui/components/conversation/event/divider/variants/time-indicator.js\");\n/* harmony import */ var _event_carousel_message__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./event/carousel-message */ \"./src/javascripts/ui/components/conversation/event/carousel-message/index.js\");\n/* harmony import */ var _event_card_message__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./event/card-message */ \"./src/javascripts/ui/components/conversation/event/card-message.js\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_15___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_15__);\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst eventTypeMapping = {\n message: {\n choice_prompt: _event_choice_prompt__WEBPACK_IMPORTED_MODULE_3__[\"default\"],\n text: _event_text__WEBPACK_IMPORTED_MODULE_4__[\"default\"],\n image: _event_image__WEBPACK_IMPORTED_MODULE_5__[\"default\"],\n video: _event_video__WEBPACK_IMPORTED_MODULE_6__[\"default\"],\n upload: _event_upload__WEBPACK_IMPORTED_MODULE_10__[\"default\"],\n cta: _event_cta__WEBPACK_IMPORTED_MODULE_11__[\"default\"],\n carousel: _event_carousel_message__WEBPACK_IMPORTED_MODULE_13__[\"default\"],\n card: _event_card_message__WEBPACK_IMPORTED_MODULE_14__[\"default\"]\n },\n info: {\n text: _event_text__WEBPACK_IMPORTED_MODULE_4__[\"default\"],\n divider: _event_divider__WEBPACK_IMPORTED_MODULE_7__[\"default\"],\n translation: _event_translation__WEBPACK_IMPORTED_MODULE_8__[\"default\"],\n timeIndicator: _event_divider_variants_time_indicator__WEBPACK_IMPORTED_MODULE_12__[\"default\"]\n },\n participant: {\n participant: _event_participant__WEBPACK_IMPORTED_MODULE_9__[\"default\"]\n }\n};\n\nconst ComponentFilter = ({\n children\n}) => {\n const {\n customComponents\n } = (0,_domains_config__WEBPACK_IMPORTED_MODULE_1__.useConfig)();\n const resolvedComponents = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => {\n // Calculates a combined component mapping object based on the defaults with\n // user implementation component overrides where required.\n return Object.keys(eventTypeMapping).reduce((acc, key) => {\n return _objectSpread(_objectSpread({}, acc), {}, {\n [key]: _objectSpread(_objectSpread({}, eventTypeMapping[key]), customComponents ? customComponents[key] : {})\n });\n }, {\n fallback: _event_text__WEBPACK_IMPORTED_MODULE_4__[\"default\"]\n });\n }, [customComponents]);\n return (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_15__.jsx)(_component_context__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Provider, {\n value: resolvedComponents,\n children: children\n });\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ComponentFilter);\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/conversation/component-filter.js?");
1169
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact/hooks */ \"preact/hooks\");\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(preact_hooks__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _domains_config__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../domains/config */ \"./src/javascripts/domains/config/index.js\");\n/* harmony import */ var _component_context__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./component-context */ \"./src/javascripts/ui/components/conversation/component-context.js\");\n/* harmony import */ var _event_choice_prompt__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./event/choice-prompt */ \"./src/javascripts/ui/components/conversation/event/choice-prompt.js\");\n/* harmony import */ var _event_text__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./event/text */ \"./src/javascripts/ui/components/conversation/event/text.js\");\n/* harmony import */ var _event_image__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./event/image */ \"./src/javascripts/ui/components/conversation/event/image.js\");\n/* harmony import */ var _event_video__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./event/video */ \"./src/javascripts/ui/components/conversation/event/video.js\");\n/* harmony import */ var _event_divider__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./event/divider */ \"./src/javascripts/ui/components/conversation/event/divider/index.js\");\n/* harmony import */ var _event_translation__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./event/translation */ \"./src/javascripts/ui/components/conversation/event/translation.js\");\n/* harmony import */ var _event_participant__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./event/participant */ \"./src/javascripts/ui/components/conversation/event/participant.js\");\n/* harmony import */ var _event_splash__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./event/splash */ \"./src/javascripts/ui/components/conversation/event/splash.js\");\n/* harmony import */ var _event_upload__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./event/upload */ \"./src/javascripts/ui/components/conversation/event/upload.js\");\n/* harmony import */ var _event_cta__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./event/cta */ \"./src/javascripts/ui/components/conversation/event/cta.js\");\n/* harmony import */ var _event_divider_variants_time_indicator__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./event/divider/variants/time-indicator */ \"./src/javascripts/ui/components/conversation/event/divider/variants/time-indicator.js\");\n/* harmony import */ var _event_carousel_message__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./event/carousel-message */ \"./src/javascripts/ui/components/conversation/event/carousel-message/index.js\");\n/* harmony import */ var _event_card_message__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./event/card-message */ \"./src/javascripts/ui/components/conversation/event/card-message.js\");\n/* harmony import */ var _event_conversation_suggestions__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./event/conversation-suggestions */ \"./src/javascripts/ui/components/conversation/event/conversation-suggestions.js\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_17___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_17__);\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst eventTypeMapping = {\n message: {\n choice_prompt: _event_choice_prompt__WEBPACK_IMPORTED_MODULE_3__[\"default\"],\n text: _event_text__WEBPACK_IMPORTED_MODULE_4__[\"default\"],\n image: _event_image__WEBPACK_IMPORTED_MODULE_5__[\"default\"],\n splash: _event_splash__WEBPACK_IMPORTED_MODULE_10__[\"default\"],\n video: _event_video__WEBPACK_IMPORTED_MODULE_6__[\"default\"],\n upload: _event_upload__WEBPACK_IMPORTED_MODULE_11__[\"default\"],\n cta: _event_cta__WEBPACK_IMPORTED_MODULE_12__[\"default\"],\n carousel: _event_carousel_message__WEBPACK_IMPORTED_MODULE_14__[\"default\"],\n card: _event_card_message__WEBPACK_IMPORTED_MODULE_15__[\"default\"]\n },\n info: {\n text: _event_text__WEBPACK_IMPORTED_MODULE_4__[\"default\"],\n divider: _event_divider__WEBPACK_IMPORTED_MODULE_7__[\"default\"],\n translation: _event_translation__WEBPACK_IMPORTED_MODULE_8__[\"default\"],\n timeIndicator: _event_divider_variants_time_indicator__WEBPACK_IMPORTED_MODULE_13__[\"default\"]\n },\n participant: {\n participant: _event_participant__WEBPACK_IMPORTED_MODULE_9__[\"default\"]\n },\n service_data: {\n suggestion: _event_conversation_suggestions__WEBPACK_IMPORTED_MODULE_16__[\"default\"]\n }\n};\n\nconst ComponentFilter = ({\n children\n}) => {\n const {\n customComponents\n } = (0,_domains_config__WEBPACK_IMPORTED_MODULE_1__.useConfig)();\n const resolvedComponents = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => {\n // Calculates a combined component mapping object based on the defaults with\n // user implementation component overrides where required.\n return Object.keys(eventTypeMapping).reduce((acc, key) => {\n return _objectSpread(_objectSpread({}, acc), {}, {\n [key]: _objectSpread(_objectSpread({}, eventTypeMapping[key]), customComponents ? customComponents[key] : {})\n });\n }, {\n fallback: _event_text__WEBPACK_IMPORTED_MODULE_4__[\"default\"]\n });\n }, [customComponents]);\n return (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_17__.jsx)(_component_context__WEBPACK_IMPORTED_MODULE_2__[\"default\"].Provider, {\n value: resolvedComponents,\n children: children\n });\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ComponentFilter);\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/conversation/component-filter.js?");
1170
1170
 
1171
1171
  /***/ }),
1172
1172
 
@@ -1243,7 +1243,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
1243
1243
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1244
1244
 
1245
1245
  "use strict";
1246
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ CarouselComponent)\n/* harmony export */ });\n/* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact */ \"preact\");\n/* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(preact__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! preact/hooks */ \"preact/hooks\");\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(preact_hooks__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _lib_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../../lib/css */ \"./src/javascripts/lib/css.js\");\n/* harmony import */ var _hooks_utility_hooks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../../hooks/utility-hooks */ \"./src/javascripts/ui/hooks/utility-hooks.js\");\n/* harmony import */ var _components_pagination__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./components/pagination */ \"./src/javascripts/ui/components/conversation/event/carousel-component/components/pagination.js\");\n/* harmony import */ var _components_controls__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./components/controls */ \"./src/javascripts/ui/components/conversation/event/carousel-component/components/controls.js\");\n/* harmony import */ var _carousel_message_components_slide__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../carousel-message/components/slide */ \"./src/javascripts/ui/components/conversation/event/carousel-message/components/slide.js\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__);\n\n\n\n\n\n\n\n\n\n\nconst defaultGetItemKey = (item, idx, prefix) => `${prefix}${idx}`;\n\nconst defaultGetItemLabel = item => item.label;\n\nfunction CarouselComponent({\n currentIndex: originalIndex,\n onChange,\n getItemKey = defaultGetItemKey,\n getItemLabel = defaultGetItemLabel,\n items\n}) {\n const carouselItemsId = (0,_hooks_utility_hooks__WEBPACK_IMPORTED_MODULE_3__.useGeneratedId)();\n const itemCount = items.length;\n const [currentIndex, setCurrentIndex] = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_1__.useState)(Number(originalIndex || '0'));\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_1__.useEffect)(() => {\n setCurrentIndex(Number(originalIndex || '0'));\n }, [setCurrentIndex, originalIndex]);\n const slideRefs = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_1__.useRef)([]);\n slideRefs.current = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_1__.useMemo)(() => {\n return Array(itemCount).fill(1).map(() => (0,preact__WEBPACK_IMPORTED_MODULE_0__.createRef)());\n }, [itemCount]);\n const isMountRef = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_1__.useRef)(true);\n const onChangeRef = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_1__.useRef)();\n onChangeRef.current = onChange;\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_1__.useEffect)(() => {\n if (isMountRef.current) {\n isMountRef.current = false;\n return;\n }\n\n if (onChangeRef.current) {\n onChangeRef.current(currentIndex);\n }\n }, [currentIndex]);\n return (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxs)(\"div\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_2__.className)('carousel'),\n role: \"group\",\n \"aria-roledescription\": \"carousel\",\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(\"div\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_2__.className)('carousel__slides-wrapper'),\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(\"div\", {\n id: carouselItemsId,\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_2__.className)('carousel__slides'),\n style: {\n width: `${itemCount * 100}%`,\n left: `${currentIndex * -100}%`\n },\n \"aria-live\": \"polite\",\n \"aria-atomic\": \"false\",\n children: items.map((item, idx) => {\n const isActive = currentIndex === idx;\n return (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(\"div\", {\n ref: slideRefs.current[idx],\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_2__.className)('carousel__slide', isActive ? 'is-active' : undefined),\n \"aria-hidden\": !isActive ? 'true' : undefined,\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_carousel_message_components_slide__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n item: item,\n items: items,\n currentIndex: currentIndex,\n isActive: isActive\n })\n }, getItemKey(item, idx, 'item-'));\n })\n })\n }), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(\"div\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_2__.className)('carousel__controls'),\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_components_controls__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n currentIndex: currentIndex,\n items: items,\n onChange: setCurrentIndex,\n controlId: carouselItemsId,\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(\"div\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_2__.className)('carousel__pagination'),\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_components_pagination__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n currentIndex: currentIndex,\n items: items,\n onChange: setCurrentIndex,\n getItemKey: getItemKey,\n getItemLabel: getItemLabel\n })\n })\n })\n })]\n });\n}\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/conversation/event/carousel-component/index.js?");
1246
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ CarouselComponent)\n/* harmony export */ });\n/* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact */ \"preact\");\n/* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(preact__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! preact/hooks */ \"preact/hooks\");\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(preact_hooks__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _lib_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../../lib/css */ \"./src/javascripts/lib/css.js\");\n/* harmony import */ var _hooks_utility_hooks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../../hooks/utility-hooks */ \"./src/javascripts/ui/hooks/utility-hooks.js\");\n/* harmony import */ var _components_pagination__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./components/pagination */ \"./src/javascripts/ui/components/conversation/event/carousel-component/components/pagination.js\");\n/* harmony import */ var _components_controls__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./components/controls */ \"./src/javascripts/ui/components/conversation/event/carousel-component/components/controls.js\");\n/* harmony import */ var _carousel_message_components_slide__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../carousel-message/components/slide */ \"./src/javascripts/ui/components/conversation/event/carousel-message/components/slide.js\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__);\n\n\n\n\n\n\n\n\n\n\nconst defaultGetItemKey = (item, idx, prefix) => `${prefix}${idx}`;\n\nconst defaultGetItemLabel = item => item.label;\n\nconst preventScroll = ({\n target\n}) => {\n target.scrollLeft = 0;\n};\n\nfunction CarouselComponent({\n currentIndex: originalIndex,\n onChange,\n getItemKey = defaultGetItemKey,\n getItemLabel = defaultGetItemLabel,\n items\n}) {\n const carouselItemsId = (0,_hooks_utility_hooks__WEBPACK_IMPORTED_MODULE_3__.useGeneratedId)();\n const itemCount = items.length;\n const [currentIndex, setCurrentIndex] = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_1__.useState)(Number(originalIndex || '0'));\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_1__.useEffect)(() => {\n setCurrentIndex(Number(originalIndex || '0'));\n }, [setCurrentIndex, originalIndex]);\n const slideRefs = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_1__.useRef)([]);\n slideRefs.current = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_1__.useMemo)(() => {\n return Array(itemCount).fill(1).map(() => (0,preact__WEBPACK_IMPORTED_MODULE_0__.createRef)());\n }, [itemCount]);\n const isMountRef = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_1__.useRef)(true);\n const onChangeRef = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_1__.useRef)();\n onChangeRef.current = onChange;\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_1__.useEffect)(() => {\n if (isMountRef.current) {\n isMountRef.current = false;\n return;\n }\n\n if (onChangeRef.current) {\n onChangeRef.current(currentIndex);\n }\n }, [currentIndex]);\n return (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxs)(\"div\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_2__.className)('carousel'),\n role: \"group\",\n \"aria-roledescription\": \"carousel\",\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(\"div\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_2__.className)('carousel__slides-wrapper'),\n onScroll: preventScroll,\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(\"div\", {\n id: carouselItemsId,\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_2__.className)('carousel__slides'),\n style: {\n width: `${itemCount * 100}%`,\n left: `${currentIndex * -100}%`\n },\n \"aria-live\": \"polite\",\n \"aria-atomic\": \"false\",\n children: items.map((item, idx) => {\n const isActive = currentIndex === idx;\n return (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(\"div\", {\n ref: slideRefs.current[idx],\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_2__.className)('carousel__slide', isActive ? 'is-active' : undefined),\n \"aria-hidden\": !isActive ? 'true' : undefined,\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_carousel_message_components_slide__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n item: item,\n items: items,\n currentIndex: currentIndex,\n index: idx,\n isActive: isActive\n })\n }, getItemKey(item, idx, 'item-'));\n })\n })\n }), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(\"div\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_2__.className)('carousel__controls'),\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_components_controls__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n currentIndex: currentIndex,\n items: items,\n onChange: setCurrentIndex,\n controlId: carouselItemsId,\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(\"div\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_2__.className)('carousel__pagination'),\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_components_pagination__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n currentIndex: currentIndex,\n items: items,\n onChange: setCurrentIndex,\n getItemKey: getItemKey,\n getItemLabel: getItemLabel\n })\n })\n })\n })]\n });\n}\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/conversation/event/carousel-component/index.js?");
1247
1247
 
1248
1248
  /***/ }),
1249
1249
 
@@ -1254,7 +1254,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
1254
1254
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1255
1255
 
1256
1256
  "use strict";
1257
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ CarouselMessageSlide)\n/* harmony export */ });\n/* harmony import */ var _lib_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../../../lib/css */ \"./src/javascripts/lib/css.js\");\n/* harmony import */ var _domains_i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../../../domains/i18n */ \"./src/javascripts/domains/i18n/index.js\");\n/* harmony import */ var _card_component__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../card-component */ \"./src/javascripts/ui/components/conversation/event/card-component.js\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__);\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n\n\n\n\nfunction CarouselMessageSlide({\n item: slide,\n items,\n currentIndex,\n isActive\n}) {\n const {\n t\n } = (0,_domains_i18n__WEBPACK_IMPORTED_MODULE_1__.useI18n)();\n return (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_0__.className)('carousel-item', `carousel-item--${slide.type}`),\n role: \"group\",\n \"aria-roledescription\": \"slide\",\n \"aria-label\": t('carousel.slide.label', {\n index: currentIndex + 1,\n total: items.length\n }),\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_card_component__WEBPACK_IMPORTED_MODULE_2__[\"default\"], _objectSpread(_objectSpread({}, slide), {}, {\n isCarouselItem: true,\n hasFocus: isActive\n }))\n });\n}\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/conversation/event/carousel-message/components/slide.js?");
1257
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ CarouselMessageSlide)\n/* harmony export */ });\n/* harmony import */ var _lib_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../../../lib/css */ \"./src/javascripts/lib/css.js\");\n/* harmony import */ var _domains_i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../../../domains/i18n */ \"./src/javascripts/domains/i18n/index.js\");\n/* harmony import */ var _card_component__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../card-component */ \"./src/javascripts/ui/components/conversation/event/card-component.js\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__);\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n\n\n\n\nfunction CarouselMessageSlide({\n item: slide,\n items,\n index,\n isActive\n}) {\n const {\n t\n } = (0,_domains_i18n__WEBPACK_IMPORTED_MODULE_1__.useI18n)();\n return (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_0__.className)('carousel-item', `carousel-item--${slide.type}`),\n role: \"group\",\n \"aria-roledescription\": \"slide\",\n \"aria-label\": t('carousel.slide.label', {\n index: index + 1,\n total: items.length\n }),\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_card_component__WEBPACK_IMPORTED_MODULE_2__[\"default\"], _objectSpread(_objectSpread({}, slide), {}, {\n isCarouselItem: true,\n hasFocus: isActive\n }))\n });\n}\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/conversation/event/carousel-message/components/slide.js?");
1258
1258
 
1259
1259
  /***/ }),
1260
1260
 
@@ -1280,6 +1280,17 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
1280
1280
 
1281
1281
  /***/ }),
1282
1282
 
1283
+ /***/ "./src/javascripts/ui/components/conversation/event/conversation-suggestions.js":
1284
+ /*!**************************************************************************************!*\
1285
+ !*** ./src/javascripts/ui/components/conversation/event/conversation-suggestions.js ***!
1286
+ \**************************************************************************************/
1287
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1288
+
1289
+ "use strict";
1290
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"useSuggestions\": () => (/* binding */ useSuggestions),\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact/hooks */ \"preact/hooks\");\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(preact_hooks__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _lib_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../lib/css */ \"./src/javascripts/lib/css.js\");\n/* harmony import */ var _utils_seamly_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../utils/seamly-utils */ \"./src/javascripts/ui/utils/seamly-utils.js\");\n/* harmony import */ var _domains_i18n__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../../domains/i18n */ \"./src/javascripts/domains/i18n/index.js\");\n/* harmony import */ var _domains_translations__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../../domains/translations */ \"./src/javascripts/domains/translations/index.js\");\n/* harmony import */ var _message_container__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../message-container */ \"./src/javascripts/ui/components/conversation/message-container.js\");\n/* harmony import */ var _hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../../hooks/seamly-hooks */ \"./src/javascripts/ui/hooks/seamly-hooks.js\");\n/* harmony import */ var _suggestions_suggestions_list__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../suggestions/suggestions-list */ \"./src/javascripts/ui/components/suggestions/suggestions-list.js\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__);\nconst _excluded = [\"event\"];\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n\n\n\n\n\n\n\n\n\n\nconst useSuggestions = event => {\n const {\n payload\n } = event;\n const [suggestions] = (0,_domains_translations__WEBPACK_IMPORTED_MODULE_4__.useTranslatedEventData)(event);\n return {\n suggestions,\n payload\n };\n};\n\nconst ConversationSuggestions = _ref => {\n let {\n event\n } = _ref,\n props = _objectWithoutProperties(_ref, _excluded);\n\n const {\n t\n } = (0,_domains_i18n__WEBPACK_IMPORTED_MODULE_3__.useI18n)();\n const headingText = t('suggestions.headingText');\n const footerText = t('suggestions.footerText');\n const {\n sendAction,\n addMessageBubble\n } = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_6__.useSeamlyCommands)();\n const {\n suggestions,\n payload\n } = useSuggestions(event);\n const handleClick = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)(({\n id,\n question\n }) => {\n // @todo Refactor to 'suggestionclick'\n sendAction({\n type: _utils_seamly_utils__WEBPACK_IMPORTED_MODULE_2__.actionTypes.custom,\n originMessage: payload.id,\n body: {\n type: 'faqclick',\n body: {\n faqId: id,\n faqQuestion: question\n }\n }\n });\n addMessageBubble(question);\n }, [payload, sendAction, addMessageBubble]);\n return (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsxs)(\"div\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_1__.className)('suggestions', 'suggestions--conversation'),\n children: [headingText && (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsx)(\"h2\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_1__.className)('suggestions__heading'),\n children: headingText\n }), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsxs)(_message_container__WEBPACK_IMPORTED_MODULE_5__[\"default\"], _objectSpread(_objectSpread({\n type: \"suggestions\",\n showParticipant: false,\n event: event\n }, props), {}, {\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsx)(_suggestions_suggestions_list__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n className: \"suggestions__list--conversation\",\n onClickSuggestion: handleClick,\n suggestions: suggestions\n }), footerText && (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsx)(\"p\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_1__.className)('suggestions__footer'),\n children: footerText\n })]\n }))]\n });\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ConversationSuggestions);\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/conversation/event/conversation-suggestions.js?");
1291
+
1292
+ /***/ }),
1293
+
1283
1294
  /***/ "./src/javascripts/ui/components/conversation/event/cta.js":
1284
1295
  /*!*****************************************************************!*\
1285
1296
  !*** ./src/javascripts/ui/components/conversation/event/cta.js ***!
@@ -1375,18 +1386,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
1375
1386
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1376
1387
 
1377
1388
  "use strict";
1378
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"useFormattedDate\": () => (/* binding */ useFormattedDate)\n/* harmony export */ });\n/* harmony import */ var _domains_i18n__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../../domains/i18n */ \"./src/javascripts/domains/i18n/index.js\");\n/* harmony import */ var _utils_general_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../utils/general-utils */ \"./src/javascripts/ui/utils/general-utils.js\");\n/* harmony import */ var _domains_config__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../../domains/config */ \"./src/javascripts/domains/config/index.js\");\n\n\n\nconst dateFormatOptions = {\n month: 'long',\n day: 'numeric',\n year: 'numeric'\n};\nconst timeFormatOptions = {\n hour: 'numeric',\n minute: 'numeric'\n};\nconst useFormattedDate = date => {\n var _config$context;\n\n const {\n t\n } = (0,_domains_i18n__WEBPACK_IMPORTED_MODULE_0__.useI18n)();\n const config = (0,_domains_config__WEBPACK_IMPORTED_MODULE_2__.useConfig)();\n const locale = (config === null || config === void 0 ? void 0 : (_config$context = config.context) === null || _config$context === void 0 ? void 0 : _config$context.locale) ?? [];\n const eventDate = new Date(date);\n const currentDate = new Date();\n const midnight = new Date(currentDate);\n midnight.setHours(24, 0, 0, 0);\n const timeUntilMidnight = midnight - currentDate;\n const fullDateTime = eventDate.toString();\n const time = new Intl.DateTimeFormat(locale, timeFormatOptions).format(eventDate);\n let relativeDate = (0,_utils_general_utils__WEBPACK_IMPORTED_MODULE_1__.getRelativeDate)(eventDate, currentDate);\n\n switch (relativeDate) {\n case 'today':\n relativeDate = t('dateTime.today');\n break;\n\n case 'yesterday':\n relativeDate = t('dateTime.yesterday');\n break;\n\n default:\n relativeDate = new Intl.DateTimeFormat(locale, dateFormatOptions).format(eventDate);\n }\n\n const srText = t('dateTime.srText', {\n date: relativeDate,\n time\n });\n return {\n date: relativeDate,\n srText,\n time,\n fullDateTime,\n timeUntilMidnight\n };\n};\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/conversation/event/hooks/use-formatted-date.js?");
1379
-
1380
- /***/ }),
1381
-
1382
- /***/ "./src/javascripts/ui/components/conversation/event/hooks/use-text-rendering.js":
1383
- /*!**************************************************************************************!*\
1384
- !*** ./src/javascripts/ui/components/conversation/event/hooks/use-text-rendering.js ***!
1385
- \**************************************************************************************/
1386
- /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1387
-
1388
- "use strict";
1389
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"parseRichText\": () => (/* binding */ parseRichText)\n/* harmony export */ });\n/* harmony import */ var mustache__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! mustache */ \"./node_modules/mustache/mustache.mjs\");\n\n\nmustache__WEBPACK_IMPORTED_MODULE_0__[\"default\"].escape = function (escapeText) {\n return escapeText;\n};\n\nconst parseLinkVariable = variable => {\n return `<a href='${variable.url}' data-link-id='${variable.id}' ${variable.newTab ? 'target=\"_blank\"' : ''}>${variable.name}</a>`;\n};\n\nfunction parseRichText(text, variables = {}) {\n const view = {};\n Object.entries(variables).forEach(([key, variable]) => {\n switch (variable.type) {\n case 'link':\n view[key] = parseLinkVariable(variable);\n break;\n\n case 'text':\n view[key] = variable.value;\n break;\n }\n }, {}); // Disable escaping as we'll be generating HTML\n\n const oldEscape = mustache__WEBPACK_IMPORTED_MODULE_0__[\"default\"].escape;\n\n mustache__WEBPACK_IMPORTED_MODULE_0__[\"default\"].escape = function (escapeText) {\n return escapeText;\n };\n\n const output = mustache__WEBPACK_IMPORTED_MODULE_0__[\"default\"].render(text, view);\n mustache__WEBPACK_IMPORTED_MODULE_0__[\"default\"].escape = oldEscape;\n return output;\n}\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/conversation/event/hooks/use-text-rendering.js?");
1389
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"useFormattedDate\": () => (/* binding */ useFormattedDate)\n/* harmony export */ });\n/* harmony import */ var _domains_i18n__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../../domains/i18n */ \"./src/javascripts/domains/i18n/index.js\");\n/* harmony import */ var _utils_general_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../utils/general-utils */ \"./src/javascripts/ui/utils/general-utils.js\");\n/* harmony import */ var _domains_config__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../../domains/config */ \"./src/javascripts/domains/config/index.js\");\n\n\n\nconst dateFormatOptions = {\n month: 'long',\n day: 'numeric',\n year: 'numeric'\n};\nconst timeFormatOptions = {\n hour: 'numeric',\n minute: 'numeric'\n};\nconst useFormattedDate = date => {\n var _config$context$local, _config$context;\n\n const {\n t\n } = (0,_domains_i18n__WEBPACK_IMPORTED_MODULE_0__.useI18n)();\n const config = (0,_domains_config__WEBPACK_IMPORTED_MODULE_2__.useConfig)();\n const locale = (_config$context$local = config === null || config === void 0 ? void 0 : (_config$context = config.context) === null || _config$context === void 0 ? void 0 : _config$context.locale) !== null && _config$context$local !== void 0 ? _config$context$local : [];\n const eventDate = new Date(date);\n const currentDate = new Date();\n const midnight = new Date(currentDate);\n midnight.setHours(24, 0, 0, 0);\n const timeUntilMidnight = midnight - currentDate;\n const fullDateTime = eventDate.toString();\n const time = new Intl.DateTimeFormat(locale, timeFormatOptions).format(eventDate);\n let relativeDate = (0,_utils_general_utils__WEBPACK_IMPORTED_MODULE_1__.getRelativeDate)(eventDate, currentDate);\n\n switch (relativeDate) {\n case 'today':\n relativeDate = t('dateTime.today');\n break;\n\n case 'yesterday':\n relativeDate = t('dateTime.yesterday');\n break;\n\n default:\n relativeDate = new Intl.DateTimeFormat(locale, dateFormatOptions).format(eventDate);\n }\n\n const srText = t('dateTime.srText', {\n date: relativeDate,\n time\n });\n return {\n date: relativeDate,\n srText,\n time,\n fullDateTime,\n timeUntilMidnight\n };\n};\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/conversation/event/hooks/use-formatted-date.js?");
1390
1390
 
1391
1391
  /***/ }),
1392
1392
 
@@ -1419,7 +1419,18 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
1419
1419
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1420
1420
 
1421
1421
  "use strict";
1422
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact/hooks */ \"preact/hooks\");\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(preact_hooks__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var mustache__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! mustache */ \"./node_modules/mustache/mustache.mjs\");\n/* harmony import */ var _lib_parse_body__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../lib/parse-body */ \"./src/javascripts/lib/parse-body.js\");\n/* harmony import */ var _event_divider__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../event-divider */ \"./src/javascripts/ui/components/conversation/event-divider.js\");\n/* harmony import */ var _domains_translations__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../../domains/translations */ \"./src/javascripts/domains/translations/index.js\");\n/* harmony import */ var _domains_config__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../../domains/config */ \"./src/javascripts/domains/config/index.js\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__);\n\n\n\n\n\n\n\n\nconst Participant = ({\n event\n}) => {\n const {\n agentIcon\n } = (0,_domains_config__WEBPACK_IMPORTED_MODULE_5__.useConfig)().defaults || {};\n const {\n participant\n } = event.payload;\n const [introduction] = (0,_domains_translations__WEBPACK_IMPORTED_MODULE_4__.useTranslatedEventData)(event);\n const intro = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => {\n return introduction ? mustache__WEBPACK_IMPORTED_MODULE_1__[\"default\"].render((0,_lib_parse_body__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(introduction), participant) : undefined;\n }, [introduction, participant]);\n\n if (!intro) {\n return null;\n }\n\n const avatar = participant.avatar || agentIcon;\n return (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_event_divider__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n graphicSrc: avatar,\n graphicType: participant.avatar ? 'avatar' : undefined,\n iconName: !avatar ? 'balloon' : undefined,\n childrenHTML: intro,\n dividerType: \"participant\"\n });\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Participant);\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/conversation/event/participant.js?");
1422
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact/hooks */ \"preact/hooks\");\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(preact_hooks__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _lib_parse_body__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../lib/parse-body */ \"./src/javascripts/lib/parse-body.js\");\n/* harmony import */ var _event_divider__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../event-divider */ \"./src/javascripts/ui/components/conversation/event-divider.js\");\n/* harmony import */ var _domains_translations__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../../domains/translations */ \"./src/javascripts/domains/translations/index.js\");\n/* harmony import */ var _domains_config__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../../domains/config */ \"./src/javascripts/domains/config/index.js\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__);\n\n\n\n\n\n\n\nconst Participant = ({\n event\n}) => {\n const {\n agentIcon\n } = (0,_domains_config__WEBPACK_IMPORTED_MODULE_4__.useConfig)().defaults || {};\n const {\n participant\n } = event.payload;\n const [introduction] = (0,_domains_translations__WEBPACK_IMPORTED_MODULE_3__.useTranslatedEventData)(event);\n const intro = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => {\n return introduction ? (0,_lib_parse_body__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(introduction) : undefined;\n }, [introduction]);\n\n if (!intro) {\n return null;\n }\n\n const avatar = participant.avatar || agentIcon;\n return (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_event_divider__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n graphicSrc: avatar,\n graphicType: participant.avatar ? 'avatar' : undefined,\n iconName: !avatar ? 'balloon' : undefined,\n childrenHTML: intro,\n dividerType: \"participant\"\n });\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Participant);\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/conversation/event/participant.js?");
1423
+
1424
+ /***/ }),
1425
+
1426
+ /***/ "./src/javascripts/ui/components/conversation/event/splash.js":
1427
+ /*!********************************************************************!*\
1428
+ !*** ./src/javascripts/ui/components/conversation/event/splash.js ***!
1429
+ \********************************************************************/
1430
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1431
+
1432
+ "use strict";
1433
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _lib_parse_body__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../lib/parse-body */ \"./src/javascripts/lib/parse-body.js\");\n/* harmony import */ var _hooks_use_event_link_click_handler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./hooks/use-event-link-click-handler */ \"./src/javascripts/ui/components/conversation/event/hooks/use-event-link-click-handler.js\");\n/* harmony import */ var _message_container__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../message-container */ \"./src/javascripts/ui/components/conversation/message-container.js\");\n/* harmony import */ var _domains_translations__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../../domains/translations */ \"./src/javascripts/domains/translations/index.js\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__);\nconst _excluded = [\"event\"];\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n\n\n\n\n\n\nconst Splash = _ref => {\n let {\n event\n } = _ref,\n props = _objectWithoutProperties(_ref, _excluded);\n\n const {\n payload\n } = event;\n const [body] = (0,_domains_translations__WEBPACK_IMPORTED_MODULE_3__.useTranslatedEventData)(event);\n const eventClick = (0,_hooks_use_event_link_click_handler__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(payload.id);\n return (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_message_container__WEBPACK_IMPORTED_MODULE_2__[\"default\"], _objectSpread(_objectSpread({\n type: \"splash\",\n event: event,\n onClick: eventClick\n }, props), {}, {\n bodyProps: {\n dangerouslySetInnerHTML: {\n __html: (0,_lib_parse_body__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(body.text)\n }\n }\n }));\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Splash);\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/conversation/event/splash.js?");
1423
1434
 
1424
1435
  /***/ }),
1425
1436
 
@@ -1430,7 +1441,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
1430
1441
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1431
1442
 
1432
1443
  "use strict";
1433
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact/hooks */ \"preact/hooks\");\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(preact_hooks__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _lib_parse_body__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../lib/parse-body */ \"./src/javascripts/lib/parse-body.js\");\n/* harmony import */ var _hooks_use_event_link_click_handler__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./hooks/use-event-link-click-handler */ \"./src/javascripts/ui/components/conversation/event/hooks/use-event-link-click-handler.js\");\n/* harmony import */ var _hooks_use_text_rendering__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./hooks/use-text-rendering */ \"./src/javascripts/ui/components/conversation/event/hooks/use-text-rendering.js\");\n/* harmony import */ var _message_container__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../message-container */ \"./src/javascripts/ui/components/conversation/message-container.js\");\n/* harmony import */ var _domains_translations__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../../domains/translations */ \"./src/javascripts/domains/translations/index.js\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__);\nconst _excluded = [\"event\"];\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n\n\n\n\n\n\n\n\nconst Text = _ref => {\n let {\n event\n } = _ref,\n props = _objectWithoutProperties(_ref, _excluded);\n\n const [body] = (0,_domains_translations__WEBPACK_IMPORTED_MODULE_5__.useTranslatedEventData)(event);\n const eventClick = (0,_hooks_use_event_link_click_handler__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(event.payload.id);\n const containerProps = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => {\n if (!event.payload.fromClient) {\n return {\n bodyProps: {\n dangerouslySetInnerHTML: {\n __html: (0,_hooks_use_text_rendering__WEBPACK_IMPORTED_MODULE_3__.parseRichText)((0,_lib_parse_body__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(body.text), body.variables)\n }\n }\n };\n }\n\n return {\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(\"p\", {\n children: body.text\n })\n };\n }, [body, event]);\n return (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_message_container__WEBPACK_IMPORTED_MODULE_4__[\"default\"], _objectSpread(_objectSpread({\n type: \"text\",\n event: event,\n onClick: eventClick\n }, props), containerProps));\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Text);\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/conversation/event/text.js?");
1444
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact/hooks */ \"preact/hooks\");\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(preact_hooks__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _lib_parse_body__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../lib/parse-body */ \"./src/javascripts/lib/parse-body.js\");\n/* harmony import */ var _hooks_use_event_link_click_handler__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./hooks/use-event-link-click-handler */ \"./src/javascripts/ui/components/conversation/event/hooks/use-event-link-click-handler.js\");\n/* harmony import */ var _message_container__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../message-container */ \"./src/javascripts/ui/components/conversation/message-container.js\");\n/* harmony import */ var _domains_translations__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../../domains/translations */ \"./src/javascripts/domains/translations/index.js\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__);\nconst _excluded = [\"event\"];\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n\n\n\n\n\n\n\nconst Text = _ref => {\n let {\n event\n } = _ref,\n props = _objectWithoutProperties(_ref, _excluded);\n\n const [body] = (0,_domains_translations__WEBPACK_IMPORTED_MODULE_4__.useTranslatedEventData)(event);\n const eventClick = (0,_hooks_use_event_link_click_handler__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(event.payload.id);\n const containerProps = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => {\n if (!event.payload.fromClient) {\n return {\n bodyProps: {\n dangerouslySetInnerHTML: {\n __html: (0,_lib_parse_body__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(body.text)\n }\n }\n };\n }\n\n return {\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(\"p\", {\n children: body.text\n })\n };\n }, [body, event]);\n return (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_message_container__WEBPACK_IMPORTED_MODULE_3__[\"default\"], _objectSpread(_objectSpread({\n type: \"text\",\n event: event,\n onClick: eventClick\n }, props), containerProps));\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Text);\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/conversation/event/text.js?");
1434
1445
 
1435
1446
  /***/ }),
1436
1447
 
@@ -1529,7 +1540,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
1529
1540
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1530
1541
 
1531
1542
  "use strict";
1532
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact/hooks */ \"preact/hooks\");\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(preact_hooks__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _seamly_instance_functions_loader__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./seamly-instance-functions-loader */ \"./src/javascripts/ui/components/core/seamly-instance-functions-loader.js\");\n/* harmony import */ var _seamly_read_state__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./seamly-read-state */ \"./src/javascripts/ui/components/core/seamly-read-state.js\");\n/* harmony import */ var _seamly_new_notifications__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./seamly-new-notifications */ \"./src/javascripts/ui/components/core/seamly-new-notifications.js\");\n/* harmony import */ var _seamly_live_region__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./seamly-live-region */ \"./src/javascripts/ui/components/core/seamly-live-region.js\");\n/* harmony import */ var _seamly_idle_detach_counter__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./seamly-idle-detach-counter */ \"./src/javascripts/ui/components/core/seamly-idle-detach-counter.js\");\n/* harmony import */ var _seamly_activity_monitor__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./seamly-activity-monitor */ \"./src/javascripts/ui/components/core/seamly-activity-monitor.js\");\n/* harmony import */ var _seamly_initializer__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./seamly-initializer */ \"./src/javascripts/ui/components/core/seamly-initializer.js\");\n/* harmony import */ var _seamly_event_subscriber__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./seamly-event-subscriber */ \"./src/javascripts/ui/components/core/seamly-event-subscriber.js\");\n/* harmony import */ var _seamly_file_upload__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./seamly-file-upload */ \"./src/javascripts/ui/components/core/seamly-file-upload.js\");\n/* harmony import */ var _seamly_api_context__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./seamly-api-context */ \"./src/javascripts/ui/components/core/seamly-api-context.js\");\n/* harmony import */ var _domains_redux__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../../domains/redux */ \"./src/javascripts/domains/redux/index.js\");\n/* harmony import */ var _domains_errors__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../../domains/errors */ \"./src/javascripts/domains/errors/index.js\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__);\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst SeamlyCore = ({\n store,\n children,\n config,\n eventBus,\n api\n}) => {\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useErrorBoundary)(error => store.dispatch((0,_domains_errors__WEBPACK_IMPORTED_MODULE_12__.catchError)(error)));\n return (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsx)(_domains_redux__WEBPACK_IMPORTED_MODULE_11__.StoreProvider, {\n store: store,\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsx)(_seamly_api_context__WEBPACK_IMPORTED_MODULE_10__.SeamlyEventBusContext.Provider, {\n value: eventBus,\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsx)(_seamly_api_context__WEBPACK_IMPORTED_MODULE_10__.SeamlyApiContext.Provider, {\n value: api,\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsxs)(_seamly_live_region__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsx)(_seamly_initializer__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n config: config\n }), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsx)(_seamly_event_subscriber__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n eventBus: eventBus\n }), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsx)(_seamly_read_state__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {}), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsx)(_seamly_new_notifications__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {}), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsx)(_seamly_idle_detach_counter__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {}), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsxs)(_seamly_activity_monitor__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsx)(_seamly_instance_functions_loader__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {}), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsx)(_seamly_file_upload__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n children: children\n })]\n })]\n })\n })\n })\n });\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SeamlyCore);\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/core/seamly-core.js?");
1543
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact/hooks */ \"preact/hooks\");\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(preact_hooks__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _seamly_instance_functions_loader__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./seamly-instance-functions-loader */ \"./src/javascripts/ui/components/core/seamly-instance-functions-loader.js\");\n/* harmony import */ var _seamly_read_state__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./seamly-read-state */ \"./src/javascripts/ui/components/core/seamly-read-state.js\");\n/* harmony import */ var _seamly_new_notifications__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./seamly-new-notifications */ \"./src/javascripts/ui/components/core/seamly-new-notifications.js\");\n/* harmony import */ var _seamly_live_region__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./seamly-live-region */ \"./src/javascripts/ui/components/core/seamly-live-region.js\");\n/* harmony import */ var _seamly_idle_detach_counter__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./seamly-idle-detach-counter */ \"./src/javascripts/ui/components/core/seamly-idle-detach-counter.js\");\n/* harmony import */ var _seamly_activity_monitor__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./seamly-activity-monitor */ \"./src/javascripts/ui/components/core/seamly-activity-monitor.js\");\n/* harmony import */ var _seamly_initializer__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./seamly-initializer */ \"./src/javascripts/ui/components/core/seamly-initializer.js\");\n/* harmony import */ var _seamly_event_subscriber__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./seamly-event-subscriber */ \"./src/javascripts/ui/components/core/seamly-event-subscriber.js\");\n/* harmony import */ var _seamly_file_upload__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./seamly-file-upload */ \"./src/javascripts/ui/components/core/seamly-file-upload.js\");\n/* harmony import */ var _seamly_api_context__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./seamly-api-context */ \"./src/javascripts/ui/components/core/seamly-api-context.js\");\n/* harmony import */ var _domains_redux__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../../domains/redux */ \"./src/javascripts/domains/redux/index.js\");\n/* harmony import */ var _domains_errors__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../../domains/errors */ \"./src/javascripts/domains/errors/index.js\");\n/* harmony import */ var _conversation_component_filter__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../conversation/component-filter */ \"./src/javascripts/ui/components/conversation/component-filter.js\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_14___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__);\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst SeamlyCore = ({\n store,\n children,\n config,\n eventBus,\n api\n}) => {\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useErrorBoundary)(error => store.dispatch((0,_domains_errors__WEBPACK_IMPORTED_MODULE_12__.catchError)(error)));\n return (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_domains_redux__WEBPACK_IMPORTED_MODULE_11__.StoreProvider, {\n store: store,\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_seamly_api_context__WEBPACK_IMPORTED_MODULE_10__.SeamlyEventBusContext.Provider, {\n value: eventBus,\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_seamly_api_context__WEBPACK_IMPORTED_MODULE_10__.SeamlyApiContext.Provider, {\n value: api,\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_seamly_live_region__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxs)(_conversation_component_filter__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_seamly_initializer__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n config: config\n }), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_seamly_event_subscriber__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n eventBus: eventBus\n }), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_seamly_read_state__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {}), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_seamly_new_notifications__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {}), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_seamly_idle_detach_counter__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {}), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxs)(_seamly_activity_monitor__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_seamly_instance_functions_loader__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {}), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_seamly_file_upload__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n children: children\n })]\n })]\n })\n })\n })\n })\n });\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SeamlyCore);\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/core/seamly-core.js?");
1533
1544
 
1534
1545
  /***/ }),
1535
1546
 
@@ -1540,7 +1551,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
1540
1551
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1541
1552
 
1542
1553
  "use strict";
1543
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact/hooks */ \"preact/hooks\");\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(preact_hooks__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _utils_seamly_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../utils/seamly-utils */ \"./src/javascripts/ui/utils/seamly-utils.js\");\n/* harmony import */ var _domains_i18n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../domains/i18n */ \"./src/javascripts/domains/i18n/index.js\");\n/* harmony import */ var _hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../hooks/seamly-hooks */ \"./src/javascripts/ui/hooks/seamly-hooks.js\");\n/* harmony import */ var _api_errors_seamly_general_error__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../api/errors/seamly-general-error */ \"./src/javascripts/api/errors/seamly-general-error.js\");\n/* harmony import */ var _api_errors_seamly_session_expired_error__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../api/errors/seamly-session-expired-error */ \"./src/javascripts/api/errors/seamly-session-expired-error.js\");\n/* harmony import */ var _api_errors_seamly_offline_error__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../../api/errors/seamly-offline-error */ \"./src/javascripts/api/errors/seamly-offline-error.js\");\n/* harmony import */ var _domains_interrupt__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../../domains/interrupt */ \"./src/javascripts/domains/interrupt/index.js\");\n/* harmony import */ var _domains_app__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../../domains/app */ \"./src/javascripts/domains/app/index.js\");\nconst _excluded = [\"serviceSettings\"];\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n\n\n\n\n\n\n\n\n\nconst {\n ADD_EVENT,\n ACK_EVENT,\n SET_IS_LOADING,\n SET_PARTICIPANT,\n SET_HEADER_SUB_TITLE,\n SET_ACTIVE_SERVICE,\n INIT_RESUME_CONVERSATION_PROMPT,\n CLEAR_EVENTS,\n SET_SERVICE_DATA_ITEM,\n SET_FEATURE_ENABLED_STATE,\n SET_SERVICE_ENTRY_METADATA,\n SET_HISTORY\n} = _utils_seamly_utils__WEBPACK_IMPORTED_MODULE_1__.seamlyActions;\nconst EMITTABLE_MESSAGE_TYPES = ['text', 'choice_prompt', 'image', 'video'];\n\nconst SeamlyEventSubscriber = ({\n eventBus\n}) => {\n const {\n t\n } = (0,_domains_i18n__WEBPACK_IMPORTED_MODULE_2__.useI18n)();\n const api = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_3__.useSeamlyApiContext)();\n const dispatch = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_3__.useSeamlyDispatchContext)();\n const events = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_3__.useEvents)();\n const prevEmittedEventId = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n const {\n setUserSelectedOption\n } = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_3__.useSeamlyOptions)();\n const {\n initCountdown,\n endCountdown\n } = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_3__.useSeamlyIdleDetachCountdown)();\n const {\n emitEvent\n } = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_3__.useSeamlyCommands)();\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (api.connectionInfo) {\n const updateParticipant = event => {\n const {\n payload\n } = event;\n\n if (!payload || !payload.participant) {\n return;\n }\n\n const {\n fromClient,\n participant\n } = payload;\n\n if (!fromClient && participant.name) {\n dispatch({\n type: SET_HEADER_SUB_TITLE,\n title: participant.name\n });\n }\n\n dispatch({\n type: SET_PARTICIPANT,\n participant,\n fromClient\n });\n\n if (participant.introduction) {\n dispatch({\n type: ADD_EVENT,\n event\n });\n }\n };\n\n api.stream().subscribe({\n next: event => {\n const {\n type,\n payload\n } = event;\n\n switch (type) {\n case 'ui':\n if (payload.state && payload.state.hasOwnProperty('loading')) {\n dispatch({\n type: SET_IS_LOADING,\n isLoading: payload.state.loading\n });\n }\n\n switch (payload.type) {\n case 'idle_detach_countdown':\n initCountdown(payload.body.duration);\n break;\n\n case 'idle_detach_countdown_elapsed':\n endCountdown(undefined, true);\n break;\n\n case 'resume_conversation_prompt':\n dispatch({\n type: INIT_RESUME_CONVERSATION_PROMPT\n });\n break;\n\n case 'user_first_response':\n dispatch(_domains_app__WEBPACK_IMPORTED_MODULE_8__.Actions.setHasResponded(true));\n eventBus.emit('system.userFirstResponse', payload.body);\n break;\n }\n\n break;\n\n case 'message':\n updateParticipant(payload);\n\n switch (payload.type) {\n case 'text':\n case 'choice_prompt':\n case 'image':\n case 'upload':\n case 'video':\n case 'cta':\n case 'custom':\n case 'carousel':\n case 'card':\n if (payload.service && payload.service.serviceSessionId) {\n dispatch({\n type: SET_ACTIVE_SERVICE,\n activeServiceSessionId: payload.service.serviceSessionId\n });\n }\n\n dispatch({\n type: ADD_EVENT,\n event\n });\n break;\n }\n\n break;\n\n case 'participant':\n updateParticipant(event);\n break;\n\n case 'service_data':\n if (payload.persist) {\n dispatch({\n type: SET_SERVICE_DATA_ITEM,\n payload\n });\n }\n\n break;\n\n case 'ack':\n dispatch({\n type: ACK_EVENT,\n event\n });\n break;\n\n case 'system':\n if (payload.type === 'service_changed') {\n const {\n serviceSettings\n } = payload,\n eventPayload = _objectWithoutProperties(payload, _excluded);\n\n const {\n cobrowsing,\n uploads,\n entry\n } = serviceSettings;\n dispatch({\n type: SET_FEATURE_ENABLED_STATE,\n key: _utils_seamly_utils__WEBPACK_IMPORTED_MODULE_1__.featureKeys.cobrowsing,\n enabled: !!(cobrowsing && cobrowsing.enabled)\n });\n dispatch({\n type: SET_FEATURE_ENABLED_STATE,\n key: _utils_seamly_utils__WEBPACK_IMPORTED_MODULE_1__.featureKeys.uploads,\n enabled: !!(uploads && uploads.enabled)\n });\n setUserSelectedOption(_utils_seamly_utils__WEBPACK_IMPORTED_MODULE_1__.featureKeys.cobrowsing, false);\n dispatch({\n type: SET_SERVICE_ENTRY_METADATA,\n entryMeta: entry\n });\n dispatch({\n type: SET_ACTIVE_SERVICE,\n activeServiceSessionId: payload.serviceSessionId\n });\n emitEvent('system.serviceChanged', eventPayload);\n }\n\n break;\n\n case 'info':\n if (payload.type === 'divider' || payload.type === 'text' || payload.type === 'translation') {\n dispatch({\n type: ADD_EVENT,\n event\n });\n }\n\n break;\n\n case 'error':\n switch (payload.type) {\n case 'find_conversation_erred':\n dispatch(_domains_interrupt__WEBPACK_IMPORTED_MODULE_7__.Actions.set(new _api_errors_seamly_session_expired_error__WEBPACK_IMPORTED_MODULE_5__[\"default\"](event)));\n break;\n\n case 'seamly_offline':\n dispatch(_domains_interrupt__WEBPACK_IMPORTED_MODULE_7__.Actions.set(new _api_errors_seamly_offline_error__WEBPACK_IMPORTED_MODULE_6__[\"default\"](event)));\n dispatch({\n type: CLEAR_EVENTS\n });\n break;\n\n default:\n dispatch(_domains_interrupt__WEBPACK_IMPORTED_MODULE_7__.Actions.set(new _api_errors_seamly_general_error__WEBPACK_IMPORTED_MODULE_4__[\"default\"](event)));\n break;\n }\n\n break;\n\n case 'socket_opened':\n dispatch(_domains_interrupt__WEBPACK_IMPORTED_MODULE_7__.Actions.clear());\n break;\n }\n }\n });\n api.stream().filter(e => e.type === 'message' && EMITTABLE_MESSAGE_TYPES.includes(e.payload.type)).subscribe({\n next: ({\n payload\n }) => {\n // This check dedupes the sending of messages via\n // the bus if a duplicate connection exists in an\n // error situation.\n if (payload.id !== prevEmittedEventId.current) {\n eventBus.emit('message', payload);\n }\n\n prevEmittedEventId.current = payload.id;\n }\n });\n }\n }, [dispatch, api, eventBus, t, setUserSelectedOption, initCountdown, endCountdown, emitEvent]);\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n const subscribe = () => {\n return api.stream().filter(e => e.type === 'sync').subscribe({\n next: event => {\n const {\n payload\n } = event;\n const lastEvent = events[events.length - 1];\n const {\n id: payloadLastEventId\n } = payload.lastEvent;\n\n if (lastEvent && payloadLastEventId === lastEvent.payload.id) {\n return;\n }\n\n api.getConversation().then(history => {\n if (!history) {\n return;\n }\n\n dispatch({\n type: SET_HISTORY,\n history\n });\n }).catch(error => {\n dispatch(_domains_interrupt__WEBPACK_IMPORTED_MODULE_7__.Actions.set(error));\n });\n }\n });\n };\n\n if (api.stream) {\n const subscription = subscribe();\n return () => {\n subscription.unsubscribe();\n };\n }\n\n return () => {};\n }, [api, events, dispatch]);\n return null;\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SeamlyEventSubscriber);\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/core/seamly-event-subscriber.js?");
1554
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact/hooks */ \"preact/hooks\");\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(preact_hooks__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _utils_seamly_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../utils/seamly-utils */ \"./src/javascripts/ui/utils/seamly-utils.js\");\n/* harmony import */ var _domains_i18n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../domains/i18n */ \"./src/javascripts/domains/i18n/index.js\");\n/* harmony import */ var _hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../hooks/seamly-hooks */ \"./src/javascripts/ui/hooks/seamly-hooks.js\");\n/* harmony import */ var _api_errors_seamly_general_error__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../api/errors/seamly-general-error */ \"./src/javascripts/api/errors/seamly-general-error.js\");\n/* harmony import */ var _api_errors_seamly_session_expired_error__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../api/errors/seamly-session-expired-error */ \"./src/javascripts/api/errors/seamly-session-expired-error.js\");\n/* harmony import */ var _api_errors_seamly_offline_error__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../../api/errors/seamly-offline-error */ \"./src/javascripts/api/errors/seamly-offline-error.js\");\n/* harmony import */ var _domains_interrupt_actions__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../../domains/interrupt/actions */ \"./src/javascripts/domains/interrupt/actions.js\");\n/* harmony import */ var _domains_app_actions__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../../domains/app/actions */ \"./src/javascripts/domains/app/actions.js\");\nconst _excluded = [\"serviceSettings\"];\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n\n\n\n\n\n\n\n\n\nconst {\n ADD_EVENT,\n ACK_EVENT,\n SET_IS_LOADING,\n SET_PARTICIPANT,\n SET_HEADER_SUB_TITLE,\n SET_ACTIVE_SERVICE,\n INIT_RESUME_CONVERSATION_PROMPT,\n CLEAR_EVENTS,\n SET_SERVICE_DATA_ITEM,\n SET_FEATURE_ENABLED_STATE,\n SET_SERVICE_ENTRY_METADATA,\n SET_HISTORY\n} = _utils_seamly_utils__WEBPACK_IMPORTED_MODULE_1__.seamlyActions;\nconst EMITTABLE_MESSAGE_TYPES = ['text', 'choice_prompt', 'image', 'video'];\n\nconst SeamlyEventSubscriber = ({\n eventBus\n}) => {\n const {\n t\n } = (0,_domains_i18n__WEBPACK_IMPORTED_MODULE_2__.useI18n)();\n const api = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_3__.useSeamlyApiContext)();\n const dispatch = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_3__.useSeamlyDispatchContext)();\n const events = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_3__.useEvents)();\n const prevEmittedEventId = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n const {\n setUserSelectedOption\n } = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_3__.useSeamlyOptions)();\n const {\n initCountdown,\n endCountdown\n } = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_3__.useSeamlyIdleDetachCountdown)();\n const {\n emitEvent\n } = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_3__.useSeamlyCommands)();\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (api.connectionInfo) {\n const updateParticipant = event => {\n const {\n payload\n } = event;\n\n if (!payload || !payload.participant) {\n return;\n }\n\n const {\n fromClient,\n participant\n } = payload;\n\n if (!fromClient && participant.name) {\n dispatch({\n type: SET_HEADER_SUB_TITLE,\n title: participant.name\n });\n }\n\n dispatch({\n type: SET_PARTICIPANT,\n participant,\n fromClient\n });\n\n if (participant.introduction) {\n dispatch({\n type: ADD_EVENT,\n event\n });\n }\n };\n\n api.stream().subscribe({\n next: event => {\n const {\n type,\n payload\n } = event;\n\n switch (type) {\n case 'ui':\n if (payload.state && payload.state.hasOwnProperty('loading')) {\n dispatch({\n type: SET_IS_LOADING,\n isLoading: payload.state.loading\n });\n }\n\n switch (payload.type) {\n case 'idle_detach_countdown':\n initCountdown(payload.body.duration);\n break;\n\n case 'idle_detach_countdown_elapsed':\n endCountdown(undefined, true);\n break;\n\n case 'resume_conversation_prompt':\n dispatch({\n type: INIT_RESUME_CONVERSATION_PROMPT\n });\n break;\n\n case 'user_first_response':\n dispatch(_domains_app_actions__WEBPACK_IMPORTED_MODULE_8__.setHasResponded(true));\n eventBus.emit('system.userFirstResponse', payload.body);\n break;\n }\n\n break;\n\n case 'message':\n updateParticipant(payload);\n\n switch (payload.type) {\n case 'text':\n case 'choice_prompt':\n case 'splash':\n case 'image':\n case 'upload':\n case 'video':\n case 'cta':\n case 'custom':\n case 'carousel':\n case 'card':\n if (payload.service && payload.service.serviceSessionId) {\n dispatch({\n type: SET_ACTIVE_SERVICE,\n activeServiceSessionId: payload.service.serviceSessionId\n });\n }\n\n dispatch({\n type: ADD_EVENT,\n event\n });\n break;\n }\n\n break;\n\n case 'participant':\n updateParticipant(event);\n break;\n\n case 'service_data':\n if (payload.persist) {\n dispatch({\n type: SET_SERVICE_DATA_ITEM,\n payload\n });\n }\n\n break;\n\n case 'ack':\n dispatch({\n type: ACK_EVENT,\n event\n });\n break;\n\n case 'system':\n if (payload.type === 'service_changed') {\n const {\n serviceSettings\n } = payload,\n eventPayload = _objectWithoutProperties(payload, _excluded);\n\n const {\n uploads,\n entry\n } = serviceSettings;\n dispatch({\n type: SET_FEATURE_ENABLED_STATE,\n key: _utils_seamly_utils__WEBPACK_IMPORTED_MODULE_1__.featureKeys.uploads,\n enabled: !!(uploads && uploads.enabled)\n });\n dispatch({\n type: SET_SERVICE_ENTRY_METADATA,\n entryMeta: entry\n });\n dispatch({\n type: SET_ACTIVE_SERVICE,\n activeServiceSessionId: payload.serviceSessionId\n });\n emitEvent('system.serviceChanged', eventPayload);\n }\n\n break;\n\n case 'info':\n if (payload.type === 'divider' || payload.type === 'text' || payload.type === 'translation') {\n dispatch({\n type: ADD_EVENT,\n event\n });\n }\n\n break;\n\n case 'error':\n switch (payload.type) {\n case 'find_conversation_erred':\n dispatch(_domains_interrupt_actions__WEBPACK_IMPORTED_MODULE_7__.set(new _api_errors_seamly_session_expired_error__WEBPACK_IMPORTED_MODULE_5__[\"default\"](event)));\n break;\n\n case 'seamly_offline':\n dispatch(_domains_interrupt_actions__WEBPACK_IMPORTED_MODULE_7__.set(new _api_errors_seamly_offline_error__WEBPACK_IMPORTED_MODULE_6__[\"default\"](event)));\n dispatch({\n type: CLEAR_EVENTS\n });\n break;\n\n default:\n dispatch(_domains_interrupt_actions__WEBPACK_IMPORTED_MODULE_7__.set(new _api_errors_seamly_general_error__WEBPACK_IMPORTED_MODULE_4__[\"default\"](event)));\n break;\n }\n\n break;\n\n case 'socket_opened':\n dispatch(_domains_interrupt_actions__WEBPACK_IMPORTED_MODULE_7__.clear());\n break;\n }\n }\n });\n api.stream().filter(e => e.type === 'message' && EMITTABLE_MESSAGE_TYPES.includes(e.payload.type)).subscribe({\n next: ({\n payload\n }) => {\n // This check dedupes the sending of messages via\n // the bus if a duplicate connection exists in an\n // error situation.\n if (payload.id !== prevEmittedEventId.current) {\n eventBus.emit('message', payload);\n }\n\n prevEmittedEventId.current = payload.id;\n }\n });\n }\n }, [dispatch, api, eventBus, t, setUserSelectedOption, initCountdown, endCountdown, emitEvent]);\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n const subscribe = () => {\n return api.stream().filter(e => e.type === 'sync').subscribe({\n next: event => {\n const {\n payload\n } = event;\n const lastEvent = events[events.length - 1];\n const {\n id: payloadLastEventId\n } = payload.lastEvent;\n\n if (lastEvent && payloadLastEventId === lastEvent.payload.id) {\n return;\n }\n\n api.getConversation().then(history => {\n if (!history) {\n return;\n }\n\n dispatch({\n type: SET_HISTORY,\n history\n });\n }).catch(error => {\n dispatch(_domains_interrupt_actions__WEBPACK_IMPORTED_MODULE_7__.set(error));\n });\n }\n });\n };\n\n if (api.stream) {\n const subscription = subscribe();\n return () => {\n subscription.unsubscribe();\n };\n }\n\n return () => {};\n }, [api, events, dispatch]);\n return null;\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SeamlyEventSubscriber);\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/core/seamly-event-subscriber.js?");
1544
1555
 
1545
1556
  /***/ }),
1546
1557
 
@@ -1595,7 +1606,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
1595
1606
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1596
1607
 
1597
1608
  "use strict";
1598
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact/hooks */ \"preact/hooks\");\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(preact_hooks__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../hooks/seamly-hooks */ \"./src/javascripts/ui/hooks/seamly-hooks.js\");\n/* harmony import */ var _seamly_api_context__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./seamly-api-context */ \"./src/javascripts/ui/components/core/seamly-api-context.js\");\n/* harmony import */ var _domains_translations__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../domains/translations */ \"./src/javascripts/domains/translations/index.js\");\n/* harmony import */ var _domains_interrupt__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../domains/interrupt */ \"./src/javascripts/domains/interrupt/index.js\");\n/* harmony import */ var _domains_config__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../domains/config */ \"./src/javascripts/domains/config/index.js\");\n/* harmony import */ var _domains_visibility__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../../domains/visibility */ \"./src/javascripts/domains/visibility/index.js\");\n\n\n\n\n\n\n\n\nfunction useSeamlyInstanceFunction(functionName, fn, deps = []) {\n const eventBus = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useContext)(_seamly_api_context__WEBPACK_IMPORTED_MODULE_2__.SeamlyEventBusContext);\n const callbackRef = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)();\n callbackRef.current = fn;\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (!deps.every(Boolean)) {\n return undefined;\n }\n\n const callback = (...args) => {\n var _callbackRef$current;\n\n return (_callbackRef$current = callbackRef.current) === null || _callbackRef$current === void 0 ? void 0 : _callbackRef$current.call(callbackRef, ...args);\n };\n\n eventBus.emit('function.register', functionName, callback);\n return () => eventBus.emit('function.unregister', functionName, callback); // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [eventBus, functionName, ...deps]);\n}\n\nconst SeamlyInstanceFunctionsLoader = () => {\n const config = (0,_domains_config__WEBPACK_IMPORTED_MODULE_5__.useConfig)();\n const {\n sendMessage,\n sendContext,\n sendAction\n } = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_1__.useSeamlyCommands)();\n const {\n setVisibility,\n visible\n } = (0,_domains_visibility__WEBPACK_IMPORTED_MODULE_6__.useVisibility)();\n const currentVisibility = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)(visible);\n const eventBus = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useContext)(_seamly_api_context__WEBPACK_IMPORTED_MODULE_2__.SeamlyEventBusContext);\n const api = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_1__.useSeamlyApiContext)();\n const unreadCount = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_1__.useSeamlyUnreadCount)();\n const previousUnreadCount = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n const previousVisibilityState = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n const {\n isInline,\n isResolving\n } = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_1__.useSeamlyLayoutMode)();\n const {\n hasInterrupt\n } = (0,_domains_interrupt__WEBPACK_IMPORTED_MODULE_4__.useInterrupt)();\n const currentConversationUrl = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_1__.useSeamlyConversationUrl)();\n const prevConversationUrl = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n const onActivityHandler = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_1__.useSeamlyActivityEventHandler)();\n const {\n enableTranslations,\n disableTranslations\n } = (0,_domains_translations__WEBPACK_IMPORTED_MODULE_3__.useTranslations)();\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n currentVisibility.current = visible;\n }, [visible]);\n useSeamlyInstanceFunction('askText', text => {\n sendMessage({\n body: text\n });\n }, [api === null || api === void 0 ? void 0 : api.send]);\n useSeamlyInstanceFunction('setVariables', variables => {\n sendContext({\n variables\n });\n }, [api === null || api === void 0 ? void 0 : api.send]);\n useSeamlyInstanceFunction('getVisibility', callback => {\n if (callback) {\n callback(currentVisibility.current);\n } else {\n console.warn('A callback function is required for the getVisibility action.');\n }\n });\n useSeamlyInstanceFunction('setVisibility', visibilityState => {\n if (!Object.values(_domains_visibility__WEBPACK_IMPORTED_MODULE_6__.visibilityStates).includes(visibilityState)) {\n console.error('Requested visibility states should be \"open\", \"minimized\" ,\"hidden\" or null.');\n return;\n }\n\n onActivityHandler();\n\n if (config.layoutMode === 'inline' && visibilityState === _domains_visibility__WEBPACK_IMPORTED_MODULE_6__.visibilityStates.minimized) {\n console.warn('Inline chat windows cannot be minimized.');\n } else {\n setVisibility(visibilityState);\n }\n }, [config === null || config === void 0 ? void 0 : config.api]);\n useSeamlyInstanceFunction('sendCustomAction', (actionType, body) => {\n sendAction({\n type: 'custom',\n body: {\n type: actionType,\n body\n }\n });\n }, [api.send]);\n useSeamlyInstanceFunction('setTopic', ({\n name,\n fallbackMessage\n }) => {\n if (name && fallbackMessage) {\n sendAction({\n type: 'set_topic',\n body: {\n name,\n fallbackMessage\n }\n });\n } else {\n console.warn('A name and a fallbackMessage are required for the setTopic action.');\n }\n }, [api.send]);\n useSeamlyInstanceFunction('setTranslation', ({\n enabled,\n locale\n }) => {\n if (enabled) {\n enableTranslations(locale);\n } else {\n disableTranslations();\n }\n }, [api.send]);\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (!isResolving && !hasInterrupt) {\n // Check for app reset\n if (prevConversationUrl.current && prevConversationUrl.current !== currentConversationUrl) {\n eventBus.emit('unreadMessageCount', unreadCount);\n } // Broadcast once on window open\n\n\n if (visible === _domains_visibility__WEBPACK_IMPORTED_MODULE_6__.visibilityStates.open && visible !== previousVisibilityState.current) {\n if (previousUnreadCount.current !== 0) {\n eventBus.emit('unreadMessageCount', 0);\n }\n }\n\n if (visible !== _domains_visibility__WEBPACK_IMPORTED_MODULE_6__.visibilityStates.open && unreadCount !== previousUnreadCount.current) {\n eventBus.emit('unreadMessageCount', unreadCount);\n }\n\n previousVisibilityState.current = visible;\n previousUnreadCount.current = unreadCount;\n prevConversationUrl.current = currentConversationUrl;\n }\n }, [unreadCount, visible, eventBus, isInline, isResolving, hasInterrupt, currentConversationUrl]);\n return null;\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SeamlyInstanceFunctionsLoader);\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/core/seamly-instance-functions-loader.js?");
1609
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact/hooks */ \"preact/hooks\");\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(preact_hooks__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../hooks/seamly-hooks */ \"./src/javascripts/ui/hooks/seamly-hooks.js\");\n/* harmony import */ var _seamly_api_context__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./seamly-api-context */ \"./src/javascripts/ui/components/core/seamly-api-context.js\");\n/* harmony import */ var _domains_translations__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../domains/translations */ \"./src/javascripts/domains/translations/index.js\");\n/* harmony import */ var _domains_interrupt__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../domains/interrupt */ \"./src/javascripts/domains/interrupt/index.js\");\n/* harmony import */ var _domains_config__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../domains/config */ \"./src/javascripts/domains/config/index.js\");\n/* harmony import */ var _domains_visibility__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../../domains/visibility */ \"./src/javascripts/domains/visibility/index.js\");\n\n\n\n\n\n\n\n\nfunction useSeamlyInstanceFunction(functionName, fn, deps = []) {\n const eventBus = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useContext)(_seamly_api_context__WEBPACK_IMPORTED_MODULE_2__.SeamlyEventBusContext);\n const callbackRef = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)();\n callbackRef.current = fn;\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (!deps.every(Boolean)) {\n return undefined;\n }\n\n const callback = (...args) => {\n var _callbackRef$current;\n\n return (_callbackRef$current = callbackRef.current) === null || _callbackRef$current === void 0 ? void 0 : _callbackRef$current.call(callbackRef, ...args);\n };\n\n eventBus.emit('function.register', functionName, callback);\n return () => eventBus.emit('function.unregister', functionName, callback); // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [eventBus, functionName, ...deps]);\n}\n\nconst SeamlyInstanceFunctionsLoader = () => {\n const config = (0,_domains_config__WEBPACK_IMPORTED_MODULE_5__.useConfig)();\n const {\n sendMessage,\n sendContext,\n sendAction\n } = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_1__.useSeamlyCommands)();\n const {\n setVisibility,\n visible\n } = (0,_domains_visibility__WEBPACK_IMPORTED_MODULE_6__.useVisibility)();\n const currentVisibility = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)(visible);\n const eventBus = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useContext)(_seamly_api_context__WEBPACK_IMPORTED_MODULE_2__.SeamlyEventBusContext);\n const api = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_1__.useSeamlyApiContext)();\n const unreadCount = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_1__.useSeamlyUnreadCount)();\n const previousUnreadCount = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n const previousVisibilityState = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n const {\n isInline,\n isResolving\n } = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_1__.useSeamlyLayoutMode)();\n const {\n hasInterrupt\n } = (0,_domains_interrupt__WEBPACK_IMPORTED_MODULE_4__.useInterrupt)();\n const currentConversationUrl = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_1__.useSeamlyConversationUrl)();\n const prevConversationUrl = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n const onActivityHandler = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_1__.useSeamlyActivityEventHandler)();\n const {\n enableTranslations,\n disableTranslations\n } = (0,_domains_translations__WEBPACK_IMPORTED_MODULE_3__.useTranslations)();\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n currentVisibility.current = visible;\n }, [visible]);\n useSeamlyInstanceFunction('askText', text => {\n sendMessage({\n body: text\n });\n }, [api === null || api === void 0 ? void 0 : api.send]);\n useSeamlyInstanceFunction('setVariables', variables => {\n sendContext({\n variables\n });\n }, [api === null || api === void 0 ? void 0 : api.send]);\n useSeamlyInstanceFunction('getVisibility', callback => {\n if (callback) {\n callback(currentVisibility.current);\n } else {\n console.warn('A callback function is required for the getVisibility action.');\n }\n });\n useSeamlyInstanceFunction('setVisibility', visibilityState => {\n if (!Object.values(_domains_visibility__WEBPACK_IMPORTED_MODULE_6__.visibilityStates).includes(visibilityState)) {\n console.error('Requested visibility states should be \"open\", \"minimized\" ,\"hidden\" or null.');\n return;\n }\n\n onActivityHandler();\n setVisibility(visibilityState);\n }, [config === null || config === void 0 ? void 0 : config.api]);\n useSeamlyInstanceFunction('sendCustomAction', (actionType, body) => {\n sendAction({\n type: 'custom',\n body: {\n type: actionType,\n body\n }\n });\n }, [api.send]);\n useSeamlyInstanceFunction('setTopic', ({\n name,\n fallbackMessage\n }) => {\n if (name && fallbackMessage) {\n sendAction({\n type: 'set_topic',\n body: {\n name,\n fallbackMessage\n }\n });\n } else {\n console.warn('A name and a fallbackMessage are required for the setTopic action.');\n }\n }, [api.send]);\n useSeamlyInstanceFunction('setTranslation', ({\n enabled,\n locale\n }) => {\n if (enabled) {\n enableTranslations(locale);\n } else {\n disableTranslations();\n }\n }, [api.send]);\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (!isResolving && !hasInterrupt) {\n // Check for app reset\n if (prevConversationUrl.current && prevConversationUrl.current !== currentConversationUrl) {\n eventBus.emit('unreadMessageCount', unreadCount);\n } // Broadcast once on window open\n\n\n if (visible === _domains_visibility__WEBPACK_IMPORTED_MODULE_6__.visibilityStates.open && visible !== previousVisibilityState.current) {\n if (previousUnreadCount.current !== 0) {\n eventBus.emit('unreadMessageCount', 0);\n }\n }\n\n if (visible !== _domains_visibility__WEBPACK_IMPORTED_MODULE_6__.visibilityStates.open && unreadCount !== previousUnreadCount.current) {\n eventBus.emit('unreadMessageCount', unreadCount);\n }\n\n previousVisibilityState.current = visible;\n previousUnreadCount.current = unreadCount;\n prevConversationUrl.current = currentConversationUrl;\n }\n }, [unreadCount, visible, eventBus, isInline, isResolving, hasInterrupt, currentConversationUrl]);\n return null;\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SeamlyInstanceFunctionsLoader);\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/core/seamly-instance-functions-loader.js?");
1599
1610
 
1600
1611
  /***/ }),
1601
1612
 
@@ -1650,7 +1661,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
1650
1661
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1651
1662
 
1652
1663
  "use strict";
1653
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact/hooks */ \"preact/hooks\");\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(preact_hooks__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _lib_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../lib/css */ \"./src/javascripts/lib/css.js\");\n/* harmony import */ var _hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../hooks/seamly-hooks */ \"./src/javascripts/ui/hooks/seamly-hooks.js\");\n/* harmony import */ var _utils_seamly_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../utils/seamly-utils */ \"./src/javascripts/ui/utils/seamly-utils.js\");\n/* harmony import */ var _utils_general_utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../utils/general-utils */ \"./src/javascripts/ui/utils/general-utils.js\");\n/* harmony import */ var _warnings_idle_detach_warning__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../warnings/idle-detach-warning */ \"./src/javascripts/ui/components/warnings/idle-detach-warning.js\");\n/* harmony import */ var _warnings_resume_conversation_prompt__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../warnings/resume-conversation-prompt */ \"./src/javascripts/ui/components/warnings/resume-conversation-prompt.js\");\n/* harmony import */ var _text_entry__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./text-entry */ \"./src/javascripts/ui/components/entry/text-entry/index.js\");\n/* harmony import */ var _upload_toggle__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./upload-toggle */ \"./src/javascripts/ui/components/entry/upload-toggle.js\");\n/* harmony import */ var _upload__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./upload */ \"./src/javascripts/ui/components/entry/upload/index.js\");\n/* harmony import */ var _domains_config__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../../domains/config */ \"./src/javascripts/domains/config/index.js\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_11__);\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst EntryContainer = () => {\n const entryContainer = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n const {\n hasCountdown\n } = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_2__.useSeamlyIdleDetachCountdown)();\n const [showCountdown, setShowCountDown] = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useState)(hasCountdown);\n const {\n hasPrompt: hasResumeConversationPrompt\n } = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_2__.useSeamlyResumeConversationPrompt)();\n const [showResumeConversationPrompt, setShowResumeConversationPrompt] = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useState)(hasResumeConversationPrompt);\n const focusSkiplinkTarget = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_2__.useSkiplinkTargetFocusing)();\n const containedFocus = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)(false);\n const {\n activeEntry\n } = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_2__.useSeamlyEntry)();\n const [entryComponents, setEntryComponents] = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useState)({\n text: _text_entry__WEBPACK_IMPORTED_MODULE_7__[\"default\"],\n upload: _upload__WEBPACK_IMPORTED_MODULE_9__[\"default\"]\n });\n const [renderEntry, setRenderEntry] = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useState)(() => activeEntry);\n const config = (0,_domains_config__WEBPACK_IMPORTED_MODULE_10__.useConfig)();\n const {\n accountAllowsUploads\n } = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_2__.useFileUploadMeta)();\n const focusFn = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {\n (0,_utils_general_utils__WEBPACK_IMPORTED_MODULE_4__.runIfElementContainsOrHasFocus)(entryContainer.current, () => {\n focusSkiplinkTarget();\n });\n }, [focusSkiplinkTarget]);\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n const {\n customComponents\n } = config;\n const {\n entry\n } = customComponents || {};\n\n if (entry) {\n setEntryComponents(c => _objectSpread(_objectSpread({}, c), entry));\n }\n }, [config]);\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n // Focus the current target of the skip link if focus was inside the\n // container before this effect change.\n focusFn();\n setShowCountDown(hasCountdown);\n setShowResumeConversationPrompt(hasResumeConversationPrompt);\n }, [hasCountdown, hasResumeConversationPrompt, focusFn]);\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n setRenderEntry(activeEntry); // This focus action is required for auto entry changes. User driven\n // changes should be handled in the originating components.\n\n focusFn();\n }, [activeEntry, focusFn, entryContainer]); // Check if the active element is inside this container and save it.\n\n containedFocus.current = !!(entryContainer.current && entryContainer.current.contains(document.activeElement));\n const EntryComponent = entryComponents[renderEntry];\n return (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_11__.jsxs)(\"div\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_1__.className)('app__entry'),\n ref: entryContainer,\n children: [showCountdown && (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_11__.jsx)(_warnings_idle_detach_warning__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {}), showResumeConversationPrompt && (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_11__.jsx)(_warnings_resume_conversation_prompt__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {}), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_11__.jsxs)(\"div\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_1__.className)(['entry__body', ...(hasCountdown || hasResumeConversationPrompt ? ['entry__body--hidden'] : [])]),\n children: [renderEntry !== _utils_seamly_utils__WEBPACK_IMPORTED_MODULE_3__.entryTypes.upload && accountAllowsUploads && (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_11__.jsx)(_upload_toggle__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {}), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_11__.jsx)(EntryComponent, {})]\n })]\n });\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (EntryContainer);\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/entry/entry-container.js?");
1664
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact/hooks */ \"preact/hooks\");\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(preact_hooks__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _lib_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../lib/css */ \"./src/javascripts/lib/css.js\");\n/* harmony import */ var _hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../hooks/seamly-hooks */ \"./src/javascripts/ui/hooks/seamly-hooks.js\");\n/* harmony import */ var _utils_seamly_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../utils/seamly-utils */ \"./src/javascripts/ui/utils/seamly-utils.js\");\n/* harmony import */ var _utils_general_utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../utils/general-utils */ \"./src/javascripts/ui/utils/general-utils.js\");\n/* harmony import */ var _warnings_idle_detach_warning__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../warnings/idle-detach-warning */ \"./src/javascripts/ui/components/warnings/idle-detach-warning.js\");\n/* harmony import */ var _warnings_resume_conversation_prompt__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../warnings/resume-conversation-prompt */ \"./src/javascripts/ui/components/warnings/resume-conversation-prompt.js\");\n/* harmony import */ var _text_entry__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./text-entry */ \"./src/javascripts/ui/components/entry/text-entry/index.js\");\n/* harmony import */ var _upload_toggle__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./upload-toggle */ \"./src/javascripts/ui/components/entry/upload-toggle.js\");\n/* harmony import */ var _upload__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./upload */ \"./src/javascripts/ui/components/entry/upload/index.js\");\n/* harmony import */ var _domains_config__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../../domains/config */ \"./src/javascripts/domains/config/index.js\");\n/* harmony import */ var _domains_visibility__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../../domains/visibility */ \"./src/javascripts/domains/visibility/index.js\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__);\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst EntryContainer = () => {\n const {\n isOpen\n } = (0,_domains_visibility__WEBPACK_IMPORTED_MODULE_11__.useVisibility)();\n const entryContainer = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n const {\n hasCountdown\n } = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_2__.useSeamlyIdleDetachCountdown)();\n const [showCountdown, setShowCountDown] = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useState)(hasCountdown);\n const {\n hasPrompt: hasResumeConversationPrompt\n } = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_2__.useSeamlyResumeConversationPrompt)();\n const [showResumeConversationPrompt, setShowResumeConversationPrompt] = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useState)(hasResumeConversationPrompt);\n const focusSkiplinkTarget = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_2__.useSkiplinkTargetFocusing)();\n const containedFocus = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)(false);\n const {\n activeEntry\n } = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_2__.useSeamlyEntry)();\n const [entryComponents, setEntryComponents] = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useState)({\n text: _text_entry__WEBPACK_IMPORTED_MODULE_7__[\"default\"],\n upload: _upload__WEBPACK_IMPORTED_MODULE_9__[\"default\"]\n });\n const [renderEntry, setRenderEntry] = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useState)(() => activeEntry);\n const config = (0,_domains_config__WEBPACK_IMPORTED_MODULE_10__.useConfig)();\n const {\n accountAllowsUploads\n } = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_2__.useFileUploadMeta)();\n const focusFn = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {\n (0,_utils_general_utils__WEBPACK_IMPORTED_MODULE_4__.runIfElementContainsOrHasFocus)(entryContainer.current, () => {\n focusSkiplinkTarget();\n });\n }, [focusSkiplinkTarget]);\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n const {\n customComponents\n } = config;\n const {\n entry\n } = customComponents || {};\n\n if (entry) {\n setEntryComponents(c => _objectSpread(_objectSpread({}, c), entry));\n }\n }, [config]);\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n // Focus the current target of the skip link if focus was inside the\n // container before this effect change.\n focusFn();\n setShowCountDown(hasCountdown);\n setShowResumeConversationPrompt(hasResumeConversationPrompt);\n }, [hasCountdown, hasResumeConversationPrompt, focusFn]);\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n setRenderEntry(activeEntry); // This focus action is required for auto entry changes. User driven\n // changes should be handled in the originating components.\n\n focusFn();\n }, [activeEntry, focusFn, entryContainer]); // Check if the active element is inside this container and save it.\n\n containedFocus.current = !!(entryContainer.current && entryContainer.current.contains(document.activeElement));\n const EntryComponent = entryComponents[renderEntry];\n return (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsxs)(\"div\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_1__.className)('app__entry'),\n ref: entryContainer,\n children: [showCountdown && (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)(_warnings_idle_detach_warning__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {}), showResumeConversationPrompt && (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)(_warnings_resume_conversation_prompt__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {}), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsxs)(\"div\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_1__.className)(['entry__body', ...(hasCountdown || hasResumeConversationPrompt ? ['entry__body--hidden'] : [])]),\n children: [renderEntry !== _utils_seamly_utils__WEBPACK_IMPORTED_MODULE_3__.entryTypes.upload && accountAllowsUploads && isOpen && (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)(_upload_toggle__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {}), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)(EntryComponent, {})]\n })]\n });\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (EntryContainer);\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/entry/entry-container.js?");
1654
1665
 
1655
1666
  /***/ }),
1656
1667
 
@@ -1672,7 +1683,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
1672
1683
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1673
1684
 
1674
1685
  "use strict";
1675
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ TextEntry)\n/* harmony export */ });\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact/hooks */ \"preact/hooks\");\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(preact_hooks__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../hooks/seamly-hooks */ \"./src/javascripts/ui/hooks/seamly-hooks.js\");\n/* harmony import */ var _domains_forms__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../domains/forms */ \"./src/javascripts/domains/forms/index.js\");\n/* harmony import */ var _text_entry_form__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./text-entry-form */ \"./src/javascripts/ui/components/entry/text-entry/text-entry-form.js\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__);\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\n\n\n\n\n\nconst controlName = 'userText';\nfunction TextEntry(_ref) {\n let props = _extends({}, _ref);\n\n const skipLinkId = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_1__.useSkiplink)();\n const focusSkipLinkTarget = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_1__.useSkiplinkTargetFocusing)();\n const {\n sendMessage\n } = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_1__.useSeamlyCommands)();\n const handleSubmit = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)((values, {\n updateControlValue\n }) => {\n sendMessage({\n body: values[controlName]\n });\n updateControlValue(controlName, '');\n focusSkipLinkTarget();\n }, [sendMessage, focusSkipLinkTarget]);\n return (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_domains_forms__WEBPACK_IMPORTED_MODULE_2__.FormProvider, _objectSpread(_objectSpread({}, props), {}, {\n formId: \"textEntry\",\n persistData: true,\n onSubmit: handleSubmit,\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_text_entry_form__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n controlName: controlName,\n skipLinkId: skipLinkId\n })\n }));\n}\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/entry/text-entry/index.js?");
1686
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ TextEntry)\n/* harmony export */ });\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact/hooks */ \"preact/hooks\");\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(preact_hooks__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../hooks/seamly-hooks */ \"./src/javascripts/ui/hooks/seamly-hooks.js\");\n/* harmony import */ var _domains_forms__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../domains/forms */ \"./src/javascripts/domains/forms/index.js\");\n/* harmony import */ var _text_entry_form__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./text-entry-form */ \"./src/javascripts/ui/components/entry/text-entry/text-entry-form.js\");\n/* harmony import */ var _domains_visibility__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../../domains/visibility */ \"./src/javascripts/domains/visibility/index.js\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__);\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\n\n\n\n\n\n\nconst controlName = 'userText';\nfunction TextEntry(_ref) {\n let props = _extends({}, _ref);\n\n const {\n isOpen,\n setVisibility\n } = (0,_domains_visibility__WEBPACK_IMPORTED_MODULE_4__.useVisibility)();\n const skipLinkId = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_1__.useSkiplink)();\n const focusSkipLinkTarget = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_1__.useSkiplinkTargetFocusing)();\n const {\n sendMessage\n } = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_1__.useSeamlyCommands)();\n const handleSubmit = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)((values, {\n updateControlValue\n }) => {\n sendMessage({\n body: values[controlName]\n });\n updateControlValue(controlName, '');\n focusSkipLinkTarget();\n\n if (!isOpen) {\n setVisibility(_domains_visibility__WEBPACK_IMPORTED_MODULE_4__.visibilityStates.open);\n }\n }, [sendMessage, focusSkipLinkTarget, isOpen, setVisibility]);\n return (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_domains_forms__WEBPACK_IMPORTED_MODULE_2__.FormProvider, _objectSpread(_objectSpread({}, props), {}, {\n formId: \"textEntry\",\n persistData: true,\n onSubmit: handleSubmit,\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_text_entry_form__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n controlName: controlName,\n skipLinkId: skipLinkId\n })\n }));\n}\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/entry/text-entry/index.js?");
1676
1687
 
1677
1688
  /***/ }),
1678
1689
 
@@ -1683,7 +1694,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
1683
1694
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1684
1695
 
1685
1696
  "use strict";
1686
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ TextEntryForm)\n/* harmony export */ });\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact/hooks */ \"preact/hooks\");\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(preact_hooks__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _lib_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../lib/css */ \"./src/javascripts/lib/css.js\");\n/* harmony import */ var _hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../hooks/seamly-hooks */ \"./src/javascripts/ui/hooks/seamly-hooks.js\");\n/* harmony import */ var _layout_icon__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../layout/icon */ \"./src/javascripts/ui/components/layout/icon.js\");\n/* harmony import */ var _domains_forms__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../../domains/forms */ \"./src/javascripts/domains/forms/index.js\");\n/* harmony import */ var _form_controls_form__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../form-controls/form */ \"./src/javascripts/ui/components/form-controls/form.js\");\n/* harmony import */ var _form_controls_input__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../form-controls/input */ \"./src/javascripts/ui/components/form-controls/input.js\");\n/* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./hooks */ \"./src/javascripts/ui/components/entry/text-entry/hooks.js\");\n/* harmony import */ var _domains_i18n__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../../../domains/i18n */ \"./src/javascripts/domains/i18n/index.js\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__);\n\n\n\n\n\n\n\n\n\n\n\nfunction TextEntryForm({\n controlName,\n skipLinkId\n}) {\n const {\n t\n } = (0,_domains_i18n__WEBPACK_IMPORTED_MODULE_8__.useI18n)();\n const {\n sendAssertive\n } = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_2__.useLiveRegion)();\n const {\n emitEvent\n } = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_2__.useSeamlyCommands)();\n const handleKeyUp = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_2__.useSeamlyTyping)();\n const {\n setBlockAutoEntrySwitch\n } = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_2__.useSeamlyEntry)(); // TODO: Standardize the validation on form fields\n\n const {\n hasCharacterLimit,\n characterLimit,\n reachedCharacterWarning,\n reachedCharacterLimit,\n remainingChars\n } = (0,_hooks__WEBPACK_IMPORTED_MODULE_7__.useCharacterLimit)(controlName);\n const [{\n value\n }] = (0,_domains_forms__WEBPACK_IMPORTED_MODULE_4__.useFormControl)(controlName);\n const hasValue = !!value;\n const handleFocus = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {\n if (reachedCharacterWarning) {\n sendAssertive(t('input.srCharacterLimitText', {\n limit: remainingChars\n }));\n }\n\n emitEvent('ui.inputFocus');\n }, [t, sendAssertive, reachedCharacterWarning, remainingChars, emitEvent]);\n const placeholder = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => t('input.inputPlaceholder', {\n hasLimit: hasCharacterLimit,\n limit: hasCharacterLimit ? characterLimit : null\n }), [t, hasCharacterLimit, characterLimit]);\n const labelText = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => t('input.inputLabel', {\n hasLimit: hasCharacterLimit,\n limit: hasCharacterLimit ? characterLimit : null\n }), [t, hasCharacterLimit, characterLimit]); // When the input holds a value, the component should be blocked from switching\n // to file upload form.\n\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect)(() => {\n setBlockAutoEntrySwitch(hasValue);\n return () => {\n setBlockAutoEntrySwitch(false);\n };\n }, [setBlockAutoEntrySwitch, hasValue]);\n return (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxs)(_form_controls_form__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_1__.className)('input', 'input--text'),\n noValidate: \"true\",\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxs)(\"div\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_1__.className)(['input--text__container', ...(reachedCharacterWarning && !reachedCharacterLimit ? ['character-warning'] : []), ...(reachedCharacterLimit ? ['character-exceeded'] : [])]),\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsx)(_form_controls_input__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n id: skipLinkId,\n type: \"text\",\n name: controlName,\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_1__.className)('input__text'),\n autocomplete: \"off\",\n placeholder: placeholder,\n labelText: labelText,\n labelClass: (0,_lib_css__WEBPACK_IMPORTED_MODULE_1__.className)('visually-hidden'),\n \"aria-invalid\": hasCharacterLimit ? reachedCharacterLimit : null,\n onKeyUp: handleKeyUp,\n onFocus: handleFocus\n }), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsx)(\"div\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_1__.className)('character-count'),\n children: reachedCharacterWarning && (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsx)(\"span\", {\n children: remainingChars\n })\n })]\n }), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsx)(\"button\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_1__.className)('button', 'input__submit'),\n type: \"submit\",\n disabled: !hasValue || reachedCharacterLimit,\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsx)(_layout_icon__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n name: \"send\",\n size: \"32\",\n alt: t('input.sendMessage')\n })\n })]\n });\n}\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/entry/text-entry/text-entry-form.js?");
1697
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ TextEntryForm)\n/* harmony export */ });\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact/hooks */ \"preact/hooks\");\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(preact_hooks__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _lib_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../lib/css */ \"./src/javascripts/lib/css.js\");\n/* harmony import */ var _hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../hooks/seamly-hooks */ \"./src/javascripts/ui/hooks/seamly-hooks.js\");\n/* harmony import */ var _layout_icon__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../layout/icon */ \"./src/javascripts/ui/components/layout/icon.js\");\n/* harmony import */ var _domains_forms__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../../domains/forms */ \"./src/javascripts/domains/forms/index.js\");\n/* harmony import */ var _form_controls_form__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../form-controls/form */ \"./src/javascripts/ui/components/form-controls/form.js\");\n/* harmony import */ var _form_controls_input__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../form-controls/input */ \"./src/javascripts/ui/components/form-controls/input.js\");\n/* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./hooks */ \"./src/javascripts/ui/components/entry/text-entry/hooks.js\");\n/* harmony import */ var _domains_i18n__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../../../domains/i18n */ \"./src/javascripts/domains/i18n/index.js\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__);\n\n\n\n\n\n\n\n\n\n\n\nfunction TextEntryForm({\n controlName,\n skipLinkId\n}) {\n const {\n t\n } = (0,_domains_i18n__WEBPACK_IMPORTED_MODULE_8__.useI18n)();\n const {\n sendAssertive\n } = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_2__.useLiveRegion)();\n const {\n emitEvent\n } = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_2__.useSeamlyCommands)();\n const handleKeyUp = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_2__.useSeamlyTyping)();\n const {\n setBlockAutoEntrySwitch\n } = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_2__.useSeamlyEntry)(); // TODO: Standardize the validation on form fields\n\n const {\n hasCharacterLimit,\n characterLimit,\n reachedCharacterWarning,\n reachedCharacterLimit,\n remainingChars\n } = (0,_hooks__WEBPACK_IMPORTED_MODULE_7__.useCharacterLimit)(controlName);\n const [{\n value\n }] = (0,_domains_forms__WEBPACK_IMPORTED_MODULE_4__.useFormControl)(controlName);\n const hasValue = !!value;\n const handleFocus = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {\n if (reachedCharacterWarning) {\n sendAssertive(t('input.srCharacterLimitText', {\n limit: remainingChars\n }));\n }\n\n emitEvent('ui.inputFocus');\n }, [t, sendAssertive, reachedCharacterWarning, remainingChars, emitEvent]);\n const placeholder = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => t('input.inputPlaceholder', {\n hasLimit: hasCharacterLimit,\n limit: hasCharacterLimit ? characterLimit : null\n }), [t, hasCharacterLimit, characterLimit]);\n const labelText = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => t('input.inputLabel', {\n hasLimit: hasCharacterLimit,\n limit: hasCharacterLimit ? characterLimit : null\n }), [t, hasCharacterLimit, characterLimit]); // When the input holds a value, the component should be blocked from switching\n // to file upload form.\n\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect)(() => {\n setBlockAutoEntrySwitch(hasValue);\n return () => {\n setBlockAutoEntrySwitch(false);\n };\n }, [setBlockAutoEntrySwitch, hasValue]);\n return (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxs)(_form_controls_form__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_1__.className)('entry-form'),\n disableValidationClasses: true,\n noValidate: \"true\",\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxs)(\"div\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_1__.className)(['input--text__container', ...(reachedCharacterWarning && !reachedCharacterLimit ? ['character-warning'] : []), ...(reachedCharacterLimit ? ['character-exceeded'] : [])]),\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsx)(_form_controls_input__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n id: skipLinkId,\n type: \"text\",\n name: controlName,\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_1__.className)('input__text'),\n autocomplete: \"off\",\n placeholder: placeholder,\n labelText: labelText,\n labelClass: (0,_lib_css__WEBPACK_IMPORTED_MODULE_1__.className)('visually-hidden'),\n \"aria-invalid\": hasCharacterLimit ? reachedCharacterLimit : null,\n onKeyUp: handleKeyUp,\n onFocus: handleFocus\n }), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsx)(\"div\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_1__.className)('character-count'),\n children: reachedCharacterWarning && (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsx)(\"span\", {\n children: remainingChars\n })\n })]\n }), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsx)(\"button\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_1__.className)('button', 'input__submit'),\n type: \"submit\",\n disabled: !hasValue || reachedCharacterLimit,\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsx)(_layout_icon__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n name: \"send\",\n size: \"32\",\n alt: t('input.sendMessage')\n })\n })]\n });\n}\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/entry/text-entry/text-entry-form.js?");
1687
1698
 
1688
1699
  /***/ }),
1689
1700
 
@@ -1694,7 +1705,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
1694
1705
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1695
1706
 
1696
1707
  "use strict";
1697
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact/hooks */ \"preact/hooks\");\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(preact_hooks__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _domains_i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../domains/i18n */ \"./src/javascripts/domains/i18n/index.js\");\n/* harmony import */ var _lib_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../lib/css */ \"./src/javascripts/lib/css.js\");\n/* harmony import */ var _hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../hooks/seamly-hooks */ \"./src/javascripts/ui/hooks/seamly-hooks.js\");\n/* harmony import */ var _domains_interrupt__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../domains/interrupt */ \"./src/javascripts/domains/interrupt/index.js\");\n/* harmony import */ var _domains_visibility__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../domains/visibility */ \"./src/javascripts/domains/visibility/index.js\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__);\n\n\n\n\n\n\n\n\n\nconst ToggleButton = ({\n onOpenChat\n}) => {\n const {\n t\n } = (0,_domains_i18n__WEBPACK_IMPORTED_MODULE_1__.useI18n)();\n const titleId = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_3__.useGeneratedId)();\n const {\n isOpen\n } = (0,_domains_visibility__WEBPACK_IMPORTED_MODULE_5__.useVisibility)();\n const prevIsOpen = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n const buttonRef = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n const lastEventRef = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)();\n const focusSkiplinkTarget = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_3__.useSkiplinkTargetFocusing)();\n const focusIfContained = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_3__.useFocusIfSeamlyContainedFocus)();\n const currentAgent = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_3__.useSeamlyCurrentAgent)();\n const agentSubtitle = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_3__.useSeamlyHeaderData)().subTitle;\n const {\n hasInterrupt\n } = (0,_domains_interrupt__WEBPACK_IMPORTED_MODULE_4__.useInterrupt)();\n const {\n headerCollapseButtonId\n } = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_3__.useSeamlyStateContext)();\n const showAgentInfo = currentAgent && !hasInterrupt;\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect)(() => {\n // Because we can close the app from the external API we\n // need to determine if current keyboard focus resides inside\n // the Seamly app first otherwise focus will be hijacked\n if (isOpen === false && prevIsOpen.current === true) {\n focusIfContained(buttonRef.current);\n }\n\n prevIsOpen.current = isOpen;\n }, [isOpen, focusIfContained]);\n\n const handleMouseUp = () => {\n lastEventRef.current = 'mouse';\n };\n\n const handleKeyUp = () => {\n lastEventRef.current = 'key';\n };\n\n const handleClick = () => {\n onOpenChat();\n\n if (lastEventRef.current === 'mouse') {\n // Sets focus on the input when opening through mouse interaction.\n // This avoids focus hijacking for keyboard users.\n // TODO: function is executed before the component is rendered, needs to be fixed.\n focusSkiplinkTarget();\n } else if (lastEventRef.current === 'key') {\n focusIfContained(headerCollapseButtonId);\n }\n };\n\n return (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(\"div\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_2__.className)('toggle-button'),\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(\"div\", {\n id: titleId,\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(\"p\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_2__.className)('toggle-button__title'),\n children: showAgentInfo ? t('toggleButton.resumeTitle') : t('toggleButton.title')\n }), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(\"p\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_2__.className)('toggle-button__subtitle'),\n children: showAgentInfo ? agentSubtitle : t('toggleButton.subtitle')\n })]\n }), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(\"button\", {\n type: \"button\",\n \"aria-labelledby\": titleId,\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_2__.className)('toggle-button__button'),\n ref: buttonRef,\n onMouseUp: handleMouseUp,\n onKeyUp: handleKeyUp,\n onClick: handleClick\n })]\n });\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ToggleButton);\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/entry/toggle-button.js?");
1708
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact/hooks */ \"preact/hooks\");\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(preact_hooks__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _domains_i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../domains/i18n */ \"./src/javascripts/domains/i18n/index.js\");\n/* harmony import */ var _lib_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../lib/css */ \"./src/javascripts/lib/css.js\");\n/* harmony import */ var _hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../hooks/seamly-hooks */ \"./src/javascripts/ui/hooks/seamly-hooks.js\");\n/* harmony import */ var _domains_interrupt__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../domains/interrupt */ \"./src/javascripts/domains/interrupt/index.js\");\n/* harmony import */ var _domains_visibility__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../domains/visibility */ \"./src/javascripts/domains/visibility/index.js\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__);\n\n\n\n\n\n // Deprecated Toggle Button, should be removed once it is removed from clients\n\n\n\n\nconst DeprecatedToggleButton = ({\n onOpenChat\n}) => {\n const {\n t\n } = (0,_domains_i18n__WEBPACK_IMPORTED_MODULE_1__.useI18n)();\n const titleId = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_3__.useGeneratedId)();\n const {\n isOpen\n } = (0,_domains_visibility__WEBPACK_IMPORTED_MODULE_5__.useVisibility)();\n const prevIsOpen = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n const buttonRef = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n const lastEventRef = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)();\n const focusSkiplinkTarget = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_3__.useSkiplinkTargetFocusing)();\n const focusIfContained = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_3__.useFocusIfSeamlyContainedFocus)();\n const currentAgent = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_3__.useSeamlyCurrentAgent)();\n const agentSubtitle = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_3__.useSeamlyHeaderData)().subTitle;\n const {\n hasInterrupt\n } = (0,_domains_interrupt__WEBPACK_IMPORTED_MODULE_4__.useInterrupt)();\n const {\n headerCollapseButtonId\n } = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_3__.useSeamlyStateContext)();\n const showAgentInfo = currentAgent && !hasInterrupt;\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect)(() => {\n // Because we can close the app from the external API we\n // need to determine if current keyboard focus resides inside\n // the Seamly app first otherwise focus will be hijacked\n if (isOpen === false && prevIsOpen.current === true) {\n focusIfContained(buttonRef.current);\n }\n\n prevIsOpen.current = isOpen;\n }, [isOpen, focusIfContained]);\n\n const handleMouseUp = () => {\n lastEventRef.current = 'mouse';\n };\n\n const handleKeyUp = () => {\n lastEventRef.current = 'key';\n };\n\n const handleClick = () => {\n onOpenChat();\n\n if (lastEventRef.current === 'mouse') {\n // Sets focus on the input when opening through mouse interaction.\n // This avoids focus hijacking for keyboard users.\n // TODO: function is executed before the component is rendered, needs to be fixed.\n focusSkiplinkTarget();\n } else if (lastEventRef.current === 'key') {\n focusIfContained(headerCollapseButtonId);\n }\n };\n\n return (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(\"div\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_2__.className)('toggle-button'),\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(\"div\", {\n id: titleId,\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(\"p\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_2__.className)('toggle-button__title'),\n children: showAgentInfo ? t('toggleButton.resumeTitle') : t('toggleButton.title')\n }), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(\"p\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_2__.className)('toggle-button__subtitle'),\n children: showAgentInfo ? agentSubtitle : t('toggleButton.subtitle')\n })]\n }), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(\"button\", {\n type: \"button\",\n \"aria-labelledby\": titleId,\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_2__.className)('toggle-button__button'),\n ref: buttonRef,\n onMouseUp: handleMouseUp,\n onKeyUp: handleKeyUp,\n onClick: handleClick\n })]\n });\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (DeprecatedToggleButton);\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/entry/toggle-button.js?");
1698
1709
 
1699
1710
  /***/ }),
1700
1711
 
@@ -1716,7 +1727,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
1716
1727
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1717
1728
 
1718
1729
  "use strict";
1719
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ FileInputForm)\n/* harmony export */ });\n/* harmony import */ var _lib_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../lib/css */ \"./src/javascripts/lib/css.js\");\n/* harmony import */ var _form_controls_form__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../form-controls/form */ \"./src/javascripts/ui/components/form-controls/form.js\");\n/* harmony import */ var _form_controls_file_input__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../form-controls/file-input */ \"./src/javascripts/ui/components/form-controls/file-input.js\");\n/* harmony import */ var _domains_i18n__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../../domains/i18n */ \"./src/javascripts/domains/i18n/index.js\");\n/* harmony import */ var _domains_forms__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../../domains/forms */ \"./src/javascripts/domains/forms/index.js\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__);\n\n\n\n\n\n\n\nfunction FileInputForm({\n skiplinkId,\n controlName,\n accept,\n contentHint,\n isUploading,\n isComplete,\n onClickCancel\n}) {\n const {\n t\n } = (0,_domains_i18n__WEBPACK_IMPORTED_MODULE_3__.useI18n)();\n const [{\n value: fileList\n }] = (0,_domains_forms__WEBPACK_IMPORTED_MODULE_4__.useFormControl)(controlName);\n const hasFile = fileList && fileList.length > 0;\n const selectedFileName = hasFile ? fileList[0].name : '';\n return (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_form_controls_form__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_0__.className)('input', 'input--file'),\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_form_controls_file_input__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n name: controlName,\n id: skiplinkId,\n accept: accept,\n labelText: t('fileUpload.labelText'),\n outputText: t('fileUpload.selectedText', {\n hasFile,\n filename: selectedFileName\n }),\n contentHint: contentHint\n }), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(\"div\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_0__.className)('upload__button-container'),\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(\"button\", {\n id: isUploading || !isComplete ? skiplinkId : undefined,\n type: \"button\",\n onClick: onClickCancel,\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_0__.className)('button', 'button--secondary', 'upload__cancel'),\n children: t('fileUpload.cancelButtonText')\n }), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(\"button\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_0__.className)('button', 'button--primary'),\n type: \"submit\",\n children: t('fileUpload.uploadButtonText')\n })]\n })]\n });\n}\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/entry/upload/file-upload-form.js?");
1730
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ FileInputForm)\n/* harmony export */ });\n/* harmony import */ var _lib_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../lib/css */ \"./src/javascripts/lib/css.js\");\n/* harmony import */ var _form_controls_form__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../form-controls/form */ \"./src/javascripts/ui/components/form-controls/form.js\");\n/* harmony import */ var _form_controls_file_input__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../form-controls/file-input */ \"./src/javascripts/ui/components/form-controls/file-input.js\");\n/* harmony import */ var _domains_i18n__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../../domains/i18n */ \"./src/javascripts/domains/i18n/index.js\");\n/* harmony import */ var _domains_forms__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../../domains/forms */ \"./src/javascripts/domains/forms/index.js\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__);\n\n\n\n\n\n\n\nfunction FileInputForm({\n skiplinkId,\n controlName,\n accept,\n contentHint,\n isUploading,\n isComplete,\n onClickCancel\n}) {\n const {\n t\n } = (0,_domains_i18n__WEBPACK_IMPORTED_MODULE_3__.useI18n)();\n const [{\n value: fileList\n }] = (0,_domains_forms__WEBPACK_IMPORTED_MODULE_4__.useFormControl)(controlName);\n const hasFile = fileList && fileList.length > 0;\n const selectedFileName = hasFile ? fileList[0].name : '';\n return (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_form_controls_form__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_0__.className)('upload-form'),\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_form_controls_file_input__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n name: controlName,\n id: skiplinkId,\n accept: accept,\n labelText: t('fileUpload.labelText'),\n outputText: t('fileUpload.selectedText', {\n hasFile,\n filename: selectedFileName\n }),\n contentHint: contentHint\n }), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(\"div\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_0__.className)('upload__button-container'),\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(\"button\", {\n id: isUploading || !isComplete ? skiplinkId : undefined,\n type: \"button\",\n onClick: onClickCancel,\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_0__.className)('button', 'button--secondary', 'upload__cancel'),\n children: t('fileUpload.cancelButtonText')\n }), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(\"button\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_0__.className)('button', 'button--primary'),\n type: \"submit\",\n children: t('fileUpload.uploadButtonText')\n })]\n })]\n });\n}\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/entry/upload/file-upload-form.js?");
1720
1731
 
1721
1732
  /***/ }),
1722
1733
 
@@ -1731,17 +1742,6 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
1731
1742
 
1732
1743
  /***/ }),
1733
1744
 
1734
- /***/ "./src/javascripts/ui/components/faq/faq.js":
1735
- /*!**************************************************!*\
1736
- !*** ./src/javascripts/ui/components/faq/faq.js ***!
1737
- \**************************************************/
1738
- /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1739
-
1740
- "use strict";
1741
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact/hooks */ \"preact/hooks\");\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(preact_hooks__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _lib_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../lib/css */ \"./src/javascripts/lib/css.js\");\n/* harmony import */ var _layout_icon__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../layout/icon */ \"./src/javascripts/ui/components/layout/icon.js\");\n/* harmony import */ var _utils_seamly_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../utils/seamly-utils */ \"./src/javascripts/ui/utils/seamly-utils.js\");\n/* harmony import */ var _utils_general_utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../utils/general-utils */ \"./src/javascripts/ui/utils/general-utils.js\");\n/* harmony import */ var _hooks_use_seamly_commands__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../hooks/use-seamly-commands */ \"./src/javascripts/ui/hooks/use-seamly-commands.js\");\n/* harmony import */ var _hooks_seamly_state_hooks__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../hooks/seamly-state-hooks */ \"./src/javascripts/ui/hooks/seamly-state-hooks.js\");\n/* harmony import */ var _hooks_utility_hooks__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../hooks/utility-hooks */ \"./src/javascripts/ui/hooks/utility-hooks.js\");\n/* harmony import */ var _hooks_focus_helper_hooks__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../hooks/focus-helper-hooks */ \"./src/javascripts/ui/hooks/focus-helper-hooks.js\");\n/* harmony import */ var _hooks_live_region_hooks__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../hooks/live-region-hooks */ \"./src/javascripts/ui/hooks/live-region-hooks.js\");\n/* harmony import */ var _hooks_use_seamly_idle_detach_countdown__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../hooks/use-seamly-idle-detach-countdown */ \"./src/javascripts/ui/hooks/use-seamly-idle-detach-countdown.js\");\n/* harmony import */ var _hooks_use_seamly_resume_conversation_prompt__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../hooks/use-seamly-resume-conversation-prompt */ \"./src/javascripts/ui/hooks/use-seamly-resume-conversation-prompt.js\");\n/* harmony import */ var _domains_i18n__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../../domains/i18n */ \"./src/javascripts/domains/i18n/index.js\");\n/* harmony import */ var _widgets_in_out_transition__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../widgets/in-out-transition */ \"./src/javascripts/ui/components/widgets/in-out-transition.js\");\n/* harmony import */ var _domains_translations__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../../domains/translations */ \"./src/javascripts/domains/translations/index.js\");\n/* harmony import */ var _domains_interrupt__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../../../domains/interrupt */ \"./src/javascripts/domains/interrupt/index.js\");\n/* harmony import */ var _domains_app__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../../../domains/app */ \"./src/javascripts/domains/app/index.js\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_17___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_17__);\nconst _excluded = [\"categories\"];\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst Faq = () => {\n const {\n t\n } = (0,_domains_i18n__WEBPACK_IMPORTED_MODULE_12__.useI18n)();\n const {\n sendAction,\n addMessageBubble\n } = (0,_hooks_use_seamly_commands__WEBPACK_IMPORTED_MODULE_5__[\"default\"])();\n const sectionId = (0,_hooks_utility_hooks__WEBPACK_IMPORTED_MODULE_7__.useGeneratedId)();\n const focusSkiplinkTarget = (0,_hooks_focus_helper_hooks__WEBPACK_IMPORTED_MODULE_8__.useSkiplinkTargetFocusing)();\n const {\n sendPolite\n } = (0,_hooks_live_region_hooks__WEBPACK_IMPORTED_MODULE_9__.useLiveRegion)();\n const {\n hasInterrupt\n } = (0,_domains_interrupt__WEBPACK_IMPORTED_MODULE_15__.useInterrupt)();\n const {\n hasCountdown,\n endCountdown\n } = (0,_hooks_use_seamly_idle_detach_countdown__WEBPACK_IMPORTED_MODULE_10__[\"default\"])();\n const {\n hasPrompt,\n continueChat\n } = (0,_hooks_use_seamly_resume_conversation_prompt__WEBPACK_IMPORTED_MODULE_11__[\"default\"])();\n const lastFaqEventPayload = (0,_hooks_seamly_state_hooks__WEBPACK_IMPORTED_MODULE_6__.useSeamlyServiceData)('suggestion');\n const [eventBody] = (0,_domains_translations__WEBPACK_IMPORTED_MODULE_14__.useTranslatedEventData)({\n payload: lastFaqEventPayload\n });\n const faqs = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => {\n const newFaqs = lastFaqEventPayload && !hasInterrupt ? eventBody : [];\n const itemBaseClass = `faqs__item`;\n return newFaqs.map(_ref => {\n let {\n categories = []\n } = _ref,\n faqRest = _objectWithoutProperties(_ref, _excluded);\n\n return _objectSpread(_objectSpread({}, faqRest), {}, {\n categories,\n classNames: [itemBaseClass, ...categories.map(cat => `faqs__item--${String(cat).toLowerCase().replace(/[^a-z0-9_\\\\-]/, '')}`)]\n });\n });\n }, [lastFaqEventPayload, hasInterrupt, eventBody]);\n const prevFaqs = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n const prevHasFaqs = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)(false);\n const {\n isInline\n } = (0,_hooks_seamly_state_hooks__WEBPACK_IMPORTED_MODULE_6__.useSeamlyLayoutMode)();\n const hasResponded = (0,_domains_app__WEBPACK_IMPORTED_MODULE_16__.useUserHasResponded)();\n const hideForWindow = !isInline && hasResponded;\n const prevHideForWindow = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)(hideForWindow);\n const hasFaqs = !!faqs.length;\n const showFaqContainer = hasFaqs && !hideForWindow;\n const previousRenderedFaqList = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)([]);\n const renderedFaqList = hasFaqs ? faqs : previousRenderedFaqList.current;\n previousRenderedFaqList.current = renderedFaqList;\n const containerRef = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (prevFaqs.current !== faqs && !hideForWindow) {\n if (hasFaqs) {\n const politeText = prevHasFaqs.current ? t('faq.srUpdatedText') : t('faq.srAvailableText');\n setTimeout(() => {\n sendPolite(politeText);\n }, 30);\n } else if (prevHasFaqs.current) {\n sendPolite(t('faq.srUnavailableText'));\n }\n\n prevFaqs.current = faqs;\n }\n\n if (!prevHideForWindow.current && hideForWindow) {\n (0,_utils_general_utils__WEBPACK_IMPORTED_MODULE_4__.runIfElementContainsOrHasFocus)(containerRef.current, focusSkiplinkTarget);\n sendPolite(t('faq.srUnavailableText'));\n } else if (!hasFaqs && prevHasFaqs.current) {\n (0,_utils_general_utils__WEBPACK_IMPORTED_MODULE_4__.runIfElementContainsOrHasFocus)(containerRef.current, focusSkiplinkTarget);\n }\n\n prevHasFaqs.current = hasFaqs;\n prevHideForWindow.current = hideForWindow;\n }, [hasFaqs, faqs, hideForWindow, focusSkiplinkTarget, sendPolite, t]);\n\n const onFaqClickHandler = ({\n id,\n question\n }) => {\n if (hasCountdown) {\n endCountdown(true);\n }\n\n if (hasPrompt) {\n continueChat();\n }\n\n sendAction({\n type: _utils_seamly_utils__WEBPACK_IMPORTED_MODULE_3__.actionTypes.custom,\n originMessage: lastFaqEventPayload.id,\n body: {\n type: 'faqclick',\n body: {\n faqId: id,\n faqQuestion: question\n }\n }\n });\n addMessageBubble(question);\n focusSkiplinkTarget();\n };\n\n const headingText = t('faq.headingText');\n const ContainerElement = headingText ? 'section' : 'div';\n return (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_17__.jsx)(_widgets_in_out_transition__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n isActive: showFaqContainer,\n transitionStartState: _widgets_in_out_transition__WEBPACK_IMPORTED_MODULE_13__.transitionStartStates.notRendered,\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_17__.jsxs)(ContainerElement, {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_1__.className)('faqs'),\n \"aria-labelledby\": headingText ? sectionId : null,\n ref: containerRef,\n children: [headingText && (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_17__.jsx)(\"h2\", {\n id: sectionId,\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_1__.className)('faqs__heading'),\n children: headingText\n }), !!renderedFaqList.length && (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_17__.jsx)(\"ul\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_1__.className)('faqs__list'),\n children: renderedFaqList.map(faq => (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_17__.jsx)(\"li\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_1__.className)(faq.classNames),\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_17__.jsxs)(\"button\", {\n type: \"button\",\n onClick: () => {\n onFaqClickHandler(faq);\n },\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_1__.className)('button', 'button--secondary'),\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_17__.jsx)(_layout_icon__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n name: \"chevronRight\",\n size: \"8\"\n }), faq.question]\n })\n }, faq.id.toString()))\n })]\n })\n });\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Faq);\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/faq/faq.js?");
1742
-
1743
- /***/ }),
1744
-
1745
1745
  /***/ "./src/javascripts/ui/components/form-controls/error.js":
1746
1746
  /*!**************************************************************!*\
1747
1747
  !*** ./src/javascripts/ui/components/form-controls/error.js ***!
@@ -1749,7 +1749,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
1749
1749
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1750
1750
 
1751
1751
  "use strict";
1752
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ Error)\n/* harmony export */ });\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact/hooks */ \"preact/hooks\");\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(preact_hooks__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _lib_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../lib/css */ \"./src/javascripts/lib/css.js\");\n/* harmony import */ var _layout_icon__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../layout/icon */ \"./src/javascripts/ui/components/layout/icon.js\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__);\n\n\n\n\n\nfunction Error({\n id,\n error\n}) {\n const [isAvailable, setIsAvailable] = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n const timerId = setTimeout(() => setIsAvailable(true), 300); // 300 = magic number, could be less or more\n\n return () => clearTimeout(timerId); // clear timer if error is mounted+unmounted within 300\n }, []);\n return (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n \"aria-live\": \"assertive\",\n \"aria-atomic\": \"true\",\n children: isAvailable && error && (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"span\", {\n id: id,\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_1__.className)('error'),\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_layout_icon__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n name: \"error\",\n size: \"16\"\n }), error]\n })\n });\n}\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/form-controls/error.js?");
1752
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ Error)\n/* harmony export */ });\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact/hooks */ \"preact/hooks\");\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(preact_hooks__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _lib_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../lib/css */ \"./src/javascripts/lib/css.js\");\n/* harmony import */ var _layout_icon__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../layout/icon */ \"./src/javascripts/ui/components/layout/icon.js\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__);\n\n\n\n\n\nfunction Error({\n id,\n error\n}) {\n const [isAvailable, setIsAvailable] = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n const timerId = setTimeout(() => setIsAvailable(true), 300); // 300 = magic number, could be less or more\n\n return () => clearTimeout(timerId); // clear timer if error is mounted+unmounted within 300\n }, []);\n return (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"div\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_1__.className)('error'),\n \"aria-live\": \"assertive\",\n \"aria-atomic\": \"true\",\n children: isAvailable && error && (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"span\", {\n id: id,\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_1__.className)('error__message'),\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_layout_icon__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n name: \"error\",\n size: \"16\"\n }), error]\n })\n });\n}\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/form-controls/error.js?");
1753
1753
 
1754
1754
  /***/ }),
1755
1755
 
@@ -1771,7 +1771,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
1771
1771
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1772
1772
 
1773
1773
  "use strict";
1774
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _domains_forms__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../domains/forms */ \"./src/javascripts/domains/forms/index.js\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__);\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\n\n\n\nfunction Form(_ref) {\n let props = _extends({}, _ref);\n\n const {\n handleSubmit\n } = (0,_domains_forms__WEBPACK_IMPORTED_MODULE_0__.useForm)();\n return (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(\"form\", _objectSpread({\n onSubmit: handleSubmit\n }, props));\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Form);\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/form-controls/form.js?");
1774
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _domains_forms__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../domains/forms */ \"./src/javascripts/domains/forms/index.js\");\n/* harmony import */ var _lib_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../lib/css */ \"./src/javascripts/lib/css.js\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__);\nconst _excluded = [\"className\", \"disableValidationClasses\"];\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n\n\n\n\nfunction Form(_ref) {\n let {\n className: givenClassName,\n disableValidationClasses\n } = _ref,\n props = _objectWithoutProperties(_ref, _excluded);\n\n const {\n handleSubmit,\n isValid,\n isSubmitted\n } = (0,_domains_forms__WEBPACK_IMPORTED_MODULE_0__.useForm)();\n const formClasses = ['form'];\n\n if (!disableValidationClasses && isSubmitted) {\n formClasses.push('form--submitted');\n\n if (isValid) {\n formClasses.push('form--valid');\n } else {\n formClasses.push('form--invalid');\n }\n }\n\n return (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"form\", _objectSpread({\n onSubmit: handleSubmit,\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_1__.className)([...formClasses, givenClassName])\n }, props));\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Form);\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/form-controls/form.js?");
1775
1775
 
1776
1776
  /***/ }),
1777
1777
 
@@ -1815,7 +1815,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
1815
1815
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1816
1816
 
1817
1817
  "use strict";
1818
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _icon__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./icon */ \"./src/javascripts/ui/components/layout/icon.js\");\n/* harmony import */ var _hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../hooks/seamly-hooks */ \"./src/javascripts/ui/hooks/seamly-hooks.js\");\n/* harmony import */ var _lib_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../lib/css */ \"./src/javascripts/lib/css.js\");\n/* harmony import */ var _domains_i18n__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../domains/i18n */ \"./src/javascripts/domains/i18n/index.js\");\n/* harmony import */ var _domains_interrupt__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../domains/interrupt */ \"./src/javascripts/domains/interrupt/index.js\");\n/* harmony import */ var _domains_config__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../domains/config */ \"./src/javascripts/domains/config/index.js\");\n/* harmony import */ var _domains_visibility__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../../domains/visibility */ \"./src/javascripts/domains/visibility/index.js\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__);\n\n\n\n\n\n\n\n\n\n\nconst AgentInfo = () => {\n const {\n t\n } = (0,_domains_i18n__WEBPACK_IMPORTED_MODULE_3__.useI18n)();\n const {\n title,\n subTitle\n } = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_1__.useSeamlyHeaderData)();\n const unreadMessageCount = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_1__.useSeamlyUnreadCount)();\n const {\n isOpen\n } = (0,_domains_visibility__WEBPACK_IMPORTED_MODULE_6__.useVisibility)();\n const currentAgent = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_1__.useSeamlyCurrentAgent)();\n const {\n hasInterrupt\n } = (0,_domains_interrupt__WEBPACK_IMPORTED_MODULE_4__.useInterrupt)();\n const {\n defaults\n } = (0,_domains_config__WEBPACK_IMPORTED_MODULE_5__.useConfig)();\n const {\n startChatIcon\n } = defaults || {};\n const avatar = currentAgent && !hasInterrupt ? currentAgent.avatar : null;\n const displaySubtitle = hasInterrupt ? '' : subTitle;\n const classNames = ['message-count'];\n\n if (isOpen) {\n classNames.push('message-count__hide');\n }\n\n if (unreadMessageCount === 0) {\n classNames.push('message-count__empty');\n }\n\n return (avatar || displaySubtitle || !isOpen) && (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxs)(\"div\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_2__.className)('agent-info'),\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxs)(\"div\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_2__.className)('agent-info__graphic'),\n children: [avatar || startChatIcon ? (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(\"img\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_2__.className)(avatar ? 'avatar' : 'icon'),\n src: avatar || startChatIcon,\n alt: \"\"\n }) : (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_icon__WEBPACK_IMPORTED_MODULE_0__[\"default\"], {\n name: \"avatar\",\n size: \"32\"\n }), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(\"span\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_2__.className)(classNames),\n \"aria-hidden\": \"true\",\n children: unreadMessageCount\n })]\n }), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxs)(\"div\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_2__.className)('agent-info__body'),\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(\"p\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_2__.className)('agent-info__heading'),\n children: title ?? t('header.title')\n }), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(\"p\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_2__.className)('agent-info__text'),\n children: displaySubtitle\n })]\n })]\n });\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (AgentInfo);\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/layout/agent-info.js?");
1818
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _icon__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./icon */ \"./src/javascripts/ui/components/layout/icon.js\");\n/* harmony import */ var _hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../hooks/seamly-hooks */ \"./src/javascripts/ui/hooks/seamly-hooks.js\");\n/* harmony import */ var _lib_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../lib/css */ \"./src/javascripts/lib/css.js\");\n/* harmony import */ var _domains_i18n__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../domains/i18n */ \"./src/javascripts/domains/i18n/index.js\");\n/* harmony import */ var _domains_interrupt__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../domains/interrupt */ \"./src/javascripts/domains/interrupt/index.js\");\n/* harmony import */ var _domains_config__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../domains/config */ \"./src/javascripts/domains/config/index.js\");\n/* harmony import */ var _domains_visibility__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../../domains/visibility */ \"./src/javascripts/domains/visibility/index.js\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__);\n\n\n\n\n\n\n\n\n\n\nconst AgentInfo = () => {\n const {\n t\n } = (0,_domains_i18n__WEBPACK_IMPORTED_MODULE_3__.useI18n)();\n const {\n title,\n subTitle\n } = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_1__.useSeamlyHeaderData)();\n const unreadMessageCount = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_1__.useSeamlyUnreadCount)();\n const {\n isOpen\n } = (0,_domains_visibility__WEBPACK_IMPORTED_MODULE_6__.useVisibility)();\n const currentAgent = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_1__.useSeamlyCurrentAgent)();\n const {\n hasInterrupt\n } = (0,_domains_interrupt__WEBPACK_IMPORTED_MODULE_4__.useInterrupt)();\n const {\n defaults\n } = (0,_domains_config__WEBPACK_IMPORTED_MODULE_5__.useConfig)();\n const {\n startChatIcon\n } = defaults || {};\n const avatar = currentAgent && !hasInterrupt ? currentAgent.avatar : null;\n const displaySubtitle = hasInterrupt ? '' : subTitle;\n const classNames = ['message-count'];\n\n if (isOpen) {\n classNames.push('message-count__hide');\n }\n\n if (unreadMessageCount === 0) {\n classNames.push('message-count__empty');\n }\n\n return (avatar || displaySubtitle || !isOpen) && (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxs)(\"div\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_2__.className)('agent-info'),\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxs)(\"div\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_2__.className)('agent-info__graphic'),\n children: [avatar || startChatIcon ? (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(\"img\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_2__.className)(avatar ? 'avatar' : 'icon'),\n src: avatar || startChatIcon,\n alt: \"\"\n }) : (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_icon__WEBPACK_IMPORTED_MODULE_0__[\"default\"], {\n name: \"avatar\",\n size: \"32\"\n }), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(\"span\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_2__.className)(classNames),\n \"aria-hidden\": \"true\",\n children: unreadMessageCount\n })]\n }), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxs)(\"div\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_2__.className)('agent-info__body'),\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(\"p\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_2__.className)('agent-info__heading'),\n children: title !== null && title !== void 0 ? title : t('header.title')\n }), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(\"p\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_2__.className)('agent-info__text'),\n children: displaySubtitle\n })]\n })]\n });\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (AgentInfo);\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/layout/agent-info.js?");
1819
1819
 
1820
1820
  /***/ }),
1821
1821
 
@@ -1826,7 +1826,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
1826
1826
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1827
1827
 
1828
1828
  "use strict";
1829
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact/hooks */ \"preact/hooks\");\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(preact_hooks__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _lib_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../lib/css */ \"./src/javascripts/lib/css.js\");\n/* harmony import */ var _hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../hooks/seamly-hooks */ \"./src/javascripts/ui/hooks/seamly-hooks.js\");\n/* harmony import */ var _faq_faq__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../faq/faq */ \"./src/javascripts/ui/components/faq/faq.js\");\n/* harmony import */ var _domains_config__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../domains/config */ \"./src/javascripts/domains/config/index.js\");\n/* harmony import */ var _domains_app__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../domains/app */ \"./src/javascripts/domains/app/index.js\");\n/* harmony import */ var _domains_i18n__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../../domains/i18n */ \"./src/javascripts/domains/i18n/index.js\");\n/* harmony import */ var _domains_visibility__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../../domains/visibility */ \"./src/javascripts/domains/visibility/index.js\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__);\n\n\n\n\n\n\n\n\n\n\n\nconst AppFrame = ({\n children\n}) => {\n const [, setSeamlyContainerElement] = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_2__.useSeamlyContainerElement)();\n const {\n isOpen,\n isVisible,\n setVisibility\n } = (0,_domains_visibility__WEBPACK_IMPORTED_MODULE_7__.useVisibility)();\n const {\n zIndex,\n showFaq\n } = (0,_domains_config__WEBPACK_IMPORTED_MODULE_4__.useConfig)();\n const {\n isModal,\n isInline\n } = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_2__.useSeamlyLayoutMode)();\n const appContainerClassNames = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_2__.useSeamlyAppContainerClassNames)();\n const userResponded = (0,_domains_app__WEBPACK_IMPORTED_MODULE_5__.useUserHasResponded)();\n const {\n locale\n } = (0,_domains_i18n__WEBPACK_IMPORTED_MODULE_6__.useI18n)();\n const containerElementRef = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)(container => {\n setSeamlyContainerElement(container);\n }, [setSeamlyContainerElement]);\n const blockLang = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => {\n if (locale) {\n const htmlElementLang = document.querySelector('html').getAttribute('lang');\n\n if (htmlElementLang !== locale) {\n return locale;\n }\n }\n\n return undefined;\n }, [locale]);\n const classNames = ['app', ...appContainerClassNames];\n\n if (!isOpen) {\n classNames.push('app--collapsed');\n }\n\n if (userResponded) {\n classNames.push('app--user-responded');\n }\n\n const onKeyDownHandler = e => {\n if (e.code && e.code === 'Escape' || e.keyCode === 27) if (!isInline && isOpen) {\n setVisibility(_domains_visibility__WEBPACK_IMPORTED_MODULE_7__.visibilityStates.minimized);\n }\n };\n\n const onClickHandler = e => {\n if (isModal) {\n e.stopPropagation();\n }\n };\n\n return isVisible && (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsxs)(\"section\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_1__.className)(classNames),\n onKeyDown: onKeyDownHandler,\n onClick: onClickHandler,\n lang: blockLang,\n tabIndex: \"-1\",\n ref: containerElementRef,\n style: {\n zIndex\n },\n \"data-nosnippet\": true,\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsx)(\"div\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_1__.className)('app-wrapper'),\n children: children\n }), showFaq && (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsx)(_faq_faq__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {})]\n });\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (AppFrame);\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/layout/app-frame.js?");
1829
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact/hooks */ \"preact/hooks\");\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(preact_hooks__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _lib_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../lib/css */ \"./src/javascripts/lib/css.js\");\n/* harmony import */ var _hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../hooks/seamly-hooks */ \"./src/javascripts/ui/hooks/seamly-hooks.js\");\n/* harmony import */ var _domains_config__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../domains/config */ \"./src/javascripts/domains/config/index.js\");\n/* harmony import */ var _domains_app__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../domains/app */ \"./src/javascripts/domains/app/index.js\");\n/* harmony import */ var _domains_i18n__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../domains/i18n */ \"./src/javascripts/domains/i18n/index.js\");\n/* harmony import */ var _domains_visibility__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../../domains/visibility */ \"./src/javascripts/domains/visibility/index.js\");\n/* harmony import */ var _suggestions__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../suggestions */ \"./src/javascripts/ui/components/suggestions/index.js\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__);\n\n\n\n\n\n\n\n\n\n\n\nconst AppFrame = ({\n children,\n className: givenClassName = '',\n isDeprecated\n}) => {\n const [, setSeamlyContainerElement] = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_2__.useSeamlyContainerElement)();\n const {\n isOpen,\n isVisible,\n setVisibility\n } = (0,_domains_visibility__WEBPACK_IMPORTED_MODULE_6__.useVisibility)();\n const {\n zIndex,\n namespace,\n layoutMode\n } = (0,_domains_config__WEBPACK_IMPORTED_MODULE_3__.useConfig)();\n const {\n isInline\n } = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_2__.useSeamlyLayoutMode)();\n const appContainerClassNames = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_2__.useSeamlyAppContainerClassNames)();\n const userResponded = (0,_domains_app__WEBPACK_IMPORTED_MODULE_4__.useUserHasResponded)();\n const {\n locale,\n t\n } = (0,_domains_i18n__WEBPACK_IMPORTED_MODULE_5__.useI18n)();\n const containerElementRef = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)(container => {\n setSeamlyContainerElement(container);\n }, [setSeamlyContainerElement]);\n const blockLang = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => {\n if (locale) {\n const htmlElementLang = document.querySelector('html').getAttribute('lang');\n\n if (htmlElementLang !== locale) {\n return locale;\n }\n }\n\n return undefined;\n }, [locale]);\n const baseClassName = isDeprecated ? 'app--deprecated' : 'app';\n const defaultClassNames = [`app--layout-${layoutMode}`, `namespace--${namespace}`];\n const classNames = [baseClassName, ...defaultClassNames, ...appContainerClassNames, givenClassName];\n\n if (!isOpen && layoutMode !== 'app') {\n classNames.push('app--collapsed');\n }\n\n if (userResponded) {\n classNames.push('app--user-responded');\n }\n\n const onKeyDownHandler = e => {\n if (e.code && e.code === 'Escape' || e.keyCode === 27) if (!isInline && isOpen) {\n setVisibility(_domains_visibility__WEBPACK_IMPORTED_MODULE_6__.visibilityStates.minimized);\n }\n };\n\n return isVisible && (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsxs)(\"section\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_1__.className)(classNames),\n onKeyDown: onKeyDownHandler,\n lang: blockLang,\n tabIndex: \"-1\",\n ref: containerElementRef,\n style: {\n zIndex\n },\n \"data-nosnippet\": true,\n \"aria-label\": t('app.srLabel'),\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsx)(\"div\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_1__.className)('app-wrapper'),\n children: children\n }), layoutMode === 'inline' && isOpen && (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsx)(_suggestions__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n isAside: true\n })]\n });\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (AppFrame);\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/layout/app-frame.js?");
1830
1830
 
1831
1831
  /***/ }),
1832
1832
 
@@ -1837,7 +1837,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
1837
1837
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1838
1838
 
1839
1839
  "use strict";
1840
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _lib_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../lib/css */ \"./src/javascripts/lib/css.js\");\n/* harmony import */ var _warnings_cobrowsing_active_frame__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../warnings/cobrowsing-active-frame */ \"./src/javascripts/ui/components/warnings/cobrowsing-active-frame.js\");\n/* harmony import */ var _app_options__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../app-options */ \"./src/javascripts/ui/components/app-options/index.js\");\n/* harmony import */ var _domains_translations__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../domains/translations */ \"./src/javascripts/domains/translations/index.js\");\n/* harmony import */ var _domains_interrupt__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../domains/interrupt */ \"./src/javascripts/domains/interrupt/index.js\");\n/* harmony import */ var _domains_visibility__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../domains/visibility */ \"./src/javascripts/domains/visibility/index.js\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__);\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n\n\n\n\n\n\n\n\n\n\nfunction ChatFrame({\n children,\n interruptComponent: InterruptComponent\n}) {\n const {\n hasInterrupt,\n meta\n } = (0,_domains_interrupt__WEBPACK_IMPORTED_MODULE_4__.useInterrupt)();\n const {\n isOpen\n } = (0,_domains_visibility__WEBPACK_IMPORTED_MODULE_5__.useVisibility)();\n\n const getContent = () => {\n if (hasInterrupt) {\n if (isOpen) {\n return (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(InterruptComponent, _objectSpread({}, meta));\n }\n\n return null;\n }\n\n return children;\n };\n\n return (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.Fragment, {\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_warnings_cobrowsing_active_frame__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {}), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_domains_translations__WEBPACK_IMPORTED_MODULE_3__.ChatStatus, {}), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(\"div\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_0__.className)('app__container'),\n children: getContent()\n }), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_app_options__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {})]\n });\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ChatFrame);\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/layout/chat-frame.js?");
1840
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _lib_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../lib/css */ \"./src/javascripts/lib/css.js\");\n/* harmony import */ var _app_options__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../app-options */ \"./src/javascripts/ui/components/app-options/index.js\");\n/* harmony import */ var _domains_translations__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../domains/translations */ \"./src/javascripts/domains/translations/index.js\");\n/* harmony import */ var _domains_interrupt__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../domains/interrupt */ \"./src/javascripts/domains/interrupt/index.js\");\n/* harmony import */ var _domains_visibility__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../domains/visibility */ \"./src/javascripts/domains/visibility/index.js\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__);\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n\n\n\n\n\n\n\n\n\nfunction ChatFrame({\n children,\n interruptComponent: InterruptComponent\n}) {\n const {\n hasInterrupt,\n meta\n } = (0,_domains_interrupt__WEBPACK_IMPORTED_MODULE_3__.useInterrupt)();\n const {\n isOpen\n } = (0,_domains_visibility__WEBPACK_IMPORTED_MODULE_4__.useVisibility)();\n\n const getContent = () => {\n if (hasInterrupt) {\n if (isOpen) {\n return (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(InterruptComponent, _objectSpread({}, meta));\n }\n\n return null;\n }\n\n return children;\n };\n\n return (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.Fragment, {\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_domains_translations__WEBPACK_IMPORTED_MODULE_2__.ChatStatus, {}), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(\"div\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_0__.className)('app__container'),\n children: getContent()\n }), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_app_options__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {})]\n });\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ChatFrame);\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/layout/chat-frame.js?");
1841
1841
 
1842
1842
  /***/ }),
1843
1843
 
@@ -1874,14 +1874,14 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
1874
1874
 
1875
1875
  /***/ }),
1876
1876
 
1877
- /***/ "./src/javascripts/ui/components/layout/modal-wrapper.js":
1878
- /*!***************************************************************!*\
1879
- !*** ./src/javascripts/ui/components/layout/modal-wrapper.js ***!
1880
- \***************************************************************/
1877
+ /***/ "./src/javascripts/ui/components/layout/pre-chat-messages.js":
1878
+ /*!*******************************************************************!*\
1879
+ !*** ./src/javascripts/ui/components/layout/pre-chat-messages.js ***!
1880
+ \*******************************************************************/
1881
1881
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1882
1882
 
1883
1883
  "use strict";
1884
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact/hooks */ \"preact/hooks\");\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(preact_hooks__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var focus_trap__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! focus-trap */ \"./node_modules/focus-trap/dist/focus-trap.esm.js\");\n/* harmony import */ var _widgets_in_out_transition__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../widgets/in-out-transition */ \"./src/javascripts/ui/components/widgets/in-out-transition.js\");\n/* harmony import */ var _hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../hooks/seamly-hooks */ \"./src/javascripts/ui/hooks/seamly-hooks.js\");\n/* harmony import */ var _domains_i18n__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../domains/i18n */ \"./src/javascripts/domains/i18n/index.js\");\n/* harmony import */ var _lib_css__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../lib/css */ \"./src/javascripts/lib/css.js\");\n/* harmony import */ var _utils_general_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../utils/general-utils */ \"./src/javascripts/ui/utils/general-utils.js\");\n/* harmony import */ var _domains_visibility__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../../domains/visibility */ \"./src/javascripts/domains/visibility/index.js\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__);\n\n\n\n\n\n\n\n\n\n\nconst ModalWrapper = ({\n children\n}) => {\n const {\n t\n } = (0,_domains_i18n__WEBPACK_IMPORTED_MODULE_3__.useI18n)();\n const {\n isModal\n } = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_2__.useSeamlyLayoutMode)();\n const {\n isOpen,\n setVisibility\n } = (0,_domains_visibility__WEBPACK_IMPORTED_MODULE_6__.useVisibility)();\n const container = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n const focusTrap = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n\n const onInTransitionCompleteHandler = () => {\n focusTrap.current = (0,focus_trap__WEBPACK_IMPORTED_MODULE_8__.createFocusTrap)(container.current);\n focusTrap.current.activate();\n };\n\n const onOutTransitionCompleteHandler = () => {\n if (focusTrap.current) {\n focusTrap.current.deactivate();\n focusTrap.current = null;\n }\n };\n\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (!isModal) {\n return null;\n }\n\n let disposeAriaHider;\n\n if (isOpen) {\n disposeAriaHider = (0,_utils_general_utils__WEBPACK_IMPORTED_MODULE_5__.createAriaHider)(); // As the chat window is housed in a container we have to remove the\n // aria-hidden the aria hider places on the container.\n\n container.current.parentElement.removeAttribute('aria-hidden');\n }\n\n return () => {\n if (disposeAriaHider) {\n disposeAriaHider();\n disposeAriaHider = null;\n }\n };\n }, [isOpen, isModal]);\n\n const onClickHandler = () => {\n setVisibility(_domains_visibility__WEBPACK_IMPORTED_MODULE_6__.visibilityStates.minimized);\n };\n\n return isModal ? (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_widgets_in_out_transition__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n isActive: isOpen,\n transitionStartState: _widgets_in_out_transition__WEBPACK_IMPORTED_MODULE_1__.transitionStartStates.rendered,\n onInTransitionComplete: onInTransitionCompleteHandler,\n onOutTransitionComplete: onOutTransitionCompleteHandler,\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(\"div\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_4__.className)('modal-overlay'),\n role: \"dialog\",\n \"aria-modal\": \"true\",\n \"aria-label\": t('window.srModalLayoutLabel'),\n onClick: onClickHandler,\n ref: container,\n children: children\n })\n }) : children;\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ModalWrapper);\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/layout/modal-wrapper.js?");
1884
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ PreChatMessages),\n/* harmony export */ \"PreChatMessageEvent\": () => (/* binding */ PreChatMessageEvent)\n/* harmony export */ });\n/* harmony import */ var _lib_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../lib/css */ \"./src/javascripts/lib/css.js\");\n/* harmony import */ var _domains_interrupt__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../domains/interrupt */ \"./src/javascripts/domains/interrupt/index.js\");\n/* harmony import */ var _domains_config__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../domains/config */ \"./src/javascripts/domains/config/index.js\");\n/* harmony import */ var _hooks_use_event_component_mapping__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../hooks/use-event-component-mapping */ \"./src/javascripts/ui/hooks/use-event-component-mapping.js\");\n/* harmony import */ var _domains_visibility__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../domains/visibility */ \"./src/javascripts/domains/visibility/index.js\");\n/* harmony import */ var _widgets_in_out_transition__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../widgets/in-out-transition */ \"./src/javascripts/ui/components/widgets/in-out-transition.js\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__);\n\n\n\n\n\n\n\nfunction PreChatMessages() {\n const {\n preChatEvents,\n layoutMode\n } = (0,_domains_config__WEBPACK_IMPORTED_MODULE_2__.useConfig)();\n const {\n hasInterrupt\n } = (0,_domains_interrupt__WEBPACK_IMPORTED_MODULE_1__.useInterrupt)();\n const {\n isOpen\n } = (0,_domains_visibility__WEBPACK_IMPORTED_MODULE_4__.useVisibility)();\n const isVisible = !(hasInterrupt || !preChatEvents.length || isOpen);\n return (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_widgets_in_out_transition__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n isActive: isVisible,\n transitionStartState: _widgets_in_out_transition__WEBPACK_IMPORTED_MODULE_5__.transitionStartStates.notRendered,\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(\"ul\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_0__.className)('pre-chat-messages', `pre-chat-messages--${layoutMode}`),\n \"aria-hidden\": !isVisible,\n children: preChatEvents.map(event => (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(\"li\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_0__.className)('pre-chat-messages__message'),\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(PreChatMessageEvent, {\n event: event\n })\n }, event.payload.id))\n })\n });\n}\nfunction PreChatMessageEvent({\n event\n}) {\n const [Component] = (0,_hooks_use_event_component_mapping__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(event);\n return (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(Component, {\n event: event\n });\n}\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/layout/pre-chat-messages.js?");
1885
1885
 
1886
1886
  /***/ }),
1887
1887
 
@@ -1896,28 +1896,6 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
1896
1896
 
1897
1897
  /***/ }),
1898
1898
 
1899
- /***/ "./src/javascripts/ui/components/layout/view.js":
1900
- /*!******************************************************!*\
1901
- !*** ./src/javascripts/ui/components/layout/view.js ***!
1902
- \******************************************************/
1903
- /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1904
-
1905
- "use strict";
1906
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _modal_wrapper__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./modal-wrapper */ \"./src/javascripts/ui/components/layout/modal-wrapper.js\");\n/* harmony import */ var _app_frame__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./app-frame */ \"./src/javascripts/ui/components/layout/app-frame.js\");\n/* harmony import */ var _chat_frame__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chat-frame */ \"./src/javascripts/ui/components/layout/chat-frame.js\");\n/* harmony import */ var _entry_toggle_button__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../entry/toggle-button */ \"./src/javascripts/ui/components/entry/toggle-button.js\");\n/* harmony import */ var _agent_info__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./agent-info */ \"./src/javascripts/ui/components/layout/agent-info.js\");\n/* harmony import */ var _header__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./header */ \"./src/javascripts/ui/components/layout/header.js\");\n/* harmony import */ var _conversation_conversation__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../conversation/conversation */ \"./src/javascripts/ui/components/conversation/conversation.js\");\n/* harmony import */ var _entry_entry_container__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../entry/entry-container */ \"./src/javascripts/ui/components/entry/entry-container.js\");\n/* harmony import */ var _interrupt__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./interrupt */ \"./src/javascripts/ui/components/layout/interrupt.js\");\n/* harmony import */ var _hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../hooks/seamly-hooks */ \"./src/javascripts/ui/hooks/seamly-hooks.js\");\n/* harmony import */ var _domains_visibility__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../../domains/visibility */ \"./src/javascripts/domains/visibility/index.js\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_11__);\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst View = () => {\n const {\n isVisible\n } = (0,_domains_visibility__WEBPACK_IMPORTED_MODULE_10__.useVisibility)();\n const {\n openChat,\n closeChat\n } = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_9__.useSeamlyChat)();\n const {\n isModal\n } = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_9__.useSeamlyLayoutMode)();\n return isVisible && (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_11__.jsx)(_modal_wrapper__WEBPACK_IMPORTED_MODULE_0__[\"default\"], {\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_11__.jsxs)(_app_frame__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n children: [!isModal && (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_11__.jsx)(_entry_toggle_button__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n onOpenChat: openChat\n }), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_11__.jsx)(_header__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n onCloseChat: closeChat,\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_11__.jsx)(_agent_info__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {})\n }), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_11__.jsxs)(_chat_frame__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n interruptComponent: _interrupt__WEBPACK_IMPORTED_MODULE_8__[\"default\"],\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_11__.jsx)(_conversation_conversation__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {}), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_11__.jsx)(_entry_entry_container__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {})]\n })]\n })\n });\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (View);\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/layout/view.js?");
1907
-
1908
- /***/ }),
1909
-
1910
- /***/ "./src/javascripts/ui/components/options/cobrowsing.js":
1911
- /*!*************************************************************!*\
1912
- !*** ./src/javascripts/ui/components/options/cobrowsing.js ***!
1913
- \*************************************************************/
1914
- /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1915
-
1916
- "use strict";
1917
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact/hooks */ \"preact/hooks\");\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(preact_hooks__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _options_frame__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./options-frame */ \"./src/javascripts/ui/components/options/options-frame.js\");\n/* harmony import */ var _hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../hooks/seamly-hooks */ \"./src/javascripts/ui/hooks/seamly-hooks.js\");\n/* harmony import */ var _domains_i18n__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../domains/i18n */ \"./src/javascripts/domains/i18n/index.js\");\n/* harmony import */ var _lib_css__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../lib/css */ \"./src/javascripts/lib/css.js\");\n/* harmony import */ var _utils_seamly_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../utils/seamly-utils */ \"./src/javascripts/ui/utils/seamly-utils.js\");\n/* harmony import */ var _utils_general_utils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../utils/general-utils */ \"./src/javascripts/ui/utils/general-utils.js\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__);\n\n\n\n\n\n\n\n\n\n\nconst Cobrowsing = () => {\n const {\n t\n } = (0,_domains_i18n__WEBPACK_IMPORTED_MODULE_3__.useI18n)();\n const cobrowsingDescriptionId = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_2__.useGeneratedId)();\n const {\n userSelectedOptions,\n features,\n setUserSelectedOption,\n hideOption\n } = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_2__.useSeamlyOptions)();\n const {\n enabled: canActivateCobrowsing\n } = features.cobrowsing || {};\n const prevCanActivateCobrowsing = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n const [cobrowsingToggleActive, setCobrowsingToggleActive] = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useState)(canActivateCobrowsing);\n const {\n focusButton\n } = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_2__.useOptionButton)();\n const {\n focusContainer\n } = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_2__.useCobrowsingContainer)();\n const {\n sendAssertive\n } = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_2__.useLiveRegion)();\n const cancelButton = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n const toggleButton = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n const focusFn = () => {\n (0,_utils_general_utils__WEBPACK_IMPORTED_MODULE_6__.focusElement)(cancelButton.current);\n };\n\n if (!canActivateCobrowsing && prevCanActivateCobrowsing.current === true) {\n sendAssertive(t('options.cobrowsing.cobrowsingUnavailable'));\n setUserSelectedOption(_utils_seamly_utils__WEBPACK_IMPORTED_MODULE_5__.featureKeys.cobrowsing, false);\n (0,_utils_general_utils__WEBPACK_IMPORTED_MODULE_6__.runIfElementContainsOrHasFocus)(toggleButton.current, focusFn);\n }\n\n if (canActivateCobrowsing && prevCanActivateCobrowsing.current === false) {\n sendAssertive(t('options.cobrowsing.srCobrowsingAvailable'));\n }\n\n setCobrowsingToggleActive(canActivateCobrowsing);\n prevCanActivateCobrowsing.current = canActivateCobrowsing;\n }, [canActivateCobrowsing, setUserSelectedOption, sendAssertive, t]);\n\n const toggleAndFocus = isCancel => {\n if (!isCancel && !userSelectedOptions.cobrowsing) {\n focusContainer();\n } else {\n focusButton();\n }\n };\n\n const onToggleClickHandler = () => {\n hideOption();\n toggleAndFocus();\n setUserSelectedOption(_utils_seamly_utils__WEBPACK_IMPORTED_MODULE_5__.featureKeys.cobrowsing, !userSelectedOptions.cobrowsing);\n sendAssertive(t('options.cobrowsing.srStartedCobrowsingText'));\n };\n\n const onCancelClickHandler = () => {\n toggleAndFocus(true);\n };\n\n return (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxs)(_options_frame__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n headingText: t('options.cobrowsing.title'),\n cancelButtonText: t('options.cancelButtonText'),\n onCancel: onCancelClickHandler,\n disableButtonFocusing: true,\n cancelButtonRef: cancelButton,\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(\"p\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_4__.className)('options__description'),\n id: cobrowsingDescriptionId,\n children: t('options.cobrowsing.description')\n }), !cobrowsingToggleActive && (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(\"p\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_4__.className)('notification'),\n children: t('options.cobrowsing.cobrowsingUnavailable')\n }), cobrowsingToggleActive && (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(\"button\", {\n type: \"button\",\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_4__.className)(['button', 'button--primary']),\n onClick: onToggleClickHandler,\n \"aria-describedby\": cobrowsingDescriptionId,\n ref: toggleButton,\n children: userSelectedOptions.cobrowsing ? t('options.cobrowsing.labelTurnOff') : t('options.cobrowsing.labelTurnOn')\n })]\n });\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Cobrowsing);\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/options/cobrowsing.js?");
1918
-
1919
- /***/ }),
1920
-
1921
1899
  /***/ "./src/javascripts/ui/components/options/options-button.js":
1922
1900
  /*!*****************************************************************!*\
1923
1901
  !*** ./src/javascripts/ui/components/options/options-button.js ***!
@@ -1936,7 +1914,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
1936
1914
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1937
1915
 
1938
1916
  "use strict";
1939
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact/hooks */ \"preact/hooks\");\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(preact_hooks__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _layout_icon__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../layout/icon */ \"./src/javascripts/ui/components/layout/icon.js\");\n/* harmony import */ var _hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../hooks/seamly-hooks */ \"./src/javascripts/ui/hooks/seamly-hooks.js\");\n/* harmony import */ var _lib_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../lib/css */ \"./src/javascripts/lib/css.js\");\n/* harmony import */ var _utils_general_utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../utils/general-utils */ \"./src/javascripts/ui/utils/general-utils.js\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__);\n\n\n\n\n\n\n\n\nconst OptionsFrame = ({\n children,\n onCancel,\n headingText,\n cancelButtonText,\n disableButtonFocusing,\n cancelButtonRef,\n position = 'right'\n}) => {\n const container = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n const mainHeadingId = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_2__.useGeneratedId)(); // @todo Lift this from the \"options frame\" into something reusable\n // when you're not using options\n\n const {\n hideOption\n } = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_2__.useSeamlyOptions)();\n const {\n focusButton\n } = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_2__.useOptionButton)();\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n (0,_utils_general_utils__WEBPACK_IMPORTED_MODULE_4__.focusElement)(container.current);\n }, []);\n\n const closePanel = () => {\n hideOption();\n\n if (!disableButtonFocusing) {\n focusButton();\n }\n };\n\n const onCancelHandler = () => {\n if (onCancel) {\n onCancel();\n }\n\n closePanel();\n };\n\n return (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(\"section\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_3__.className)('options', {\n 'options--right': position !== 'left',\n 'options--left': position === 'left'\n }),\n \"aria-labelledby\": mainHeadingId,\n tabIndex: \"-1\",\n ref: container,\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(\"div\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_3__.className)('options__body'),\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(\"h2\", {\n id: mainHeadingId,\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_3__.className)('options__title'),\n children: headingText\n }), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(\"button\", {\n type: \"button\",\n onClick: onCancelHandler,\n \"aria-describedby\": mainHeadingId,\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_3__.className)('button', 'options__close'),\n ref: btn => {\n if (cancelButtonRef) {\n cancelButtonRef.current = btn;\n }\n },\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_layout_icon__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n name: \"close\",\n size: \"16\"\n }), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(\"span\", {\n children: cancelButtonText\n })]\n }), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(\"div\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_3__.className)('options__wrapper'),\n children: children\n })]\n })\n });\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (OptionsFrame);\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/options/options-frame.js?");
1917
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact/hooks */ \"preact/hooks\");\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(preact_hooks__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _layout_icon__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../layout/icon */ \"./src/javascripts/ui/components/layout/icon.js\");\n/* harmony import */ var _hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../hooks/seamly-hooks */ \"./src/javascripts/ui/hooks/seamly-hooks.js\");\n/* harmony import */ var _lib_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../lib/css */ \"./src/javascripts/lib/css.js\");\n/* harmony import */ var _utils_general_utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../utils/general-utils */ \"./src/javascripts/ui/utils/general-utils.js\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__);\n\n\n\n\n\n\n\n\nconst OptionsFrame = ({\n className: givenClassName,\n children,\n onCancel,\n headingText,\n cancelButtonText,\n disableButtonFocusing,\n cancelButtonRef,\n position = 'right'\n}) => {\n const container = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n const mainHeadingId = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_2__.useGeneratedId)(); // @todo Lift this from the \"options frame\" into something reusable\n // when you're not using options\n\n const {\n hideOption\n } = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_2__.useSeamlyOptions)();\n const {\n focusButton\n } = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_2__.useOptionButton)();\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n (0,_utils_general_utils__WEBPACK_IMPORTED_MODULE_4__.focusElement)(container.current);\n }, []);\n\n const closePanel = () => {\n hideOption();\n\n if (!disableButtonFocusing) {\n focusButton();\n }\n };\n\n const onCancelHandler = () => {\n if (onCancel) {\n onCancel();\n }\n\n closePanel();\n };\n\n return (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(\"section\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_3__.className)('options', {\n 'options--right': position !== 'left',\n 'options--left': position === 'left'\n }, givenClassName),\n \"aria-labelledby\": mainHeadingId,\n tabIndex: \"-1\",\n ref: container,\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(\"div\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_3__.className)('options__body'),\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(\"h2\", {\n id: mainHeadingId,\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_3__.className)('options__title'),\n children: headingText\n }), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(\"button\", {\n type: \"button\",\n onClick: onCancelHandler,\n \"aria-describedby\": mainHeadingId,\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_3__.className)('button', 'options__close'),\n ref: btn => {\n if (cancelButtonRef) {\n cancelButtonRef.current = btn;\n }\n },\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_layout_icon__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n name: \"close\",\n size: \"16\"\n }), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(\"span\", {\n children: cancelButtonText\n })]\n }), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(\"div\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_3__.className)('options__wrapper'),\n children: children\n })]\n })\n });\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (OptionsFrame);\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/options/options-frame.js?");
1940
1918
 
1941
1919
  /***/ }),
1942
1920
 
@@ -1947,7 +1925,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
1947
1925
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1948
1926
 
1949
1927
  "use strict";
1950
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact/hooks */ \"preact/hooks\");\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(preact_hooks__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _cobrowsing__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./cobrowsing */ \"./src/javascripts/ui/components/options/cobrowsing.js\");\n/* harmony import */ var _transcript__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./transcript */ \"./src/javascripts/ui/components/options/transcript/index.js\");\n/* harmony import */ var _hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../hooks/seamly-hooks */ \"./src/javascripts/ui/hooks/seamly-hooks.js\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__);\n\n\n\n\n\nconst mapper = {\n cobrowsing: _cobrowsing__WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n sendTranscript: _transcript__WEBPACK_IMPORTED_MODULE_2__[\"default\"]\n};\n\nconst Options = () => {\n const {\n optionActive\n } = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_3__.useSeamlyOptions)();\n const prevRenderOption = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)(null); // We keep the previously selected option active so that we can animate the options panel.\n\n const RenderOption = mapper[optionActive || prevRenderOption.current];\n\n if (optionActive) {\n prevRenderOption.current = optionActive;\n }\n\n return (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(RenderOption, {});\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Options);\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/options/options.js?");
1928
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact/hooks */ \"preact/hooks\");\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(preact_hooks__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _transcript__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./transcript */ \"./src/javascripts/ui/components/options/transcript/index.js\");\n/* harmony import */ var _hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../hooks/seamly-hooks */ \"./src/javascripts/ui/hooks/seamly-hooks.js\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__);\n\n\n\n\nconst mapper = {\n sendTranscript: _transcript__WEBPACK_IMPORTED_MODULE_1__[\"default\"]\n};\n\nconst Options = () => {\n const {\n optionActive\n } = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_2__.useSeamlyOptions)();\n const prevRenderOption = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)(null); // We keep the previously selected option active so that we can animate the options panel.\n\n const RenderOption = mapper[optionActive || prevRenderOption.current];\n\n if (optionActive) {\n prevRenderOption.current = optionActive;\n }\n\n return RenderOption ? (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(RenderOption, {}) : null;\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Options);\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/options/options.js?");
1951
1929
 
1952
1930
  /***/ }),
1953
1931
 
@@ -1958,7 +1936,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
1958
1936
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1959
1937
 
1960
1938
  "use strict";
1961
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact/hooks */ \"preact/hooks\");\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(preact_hooks__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _domains_i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../domains/i18n */ \"./src/javascripts/domains/i18n/index.js\");\n/* harmony import */ var _options_frame__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../options-frame */ \"./src/javascripts/ui/components/options/options-frame.js\");\n/* harmony import */ var _lib_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../../lib/css */ \"./src/javascripts/lib/css.js\");\n/* harmony import */ var _hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../hooks/seamly-hooks */ \"./src/javascripts/ui/hooks/seamly-hooks.js\");\n/* harmony import */ var _utils_seamly_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../utils/seamly-utils */ \"./src/javascripts/ui/utils/seamly-utils.js\");\n/* harmony import */ var _domains_forms__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../../../domains/forms */ \"./src/javascripts/domains/forms/index.js\");\n/* harmony import */ var _transcript_form__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./transcript-form */ \"./src/javascripts/ui/components/options/transcript/transcript-form.js\");\n/* harmony import */ var _utils_form_utils__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../../utils/form-utils */ \"./src/javascripts/ui/utils/form-utils.js\");\n/* harmony import */ var _utils_validations__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../../utils/validations */ \"./src/javascripts/ui/utils/validations.js\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__);\n\n\n\n\n\n\n\n\n\n\n\n\nconst formId = 'sendTranscript';\nconst controlName = 'email';\n\nconst Transcript = () => {\n const {\n hideOption\n } = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_4__.useSeamlyOptions)();\n const {\n focusButton\n } = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_4__.useOptionButton)();\n const {\n t\n } = (0,_domains_i18n__WEBPACK_IMPORTED_MODULE_1__.useI18n)();\n const transcriptDescriptionId = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_4__.useGeneratedId)();\n const {\n sendAction\n } = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_4__.useSeamlyCommands)();\n const validationSchema = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => ({\n [controlName]: [(0,_utils_form_utils__WEBPACK_IMPORTED_MODULE_8__.getValidator)(_utils_validations__WEBPACK_IMPORTED_MODULE_9__.isNotEmptyString, t('options.sendTranscript.noEmailText')), (0,_utils_form_utils__WEBPACK_IMPORTED_MODULE_8__.getValidator)(_utils_validations__WEBPACK_IMPORTED_MODULE_9__.isEmailString, t('options.sendTranscript.invalidEmailText'))]\n }), [t]);\n const handleSubmit = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)(values => {\n const emailAddress = values[controlName].trim();\n sendAction({\n type: _utils_seamly_utils__WEBPACK_IMPORTED_MODULE_5__.actionTypes.sendTranscript,\n body: {\n emailAddress\n }\n });\n hideOption();\n focusButton();\n }, [sendAction, hideOption, focusButton]);\n return (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxs)(_options_frame__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n headingText: t('options.sendTranscript.title'),\n cancelButtonText: t('options.cancelButtonText'),\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)(\"p\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_3__.className)('options__description'),\n id: transcriptDescriptionId,\n children: t('options.sendTranscript.description')\n }), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)(_domains_forms__WEBPACK_IMPORTED_MODULE_6__.FormProvider, {\n formId: formId,\n onSubmit: handleSubmit,\n validationSchema: validationSchema,\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)(_transcript_form__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n controlName: controlName,\n describedById: transcriptDescriptionId\n })\n })]\n });\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Transcript);\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/options/transcript/index.js?");
1939
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact/hooks */ \"preact/hooks\");\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(preact_hooks__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _domains_i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../domains/i18n */ \"./src/javascripts/domains/i18n/index.js\");\n/* harmony import */ var _options_frame__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../options-frame */ \"./src/javascripts/ui/components/options/options-frame.js\");\n/* harmony import */ var _lib_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../../lib/css */ \"./src/javascripts/lib/css.js\");\n/* harmony import */ var _hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../hooks/seamly-hooks */ \"./src/javascripts/ui/hooks/seamly-hooks.js\");\n/* harmony import */ var _utils_seamly_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../utils/seamly-utils */ \"./src/javascripts/ui/utils/seamly-utils.js\");\n/* harmony import */ var _domains_forms__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../../../domains/forms */ \"./src/javascripts/domains/forms/index.js\");\n/* harmony import */ var _transcript_form__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./transcript-form */ \"./src/javascripts/ui/components/options/transcript/transcript-form.js\");\n/* harmony import */ var _utils_form_utils__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../../utils/form-utils */ \"./src/javascripts/ui/utils/form-utils.js\");\n/* harmony import */ var _utils_validations__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../../utils/validations */ \"./src/javascripts/ui/utils/validations.js\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__);\n\n\n\n\n\n\n\n\n\n\n\n\nconst formId = 'sendTranscript';\nconst controlName = 'email';\n\nconst Transcript = () => {\n const [errorClass, setErrorClass] = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useState)(undefined);\n const {\n hideOption\n } = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_4__.useSeamlyOptions)();\n const {\n focusButton\n } = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_4__.useOptionButton)();\n const {\n t\n } = (0,_domains_i18n__WEBPACK_IMPORTED_MODULE_1__.useI18n)();\n const transcriptDescriptionId = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_4__.useGeneratedId)();\n const {\n sendAction\n } = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_4__.useSeamlyCommands)();\n const validationSchema = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => ({\n [controlName]: [(0,_utils_form_utils__WEBPACK_IMPORTED_MODULE_8__.getValidator)(_utils_validations__WEBPACK_IMPORTED_MODULE_9__.isNotEmptyString, t('options.sendTranscript.noEmailText')), (0,_utils_form_utils__WEBPACK_IMPORTED_MODULE_8__.getValidator)(_utils_validations__WEBPACK_IMPORTED_MODULE_9__.isEmailString, t('options.sendTranscript.invalidEmailText'))]\n }), [t]);\n const handleSubmit = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)(values => {\n const emailAddress = values[controlName].trim();\n sendAction({\n type: _utils_seamly_utils__WEBPACK_IMPORTED_MODULE_5__.actionTypes.sendTranscript,\n body: {\n emailAddress\n }\n });\n hideOption();\n focusButton();\n }, [sendAction, hideOption, focusButton]);\n const handleError = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)(({\n isValid,\n isSubmitted\n }) => {\n if (isSubmitted && !isValid) {\n setErrorClass('options--error');\n } else {\n setErrorClass(undefined);\n }\n }, [setErrorClass]);\n return (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxs)(_options_frame__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n className: errorClass,\n headingText: t('options.sendTranscript.title'),\n cancelButtonText: t('options.cancelButtonText'),\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)(\"p\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_3__.className)('options__description'),\n id: transcriptDescriptionId,\n children: t('options.sendTranscript.description')\n }), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)(_domains_forms__WEBPACK_IMPORTED_MODULE_6__.FormProvider, {\n formId: formId,\n onSubmit: handleSubmit,\n validationSchema: validationSchema,\n onError: handleError,\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)(_transcript_form__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n controlName: controlName,\n describedById: transcriptDescriptionId\n })\n })]\n });\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Transcript);\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/options/transcript/index.js?");
1962
1940
 
1963
1941
  /***/ }),
1964
1942
 
@@ -1969,29 +1947,117 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
1969
1947
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1970
1948
 
1971
1949
  "use strict";
1972
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ TranscriptForm)\n/* harmony export */ });\n/* harmony import */ var _lib_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../lib/css */ \"./src/javascripts/lib/css.js\");\n/* harmony import */ var _domains_i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../domains/i18n */ \"./src/javascripts/domains/i18n/index.js\");\n/* harmony import */ var _form_controls_form__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../form-controls/form */ \"./src/javascripts/ui/components/form-controls/form.js\");\n/* harmony import */ var _form_controls_input__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../form-controls/input */ \"./src/javascripts/ui/components/form-controls/input.js\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__);\n\n\n\n\n\n\nfunction TranscriptForm({\n controlName,\n describedById\n}) {\n const {\n t\n } = (0,_domains_i18n__WEBPACK_IMPORTED_MODULE_1__.useI18n)();\n return (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(_form_controls_form__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n noValidate: \"true\",\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_form_controls_input__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n name: controlName,\n type: \"email\",\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_0__.className)('transcript__input'),\n \"aria-describedby\": describedById,\n labelClass: (0,_lib_css__WEBPACK_IMPORTED_MODULE_0__.className)('label'),\n labelText: t('options.sendTranscript.label')\n }), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"div\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_0__.className)('options__actions'),\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"button\", {\n type: \"submit\",\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_0__.className)('button', 'button--primary', 'options__submit'),\n children: t('options.sendTranscript.sendButtonText')\n })\n })]\n });\n}\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/options/transcript/transcript-form.js?");
1950
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ TranscriptForm)\n/* harmony export */ });\n/* harmony import */ var _lib_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../lib/css */ \"./src/javascripts/lib/css.js\");\n/* harmony import */ var _domains_i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../domains/i18n */ \"./src/javascripts/domains/i18n/index.js\");\n/* harmony import */ var _form_controls_form__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../form-controls/form */ \"./src/javascripts/ui/components/form-controls/form.js\");\n/* harmony import */ var _form_controls_input__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../form-controls/input */ \"./src/javascripts/ui/components/form-controls/input.js\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__);\n\n\n\n\n\n\nfunction TranscriptForm({\n controlName,\n describedById\n}) {\n const {\n t\n } = (0,_domains_i18n__WEBPACK_IMPORTED_MODULE_1__.useI18n)();\n return (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(_form_controls_form__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n noValidate: \"true\",\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_0__.className)('options__form'),\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_form_controls_input__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n name: controlName,\n type: \"email\",\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_0__.className)('transcript__input'),\n \"aria-describedby\": describedById,\n labelClass: (0,_lib_css__WEBPACK_IMPORTED_MODULE_0__.className)('label'),\n labelText: t('options.sendTranscript.label')\n }), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"div\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_0__.className)('options__actions'),\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"button\", {\n type: \"submit\",\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_0__.className)('button', 'button--primary', 'options__submit'),\n children: t('options.sendTranscript.sendButtonText')\n })\n })]\n });\n}\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/options/transcript/transcript-form.js?");
1951
+
1952
+ /***/ }),
1953
+
1954
+ /***/ "./src/javascripts/ui/components/suggestions/index.js":
1955
+ /*!************************************************************!*\
1956
+ !*** ./src/javascripts/ui/components/suggestions/index.js ***!
1957
+ \************************************************************/
1958
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1959
+
1960
+ "use strict";
1961
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact/hooks */ \"preact/hooks\");\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(preact_hooks__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _lib_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../lib/css */ \"./src/javascripts/lib/css.js\");\n/* harmony import */ var _domains_i18n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../domains/i18n */ \"./src/javascripts/domains/i18n/index.js\");\n/* harmony import */ var _hooks_seamly_state_hooks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../hooks/seamly-state-hooks */ \"./src/javascripts/ui/hooks/seamly-state-hooks.js\");\n/* harmony import */ var _domains_translations__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../domains/translations */ \"./src/javascripts/domains/translations/index.js\");\n/* harmony import */ var _domains_interrupt__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../domains/interrupt */ \"./src/javascripts/domains/interrupt/index.js\");\n/* harmony import */ var _hooks_utility_hooks__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../hooks/utility-hooks */ \"./src/javascripts/ui/hooks/utility-hooks.js\");\n/* harmony import */ var _hooks_use_seamly_idle_detach_countdown__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../hooks/use-seamly-idle-detach-countdown */ \"./src/javascripts/ui/hooks/use-seamly-idle-detach-countdown.js\");\n/* harmony import */ var _hooks_use_seamly_resume_conversation_prompt__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../hooks/use-seamly-resume-conversation-prompt */ \"./src/javascripts/ui/hooks/use-seamly-resume-conversation-prompt.js\");\n/* harmony import */ var _hooks_use_seamly_commands__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../hooks/use-seamly-commands */ \"./src/javascripts/ui/hooks/use-seamly-commands.js\");\n/* harmony import */ var _hooks_focus_helper_hooks__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../hooks/focus-helper-hooks */ \"./src/javascripts/ui/hooks/focus-helper-hooks.js\");\n/* harmony import */ var _utils_seamly_utils__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../utils/seamly-utils */ \"./src/javascripts/ui/utils/seamly-utils.js\");\n/* harmony import */ var _domains_app__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../../domains/app */ \"./src/javascripts/domains/app/index.js\");\n/* harmony import */ var _domains_visibility__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../../domains/visibility */ \"./src/javascripts/domains/visibility/index.js\");\n/* harmony import */ var _widgets_in_out_transition__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../widgets/in-out-transition */ \"./src/javascripts/ui/components/widgets/in-out-transition.js\");\n/* harmony import */ var _hooks_live_region_hooks__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../../hooks/live-region-hooks */ \"./src/javascripts/ui/hooks/live-region-hooks.js\");\n/* harmony import */ var _utils_general_utils__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../../utils/general-utils */ \"./src/javascripts/ui/utils/general-utils.js\");\n/* harmony import */ var _suggestions_list__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./suggestions-list */ \"./src/javascripts/ui/components/suggestions/suggestions-list.js\");\n/* harmony import */ var _domains_config__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../../../domains/config */ \"./src/javascripts/domains/config/index.js\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_19___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_19__);\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst Suggestions = ({\n isAside\n}) => {\n // generic hooks\n const {\n layoutMode\n } = (0,_domains_config__WEBPACK_IMPORTED_MODULE_18__.useConfig)();\n const {\n t\n } = (0,_domains_i18n__WEBPACK_IMPORTED_MODULE_2__.useI18n)();\n const {\n sendAction,\n addMessageBubble\n } = (0,_hooks_use_seamly_commands__WEBPACK_IMPORTED_MODULE_9__[\"default\"])();\n const {\n isOpen,\n setVisibility\n } = (0,_domains_visibility__WEBPACK_IMPORTED_MODULE_13__.useVisibility)(); // a11y hooks\n\n const sectionId = (0,_hooks_utility_hooks__WEBPACK_IMPORTED_MODULE_6__.useGeneratedId)();\n const focusSkiplinkTarget = (0,_hooks_focus_helper_hooks__WEBPACK_IMPORTED_MODULE_10__.useSkiplinkTargetFocusing)();\n const containerRef = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n const {\n sendPolite\n } = (0,_hooks_live_region_hooks__WEBPACK_IMPORTED_MODULE_15__.useLiveRegion)(); // interrupt & countdown hooks\n\n const {\n hasInterrupt\n } = (0,_domains_interrupt__WEBPACK_IMPORTED_MODULE_5__.useInterrupt)();\n const {\n hasCountdown,\n endCountdown\n } = (0,_hooks_use_seamly_idle_detach_countdown__WEBPACK_IMPORTED_MODULE_7__[\"default\"])();\n const {\n hasPrompt,\n continueChat\n } = (0,_hooks_use_seamly_resume_conversation_prompt__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(); // data hooks\n\n const hasResponded = (0,_domains_app__WEBPACK_IMPORTED_MODULE_12__.useUserHasResponded)();\n const payload = (0,_hooks_seamly_state_hooks__WEBPACK_IMPORTED_MODULE_3__.useSeamlyServiceData)('suggestion');\n const [eventBody] = (0,_domains_translations__WEBPACK_IMPORTED_MODULE_4__.useTranslatedEventData)({\n payload\n });\n const suggestions = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => payload && !hasInterrupt ? eventBody : [], [payload, hasInterrupt, eventBody]);\n const prevSuggestions = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n const prevHasSuggestions = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)(false);\n const previousRenderedSuggestions = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)([]);\n const hasSuggestions = !!suggestions.length;\n const hideSuggestions = layoutMode === 'inline' ? (hasResponded || isOpen) && !isAside : hasResponded;\n const prevHideSuggestions = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)(hideSuggestions);\n const showSuggestionsContainer = hasSuggestions && !hideSuggestions;\n const renderedSuggestions = hasSuggestions ? suggestions : previousRenderedSuggestions.current;\n previousRenderedSuggestions.current = renderedSuggestions; // click handler\n\n const handleClick = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)(({\n id,\n question\n }) => {\n if (hasCountdown) {\n endCountdown(true);\n }\n\n if (hasPrompt) {\n continueChat();\n } // @todo Refactor to 'suggestionclick'\n\n\n sendAction({\n type: _utils_seamly_utils__WEBPACK_IMPORTED_MODULE_11__.actionTypes.custom,\n originMessage: payload.id,\n body: {\n type: 'faqclick',\n body: {\n faqId: id,\n faqQuestion: question\n }\n }\n });\n addMessageBubble(question);\n\n if (!isOpen) {\n setVisibility(_domains_visibility__WEBPACK_IMPORTED_MODULE_13__.visibilityStates.open);\n }\n\n focusSkiplinkTarget();\n }, [addMessageBubble, continueChat, endCountdown, focusSkiplinkTarget, hasCountdown, hasPrompt, payload, sendAction, setVisibility, isOpen]);\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (prevSuggestions.current !== suggestions && !hideSuggestions) {\n if (hasSuggestions) {\n const politeText = prevHasSuggestions.current ? t('suggestions.srUpdatedText') : t('suggestions.srAvailableText');\n setTimeout(() => {\n sendPolite(politeText);\n }, 30);\n } else if (prevHasSuggestions.current) {\n sendPolite(t('suggestions.srUnavailableText'));\n }\n\n prevSuggestions.current = suggestions;\n }\n\n if (!prevHideSuggestions.current && hideSuggestions) {\n (0,_utils_general_utils__WEBPACK_IMPORTED_MODULE_16__.runIfElementContainsOrHasFocus)(containerRef.current, focusSkiplinkTarget);\n sendPolite(t('suggestions.srUnavailableText'));\n } else if (!hasSuggestions && prevHasSuggestions.current) {\n (0,_utils_general_utils__WEBPACK_IMPORTED_MODULE_16__.runIfElementContainsOrHasFocus)(containerRef.current, focusSkiplinkTarget);\n }\n\n prevHasSuggestions.current = hasSuggestions;\n prevHideSuggestions.current = hideSuggestions;\n }, [suggestions, hasSuggestions, hideSuggestions, focusSkiplinkTarget, sendPolite, t]);\n const headingText = t('suggestions.headingText');\n const footerText = t('suggestions.footerText');\n const ContainerElement = headingText ? 'section' : 'div';\n return (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_19__.jsx)(_widgets_in_out_transition__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n isActive: showSuggestionsContainer,\n transitionStartState: _widgets_in_out_transition__WEBPACK_IMPORTED_MODULE_14__.transitionStartStates.notRendered,\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_19__.jsxs)(ContainerElement, {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_1__.className)('suggestions'),\n \"aria-labelledby\": headingText ? sectionId : null,\n ref: containerRef,\n children: [headingText && (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_19__.jsx)(\"h2\", {\n id: sectionId,\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_1__.className)('suggestions__heading'),\n children: headingText\n }), !!renderedSuggestions.length && (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_19__.jsx)(_suggestions_list__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n hasIcon: true,\n suggestions: renderedSuggestions,\n onClickSuggestion: handleClick\n }), footerText && !isOpen && (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_19__.jsx)(\"p\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_1__.className)('suggestions__footer'),\n children: footerText\n })]\n })\n });\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Suggestions);\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/suggestions/index.js?");
1962
+
1963
+ /***/ }),
1964
+
1965
+ /***/ "./src/javascripts/ui/components/suggestions/suggestions-item.js":
1966
+ /*!***********************************************************************!*\
1967
+ !*** ./src/javascripts/ui/components/suggestions/suggestions-item.js ***!
1968
+ \***********************************************************************/
1969
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1970
+
1971
+ "use strict";
1972
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"mapCategoryToClass\": () => (/* binding */ mapCategoryToClass),\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact/hooks */ \"preact/hooks\");\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(preact_hooks__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _lib_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../lib/css */ \"./src/javascripts/lib/css.js\");\n/* harmony import */ var _layout_icon__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../layout/icon */ \"./src/javascripts/ui/components/layout/icon.js\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__);\n\n\n\n\n\nconst mapCategoryToClass = category => `suggestions__item--${String(category).toLowerCase().replace(/[^a-z0-9_\\\\-]/, '')}`;\n\nconst SuggestionsItem = ({\n id,\n categories = [],\n question,\n onClick,\n hasIcon\n}) => {\n const mappedClassNames = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => {\n return ['suggestions-item', ...categories.map(mapCategoryToClass)];\n }, [categories]);\n const handleClick = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {\n if (onClick) {\n onClick({\n id,\n question\n });\n }\n }, [id, question, onClick]);\n return (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(\"li\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_1__.className)(mappedClassNames),\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(\"button\", {\n type: \"button\",\n onClick: handleClick,\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_1__.className)('button', 'button--primary'),\n children: [hasIcon && (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_layout_icon__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n name: \"chevronRight\",\n size: \"8\"\n }), question]\n })\n });\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SuggestionsItem);\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/suggestions/suggestions-item.js?");
1973
+
1974
+ /***/ }),
1975
+
1976
+ /***/ "./src/javascripts/ui/components/suggestions/suggestions-list.js":
1977
+ /*!***********************************************************************!*\
1978
+ !*** ./src/javascripts/ui/components/suggestions/suggestions-list.js ***!
1979
+ \***********************************************************************/
1980
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1981
+
1982
+ "use strict";
1983
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _lib_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../lib/css */ \"./src/javascripts/lib/css.js\");\n/* harmony import */ var _suggestions_item__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./suggestions-item */ \"./src/javascripts/ui/components/suggestions/suggestions-item.js\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__);\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n\n\n\n\nconst SuggestionsList = ({\n className: givenClassName,\n suggestions = [],\n onClickSuggestion,\n hasIcon\n}) => {\n return (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"ul\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_0__.className)('suggestions__list', givenClassName),\n children: suggestions.map(suggestion => (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(_suggestions_item__WEBPACK_IMPORTED_MODULE_1__[\"default\"], _objectSpread({\n hasIcon: hasIcon,\n onClick: onClickSuggestion\n }, suggestion), suggestion.id))\n });\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SuggestionsList);\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/suggestions/suggestions-list.js?");
1984
+
1985
+ /***/ }),
1986
+
1987
+ /***/ "./src/javascripts/ui/components/view/app-view.js":
1988
+ /*!********************************************************!*\
1989
+ !*** ./src/javascripts/ui/components/view/app-view.js ***!
1990
+ \********************************************************/
1991
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1992
+
1993
+ "use strict";
1994
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _layout_app_frame__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../layout/app-frame */ \"./src/javascripts/ui/components/layout/app-frame.js\");\n/* harmony import */ var _layout_interrupt__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../layout/interrupt */ \"./src/javascripts/ui/components/layout/interrupt.js\");\n/* harmony import */ var _conversation_conversation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../conversation/conversation */ \"./src/javascripts/ui/components/conversation/conversation.js\");\n/* harmony import */ var _entry_entry_container__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../entry/entry-container */ \"./src/javascripts/ui/components/entry/entry-container.js\");\n/* harmony import */ var _layout_chat_frame__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../layout/chat-frame */ \"./src/javascripts/ui/components/layout/chat-frame.js\");\n/* harmony import */ var _hooks_use_seamly_chat__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../hooks/use-seamly-chat */ \"./src/javascripts/ui/hooks/use-seamly-chat.js\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__);\n\n\n\n\n\n\n\n\n\nconst AppView = () => {\n (0,_hooks_use_seamly_chat__WEBPACK_IMPORTED_MODULE_5__[\"default\"])();\n return (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_layout_app_frame__WEBPACK_IMPORTED_MODULE_0__[\"default\"], {\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(_layout_chat_frame__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n interruptComponent: _layout_interrupt__WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_conversation_conversation__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {}), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_entry_entry_container__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {})]\n })\n });\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (AppView);\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/view/app-view.js?");
1995
+
1996
+ /***/ }),
1997
+
1998
+ /***/ "./src/javascripts/ui/components/view/deprecated-view.js":
1999
+ /*!***************************************************************!*\
2000
+ !*** ./src/javascripts/ui/components/view/deprecated-view.js ***!
2001
+ \***************************************************************/
2002
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2003
+
2004
+ "use strict";
2005
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _layout_app_frame__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../layout/app-frame */ \"./src/javascripts/ui/components/layout/app-frame.js\");\n/* harmony import */ var _layout_chat_frame__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../layout/chat-frame */ \"./src/javascripts/ui/components/layout/chat-frame.js\");\n/* harmony import */ var _layout_agent_info__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../layout/agent-info */ \"./src/javascripts/ui/components/layout/agent-info.js\");\n/* harmony import */ var _layout_header__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../layout/header */ \"./src/javascripts/ui/components/layout/header.js\");\n/* harmony import */ var _conversation_conversation__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../conversation/conversation */ \"./src/javascripts/ui/components/conversation/conversation.js\");\n/* harmony import */ var _entry_entry_container__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../entry/entry-container */ \"./src/javascripts/ui/components/entry/entry-container.js\");\n/* harmony import */ var _layout_interrupt__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../layout/interrupt */ \"./src/javascripts/ui/components/layout/interrupt.js\");\n/* harmony import */ var _hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../hooks/seamly-hooks */ \"./src/javascripts/ui/hooks/seamly-hooks.js\");\n/* harmony import */ var _domains_visibility__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../../domains/visibility */ \"./src/javascripts/domains/visibility/index.js\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__);\n\n\n\n\n\n\n\n\n\n\n\n\nconst DeprecatedView = () => {\n const {\n isVisible\n } = (0,_domains_visibility__WEBPACK_IMPORTED_MODULE_8__.useVisibility)();\n const {\n closeChat\n } = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_7__.useSeamlyChat)();\n return isVisible && (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxs)(_layout_app_frame__WEBPACK_IMPORTED_MODULE_0__[\"default\"], {\n isDeprecated: true,\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsx)(_layout_header__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n onCloseChat: closeChat,\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsx)(_layout_agent_info__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {})\n }), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxs)(_layout_chat_frame__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n interruptComponent: _layout_interrupt__WEBPACK_IMPORTED_MODULE_6__[\"default\"],\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsx)(_conversation_conversation__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {}), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsx)(_entry_entry_container__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {})]\n })]\n });\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (DeprecatedView);\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/view/deprecated-view.js?");
2006
+
2007
+ /***/ }),
2008
+
2009
+ /***/ "./src/javascripts/ui/components/view/index.js":
2010
+ /*!*****************************************************!*\
2011
+ !*** ./src/javascripts/ui/components/view/index.js ***!
2012
+ \*****************************************************/
2013
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2014
+
2015
+ "use strict";
2016
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _domains_config__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../domains/config */ \"./src/javascripts/domains/config/index.js\");\n/* harmony import */ var _app_view__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./app-view */ \"./src/javascripts/ui/components/view/app-view.js\");\n/* harmony import */ var _inline_view__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./inline-view */ \"./src/javascripts/ui/components/view/inline-view.js\");\n/* harmony import */ var _window_view__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./window-view */ \"./src/javascripts/ui/components/view/window-view/index.js\");\n/* harmony import */ var _hooks_seamly_state_hooks__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../hooks/seamly-state-hooks */ \"./src/javascripts/ui/hooks/seamly-state-hooks.js\");\n/* harmony import */ var _domains_visibility__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../domains/visibility */ \"./src/javascripts/domains/visibility/index.js\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__);\n\n\n\n\n\n\n\nconst ViewComponentsMap = {\n app: _app_view__WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n inline: _inline_view__WEBPACK_IMPORTED_MODULE_2__[\"default\"],\n window: _window_view__WEBPACK_IMPORTED_MODULE_3__[\"default\"]\n};\n\nconst View = () => {\n const {\n layoutMode\n } = (0,_domains_config__WEBPACK_IMPORTED_MODULE_0__.useConfig)();\n const {\n visible\n } = (0,_hooks_seamly_state_hooks__WEBPACK_IMPORTED_MODULE_4__.useSeamlyStateContext)();\n const ViewComponent = ViewComponentsMap[layoutMode];\n\n if (!ViewComponent) {\n console.warn('\"layoutMode\" should be one of \"app\", \"inline\" or \"window\"');\n return null;\n }\n\n return visible !== _domains_visibility__WEBPACK_IMPORTED_MODULE_5__.visibilityStates.hidden && (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(ViewComponent, {});\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (View);\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/view/index.js?");
2017
+
2018
+ /***/ }),
2019
+
2020
+ /***/ "./src/javascripts/ui/components/view/inline-view.js":
2021
+ /*!***********************************************************!*\
2022
+ !*** ./src/javascripts/ui/components/view/inline-view.js ***!
2023
+ \***********************************************************/
2024
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2025
+
2026
+ "use strict";
2027
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _lib_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../lib/css */ \"./src/javascripts/lib/css.js\");\n/* harmony import */ var _layout_app_frame__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../layout/app-frame */ \"./src/javascripts/ui/components/layout/app-frame.js\");\n/* harmony import */ var _layout_interrupt__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../layout/interrupt */ \"./src/javascripts/ui/components/layout/interrupt.js\");\n/* harmony import */ var _conversation_conversation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../conversation/conversation */ \"./src/javascripts/ui/components/conversation/conversation.js\");\n/* harmony import */ var _entry_entry_container__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../entry/entry-container */ \"./src/javascripts/ui/components/entry/entry-container.js\");\n/* harmony import */ var _layout_chat_frame__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../layout/chat-frame */ \"./src/javascripts/ui/components/layout/chat-frame.js\");\n/* harmony import */ var _hooks_use_seamly_chat__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../hooks/use-seamly-chat */ \"./src/javascripts/ui/hooks/use-seamly-chat.js\");\n/* harmony import */ var _domains_visibility__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../../domains/visibility */ \"./src/javascripts/domains/visibility/index.js\");\n/* harmony import */ var _layout_pre_chat_messages__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../layout/pre-chat-messages */ \"./src/javascripts/ui/components/layout/pre-chat-messages.js\");\n/* harmony import */ var _suggestions__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../suggestions */ \"./src/javascripts/ui/components/suggestions/index.js\");\n/* harmony import */ var _widgets_in_out_transition__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../widgets/in-out-transition */ \"./src/javascripts/ui/components/widgets/in-out-transition.js\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_11__);\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst InlineView = () => {\n (0,_hooks_use_seamly_chat__WEBPACK_IMPORTED_MODULE_6__[\"default\"])();\n const {\n isOpen\n } = (0,_domains_visibility__WEBPACK_IMPORTED_MODULE_7__.useVisibility)();\n return (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_11__.jsxs)(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_11__.Fragment, {\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_11__.jsx)(_widgets_in_out_transition__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n isActive: !isOpen,\n transitionStartState: _widgets_in_out_transition__WEBPACK_IMPORTED_MODULE_10__.transitionStartStates.rendered,\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_11__.jsxs)(\"div\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_0__.className)('unstarted-wrapper'),\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_11__.jsx)(_layout_pre_chat_messages__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {}), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_11__.jsx)(_suggestions__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {})]\n })\n }), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_11__.jsx)(_widgets_in_out_transition__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n isActive: isOpen,\n transitionStartState: _widgets_in_out_transition__WEBPACK_IMPORTED_MODULE_10__.transitionStartStates.rendered,\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_11__.jsx)(_layout_app_frame__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_11__.jsxs)(_layout_chat_frame__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n interruptComponent: _layout_interrupt__WEBPACK_IMPORTED_MODULE_2__[\"default\"],\n children: [isOpen && (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_11__.jsx)(_conversation_conversation__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {}), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_11__.jsx)(_entry_entry_container__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {})]\n })\n })\n })]\n });\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (InlineView);\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/view/inline-view.js?");
1973
2028
 
1974
2029
  /***/ }),
1975
2030
 
1976
- /***/ "./src/javascripts/ui/components/warnings/cobrowsing-active-frame.js":
2031
+ /***/ "./src/javascripts/ui/components/view/window-view/collapse-button.js":
1977
2032
  /*!***************************************************************************!*\
1978
- !*** ./src/javascripts/ui/components/warnings/cobrowsing-active-frame.js ***!
2033
+ !*** ./src/javascripts/ui/components/view/window-view/collapse-button.js ***!
1979
2034
  \***************************************************************************/
1980
2035
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1981
2036
 
1982
2037
  "use strict";
1983
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact/hooks */ \"preact/hooks\");\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(preact_hooks__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _cobrowsing_active__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./cobrowsing-active */ \"./src/javascripts/ui/components/warnings/cobrowsing-active.js\");\n/* harmony import */ var _hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../hooks/seamly-hooks */ \"./src/javascripts/ui/hooks/seamly-hooks.js\");\n/* harmony import */ var _domains_i18n__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../domains/i18n */ \"./src/javascripts/domains/i18n/index.js\");\n/* harmony import */ var _domains_interrupt__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../domains/interrupt */ \"./src/javascripts/domains/interrupt/index.js\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__);\n\n\n\n\n\n\n\nconst CobrowsingActiveFrame = () => {\n const {\n t\n } = (0,_domains_i18n__WEBPACK_IMPORTED_MODULE_3__.useI18n)();\n const {\n userSelectedOptions\n } = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_2__.useSeamlyOptions)();\n const {\n hasInterrupt\n } = (0,_domains_interrupt__WEBPACK_IMPORTED_MODULE_4__.useInterrupt)();\n const {\n cobrowsing\n } = userSelectedOptions;\n const prevCobrowsing = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)(cobrowsing);\n const {\n sendPolite\n } = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_2__.useLiveRegion)();\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (!cobrowsing && prevCobrowsing.current) {\n // This timeout is required as the live announce may be swallowed due to other\n // announcements around cobrowsing.\n setTimeout(() => {\n sendPolite(t('options.cobrowsing.srStoppedCobrowsingText'));\n }, 300);\n }\n\n prevCobrowsing.current = cobrowsing;\n }, [cobrowsing, t, sendPolite]);\n return cobrowsing && !hasInterrupt && (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_cobrowsing_active__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {});\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (CobrowsingActiveFrame);\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/warnings/cobrowsing-active-frame.js?");
2038
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact/hooks */ \"preact/hooks\");\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(preact_hooks__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _lib_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../lib/css */ \"./src/javascripts/lib/css.js\");\n/* harmony import */ var _layout_icon__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../layout/icon */ \"./src/javascripts/ui/components/layout/icon.js\");\n/* harmony import */ var _domains_i18n__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../../domains/i18n */ \"./src/javascripts/domains/i18n/index.js\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__);\n\n\n\n\n\n\nconst CollapseButton = ({\n onClick\n}) => {\n const {\n t\n } = (0,_domains_i18n__WEBPACK_IMPORTED_MODULE_3__.useI18n)();\n const handleClick = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => onClick(), [onClick]);\n return (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"button\", {\n type: \"button\",\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_1__.className)('button', 'collapse-button'),\n onClick: handleClick,\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_layout_icon__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n name: \"chevronDown\",\n size: \"32\",\n alt: t('window.srCollapseButton')\n })\n });\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (CollapseButton);\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/view/window-view/collapse-button.js?");
1984
2039
 
1985
2040
  /***/ }),
1986
2041
 
1987
- /***/ "./src/javascripts/ui/components/warnings/cobrowsing-active.js":
1988
- /*!*********************************************************************!*\
1989
- !*** ./src/javascripts/ui/components/warnings/cobrowsing-active.js ***!
1990
- \*********************************************************************/
2042
+ /***/ "./src/javascripts/ui/components/view/window-view/index.js":
2043
+ /*!*****************************************************************!*\
2044
+ !*** ./src/javascripts/ui/components/view/window-view/index.js ***!
2045
+ \*****************************************************************/
1991
2046
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1992
2047
 
1993
2048
  "use strict";
1994
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../hooks/seamly-hooks */ \"./src/javascripts/ui/hooks/seamly-hooks.js\");\n/* harmony import */ var _domains_i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../domains/i18n */ \"./src/javascripts/domains/i18n/index.js\");\n/* harmony import */ var _utils_seamly_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../utils/seamly-utils */ \"./src/javascripts/ui/utils/seamly-utils.js\");\n/* harmony import */ var _chat_status__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../chat-status */ \"./src/javascripts/ui/components/chat-status/index.js\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__);\n\n\n\n\n\n\nconst CobrowsingActive = () => {\n const {\n t\n } = (0,_domains_i18n__WEBPACK_IMPORTED_MODULE_1__.useI18n)();\n const {\n setUserSelectedOption\n } = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_0__.useSeamlyOptions)();\n const focusSkiplinkTarget = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_0__.useSkiplinkTargetFocusing)();\n const {\n id\n } = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_0__.useCobrowsingContainer)();\n\n const onClickHandler = () => {\n setUserSelectedOption(_utils_seamly_utils__WEBPACK_IMPORTED_MODULE_2__.featureKeys.cobrowsing, false);\n focusSkiplinkTarget();\n };\n\n return (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_chat_status__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n type: \"cobrowsing\",\n id: id,\n label: t('options.cobrowsing.cobrowsingActiveText'),\n onButtonClick: onClickHandler,\n buttonText: t('options.cobrowsing.stopCobrowsingText'),\n srButtonText: t('options.cobrowsing.srStopCobrowsingText')\n });\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (CobrowsingActive);\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/warnings/cobrowsing-active.js?");
2049
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact/hooks */ \"preact/hooks\");\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(preact_hooks__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../hooks/seamly-hooks */ \"./src/javascripts/ui/hooks/seamly-hooks.js\");\n/* harmony import */ var _domains_visibility__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../domains/visibility */ \"./src/javascripts/domains/visibility/index.js\");\n/* harmony import */ var _layout_app_frame__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../layout/app-frame */ \"./src/javascripts/ui/components/layout/app-frame.js\");\n/* harmony import */ var _layout_chat_frame__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../layout/chat-frame */ \"./src/javascripts/ui/components/layout/chat-frame.js\");\n/* harmony import */ var _layout_interrupt__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../layout/interrupt */ \"./src/javascripts/ui/components/layout/interrupt.js\");\n/* harmony import */ var _conversation_conversation__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../conversation/conversation */ \"./src/javascripts/ui/components/conversation/conversation.js\");\n/* harmony import */ var _entry_entry_container__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../entry/entry-container */ \"./src/javascripts/ui/components/entry/entry-container.js\");\n/* harmony import */ var _window_open_button__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./window-open-button */ \"./src/javascripts/ui/components/view/window-view/window-open-button.js\");\n/* harmony import */ var _collapse_button__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./collapse-button */ \"./src/javascripts/ui/components/view/window-view/collapse-button.js\");\n/* harmony import */ var _widgets_in_out_transition__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../widgets/in-out-transition */ \"./src/javascripts/ui/components/widgets/in-out-transition.js\");\n/* harmony import */ var _layout_pre_chat_messages__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../layout/pre-chat-messages */ \"./src/javascripts/ui/components/layout/pre-chat-messages.js\");\n/* harmony import */ var _domains_app__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../../../domains/app */ \"./src/javascripts/domains/app/index.js\");\n/* harmony import */ var _lib_css__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../../../lib/css */ \"./src/javascripts/lib/css.js\");\n/* harmony import */ var _conversation_event_splash__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../conversation/event/splash */ \"./src/javascripts/ui/components/conversation/event/splash.js\");\n/* harmony import */ var _domains_i18n__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../../../../domains/i18n */ \"./src/javascripts/domains/i18n/index.js\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_16___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_16__);\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst WindowView = () => {\n const {\n openChat,\n closeChat\n } = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_1__.useSeamlyChat)();\n const {\n isOpen\n } = (0,_domains_visibility__WEBPACK_IMPORTED_MODULE_2__.useVisibility)();\n const hasResponded = (0,_domains_app__WEBPACK_IMPORTED_MODULE_12__.useUserHasResponded)();\n const {\n t\n } = (0,_domains_i18n__WEBPACK_IMPORTED_MODULE_15__.useI18n)();\n const continueChatText = t('window.chat.continue');\n const continueChatEvent = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => ({\n payload: {\n body: {\n text: continueChatText\n }\n }\n }), [continueChatText]);\n return (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_16__.jsxs)(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_16__.Fragment, {\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_16__.jsx)(_window_open_button__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n onClick: openChat\n }), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_16__.jsx)(_widgets_in_out_transition__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n isActive: !isOpen && !hasResponded,\n transitionStartState: _widgets_in_out_transition__WEBPACK_IMPORTED_MODULE_10__.transitionStartStates.rendered,\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_16__.jsx)(\"div\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_13__.className)('unstarted-wrapper', 'unstarted-wrapper--window'),\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_16__.jsx)(_layout_pre_chat_messages__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {})\n })\n }), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_16__.jsx)(_widgets_in_out_transition__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n isActive: !isOpen && hasResponded,\n transitionStartState: _widgets_in_out_transition__WEBPACK_IMPORTED_MODULE_10__.transitionStartStates.notRendered,\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_16__.jsx)(\"div\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_13__.className)('unstarted-wrapper', 'unstarted-wrapper--window', 'unstarted-wrapper--continue'),\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_16__.jsx)(_conversation_event_splash__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n event: continueChatEvent\n })\n })\n }), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_16__.jsx)(_widgets_in_out_transition__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n isActive: isOpen,\n transitionStartState: _widgets_in_out_transition__WEBPACK_IMPORTED_MODULE_10__.transitionStartStates.notRendered,\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_16__.jsxs)(_layout_app_frame__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n children: [isOpen && (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_16__.jsx)(_collapse_button__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n onClick: closeChat\n }), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_16__.jsxs)(_layout_chat_frame__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n interruptComponent: _layout_interrupt__WEBPACK_IMPORTED_MODULE_5__[\"default\"],\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_16__.jsx)(_conversation_conversation__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {}), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_16__.jsx)(_entry_entry_container__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {})]\n })]\n })\n })]\n });\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (WindowView);\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/view/window-view/index.js?");
2050
+
2051
+ /***/ }),
2052
+
2053
+ /***/ "./src/javascripts/ui/components/view/window-view/window-open-button.js":
2054
+ /*!******************************************************************************!*\
2055
+ !*** ./src/javascripts/ui/components/view/window-view/window-open-button.js ***!
2056
+ \******************************************************************************/
2057
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2058
+
2059
+ "use strict";
2060
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact/hooks */ \"preact/hooks\");\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(preact_hooks__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _lib_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../lib/css */ \"./src/javascripts/lib/css.js\");\n/* harmony import */ var _hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../hooks/seamly-hooks */ \"./src/javascripts/ui/hooks/seamly-hooks.js\");\n/* harmony import */ var _domains_i18n__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../../domains/i18n */ \"./src/javascripts/domains/i18n/index.js\");\n/* harmony import */ var _domains_config__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../../domains/config */ \"./src/javascripts/domains/config/index.js\");\n/* harmony import */ var _domains_visibility__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../../domains/visibility */ \"./src/javascripts/domains/visibility/index.js\");\n/* harmony import */ var _layout_icon__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../layout/icon */ \"./src/javascripts/ui/components/layout/icon.js\");\n/* harmony import */ var _domains_interrupt__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../../../domains/interrupt */ \"./src/javascripts/domains/interrupt/index.js\");\n/* harmony import */ var _widgets_in_out_transition__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../widgets/in-out-transition */ \"./src/javascripts/ui/components/widgets/in-out-transition.js\");\n/* harmony import */ var _hooks_seamly_api_hooks__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../../hooks/seamly-api-hooks */ \"./src/javascripts/ui/hooks/seamly-api-hooks.js\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__);\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst ButtonIcon = () => {\n const currentAgent = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_2__.useSeamlyCurrentAgent)();\n const {\n hasInterrupt\n } = (0,_domains_interrupt__WEBPACK_IMPORTED_MODULE_7__.useInterrupt)();\n const {\n defaults\n } = (0,_domains_config__WEBPACK_IMPORTED_MODULE_4__.useConfig)();\n const startChatIcon = defaults === null || defaults === void 0 ? void 0 : defaults.startChatIcon;\n const avatar = currentAgent && !hasInterrupt ? currentAgent.avatar : undefined;\n return avatar || startChatIcon ? (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)(\"img\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_1__.className)(avatar ? 'avatar' : 'icon'),\n src: avatar || startChatIcon,\n alt: \"\"\n }) : (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)(_layout_icon__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n name: \"avatar\",\n size: \"32\"\n });\n};\n\nconst WindowOpenButton = ({\n onClick\n}) => {\n const hasConversation = (0,_hooks_seamly_api_hooks__WEBPACK_IMPORTED_MODULE_9__.useSeamlyHasConversation)();\n const {\n t\n } = (0,_domains_i18n__WEBPACK_IMPORTED_MODULE_3__.useI18n)();\n const ariaLabel = hasConversation ? t('window.openButton.srContinue') : t('window.openButton.srStart');\n const focusSkiplinkTarget = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_2__.useSkiplinkTargetFocusing)();\n const {\n isOpen\n } = (0,_domains_visibility__WEBPACK_IMPORTED_MODULE_5__.useVisibility)();\n const count = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_2__.useSeamlyUnreadCount)();\n const handleClick = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {\n onClick();\n focusSkiplinkTarget();\n }, [focusSkiplinkTarget, onClick]);\n return (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)(_widgets_in_out_transition__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n isActive: !isOpen,\n transitionStartState: _widgets_in_out_transition__WEBPACK_IMPORTED_MODULE_8__.transitionStartStates.rendered,\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxs)(\"button\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_1__.className)('window-open-button'),\n \"aria-label\": ariaLabel,\n \"aria-hidden\": isOpen,\n onClick: handleClick,\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)(\"span\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_1__.className)('message-count'),\n \"aria-hidden\": \"true\",\n children: !!count && count\n }), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)(ButtonIcon, {})]\n })\n });\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (WindowOpenButton);\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/view/window-view/window-open-button.js?");
1995
2061
 
1996
2062
  /***/ }),
1997
2063
 
@@ -2046,7 +2112,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
2046
2112
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2047
2113
 
2048
2114
  "use strict";
2049
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact/hooks */ \"preact/hooks\");\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(preact_hooks__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _modal__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modal */ \"./src/javascripts/ui/components/widgets/modal.js\");\n/* harmony import */ var _domains_i18n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../domains/i18n */ \"./src/javascripts/domains/i18n/index.js\");\n/* harmony import */ var _hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../hooks/seamly-hooks */ \"./src/javascripts/ui/hooks/seamly-hooks.js\");\n/* harmony import */ var _lib_css__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../lib/css */ \"./src/javascripts/lib/css.js\");\n/* harmony import */ var _layout_icon__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../layout/icon */ \"./src/javascripts/ui/components/layout/icon.js\");\n/* harmony import */ var _domains_config__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../../domains/config */ \"./src/javascripts/domains/config/index.js\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__);\n\n\n\n\n\n\n\n\n\n\nconst Lightbox = ({\n url,\n description,\n onClose: onCloseHandler\n}) => {\n const {\n zIndex\n } = (0,_domains_config__WEBPACK_IMPORTED_MODULE_6__.useConfig)();\n const onActivityHandler = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_3__.useSeamlyActivityEventHandler)();\n const appContainerClassNames = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_3__.useSeamlyAppContainerClassNames)();\n const focusContainer = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n const {\n t\n } = (0,_domains_i18n__WEBPACK_IMPORTED_MODULE_2__.useI18n)();\n const classNames = ['modal', ...appContainerClassNames];\n\n const onFrameClickHandler = e => {\n e.stopPropagation();\n };\n\n const onFloatClickHandler = () => {\n onCloseHandler();\n };\n\n const style = zIndex ? {\n zIndex: zIndex + 1\n } : undefined;\n\n const getModalContent = onClose => (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(\"div\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_4__.className)(classNames),\n onClick: onFloatClickHandler,\n style: style,\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxs)(\"div\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_4__.className)('modal__float'),\n tabIndex: \"-1\",\n onMouseDown: onActivityHandler,\n onKeyDown: onActivityHandler,\n onTouchStart: onActivityHandler,\n onMouseMove: onActivityHandler,\n onWheel: onActivityHandler,\n onPointerDown: onActivityHandler,\n onPointerMove: onActivityHandler,\n ref: focusContainer,\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(\"div\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_4__.className)('modal__inner'),\n onClick: onFrameClickHandler,\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(\"img\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_4__.className)('modal__image'),\n src: url,\n alt: description\n })\n }), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxs)(\"button\", {\n type: \"button\",\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_4__.className)('modal__close'),\n onClick: onClose,\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_layout_icon__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n name: \"close\",\n size: \"16\"\n }), t('lightbox.closeLabel')]\n })]\n })\n });\n\n return (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_modal__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n onClose: onCloseHandler,\n \"aria-label\": t('lightbox.heading'),\n fallBackFocusRef: focusContainer,\n children: ({\n onClose,\n modalRenderFn\n }) => modalRenderFn(getModalContent(onClose))\n });\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Lightbox);\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/widgets/lightbox.js?");
2115
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact/hooks */ \"preact/hooks\");\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(preact_hooks__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _modal__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modal */ \"./src/javascripts/ui/components/widgets/modal.js\");\n/* harmony import */ var _domains_i18n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../domains/i18n */ \"./src/javascripts/domains/i18n/index.js\");\n/* harmony import */ var _hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../hooks/seamly-hooks */ \"./src/javascripts/ui/hooks/seamly-hooks.js\");\n/* harmony import */ var _lib_css__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../lib/css */ \"./src/javascripts/lib/css.js\");\n/* harmony import */ var _layout_icon__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../layout/icon */ \"./src/javascripts/ui/components/layout/icon.js\");\n/* harmony import */ var _domains_config__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../../domains/config */ \"./src/javascripts/domains/config/index.js\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__);\n\n\n\n\n\n\n\n\n\n\nconst Lightbox = ({\n url,\n description,\n onClose: onCloseHandler\n}) => {\n const {\n zIndex,\n layoutMode,\n namespace\n } = (0,_domains_config__WEBPACK_IMPORTED_MODULE_6__.useConfig)();\n const onActivityHandler = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_3__.useSeamlyActivityEventHandler)();\n const appContainerClassNames = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_3__.useSeamlyAppContainerClassNames)();\n const focusContainer = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n const {\n t\n } = (0,_domains_i18n__WEBPACK_IMPORTED_MODULE_2__.useI18n)(); // TODO: Change incorrect usage of css modifiers\n\n const defaultClassNames = [`app--layout-${layoutMode}`, `namespace--${namespace}`];\n const classNames = ['modal', ...defaultClassNames, ...appContainerClassNames];\n\n const onFrameClickHandler = e => {\n e.stopPropagation();\n };\n\n const onFloatClickHandler = () => {\n onCloseHandler();\n };\n\n const style = zIndex ? {\n zIndex: zIndex + 1\n } : undefined;\n\n const getModalContent = onClose => (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(\"div\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_4__.className)(classNames),\n onClick: onFloatClickHandler,\n style: style,\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxs)(\"div\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_4__.className)('modal__float'),\n tabIndex: \"-1\",\n onMouseDown: onActivityHandler,\n onKeyDown: onActivityHandler,\n onTouchStart: onActivityHandler,\n onMouseMove: onActivityHandler,\n onWheel: onActivityHandler,\n onPointerDown: onActivityHandler,\n onPointerMove: onActivityHandler,\n ref: focusContainer,\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(\"div\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_4__.className)('modal__inner'),\n onClick: onFrameClickHandler,\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(\"img\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_4__.className)('modal__image'),\n src: url,\n alt: description\n })\n }), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxs)(\"button\", {\n type: \"button\",\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_4__.className)('modal__close'),\n onClick: onClose,\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_layout_icon__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n name: \"close\",\n size: \"16\"\n }), t('lightbox.closeLabel')]\n })]\n })\n });\n\n return (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_modal__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n onClose: onCloseHandler,\n \"aria-label\": t('lightbox.heading'),\n fallBackFocusRef: focusContainer,\n children: ({\n onClose,\n modalRenderFn\n }) => modalRenderFn(getModalContent(onClose))\n });\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Lightbox);\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/widgets/lightbox.js?");
2050
2116
 
2051
2117
  /***/ }),
2052
2118
 
@@ -2079,7 +2145,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
2079
2145
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2080
2146
 
2081
2147
  "use strict";
2082
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"useSeamlyAppContainerClassNames\": () => (/* binding */ useSeamlyAppContainerClassNames),\n/* harmony export */ \"useSeamlyMessageContainerClassNames\": () => (/* binding */ useSeamlyMessageContainerClassNames),\n/* harmony export */ \"useCobrowsingContainer\": () => (/* binding */ useCobrowsingContainer)\n/* harmony export */ });\n/* harmony import */ var _seamly_state_hooks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./seamly-state-hooks */ \"./src/javascripts/ui/hooks/seamly-state-hooks.js\");\n/* harmony import */ var _focus_helper_hooks__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./focus-helper-hooks */ \"./src/javascripts/ui/hooks/focus-helper-hooks.js\");\n/* harmony import */ var _domains_config__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../domains/config */ \"./src/javascripts/domains/config/index.js\");\n\n\n\nconst useSeamlyAppContainerClassNames = () => {\n return (0,_domains_config__WEBPACK_IMPORTED_MODULE_2__.useConfig)().appContainerClassNames;\n};\nconst useSeamlyMessageContainerClassNames = event => {\n const {\n fromClient\n } = event.payload;\n const classNames = ['message'];\n\n if (event.type === 'info') {\n classNames.push('message--source-info');\n } else if (!fromClient) {\n classNames.push('message--source-agent');\n } else {\n classNames.push('message--source-user');\n }\n\n return classNames;\n};\nconst useCobrowsingContainer = () => {\n const {\n cobrowsingContainerId: id\n } = (0,_seamly_state_hooks__WEBPACK_IMPORTED_MODULE_0__.useSeamlyStateContext)();\n const focusContainer = (0,_focus_helper_hooks__WEBPACK_IMPORTED_MODULE_1__.useElementFocusingById)(id);\n return {\n id,\n focusContainer\n };\n};\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/hooks/component-helper-hooks.js?");
2148
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"useSeamlyAppContainerClassNames\": () => (/* binding */ useSeamlyAppContainerClassNames),\n/* harmony export */ \"useSeamlyMessageContainerClassNames\": () => (/* binding */ useSeamlyMessageContainerClassNames)\n/* harmony export */ });\n/* harmony import */ var _domains_config__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../domains/config */ \"./src/javascripts/domains/config/index.js\");\n\nconst useSeamlyAppContainerClassNames = () => {\n return (0,_domains_config__WEBPACK_IMPORTED_MODULE_0__.useConfig)().appContainerClassNames;\n};\nconst useSeamlyMessageContainerClassNames = event => {\n const {\n fromClient\n } = event.payload;\n const classNames = ['message'];\n\n if (event.type === 'info') {\n classNames.push('message--source-info');\n } else if (!fromClient) {\n classNames.push('message--source-agent');\n } else {\n classNames.push('message--source-user');\n }\n\n return classNames;\n};\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/hooks/component-helper-hooks.js?");
2083
2149
 
2084
2150
  /***/ }),
2085
2151
 
@@ -2145,7 +2211,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
2145
2211
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2146
2212
 
2147
2213
  "use strict";
2148
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"useLastMessageEventId\": () => (/* reexport safe */ _seamly_state_hooks__WEBPACK_IMPORTED_MODULE_2__.useLastMessageEventId),\n/* harmony export */ \"useEntryTextLimit\": () => (/* reexport safe */ _seamly_state_hooks__WEBPACK_IMPORTED_MODULE_2__.useEntryTextLimit),\n/* harmony export */ \"useSeamlyCurrentAgent\": () => (/* reexport safe */ _seamly_state_hooks__WEBPACK_IMPORTED_MODULE_2__.useSeamlyCurrentAgent),\n/* harmony export */ \"useEvents\": () => (/* reexport safe */ _seamly_state_hooks__WEBPACK_IMPORTED_MODULE_2__.useEvents),\n/* harmony export */ \"useSeamlyHeaderData\": () => (/* reexport safe */ _seamly_state_hooks__WEBPACK_IMPORTED_MODULE_2__.useSeamlyHeaderData),\n/* harmony export */ \"useSeamlyIsHistoryLoaded\": () => (/* reexport safe */ _seamly_state_hooks__WEBPACK_IMPORTED_MODULE_2__.useSeamlyIsHistoryLoaded),\n/* harmony export */ \"useSeamlyIsLoading\": () => (/* reexport safe */ _seamly_state_hooks__WEBPACK_IMPORTED_MODULE_2__.useSeamlyIsLoading),\n/* harmony export */ \"useSeamlyLayoutMode\": () => (/* reexport safe */ _seamly_state_hooks__WEBPACK_IMPORTED_MODULE_2__.useSeamlyLayoutMode),\n/* harmony export */ \"useSeamlyParticipant\": () => (/* reexport safe */ _seamly_state_hooks__WEBPACK_IMPORTED_MODULE_2__.useSeamlyParticipant),\n/* harmony export */ \"useSeamlyServiceData\": () => (/* reexport safe */ _seamly_state_hooks__WEBPACK_IMPORTED_MODULE_2__.useSeamlyServiceData),\n/* harmony export */ \"useSeamlyServiceInfo\": () => (/* reexport safe */ _seamly_state_hooks__WEBPACK_IMPORTED_MODULE_2__.useSeamlyServiceInfo),\n/* harmony export */ \"useSeamlyStateContext\": () => (/* reexport safe */ _seamly_state_hooks__WEBPACK_IMPORTED_MODULE_2__.useSeamlyStateContext),\n/* harmony export */ \"useSeamlyUnreadCount\": () => (/* reexport safe */ _seamly_state_hooks__WEBPACK_IMPORTED_MODULE_2__.useSeamlyUnreadCount),\n/* harmony export */ \"useSkiplink\": () => (/* reexport safe */ _seamly_state_hooks__WEBPACK_IMPORTED_MODULE_2__.useSkiplink),\n/* harmony export */ \"useSeamlyApiContext\": () => (/* reexport safe */ _seamly_api_hooks__WEBPACK_IMPORTED_MODULE_1__.useSeamlyApiContext),\n/* harmony export */ \"useSeamlyConversationUrl\": () => (/* reexport safe */ _seamly_api_hooks__WEBPACK_IMPORTED_MODULE_1__.useSeamlyConversationUrl),\n/* harmony export */ \"useSeamlyDispatchContext\": () => (/* reexport safe */ _use_seamly_dispatch__WEBPACK_IMPORTED_MODULE_3__[\"default\"]),\n/* harmony export */ \"useSeamlyAppContainerClassNames\": () => (/* reexport safe */ _component_helper_hooks__WEBPACK_IMPORTED_MODULE_4__.useSeamlyAppContainerClassNames),\n/* harmony export */ \"useSeamlyMessageContainerClassNames\": () => (/* reexport safe */ _component_helper_hooks__WEBPACK_IMPORTED_MODULE_4__.useSeamlyMessageContainerClassNames),\n/* harmony export */ \"useCobrowsingContainer\": () => (/* reexport safe */ _component_helper_hooks__WEBPACK_IMPORTED_MODULE_4__.useCobrowsingContainer),\n/* harmony export */ \"useSeamlyOptions\": () => (/* reexport safe */ _seamly_option_hooks__WEBPACK_IMPORTED_MODULE_5__.useSeamlyOptions),\n/* harmony export */ \"useOptionButton\": () => (/* reexport safe */ _seamly_option_hooks__WEBPACK_IMPORTED_MODULE_5__.useOptionButton),\n/* harmony export */ \"useFileUploadMeta\": () => (/* reexport safe */ _file_upload_hooks__WEBPACK_IMPORTED_MODULE_6__.useFileUploadMeta),\n/* harmony export */ \"useFileUploads\": () => (/* reexport safe */ _file_upload_hooks__WEBPACK_IMPORTED_MODULE_6__.useFileUploads),\n/* harmony export */ \"useSeamlyCommands\": () => (/* reexport safe */ _use_seamly_commands__WEBPACK_IMPORTED_MODULE_7__[\"default\"]),\n/* harmony export */ \"useLiveRegion\": () => (/* reexport safe */ _live_region_hooks__WEBPACK_IMPORTED_MODULE_8__.useLiveRegion),\n/* harmony export */ \"useSeamlyLiveRegionContext\": () => (/* reexport safe */ _live_region_hooks__WEBPACK_IMPORTED_MODULE_8__.useSeamlyLiveRegionContext),\n/* harmony export */ \"useSeamlyActivityEventHandler\": () => (/* reexport safe */ _use_seamly_activity_event_handler__WEBPACK_IMPORTED_MODULE_9__[\"default\"]),\n/* harmony export */ \"useSeamlyTyping\": () => (/* reexport safe */ _seamly_entry_hooks__WEBPACK_IMPORTED_MODULE_10__.useSeamlyTyping),\n/* harmony export */ \"useSeamlyEntry\": () => (/* reexport safe */ _seamly_entry_hooks__WEBPACK_IMPORTED_MODULE_10__.useSeamlyEntry),\n/* harmony export */ \"useForceUpdate\": () => (/* reexport safe */ _utility_hooks__WEBPACK_IMPORTED_MODULE_11__.useForceUpdate),\n/* harmony export */ \"useGeneratedId\": () => (/* reexport safe */ _utility_hooks__WEBPACK_IMPORTED_MODULE_11__.useGeneratedId),\n/* harmony export */ \"useStableCallback\": () => (/* reexport safe */ _utility_hooks__WEBPACK_IMPORTED_MODULE_11__.useStableCallback),\n/* harmony export */ \"useElementFocusingById\": () => (/* reexport safe */ _focus_helper_hooks__WEBPACK_IMPORTED_MODULE_12__.useElementFocusingById),\n/* harmony export */ \"useSkiplinkTargetFocusing\": () => (/* reexport safe */ _focus_helper_hooks__WEBPACK_IMPORTED_MODULE_12__.useSkiplinkTargetFocusing),\n/* harmony export */ \"useFocusIfSeamlyContainedFocus\": () => (/* reexport safe */ _focus_helper_hooks__WEBPACK_IMPORTED_MODULE_12__.useFocusIfSeamlyContainedFocus),\n/* harmony export */ \"useSeamlyContainerElement\": () => (/* reexport safe */ _focus_helper_hooks__WEBPACK_IMPORTED_MODULE_12__.useSeamlyContainerElement),\n/* harmony export */ \"useSeamlyChat\": () => (/* reexport safe */ _use_seamly_chat__WEBPACK_IMPORTED_MODULE_13__[\"default\"]),\n/* harmony export */ \"useSeamlyIdleDetachCountdown\": () => (/* reexport safe */ _use_seamly_idle_detach_countdown__WEBPACK_IMPORTED_MODULE_14__[\"default\"]),\n/* harmony export */ \"useSeamlyResumeConversationPrompt\": () => (/* reexport safe */ _use_seamly_resume_conversation_prompt__WEBPACK_IMPORTED_MODULE_15__[\"default\"]),\n/* harmony export */ \"useSeamlyEventStream\": () => (/* binding */ useSeamlyEventStream)\n/* harmony export */ });\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact/hooks */ \"preact/hooks\");\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(preact_hooks__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _seamly_api_hooks__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./seamly-api-hooks */ \"./src/javascripts/ui/hooks/seamly-api-hooks.js\");\n/* harmony import */ var _seamly_state_hooks__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./seamly-state-hooks */ \"./src/javascripts/ui/hooks/seamly-state-hooks.js\");\n/* harmony import */ var _use_seamly_dispatch__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./use-seamly-dispatch */ \"./src/javascripts/ui/hooks/use-seamly-dispatch.js\");\n/* harmony import */ var _component_helper_hooks__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./component-helper-hooks */ \"./src/javascripts/ui/hooks/component-helper-hooks.js\");\n/* harmony import */ var _seamly_option_hooks__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./seamly-option-hooks */ \"./src/javascripts/ui/hooks/seamly-option-hooks.js\");\n/* harmony import */ var _file_upload_hooks__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./file-upload-hooks */ \"./src/javascripts/ui/hooks/file-upload-hooks.js\");\n/* harmony import */ var _use_seamly_commands__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./use-seamly-commands */ \"./src/javascripts/ui/hooks/use-seamly-commands.js\");\n/* harmony import */ var _live_region_hooks__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./live-region-hooks */ \"./src/javascripts/ui/hooks/live-region-hooks.js\");\n/* harmony import */ var _use_seamly_activity_event_handler__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./use-seamly-activity-event-handler */ \"./src/javascripts/ui/hooks/use-seamly-activity-event-handler.js\");\n/* harmony import */ var _seamly_entry_hooks__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./seamly-entry-hooks */ \"./src/javascripts/ui/hooks/seamly-entry-hooks.js\");\n/* harmony import */ var _utility_hooks__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./utility-hooks */ \"./src/javascripts/ui/hooks/utility-hooks.js\");\n/* harmony import */ var _focus_helper_hooks__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./focus-helper-hooks */ \"./src/javascripts/ui/hooks/focus-helper-hooks.js\");\n/* harmony import */ var _use_seamly_chat__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./use-seamly-chat */ \"./src/javascripts/ui/hooks/use-seamly-chat.js\");\n/* harmony import */ var _use_seamly_idle_detach_countdown__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./use-seamly-idle-detach-countdown */ \"./src/javascripts/ui/hooks/use-seamly-idle-detach-countdown.js\");\n/* harmony import */ var _use_seamly_resume_conversation_prompt__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./use-seamly-resume-conversation-prompt */ \"./src/javascripts/ui/hooks/use-seamly-resume-conversation-prompt.js\");\n // Import extracted hooks here for use inside this file\n\n // Export extracted hooks here,\n// although this is a redundant, it prevents a bazillion code changes for now.\n// TODO: Remove exports and import them from the correct files\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n // This hook isn't used within the core\n// But it is used in implementations\n// and imported directly from this file\n// Please do not remove\n\nconst useSeamlyEventStream = (nextFn, filterFn) => {\n const api = (0,_seamly_api_hooks__WEBPACK_IMPORTED_MODULE_1__.useSeamlyApiContext)();\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (api.stream) {\n if (filterFn) {\n api.stream().filter(filterFn).subscribe({\n next: nextFn\n });\n } else {\n api.stream().subscribe({\n next: nextFn\n });\n }\n }\n }, [api, nextFn, filterFn]);\n};\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/hooks/seamly-hooks.js?");
2214
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"useLastMessageEventId\": () => (/* reexport safe */ _seamly_state_hooks__WEBPACK_IMPORTED_MODULE_2__.useLastMessageEventId),\n/* harmony export */ \"useEntryTextLimit\": () => (/* reexport safe */ _seamly_state_hooks__WEBPACK_IMPORTED_MODULE_2__.useEntryTextLimit),\n/* harmony export */ \"useSeamlyCurrentAgent\": () => (/* reexport safe */ _seamly_state_hooks__WEBPACK_IMPORTED_MODULE_2__.useSeamlyCurrentAgent),\n/* harmony export */ \"useEvents\": () => (/* reexport safe */ _seamly_state_hooks__WEBPACK_IMPORTED_MODULE_2__.useEvents),\n/* harmony export */ \"useSeamlyHeaderData\": () => (/* reexport safe */ _seamly_state_hooks__WEBPACK_IMPORTED_MODULE_2__.useSeamlyHeaderData),\n/* harmony export */ \"useSeamlyIsHistoryLoaded\": () => (/* reexport safe */ _seamly_state_hooks__WEBPACK_IMPORTED_MODULE_2__.useSeamlyIsHistoryLoaded),\n/* harmony export */ \"useSeamlyIsLoading\": () => (/* reexport safe */ _seamly_state_hooks__WEBPACK_IMPORTED_MODULE_2__.useSeamlyIsLoading),\n/* harmony export */ \"useSeamlyLayoutMode\": () => (/* reexport safe */ _seamly_state_hooks__WEBPACK_IMPORTED_MODULE_2__.useSeamlyLayoutMode),\n/* harmony export */ \"useSeamlyParticipant\": () => (/* reexport safe */ _seamly_state_hooks__WEBPACK_IMPORTED_MODULE_2__.useSeamlyParticipant),\n/* harmony export */ \"useSeamlyServiceData\": () => (/* reexport safe */ _seamly_state_hooks__WEBPACK_IMPORTED_MODULE_2__.useSeamlyServiceData),\n/* harmony export */ \"useSeamlyServiceInfo\": () => (/* reexport safe */ _seamly_state_hooks__WEBPACK_IMPORTED_MODULE_2__.useSeamlyServiceInfo),\n/* harmony export */ \"useSeamlyStateContext\": () => (/* reexport safe */ _seamly_state_hooks__WEBPACK_IMPORTED_MODULE_2__.useSeamlyStateContext),\n/* harmony export */ \"useSeamlyUnreadCount\": () => (/* reexport safe */ _seamly_state_hooks__WEBPACK_IMPORTED_MODULE_2__.useSeamlyUnreadCount),\n/* harmony export */ \"useSkiplink\": () => (/* reexport safe */ _seamly_state_hooks__WEBPACK_IMPORTED_MODULE_2__.useSkiplink),\n/* harmony export */ \"useSeamlyApiContext\": () => (/* reexport safe */ _seamly_api_hooks__WEBPACK_IMPORTED_MODULE_1__.useSeamlyApiContext),\n/* harmony export */ \"useSeamlyConversationUrl\": () => (/* reexport safe */ _seamly_api_hooks__WEBPACK_IMPORTED_MODULE_1__.useSeamlyConversationUrl),\n/* harmony export */ \"useSeamlyDispatchContext\": () => (/* reexport safe */ _use_seamly_dispatch__WEBPACK_IMPORTED_MODULE_3__[\"default\"]),\n/* harmony export */ \"useSeamlyAppContainerClassNames\": () => (/* reexport safe */ _component_helper_hooks__WEBPACK_IMPORTED_MODULE_4__.useSeamlyAppContainerClassNames),\n/* harmony export */ \"useSeamlyMessageContainerClassNames\": () => (/* reexport safe */ _component_helper_hooks__WEBPACK_IMPORTED_MODULE_4__.useSeamlyMessageContainerClassNames),\n/* harmony export */ \"useSeamlyOptions\": () => (/* reexport safe */ _seamly_option_hooks__WEBPACK_IMPORTED_MODULE_5__.useSeamlyOptions),\n/* harmony export */ \"useOptionButton\": () => (/* reexport safe */ _seamly_option_hooks__WEBPACK_IMPORTED_MODULE_5__.useOptionButton),\n/* harmony export */ \"useFileUploadMeta\": () => (/* reexport safe */ _file_upload_hooks__WEBPACK_IMPORTED_MODULE_6__.useFileUploadMeta),\n/* harmony export */ \"useFileUploads\": () => (/* reexport safe */ _file_upload_hooks__WEBPACK_IMPORTED_MODULE_6__.useFileUploads),\n/* harmony export */ \"useSeamlyCommands\": () => (/* reexport safe */ _use_seamly_commands__WEBPACK_IMPORTED_MODULE_7__[\"default\"]),\n/* harmony export */ \"useLiveRegion\": () => (/* reexport safe */ _live_region_hooks__WEBPACK_IMPORTED_MODULE_8__.useLiveRegion),\n/* harmony export */ \"useSeamlyLiveRegionContext\": () => (/* reexport safe */ _live_region_hooks__WEBPACK_IMPORTED_MODULE_8__.useSeamlyLiveRegionContext),\n/* harmony export */ \"useSeamlyActivityEventHandler\": () => (/* reexport safe */ _use_seamly_activity_event_handler__WEBPACK_IMPORTED_MODULE_9__[\"default\"]),\n/* harmony export */ \"useSeamlyTyping\": () => (/* reexport safe */ _seamly_entry_hooks__WEBPACK_IMPORTED_MODULE_10__.useSeamlyTyping),\n/* harmony export */ \"useSeamlyEntry\": () => (/* reexport safe */ _seamly_entry_hooks__WEBPACK_IMPORTED_MODULE_10__.useSeamlyEntry),\n/* harmony export */ \"useForceUpdate\": () => (/* reexport safe */ _utility_hooks__WEBPACK_IMPORTED_MODULE_11__.useForceUpdate),\n/* harmony export */ \"useGeneratedId\": () => (/* reexport safe */ _utility_hooks__WEBPACK_IMPORTED_MODULE_11__.useGeneratedId),\n/* harmony export */ \"useStableCallback\": () => (/* reexport safe */ _utility_hooks__WEBPACK_IMPORTED_MODULE_11__.useStableCallback),\n/* harmony export */ \"useElementFocusingById\": () => (/* reexport safe */ _focus_helper_hooks__WEBPACK_IMPORTED_MODULE_12__.useElementFocusingById),\n/* harmony export */ \"useSkiplinkTargetFocusing\": () => (/* reexport safe */ _focus_helper_hooks__WEBPACK_IMPORTED_MODULE_12__.useSkiplinkTargetFocusing),\n/* harmony export */ \"useFocusIfSeamlyContainedFocus\": () => (/* reexport safe */ _focus_helper_hooks__WEBPACK_IMPORTED_MODULE_12__.useFocusIfSeamlyContainedFocus),\n/* harmony export */ \"useSeamlyContainerElement\": () => (/* reexport safe */ _focus_helper_hooks__WEBPACK_IMPORTED_MODULE_12__.useSeamlyContainerElement),\n/* harmony export */ \"useSeamlyChat\": () => (/* reexport safe */ _use_seamly_chat__WEBPACK_IMPORTED_MODULE_13__[\"default\"]),\n/* harmony export */ \"useSeamlyIdleDetachCountdown\": () => (/* reexport safe */ _use_seamly_idle_detach_countdown__WEBPACK_IMPORTED_MODULE_14__[\"default\"]),\n/* harmony export */ \"useSeamlyResumeConversationPrompt\": () => (/* reexport safe */ _use_seamly_resume_conversation_prompt__WEBPACK_IMPORTED_MODULE_15__[\"default\"]),\n/* harmony export */ \"useSeamlyEventStream\": () => (/* binding */ useSeamlyEventStream)\n/* harmony export */ });\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact/hooks */ \"preact/hooks\");\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(preact_hooks__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _seamly_api_hooks__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./seamly-api-hooks */ \"./src/javascripts/ui/hooks/seamly-api-hooks.js\");\n/* harmony import */ var _seamly_state_hooks__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./seamly-state-hooks */ \"./src/javascripts/ui/hooks/seamly-state-hooks.js\");\n/* harmony import */ var _use_seamly_dispatch__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./use-seamly-dispatch */ \"./src/javascripts/ui/hooks/use-seamly-dispatch.js\");\n/* harmony import */ var _component_helper_hooks__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./component-helper-hooks */ \"./src/javascripts/ui/hooks/component-helper-hooks.js\");\n/* harmony import */ var _seamly_option_hooks__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./seamly-option-hooks */ \"./src/javascripts/ui/hooks/seamly-option-hooks.js\");\n/* harmony import */ var _file_upload_hooks__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./file-upload-hooks */ \"./src/javascripts/ui/hooks/file-upload-hooks.js\");\n/* harmony import */ var _use_seamly_commands__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./use-seamly-commands */ \"./src/javascripts/ui/hooks/use-seamly-commands.js\");\n/* harmony import */ var _live_region_hooks__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./live-region-hooks */ \"./src/javascripts/ui/hooks/live-region-hooks.js\");\n/* harmony import */ var _use_seamly_activity_event_handler__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./use-seamly-activity-event-handler */ \"./src/javascripts/ui/hooks/use-seamly-activity-event-handler.js\");\n/* harmony import */ var _seamly_entry_hooks__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./seamly-entry-hooks */ \"./src/javascripts/ui/hooks/seamly-entry-hooks.js\");\n/* harmony import */ var _utility_hooks__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./utility-hooks */ \"./src/javascripts/ui/hooks/utility-hooks.js\");\n/* harmony import */ var _focus_helper_hooks__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./focus-helper-hooks */ \"./src/javascripts/ui/hooks/focus-helper-hooks.js\");\n/* harmony import */ var _use_seamly_chat__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./use-seamly-chat */ \"./src/javascripts/ui/hooks/use-seamly-chat.js\");\n/* harmony import */ var _use_seamly_idle_detach_countdown__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./use-seamly-idle-detach-countdown */ \"./src/javascripts/ui/hooks/use-seamly-idle-detach-countdown.js\");\n/* harmony import */ var _use_seamly_resume_conversation_prompt__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./use-seamly-resume-conversation-prompt */ \"./src/javascripts/ui/hooks/use-seamly-resume-conversation-prompt.js\");\n // Import extracted hooks here for use inside this file\n\n // Export extracted hooks here,\n// although this is a redundant, it prevents a bazillion code changes for now.\n// TODO: Remove exports and import them from the correct files\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n // This hook isn't used within the core\n// But it is used in implementations\n// and imported directly from this file\n// Please do not remove\n\nconst useSeamlyEventStream = (nextFn, filterFn) => {\n const api = (0,_seamly_api_hooks__WEBPACK_IMPORTED_MODULE_1__.useSeamlyApiContext)();\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (api.stream) {\n if (filterFn) {\n api.stream().filter(filterFn).subscribe({\n next: nextFn\n });\n } else {\n api.stream().subscribe({\n next: nextFn\n });\n }\n }\n }, [api, nextFn, filterFn]);\n};\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/hooks/seamly-hooks.js?");
2149
2215
 
2150
2216
  /***/ }),
2151
2217
 
@@ -2167,7 +2233,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
2167
2233
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2168
2234
 
2169
2235
  "use strict";
2170
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"selectState\": () => (/* binding */ selectState),\n/* harmony export */ \"useSeamlyStateContext\": () => (/* binding */ useSeamlyStateContext),\n/* harmony export */ \"selectEvents\": () => (/* binding */ selectEvents),\n/* harmony export */ \"useEvents\": () => (/* binding */ useEvents),\n/* harmony export */ \"useSeamlyIsLoading\": () => (/* binding */ useSeamlyIsLoading),\n/* harmony export */ \"useSeamlyHeaderData\": () => (/* binding */ useSeamlyHeaderData),\n/* harmony export */ \"useSeamlyUnreadCount\": () => (/* binding */ useSeamlyUnreadCount),\n/* harmony export */ \"useSkiplink\": () => (/* binding */ useSkiplink),\n/* harmony export */ \"useSeamlyParticipant\": () => (/* binding */ useSeamlyParticipant),\n/* harmony export */ \"useSeamlyServiceInfo\": () => (/* binding */ useSeamlyServiceInfo),\n/* harmony export */ \"useLastMessageEventId\": () => (/* binding */ useLastMessageEventId),\n/* harmony export */ \"useSeamlyIsHistoryLoaded\": () => (/* binding */ useSeamlyIsHistoryLoaded),\n/* harmony export */ \"useSeamlyCurrentAgent\": () => (/* binding */ useSeamlyCurrentAgent),\n/* harmony export */ \"useSeamlyServiceData\": () => (/* binding */ useSeamlyServiceData),\n/* harmony export */ \"useEntryTextLimit\": () => (/* binding */ useEntryTextLimit),\n/* harmony export */ \"useSeamlyLayoutMode\": () => (/* binding */ useSeamlyLayoutMode)\n/* harmony export */ });\n/* harmony import */ var reselect__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! reselect */ \"./node_modules/reselect/es/index.js\");\n/* harmony import */ var _domains_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../domains/redux */ \"./src/javascripts/domains/redux/index.js\");\n/* harmony import */ var _utils_general_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/general-utils */ \"./src/javascripts/ui/utils/general-utils.js\");\n/* harmony import */ var _domains_config__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../domains/config */ \"./src/javascripts/domains/config/index.js\");\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n\n\n\n\nconst selectState = state => state.state;\nconst useSeamlyStateContext = () => (0,_domains_redux__WEBPACK_IMPORTED_MODULE_1__.useSelector)(selectState);\nconst selectEvents = (0,reselect__WEBPACK_IMPORTED_MODULE_0__.createSelector)(selectState, _domains_config__WEBPACK_IMPORTED_MODULE_3__.Selectors.selectConfig, ({\n events\n}, config) => {\n var _config$messages;\n\n const {\n enabled,\n threshold\n } = (config === null || config === void 0 ? void 0 : (_config$messages = config.messages) === null || _config$messages === void 0 ? void 0 : _config$messages.timeIndicator) ?? {};\n\n if (!enabled) {\n return events;\n }\n\n const mappedEvents = [];\n let previousEvent = null;\n events.forEach((event, idx) => {\n // always add timeIndicator to first message\n if (idx === 0) {\n mappedEvents.push(_objectSpread(_objectSpread({}, event), {}, {\n timeIndicator: event.payload.occurredAt\n })); // else check if diff is greater than threshold\n } else {\n const timeIndicator = previousEvent && (0,_utils_general_utils__WEBPACK_IMPORTED_MODULE_2__.microsecondsToMilliseconds)(event.payload.occurredAt - previousEvent.payload.occurredAt) >= threshold ? event.payload.occurredAt : undefined;\n mappedEvents.push(_objectSpread(_objectSpread({}, event), {}, {\n timeIndicator\n }));\n }\n\n previousEvent = event;\n });\n return mappedEvents;\n});\nconst useEvents = () => (0,_domains_redux__WEBPACK_IMPORTED_MODULE_1__.useSelector)(selectEvents, []);\nconst useSeamlyIsLoading = () => useSeamlyStateContext().isLoading;\nconst useSeamlyHeaderData = () => useSeamlyStateContext().headerTitles;\nconst useSeamlyUnreadCount = () => useSeamlyStateContext().unreadEvents;\nconst useSkiplink = () => useSeamlyStateContext().skiplinkTargetId;\nconst useSeamlyParticipant = participantId => useSeamlyStateContext().participantInfo.participants[participantId];\nconst useSeamlyServiceInfo = () => useSeamlyStateContext().serviceInfo;\nconst selectLastMessageEventId = (0,reselect__WEBPACK_IMPORTED_MODULE_0__.createSelector)(selectEvents, events => {\n var _filteredEvents;\n\n const filteredEvents = events.filter(event => event.type === 'message');\n return (_filteredEvents = filteredEvents[filteredEvents.length - 1]) === null || _filteredEvents === void 0 ? void 0 : _filteredEvents.payload.id;\n});\nconst useLastMessageEventId = () => (0,_domains_redux__WEBPACK_IMPORTED_MODULE_1__.useSelector)(selectLastMessageEventId);\nconst useSeamlyIsHistoryLoaded = () => useSeamlyStateContext().historyLoaded;\nconst useSeamlyCurrentAgent = () => {\n const {\n participants,\n currentAgent\n } = useSeamlyStateContext().participantInfo;\n return currentAgent ? participants[currentAgent] : null;\n};\nconst useSeamlyServiceData = key => useSeamlyStateContext().serviceData[key];\nconst useEntryTextLimit = () => {\n const {\n entryMeta: {\n options: {\n text\n }\n }\n } = useSeamlyStateContext();\n const {\n limit\n } = text || {};\n return {\n hasLimit: limit != null,\n limit: limit != null ? limit : null\n };\n};\nconst useSeamlyLayoutMode = () => {\n const {\n layoutMode\n } = (0,_domains_config__WEBPACK_IMPORTED_MODULE_3__.useConfig)();\n return {\n isInline: layoutMode === 'inline',\n isModal: layoutMode === 'modal',\n isWindow: layoutMode === 'window',\n isResolving: !layoutMode\n };\n};\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/hooks/seamly-state-hooks.js?");
2236
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"selectState\": () => (/* binding */ selectState),\n/* harmony export */ \"useSeamlyStateContext\": () => (/* binding */ useSeamlyStateContext),\n/* harmony export */ \"selectEventsWithSuggestion\": () => (/* binding */ selectEventsWithSuggestion),\n/* harmony export */ \"selectEvents\": () => (/* binding */ selectEvents),\n/* harmony export */ \"useEvents\": () => (/* binding */ useEvents),\n/* harmony export */ \"useSeamlyIsLoading\": () => (/* binding */ useSeamlyIsLoading),\n/* harmony export */ \"useSeamlyHeaderData\": () => (/* binding */ useSeamlyHeaderData),\n/* harmony export */ \"useSeamlyUnreadCount\": () => (/* binding */ useSeamlyUnreadCount),\n/* harmony export */ \"useSkiplink\": () => (/* binding */ useSkiplink),\n/* harmony export */ \"useSeamlyParticipant\": () => (/* binding */ useSeamlyParticipant),\n/* harmony export */ \"useSeamlyServiceInfo\": () => (/* binding */ useSeamlyServiceInfo),\n/* harmony export */ \"useLastMessageEventId\": () => (/* binding */ useLastMessageEventId),\n/* harmony export */ \"useSeamlyIsHistoryLoaded\": () => (/* binding */ useSeamlyIsHistoryLoaded),\n/* harmony export */ \"useSeamlyCurrentAgent\": () => (/* binding */ useSeamlyCurrentAgent),\n/* harmony export */ \"useSeamlyServiceData\": () => (/* binding */ useSeamlyServiceData),\n/* harmony export */ \"useEntryTextLimit\": () => (/* binding */ useEntryTextLimit),\n/* harmony export */ \"useSeamlyLayoutMode\": () => (/* binding */ useSeamlyLayoutMode)\n/* harmony export */ });\n/* harmony import */ var reselect__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! reselect */ \"./node_modules/reselect/es/index.js\");\n/* harmony import */ var _domains_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../domains/redux */ \"./src/javascripts/domains/redux/index.js\");\n/* harmony import */ var _utils_general_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/general-utils */ \"./src/javascripts/ui/utils/general-utils.js\");\n/* harmony import */ var _domains_config_selectors__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../domains/config/selectors */ \"./src/javascripts/domains/config/selectors.js\");\n/* harmony import */ var _domains_app_selectors__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../domains/app/selectors */ \"./src/javascripts/domains/app/selectors.js\");\n/* harmony import */ var _domains_config_hooks__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../domains/config/hooks */ \"./src/javascripts/domains/config/hooks.js\");\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n\n\n\n\n\n\nconst selectState = state => state.state;\nconst useSeamlyStateContext = () => (0,_domains_redux__WEBPACK_IMPORTED_MODULE_1__.useSelector)(selectState);\nconst selectEventsWithSuggestion = (0,reselect__WEBPACK_IMPORTED_MODULE_0__.createSelector)(selectState, _domains_config_selectors__WEBPACK_IMPORTED_MODULE_3__.selectConfig, _domains_app_selectors__WEBPACK_IMPORTED_MODULE_4__.selectUserHasResponded, ({\n events,\n serviceData\n}, config, userHasResponded) => {\n var _serviceData$suggesti;\n\n if (userHasResponded || config.layoutMode === 'inline' || !serviceData.suggestion || !((_serviceData$suggesti = serviceData.suggestion) !== null && _serviceData$suggesti !== void 0 && _serviceData$suggesti.body.length)) {\n return events;\n }\n\n const suggestionsEvent = {\n type: 'service_data',\n payload: serviceData.suggestion\n };\n return [...events, suggestionsEvent];\n});\nconst selectEvents = (0,reselect__WEBPACK_IMPORTED_MODULE_0__.createSelector)(selectEventsWithSuggestion, _domains_config_selectors__WEBPACK_IMPORTED_MODULE_3__.selectConfig, (events, config) => {\n var _config$messages$time, _config$messages;\n\n const {\n enabled,\n threshold\n } = (_config$messages$time = config === null || config === void 0 ? void 0 : (_config$messages = config.messages) === null || _config$messages === void 0 ? void 0 : _config$messages.timeIndicator) !== null && _config$messages$time !== void 0 ? _config$messages$time : {};\n\n if (!enabled) {\n return events;\n }\n\n const mappedEvents = [];\n let previousEvent = null;\n events.forEach((event, idx) => {\n // always add timeIndicator to first message\n if (idx === 0) {\n mappedEvents.push(_objectSpread(_objectSpread({}, event), {}, {\n timeIndicator: event.payload.occurredAt\n })); // else check if diff is greater than threshold\n } else {\n const timeIndicator = previousEvent && (0,_utils_general_utils__WEBPACK_IMPORTED_MODULE_2__.microsecondsToMilliseconds)(event.payload.occurredAt - previousEvent.payload.occurredAt) >= threshold ? event.payload.occurredAt : undefined;\n mappedEvents.push(_objectSpread(_objectSpread({}, event), {}, {\n timeIndicator\n }));\n }\n\n previousEvent = event;\n });\n return mappedEvents;\n});\nconst useEvents = () => (0,_domains_redux__WEBPACK_IMPORTED_MODULE_1__.useSelector)(selectEvents, []);\nconst useSeamlyIsLoading = () => useSeamlyStateContext().isLoading;\nconst useSeamlyHeaderData = () => useSeamlyStateContext().headerTitles;\nconst useSeamlyUnreadCount = () => useSeamlyStateContext().unreadEvents;\nconst useSkiplink = () => useSeamlyStateContext().skiplinkTargetId;\nconst useSeamlyParticipant = participantId => useSeamlyStateContext().participantInfo.participants[participantId];\nconst useSeamlyServiceInfo = () => useSeamlyStateContext().serviceInfo;\nconst selectLastMessageEventId = (0,reselect__WEBPACK_IMPORTED_MODULE_0__.createSelector)(selectEvents, events => {\n var _filteredEvents;\n\n const filteredEvents = events.filter(event => event.type === 'message');\n return (_filteredEvents = filteredEvents[filteredEvents.length - 1]) === null || _filteredEvents === void 0 ? void 0 : _filteredEvents.payload.id;\n});\nconst useLastMessageEventId = () => (0,_domains_redux__WEBPACK_IMPORTED_MODULE_1__.useSelector)(selectLastMessageEventId);\nconst useSeamlyIsHistoryLoaded = () => useSeamlyStateContext().historyLoaded;\nconst useSeamlyCurrentAgent = () => {\n const {\n participants,\n currentAgent\n } = useSeamlyStateContext().participantInfo;\n return currentAgent ? participants[currentAgent] : null;\n};\nconst useSeamlyServiceData = key => useSeamlyStateContext().serviceData[key];\nconst useEntryTextLimit = () => {\n const {\n entryMeta: {\n options: {\n text\n }\n }\n } = useSeamlyStateContext();\n const {\n limit\n } = text || {};\n return {\n hasLimit: limit != null,\n limit: limit != null ? limit : null\n };\n};\nconst useSeamlyLayoutMode = () => {\n const {\n layoutMode\n } = (0,_domains_config_hooks__WEBPACK_IMPORTED_MODULE_5__.useConfig)();\n return {\n isInline: layoutMode === 'inline',\n isWindow: layoutMode === 'window',\n isResolving: !layoutMode\n };\n};\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/hooks/seamly-state-hooks.js?");
2171
2237
 
2172
2238
  /***/ }),
2173
2239
 
@@ -2211,7 +2277,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
2211
2277
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2212
2278
 
2213
2279
  "use strict";
2214
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact/hooks */ \"preact/hooks\");\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(preact_hooks__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _domains_i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../domains/i18n */ \"./src/javascripts/domains/i18n/index.js\");\n/* harmony import */ var _use_seamly_dispatch__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./use-seamly-dispatch */ \"./src/javascripts/ui/hooks/use-seamly-dispatch.js\");\n/* harmony import */ var _seamly_state_hooks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./seamly-state-hooks */ \"./src/javascripts/ui/hooks/seamly-state-hooks.js\");\n/* harmony import */ var _use_seamly_commands__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./use-seamly-commands */ \"./src/javascripts/ui/hooks/use-seamly-commands.js\");\n/* harmony import */ var _seamly_api_hooks__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./seamly-api-hooks */ \"./src/javascripts/ui/hooks/seamly-api-hooks.js\");\n/* harmony import */ var _live_region_hooks__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./live-region-hooks */ \"./src/javascripts/ui/hooks/live-region-hooks.js\");\n/* harmony import */ var _utils_seamly_utils__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../utils/seamly-utils */ \"./src/javascripts/ui/utils/seamly-utils.js\");\n/* harmony import */ var _domains_visibility__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../domains/visibility */ \"./src/javascripts/domains/visibility/index.js\");\n\n\n\n\n\n\n\n\n\nconst {\n SET_IS_LOADING\n} = _utils_seamly_utils__WEBPACK_IMPORTED_MODULE_7__.seamlyActions;\n\nconst useSeamlyChat = () => {\n const {\n t\n } = (0,_domains_i18n__WEBPACK_IMPORTED_MODULE_1__.useI18n)();\n const {\n isOpen,\n isVisible,\n setVisibility\n } = (0,_domains_visibility__WEBPACK_IMPORTED_MODULE_8__.useVisibility)();\n const dispatch = (0,_use_seamly_dispatch__WEBPACK_IMPORTED_MODULE_2__[\"default\"])();\n const events = (0,_seamly_state_hooks__WEBPACK_IMPORTED_MODULE_3__.useEvents)();\n const spinnerTimeout = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n const {\n start,\n connect,\n apiConfigReady\n } = (0,_use_seamly_commands__WEBPACK_IMPORTED_MODULE_4__[\"default\"])();\n const hasConversation = (0,_seamly_api_hooks__WEBPACK_IMPORTED_MODULE_5__.useSeamlyHasConversation)();\n const prevIsOpen = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n const prevIsVisible = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n const {\n sendAssertive\n } = (0,_live_region_hooks__WEBPACK_IMPORTED_MODULE_6__.useLiveRegion)();\n const connectCalled = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)(false);\n const hasEvents = events.length > 0;\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (isVisible) {\n // Wait for the live containers to stabilise in the DOM before injecting\n // the message or some screen readers will swallow it.\n setTimeout(() => {\n sendAssertive(t('window.srTexts.onLoad'));\n }, 500);\n }\n }, [isVisible, sendAssertive, t]);\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (isVisible !== prevIsVisible.current) {\n prevIsOpen.current = isOpen;\n prevIsVisible.current = isVisible;\n return;\n }\n\n if (prevIsOpen.current !== null) {\n if (isOpen) {\n sendAssertive(t('window.srTexts.onOpen'));\n } else {\n sendAssertive(t('window.srTexts.onClose'));\n }\n }\n\n prevIsOpen.current = isOpen;\n prevIsVisible.current = isVisible;\n }, [isOpen, isVisible, sendAssertive, t]);\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n // This delays the start of the loading inidicator we set when we initialise\n // the application. This is done to only avoid BSOD on initial load if DCX is slow.\n spinnerTimeout.current = setTimeout(() => {\n dispatch({\n type: SET_IS_LOADING,\n isLoading: true\n });\n }, 500);\n }, [dispatch]);\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (hasEvents) {\n clearTimeout(spinnerTimeout.current);\n dispatch({\n type: SET_IS_LOADING,\n isLoading: false\n });\n }\n }, [hasEvents, dispatch]);\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n // This is needed to reset the ref to allow connect to happen again.\n // Mostly due to Interrupt situations and a reset being called.\n if (!hasConversation || !apiConfigReady) {\n connectCalled.current = false;\n }\n }, [hasConversation, apiConfigReady]);\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n // We don't connect minimised or hidden window interfaces unless\n // they had been connected before.\n // We also keep track of whether connect was called before to avoid\n // multiple in-flight connection processes.\n if (!isOpen && !hasConversation || connectCalled.current || !apiConfigReady) {\n return;\n }\n\n if (hasConversation) {\n // We deactivate the extra startup loading spinner when a conversation is available\n // We also stop setting the loading indicator in the first place to avoid a flash.\n clearTimeout(spinnerTimeout.current);\n dispatch({\n type: SET_IS_LOADING,\n isLoading: false\n });\n }\n\n connect().then(() => {\n start();\n });\n connectCalled.current = true;\n }, [isOpen, hasConversation, apiConfigReady, start, connect, dispatch]);\n\n const openChat = () => {\n setVisibility(_domains_visibility__WEBPACK_IMPORTED_MODULE_8__.visibilityStates.open);\n };\n\n const closeChat = () => {\n setVisibility(_domains_visibility__WEBPACK_IMPORTED_MODULE_8__.visibilityStates.minimized);\n };\n\n return {\n openChat,\n closeChat\n };\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (useSeamlyChat);\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/hooks/use-seamly-chat.js?");
2280
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact/hooks */ \"preact/hooks\");\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(preact_hooks__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _domains_i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../domains/i18n */ \"./src/javascripts/domains/i18n/index.js\");\n/* harmony import */ var _use_seamly_dispatch__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./use-seamly-dispatch */ \"./src/javascripts/ui/hooks/use-seamly-dispatch.js\");\n/* harmony import */ var _seamly_state_hooks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./seamly-state-hooks */ \"./src/javascripts/ui/hooks/seamly-state-hooks.js\");\n/* harmony import */ var _use_seamly_commands__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./use-seamly-commands */ \"./src/javascripts/ui/hooks/use-seamly-commands.js\");\n/* harmony import */ var _seamly_api_hooks__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./seamly-api-hooks */ \"./src/javascripts/ui/hooks/seamly-api-hooks.js\");\n/* harmony import */ var _live_region_hooks__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./live-region-hooks */ \"./src/javascripts/ui/hooks/live-region-hooks.js\");\n/* harmony import */ var _utils_seamly_utils__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../utils/seamly-utils */ \"./src/javascripts/ui/utils/seamly-utils.js\");\n/* harmony import */ var _domains_visibility__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../domains/visibility */ \"./src/javascripts/domains/visibility/index.js\");\n/* harmony import */ var _domains_config__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../domains/config */ \"./src/javascripts/domains/config/index.js\");\n\n\n\n\n\n\n\n\n\n\nconst {\n SET_IS_LOADING\n} = _utils_seamly_utils__WEBPACK_IMPORTED_MODULE_7__.seamlyActions;\n\nconst useSeamlyChat = () => {\n const {\n t\n } = (0,_domains_i18n__WEBPACK_IMPORTED_MODULE_1__.useI18n)();\n const {\n layoutMode\n } = (0,_domains_config__WEBPACK_IMPORTED_MODULE_9__.useConfig)();\n const {\n isOpen,\n isVisible,\n setVisibility\n } = (0,_domains_visibility__WEBPACK_IMPORTED_MODULE_8__.useVisibility)();\n const dispatch = (0,_use_seamly_dispatch__WEBPACK_IMPORTED_MODULE_2__[\"default\"])();\n const events = (0,_seamly_state_hooks__WEBPACK_IMPORTED_MODULE_3__.useEvents)();\n const spinnerTimeout = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n const {\n start,\n connect,\n apiConfigReady\n } = (0,_use_seamly_commands__WEBPACK_IMPORTED_MODULE_4__[\"default\"])();\n const hasConversation = (0,_seamly_api_hooks__WEBPACK_IMPORTED_MODULE_5__.useSeamlyHasConversation)();\n const prevIsOpen = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n const prevIsVisible = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n const {\n sendAssertive\n } = (0,_live_region_hooks__WEBPACK_IMPORTED_MODULE_6__.useLiveRegion)();\n const connectCalled = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)(false);\n const hasEvents = events.length > 0;\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (isVisible) {\n // Wait for the live containers to stabilise in the DOM before injecting\n // the message or some screen readers will swallow it.\n setTimeout(() => {\n sendAssertive(t('window.srTexts.onLoad'));\n }, 500);\n }\n }, [isVisible, sendAssertive, t]);\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (isVisible !== prevIsVisible.current) {\n prevIsOpen.current = isOpen;\n prevIsVisible.current = isVisible;\n return;\n }\n\n if (prevIsOpen.current !== null) {\n if (isOpen) {\n sendAssertive(t('window.srTexts.onOpen'));\n } else {\n sendAssertive(t('window.srTexts.onClose'));\n }\n }\n\n prevIsOpen.current = isOpen;\n prevIsVisible.current = isVisible;\n }, [isOpen, isVisible, sendAssertive, t]);\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n // This delays the start of the loading inidicator we set when we initialise\n // the application. This is done to only avoid BSOD on initial load if DCX is slow.\n spinnerTimeout.current = setTimeout(() => {\n dispatch({\n type: SET_IS_LOADING,\n isLoading: true\n });\n }, 500);\n }, [dispatch]);\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (hasEvents) {\n clearTimeout(spinnerTimeout.current);\n dispatch({\n type: SET_IS_LOADING,\n isLoading: false\n });\n }\n }, [hasEvents, dispatch]);\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n // This is needed to reset the ref to allow connect to happen again.\n // Mostly due to Interrupt situations and a reset being called.\n if (!hasConversation || !apiConfigReady) {\n connectCalled.current = false;\n }\n }, [hasConversation, apiConfigReady]);\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n // We don't connect minimised or hidden window interfaces unless\n // they had been connected before.\n // We also keep track of whether connect was called before to avoid\n // multiple in-flight connection processes.\n if (layoutMode === 'window' && !isOpen && !hasConversation || connectCalled.current || !apiConfigReady) {\n return;\n }\n\n if (hasConversation) {\n // We deactivate the extra startup loading spinner when a conversation is available\n // We also stop setting the loading indicator in the first place to avoid a flash.\n clearTimeout(spinnerTimeout.current);\n dispatch({\n type: SET_IS_LOADING,\n isLoading: false\n });\n }\n\n connect().then(() => {\n start();\n });\n connectCalled.current = true;\n }, [isOpen, hasConversation, apiConfigReady, start, connect, dispatch, layoutMode]);\n\n const openChat = () => {\n setVisibility(_domains_visibility__WEBPACK_IMPORTED_MODULE_8__.visibilityStates.open);\n };\n\n const closeChat = () => {\n setVisibility(_domains_visibility__WEBPACK_IMPORTED_MODULE_8__.visibilityStates.minimized);\n };\n\n return {\n openChat,\n closeChat\n };\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (useSeamlyChat);\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/hooks/use-seamly-chat.js?");
2215
2281
 
2216
2282
  /***/ }),
2217
2283
 
@@ -2222,7 +2288,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
2222
2288
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2223
2289
 
2224
2290
  "use strict";
2225
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact/hooks */ \"preact/hooks\");\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(preact_hooks__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _seamly_api_hooks__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./seamly-api-hooks */ \"./src/javascripts/ui/hooks/seamly-api-hooks.js\");\n/* harmony import */ var _seamly_state_hooks__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./seamly-state-hooks */ \"./src/javascripts/ui/hooks/seamly-state-hooks.js\");\n/* harmony import */ var _use_seamly_dispatch__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./use-seamly-dispatch */ \"./src/javascripts/ui/hooks/use-seamly-dispatch.js\");\n/* harmony import */ var _components_core_seamly_api_context__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../components/core/seamly-api-context */ \"./src/javascripts/ui/components/core/seamly-api-context.js\");\n/* harmony import */ var _lib_id__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../lib/id */ \"./src/javascripts/lib/id.js\");\n/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../config */ \"./src/javascripts/config.js\");\n/* harmony import */ var _utils_seamly_utils__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../utils/seamly-utils */ \"./src/javascripts/ui/utils/seamly-utils.js\");\n/* harmony import */ var _utility_hooks__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./utility-hooks */ \"./src/javascripts/ui/hooks/utility-hooks.js\");\n/* harmony import */ var _domains_interrupt__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../domains/interrupt */ \"./src/javascripts/domains/interrupt/index.js\");\n/* harmony import */ var _domains_config__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../domains/config */ \"./src/javascripts/domains/config/index.js\");\n/* harmony import */ var _domains_app__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../domains/app */ \"./src/javascripts/domains/app/index.js\");\n/* harmony import */ var _domains_visibility__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../domains/visibility */ \"./src/javascripts/domains/visibility/index.js\");\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst {\n ADD_EVENT,\n SET_IS_LOADING,\n SET_HEADER_SUB_TITLE,\n SET_INITIAL_STATE,\n SET_FEATURES\n} = _utils_seamly_utils__WEBPACK_IMPORTED_MODULE_7__.seamlyActions;\n\nconst useSeamlyCommands = () => {\n const api = (0,_seamly_api_hooks__WEBPACK_IMPORTED_MODULE_1__.useSeamlyApiContext)();\n const appConfig = (0,_domains_config__WEBPACK_IMPORTED_MODULE_10__.useConfig)();\n const dispatch = (0,_use_seamly_dispatch__WEBPACK_IMPORTED_MODULE_3__[\"default\"])();\n const eventBus = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useContext)(_components_core_seamly_api_context__WEBPACK_IMPORTED_MODULE_4__.SeamlyEventBusContext);\n const hasResponded = (0,_domains_app__WEBPACK_IMPORTED_MODULE_11__.useUserHasResponded)();\n const hasConversation = (0,_seamly_api_hooks__WEBPACK_IMPORTED_MODULE_1__.useSeamlyHasConversation)();\n const {\n visible: visibility\n } = (0,_domains_visibility__WEBPACK_IMPORTED_MODULE_12__.useVisibility)();\n const unreadMessageCount = (0,_seamly_state_hooks__WEBPACK_IMPORTED_MODULE_2__.useSeamlyUnreadCount)();\n const emitEvent = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)((...args) => {\n eventBus.emit(...args);\n }, [eventBus]);\n const start = (0,_utility_hooks__WEBPACK_IMPORTED_MODULE_8__.useStableCallback)(() => {\n api.sendContext(appConfig.context || {});\n emitEvent('ui.beforeStart', {\n visibility,\n hasConversation,\n hasResponded,\n unreadMessageCount\n });\n api.send('start');\n emitEvent('ui.start', {\n visibility,\n hasConversation,\n hasResponded,\n unreadMessageCount\n });\n }, [api, appConfig, emitEvent, hasResponded, hasConversation, visibility, unreadMessageCount]);\n const reset = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n dispatch(_domains_app__WEBPACK_IMPORTED_MODULE_11__.Actions.reset());\n dispatch(_domains_interrupt__WEBPACK_IMPORTED_MODULE_9__.Actions.clear());\n dispatch({\n type: SET_IS_LOADING,\n isLoading: true\n });\n const {\n agentName\n } = appConfig.defaults || {};\n dispatch({\n type: SET_HEADER_SUB_TITLE,\n title: agentName || ''\n });\n\n try {\n const {\n features\n } = await api.reset();\n dispatch({\n type: SET_FEATURES,\n features\n });\n dispatch({\n type: SET_INITIAL_STATE,\n initialState: {}\n });\n } catch (error) {\n dispatch(_domains_interrupt__WEBPACK_IMPORTED_MODULE_9__.Actions.set(error));\n }\n }, [api, dispatch, appConfig]);\n const getMessageBase = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)(type => ({\n type,\n id: (0,_lib_id__WEBPACK_IMPORTED_MODULE_5__.randomId)(),\n transactionId: (0,_lib_id__WEBPACK_IMPORTED_MODULE_5__.randomId)(),\n participant: _config__WEBPACK_IMPORTED_MODULE_6__.userParticipantId,\n fromClient: true,\n occurredAt: Date.now() * 1000,\n meta: {}\n }), []);\n const getTextMessageBase = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)(bodyText => {\n const base = getMessageBase('text');\n return _objectSpread(_objectSpread({}, base), {}, {\n body: {\n text: bodyText\n }\n });\n }, [getMessageBase]);\n const sendMessage = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)(({\n body,\n config = {}\n }) => {\n if (body.trim() === '') {\n return;\n }\n\n const message = _objectSpread(_objectSpread({}, getTextMessageBase(body)), config);\n\n api.send('message', message);\n emitEvent('message', message);\n dispatch({\n type: ADD_EVENT,\n event: {\n type: 'message',\n payload: message\n }\n });\n }, [api, dispatch, emitEvent, getTextMessageBase]);\n const addMessageBubble = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)(text => {\n dispatch({\n type: ADD_EVENT,\n event: {\n type: 'message',\n payload: getTextMessageBase(text)\n }\n });\n }, [dispatch, getTextMessageBase]);\n const addUploadBubble = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)((id, transactionId, occurredAt, contentType, filename, filesize, url) => {\n dispatch({\n type: ADD_EVENT,\n event: {\n type: 'message',\n payload: {\n type: 'upload',\n id,\n transactionId,\n participant: _config__WEBPACK_IMPORTED_MODULE_6__.userParticipantId,\n fromClient: true,\n occurredAt,\n meta: {},\n body: {\n contentType,\n filename,\n filesize,\n url\n }\n }\n }\n });\n }, [dispatch]);\n const addDivider = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)(subtype => {\n const payload = {\n body: {\n subtype,\n type: 'divider'\n },\n fromClient: false,\n fromHistory: true,\n id: (0,_lib_id__WEBPACK_IMPORTED_MODULE_5__.randomId)(),\n transactionId: (0,_lib_id__WEBPACK_IMPORTED_MODULE_5__.randomId)(),\n type: 'divider'\n };\n dispatch({\n type: ADD_EVENT,\n event: {\n type: 'info',\n payload\n }\n });\n }, [dispatch]);\n const sendInfo = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)(({\n type,\n subtype\n }) => {\n const info = {\n type,\n subtype,\n id: (0,_lib_id__WEBPACK_IMPORTED_MODULE_5__.randomId)(),\n transactionId: (0,_lib_id__WEBPACK_IMPORTED_MODULE_5__.randomId)(),\n participant: _config__WEBPACK_IMPORTED_MODULE_6__.userParticipantId,\n fromClient: true\n };\n api.send('info', info);\n }, [api]);\n const sendAction = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)(body => {\n if (!body) {\n return;\n }\n\n api.send('action', body);\n const {\n type\n } = body;\n\n if (type !== _utils_seamly_utils__WEBPACK_IMPORTED_MODULE_7__.actionTypes.typing && type !== _utils_seamly_utils__WEBPACK_IMPORTED_MODULE_7__.actionTypes.read) {\n emitEvent(`action.${type}`, body);\n }\n }, [api, emitEvent]);\n const sendContext = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)(context => {\n api.sendContext(context);\n }, [api]);\n const connect = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {\n if (api.connected) {\n return Promise.reject(new Error('The API is already connected'));\n }\n\n return api.connect().then(initialState => {\n if (initialState) {\n dispatch({\n type: SET_INITIAL_STATE,\n initialState\n });\n }\n }).catch(error => {\n dispatch(_domains_interrupt__WEBPACK_IMPORTED_MODULE_9__.Actions.set(error));\n });\n }, [api, dispatch]);\n return {\n connect,\n start,\n sendMessage,\n sendInfo,\n sendAction,\n sendContext,\n reset,\n emitEvent,\n addMessageBubble,\n addUploadBubble,\n addDivider,\n apiConfigReady: api.configReady\n };\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (useSeamlyCommands);\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/hooks/use-seamly-commands.js?");
2291
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact/hooks */ \"preact/hooks\");\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(preact_hooks__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _seamly_api_hooks__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./seamly-api-hooks */ \"./src/javascripts/ui/hooks/seamly-api-hooks.js\");\n/* harmony import */ var _seamly_state_hooks__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./seamly-state-hooks */ \"./src/javascripts/ui/hooks/seamly-state-hooks.js\");\n/* harmony import */ var _use_seamly_dispatch__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./use-seamly-dispatch */ \"./src/javascripts/ui/hooks/use-seamly-dispatch.js\");\n/* harmony import */ var _components_core_seamly_api_context__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../components/core/seamly-api-context */ \"./src/javascripts/ui/components/core/seamly-api-context.js\");\n/* harmony import */ var _lib_id__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../lib/id */ \"./src/javascripts/lib/id.js\");\n/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../config */ \"./src/javascripts/config.js\");\n/* harmony import */ var _utils_seamly_utils__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../utils/seamly-utils */ \"./src/javascripts/ui/utils/seamly-utils.js\");\n/* harmony import */ var _utility_hooks__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./utility-hooks */ \"./src/javascripts/ui/hooks/utility-hooks.js\");\n/* harmony import */ var _domains_interrupt__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../domains/interrupt */ \"./src/javascripts/domains/interrupt/index.js\");\n/* harmony import */ var _domains_config__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../domains/config */ \"./src/javascripts/domains/config/index.js\");\n/* harmony import */ var _domains_app_actions__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../domains/app/actions */ \"./src/javascripts/domains/app/actions.js\");\n/* harmony import */ var _domains_app_hooks__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../domains/app/hooks */ \"./src/javascripts/domains/app/hooks.js\");\n/* harmony import */ var _domains_visibility__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../domains/visibility */ \"./src/javascripts/domains/visibility/index.js\");\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst {\n ADD_EVENT,\n SET_INITIAL_STATE\n} = _utils_seamly_utils__WEBPACK_IMPORTED_MODULE_7__.seamlyActions;\n\nconst useSeamlyCommands = () => {\n const api = (0,_seamly_api_hooks__WEBPACK_IMPORTED_MODULE_1__.useSeamlyApiContext)();\n const appConfig = (0,_domains_config__WEBPACK_IMPORTED_MODULE_10__.useConfig)();\n const dispatch = (0,_use_seamly_dispatch__WEBPACK_IMPORTED_MODULE_3__[\"default\"])();\n const eventBus = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useContext)(_components_core_seamly_api_context__WEBPACK_IMPORTED_MODULE_4__.SeamlyEventBusContext);\n const hasResponded = (0,_domains_app_hooks__WEBPACK_IMPORTED_MODULE_12__.useUserHasResponded)();\n const hasConversation = (0,_seamly_api_hooks__WEBPACK_IMPORTED_MODULE_1__.useSeamlyHasConversation)();\n const {\n visible: visibility\n } = (0,_domains_visibility__WEBPACK_IMPORTED_MODULE_13__.useVisibility)();\n const unreadMessageCount = (0,_seamly_state_hooks__WEBPACK_IMPORTED_MODULE_2__.useSeamlyUnreadCount)();\n const emitEvent = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)((...args) => {\n eventBus.emit(...args);\n }, [eventBus]);\n const start = (0,_utility_hooks__WEBPACK_IMPORTED_MODULE_8__.useStableCallback)(() => {\n api.sendContext(appConfig.context || {});\n emitEvent('ui.beforeStart', {\n visibility,\n hasConversation,\n hasResponded,\n unreadMessageCount\n });\n api.send('start');\n emitEvent('ui.start', {\n visibility,\n hasConversation,\n hasResponded,\n unreadMessageCount\n });\n }, [api, appConfig, emitEvent, hasResponded, hasConversation, visibility, unreadMessageCount]);\n const reset = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n dispatch(_domains_app_actions__WEBPACK_IMPORTED_MODULE_11__.reset());\n }, [dispatch]);\n const getMessageBase = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)(type => ({\n type,\n id: (0,_lib_id__WEBPACK_IMPORTED_MODULE_5__.randomId)(),\n transactionId: (0,_lib_id__WEBPACK_IMPORTED_MODULE_5__.randomId)(),\n participant: _config__WEBPACK_IMPORTED_MODULE_6__.userParticipantId,\n fromClient: true,\n occurredAt: Date.now() * 1000,\n meta: {}\n }), []);\n const getTextMessageBase = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)(bodyText => {\n const base = getMessageBase('text');\n return _objectSpread(_objectSpread({}, base), {}, {\n body: {\n text: bodyText\n }\n });\n }, [getMessageBase]);\n const sendMessage = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)(({\n body,\n config = {}\n }) => {\n if (body.trim() === '') {\n return;\n }\n\n const message = _objectSpread(_objectSpread({}, getTextMessageBase(body)), config);\n\n api.send('message', message);\n emitEvent('message', message);\n dispatch({\n type: ADD_EVENT,\n event: {\n type: 'message',\n payload: message\n }\n });\n }, [api, dispatch, emitEvent, getTextMessageBase]);\n const addMessageBubble = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)(text => {\n dispatch({\n type: ADD_EVENT,\n event: {\n type: 'message',\n payload: getTextMessageBase(text)\n }\n });\n }, [dispatch, getTextMessageBase]);\n const addUploadBubble = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)((id, transactionId, occurredAt, contentType, filename, filesize, url) => {\n dispatch({\n type: ADD_EVENT,\n event: {\n type: 'message',\n payload: {\n type: 'upload',\n id,\n transactionId,\n participant: _config__WEBPACK_IMPORTED_MODULE_6__.userParticipantId,\n fromClient: true,\n occurredAt,\n meta: {},\n body: {\n contentType,\n filename,\n filesize,\n url\n }\n }\n }\n });\n }, [dispatch]);\n const addDivider = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)(subtype => {\n const payload = {\n body: {\n subtype,\n type: 'divider'\n },\n fromClient: false,\n fromHistory: true,\n id: (0,_lib_id__WEBPACK_IMPORTED_MODULE_5__.randomId)(),\n transactionId: (0,_lib_id__WEBPACK_IMPORTED_MODULE_5__.randomId)(),\n type: 'divider'\n };\n dispatch({\n type: ADD_EVENT,\n event: {\n type: 'info',\n payload\n }\n });\n }, [dispatch]);\n const sendInfo = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)(({\n type,\n subtype\n }) => {\n const info = {\n type,\n subtype,\n id: (0,_lib_id__WEBPACK_IMPORTED_MODULE_5__.randomId)(),\n transactionId: (0,_lib_id__WEBPACK_IMPORTED_MODULE_5__.randomId)(),\n participant: _config__WEBPACK_IMPORTED_MODULE_6__.userParticipantId,\n fromClient: true\n };\n api.send('info', info);\n }, [api]);\n const sendAction = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)(body => {\n if (!body) {\n return;\n }\n\n api.send('action', body);\n const {\n type\n } = body;\n\n if (type !== _utils_seamly_utils__WEBPACK_IMPORTED_MODULE_7__.actionTypes.typing && type !== _utils_seamly_utils__WEBPACK_IMPORTED_MODULE_7__.actionTypes.read) {\n emitEvent(`action.${type}`, body);\n }\n }, [api, emitEvent]);\n const sendContext = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)(context => {\n api.sendContext(context);\n }, [api]);\n const connect = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {\n if (api.connected) {\n return Promise.reject(new Error('The API is already connected'));\n }\n\n return api.connect().then(initialState => {\n if (initialState) {\n dispatch({\n type: SET_INITIAL_STATE,\n initialState\n });\n }\n }).catch(error => {\n dispatch(_domains_interrupt__WEBPACK_IMPORTED_MODULE_9__.Actions.set(error));\n });\n }, [api, dispatch]);\n return {\n connect,\n start,\n sendMessage,\n sendInfo,\n sendAction,\n sendContext,\n reset,\n emitEvent,\n addMessageBubble,\n addUploadBubble,\n addDivider,\n apiConfigReady: api.configReady\n };\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (useSeamlyCommands);\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/hooks/use-seamly-commands.js?");
2226
2292
 
2227
2293
  /***/ }),
2228
2294
 
@@ -2310,7 +2376,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
2310
2376
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2311
2377
 
2312
2378
  "use strict";
2313
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"eventTypes\": () => (/* binding */ eventTypes),\n/* harmony export */ \"payloadTypes\": () => (/* binding */ payloadTypes),\n/* harmony export */ \"entryTypes\": () => (/* binding */ entryTypes),\n/* harmony export */ \"readStates\": () => (/* binding */ readStates),\n/* harmony export */ \"actionTypes\": () => (/* binding */ actionTypes),\n/* harmony export */ \"dismissTypes\": () => (/* binding */ dismissTypes),\n/* harmony export */ \"ariaLiveLevels\": () => (/* binding */ ariaLiveLevels),\n/* harmony export */ \"dividerKeys\": () => (/* binding */ dividerKeys),\n/* harmony export */ \"featureKeys\": () => (/* binding */ featureKeys),\n/* harmony export */ \"seamlyActions\": () => (/* binding */ seamlyActions),\n/* harmony export */ \"cardTypes\": () => (/* binding */ cardTypes),\n/* harmony export */ \"isUnreadMessage\": () => (/* binding */ isUnreadMessage),\n/* harmony export */ \"mergeHistory\": () => (/* binding */ mergeHistory),\n/* harmony export */ \"seamlyStateReducer\": () => (/* binding */ seamlyStateReducer)\n/* harmony export */ });\n/* harmony import */ var _general_utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./general-utils */ \"./src/javascripts/ui/utils/general-utils.js\");\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n\nconst eventTypes = {\n info: 'info',\n message: 'message',\n participant: 'participant',\n system: 'system'\n};\nconst payloadTypes = {\n choicePrompt: 'choice_prompt',\n text: 'text',\n image: 'image',\n video: 'video',\n participant: 'participant',\n divider: 'divider',\n translation: 'translation',\n message: 'message',\n countdown: 'countdown',\n upload: 'upload',\n cta: 'cta'\n};\nconst entryTypes = {\n text: 'text',\n upload: 'upload'\n};\nconst readStates = {\n received: 'received',\n read: 'read'\n};\nconst actionTypes = {\n pickChoice: 'pick_choice',\n navigate: 'navigate',\n custom: 'custom',\n typing: 'typing',\n read: 'read',\n detachService: 'detach_service',\n interactivityUpdate: 'interactivity_update',\n dismiss: 'dismiss',\n sendTranscript: 'send_transcript',\n setTranslation: 'set_translation',\n clickCta: 'click_cta',\n clickCard: 'click_card'\n};\nconst dismissTypes = {\n resumeConversationPrompt: 'resume_conversation_prompt'\n};\nconst ariaLiveLevels = {\n assertive: 'assertive',\n polite: 'polite'\n};\nconst dividerKeys = {\n new_topic: 'newTopic',\n new_translation: 'newTranslation'\n};\nconst featureKeys = {\n cobrowsing: 'cobrowsing',\n sendTranscript: 'sendTranscript',\n typingPeekahead: 'typingPeekahead',\n uploads: 'uploads'\n};\nconst seamlyActions = {\n ADD_EVENT: 'ADD_EVENT',\n CLEAR_EVENTS: 'CLEAR_EVENTS',\n SET_HISTORY: 'SET_HISTORY',\n SET_EVENTS_READ: 'SET_EVENTS_READ',\n ACK_EVENT: 'ACK_EVENT',\n SET_IS_LOADING: 'SET_IS_LOADING',\n CLEAR_PARTICIPANTS: 'CLEAR_PARTICIPANTS',\n SET_PARTICIPANT: 'SET_PARTICIPANT',\n SET_HEADER_TITLE: 'SET_HEADER_TITLE',\n SET_HEADER_SUB_TITLE: 'SET_HEADER_SUB_TITLE',\n RESET_HISTORY_LOADED_FLAG: 'RESET_HISTORY_LOADED_FLAG',\n SET_ACTIVE_SERVICE: 'SET_ACTIVE_SERVICE',\n INIT_IDLE_DETACH_COUNTDOWN: 'INIT_IDLE_DETACH_COUNTDOWN',\n DECREMENT_IDLE_DETACH_COUNTDOWN_COUNTER: 'DECREMENT_IDLE_DETACH_COUNTDOWN_COUNTER',\n STOP_IDLE_DETACH_COUNTDOWN_COUNTER: 'STOP_IDLE_DETACH_COUNTDOWN_COUNTER',\n CLEAR_IDLE_DETACH_COUNTDOWN: 'CLEAR_IDLE_DETACH_COUNTDOWN',\n INIT_RESUME_CONVERSATION_PROMPT: 'INIT_RESUME_CONVERSATION_PROMPT',\n CLEAR_RESUME_CONVERSATION_PROMPT: 'CLEAR_RESUME_CONVERSATION_PROMPT',\n SET_SERVICE_DATA_ITEM: 'SET_SERVICE_DATA_ITEM',\n SET_FEATURES: 'SET_FEATURES',\n SET_FEATURE_ENABLED_STATE: 'SET_FEATURE_ENABLED_STATE',\n CLEAR_FEATURES: 'CLEAR_FEATURES',\n SET_INITIAL_STATE: 'SET_INITIAL_STATE',\n SET_USER_SELECTED_OPTIONS: 'SET_USER_SELECTED_OPTIONS',\n SET_USER_SELECTED_OPTION: 'SET_USER_SELECTED_OPTION',\n SHOW_OPTION: 'SHOW_OPTION',\n HIDE_OPTION: 'HIDE_OPTION',\n SET_SERVICE_ENTRY_METADATA: 'SET_SERVICE_ENTRY_METADATA',\n SET_BLOCK_AUTO_ENTRY_SWITCH: 'SET_BLOCK_AUTO_ENTRY_SWITCH',\n SET_ACTIVE_ENTRY_TYPE: 'SET_ACTIVE_ENTRY_TYPE',\n SET_USER_ENTRY_TYPE: 'SET_USER_ENTRY_TYPE',\n REGISTER_UPLOAD: 'REGISTER_UPLOAD',\n SET_UPLOAD_PROGRESS: 'SET_UPLOAD_PROGRESS',\n SET_UPLOAD_COMPLETE: 'SET_UPLOAD_COMPLETE',\n SET_UPLOAD_ERROR: 'SET_UPLOAD_ERROR',\n CLEAR_UPLOAD: 'CLEAR_UPLOAD',\n CLEAR_ALL_UPLOADS: 'CLEAR_ALL_UPLOADS',\n SET_SEAMLY_CONTAINER_ELEMENT: 'SET_SEAMLY_CONTAINER_ELEMENT'\n};\nconst cardTypes = {\n ask: 'ask',\n navigate: 'navigate',\n topic: 'topic'\n};\nconst {\n ADD_EVENT,\n CLEAR_EVENTS,\n SET_HISTORY,\n SET_EVENTS_READ,\n ACK_EVENT,\n SET_IS_LOADING,\n CLEAR_PARTICIPANTS,\n SET_PARTICIPANT,\n SET_HEADER_TITLE,\n SET_HEADER_SUB_TITLE,\n RESET_HISTORY_LOADED_FLAG,\n SET_ACTIVE_SERVICE,\n INIT_IDLE_DETACH_COUNTDOWN,\n DECREMENT_IDLE_DETACH_COUNTDOWN_COUNTER,\n STOP_IDLE_DETACH_COUNTDOWN_COUNTER,\n CLEAR_IDLE_DETACH_COUNTDOWN,\n INIT_RESUME_CONVERSATION_PROMPT,\n CLEAR_RESUME_CONVERSATION_PROMPT,\n SET_SERVICE_DATA_ITEM,\n SET_FEATURES,\n SET_FEATURE_ENABLED_STATE,\n CLEAR_FEATURES,\n SET_INITIAL_STATE,\n SET_USER_SELECTED_OPTION,\n SET_USER_SELECTED_OPTIONS,\n SHOW_OPTION,\n HIDE_OPTION,\n SET_BLOCK_AUTO_ENTRY_SWITCH,\n SET_USER_ENTRY_TYPE,\n SET_ACTIVE_ENTRY_TYPE,\n SET_SERVICE_ENTRY_METADATA,\n REGISTER_UPLOAD,\n SET_UPLOAD_PROGRESS,\n SET_UPLOAD_COMPLETE,\n SET_UPLOAD_ERROR,\n CLEAR_UPLOAD,\n CLEAR_ALL_UPLOADS,\n SET_SEAMLY_CONTAINER_ELEMENT\n} = seamlyActions;\nconst isUnreadMessage = ({\n type,\n payload\n}) => type === eventTypes.message && !payload.fromClient || type === eventTypes.info && payload.type === payloadTypes.text;\n\nconst orderHistory = events => {\n return events.sort(({\n payload: {\n occurredAt: occurredAtA\n }\n }, {\n payload: {\n occurredAt: occurredAtB\n }\n }) => occurredAtA - occurredAtB);\n};\n\nconst mergeHistory = (stateEvents, historyEvents) => {\n const newHistoryEvents = historyEvents.filter(historyEvent => // Deduplicate the event streams\n !stateEvents.find(stateEvent => stateEvent.payload.id === historyEvent.payload.id) && // Remove all non displayable participant messages\n !(historyEvent.type === 'participant' && !historyEvent.payload.participant.introduction)) // Reverse is done here because the server sends the history in the order\n // newest to oldest. In the case of exactly the same occurredAt timestamps\n // these messages will be shown in the wrong order if not reversed. For\n // the normal merging logic there is no added effect.\n .reverse();\n return orderHistory([...newHistoryEvents, ...stateEvents]);\n};\n\nconst participantReducer = (state, action) => {\n switch (action.type) {\n case CLEAR_PARTICIPANTS:\n return {\n participants: {},\n currentAgent: ''\n };\n\n case SET_PARTICIPANT:\n const {\n participants\n } = state;\n const {\n id,\n avatar,\n name,\n introduction\n } = action.participant;\n const oldParticipant = participants[id];\n\n const newParticipants = _objectSpread(_objectSpread({}, participants), {}, {\n [id]: oldParticipant ? _objectSpread(_objectSpread(_objectSpread(_objectSpread({}, oldParticipant), avatar ? {\n avatar\n } : {}), name ? {\n name\n } : {}), introduction ? {\n introduction\n } : {}) : action.participant\n });\n\n return _objectSpread(_objectSpread({}, state), {}, {\n participants: newParticipants,\n currentAgent: state.currentAgent !== id && !action.fromClient ? id : state.currentAgent\n });\n\n default:\n return state;\n }\n};\n\nconst headerTitlesReducer = (state, action) => {\n switch (action.type) {\n case SET_HEADER_TITLE:\n return _objectSpread(_objectSpread({}, state), {}, {\n title: action.title\n });\n\n case SET_HEADER_SUB_TITLE:\n return _objectSpread(_objectSpread({}, state), {}, {\n subTitle: action.title\n });\n\n default:\n return state;\n }\n};\n\nconst calculateNewEntryMeta = (entryMeta, payload) => {\n const {\n entry\n } = payload;\n const {\n blockAutoEntrySwitch\n } = entryMeta;\n\n if (!entry) {\n return _objectSpread(_objectSpread({}, entryMeta), {}, {\n optionsOverride: {}\n });\n }\n\n const {\n type,\n options\n } = entry;\n let newActive = entryMeta.active;\n\n if (!blockAutoEntrySwitch && type !== entryMeta.userSelected) {\n newActive = type;\n }\n\n return _objectSpread(_objectSpread({}, entryMeta), {}, {\n active: newActive,\n optionsOverride: _objectSpread(_objectSpread({}, entryMeta.optionsOverride), {}, {\n [type]: options || {}\n })\n });\n};\n\nconst seamlyStateReducer = (state, action) => {\n switch (action.type) {\n case ADD_EVENT:\n const {\n type: eventType,\n payload\n } = action.event;\n const accountHasUploads = state.options.features.hasOwnProperty(featureKeys.uploads);\n const newEntryMeta = calculateNewEntryMeta(state.entryMeta, payload);\n\n let newOptions = _objectSpread({}, state.options); // This enabled override of the service enabled value for uploads.\n // If a message is sent with entry of type upload it will temporarily\n // override service value and enable uploads.\n\n\n if (accountHasUploads && (eventType === eventTypes.message || eventType === eventTypes.participant) && !payload.fromClient) {\n const {\n type: entryType\n } = payload.entry || {};\n newOptions = _objectSpread(_objectSpread({}, newOptions), {}, {\n features: _objectSpread(_objectSpread({}, newOptions.features), {}, {\n uploads: _objectSpread(_objectSpread({}, newOptions.features.uploads), {}, {\n enabledFromEntry: entryType === entryTypes.upload\n })\n })\n });\n }\n\n const incrementUnread = isUnreadMessage(action.event); // We check for duplicated and ignore them as in some error of the websocket\n // a duplicate join can be active for a while until the server connection\n // times out.\n\n const eventExists = state.events.find(e => e.payload.id === payload.id);\n\n if (eventExists) {\n return state;\n }\n\n return _objectSpread(_objectSpread({}, state), {}, {\n entryMeta: !accountHasUploads && newEntryMeta.active === entryTypes.upload ? _objectSpread({}, state.entryMeta) : newEntryMeta,\n options: newOptions,\n unreadEvents: incrementUnread ? state.unreadEvents + 1 : state.unreadEvents,\n events: [...state.events, _objectSpread(_objectSpread({}, action.event), {}, {\n // The payload spread should be done after adding the message\n // status to enable overriding the status when setting\n // event optimistically.\n payload: _objectSpread(_objectSpread({}, incrementUnread && {\n messageStatus: payload.fromClient ? readStates.read : readStates.received\n }), payload)\n })]\n });\n\n case ACK_EVENT:\n // If any ACKs are sent without transactionID the conversation crashes.\n // Ensure that this edge case is handled gracefully.\n if (!action.event.payload.transactionId) {\n console.warn('ACK received without transaction ID.');\n return state;\n }\n\n const matchedEvent = state.events.find(m => m.payload.transactionId === action.event.payload.transactionId);\n const {\n id,\n occurredAt\n } = action.event.payload;\n return matchedEvent ? _objectSpread(_objectSpread({}, state), {}, {\n events: orderHistory(state.events.map(m => m.payload.id === matchedEvent.payload.id ? _objectSpread(_objectSpread({}, m), {}, {\n payload: _objectSpread(_objectSpread({}, m.payload), {}, {\n id,\n occurredAt\n })\n }) : m))\n }) : state;\n\n case CLEAR_EVENTS:\n return _objectSpread(_objectSpread({}, state), {}, {\n unreadEvents: 0,\n events: []\n });\n\n case SET_EVENTS_READ:\n return _objectSpread(_objectSpread({}, state), {}, {\n unreadEvents: 0,\n events: state.events.map(event => {\n if (action.ids.indexOf(event.payload.id) !== -1) {\n return _objectSpread(_objectSpread({}, event), {}, {\n payload: _objectSpread(_objectSpread({}, event.payload), event.payload.messageStatus === readStates.received && {\n messageStatus: readStates.read\n })\n });\n }\n\n return event;\n })\n });\n\n case SET_HISTORY:\n const {\n events: history,\n participants,\n activeServiceSessionId,\n activeServiceSettings = {},\n serviceData,\n resumeConversationPrompt\n } = action.history;\n const events = mergeHistory(state.events, history);\n\n const mergedParticipants = _objectSpread(_objectSpread({}, state.participantInfo.participants), participants);\n\n const lastParticipantEvent = events.slice().reverse().find(m => (m.type === 'message' || m.type === 'participant') && !m.payload.fromClient);\n let lastParticipantId = null;\n\n if (lastParticipantEvent) {\n if (lastParticipantEvent.type === 'message') {\n lastParticipantId = lastParticipantEvent.payload.participant;\n }\n\n if (lastParticipantEvent.type === 'participant') {\n lastParticipantId = lastParticipantEvent.payload.participant.id;\n }\n }\n\n const {\n cobrowsing,\n entry,\n uploads\n } = activeServiceSettings;\n const historyNewEntryMeta = calculateNewEntryMeta(_objectSpread(_objectSpread(_objectSpread({}, state.entryMeta), entry), {}, {\n active: entry.default || payloadTypes.text,\n options: _objectSpread({}, entry && entry.options ? entry.options : {})\n }), events[events.length - 1].payload);\n\n let newFeatures = _objectSpread({}, state.options.features); // Only set cobrowsing if it was initialised by the account config.\n\n\n if (newFeatures.hasOwnProperty(featureKeys.cobrowsing)) {\n newFeatures = _objectSpread(_objectSpread({}, newFeatures), {}, {\n cobrowsing: {\n enabled: !!(cobrowsing && cobrowsing.enabled)\n }\n });\n }\n\n const newFeaturesHasUpload = newFeatures.hasOwnProperty(featureKeys.uploads); // Only set uploads if it was initialised by the account config.\n\n if (newFeaturesHasUpload) {\n const {\n payload: lastParticipantEventPayload\n } = lastParticipantEvent;\n const {\n type: entryType\n } = lastParticipantEventPayload.entry || {};\n newFeatures = _objectSpread(_objectSpread({}, newFeatures), {}, {\n uploads: {\n enabled: !!(uploads && uploads.enabled),\n enabledFromEntry: entryType === entryTypes.upload\n }\n });\n }\n\n const returnState = _objectSpread(_objectSpread({}, state), {}, {\n unreadEvents: events.filter(event => event.type === 'message' && event.payload.messageStatus === readStates.received).length,\n events: events.filter(e => e.type !== 'participant' || !!e.payload.participant.introduction),\n participantInfo: _objectSpread(_objectSpread(_objectSpread({}, state.participantInfo), lastParticipantId ? participantReducer(state.participantInfo, {\n type: SET_PARTICIPANT,\n participant: mergedParticipants[lastParticipantId]\n }) : {}), {}, {\n participants: mergedParticipants\n }),\n historyLoaded: true,\n serviceInfo: _objectSpread(_objectSpread({}, state.serviceInfo), {}, {\n activeServiceSessionId\n }),\n serviceData: serviceData || {},\n options: _objectSpread(_objectSpread({}, state.options), {}, {\n features: newFeatures\n }),\n entryMeta: !newFeaturesHasUpload && historyNewEntryMeta.active === entryTypes.upload ? _objectSpread({}, state.entryMeta) : historyNewEntryMeta,\n resumeConversationPrompt: resumeConversationPrompt || false\n });\n\n if (lastParticipantId) {\n returnState.headerTitles = headerTitlesReducer(state.headerTitles, {\n type: SET_HEADER_SUB_TITLE,\n title: mergedParticipants[lastParticipantId].name\n });\n }\n\n return returnState;\n\n case RESET_HISTORY_LOADED_FLAG:\n return _objectSpread(_objectSpread({}, state), {}, {\n historyLoaded: false\n });\n\n case SET_IS_LOADING:\n return _objectSpread(_objectSpread({}, state), {}, {\n isLoading: action.isLoading\n });\n\n case INIT_IDLE_DETACH_COUNTDOWN:\n const {\n delaySeconds,\n delayTime\n } = action;\n return _objectSpread(_objectSpread({}, state), {}, {\n idleDetachCountdown: {\n hasCountdown: true,\n isActive: true,\n wasStopped: false,\n count: delaySeconds,\n remaining: delaySeconds,\n timer: delayTime\n }\n });\n\n case DECREMENT_IDLE_DETACH_COUNTDOWN_COUNTER:\n const {\n idleDetachCountdown\n } = state;\n const {\n remaining: prevRemaining\n } = idleDetachCountdown;\n const remaining = prevRemaining - 1;\n return _objectSpread(_objectSpread({}, state), {}, {\n idleDetachCountdown: _objectSpread(_objectSpread({}, state.idleDetachCountdown), {}, {\n remaining,\n timer: (0,_general_utils__WEBPACK_IMPORTED_MODULE_0__.getTimeFromSeconds)(remaining)\n })\n });\n\n case STOP_IDLE_DETACH_COUNTDOWN_COUNTER:\n {\n return _objectSpread(_objectSpread({}, state), {}, {\n idleDetachCountdown: _objectSpread(_objectSpread({}, state.idleDetachCountdown), {}, {\n isActive: false,\n wasStopped: true\n })\n });\n }\n\n case CLEAR_IDLE_DETACH_COUNTDOWN:\n return _objectSpread(_objectSpread({}, state), {}, {\n idleDetachCountdown: {\n hasCountdown: false,\n isActive: false\n }\n });\n\n case INIT_RESUME_CONVERSATION_PROMPT:\n return _objectSpread(_objectSpread({}, state), {}, {\n resumeConversationPrompt: true\n });\n\n case CLEAR_RESUME_CONVERSATION_PROMPT:\n return _objectSpread(_objectSpread({}, state), {}, {\n resumeConversationPrompt: false\n });\n\n case SET_PARTICIPANT:\n case CLEAR_PARTICIPANTS:\n return _objectSpread(_objectSpread({}, state), {}, {\n participantInfo: participantReducer(state.participantInfo, action)\n });\n\n case SET_ACTIVE_SERVICE:\n if (state.serviceInfo.activeServiceSessionId !== action.activeServiceSessionId) {\n return _objectSpread(_objectSpread({}, state), {}, {\n serviceInfo: _objectSpread(_objectSpread({}, state.serviceInfo), {}, {\n activeServiceSessionId: action.activeServiceSessionId\n })\n });\n }\n\n return state;\n\n case SET_HEADER_TITLE:\n case SET_HEADER_SUB_TITLE:\n return _objectSpread(_objectSpread({}, state), {}, {\n headerTitles: headerTitlesReducer(state.headerTitles, action)\n });\n\n case SET_INITIAL_STATE:\n return _objectSpread(_objectSpread({}, state), {}, {\n initialState: action.initialState\n });\n\n case SET_SERVICE_DATA_ITEM:\n return _objectSpread(_objectSpread({}, state), {}, {\n serviceData: _objectSpread(_objectSpread({}, state.serviceData), {}, {\n [action.payload.type]: action.payload\n })\n });\n\n case SET_FEATURES:\n return _objectSpread(_objectSpread({}, state), {}, {\n options: _objectSpread(_objectSpread({}, state.options), {}, {\n features: action.features\n })\n });\n\n case SET_FEATURE_ENABLED_STATE:\n // Only set cobrowsing if it already exists in the object.\n // Otherwise we may set if for accounts not allowing it at all.\n return state.options.features.hasOwnProperty(action.key) ? _objectSpread(_objectSpread({}, state), {}, {\n options: _objectSpread(_objectSpread({}, state.options), {}, {\n features: _objectSpread(_objectSpread({}, state.options.features), {}, {\n [action.key]: _objectSpread(_objectSpread({}, state.options.features[action.key] || {}), {}, {\n enabled: action.enabled\n })\n })\n })\n }) : state;\n\n case CLEAR_FEATURES:\n return _objectSpread(_objectSpread({}, state), {}, {\n options: _objectSpread(_objectSpread({}, state.options), {}, {\n features: {}\n })\n });\n\n case SHOW_OPTION:\n return _objectSpread(_objectSpread({}, state), {}, {\n options: _objectSpread(_objectSpread({}, state.options), {}, {\n panelActive: true,\n optionActive: action.optionName\n })\n });\n\n case HIDE_OPTION:\n return _objectSpread(_objectSpread({}, state), {}, {\n options: _objectSpread(_objectSpread({}, state.options), {}, {\n panelActive: false,\n optionActive: ''\n })\n });\n\n case SET_USER_SELECTED_OPTIONS:\n return _objectSpread(_objectSpread({}, state), {}, {\n options: _objectSpread(_objectSpread({}, state.options), {}, {\n userSelectedOptions: action.options\n })\n });\n\n case SET_USER_SELECTED_OPTION:\n const {\n option,\n value\n } = action;\n return _objectSpread(_objectSpread({}, state), {}, {\n options: _objectSpread(_objectSpread({}, state.options), {}, {\n userSelectedOptions: _objectSpread(_objectSpread({}, state.options.userSelectedOptions), {}, {\n [option]: value\n })\n })\n });\n\n case SET_BLOCK_AUTO_ENTRY_SWITCH:\n const {\n value: blockAutoEntrySwitch\n } = action;\n return _objectSpread(_objectSpread({}, state), {}, {\n entryMeta: _objectSpread(_objectSpread({}, state.entryMeta), {}, {\n blockAutoEntrySwitch\n })\n });\n\n case SET_SERVICE_ENTRY_METADATA:\n const {\n entryMeta\n } = action;\n return _objectSpread(_objectSpread({}, state), {}, {\n entryMeta: _objectSpread(_objectSpread(_objectSpread({}, state.entryMeta), entryMeta), {}, {\n active: entryMeta.default,\n options: _objectSpread({}, entryMeta.options || {}),\n overrideOptions: {}\n })\n });\n\n case SET_ACTIVE_ENTRY_TYPE:\n const {\n entryType: active\n } = action;\n return _objectSpread(_objectSpread({}, state), {}, {\n entryMeta: _objectSpread(_objectSpread({}, state.entryMeta), {}, {\n active\n })\n });\n\n case SET_USER_ENTRY_TYPE:\n const {\n entryType: userSelected\n } = action;\n return _objectSpread(_objectSpread({}, state), {}, {\n entryMeta: _objectSpread(_objectSpread({}, state.entryMeta), {}, {\n userSelected\n })\n });\n\n case REGISTER_UPLOAD:\n return _objectSpread(_objectSpread({}, state), {}, {\n currentUploads: [...state.currentUploads, {\n id: action.fileId,\n name: action.fileName,\n progress: 1,\n uploading: true,\n complete: false,\n error: '',\n uploadHandle: action.uploadHandle\n }]\n });\n\n case SET_UPLOAD_PROGRESS:\n return _objectSpread(_objectSpread({}, state), {}, {\n currentUploads: state.currentUploads.map(fileUpload => {\n if (fileUpload.id === action.fileId) {\n return _objectSpread(_objectSpread({}, fileUpload), {}, {\n progress: action.progress,\n uploading: action.progress !== 100,\n uploadHandle: action.progress === 100 ? null : fileUpload.uploadHandle\n });\n }\n\n return fileUpload;\n })\n });\n\n case SET_UPLOAD_ERROR:\n return _objectSpread(_objectSpread({}, state), {}, {\n currentUploads: state.currentUploads.map(fileUpload => {\n if (fileUpload.id === action.fileId) {\n return _objectSpread(_objectSpread({}, fileUpload), {}, {\n error: action.errorText,\n progress: 0,\n uploading: false,\n uploadHandle: null\n });\n }\n\n return fileUpload;\n })\n });\n\n case SET_UPLOAD_COMPLETE:\n return _objectSpread(_objectSpread({}, state), {}, {\n currentUploads: state.currentUploads.map(fileUpload => {\n if (fileUpload.id === action.fileId) {\n return _objectSpread(_objectSpread({}, fileUpload), {}, {\n complete: true\n });\n }\n\n return fileUpload;\n })\n });\n\n case CLEAR_UPLOAD:\n return _objectSpread(_objectSpread({}, state), {}, {\n currentUploads: state.currentUploads.filter(fileUpload => fileUpload.id !== action.fileId)\n });\n\n case CLEAR_ALL_UPLOADS:\n return _objectSpread(_objectSpread({}, state), {}, {\n currentUploads: []\n });\n\n case SET_SEAMLY_CONTAINER_ELEMENT:\n {\n return _objectSpread(_objectSpread({}, state), {}, {\n seamlyContainerElement: action.element\n });\n }\n\n default:\n return state;\n }\n};\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/utils/seamly-utils.js?");
2379
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"eventTypes\": () => (/* binding */ eventTypes),\n/* harmony export */ \"payloadTypes\": () => (/* binding */ payloadTypes),\n/* harmony export */ \"entryTypes\": () => (/* binding */ entryTypes),\n/* harmony export */ \"readStates\": () => (/* binding */ readStates),\n/* harmony export */ \"actionTypes\": () => (/* binding */ actionTypes),\n/* harmony export */ \"dismissTypes\": () => (/* binding */ dismissTypes),\n/* harmony export */ \"ariaLiveLevels\": () => (/* binding */ ariaLiveLevels),\n/* harmony export */ \"dividerKeys\": () => (/* binding */ dividerKeys),\n/* harmony export */ \"featureKeys\": () => (/* binding */ featureKeys),\n/* harmony export */ \"seamlyActions\": () => (/* binding */ seamlyActions),\n/* harmony export */ \"cardTypes\": () => (/* binding */ cardTypes),\n/* harmony export */ \"isUnreadMessage\": () => (/* binding */ isUnreadMessage),\n/* harmony export */ \"mergeHistory\": () => (/* binding */ mergeHistory),\n/* harmony export */ \"seamlyStateReducer\": () => (/* binding */ seamlyStateReducer)\n/* harmony export */ });\n/* harmony import */ var _general_utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./general-utils */ \"./src/javascripts/ui/utils/general-utils.js\");\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n\nconst eventTypes = {\n info: 'info',\n message: 'message',\n participant: 'participant',\n system: 'system'\n};\nconst payloadTypes = {\n choicePrompt: 'choice_prompt',\n text: 'text',\n image: 'image',\n video: 'video',\n participant: 'participant',\n divider: 'divider',\n translation: 'translation',\n message: 'message',\n countdown: 'countdown',\n upload: 'upload',\n cta: 'cta',\n splash: 'splash'\n};\nconst entryTypes = {\n text: 'text',\n upload: 'upload'\n};\nconst readStates = {\n received: 'received',\n read: 'read'\n};\nconst actionTypes = {\n pickChoice: 'pick_choice',\n navigate: 'navigate',\n custom: 'custom',\n typing: 'typing',\n read: 'read',\n detachService: 'detach_service',\n interactivityUpdate: 'interactivity_update',\n dismiss: 'dismiss',\n sendTranscript: 'send_transcript',\n setTranslation: 'set_translation',\n clickCta: 'click_cta',\n clickCard: 'click_card'\n};\nconst dismissTypes = {\n resumeConversationPrompt: 'resume_conversation_prompt'\n};\nconst ariaLiveLevels = {\n assertive: 'assertive',\n polite: 'polite'\n};\nconst dividerKeys = {\n new_topic: 'newTopic',\n new_translation: 'newTranslation'\n};\nconst featureKeys = {\n sendTranscript: 'sendTranscript',\n typingPeekahead: 'typingPeekahead',\n uploads: 'uploads'\n};\nconst seamlyActions = {\n ADD_EVENT: 'ADD_EVENT',\n CLEAR_EVENTS: 'CLEAR_EVENTS',\n SET_HISTORY: 'SET_HISTORY',\n SET_EVENTS_READ: 'SET_EVENTS_READ',\n ACK_EVENT: 'ACK_EVENT',\n SET_IS_LOADING: 'SET_IS_LOADING',\n CLEAR_PARTICIPANTS: 'CLEAR_PARTICIPANTS',\n SET_PARTICIPANT: 'SET_PARTICIPANT',\n SET_HEADER_TITLE: 'SET_HEADER_TITLE',\n SET_HEADER_SUB_TITLE: 'SET_HEADER_SUB_TITLE',\n RESET_HISTORY_LOADED_FLAG: 'RESET_HISTORY_LOADED_FLAG',\n SET_ACTIVE_SERVICE: 'SET_ACTIVE_SERVICE',\n INIT_IDLE_DETACH_COUNTDOWN: 'INIT_IDLE_DETACH_COUNTDOWN',\n DECREMENT_IDLE_DETACH_COUNTDOWN_COUNTER: 'DECREMENT_IDLE_DETACH_COUNTDOWN_COUNTER',\n STOP_IDLE_DETACH_COUNTDOWN_COUNTER: 'STOP_IDLE_DETACH_COUNTDOWN_COUNTER',\n CLEAR_IDLE_DETACH_COUNTDOWN: 'CLEAR_IDLE_DETACH_COUNTDOWN',\n INIT_RESUME_CONVERSATION_PROMPT: 'INIT_RESUME_CONVERSATION_PROMPT',\n CLEAR_RESUME_CONVERSATION_PROMPT: 'CLEAR_RESUME_CONVERSATION_PROMPT',\n SET_SERVICE_DATA_ITEM: 'SET_SERVICE_DATA_ITEM',\n SET_FEATURES: 'SET_FEATURES',\n SET_FEATURE_ENABLED_STATE: 'SET_FEATURE_ENABLED_STATE',\n CLEAR_FEATURES: 'CLEAR_FEATURES',\n SET_INITIAL_STATE: 'SET_INITIAL_STATE',\n SET_USER_SELECTED_OPTIONS: 'SET_USER_SELECTED_OPTIONS',\n SET_USER_SELECTED_OPTION: 'SET_USER_SELECTED_OPTION',\n SHOW_OPTION: 'SHOW_OPTION',\n HIDE_OPTION: 'HIDE_OPTION',\n SET_SERVICE_ENTRY_METADATA: 'SET_SERVICE_ENTRY_METADATA',\n SET_BLOCK_AUTO_ENTRY_SWITCH: 'SET_BLOCK_AUTO_ENTRY_SWITCH',\n SET_ACTIVE_ENTRY_TYPE: 'SET_ACTIVE_ENTRY_TYPE',\n SET_USER_ENTRY_TYPE: 'SET_USER_ENTRY_TYPE',\n REGISTER_UPLOAD: 'REGISTER_UPLOAD',\n SET_UPLOAD_PROGRESS: 'SET_UPLOAD_PROGRESS',\n SET_UPLOAD_COMPLETE: 'SET_UPLOAD_COMPLETE',\n SET_UPLOAD_ERROR: 'SET_UPLOAD_ERROR',\n CLEAR_UPLOAD: 'CLEAR_UPLOAD',\n CLEAR_ALL_UPLOADS: 'CLEAR_ALL_UPLOADS',\n SET_SEAMLY_CONTAINER_ELEMENT: 'SET_SEAMLY_CONTAINER_ELEMENT'\n};\nconst cardTypes = {\n ask: 'ask',\n navigate: 'navigate',\n topic: 'topic'\n};\nconst {\n ADD_EVENT,\n CLEAR_EVENTS,\n SET_HISTORY,\n SET_EVENTS_READ,\n ACK_EVENT,\n SET_IS_LOADING,\n CLEAR_PARTICIPANTS,\n SET_PARTICIPANT,\n SET_HEADER_TITLE,\n SET_HEADER_SUB_TITLE,\n RESET_HISTORY_LOADED_FLAG,\n SET_ACTIVE_SERVICE,\n INIT_IDLE_DETACH_COUNTDOWN,\n DECREMENT_IDLE_DETACH_COUNTDOWN_COUNTER,\n STOP_IDLE_DETACH_COUNTDOWN_COUNTER,\n CLEAR_IDLE_DETACH_COUNTDOWN,\n INIT_RESUME_CONVERSATION_PROMPT,\n CLEAR_RESUME_CONVERSATION_PROMPT,\n SET_SERVICE_DATA_ITEM,\n SET_FEATURES,\n SET_FEATURE_ENABLED_STATE,\n CLEAR_FEATURES,\n SET_INITIAL_STATE,\n SET_USER_SELECTED_OPTION,\n SET_USER_SELECTED_OPTIONS,\n SHOW_OPTION,\n HIDE_OPTION,\n SET_BLOCK_AUTO_ENTRY_SWITCH,\n SET_USER_ENTRY_TYPE,\n SET_ACTIVE_ENTRY_TYPE,\n SET_SERVICE_ENTRY_METADATA,\n REGISTER_UPLOAD,\n SET_UPLOAD_PROGRESS,\n SET_UPLOAD_COMPLETE,\n SET_UPLOAD_ERROR,\n CLEAR_UPLOAD,\n CLEAR_ALL_UPLOADS,\n SET_SEAMLY_CONTAINER_ELEMENT\n} = seamlyActions;\nconst isUnreadMessage = ({\n type,\n payload\n}) => type === eventTypes.message && !payload.fromClient || type === eventTypes.info && payload.type === payloadTypes.text;\n\nconst orderHistory = events => {\n return events.sort(({\n payload: {\n occurredAt: occurredAtA\n }\n }, {\n payload: {\n occurredAt: occurredAtB\n }\n }) => occurredAtA - occurredAtB);\n};\n\nconst mergeHistory = (stateEvents, historyEvents) => {\n const newHistoryEvents = historyEvents.filter(historyEvent => // Deduplicate the event streams\n !stateEvents.find(stateEvent => stateEvent.payload.id === historyEvent.payload.id) && // Remove all non displayable participant messages\n !(historyEvent.type === 'participant' && !historyEvent.payload.participant.introduction)) // Reverse is done here because the server sends the history in the order\n // newest to oldest. In the case of exactly the same occurredAt timestamps\n // these messages will be shown in the wrong order if not reversed. For\n // the normal merging logic there is no added effect.\n .reverse();\n return orderHistory([...newHistoryEvents, ...stateEvents]);\n};\n\nconst participantReducer = (state, action) => {\n switch (action.type) {\n case CLEAR_PARTICIPANTS:\n return {\n participants: {},\n currentAgent: ''\n };\n\n case SET_PARTICIPANT:\n const {\n participants\n } = state;\n const {\n id,\n avatar,\n name,\n introduction\n } = action.participant;\n const oldParticipant = participants[id];\n\n const newParticipants = _objectSpread(_objectSpread({}, participants), {}, {\n [id]: oldParticipant ? _objectSpread(_objectSpread(_objectSpread(_objectSpread({}, oldParticipant), avatar ? {\n avatar\n } : {}), name ? {\n name\n } : {}), introduction ? {\n introduction\n } : {}) : action.participant\n });\n\n return _objectSpread(_objectSpread({}, state), {}, {\n participants: newParticipants,\n currentAgent: state.currentAgent !== id && !action.fromClient ? id : state.currentAgent\n });\n\n default:\n return state;\n }\n};\n\nconst headerTitlesReducer = (state, action) => {\n switch (action.type) {\n case SET_HEADER_TITLE:\n return _objectSpread(_objectSpread({}, state), {}, {\n title: action.title\n });\n\n case SET_HEADER_SUB_TITLE:\n return _objectSpread(_objectSpread({}, state), {}, {\n subTitle: action.title\n });\n\n default:\n return state;\n }\n};\n\nconst calculateNewEntryMeta = (entryMeta, payload) => {\n const {\n entry\n } = payload;\n const {\n blockAutoEntrySwitch\n } = entryMeta;\n\n if (!entry) {\n return _objectSpread(_objectSpread({}, entryMeta), {}, {\n optionsOverride: {}\n });\n }\n\n const {\n type,\n options\n } = entry;\n let newActive = entryMeta.active;\n\n if (!blockAutoEntrySwitch && type !== entryMeta.userSelected) {\n newActive = type;\n }\n\n return _objectSpread(_objectSpread({}, entryMeta), {}, {\n active: newActive,\n optionsOverride: _objectSpread(_objectSpread({}, entryMeta.optionsOverride), {}, {\n [type]: options || {}\n })\n });\n};\n\nconst seamlyStateReducer = (state, action) => {\n switch (action.type) {\n case ADD_EVENT:\n const {\n type: eventType,\n payload\n } = action.event;\n const accountHasUploads = state.options.features.hasOwnProperty(featureKeys.uploads);\n const newEntryMeta = calculateNewEntryMeta(state.entryMeta, payload);\n\n let newOptions = _objectSpread({}, state.options); // This enabled override of the service enabled value for uploads.\n // If a message is sent with entry of type upload it will temporarily\n // override service value and enable uploads.\n\n\n if (accountHasUploads && (eventType === eventTypes.message || eventType === eventTypes.participant) && !payload.fromClient) {\n const {\n type: entryType\n } = payload.entry || {};\n newOptions = _objectSpread(_objectSpread({}, newOptions), {}, {\n features: _objectSpread(_objectSpread({}, newOptions.features), {}, {\n uploads: _objectSpread(_objectSpread({}, newOptions.features.uploads), {}, {\n enabledFromEntry: entryType === entryTypes.upload\n })\n })\n });\n }\n\n const incrementUnread = isUnreadMessage(action.event); // We check for duplicated and ignore them as in some error of the websocket\n // a duplicate join can be active for a while until the server connection\n // times out.\n\n const eventExists = state.events.find(e => e.payload.id === payload.id);\n\n if (eventExists) {\n return state;\n }\n\n return _objectSpread(_objectSpread({}, state), {}, {\n entryMeta: !accountHasUploads && newEntryMeta.active === entryTypes.upload ? _objectSpread({}, state.entryMeta) : newEntryMeta,\n options: newOptions,\n unreadEvents: incrementUnread ? state.unreadEvents + 1 : state.unreadEvents,\n events: [...state.events, _objectSpread(_objectSpread({}, action.event), {}, {\n // The payload spread should be done after adding the message\n // status to enable overriding the status when setting\n // event optimistically.\n payload: _objectSpread(_objectSpread({}, incrementUnread && {\n messageStatus: payload.fromClient ? readStates.read : readStates.received\n }), payload)\n })]\n });\n\n case ACK_EVENT:\n // If any ACKs are sent without transactionID the conversation crashes.\n // Ensure that this edge case is handled gracefully.\n if (!action.event.payload.transactionId) {\n console.warn('ACK received without transaction ID.');\n return state;\n }\n\n const matchedEvent = state.events.find(m => m.payload.transactionId === action.event.payload.transactionId);\n const {\n id,\n occurredAt\n } = action.event.payload;\n return matchedEvent ? _objectSpread(_objectSpread({}, state), {}, {\n events: orderHistory(state.events.map(m => m.payload.id === matchedEvent.payload.id ? _objectSpread(_objectSpread({}, m), {}, {\n payload: _objectSpread(_objectSpread({}, m.payload), {}, {\n id,\n occurredAt\n })\n }) : m))\n }) : state;\n\n case CLEAR_EVENTS:\n return _objectSpread(_objectSpread({}, state), {}, {\n unreadEvents: 0,\n events: []\n });\n\n case SET_EVENTS_READ:\n return _objectSpread(_objectSpread({}, state), {}, {\n unreadEvents: 0,\n events: state.events.map(event => {\n if (action.ids.indexOf(event.payload.id) !== -1) {\n return _objectSpread(_objectSpread({}, event), {}, {\n payload: _objectSpread(_objectSpread({}, event.payload), event.payload.messageStatus === readStates.received && {\n messageStatus: readStates.read\n })\n });\n }\n\n return event;\n })\n });\n\n case SET_HISTORY:\n const {\n events: history,\n participants,\n activeServiceSessionId,\n activeServiceSettings = {},\n serviceData,\n resumeConversationPrompt\n } = action.history;\n const events = mergeHistory(state.events, history);\n\n const mergedParticipants = _objectSpread(_objectSpread({}, state.participantInfo.participants), participants);\n\n const lastParticipantEvent = events.slice().reverse().find(m => (m.type === 'message' || m.type === 'participant') && !m.payload.fromClient);\n let lastParticipantId = null;\n\n if (lastParticipantEvent) {\n if (lastParticipantEvent.type === 'message') {\n lastParticipantId = lastParticipantEvent.payload.participant;\n }\n\n if (lastParticipantEvent.type === 'participant') {\n lastParticipantId = lastParticipantEvent.payload.participant.id;\n }\n }\n\n const {\n entry,\n uploads\n } = activeServiceSettings;\n const historyNewEntryMeta = calculateNewEntryMeta(_objectSpread(_objectSpread(_objectSpread({}, state.entryMeta), entry), {}, {\n active: entry.default || payloadTypes.text,\n options: _objectSpread({}, entry && entry.options ? entry.options : {})\n }), events[events.length - 1].payload);\n\n let newFeatures = _objectSpread({}, state.options.features);\n\n const newFeaturesHasUpload = newFeatures.hasOwnProperty(featureKeys.uploads); // Only set uploads if it was initialised by the account config.\n\n if (newFeaturesHasUpload) {\n const {\n payload: lastParticipantEventPayload\n } = lastParticipantEvent;\n const {\n type: entryType\n } = lastParticipantEventPayload.entry || {};\n newFeatures = _objectSpread(_objectSpread({}, newFeatures), {}, {\n uploads: {\n enabled: !!(uploads && uploads.enabled),\n enabledFromEntry: entryType === entryTypes.upload\n }\n });\n }\n\n const returnState = _objectSpread(_objectSpread({}, state), {}, {\n unreadEvents: events.filter(event => event.type === 'message' && event.payload.messageStatus === readStates.received).length,\n events: events.filter(e => e.type !== 'participant' || !!e.payload.participant.introduction),\n participantInfo: _objectSpread(_objectSpread(_objectSpread({}, state.participantInfo), lastParticipantId ? participantReducer(state.participantInfo, {\n type: SET_PARTICIPANT,\n participant: mergedParticipants[lastParticipantId]\n }) : {}), {}, {\n participants: mergedParticipants\n }),\n historyLoaded: true,\n serviceInfo: _objectSpread(_objectSpread({}, state.serviceInfo), {}, {\n activeServiceSessionId\n }),\n serviceData: serviceData || {},\n options: _objectSpread(_objectSpread({}, state.options), {}, {\n features: newFeatures\n }),\n entryMeta: !newFeaturesHasUpload && historyNewEntryMeta.active === entryTypes.upload ? _objectSpread({}, state.entryMeta) : historyNewEntryMeta,\n resumeConversationPrompt: resumeConversationPrompt || false\n });\n\n if (lastParticipantId) {\n returnState.headerTitles = headerTitlesReducer(state.headerTitles, {\n type: SET_HEADER_SUB_TITLE,\n title: mergedParticipants[lastParticipantId].name\n });\n }\n\n return returnState;\n\n case RESET_HISTORY_LOADED_FLAG:\n return _objectSpread(_objectSpread({}, state), {}, {\n historyLoaded: false\n });\n\n case SET_IS_LOADING:\n return _objectSpread(_objectSpread({}, state), {}, {\n isLoading: action.isLoading\n });\n\n case INIT_IDLE_DETACH_COUNTDOWN:\n const {\n delaySeconds,\n delayTime\n } = action;\n return _objectSpread(_objectSpread({}, state), {}, {\n idleDetachCountdown: {\n hasCountdown: true,\n isActive: true,\n wasStopped: false,\n count: delaySeconds,\n remaining: delaySeconds,\n timer: delayTime\n }\n });\n\n case DECREMENT_IDLE_DETACH_COUNTDOWN_COUNTER:\n const {\n idleDetachCountdown\n } = state;\n const {\n remaining: prevRemaining\n } = idleDetachCountdown;\n const remaining = prevRemaining - 1;\n return _objectSpread(_objectSpread({}, state), {}, {\n idleDetachCountdown: _objectSpread(_objectSpread({}, state.idleDetachCountdown), {}, {\n remaining,\n timer: (0,_general_utils__WEBPACK_IMPORTED_MODULE_0__.getTimeFromSeconds)(remaining)\n })\n });\n\n case STOP_IDLE_DETACH_COUNTDOWN_COUNTER:\n {\n return _objectSpread(_objectSpread({}, state), {}, {\n idleDetachCountdown: _objectSpread(_objectSpread({}, state.idleDetachCountdown), {}, {\n isActive: false,\n wasStopped: true\n })\n });\n }\n\n case CLEAR_IDLE_DETACH_COUNTDOWN:\n return _objectSpread(_objectSpread({}, state), {}, {\n idleDetachCountdown: {\n hasCountdown: false,\n isActive: false\n }\n });\n\n case INIT_RESUME_CONVERSATION_PROMPT:\n return _objectSpread(_objectSpread({}, state), {}, {\n resumeConversationPrompt: true\n });\n\n case CLEAR_RESUME_CONVERSATION_PROMPT:\n return _objectSpread(_objectSpread({}, state), {}, {\n resumeConversationPrompt: false\n });\n\n case SET_PARTICIPANT:\n case CLEAR_PARTICIPANTS:\n return _objectSpread(_objectSpread({}, state), {}, {\n participantInfo: participantReducer(state.participantInfo, action)\n });\n\n case SET_ACTIVE_SERVICE:\n if (state.serviceInfo.activeServiceSessionId !== action.activeServiceSessionId) {\n return _objectSpread(_objectSpread({}, state), {}, {\n serviceInfo: _objectSpread(_objectSpread({}, state.serviceInfo), {}, {\n activeServiceSessionId: action.activeServiceSessionId\n })\n });\n }\n\n return state;\n\n case SET_HEADER_TITLE:\n case SET_HEADER_SUB_TITLE:\n return _objectSpread(_objectSpread({}, state), {}, {\n headerTitles: headerTitlesReducer(state.headerTitles, action)\n });\n\n case SET_INITIAL_STATE:\n return _objectSpread(_objectSpread({}, state), {}, {\n initialState: action.initialState\n });\n\n case SET_SERVICE_DATA_ITEM:\n return _objectSpread(_objectSpread({}, state), {}, {\n serviceData: _objectSpread(_objectSpread({}, state.serviceData), {}, {\n [action.payload.type]: action.payload\n })\n });\n\n case SET_FEATURES:\n return _objectSpread(_objectSpread({}, state), {}, {\n options: _objectSpread(_objectSpread({}, state.options), {}, {\n features: action.features\n })\n });\n\n case SET_FEATURE_ENABLED_STATE:\n return state.options.features.hasOwnProperty(action.key) ? _objectSpread(_objectSpread({}, state), {}, {\n options: _objectSpread(_objectSpread({}, state.options), {}, {\n features: _objectSpread(_objectSpread({}, state.options.features), {}, {\n [action.key]: _objectSpread(_objectSpread({}, state.options.features[action.key] || {}), {}, {\n enabled: action.enabled\n })\n })\n })\n }) : state;\n\n case CLEAR_FEATURES:\n return _objectSpread(_objectSpread({}, state), {}, {\n options: _objectSpread(_objectSpread({}, state.options), {}, {\n features: {}\n })\n });\n\n case SHOW_OPTION:\n return _objectSpread(_objectSpread({}, state), {}, {\n options: _objectSpread(_objectSpread({}, state.options), {}, {\n panelActive: true,\n optionActive: action.optionName\n })\n });\n\n case HIDE_OPTION:\n return _objectSpread(_objectSpread({}, state), {}, {\n options: _objectSpread(_objectSpread({}, state.options), {}, {\n panelActive: false,\n optionActive: ''\n })\n });\n\n case SET_USER_SELECTED_OPTIONS:\n return _objectSpread(_objectSpread({}, state), {}, {\n options: _objectSpread(_objectSpread({}, state.options), {}, {\n userSelectedOptions: action.options\n })\n });\n\n case SET_USER_SELECTED_OPTION:\n const {\n option,\n value\n } = action;\n return _objectSpread(_objectSpread({}, state), {}, {\n options: _objectSpread(_objectSpread({}, state.options), {}, {\n userSelectedOptions: _objectSpread(_objectSpread({}, state.options.userSelectedOptions), {}, {\n [option]: value\n })\n })\n });\n\n case SET_BLOCK_AUTO_ENTRY_SWITCH:\n const {\n value: blockAutoEntrySwitch\n } = action;\n return _objectSpread(_objectSpread({}, state), {}, {\n entryMeta: _objectSpread(_objectSpread({}, state.entryMeta), {}, {\n blockAutoEntrySwitch\n })\n });\n\n case SET_SERVICE_ENTRY_METADATA:\n const {\n entryMeta\n } = action;\n return _objectSpread(_objectSpread({}, state), {}, {\n entryMeta: _objectSpread(_objectSpread(_objectSpread({}, state.entryMeta), entryMeta), {}, {\n active: entryMeta.default,\n options: _objectSpread({}, entryMeta.options || {}),\n overrideOptions: {}\n })\n });\n\n case SET_ACTIVE_ENTRY_TYPE:\n const {\n entryType: active\n } = action;\n return _objectSpread(_objectSpread({}, state), {}, {\n entryMeta: _objectSpread(_objectSpread({}, state.entryMeta), {}, {\n active\n })\n });\n\n case SET_USER_ENTRY_TYPE:\n const {\n entryType: userSelected\n } = action;\n return _objectSpread(_objectSpread({}, state), {}, {\n entryMeta: _objectSpread(_objectSpread({}, state.entryMeta), {}, {\n userSelected\n })\n });\n\n case REGISTER_UPLOAD:\n return _objectSpread(_objectSpread({}, state), {}, {\n currentUploads: [...state.currentUploads, {\n id: action.fileId,\n name: action.fileName,\n progress: 1,\n uploading: true,\n complete: false,\n error: '',\n uploadHandle: action.uploadHandle\n }]\n });\n\n case SET_UPLOAD_PROGRESS:\n return _objectSpread(_objectSpread({}, state), {}, {\n currentUploads: state.currentUploads.map(fileUpload => {\n if (fileUpload.id === action.fileId) {\n return _objectSpread(_objectSpread({}, fileUpload), {}, {\n progress: action.progress,\n uploading: action.progress !== 100,\n uploadHandle: action.progress === 100 ? null : fileUpload.uploadHandle\n });\n }\n\n return fileUpload;\n })\n });\n\n case SET_UPLOAD_ERROR:\n return _objectSpread(_objectSpread({}, state), {}, {\n currentUploads: state.currentUploads.map(fileUpload => {\n if (fileUpload.id === action.fileId) {\n return _objectSpread(_objectSpread({}, fileUpload), {}, {\n error: action.errorText,\n progress: 0,\n uploading: false,\n uploadHandle: null\n });\n }\n\n return fileUpload;\n })\n });\n\n case SET_UPLOAD_COMPLETE:\n return _objectSpread(_objectSpread({}, state), {}, {\n currentUploads: state.currentUploads.map(fileUpload => {\n if (fileUpload.id === action.fileId) {\n return _objectSpread(_objectSpread({}, fileUpload), {}, {\n complete: true\n });\n }\n\n return fileUpload;\n })\n });\n\n case CLEAR_UPLOAD:\n return _objectSpread(_objectSpread({}, state), {}, {\n currentUploads: state.currentUploads.filter(fileUpload => fileUpload.id !== action.fileId)\n });\n\n case CLEAR_ALL_UPLOADS:\n return _objectSpread(_objectSpread({}, state), {}, {\n currentUploads: []\n });\n\n case SET_SEAMLY_CONTAINER_ELEMENT:\n {\n return _objectSpread(_objectSpread({}, state), {}, {\n seamlyContainerElement: action.element\n });\n }\n\n default:\n return state;\n }\n};\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/utils/seamly-utils.js?");
2314
2380
 
2315
2381
  /***/ }),
2316
2382
 
@@ -2767,7 +2833,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
2767
2833
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2768
2834
 
2769
2835
  "use strict";
2770
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (\"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"32px\\\" height=\\\"32px\\\" x=\\\"0px\\\" y=\\\"0px\\\" viewBox=\\\"0 0 32 32\\\"><defs/><path fill=\\\"none\\\" stroke=\\\"#4A48C1\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-miterlimit=\\\"10\\\" stroke-width=\\\"2\\\" d=\\\"M18.132,11.784v10.039c0,1.15-0.915,2.079-2.048,2.079l0,0c-1.133,0-2.048-0.929-2.048-2.079V8.3c0-2.099,1.675-3.8,3.743-3.8l0,0\\tc2.066,0,3.741,1.701,3.741,3.8v13.596c0,3.093-2.475,5.604-5.52,5.604l0,0c-3.048,0-5.519-2.511-5.519-5.604V9.604\\\"/></svg>\");\n\n//# sourceURL=webpack://@seamly/web-ui/./src/icons/icon_file-32.svg?./node_modules/raw-loader/dist/cjs.js");
2836
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (\"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" xml:space=\\\"preserve\\\" x=\\\"0px\\\" y=\\\"0px\\\" version=\\\"1.1\\\" viewBox=\\\"0 0 32 32\\\"><path fill=\\\"#4A48C1\\\" d=\\\"M16,28.5c-3.6,0-6.5-3-6.5-6.6V9.6c0-0.6,0.4-1,1-1s1,0.4,1,1v12.3c0,2.5,2,4.6,4.5,4.6\\tc2.5,0,4.5-2.1,4.5-4.6V8.3c0-1.5-1.2-2.8-2.7-2.8c-1.5,0-2.7,1.3-2.7,2.8v13.5c0,0.6,0.5,1.1,1,1.1c0.6,0,1-0.5,1-1.1v-10\\tc0-0.6,0.4-1,1-1s1,0.4,1,1v10c0,1.7-1.4,3.1-3,3.1s-3-1.4-3-3.1V8.3c0-2.6,2.1-4.8,4.7-4.8c2.6,0,4.7,2.2,4.7,4.8v13.6\\tC22.5,25.5,19.6,28.5,16,28.5z\\\"/></svg>\");\n\n//# sourceURL=webpack://@seamly/web-ui/./src/icons/icon_file-32.svg?./node_modules/raw-loader/dist/cjs.js");
2771
2837
 
2772
2838
  /***/ }),
2773
2839
 
@@ -3097,17 +3163,6 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
3097
3163
  "use strict";
3098
3164
  eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ _unsupportedIterableToArray)\n/* harmony export */ });\n/* harmony import */ var _arrayLikeToArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./arrayLikeToArray.js */ \"./node_modules/@ultraq/icu-message-formatter/node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js\");\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return (0,_arrayLikeToArray_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return (0,_arrayLikeToArray_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(o, minLen);\n}\n\n//# sourceURL=webpack://@seamly/web-ui/./node_modules/@ultraq/icu-message-formatter/node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js?");
3099
3165
 
3100
- /***/ }),
3101
-
3102
- /***/ "./node_modules/mustache/mustache.mjs":
3103
- /*!********************************************!*\
3104
- !*** ./node_modules/mustache/mustache.mjs ***!
3105
- \********************************************/
3106
- /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
3107
-
3108
- "use strict";
3109
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/*!\n * mustache.js - Logic-less {{mustache}} templates with JavaScript\n * http://github.com/janl/mustache.js\n */\n\nvar objectToString = Object.prototype.toString;\nvar isArray = Array.isArray || function isArrayPolyfill (object) {\n return objectToString.call(object) === '[object Array]';\n};\n\nfunction isFunction (object) {\n return typeof object === 'function';\n}\n\n/**\n * More correct typeof string handling array\n * which normally returns typeof 'object'\n */\nfunction typeStr (obj) {\n return isArray(obj) ? 'array' : typeof obj;\n}\n\nfunction escapeRegExp (string) {\n return string.replace(/[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, '\\\\$&');\n}\n\n/**\n * Null safe way of checking whether or not an object,\n * including its prototype, has a given property\n */\nfunction hasProperty (obj, propName) {\n return obj != null && typeof obj === 'object' && (propName in obj);\n}\n\n/**\n * Safe way of detecting whether or not the given thing is a primitive and\n * whether it has the given property\n */\nfunction primitiveHasOwnProperty (primitive, propName) {\n return (\n primitive != null\n && typeof primitive !== 'object'\n && primitive.hasOwnProperty\n && primitive.hasOwnProperty(propName)\n );\n}\n\n// Workaround for https://issues.apache.org/jira/browse/COUCHDB-577\n// See https://github.com/janl/mustache.js/issues/189\nvar regExpTest = RegExp.prototype.test;\nfunction testRegExp (re, string) {\n return regExpTest.call(re, string);\n}\n\nvar nonSpaceRe = /\\S/;\nfunction isWhitespace (string) {\n return !testRegExp(nonSpaceRe, string);\n}\n\nvar entityMap = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&#39;',\n '/': '&#x2F;',\n '`': '&#x60;',\n '=': '&#x3D;'\n};\n\nfunction escapeHtml (string) {\n return String(string).replace(/[&<>\"'`=\\/]/g, function fromEntityMap (s) {\n return entityMap[s];\n });\n}\n\nvar whiteRe = /\\s*/;\nvar spaceRe = /\\s+/;\nvar equalsRe = /\\s*=/;\nvar curlyRe = /\\s*\\}/;\nvar tagRe = /#|\\^|\\/|>|\\{|&|=|!/;\n\n/**\n * Breaks up the given `template` string into a tree of tokens. If the `tags`\n * argument is given here it must be an array with two string values: the\n * opening and closing tags used in the template (e.g. [ \"<%\", \"%>\" ]). Of\n * course, the default is to use mustaches (i.e. mustache.tags).\n *\n * A token is an array with at least 4 elements. The first element is the\n * mustache symbol that was used inside the tag, e.g. \"#\" or \"&\". If the tag\n * did not contain a symbol (i.e. {{myValue}}) this element is \"name\". For\n * all text that appears outside a symbol this element is \"text\".\n *\n * The second element of a token is its \"value\". For mustache tags this is\n * whatever else was inside the tag besides the opening symbol. For text tokens\n * this is the text itself.\n *\n * The third and fourth elements of the token are the start and end indices,\n * respectively, of the token in the original template.\n *\n * Tokens that are the root node of a subtree contain two more elements: 1) an\n * array of tokens in the subtree and 2) the index in the original template at\n * which the closing tag for that section begins.\n *\n * Tokens for partials also contain two more elements: 1) a string value of\n * indendation prior to that tag and 2) the index of that tag on that line -\n * eg a value of 2 indicates the partial is the third tag on this line.\n */\nfunction parseTemplate (template, tags) {\n if (!template)\n return [];\n var lineHasNonSpace = false;\n var sections = []; // Stack to hold section tokens\n var tokens = []; // Buffer to hold the tokens\n var spaces = []; // Indices of whitespace tokens on the current line\n var hasTag = false; // Is there a {{tag}} on the current line?\n var nonSpace = false; // Is there a non-space char on the current line?\n var indentation = ''; // Tracks indentation for tags that use it\n var tagIndex = 0; // Stores a count of number of tags encountered on a line\n\n // Strips all whitespace tokens array for the current line\n // if there was a {{#tag}} on it and otherwise only space.\n function stripSpace () {\n if (hasTag && !nonSpace) {\n while (spaces.length)\n delete tokens[spaces.pop()];\n } else {\n spaces = [];\n }\n\n hasTag = false;\n nonSpace = false;\n }\n\n var openingTagRe, closingTagRe, closingCurlyRe;\n function compileTags (tagsToCompile) {\n if (typeof tagsToCompile === 'string')\n tagsToCompile = tagsToCompile.split(spaceRe, 2);\n\n if (!isArray(tagsToCompile) || tagsToCompile.length !== 2)\n throw new Error('Invalid tags: ' + tagsToCompile);\n\n openingTagRe = new RegExp(escapeRegExp(tagsToCompile[0]) + '\\\\s*');\n closingTagRe = new RegExp('\\\\s*' + escapeRegExp(tagsToCompile[1]));\n closingCurlyRe = new RegExp('\\\\s*' + escapeRegExp('}' + tagsToCompile[1]));\n }\n\n compileTags(tags || mustache.tags);\n\n var scanner = new Scanner(template);\n\n var start, type, value, chr, token, openSection;\n while (!scanner.eos()) {\n start = scanner.pos;\n\n // Match any text between tags.\n value = scanner.scanUntil(openingTagRe);\n\n if (value) {\n for (var i = 0, valueLength = value.length; i < valueLength; ++i) {\n chr = value.charAt(i);\n\n if (isWhitespace(chr)) {\n spaces.push(tokens.length);\n indentation += chr;\n } else {\n nonSpace = true;\n lineHasNonSpace = true;\n indentation += ' ';\n }\n\n tokens.push([ 'text', chr, start, start + 1 ]);\n start += 1;\n\n // Check for whitespace on the current line.\n if (chr === '\\n') {\n stripSpace();\n indentation = '';\n tagIndex = 0;\n lineHasNonSpace = false;\n }\n }\n }\n\n // Match the opening tag.\n if (!scanner.scan(openingTagRe))\n break;\n\n hasTag = true;\n\n // Get the tag type.\n type = scanner.scan(tagRe) || 'name';\n scanner.scan(whiteRe);\n\n // Get the tag value.\n if (type === '=') {\n value = scanner.scanUntil(equalsRe);\n scanner.scan(equalsRe);\n scanner.scanUntil(closingTagRe);\n } else if (type === '{') {\n value = scanner.scanUntil(closingCurlyRe);\n scanner.scan(curlyRe);\n scanner.scanUntil(closingTagRe);\n type = '&';\n } else {\n value = scanner.scanUntil(closingTagRe);\n }\n\n // Match the closing tag.\n if (!scanner.scan(closingTagRe))\n throw new Error('Unclosed tag at ' + scanner.pos);\n\n if (type == '>') {\n token = [ type, value, start, scanner.pos, indentation, tagIndex, lineHasNonSpace ];\n } else {\n token = [ type, value, start, scanner.pos ];\n }\n tagIndex++;\n tokens.push(token);\n\n if (type === '#' || type === '^') {\n sections.push(token);\n } else if (type === '/') {\n // Check section nesting.\n openSection = sections.pop();\n\n if (!openSection)\n throw new Error('Unopened section \"' + value + '\" at ' + start);\n\n if (openSection[1] !== value)\n throw new Error('Unclosed section \"' + openSection[1] + '\" at ' + start);\n } else if (type === 'name' || type === '{' || type === '&') {\n nonSpace = true;\n } else if (type === '=') {\n // Set the tags for the next time around.\n compileTags(value);\n }\n }\n\n stripSpace();\n\n // Make sure there are no open sections when we're done.\n openSection = sections.pop();\n\n if (openSection)\n throw new Error('Unclosed section \"' + openSection[1] + '\" at ' + scanner.pos);\n\n return nestTokens(squashTokens(tokens));\n}\n\n/**\n * Combines the values of consecutive text tokens in the given `tokens` array\n * to a single token.\n */\nfunction squashTokens (tokens) {\n var squashedTokens = [];\n\n var token, lastToken;\n for (var i = 0, numTokens = tokens.length; i < numTokens; ++i) {\n token = tokens[i];\n\n if (token) {\n if (token[0] === 'text' && lastToken && lastToken[0] === 'text') {\n lastToken[1] += token[1];\n lastToken[3] = token[3];\n } else {\n squashedTokens.push(token);\n lastToken = token;\n }\n }\n }\n\n return squashedTokens;\n}\n\n/**\n * Forms the given array of `tokens` into a nested tree structure where\n * tokens that represent a section have two additional items: 1) an array of\n * all tokens that appear in that section and 2) the index in the original\n * template that represents the end of that section.\n */\nfunction nestTokens (tokens) {\n var nestedTokens = [];\n var collector = nestedTokens;\n var sections = [];\n\n var token, section;\n for (var i = 0, numTokens = tokens.length; i < numTokens; ++i) {\n token = tokens[i];\n\n switch (token[0]) {\n case '#':\n case '^':\n collector.push(token);\n sections.push(token);\n collector = token[4] = [];\n break;\n case '/':\n section = sections.pop();\n section[5] = token[2];\n collector = sections.length > 0 ? sections[sections.length - 1][4] : nestedTokens;\n break;\n default:\n collector.push(token);\n }\n }\n\n return nestedTokens;\n}\n\n/**\n * A simple string scanner that is used by the template parser to find\n * tokens in template strings.\n */\nfunction Scanner (string) {\n this.string = string;\n this.tail = string;\n this.pos = 0;\n}\n\n/**\n * Returns `true` if the tail is empty (end of string).\n */\nScanner.prototype.eos = function eos () {\n return this.tail === '';\n};\n\n/**\n * Tries to match the given regular expression at the current position.\n * Returns the matched text if it can match, the empty string otherwise.\n */\nScanner.prototype.scan = function scan (re) {\n var match = this.tail.match(re);\n\n if (!match || match.index !== 0)\n return '';\n\n var string = match[0];\n\n this.tail = this.tail.substring(string.length);\n this.pos += string.length;\n\n return string;\n};\n\n/**\n * Skips all text until the given regular expression can be matched. Returns\n * the skipped string, which is the entire tail if no match can be made.\n */\nScanner.prototype.scanUntil = function scanUntil (re) {\n var index = this.tail.search(re), match;\n\n switch (index) {\n case -1:\n match = this.tail;\n this.tail = '';\n break;\n case 0:\n match = '';\n break;\n default:\n match = this.tail.substring(0, index);\n this.tail = this.tail.substring(index);\n }\n\n this.pos += match.length;\n\n return match;\n};\n\n/**\n * Represents a rendering context by wrapping a view object and\n * maintaining a reference to the parent context.\n */\nfunction Context (view, parentContext) {\n this.view = view;\n this.cache = { '.': this.view };\n this.parent = parentContext;\n}\n\n/**\n * Creates a new context using the given view with this context\n * as the parent.\n */\nContext.prototype.push = function push (view) {\n return new Context(view, this);\n};\n\n/**\n * Returns the value of the given name in this context, traversing\n * up the context hierarchy if the value is absent in this context's view.\n */\nContext.prototype.lookup = function lookup (name) {\n var cache = this.cache;\n\n var value;\n if (cache.hasOwnProperty(name)) {\n value = cache[name];\n } else {\n var context = this, intermediateValue, names, index, lookupHit = false;\n\n while (context) {\n if (name.indexOf('.') > 0) {\n intermediateValue = context.view;\n names = name.split('.');\n index = 0;\n\n /**\n * Using the dot notion path in `name`, we descend through the\n * nested objects.\n *\n * To be certain that the lookup has been successful, we have to\n * check if the last object in the path actually has the property\n * we are looking for. We store the result in `lookupHit`.\n *\n * This is specially necessary for when the value has been set to\n * `undefined` and we want to avoid looking up parent contexts.\n *\n * In the case where dot notation is used, we consider the lookup\n * to be successful even if the last \"object\" in the path is\n * not actually an object but a primitive (e.g., a string, or an\n * integer), because it is sometimes useful to access a property\n * of an autoboxed primitive, such as the length of a string.\n **/\n while (intermediateValue != null && index < names.length) {\n if (index === names.length - 1)\n lookupHit = (\n hasProperty(intermediateValue, names[index])\n || primitiveHasOwnProperty(intermediateValue, names[index])\n );\n\n intermediateValue = intermediateValue[names[index++]];\n }\n } else {\n intermediateValue = context.view[name];\n\n /**\n * Only checking against `hasProperty`, which always returns `false` if\n * `context.view` is not an object. Deliberately omitting the check\n * against `primitiveHasOwnProperty` if dot notation is not used.\n *\n * Consider this example:\n * ```\n * Mustache.render(\"The length of a football field is {{#length}}{{length}}{{/length}}.\", {length: \"100 yards\"})\n * ```\n *\n * If we were to check also against `primitiveHasOwnProperty`, as we do\n * in the dot notation case, then render call would return:\n *\n * \"The length of a football field is 9.\"\n *\n * rather than the expected:\n *\n * \"The length of a football field is 100 yards.\"\n **/\n lookupHit = hasProperty(context.view, name);\n }\n\n if (lookupHit) {\n value = intermediateValue;\n break;\n }\n\n context = context.parent;\n }\n\n cache[name] = value;\n }\n\n if (isFunction(value))\n value = value.call(this.view);\n\n return value;\n};\n\n/**\n * A Writer knows how to take a stream of tokens and render them to a\n * string, given a context. It also maintains a cache of templates to\n * avoid the need to parse the same template twice.\n */\nfunction Writer () {\n this.templateCache = {\n _cache: {},\n set: function set (key, value) {\n this._cache[key] = value;\n },\n get: function get (key) {\n return this._cache[key];\n },\n clear: function clear () {\n this._cache = {};\n }\n };\n}\n\n/**\n * Clears all cached templates in this writer.\n */\nWriter.prototype.clearCache = function clearCache () {\n if (typeof this.templateCache !== 'undefined') {\n this.templateCache.clear();\n }\n};\n\n/**\n * Parses and caches the given `template` according to the given `tags` or\n * `mustache.tags` if `tags` is omitted, and returns the array of tokens\n * that is generated from the parse.\n */\nWriter.prototype.parse = function parse (template, tags) {\n var cache = this.templateCache;\n var cacheKey = template + ':' + (tags || mustache.tags).join(':');\n var isCacheEnabled = typeof cache !== 'undefined';\n var tokens = isCacheEnabled ? cache.get(cacheKey) : undefined;\n\n if (tokens == undefined) {\n tokens = parseTemplate(template, tags);\n isCacheEnabled && cache.set(cacheKey, tokens);\n }\n return tokens;\n};\n\n/**\n * High-level method that is used to render the given `template` with\n * the given `view`.\n *\n * The optional `partials` argument may be an object that contains the\n * names and templates of partials that are used in the template. It may\n * also be a function that is used to load partial templates on the fly\n * that takes a single argument: the name of the partial.\n *\n * If the optional `config` argument is given here, then it should be an\n * object with a `tags` attribute or an `escape` attribute or both.\n * If an array is passed, then it will be interpreted the same way as\n * a `tags` attribute on a `config` object.\n *\n * The `tags` attribute of a `config` object must be an array with two\n * string values: the opening and closing tags used in the template (e.g.\n * [ \"<%\", \"%>\" ]). The default is to mustache.tags.\n *\n * The `escape` attribute of a `config` object must be a function which\n * accepts a string as input and outputs a safely escaped string.\n * If an `escape` function is not provided, then an HTML-safe string\n * escaping function is used as the default.\n */\nWriter.prototype.render = function render (template, view, partials, config) {\n var tags = this.getConfigTags(config);\n var tokens = this.parse(template, tags);\n var context = (view instanceof Context) ? view : new Context(view, undefined);\n return this.renderTokens(tokens, context, partials, template, config);\n};\n\n/**\n * Low-level method that renders the given array of `tokens` using\n * the given `context` and `partials`.\n *\n * Note: The `originalTemplate` is only ever used to extract the portion\n * of the original template that was contained in a higher-order section.\n * If the template doesn't use higher-order sections, this argument may\n * be omitted.\n */\nWriter.prototype.renderTokens = function renderTokens (tokens, context, partials, originalTemplate, config) {\n var buffer = '';\n\n var token, symbol, value;\n for (var i = 0, numTokens = tokens.length; i < numTokens; ++i) {\n value = undefined;\n token = tokens[i];\n symbol = token[0];\n\n if (symbol === '#') value = this.renderSection(token, context, partials, originalTemplate, config);\n else if (symbol === '^') value = this.renderInverted(token, context, partials, originalTemplate, config);\n else if (symbol === '>') value = this.renderPartial(token, context, partials, config);\n else if (symbol === '&') value = this.unescapedValue(token, context);\n else if (symbol === 'name') value = this.escapedValue(token, context, config);\n else if (symbol === 'text') value = this.rawValue(token);\n\n if (value !== undefined)\n buffer += value;\n }\n\n return buffer;\n};\n\nWriter.prototype.renderSection = function renderSection (token, context, partials, originalTemplate, config) {\n var self = this;\n var buffer = '';\n var value = context.lookup(token[1]);\n\n // This function is used to render an arbitrary template\n // in the current context by higher-order sections.\n function subRender (template) {\n return self.render(template, context, partials, config);\n }\n\n if (!value) return;\n\n if (isArray(value)) {\n for (var j = 0, valueLength = value.length; j < valueLength; ++j) {\n buffer += this.renderTokens(token[4], context.push(value[j]), partials, originalTemplate, config);\n }\n } else if (typeof value === 'object' || typeof value === 'string' || typeof value === 'number') {\n buffer += this.renderTokens(token[4], context.push(value), partials, originalTemplate, config);\n } else if (isFunction(value)) {\n if (typeof originalTemplate !== 'string')\n throw new Error('Cannot use higher-order sections without the original template');\n\n // Extract the portion of the original template that the section contains.\n value = value.call(context.view, originalTemplate.slice(token[3], token[5]), subRender);\n\n if (value != null)\n buffer += value;\n } else {\n buffer += this.renderTokens(token[4], context, partials, originalTemplate, config);\n }\n return buffer;\n};\n\nWriter.prototype.renderInverted = function renderInverted (token, context, partials, originalTemplate, config) {\n var value = context.lookup(token[1]);\n\n // Use JavaScript's definition of falsy. Include empty arrays.\n // See https://github.com/janl/mustache.js/issues/186\n if (!value || (isArray(value) && value.length === 0))\n return this.renderTokens(token[4], context, partials, originalTemplate, config);\n};\n\nWriter.prototype.indentPartial = function indentPartial (partial, indentation, lineHasNonSpace) {\n var filteredIndentation = indentation.replace(/[^ \\t]/g, '');\n var partialByNl = partial.split('\\n');\n for (var i = 0; i < partialByNl.length; i++) {\n if (partialByNl[i].length && (i > 0 || !lineHasNonSpace)) {\n partialByNl[i] = filteredIndentation + partialByNl[i];\n }\n }\n return partialByNl.join('\\n');\n};\n\nWriter.prototype.renderPartial = function renderPartial (token, context, partials, config) {\n if (!partials) return;\n var tags = this.getConfigTags(config);\n\n var value = isFunction(partials) ? partials(token[1]) : partials[token[1]];\n if (value != null) {\n var lineHasNonSpace = token[6];\n var tagIndex = token[5];\n var indentation = token[4];\n var indentedValue = value;\n if (tagIndex == 0 && indentation) {\n indentedValue = this.indentPartial(value, indentation, lineHasNonSpace);\n }\n var tokens = this.parse(indentedValue, tags);\n return this.renderTokens(tokens, context, partials, indentedValue, config);\n }\n};\n\nWriter.prototype.unescapedValue = function unescapedValue (token, context) {\n var value = context.lookup(token[1]);\n if (value != null)\n return value;\n};\n\nWriter.prototype.escapedValue = function escapedValue (token, context, config) {\n var escape = this.getConfigEscape(config) || mustache.escape;\n var value = context.lookup(token[1]);\n if (value != null)\n return (typeof value === 'number' && escape === mustache.escape) ? String(value) : escape(value);\n};\n\nWriter.prototype.rawValue = function rawValue (token) {\n return token[1];\n};\n\nWriter.prototype.getConfigTags = function getConfigTags (config) {\n if (isArray(config)) {\n return config;\n }\n else if (config && typeof config === 'object') {\n return config.tags;\n }\n else {\n return undefined;\n }\n};\n\nWriter.prototype.getConfigEscape = function getConfigEscape (config) {\n if (config && typeof config === 'object' && !isArray(config)) {\n return config.escape;\n }\n else {\n return undefined;\n }\n};\n\nvar mustache = {\n name: 'mustache.js',\n version: '4.2.0',\n tags: [ '{{', '}}' ],\n clearCache: undefined,\n escape: undefined,\n parse: undefined,\n render: undefined,\n Scanner: undefined,\n Context: undefined,\n Writer: undefined,\n /**\n * Allows a user to override the default caching strategy, by providing an\n * object with set, get and clear methods. This can also be used to disable\n * the cache by setting it to the literal `undefined`.\n */\n set templateCache (cache) {\n defaultWriter.templateCache = cache;\n },\n /**\n * Gets the default or overridden caching object from the default writer.\n */\n get templateCache () {\n return defaultWriter.templateCache;\n }\n};\n\n// All high-level mustache.* functions use this writer.\nvar defaultWriter = new Writer();\n\n/**\n * Clears all cached templates in the default writer.\n */\nmustache.clearCache = function clearCache () {\n return defaultWriter.clearCache();\n};\n\n/**\n * Parses and caches the given template in the default writer and returns the\n * array of tokens it contains. Doing this ahead of time avoids the need to\n * parse templates on the fly as they are rendered.\n */\nmustache.parse = function parse (template, tags) {\n return defaultWriter.parse(template, tags);\n};\n\n/**\n * Renders the `template` with the given `view`, `partials`, and `config`\n * using the default writer.\n */\nmustache.render = function render (template, view, partials, config) {\n if (typeof template !== 'string') {\n throw new TypeError('Invalid template! Template should be a \"string\" ' +\n 'but \"' + typeStr(template) + '\" was given as the first ' +\n 'argument for mustache#render(template, view, partials)');\n }\n\n return defaultWriter.render(template, view, partials, config);\n};\n\n// Export the escaping function so that the user may override it.\n// See https://github.com/janl/mustache.js/issues/244\nmustache.escape = escapeHtml;\n\n// Export these mainly for testing, but also for advanced usage.\nmustache.Scanner = Scanner;\nmustache.Context = Context;\nmustache.Writer = Writer;\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (mustache);\n\n\n//# sourceURL=webpack://@seamly/web-ui/./node_modules/mustache/mustache.mjs?");
3110
-
3111
3166
  /***/ })
3112
3167
 
3113
3168
  /******/ });