@seamly/web-ui 18.3.0 → 18.3.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.
@@ -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 */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _lib_redux_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../lib/redux-helpers */ \"./src/javascripts/lib/redux-helpers/index.js\");\n/* harmony import */ var _actions__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./actions */ \"./src/javascripts/domains/forms/actions.js\");\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n\n\nconst initialState = {};\nconst initialFormState = {\n controls: {}\n};\nconst initialControlState = {\n value: '',\n touched: false\n};\n\nfunction updateFormControl(state, formId, name, controlState) {\n var _state$formId;\n\n const currentControlState = ((_state$formId = state[formId]) === null || _state$formId === void 0 ? void 0 : _state$formId.controls[name]) || initialControlState;\n return _objectSpread(_objectSpread({}, state), {}, {\n [formId]: _objectSpread(_objectSpread({}, state[formId]), {}, {\n controls: _objectSpread(_objectSpread({}, state[formId].controls), {}, {\n [name]: _objectSpread(_objectSpread({}, currentControlState), controlState)\n })\n })\n });\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_lib_redux_helpers__WEBPACK_IMPORTED_MODULE_0__.createReducer)('form', {\n // Form handlers\n [_actions__WEBPACK_IMPORTED_MODULE_1__.registerForm]: (state, {\n formId,\n persistData\n }) => {\n var _state$formId2;\n\n const formState = persistData ? (_state$formId2 = state[formId]) !== null && _state$formId2 !== void 0 ? _state$formId2 : _objectSpread(_objectSpread({}, initialFormState), {}, {\n persistData\n }) : _objectSpread(_objectSpread({}, initialFormState), {}, {\n persistData\n });\n return _objectSpread(_objectSpread({}, state), {}, {\n [formId]: formState\n });\n },\n [_actions__WEBPACK_IMPORTED_MODULE_1__.deregisterForm]: (state, {\n formId\n }) => {\n var _newState$formId;\n\n const newState = _objectSpread({}, state);\n\n if (!((_newState$formId = newState[formId]) !== null && _newState$formId !== void 0 && _newState$formId.persistData)) {\n delete newState[formId];\n }\n\n return newState;\n },\n // Form control handlers\n [_actions__WEBPACK_IMPORTED_MODULE_1__.registerControl]: (state, {\n name,\n formId\n }) => {\n return updateFormControl(state, formId, name);\n },\n [_actions__WEBPACK_IMPORTED_MODULE_1__.deregisterControl]: (state, {\n formId,\n name\n }) => {\n const form = state[formId];\n\n if (!form) {\n return state;\n }\n\n if (form.persistData) {\n return state;\n }\n\n const controls = _objectSpread({}, form.controls);\n\n delete controls[name];\n return _objectSpread(_objectSpread({}, state), {}, {\n [formId]: _objectSpread(_objectSpread({}, form), {}, {\n controls\n })\n });\n },\n [_actions__WEBPACK_IMPORTED_MODULE_1__.updateControlValue]: (state, {\n formId,\n name,\n value\n }) => {\n return updateFormControl(state, formId, name, {\n value\n });\n },\n [_actions__WEBPACK_IMPORTED_MODULE_1__.updateControlTouched]: (state, {\n formId,\n name,\n touched\n }) => {\n return updateFormControl(state, formId, name, {\n touched\n });\n }\n}, initialState));\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/domains/forms/reducer.js?");
368
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _lib_redux_helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../lib/redux-helpers */ \"./src/javascripts/lib/redux-helpers/index.js\");\n/* harmony import */ var _actions__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./actions */ \"./src/javascripts/domains/forms/actions.js\");\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n\n\nconst initialState = {};\nconst initialFormState = {\n controls: {}\n};\nconst initialControlState = {\n value: '',\n touched: false\n};\n\nfunction updateFormControl(state, formId, name, controlState) {\n var _state$formId;\n\n const currentControlState = ((_state$formId = state[formId]) === null || _state$formId === void 0 ? void 0 : _state$formId.controls[name]) || initialControlState;\n return _objectSpread(_objectSpread({}, state), {}, {\n [formId]: _objectSpread(_objectSpread({}, state[formId]), {}, {\n controls: _objectSpread(_objectSpread({}, state[formId].controls), {}, {\n [name]: _objectSpread(_objectSpread({}, currentControlState), controlState)\n })\n })\n });\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_lib_redux_helpers__WEBPACK_IMPORTED_MODULE_0__.createReducer)('form', {\n // Form handlers\n [_actions__WEBPACK_IMPORTED_MODULE_1__.registerForm]: (state, {\n formId,\n persistData\n }) => {\n const formState = persistData ? state[formId] ?? _objectSpread(_objectSpread({}, initialFormState), {}, {\n persistData\n }) : _objectSpread(_objectSpread({}, initialFormState), {}, {\n persistData\n });\n return _objectSpread(_objectSpread({}, state), {}, {\n [formId]: formState\n });\n },\n [_actions__WEBPACK_IMPORTED_MODULE_1__.deregisterForm]: (state, {\n formId\n }) => {\n var _newState$formId;\n\n const newState = _objectSpread({}, state);\n\n if (!((_newState$formId = newState[formId]) !== null && _newState$formId !== void 0 && _newState$formId.persistData)) {\n delete newState[formId];\n }\n\n return newState;\n },\n // Form control handlers\n [_actions__WEBPACK_IMPORTED_MODULE_1__.registerControl]: (state, {\n name,\n formId\n }) => {\n return updateFormControl(state, formId, name);\n },\n [_actions__WEBPACK_IMPORTED_MODULE_1__.deregisterControl]: (state, {\n formId,\n name\n }) => {\n const form = state[formId];\n\n if (!form) {\n return state;\n }\n\n if (form.persistData) {\n return state;\n }\n\n const controls = _objectSpread({}, form.controls);\n\n delete controls[name];\n return _objectSpread(_objectSpread({}, state), {}, {\n [formId]: _objectSpread(_objectSpread({}, form), {}, {\n controls\n })\n });\n },\n [_actions__WEBPACK_IMPORTED_MODULE_1__.updateControlValue]: (state, {\n formId,\n name,\n value\n }) => {\n return updateFormControl(state, formId, name, {\n value\n });\n },\n [_actions__WEBPACK_IMPORTED_MODULE_1__.updateControlTouched]: (state, {\n formId,\n name,\n touched\n }) => {\n return updateFormControl(state, formId, name, {\n touched\n });\n }\n}, initialState));\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/domains/forms/reducer.js?");
369
369
 
370
370
  /***/ }),
371
371
 
@@ -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 */ \"validate\": () => (/* binding */ validate)\n/* harmony export */ });\nfunction validate(values, schema = {}) {\n return Object.entries(schema).reduce((errors, [key, validations]) => {\n if (validations && !Array.isArray(validations)) {\n // eslint-disable-next-line no-param-reassign\n validations = [validations];\n }\n\n for (let i = 0; (_ref = i < ((_validations = validations) === null || _validations === void 0 ? void 0 : _validations.length)) !== null && _ref !== void 0 ? _ref : 0; i++) {\n var _ref, _validations;\n\n if (!validations[i].fn(values[key], validations[i].compareValue)) {\n errors[key] = validations[i].errorText;\n break;\n }\n }\n\n return errors;\n }, {});\n}\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/domains/forms/utils.js?");
390
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"validate\": () => (/* binding */ validate)\n/* harmony export */ });\nfunction validate(values, schema = {}) {\n return Object.entries(schema).reduce((errors, [key, validations]) => {\n if (validations && !Array.isArray(validations)) {\n // eslint-disable-next-line no-param-reassign\n validations = [validations];\n }\n\n for (let i = 0; i < ((_validations = validations) === null || _validations === void 0 ? void 0 : _validations.length) ?? 0; i++) {\n var _validations;\n\n if (!validations[i].fn(values[key], validations[i].compareValue)) {\n errors[key] = validations[i].errorText;\n break;\n }\n }\n\n return errors;\n }, {});\n}\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/domains/forms/utils.js?");
391
391
 
392
392
  /***/ }),
393
393
 
@@ -1078,7 +1078,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
1078
1078
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1079
1079
 
1080
1080
  "use strict";
1081
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"useFormattedDate\": () => (/* binding */ useFormattedDate)\n/* harmony export */ });\n/* harmony import */ var _domains_i18n__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../../domains/i18n */ \"./src/javascripts/domains/i18n/index.js\");\n/* harmony import */ var _utils_general_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../utils/general-utils */ \"./src/javascripts/ui/utils/general-utils.js\");\n/* harmony import */ var _domains_config__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../../domains/config */ \"./src/javascripts/domains/config/index.js\");\n\n\n\nconst dateFormatOptions = {\n month: 'long',\n day: 'numeric',\n year: 'numeric'\n};\nconst timeFormatOptions = {\n hour: 'numeric',\n minute: 'numeric'\n};\nconst useFormattedDate = date => {\n var _config$context$local, _config$context;\n\n const {\n t\n } = (0,_domains_i18n__WEBPACK_IMPORTED_MODULE_0__.useI18n)();\n const config = (0,_domains_config__WEBPACK_IMPORTED_MODULE_2__.useConfig)();\n const locale = (_config$context$local = config === null || config === void 0 ? void 0 : (_config$context = config.context) === null || _config$context === void 0 ? void 0 : _config$context.locale) !== null && _config$context$local !== void 0 ? _config$context$local : [];\n const eventDate = new Date(date);\n const currentDate = new Date();\n const midnight = new Date(currentDate);\n midnight.setHours(24, 0, 0, 0);\n const timeUntilMidnight = midnight - currentDate;\n const fullDateTime = eventDate.toString();\n const time = new Intl.DateTimeFormat(locale, timeFormatOptions).format(eventDate);\n let relativeDate = (0,_utils_general_utils__WEBPACK_IMPORTED_MODULE_1__.getRelativeDate)(eventDate, currentDate);\n\n switch (relativeDate) {\n case 'today':\n relativeDate = t('dateTime.today');\n break;\n\n case 'yesterday':\n relativeDate = t('dateTime.yesterday');\n break;\n\n default:\n relativeDate = new Intl.DateTimeFormat(locale, dateFormatOptions).format(eventDate);\n }\n\n const srText = t('dateTime.srText', {\n date: relativeDate,\n time\n });\n return {\n date: relativeDate,\n srText,\n time,\n fullDateTime,\n timeUntilMidnight\n };\n};\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/conversation/event/hooks/use-formatted-date.js?");
1081
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"useFormattedDate\": () => (/* binding */ useFormattedDate)\n/* harmony export */ });\n/* harmony import */ var _domains_i18n__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../../domains/i18n */ \"./src/javascripts/domains/i18n/index.js\");\n/* harmony import */ var _utils_general_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../utils/general-utils */ \"./src/javascripts/ui/utils/general-utils.js\");\n/* harmony import */ var _domains_config__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../../domains/config */ \"./src/javascripts/domains/config/index.js\");\n\n\n\nconst dateFormatOptions = {\n month: 'long',\n day: 'numeric',\n year: 'numeric'\n};\nconst timeFormatOptions = {\n hour: 'numeric',\n minute: 'numeric'\n};\nconst useFormattedDate = date => {\n var _config$context;\n\n const {\n t\n } = (0,_domains_i18n__WEBPACK_IMPORTED_MODULE_0__.useI18n)();\n const config = (0,_domains_config__WEBPACK_IMPORTED_MODULE_2__.useConfig)();\n const locale = (config === null || config === void 0 ? void 0 : (_config$context = config.context) === null || _config$context === void 0 ? void 0 : _config$context.locale) ?? [];\n const eventDate = new Date(date);\n const currentDate = new Date();\n const midnight = new Date(currentDate);\n midnight.setHours(24, 0, 0, 0);\n const timeUntilMidnight = midnight - currentDate;\n const fullDateTime = eventDate.toString();\n const time = new Intl.DateTimeFormat(locale, timeFormatOptions).format(eventDate);\n let relativeDate = (0,_utils_general_utils__WEBPACK_IMPORTED_MODULE_1__.getRelativeDate)(eventDate, currentDate);\n\n switch (relativeDate) {\n case 'today':\n relativeDate = t('dateTime.today');\n break;\n\n case 'yesterday':\n relativeDate = t('dateTime.yesterday');\n break;\n\n default:\n relativeDate = new Intl.DateTimeFormat(locale, dateFormatOptions).format(eventDate);\n }\n\n const srText = t('dateTime.srText', {\n date: relativeDate,\n time\n });\n return {\n date: relativeDate,\n srText,\n time,\n fullDateTime,\n timeUntilMidnight\n };\n};\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/conversation/event/hooks/use-formatted-date.js?");
1082
1082
 
1083
1083
  /***/ }),
1084
1084
 
@@ -1210,7 +1210,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
1210
1210
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1211
1211
 
1212
1212
  "use strict";
1213
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact/hooks */ \"preact/hooks\");\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(preact_hooks__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _seamly_activity_event_context__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./seamly-activity-event-context */ \"./src/javascripts/ui/components/core/seamly-activity-event-context.js\");\n/* harmony import */ var _hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../hooks/seamly-hooks */ \"./src/javascripts/ui/hooks/seamly-hooks.js\");\n/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../config */ \"./src/javascripts/config.js\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__);\n\n\n\n\n\n\nconst SeamlyActivityMonitor = ({\n children\n}) => {\n const prevSendTimestamp = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)(0);\n const {\n sendAction\n } = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_2__.useSeamlyCommands)();\n const {\n hasCountdown,\n isActive,\n stopCountdown\n } = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_2__.useSeamlyIdleDetachCountdown)();\n const onActivityHandler = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {\n const timeStamp = new Date().getTime();\n\n const sendActive = () => {\n sendAction({\n type: 'interactivity_update'\n });\n prevSendTimestamp.current = timeStamp;\n };\n\n if (hasCountdown && isActive) {\n sendActive();\n stopCountdown();\n }\n\n if (timeStamp - prevSendTimestamp.current > _config__WEBPACK_IMPORTED_MODULE_3__.activitySendDelay) {\n sendActive();\n }\n }, [sendAction, hasCountdown, isActive, stopCountdown]); // It is important to use keyUp here as focus may be set from outside the\n // chat container via keyboard. In this case the keyDown handler would not\n // be fired inside the container on the initial focus event.\n\n return (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"div\", {\n tabIndex: \"-1\",\n onMouseDown: onActivityHandler,\n onKeyUp: onActivityHandler,\n onTouchStart: onActivityHandler,\n onMouseMove: onActivityHandler,\n onWheel: onActivityHandler,\n onPointerDown: onActivityHandler,\n onPointerMove: onActivityHandler,\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_seamly_activity_event_context__WEBPACK_IMPORTED_MODULE_1__[\"default\"].Provider, {\n value: onActivityHandler,\n children: children\n })\n });\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SeamlyActivityMonitor);\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/core/seamly-activity-monitor.js?");
1213
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preact/hooks */ \"preact/hooks\");\n/* harmony import */ var preact_hooks__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(preact_hooks__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _seamly_activity_event_context__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./seamly-activity-event-context */ \"./src/javascripts/ui/components/core/seamly-activity-event-context.js\");\n/* harmony import */ var _hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../hooks/seamly-hooks */ \"./src/javascripts/ui/hooks/seamly-hooks.js\");\n/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../config */ \"./src/javascripts/config.js\");\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\nconst SeamlyActivityMonitor = ({\n children\n}) => {\n const prevSendTimestamp = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useRef)(0);\n const {\n sendAction\n } = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_2__.useSeamlyCommands)();\n const {\n hasCountdown,\n isActive,\n stopCountdown\n } = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_2__.useSeamlyIdleDetachCountdown)();\n const onActivityHandler = (0,preact_hooks__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {\n const timeStamp = new Date().getTime();\n\n const sendActive = () => {\n sendAction({\n type: 'interactivity_update'\n });\n prevSendTimestamp.current = timeStamp;\n };\n\n if (hasCountdown && isActive) {\n sendActive();\n stopCountdown();\n }\n\n if (timeStamp - prevSendTimestamp.current > _config__WEBPACK_IMPORTED_MODULE_3__.activitySendDelay) {\n sendActive();\n }\n }, [sendAction, hasCountdown, isActive, stopCountdown]); // It is important to use keyUp here as focus may be set from outside the\n // chat container via keyboard. In this case the keyDown handler would not\n // be fired inside the container on the initial focus event.\n\n return (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(\"div\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_4__.className)('activity-monitor'),\n tabIndex: \"-1\",\n onMouseDown: onActivityHandler,\n onKeyUp: onActivityHandler,\n onTouchStart: onActivityHandler,\n onMouseMove: onActivityHandler,\n onWheel: onActivityHandler,\n onPointerDown: onActivityHandler,\n onPointerMove: onActivityHandler,\n children: (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_seamly_activity_event_context__WEBPACK_IMPORTED_MODULE_1__[\"default\"].Provider, {\n value: onActivityHandler,\n children: children\n })\n });\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SeamlyActivityMonitor);\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/core/seamly-activity-monitor.js?");
1214
1214
 
1215
1215
  /***/ }),
1216
1216
 
@@ -1518,7 +1518,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
1518
1518
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1519
1519
 
1520
1520
  "use strict";
1521
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _icon__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./icon */ \"./src/javascripts/ui/components/layout/icon.js\");\n/* harmony import */ var _hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../hooks/seamly-hooks */ \"./src/javascripts/ui/hooks/seamly-hooks.js\");\n/* harmony import */ var _lib_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../lib/css */ \"./src/javascripts/lib/css.js\");\n/* harmony import */ var _domains_i18n__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../domains/i18n */ \"./src/javascripts/domains/i18n/index.js\");\n/* harmony import */ var _domains_interrupt__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../domains/interrupt */ \"./src/javascripts/domains/interrupt/index.js\");\n/* harmony import */ var _domains_config__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../domains/config */ \"./src/javascripts/domains/config/index.js\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__);\n\n\n\n\n\n\n\n\n\nconst AgentInfo = () => {\n const {\n t\n } = (0,_domains_i18n__WEBPACK_IMPORTED_MODULE_3__.useI18n)();\n const {\n title,\n subTitle\n } = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_1__.useSeamlyHeaderData)();\n const unreadMessageCount = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_1__.useSeamlyUnreadCount)();\n const {\n isOpen\n } = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_1__.useSeamlyVisibility)();\n const currentAgent = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_1__.useSeamlyCurrentAgent)();\n const {\n hasInterrupt\n } = (0,_domains_interrupt__WEBPACK_IMPORTED_MODULE_4__.useInterrupt)();\n const {\n defaults\n } = (0,_domains_config__WEBPACK_IMPORTED_MODULE_5__.useConfig)();\n const {\n startChatIcon\n } = defaults || {};\n const avatar = currentAgent && !hasInterrupt ? currentAgent.avatar : null;\n const displaySubtitle = hasInterrupt ? '' : subTitle;\n const classNames = ['message-count'];\n\n if (isOpen) {\n classNames.push('message-count__hide');\n }\n\n if (unreadMessageCount === 0) {\n classNames.push('message-count__empty');\n }\n\n return (avatar || displaySubtitle || !isOpen) && (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(\"div\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_2__.className)('agent-info'),\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(\"div\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_2__.className)('agent-info__graphic'),\n children: [avatar || startChatIcon ? (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(\"img\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_2__.className)(avatar ? 'avatar' : 'icon'),\n src: avatar || startChatIcon,\n alt: \"\"\n }) : (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_icon__WEBPACK_IMPORTED_MODULE_0__[\"default\"], {\n name: \"avatar\",\n size: \"32\"\n }), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(\"span\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_2__.className)(classNames),\n \"aria-hidden\": \"true\",\n children: unreadMessageCount\n })]\n }), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(\"div\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_2__.className)('agent-info__body'),\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(\"p\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_2__.className)('agent-info__heading'),\n children: title !== null && title !== void 0 ? title : t('header.title')\n }), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(\"p\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_2__.className)('agent-info__text'),\n children: displaySubtitle\n })]\n })]\n });\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (AgentInfo);\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/layout/agent-info.js?");
1521
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _icon__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./icon */ \"./src/javascripts/ui/components/layout/icon.js\");\n/* harmony import */ var _hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../hooks/seamly-hooks */ \"./src/javascripts/ui/hooks/seamly-hooks.js\");\n/* harmony import */ var _lib_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../lib/css */ \"./src/javascripts/lib/css.js\");\n/* harmony import */ var _domains_i18n__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../domains/i18n */ \"./src/javascripts/domains/i18n/index.js\");\n/* harmony import */ var _domains_interrupt__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../domains/interrupt */ \"./src/javascripts/domains/interrupt/index.js\");\n/* harmony import */ var _domains_config__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../domains/config */ \"./src/javascripts/domains/config/index.js\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! preact/jsx-runtime */ \"preact/jsx-runtime\");\n/* harmony import */ var preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__);\n\n\n\n\n\n\n\n\n\nconst AgentInfo = () => {\n const {\n t\n } = (0,_domains_i18n__WEBPACK_IMPORTED_MODULE_3__.useI18n)();\n const {\n title,\n subTitle\n } = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_1__.useSeamlyHeaderData)();\n const unreadMessageCount = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_1__.useSeamlyUnreadCount)();\n const {\n isOpen\n } = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_1__.useSeamlyVisibility)();\n const currentAgent = (0,_hooks_seamly_hooks__WEBPACK_IMPORTED_MODULE_1__.useSeamlyCurrentAgent)();\n const {\n hasInterrupt\n } = (0,_domains_interrupt__WEBPACK_IMPORTED_MODULE_4__.useInterrupt)();\n const {\n defaults\n } = (0,_domains_config__WEBPACK_IMPORTED_MODULE_5__.useConfig)();\n const {\n startChatIcon\n } = defaults || {};\n const avatar = currentAgent && !hasInterrupt ? currentAgent.avatar : null;\n const displaySubtitle = hasInterrupt ? '' : subTitle;\n const classNames = ['message-count'];\n\n if (isOpen) {\n classNames.push('message-count__hide');\n }\n\n if (unreadMessageCount === 0) {\n classNames.push('message-count__empty');\n }\n\n return (avatar || displaySubtitle || !isOpen) && (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(\"div\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_2__.className)('agent-info'),\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(\"div\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_2__.className)('agent-info__graphic'),\n children: [avatar || startChatIcon ? (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(\"img\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_2__.className)(avatar ? 'avatar' : 'icon'),\n src: avatar || startChatIcon,\n alt: \"\"\n }) : (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_icon__WEBPACK_IMPORTED_MODULE_0__[\"default\"], {\n name: \"avatar\",\n size: \"32\"\n }), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(\"span\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_2__.className)(classNames),\n \"aria-hidden\": \"true\",\n children: unreadMessageCount\n })]\n }), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(\"div\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_2__.className)('agent-info__body'),\n children: [(0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(\"p\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_2__.className)('agent-info__heading'),\n children: title ?? t('header.title')\n }), (0,preact_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(\"p\", {\n className: (0,_lib_css__WEBPACK_IMPORTED_MODULE_2__.className)('agent-info__text'),\n children: displaySubtitle\n })]\n })]\n });\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (AgentInfo);\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/components/layout/agent-info.js?");
1522
1522
 
1523
1523
  /***/ }),
1524
1524
 
@@ -1870,7 +1870,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
1870
1870
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1871
1871
 
1872
1872
  "use strict";
1873
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"selectState\": () => (/* binding */ selectState),\n/* harmony export */ \"useSeamlyStateContext\": () => (/* binding */ useSeamlyStateContext),\n/* harmony export */ \"selectEvents\": () => (/* binding */ selectEvents),\n/* harmony export */ \"useEvents\": () => (/* binding */ useEvents),\n/* harmony export */ \"useSeamlyIsLoading\": () => (/* binding */ useSeamlyIsLoading),\n/* harmony export */ \"useSeamlyHeaderData\": () => (/* binding */ useSeamlyHeaderData),\n/* harmony export */ \"useSeamlyUnreadCount\": () => (/* binding */ useSeamlyUnreadCount),\n/* harmony export */ \"useSkiplink\": () => (/* binding */ useSkiplink),\n/* harmony export */ \"useSeamlyParticipant\": () => (/* binding */ useSeamlyParticipant),\n/* harmony export */ \"useSeamlyServiceInfo\": () => (/* binding */ useSeamlyServiceInfo),\n/* harmony export */ \"useLastMessageEventId\": () => (/* binding */ useLastMessageEventId),\n/* harmony export */ \"useSeamlyIsHistoryLoaded\": () => (/* binding */ useSeamlyIsHistoryLoaded),\n/* harmony export */ \"useSeamlyCurrentAgent\": () => (/* binding */ useSeamlyCurrentAgent),\n/* harmony export */ \"useSeamlyServiceData\": () => (/* binding */ useSeamlyServiceData),\n/* harmony export */ \"useEntryTextLimit\": () => (/* binding */ useEntryTextLimit),\n/* harmony export */ \"useSeamlyLayoutMode\": () => (/* binding */ useSeamlyLayoutMode)\n/* harmony export */ });\n/* harmony import */ var reselect__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! reselect */ \"./node_modules/reselect/es/index.js\");\n/* harmony import */ var _domains_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../domains/redux */ \"./src/javascripts/domains/redux/index.js\");\n/* harmony import */ var _utils_general_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/general-utils */ \"./src/javascripts/ui/utils/general-utils.js\");\n/* harmony import */ var _domains_config__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../domains/config */ \"./src/javascripts/domains/config/index.js\");\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n\n\n\n\nconst selectState = state => state.state;\nconst useSeamlyStateContext = () => (0,_domains_redux__WEBPACK_IMPORTED_MODULE_1__.useSelector)(selectState);\nconst selectEvents = (0,reselect__WEBPACK_IMPORTED_MODULE_0__.createSelector)(selectState, _domains_config__WEBPACK_IMPORTED_MODULE_3__.Selectors.selectConfig, ({\n events\n}, config) => {\n var _config$messages$time, _config$messages;\n\n const {\n enabled,\n threshold\n } = (_config$messages$time = config === null || config === void 0 ? void 0 : (_config$messages = config.messages) === null || _config$messages === void 0 ? void 0 : _config$messages.timeIndicator) !== null && _config$messages$time !== void 0 ? _config$messages$time : {};\n\n if (!enabled) {\n return events;\n }\n\n const mappedEvents = [];\n let previousEvent = null;\n events.forEach((event, idx) => {\n // always add timeIndicator to first message\n if (idx === 0) {\n mappedEvents.push(_objectSpread(_objectSpread({}, event), {}, {\n timeIndicator: event.payload.occurredAt\n })); // else check if diff is greater than threshold\n } else {\n const timeIndicator = previousEvent && (0,_utils_general_utils__WEBPACK_IMPORTED_MODULE_2__.microsecondsToMilliseconds)(event.payload.occurredAt - previousEvent.payload.occurredAt) >= threshold ? event.payload.occurredAt : undefined;\n mappedEvents.push(_objectSpread(_objectSpread({}, event), {}, {\n timeIndicator\n }));\n }\n\n previousEvent = event;\n });\n return mappedEvents;\n});\nconst useEvents = () => (0,_domains_redux__WEBPACK_IMPORTED_MODULE_1__.useSelector)(selectEvents, []);\nconst useSeamlyIsLoading = () => useSeamlyStateContext().isLoading;\nconst useSeamlyHeaderData = () => useSeamlyStateContext().headerTitles;\nconst useSeamlyUnreadCount = () => useSeamlyStateContext().unreadEvents;\nconst useSkiplink = () => useSeamlyStateContext().skiplinkTargetId;\nconst useSeamlyParticipant = participantId => useSeamlyStateContext().participantInfo.participants[participantId];\nconst useSeamlyServiceInfo = () => useSeamlyStateContext().serviceInfo;\nconst selectLastMessageEventId = (0,reselect__WEBPACK_IMPORTED_MODULE_0__.createSelector)(selectEvents, events => {\n var _filteredEvents;\n\n const filteredEvents = events.filter(event => event.type === 'message');\n return (_filteredEvents = filteredEvents[filteredEvents.length - 1]) === null || _filteredEvents === void 0 ? void 0 : _filteredEvents.payload.id;\n});\nconst useLastMessageEventId = () => (0,_domains_redux__WEBPACK_IMPORTED_MODULE_1__.useSelector)(selectLastMessageEventId);\nconst useSeamlyIsHistoryLoaded = () => useSeamlyStateContext().historyLoaded;\nconst useSeamlyCurrentAgent = () => {\n const {\n participants,\n currentAgent\n } = useSeamlyStateContext().participantInfo;\n return currentAgent ? participants[currentAgent] : null;\n};\nconst useSeamlyServiceData = key => useSeamlyStateContext().serviceData[key];\nconst useEntryTextLimit = () => {\n const {\n entryMeta: {\n options: {\n text\n }\n }\n } = useSeamlyStateContext();\n const {\n limit\n } = text || {};\n return {\n hasLimit: limit != null,\n limit: limit != null ? limit : null\n };\n};\nconst useSeamlyLayoutMode = () => {\n const {\n layoutMode\n } = (0,_domains_config__WEBPACK_IMPORTED_MODULE_3__.useConfig)();\n return {\n isInline: layoutMode === 'inline',\n isModal: layoutMode === 'modal',\n isWindow: layoutMode === 'window',\n isResolving: !layoutMode\n };\n};\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/hooks/seamly-state-hooks.js?");
1873
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"selectState\": () => (/* binding */ selectState),\n/* harmony export */ \"useSeamlyStateContext\": () => (/* binding */ useSeamlyStateContext),\n/* harmony export */ \"selectEvents\": () => (/* binding */ selectEvents),\n/* harmony export */ \"useEvents\": () => (/* binding */ useEvents),\n/* harmony export */ \"useSeamlyIsLoading\": () => (/* binding */ useSeamlyIsLoading),\n/* harmony export */ \"useSeamlyHeaderData\": () => (/* binding */ useSeamlyHeaderData),\n/* harmony export */ \"useSeamlyUnreadCount\": () => (/* binding */ useSeamlyUnreadCount),\n/* harmony export */ \"useSkiplink\": () => (/* binding */ useSkiplink),\n/* harmony export */ \"useSeamlyParticipant\": () => (/* binding */ useSeamlyParticipant),\n/* harmony export */ \"useSeamlyServiceInfo\": () => (/* binding */ useSeamlyServiceInfo),\n/* harmony export */ \"useLastMessageEventId\": () => (/* binding */ useLastMessageEventId),\n/* harmony export */ \"useSeamlyIsHistoryLoaded\": () => (/* binding */ useSeamlyIsHistoryLoaded),\n/* harmony export */ \"useSeamlyCurrentAgent\": () => (/* binding */ useSeamlyCurrentAgent),\n/* harmony export */ \"useSeamlyServiceData\": () => (/* binding */ useSeamlyServiceData),\n/* harmony export */ \"useEntryTextLimit\": () => (/* binding */ useEntryTextLimit),\n/* harmony export */ \"useSeamlyLayoutMode\": () => (/* binding */ useSeamlyLayoutMode)\n/* harmony export */ });\n/* harmony import */ var reselect__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! reselect */ \"./node_modules/reselect/es/index.js\");\n/* harmony import */ var _domains_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../domains/redux */ \"./src/javascripts/domains/redux/index.js\");\n/* harmony import */ var _utils_general_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/general-utils */ \"./src/javascripts/ui/utils/general-utils.js\");\n/* harmony import */ var _domains_config__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../domains/config */ \"./src/javascripts/domains/config/index.js\");\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n\n\n\n\nconst selectState = state => state.state;\nconst useSeamlyStateContext = () => (0,_domains_redux__WEBPACK_IMPORTED_MODULE_1__.useSelector)(selectState);\nconst selectEvents = (0,reselect__WEBPACK_IMPORTED_MODULE_0__.createSelector)(selectState, _domains_config__WEBPACK_IMPORTED_MODULE_3__.Selectors.selectConfig, ({\n events\n}, config) => {\n var _config$messages;\n\n const {\n enabled,\n threshold\n } = (config === null || config === void 0 ? void 0 : (_config$messages = config.messages) === null || _config$messages === void 0 ? void 0 : _config$messages.timeIndicator) ?? {};\n\n if (!enabled) {\n return events;\n }\n\n const mappedEvents = [];\n let previousEvent = null;\n events.forEach((event, idx) => {\n // always add timeIndicator to first message\n if (idx === 0) {\n mappedEvents.push(_objectSpread(_objectSpread({}, event), {}, {\n timeIndicator: event.payload.occurredAt\n })); // else check if diff is greater than threshold\n } else {\n const timeIndicator = previousEvent && (0,_utils_general_utils__WEBPACK_IMPORTED_MODULE_2__.microsecondsToMilliseconds)(event.payload.occurredAt - previousEvent.payload.occurredAt) >= threshold ? event.payload.occurredAt : undefined;\n mappedEvents.push(_objectSpread(_objectSpread({}, event), {}, {\n timeIndicator\n }));\n }\n\n previousEvent = event;\n });\n return mappedEvents;\n});\nconst useEvents = () => (0,_domains_redux__WEBPACK_IMPORTED_MODULE_1__.useSelector)(selectEvents, []);\nconst useSeamlyIsLoading = () => useSeamlyStateContext().isLoading;\nconst useSeamlyHeaderData = () => useSeamlyStateContext().headerTitles;\nconst useSeamlyUnreadCount = () => useSeamlyStateContext().unreadEvents;\nconst useSkiplink = () => useSeamlyStateContext().skiplinkTargetId;\nconst useSeamlyParticipant = participantId => useSeamlyStateContext().participantInfo.participants[participantId];\nconst useSeamlyServiceInfo = () => useSeamlyStateContext().serviceInfo;\nconst selectLastMessageEventId = (0,reselect__WEBPACK_IMPORTED_MODULE_0__.createSelector)(selectEvents, events => {\n var _filteredEvents;\n\n const filteredEvents = events.filter(event => event.type === 'message');\n return (_filteredEvents = filteredEvents[filteredEvents.length - 1]) === null || _filteredEvents === void 0 ? void 0 : _filteredEvents.payload.id;\n});\nconst useLastMessageEventId = () => (0,_domains_redux__WEBPACK_IMPORTED_MODULE_1__.useSelector)(selectLastMessageEventId);\nconst useSeamlyIsHistoryLoaded = () => useSeamlyStateContext().historyLoaded;\nconst useSeamlyCurrentAgent = () => {\n const {\n participants,\n currentAgent\n } = useSeamlyStateContext().participantInfo;\n return currentAgent ? participants[currentAgent] : null;\n};\nconst useSeamlyServiceData = key => useSeamlyStateContext().serviceData[key];\nconst useEntryTextLimit = () => {\n const {\n entryMeta: {\n options: {\n text\n }\n }\n } = useSeamlyStateContext();\n const {\n limit\n } = text || {};\n return {\n hasLimit: limit != null,\n limit: limit != null ? limit : null\n };\n};\nconst useSeamlyLayoutMode = () => {\n const {\n layoutMode\n } = (0,_domains_config__WEBPACK_IMPORTED_MODULE_3__.useConfig)();\n return {\n isInline: layoutMode === 'inline',\n isModal: layoutMode === 'modal',\n isWindow: layoutMode === 'window',\n isResolving: !layoutMode\n };\n};\n\n//# sourceURL=webpack://@seamly/web-ui/./src/javascripts/ui/hooks/seamly-state-hooks.js?");
1874
1874
 
1875
1875
  /***/ }),
1876
1876