@webex/cc-task 1.28.0-ccwidgets.11 → 1.28.0-ccwidgets.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -10,6 +10,36 @@
10
10
  /******/ "use strict";
11
11
  /******/ var __webpack_modules__ = ({
12
12
 
13
+ /***/ "../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/sass-loader/dist/cjs.js!./src/CallControl/call-control.styles.scss":
14
+ /*!*********************************************************************************************************************************************!*\
15
+ !*** ../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/sass-loader/dist/cjs.js!./src/CallControl/call-control.styles.scss ***!
16
+ \*********************************************************************************************************************************************/
17
+ /***/ ((module, __webpack_exports__, __webpack_require__) => {
18
+
19
+ 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 _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ \"../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../../node_modules/css-loader/dist/runtime/api.js */ \"../../../node_modules/css-loader/dist/runtime/api.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.box {\n background-color: #ffffff;\n border-radius: 8px;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n padding: 20px;\n max-width: 800px;\n margin: 0 auto;\n}\n\n.section-box {\n padding: 10px;\n border: 1px solid #ddd;\n border-radius: 8px;\n}\n\n.fieldset {\n border: 1px solid #ccc;\n border-radius: 5px;\n padding: 10px;\n margin-bottom: 20px;\n}\n\n.legend-box {\n font-weight: bold;\n color: #0052bf;\n}\n\n.btn {\n padding: 10px 20px;\n background-color: #0052bf;\n color: white;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n transition: background-color 0.3s;\n margin-right: 8px;\n}\n\n.btn:disabled {\n background-color: grey;\n cursor: not-allowed;\n}\n\n.select {\n width: 100%;\n padding: 8px;\n margin-top: 8px;\n margin-bottom: 12px;\n border: 1px solid #ccc;\n border-radius: 4px;\n}\n\n.input {\n width: 97%;\n padding: 8px;\n margin-top: 8px;\n margin-bottom: 12px;\n border: 1px solid #ccc;\n border-radius: 4px;\n}`, \"\"]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n\n\n//# sourceURL=webpack://@webex/cc-task/./src/CallControl/call-control.styles.scss?../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/sass-loader/dist/cjs.js");
20
+
21
+ /***/ }),
22
+
23
+ /***/ "../../../node_modules/css-loader/dist/runtime/api.js":
24
+ /*!************************************************************!*\
25
+ !*** ../../../node_modules/css-loader/dist/runtime/api.js ***!
26
+ \************************************************************/
27
+ /***/ ((module) => {
28
+
29
+ eval("\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\nmodule.exports = function (cssWithMappingToString) {\n var list = [];\n\n // return the list of modules as css string\n list.toString = function toString() {\n return this.map(function (item) {\n var content = \"\";\n var needLayer = typeof item[5] !== \"undefined\";\n if (item[4]) {\n content += \"@supports (\".concat(item[4], \") {\");\n }\n if (item[2]) {\n content += \"@media \".concat(item[2], \" {\");\n }\n if (needLayer) {\n content += \"@layer\".concat(item[5].length > 0 ? \" \".concat(item[5]) : \"\", \" {\");\n }\n content += cssWithMappingToString(item);\n if (needLayer) {\n content += \"}\";\n }\n if (item[2]) {\n content += \"}\";\n }\n if (item[4]) {\n content += \"}\";\n }\n return content;\n }).join(\"\");\n };\n\n // import a list of modules into the list\n list.i = function i(modules, media, dedupe, supports, layer) {\n if (typeof modules === \"string\") {\n modules = [[null, modules, undefined]];\n }\n var alreadyImportedModules = {};\n if (dedupe) {\n for (var k = 0; k < this.length; k++) {\n var id = this[k][0];\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n }\n for (var _k = 0; _k < modules.length; _k++) {\n var item = [].concat(modules[_k]);\n if (dedupe && alreadyImportedModules[item[0]]) {\n continue;\n }\n if (typeof layer !== \"undefined\") {\n if (typeof item[5] === \"undefined\") {\n item[5] = layer;\n } else {\n item[1] = \"@layer\".concat(item[5].length > 0 ? \" \".concat(item[5]) : \"\", \" {\").concat(item[1], \"}\");\n item[5] = layer;\n }\n }\n if (media) {\n if (!item[2]) {\n item[2] = media;\n } else {\n item[1] = \"@media \".concat(item[2], \" {\").concat(item[1], \"}\");\n item[2] = media;\n }\n }\n if (supports) {\n if (!item[4]) {\n item[4] = \"\".concat(supports);\n } else {\n item[1] = \"@supports (\".concat(item[4], \") {\").concat(item[1], \"}\");\n item[4] = supports;\n }\n }\n list.push(item);\n }\n };\n return list;\n};\n\n//# sourceURL=webpack://@webex/cc-task/../../../node_modules/css-loader/dist/runtime/api.js?");
30
+
31
+ /***/ }),
32
+
33
+ /***/ "../../../node_modules/css-loader/dist/runtime/noSourceMaps.js":
34
+ /*!*********************************************************************!*\
35
+ !*** ../../../node_modules/css-loader/dist/runtime/noSourceMaps.js ***!
36
+ \*********************************************************************/
37
+ /***/ ((module) => {
38
+
39
+ eval("\n\nmodule.exports = function (i) {\n return i[1];\n};\n\n//# sourceURL=webpack://@webex/cc-task/../../../node_modules/css-loader/dist/runtime/noSourceMaps.js?");
40
+
41
+ /***/ }),
42
+
13
43
  /***/ "../../../node_modules/mobx-react-lite/es/ObserverComponent.js":
14
44
  /*!*********************************************************************!*\
15
45
  !*** ../../../node_modules/mobx-react-lite/es/ObserverComponent.js ***!
@@ -170,6 +200,76 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
170
200
 
171
201
  /***/ }),
172
202
 
203
+ /***/ "./src/CallControl/call-control.styles.scss":
204
+ /*!**************************************************!*\
205
+ !*** ./src/CallControl/call-control.styles.scss ***!
206
+ \**************************************************/
207
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
208
+
209
+ 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 _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ \"../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\");\n/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js */ \"../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\");\n/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js */ \"../../../node_modules/style-loader/dist/runtime/insertBySelector.js\");\n/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js */ \"../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\");\n/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! !../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js */ \"../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\");\n/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! !../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js */ \"../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\");\n/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _node_modules_css_loader_dist_cjs_js_node_modules_sass_loader_dist_cjs_js_call_control_styles_scss__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! !!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/sass-loader/dist/cjs.js!./call-control.styles.scss */ \"../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/sass-loader/dist/cjs.js!./src/CallControl/call-control.styles.scss\");\n\n \n \n \n \n \n \n \n \n \n\nvar options = {};\n\noptions.styleTagTransform = (_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default());\noptions.setAttributes = (_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default());\noptions.insert = _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default().bind(null, \"head\");\noptions.domAPI = (_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default());\noptions.insertStyleElement = (_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default());\n\nvar update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_css_loader_dist_cjs_js_node_modules_sass_loader_dist_cjs_js_call_control_styles_scss__WEBPACK_IMPORTED_MODULE_6__[\"default\"], options);\n\n\n\n\n /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_css_loader_dist_cjs_js_node_modules_sass_loader_dist_cjs_js_call_control_styles_scss__WEBPACK_IMPORTED_MODULE_6__[\"default\"] && _node_modules_css_loader_dist_cjs_js_node_modules_sass_loader_dist_cjs_js_call_control_styles_scss__WEBPACK_IMPORTED_MODULE_6__[\"default\"].locals ? _node_modules_css_loader_dist_cjs_js_node_modules_sass_loader_dist_cjs_js_call_control_styles_scss__WEBPACK_IMPORTED_MODULE_6__[\"default\"].locals : undefined);\n\n\n//# sourceURL=webpack://@webex/cc-task/./src/CallControl/call-control.styles.scss?");
210
+
211
+ /***/ }),
212
+
213
+ /***/ "../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js":
214
+ /*!***********************************************************************************!*\
215
+ !*** ../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js ***!
216
+ \***********************************************************************************/
217
+ /***/ ((module) => {
218
+
219
+ eval("\n\nvar stylesInDOM = [];\nfunction getIndexByIdentifier(identifier) {\n var result = -1;\n for (var i = 0; i < stylesInDOM.length; i++) {\n if (stylesInDOM[i].identifier === identifier) {\n result = i;\n break;\n }\n }\n return result;\n}\nfunction modulesToDom(list, options) {\n var idCountMap = {};\n var identifiers = [];\n for (var i = 0; i < list.length; i++) {\n var item = list[i];\n var id = options.base ? item[0] + options.base : item[0];\n var count = idCountMap[id] || 0;\n var identifier = \"\".concat(id, \" \").concat(count);\n idCountMap[id] = count + 1;\n var indexByIdentifier = getIndexByIdentifier(identifier);\n var obj = {\n css: item[1],\n media: item[2],\n sourceMap: item[3],\n supports: item[4],\n layer: item[5]\n };\n if (indexByIdentifier !== -1) {\n stylesInDOM[indexByIdentifier].references++;\n stylesInDOM[indexByIdentifier].updater(obj);\n } else {\n var updater = addElementStyle(obj, options);\n options.byIndex = i;\n stylesInDOM.splice(i, 0, {\n identifier: identifier,\n updater: updater,\n references: 1\n });\n }\n identifiers.push(identifier);\n }\n return identifiers;\n}\nfunction addElementStyle(obj, options) {\n var api = options.domAPI(options);\n api.update(obj);\n var updater = function updater(newObj) {\n if (newObj) {\n if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap && newObj.supports === obj.supports && newObj.layer === obj.layer) {\n return;\n }\n api.update(obj = newObj);\n } else {\n api.remove();\n }\n };\n return updater;\n}\nmodule.exports = function (list, options) {\n options = options || {};\n list = list || [];\n var lastIdentifiers = modulesToDom(list, options);\n return function update(newList) {\n newList = newList || [];\n for (var i = 0; i < lastIdentifiers.length; i++) {\n var identifier = lastIdentifiers[i];\n var index = getIndexByIdentifier(identifier);\n stylesInDOM[index].references--;\n }\n var newLastIdentifiers = modulesToDom(newList, options);\n for (var _i = 0; _i < lastIdentifiers.length; _i++) {\n var _identifier = lastIdentifiers[_i];\n var _index = getIndexByIdentifier(_identifier);\n if (stylesInDOM[_index].references === 0) {\n stylesInDOM[_index].updater();\n stylesInDOM.splice(_index, 1);\n }\n }\n lastIdentifiers = newLastIdentifiers;\n };\n};\n\n//# sourceURL=webpack://@webex/cc-task/../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js?");
220
+
221
+ /***/ }),
222
+
223
+ /***/ "../../../node_modules/style-loader/dist/runtime/insertBySelector.js":
224
+ /*!***************************************************************************!*\
225
+ !*** ../../../node_modules/style-loader/dist/runtime/insertBySelector.js ***!
226
+ \***************************************************************************/
227
+ /***/ ((module) => {
228
+
229
+ eval("\n\nvar memo = {};\n\n/* istanbul ignore next */\nfunction getTarget(target) {\n if (typeof memo[target] === \"undefined\") {\n var styleTarget = document.querySelector(target);\n\n // Special case to return head of iframe instead of iframe itself\n if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n try {\n // This will throw an exception if access to iframe is blocked\n // due to cross-origin restrictions\n styleTarget = styleTarget.contentDocument.head;\n } catch (e) {\n // istanbul ignore next\n styleTarget = null;\n }\n }\n memo[target] = styleTarget;\n }\n return memo[target];\n}\n\n/* istanbul ignore next */\nfunction insertBySelector(insert, style) {\n var target = getTarget(insert);\n if (!target) {\n throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");\n }\n target.appendChild(style);\n}\nmodule.exports = insertBySelector;\n\n//# sourceURL=webpack://@webex/cc-task/../../../node_modules/style-loader/dist/runtime/insertBySelector.js?");
230
+
231
+ /***/ }),
232
+
233
+ /***/ "../../../node_modules/style-loader/dist/runtime/insertStyleElement.js":
234
+ /*!*****************************************************************************!*\
235
+ !*** ../../../node_modules/style-loader/dist/runtime/insertStyleElement.js ***!
236
+ \*****************************************************************************/
237
+ /***/ ((module) => {
238
+
239
+ eval("\n\n/* istanbul ignore next */\nfunction insertStyleElement(options) {\n var element = document.createElement(\"style\");\n options.setAttributes(element, options.attributes);\n options.insert(element, options.options);\n return element;\n}\nmodule.exports = insertStyleElement;\n\n//# sourceURL=webpack://@webex/cc-task/../../../node_modules/style-loader/dist/runtime/insertStyleElement.js?");
240
+
241
+ /***/ }),
242
+
243
+ /***/ "../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js":
244
+ /*!*****************************************************************************************!*\
245
+ !*** ../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js ***!
246
+ \*****************************************************************************************/
247
+ /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
248
+
249
+ eval("\n\n/* istanbul ignore next */\nfunction setAttributesWithoutAttributes(styleElement) {\n var nonce = true ? __webpack_require__.nc : 0;\n if (nonce) {\n styleElement.setAttribute(\"nonce\", nonce);\n }\n}\nmodule.exports = setAttributesWithoutAttributes;\n\n//# sourceURL=webpack://@webex/cc-task/../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js?");
250
+
251
+ /***/ }),
252
+
253
+ /***/ "../../../node_modules/style-loader/dist/runtime/styleDomAPI.js":
254
+ /*!**********************************************************************!*\
255
+ !*** ../../../node_modules/style-loader/dist/runtime/styleDomAPI.js ***!
256
+ \**********************************************************************/
257
+ /***/ ((module) => {
258
+
259
+ eval("\n\n/* istanbul ignore next */\nfunction apply(styleElement, options, obj) {\n var css = \"\";\n if (obj.supports) {\n css += \"@supports (\".concat(obj.supports, \") {\");\n }\n if (obj.media) {\n css += \"@media \".concat(obj.media, \" {\");\n }\n var needLayer = typeof obj.layer !== \"undefined\";\n if (needLayer) {\n css += \"@layer\".concat(obj.layer.length > 0 ? \" \".concat(obj.layer) : \"\", \" {\");\n }\n css += obj.css;\n if (needLayer) {\n css += \"}\";\n }\n if (obj.media) {\n css += \"}\";\n }\n if (obj.supports) {\n css += \"}\";\n }\n var sourceMap = obj.sourceMap;\n if (sourceMap && typeof btoa !== \"undefined\") {\n css += \"\\n/*# sourceMappingURL=data:application/json;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), \" */\");\n }\n\n // For old IE\n /* istanbul ignore if */\n options.styleTagTransform(css, styleElement, options.options);\n}\nfunction removeStyleElement(styleElement) {\n // istanbul ignore if\n if (styleElement.parentNode === null) {\n return false;\n }\n styleElement.parentNode.removeChild(styleElement);\n}\n\n/* istanbul ignore next */\nfunction domAPI(options) {\n if (typeof document === \"undefined\") {\n return {\n update: function update() {},\n remove: function remove() {}\n };\n }\n var styleElement = options.insertStyleElement(options);\n return {\n update: function update(obj) {\n apply(styleElement, options, obj);\n },\n remove: function remove() {\n removeStyleElement(styleElement);\n }\n };\n}\nmodule.exports = domAPI;\n\n//# sourceURL=webpack://@webex/cc-task/../../../node_modules/style-loader/dist/runtime/styleDomAPI.js?");
260
+
261
+ /***/ }),
262
+
263
+ /***/ "../../../node_modules/style-loader/dist/runtime/styleTagTransform.js":
264
+ /*!****************************************************************************!*\
265
+ !*** ../../../node_modules/style-loader/dist/runtime/styleTagTransform.js ***!
266
+ \****************************************************************************/
267
+ /***/ ((module) => {
268
+
269
+ eval("\n\n/* istanbul ignore next */\nfunction styleTagTransform(css, styleElement) {\n if (styleElement.styleSheet) {\n styleElement.styleSheet.cssText = css;\n } else {\n while (styleElement.firstChild) {\n styleElement.removeChild(styleElement.firstChild);\n }\n styleElement.appendChild(document.createTextNode(css));\n }\n}\nmodule.exports = styleTagTransform;\n\n//# sourceURL=webpack://@webex/cc-task/../../../node_modules/style-loader/dist/runtime/styleTagTransform.js?");
270
+
271
+ /***/ }),
272
+
173
273
  /***/ "../../../node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js":
174
274
  /*!*****************************************************************************************************!*\
175
275
  !*** ../../../node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js ***!
@@ -190,13 +290,33 @@ eval("\n\nif (false) {} else {\n module.exports = __webpack_require__(/*! ../cj
190
290
 
191
291
  /***/ }),
192
292
 
293
+ /***/ "./src/CallControl/call-control.presentational.tsx":
294
+ /*!*********************************************************!*\
295
+ !*** ./src/CallControl/call-control.presentational.tsx ***!
296
+ \*********************************************************/
297
+ /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
298
+
299
+ eval("\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst react_1 = __importStar(__webpack_require__(/*! react */ \"react\"));\n__webpack_require__(/*! ./call-control.styles.scss */ \"./src/CallControl/call-control.styles.scss\");\nfunction CallControlPresentational(props) {\n const [isHeld, setIsHeld] = (0, react_1.useState)(false);\n const [isRecording, setIsRecording] = (0, react_1.useState)(true);\n const [selectedWrapupReason, setSelectedWrapupReason] = (0, react_1.useState)(null);\n const [selectedWrapupId, setSelectedWrapupId] = (0, react_1.useState)(null);\n const { currentTask, audioRef, toggleHold, toggleRecording, endCall, wrapupCall, wrapupCodes, wrapupRequired } = props;\n const handletoggleHold = () => {\n toggleHold(!isHeld);\n setIsHeld(!isHeld);\n };\n const handletoggleRecording = () => {\n toggleRecording(isRecording);\n setIsRecording(!isRecording);\n };\n const handleWrapupCall = () => {\n if (selectedWrapupReason && selectedWrapupId) {\n wrapupCall(selectedWrapupReason, selectedWrapupId);\n setSelectedWrapupReason('');\n }\n };\n const handleWrapupChange = (event) => {\n const { text, value } = event.target.options[event.target.selectedIndex];\n setSelectedWrapupReason(text);\n setSelectedWrapupId(value);\n };\n return (react_1.default.createElement(react_1.default.Fragment, null,\n react_1.default.createElement(\"audio\", { ref: audioRef, id: \"remote-audio\", autoPlay: true }),\n currentTask && (react_1.default.createElement(\"div\", { className: \"box\" },\n react_1.default.createElement(\"section\", { className: \"section-box\" },\n react_1.default.createElement(\"fieldset\", { className: \"fieldset\" },\n react_1.default.createElement(\"legend\", { className: \"legend-box\" }, \"Call Control\"),\n react_1.default.createElement(\"div\", { style: { display: 'flex', flexDirection: 'column', flexGrow: 1 } },\n react_1.default.createElement(\"div\", { style: { display: 'flex', gap: '1rem' } },\n react_1.default.createElement(\"button\", { className: \"btn\", onClick: handletoggleHold, disabled: wrapupRequired }, isHeld ? 'Resume' : 'Hold'),\n react_1.default.createElement(\"button\", { className: \"btn\", onClick: handletoggleRecording, disabled: wrapupRequired }, isRecording ? 'Pause Recording' : 'Resume Recording'),\n react_1.default.createElement(\"button\", { className: \"btn\", onClick: endCall, disabled: wrapupRequired }, \"End\")),\n react_1.default.createElement(\"div\", { style: { display: 'flex', gap: '1rem', marginTop: '1rem' } },\n react_1.default.createElement(\"select\", { className: \"select\", onChange: handleWrapupChange, disabled: !wrapupRequired },\n react_1.default.createElement(\"option\", { value: \"\" }, \"Select the wrap-up reason\"),\n wrapupCodes.map((wrapup) => (react_1.default.createElement(\"option\", { key: wrapup.id, value: wrapup.id }, wrapup.name)))),\n react_1.default.createElement(\"button\", { className: \"btn\", onClick: handleWrapupCall, disabled: !wrapupRequired && !selectedWrapupReason }, \"Wrap Up\")))))))));\n}\nexports[\"default\"] = CallControlPresentational;\n\n\n//# sourceURL=webpack://@webex/cc-task/./src/CallControl/call-control.presentational.tsx?");
300
+
301
+ /***/ }),
302
+
303
+ /***/ "./src/CallControl/index.tsx":
304
+ /*!***********************************!*\
305
+ !*** ./src/CallControl/index.tsx ***!
306
+ \***********************************/
307
+ /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
308
+
309
+ eval("\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.CallControl = void 0;\nconst react_1 = __importDefault(__webpack_require__(/*! react */ \"react\"));\nconst mobx_react_lite_1 = __webpack_require__(/*! mobx-react-lite */ \"../../../node_modules/mobx-react-lite/es/index.js\");\nconst cc_store_1 = __importDefault(__webpack_require__(/*! @webex/cc-store */ \"@webex/cc-store\"));\nconst helper_1 = __webpack_require__(/*! ../helper */ \"./src/helper.ts\");\nconst call_control_presentational_1 = __importDefault(__webpack_require__(/*! ./call-control.presentational */ \"./src/CallControl/call-control.presentational.tsx\"));\nconst CallControlComponent = ({ onHoldResume, onEnd, onWrapUp }) => {\n const { logger, currentTask, wrapupCodes } = cc_store_1.default;\n const result = (0, helper_1.useCallControl)({ currentTask, onHoldResume, onEnd, onWrapUp, logger });\n return react_1.default.createElement(call_control_presentational_1.default, Object.assign({}, result, { wrapupCodes: wrapupCodes }));\n};\nconst CallControl = (0, mobx_react_lite_1.observer)(CallControlComponent);\nexports.CallControl = CallControl;\n\n\n//# sourceURL=webpack://@webex/cc-task/./src/CallControl/index.tsx?");
310
+
311
+ /***/ }),
312
+
193
313
  /***/ "./src/IncomingTask/incoming-task.presentational.tsx":
194
314
  /*!***********************************************************!*\
195
315
  !*** ./src/IncomingTask/incoming-task.presentational.tsx ***!
196
316
  \***********************************************************/
197
317
  /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
198
318
 
199
- eval("\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst react_1 = __importDefault(__webpack_require__(/*! react */ \"react\"));\nconst styles = {\n box: {\n backgroundColor: '#ffffff',\n borderRadius: '8px',\n boxShadow: '0 2px 4px rgba(0, 0, 0, 0.1)',\n padding: '20px',\n maxWidth: '800px',\n margin: '0 auto',\n },\n sectionBox: {\n padding: '10px',\n border: '1px solid #ddd',\n borderRadius: '8px',\n marginBottom: '20px',\n },\n fieldset: {\n border: '1px solid #ccc',\n borderRadius: '5px',\n padding: '10px',\n marginBottom: '20px',\n position: 'relative',\n },\n legendBox: {\n fontWeight: 'bold',\n color: '#0052bf',\n },\n container: {\n border: '1px solid #ccc',\n borderRadius: '8px',\n padding: '16px',\n width: '350px',\n boxShadow: '0px 4px 8px rgba(0, 0, 0, 0.2)',\n fontFamily: 'Arial, sans-serif',\n backgroundColor: '#ffffff',\n display: 'flex',\n flexDirection: 'column',\n },\n topSection: {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n },\n iconWrapper: {\n display: 'inline-block',\n backgroundColor: '#d4f8e8',\n borderRadius: '50%',\n width: '40px',\n height: '40px',\n justifyContent: 'center',\n alignItems: 'center',\n marginRight: '10px',\n },\n iconSvg: {\n width: '24px',\n height: '24px',\n color: '#146f5c',\n },\n callInfo: {\n margin: 0,\n fontSize: '1.2em',\n color: '#333',\n },\n aniText: {\n fontSize: '1.1em',\n fontWeight: 'bold',\n margin: '4px 0',\n color: '#146f5c',\n },\n buttonsWrapper: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'flex-end',\n marginLeft: '16px',\n },\n answerButton: {\n padding: '8px 16px',\n border: 'none',\n borderRadius: '6px',\n fontSize: '0.9em',\n cursor: 'pointer',\n fontWeight: 'bold',\n backgroundColor: '#28a745',\n color: '#fff',\n marginBottom: '8px',\n },\n declineButton: {\n padding: '8px 16px',\n border: 'none',\n borderRadius: '6px',\n fontSize: '0.9em',\n cursor: 'pointer',\n fontWeight: 'bold',\n backgroundColor: '#dc3545',\n color: '#fff',\n },\n queueInfo: {\n fontSize: '0.9em',\n color: '#666',\n marginTop: '8px',\n },\n timeElapsed: {\n color: '#28a745',\n fontWeight: 'bold',\n },\n callDetails: {\n marginTop: '16px',\n fontSize: '0.9em',\n color: '#333',\n },\n detailItem: {\n margin: '4px 0',\n },\n detailLabel: {\n color: '#555',\n fontWeight: 'bold',\n },\n};\nconst IncomingTaskPresentational = (props) => {\n const { currentTask, accept, decline, isBrowser, audioRef } = props;\n if (!currentTask) {\n return react_1.default.createElement(react_1.default.Fragment, null); // hidden component\n }\n const callAssociationDetails = currentTask.data.interaction.callAssociatedDetails;\n const { ani, dn, virtualTeamName } = callAssociationDetails;\n const timeElapsed = ''; // TODO: Calculate time elapsed\n return (react_1.default.createElement(\"div\", { style: styles.box },\n react_1.default.createElement(\"section\", { style: styles.sectionBox },\n react_1.default.createElement(\"fieldset\", { style: styles.fieldset },\n react_1.default.createElement(\"legend\", { style: styles.legendBox }, \"Incoming Task\"),\n react_1.default.createElement(\"div\", { \"data-testid\": \"incoming-task-presentational\", style: styles.container },\n react_1.default.createElement(\"div\", { style: styles.topSection },\n react_1.default.createElement(\"div\", { style: { display: 'flex', alignItems: 'center' } },\n react_1.default.createElement(\"span\", { style: styles.iconWrapper },\n react_1.default.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", viewBox: \"0 0 24 24\", fill: \"none\", stroke: \"currentColor\", strokeWidth: \"2\", strokeLinecap: \"round\", strokeLinejoin: \"round\", style: styles.iconSvg },\n react_1.default.createElement(\"path\", { d: \"M22 16.92v3a2 2 0 0 1-2.18 2 19.86 19.86 0 0 1-8.63-2.73 19.5 19.5 0 0 1-6-6A19.86 19.86 0 0 1 3.08 4.18 2 2 0 0 1 5 2h3a2 2 0 0 1 2 1.72c.2 1.52.71 2.94 1.41 4.24a2 2 0 0 1-.45 2.31L9.91 11a16 16 0 0 0 6 6l1.73-1.05a2 2 0 0 1 2.31-.45 16.11 16.11 0 0 0 4.24 1.41A2 2 0 0 1 22 16.92z\" }))),\n react_1.default.createElement(\"div\", null,\n react_1.default.createElement(\"h2\", { style: styles.callInfo }, \"Incoming Call\"),\n react_1.default.createElement(\"p\", { \"data-testid\": \"incoming-task-ani\", style: styles.aniText }, ani))),\n isBrowser && (react_1.default.createElement(\"div\", { style: styles.buttonsWrapper },\n react_1.default.createElement(\"button\", { style: styles.answerButton, onClick: accept }, \"Answer\"),\n react_1.default.createElement(\"button\", { style: styles.declineButton, onClick: decline }, \"Decline\")))),\n react_1.default.createElement(\"audio\", { ref: audioRef, id: \"remote-audio\" }),\n react_1.default.createElement(\"p\", { style: styles.queueInfo },\n virtualTeamName,\n \" - \",\n react_1.default.createElement(\"span\", { style: styles.timeElapsed }, timeElapsed)),\n react_1.default.createElement(\"div\", { style: styles.callDetails },\n react_1.default.createElement(\"p\", { style: styles.detailItem },\n react_1.default.createElement(\"strong\", { style: styles.detailLabel }, \"Phone Number:\"),\n \" \",\n ani),\n react_1.default.createElement(\"p\", { style: styles.detailItem },\n react_1.default.createElement(\"strong\", { style: styles.detailLabel }, \"DNIS:\"),\n \" \",\n dn),\n react_1.default.createElement(\"p\", { style: styles.detailItem },\n react_1.default.createElement(\"strong\", { style: styles.detailLabel }, \"Queue Name:\"),\n \" \",\n virtualTeamName)))))));\n};\nexports[\"default\"] = IncomingTaskPresentational;\n\n\n//# sourceURL=webpack://@webex/cc-task/./src/IncomingTask/incoming-task.presentational.tsx?");
319
+ eval("\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst react_1 = __importDefault(__webpack_require__(/*! react */ \"react\"));\nconst styles = {\n box: {\n backgroundColor: '#ffffff',\n borderRadius: '8px',\n boxShadow: '0 2px 4px rgba(0, 0, 0, 0.1)',\n padding: '20px',\n maxWidth: '800px',\n margin: '0 auto',\n },\n sectionBox: {\n padding: '10px',\n border: '1px solid #ddd',\n borderRadius: '8px',\n marginBottom: '20px',\n },\n fieldset: {\n border: '1px solid #ccc',\n borderRadius: '5px',\n padding: '10px',\n marginBottom: '20px',\n position: 'relative',\n },\n legendBox: {\n fontWeight: 'bold',\n color: '#0052bf',\n },\n container: {\n border: '1px solid #ccc',\n borderRadius: '8px',\n padding: '16px',\n width: '350px',\n boxShadow: '0px 4px 8px rgba(0, 0, 0, 0.2)',\n fontFamily: 'Arial, sans-serif',\n backgroundColor: '#ffffff',\n display: 'flex',\n flexDirection: 'column',\n },\n topSection: {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n },\n iconWrapper: {\n display: 'inline-block',\n backgroundColor: '#d4f8e8',\n borderRadius: '50%',\n width: '40px',\n height: '40px',\n justifyContent: 'center',\n alignItems: 'center',\n marginRight: '10px',\n },\n iconSvg: {\n width: '24px',\n height: '24px',\n color: '#146f5c',\n },\n callInfo: {\n margin: 0,\n fontSize: '1.2em',\n color: '#333',\n },\n aniText: {\n fontSize: '1.1em',\n fontWeight: 'bold',\n margin: '4px 0',\n color: '#146f5c',\n },\n buttonsWrapper: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'flex-end',\n marginLeft: '16px',\n },\n answerButton: {\n padding: '8px 16px',\n border: 'none',\n borderRadius: '6px',\n fontSize: '0.9em',\n cursor: 'pointer',\n fontWeight: 'bold',\n backgroundColor: '#28a745',\n color: '#fff',\n marginBottom: '8px',\n },\n declineButton: {\n padding: '8px 16px',\n border: 'none',\n borderRadius: '6px',\n fontSize: '0.9em',\n cursor: 'pointer',\n fontWeight: 'bold',\n backgroundColor: '#dc3545',\n color: '#fff',\n },\n queueInfo: {\n fontSize: '0.9em',\n color: '#666',\n marginTop: '8px',\n },\n timeElapsed: {\n color: '#28a745',\n fontWeight: 'bold',\n },\n callDetails: {\n marginTop: '16px',\n fontSize: '0.9em',\n color: '#333',\n },\n detailItem: {\n margin: '4px 0',\n },\n detailLabel: {\n color: '#555',\n fontWeight: 'bold',\n },\n};\nconst IncomingTaskPresentational = (props) => {\n const { incomingTask, accept, decline, isBrowser, isAnswered } = props;\n if (!incomingTask || isAnswered) {\n return react_1.default.createElement(react_1.default.Fragment, null); // hidden component\n }\n const callAssociationDetails = incomingTask.data.interaction.callAssociatedDetails;\n const { ani, dn, virtualTeamName } = callAssociationDetails;\n const timeElapsed = ''; // TODO: Calculate time elapsed\n return (react_1.default.createElement(\"div\", { style: styles.box },\n react_1.default.createElement(\"section\", { style: styles.sectionBox },\n react_1.default.createElement(\"fieldset\", { style: styles.fieldset },\n react_1.default.createElement(\"legend\", { style: styles.legendBox }, \"Incoming Task\"),\n react_1.default.createElement(\"div\", { \"data-testid\": \"incoming-task-presentational\", style: styles.container },\n react_1.default.createElement(\"div\", { style: styles.topSection },\n react_1.default.createElement(\"div\", { style: { display: 'flex', alignItems: 'center' } },\n react_1.default.createElement(\"span\", { style: styles.iconWrapper },\n react_1.default.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", viewBox: \"0 0 24 24\", fill: \"none\", stroke: \"currentColor\", strokeWidth: \"2\", strokeLinecap: \"round\", strokeLinejoin: \"round\", style: styles.iconSvg },\n react_1.default.createElement(\"path\", { d: \"M22 16.92v3a2 2 0 0 1-2.18 2 19.86 19.86 0 0 1-8.63-2.73 19.5 19.5 0 0 1-6-6A19.86 19.86 0 0 1 3.08 4.18 2 2 0 0 1 5 2h3a2 2 0 0 1 2 1.72c.2 1.52.71 2.94 1.41 4.24a2 2 0 0 1-.45 2.31L9.91 11a16 16 0 0 0 6 6l1.73-1.05a2 2 0 0 1 2.31-.45 16.11 16.11 0 0 0 4.24 1.41A2 2 0 0 1 22 16.92z\" }))),\n react_1.default.createElement(\"div\", null,\n react_1.default.createElement(\"h2\", { style: styles.callInfo }, \"Incoming Call\"),\n react_1.default.createElement(\"p\", { \"data-testid\": \"incoming-task-ani\", style: styles.aniText }, ani))),\n isBrowser && (react_1.default.createElement(\"div\", { style: styles.buttonsWrapper },\n react_1.default.createElement(\"button\", { style: styles.answerButton, onClick: accept }, \"Answer\"),\n react_1.default.createElement(\"button\", { style: styles.declineButton, onClick: decline }, \"Decline\")))),\n react_1.default.createElement(\"p\", { style: styles.queueInfo },\n virtualTeamName,\n \" - \",\n react_1.default.createElement(\"span\", { style: styles.timeElapsed }, timeElapsed)),\n react_1.default.createElement(\"div\", { style: styles.callDetails },\n react_1.default.createElement(\"p\", { style: styles.detailItem },\n react_1.default.createElement(\"strong\", { style: styles.detailLabel }, \"Phone Number:\"),\n \" \",\n ani),\n react_1.default.createElement(\"p\", { style: styles.detailItem },\n react_1.default.createElement(\"strong\", { style: styles.detailLabel }, \"DNIS:\"),\n \" \",\n dn),\n react_1.default.createElement(\"p\", { style: styles.detailItem },\n react_1.default.createElement(\"strong\", { style: styles.detailLabel }, \"Queue Name:\"),\n \" \",\n virtualTeamName)))))));\n};\nexports[\"default\"] = IncomingTaskPresentational;\n\n\n//# sourceURL=webpack://@webex/cc-task/./src/IncomingTask/incoming-task.presentational.tsx?");
200
320
 
201
321
  /***/ }),
202
322
 
@@ -206,7 +326,7 @@ eval("\nvar __importDefault = (this && this.__importDefault) || function (mod) {
206
326
  \************************************/
207
327
  /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
208
328
 
209
- eval("\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.IncomingTask = void 0;\nconst react_1 = __importDefault(__webpack_require__(/*! react */ \"react\"));\nconst mobx_react_lite_1 = __webpack_require__(/*! mobx-react-lite */ \"../../../node_modules/mobx-react-lite/es/index.js\");\nconst cc_store_1 = __importDefault(__webpack_require__(/*! @webex/cc-store */ \"@webex/cc-store\"));\nconst helper_1 = __webpack_require__(/*! ../helper */ \"./src/helper.ts\");\nconst incoming_task_presentational_1 = __importDefault(__webpack_require__(/*! ./incoming-task.presentational */ \"./src/IncomingTask/incoming-task.presentational.tsx\"));\nconst IncomingTask = (0, mobx_react_lite_1.observer)(({ onAccepted, onDeclined }) => {\n const { cc, selectedLoginOption, logger } = cc_store_1.default;\n const result = (0, helper_1.useIncomingTask)({ cc, onAccepted, onDeclined, selectedLoginOption, logger });\n const props = Object.assign({}, result);\n return react_1.default.createElement(incoming_task_presentational_1.default, Object.assign({}, props));\n});\nexports.IncomingTask = IncomingTask;\n\n\n//# sourceURL=webpack://@webex/cc-task/./src/IncomingTask/index.tsx?");
329
+ eval("\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.IncomingTask = void 0;\nconst react_1 = __importDefault(__webpack_require__(/*! react */ \"react\"));\nconst mobx_react_lite_1 = __webpack_require__(/*! mobx-react-lite */ \"../../../node_modules/mobx-react-lite/es/index.js\");\nconst cc_store_1 = __importDefault(__webpack_require__(/*! @webex/cc-store */ \"@webex/cc-store\"));\nconst helper_1 = __webpack_require__(/*! ../helper */ \"./src/helper.ts\");\nconst incoming_task_presentational_1 = __importDefault(__webpack_require__(/*! ./incoming-task.presentational */ \"./src/IncomingTask/incoming-task.presentational.tsx\"));\nconst IncomingTaskComponent = ({ onAccepted, onDeclined }) => {\n const { cc, selectedLoginOption, logger } = cc_store_1.default;\n const result = (0, helper_1.useIncomingTask)({ cc, onAccepted, onDeclined, selectedLoginOption, logger });\n const props = Object.assign({}, result);\n return react_1.default.createElement(incoming_task_presentational_1.default, Object.assign({}, props));\n};\nconst IncomingTask = (0, mobx_react_lite_1.observer)(IncomingTaskComponent);\nexports.IncomingTask = IncomingTask;\n\n\n//# sourceURL=webpack://@webex/cc-task/./src/IncomingTask/index.tsx?");
210
330
 
211
331
  /***/ }),
212
332
 
@@ -216,7 +336,7 @@ eval("\nvar __importDefault = (this && this.__importDefault) || function (mod) {
216
336
  \********************************/
217
337
  /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
218
338
 
219
- eval("\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.TaskList = void 0;\nconst react_1 = __importDefault(__webpack_require__(/*! react */ \"react\"));\nconst cc_store_1 = __importDefault(__webpack_require__(/*! @webex/cc-store */ \"@webex/cc-store\"));\nconst mobx_react_lite_1 = __webpack_require__(/*! mobx-react-lite */ \"../../../node_modules/mobx-react-lite/es/index.js\");\nconst task_list_presentational_1 = __importDefault(__webpack_require__(/*! ./task-list.presentational */ \"./src/TaskList/task-list.presentational.tsx\"));\nconst helper_1 = __webpack_require__(/*! ../helper */ \"./src/helper.ts\");\nconst TaskList = (0, mobx_react_lite_1.observer)(() => {\n const { cc, selectedLoginOption, logger } = cc_store_1.default;\n const result = (0, helper_1.useTaskList)({ cc, selectedLoginOption, logger });\n return react_1.default.createElement(task_list_presentational_1.default, Object.assign({}, result));\n});\nexports.TaskList = TaskList;\n\n\n//# sourceURL=webpack://@webex/cc-task/./src/TaskList/index.tsx?");
339
+ eval("\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.TaskList = void 0;\nconst react_1 = __importDefault(__webpack_require__(/*! react */ \"react\"));\nconst cc_store_1 = __importDefault(__webpack_require__(/*! @webex/cc-store */ \"@webex/cc-store\"));\nconst mobx_react_lite_1 = __webpack_require__(/*! mobx-react-lite */ \"../../../node_modules/mobx-react-lite/es/index.js\");\nconst task_list_presentational_1 = __importDefault(__webpack_require__(/*! ./task-list.presentational */ \"./src/TaskList/task-list.presentational.tsx\"));\nconst helper_1 = __webpack_require__(/*! ../helper */ \"./src/helper.ts\");\nconst TaskListComponent = () => {\n const { cc, currentTask, selectedLoginOption, logger } = cc_store_1.default;\n const result = (0, helper_1.useTaskList)({ cc, selectedLoginOption, logger });\n const props = Object.assign(Object.assign({}, result), { currentTask });\n return react_1.default.createElement(task_list_presentational_1.default, Object.assign({}, props));\n};\nconst TaskList = (0, mobx_react_lite_1.observer)(TaskListComponent);\nexports.TaskList = TaskList;\n\n\n//# sourceURL=webpack://@webex/cc-task/./src/TaskList/index.tsx?");
220
340
 
221
341
  /***/ }),
222
342
 
@@ -226,7 +346,7 @@ eval("\nvar __importDefault = (this && this.__importDefault) || function (mod) {
226
346
  \***************************************************/
227
347
  /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
228
348
 
229
- eval("\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst react_1 = __importDefault(__webpack_require__(/*! react */ \"react\"));\nconst styles = {\n box: {\n backgroundColor: '#ffffff',\n borderRadius: '8px',\n boxShadow: '0 2px 4px rgba(0, 0, 0, 0.1)',\n padding: '20px',\n maxWidth: '800px',\n margin: '0 auto',\n },\n container: {\n display: 'flex',\n flexDirection: 'column',\n gap: '10px',\n padding: '20px',\n },\n card: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n backgroundColor: '#ffffff',\n border: '1px solid #ddd',\n borderRadius: '8px',\n padding: '10px 15px',\n boxShadow: '0px 2px 4px rgba(0, 0, 0, 0.1)',\n },\n leftSection: {\n display: 'flex',\n alignItems: 'center',\n gap: '10px',\n },\n icon: {\n backgroundColor: '#bdf5cf',\n borderRadius: '50%',\n width: '40px',\n height: '40px',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n },\n iconSvg: {\n width: '24px',\n height: '24px',\n color: '#146f5c',\n },\n textPrimary: {\n margin: 0,\n fontSize: '16px',\n fontWeight: 'bold',\n },\n textSecondary: {\n margin: 0,\n fontSize: '14px',\n color: '#888',\n },\n rightSectionText: {\n margin: 0,\n fontSize: '14px',\n fontWeight: 'bold',\n color: '#333',\n },\n buttonsWrapper: {\n display: 'flex',\n gap: '10px',\n },\n acceptButton: {\n padding: '8px 16px',\n border: 'none',\n borderRadius: '6px',\n fontSize: '0.9em',\n cursor: 'pointer',\n fontWeight: 'bold',\n backgroundColor: '#28a745',\n color: '#fff',\n },\n rejectButton: {\n padding: '8px 16px',\n border: 'none',\n borderRadius: '6px',\n fontSize: '0.9em',\n cursor: 'pointer',\n fontWeight: 'bold',\n backgroundColor: '#dc3545',\n color: '#fff',\n },\n fieldset: {\n border: '1px solid #ccc',\n borderRadius: '5px',\n padding: '10px',\n marginBottom: '20px',\n position: 'relative',\n },\n legendBox: {\n fontWeight: 'bold',\n color: '#0052bf',\n },\n};\nconst TaskListPresentational = (props) => {\n if (props.taskList.length <= 0) {\n return react_1.default.createElement(react_1.default.Fragment, null); // hidden component\n }\n const { taskList, acceptTask, declineTask, isBrowser } = props;\n return (react_1.default.createElement(\"div\", { style: styles.box },\n react_1.default.createElement(\"fieldset\", { style: styles.fieldset },\n react_1.default.createElement(\"legend\", { style: styles.legendBox }, \"TaskList\"),\n react_1.default.createElement(\"div\", { style: styles.container }, taskList.map((task, index) => {\n const callAssociationDetails = task.data.interaction.callAssociatedDetails;\n const { ani, dn, virtualTeamName } = callAssociationDetails;\n return (react_1.default.createElement(\"div\", { key: index, style: styles.card },\n react_1.default.createElement(\"div\", { style: styles.leftSection },\n react_1.default.createElement(\"div\", { style: styles.icon },\n react_1.default.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", viewBox: \"0 0 24 24\", fill: \"none\", stroke: \"currentColor\", strokeWidth: \"2\", strokeLinecap: \"round\", strokeLinejoin: \"round\", style: styles.iconSvg },\n react_1.default.createElement(\"path\", { d: \"M22 16.92v3a2 2 0 0 1-2.18 2 19.86 19.86 0 0 1-8.63-2.73 19.5 19.5 0 0 1-6-6A19.86 19.86 0 0 1 3.08 4.18 2 2 0 0 1 5 2h3a2 2 0 0 1 2 1.72c.2 1.52.71 2.94 1.41 4.24a2 2 0 0 1-.45 2.31L9.91 11a16 16 0 0 0 6 6l1.73-1.05a2 2 0 0 1 2.31-.45 16.11 16.11 0 0 0 4.24 1.41A2 2 0 0 1 22 16.92z\" }))),\n react_1.default.createElement(\"div\", null,\n react_1.default.createElement(\"p\", { style: styles.textPrimary }, ani),\n react_1.default.createElement(\"p\", { style: styles.textSecondary }, virtualTeamName))),\n react_1.default.createElement(\"div\", null,\n react_1.default.createElement(\"p\", { style: styles.rightSectionText }, dn),\n isBrowser && (react_1.default.createElement(\"div\", { style: styles.buttonsWrapper },\n react_1.default.createElement(\"button\", { style: styles.acceptButton, onClick: () => acceptTask(task) }, \"Accept\"),\n react_1.default.createElement(\"button\", { style: styles.rejectButton, onClick: () => declineTask(task) }, \"Reject\"))))));\n })))));\n};\nexports[\"default\"] = TaskListPresentational;\n\n\n//# sourceURL=webpack://@webex/cc-task/./src/TaskList/task-list.presentational.tsx?");
349
+ eval("\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst react_1 = __importDefault(__webpack_require__(/*! react */ \"react\"));\nconst styles = {\n box: {\n backgroundColor: '#ffffff',\n borderRadius: '8px',\n boxShadow: '0 2px 4px rgba(0, 0, 0, 0.1)',\n padding: '20px',\n maxWidth: '800px',\n margin: '0 auto',\n },\n container: {\n display: 'flex',\n flexDirection: 'column',\n gap: '10px',\n padding: '20px',\n },\n card: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n backgroundColor: '#ffffff',\n border: '1px solid #ddd',\n borderRadius: '8px',\n padding: '10px 15px',\n boxShadow: '0px 2px 4px rgba(0, 0, 0, 0.1)',\n },\n leftSection: {\n display: 'flex',\n alignItems: 'center',\n gap: '10px',\n },\n icon: {\n backgroundColor: '#bdf5cf',\n borderRadius: '50%',\n width: '40px',\n height: '40px',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n },\n iconSvg: {\n width: '24px',\n height: '24px',\n color: '#146f5c',\n },\n textPrimary: {\n margin: 0,\n fontSize: '16px',\n fontWeight: 'bold',\n },\n textSecondary: {\n margin: 0,\n fontSize: '14px',\n color: '#888',\n },\n rightSectionText: {\n margin: 0,\n fontSize: '14px',\n fontWeight: 'bold',\n color: '#333',\n },\n buttonsWrapper: {\n display: 'flex',\n gap: '10px',\n },\n acceptButton: {\n padding: '8px 16px',\n border: 'none',\n borderRadius: '6px',\n fontSize: '0.9em',\n cursor: 'pointer',\n fontWeight: 'bold',\n backgroundColor: '#28a745',\n color: '#fff',\n },\n rejectButton: {\n padding: '8px 16px',\n border: 'none',\n borderRadius: '6px',\n fontSize: '0.9em',\n cursor: 'pointer',\n fontWeight: 'bold',\n backgroundColor: '#dc3545',\n color: '#fff',\n },\n fieldset: {\n border: '1px solid #ccc',\n borderRadius: '5px',\n padding: '10px',\n marginBottom: '20px',\n position: 'relative',\n },\n legendBox: {\n fontWeight: 'bold',\n color: '#0052bf',\n },\n};\nconst TaskListPresentational = (props) => {\n if (props.taskList.length <= 0) {\n return react_1.default.createElement(react_1.default.Fragment, null); // hidden component\n }\n const { currentTask, taskList, acceptTask, declineTask, isBrowser } = props;\n return (react_1.default.createElement(\"div\", { style: styles.box },\n react_1.default.createElement(\"fieldset\", { style: styles.fieldset },\n react_1.default.createElement(\"legend\", { style: styles.legendBox }, \"TaskList\"),\n react_1.default.createElement(\"div\", { style: styles.container }, taskList.map((task, index) => {\n const callAssociationDetails = task.data.interaction.callAssociatedDetails;\n const { ani, dn, virtualTeamName } = callAssociationDetails;\n return (react_1.default.createElement(\"div\", { key: index, style: styles.card },\n react_1.default.createElement(\"div\", { style: styles.leftSection },\n react_1.default.createElement(\"div\", { style: styles.icon },\n react_1.default.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", viewBox: \"0 0 24 24\", fill: \"none\", stroke: \"currentColor\", strokeWidth: \"2\", strokeLinecap: \"round\", strokeLinejoin: \"round\", style: styles.iconSvg },\n react_1.default.createElement(\"path\", { d: \"M22 16.92v3a2 2 0 0 1-2.18 2 19.86 19.86 0 0 1-8.63-2.73 19.5 19.5 0 0 1-6-6A19.86 19.86 0 0 1 3.08 4.18 2 2 0 0 1 5 2h3a2 2 0 0 1 2 1.72c.2 1.52.71 2.94 1.41 4.24a2 2 0 0 1-.45 2.31L9.91 11a16 16 0 0 0 6 6l1.73-1.05a2 2 0 0 1 2.31-.45 16.11 16.11 0 0 0 4.24 1.41A2 2 0 0 1 22 16.92z\" }))),\n react_1.default.createElement(\"div\", null,\n react_1.default.createElement(\"p\", { style: styles.textPrimary }, ani),\n react_1.default.createElement(\"p\", { style: styles.textSecondary }, virtualTeamName))),\n !currentTask && (react_1.default.createElement(\"div\", null,\n react_1.default.createElement(\"p\", { style: styles.rightSectionText }, dn),\n isBrowser && (react_1.default.createElement(\"div\", { style: styles.buttonsWrapper },\n react_1.default.createElement(\"button\", { style: styles.acceptButton, onClick: () => acceptTask(task) }, \"Accept\"),\n react_1.default.createElement(\"button\", { style: styles.rejectButton, onClick: () => declineTask(task) }, \"Reject\")))))));\n })))));\n};\nexports[\"default\"] = TaskListPresentational;\n\n\n//# sourceURL=webpack://@webex/cc-task/./src/TaskList/task-list.presentational.tsx?");
230
350
 
231
351
  /***/ }),
232
352
 
@@ -234,9 +354,9 @@ eval("\nvar __importDefault = (this && this.__importDefault) || function (mod) {
234
354
  /*!***********************!*\
235
355
  !*** ./src/helper.ts ***!
236
356
  \***********************/
237
- /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
357
+ /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
238
358
 
239
- eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.useIncomingTask = exports.useTaskList = void 0;\nconst react_1 = __webpack_require__(/*! react */ \"react\");\nconst task_types_1 = __webpack_require__(/*! ./task.types */ \"./src/task.types.ts\");\n// Hook for managing the task list\nconst useTaskList = (props) => {\n const { cc, selectedLoginOption, onTaskAccepted, onTaskDeclined, logger } = props;\n const [taskList, setTaskList] = (0, react_1.useState)([]);\n const isBrowser = selectedLoginOption === 'BROWSER';\n const handleTaskRemoved = (0, react_1.useCallback)((taskId) => {\n setTaskList((prev) => {\n const taskToRemove = prev.find((task) => task.data.interactionId === taskId);\n if (taskToRemove) {\n // Clean up listeners on the task\n taskToRemove.off(task_types_1.TASK_EVENTS.TASK_END, () => handleTaskRemoved(taskId));\n taskToRemove.off(task_types_1.TASK_EVENTS.TASK_UNASSIGNED, () => handleTaskRemoved(taskId));\n }\n return prev.filter((task) => task.data.interactionId !== taskId);\n });\n }, []);\n const handleIncomingTask = (0, react_1.useCallback)((task) => {\n setTaskList((prev) => {\n if (prev.some((t) => t.data.interactionId === task.data.interactionId)) {\n return prev;\n }\n // Attach event listeners to the task\n task.on(task_types_1.TASK_EVENTS.TASK_END, () => handleTaskRemoved(task.data.interactionId));\n task.on(task_types_1.TASK_EVENTS.TASK_UNASSIGNED, () => handleTaskRemoved(task.data.interactionId));\n return [...prev, task];\n });\n }, [handleTaskRemoved] // Include handleTaskRemoved as a dependency\n );\n const acceptTask = (task) => {\n const taskId = task === null || task === void 0 ? void 0 : task.data.interactionId;\n if (!taskId)\n return;\n task\n .accept(taskId)\n .then(() => {\n onTaskAccepted && onTaskAccepted(task);\n })\n .catch((error) => {\n logger.error(`Error accepting task: ${error}`, {\n module: 'widget-cc-task#helper.ts',\n method: 'useTaskList#acceptTask',\n });\n });\n };\n const declineTask = (task) => {\n const taskId = task === null || task === void 0 ? void 0 : task.data.interactionId;\n if (!taskId)\n return;\n task\n .decline(taskId)\n .then(() => {\n onTaskDeclined && onTaskDeclined(task);\n })\n .catch((error) => {\n logger.error(`Error declining task: ${error}`, {\n module: 'widget-cc-task#helper.ts',\n method: 'useTaskList#declineTask',\n });\n });\n };\n (0, react_1.useEffect)(() => {\n // Listen for incoming tasks globally\n cc.on(task_types_1.TASK_EVENTS.TASK_INCOMING, handleIncomingTask);\n return () => {\n cc.off(task_types_1.TASK_EVENTS.TASK_INCOMING, handleIncomingTask);\n };\n }, [cc, handleIncomingTask]);\n return { taskList, acceptTask, declineTask, isBrowser };\n};\nexports.useTaskList = useTaskList;\n// Hook for managing the current task\nconst useIncomingTask = (props) => {\n const { cc, onAccepted, onDeclined, selectedLoginOption, logger } = props;\n const [currentTask, setCurrentTask] = (0, react_1.useState)(null);\n const [isAnswered, setIsAnswered] = (0, react_1.useState)(false);\n const [isEnded, setIsEnded] = (0, react_1.useState)(false);\n const [isMissed, setIsMissed] = (0, react_1.useState)(false);\n const audioRef = (0, react_1.useRef)(null); // Ref for the audio element\n const handleTaskAssigned = (0, react_1.useCallback)(() => {\n setIsAnswered(true);\n }, []);\n const handleTaskEnded = (0, react_1.useCallback)(() => {\n setIsEnded(true);\n setCurrentTask(null);\n }, []);\n const handleTaskMissed = (0, react_1.useCallback)(() => {\n setIsMissed(true);\n setCurrentTask(null);\n }, []);\n const handleTaskMedia = (0, react_1.useCallback)((track) => {\n if (audioRef.current) {\n audioRef.current.srcObject = new MediaStream([track]);\n }\n }, []);\n const handleIncomingTask = (0, react_1.useCallback)((task) => {\n setCurrentTask(task);\n }, []);\n (0, react_1.useEffect)(() => {\n cc.on(task_types_1.TASK_EVENTS.TASK_INCOMING, handleIncomingTask);\n if (currentTask) {\n currentTask.on(task_types_1.TASK_EVENTS.TASK_ASSIGNED, handleTaskAssigned);\n currentTask.on(task_types_1.TASK_EVENTS.TASK_END, handleTaskEnded);\n currentTask.on(task_types_1.TASK_EVENTS.TASK_UNASSIGNED, handleTaskMissed);\n currentTask.on(task_types_1.TASK_EVENTS.TASK_MEDIA, handleTaskMedia);\n }\n return () => {\n cc.off(task_types_1.TASK_EVENTS.TASK_INCOMING, handleIncomingTask);\n if (currentTask) {\n currentTask.off(task_types_1.TASK_EVENTS.TASK_ASSIGNED, handleTaskAssigned);\n currentTask.off(task_types_1.TASK_EVENTS.TASK_END, handleTaskEnded);\n currentTask.off(task_types_1.TASK_EVENTS.TASK_UNASSIGNED, handleTaskMissed);\n currentTask.off(task_types_1.TASK_EVENTS.TASK_MEDIA, handleTaskMedia);\n }\n };\n }, [cc, currentTask, handleIncomingTask, handleTaskAssigned, handleTaskEnded, handleTaskMissed, handleTaskMedia]);\n const accept = () => {\n const taskId = currentTask === null || currentTask === void 0 ? void 0 : currentTask.data.interactionId;\n if (!taskId)\n return;\n currentTask\n .accept(taskId)\n .then(() => {\n onAccepted && onAccepted();\n })\n .catch((error) => {\n logger.error(`Error accepting incoming task: ${error}`, {\n module: 'widget-cc-task#helper.ts',\n method: 'useIncomingTask#accept',\n });\n });\n };\n const decline = () => {\n const taskId = currentTask === null || currentTask === void 0 ? void 0 : currentTask.data.interactionId;\n if (!taskId)\n return;\n currentTask\n .decline(taskId)\n .then(() => {\n setCurrentTask(null);\n onDeclined && onDeclined();\n })\n .catch((error) => {\n logger.error(`Error declining incoming task: ${error}`, {\n module: 'widget-cc-task#helper.ts',\n method: 'useIncomingTask#decline',\n });\n });\n };\n const isBrowser = selectedLoginOption === 'BROWSER';\n return {\n currentTask,\n setCurrentTask,\n isAnswered,\n isEnded,\n isMissed,\n accept,\n decline,\n isBrowser,\n audioRef,\n };\n};\nexports.useIncomingTask = useIncomingTask;\n\n\n//# sourceURL=webpack://@webex/cc-task/./src/helper.ts?");
359
+ eval("\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.useCallControl = exports.useIncomingTask = exports.useTaskList = void 0;\nconst react_1 = __webpack_require__(/*! react */ \"react\");\nconst cc_store_1 = __importDefault(__webpack_require__(/*! @webex/cc-store */ \"@webex/cc-store\"));\nconst task_types_1 = __webpack_require__(/*! ./task.types */ \"./src/task.types.ts\");\n// Hook for managing the task list\nconst useTaskList = (props) => {\n const { cc, selectedLoginOption, onTaskAccepted, onTaskDeclined, logger } = props;\n const [taskList, setTaskList] = (0, react_1.useState)([]);\n const isBrowser = selectedLoginOption === 'BROWSER';\n const logError = (message, method) => {\n logger.error(message, {\n module: 'widget-cc-task#helper.ts',\n method: `useTaskList#${method}`,\n });\n };\n const handleTaskRemoved = (0, react_1.useCallback)((taskId) => {\n setTaskList((prev) => {\n const taskToRemove = prev.find((task) => task.data.interactionId === taskId);\n if (taskToRemove) {\n // Clean up listeners on the task\n taskToRemove.off(task_types_1.TASK_EVENTS.TASK_END, () => handleTaskRemoved(taskId));\n }\n return prev.filter((task) => task.data.interactionId !== taskId);\n });\n }, []);\n const handleIncomingTask = (0, react_1.useCallback)((task) => {\n setTaskList((prev) => {\n if (prev.some((t) => t.data.interactionId === task.data.interactionId)) {\n return prev;\n }\n // Attach event listeners to the task\n task.on(task_types_1.TASK_EVENTS.TASK_END, () => handleTaskRemoved(task.data.interactionId));\n return [...prev, task];\n });\n }, [handleTaskRemoved] // Include handleTaskRemoved as a dependency\n );\n const acceptTask = (task) => {\n const taskId = task === null || task === void 0 ? void 0 : task.data.interactionId;\n if (!taskId)\n return;\n task\n .accept(taskId)\n .then(() => {\n cc_store_1.default.setCurrentTask(task);\n onTaskAccepted && onTaskAccepted(task);\n })\n .catch((error) => {\n logError(`Error accepting task: ${error}`, 'acceptTask');\n });\n };\n const declineTask = (task) => {\n const taskId = task === null || task === void 0 ? void 0 : task.data.interactionId;\n if (!taskId)\n return;\n task\n .decline(taskId)\n .then(() => {\n onTaskDeclined && onTaskDeclined(task);\n cc_store_1.default.setCurrentTask(null);\n })\n .catch((error) => {\n logError(`Error declining task: ${error}`, 'declineTask');\n });\n };\n (0, react_1.useEffect)(() => {\n // Listen for incoming tasks globally\n cc.on(task_types_1.TASK_EVENTS.TASK_INCOMING, handleIncomingTask);\n return () => {\n cc.off(task_types_1.TASK_EVENTS.TASK_INCOMING, handleIncomingTask);\n };\n }, [cc, handleIncomingTask]);\n return { taskList, acceptTask, declineTask, isBrowser };\n};\nexports.useTaskList = useTaskList;\n// Hook for managing the current task\nconst useIncomingTask = (props) => {\n const { cc, onAccepted, onDeclined, selectedLoginOption, logger } = props;\n const [incomingTask, setIncomingTask] = (0, react_1.useState)(null);\n const [isAnswered, setIsAnswered] = (0, react_1.useState)(false);\n const [isEnded, setIsEnded] = (0, react_1.useState)(false);\n const isBrowser = selectedLoginOption === 'BROWSER';\n const logError = (message, method) => {\n logger.error(message, {\n module: 'widget-cc-task#helper.ts',\n method: `useIncomingTask#${method}`,\n });\n };\n const handleTaskAssigned = (0, react_1.useCallback)(() => {\n // Task that are accepted using anything other than browser should be populated\n // in the store only when we receive task assigned event\n if (!isBrowser)\n cc_store_1.default.setCurrentTask(incomingTask);\n setIsAnswered(true);\n }, [incomingTask]);\n const handleTaskEnded = (0, react_1.useCallback)(() => {\n setIsEnded(true);\n setIncomingTask(null);\n }, []);\n const handleIncomingTask = (0, react_1.useCallback)((task) => {\n setIncomingTask(task);\n setIsAnswered(false);\n setIsEnded(false);\n }, []);\n (0, react_1.useEffect)(() => {\n cc.on(task_types_1.TASK_EVENTS.TASK_INCOMING, handleIncomingTask);\n if (incomingTask) {\n incomingTask.on(task_types_1.TASK_EVENTS.TASK_ASSIGNED, handleTaskAssigned);\n incomingTask.on(task_types_1.TASK_EVENTS.TASK_END, handleTaskEnded);\n }\n return () => {\n cc.off(task_types_1.TASK_EVENTS.TASK_INCOMING, handleIncomingTask);\n if (incomingTask) {\n incomingTask.off(task_types_1.TASK_EVENTS.TASK_ASSIGNED, handleTaskAssigned);\n incomingTask.off(task_types_1.TASK_EVENTS.TASK_END, handleTaskEnded);\n }\n };\n }, [cc, incomingTask, handleIncomingTask, handleTaskAssigned, handleTaskEnded]);\n const accept = () => {\n const taskId = incomingTask === null || incomingTask === void 0 ? void 0 : incomingTask.data.interactionId;\n if (!taskId)\n return;\n incomingTask\n .accept(taskId)\n .then(() => {\n // Task that are accepted using BROWSER should be populated\n // in the store when we accept the call\n cc_store_1.default.setCurrentTask(incomingTask);\n onAccepted && onAccepted();\n })\n .catch((error) => {\n logError(`Error accepting incoming task: ${error}`, 'accept');\n });\n };\n const decline = () => {\n const taskId = incomingTask === null || incomingTask === void 0 ? void 0 : incomingTask.data.interactionId;\n if (!taskId)\n return;\n incomingTask\n .decline(taskId)\n .then(() => {\n setIncomingTask(null);\n cc_store_1.default.setCurrentTask(null);\n onDeclined && onDeclined();\n })\n .catch((error) => {\n logError(`Error declining incoming task: ${error}`, 'decline');\n });\n };\n return {\n incomingTask,\n isAnswered,\n isEnded,\n accept,\n decline,\n isBrowser,\n };\n};\nexports.useIncomingTask = useIncomingTask;\nconst useCallControl = (props) => {\n const { currentTask, onHoldResume, onEnd, onWrapUp, logger } = props;\n const [wrapupRequired, setWrapupRequired] = (0, react_1.useState)(false);\n const audioRef = (0, react_1.useRef)(null); // Ref for the audio element\n const logError = (message, method) => {\n logger.error(message, {\n module: 'widget-cc-task#helper.ts',\n method: `useCallControl#${method}`,\n });\n };\n const handleTaskEnded = (0, react_1.useCallback)(({ wrapupRequired }) => {\n setWrapupRequired(wrapupRequired);\n }, []);\n const handleTaskMedia = (0, react_1.useCallback)((track) => {\n if (audioRef.current) {\n audioRef.current.srcObject = new MediaStream([track]);\n }\n }, [audioRef, currentTask]);\n (0, react_1.useEffect)(() => {\n if (!currentTask)\n return;\n currentTask.on(task_types_1.TASK_EVENTS.TASK_MEDIA, handleTaskMedia);\n currentTask.on(task_types_1.TASK_EVENTS.TASK_END, handleTaskEnded);\n return () => {\n currentTask.off(task_types_1.TASK_EVENTS.TASK_MEDIA, handleTaskMedia);\n currentTask.off(task_types_1.TASK_EVENTS.TASK_END, handleTaskEnded);\n };\n }, [currentTask, handleTaskEnded]);\n const toggleHold = (hold) => {\n if (hold) {\n currentTask\n .hold()\n .then(() => onHoldResume && onHoldResume())\n .catch((error) => {\n logError(`Error holding call: ${error}`, 'toggleHold');\n });\n return;\n }\n currentTask\n .resume()\n .then(() => onHoldResume && onHoldResume())\n .catch((error) => {\n logError(`Error resuming call: ${error}`, 'toggleHold');\n });\n };\n const toggleRecording = (pause) => {\n const logLocation = {\n module: 'widget-cc-task#helper.ts',\n method: 'useCallControl#pauseResumeRecording',\n };\n if (pause) {\n currentTask.pauseRecording().catch((error) => {\n logError(`Error pausing recording: ${error}`, 'toggleRecording');\n });\n }\n else {\n currentTask.resumeRecording().catch((error) => {\n logError(`Error resuming recording: ${error}`, 'toggleRecording');\n });\n }\n };\n const endCall = () => {\n currentTask\n .end()\n .then(() => {\n if (onEnd)\n onEnd();\n })\n .catch((error) => {\n logError(`Error ending call: ${error}`, 'endCall');\n });\n };\n const wrapupCall = (wrapUpReason, auxCodeId) => {\n currentTask\n .wrapup({ wrapUpReason: wrapUpReason, auxCodeId: auxCodeId })\n .then(() => {\n setWrapupRequired(false);\n cc_store_1.default.setCurrentTask(null);\n if (onWrapUp)\n onWrapUp();\n })\n .catch((error) => {\n logError(`Error wrapping up call: ${error}`, 'wrapupCall');\n });\n };\n return {\n currentTask,\n audioRef,\n endCall,\n toggleHold,\n toggleRecording,\n wrapupCall,\n wrapupRequired,\n };\n};\nexports.useCallControl = useCallControl;\n\n\n//# sourceURL=webpack://@webex/cc-task/./src/helper.ts?");
240
360
 
241
361
  /***/ }),
242
362
 
@@ -246,7 +366,7 @@ eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexpo
246
366
  \**********************/
247
367
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
248
368
 
249
- eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.TaskList = exports.IncomingTask = void 0;\nconst index_1 = __webpack_require__(/*! ./IncomingTask/index */ \"./src/IncomingTask/index.tsx\");\nObject.defineProperty(exports, \"IncomingTask\", ({ enumerable: true, get: function () { return index_1.IncomingTask; } }));\nconst TaskList_1 = __webpack_require__(/*! ./TaskList */ \"./src/TaskList/index.tsx\");\nObject.defineProperty(exports, \"TaskList\", ({ enumerable: true, get: function () { return TaskList_1.TaskList; } }));\n\n\n//# sourceURL=webpack://@webex/cc-task/./src/index.ts?");
369
+ eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.CallControl = exports.TaskList = exports.IncomingTask = void 0;\nconst index_1 = __webpack_require__(/*! ./IncomingTask/index */ \"./src/IncomingTask/index.tsx\");\nObject.defineProperty(exports, \"IncomingTask\", ({ enumerable: true, get: function () { return index_1.IncomingTask; } }));\nconst TaskList_1 = __webpack_require__(/*! ./TaskList */ \"./src/TaskList/index.tsx\");\nObject.defineProperty(exports, \"TaskList\", ({ enumerable: true, get: function () { return TaskList_1.TaskList; } }));\nconst CallControl_1 = __webpack_require__(/*! ./CallControl */ \"./src/CallControl/index.tsx\");\nObject.defineProperty(exports, \"CallControl\", ({ enumerable: true, get: function () { return CallControl_1.CallControl; } }));\n\n\n//# sourceURL=webpack://@webex/cc-task/./src/index.ts?");
250
370
 
251
371
  /***/ }),
252
372
 
@@ -256,7 +376,7 @@ eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexpo
256
376
  \***************************/
257
377
  /***/ ((__unused_webpack_module, exports) => {
258
378
 
259
- eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.TASK_EVENTS = void 0;\nvar TASK_EVENTS;\n(function (TASK_EVENTS) {\n TASK_EVENTS[\"TASK_INCOMING\"] = \"task:incoming\";\n TASK_EVENTS[\"TASK_ASSIGNED\"] = \"task:assigned\";\n TASK_EVENTS[\"TASK_MEDIA\"] = \"task:media\";\n TASK_EVENTS[\"TASK_UNASSIGNED\"] = \"task:unassigned\";\n TASK_EVENTS[\"TASK_HOLD\"] = \"task:hold\";\n TASK_EVENTS[\"TASK_UNHOLD\"] = \"task:unhold\";\n TASK_EVENTS[\"TASK_CONSULT\"] = \"task:consult\";\n TASK_EVENTS[\"TASK_CONSULT_END\"] = \"task:consultEnd\";\n TASK_EVENTS[\"TASK_CONSULT_ACCEPT\"] = \"task:consultAccepted\";\n TASK_EVENTS[\"TASK_PAUSE\"] = \"task:pause\";\n TASK_EVENTS[\"TASK_RESUME\"] = \"task:resume\";\n TASK_EVENTS[\"TASK_END\"] = \"task:end\";\n TASK_EVENTS[\"TASK_WRAPUP\"] = \"task:wrapup\";\n})(TASK_EVENTS || (exports.TASK_EVENTS = TASK_EVENTS = {})); // TODO: remove this once cc sdk exports this enum\n\n\n//# sourceURL=webpack://@webex/cc-task/./src/task.types.ts?");
379
+ eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.TASK_EVENTS = void 0;\nvar TASK_EVENTS;\n(function (TASK_EVENTS) {\n TASK_EVENTS[\"TASK_INCOMING\"] = \"task:incoming\";\n TASK_EVENTS[\"TASK_ASSIGNED\"] = \"task:assigned\";\n TASK_EVENTS[\"TASK_MEDIA\"] = \"task:media\";\n TASK_EVENTS[\"TASK_HOLD\"] = \"task:hold\";\n TASK_EVENTS[\"TASK_UNHOLD\"] = \"task:unhold\";\n TASK_EVENTS[\"TASK_CONSULT\"] = \"task:consult\";\n TASK_EVENTS[\"TASK_CONSULT_END\"] = \"task:consultEnd\";\n TASK_EVENTS[\"TASK_CONSULT_ACCEPT\"] = \"task:consultAccepted\";\n TASK_EVENTS[\"TASK_PAUSE\"] = \"task:pause\";\n TASK_EVENTS[\"TASK_RESUME\"] = \"task:resume\";\n TASK_EVENTS[\"TASK_END\"] = \"task:end\";\n TASK_EVENTS[\"TASK_WRAPUP\"] = \"task:wrapup\";\n})(TASK_EVENTS || (exports.TASK_EVENTS = TASK_EVENTS = {})); // TODO: remove this once cc sdk exports this enum\n\n\n//# sourceURL=webpack://@webex/cc-task/./src/task.types.ts?");
260
380
 
261
381
  /***/ }),
262
382
 
@@ -304,7 +424,7 @@ module.exports = require("react-dom");
304
424
  /******/ }
305
425
  /******/ // Create a new module (and put it into the cache)
306
426
  /******/ var module = __webpack_module_cache__[moduleId] = {
307
- /******/ // no module.id needed
427
+ /******/ id: moduleId,
308
428
  /******/ // no module.loaded needed
309
429
  /******/ exports: {}
310
430
  /******/ };
@@ -369,6 +489,11 @@ module.exports = require("react-dom");
369
489
  /******/ };
370
490
  /******/ })();
371
491
  /******/
492
+ /******/ /* webpack/runtime/nonce */
493
+ /******/ (() => {
494
+ /******/ __webpack_require__.nc = undefined;
495
+ /******/ })();
496
+ /******/
372
497
  /************************************************************************/
373
498
  /******/
374
499
  /******/ // startup
@@ -0,0 +1,5 @@
1
+ import React from 'react';
2
+ import { CallControlPresentationalProps } from '../task.types';
3
+ import './call-control.styles.scss';
4
+ declare function CallControlPresentational(props: CallControlPresentationalProps): React.JSX.Element;
5
+ export default CallControlPresentational;
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ import { CallControlProps } from '../task.types';
3
+ declare const CallControl: React.FunctionComponent<CallControlProps>;
4
+ export { CallControl };
@@ -1,3 +1,3 @@
1
1
  import React from 'react';
2
- declare const TaskList: React.FunctionComponent;
2
+ declare const TaskList: React.FunctionComponent<{}>;
3
3
  export { TaskList };
@@ -1,5 +1,5 @@
1
- import { UseTaskListProps, UseTaskProps } from './task.types';
2
1
  import { ITask } from '@webex/plugin-cc';
2
+ import { useCallControlProps, UseTaskListProps, UseTaskProps } from './task.types';
3
3
  export declare const useTaskList: (props: UseTaskListProps) => {
4
4
  taskList: ITask[];
5
5
  acceptTask: (task: ITask) => void;
@@ -7,13 +7,19 @@ export declare const useTaskList: (props: UseTaskListProps) => {
7
7
  isBrowser: boolean;
8
8
  };
9
9
  export declare const useIncomingTask: (props: UseTaskProps) => {
10
- currentTask: any;
11
- setCurrentTask: import("react").Dispatch<any>;
10
+ incomingTask: any;
12
11
  isAnswered: boolean;
13
12
  isEnded: boolean;
14
- isMissed: boolean;
15
13
  accept: () => void;
16
14
  decline: () => void;
17
15
  isBrowser: boolean;
16
+ };
17
+ export declare const useCallControl: (props: useCallControlProps) => {
18
+ currentTask: ITask;
18
19
  audioRef: import("react").MutableRefObject<HTMLAudioElement>;
20
+ endCall: () => void;
21
+ toggleHold: (hold: boolean) => void;
22
+ toggleRecording: (pause: boolean) => void;
23
+ wrapupCall: (wrapUpReason: string, auxCodeId: string) => void;
24
+ wrapupRequired: boolean;
19
25
  };
@@ -1,3 +1,4 @@
1
1
  import { IncomingTask } from './IncomingTask/index';
2
2
  import { TaskList } from './TaskList';
3
- export { IncomingTask, TaskList };
3
+ import { CallControl } from './CallControl';
4
+ export { IncomingTask, TaskList, CallControl };
@@ -1,5 +1,5 @@
1
1
  import { ITask, IContactCenter } from '@webex/plugin-cc';
2
- import { ILogger } from '@webex/cc-store';
2
+ import { ILogger, WrapupCodes } from '@webex/cc-store';
3
3
  /**
4
4
  * Interface representing the TaskProps of a user.
5
5
  */
@@ -8,6 +8,10 @@ export interface TaskProps {
8
8
  * currentTask of the agent.
9
9
  */
10
10
  currentTask: ITask;
11
+ /**
12
+ * Incoming task on the incoming task widget
13
+ */
14
+ incomingTask: ITask;
11
15
  /**
12
16
  * CC SDK Instance.
13
17
  */
@@ -56,10 +60,6 @@ export interface TaskProps {
56
60
  * Flag to determine if the task is ended
57
61
  */
58
62
  isEnded: boolean;
59
- /**
60
- * Flag to determine if the task is missed
61
- */
62
- isMissed: boolean;
63
63
  /**
64
64
  * Selected login option
65
65
  */
@@ -68,10 +68,6 @@ export interface TaskProps {
68
68
  * List of tasks
69
69
  */
70
70
  taskList: ITask[];
71
- /**
72
- * Audio reference
73
- */
74
- audioRef: React.RefObject<HTMLAudioElement>;
75
71
  /**
76
72
  * The logger instance from SDK
77
73
  */
@@ -79,15 +75,14 @@ export interface TaskProps {
79
75
  }
80
76
  export type UseTaskProps = Pick<TaskProps, 'cc' | 'onAccepted' | 'onDeclined' | 'selectedLoginOption' | 'logger'>;
81
77
  export type UseTaskListProps = Pick<TaskProps, 'cc' | 'selectedLoginOption' | 'onTaskAccepted' | 'onTaskDeclined' | 'logger'>;
82
- export type IncomingTaskPresentationalProps = Pick<TaskProps, 'currentTask' | 'isBrowser' | 'isAnswered' | 'isEnded' | 'isMissed' | 'accept' | 'decline' | 'audioRef'>;
78
+ export type IncomingTaskPresentationalProps = Pick<TaskProps, 'incomingTask' | 'isBrowser' | 'isAnswered' | 'isEnded' | 'accept' | 'decline'>;
83
79
  export type IncomingTaskProps = Pick<TaskProps, 'onAccepted' | 'onDeclined'>;
84
80
  export type TaskListProps = Pick<TaskProps, 'onTaskAccepted' | 'onTaskDeclined'>;
85
- export type TaskListPresentationalProps = Pick<TaskProps, 'taskList' | 'isBrowser' | 'acceptTask' | 'declineTask'>;
81
+ export type TaskListPresentationalProps = Pick<TaskProps, 'currentTask' | 'taskList' | 'isBrowser' | 'acceptTask' | 'declineTask'>;
86
82
  export declare enum TASK_EVENTS {
87
83
  TASK_INCOMING = "task:incoming",
88
84
  TASK_ASSIGNED = "task:assigned",
89
85
  TASK_MEDIA = "task:media",
90
- TASK_UNASSIGNED = "task:unassigned",
91
86
  TASK_HOLD = "task:hold",
92
87
  TASK_UNHOLD = "task:unhold",
93
88
  TASK_CONSULT = "task:consult",
@@ -98,3 +93,64 @@ export declare enum TASK_EVENTS {
98
93
  TASK_END = "task:end",
99
94
  TASK_WRAPUP = "task:wrapup"
100
95
  }
96
+ /**
97
+ * Interface representing the properties for control actions on a task.
98
+ */
99
+ export interface ControlProps {
100
+ /**
101
+ * Audio reference
102
+ */
103
+ audioRef: React.RefObject<HTMLAudioElement>;
104
+ /**
105
+ * The current task being handled.
106
+ */
107
+ currentTask: ITask;
108
+ /**
109
+ * Function to handle hold/resume actions.
110
+ */
111
+ onHoldResume: () => void;
112
+ /**
113
+ * Function to handle ending the task.
114
+ */
115
+ onEnd: () => void;
116
+ /**
117
+ * Function to handle wrapping up the task.
118
+ */
119
+ onWrapUp: () => void;
120
+ /**
121
+ * Logger instance for logging purposes.
122
+ */
123
+ logger: ILogger;
124
+ /**
125
+ * Array of wrap-up codes.
126
+ * TODO: Expose this type from SDK.
127
+ */
128
+ wrapupCodes: WrapupCodes[];
129
+ /**
130
+ * Indicates if wrap-up is required.
131
+ */
132
+ wrapupRequired: boolean;
133
+ /**
134
+ * Function to handle hold/resume actions with a boolean parameter.
135
+ * @param hold - Boolean indicating whether to hold (true) or resume (false).
136
+ */
137
+ toggleHold: (hold: boolean) => void;
138
+ /**
139
+ * Function to handle pause/resume recording actions with a boolean parameter.
140
+ * @param pause - Boolean indicating whether to pause (true) or resume (false) recording.
141
+ */
142
+ toggleRecording: (pause: boolean) => void;
143
+ /**
144
+ * Function to handle ending the call.
145
+ */
146
+ endCall: () => void;
147
+ /**
148
+ * Function to handle wrapping up the call with a reason and ID.
149
+ * @param wrapupReason - The reason for wrapping up the call.
150
+ * @param wrapupId - The ID associated with the wrap-up reason.
151
+ */
152
+ wrapupCall: (wrapupReason: string, wrapupId: string) => void;
153
+ }
154
+ export type CallControlProps = Pick<ControlProps, 'onHoldResume' | 'onEnd' | 'onWrapUp'>;
155
+ export type CallControlPresentationalProps = Pick<ControlProps, 'currentTask' | 'audioRef' | 'wrapupCodes' | 'wrapupRequired' | 'toggleHold' | 'toggleRecording' | 'endCall' | 'wrapupCall'>;
156
+ export type useCallControlProps = Pick<ControlProps, 'currentTask' | 'onHoldResume' | 'onEnd' | 'onWrapUp' | 'logger'>;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@webex/cc-task",
3
3
  "description": "Webex Contact Center Widgets: Task",
4
- "version": "1.28.0-ccwidgets.11",
4
+ "version": "1.28.0-ccwidgets.12",
5
5
  "main": "dist/index.js",
6
6
  "publishConfig": {
7
7
  "access": "public"
@@ -19,7 +19,7 @@
19
19
  "test:unit": "jest --coverage"
20
20
  },
21
21
  "dependencies": {
22
- "@webex/cc-store": "1.28.0-ccwidgets.11",
22
+ "@webex/cc-store": "1.28.0-ccwidgets.12",
23
23
  "mobx-react-lite": "^4.1.0",
24
24
  "webex": "3.7.0-wxcc.5"
25
25
  },
@@ -58,5 +58,5 @@
58
58
  "^.+\\.(css|less|scss)$": "babel-jest"
59
59
  }
60
60
  },
61
- "stableVersion": "1.28.0-ccwidgets.10"
61
+ "stableVersion": "1.28.0-ccwidgets.11"
62
62
  }