@seamly/web-ui 21.0.7 → 21.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/dist/lib/components.js +224 -231
- package/build/dist/lib/components.min.js +1 -1
- package/build/dist/lib/hooks.js +116 -16
- package/build/dist/lib/hooks.min.js +1 -1
- package/build/dist/lib/index.debug.js +50 -39
- package/build/dist/lib/index.debug.min.js +1 -1
- package/build/dist/lib/index.debug.min.js.LICENSE.txt +5 -1
- package/build/dist/lib/index.js +208 -220
- package/build/dist/lib/index.min.js +1 -1
- package/build/dist/lib/standalone.js +215 -251
- package/build/dist/lib/standalone.min.js +1 -1
- package/build/dist/lib/style-guide.js +194 -191
- package/build/dist/lib/style-guide.min.js +1 -1
- package/build/dist/lib/utils.js +192 -189
- package/build/dist/lib/utils.min.js +1 -1
- package/package.json +1 -1
- package/src/javascripts/domains/forms/provider.tsx +1 -1
- package/src/javascripts/domains/i18n/slice.ts +2 -0
- package/src/javascripts/domains/interrupt/hooks.ts +15 -7
- package/src/javascripts/domains/interrupt/middleware.ts +7 -14
- package/src/javascripts/domains/interrupt/selectors.ts +4 -0
- package/src/javascripts/domains/interrupt/slice.ts +2 -2
- package/src/javascripts/domains/translations/components/translation-status.tsx +4 -3
- package/src/javascripts/domains/translations/slice.ts +2 -0
- package/src/javascripts/ui/components/app-options/index.js +4 -3
- package/src/javascripts/ui/components/core/seamly-event-subscriber.ts +9 -13
- package/src/javascripts/ui/components/core/seamly-instance-functions-loader.js +5 -5
- package/src/javascripts/ui/components/entry/deprecated-toggle-button.js +4 -3
- package/src/javascripts/ui/components/faq/faq.js +5 -4
- package/src/javascripts/ui/components/layout/agent-info.js +4 -3
- package/src/javascripts/ui/components/layout/chat-frame.js +7 -8
- package/src/javascripts/ui/components/layout/deprecated-chat-frame.js +7 -8
- package/src/javascripts/ui/components/layout/interrupt.js +6 -15
- package/src/javascripts/ui/components/layout/pre-chat-messages.js +4 -3
- package/src/javascripts/ui/components/suggestions/index.js +5 -4
- package/src/javascripts/ui/components/translation-chat-status/index.tsx +4 -3
- package/src/javascripts/ui/components/view/app-view.js +1 -2
- package/src/javascripts/ui/components/view/deprecated-view.js +1 -2
- package/src/javascripts/ui/components/view/inline-view.js +1 -11
- package/src/javascripts/ui/components/view/window-view/index.js +1 -9
- package/src/javascripts/ui/components/view/window-view/window-open-button.js +4 -3
- package/src/javascripts/ui/hooks/{use-seamly-chat.js → use-seamly-chat.ts} +5 -1
- package/src/javascripts/ui/hooks/use-session-expired-command.ts +17 -0
- package/src/.DS_Store +0 -0
|
@@ -156,7 +156,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
156
156
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
157
157
|
|
|
158
158
|
"use strict";
|
|
159
|
-
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 superagent__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! superagent */ \"./node_modules/superagent/lib/client.js\");\n/* harmony import */ var superagent__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(superagent__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var config__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! config */ \"./src/javascripts/config.ts\");\n/* harmony import */ var api_errors_seamly_configuration_error__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! api/errors/seamly-configuration-error */ \"./src/javascripts/api/errors/seamly-configuration-error.js\");\n/* harmony import */ var api_errors_seamly_general_error__WEBPACK_IMPORTED_MODULE_3__ = __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_4__ = __webpack_require__(/*! api/errors/seamly-session-expired-error */ \"./src/javascripts/api/errors/seamly-session-expired-error.js\");\n/* harmony import */ var api_errors_seamly_unauthorized_error__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! api/errors/seamly-unauthorized-error */ \"./src/javascripts/api/errors/seamly-unauthorized-error.js\");\n/* harmony import */ var ui_utils_general_utils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ui/utils/general-utils */ \"./src/javascripts/ui/utils/general-utils.js\");\n/* harmony import */ var lib_debug__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! lib/debug */ \"./src/javascripts/lib/debug.js\");\n/* harmony import */ var lib_debug__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(lib_debug__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var lib_id__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! lib/id */ \"./src/javascripts/lib/id.js\");\n/* harmony import */ var lib_store_index__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! lib/store/index */ \"./src/javascripts/lib/store/index.js\");\n/* harmony import */ var lib_store_providers_session_storage__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! lib/store/providers/session-storage */ \"./src/javascripts/lib/store/providers/session-storage.js\");\n/* harmony import */ var _conversation_connector__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./conversation-connector */ \"./src/javascripts/api/conversation-connector.ts\");\nvar __awaiter = undefined && undefined.__awaiter || function (thisArg, _arguments, P, generator) {\n function adopt(value) {\n return value instanceof P ? value : new P(function (resolve) {\n resolve(value);\n });\n }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n }\n function rejected(value) {\n try {\n step(generator[\"throw\"](value));\n } catch (e) {\n reject(e);\n }\n }\n function step(result) {\n result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __classPrivateFieldSet = undefined && undefined.__classPrivateFieldSet || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value), value;\n};\nvar __classPrivateFieldGet = undefined && undefined.__classPrivateFieldGet || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _API_instances, _API_ready, _API_externalId, _API_layoutMode, _API_config, _API_getAccessToken, _API_setAccessToken, _API_setConversationUrl, _API_getChannelTopic, _API_setChannelTopic, _API_getLocale, _API_getUrlPrefix, _API_updateUrls, _API_createConversation, _API_getEnvironment;\n\n\n\n\n\n\n\n\n\n\n\n\nconst log = lib_debug__WEBPACK_IMPORTED_MODULE_7___default()('seamly');\nconst DOMAIN = 'api.seamly-app.com';\nconst TRANSLATIONS_VERSION = 2;\nfunction buildPayload(command, payload) {\n if (command !== 'message') {\n return payload;\n }\n const {\n type,\n body\n } = payload;\n let {\n transactionId\n } = payload;\n if (!transactionId) {\n transactionId = (0,lib_id__WEBPACK_IMPORTED_MODULE_8__.randomId)();\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 */\nfunction getTimeZone() {\n if (!Intl || typeof Intl === 'undefined' || typeof Intl.DateTimeFormat === 'undefined') {\n return null;\n }\n const format = Intl.DateTimeFormat();\n if (typeof format === 'undefined' || typeof format.resolvedOptions === 'undefined') {\n return null;\n }\n const timezone = format.resolvedOptions().timeZone;\n // Ensure we get a valid timezone\n if (timezone && (timezone.indexOf('/') > -1 || timezone === 'UTC')) {\n return timezone;\n } else {\n return null;\n }\n}\nclass API {\n constructor({\n layoutMode,\n namespace,\n config,\n context\n }) {\n var _a;\n _API_instances.add(this);\n _API_ready.set(this, void 0);\n _API_externalId.set(this, void 0);\n _API_layoutMode.set(this, void 0);\n _API_config.set(this, void 0);\n this.conversation = new _conversation_connector__WEBPACK_IMPORTED_MODULE_11__[\"default\"]();\n _API_getLocale.set(this, locale => locale || this.locale);\n this.store = (0,lib_store_index__WEBPACK_IMPORTED_MODULE_9__.objectStore)(`${namespace}.connection${context.locale ? `.${context.locale}` : ''}`, config.storageProvider || lib_store_providers_session_storage__WEBPACK_IMPORTED_MODULE_10__[\"default\"]);\n this.connectionInfo = {\n apiKey: config.key,\n domain: config.domain || DOMAIN,\n secure: config.secure !== false ? config.secure || true : false\n };\n __classPrivateFieldSet(this, _API_config, Object.assign(Object.assign({}, config), {\n sendEnvironment: (_a = config.sendEnvironment) !== null && _a !== void 0 ? _a : true,\n context: Object.assign(Object.assign({}, context), {\n channelName: context.channelName || 'web'\n })\n }), \"f\");\n __classPrivateFieldSet(this, _API_ready, false, \"f\");\n this.connected = false;\n this.configReady = false;\n __classPrivateFieldSet(this, _API_externalId, config.externalId, \"f\");\n __classPrivateFieldSet(this, _API_layoutMode, layoutMode, \"f\");\n this.userResponded = false;\n this.URLS = {};\n // We want to reconnect whenever the page is loaded from cache (bfcache).\n // Older browsers don't support 'pageshow' and 'bfcache' so this will be ignored and work as usual.\n window.addEventListener('pageshow', event => {\n if (event.persisted && this.connected) {\n this.connect();\n }\n });\n }\n getConversationUrl() {\n return this.store.get('conversationUrl');\n }\n hasConversation() {\n return !!this.getConversationUrl();\n }\n clearStore() {\n this.store.delete('accessToken');\n this.store.delete('conversationUrl');\n // TODO: Remove `channelName` when all clients have been upgraded past v20.\n this.store.delete('channelName');\n this.store.delete('channelTopic');\n }\n reset() {\n return __awaiter(this, void 0, void 0, function* () {\n yield this.disconnect();\n this.clearStore();\n return this.getConfig();\n });\n }\n disconnect() {\n var _a;\n return __awaiter(this, void 0, void 0, function* () {\n if ((_a = this.conversation) === null || _a === void 0 ? void 0 : _a.disconnect) {\n this.conversation.disconnect();\n }\n this.connected = false;\n this.configReady = false;\n });\n }\n getConfig() {\n return superagent__WEBPACK_IMPORTED_MODULE_0___default().post(`${__classPrivateFieldGet(this, _API_instances, \"m\", _API_getUrlPrefix).call(this, 'http')}/client/${this.connectionInfo.apiKey}/configs`).set('Content-Type', 'application/json').query({\n v: config__WEBPACK_IMPORTED_MODULE_1__.apiVersion\n }).send({\n context: Object.assign(Object.assign({}, __classPrivateFieldGet(this, _API_config, \"f\").context), {\n environment: __classPrivateFieldGet(this, _API_config, \"f\").sendEnvironment === true ? __classPrivateFieldGet(this, _API_instances, \"m\", _API_getEnvironment).call(this) : __classPrivateFieldGet(this, _API_config, \"f\").sendEnvironment\n })\n }).then(({\n body\n }) => {\n __classPrivateFieldGet(this, _API_instances, \"m\", _API_updateUrls).call(this, body);\n this.configReady = true;\n return body.config;\n }).catch(error => {\n if (error.status === 404) {\n throw new api_errors_seamly_configuration_error__WEBPACK_IMPORTED_MODULE_2__[\"default\"](error);\n }\n if (error.status >= 500) {\n throw new api_errors_seamly_general_error__WEBPACK_IMPORTED_MODULE_3__[\"default\"](error);\n }\n throw error;\n });\n }\n getConversation() {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.hasConversation()) {\n return null;\n }\n try {\n const {\n body\n } = yield superagent__WEBPACK_IMPORTED_MODULE_0___default().get(`${__classPrivateFieldGet(this, _API_instances, \"m\", _API_getUrlPrefix).call(this, 'http')}${this.URLS.history}`).set('Authorization', `Bearer ${__classPrivateFieldGet(this, _API_instances, \"m\", _API_getAccessToken).call(this)}`).query({\n v: config__WEBPACK_IMPORTED_MODULE_1__.apiVersion\n });\n __classPrivateFieldGet(this, _API_instances, \"m\", _API_updateUrls).call(this, 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: Object.assign(Object.assign({}, 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 translationProposal: ui.translationProposal,\n translation\n };\n } catch (error) {\n if (error.status === 401) {\n throw new api_errors_seamly_unauthorized_error__WEBPACK_IMPORTED_MODULE_5__[\"default\"](error);\n }\n if (error.status === 404) {\n throw new api_errors_seamly_session_expired_error__WEBPACK_IMPORTED_MODULE_4__[\"default\"](error);\n }\n if (error.status >= 500) {\n throw new api_errors_seamly_general_error__WEBPACK_IMPORTED_MODULE_3__[\"default\"](error);\n }\n throw error;\n }\n });\n }\n connect() {\n return __awaiter(this, void 0, void 0, function* () {\n this.connected = false;\n let conversationInitialState = {};\n if (!this.hasConversation()) {\n conversationInitialState = yield __classPrivateFieldGet(this, _API_instances, \"m\", _API_createConversation).call(this);\n }\n this.conversation.connect(`${__classPrivateFieldGet(this, _API_instances, \"m\", _API_getUrlPrefix).call(this, 'ws')}${this.URLS.socket}`, __classPrivateFieldGet(this, _API_config, \"f\").context.channelName, __classPrivateFieldGet(this, _API_instances, \"m\", _API_getChannelTopic).call(this), __classPrivateFieldGet(this, _API_instances, \"m\", _API_getAccessToken).call(this));\n this.conversation.onConnection(({\n connected,\n ready\n }) => {\n this.connected = connected;\n __classPrivateFieldSet(this, _API_ready, ready, \"f\");\n });\n // Send environment\n if (__classPrivateFieldGet(this, _API_config, \"f\").sendEnvironment) {\n this.send('context', {\n environment: __classPrivateFieldGet(this, _API_config, \"f\").sendEnvironment === true ? __classPrivateFieldGet(this, _API_instances, \"m\", _API_getEnvironment).call(this) : __classPrivateFieldGet(this, _API_config, \"f\").sendEnvironment\n }, false);\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_0___default().post(`${__classPrivateFieldGet(this, _API_instances, \"m\", _API_getUrlPrefix).call(this, 'http')}${this.URLS.uploads}`).set('Authorization', `Bearer ${__classPrivateFieldGet(this, _API_instances, \"m\", _API_getAccessToken).call(this)}`).send(formData);\n req.on('progress', function (e) {\n const {\n direction,\n percent\n } = e;\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 getConversationIntitialState() {\n return superagent__WEBPACK_IMPORTED_MODULE_0___default().get(`${__classPrivateFieldGet(this, _API_instances, \"m\", _API_getUrlPrefix).call(this, 'http')}${this.getConversationUrl()}`).set('Authorization', `Bearer ${__classPrivateFieldGet(this, _API_instances, \"m\", _API_getAccessToken).call(this)}`).query({\n v: config__WEBPACK_IMPORTED_MODULE_1__.apiVersion\n }).then(({\n body\n }) => {\n __classPrivateFieldGet(this, _API_instances, \"m\", _API_updateUrls).call(this, body);\n this.userResponded = body.conversation.userResponded;\n return (0,ui_utils_general_utils__WEBPACK_IMPORTED_MODULE_6__.omit)(body.conversation, ['accessToken', 'channelTopic']);\n }).catch(error => {\n if (error.status === 401) {\n throw new api_errors_seamly_unauthorized_error__WEBPACK_IMPORTED_MODULE_5__[\"default\"](error);\n }\n if (error.status === 404) {\n throw new api_errors_seamly_session_expired_error__WEBPACK_IMPORTED_MODULE_4__[\"default\"](error);\n }\n if (error.status >= 500) {\n throw new api_errors_seamly_general_error__WEBPACK_IMPORTED_MODULE_3__[\"default\"](error);\n }\n throw error;\n });\n }\n getTranslations(locale) {\n return __awaiter(this, void 0, void 0, function* () {\n try {\n if (!this.URLS.translations) {\n throw new api_errors_seamly_configuration_error__WEBPACK_IMPORTED_MODULE_2__[\"default\"]();\n }\n const url = `${__classPrivateFieldGet(this, _API_instances, \"m\", _API_getUrlPrefix).call(this, 'http')}${this.URLS.translations}`.replace('{version}', String(TRANSLATIONS_VERSION)).replace('{locale}', __classPrivateFieldGet(this, _API_getLocale, \"f\").call(this, locale));\n const request = superagent__WEBPACK_IMPORTED_MODULE_0___default().get(url);\n const {\n body\n } = yield request;\n return body.translations;\n } catch (error) {\n if (error.status >= 500) {\n throw new api_errors_seamly_general_error__WEBPACK_IMPORTED_MODULE_3__[\"default\"](error);\n }\n throw error;\n }\n });\n }\n send(command, payload, waitForReady = true) {\n var _a;\n if (!this.connected || waitForReady && !__classPrivateFieldGet(this, _API_ready, \"f\")) {\n // Wait for connection to be made\n (_a = this.conversation) === null || _a === void 0 ? void 0 : _a.onConnection(({\n connected,\n ready\n }) => {\n this.connected = connected;\n __classPrivateFieldSet(this, _API_ready, ready, \"f\");\n if (waitForReady ? ready : connected) {\n this.send(command, payload, waitForReady);\n return true;\n }\n return false;\n });\n return;\n }\n log('[SEND]', command, payload);\n this.conversation.pushToChannel(command, buildPayload(command, payload), 10000);\n }\n sendContext(context) {\n const {\n locale,\n variables\n } = context;\n const payload = {};\n if (locale) {\n if (typeof locale !== 'string') {\n throw new Error('Locale must be a string');\n }\n payload.locale = locale;\n }\n if (variables) {\n if (typeof variables !== 'object') {\n throw new Error('Variables must be an object');\n }\n payload.variables = variables;\n }\n // If we have empty context don't send context message\n if (Object.keys(payload).length === 0 && payload.constructor === Object) {\n return;\n }\n this.send('context', payload, false);\n }\n}\n_API_ready = new WeakMap(), _API_externalId = new WeakMap(), _API_layoutMode = new WeakMap(), _API_config = new WeakMap(), _API_getLocale = new WeakMap(), _API_instances = new WeakSet(), _API_getAccessToken = function _API_getAccessToken() {\n return this.store.get('accessToken');\n}, _API_setAccessToken = function _API_setAccessToken(accessToken) {\n this.store.set('accessToken', accessToken);\n}, _API_setConversationUrl = function _API_setConversationUrl(url) {\n this.store.set('conversationUrl', url);\n}, _API_getChannelTopic = function _API_getChannelTopic() {\n // The `channelName` fallback is needed for seamless client upgrades.\n // TODO: Remove when all clients have been upgraded past v20.\n return this.store.get('channelTopic') || this.store.get('channelName');\n}, _API_setChannelTopic = function _API_setChannelTopic(topic) {\n this.store.set('channelTopic', topic);\n}, _API_getUrlPrefix = function _API_getUrlPrefix(protocol) {\n const realProtocol = this.connectionInfo.secure ? `${protocol}s` : protocol;\n return `${realProtocol}://${this.connectionInfo.domain}`;\n}, _API_updateUrls = function _API_updateUrls({\n _links: responseLinks\n}) {\n this.URLS = Object.entries(responseLinks).filter(([key]) => key !== 'self').reduce((urls, [key, {\n href\n }]) => {\n return Object.assign(Object.assign({}, urls), {\n [key]: href\n });\n }, this.URLS);\n}, _API_createConversation = function _API_createConversation() {\n var _a;\n return __awaiter(this, void 0, void 0, function* () {\n try {\n const request = superagent__WEBPACK_IMPORTED_MODULE_0___default().post(`${__classPrivateFieldGet(this, _API_instances, \"m\", _API_getUrlPrefix).call(this, 'http')}${this.URLS.conversations}`).set('Content-Type', 'application/json').query({\n v: config__WEBPACK_IMPORTED_MODULE_1__.apiVersion\n })\n // withCredentials() is necessary to allow browsers to save received\n // cookies in CORS requests.\n .withCredentials().send({\n externalId: __classPrivateFieldGet(this, _API_externalId, \"f\") || undefined\n });\n const {\n body\n } = yield request;\n const {\n conversation\n } = body;\n const initialState = Object.assign({}, conversation);\n delete initialState.accessToken;\n delete initialState.channelTopic;\n __classPrivateFieldGet(this, _API_instances, \"m\", _API_setAccessToken).call(this, conversation.accessToken);\n __classPrivateFieldGet(this, _API_instances, \"m\", _API_setChannelTopic).call(this, conversation.channelTopic);\n __classPrivateFieldGet(this, _API_instances, \"m\", _API_updateUrls).call(this, body);\n __classPrivateFieldGet(this, _API_instances, \"m\", _API_setConversationUrl).call(this, this.URLS.conversation);\n this.locale = (_a = conversation.translation) === null || _a === void 0 ? void 0 : _a.locale;\n this.userResponded = conversation.userResponded;\n return initialState;\n } catch (error) {\n if (error.status >= 500) {\n throw new api_errors_seamly_general_error__WEBPACK_IMPORTED_MODULE_3__[\"default\"](error);\n }\n throw error;\n }\n });\n}, _API_getEnvironment = function _API_getEnvironment() {\n return {\n clientName: \"@seamly/web-ui\",\n clientVariant: __classPrivateFieldGet(this, _API_layoutMode, \"f\"),\n clientVersion: \"21.0.7\",\n currentUrl: window.location.toString(),\n screenResolution: `${window.screen.width}x${window.screen.height}`,\n timezone: getTimeZone(),\n userAgent: navigator.userAgent,\n preferredLocale: navigator.language\n };\n};\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/api/index.ts?");
|
|
159
|
+
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 superagent__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! superagent */ \"./node_modules/superagent/lib/client.js\");\n/* harmony import */ var superagent__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(superagent__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var config__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! config */ \"./src/javascripts/config.ts\");\n/* harmony import */ var api_errors_seamly_configuration_error__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! api/errors/seamly-configuration-error */ \"./src/javascripts/api/errors/seamly-configuration-error.js\");\n/* harmony import */ var api_errors_seamly_general_error__WEBPACK_IMPORTED_MODULE_3__ = __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_4__ = __webpack_require__(/*! api/errors/seamly-session-expired-error */ \"./src/javascripts/api/errors/seamly-session-expired-error.js\");\n/* harmony import */ var api_errors_seamly_unauthorized_error__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! api/errors/seamly-unauthorized-error */ \"./src/javascripts/api/errors/seamly-unauthorized-error.js\");\n/* harmony import */ var ui_utils_general_utils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ui/utils/general-utils */ \"./src/javascripts/ui/utils/general-utils.js\");\n/* harmony import */ var lib_debug__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! lib/debug */ \"./src/javascripts/lib/debug.js\");\n/* harmony import */ var lib_debug__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(lib_debug__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var lib_id__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! lib/id */ \"./src/javascripts/lib/id.js\");\n/* harmony import */ var lib_store_index__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! lib/store/index */ \"./src/javascripts/lib/store/index.js\");\n/* harmony import */ var lib_store_providers_session_storage__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! lib/store/providers/session-storage */ \"./src/javascripts/lib/store/providers/session-storage.js\");\n/* harmony import */ var _conversation_connector__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./conversation-connector */ \"./src/javascripts/api/conversation-connector.ts\");\nvar __awaiter = undefined && undefined.__awaiter || function (thisArg, _arguments, P, generator) {\n function adopt(value) {\n return value instanceof P ? value : new P(function (resolve) {\n resolve(value);\n });\n }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n }\n function rejected(value) {\n try {\n step(generator[\"throw\"](value));\n } catch (e) {\n reject(e);\n }\n }\n function step(result) {\n result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __classPrivateFieldSet = undefined && undefined.__classPrivateFieldSet || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value), value;\n};\nvar __classPrivateFieldGet = undefined && undefined.__classPrivateFieldGet || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _API_instances, _API_ready, _API_externalId, _API_layoutMode, _API_config, _API_getAccessToken, _API_setAccessToken, _API_setConversationUrl, _API_getChannelTopic, _API_setChannelTopic, _API_getLocale, _API_getUrlPrefix, _API_updateUrls, _API_createConversation, _API_getEnvironment;\n\n\n\n\n\n\n\n\n\n\n\n\nconst log = lib_debug__WEBPACK_IMPORTED_MODULE_7___default()('seamly');\nconst DOMAIN = 'api.seamly-app.com';\nconst TRANSLATIONS_VERSION = 2;\nfunction buildPayload(command, payload) {\n if (command !== 'message') {\n return payload;\n }\n const {\n type,\n body\n } = payload;\n let {\n transactionId\n } = payload;\n if (!transactionId) {\n transactionId = (0,lib_id__WEBPACK_IMPORTED_MODULE_8__.randomId)();\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 */\nfunction getTimeZone() {\n if (!Intl || typeof Intl === 'undefined' || typeof Intl.DateTimeFormat === 'undefined') {\n return null;\n }\n const format = Intl.DateTimeFormat();\n if (typeof format === 'undefined' || typeof format.resolvedOptions === 'undefined') {\n return null;\n }\n const timezone = format.resolvedOptions().timeZone;\n // Ensure we get a valid timezone\n if (timezone && (timezone.indexOf('/') > -1 || timezone === 'UTC')) {\n return timezone;\n } else {\n return null;\n }\n}\nclass API {\n constructor({\n layoutMode,\n namespace,\n config,\n context\n }) {\n var _a;\n _API_instances.add(this);\n _API_ready.set(this, void 0);\n _API_externalId.set(this, void 0);\n _API_layoutMode.set(this, void 0);\n _API_config.set(this, void 0);\n this.conversation = new _conversation_connector__WEBPACK_IMPORTED_MODULE_11__[\"default\"]();\n _API_getLocale.set(this, locale => locale || this.locale);\n this.store = (0,lib_store_index__WEBPACK_IMPORTED_MODULE_9__.objectStore)(`${namespace}.connection${context.locale ? `.${context.locale}` : ''}`, config.storageProvider || lib_store_providers_session_storage__WEBPACK_IMPORTED_MODULE_10__[\"default\"]);\n this.connectionInfo = {\n apiKey: config.key,\n domain: config.domain || DOMAIN,\n secure: config.secure !== false ? config.secure || true : false\n };\n __classPrivateFieldSet(this, _API_config, Object.assign(Object.assign({}, config), {\n sendEnvironment: (_a = config.sendEnvironment) !== null && _a !== void 0 ? _a : true,\n context: Object.assign(Object.assign({}, context), {\n channelName: context.channelName || 'web'\n })\n }), \"f\");\n __classPrivateFieldSet(this, _API_ready, false, \"f\");\n this.connected = false;\n this.configReady = false;\n __classPrivateFieldSet(this, _API_externalId, config.externalId, \"f\");\n __classPrivateFieldSet(this, _API_layoutMode, layoutMode, \"f\");\n this.userResponded = false;\n this.URLS = {};\n // We want to reconnect whenever the page is loaded from cache (bfcache).\n // Older browsers don't support 'pageshow' and 'bfcache' so this will be ignored and work as usual.\n window.addEventListener('pageshow', event => {\n if (event.persisted && this.connected) {\n this.connect();\n }\n });\n }\n getConversationUrl() {\n return this.store.get('conversationUrl');\n }\n hasConversation() {\n return !!this.getConversationUrl();\n }\n clearStore() {\n this.store.delete('accessToken');\n this.store.delete('conversationUrl');\n // TODO: Remove `channelName` when all clients have been upgraded past v20.\n this.store.delete('channelName');\n this.store.delete('channelTopic');\n }\n reset() {\n return __awaiter(this, void 0, void 0, function* () {\n yield this.disconnect();\n this.clearStore();\n return this.getConfig();\n });\n }\n disconnect() {\n var _a;\n return __awaiter(this, void 0, void 0, function* () {\n if ((_a = this.conversation) === null || _a === void 0 ? void 0 : _a.disconnect) {\n this.conversation.disconnect();\n }\n this.connected = false;\n this.configReady = false;\n });\n }\n getConfig() {\n return superagent__WEBPACK_IMPORTED_MODULE_0___default().post(`${__classPrivateFieldGet(this, _API_instances, \"m\", _API_getUrlPrefix).call(this, 'http')}/client/${this.connectionInfo.apiKey}/configs`).set('Content-Type', 'application/json').query({\n v: config__WEBPACK_IMPORTED_MODULE_1__.apiVersion\n }).send({\n context: Object.assign(Object.assign({}, __classPrivateFieldGet(this, _API_config, \"f\").context), {\n environment: __classPrivateFieldGet(this, _API_config, \"f\").sendEnvironment === true ? __classPrivateFieldGet(this, _API_instances, \"m\", _API_getEnvironment).call(this) : __classPrivateFieldGet(this, _API_config, \"f\").sendEnvironment\n })\n }).then(({\n body\n }) => {\n __classPrivateFieldGet(this, _API_instances, \"m\", _API_updateUrls).call(this, body);\n this.configReady = true;\n return body.config;\n }).catch(error => {\n if (error.status === 404) {\n throw new api_errors_seamly_configuration_error__WEBPACK_IMPORTED_MODULE_2__[\"default\"](error);\n }\n if (error.status >= 500) {\n throw new api_errors_seamly_general_error__WEBPACK_IMPORTED_MODULE_3__[\"default\"](error);\n }\n throw error;\n });\n }\n getConversation() {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.hasConversation()) {\n return null;\n }\n try {\n const {\n body\n } = yield superagent__WEBPACK_IMPORTED_MODULE_0___default().get(`${__classPrivateFieldGet(this, _API_instances, \"m\", _API_getUrlPrefix).call(this, 'http')}${this.URLS.history}`).set('Authorization', `Bearer ${__classPrivateFieldGet(this, _API_instances, \"m\", _API_getAccessToken).call(this)}`).query({\n v: config__WEBPACK_IMPORTED_MODULE_1__.apiVersion\n });\n __classPrivateFieldGet(this, _API_instances, \"m\", _API_updateUrls).call(this, 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: Object.assign(Object.assign({}, 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 translationProposal: ui.translationProposal,\n translation\n };\n } catch (error) {\n if (error.status === 401) {\n throw new api_errors_seamly_unauthorized_error__WEBPACK_IMPORTED_MODULE_5__[\"default\"](error);\n }\n if (error.status === 404) {\n throw new api_errors_seamly_session_expired_error__WEBPACK_IMPORTED_MODULE_4__[\"default\"](error);\n }\n if (error.status >= 500) {\n throw new api_errors_seamly_general_error__WEBPACK_IMPORTED_MODULE_3__[\"default\"](error);\n }\n throw error;\n }\n });\n }\n connect() {\n return __awaiter(this, void 0, void 0, function* () {\n this.connected = false;\n let conversationInitialState = {};\n if (!this.hasConversation()) {\n conversationInitialState = yield __classPrivateFieldGet(this, _API_instances, \"m\", _API_createConversation).call(this);\n }\n this.conversation.connect(`${__classPrivateFieldGet(this, _API_instances, \"m\", _API_getUrlPrefix).call(this, 'ws')}${this.URLS.socket}`, __classPrivateFieldGet(this, _API_config, \"f\").context.channelName, __classPrivateFieldGet(this, _API_instances, \"m\", _API_getChannelTopic).call(this), __classPrivateFieldGet(this, _API_instances, \"m\", _API_getAccessToken).call(this));\n this.conversation.onConnection(({\n connected,\n ready\n }) => {\n this.connected = connected;\n __classPrivateFieldSet(this, _API_ready, ready, \"f\");\n });\n // Send environment\n if (__classPrivateFieldGet(this, _API_config, \"f\").sendEnvironment) {\n this.send('context', {\n environment: __classPrivateFieldGet(this, _API_config, \"f\").sendEnvironment === true ? __classPrivateFieldGet(this, _API_instances, \"m\", _API_getEnvironment).call(this) : __classPrivateFieldGet(this, _API_config, \"f\").sendEnvironment\n }, false);\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_0___default().post(`${__classPrivateFieldGet(this, _API_instances, \"m\", _API_getUrlPrefix).call(this, 'http')}${this.URLS.uploads}`).set('Authorization', `Bearer ${__classPrivateFieldGet(this, _API_instances, \"m\", _API_getAccessToken).call(this)}`).send(formData);\n req.on('progress', function (e) {\n const {\n direction,\n percent\n } = e;\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 getConversationIntitialState() {\n return superagent__WEBPACK_IMPORTED_MODULE_0___default().get(`${__classPrivateFieldGet(this, _API_instances, \"m\", _API_getUrlPrefix).call(this, 'http')}${this.getConversationUrl()}`).set('Authorization', `Bearer ${__classPrivateFieldGet(this, _API_instances, \"m\", _API_getAccessToken).call(this)}`).query({\n v: config__WEBPACK_IMPORTED_MODULE_1__.apiVersion\n }).then(({\n body\n }) => {\n __classPrivateFieldGet(this, _API_instances, \"m\", _API_updateUrls).call(this, body);\n this.userResponded = body.conversation.userResponded;\n return (0,ui_utils_general_utils__WEBPACK_IMPORTED_MODULE_6__.omit)(body.conversation, ['accessToken', 'channelTopic']);\n }).catch(error => {\n if (error.status === 401) {\n throw new api_errors_seamly_unauthorized_error__WEBPACK_IMPORTED_MODULE_5__[\"default\"](error);\n }\n if (error.status === 404) {\n throw new api_errors_seamly_session_expired_error__WEBPACK_IMPORTED_MODULE_4__[\"default\"](error);\n }\n if (error.status >= 500) {\n throw new api_errors_seamly_general_error__WEBPACK_IMPORTED_MODULE_3__[\"default\"](error);\n }\n throw error;\n });\n }\n getTranslations(locale) {\n return __awaiter(this, void 0, void 0, function* () {\n try {\n if (!this.URLS.translations) {\n throw new api_errors_seamly_configuration_error__WEBPACK_IMPORTED_MODULE_2__[\"default\"]();\n }\n const url = `${__classPrivateFieldGet(this, _API_instances, \"m\", _API_getUrlPrefix).call(this, 'http')}${this.URLS.translations}`.replace('{version}', String(TRANSLATIONS_VERSION)).replace('{locale}', __classPrivateFieldGet(this, _API_getLocale, \"f\").call(this, locale));\n const request = superagent__WEBPACK_IMPORTED_MODULE_0___default().get(url);\n const {\n body\n } = yield request;\n return body.translations;\n } catch (error) {\n if (error.status >= 500) {\n throw new api_errors_seamly_general_error__WEBPACK_IMPORTED_MODULE_3__[\"default\"](error);\n }\n throw error;\n }\n });\n }\n send(command, payload, waitForReady = true) {\n var _a;\n if (!this.connected || waitForReady && !__classPrivateFieldGet(this, _API_ready, \"f\")) {\n // Wait for connection to be made\n (_a = this.conversation) === null || _a === void 0 ? void 0 : _a.onConnection(({\n connected,\n ready\n }) => {\n this.connected = connected;\n __classPrivateFieldSet(this, _API_ready, ready, \"f\");\n if (waitForReady ? ready : connected) {\n this.send(command, payload, waitForReady);\n return true;\n }\n return false;\n });\n return;\n }\n log('[SEND]', command, payload);\n this.conversation.pushToChannel(command, buildPayload(command, payload), 10000);\n }\n sendContext(context) {\n const {\n locale,\n variables\n } = context;\n const payload = {};\n if (locale) {\n if (typeof locale !== 'string') {\n throw new Error('Locale must be a string');\n }\n payload.locale = locale;\n }\n if (variables) {\n if (typeof variables !== 'object') {\n throw new Error('Variables must be an object');\n }\n payload.variables = variables;\n }\n // If we have empty context don't send context message\n if (Object.keys(payload).length === 0 && payload.constructor === Object) {\n return;\n }\n this.send('context', payload, false);\n }\n}\n_API_ready = new WeakMap(), _API_externalId = new WeakMap(), _API_layoutMode = new WeakMap(), _API_config = new WeakMap(), _API_getLocale = new WeakMap(), _API_instances = new WeakSet(), _API_getAccessToken = function _API_getAccessToken() {\n return this.store.get('accessToken');\n}, _API_setAccessToken = function _API_setAccessToken(accessToken) {\n this.store.set('accessToken', accessToken);\n}, _API_setConversationUrl = function _API_setConversationUrl(url) {\n this.store.set('conversationUrl', url);\n}, _API_getChannelTopic = function _API_getChannelTopic() {\n // The `channelName` fallback is needed for seamless client upgrades.\n // TODO: Remove when all clients have been upgraded past v20.\n return this.store.get('channelTopic') || this.store.get('channelName');\n}, _API_setChannelTopic = function _API_setChannelTopic(topic) {\n this.store.set('channelTopic', topic);\n}, _API_getUrlPrefix = function _API_getUrlPrefix(protocol) {\n const realProtocol = this.connectionInfo.secure ? `${protocol}s` : protocol;\n return `${realProtocol}://${this.connectionInfo.domain}`;\n}, _API_updateUrls = function _API_updateUrls({\n _links: responseLinks\n}) {\n this.URLS = Object.entries(responseLinks).filter(([key]) => key !== 'self').reduce((urls, [key, {\n href\n }]) => {\n return Object.assign(Object.assign({}, urls), {\n [key]: href\n });\n }, this.URLS);\n}, _API_createConversation = function _API_createConversation() {\n var _a;\n return __awaiter(this, void 0, void 0, function* () {\n try {\n const request = superagent__WEBPACK_IMPORTED_MODULE_0___default().post(`${__classPrivateFieldGet(this, _API_instances, \"m\", _API_getUrlPrefix).call(this, 'http')}${this.URLS.conversations}`).set('Content-Type', 'application/json').query({\n v: config__WEBPACK_IMPORTED_MODULE_1__.apiVersion\n })\n // withCredentials() is necessary to allow browsers to save received\n // cookies in CORS requests.\n .withCredentials().send({\n externalId: __classPrivateFieldGet(this, _API_externalId, \"f\") || undefined\n });\n const {\n body\n } = yield request;\n const {\n conversation\n } = body;\n const initialState = Object.assign({}, conversation);\n delete initialState.accessToken;\n delete initialState.channelTopic;\n __classPrivateFieldGet(this, _API_instances, \"m\", _API_setAccessToken).call(this, conversation.accessToken);\n __classPrivateFieldGet(this, _API_instances, \"m\", _API_setChannelTopic).call(this, conversation.channelTopic);\n __classPrivateFieldGet(this, _API_instances, \"m\", _API_updateUrls).call(this, body);\n __classPrivateFieldGet(this, _API_instances, \"m\", _API_setConversationUrl).call(this, this.URLS.conversation);\n this.locale = (_a = conversation.translation) === null || _a === void 0 ? void 0 : _a.locale;\n this.userResponded = conversation.userResponded;\n return initialState;\n } catch (error) {\n if (error.status >= 500) {\n throw new api_errors_seamly_general_error__WEBPACK_IMPORTED_MODULE_3__[\"default\"](error);\n }\n throw error;\n }\n });\n}, _API_getEnvironment = function _API_getEnvironment() {\n return {\n clientName: \"@seamly/web-ui\",\n clientVariant: __classPrivateFieldGet(this, _API_layoutMode, \"f\"),\n clientVersion: \"21.0.9\",\n currentUrl: window.location.toString(),\n screenResolution: `${window.screen.width}x${window.screen.height}`,\n timezone: getTimeZone(),\n userAgent: navigator.userAgent,\n preferredLocale: navigator.language\n };\n};\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/api/index.ts?");
|
|
160
160
|
|
|
161
161
|
/***/ }),
|
|
162
162
|
|
|
@@ -354,7 +354,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
354
354
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
355
355
|
|
|
356
356
|
"use strict";
|
|
357
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"i18nSlice\": () => (/* binding */ i18nSlice),\n/* harmony export */ \"setInitialLocale\": () => (/* binding */ setInitialLocale),\n/* harmony export */ \"setTranslations\": () => (/* binding */ setTranslations)\n/* harmony export */ });\n/* harmony import */ var
|
|
357
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"i18nSlice\": () => (/* binding */ i18nSlice),\n/* harmony export */ \"setInitialLocale\": () => (/* binding */ setInitialLocale),\n/* harmony export */ \"setTranslations\": () => (/* binding */ setTranslations)\n/* harmony export */ });\n/* harmony import */ var _reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @reduxjs/toolkit */ \"./node_modules/@reduxjs/toolkit/dist/redux-toolkit.esm.js\");\n/* harmony import */ var domains_app_actions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! domains/app/actions */ \"./src/javascripts/domains/app/actions.ts\");\n/* harmony import */ var domains_config_actions__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! domains/config/actions */ \"./src/javascripts/domains/config/actions.ts\");\n/* harmony import */ var domains_i18n_actions__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! domains/i18n/actions */ \"./src/javascripts/domains/i18n/actions.ts\");\n\n\n\n\nconst initialState = {\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 locale: undefined\n};\nconst i18nSlice = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_3__.createSlice)({\n name: 'app',\n initialState,\n reducers: {\n setInitialLocale: (state, action) => {\n state.initialLocale = action.payload;\n },\n setTranslations: (state, {\n payload\n }) => {\n state.translations = payload;\n }\n },\n extraReducers: builder => {\n // Add reducers for additional action types here, and handle loading state as needed\n builder.addCase(domains_app_actions__WEBPACK_IMPORTED_MODULE_0__.resetApp.pending, () => initialState).addCase(domains_config_actions__WEBPACK_IMPORTED_MODULE_1__.initializeConfig.fulfilled, (state, {\n payload\n }) => {\n state.initialLocale = payload.locale;\n }).addCase(domains_i18n_actions__WEBPACK_IMPORTED_MODULE_2__.setLocale.pending, state => {\n state.isLoading = true;\n }).addCase(domains_i18n_actions__WEBPACK_IMPORTED_MODULE_2__.setLocale.rejected, state => {\n state.isLoading = false;\n }).addCase(domains_i18n_actions__WEBPACK_IMPORTED_MODULE_2__.setLocale.fulfilled, (state, {\n payload\n }) => {\n state.isLoading = false;\n if (!(payload === null || payload === void 0 ? void 0 : payload.translations)) {\n return;\n }\n state.locale = payload.locale;\n state.translations = Object.keys(payload.translations).sort().reduce((accum, key) => Object.assign(Object.assign({}, accum), {\n [key]: payload.translations[key]\n }), {});\n });\n }\n});\nconst {\n setInitialLocale,\n setTranslations\n} = i18nSlice.actions;\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (i18nSlice.reducer);\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/domains/i18n/slice.ts?");
|
|
358
358
|
|
|
359
359
|
/***/ }),
|
|
360
360
|
|
|
@@ -365,7 +365,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
365
365
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
366
366
|
|
|
367
367
|
"use strict";
|
|
368
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"useInterrupt\": () => (/* binding */ useInterrupt)\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 react_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-redux */ \"./node_modules/react-redux/es/index.js\");\n/* harmony import */ var domains_i18n_hooks__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! domains/i18n/hooks */ \"./src/javascripts/domains/i18n/hooks.ts\");\n/* harmony import */ var _selectors__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./selectors */ \"./src/javascripts/domains/interrupt/selectors.ts\");\n\n\n\n\nfunction useInterrupt() {\n const {\n t\n } = (0,domains_i18n_hooks__WEBPACK_IMPORTED_MODULE_2__.useI18n)();\n const error = (0,react_redux__WEBPACK_IMPORTED_MODULE_1__.useSelector)(_selectors__WEBPACK_IMPORTED_MODULE_3__.selectError);\n const
|
|
368
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"useInterrupt\": () => (/* binding */ useInterrupt)\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 react_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-redux */ \"./node_modules/react-redux/es/index.js\");\n/* harmony import */ var domains_i18n_hooks__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! domains/i18n/hooks */ \"./src/javascripts/domains/i18n/hooks.ts\");\n/* harmony import */ var _selectors__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./selectors */ \"./src/javascripts/domains/interrupt/selectors.ts\");\n\n\n\n\nfunction useInterrupt() {\n const {\n t\n } = (0,domains_i18n_hooks__WEBPACK_IMPORTED_MODULE_2__.useI18n)();\n const error = (0,react_redux__WEBPACK_IMPORTED_MODULE_1__.useSelector)(_selectors__WEBPACK_IMPORTED_MODULE_3__.selectError);\n const hasError = (0,react_redux__WEBPACK_IMPORTED_MODULE_1__.useSelector)(_selectors__WEBPACK_IMPORTED_MODULE_3__.selectHasError);\n const meta = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => {\n if (!hasError) {\n return {\n title: undefined,\n message: undefined,\n srText: undefined,\n buttonText: undefined,\n originalError: undefined\n };\n }\n const {\n langKey,\n action\n } = error;\n const title = t(`${langKey}.title`);\n const message = t(`${langKey}.message`);\n const srText = t(`${langKey}.srText`);\n const buttonText = t(`${langKey}.buttonText`);\n return Object.assign(Object.assign(Object.assign(Object.assign({}, langKey ? {\n title,\n message,\n srText\n } : {}), action ? {\n action\n } : {}), action && langKey ? {\n buttonText\n } : {}), {\n originalError: error\n });\n }, [hasError, error, t]);\n return {\n hasError,\n meta,\n error\n };\n}\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/domains/interrupt/hooks.ts?");
|
|
369
369
|
|
|
370
370
|
/***/ }),
|
|
371
371
|
|
|
@@ -376,7 +376,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
376
376
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
377
377
|
|
|
378
378
|
"use strict";
|
|
379
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ createInterruptMiddleware)\n/* harmony export */ });\n/* harmony import */ var
|
|
379
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ createInterruptMiddleware)\n/* harmony export */ });\n/* harmony import */ var api_errors_seamly_general_error__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! api/errors/seamly-general-error */ \"./src/javascripts/api/errors/seamly-general-error.js\");\n/* harmony import */ var domains_interrupt_slice__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! domains/interrupt/slice */ \"./src/javascripts/domains/interrupt/slice.ts\");\n\n\nconst handledErrorTypes = ['SeamlyGeneralError', 'SeamlyConfigurationError', 'SeamlySessionExpiredError', 'SeamlyOfflineError', 'SeamlyUnauthorizedError', 'SeamlyUnavailableError'];\nfunction createInterruptMiddleware({\n api\n}) {\n return () => next => action => {\n const {\n payload,\n type\n } = action;\n if (type === domains_interrupt_slice__WEBPACK_IMPORTED_MODULE_1__.setInterrupt.type) {\n if (!handledErrorTypes.includes(payload.name)) {\n throw new api_errors_seamly_general_error__WEBPACK_IMPORTED_MODULE_0__[\"default\"](payload);\n } else if (payload.action === 'reset') {\n // [SMLY-942] We clear the store before a reset to force a new conversation if the page is refreshed before the conversation is reset\n api.disconnect().then(() => {\n api.clearStore();\n });\n }\n }\n return next(action);\n };\n}\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/domains/interrupt/middleware.ts?");
|
|
380
380
|
|
|
381
381
|
/***/ }),
|
|
382
382
|
|
|
@@ -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 */ \"selectError\": () => (/* binding */ selectError)\n/* harmony export */ });\n/* harmony import */ var _reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @reduxjs/toolkit */ \"./node_modules/reselect/es/index.js\");\n\nconst selectError = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSelector)(({\n interrupt\n}) => interrupt, ({\n error\n}) => error);\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/domains/interrupt/selectors.ts?");
|
|
390
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"selectError\": () => (/* binding */ selectError),\n/* harmony export */ \"selectHasError\": () => (/* binding */ selectHasError)\n/* harmony export */ });\n/* harmony import */ var _reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @reduxjs/toolkit */ \"./node_modules/reselect/es/index.js\");\n\nconst selectError = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSelector)(({\n interrupt\n}) => interrupt, ({\n error\n}) => error);\nconst selectHasError = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_0__.createSelector)(selectError, error => Boolean(error));\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/domains/interrupt/selectors.ts?");
|
|
391
391
|
|
|
392
392
|
/***/ }),
|
|
393
393
|
|
|
@@ -398,7 +398,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
398
398
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
399
399
|
|
|
400
400
|
"use strict";
|
|
401
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"clearInterrupt\": () => (/* binding */ clearInterrupt),\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"interruptSlice\": () => (/* binding */ interruptSlice),\n/* harmony export */ \"setInterrupt\": () => (/* binding */ setInterrupt)\n/* harmony export */ });\n/* harmony import */ var _reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @reduxjs/toolkit */ \"./node_modules/@reduxjs/toolkit/dist/redux-toolkit.esm.js\");\n/* harmony import */ var domains_app_actions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! domains/app/actions */ \"./src/javascripts/domains/app/actions.ts\");\n/* harmony import */ var domains_config_actions__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! domains/config/actions */ \"./src/javascripts/domains/config/actions.ts\");\n/* harmony import */ var domains_i18n_actions__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! domains/i18n/actions */ \"./src/javascripts/domains/i18n/actions.ts\");\n/* harmony import */ var domains_visibility_actions__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! domains/visibility/actions */ \"./src/javascripts/domains/visibility/actions.ts\");\n\n\n\n\n\nconst initialState = {\n error: undefined\n};\nconst interruptSlice = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_4__.createSlice)({\n name: 'interrupt',\n initialState,\n reducers: {\n setInterrupt: (state, action) => {\n state.error = action.payload;\n },\n clearInterrupt: () => initialState\n },\n extraReducers: builder => {\n builder.addCase(
|
|
401
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"clearInterrupt\": () => (/* binding */ clearInterrupt),\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"interruptSlice\": () => (/* binding */ interruptSlice),\n/* harmony export */ \"setInterrupt\": () => (/* binding */ setInterrupt)\n/* harmony export */ });\n/* harmony import */ var _reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @reduxjs/toolkit */ \"./node_modules/@reduxjs/toolkit/dist/redux-toolkit.esm.js\");\n/* harmony import */ var domains_app_actions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! domains/app/actions */ \"./src/javascripts/domains/app/actions.ts\");\n/* harmony import */ var domains_config_actions__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! domains/config/actions */ \"./src/javascripts/domains/config/actions.ts\");\n/* harmony import */ var domains_i18n_actions__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! domains/i18n/actions */ \"./src/javascripts/domains/i18n/actions.ts\");\n/* harmony import */ var domains_visibility_actions__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! domains/visibility/actions */ \"./src/javascripts/domains/visibility/actions.ts\");\n\n\n\n\n\nconst initialState = {\n error: undefined\n};\nconst interruptSlice = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_4__.createSlice)({\n name: 'interrupt',\n initialState,\n reducers: {\n setInterrupt: (state, action) => {\n state.error = action.payload;\n },\n clearInterrupt: () => initialState\n },\n extraReducers: builder => {\n builder.addCase(domains_config_actions__WEBPACK_IMPORTED_MODULE_1__.initializeConfig.pending, () => initialState).addMatcher((0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_4__.isAnyOf)(domains_app_actions__WEBPACK_IMPORTED_MODULE_0__.initializeApp.rejected, domains_config_actions__WEBPACK_IMPORTED_MODULE_1__.initializeConfig.rejected, domains_i18n_actions__WEBPACK_IMPORTED_MODULE_2__.setLocale.rejected, domains_visibility_actions__WEBPACK_IMPORTED_MODULE_3__.setVisibility.rejected, domains_visibility_actions__WEBPACK_IMPORTED_MODULE_3__.initializeVisibility.rejected), (state, {\n payload\n }) => {\n state.error = payload;\n });\n }\n});\nconst {\n setInterrupt,\n clearInterrupt\n} = interruptSlice.actions;\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (interruptSlice.reducer);\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/domains/interrupt/slice.ts?");
|
|
402
402
|
|
|
403
403
|
/***/ }),
|
|
404
404
|
|
|
@@ -464,7 +464,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
464
464
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
465
465
|
|
|
466
466
|
"use strict";
|
|
467
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"disableEventsTranslation\": () => (/* binding */ disableEventsTranslation),\n/* harmony export */ \"disableTranslation\": () => (/* binding */ disableTranslation),\n/* harmony export */ \"disableTranslationProposalPrompt\": () => (/* binding */ disableTranslationProposalPrompt),\n/* harmony export */ \"enableEventsTranslation\": () => (/* binding */ enableEventsTranslation),\n/* harmony export */ \"enableTranslation\": () => (/* binding */ enableTranslation),\n/* harmony export */ \"setTranslationProposalPrompt\": () => (/* binding */ setTranslationProposalPrompt),\n/* harmony export */ \"translationSlice\": () => (/* binding */ translationSlice),\n/* harmony export */ \"translationsInitialState\": () => (/* binding */ translationsInitialState)\n/* harmony export */ });\n/* harmony import */ var
|
|
467
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"disableEventsTranslation\": () => (/* binding */ disableEventsTranslation),\n/* harmony export */ \"disableTranslation\": () => (/* binding */ disableTranslation),\n/* harmony export */ \"disableTranslationProposalPrompt\": () => (/* binding */ disableTranslationProposalPrompt),\n/* harmony export */ \"enableEventsTranslation\": () => (/* binding */ enableEventsTranslation),\n/* harmony export */ \"enableTranslation\": () => (/* binding */ enableTranslation),\n/* harmony export */ \"setTranslationProposalPrompt\": () => (/* binding */ setTranslationProposalPrompt),\n/* harmony export */ \"translationSlice\": () => (/* binding */ translationSlice),\n/* harmony export */ \"translationsInitialState\": () => (/* binding */ translationsInitialState)\n/* harmony export */ });\n/* harmony import */ var _reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @reduxjs/toolkit */ \"./node_modules/@reduxjs/toolkit/dist/redux-toolkit.esm.js\");\n/* harmony import */ var domains_app_actions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! domains/app/actions */ \"./src/javascripts/domains/app/actions.ts\");\n/* harmony import */ var domains_config_actions__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! domains/config/actions */ \"./src/javascripts/domains/config/actions.ts\");\n/* harmony import */ var domains_store_slice__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! domains/store/slice */ \"./src/javascripts/domains/store/slice.ts\");\n\n\n\n\nconst translationsInitialState = {\n isActive: false,\n currentLocale: undefined,\n isAvailable: false,\n languages: [],\n containerId: (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_3__.nanoid)(),\n translatedEventGroups: {},\n translationProposal: null\n};\nconst getLastGroupId = (events, id) => {\n const eventGroup = [...events].reduce((acc, {\n payload\n }, _index, arr) => {\n var _a;\n if (acc[id]) {\n // Splice to break early (make the reducer think we are done)\n // This is needed to avoid events of other groups from being added to the array.\n // @ts-ignore\n if ((payload === null || payload === void 0 ? void 0 : payload.type) === 'divider' && ((_a = payload === null || payload === void 0 ? void 0 : payload.body) === null || _a === void 0 ? void 0 : _a.translationEnabled)) {\n arr.splice(0);\n return acc;\n }\n acc[id].push(payload.id);\n }\n if (payload.id === id) acc[id] = [];\n return acc;\n }, {});\n const [[groupId, eventIds]] = Object.entries(eventGroup);\n const lastGroupId = events\n // @ts-ignore\n .filter(event => {\n var _a;\n return ((_a = event.payload) === null || _a === void 0 ? void 0 : _a.type) === 'divider';\n }).map(event => event.payload.id).at(-1);\n return {\n lastGroupId,\n groupId,\n eventIds\n };\n};\nconst translationSlice = (0,_reduxjs_toolkit__WEBPACK_IMPORTED_MODULE_3__.createSlice)({\n name: 'translation',\n initialState: translationsInitialState,\n reducers: {\n enableTranslation: (state, {\n payload\n }) => {\n state.isActive = true;\n state.currentLocale = payload;\n },\n disableTranslation: state => {\n state.isActive = false;\n state.currentLocale = undefined;\n },\n enableEventsTranslation: (state, {\n payload: {\n events,\n id\n }\n }) => {\n delete state.translatedEventGroups[id];\n const {\n lastGroupId\n } = getLastGroupId(events, id);\n state.lastGroupId = lastGroupId;\n },\n disableEventsTranslation: (state, {\n payload: {\n events,\n id\n }\n }) => {\n const {\n lastGroupId,\n groupId,\n eventIds\n } = getLastGroupId(events, id);\n state.lastGroupId = lastGroupId;\n state.translatedEventGroups[groupId] = eventIds;\n },\n disableTranslationProposalPrompt: state => {\n state.translationProposal = null;\n },\n setTranslationProposalPrompt: (state, {\n payload\n }) => {\n state.translationProposal = payload;\n }\n },\n extraReducers: builder => {\n builder.addCase(domains_app_actions__WEBPACK_IMPORTED_MODULE_0__.resetApp.pending, () => translationsInitialState).addCase(domains_config_actions__WEBPACK_IMPORTED_MODULE_1__.initializeConfig.fulfilled, (state, {\n payload\n }) => {\n var _a;\n const feature = (_a = payload === null || payload === void 0 ? void 0 : payload.features) === null || _a === void 0 ? void 0 : _a.translation;\n if (!feature) return;\n state.isAvailable = feature.enabled === true;\n state.languages = feature.languages;\n }).addCase(domains_store_slice__WEBPACK_IMPORTED_MODULE_2__.setHistory, (state, {\n payload\n }) => {\n state.translationProposal = payload.translationProposal;\n }).addCase(domains_store_slice__WEBPACK_IMPORTED_MODULE_2__.addEvent, (state, {\n payload\n }) => {\n if (state.translatedEventGroups[state.lastGroupId]) {\n state.translatedEventGroups[state.lastGroupId].push(payload.payload.id);\n }\n });\n }\n});\nconst {\n enableTranslation,\n disableTranslation,\n enableEventsTranslation,\n disableEventsTranslation,\n setTranslationProposalPrompt,\n disableTranslationProposalPrompt\n} = translationSlice.actions;\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (translationSlice.reducer);\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/domains/translations/slice.ts?");
|
|
468
468
|
|
|
469
469
|
/***/ }),
|
|
470
470
|
|
|
@@ -574,7 +574,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
574
574
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
575
575
|
|
|
576
576
|
"use strict";
|
|
577
|
-
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 react_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-redux */ \"./node_modules/react-redux/es/index.js\");\n/* harmony import */ var api_errors_seamly_general_error__WEBPACK_IMPORTED_MODULE_2__ = __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_3__ = __webpack_require__(/*! api/errors/seamly-offline-error */ \"./src/javascripts/api/errors/seamly-offline-error.js\");\n/* harmony import */ var api_errors_seamly_session_expired_error__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! api/errors/seamly-session-expired-error */ \"./src/javascripts/api/errors/seamly-session-expired-error.js\");\n/* harmony import */ var ui_components_core_seamly_api_context__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ui/components/core/seamly-api-context */ \"./src/javascripts/ui/components/core/seamly-api-context.ts\");\n/* harmony import */ var ui_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ui/hooks/seamly-hooks */ \"./src/javascripts/ui/hooks/seamly-hooks.js\");\n/* harmony import */ var ui_utils_seamly_utils__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ui/utils/seamly-utils */ \"./src/javascripts/ui/utils/seamly-utils.ts\");\n/* harmony import */ var domains_app_slice__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! domains/app/slice */ \"./src/javascripts/domains/app/slice.ts\");\n/* harmony import */ var domains_interrupt_slice__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! domains/interrupt/slice */ \"./src/javascripts/domains/interrupt/slice.ts\");\n/* harmony import */ var domains_store_slice__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! domains/store/slice */ \"./src/javascripts/domains/store/slice.ts\");\n/* harmony import */ var domains_translations_slice__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! domains/translations/slice */ \"./src/javascripts/domains/translations/slice.ts\");\nvar __rest = undefined && undefined.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\n\n\n\n\n\n\n\n\n\n\n\n\nconst EMITTABLE_MESSAGE_TYPES = ['text', 'choice_prompt', 'image', 'video'];\nconst SeamlyEventSubscriber = () => {\n const api = (0,ui_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_6__.useSeamlyApiContext)();\n const syncChannelRef = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)();\n const messageChannelRef = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)();\n const dispatch = (0,react_redux__WEBPACK_IMPORTED_MODULE_1__.useDispatch)();\n const events = (0,ui_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_6__.useEvents)();\n const eventBus = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useContext)(ui_components_core_seamly_api_context__WEBPACK_IMPORTED_MODULE_5__.SeamlyEventBusContext);\n const prevEmittedEventId = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n const {\n initCountdown,\n endCountdown\n } = (0,ui_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_6__.useSeamlyIdleDetachCountdown)();\n const {\n emitEvent\n } = (0,ui_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_6__.useSeamlyCommands)();\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (api.connectionInfo && api.conversation.socket) {\n const {\n socket\n } = api.conversation;\n socket.onError(err => {\n const seamlyOfflineError = new api_errors_seamly_offline_error__WEBPACK_IMPORTED_MODULE_3__[\"default\"](err);\n dispatch((0,domains_interrupt_slice__WEBPACK_IMPORTED_MODULE_9__.setInterrupt)({\n name: seamlyOfflineError.name,\n message: seamlyOfflineError.message,\n langKey: seamlyOfflineError.langKey,\n originalEvent: seamlyOfflineError.originalEvent,\n originalError: seamlyOfflineError.originalError\n }));\n dispatch((0,domains_store_slice__WEBPACK_IMPORTED_MODULE_10__.clearEvents)());\n });\n socket.onOpen(() => {\n dispatch((0,domains_interrupt_slice__WEBPACK_IMPORTED_MODULE_9__.clearInterrupt)());\n });\n }\n }, [api, api.connectionInfo, api.conversation.socket, dispatch]);\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (api.connectionInfo && api.conversation.channel) {\n const {\n channel\n } = api.conversation;\n return () => {\n channel === null || channel === void 0 ? void 0 : channel.leave();\n };\n }\n return () => {};\n }, [api, api.connectionInfo, api.conversation]);\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n api.conversation.onConnection(({\n currentState\n }) => {\n if (currentState === 'join_channel_erred') {\n const seamlyGeneralError = new api_errors_seamly_general_error__WEBPACK_IMPORTED_MODULE_2__[\"default\"]();\n dispatch((0,domains_interrupt_slice__WEBPACK_IMPORTED_MODULE_9__.setInterrupt)({\n name: seamlyGeneralError.name,\n message: seamlyGeneralError.message,\n langKey: seamlyGeneralError.langKey,\n originalEvent: seamlyGeneralError.originalEvent,\n originalError: seamlyGeneralError.originalError,\n action: seamlyGeneralError.action\n }));\n }\n });\n }, [api.conversation, dispatch]);\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (api.connectionInfo) {\n api.conversation.onConnection(({\n connected\n }) => {\n if (!connected) return false;\n const {\n channel\n } = api.conversation;\n const updateParticipant = event => {\n const {\n payload\n } = event;\n if (!payload || !payload.participant) {\n return;\n }\n const {\n fromClient,\n participant\n } = payload;\n if (!fromClient && typeof participant !== 'string' && (participant === null || participant === void 0 ? void 0 : participant.name)) {\n dispatch((0,domains_store_slice__WEBPACK_IMPORTED_MODULE_10__.setHeaderSubTitle)(participant.name));\n }\n dispatch((0,domains_store_slice__WEBPACK_IMPORTED_MODULE_10__.setParticipant)({\n participant,\n fromClient\n }));\n if (typeof participant !== 'string' && participant.introduction) {\n dispatch((0,domains_store_slice__WEBPACK_IMPORTED_MODULE_10__.addEvent)(Object.assign(Object.assign({}, event), {\n payload: Object.assign(Object.assign({}, payload), {\n type: 'participant'\n })\n })));\n }\n };\n channel.onMessage = (type, payload) => {\n const event = {\n type,\n payload\n };\n switch (type) {\n case 'ui':\n if (payload.state && payload.state.hasOwnProperty('loading')) {\n dispatch((0,domains_store_slice__WEBPACK_IMPORTED_MODULE_10__.setIsLoading)(payload.state.loading));\n }\n switch (payload.type) {\n case 'idle_detach_countdown':\n initCountdown(payload.body.duration);\n break;\n case 'idle_detach_countdown_elapsed':\n endCountdown(undefined, true);\n break;\n case 'resume_conversation_prompt':\n dispatch((0,domains_store_slice__WEBPACK_IMPORTED_MODULE_10__.initResumeConversationPrompt)());\n break;\n case 'translation_proposal':\n dispatch((0,domains_translations_slice__WEBPACK_IMPORTED_MODULE_11__.setTranslationProposalPrompt)(payload.body));\n break;\n case 'user_first_response':\n dispatch((0,domains_app_slice__WEBPACK_IMPORTED_MODULE_8__.setHasResponded)(true));\n // @ts-ignore\n eventBus.emit('system.userFirstResponse', payload.body);\n break;\n }\n break;\n case 'message':\n updateParticipant(payload);\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((0,domains_store_slice__WEBPACK_IMPORTED_MODULE_10__.setActiveService)(payload.service.serviceSessionId));\n }\n dispatch((0,domains_store_slice__WEBPACK_IMPORTED_MODULE_10__.addEvent)(event));\n break;\n }\n break;\n case 'participant':\n updateParticipant(event);\n break;\n case 'service_data':\n if (payload.persist) {\n dispatch((0,domains_store_slice__WEBPACK_IMPORTED_MODULE_10__.setServiceDataItem)(payload));\n }\n break;\n case 'ack':\n dispatch((0,domains_store_slice__WEBPACK_IMPORTED_MODULE_10__.ackEvent)(event));\n break;\n case 'system':\n if (payload.type === 'service_changed') {\n const {\n serviceSettings\n } = payload,\n eventPayload = __rest(payload, [\"serviceSettings\"]);\n const {\n entry\n } = serviceSettings;\n const {\n upload\n } = entry.options;\n dispatch((0,domains_store_slice__WEBPACK_IMPORTED_MODULE_10__.setFeatureEnabledState)({\n key: ui_utils_seamly_utils__WEBPACK_IMPORTED_MODULE_7__.featureKeys.uploads,\n enabled: !!(upload && upload.enabled)\n }));\n dispatch((0,domains_store_slice__WEBPACK_IMPORTED_MODULE_10__.setServiceEntryMetadata)(entry));\n if (payload.serviceSessionId) {\n dispatch((0,domains_store_slice__WEBPACK_IMPORTED_MODULE_10__.setActiveService)(payload.serviceSessionId));\n }\n emitEvent('system.serviceChanged', eventPayload);\n }\n break;\n case 'info':\n if (payload.type === 'divider' || payload.type === 'text' || payload.type === 'translation') {\n dispatch((0,domains_store_slice__WEBPACK_IMPORTED_MODULE_10__.addEvent)(event));\n }\n break;\n case 'error':\n switch (payload.type) {\n case 'find_conversation_erred':\n const seamlySessionExpiredError = new api_errors_seamly_session_expired_error__WEBPACK_IMPORTED_MODULE_4__[\"default\"](event);\n dispatch((0,domains_interrupt_slice__WEBPACK_IMPORTED_MODULE_9__.setInterrupt)({\n name: seamlySessionExpiredError.name,\n action: seamlySessionExpiredError.action,\n message: seamlySessionExpiredError.message,\n originalEvent: seamlySessionExpiredError.originalEvent,\n originalError: seamlySessionExpiredError.originalError\n }));\n break;\n case 'conversation_erred':\n const seamlyGeneralError = new api_errors_seamly_general_error__WEBPACK_IMPORTED_MODULE_2__[\"default\"](event);\n dispatch((0,domains_interrupt_slice__WEBPACK_IMPORTED_MODULE_9__.setInterrupt)({\n name: seamlyGeneralError.name,\n message: seamlyGeneralError.message,\n langKey: seamlyGeneralError.langKey,\n originalEvent: seamlyGeneralError.originalEvent,\n originalError: seamlyGeneralError.originalError,\n action: seamlyGeneralError.action\n }));\n break;\n }\n }\n return payload;\n };\n return true;\n });\n }\n }, [api, api.connectionInfo, api.conversation.channel, dispatch, emitEvent, endCountdown, eventBus, initCountdown]);\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (api.connectionInfo) {\n api.conversation.onConnection(({\n connected\n }) => {\n if (!connected) return false;\n const {\n channel\n } = api.conversation;\n messageChannelRef.current = channel.on('message', payload => {\n if (!EMITTABLE_MESSAGE_TYPES.includes(payload.type)) {\n return 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 // @ts-ignore\n eventBus.emit('message', payload);\n }\n prevEmittedEventId.current = payload.id;\n return payload;\n });\n return true;\n });\n return () => {\n var _a;\n (_a = api.conversation.channel) === null || _a === void 0 ? void 0 : _a.off('message', messageChannelRef.current);\n };\n }\n return () => undefined;\n }, [api, api.connectionInfo, api.conversation.channel, eventBus]);\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (api.connectionInfo) {\n api.conversation.onConnection(({\n connected\n }) => {\n if (!connected) return false;\n syncChannelRef.current = api.conversation.channel.on('sync', payload => {\n var _a;\n const lastEvent = events[events.length - 1];\n const payloadLastEventId = (_a = payload === null || payload === void 0 ? void 0 : payload.lastEvent) === null || _a === void 0 ? void 0 : _a.id;\n if (lastEvent && payloadLastEventId === lastEvent.payload.id) {\n return payload;\n }\n return api.getConversation().then(history => {\n if (!history) return;\n dispatch((0,domains_store_slice__WEBPACK_IMPORTED_MODULE_10__.setHistory)(history));\n }).catch(error => {\n dispatch((0,domains_interrupt_slice__WEBPACK_IMPORTED_MODULE_9__.setInterrupt)({\n name: error === null || error === void 0 ? void 0 : error.name,\n message: error === null || error === void 0 ? void 0 : error.message,\n langKey: error === null || error === void 0 ? void 0 : error.langKey,\n action: error === null || error === void 0 ? void 0 : error.action,\n originalEvent: error === null || error === void 0 ? void 0 : error.originalEvent,\n originalError: error === null || error === void 0 ? void 0 : error.originalError\n }));\n });\n });\n return true;\n });\n return () => {\n var _a;\n (_a = api.conversation.channel) === null || _a === void 0 ? void 0 : _a.off('sync', syncChannelRef.current);\n };\n }\n return () => undefined;\n }, [api, api.connectionInfo, api.conversation.channel, events, dispatch]);\n return null;\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.ts?");
|
|
577
|
+
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 react_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-redux */ \"./node_modules/react-redux/es/index.js\");\n/* harmony import */ var api_errors_seamly_general_error__WEBPACK_IMPORTED_MODULE_2__ = __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_3__ = __webpack_require__(/*! api/errors/seamly-offline-error */ \"./src/javascripts/api/errors/seamly-offline-error.js\");\n/* harmony import */ var api_errors_seamly_session_expired_error__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! api/errors/seamly-session-expired-error */ \"./src/javascripts/api/errors/seamly-session-expired-error.js\");\n/* harmony import */ var ui_components_core_seamly_api_context__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ui/components/core/seamly-api-context */ \"./src/javascripts/ui/components/core/seamly-api-context.ts\");\n/* harmony import */ var ui_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ui/hooks/seamly-hooks */ \"./src/javascripts/ui/hooks/seamly-hooks.js\");\n/* harmony import */ var ui_utils_seamly_utils__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ui/utils/seamly-utils */ \"./src/javascripts/ui/utils/seamly-utils.ts\");\n/* harmony import */ var domains_app_slice__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! domains/app/slice */ \"./src/javascripts/domains/app/slice.ts\");\n/* harmony import */ var domains_interrupt_slice__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! domains/interrupt/slice */ \"./src/javascripts/domains/interrupt/slice.ts\");\n/* harmony import */ var domains_store_slice__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! domains/store/slice */ \"./src/javascripts/domains/store/slice.ts\");\n/* harmony import */ var domains_translations_slice__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! domains/translations/slice */ \"./src/javascripts/domains/translations/slice.ts\");\nvar __rest = undefined && undefined.__rest || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\n\n\n\n\n\n\n\n\n\n\n\n\nconst EMITTABLE_MESSAGE_TYPES = ['text', 'choice_prompt', 'image', 'video'];\nconst SeamlyEventSubscriber = () => {\n const api = (0,ui_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_6__.useSeamlyApiContext)();\n const syncChannelRef = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)();\n const messageChannelRef = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)();\n const dispatch = (0,react_redux__WEBPACK_IMPORTED_MODULE_1__.useDispatch)();\n const events = (0,ui_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_6__.useEvents)();\n const eventBus = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useContext)(ui_components_core_seamly_api_context__WEBPACK_IMPORTED_MODULE_5__.SeamlyEventBusContext);\n const prevEmittedEventId = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n const {\n initCountdown,\n endCountdown\n } = (0,ui_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_6__.useSeamlyIdleDetachCountdown)();\n const {\n emitEvent\n } = (0,ui_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_6__.useSeamlyCommands)();\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (api.connectionInfo && api.conversation.socket) {\n const {\n socket\n } = api.conversation;\n socket.onError(err => {\n const seamlyOfflineError = new api_errors_seamly_offline_error__WEBPACK_IMPORTED_MODULE_3__[\"default\"](err);\n dispatch((0,domains_interrupt_slice__WEBPACK_IMPORTED_MODULE_9__.setInterrupt)({\n name: seamlyOfflineError.name,\n message: seamlyOfflineError.message,\n langKey: seamlyOfflineError.langKey,\n originalEvent: seamlyOfflineError.originalEvent,\n originalError: seamlyOfflineError.originalError\n }));\n dispatch((0,domains_store_slice__WEBPACK_IMPORTED_MODULE_10__.clearEvents)());\n });\n socket.onOpen(() => {\n dispatch((0,domains_interrupt_slice__WEBPACK_IMPORTED_MODULE_9__.clearInterrupt)());\n });\n }\n }, [api, api.connectionInfo, api.conversation.socket, dispatch]);\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (api.connectionInfo && api.conversation.channel) {\n const {\n channel\n } = api.conversation;\n return () => {\n channel === null || channel === void 0 ? void 0 : channel.leave();\n };\n }\n return () => undefined;\n }, [api, api.connectionInfo, api.conversation]);\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n api.conversation.onConnection(({\n currentState\n }) => {\n if (currentState === 'join_channel_erred') {\n const seamlyGeneralError = new api_errors_seamly_general_error__WEBPACK_IMPORTED_MODULE_2__[\"default\"]();\n dispatch((0,domains_interrupt_slice__WEBPACK_IMPORTED_MODULE_9__.setInterrupt)({\n name: seamlyGeneralError.name,\n message: seamlyGeneralError.message,\n langKey: seamlyGeneralError.langKey,\n originalEvent: seamlyGeneralError.originalEvent,\n originalError: seamlyGeneralError.originalError,\n action: seamlyGeneralError.action\n }));\n }\n });\n }, [api.conversation, dispatch]);\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (api.connectionInfo) {\n api.conversation.onConnection(({\n connected\n }) => {\n if (!connected) return false;\n const {\n channel\n } = api.conversation;\n const updateParticipant = event => {\n const {\n payload\n } = event;\n if (!payload || !payload.participant) {\n return;\n }\n const {\n fromClient,\n participant\n } = payload;\n if (!fromClient && typeof participant !== 'string' && (participant === null || participant === void 0 ? void 0 : participant.name)) {\n dispatch((0,domains_store_slice__WEBPACK_IMPORTED_MODULE_10__.setHeaderSubTitle)(participant.name));\n }\n dispatch((0,domains_store_slice__WEBPACK_IMPORTED_MODULE_10__.setParticipant)({\n participant,\n fromClient\n }));\n if (typeof participant !== 'string' && participant.introduction) {\n dispatch((0,domains_store_slice__WEBPACK_IMPORTED_MODULE_10__.addEvent)(Object.assign(Object.assign({}, event), {\n payload: Object.assign(Object.assign({}, payload), {\n type: 'participant'\n })\n })));\n }\n };\n channel.onMessage = (type, payload) => {\n const event = {\n type,\n payload\n };\n switch (type) {\n case 'ui':\n if (payload.state && payload.state.hasOwnProperty('loading')) {\n dispatch((0,domains_store_slice__WEBPACK_IMPORTED_MODULE_10__.setIsLoading)(payload.state.loading));\n }\n switch (payload.type) {\n case 'idle_detach_countdown':\n initCountdown(payload.body.duration);\n break;\n case 'idle_detach_countdown_elapsed':\n endCountdown(undefined, true);\n break;\n case 'resume_conversation_prompt':\n dispatch((0,domains_store_slice__WEBPACK_IMPORTED_MODULE_10__.initResumeConversationPrompt)());\n break;\n case 'translation_proposal':\n dispatch((0,domains_translations_slice__WEBPACK_IMPORTED_MODULE_11__.setTranslationProposalPrompt)(payload.body));\n break;\n case 'user_first_response':\n dispatch((0,domains_app_slice__WEBPACK_IMPORTED_MODULE_8__.setHasResponded)(true));\n // @ts-ignore\n eventBus.emit('system.userFirstResponse', payload.body);\n break;\n }\n break;\n case 'message':\n updateParticipant(payload);\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((0,domains_store_slice__WEBPACK_IMPORTED_MODULE_10__.setActiveService)(payload.service.serviceSessionId));\n }\n dispatch((0,domains_store_slice__WEBPACK_IMPORTED_MODULE_10__.addEvent)(event));\n break;\n }\n break;\n case 'participant':\n updateParticipant(event);\n break;\n case 'service_data':\n if (payload.persist) {\n dispatch((0,domains_store_slice__WEBPACK_IMPORTED_MODULE_10__.setServiceDataItem)(payload));\n }\n break;\n case 'ack':\n dispatch((0,domains_store_slice__WEBPACK_IMPORTED_MODULE_10__.ackEvent)(event));\n break;\n case 'system':\n if (payload.type === 'service_changed') {\n const {\n serviceSettings\n } = payload,\n eventPayload = __rest(payload, [\"serviceSettings\"]);\n const {\n entry\n } = serviceSettings;\n const {\n upload\n } = entry.options;\n dispatch((0,domains_store_slice__WEBPACK_IMPORTED_MODULE_10__.setFeatureEnabledState)({\n key: ui_utils_seamly_utils__WEBPACK_IMPORTED_MODULE_7__.featureKeys.uploads,\n enabled: !!(upload && upload.enabled)\n }));\n dispatch((0,domains_store_slice__WEBPACK_IMPORTED_MODULE_10__.setServiceEntryMetadata)(entry));\n if (payload.serviceSessionId) {\n dispatch((0,domains_store_slice__WEBPACK_IMPORTED_MODULE_10__.setActiveService)(payload.serviceSessionId));\n }\n emitEvent('system.serviceChanged', eventPayload);\n }\n break;\n case 'info':\n if (payload.type === 'divider' || payload.type === 'text' || payload.type === 'translation') {\n dispatch((0,domains_store_slice__WEBPACK_IMPORTED_MODULE_10__.addEvent)(event));\n }\n break;\n case 'error':\n switch (payload.type) {\n case 'find_conversation_erred':\n const seamlySessionExpiredError = new api_errors_seamly_session_expired_error__WEBPACK_IMPORTED_MODULE_4__[\"default\"](event);\n dispatch((0,domains_interrupt_slice__WEBPACK_IMPORTED_MODULE_9__.setInterrupt)({\n name: seamlySessionExpiredError.name,\n action: seamlySessionExpiredError.action,\n message: seamlySessionExpiredError.message,\n originalEvent: seamlySessionExpiredError.originalEvent,\n originalError: seamlySessionExpiredError.originalError\n }));\n break;\n case 'conversation_erred':\n const seamlyGeneralError = new api_errors_seamly_general_error__WEBPACK_IMPORTED_MODULE_2__[\"default\"](event);\n dispatch((0,domains_interrupt_slice__WEBPACK_IMPORTED_MODULE_9__.setInterrupt)({\n name: seamlyGeneralError.name,\n message: seamlyGeneralError.message,\n langKey: seamlyGeneralError.langKey,\n originalEvent: seamlyGeneralError.originalEvent,\n originalError: seamlyGeneralError.originalError,\n action: seamlyGeneralError.action\n }));\n break;\n }\n }\n return payload;\n };\n return true;\n });\n }\n }, [api, api.connectionInfo, api.conversation.channel, dispatch, emitEvent, endCountdown, eventBus, initCountdown]);\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (api.connectionInfo) {\n api.conversation.onConnection(({\n connected\n }) => {\n if (!connected) return false;\n const {\n channel\n } = api.conversation;\n if (messageChannelRef.current) {\n channel === null || channel === void 0 ? void 0 : channel.off('message', messageChannelRef.current);\n }\n messageChannelRef.current = channel.on('message', payload => {\n if (!EMITTABLE_MESSAGE_TYPES.includes(payload.type)) {\n return 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 // @ts-ignore\n eventBus.emit('message', payload);\n }\n prevEmittedEventId.current = payload.id;\n return payload;\n });\n return true;\n });\n }\n }, [api, api.connectionInfo, api.conversation.channel, eventBus]);\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (api.connectionInfo) {\n api.conversation.onConnection(({\n connected\n }) => {\n var _a;\n if (!connected) return false;\n if (syncChannelRef.current) {\n (_a = api.conversation.channel) === null || _a === void 0 ? void 0 : _a.off('sync', syncChannelRef.current);\n }\n syncChannelRef.current = api.conversation.channel.on('sync', payload => {\n var _a;\n const lastEvent = events[events.length - 1];\n const payloadLastEventId = (_a = payload === null || payload === void 0 ? void 0 : payload.lastEvent) === null || _a === void 0 ? void 0 : _a.id;\n if (lastEvent && payloadLastEventId === lastEvent.payload.id) {\n return payload;\n }\n return api.getConversation().then(history => {\n if (!history) return;\n dispatch((0,domains_store_slice__WEBPACK_IMPORTED_MODULE_10__.setHistory)(history));\n }).catch(error => {\n dispatch((0,domains_interrupt_slice__WEBPACK_IMPORTED_MODULE_9__.setInterrupt)({\n name: error === null || error === void 0 ? void 0 : error.name,\n message: error === null || error === void 0 ? void 0 : error.message,\n langKey: error === null || error === void 0 ? void 0 : error.langKey,\n action: error === null || error === void 0 ? void 0 : error.action,\n originalEvent: error === null || error === void 0 ? void 0 : error.originalEvent,\n originalError: error === null || error === void 0 ? void 0 : error.originalError\n }));\n });\n });\n return true;\n });\n }\n }, [api, api.connectionInfo, api.conversation.channel, events, dispatch]);\n return null;\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.ts?");
|
|
578
578
|
|
|
579
579
|
/***/ }),
|
|
580
580
|
|
|
@@ -611,6 +611,28 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
611
611
|
|
|
612
612
|
/***/ }),
|
|
613
613
|
|
|
614
|
+
/***/ "./src/javascripts/ui/hooks/use-seamly-chat.ts":
|
|
615
|
+
/*!*****************************************************!*\
|
|
616
|
+
!*** ./src/javascripts/ui/hooks/use-seamly-chat.ts ***!
|
|
617
|
+
\*****************************************************/
|
|
618
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
619
|
+
|
|
620
|
+
"use strict";
|
|
621
|
+
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 react_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-redux */ \"./node_modules/react-redux/es/index.js\");\n/* harmony import */ var ui_hooks_use_seamly_commands__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ui/hooks/use-seamly-commands */ \"./src/javascripts/ui/hooks/use-seamly-commands.js\");\n/* harmony import */ var domains_i18n_hooks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! domains/i18n/hooks */ \"./src/javascripts/domains/i18n/hooks.ts\");\n/* harmony import */ var domains_store_slice__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! domains/store/slice */ \"./src/javascripts/domains/store/slice.ts\");\n/* harmony import */ var domains_visibility_hooks__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! domains/visibility/hooks */ \"./src/javascripts/domains/visibility/hooks.ts\");\n/* harmony import */ var _domains_visibility_selectors__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../domains/visibility/selectors */ \"./src/javascripts/domains/visibility/selectors.ts\");\n/* harmony import */ var _live_region_hooks__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./live-region-hooks */ \"./src/javascripts/ui/hooks/live-region-hooks.js\");\n/* harmony import */ var _seamly_api_hooks__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./seamly-api-hooks */ \"./src/javascripts/ui/hooks/seamly-api-hooks.js\");\n/* harmony import */ var _seamly_state_hooks__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./seamly-state-hooks */ \"./src/javascripts/ui/hooks/seamly-state-hooks.ts\");\n/* harmony import */ var _use_session_expired_command__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./use-session-expired-command */ \"./src/javascripts/ui/hooks/use-session-expired-command.ts\");\nvar __awaiter = undefined && undefined.__awaiter || function (thisArg, _arguments, P, generator) {\n function adopt(value) {\n return value instanceof P ? value : new P(function (resolve) {\n resolve(value);\n });\n }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n }\n function rejected(value) {\n try {\n step(generator[\"throw\"](value));\n } catch (e) {\n reject(e);\n }\n }\n function step(result) {\n result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\n\n\n\n\n\n\n\n\n\n\n\nconst useSeamlyChat = () => {\n const events = (0,_seamly_state_hooks__WEBPACK_IMPORTED_MODULE_9__.useEvents)();\n const {\n t\n } = (0,domains_i18n_hooks__WEBPACK_IMPORTED_MODULE_3__.useI18n)();\n const {\n isInline,\n isWindow,\n isApp\n } = (0,_seamly_state_hooks__WEBPACK_IMPORTED_MODULE_9__.useSeamlyLayoutMode)();\n const {\n isOpen,\n isVisible\n } = (0,domains_visibility_hooks__WEBPACK_IMPORTED_MODULE_5__.useVisibility)();\n const showInlineView = (0,react_redux__WEBPACK_IMPORTED_MODULE_1__.useSelector)(_domains_visibility_selectors__WEBPACK_IMPORTED_MODULE_6__.selectShowInlineView);\n const dispatch = (0,react_redux__WEBPACK_IMPORTED_MODULE_1__.useDispatch)();\n const spinnerTimeout = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n const {\n start,\n connect,\n apiConfigReady,\n apiConnected\n } = (0,ui_hooks_use_seamly_commands__WEBPACK_IMPORTED_MODULE_2__[\"default\"])();\n const hasConversation = (0,_seamly_api_hooks__WEBPACK_IMPORTED_MODULE_8__.useSeamlyHasConversation)();\n const connectCalled = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)(false);\n const {\n sendAssertive\n } = (0,_live_region_hooks__WEBPACK_IMPORTED_MODULE_7__.useLiveRegion)();\n // Automatically reset conversation if the session has expired\n (0,_use_session_expired_command__WEBPACK_IMPORTED_MODULE_10__[\"default\"])();\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) {\n return;\n }\n if (isOpen) {\n sendAssertive(t('window.srTexts.onOpen'));\n } else {\n sendAssertive(t('window.srTexts.onClose'));\n }\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((0,domains_store_slice__WEBPACK_IMPORTED_MODULE_4__.setIsLoading)(true));\n }, 500);\n return () => {\n clearTimeout(spinnerTimeout.current);\n };\n }, [dispatch]);\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (events.length) {\n spinnerTimeout.current = setTimeout(() => {\n dispatch((0,domains_store_slice__WEBPACK_IMPORTED_MODULE_4__.setIsLoading)(false));\n }, 5000);\n }\n return () => {\n clearTimeout(spinnerTimeout.current);\n };\n }, [events, dispatch]);\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n // This is needed to reset the ref to allow connect and start to happen again.\n // Mostly due to Interrupt situations and a reset being called.\n if (!apiConfigReady || !apiConnected) {\n connectCalled.current = false;\n }\n }, [apiConfigReady, apiConnected]);\n const connectAndStart = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => __awaiter(void 0, void 0, void 0, function* () {\n // We don't connect if we are already connected to the api to avoid multiple in-flight connection processes.\n if (!apiConnected) {\n connectCalled.current = true;\n yield connect();\n }\n // We only start a conversation when the chat interface is either app, 'open' or if using the inline view if it's 'open' or 'minimized'.\n if (isApp || isOpen || isVisible && isInline) {\n start();\n }\n }), [apiConnected, connect, isApp, isInline, isOpen, isVisible, start]);\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n // We dont't connect or start when the apiConfig is not ready yet.\n // We also keep track of whether start has been called to avoid multiple in-flight connection processes.\n // We check if the window view is not open and no conversation is started yet.\n // Lastly we check if the inline view is not scrolled in to view.\n if (!apiConfigReady || connectCalled.current || isWindow && !isOpen || isInline && (!isVisible || !showInlineView)) {\n return;\n }\n if (hasConversation() && isOpen) {\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((0,domains_store_slice__WEBPACK_IMPORTED_MODULE_4__.setIsLoading)(false));\n }\n connectAndStart();\n }, [apiConfigReady, connectAndStart, dispatch, hasConversation, isInline, isOpen, isWindow, isVisible, showInlineView]);\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (useSeamlyChat);\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/hooks/use-seamly-chat.ts?");
|
|
622
|
+
|
|
623
|
+
/***/ }),
|
|
624
|
+
|
|
625
|
+
/***/ "./src/javascripts/ui/hooks/use-session-expired-command.ts":
|
|
626
|
+
/*!*****************************************************************!*\
|
|
627
|
+
!*** ./src/javascripts/ui/hooks/use-session-expired-command.ts ***!
|
|
628
|
+
\*****************************************************************/
|
|
629
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
630
|
+
|
|
631
|
+
"use strict";
|
|
632
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ useSessionExpiredCommand)\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_interrupt_hooks__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! domains/interrupt/hooks */ \"./src/javascripts/domains/interrupt/hooks.ts\");\n/* harmony import */ var _use_seamly_commands__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./use-seamly-commands */ \"./src/javascripts/ui/hooks/use-seamly-commands.js\");\n\n\n\nfunction useSessionExpiredCommand() {\n const {\n meta: {\n originalError,\n action\n }\n } = (0,domains_interrupt_hooks__WEBPACK_IMPORTED_MODULE_1__.useInterrupt)();\n const seamlyCommands = (0,_use_seamly_commands__WEBPACK_IMPORTED_MODULE_2__[\"default\"])();\n const isExpiredError = (originalError === null || originalError === void 0 ? void 0 : originalError.name) === 'SeamlySessionExpiredError';\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (isExpiredError && seamlyCommands[action]) {\n seamlyCommands[action]();\n }\n }, [action, seamlyCommands, isExpiredError]);\n}\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/hooks/use-session-expired-command.ts?");
|
|
633
|
+
|
|
634
|
+
/***/ }),
|
|
635
|
+
|
|
614
636
|
/***/ "./src/javascripts/ui/utils/seamly-utils.ts":
|
|
615
637
|
/*!**************************************************!*\
|
|
616
638
|
!*** ./src/javascripts/ui/utils/seamly-utils.ts ***!
|
|
@@ -837,7 +859,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
837
859
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
838
860
|
|
|
839
861
|
"use strict";
|
|
840
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ AppOptions)\n/* harmony export */ });\n/* harmony import */ var
|
|
862
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ AppOptions)\n/* harmony export */ });\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"./node_modules/react-redux/es/index.js\");\n/* harmony import */ var ui_components_layout_icon__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ui/components/layout/icon */ \"./src/javascripts/ui/components/layout/icon.js\");\n/* harmony import */ var ui_components_options_options_button__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ui/components/options/options-button */ \"./src/javascripts/ui/components/options/options-button.js\");\n/* harmony import */ var ui_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ui/hooks/seamly-hooks */ \"./src/javascripts/ui/hooks/seamly-hooks.js\");\n/* harmony import */ var domains_i18n_hooks__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! domains/i18n/hooks */ \"./src/javascripts/domains/i18n/hooks.ts\");\n/* harmony import */ var domains_interrupt_selectors__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! domains/interrupt/selectors */ \"./src/javascripts/domains/interrupt/selectors.ts\");\n/* harmony import */ var domains_translations_components_options_button__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! domains/translations/components/options-button */ \"./src/javascripts/domains/translations/components/options-button.tsx\");\n/* harmony import */ var domains_translations_hooks__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! domains/translations/hooks */ \"./src/javascripts/domains/translations/hooks.ts\");\n/* harmony import */ var lib_css__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! lib/css */ \"./src/javascripts/lib/css.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 AppOptions() {\n const {\n menuOptions,\n allowOptionSelection\n } = (0,ui_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_3__.useSeamlyOptions)();\n const {\n isAvailable: isTranslationsAvailable\n } = (0,domains_translations_hooks__WEBPACK_IMPORTED_MODULE_7__.useTranslations)();\n const hasError = (0,react_redux__WEBPACK_IMPORTED_MODULE_0__.useSelector)(domains_interrupt_selectors__WEBPACK_IMPORTED_MODULE_5__.selectHasError);\n const {\n t,\n locale\n } = (0,domains_i18n_hooks__WEBPACK_IMPORTED_MODULE_4__.useI18n)();\n const localeNativeName = (0,domains_translations_hooks__WEBPACK_IMPORTED_MODULE_7__.useLocaleNativeName)(locale);\n if (!isTranslationsAvailable && (!allowOptionSelection || !menuOptions.length) || hasError) {\n return null;\n }\n const openButtonText = t('translations.settings.openButtonText', {\n hasLanguage: !!localeNativeName,\n language: localeNativeName\n });\n return (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxs)(\"div\", {\n className: (0,lib_css__WEBPACK_IMPORTED_MODULE_8__.className)('chat__options'),\n children: [isTranslationsAvailable && (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsx)(\"div\", {\n className: (0,lib_css__WEBPACK_IMPORTED_MODULE_8__.className)('chat__options-item', 'chat__options-item--left'),\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxs)(domains_translations_components_options_button__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n classNames: ['button--secondary'],\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsx)(ui_components_layout_icon__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n alt: openButtonText,\n name: \"newTranslation\",\n size: \"16\"\n }), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsx)(\"span\", {\n className: (0,lib_css__WEBPACK_IMPORTED_MODULE_8__.className)('button__text'),\n children: openButtonText\n })]\n })\n }), allowOptionSelection && (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsx)(\"div\", {\n className: (0,lib_css__WEBPACK_IMPORTED_MODULE_8__.className)('chat__options-item', 'chat__options-item--right'),\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsx)(ui_components_options_options_button__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {})\n })]\n });\n}\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/app-options/index.js?");
|
|
841
863
|
|
|
842
864
|
/***/ }),
|
|
843
865
|
|
|
@@ -1244,7 +1266,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
1244
1266
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
1245
1267
|
|
|
1246
1268
|
"use strict";
|
|
1247
|
-
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 react_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-redux */ \"./node_modules/react-redux/es/index.js\");\n/* harmony import */ var config__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! config */ \"./src/javascripts/config.ts\");\n/* harmony import */ var ui_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ui/hooks/seamly-hooks */ \"./src/javascripts/ui/hooks/seamly-hooks.js\");\n/* harmony import */ var ui_utils_seamly_utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ui/utils/seamly-utils */ \"./src/javascripts/ui/utils/seamly-utils.ts\");\n/* harmony import */ var domains_config_hooks__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! domains/config/hooks */ \"./src/javascripts/domains/config/hooks.ts\");\n/* harmony import */ var domains_config_slice__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! domains/config/slice */ \"./src/javascripts/domains/config/slice.ts\");\n/* harmony import */ var
|
|
1269
|
+
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 react_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-redux */ \"./node_modules/react-redux/es/index.js\");\n/* harmony import */ var config__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! config */ \"./src/javascripts/config.ts\");\n/* harmony import */ var ui_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ui/hooks/seamly-hooks */ \"./src/javascripts/ui/hooks/seamly-hooks.js\");\n/* harmony import */ var ui_utils_seamly_utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ui/utils/seamly-utils */ \"./src/javascripts/ui/utils/seamly-utils.ts\");\n/* harmony import */ var domains_config_hooks__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! domains/config/hooks */ \"./src/javascripts/domains/config/hooks.ts\");\n/* harmony import */ var domains_config_slice__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! domains/config/slice */ \"./src/javascripts/domains/config/slice.ts\");\n/* harmony import */ var domains_interrupt_selectors__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! domains/interrupt/selectors */ \"./src/javascripts/domains/interrupt/selectors.ts\");\n/* harmony import */ var domains_translations_hooks__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! domains/translations/hooks */ \"./src/javascripts/domains/translations/hooks.ts\");\n/* harmony import */ var domains_visibility_constants__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! domains/visibility/constants */ \"./src/javascripts/domains/visibility/constants.ts\");\n/* harmony import */ var domains_visibility_hooks__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! domains/visibility/hooks */ \"./src/javascripts/domains/visibility/hooks.ts\");\n/* harmony import */ var _seamly_api_context__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./seamly-api-context */ \"./src/javascripts/ui/components/core/seamly-api-context.ts\");\n\n\n\n\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_11__.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 const callback = (...args) => callbackRef.current?.(...args);\n eventBus.emit('function.register', functionName, callback);\n return () => eventBus.emit('function.unregister', functionName, callback);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [eventBus, functionName, ...deps]);\n}\nconst SeamlyInstanceFunctionsLoader = () => {\n const config = (0,domains_config_hooks__WEBPACK_IMPORTED_MODULE_5__.useConfig)();\n const {\n sendMessage,\n sendContext,\n sendAction\n } = (0,ui_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_3__.useSeamlyCommands)();\n const dispatch = (0,react_redux__WEBPACK_IMPORTED_MODULE_1__.useDispatch)();\n const {\n setVisibility,\n visible\n } = (0,domains_visibility_hooks__WEBPACK_IMPORTED_MODULE_10__.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_11__.SeamlyEventBusContext);\n const api = (0,ui_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_3__.useSeamlyApiContext)();\n const unreadCount = (0,ui_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_3__.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,ui_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_3__.useSeamlyLayoutMode)();\n const hasError = (0,react_redux__WEBPACK_IMPORTED_MODULE_1__.useSelector)(domains_interrupt_selectors__WEBPACK_IMPORTED_MODULE_7__.selectHasError);\n const currentConversationUrl = (0,ui_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_3__.useSeamlyConversationUrl)();\n const prevConversationUrl = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n const onActivityHandler = (0,ui_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_3__.useSeamlyActivityEventHandler)();\n const {\n enableTranslations,\n disableTranslations\n } = (0,domains_translations_hooks__WEBPACK_IMPORTED_MODULE_8__.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?.send]);\n useSeamlyInstanceFunction('setVariables', variables => {\n sendContext({\n variables\n });\n }, [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_constants__WEBPACK_IMPORTED_MODULE_9__.visibilityStates).includes(visibilityState)) {\n console.error('Requested visibility states should be \"open\", \"minimized\" ,\"hidden\" or null.');\n return;\n }\n onActivityHandler();\n setVisibility(visibilityState);\n }, [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 userTriggered\n }) => {\n if (userTriggered) {\n dispatch((0,domains_config_slice__WEBPACK_IMPORTED_MODULE_6__.updateConfig)({\n showSuggestions: false\n }));\n }\n if (name && fallbackMessage) {\n const participant = userTriggered ? config__WEBPACK_IMPORTED_MODULE_2__.userParticipantId : undefined;\n sendAction({\n type: ui_utils_seamly_utils__WEBPACK_IMPORTED_MODULE_4__.actionTypes.setTopic,\n body: {\n name,\n fallbackMessage,\n participant\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, ui_utils_seamly_utils__WEBPACK_IMPORTED_MODULE_4__.sourceTypes.windowApi);\n } else {\n disableTranslations();\n }\n }, [api.send]);\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (!isResolving && !hasError) {\n // Check for app reset\n if (prevConversationUrl.current && prevConversationUrl.current !== currentConversationUrl) {\n eventBus.emit('unreadMessageCount', unreadCount);\n }\n\n // Broadcast once on window open\n if (visible === domains_visibility_constants__WEBPACK_IMPORTED_MODULE_9__.visibilityStates.open && visible !== previousVisibilityState.current) {\n if (previousUnreadCount.current !== 0) {\n eventBus.emit('unreadMessageCount', 0);\n }\n }\n if (visible !== domains_visibility_constants__WEBPACK_IMPORTED_MODULE_9__.visibilityStates.open && unreadCount !== previousUnreadCount.current) {\n eventBus.emit('unreadMessageCount', unreadCount);\n }\n previousVisibilityState.current = visible;\n previousUnreadCount.current = unreadCount;\n prevConversationUrl.current = currentConversationUrl;\n }\n }, [unreadCount, visible, eventBus, isInline, isResolving, hasError, currentConversationUrl]);\n return null;\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?");
|
|
1248
1270
|
|
|
1249
1271
|
/***/ }),
|
|
1250
1272
|
|
|
@@ -1299,7 +1321,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
1299
1321
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
1300
1322
|
|
|
1301
1323
|
"use strict";
|
|
1302
|
-
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
|
|
1324
|
+
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 react_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-redux */ \"./node_modules/react-redux/es/index.js\");\n/* harmony import */ var ui_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ui/hooks/seamly-hooks */ \"./src/javascripts/ui/hooks/seamly-hooks.js\");\n/* harmony import */ var domains_i18n_hooks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! domains/i18n/hooks */ \"./src/javascripts/domains/i18n/hooks.ts\");\n/* harmony import */ var domains_interrupt_selectors__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! domains/interrupt/selectors */ \"./src/javascripts/domains/interrupt/selectors.ts\");\n/* harmony import */ var domains_visibility_hooks__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! domains/visibility/hooks */ \"./src/javascripts/domains/visibility/hooks.ts\");\n/* harmony import */ var lib_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! lib/css */ \"./src/javascripts/lib/css.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// Deprecated Toggle Button, should be removed once it is removed from clients\n\n\nconst DeprecatedToggleButton = ({\n onOpenChat\n}) => {\n const {\n t\n } = (0,domains_i18n_hooks__WEBPACK_IMPORTED_MODULE_3__.useI18n)();\n const titleId = (0,ui_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_2__.useGeneratedId)();\n const {\n isOpen\n } = (0,domains_visibility_hooks__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,ui_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_2__.useSkiplinkTargetFocusing)();\n const focusIfContained = (0,ui_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_2__.useFocusIfSeamlyContainedFocus)();\n const currentAgent = (0,ui_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_2__.useSeamlyCurrentAgent)();\n const agentSubtitle = (0,ui_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_2__.useSeamlyHeaderData)().subTitle;\n const hasError = (0,react_redux__WEBPACK_IMPORTED_MODULE_1__.useSelector)(domains_interrupt_selectors__WEBPACK_IMPORTED_MODULE_4__.selectHasError);\n const {\n headerCollapseButtonId\n } = (0,ui_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_2__.useSeamlyStateContext)();\n const showAgentInfo = currentAgent && !hasError;\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 prevIsOpen.current = isOpen;\n }, [isOpen, focusIfContained]);\n const handleMouseUp = () => {\n lastEventRef.current = 'mouse';\n };\n const handleKeyUp = () => {\n lastEventRef.current = 'key';\n };\n const handleClick = () => {\n onOpenChat();\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 return (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxs)(\"div\", {\n className: (0,lib_css__WEBPACK_IMPORTED_MODULE_6__.className)('toggle-button'),\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxs)(\"div\", {\n id: titleId,\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(\"p\", {\n className: (0,lib_css__WEBPACK_IMPORTED_MODULE_6__.className)('toggle-button__title'),\n children: showAgentInfo ? t('toggleButton.resumeTitle') : t('toggleButton.title')\n }), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(\"p\", {\n className: (0,lib_css__WEBPACK_IMPORTED_MODULE_6__.className)('toggle-button__subtitle'),\n children: showAgentInfo ? agentSubtitle : t('toggleButton.subtitle')\n })]\n }), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(\"button\", {\n type: \"button\",\n \"aria-labelledby\": titleId,\n className: (0,lib_css__WEBPACK_IMPORTED_MODULE_6__.className)('toggle-button__button'),\n ref: buttonRef,\n onMouseUp: handleMouseUp,\n onKeyUp: handleKeyUp,\n onClick: handleClick\n })]\n });\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (DeprecatedToggleButton);\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/entry/deprecated-toggle-button.js?");
|
|
1303
1325
|
|
|
1304
1326
|
/***/ }),
|
|
1305
1327
|
|
|
@@ -1387,7 +1409,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
1387
1409
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
1388
1410
|
|
|
1389
1411
|
"use strict";
|
|
1390
|
-
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_layout_icon__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ui/components/layout/icon */ \"./src/javascripts/ui/components/layout/icon.js\");\n/* harmony import */ var ui_components_widgets_in_out_transition__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ui/components/widgets/in-out-transition */ \"./src/javascripts/ui/components/widgets/in-out-transition.js\");\n/* harmony import */ var ui_hooks_focus_helper_hooks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ui/hooks/focus-helper-hooks */ \"./src/javascripts/ui/hooks/focus-helper-hooks.js\");\n/* harmony import */ var ui_hooks_live_region_hooks__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ui/hooks/live-region-hooks */ \"./src/javascripts/ui/hooks/live-region-hooks.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.ts\");\n/* harmony import */ var ui_hooks_use_seamly_commands__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ui/hooks/use-seamly-commands */ \"./src/javascripts/ui/hooks/use-seamly-commands.js\");\n/* harmony import */ var ui_hooks_use_seamly_idle_detach_countdown__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ui/hooks/use-seamly-idle-detach-countdown */ \"./src/javascripts/ui/hooks/use-seamly-idle-detach-countdown.js\");\n/* harmony import */ var ui_hooks_use_seamly_resume_conversation_prompt__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ui/hooks/use-seamly-resume-conversation-prompt */ \"./src/javascripts/ui/hooks/use-seamly-resume-conversation-prompt.js\");\n/* harmony import */ var ui_hooks_utility_hooks__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ui/hooks/utility-hooks */ \"./src/javascripts/ui/hooks/utility-hooks.js\");\n/* harmony import */ var ui_utils_general_utils__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ui/utils/general-utils */ \"./src/javascripts/ui/utils/general-utils.js\");\n/* harmony import */ var ui_utils_seamly_utils__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ui/utils/seamly-utils */ \"./src/javascripts/ui/utils/seamly-utils.ts\");\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_i18n_hooks__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! domains/i18n/hooks */ \"./src/javascripts/domains/i18n/hooks.ts\");\n/* harmony import */ var domains_interrupt_hooks__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! domains/interrupt/hooks */ \"./src/javascripts/domains/interrupt/hooks.ts\");\n/* harmony import */ var domains_translations_hooks__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! domains/translations/hooks */ \"./src/javascripts/domains/translations/hooks.ts\");\n/* harmony import */ var lib_css__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! lib/css */ \"./src/javascripts/lib/css.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\"];\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\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; }\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\nconst Faq = () => {\n const {\n t\n } = (0,domains_i18n_hooks__WEBPACK_IMPORTED_MODULE_13__.useI18n)();\n const {\n sendAction,\n addMessageBubble\n } = (0,ui_hooks_use_seamly_commands__WEBPACK_IMPORTED_MODULE_6__[\"default\"])();\n const sectionId = (0,ui_hooks_utility_hooks__WEBPACK_IMPORTED_MODULE_9__.useGeneratedId)();\n const focusSkiplinkTarget = (0,ui_hooks_focus_helper_hooks__WEBPACK_IMPORTED_MODULE_3__.useSkiplinkTargetFocusing)();\n const {\n sendPolite\n } = (0,ui_hooks_live_region_hooks__WEBPACK_IMPORTED_MODULE_4__.useLiveRegion)();\n const {\n hasInterrupt\n } = (0,domains_interrupt_hooks__WEBPACK_IMPORTED_MODULE_14__.useInterrupt)();\n const {\n hasCountdown,\n endCountdown\n } = (0,ui_hooks_use_seamly_idle_detach_countdown__WEBPACK_IMPORTED_MODULE_7__[\"default\"])();\n const {\n hasPrompt,\n continueChat\n } = (0,ui_hooks_use_seamly_resume_conversation_prompt__WEBPACK_IMPORTED_MODULE_8__[\"default\"])();\n const lastFaqEventPayload = (0,ui_hooks_seamly_state_hooks__WEBPACK_IMPORTED_MODULE_5__.useSeamlyServiceData)('suggestion');\n const {\n body: eventBody\n } = (0,domains_translations_hooks__WEBPACK_IMPORTED_MODULE_15__.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 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,ui_hooks_seamly_state_hooks__WEBPACK_IMPORTED_MODULE_5__.useSeamlyLayoutMode)();\n const userHasResponded = (0,domains_app_hooks__WEBPACK_IMPORTED_MODULE_12__.useUserHasResponded)();\n const hideForWindow = !isInline && userHasResponded;\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 prevFaqs.current = faqs;\n }\n if (!prevHideForWindow.current && hideForWindow) {\n (0,ui_utils_general_utils__WEBPACK_IMPORTED_MODULE_10__.runIfElementContainsOrHasFocus)(containerRef.current, focusSkiplinkTarget);\n sendPolite(t('faq.srUnavailableText'));\n } else if (!hasFaqs && prevHasFaqs.current) {\n (0,ui_utils_general_utils__WEBPACK_IMPORTED_MODULE_10__.runIfElementContainsOrHasFocus)(containerRef.current, focusSkiplinkTarget);\n }\n prevHasFaqs.current = hasFaqs;\n prevHideForWindow.current = hideForWindow;\n }, [hasFaqs, faqs, hideForWindow, focusSkiplinkTarget, sendPolite, t]);\n const onFaqClickHandler = ({\n id,\n question\n }) => {\n if (hasCountdown) {\n endCountdown(true);\n }\n if (hasPrompt) {\n continueChat();\n }\n sendAction({\n type: ui_utils_seamly_utils__WEBPACK_IMPORTED_MODULE_11__.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 const headingText = t('faq.headingText');\n const ContainerElement = headingText ? 'section' : 'div';\n return (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_17__.jsx)(ui_components_widgets_in_out_transition__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n isActive: showFaqContainer,\n transitionStartState: ui_components_widgets_in_out_transition__WEBPACK_IMPORTED_MODULE_2__.transitionStartStates.notRendered,\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_17__.jsxs)(ContainerElement, {\n className: (0,lib_css__WEBPACK_IMPORTED_MODULE_16__.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_16__.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_16__.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_16__.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_16__.className)('button', 'button--secondary'),\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_17__.jsx)(ui_components_layout_icon__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n name: \"chevronRight\",\n size: \"8\"\n }), faq.question]\n })\n }, faq.id.toString()))\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?");
|
|
1412
|
+
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 react_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-redux */ \"./node_modules/react-redux/es/index.js\");\n/* harmony import */ var ui_components_layout_icon__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ui/components/layout/icon */ \"./src/javascripts/ui/components/layout/icon.js\");\n/* harmony import */ var ui_components_widgets_in_out_transition__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ui/components/widgets/in-out-transition */ \"./src/javascripts/ui/components/widgets/in-out-transition.js\");\n/* harmony import */ var ui_hooks_focus_helper_hooks__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ui/hooks/focus-helper-hooks */ \"./src/javascripts/ui/hooks/focus-helper-hooks.js\");\n/* harmony import */ var ui_hooks_live_region_hooks__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ui/hooks/live-region-hooks */ \"./src/javascripts/ui/hooks/live-region-hooks.js\");\n/* harmony import */ var ui_hooks_seamly_state_hooks__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ui/hooks/seamly-state-hooks */ \"./src/javascripts/ui/hooks/seamly-state-hooks.ts\");\n/* harmony import */ var ui_hooks_use_seamly_commands__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ui/hooks/use-seamly-commands */ \"./src/javascripts/ui/hooks/use-seamly-commands.js\");\n/* harmony import */ var ui_hooks_use_seamly_idle_detach_countdown__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ui/hooks/use-seamly-idle-detach-countdown */ \"./src/javascripts/ui/hooks/use-seamly-idle-detach-countdown.js\");\n/* harmony import */ var ui_hooks_use_seamly_resume_conversation_prompt__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ui/hooks/use-seamly-resume-conversation-prompt */ \"./src/javascripts/ui/hooks/use-seamly-resume-conversation-prompt.js\");\n/* harmony import */ var ui_hooks_utility_hooks__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ui/hooks/utility-hooks */ \"./src/javascripts/ui/hooks/utility-hooks.js\");\n/* harmony import */ var ui_utils_general_utils__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ui/utils/general-utils */ \"./src/javascripts/ui/utils/general-utils.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.ts\");\n/* harmony import */ var domains_app_hooks__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! domains/app/hooks */ \"./src/javascripts/domains/app/hooks.js\");\n/* harmony import */ var domains_i18n_hooks__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! domains/i18n/hooks */ \"./src/javascripts/domains/i18n/hooks.ts\");\n/* harmony import */ var domains_interrupt_selectors__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! domains/interrupt/selectors */ \"./src/javascripts/domains/interrupt/selectors.ts\");\n/* harmony import */ var domains_translations_hooks__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! domains/translations/hooks */ \"./src/javascripts/domains/translations/hooks.ts\");\n/* harmony import */ var lib_css__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! lib/css */ \"./src/javascripts/lib/css.js\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_18___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_18__);\nconst _excluded = [\"categories\"];\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\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; }\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\nconst Faq = () => {\n const {\n t\n } = (0,domains_i18n_hooks__WEBPACK_IMPORTED_MODULE_14__.useI18n)();\n const {\n sendAction,\n addMessageBubble\n } = (0,ui_hooks_use_seamly_commands__WEBPACK_IMPORTED_MODULE_7__[\"default\"])();\n const sectionId = (0,ui_hooks_utility_hooks__WEBPACK_IMPORTED_MODULE_10__.useGeneratedId)();\n const focusSkiplinkTarget = (0,ui_hooks_focus_helper_hooks__WEBPACK_IMPORTED_MODULE_4__.useSkiplinkTargetFocusing)();\n const {\n sendPolite\n } = (0,ui_hooks_live_region_hooks__WEBPACK_IMPORTED_MODULE_5__.useLiveRegion)();\n const hasError = (0,react_redux__WEBPACK_IMPORTED_MODULE_1__.useSelector)(domains_interrupt_selectors__WEBPACK_IMPORTED_MODULE_15__.selectHasError);\n const {\n hasCountdown,\n endCountdown\n } = (0,ui_hooks_use_seamly_idle_detach_countdown__WEBPACK_IMPORTED_MODULE_8__[\"default\"])();\n const {\n hasPrompt,\n continueChat\n } = (0,ui_hooks_use_seamly_resume_conversation_prompt__WEBPACK_IMPORTED_MODULE_9__[\"default\"])();\n const lastFaqEventPayload = (0,ui_hooks_seamly_state_hooks__WEBPACK_IMPORTED_MODULE_6__.useSeamlyServiceData)('suggestion');\n const {\n body: eventBody\n } = (0,domains_translations_hooks__WEBPACK_IMPORTED_MODULE_16__.useTranslatedEventData)({\n payload: lastFaqEventPayload\n });\n const faqs = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => {\n const newFaqs = lastFaqEventPayload && !hasError ? eventBody : [];\n const itemBaseClass = `faqs__item`;\n return newFaqs.map(_ref => {\n let {\n categories = []\n } = _ref,\n faqRest = _objectWithoutProperties(_ref, _excluded);\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, hasError, 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,ui_hooks_seamly_state_hooks__WEBPACK_IMPORTED_MODULE_6__.useSeamlyLayoutMode)();\n const userHasResponded = (0,domains_app_hooks__WEBPACK_IMPORTED_MODULE_13__.useUserHasResponded)();\n const hideForWindow = !isInline && userHasResponded;\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 prevFaqs.current = faqs;\n }\n if (!prevHideForWindow.current && hideForWindow) {\n (0,ui_utils_general_utils__WEBPACK_IMPORTED_MODULE_11__.runIfElementContainsOrHasFocus)(containerRef.current, focusSkiplinkTarget);\n sendPolite(t('faq.srUnavailableText'));\n } else if (!hasFaqs && prevHasFaqs.current) {\n (0,ui_utils_general_utils__WEBPACK_IMPORTED_MODULE_11__.runIfElementContainsOrHasFocus)(containerRef.current, focusSkiplinkTarget);\n }\n prevHasFaqs.current = hasFaqs;\n prevHideForWindow.current = hideForWindow;\n }, [hasFaqs, faqs, hideForWindow, focusSkiplinkTarget, sendPolite, t]);\n const onFaqClickHandler = ({\n id,\n question\n }) => {\n if (hasCountdown) {\n endCountdown(true);\n }\n if (hasPrompt) {\n continueChat();\n }\n sendAction({\n type: ui_utils_seamly_utils__WEBPACK_IMPORTED_MODULE_12__.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 const headingText = t('faq.headingText');\n const ContainerElement = headingText ? 'section' : 'div';\n return (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_18__.jsx)(ui_components_widgets_in_out_transition__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n isActive: showFaqContainer,\n transitionStartState: ui_components_widgets_in_out_transition__WEBPACK_IMPORTED_MODULE_3__.transitionStartStates.notRendered,\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_18__.jsxs)(ContainerElement, {\n className: (0,lib_css__WEBPACK_IMPORTED_MODULE_17__.className)('faqs'),\n \"aria-labelledby\": headingText ? sectionId : null,\n ref: containerRef,\n children: [headingText && (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_18__.jsx)(\"h2\", {\n id: sectionId,\n className: (0,lib_css__WEBPACK_IMPORTED_MODULE_17__.className)('faqs__heading'),\n children: headingText\n }), !!renderedFaqList.length && (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_18__.jsx)(\"ul\", {\n className: (0,lib_css__WEBPACK_IMPORTED_MODULE_17__.className)('faqs__list'),\n children: renderedFaqList.map(faq => (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_18__.jsx)(\"li\", {\n className: (0,lib_css__WEBPACK_IMPORTED_MODULE_17__.className)(faq.classNames),\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_18__.jsxs)(\"button\", {\n type: \"button\",\n onClick: () => {\n onFaqClickHandler(faq);\n },\n className: (0,lib_css__WEBPACK_IMPORTED_MODULE_17__.className)('button', 'button--secondary'),\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_18__.jsx)(ui_components_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/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Faq);\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/faq/faq.js?");
|
|
1391
1413
|
|
|
1392
1414
|
/***/ }),
|
|
1393
1415
|
|
|
@@ -1453,7 +1475,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
1453
1475
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
1454
1476
|
|
|
1455
1477
|
"use strict";
|
|
1456
|
-
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
|
|
1478
|
+
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 react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"./node_modules/react-redux/es/index.js\");\n/* harmony import */ var ui_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ui/hooks/seamly-hooks */ \"./src/javascripts/ui/hooks/seamly-hooks.js\");\n/* harmony import */ var domains_config_hooks__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! domains/config/hooks */ \"./src/javascripts/domains/config/hooks.ts\");\n/* harmony import */ var domains_i18n_hooks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! domains/i18n/hooks */ \"./src/javascripts/domains/i18n/hooks.ts\");\n/* harmony import */ var domains_interrupt_selectors__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! domains/interrupt/selectors */ \"./src/javascripts/domains/interrupt/selectors.ts\");\n/* harmony import */ var domains_visibility_hooks__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! domains/visibility/hooks */ \"./src/javascripts/domains/visibility/hooks.ts\");\n/* harmony import */ var lib_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! lib/css */ \"./src/javascripts/lib/css.js\");\n/* harmony import */ var _icon__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./icon */ \"./src/javascripts/ui/components/layout/icon.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\nconst AgentInfo = () => {\n const {\n t\n } = (0,domains_i18n_hooks__WEBPACK_IMPORTED_MODULE_3__.useI18n)();\n const {\n title,\n subTitle\n } = (0,ui_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_1__.useSeamlyHeaderData)();\n const unreadMessageCount = (0,ui_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_1__.useSeamlyUnreadCount)();\n const {\n isOpen\n } = (0,domains_visibility_hooks__WEBPACK_IMPORTED_MODULE_5__.useVisibility)();\n const currentAgent = (0,ui_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_1__.useSeamlyCurrentAgent)();\n const hasError = (0,react_redux__WEBPACK_IMPORTED_MODULE_0__.useSelector)(domains_interrupt_selectors__WEBPACK_IMPORTED_MODULE_4__.selectHasError);\n const startChatIcon = (0,domains_config_hooks__WEBPACK_IMPORTED_MODULE_2__.useStartChatIcon)();\n const src = currentAgent?.avatar ?? startChatIcon;\n const displaySubtitle = hasError ? '' : subTitle;\n const classNames = ['message-count'];\n if (isOpen) {\n classNames.push('message-count__hide');\n }\n if (unreadMessageCount === 0) {\n classNames.push('message-count__empty');\n }\n return (displaySubtitle || !isOpen) && (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsxs)(\"div\", {\n className: (0,lib_css__WEBPACK_IMPORTED_MODULE_6__.className)('agent-info'),\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsxs)(\"div\", {\n className: (0,lib_css__WEBPACK_IMPORTED_MODULE_6__.className)('agent-info__graphic'),\n children: [src ? (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsx)(\"img\", {\n className: (0,lib_css__WEBPACK_IMPORTED_MODULE_6__.className)(currentAgent?.avatar ? 'avatar' : 'icon'),\n src: src,\n alt: \"\"\n }) : (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsx)(_icon__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n name: \"avatar\",\n size: \"32\"\n }), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsx)(\"span\", {\n className: (0,lib_css__WEBPACK_IMPORTED_MODULE_6__.className)(classNames),\n \"aria-hidden\": \"true\",\n children: unreadMessageCount\n })]\n }), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsxs)(\"div\", {\n className: (0,lib_css__WEBPACK_IMPORTED_MODULE_6__.className)('agent-info__body'),\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsx)(\"p\", {\n className: (0,lib_css__WEBPACK_IMPORTED_MODULE_6__.className)('agent-info__heading'),\n children: title ?? t('header.title')\n }), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsx)(\"p\", {\n className: (0,lib_css__WEBPACK_IMPORTED_MODULE_6__.className)('agent-info__text'),\n children: displaySubtitle\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?");
|
|
1457
1479
|
|
|
1458
1480
|
/***/ }),
|
|
1459
1481
|
|
|
@@ -1464,7 +1486,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
1464
1486
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
1465
1487
|
|
|
1466
1488
|
"use strict";
|
|
1467
|
-
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
|
|
1489
|
+
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 react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"./node_modules/react-redux/es/index.js\");\n/* harmony import */ var ui_components_app_options__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ui/components/app-options */ \"./src/javascripts/ui/components/app-options/index.js\");\n/* harmony import */ var ui_components_conversation_event_chat_scroll_chat_scroll_provider__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ui/components/conversation/event/chat-scroll/chat-scroll-provider */ \"./src/javascripts/ui/components/conversation/event/chat-scroll/chat-scroll-provider.tsx\");\n/* harmony import */ var ui_components_entry_entry_container__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ui/components/entry/entry-container */ \"./src/javascripts/ui/components/entry/entry-container.js\");\n/* harmony import */ var ui_components_view_window_view_collapse_button__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ui/components/view/window-view/collapse-button */ \"./src/javascripts/ui/components/view/window-view/collapse-button.js\");\n/* harmony import */ var domains_interrupt_selectors__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! domains/interrupt/selectors */ \"./src/javascripts/domains/interrupt/selectors.ts\");\n/* harmony import */ var domains_translations_components_translation_status__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! domains/translations/components/translation-status */ \"./src/javascripts/domains/translations/components/translation-status.tsx\");\n/* harmony import */ var domains_visibility_hooks__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! domains/visibility/hooks */ \"./src/javascripts/domains/visibility/hooks.ts\");\n/* harmony import */ var lib_css__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! lib/css */ \"./src/javascripts/lib/css.js\");\n/* harmony import */ var _interrupt__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./interrupt */ \"./src/javascripts/ui/components/layout/interrupt.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\nfunction ChatFrame({\n children\n}) {\n const hasError = (0,react_redux__WEBPACK_IMPORTED_MODULE_0__.useSelector)(domains_interrupt_selectors__WEBPACK_IMPORTED_MODULE_5__.selectHasError);\n const {\n isOpen\n } = (0,domains_visibility_hooks__WEBPACK_IMPORTED_MODULE_7__.useVisibility)();\n if (hasError) {\n return (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)(_interrupt__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {});\n }\n return (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxs)(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.Fragment, {\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxs)(ui_components_conversation_event_chat_scroll_chat_scroll_provider__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxs)(\"div\", {\n className: (0,lib_css__WEBPACK_IMPORTED_MODULE_8__.className)('chat__container__header'),\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)(domains_translations_components_translation_status__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {}), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)(ui_components_view_window_view_collapse_button__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {})]\n }), children]\n }), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)(ui_components_entry_entry_container__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {}), isOpen && (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)(ui_components_app_options__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {})]\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?");
|
|
1468
1490
|
|
|
1469
1491
|
/***/ }),
|
|
1470
1492
|
|
|
@@ -1497,7 +1519,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
1497
1519
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
1498
1520
|
|
|
1499
1521
|
"use strict";
|
|
1500
|
-
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
|
|
1522
|
+
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 react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"./node_modules/react-redux/es/index.js\");\n/* harmony import */ var ui_components_app_options__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ui/components/app-options */ \"./src/javascripts/ui/components/app-options/index.js\");\n/* harmony import */ var ui_components_conversation_event_chat_scroll_chat_scroll_provider__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ui/components/conversation/event/chat-scroll/chat-scroll-provider */ \"./src/javascripts/ui/components/conversation/event/chat-scroll/chat-scroll-provider.tsx\");\n/* harmony import */ var ui_components_entry_entry_container__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ui/components/entry/entry-container */ \"./src/javascripts/ui/components/entry/entry-container.js\");\n/* harmony import */ var domains_interrupt_selectors__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! domains/interrupt/selectors */ \"./src/javascripts/domains/interrupt/selectors.ts\");\n/* harmony import */ var domains_translations_components_translation_status__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! domains/translations/components/translation-status */ \"./src/javascripts/domains/translations/components/translation-status.tsx\");\n/* harmony import */ var domains_visibility_hooks__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! domains/visibility/hooks */ \"./src/javascripts/domains/visibility/hooks.ts\");\n/* harmony import */ var lib_css__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! lib/css */ \"./src/javascripts/lib/css.js\");\n/* harmony import */ var _interrupt__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./interrupt */ \"./src/javascripts/ui/components/layout/interrupt.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\nfunction ChatFrame({\n children\n}) {\n const {\n isOpen\n } = (0,domains_visibility_hooks__WEBPACK_IMPORTED_MODULE_6__.useVisibility)();\n const hasError = (0,react_redux__WEBPACK_IMPORTED_MODULE_0__.useSelector)(domains_interrupt_selectors__WEBPACK_IMPORTED_MODULE_4__.selectHasError);\n if (hasError) {\n return (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsx)(_interrupt__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {});\n }\n return (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxs)(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.Fragment, {\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxs)(ui_components_conversation_event_chat_scroll_chat_scroll_provider__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsx)(\"div\", {\n className: (0,lib_css__WEBPACK_IMPORTED_MODULE_7__.className)('chat__container__header'),\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsx)(domains_translations_components_translation_status__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {})\n }), children]\n }), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsx)(ui_components_entry_entry_container__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {}), isOpen && (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsx)(ui_components_app_options__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {})]\n });\n}\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ChatFrame);\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/layout/deprecated-chat-frame.js?");
|
|
1501
1523
|
|
|
1502
1524
|
/***/ }),
|
|
1503
1525
|
|
|
@@ -1530,7 +1552,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
1530
1552
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
1531
1553
|
|
|
1532
1554
|
"use strict";
|
|
1533
|
-
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_view_window_view_collapse_button__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ui/components/view/window-view/collapse-button */ \"./src/javascripts/ui/components/view/window-view/collapse-button.js\");\n/* harmony import */ var ui_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ui/hooks/seamly-hooks */ \"./src/javascripts/ui/hooks/seamly-hooks.js\");\n/* harmony import */ var
|
|
1555
|
+
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_view_window_view_collapse_button__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ui/components/view/window-view/collapse-button */ \"./src/javascripts/ui/components/view/window-view/collapse-button.js\");\n/* harmony import */ var ui_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ui/hooks/seamly-hooks */ \"./src/javascripts/ui/hooks/seamly-hooks.js\");\n/* harmony import */ var domains_interrupt_hooks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! domains/interrupt/hooks */ \"./src/javascripts/domains/interrupt/hooks.ts\");\n/* harmony import */ var lib_css__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lib/css */ \"./src/javascripts/lib/css.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 Interrupt = () => {\n const {\n meta: {\n originalError,\n title,\n message,\n buttonText,\n action,\n srText\n }\n } = (0,domains_interrupt_hooks__WEBPACK_IMPORTED_MODULE_3__.useInterrupt)();\n const seamlyCommands = (0,ui_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_2__.useSeamlyCommands)();\n const headingId = (0,ui_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_2__.useGeneratedId)();\n const {\n sendPolite\n } = (0,ui_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_2__.useLiveRegion)();\n const focusSkiplinkTarget = (0,ui_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_2__.useSkiplinkTargetFocusing)();\n const isExpiredError = originalError?.name === 'SeamlySessionExpiredError';\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (!isExpiredError && srText) {\n // Wait for live regions to stabilise in case this occurs\n // at an initial render\n setTimeout(() => {\n sendPolite(srText);\n }, 200);\n }\n }, [sendPolite, srText, isExpiredError]);\n const onClickHandler = () => {\n if (seamlyCommands[action]) {\n seamlyCommands[action]();\n }\n focusSkiplinkTarget();\n };\n return !isExpiredError ? (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(\"section\", {\n className: (0,lib_css__WEBPACK_IMPORTED_MODULE_4__.className)('interrupt'),\n \"aria-labelledby\": headingId,\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(ui_components_view_window_view_collapse_button__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {}), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(\"div\", {\n className: (0,lib_css__WEBPACK_IMPORTED_MODULE_4__.className)('interrupt__body'),\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(\"h2\", {\n id: headingId,\n className: (0,lib_css__WEBPACK_IMPORTED_MODULE_4__.className)('interrupt__title'),\n children: title\n }), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(\"p\", {\n className: (0,lib_css__WEBPACK_IMPORTED_MODULE_4__.className)('interrupt__message'),\n children: message\n }), buttonText && action && (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(\"div\", {\n className: (0,lib_css__WEBPACK_IMPORTED_MODULE_4__.className)('interrupt__actions'),\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(\"button\", {\n type: \"button\",\n className: (0,lib_css__WEBPACK_IMPORTED_MODULE_4__.className)('button', 'button--primary'),\n onClick: onClickHandler,\n children: buttonText\n })\n })]\n })]\n }) : (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.Fragment, {});\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Interrupt);\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/layout/interrupt.js?");
|
|
1534
1556
|
|
|
1535
1557
|
/***/ }),
|
|
1536
1558
|
|
|
@@ -1541,7 +1563,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
1541
1563
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
1542
1564
|
|
|
1543
1565
|
"use strict";
|
|
1544
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"PreChatMessageEvent\": () => (/* binding */ PreChatMessageEvent),\n/* harmony export */ \"default\": () => (/* binding */ PreChatMessages)\n/* harmony export */ });\n/* harmony import */ var
|
|
1566
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"PreChatMessageEvent\": () => (/* binding */ PreChatMessageEvent),\n/* harmony export */ \"default\": () => (/* binding */ PreChatMessages)\n/* harmony export */ });\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-redux */ \"./node_modules/react-redux/es/index.js\");\n/* harmony import */ var ui_hooks_use_event_component_mapping__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ui/hooks/use-event-component-mapping */ \"./src/javascripts/ui/hooks/use-event-component-mapping.js\");\n/* harmony import */ var domains_config_hooks__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! domains/config/hooks */ \"./src/javascripts/domains/config/hooks.ts\");\n/* harmony import */ var domains_interrupt_selectors__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! domains/interrupt/selectors */ \"./src/javascripts/domains/interrupt/selectors.ts\");\n/* harmony import */ var domains_visibility_hooks__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! domains/visibility/hooks */ \"./src/javascripts/domains/visibility/hooks.ts\");\n/* harmony import */ var lib_css__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! lib/css */ \"./src/javascripts/lib/css.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 PreChatMessageEvent({\n event\n}) {\n const [Component] = (0,ui_hooks_use_event_component_mapping__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(event);\n return (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(Component, {\n event: event\n });\n}\nfunction PreChatMessages() {\n const {\n preChatEvents,\n layoutMode\n } = (0,domains_config_hooks__WEBPACK_IMPORTED_MODULE_2__.useConfig)();\n const hasError = (0,react_redux__WEBPACK_IMPORTED_MODULE_0__.useSelector)(domains_interrupt_selectors__WEBPACK_IMPORTED_MODULE_3__.selectHasError);\n const {\n isOpen\n } = (0,domains_visibility_hooks__WEBPACK_IMPORTED_MODULE_4__.useVisibility)();\n const isVisible = !(hasError || !preChatEvents?.length || isOpen);\n return isVisible && (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(\"ul\", {\n className: (0,lib_css__WEBPACK_IMPORTED_MODULE_5__.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_5__.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\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/layout/pre-chat-messages.js?");
|
|
1545
1567
|
|
|
1546
1568
|
/***/ }),
|
|
1547
1569
|
|
|
@@ -1607,7 +1629,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
1607
1629
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
1608
1630
|
|
|
1609
1631
|
"use strict";
|
|
1610
|
-
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_suggestions_suggestions_list__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ui/components/suggestions/suggestions-list */ \"./src/javascripts/ui/components/suggestions/suggestions-list.js\");\n/* harmony import */ var ui_components_widgets_in_out_transition__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ui/components/widgets/in-out-transition */ \"./src/javascripts/ui/components/widgets/in-out-transition.js\");\n/* harmony import */ var ui_hooks_focus_helper_hooks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ui/hooks/focus-helper-hooks */ \"./src/javascripts/ui/hooks/focus-helper-hooks.js\");\n/* harmony import */ var ui_hooks_live_region_hooks__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ui/hooks/live-region-hooks */ \"./src/javascripts/ui/hooks/live-region-hooks.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.ts\");\n/* harmony import */ var ui_hooks_use_seamly_commands__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ui/hooks/use-seamly-commands */ \"./src/javascripts/ui/hooks/use-seamly-commands.js\");\n/* harmony import */ var ui_hooks_use_seamly_idle_detach_countdown__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ui/hooks/use-seamly-idle-detach-countdown */ \"./src/javascripts/ui/hooks/use-seamly-idle-detach-countdown.js\");\n/* harmony import */ var ui_hooks_use_seamly_resume_conversation_prompt__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ui/hooks/use-seamly-resume-conversation-prompt */ \"./src/javascripts/ui/hooks/use-seamly-resume-conversation-prompt.js\");\n/* harmony import */ var ui_hooks_utility_hooks__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ui/hooks/utility-hooks */ \"./src/javascripts/ui/hooks/utility-hooks.js\");\n/* harmony import */ var ui_utils_general_utils__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ui/utils/general-utils */ \"./src/javascripts/ui/utils/general-utils.js\");\n/* harmony import */ var ui_utils_seamly_utils__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ui/utils/seamly-utils */ \"./src/javascripts/ui/utils/seamly-utils.ts\");\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_config_hooks__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! domains/config/hooks */ \"./src/javascripts/domains/config/hooks.ts\");\n/* harmony import */ var domains_i18n_hooks__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! domains/i18n/hooks */ \"./src/javascripts/domains/i18n/hooks.ts\");\n/* harmony import */ var domains_interrupt_hooks__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! domains/interrupt/hooks */ \"./src/javascripts/domains/interrupt/hooks.ts\");\n/* harmony import */ var domains_translations_hooks__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! domains/translations/hooks */ \"./src/javascripts/domains/translations/hooks.ts\");\n/* harmony import */ var domains_visibility_constants__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! domains/visibility/constants */ \"./src/javascripts/domains/visibility/constants.ts\");\n/* harmony import */ var domains_visibility_hooks__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! domains/visibility/hooks */ \"./src/javascripts/domains/visibility/hooks.ts\");\n/* harmony import */ var lib_css__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! lib/css */ \"./src/javascripts/lib/css.js\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_20___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_20__);\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 = false\n}) => {\n // generic hooks\n const {\n isInline\n } = (0,ui_hooks_seamly_state_hooks__WEBPACK_IMPORTED_MODULE_5__.useSeamlyLayoutMode)();\n const {\n t\n } = (0,domains_i18n_hooks__WEBPACK_IMPORTED_MODULE_14__.useI18n)();\n const {\n sendAction,\n addMessageBubble\n } = (0,ui_hooks_use_seamly_commands__WEBPACK_IMPORTED_MODULE_6__[\"default\"])();\n const {\n isOpen,\n setVisibility\n } = (0,domains_visibility_hooks__WEBPACK_IMPORTED_MODULE_18__.useVisibility)();\n const {\n showSuggestions\n } = (0,domains_config_hooks__WEBPACK_IMPORTED_MODULE_13__.useConfig)();\n // a11y hooks\n const sectionId = (0,ui_hooks_utility_hooks__WEBPACK_IMPORTED_MODULE_9__.useGeneratedId)();\n const focusSkiplinkTarget = (0,ui_hooks_focus_helper_hooks__WEBPACK_IMPORTED_MODULE_3__.useSkiplinkTargetFocusing)();\n const containerRef = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n const {\n sendPolite\n } = (0,ui_hooks_live_region_hooks__WEBPACK_IMPORTED_MODULE_4__.useLiveRegion)();\n // interrupt & countdown hooks\n const {\n hasInterrupt\n } = (0,domains_interrupt_hooks__WEBPACK_IMPORTED_MODULE_15__.useInterrupt)();\n const {\n hasCountdown,\n endCountdown\n } = (0,ui_hooks_use_seamly_idle_detach_countdown__WEBPACK_IMPORTED_MODULE_7__[\"default\"])();\n const {\n hasPrompt,\n continueChat\n } = (0,ui_hooks_use_seamly_resume_conversation_prompt__WEBPACK_IMPORTED_MODULE_8__[\"default\"])();\n // data hooks\n const userHasResponded = (0,domains_app_hooks__WEBPACK_IMPORTED_MODULE_12__.useUserHasResponded)();\n const payload = (0,ui_hooks_seamly_state_hooks__WEBPACK_IMPORTED_MODULE_5__.useSeamlyServiceData)('suggestion');\n const {\n body: eventBody\n } = (0,domains_translations_hooks__WEBPACK_IMPORTED_MODULE_16__.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 = isInline ? (userHasResponded || isOpen) && !isAside : userHasResponded;\n const prevHideSuggestions = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)(hideSuggestions);\n const showSuggestionsContainer = hasSuggestions && !hideSuggestions && showSuggestions;\n const renderedSuggestions = hasSuggestions ? suggestions : previousRenderedSuggestions.current;\n previousRenderedSuggestions.current = renderedSuggestions;\n const suggestionsClassNames = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => {\n const classNames = ['suggestions'];\n if (isAside) {\n classNames.push('suggestions--aside');\n }\n return (0,lib_css__WEBPACK_IMPORTED_MODULE_19__.className)(classNames);\n }, [isAside]);\n\n // click handler\n const handleClick = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)(({\n id,\n question\n }) => {\n if (hasCountdown) {\n endCountdown(true);\n }\n if (hasPrompt) {\n continueChat();\n }\n\n // @todo Refactor to 'suggestionclick'\n sendAction({\n type: ui_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 if (!isOpen) {\n setVisibility(domains_visibility_constants__WEBPACK_IMPORTED_MODULE_17__.visibilityStates.open);\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 prevSuggestions.current = suggestions;\n }\n if (!prevHideSuggestions.current && hideSuggestions) {\n (0,ui_utils_general_utils__WEBPACK_IMPORTED_MODULE_10__.runIfElementContainsOrHasFocus)(containerRef.current, focusSkiplinkTarget);\n sendPolite(t('suggestions.srUnavailableText'));\n } else if (!hasSuggestions && prevHasSuggestions.current) {\n (0,ui_utils_general_utils__WEBPACK_IMPORTED_MODULE_10__.runIfElementContainsOrHasFocus)(containerRef.current, focusSkiplinkTarget);\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_20__.jsx)(ui_components_widgets_in_out_transition__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n isActive: showSuggestionsContainer,\n transitionStartState: ui_components_widgets_in_out_transition__WEBPACK_IMPORTED_MODULE_2__.transitionStartStates.notRendered,\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_20__.jsxs)(ContainerElement, {\n className: suggestionsClassNames,\n \"aria-labelledby\": headingText ? sectionId : null,\n ref: containerRef,\n children: [headingText && (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_20__.jsx)(\"p\", {\n id: sectionId,\n className: (0,lib_css__WEBPACK_IMPORTED_MODULE_19__.className)('suggestions__heading'),\n children: headingText\n }), !!renderedSuggestions.length && (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_20__.jsx)(ui_components_suggestions_suggestions_list__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n suggestions: renderedSuggestions,\n onClickSuggestion: handleClick\n }), footerText && !isOpen && (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_20__.jsx)(\"p\", {\n className: (0,lib_css__WEBPACK_IMPORTED_MODULE_19__.className)('suggestions__footer'),\n children: footerText\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?");
|
|
1632
|
+
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 react_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-redux */ \"./node_modules/react-redux/es/index.js\");\n/* harmony import */ var ui_components_suggestions_suggestions_list__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ui/components/suggestions/suggestions-list */ \"./src/javascripts/ui/components/suggestions/suggestions-list.js\");\n/* harmony import */ var ui_components_widgets_in_out_transition__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ui/components/widgets/in-out-transition */ \"./src/javascripts/ui/components/widgets/in-out-transition.js\");\n/* harmony import */ var ui_hooks_focus_helper_hooks__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ui/hooks/focus-helper-hooks */ \"./src/javascripts/ui/hooks/focus-helper-hooks.js\");\n/* harmony import */ var ui_hooks_live_region_hooks__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ui/hooks/live-region-hooks */ \"./src/javascripts/ui/hooks/live-region-hooks.js\");\n/* harmony import */ var ui_hooks_seamly_state_hooks__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ui/hooks/seamly-state-hooks */ \"./src/javascripts/ui/hooks/seamly-state-hooks.ts\");\n/* harmony import */ var ui_hooks_use_seamly_commands__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ui/hooks/use-seamly-commands */ \"./src/javascripts/ui/hooks/use-seamly-commands.js\");\n/* harmony import */ var ui_hooks_use_seamly_idle_detach_countdown__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ui/hooks/use-seamly-idle-detach-countdown */ \"./src/javascripts/ui/hooks/use-seamly-idle-detach-countdown.js\");\n/* harmony import */ var ui_hooks_use_seamly_resume_conversation_prompt__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ui/hooks/use-seamly-resume-conversation-prompt */ \"./src/javascripts/ui/hooks/use-seamly-resume-conversation-prompt.js\");\n/* harmony import */ var ui_hooks_utility_hooks__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ui/hooks/utility-hooks */ \"./src/javascripts/ui/hooks/utility-hooks.js\");\n/* harmony import */ var ui_utils_general_utils__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ui/utils/general-utils */ \"./src/javascripts/ui/utils/general-utils.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.ts\");\n/* harmony import */ var domains_app_hooks__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! domains/app/hooks */ \"./src/javascripts/domains/app/hooks.js\");\n/* harmony import */ var domains_config_hooks__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! domains/config/hooks */ \"./src/javascripts/domains/config/hooks.ts\");\n/* harmony import */ var domains_i18n_hooks__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! domains/i18n/hooks */ \"./src/javascripts/domains/i18n/hooks.ts\");\n/* harmony import */ var domains_interrupt_selectors__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! domains/interrupt/selectors */ \"./src/javascripts/domains/interrupt/selectors.ts\");\n/* harmony import */ var domains_translations_hooks__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! domains/translations/hooks */ \"./src/javascripts/domains/translations/hooks.ts\");\n/* harmony import */ var domains_visibility_constants__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! domains/visibility/constants */ \"./src/javascripts/domains/visibility/constants.ts\");\n/* harmony import */ var domains_visibility_hooks__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! domains/visibility/hooks */ \"./src/javascripts/domains/visibility/hooks.ts\");\n/* harmony import */ var lib_css__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! lib/css */ \"./src/javascripts/lib/css.js\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_21___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_21__);\n\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 = false\n}) => {\n // generic hooks\n const {\n isInline\n } = (0,ui_hooks_seamly_state_hooks__WEBPACK_IMPORTED_MODULE_6__.useSeamlyLayoutMode)();\n const {\n t\n } = (0,domains_i18n_hooks__WEBPACK_IMPORTED_MODULE_15__.useI18n)();\n const {\n sendAction,\n addMessageBubble\n } = (0,ui_hooks_use_seamly_commands__WEBPACK_IMPORTED_MODULE_7__[\"default\"])();\n const {\n isOpen,\n setVisibility\n } = (0,domains_visibility_hooks__WEBPACK_IMPORTED_MODULE_19__.useVisibility)();\n const {\n showSuggestions\n } = (0,domains_config_hooks__WEBPACK_IMPORTED_MODULE_14__.useConfig)();\n // a11y hooks\n const sectionId = (0,ui_hooks_utility_hooks__WEBPACK_IMPORTED_MODULE_10__.useGeneratedId)();\n const focusSkiplinkTarget = (0,ui_hooks_focus_helper_hooks__WEBPACK_IMPORTED_MODULE_4__.useSkiplinkTargetFocusing)();\n const containerRef = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n const {\n sendPolite\n } = (0,ui_hooks_live_region_hooks__WEBPACK_IMPORTED_MODULE_5__.useLiveRegion)();\n // interrupt & countdown hooks\n const hasError = (0,react_redux__WEBPACK_IMPORTED_MODULE_1__.useSelector)(domains_interrupt_selectors__WEBPACK_IMPORTED_MODULE_16__.selectHasError);\n const {\n hasCountdown,\n endCountdown\n } = (0,ui_hooks_use_seamly_idle_detach_countdown__WEBPACK_IMPORTED_MODULE_8__[\"default\"])();\n const {\n hasPrompt,\n continueChat\n } = (0,ui_hooks_use_seamly_resume_conversation_prompt__WEBPACK_IMPORTED_MODULE_9__[\"default\"])();\n // data hooks\n const userHasResponded = (0,domains_app_hooks__WEBPACK_IMPORTED_MODULE_13__.useUserHasResponded)();\n const payload = (0,ui_hooks_seamly_state_hooks__WEBPACK_IMPORTED_MODULE_6__.useSeamlyServiceData)('suggestion');\n const {\n body: eventBody\n } = (0,domains_translations_hooks__WEBPACK_IMPORTED_MODULE_17__.useTranslatedEventData)({\n payload\n });\n const suggestions = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => payload && !hasError ? eventBody : [], [payload, hasError, 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 = isInline ? (userHasResponded || isOpen) && !isAside : userHasResponded;\n const prevHideSuggestions = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)(hideSuggestions);\n const showSuggestionsContainer = hasSuggestions && !hideSuggestions && showSuggestions;\n const renderedSuggestions = hasSuggestions ? suggestions : previousRenderedSuggestions.current;\n previousRenderedSuggestions.current = renderedSuggestions;\n const suggestionsClassNames = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => {\n const classNames = ['suggestions'];\n if (isAside) {\n classNames.push('suggestions--aside');\n }\n return (0,lib_css__WEBPACK_IMPORTED_MODULE_20__.className)(classNames);\n }, [isAside]);\n\n // click handler\n const handleClick = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)(({\n id,\n question\n }) => {\n if (hasCountdown) {\n endCountdown(true);\n }\n if (hasPrompt) {\n continueChat();\n }\n\n // @todo Refactor to 'suggestionclick'\n sendAction({\n type: ui_utils_seamly_utils__WEBPACK_IMPORTED_MODULE_12__.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 if (!isOpen) {\n setVisibility(domains_visibility_constants__WEBPACK_IMPORTED_MODULE_18__.visibilityStates.open);\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 prevSuggestions.current = suggestions;\n }\n if (!prevHideSuggestions.current && hideSuggestions) {\n (0,ui_utils_general_utils__WEBPACK_IMPORTED_MODULE_11__.runIfElementContainsOrHasFocus)(containerRef.current, focusSkiplinkTarget);\n sendPolite(t('suggestions.srUnavailableText'));\n } else if (!hasSuggestions && prevHasSuggestions.current) {\n (0,ui_utils_general_utils__WEBPACK_IMPORTED_MODULE_11__.runIfElementContainsOrHasFocus)(containerRef.current, focusSkiplinkTarget);\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_21__.jsx)(ui_components_widgets_in_out_transition__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n isActive: showSuggestionsContainer,\n transitionStartState: ui_components_widgets_in_out_transition__WEBPACK_IMPORTED_MODULE_3__.transitionStartStates.notRendered,\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_21__.jsxs)(ContainerElement, {\n className: suggestionsClassNames,\n \"aria-labelledby\": headingText ? sectionId : null,\n ref: containerRef,\n children: [headingText && (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_21__.jsx)(\"p\", {\n id: sectionId,\n className: (0,lib_css__WEBPACK_IMPORTED_MODULE_20__.className)('suggestions__heading'),\n children: headingText\n }), !!renderedSuggestions.length && (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_21__.jsx)(ui_components_suggestions_suggestions_list__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n suggestions: renderedSuggestions,\n onClickSuggestion: handleClick\n }), footerText && !isOpen && (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_21__.jsx)(\"p\", {\n className: (0,lib_css__WEBPACK_IMPORTED_MODULE_20__.className)('suggestions__footer'),\n children: footerText\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?");
|
|
1611
1633
|
|
|
1612
1634
|
/***/ }),
|
|
1613
1635
|
|
|
@@ -1640,7 +1662,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
1640
1662
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
1641
1663
|
|
|
1642
1664
|
"use strict";
|
|
1643
|
-
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 _conversation_conversation__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../conversation/conversation */ \"./src/javascripts/ui/components/conversation/conversation.tsx\");\n/* harmony import */ var _layout_chat__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../layout/chat */ \"./src/javascripts/ui/components/layout/chat.js\");\n/* harmony import */ var _layout_chat_frame__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../layout/chat-frame */ \"./src/javascripts/ui/components/layout/chat-frame.js\");\n/* harmony import */ var
|
|
1665
|
+
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 _conversation_conversation__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../conversation/conversation */ \"./src/javascripts/ui/components/conversation/conversation.tsx\");\n/* harmony import */ var _layout_chat__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../layout/chat */ \"./src/javascripts/ui/components/layout/chat.js\");\n/* harmony import */ var _layout_chat_frame__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../layout/chat-frame */ \"./src/javascripts/ui/components/layout/chat-frame.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 AppView = () => {\n return (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_layout_chat__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_layout_chat_frame__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_conversation_conversation__WEBPACK_IMPORTED_MODULE_0__[\"default\"], {})\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?");
|
|
1644
1666
|
|
|
1645
1667
|
/***/ }),
|
|
1646
1668
|
|
|
@@ -1651,7 +1673,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
1651
1673
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
1652
1674
|
|
|
1653
1675
|
"use strict";
|
|
1654
|
-
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 ui_components_layout_deprecated_chat_frame__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ui/components/layout/deprecated-chat-frame */ \"./src/javascripts/ui/components/layout/deprecated-chat-frame.js\");\n/* harmony import */ var domains_visibility_hooks__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! domains/visibility/hooks */ \"./src/javascripts/domains/visibility/hooks.ts\");\n/* harmony import */ var _conversation_conversation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../conversation/conversation */ \"./src/javascripts/ui/components/conversation/conversation.tsx\");\n/* harmony import */ var _entry_deprecated_toggle_button__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../entry/deprecated-toggle-button */ \"./src/javascripts/ui/components/entry/deprecated-toggle-button.js\");\n/* harmony import */ var _layout_agent_info__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../layout/agent-info */ \"./src/javascripts/ui/components/layout/agent-info.js\");\n/* harmony import */ var _layout_deprecated_app_frame__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../layout/deprecated-app-frame */ \"./src/javascripts/ui/components/layout/deprecated-app-frame.js\");\n/* harmony import */ var _layout_header__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../layout/header */ \"./src/javascripts/ui/components/layout/header.js\");\n/* harmony import */ var
|
|
1676
|
+
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 ui_components_layout_deprecated_chat_frame__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ui/components/layout/deprecated-chat-frame */ \"./src/javascripts/ui/components/layout/deprecated-chat-frame.js\");\n/* harmony import */ var domains_visibility_hooks__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! domains/visibility/hooks */ \"./src/javascripts/domains/visibility/hooks.ts\");\n/* harmony import */ var _conversation_conversation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../conversation/conversation */ \"./src/javascripts/ui/components/conversation/conversation.tsx\");\n/* harmony import */ var _entry_deprecated_toggle_button__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../entry/deprecated-toggle-button */ \"./src/javascripts/ui/components/entry/deprecated-toggle-button.js\");\n/* harmony import */ var _layout_agent_info__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../layout/agent-info */ \"./src/javascripts/ui/components/layout/agent-info.js\");\n/* harmony import */ var _layout_deprecated_app_frame__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../layout/deprecated-app-frame */ \"./src/javascripts/ui/components/layout/deprecated-app-frame.js\");\n/* harmony import */ var _layout_header__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../layout/header */ \"./src/javascripts/ui/components/layout/header.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\nconst ShowInlineView = ({\n children\n}) => {\n const {\n showInlineView,\n containerRef\n } = (0,domains_visibility_hooks__WEBPACK_IMPORTED_MODULE_1__.useShowInlineView)();\n return (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(\"div\", {\n ref: containerRef,\n children: showInlineView && children\n });\n};\nconst DeprecatedView = () => {\n const {\n isVisible,\n openChat,\n closeChat\n } = (0,domains_visibility_hooks__WEBPACK_IMPORTED_MODULE_1__.useVisibility)();\n return isVisible && (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(ShowInlineView, {\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxs)(_layout_deprecated_app_frame__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_entry_deprecated_toggle_button__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n onOpenChat: openChat\n }), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_layout_header__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n onCloseChat: closeChat,\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_layout_agent_info__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {})\n }), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(ui_components_layout_deprecated_chat_frame__WEBPACK_IMPORTED_MODULE_0__[\"default\"], {\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_conversation_conversation__WEBPACK_IMPORTED_MODULE_2__[\"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?");
|
|
1655
1677
|
|
|
1656
1678
|
/***/ }),
|
|
1657
1679
|
|
|
@@ -1673,7 +1695,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
1673
1695
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
1674
1696
|
|
|
1675
1697
|
"use strict";
|
|
1676
|
-
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
|
|
1698
|
+
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_visibility_hooks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! domains/visibility/hooks */ \"./src/javascripts/domains/visibility/hooks.ts\");\n/* harmony import */ var lib_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lib/css */ \"./src/javascripts/lib/css.js\");\n/* harmony import */ var _conversation_conversation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../conversation/conversation */ \"./src/javascripts/ui/components/conversation/conversation.tsx\");\n/* harmony import */ var _layout_chat__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../layout/chat */ \"./src/javascripts/ui/components/layout/chat.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_pre_chat_messages__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../layout/pre-chat-messages */ \"./src/javascripts/ui/components/layout/pre-chat-messages.js\");\n/* harmony import */ var _suggestions__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../suggestions */ \"./src/javascripts/ui/components/suggestions/index.js\");\n/* harmony import */ var _widgets_in_out_transition__WEBPACK_IMPORTED_MODULE_7__ = __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_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 InlineView = () => {\n const {\n showInlineView,\n containerRef\n } = (0,domains_visibility_hooks__WEBPACK_IMPORTED_MODULE_0__.useShowInlineView)();\n const {\n isOpen\n } = (0,domains_visibility_hooks__WEBPACK_IMPORTED_MODULE_0__.useVisibility)();\n return (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsxs)(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.Fragment, {\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsx)(_widgets_in_out_transition__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n isActive: !isOpen,\n transitionStartState: _widgets_in_out_transition__WEBPACK_IMPORTED_MODULE_7__.transitionStartStates.rendered,\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsxs)(\"div\", {\n ref: containerRef,\n className: (0,lib_css__WEBPACK_IMPORTED_MODULE_1__.className)('unstarted-wrapper', 'unstarted-wrapper--inline'),\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsx)(_layout_pre_chat_messages__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {}), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsx)(_suggestions__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {})]\n })\n }), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsx)(_widgets_in_out_transition__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n isActive: isOpen,\n transitionStartState: _widgets_in_out_transition__WEBPACK_IMPORTED_MODULE_7__.transitionStartStates.rendered,\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsx)(_layout_chat__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n ref: containerRef,\n children: showInlineView && (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsx)(_layout_chat_frame__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n children: isOpen && (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsx)(_conversation_conversation__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {})\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?");
|
|
1677
1699
|
|
|
1678
1700
|
/***/ }),
|
|
1679
1701
|
|
|
@@ -1695,7 +1717,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
1695
1717
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
1696
1718
|
|
|
1697
1719
|
"use strict";
|
|
1698
|
-
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_conversation_conversation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ui/components/conversation/conversation */ \"./src/javascripts/ui/components/conversation/conversation.tsx\");\n/* harmony import */ var ui_components_conversation_event_text__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ui/components/conversation/event/text */ \"./src/javascripts/ui/components/conversation/event/text.js\");\n/* harmony import */ var ui_components_layout_chat__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ui/components/layout/chat */ \"./src/javascripts/ui/components/layout/chat.js\");\n/* harmony import */ var ui_components_layout_chat_frame__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ui/components/layout/chat-frame */ \"./src/javascripts/ui/components/layout/chat-frame.js\");\n/* harmony import */ var
|
|
1720
|
+
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_conversation_conversation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ui/components/conversation/conversation */ \"./src/javascripts/ui/components/conversation/conversation.tsx\");\n/* harmony import */ var ui_components_conversation_event_text__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ui/components/conversation/event/text */ \"./src/javascripts/ui/components/conversation/event/text.js\");\n/* harmony import */ var ui_components_layout_chat__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ui/components/layout/chat */ \"./src/javascripts/ui/components/layout/chat.js\");\n/* harmony import */ var ui_components_layout_chat_frame__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ui/components/layout/chat-frame */ \"./src/javascripts/ui/components/layout/chat-frame.js\");\n/* harmony import */ var ui_components_layout_pre_chat_messages__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ui/components/layout/pre-chat-messages */ \"./src/javascripts/ui/components/layout/pre-chat-messages.js\");\n/* harmony import */ var ui_components_widgets_in_out_transition__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ui/components/widgets/in-out-transition */ \"./src/javascripts/ui/components/widgets/in-out-transition.js\");\n/* harmony import */ var domains_app_hooks__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! domains/app/hooks */ \"./src/javascripts/domains/app/hooks.js\");\n/* harmony import */ var domains_i18n_hooks__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! domains/i18n/hooks */ \"./src/javascripts/domains/i18n/hooks.ts\");\n/* harmony import */ var domains_visibility_hooks__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! domains/visibility/hooks */ \"./src/javascripts/domains/visibility/hooks.ts\");\n/* harmony import */ var lib_css__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! lib/css */ \"./src/javascripts/lib/css.js\");\n/* harmony import */ var _window_open_button__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./window-open-button */ \"./src/javascripts/ui/components/view/window-view/window-open-button.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__);\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst WindowView = () => {\n const {\n isOpen,\n openChat\n } = (0,domains_visibility_hooks__WEBPACK_IMPORTED_MODULE_9__.useVisibility)();\n const userHasResponded = (0,domains_app_hooks__WEBPACK_IMPORTED_MODULE_7__.useUserHasResponded)();\n const {\n t\n } = (0,domains_i18n_hooks__WEBPACK_IMPORTED_MODULE_8__.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_12__.jsxs)(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.Fragment, {\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)(_window_open_button__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n onClick: openChat\n }), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)(ui_components_widgets_in_out_transition__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n isActive: !isOpen && !userHasResponded,\n transitionStartState: ui_components_widgets_in_out_transition__WEBPACK_IMPORTED_MODULE_6__.transitionStartStates.rendered,\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)(\"div\", {\n className: (0,lib_css__WEBPACK_IMPORTED_MODULE_10__.className)('unstarted-wrapper', 'unstarted-wrapper--window'),\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)(ui_components_layout_pre_chat_messages__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {})\n })\n }), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)(ui_components_widgets_in_out_transition__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n isActive: !isOpen && userHasResponded,\n transitionStartState: ui_components_widgets_in_out_transition__WEBPACK_IMPORTED_MODULE_6__.transitionStartStates.notRendered,\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)(\"div\", {\n className: (0,lib_css__WEBPACK_IMPORTED_MODULE_10__.className)('unstarted-wrapper', 'unstarted-wrapper--window', 'unstarted-wrapper--continue'),\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)(ui_components_conversation_event_text__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n event: continueChatEvent\n })\n })\n }), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)(ui_components_widgets_in_out_transition__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n isActive: isOpen,\n transitionStartState: ui_components_widgets_in_out_transition__WEBPACK_IMPORTED_MODULE_6__.transitionStartStates.notRendered,\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)(ui_components_layout_chat__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)(ui_components_layout_chat_frame__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)(ui_components_conversation_conversation__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {})\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?");
|
|
1699
1721
|
|
|
1700
1722
|
/***/ }),
|
|
1701
1723
|
|
|
@@ -1706,7 +1728,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
1706
1728
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
1707
1729
|
|
|
1708
1730
|
"use strict";
|
|
1709
|
-
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
|
|
1731
|
+
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 react_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-redux */ \"./node_modules/react-redux/es/index.js\");\n/* harmony import */ var ui_components_layout_icon__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ui/components/layout/icon */ \"./src/javascripts/ui/components/layout/icon.js\");\n/* harmony import */ var ui_components_widgets_in_out_transition__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ui/components/widgets/in-out-transition */ \"./src/javascripts/ui/components/widgets/in-out-transition.js\");\n/* harmony import */ var ui_hooks_focus_helper_hooks__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ui/hooks/focus-helper-hooks */ \"./src/javascripts/ui/hooks/focus-helper-hooks.js\");\n/* harmony import */ var ui_hooks_seamly_api_hooks__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ui/hooks/seamly-api-hooks */ \"./src/javascripts/ui/hooks/seamly-api-hooks.js\");\n/* harmony import */ var ui_hooks_seamly_state_hooks__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ui/hooks/seamly-state-hooks */ \"./src/javascripts/ui/hooks/seamly-state-hooks.ts\");\n/* harmony import */ var domains_config_hooks__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! domains/config/hooks */ \"./src/javascripts/domains/config/hooks.ts\");\n/* harmony import */ var domains_i18n_hooks__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! domains/i18n/hooks */ \"./src/javascripts/domains/i18n/hooks.ts\");\n/* harmony import */ var domains_interrupt_selectors__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! domains/interrupt/selectors */ \"./src/javascripts/domains/interrupt/selectors.ts\");\n/* harmony import */ var domains_visibility_hooks__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! domains/visibility/hooks */ \"./src/javascripts/domains/visibility/hooks.ts\");\n/* harmony import */ var lib_css__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! lib/css */ \"./src/javascripts/lib/css.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__);\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst ButtonIcon = () => {\n const startChatIcon = (0,domains_config_hooks__WEBPACK_IMPORTED_MODULE_7__.useStartChatIcon)();\n const currentAgent = (0,ui_hooks_seamly_state_hooks__WEBPACK_IMPORTED_MODULE_6__.useSeamlyCurrentAgent)();\n const hasError = (0,react_redux__WEBPACK_IMPORTED_MODULE_1__.useSelector)(domains_interrupt_selectors__WEBPACK_IMPORTED_MODULE_9__.selectHasError);\n const isActiveConversation = currentAgent && !hasError;\n const src = isActiveConversation ? currentAgent.avatar : startChatIcon;\n return src ? (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)(\"img\", {\n className: (0,lib_css__WEBPACK_IMPORTED_MODULE_11__.className)(isActiveConversation ? 'avatar' : 'icon'),\n src: src,\n alt: \"\"\n }) : (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)(ui_components_layout_icon__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n name: \"avatar\",\n size: \"32\"\n });\n};\nconst WindowOpenButton = ({\n onClick\n}) => {\n const hasConversation = (0,ui_hooks_seamly_api_hooks__WEBPACK_IMPORTED_MODULE_5__.useSeamlyHasConversation)();\n const {\n t\n } = (0,domains_i18n_hooks__WEBPACK_IMPORTED_MODULE_8__.useI18n)();\n const ariaLabel = hasConversation() ? t('window.openButton.srContinue') : t('window.openButton.srStart');\n const focusSkiplinkTarget = (0,ui_hooks_focus_helper_hooks__WEBPACK_IMPORTED_MODULE_4__.useSkiplinkTargetFocusing)();\n const {\n isOpen\n } = (0,domains_visibility_hooks__WEBPACK_IMPORTED_MODULE_10__.useVisibility)();\n const count = (0,ui_hooks_seamly_state_hooks__WEBPACK_IMPORTED_MODULE_6__.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_12__.jsx)(ui_components_widgets_in_out_transition__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n isActive: !isOpen,\n transitionStartState: ui_components_widgets_in_out_transition__WEBPACK_IMPORTED_MODULE_3__.transitionStartStates.rendered,\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsxs)(\"button\", {\n className: (0,lib_css__WEBPACK_IMPORTED_MODULE_11__.className)('window-open-button'),\n \"aria-label\": ariaLabel,\n \"aria-hidden\": isOpen,\n onClick: handleClick,\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)(\"span\", {\n className: (0,lib_css__WEBPACK_IMPORTED_MODULE_11__.className)('message-count'),\n \"aria-hidden\": \"true\",\n children: !!count && count\n }), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)(ButtonIcon, {})]\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?");
|
|
1710
1732
|
|
|
1711
1733
|
/***/ }),
|
|
1712
1734
|
|
|
@@ -1860,7 +1882,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
1860
1882
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
1861
1883
|
|
|
1862
1884
|
"use strict";
|
|
1863
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"useElementFocusingById\": () => (/* reexport safe */ ui_hooks_focus_helper_hooks__WEBPACK_IMPORTED_MODULE_2__.useElementFocusingById),\n/* harmony export */ \"useEntryTextLimit\": () => (/* reexport safe */ _seamly_state_hooks__WEBPACK_IMPORTED_MODULE_7__.useEntryTextLimit),\n/* harmony export */ \"useEvents\": () => (/* reexport safe */ _seamly_state_hooks__WEBPACK_IMPORTED_MODULE_7__.useEvents),\n/* harmony export */ \"useFileUploadMeta\": () => (/* reexport safe */ _file_upload_hooks__WEBPACK_IMPORTED_MODULE_4__.useFileUploadMeta),\n/* harmony export */ \"useFileUploads\": () => (/* reexport safe */ _file_upload_hooks__WEBPACK_IMPORTED_MODULE_4__.useFileUploads),\n/* harmony export */ \"useFocusIfSeamlyContainedFocus\": () => (/* reexport safe */ ui_hooks_focus_helper_hooks__WEBPACK_IMPORTED_MODULE_2__.useFocusIfSeamlyContainedFocus),\n/* harmony export */ \"useForceUpdate\": () => (/* reexport safe */ _utility_hooks__WEBPACK_IMPORTED_MODULE_13__.useForceUpdate),\n/* harmony export */ \"useGeneratedId\": () => (/* reexport safe */ _utility_hooks__WEBPACK_IMPORTED_MODULE_13__.useGeneratedId),\n/* harmony export */ \"useLastMessageEventId\": () => (/* reexport safe */ _seamly_state_hooks__WEBPACK_IMPORTED_MODULE_7__.useLastMessageEventId),\n/* harmony export */ \"useLiveRegion\": () => (/* reexport safe */ _live_region_hooks__WEBPACK_IMPORTED_MODULE_5__.useLiveRegion),\n/* harmony export */ \"useOptionButton\": () => (/* reexport safe */ _seamly_option_hooks__WEBPACK_IMPORTED_MODULE_6__.useOptionButton),\n/* harmony export */ \"useSeamlyActivityEventHandler\": () => (/* reexport safe */ _use_seamly_activity_event_handler__WEBPACK_IMPORTED_MODULE_8__[\"default\"]),\n/* harmony export */ \"useSeamlyApiContext\": () => (/* reexport safe */ _seamly_api_hooks__WEBPACK_IMPORTED_MODULE_1__.useSeamlyApiContext),\n/* harmony export */ \"useSeamlyAppContainerClassNames\": () => (/* reexport safe */ _component_helper_hooks__WEBPACK_IMPORTED_MODULE_3__.useSeamlyAppContainerClassNames),\n/* harmony export */ \"useSeamlyChat\": () => (/* reexport safe */ _use_seamly_chat__WEBPACK_IMPORTED_MODULE_9__[\"default\"]),\n/* harmony export */ \"useSeamlyCommands\": () => (/* reexport safe */ _use_seamly_commands__WEBPACK_IMPORTED_MODULE_10__[\"default\"]),\n/* harmony export */ \"useSeamlyContainerElement\": () => (/* reexport safe */ ui_hooks_focus_helper_hooks__WEBPACK_IMPORTED_MODULE_2__.useSeamlyContainerElement),\n/* harmony export */ \"useSeamlyConversationUrl\": () => (/* reexport safe */ _seamly_api_hooks__WEBPACK_IMPORTED_MODULE_1__.useSeamlyConversationUrl),\n/* harmony export */ \"useSeamlyCurrentAgent\": () => (/* reexport safe */ _seamly_state_hooks__WEBPACK_IMPORTED_MODULE_7__.useSeamlyCurrentAgent),\n/* harmony export */ \"useSeamlyEventStream\": () => (/* binding */ useSeamlyEventStream),\n/* harmony export */ \"useSeamlyHeaderData\": () => (/* reexport safe */ _seamly_state_hooks__WEBPACK_IMPORTED_MODULE_7__.useSeamlyHeaderData),\n/* harmony export */ \"useSeamlyIdleDetachCountdown\": () => (/* reexport safe */ _use_seamly_idle_detach_countdown__WEBPACK_IMPORTED_MODULE_11__[\"default\"]),\n/* harmony export */ \"useSeamlyIsHistoryLoaded\": () => (/* reexport safe */ _seamly_state_hooks__WEBPACK_IMPORTED_MODULE_7__.useSeamlyIsHistoryLoaded),\n/* harmony export */ \"useSeamlyIsLoading\": () => (/* reexport safe */ _seamly_state_hooks__WEBPACK_IMPORTED_MODULE_7__.useSeamlyIsLoading),\n/* harmony export */ \"useSeamlyLayoutMode\": () => (/* reexport safe */ _seamly_state_hooks__WEBPACK_IMPORTED_MODULE_7__.useSeamlyLayoutMode),\n/* harmony export */ \"useSeamlyLiveRegionContext\": () => (/* reexport safe */ _live_region_hooks__WEBPACK_IMPORTED_MODULE_5__.useSeamlyLiveRegionContext),\n/* harmony export */ \"useSeamlyMessageContainerClassNames\": () => (/* reexport safe */ _component_helper_hooks__WEBPACK_IMPORTED_MODULE_3__.useSeamlyMessageContainerClassNames),\n/* harmony export */ \"useSeamlyOptions\": () => (/* reexport safe */ _seamly_option_hooks__WEBPACK_IMPORTED_MODULE_6__.useSeamlyOptions),\n/* harmony export */ \"useSeamlyParticipant\": () => (/* reexport safe */ _seamly_state_hooks__WEBPACK_IMPORTED_MODULE_7__.useSeamlyParticipant),\n/* harmony export */ \"useSeamlyResumeConversationPrompt\": () => (/* reexport safe */ _use_seamly_resume_conversation_prompt__WEBPACK_IMPORTED_MODULE_12__[\"default\"]),\n/* harmony export */ \"useSeamlyServiceData\": () => (/* reexport safe */ _seamly_state_hooks__WEBPACK_IMPORTED_MODULE_7__.useSeamlyServiceData),\n/* harmony export */ \"useSeamlyServiceInfo\": () => (/* reexport safe */ _seamly_state_hooks__WEBPACK_IMPORTED_MODULE_7__.useSeamlyServiceInfo),\n/* harmony export */ \"useSeamlyStateContext\": () => (/* reexport safe */ _seamly_state_hooks__WEBPACK_IMPORTED_MODULE_7__.useSeamlyStateContext),\n/* harmony export */ \"useSeamlyUnreadCount\": () => (/* reexport safe */ _seamly_state_hooks__WEBPACK_IMPORTED_MODULE_7__.useSeamlyUnreadCount),\n/* harmony export */ \"useSkiplink\": () => (/* reexport safe */ _seamly_state_hooks__WEBPACK_IMPORTED_MODULE_7__.useSkiplink),\n/* harmony export */ \"useSkiplinkTargetFocusing\": () => (/* reexport safe */ ui_hooks_focus_helper_hooks__WEBPACK_IMPORTED_MODULE_2__.useSkiplinkTargetFocusing),\n/* harmony export */ \"useStableCallback\": () => (/* reexport safe */ _utility_hooks__WEBPACK_IMPORTED_MODULE_13__.useStableCallback)\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 ui_hooks_focus_helper_hooks__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ui/hooks/focus-helper-hooks */ \"./src/javascripts/ui/hooks/focus-helper-hooks.js\");\n/* harmony import */ var _component_helper_hooks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./component-helper-hooks */ \"./src/javascripts/ui/hooks/component-helper-hooks.js\");\n/* harmony import */ var _file_upload_hooks__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./file-upload-hooks */ \"./src/javascripts/ui/hooks/file-upload-hooks.js\");\n/* harmony import */ var _live_region_hooks__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./live-region-hooks */ \"./src/javascripts/ui/hooks/live-region-hooks.js\");\n/* harmony import */ var _seamly_option_hooks__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./seamly-option-hooks */ \"./src/javascripts/ui/hooks/seamly-option-hooks.js\");\n/* harmony import */ var _seamly_state_hooks__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./seamly-state-hooks */ \"./src/javascripts/ui/hooks/seamly-state-hooks.ts\");\n/* harmony import */ var _use_seamly_activity_event_handler__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./use-seamly-activity-event-handler */ \"./src/javascripts/ui/hooks/use-seamly-activity-event-handler.js\");\n/* harmony import */ var _use_seamly_chat__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./use-seamly-chat */ \"./src/javascripts/ui/hooks/use-seamly-chat.
|
|
1885
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"useElementFocusingById\": () => (/* reexport safe */ ui_hooks_focus_helper_hooks__WEBPACK_IMPORTED_MODULE_2__.useElementFocusingById),\n/* harmony export */ \"useEntryTextLimit\": () => (/* reexport safe */ _seamly_state_hooks__WEBPACK_IMPORTED_MODULE_7__.useEntryTextLimit),\n/* harmony export */ \"useEvents\": () => (/* reexport safe */ _seamly_state_hooks__WEBPACK_IMPORTED_MODULE_7__.useEvents),\n/* harmony export */ \"useFileUploadMeta\": () => (/* reexport safe */ _file_upload_hooks__WEBPACK_IMPORTED_MODULE_4__.useFileUploadMeta),\n/* harmony export */ \"useFileUploads\": () => (/* reexport safe */ _file_upload_hooks__WEBPACK_IMPORTED_MODULE_4__.useFileUploads),\n/* harmony export */ \"useFocusIfSeamlyContainedFocus\": () => (/* reexport safe */ ui_hooks_focus_helper_hooks__WEBPACK_IMPORTED_MODULE_2__.useFocusIfSeamlyContainedFocus),\n/* harmony export */ \"useForceUpdate\": () => (/* reexport safe */ _utility_hooks__WEBPACK_IMPORTED_MODULE_13__.useForceUpdate),\n/* harmony export */ \"useGeneratedId\": () => (/* reexport safe */ _utility_hooks__WEBPACK_IMPORTED_MODULE_13__.useGeneratedId),\n/* harmony export */ \"useLastMessageEventId\": () => (/* reexport safe */ _seamly_state_hooks__WEBPACK_IMPORTED_MODULE_7__.useLastMessageEventId),\n/* harmony export */ \"useLiveRegion\": () => (/* reexport safe */ _live_region_hooks__WEBPACK_IMPORTED_MODULE_5__.useLiveRegion),\n/* harmony export */ \"useOptionButton\": () => (/* reexport safe */ _seamly_option_hooks__WEBPACK_IMPORTED_MODULE_6__.useOptionButton),\n/* harmony export */ \"useSeamlyActivityEventHandler\": () => (/* reexport safe */ _use_seamly_activity_event_handler__WEBPACK_IMPORTED_MODULE_8__[\"default\"]),\n/* harmony export */ \"useSeamlyApiContext\": () => (/* reexport safe */ _seamly_api_hooks__WEBPACK_IMPORTED_MODULE_1__.useSeamlyApiContext),\n/* harmony export */ \"useSeamlyAppContainerClassNames\": () => (/* reexport safe */ _component_helper_hooks__WEBPACK_IMPORTED_MODULE_3__.useSeamlyAppContainerClassNames),\n/* harmony export */ \"useSeamlyChat\": () => (/* reexport safe */ _use_seamly_chat__WEBPACK_IMPORTED_MODULE_9__[\"default\"]),\n/* harmony export */ \"useSeamlyCommands\": () => (/* reexport safe */ _use_seamly_commands__WEBPACK_IMPORTED_MODULE_10__[\"default\"]),\n/* harmony export */ \"useSeamlyContainerElement\": () => (/* reexport safe */ ui_hooks_focus_helper_hooks__WEBPACK_IMPORTED_MODULE_2__.useSeamlyContainerElement),\n/* harmony export */ \"useSeamlyConversationUrl\": () => (/* reexport safe */ _seamly_api_hooks__WEBPACK_IMPORTED_MODULE_1__.useSeamlyConversationUrl),\n/* harmony export */ \"useSeamlyCurrentAgent\": () => (/* reexport safe */ _seamly_state_hooks__WEBPACK_IMPORTED_MODULE_7__.useSeamlyCurrentAgent),\n/* harmony export */ \"useSeamlyEventStream\": () => (/* binding */ useSeamlyEventStream),\n/* harmony export */ \"useSeamlyHeaderData\": () => (/* reexport safe */ _seamly_state_hooks__WEBPACK_IMPORTED_MODULE_7__.useSeamlyHeaderData),\n/* harmony export */ \"useSeamlyIdleDetachCountdown\": () => (/* reexport safe */ _use_seamly_idle_detach_countdown__WEBPACK_IMPORTED_MODULE_11__[\"default\"]),\n/* harmony export */ \"useSeamlyIsHistoryLoaded\": () => (/* reexport safe */ _seamly_state_hooks__WEBPACK_IMPORTED_MODULE_7__.useSeamlyIsHistoryLoaded),\n/* harmony export */ \"useSeamlyIsLoading\": () => (/* reexport safe */ _seamly_state_hooks__WEBPACK_IMPORTED_MODULE_7__.useSeamlyIsLoading),\n/* harmony export */ \"useSeamlyLayoutMode\": () => (/* reexport safe */ _seamly_state_hooks__WEBPACK_IMPORTED_MODULE_7__.useSeamlyLayoutMode),\n/* harmony export */ \"useSeamlyLiveRegionContext\": () => (/* reexport safe */ _live_region_hooks__WEBPACK_IMPORTED_MODULE_5__.useSeamlyLiveRegionContext),\n/* harmony export */ \"useSeamlyMessageContainerClassNames\": () => (/* reexport safe */ _component_helper_hooks__WEBPACK_IMPORTED_MODULE_3__.useSeamlyMessageContainerClassNames),\n/* harmony export */ \"useSeamlyOptions\": () => (/* reexport safe */ _seamly_option_hooks__WEBPACK_IMPORTED_MODULE_6__.useSeamlyOptions),\n/* harmony export */ \"useSeamlyParticipant\": () => (/* reexport safe */ _seamly_state_hooks__WEBPACK_IMPORTED_MODULE_7__.useSeamlyParticipant),\n/* harmony export */ \"useSeamlyResumeConversationPrompt\": () => (/* reexport safe */ _use_seamly_resume_conversation_prompt__WEBPACK_IMPORTED_MODULE_12__[\"default\"]),\n/* harmony export */ \"useSeamlyServiceData\": () => (/* reexport safe */ _seamly_state_hooks__WEBPACK_IMPORTED_MODULE_7__.useSeamlyServiceData),\n/* harmony export */ \"useSeamlyServiceInfo\": () => (/* reexport safe */ _seamly_state_hooks__WEBPACK_IMPORTED_MODULE_7__.useSeamlyServiceInfo),\n/* harmony export */ \"useSeamlyStateContext\": () => (/* reexport safe */ _seamly_state_hooks__WEBPACK_IMPORTED_MODULE_7__.useSeamlyStateContext),\n/* harmony export */ \"useSeamlyUnreadCount\": () => (/* reexport safe */ _seamly_state_hooks__WEBPACK_IMPORTED_MODULE_7__.useSeamlyUnreadCount),\n/* harmony export */ \"useSkiplink\": () => (/* reexport safe */ _seamly_state_hooks__WEBPACK_IMPORTED_MODULE_7__.useSkiplink),\n/* harmony export */ \"useSkiplinkTargetFocusing\": () => (/* reexport safe */ ui_hooks_focus_helper_hooks__WEBPACK_IMPORTED_MODULE_2__.useSkiplinkTargetFocusing),\n/* harmony export */ \"useStableCallback\": () => (/* reexport safe */ _utility_hooks__WEBPACK_IMPORTED_MODULE_13__.useStableCallback)\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 ui_hooks_focus_helper_hooks__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ui/hooks/focus-helper-hooks */ \"./src/javascripts/ui/hooks/focus-helper-hooks.js\");\n/* harmony import */ var _component_helper_hooks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./component-helper-hooks */ \"./src/javascripts/ui/hooks/component-helper-hooks.js\");\n/* harmony import */ var _file_upload_hooks__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./file-upload-hooks */ \"./src/javascripts/ui/hooks/file-upload-hooks.js\");\n/* harmony import */ var _live_region_hooks__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./live-region-hooks */ \"./src/javascripts/ui/hooks/live-region-hooks.js\");\n/* harmony import */ var _seamly_option_hooks__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./seamly-option-hooks */ \"./src/javascripts/ui/hooks/seamly-option-hooks.js\");\n/* harmony import */ var _seamly_state_hooks__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./seamly-state-hooks */ \"./src/javascripts/ui/hooks/seamly-state-hooks.ts\");\n/* harmony import */ var _use_seamly_activity_event_handler__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./use-seamly-activity-event-handler */ \"./src/javascripts/ui/hooks/use-seamly-activity-event-handler.js\");\n/* harmony import */ var _use_seamly_chat__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./use-seamly-chat */ \"./src/javascripts/ui/hooks/use-seamly-chat.ts\");\n/* harmony import */ var _use_seamly_commands__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./use-seamly-commands */ \"./src/javascripts/ui/hooks/use-seamly-commands.js\");\n/* harmony import */ var _use_seamly_idle_detach_countdown__WEBPACK_IMPORTED_MODULE_11__ = __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_12__ = __webpack_require__(/*! ./use-seamly-resume-conversation-prompt */ \"./src/javascripts/ui/hooks/use-seamly-resume-conversation-prompt.js\");\n/* harmony import */ var _utility_hooks__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./utility-hooks */ \"./src/javascripts/ui/hooks/utility-hooks.js\");\n\n// Import extracted hooks here for use inside this file\n\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// 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\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.connectionInfo && api.conversation?.channel) {\n const {\n channel\n } = api.conversation;\n channel.onMessage = (type, payload) => {\n if (!filterFn || filterFn({\n type,\n payload\n })) {\n nextFn({\n type,\n payload\n });\n }\n return payload;\n };\n }\n }, [nextFn, filterFn, api.connectionInfo, api.conversation]);\n};\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/hooks/seamly-hooks.js?");
|
|
1864
1886
|
|
|
1865
1887
|
/***/ }),
|
|
1866
1888
|
|
|
@@ -1908,17 +1930,6 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
1908
1930
|
|
|
1909
1931
|
/***/ }),
|
|
1910
1932
|
|
|
1911
|
-
/***/ "./src/javascripts/ui/hooks/use-seamly-chat.js":
|
|
1912
|
-
/*!*****************************************************!*\
|
|
1913
|
-
!*** ./src/javascripts/ui/hooks/use-seamly-chat.js ***!
|
|
1914
|
-
\*****************************************************/
|
|
1915
|
-
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
1916
|
-
|
|
1917
|
-
"use strict";
|
|
1918
|
-
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 react_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-redux */ \"./node_modules/react-redux/es/index.js\");\n/* harmony import */ var ui_hooks_use_seamly_commands__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ui/hooks/use-seamly-commands */ \"./src/javascripts/ui/hooks/use-seamly-commands.js\");\n/* harmony import */ var domains_i18n_hooks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! domains/i18n/hooks */ \"./src/javascripts/domains/i18n/hooks.ts\");\n/* harmony import */ var domains_store_slice__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! domains/store/slice */ \"./src/javascripts/domains/store/slice.ts\");\n/* harmony import */ var domains_visibility_hooks__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! domains/visibility/hooks */ \"./src/javascripts/domains/visibility/hooks.ts\");\n/* harmony import */ var _domains_visibility_selectors__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../domains/visibility/selectors */ \"./src/javascripts/domains/visibility/selectors.ts\");\n/* harmony import */ var _live_region_hooks__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./live-region-hooks */ \"./src/javascripts/ui/hooks/live-region-hooks.js\");\n/* harmony import */ var _seamly_api_hooks__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./seamly-api-hooks */ \"./src/javascripts/ui/hooks/seamly-api-hooks.js\");\n/* harmony import */ var _seamly_state_hooks__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./seamly-state-hooks */ \"./src/javascripts/ui/hooks/seamly-state-hooks.ts\");\n\n\n\n\n\n\n\n\n\n\nconst useSeamlyChat = () => {\n const events = (0,_seamly_state_hooks__WEBPACK_IMPORTED_MODULE_9__.useEvents)();\n const {\n t\n } = (0,domains_i18n_hooks__WEBPACK_IMPORTED_MODULE_3__.useI18n)();\n const {\n isInline,\n isWindow,\n isApp\n } = (0,_seamly_state_hooks__WEBPACK_IMPORTED_MODULE_9__.useSeamlyLayoutMode)();\n const {\n isOpen,\n isVisible\n } = (0,domains_visibility_hooks__WEBPACK_IMPORTED_MODULE_5__.useVisibility)();\n const showInlineView = (0,react_redux__WEBPACK_IMPORTED_MODULE_1__.useSelector)(_domains_visibility_selectors__WEBPACK_IMPORTED_MODULE_6__.selectShowInlineView);\n const dispatch = (0,react_redux__WEBPACK_IMPORTED_MODULE_1__.useDispatch)();\n const spinnerTimeout = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n const {\n start,\n connect,\n apiConfigReady,\n apiConnected\n } = (0,ui_hooks_use_seamly_commands__WEBPACK_IMPORTED_MODULE_2__[\"default\"])();\n const hasConversation = (0,_seamly_api_hooks__WEBPACK_IMPORTED_MODULE_8__.useSeamlyHasConversation)();\n const connectCalled = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)(false);\n const {\n sendAssertive\n } = (0,_live_region_hooks__WEBPACK_IMPORTED_MODULE_7__.useLiveRegion)();\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) {\n return;\n }\n if (isOpen) {\n sendAssertive(t('window.srTexts.onOpen'));\n } else {\n sendAssertive(t('window.srTexts.onClose'));\n }\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((0,domains_store_slice__WEBPACK_IMPORTED_MODULE_4__.setIsLoading)(true));\n }, 500);\n return () => {\n clearTimeout(spinnerTimeout.current);\n };\n }, [dispatch]);\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (events.length) {\n spinnerTimeout.current = setTimeout(() => {\n dispatch((0,domains_store_slice__WEBPACK_IMPORTED_MODULE_4__.setIsLoading)(false));\n }, 5000);\n }\n return () => {\n clearTimeout(spinnerTimeout.current);\n };\n }, [events, dispatch]);\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n // This is needed to reset the ref to allow connect and start to happen again.\n // Mostly due to Interrupt situations and a reset being called.\n if (!apiConfigReady || !apiConnected) {\n connectCalled.current = false;\n }\n }, [apiConfigReady, apiConnected]);\n const connectAndStart = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n // We don't connect if we are already connected to the api to avoid multiple in-flight connection processes.\n if (!apiConnected) {\n connectCalled.current = true;\n await connect();\n }\n\n // We only start a conversation when the chat interface is either app, 'open' or if using the inline view if it's 'open' or 'minimized'.\n if (isApp || isOpen || isVisible && isInline) {\n start();\n }\n }, [apiConnected, connect, isApp, isInline, isOpen, isVisible, start]);\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n // We dont't connect or start when the apiConfig is not ready yet.\n // We also keep track of whether start has been called to avoid multiple in-flight connection processes.\n // We check if the window view is not open and no conversation is started yet.\n // Lastly we check if the inline view is not scrolled in to view.\n if (!apiConfigReady || connectCalled.current || isWindow && !isOpen && !hasConversation() || isInline && (!isVisible || !showInlineView)) {\n return;\n }\n if (hasConversation() && isOpen) {\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((0,domains_store_slice__WEBPACK_IMPORTED_MODULE_4__.setIsLoading)(false));\n }\n connectAndStart();\n }, [apiConfigReady, connectAndStart, dispatch, hasConversation, isInline, isOpen, isWindow, isVisible, showInlineView]);\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?");
|
|
1919
|
-
|
|
1920
|
-
/***/ }),
|
|
1921
|
-
|
|
1922
1933
|
/***/ "./src/javascripts/ui/hooks/use-seamly-commands.js":
|
|
1923
1934
|
/*!*********************************************************!*\
|
|
1924
1935
|
!*** ./src/javascripts/ui/hooks/use-seamly-commands.js ***!
|
|
@@ -2879,7 +2890,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
2879
2890
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
2880
2891
|
|
|
2881
2892
|
"use strict";
|
|
2882
|
-
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_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__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 react_redux__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-redux */ \"./node_modules/react-redux/es/index.js\");\n/* harmony import */ var domains_app_slice__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! domains/app/slice */ \"./src/javascripts/domains/app/slice.ts\");\n/* harmony import */ var domains_forms_context__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! domains/forms/context */ \"./src/javascripts/domains/forms/context.ts\");\n/* harmony import */ var domains_forms_hooks__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! domains/forms/hooks */ \"./src/javascripts/domains/forms/hooks.ts\");\n/* harmony import */ var domains_forms_selectors__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! domains/forms/selectors */ \"./src/javascripts/domains/forms/selectors.ts\");\n/* harmony import */ var domains_forms_slice__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! domains/forms/slice */ \"./src/javascripts/domains/forms/slice.ts\");\nvar __rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\n\n\n\n\n\n\n\n\nfunction FormProvider(_a) {\n var { children, formId, persistData, onError, onSubmit, validationSchema } = _a, props = __rest(_a, [\"children\", \"formId\", \"persistData\", \"onError\", \"onSubmit\", \"validationSchema\"]);\n const dispatch = (0,react_redux__WEBPACK_IMPORTED_MODULE_2__.useDispatch)();\n const values = (0,react_redux__WEBPACK_IMPORTED_MODULE_2__.useSelector)((store) => (0,domains_forms_selectors__WEBPACK_IMPORTED_MODULE_6__.getFormValuesByFormId)(store, { formId }));\n const [isSubmitted, setIsSubmitted] = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [externalErrors, setExternalErrors] = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_1__.useState)({});\n const { isValid: validationIsValid, errors: validationErrors } = (0,domains_forms_hooks__WEBPACK_IMPORTED_MODULE_5__.useValidations)(values, validationSchema);\n const errors = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_1__.useMemo)(() => (Object.assign(Object.assign({}, validationErrors), externalErrors)), [validationErrors, externalErrors]);\n // register\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_1__.useLayoutEffect)(() => {\n // register form in redux store\n dispatch((0,domains_forms_slice__WEBPACK_IMPORTED_MODULE_7__.registerForm)({ formId, persistData }));\n }, [formId, persistData, dispatch]);\n // deregister\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_1__.useEffect)(() => {\n return () => {\n // deregister form from redux store\n dispatch((0,domains_forms_slice__WEBPACK_IMPORTED_MODULE_7__.deregisterForm)({ formId }));\n };\n }, [formId, persistData, dispatch]);\n const updateControlValue = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_1__.useCallback)((name, value) => {\n dispatch((0,domains_forms_slice__WEBPACK_IMPORTED_MODULE_7__.updateControlValue)({ formId, name, value }));\n }, [formId, dispatch]);\n const updateControlTouched = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_1__.useCallback)((name, touched) => {\n dispatch((0,domains_forms_slice__WEBPACK_IMPORTED_MODULE_7__.updateControlTouched)({ formId, name, touched }));\n }, [dispatch, formId]);\n // Function to manually set an error\n const setError = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_1__.useCallback)((name, error) => {\n setExternalErrors((val) => {\n return Object.assign(Object.assign({}, val), { [name]: error });\n });\n }, [setExternalErrors]);\n const handleSubmit = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_1__.useCallback)((e) => {\n
|
|
2893
|
+
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_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__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 react_redux__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-redux */ \"./node_modules/react-redux/es/index.js\");\n/* harmony import */ var domains_app_slice__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! domains/app/slice */ \"./src/javascripts/domains/app/slice.ts\");\n/* harmony import */ var domains_forms_context__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! domains/forms/context */ \"./src/javascripts/domains/forms/context.ts\");\n/* harmony import */ var domains_forms_hooks__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! domains/forms/hooks */ \"./src/javascripts/domains/forms/hooks.ts\");\n/* harmony import */ var domains_forms_selectors__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! domains/forms/selectors */ \"./src/javascripts/domains/forms/selectors.ts\");\n/* harmony import */ var domains_forms_slice__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! domains/forms/slice */ \"./src/javascripts/domains/forms/slice.ts\");\nvar __rest = (undefined && undefined.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\n\n\n\n\n\n\n\n\nfunction FormProvider(_a) {\n var { children, formId, persistData, onError, onSubmit, validationSchema } = _a, props = __rest(_a, [\"children\", \"formId\", \"persistData\", \"onError\", \"onSubmit\", \"validationSchema\"]);\n const dispatch = (0,react_redux__WEBPACK_IMPORTED_MODULE_2__.useDispatch)();\n const values = (0,react_redux__WEBPACK_IMPORTED_MODULE_2__.useSelector)((store) => (0,domains_forms_selectors__WEBPACK_IMPORTED_MODULE_6__.getFormValuesByFormId)(store, { formId }));\n const [isSubmitted, setIsSubmitted] = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [externalErrors, setExternalErrors] = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_1__.useState)({});\n const { isValid: validationIsValid, errors: validationErrors } = (0,domains_forms_hooks__WEBPACK_IMPORTED_MODULE_5__.useValidations)(values, validationSchema);\n const errors = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_1__.useMemo)(() => (Object.assign(Object.assign({}, validationErrors), externalErrors)), [validationErrors, externalErrors]);\n // register\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_1__.useLayoutEffect)(() => {\n // register form in redux store\n dispatch((0,domains_forms_slice__WEBPACK_IMPORTED_MODULE_7__.registerForm)({ formId, persistData }));\n }, [formId, persistData, dispatch]);\n // deregister\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_1__.useEffect)(() => {\n return () => {\n // deregister form from redux store\n dispatch((0,domains_forms_slice__WEBPACK_IMPORTED_MODULE_7__.deregisterForm)({ formId }));\n };\n }, [formId, persistData, dispatch]);\n const updateControlValue = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_1__.useCallback)((name, value) => {\n dispatch((0,domains_forms_slice__WEBPACK_IMPORTED_MODULE_7__.updateControlValue)({ formId, name, value }));\n }, [formId, dispatch]);\n const updateControlTouched = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_1__.useCallback)((name, touched) => {\n dispatch((0,domains_forms_slice__WEBPACK_IMPORTED_MODULE_7__.updateControlTouched)({ formId, name, touched }));\n }, [dispatch, formId]);\n // Function to manually set an error\n const setError = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_1__.useCallback)((name, error) => {\n setExternalErrors((val) => {\n return Object.assign(Object.assign({}, val), { [name]: error });\n });\n }, [setExternalErrors]);\n const handleSubmit = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_1__.useCallback)((e) => {\n e.preventDefault();\n // If the submitter is set to being aria-disabled, block the submit action\n const ariaDisabled = e.submitter.getAttribute('aria-disabled') === 'true';\n setIsSubmitted(!ariaDisabled);\n if (!ariaDisabled && validationIsValid) {\n dispatch((0,domains_app_slice__WEBPACK_IMPORTED_MODULE_3__.setHasResponded)(true));\n onSubmit(values, { updateControlValue, setError });\n }\n }, [\n validationIsValid,\n dispatch,\n onSubmit,\n values,\n updateControlValue,\n setError,\n ]);\n (0,preact_hooks__WEBPACK_IMPORTED_MODULE_1__.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_1__.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 }), [\n formId,\n values,\n errors,\n isSubmitted,\n handleSubmit,\n validationSchema,\n updateControlValue,\n updateControlTouched,\n ]);\n if (!formId) {\n console.error('\"formId\" is required.');\n return null;\n }\n if (!onSubmit) {\n console.error('\"onSubmit\" is required.');\n return null;\n }\n return ((0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(domains_forms_context__WEBPACK_IMPORTED_MODULE_4__.Provider, Object.assign({}, props, { value: contextValue }, { children: children })));\n}\n\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/domains/forms/provider.tsx?");
|
|
2883
2894
|
|
|
2884
2895
|
/***/ }),
|
|
2885
2896
|
|
|
@@ -2934,7 +2945,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
2934
2945
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
2935
2946
|
|
|
2936
2947
|
"use strict";
|
|
2937
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ TranslationStatus)\n/* harmony export */ });\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var
|
|
2948
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ TranslationStatus)\n/* harmony export */ });\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-redux */ \"./node_modules/react-redux/es/index.js\");\n/* harmony import */ var ui_components_translation_chat_status__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ui/components/translation-chat-status */ \"./src/javascripts/ui/components/translation-chat-status/index.tsx\");\n/* harmony import */ var ui_components_translation_proposal__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ui/components/translation-proposal */ \"./src/javascripts/ui/components/translation-proposal/index.tsx\");\n/* harmony import */ var domains_interrupt_selectors__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! domains/interrupt/selectors */ \"./src/javascripts/domains/interrupt/selectors.ts\");\n/* harmony import */ var domains_translations_hooks__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! domains/translations/hooks */ \"./src/javascripts/domains/translations/hooks.ts\");\n\n\n\n\n\n\nfunction TranslationStatus() {\n const hasError = (0,react_redux__WEBPACK_IMPORTED_MODULE_1__.useSelector)(domains_interrupt_selectors__WEBPACK_IMPORTED_MODULE_4__.selectHasError);\n const { isActive } = (0,domains_translations_hooks__WEBPACK_IMPORTED_MODULE_5__.useTranslations)();\n if (hasError) {\n return null;\n }\n return !isActive ? (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(ui_components_translation_proposal__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {}) : (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(ui_components_translation_chat_status__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {});\n}\n\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/domains/translations/components/translation-status.tsx?");
|
|
2938
2949
|
|
|
2939
2950
|
/***/ }),
|
|
2940
2951
|
|
|
@@ -3033,7 +3044,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
3033
3044
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
3034
3045
|
|
|
3035
3046
|
"use strict";
|
|
3036
|
-
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_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var ui_hooks_use_seamly_chat__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ui/hooks/use-seamly-chat */ \"./src/javascripts/ui/hooks/use-seamly-chat.
|
|
3047
|
+
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_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var ui_hooks_use_seamly_chat__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ui/hooks/use-seamly-chat */ \"./src/javascripts/ui/hooks/use-seamly-chat.ts\");\n\n\nconst SeamlyChat = ({ children }) => {\n (0,ui_hooks_use_seamly_chat__WEBPACK_IMPORTED_MODULE_1__[\"default\"])();\n return (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, { children: children });\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SeamlyChat);\n\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/core/seamly-chat.tsx?");
|
|
3037
3048
|
|
|
3038
3049
|
/***/ }),
|
|
3039
3050
|
|
|
@@ -3066,7 +3077,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
3066
3077
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
3067
3078
|
|
|
3068
3079
|
"use strict";
|
|
3069
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ TranslationChatStatus)\n/* harmony export */ });\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__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
|
|
3080
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ TranslationChatStatus)\n/* harmony export */ });\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__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 react_redux__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-redux */ \"./node_modules/react-redux/es/index.js\");\n/* harmony import */ var ui_components_chat_status__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ui/components/chat-status */ \"./src/javascripts/ui/components/chat-status/index.tsx\");\n/* harmony import */ var ui_hooks_focus_helper_hooks__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ui/hooks/focus-helper-hooks */ \"./src/javascripts/ui/hooks/focus-helper-hooks.js\");\n/* harmony import */ var domains_i18n_hooks__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! domains/i18n/hooks */ \"./src/javascripts/domains/i18n/hooks.ts\");\n/* harmony import */ var domains_interrupt_selectors__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! domains/interrupt/selectors */ \"./src/javascripts/domains/interrupt/selectors.ts\");\n/* harmony import */ var domains_translations_hooks__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! domains/translations/hooks */ \"./src/javascripts/domains/translations/hooks.ts\");\n\n\n\n\n\n\n\n\nfunction TranslationChatStatus() {\n const { t } = (0,domains_i18n_hooks__WEBPACK_IMPORTED_MODULE_5__.useI18n)();\n const { id } = (0,domains_translations_hooks__WEBPACK_IMPORTED_MODULE_7__.useTranslationsContainer)();\n const hasError = (0,react_redux__WEBPACK_IMPORTED_MODULE_2__.useSelector)(domains_interrupt_selectors__WEBPACK_IMPORTED_MODULE_6__.selectHasError);\n const { disableTranslations, currentLocale } = (0,domains_translations_hooks__WEBPACK_IMPORTED_MODULE_7__.useTranslations)();\n const localeNativeName = (0,domains_translations_hooks__WEBPACK_IMPORTED_MODULE_7__.useLocaleNativeName)(currentLocale);\n const focusSkiplinkTarget = (0,ui_hooks_focus_helper_hooks__WEBPACK_IMPORTED_MODULE_4__.useSkiplinkTargetFocusing)();\n const label = t('translations.status.label', { language: localeNativeName });\n const handleClickStop = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_1__.useCallback)(() => {\n disableTranslations();\n focusSkiplinkTarget();\n }, [disableTranslations, focusSkiplinkTarget]);\n if (hasError) {\n return null;\n }\n return ((0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(ui_components_chat_status__WEBPACK_IMPORTED_MODULE_3__[\"default\"], { handleClose: handleClickStop, title: label, id: id, closeButtonText: t('translations.status.stopText'), srCloseButtonText: t('translations.status.srStopText') }));\n}\n\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/translation-chat-status/index.tsx?");
|
|
3070
3081
|
|
|
3071
3082
|
/***/ }),
|
|
3072
3083
|
|