@seamly/web-ui 21.0.1 → 21.0.2-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/dist/lib/components.js +18 -19
- package/build/dist/lib/components.min.js +1 -1
- package/build/dist/lib/index.debug.js +4 -4
- package/build/dist/lib/index.debug.min.js +1 -1
- package/build/dist/lib/index.js +19 -20
- package/build/dist/lib/index.min.js +1 -1
- package/build/dist/lib/standalone.js +18 -20
- package/build/dist/lib/standalone.min.js +1 -1
- package/build/dist/lib/style-guide.js +19 -20
- package/build/dist/lib/style-guide.min.js +1 -1
- package/build/dist/lib/utils.js +19 -20
- package/build/dist/lib/utils.min.js +1 -1
- package/package.json +1 -1
- package/src/javascripts/ui/components/layout/chat-frame.js +2 -4
- package/src/javascripts/ui/components/layout/interrupt.js +2 -0
- package/src/javascripts/ui/components/view/window-view/collapse-button.js +8 -6
|
@@ -146,7 +146,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
146
146
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
147
147
|
|
|
148
148
|
"use strict";
|
|
149
|
-
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(connectionState => {\n this.connected = ['attach_channel_succeeded', 'join_channel_succeeded'].includes(connectionState);\n __classPrivateFieldSet(this, _API_ready, connectionState === 'attach_channel_succeeded', \"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(connectionState => {\n const connected = connectionState === 'join_channel_succeeded';\n const ready = connectionState === 'attach_channel_succeeded';\n if (waitForReady ? ready : connected || ready) {\n this.send(command, payload, waitForReady);\n }\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.1\",\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?");
|
|
149
|
+
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(connectionState => {\n this.connected = ['attach_channel_succeeded', 'join_channel_succeeded'].includes(connectionState);\n __classPrivateFieldSet(this, _API_ready, connectionState === 'attach_channel_succeeded', \"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(connectionState => {\n const connected = connectionState === 'join_channel_succeeded';\n const ready = connectionState === 'attach_channel_succeeded';\n if (waitForReady ? ready : connected || ready) {\n this.send(command, payload, waitForReady);\n }\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.2-beta.1\",\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?");
|
|
150
150
|
|
|
151
151
|
/***/ }),
|
|
152
152
|
|
|
@@ -1454,7 +1454,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
1454
1454
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
1455
1455
|
|
|
1456
1456
|
"use strict";
|
|
1457
|
-
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_app_options__WEBPACK_IMPORTED_MODULE_0__ = __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_1__ = __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_2__ = __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_3__ = __webpack_require__(/*! ui/components/view/window-view/collapse-button */ \"./src/javascripts/ui/components/view/window-view/collapse-button.js\");\n/* harmony import */ var
|
|
1457
|
+
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_app_options__WEBPACK_IMPORTED_MODULE_0__ = __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_1__ = __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_2__ = __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_3__ = __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_hooks__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! domains/interrupt/hooks */ \"./src/javascripts/domains/interrupt/hooks.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 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__);\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) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n\n\n\n\n\n\n\n\n\n\nfunction ChatFrame({\n children,\n interruptComponent: InterruptComponent\n}) {\n const {\n hasInterrupt,\n meta\n } = (0,domains_interrupt_hooks__WEBPACK_IMPORTED_MODULE_4__.useInterrupt)();\n const {\n isOpen\n } = (0,domains_visibility_hooks__WEBPACK_IMPORTED_MODULE_6__.useVisibility)();\n if (hasInterrupt) {\n if (isOpen) {\n return (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsx)(InterruptComponent, _objectSpread({}, meta));\n }\n return null;\n }\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__.jsxs)(ui_components_conversation_event_chat_scroll_chat_scroll_provider__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsxs)(\"div\", {\n className: (0,lib_css__WEBPACK_IMPORTED_MODULE_7__.className)('chat__container__header'),\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsx)(domains_translations_components_translation_status__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {}), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsx)(ui_components_view_window_view_collapse_button__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {})]\n }), children]\n }), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsx)(ui_components_entry_entry_container__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {}), isOpen && (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_8__.jsx)(ui_components_app_options__WEBPACK_IMPORTED_MODULE_0__[\"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?");
|
|
1458
1458
|
|
|
1459
1459
|
/***/ }),
|
|
1460
1460
|
|
|
@@ -1520,7 +1520,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
1520
1520
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
1521
1521
|
|
|
1522
1522
|
"use strict";
|
|
1523
|
-
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
|
|
1523
|
+
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 lib_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lib/css */ \"./src/javascripts/lib/css.js\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__);\n\n\n\n\n\n\n\nconst Interrupt = ({\n originalError,\n title,\n message,\n buttonText,\n action,\n srText\n}) => {\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 && seamlyCommands[action]) {\n seamlyCommands[action]();\n }\n }, [action, seamlyCommands, isExpiredError]);\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_4__.jsxs)(\"section\", {\n className: (0,lib_css__WEBPACK_IMPORTED_MODULE_3__.className)('interrupt'),\n \"aria-labelledby\": headingId,\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(ui_components_view_window_view_collapse_button__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {}), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(\"div\", {\n className: (0,lib_css__WEBPACK_IMPORTED_MODULE_3__.className)('interrupt__body'),\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"h2\", {\n id: headingId,\n className: (0,lib_css__WEBPACK_IMPORTED_MODULE_3__.className)('interrupt__title'),\n children: title\n }), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"p\", {\n className: (0,lib_css__WEBPACK_IMPORTED_MODULE_3__.className)('interrupt__message'),\n children: message\n }), buttonText && action && (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"div\", {\n className: (0,lib_css__WEBPACK_IMPORTED_MODULE_3__.className)('interrupt__actions'),\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"button\", {\n type: \"button\",\n className: (0,lib_css__WEBPACK_IMPORTED_MODULE_3__.className)('button', 'button--primary'),\n onClick: onClickHandler,\n children: buttonText\n })\n })]\n })]\n }) : (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.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?");
|
|
1524
1524
|
|
|
1525
1525
|
/***/ }),
|
|
1526
1526
|
|
|
@@ -1674,7 +1674,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
1674
1674
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
1675
1675
|
|
|
1676
1676
|
"use strict";
|
|
1677
|
-
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
|
|
1677
|
+
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_icon__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ui/components/layout/icon */ \"./src/javascripts/ui/components/layout/icon.js\");\n/* harmony import */ var ui_hooks_seamly_state_hooks__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ui/hooks/seamly-state-hooks */ \"./src/javascripts/ui/hooks/seamly-state-hooks.ts\");\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 domains_visibility_hooks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! domains/visibility/hooks */ \"./src/javascripts/domains/visibility/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\nconst CollapseButton = () => {\n const {\n t\n } = (0,domains_i18n_hooks__WEBPACK_IMPORTED_MODULE_2__.useI18n)();\n const {\n isOpen,\n closeChat\n } = (0,domains_visibility_hooks__WEBPACK_IMPORTED_MODULE_3__.useVisibility)();\n const {\n isWindow\n } = (0,ui_hooks_seamly_state_hooks__WEBPACK_IMPORTED_MODULE_1__.useSeamlyLayoutMode)();\n return isOpen && isWindow ? (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(\"button\", {\n type: \"button\",\n className: (0,lib_css__WEBPACK_IMPORTED_MODULE_4__.className)('button', 'collapse-button'),\n onClick: closeChat,\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(ui_components_layout_icon__WEBPACK_IMPORTED_MODULE_0__[\"default\"], {\n name: \"chevronDown\",\n size: \"32\",\n alt: t('window.srCollapseButton')\n })\n }) : null;\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (CollapseButton);\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/view/window-view/collapse-button.js?");
|
|
1678
1678
|
|
|
1679
1679
|
/***/ }),
|
|
1680
1680
|
|