@subiz/widget-v4 4.1.210 → 4.1.212
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/README.md +21 -2
- package/assets/img/dot_chat.svg +3 -0
- package/assets/less/chatbox.less +9 -0
- package/assets/less/form.less +10 -0
- package/assets/less/message.less +114 -13
- package/assets/less/widget.less +15 -18
- package/compiled_src/call/css.js +1 -1
- package/compiled_src/chatbox/Buttons.js +7 -4
- package/compiled_src/chatbox/ChatButton.js +127 -29
- package/compiled_src/chatbox/Event.js +37 -5
- package/compiled_src/chatbox/Events.js +348 -129
- package/compiled_src/chatbox/FormAttachment.js +1 -1
- package/compiled_src/chatbox/Header.js +7 -2
- package/compiled_src/chatbox/InfoMessage.js +1 -1
- package/compiled_src/chatbox/MessageInput.js +24 -9
- package/compiled_src/chatbox/OrderAttachments.js +13 -13
- package/compiled_src/chatbox/QuoteMessage.js +3 -2
- package/compiled_src/chatbox/TextMessage.js +22 -18
- package/compiled_src/chatbox/Widget.js +200 -129
- package/compiled_src/chatbox/block.js +39 -29
- package/compiled_src/chatbox/conversation-history.js +44 -0
- package/compiled_src/chatbox/event-layout.js +59 -0
- package/compiled_src/chatbox/greeting.js +32 -0
- package/compiled_src/chatbox/main.js +3 -0
- package/compiled_src/common.js +13 -9
- package/compiled_src/form/css.js +1 -1
- package/compiled_src/lib.js +22 -32
- package/compiled_src/notif/css.js +1 -1
- package/compiled_src/plugin.js +11 -18
- package/compiled_src/popup/css.js +1 -1
- package/compiled_src/popup/popup.js +1 -1
- package/compiled_src/store/api.js +0 -2
- package/compiled_src/store/api_fake.js +1 -1
- package/compiled_src/store/attachments.js +28 -0
- package/compiled_src/store/chain.js +24 -10
- package/compiled_src/store/kv.js +9 -13
- package/compiled_src/store/lsdb.js +1 -1
- package/compiled_src/store/store.js +356 -117
- package/compiled_src/util/common.js +48 -41
- package/compiled_src/util/event.js +15 -0
- package/compiled_src/util/pubsub.js +28 -13
- package/compiled_src/util/url.js +18 -0
- package/dist/127.js +13 -13
- package/dist/132.js +1 -1
- package/dist/1a0f6f3ff1a.127.js +1 -0
- package/dist/{1a0d80f6e72.132.js → 1a0f6f3ff1a.132.js} +1 -1
- package/dist/{1a0d80f6e72.27.js → 1a0f6f3ff1a.27.js} +1 -1
- package/dist/1a0f6f3ff1a.278.js +1 -0
- package/dist/{1a0d80f6e72.339.js → 1a0f6f3ff1a.339.js} +1 -1
- package/dist/1a0f6f3ff1a.459.js +1 -0
- package/dist/1a0f6f3ff1a.app.js +1 -0
- package/dist/{1a0d80f6e72.chat.html → 1a0f6f3ff1a.chat.html} +1 -1
- package/dist/1a0f6f3ff1a.chat.js +1 -0
- package/dist/{1a0d80f6e72.form.html → 1a0f6f3ff1a.form.html} +1 -1
- package/dist/1a0f6f3ff1a.form.js +1 -0
- package/dist/{1a0d80f6e72.index.html → 1a0f6f3ff1a.index.html} +1 -1
- package/dist/{1a0d80f6e72.library.html → 1a0f6f3ff1a.library.html} +1 -1
- package/dist/1a0f6f3ff1a.library.js +1 -0
- package/dist/{1a0d80f6e72.preview.html → 1a0f6f3ff1a.preview.html} +1 -1
- package/dist/1a0f6f3ff1a.preview.js +1 -0
- package/dist/1a0f6f3ff1a.webview.js +1 -0
- package/dist/27.js +2 -2
- package/dist/459.js +2 -2
- package/dist/HASH +1 -1
- package/dist/assets/img/dot_chat.335fd8a.svg +3 -0
- package/dist/screenshoot.js +1523 -619
- package/package.json +12 -5
- package/src/chatbox/Buttons.js +5 -4
- package/src/chatbox/ChatButton.js +133 -39
- package/src/chatbox/Event.js +38 -5
- package/src/chatbox/Events.js +306 -134
- package/src/chatbox/FormAttachment.js +1 -1
- package/src/chatbox/Header.js +5 -4
- package/src/chatbox/InfoMessage.js +1 -1
- package/src/chatbox/MessageInput.js +15 -10
- package/src/chatbox/OrderAttachments.js +13 -13
- package/src/chatbox/QuoteMessage.js +3 -2
- package/src/chatbox/TextMessage.js +21 -20
- package/src/chatbox/Widget.js +150 -150
- package/src/chatbox/block.js +29 -27
- package/src/chatbox/conversation-history.js +37 -0
- package/src/chatbox/event-layout.js +72 -0
- package/src/chatbox/greeting.js +13 -0
- package/src/chatbox/main.js +3 -0
- package/src/common.js +15 -9
- package/src/lib.js +22 -35
- package/src/plugin.js +11 -13
- package/src/popup/popup.js +1 -1
- package/src/store/api.js +0 -2
- package/src/store/api_fake.js +1 -1
- package/src/store/attachments.js +21 -0
- package/src/store/chain.js +25 -12
- package/src/store/kv.js +10 -19
- package/src/store/lsdb.js +1 -1
- package/src/store/store.js +313 -130
- package/src/util/common.js +48 -43
- package/src/util/event.js +7 -0
- package/src/util/pubsub.js +27 -8
- package/src/util/url.js +14 -0
- package/test.cjs +59 -0
- package/assets/less/contact.less +0 -126
- package/compiled_src/util/common.test.js +0 -414
- package/compiled_src/util/event.test.js +0 -38
- package/compiled_src/util/extractor.test.js +0 -299
- package/compiled_src/util/extractor.test2.js +0 -61
- package/compiled_src/util/gate.test.js +0 -18
- package/compiled_src/util/pubsub.test.js +0 -35
- package/dist/1a0d80f6e72.127.js +0 -1
- package/dist/1a0d80f6e72.278.js +0 -1
- package/dist/1a0d80f6e72.459.js +0 -1
- package/dist/1a0d80f6e72.74.js +0 -1
- package/dist/1a0d80f6e72.997.js +0 -1
- package/dist/1a0d80f6e72.app.js +0 -1
- package/dist/1a0d80f6e72.chat.js +0 -1
- package/dist/1a0d80f6e72.form.js +0 -1
- package/dist/1a0d80f6e72.library.js +0 -1
- package/dist/1a0d80f6e72.preview.js +0 -1
- package/dist/1a0d80f6e72.webview.js +0 -1
- package/dist/74.js +0 -376
- package/dist/997.js +0 -37
- package/src/contact/contact.js +0 -400
- package/src/contact/css.js +0 -1
- package/src/util/common.test.js +0 -301
- package/src/util/event.test.js +0 -31
- package/src/util/extractor.test.js +0 -240
- package/src/util/extractor.test2.js +0 -56
- package/src/util/gate.test.js +0 -20
- package/src/util/pubsub.test.js +0 -37
- /package/dist/{1a0d80f6e72.185.js → 1a0f6f3ff1a.185.js} +0 -0
- /package/dist/{1a0d80f6e72.490.js → 1a0f6f3ff1a.490.js} +0 -0
package/dist/screenshoot.js
CHANGED
|
@@ -1054,6 +1054,8 @@ class Emoji extends _common_js__WEBPACK_IMPORTED_MODULE_1__/* .Com */ .Mw {
|
|
|
1054
1054
|
/* harmony import */ var _Emoji_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(2959);
|
|
1055
1055
|
/* harmony import */ var _common_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(2840);
|
|
1056
1056
|
/* harmony import */ var preact__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(172);
|
|
1057
|
+
/* harmony import */ var _util_url_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(4339);
|
|
1058
|
+
|
|
1057
1059
|
|
|
1058
1060
|
|
|
1059
1061
|
|
|
@@ -1093,9 +1095,8 @@ class Block extends _common_js__WEBPACK_IMPORTED_MODULE_2__/* .Com */ .Mw {
|
|
|
1093
1095
|
ele.tag = 'li';
|
|
1094
1096
|
}
|
|
1095
1097
|
if (block.type == 'heading') {
|
|
1096
|
-
|
|
1097
|
-
|
|
1098
|
-
ele.tag = 'h' + block.level;
|
|
1098
|
+
let level = Math.max(1, Math.min(6, Math.floor(Number(block.level) || 1)));
|
|
1099
|
+
ele.tag = 'h' + level;
|
|
1099
1100
|
}
|
|
1100
1101
|
if (block.type == 'paragraph' || block.type == 'section' || block.type == 'div') ele.tag = 'div';
|
|
1101
1102
|
ele.text = block.text;
|
|
@@ -1109,8 +1110,10 @@ class Block extends _common_js__WEBPACK_IMPORTED_MODULE_2__/* .Com */ .Mw {
|
|
|
1109
1110
|
ele.tag = 'em';
|
|
1110
1111
|
}
|
|
1111
1112
|
}
|
|
1112
|
-
|
|
1113
|
-
if (block.
|
|
1113
|
+
let decorations = [];
|
|
1114
|
+
if (block.underline) decorations.push('underline');
|
|
1115
|
+
if (block.strike_through) decorations.push('line-through');
|
|
1116
|
+
if (decorations.length) ele.style += 'text-decoration: ' + decorations.join(' ') + ' !important;';
|
|
1114
1117
|
}
|
|
1115
1118
|
if (block.type == 'dynamic-field') {
|
|
1116
1119
|
let key = _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.get(block.attrs, 'key');
|
|
@@ -1118,20 +1121,20 @@ class Block extends _common_js__WEBPACK_IMPORTED_MODULE_2__/* .Com */ .Mw {
|
|
|
1118
1121
|
}
|
|
1119
1122
|
if (block.type == 'link') {
|
|
1120
1123
|
ele.tag = 'a';
|
|
1121
|
-
ele.attrs['href'] = block.href;
|
|
1124
|
+
ele.attrs['href'] = (0,_util_url_js__WEBPACK_IMPORTED_MODULE_4__/* .safeUrl */ .P)(block.href);
|
|
1122
1125
|
ele.attrs['target'] = block.target;
|
|
1123
1126
|
ele.attrs['title'] = block.title;
|
|
1124
1127
|
}
|
|
1125
1128
|
if (block.type == 'mention-agent' || block.type == 'mention') {
|
|
1126
1129
|
ele.tag = 'span';
|
|
1127
1130
|
ele.class = 'mention';
|
|
1128
|
-
let id = block
|
|
1129
|
-
if (
|
|
1130
|
-
ele.text = '@' + this
|
|
1131
|
+
let id = _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.get(block, 'attrs.id', '');
|
|
1132
|
+
if (id == '*' || id == 'all') {
|
|
1133
|
+
ele.text = '@' + (this.props.t ? this.props.t('all') : 'all');
|
|
1131
1134
|
}
|
|
1132
|
-
if (id
|
|
1133
|
-
let ag = store.matchAgent(id);
|
|
1134
|
-
let name = _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.getAgentDisplayName(
|
|
1135
|
+
if (typeof id === 'string' && /^(ag|at)/.test(id) && this.props.store) {
|
|
1136
|
+
let ag = this.props.store.matchAgent(id);
|
|
1137
|
+
let name = _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.getAgentDisplayName(this.props.store.matchAccount(), ag);
|
|
1135
1138
|
ele.text = '@' + name;
|
|
1136
1139
|
}
|
|
1137
1140
|
}
|
|
@@ -1139,18 +1142,15 @@ class Block extends _common_js__WEBPACK_IMPORTED_MODULE_2__/* .Com */ .Mw {
|
|
|
1139
1142
|
if (block.type == 'emoji') {
|
|
1140
1143
|
let code = '';
|
|
1141
1144
|
if (_util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.size(block.attrs) > 0) code = block.attrs['code'];
|
|
1142
|
-
if (code
|
|
1145
|
+
if (!code) code = block.text || block.Text;
|
|
1143
1146
|
if (code != '') {
|
|
1144
1147
|
ele.tag = 'Emoji';
|
|
1145
1148
|
ele.attrs['emojiCode'] = code;
|
|
1146
1149
|
}
|
|
1147
1150
|
}
|
|
1148
|
-
if (block.type == 'table') {
|
|
1149
|
-
return null;
|
|
1150
|
-
}
|
|
1151
1151
|
if (block.type === 'image') {
|
|
1152
1152
|
ele.tag = 'img';
|
|
1153
|
-
ele.attrs['src'] = _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.get(block, 'image.url');
|
|
1153
|
+
ele.attrs['src'] = (0,_util_url_js__WEBPACK_IMPORTED_MODULE_4__/* .safeUrl */ .P)(_util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.get(block, 'image.url'), true);
|
|
1154
1154
|
ele.attrs['alt'] = block.alt_text;
|
|
1155
1155
|
}
|
|
1156
1156
|
if (block.type == 'hard_break') {
|
|
@@ -1167,10 +1167,13 @@ class Block extends _common_js__WEBPACK_IMPORTED_MODULE_2__/* .Com */ .Mw {
|
|
|
1167
1167
|
if (!url.startsWith('//') && !url.startsWith('https://') && !url.startsWith('http://') && !url.startsWith('data:')) {
|
|
1168
1168
|
url = '//' + url;
|
|
1169
1169
|
}
|
|
1170
|
+
url = (0,_util_url_js__WEBPACK_IMPORTED_MODULE_4__/* .safeUrl */ .P)(url);
|
|
1171
|
+
if (!url) return tag.text;
|
|
1170
1172
|
return (0,preact__WEBPACK_IMPORTED_MODULE_3__.h)("a", {
|
|
1171
1173
|
href: url,
|
|
1172
1174
|
target: "_blank",
|
|
1173
|
-
|
|
1175
|
+
rel: "noopener noreferrer",
|
|
1176
|
+
onClick: e => this.props.onLink && this.props.onLink(e, url)
|
|
1174
1177
|
}, tag.text);
|
|
1175
1178
|
}
|
|
1176
1179
|
if (tag.type === 'phone') return (0,preact__WEBPACK_IMPORTED_MODULE_3__.h)("a", {
|
|
@@ -1187,10 +1190,12 @@ class Block extends _common_js__WEBPACK_IMPORTED_MODULE_2__/* .Com */ .Mw {
|
|
|
1187
1190
|
}
|
|
1188
1191
|
switch (ele.tag) {
|
|
1189
1192
|
case 'img':
|
|
1193
|
+
if (!ele.attrs.src) return block.alt_text || null;
|
|
1190
1194
|
return (0,preact__WEBPACK_IMPORTED_MODULE_3__.h)("a", {
|
|
1191
1195
|
class: this.props.textMessage ? 'message-text-inline-image-wrapper' : '',
|
|
1192
1196
|
href: _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.get(ele, 'attrs.src'),
|
|
1193
|
-
target: "_blank"
|
|
1197
|
+
target: "_blank",
|
|
1198
|
+
rel: "noopener noreferrer"
|
|
1194
1199
|
}, (0,preact__WEBPACK_IMPORTED_MODULE_3__.h)("img", {
|
|
1195
1200
|
class: this.props.textMessage ? 'message-text-inline-image' : '',
|
|
1196
1201
|
src: _util_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A.get(ele, 'attrs.src'),
|
|
@@ -1231,37 +1236,43 @@ class Block extends _common_js__WEBPACK_IMPORTED_MODULE_2__/* .Com */ .Mw {
|
|
|
1231
1236
|
class: this.props.textMessage ? 'text-message-li' : ''
|
|
1232
1237
|
}, $body);
|
|
1233
1238
|
case 'span':
|
|
1234
|
-
return (0,preact__WEBPACK_IMPORTED_MODULE_3__.h)("span",
|
|
1239
|
+
return (0,preact__WEBPACK_IMPORTED_MODULE_3__.h)("span", {
|
|
1240
|
+
class: ele.class,
|
|
1241
|
+
style: ele.style
|
|
1242
|
+
}, $body);
|
|
1235
1243
|
case 'em':
|
|
1236
|
-
return (0,preact__WEBPACK_IMPORTED_MODULE_3__.h)("em",
|
|
1244
|
+
return (0,preact__WEBPACK_IMPORTED_MODULE_3__.h)("em", {
|
|
1245
|
+
style: ele.style
|
|
1246
|
+
}, $body);
|
|
1237
1247
|
case 'b':
|
|
1238
|
-
return (0,preact__WEBPACK_IMPORTED_MODULE_3__.h)("b",
|
|
1248
|
+
return (0,preact__WEBPACK_IMPORTED_MODULE_3__.h)("b", {
|
|
1249
|
+
style: ele.style
|
|
1250
|
+
}, $body);
|
|
1239
1251
|
case 'hr':
|
|
1240
1252
|
return (0,preact__WEBPACK_IMPORTED_MODULE_3__.h)("hr", null);
|
|
1241
1253
|
case 'br':
|
|
1242
1254
|
return (0,preact__WEBPACK_IMPORTED_MODULE_3__.h)("br", null);
|
|
1243
1255
|
case 'a':
|
|
1256
|
+
if (!ele.attrs.href) return (0,preact__WEBPACK_IMPORTED_MODULE_3__.h)("span", null, $body);
|
|
1244
1257
|
return (0,preact__WEBPACK_IMPORTED_MODULE_3__.h)("a", {
|
|
1245
1258
|
class: this.props.textMessage ? 'message-text-link' : '',
|
|
1246
1259
|
href: ele.attrs['href'],
|
|
1247
1260
|
target: this.props.textMessage ? '_blank' : ele.attrs['target'],
|
|
1248
|
-
title: ele.attrs['title']
|
|
1261
|
+
title: ele.attrs['title'],
|
|
1262
|
+
rel: "noopener noreferrer",
|
|
1263
|
+
onClick: e => this.props.onLink && this.props.onLink(e, ele.attrs.href)
|
|
1249
1264
|
}, $body);
|
|
1250
1265
|
case 'Emoji':
|
|
1251
1266
|
return (0,preact__WEBPACK_IMPORTED_MODULE_3__.h)(_Emoji_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A, {
|
|
1252
1267
|
emojiCode: ele.attrs['emojiCode']
|
|
1253
1268
|
});
|
|
1254
1269
|
}
|
|
1255
|
-
return
|
|
1270
|
+
return $body;
|
|
1256
1271
|
}
|
|
1257
1272
|
render() {
|
|
1258
1273
|
return this.renderBlock(this.props.block);
|
|
1259
1274
|
}
|
|
1260
1275
|
}
|
|
1261
|
-
function absLink(url) {
|
|
1262
|
-
if (!url.startsWith('http://') && !url.startsWith('https://') && !url.startsWith('//')) return 'http://' + url;
|
|
1263
|
-
return url;
|
|
1264
|
-
}
|
|
1265
1276
|
|
|
1266
1277
|
/***/ },
|
|
1267
1278
|
|
|
@@ -1270,7 +1281,7 @@ function absLink(url) {
|
|
|
1270
1281
|
|
|
1271
1282
|
"use strict";
|
|
1272
1283
|
__webpack_require__.r(__webpack_exports__);
|
|
1273
|
-
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (__webpack_require__(
|
|
1284
|
+
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (__webpack_require__(1775));
|
|
1274
1285
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, [
|
|
1275
1286
|
/* harmony export */ "default", 0, __WEBPACK_DEFAULT_EXPORT__
|
|
1276
1287
|
/* harmony export */ ]);
|
|
@@ -1548,15 +1559,19 @@ class Com extends preact__WEBPACK_IMPORTED_MODULE_0__/* .Component */ .uA {
|
|
|
1548
1559
|
constructor(props) {
|
|
1549
1560
|
super(props);
|
|
1550
1561
|
this._isMounted = true;
|
|
1551
|
-
|
|
1552
|
-
|
|
1553
|
-
|
|
1554
|
-
|
|
1555
|
-
|
|
1556
|
-
|
|
1557
|
-
|
|
1558
|
-
|
|
1559
|
-
}
|
|
1562
|
+
this._subscriptions = new Set();
|
|
1563
|
+
const onUnmount = this.componentWillUnmount;
|
|
1564
|
+
this.componentWillUnmount = () => {
|
|
1565
|
+
if (!this._isMounted) return;
|
|
1566
|
+
this._isMounted = false;
|
|
1567
|
+
for (const unsubscribe of this._subscriptions) unsubscribe();
|
|
1568
|
+
this._subscriptions.clear();
|
|
1569
|
+
if (onUnmount) onUnmount.call(this);
|
|
1570
|
+
};
|
|
1571
|
+
}
|
|
1572
|
+
onDispose(cleanup) {
|
|
1573
|
+
if (this._isMounted) this._subscriptions.add(cleanup);else cleanup();
|
|
1574
|
+
return () => this._subscriptions.delete(cleanup);
|
|
1560
1575
|
}
|
|
1561
1576
|
}
|
|
1562
1577
|
class Clickaway extends Com {
|
|
@@ -1920,7 +1935,16 @@ function pipeExtracts(text, extractors) {
|
|
|
1920
1935
|
return out;
|
|
1921
1936
|
}
|
|
1922
1937
|
function extractText(text) {
|
|
1923
|
-
var link =
|
|
1938
|
+
var link = value => {
|
|
1939
|
+
const emails = extractEmails(value);
|
|
1940
|
+
return extractLinks(value).map(span => {
|
|
1941
|
+
const matched = value.substr(span.index, span.length);
|
|
1942
|
+
return {
|
|
1943
|
+
...span,
|
|
1944
|
+
length: matched.replace(/[.,;!?]+$/, '').length
|
|
1945
|
+
};
|
|
1946
|
+
}).filter(span => !emails.some(email => span.index >= email.index && span.index + span.length <= email.index + email.length));
|
|
1947
|
+
};
|
|
1924
1948
|
link.type = 'link';
|
|
1925
1949
|
var email = extractEmails;
|
|
1926
1950
|
email.type = 'email';
|
|
@@ -2192,8 +2216,14 @@ function orderByF(a, f, d) {
|
|
|
2192
2216
|
return clone;
|
|
2193
2217
|
}
|
|
2194
2218
|
function isPhone(phone) {
|
|
2195
|
-
|
|
2196
|
-
|
|
2219
|
+
if (typeof phone !== 'string' && typeof phone !== 'number') return false;
|
|
2220
|
+
const value = String(phone).trim();
|
|
2221
|
+
const ungrouped = value.replace(/\((\d+)\)/g, '$1');
|
|
2222
|
+
if (!/^\+?\d+(?:[ .-]\d+)*$/.test(ungrouped)) return false;
|
|
2223
|
+
const digits = value.replace(/\D/g, '');
|
|
2224
|
+
if (digits.length < 7 || digits.length > 15 || /^(\d)\1+$/.test(digits)) return false;
|
|
2225
|
+
if (value.startsWith('+') && digits.startsWith('0')) return false;
|
|
2226
|
+
return true;
|
|
2197
2227
|
}
|
|
2198
2228
|
function isURL(url) {
|
|
2199
2229
|
var re = /[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)/gi;
|
|
@@ -2204,8 +2234,17 @@ function isNumber(num) {
|
|
|
2204
2234
|
return re.test(String(num));
|
|
2205
2235
|
}
|
|
2206
2236
|
function isEmail(email) {
|
|
2237
|
+
if (typeof email !== 'string') return false;
|
|
2238
|
+
const value = email.trim();
|
|
2239
|
+
if (value.length > 254) return false;
|
|
2240
|
+
const at = value.lastIndexOf('@');
|
|
2241
|
+
const local = value.slice(0, at);
|
|
2242
|
+
const domain = value.slice(at + 1);
|
|
2243
|
+
if (!local || local.length > 64) return false;
|
|
2244
|
+
if (!local.startsWith('"') && (local.startsWith('.') || local.endsWith('.') || local.includes('..'))) return false;
|
|
2245
|
+
if (!domain.startsWith('[') && domain.split('.').some(label => label.length > 63 || !/^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i.test(label))) return false;
|
|
2207
2246
|
const re = /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
|
|
2208
|
-
return re.test(
|
|
2247
|
+
return re.test(value.toLowerCase());
|
|
2209
2248
|
}
|
|
2210
2249
|
function last(array) {
|
|
2211
2250
|
var length = array == null ? 0 : array.length;
|
|
@@ -2474,7 +2513,7 @@ function js2css(js, onlyprops, variables) {
|
|
|
2474
2513
|
return style;
|
|
2475
2514
|
}
|
|
2476
2515
|
function browserName() {
|
|
2477
|
-
var isOpera = !!window.opr && !!opr.addons || !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0;
|
|
2516
|
+
var isOpera = !!window.opr && !!window.opr.addons || !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0;
|
|
2478
2517
|
var isFirefox = typeof InstallTrigger !== 'undefined';
|
|
2479
2518
|
var isSafari = /constructor/i.test(window.HTMLElement) || function (p) {
|
|
2480
2519
|
return p.toString() === '[object SafariRemoteNotification]';
|
|
@@ -2593,8 +2632,8 @@ function checkRunConditions(freq, conds, lastrun, store) {
|
|
|
2593
2632
|
break;
|
|
2594
2633
|
case 'user_is_a_contact':
|
|
2595
2634
|
let attributes = op.get(store.matchUser(), 'attributes', []);
|
|
2596
|
-
let emailAttr = find(attributes, att => att.key === 'emails'
|
|
2597
|
-
let phoneAttr = find(attributes, att => att.key === 'phones'
|
|
2635
|
+
let emailAttr = find(attributes, att => (att.key === 'emails' || att.key === 'related_email') && att.text);
|
|
2636
|
+
let phoneAttr = find(attributes, att => (att.key === 'phones' || att.key === 'related_phone') && att.text);
|
|
2598
2637
|
let hasContact = emailAttr || phoneAttr;
|
|
2599
2638
|
if (cond.user_is_a_contact) {
|
|
2600
2639
|
if (!hasContact) return false;
|
|
@@ -2890,8 +2929,7 @@ function unicodeToAscii(str) {
|
|
|
2890
2929
|
str = str.replaceAll('đ', 'd').replaceAll('Đ', 'D');
|
|
2891
2930
|
return str.normalize('NFD').replace(/[\u0300-\u036f]/g, '');
|
|
2892
2931
|
}
|
|
2893
|
-
function scrollIntoViewIfNeeded($ele) {
|
|
2894
|
-
centerIfNeeded = arguments.length === 0 ? true : !!centerIfNeeded;
|
|
2932
|
+
function scrollIntoViewIfNeeded($ele, centerIfNeeded = true) {
|
|
2895
2933
|
var parent = $ele.parentNode;
|
|
2896
2934
|
var parentComputedStyle = window.getComputedStyle(parent, null);
|
|
2897
2935
|
var parentBorderTopWidth = parseInt(parentComputedStyle.getPropertyValue('border-top-width'));
|
|
@@ -2922,51 +2960,31 @@ function blockToText(block) {
|
|
|
2922
2960
|
return _blockToText(block).trim();
|
|
2923
2961
|
}
|
|
2924
2962
|
function isBlockEmpty(block) {
|
|
2925
|
-
return
|
|
2926
|
-
}
|
|
2927
|
-
function _isBlockEmpty(block = {}) {
|
|
2928
|
-
if (!size(block.content)) {
|
|
2929
|
-
if ((block.text || '').trim()) return false;
|
|
2930
|
-
return true;
|
|
2931
|
-
}
|
|
2932
|
-
let result = true;
|
|
2933
|
-
map(block.content, content => {
|
|
2934
|
-
result = result && _isBlockEmpty(content);
|
|
2935
|
-
});
|
|
2936
|
-
return result;
|
|
2963
|
+
return isEmptyBlock(block);
|
|
2937
2964
|
}
|
|
2938
2965
|
function _blockToText(block) {
|
|
2939
|
-
if (!block
|
|
2966
|
+
if (!block) return '';
|
|
2940
2967
|
let out = '';
|
|
2941
2968
|
if (block.type == 'bullet_list' || block.type == 'ordered_list') {
|
|
2942
|
-
map(block.content, item => {
|
|
2943
|
-
|
|
2944
|
-
|
|
2945
|
-
prefix = i + '\n. ';
|
|
2946
|
-
}
|
|
2947
|
-
out += prefix + blockToText(item).trim();
|
|
2969
|
+
map(block.content, (item, i) => {
|
|
2970
|
+
let prefix = block.type == 'ordered_list' ? '\n' + (Number(i) + 1) + '. ' : '\n* ';
|
|
2971
|
+
out += prefix + _blockToText(item).trim();
|
|
2948
2972
|
});
|
|
2949
2973
|
return out;
|
|
2950
2974
|
}
|
|
2951
2975
|
if (block.type == 'heading' || block.type == 'paragraph') {
|
|
2952
2976
|
out += '\n';
|
|
2953
2977
|
}
|
|
2954
|
-
if (block.type == '' || block.type == 'text' || block.type == 'link' || block.type == 'mention-agent' || block.type == 'dynamic-field') {
|
|
2955
|
-
return out + block.text;
|
|
2978
|
+
if (block.type == '' || block.type == 'text' || block.type == 'link' || block.type == 'mention-agent' || block.type == 'mention' || block.type == 'dynamic-field') {
|
|
2979
|
+
if (!size(block.content)) return out + (block.text || '');
|
|
2956
2980
|
}
|
|
2957
2981
|
if (block.type == 'horizontal_rule') return out + '\n---\n';
|
|
2958
2982
|
if (block.type == 'emoji') {
|
|
2959
|
-
|
|
2960
|
-
if (size(block.attrs) > 0) code = block.attrs['code'];
|
|
2961
|
-
if (code == '') code = block.text;
|
|
2962
|
-
if (code != '') {
|
|
2963
|
-
let emoji = find(LEXICAL_EMOJI_LIST, emoji => emoji.code === code);
|
|
2964
|
-
out + op.get(emoji, 'text', code);
|
|
2965
|
-
}
|
|
2966
|
-
return out;
|
|
2983
|
+
return out + (op.get(block, 'attrs.code') || block.text || block.Text || '');
|
|
2967
2984
|
}
|
|
2968
|
-
|
|
2969
|
-
|
|
2985
|
+
if (!size(block.content)) return out + (block.text || '');
|
|
2986
|
+
map(block.content, child => {
|
|
2987
|
+
out += _blockToText(child);
|
|
2970
2988
|
});
|
|
2971
2989
|
return out;
|
|
2972
2990
|
}
|
|
@@ -2992,12 +3010,16 @@ function absLink(url) {
|
|
|
2992
3010
|
return url;
|
|
2993
3011
|
}
|
|
2994
3012
|
function isEmptyBlock(block) {
|
|
2995
|
-
if (!block
|
|
3013
|
+
if (!block) return true;
|
|
3014
|
+
if (block.type === 'image' && op.get(block, 'image.url')) return false;
|
|
3015
|
+
if (block.type === 'emoji' && (op.get(block, 'attrs.code') || block.Text)) return false;
|
|
3016
|
+
if (block.type === 'horizontal_rule') return false;
|
|
2996
3017
|
let hasContent = size(filter(map(block.content, block => isEmptyBlock(block)), isEmpty => !isEmpty)) > 0;
|
|
2997
3018
|
return !trim(block.text) && !hasContent;
|
|
2998
3019
|
}
|
|
2999
3020
|
function isEmptyMessage(msg) {
|
|
3000
3021
|
if (!msg) return true;
|
|
3022
|
+
if (msg.deleted) return false;
|
|
3001
3023
|
if (!msg.text && isEmptyBlock(msg.block) && isEmptyAttachment(msg)) return true;
|
|
3002
3024
|
return false;
|
|
3003
3025
|
}
|
|
@@ -3268,26 +3290,41 @@ var pubsub_namespaceFn = /*#__PURE__*/__webpack_require__.cw(function(module, __
|
|
|
3268
3290
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
3269
3291
|
/* harmony export */ A: () => (/* binding */ Pubsub)
|
|
3270
3292
|
/* harmony export */ });
|
|
3271
|
-
var {
|
|
3272
|
-
filter,
|
|
3273
|
-
map
|
|
3274
|
-
} = (common_namespaceFn());
|
|
3275
3293
|
class Pubsub {
|
|
3276
3294
|
constructor() {
|
|
3277
3295
|
this.listeners = {};
|
|
3278
3296
|
}
|
|
3279
|
-
publish(topic, payload
|
|
3280
|
-
|
|
3281
|
-
|
|
3282
|
-
|
|
3283
|
-
|
|
3297
|
+
publish(topic, ...payload) {
|
|
3298
|
+
const subscriptions = (this.listeners[topic] || []).slice();
|
|
3299
|
+
for (const subscription of subscriptions) {
|
|
3300
|
+
if (!subscription.obj._isMounted) subscription.unsubscribe();
|
|
3301
|
+
if (subscription.active) subscription.cb(...payload);
|
|
3302
|
+
}
|
|
3284
3303
|
}
|
|
3285
3304
|
on2(obj, topic, cb) {
|
|
3286
|
-
|
|
3287
|
-
this.listeners[topic].push({
|
|
3305
|
+
const subscription = {
|
|
3288
3306
|
obj,
|
|
3289
|
-
cb
|
|
3290
|
-
|
|
3307
|
+
cb,
|
|
3308
|
+
active: true
|
|
3309
|
+
};
|
|
3310
|
+
let release = () => {};
|
|
3311
|
+
const unsubscribe = () => {
|
|
3312
|
+
if (!subscription.active) return;
|
|
3313
|
+
subscription.active = false;
|
|
3314
|
+
this.listeners[topic] = (this.listeners[topic] || []).filter(sub => sub !== subscription);
|
|
3315
|
+
if (!this.listeners[topic].length) delete this.listeners[topic];
|
|
3316
|
+
release();
|
|
3317
|
+
};
|
|
3318
|
+
subscription.unsubscribe = unsubscribe;
|
|
3319
|
+
if (!this.listeners[topic]) this.listeners[topic] = [];
|
|
3320
|
+
this.listeners[topic].push(subscription);
|
|
3321
|
+
if (typeof obj.onDispose === 'function') release = obj.onDispose(unsubscribe);
|
|
3322
|
+
return unsubscribe;
|
|
3323
|
+
}
|
|
3324
|
+
clear() {
|
|
3325
|
+
for (const subscriptions of Object.values(this.listeners)) {
|
|
3326
|
+
for (const subscription of subscriptions.slice()) subscription.unsubscribe();
|
|
3327
|
+
}
|
|
3291
3328
|
}
|
|
3292
3329
|
}
|
|
3293
3330
|
});
|
|
@@ -3402,6 +3439,28 @@ sb = Object.assign(sb, campaign_namespaceObject);
|
|
|
3402
3439
|
|
|
3403
3440
|
/***/ },
|
|
3404
3441
|
|
|
3442
|
+
/***/ 4339
|
|
3443
|
+
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
3444
|
+
|
|
3445
|
+
"use strict";
|
|
3446
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
3447
|
+
/* harmony export */ P: () => (/* binding */ safeUrl)
|
|
3448
|
+
/* harmony export */ });
|
|
3449
|
+
function safeUrl(value, image = false) {
|
|
3450
|
+
if (typeof value !== 'string') return '';
|
|
3451
|
+
const url = value.trim();
|
|
3452
|
+
const normalized = url.replace(/[\u0000-\u0020\u007f]/g, '');
|
|
3453
|
+
const scheme = normalized.match(/^([a-z][a-z0-9+.-]*):/i);
|
|
3454
|
+
if (!scheme) return url;
|
|
3455
|
+
if (/^https?$/i.test(scheme[1])) return url;
|
|
3456
|
+
if (!image && /^(mailto|tel)$/i.test(scheme[1])) return url;
|
|
3457
|
+
if (image && /^blob$/i.test(scheme[1])) return url;
|
|
3458
|
+
if (image && /^data:image\/(png|jpe?g|gif|webp|avif);base64,/i.test(normalized)) return url;
|
|
3459
|
+
return '';
|
|
3460
|
+
}
|
|
3461
|
+
|
|
3462
|
+
/***/ },
|
|
3463
|
+
|
|
3405
3464
|
/***/ 5672
|
|
3406
3465
|
(module) {
|
|
3407
3466
|
|
|
@@ -3589,7 +3648,7 @@ sb = Object.assign(sb, campaign_namespaceObject);
|
|
|
3589
3648
|
|
|
3590
3649
|
/***/ },
|
|
3591
3650
|
|
|
3592
|
-
/***/
|
|
3651
|
+
/***/ 1775
|
|
3593
3652
|
(module, __webpack_exports__, __webpack_require__) {
|
|
3594
3653
|
|
|
3595
3654
|
"use strict";
|
|
@@ -3699,7 +3758,7 @@ var ___CSS_LOADER_URL_REPLACEMENT_21___ = _node_modules_css_loader_dist_runtime_
|
|
|
3699
3758
|
var ___CSS_LOADER_URL_REPLACEMENT_22___ = _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_1___default()((_img_emoji_messenger_sub_23_529_60_784_png__WEBPACK_IMPORTED_MODULE_24___default()));
|
|
3700
3759
|
var ___CSS_LOADER_URL_REPLACEMENT_23___ = _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_1___default()((_img_emoji_messenger_sub_23_529_58_824_png__WEBPACK_IMPORTED_MODULE_25___default()));
|
|
3701
3760
|
// Module
|
|
3702
|
-
___CSS_LOADER_EXPORT___.push([module.id, "#sbz92 * {\n all: unset !important;\n}\n.sbz_no_scroll {\n overflow: hidden !important;\n overflow-x: hidden !important;\n overflow-y: hidden !important;\n}\n#sbz92 {\n /* Handle on hover */\n /*\n.widget-header--button-close {\n\tdisplay: flex;\n\tborder-radius: 6px;\n\tjustify-self: flex-end;\n\talign-items: center;\n\talign-self: flex-start;\n\n\tfilter: brightness(0.95);\n\t&:hover {\n\t\topacity: 1;\n\t\tfilter: brightness(1.1);\n\t\tscale: 1.1;\n\t}\n}\n*/\n /*\n[data-tooltip]::after {\n\ttext-align: center;\n\tmin-width: 60px;\n\tmax-width: 350px;\n\n\ttransform: translate3d(0, 0, 0);\n\t-webkit-backface-visibility: hidden;\n\tbackface-visibility: hidden;\n\twill-change: transform;\n\topacity: 0;\n\tpointer-events: none;\n\ttransition: opacity @tooltip-transition-duration @tooltip-transition-easing @tooltip-transition-delay;\n\tposition: absolute;\n\tbox-sizing: border-box;\n\tz-index: @z-index + 2000;\n\ttransform-origin: top;\n\twhite-space: pre-wrap;\n\twidth: 100%;\n\n\tbackground: @black;\n\tborder-radius: 5px;\n\n\t.color(@white);\n\n\tcontent: attr(data-tooltip);\n\tfont-size: @tooltip-font-size;\n\tfont-weight: @tooltip-font-weight;\n\ttext-transform: @tooltip-text-transform;\n\tpadding: 0.5em;\n\tbox-sizing: content-box;\n}\n\n[data-tooltip]:hover::after,\n[data-tooltip]:focus::after {\n\topacity: 1;\n\tpointer-events: auto;\n}\n\n// ------------------------------------------------\n// [2] Position Modifiers\n// ------------------------------------------------\n\n[data-tooltip][data-tooltip-position|='top']::after {\n\tmargin-bottom: @tooltip-margin;\n\ttransform: translate3d(-50%, -5px, 0);\n\tbottom: 100%;\n\tleft: 50%;\n}\n\n// ------------------------------------------------\n// [2.1] Top Left\n// ------------------------------------------------\n[data-tooltip][data-tooltip-position='top-left']::after {\n\ttransform: translate3d(~'calc(-100% + 16px)', -5px, 0);\n\tbottom: 100%;\n}\n\n// ------------------------------------------------\n// [2.2] Top Right\n// ------------------------------------------------\n[data-tooltip][data-tooltip-position='top-right']::after {\n\ttransform: translate3d(~'calc(0% + -16px)', -5px, 0);\n\tbottom: 100%;\n}\n\n// ------------------------------------------------\n// [2.3] Bottom\n// ------------------------------------------------\n\n[data-tooltip][data-tooltip-position|='bottom']::after,\n[data-tooltip]:not([data-tooltip-position])::after {\n\ttransform: translate3d(-50%, 0, 0);\n\tmargin-top: @tooltip-margin;\n\tleft: 50%;\n\ttop: 100%;\n}\n\n// ------------------------------------------------\n// [2.4] Bottom Left\n// ------------------------------------------------\n[data-tooltip][data-tooltip-position='bottom-left']::after {\n\ttransform: translate3d(~'calc(-100% + 16px)', 0, 0);\n}\n\n// ------------------------------------------------\n// [2.5] Bottom Right\n// ------------------------------------------------\n[data-tooltip][data-tooltip-position='bottom-right']::after {\n\ttransform: translate3d(~'calc(0% + -16px)', 0, 0);\n}\n\n// ------------------------------------------------\n// [2.6] Left\n// ------------------------------------------------\n[data-tooltip][data-tooltip-position='left']::after {\n\tbottom: auto;\n\tleft: auto;\n\tright: 100%;\n\ttop: 50%;\n\ttransform: translate3d(0, -50%, 0);\n\tmargin-right: @tooltip-margin;\n}\n\n// ------------------------------------------------\n// [2.7] Right\n// ------------------------------------------------\n[data-tooltip][data-tooltip-position='right']::after {\n\tbottom: auto;\n\tleft: 100%;\n\ttop: 50%;\n\ttransform: translate3d(0, -50%, 0);\n\tmargin-left: @tooltip-margin;\n}\n\n*/\n}\n#sbz92 *,\n#sbz92 *::before,\n#sbz92 *::after {\n box-sizing: border-box !important;\n}\n#sbz92 [tabindex='-1']:focus:not(:focus-visible) {\n outline: 0 !important;\n}\n#sbz92 b,\n#sbz92 strong {\n font-weight: 500 !important;\n}\n#sbz92 a {\n color: #020202 !important;\n text-decoration: none !important;\n background-color: transparent !important;\n font-weight: 600 !important;\n}\n#sbz92 a:hover {\n cursor: pointer !important;\n color: #000000 !important;\n text-decoration: underline !important;\n}\n#sbz92 a:not([href]) {\n color: inherit !important;\n text-decoration: none !important;\n}\n#sbz92 a:not([href]):hover {\n color: inherit !important;\n text-decoration: none !important;\n}\n#sbz92 img {\n vertical-align: middle !important;\n border-style: none !important;\n}\n#sbz92 svg {\n overflow: hidden !important;\n vertical-align: middle !important;\n}\n#sbz92 label {\n display: inline-block !important;\n}\n#sbz92 button {\n border-radius: 0 !important;\n}\n#sbz92 button:focus {\n outline: 1px dotted !important;\n outline: 5px auto -webkit-focus-ring-color !important;\n}\n#sbz92 input,\n#sbz92 button,\n#sbz92 select,\n#sbz92 optgroup,\n#sbz92 textarea {\n margin: 0 !important;\n}\n#sbz92 button,\n#sbz92 input {\n overflow: visible !important;\n}\n#sbz92 button,\n#sbz92 select {\n text-transform: none !important;\n}\n#sbz92 select {\n word-wrap: normal !important;\n}\n#sbz92 button,\n#sbz92 [type=\"button\"],\n#sbz92 [type=\"reset\"],\n#sbz92 [type=\"submit\"] {\n -webkit-appearance: button !important;\n}\n#sbz92 button:not(:disabled),\n#sbz92 [type='button']:not(:disabled),\n#sbz92 [type='reset']:not(:disabled),\n#sbz92 [type='submit']:not(:disabled) {\n cursor: pointer !important;\n}\n#sbz92 button::-moz-focus-inner,\n#sbz92 [type='button']::-moz-focus-inner,\n#sbz92 [type='reset']::-moz-focus-inner,\n#sbz92 [type='submit']::-moz-focus-inner {\n padding: 0 !important;\n border-style: none !important;\n}\n#sbz92 input[type='radio'],\n#sbz92 input[type='checkbox'] {\n box-sizing: border-box !important;\n padding: 0 !important;\n}\n#sbz92 input[type='date'],\n#sbz92 input[type='time'],\n#sbz92 input[type='datetime-local'],\n#sbz92 input[type='month'] {\n -webkit-appearance: listbox !important;\n}\n#sbz92 textarea {\n overflow: auto !important;\n resize: vertical !important;\n}\n#sbz92 [type='number']::-webkit-inner-spin-button,\n#sbz92 [type='number']::-webkit-outer-spin-button {\n height: auto !important;\n}\n#sbz92 [hidden] {\n display: none !important;\n}\n#sbz92 ::-webkit-input-placeholder {\n /* Edge */\n color: #777 !important;\n}\n#sbz92 :-ms-input-placeholder {\n /* Internet Explorer 10-11 */\n color: #777 !important;\n}\n#sbz92 ::placeholder {\n color: #777 !important;\n}\n#sbz92 div {\n display: block !important;\n text-rendering: geometricPrecision !important;\n -webkit-font-smoothing: antialiased !important;\n -moz-osx-font-smoothing: grayscale !important;\n}\n#sbz92 ::-webkit-scrollbar {\n width: 7px !important;\n height: 7px !important;\n}\n#sbz92 ::-webkit-scrollbar-track {\n border-radius: 10px !important;\n}\n#sbz92 ::-webkit-scrollbar-thumb {\n border-radius: 10px !important;\n background: #d6d6d6 !important;\n}\n#sbz92 ::-webkit-scrollbar-thumb:hover {\n background: #aaa !important;\n}\n#sbz92 .badge {\n padding: 2px 8px !important;\n font-size: 12px !important;\n font-weight: 600 !important;\n border-radius: 6px !important;\n display: inline-flex !important;\n align-items: center !important;\n}\n#sbz92 .badge.badge--success {\n color: #28a745 !important;\n -webkit-text-fill-color: #28a745 !important;\n background: #28a74526 !important;\n}\n#sbz92 .dot {\n width: 8px !important;\n height: 8px !important;\n border-radius: 4px !important;\n flex-shrink: 0 !important;\n background: #000 !important;\n}\n#sbz92 .dot.dot--success {\n background: #28a745 !important;\n}\n#sbz92 * {\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0) !important;\n -webkit-tap-highlight-color: transparent !important;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Helvetica Neue', Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji' !important;\n font-size: 16px !important;\n -webkit-box-sizing: border-box !important;\n -moz-box-sizing: border-box !important;\n box-sizing: border-box !important;\n margin: 0 !important;\n padding: 0 !important;\n border: 0 !important;\n vertical-align: baseline !important;\n}\n#sbz92 button:focus {\n outline: none !important;\n}\n#sbz92 img {\n overflow: hidden !important;\n flex-shrink: 0 !important;\n background-repeat: no-repeat !important;\n background-position: center !important;\n background-size: 100% 100% !important;\n -webkit-user-select: none !important;\n -khtml-user-select: none !important;\n -moz-user-select: none !important;\n -o-user-select: none !important;\n user-select: none !important;\n -webkit-user-drag: none !important;\n}\n#sbz92 .pos-relative {\n position: relative !important;\n}\n#sbz92 .flex-row {\n flex-direction: row !important;\n}\n#sbz92 .flex-column {\n flex-direction: column !important;\n}\n#sbz92 .flex-grow-1 {\n flex-grow: 1 !important;\n}\n#sbz92 .align-self-end {\n align-self: flex-end !important;\n}\n#sbz92 .align-items-end {\n align-items: flex-end !important;\n}\n#sbz92 .justify-content-center {\n justify-content: center !important;\n}\n#sbz92 .h-full {\n height: 100% !important;\n}\n#sbz92 .w-full {\n width: 100% !important;\n}\n#sbz92 .text-muted {\n color: #6c757d !important;\n -webkit-text-fill-color: #6c757d !important;\n}\n#sbz92 .text-lg {\n font-size: 18px !important;\n}\n#sbz92 .text-xl {\n font-size: 20px !important;\n}\n#sbz92 .text-sm {\n font-size: 14px !important;\n}\n#sbz92 .text-center {\n text-align: center !important;\n}\n#sbz92 .text-danger {\n color: #ea3d2f !important;\n}\n#sbz92 .text-italic {\n font-style: italic !important;\n}\n#sbz92 .d-none {\n display: none !important;\n}\n#sbz92 .d-flex {\n display: flex !important;\n}\n#sbz92 .d-inline-block {\n display: inline-block !important;\n}\n#sbz92 .ml-1 {\n margin-left: 7.5px !important;\n}\n#sbz92 .pl-2 {\n padding-left: 15px !important;\n}\n#sbz92 .pr-2 {\n padding-right: 15px !important;\n}\n#sbz92 .pb-2 {\n padding-bottom: 15px !important;\n}\n#sbz92 .mt-1 {\n margin-top: 7.5px !important;\n}\n#sbz92 .mt-2 {\n margin-top: 15px !important;\n}\n#sbz92 .ml-2 {\n margin-left: 15px !important;\n}\n#sbz92 .mr-1 {\n margin-right: 7.5px !important;\n}\n#sbz92 .mr-2 {\n margin-right: 15px !important;\n}\n#sbz92 .pt-3 {\n padding-top: 22.5px !important;\n}\n#sbz92 .pl-3 {\n padding-left: 22.5px !important;\n}\n#sbz92 .pr-3 {\n padding-right: 22.5px !important;\n}\n#sbz92 .pb-3 {\n padding-bottom: 22.5px !important;\n}\n#sbz92 .mt-3 {\n margin-top: 22.5px !important;\n}\n#sbz92 .ml-3 {\n margin-left: 22.5px !important;\n}\n#sbz92 .mr-3 {\n margin-right: 22.5px !important;\n}\n#sbz92 .mb-3 {\n margin-bottom: 22.5px !important;\n}\n#sbz92 .mb-2 {\n margin-bottom: 15px !important;\n}\n#sbz92 .mb-1 {\n margin-bottom: 7.5px !important;\n}\n#sbz92 .muted {\n color: #6c757d !important;\n -webkit-text-fill-color: #6c757d !important;\n}\n#sbz92 .i {\n font-style: italic !important;\n}\n#sbz92 .align-items-center {\n align-items: center !important;\n}\n#sbz92 .text-truncate {\n text-overflow: ellipsis !important;\n white-space: nowrap !important;\n overflow: hidden !important;\n}\n#sbz92 .flex_1 {\n flex: 1 !important;\n flex-shrink: 0 !important;\n}\n#sbz92 .justify-content-between {\n justify-content: space-between !important;\n}\n#sbz92 .no-shrink {\n flex-shrink: 0 !important;\n}\n#sbz92 .loading {\n flex: 1 !important;\n align-items: center !important;\n justify-content: center !important;\n display: flex !important;\n flex-direction: column !important;\n background: white !important;\n}\n#sbz92 .avatar-container {\n text-align: center !important;\n}\n#sbz92 .avatar {\n position: relative !important;\n object-fit: cover !important;\n display: inline-block !important;\n}\n#sbz92 .group-avatar--primary .avatar {\n width: 40px !important;\n height: 40px !important;\n border-radius: 35px !important;\n}\n#sbz92 .group-avatar--secondary .avatar {\n position: relative !important;\n width: 35px !important;\n height: 35px !important;\n border-radius: 35px !important;\n}\n#sbz92 .avatar.avatar__account {\n width: 38px !important;\n height: 38px !important;\n border-radius: 38px !important;\n margin-right: 7.5px !important;\n}\n#sbz92 .group-avatar--primary .group-avatar--agent-middle {\n width: 50px !important;\n height: 50px !important;\n margin-left: -10px !important;\n z-index: 3 !important;\n position: relative !important;\n}\n#sbz92 .group-avatar--primary .group-avatar--agent-left {\n z-index: 2 !important;\n}\n#sbz92 .group-avatar--primary .group-avatar--agent-right {\n z-index: 2 !important;\n margin-left: -10px !important;\n}\n#sbz92 .group-avatar--secondary .group-avatar--agent-left {\n z-index: 3 !important;\n}\n#sbz92 .group-avatar--secondary .group-avatar--agent-middle {\n z-index: 2 !important;\n margin-left: -15px !important;\n}\n#sbz92 .group-avatar--secondary .group-avatar--agent-right {\n z-index: 1 !important;\n margin-left: -15px !important;\n}\n#sbz92 .widget-header {\n z-index: -1 !important;\n position: relative !important;\n transition: height 0.2s !important;\n border-radius: 15px 15px 0px 0px !important;\n background: '@background' !important;\n color: '@text_color' !important;\n -webkit-text-fill-color: '@text_color' !important;\n width: 100% !important;\n}\n#sbz92 .widget-header .widget-header--total-unread-convo {\n font-size: 13px !important;\n font-weight: 500 !important;\n background: #ef000d !important;\n display: flex !important;\n border-radius: 50% !important;\n justify-content: center !important;\n align-items: center !important;\n width: 20px !important;\n height: 20px !important;\n position: absolute !important;\n cursor: pointer !important;\n right: -8px !important;\n top: -4px !important;\n}\n#sbz92 .widget-header--collapsed {\n height: auto !important;\n}\n#sbz92 .widget-header--inner.widget-header--inner--collapsed {\n height: auto !important;\n padding: 15px 22.5px !important;\n position: relative !important;\n}\n#sbz92 .widget-header--inner.widget-header--inner--collapsed .widget-header--title {\n white-space: nowrap !important;\n overflow: hidden !important;\n font-weight: 500 !important;\n text-overflow: ellipsis !important;\n font-size: 16px !important;\n color: '@text_color' !important;\n -webkit-text-fill-color: '@text_color' !important;\n}\n#sbz92 .widget-header--inner.widget-header--inner--collapsed .widget-header--description {\n font-size: 14px !important;\n overflow: hidden !important;\n opacity: 0.7 !important;\n flex: 1 !important;\n color: '@text_color' !important;\n -webkit-text-fill-color: '@text_color' !important;\n margin-top: 2.5px !important;\n position: relative !important;\n line-height: 1.5 !important;\n}\n#sbz92 .mobile .widget-header {\n border-radius: 0px !important;\n}\n#sbz92 .widget-header--inner.widget-header--inner--expanded {\n height: 224px !important;\n padding: 15px 22.5px !important;\n}\n#sbz92 .widget-header--inner.widget-header--inner--expanded .widget-header--top-wrapper {\n display: flex !important;\n flex-direction: row !important;\n align-items: center !important;\n margin-bottom: 10px !important;\n}\n#sbz92 .widget-header--inner.widget-header--inner--expanded .widget-header--avatar-wrapper {\n display: flex !important;\n flex-direction: column !important;\n align-items: center !important;\n}\n#sbz92 .widget-header--inner.widget-header--inner--expanded .widget-header--title {\n white-space: nowrap !important;\n overflow: hidden !important;\n font-weight: 500 !important;\n text-overflow: ellipsis !important;\n flex: 1 !important;\n font-size: 16px !important;\n}\n#sbz92 .widget-header--inner.widget-header--inner--expanded .widget-header--description {\n position: relative !important;\n text-align: center !important;\n margin-top: 15px !important;\n white-space: pre-wrap !important;\n display: -webkit-box !important;\n -webkit-box-orient: vertical !important;\n -webkit-line-clamp: 2 !important;\n overflow: hidden !important;\n line-height: 1.5 !important;\n}\n#sbz92 .widget-header--convo-expanded {\n height: 224px !important;\n}\n#sbz92 .widget-header--inner {\n position: absolute !important;\n top: 0 !important;\n left: 50% !important;\n transform: translateX(-50%) !important;\n width: 100% !important;\n opacity: 1 !important;\n display: flex !important;\n}\n#sbz92 .widget-header--inner.widget-header--inner--hidden {\n opacity: 0 !important;\n transform: scale(0) !important;\n animation-duration: 0.05s !important;\n animation-name: hide !important;\n}\n#sbz92 .widget-header--title-container {\n min-width: 0 !important;\n flex: 1 !important;\n display: flex !important;\n flex-direction: column !important;\n z-index: 1 !important;\n}\n#sbz92 .widget-header--button-close {\n display: flex !important;\n border-radius: 6px !important;\n justify-self: flex-end !important;\n align-items: center !important;\n align-self: flex-start !important;\n opacity: 0.6 !important;\n transition: opacity 0.15s ease, scale 0.15s ease, filter 0.15s ease !important;\n filter: brightness(0.95) !important;\n}\n#sbz92 .widget-header--button-close:hover {\n opacity: 1 !important;\n filter: brightness(1.1) !important;\n scale: 1.1 !important;\n}\n#sbz92 .widget-header--button-close-icon {\n background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9IndoaXRlIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgY2xhc3M9ImZlYXRoZXIgZmVhdGhlci14Ij48bGluZSB4MT0iMTgiIHkxPSI2IiB4Mj0iNiIgeTI9IjE4Ij48L2xpbmU+PGxpbmUgeDE9IjYiIHkxPSI2IiB4Mj0iMTgiIHkyPSIxOCI+PC9saW5lPjwvc3ZnPgo=') !important;\n background-size: contain !important;\n background-repeat: no-repeat !important;\n background-position: center !important;\n width: 24px !important;\n height: 24px !important;\n display: block !important;\n cursor: pointer !important;\n}\n#sbz92 .widget-header--button-back {\n background-image: url('data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiAgd2lkdGg9IjI0IiAgaGVpZ2h0PSIyNCIgIHZpZXdCb3g9IjAgMCAyNCAyNCIgIGZpbGw9Im5vbmUiICBzdHJva2U9IndoaXRlIiAgc3Ryb2tlLXdpZHRoPSIyIiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiAgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCI+PHBhdGggc3Ryb2tlPSJub25lIiBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTQgNmwxNiAwIiAvPjxwYXRoIGQ9Ik00IDEybDE2IDAiIC8+PHBhdGggZD0iTTQgMThsMTYgMCIgLz48L3N2Zz4K') !important;\n background-size: contain !important;\n background-repeat: no-repeat !important;\n background-position: center !important;\n background-size: 24px 24px !important;\n width: 24px !important;\n height: 24px !important;\n display: block !important;\n position: relative !important;\n}\n#sbz92 .widget-header--wrap-button-back {\n display: flex !important;\n position: relative !important;\n margin-right: 7.5px !important;\n cursor: pointer !important;\n scale: 1 !important;\n opacity: 0.6 !important;\n transition: opacity 0.15s ease, scale 0.15s ease, filter 0.15s ease !important;\n filter: brightness(0.95) !important;\n}\n#sbz92 .widget-header--wrap-button-back:hover {\n opacity: 1 !important;\n filter: brightness(1.1) !important;\n scale: 1.1 !important;\n}\n#sbz92 .fade-enter-active,\n#sbz92 .fade-leave-active {\n transition: opacity 0.5s ease-out 0.2s !important;\n}\n#sbz92 .fade-enter,\n#sbz92 .fade-leave-to {\n opacity: 0 !important;\n}\n#sbz92 .slide-fade-enter-active {\n transition: all 0.3s ease !important;\n}\n#sbz92 .slide-fade-leave-active {\n transition: all 0.2s cubic-bezier(1, 0.5, 0.8, 1) !important;\n}\n#sbz92 .slide-fade-enter,\n#sbz92 .slide-fade-leave-to {\n transform: translateX(10px) !important;\n opacity: 0 !important;\n}\n#sbz92 .widget_header__body {\n padding-bottom: 70px !important;\n}\n#sbz92 .widget_header__body.widget_header__body__social {\n display: flex !important;\n}\n#sbz92 .social__account_logo {\n height: 90px !important;\n width: 90px !important;\n margin-right: 15px !important;\n border-radius: 15px !important;\n object-fit: cover !important;\n}\n#sbz92 .social__introduction {\n color: '@text_color' !important;\n -webkit-text-fill-color: '@text_color' !important;\n max-height: 72px !important;\n overflow: hidden !important;\n display: -webkit-box !important;\n -webkit-box-orient: vertical !important;\n -webkit-line-clamp: 3 !important;\n}\n#sbz92 .social__links {\n display: flex !important;\n flex-direction: row !important;\n}\n#sbz92 .social__links-logo {\n height: 30px !important;\n width: 30px !important;\n border-radius: 50% !important;\n margin-right: 10px !important;\n margin-top: 5px !important;\n background-size: contain !important;\n background-repeat: no-repeat !important;\n background-position: center !important;\n display: block !important;\n}\n#sbz92 .social__links-logo--facebook {\n background-image: url('data:image/svg+xml,%3C?xml%20version%3D%221.0%22%20?%3E%3Csvg%20width%3D%2230%22%20height%3D%2230%22%20viewBox%3D%220%200%2030%2030%22%20fill%3D%22none%22%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%3E%3Ccircle%20cx%3D%2215%22%20cy%3D%2215%22%20r%3D%2215%22%20fill%3D%22%230264FF%22/%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M17.2944%2029.8252C16.5464%2029.9404%2015.7803%2030%2015%2030C14.0962%2030%2013.2109%2029.9199%2012.3511%2029.7666V18.4775H10V14.4287H12.3511V11.8086C12.3511%209.93457%2013.2744%207%2017.3384%207L21%207.01465V10.9453H18.3433C17.9075%2010.9453%2017.2947%2011.1553%2017.2947%2012.0488V14.4326H20.989L20.5571%2018.4775H17.2944V29.8252Z%22%20fill%3D%22white%22/%3E%3C/svg%3E') !important;\n}\n#sbz92 .social__links-logo--messenger {\n background-image: url('data:image/svg+xml,%3C?xml%20version%3D%221.0%22%20?%3E%3Csvg%20width%3D%2230%22%20height%3D%2230%22%20viewBox%3D%220%200%2030%2030%22%20fill%3D%22none%22%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%3E%3Crect%20width%3D%2230%22%20height%3D%2230%22%20rx%3D%2215%22%20fill%3D%22%23007FFF%22/%3E%3Crect%20x%3D%224.28564%22%20y%3D%226%22%20width%3D%2221.4286%22%20height%3D%2218.8571%22%20fill%3D%22white%22/%3E%3Cpath%20d%3D%22M14.9478%2014.5713C14.8228%2014.5917%2014.6974%2014.6104%2014.5715%2014.6276C14.6974%2014.6104%2014.8228%2014.5917%2014.9478%2014.5713Z%22%20fill%3D%22black%22/%3E%3Cpath%20d%3D%22M14.7507%2014.5713C14.691%2014.5823%2014.6313%2014.5923%2014.5715%2014.6026C14.6313%2014.5923%2014.691%2014.5823%2014.7507%2014.5713Z%22%20fill%3D%22black%22/%3E%3Cpath%20d%3D%22M15.0126%2014.5713C14.8663%2014.5878%2014.7192%2014.6024%2014.5715%2014.6148C14.7192%2014.6024%2014.8663%2014.5878%2015.0126%2014.5713Z%22%20fill%3D%22black%22/%3E%3Cpath%20d%3D%22M14.783%2014.5713C14.7128%2014.5807%2014.642%2014.5894%2014.5715%2014.5976C14.642%2014.5894%2014.7128%2014.5807%2014.783%2014.5713Z%22%20fill%3D%22black%22/%3E%3Cpath%20d%3D%22M14.7299%2014.5713C14.6773%2014.5825%2014.6244%2014.5937%2014.5715%2014.6045C14.6244%2014.5937%2014.6773%2014.5825%2014.7299%2014.5713Z%22%20fill%3D%22black%22/%3E%3Cpath%20d%3D%22M14.6992%2014.5713C14.6567%2014.5834%2014.6141%2014.5949%2014.5715%2014.6068C14.6141%2014.5949%2014.6567%2014.5834%2014.6992%2014.5713Z%22%20fill%3D%22black%22/%3E%3Cpath%20d%3D%22M14.7107%2014.5713C14.6645%2014.5834%2014.618%2014.5958%2014.5715%2014.6075C14.618%2014.5958%2014.6645%2014.5836%2014.7107%2014.5713Z%22%20fill%3D%22black%22/%3E%3Cpath%20d%3D%22M14.7194%2014.5713C14.6704%2014.5827%2014.621%2014.5935%2014.5715%2014.6045C14.621%2014.5935%2014.6704%2014.5827%2014.7194%2014.5713Z%22%20fill%3D%22black%22/%3E%3Cpath%20d%3D%22M14.8087%2014.5713C14.7297%2014.5779%2014.6507%2014.5839%2014.5715%2014.5891C14.6507%2014.5839%2014.7297%2014.5779%2014.8087%2014.5713Z%22%20fill%3D%22black%22/%3E%3Cpath%20d%3D%22M15.0417%2014.5713C14.8856%2014.5814%2014.7288%2014.5894%2014.5715%2014.5946C14.7288%2014.5894%2014.8856%2014.5814%2015.0417%2014.5713Z%22%20fill%3D%22black%22/%3E%3Cpath%20d%3D%22M14.8206%2014.5713C14.7377%2014.574%2014.6546%2014.5761%2014.5715%2014.5775C14.6546%2014.5761%2014.7377%2014.574%2014.8206%2014.5713Z%22%20fill%3D%22black%22/%3E%3Cpath%20d%3D%22M14.1547%2012.3174L9.29419%2017.4636L13.7176%2015.0365L16.0288%2017.4636L20.8621%2012.3174L16.4877%2014.7019L14.1547%2012.3174Z%22%20fill%3D%22%23448AFF%22/%3E%3Cpath%20d%3D%22M15%200C6.717%200%200%206.717%200%2015C0%2023.283%206.717%2030%2015%2030C23.283%2030%2030%2023.283%2030%2015C30%206.717%2023.283%200%2015%200ZM15.1172%2023.0294C14.1886%2023.0294%2013.2923%2022.8983%2012.4491%2022.6554L9.42421%2024.375V21.14C7.39815%2019.5982%206.10428%2017.2501%206.10428%2014.6203C6.10428%209.97581%2010.1395%206.21094%2015.1172%206.21094C20.0951%206.21094%2024.1301%209.97581%2024.1301%2014.6203C24.1301%2019.2643%2020.0951%2023.0294%2015.1172%2023.0294V23.0294Z%22%20fill%3D%22%23007FFF%22/%3E%3C/svg%3E') !important;\n}\n#sbz92 .social__links-logo--email {\n background-image: url('data:image/svg+xml,%3C?xml%20version%3D%221.0%22%20?%3E%3Csvg%20width%3D%2230%22%20height%3D%2230%22%20viewBox%3D%220%200%2030%2030%22%20fill%3D%22none%22%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%3E%3Cpath%20d%3D%22M22.6875%2012.9688C21.9375%2013.5625%2020.3125%2014.75%2017.875%2016.5L17.5625%2016.75C17.0625%2017.125%2016.6875%2017.4062%2016.375%2017.5625C15.875%2017.875%2015.4062%2018%2015%2018C14.5625%2018%2014.125%2017.875%2013.625%2017.5938C13.3125%2017.4375%2012.9375%2017.1562%2012.4375%2016.7812L12.125%2016.5C9.59375%2014.6875%208%2013.5%207.3125%2012.9688C7.25%2012.9375%207.15625%2012.9375%207.09375%2012.9688C7.03125%2013%207%2013.0625%207%2013.125V19.5C7%2019.9375%207.125%2020.2812%207.4375%2020.5625C7.71875%2020.875%208.0625%2021%208.5%2021H21.5C21.9062%2021%2022.25%2020.875%2022.5625%2020.5625C22.8438%2020.2812%2023%2019.9375%2023%2019.5V13.125C23%2013.0625%2022.9375%2013%2022.875%2012.9375C22.8125%2012.9062%2022.75%2012.9062%2022.6875%2012.9688ZM15%2017C14.7188%2017%2014.375%2016.875%2014%2016.625C13.75%2016.5%2013.4375%2016.2812%2013.0312%2015.9375L12.7188%2015.7188C10.1562%2013.8438%208.40625%2012.5625%207.5%2011.8438L7.28125%2011.6875C7.09375%2011.5625%207%2011.3438%207%2011.0938V10.5C7%2010.0938%207.125%209.75%207.4375%209.4375C7.71875%209.15625%208.0625%209%208.5%209H21.5C21.9062%209%2022.25%209.15625%2022.5625%209.4375C22.8438%209.75%2023%2010.0938%2023%2010.5V11.0938C23%2011.3438%2022.9062%2011.5625%2022.7188%2011.6875L22.5625%2011.8125C21.6562%2012.5312%2019.9062%2013.8438%2017.2812%2015.7188L16.9688%2015.9375C16.5312%2016.2812%2016.2188%2016.5%2016%2016.625C15.5938%2016.875%2015.25%2017%2015%2017Z%22%20fill%3D%22white%22/%3E%3C/svg%3E') !important;\n}\n#sbz92 .social__links-logo--zalo {\n background-image: url('data:image/svg+xml,%3C?xml%20version%3D%221.0%22%20?%3E%3Csvg%20width%3D%2230%22%20height%3D%2230%22%20viewBox%3D%220%200%2030%2030%22%20fill%3D%22none%22%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M29.9999%2014.9385C29.9669%206.68262%2023.2639%200%2015%200C6.7157%200%200%206.71582%200%2015C0%2023.2842%206.7157%2030%2015%2030C23.2639%2030%2029.9669%2023.3174%2029.9999%2015.0615C29.9999%2015.041%2030%2015.0205%2030%2015C30%2014.9795%2029.9999%2014.959%2029.9999%2014.9385Z%22%20fill%3D%22white%22/%3E%3Cpath%20d%3D%22M24.5612%2017.4695C22.9394%2017.4726%2021.6242%2016.1862%2021.6279%2014.6005C21.6316%2013.0345%2022.9474%2011.7445%2024.5473%2011.7383C26.1556%2011.732%2027.4826%2013.0349%2027.4786%2014.6162C27.4746%2016.1926%2026.1719%2017.4665%2024.5612%2017.4695ZM22.8416%2014.6183C22.8459%2015.5573%2023.6166%2016.3004%2024.5777%2016.2923C25.5165%2016.2845%2026.2699%2015.5301%2026.2673%2014.6005C26.2646%2013.6712%2025.51%2012.9317%2024.56%2012.9277C23.6012%2012.9237%2022.8373%2013.6751%2022.8416%2014.6183Z%22%20fill%3D%22%230068FE%22/%3E%3Cpath%20d%3D%22M19.5054%2010.0762H20.795V17.4217H19.9447C19.7021%2017.4217%2019.5054%2017.225%2019.5054%2016.9823V10.0762Z%22%20fill%3D%22%230068FE%22/%3E%3Cpath%20d%3D%22M18.5227%2011.8907H17.2881V12.2935C16.5767%2011.8601%2015.8509%2011.6775%2015.06%2011.831C14.2526%2011.9876%2013.6164%2012.4043%2013.167%2013.0917C12.4538%2014.1826%2012.5894%2015.5904%2013.4938%2016.5431C14.3504%2017.4454%2015.8628%2017.8178%2017.2815%2016.9247C17.2835%2016.934%2017.286%2016.9422%2017.2881%2016.9511V16.9826C17.2881%2017.2252%2017.4849%2017.422%2017.7275%2017.422H18.5227V11.8907V11.8907ZM15.5853%2016.2787C14.6636%2016.268%2013.8924%2015.5006%2013.8986%2014.6004C13.9048%2013.692%2014.6716%2012.9481%2015.602%2012.9479C16.5427%2012.9477%2017.2871%2013.6781%2017.2882%2014.6026C17.2893%2015.5333%2016.521%2016.2896%2015.5853%2016.2787Z%22%20fill%3D%22%230068FE%22/%3E%3Cpath%20d%3D%22M8.0481%2016.2438C9.39854%2014.5856%2010.6939%2012.9885%2011.9984%2011.3989C12.2464%2011.0968%2012.3662%2010.7671%2012.3731%2010.3807C12.3761%2010.2135%2012.3261%2010.1646%2012.1596%2010.165C11.6056%2010.1666%206.41195%2010.165%206.41195%2010.165V11.4709H10.4978C10.4424%2011.543%207.83556%2014.7218%206.57932%2016.2403C6.37112%2016.4919%206.26503%2016.7645%206.25401%2017.0936C6.24628%2017.3242%206.28864%2017.4139%206.52267%2017.4211V17.4217H11.9356C12.1782%2017.4217%2012.3749%2017.225%2012.3749%2016.9823V16.2487V16.2438H8.0481V16.2438Z%22%20fill%3D%22%230068FE%22/%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M4.948%2026.1338C6.03613%2027.1172%207.26917%2027.9424%208.61108%2028.5752V26.1338H4.948ZM0.00268555%2014.7119C0.0775146%2010.7393%201.69666%207.14453%204.28479%204.50293C4.0459%204.98242%203.83435%205.47949%203.64661%205.99121C2.58862%208.87598%202.31299%2011.8506%202.69116%2014.8916C2.95862%2017.042%203.55518%2019.0869%204.63391%2020.9775C4.8269%2021.3154%205.02271%2021.6582%205.26489%2021.9609C5.76672%2022.5879%205.80981%2023.2725%205.59888%2024.0049C5.4873%2024.3926%205.32227%2024.75%205.11304%2025.082C4.95691%2025.3291%204.77612%2025.5635%204.57434%2025.7842C1.81921%2023.1201%200.0819092%2019.4102%200.00280762%2015.2939C0.000976562%2015.1963%200%2015.0986%200%2015C0%2014.9033%200.000854492%2014.8076%200.00268555%2014.7119Z%22%20fill%3D%22%230068FE%22/%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M24.8226%2026.3367C22.191%2028.6189%2018.7568%2029.9998%2015%2029.9998C11.1449%2029.9998%207.62952%2028.5457%204.97241%2026.156C6.32458%2026.1921%207.61877%2025.9031%208.86353%2025.3464C8.97681%2025.2957%209.06262%2025.3113%209.16443%2025.364C12.2258%2026.9646%2015.5131%2027.5125%2018.926%2027.3962C20.9574%2027.3269%2022.9333%2027.0046%2024.8226%2026.3367Z%22%20fill%3D%22%23015BDF%22/%3E%3C/svg%3E') !important;\n}\n@keyframes hide {\n 100% {\n opacity: 0;\n transform: scale(0);\n }\n}\n#sbz92 .widget-header-expand-container {\n width: 100% !important;\n}\n#sbz92 .message-input {\n width: 100% !important;\n border-top: 1px solid #e3e3e3 !important;\n display: flex !important;\n flex-direction: row !important;\n padding: 15px 22.5px !important;\n}\n#sbz92 .message-input--disabled {\n background: #f0f0f0 !important;\n opacity: 0.6 !important;\n filter: grayscale(1) !important;\n}\n#sbz92 textarea[disabled='disabled']::-webkit-input-placeholder {\n color: #a4a4a4 !important;\n -webkit-text-fill-color: #a4a4a4 !important;\n}\n#sbz92 textarea[disabled='disabled']:-ms-input-placeholder {\n color: #a4a4a4 !important;\n -webkit-text-fill-color: #a4a4a4 !important;\n}\n#sbz92 textarea[disabled='disabled']::placeholder {\n color: #a4a4a4 !important;\n -webkit-text-fill-color: #a4a4a4 !important;\n}\n#sbz92 .message-input--input {\n word-wrap: break-word !important;\n resize: none !important;\n flex: 1 !important;\n align-self: center !important;\n margin-right: 7.5px !important;\n color: #000 !important;\n -webkit-text-fill-color: #000 !important;\n}\n#sbz92 .message-input--input::placeholder {\n opacity: 0.5 !important;\n /* Firefox */\n}\n#sbz92 .message-input--input::-ms-input-placeholder {\n /* Edge 12 -18 */\n opacity: 0.5 !important;\n /* Firefox */\n}\n#sbz92 .message-input--emoji-button {\n background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImdyYXkiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBjbGFzcz0iZmVhdGhlciBmZWF0aGVyLXNtaWxlIj48Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCI+PC9jaXJjbGU+PHBhdGggZD0iTTggMTRzMS41IDIgNCAyIDQtMiA0LTIiPjwvcGF0aD48bGluZSB4MT0iOSIgeTE9IjkiIHgyPSI5LjAxIiB5Mj0iOSI+PC9saW5lPjxsaW5lIHgxPSIxNSIgeTE9IjkiIHgyPSIxNS4wMSIgeTI9IjkiPjwvbGluZT48L3N2Zz4K') !important;\n}\n#sbz92 .message-input--button {\n background-size: 70% !important;\n background-repeat: no-repeat !important;\n background-position: center !important;\n width: 32px !important;\n height: 32px !important;\n display: block !important;\n cursor: pointer !important;\n position: relative !important;\n border-radius: 20px !important;\n transition: background-color 0.2s !important;\n}\n#sbz92 .message-input--button:hover {\n background-color: #eeeeee !important;\n}\n#sbz92 .message-input--disabled .message-input--button {\n cursor: default !important;\n}\n#sbz92 .message-input--disabled .message-input--button {\n cursor: default !important;\n}\n#sbz92 .message-input--attachment-button {\n background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImdyYXkiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBjbGFzcz0iZmVhdGhlciBmZWF0aGVyLXBhcGVyY2xpcCI+PHBhdGggZD0iTTIxLjQ0IDExLjA1bC05LjE5IDkuMTlhNiA2IDAgMCAxLTguNDktOC40OWw5LjE5LTkuMTlhNCA0IDAgMCAxIDUuNjYgNS42NmwtOS4yIDkuMTlhMiAyIDAgMCAxLTIuODMtMi44M2w4LjQ5LTguNDgiPjwvcGF0aD48L3N2Zz4K') !important;\n}\n#sbz92 .message-input--send-button {\n background-image: url('data:image/svg+xml,%3C?xml%20version%3D%221.0%22%20?%3E%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2225%22%20height%3D%2225%22%20viewBox%3D%220%200%2024%2024%22%20stroke-width%3D%221.5%22%20stroke%3D%22@esc-primary-color-esc%22%20fill%3D%22none%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22/%3E%3Cpath%20d%3D%22M4.698%204.034l16.302%207.966l-16.302%207.966a.503%20.503%200%200%201%20-.546%20-.124a.555%20.555%200%200%201%20-.12%20-.568l2.468%20-7.274l-2.468%20-7.274a.555%20.555%200%200%201%20.12%20-.568a.503%20.503%200%200%201%20.546%20-.124z%22%20fill%3D%22@esc-primary-color-esc%22/%3E%3Cpath%20d%3D%22M6.5%2012h14.5%22%20/%3E%3C/svg%3E') !important;\n background-size: 82% !important;\n}\n#sbz92 .message-input--preform {\n justify-content: center !important;\n padding: 11px !important;\n @spacer 2;\n}\n#sbz92 .btn--preform {\n border-radius: 7px !important;\n padding-left: 32px !important;\n padding-right: 32px !important;\n height: 40px !important;\n color: #fff !important;\n -webkit-text-fill-color: #fff !important;\n font-size: 14px !important;\n line-height: 20px !important;\n text-align: center !important;\n background: '@primary_color' !important;\n width: 60% !important;\n}\n#sbz92 .widget-body.embed-chat .message-input {\n border: 1px solid #e3e3e3 !important;\n border-radius: 8px !important;\n margin-bottom: 20px !important;\n}\n#sbz92 .form-label {\n margin-top: 15px !important;\n}\n#sbz92 .form {\n border: 1px solid #eeeeee !important;\n box-sizing: border-box !important;\n box-shadow: 0px 2px 10px rgba(0, 0, 0, 0.15) !important;\n border-radius: 7px !important;\n}\n#sbz92 textarea.form-control {\n resize: none !important;\n word-wrap: break-word !important;\n}\n#sbz92 .form-control--container {\n position: relative !important;\n}\n#sbz92 input.form-control[disabled] {\n background: #f9f9f9 !important;\n}\n#sbz92 .form-control--container .form-control--check {\n position: absolute !important;\n right: 10px !important;\n top: 10px !important;\n background-size: 100% 100% !important;\n background-repeat: no-repeat !important;\n background-position: center !important;\n width: 20px !important;\n height: 20px !important;\n background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9IiM1QkFBMUQiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBjbGFzcz0iZmVhdGhlciBmZWF0aGVyLWNoZWNrIj48cG9seWxpbmUgcG9pbnRzPSIyMCA2IDkgMTcgNCAxMiI+PC9wb2x5bGluZT48L3N2Zz4K') !important;\n}\n#sbz92 .form-control--valid-input--error {\n color: #dc3545 !important;\n -webkit-text-fill-color: #dc3545 !important;\n font-size: 14px !important;\n padding-top: 5px !important;\n}\n#sbz92 input[type='text'].form-control.input--error,\n#sbz92 input[type='number'].form-control.input--error,\n#sbz92 input[type='date'].form-control.input--error,\n#sbz92 textarea.form-control.input--error,\n#sbz92 select.form-control.input--error {\n border: 1px solid #dc3545 !important;\n background: #dd41500f !important;\n}\n#sbz92 input[type='text'].form-control,\n#sbz92 input[type='number'].form-control,\n#sbz92 input[type='date'].form-control,\n#sbz92 textarea.form-control,\n#sbz92 select.form-control {\n width: 100% !important;\n border: 1px solid #c4c4c4 !important;\n border-radius: 8px !important;\n transition: all 100ms ease !important;\n padding: 10px 12px !important;\n}\n#sbz92 input[type='text'].form-control:hover,\n#sbz92 input[type='number'].form-control:hover,\n#sbz92 input[type='date'].form-control:hover,\n#sbz92 textarea.form-control:hover,\n#sbz92 select.form-control:hover {\n border: 1px solid #6c757d !important;\n}\n#sbz92 input[type='text'].form-control.input--error:hover,\n#sbz92 input[type='number'].form-control.input--error:hover,\n#sbz92 input[type='date'].form-control.input--error:hover,\n#sbz92 textarea.form-control.input--error:hover,\n#sbz92 select.form-control.input--error:hover {\n border: 1px solid #dc3545 !important;\n}\n#sbz92 select.form-control {\n padding: 1px 8px !important;\n}\n#sbz92 input[type='date'].form-control {\n height: 40px !important;\n width: 100% !important;\n background-color: #fff !important;\n}\n#sbz92 .form-wrapper-attachment input[type='date'].form-control {\n height: 32px !important;\n padding-top: 6px !important;\n padding-bottom: 6px !important;\n}\n#sbz92 input[type='text'].form-control:focus,\n#sbz92 input[type='number'].form-control:focus,\n#sbz92 input[type='date'].form-control:focus,\n#sbz92 textarea.form-control:focus,\n#sbz92 select.form-control:focus {\n border: 1px solid '@primary_color' !important;\n}\n#sbz92 input[type='text'].form-control.input--error:focus,\n#sbz92 input[type='number'].form-control.input--error:focus,\n#sbz92 input[type='date'].form-control.input--error:focus,\n#sbz92 textarea.form-control.input--error:focus,\n#sbz92 select.form-control.input--error:focus {\n border: 1px solid #dc3545 !important;\n}\n#sbz92 .label {\n display: block !important;\n padding-bottom: 6px !important;\n margin-top: 8px !important;\n color: #6c757d !important;\n -webkit-text-fill-color: #6c757d !important;\n font-size: 14px !important;\n font-weight: 500 !important;\n}\n#sbz92 .form--btn-submit {\n border-radius: 7px !important;\n padding-left: 32px !important;\n padding-right: 32px !important;\n width: 100% !important;\n}\n#sbz92 .form .radio {\n display: block !important;\n position: relative !important;\n width: 100% !important;\n margin-top: 5px !important;\n}\n#sbz92 .form .radio:first-of-type {\n margin-top: 0 !important;\n}\n#sbz92 .form input[type='radio'] {\n position: absolute !important;\n visibility: hidden !important;\n}\n#sbz92 .form .radio--label {\n padding-left: 22px !important;\n display: block !important;\n position: relative !important;\n z-index: 9 !important;\n cursor: pointer !important;\n}\n#sbz92 .form .radio--check {\n display: block !important;\n position: absolute !important;\n border: 1px solid #aaa !important;\n border-radius: 100% !important;\n height: 16px !important;\n width: 16px !important;\n top: 0px !important;\n left: 0px !important;\n z-index: 5 !important;\n transition: border 0.15s linear !important;\n -webkit-transition: border 0.15s linear !important;\n}\n#sbz92 .form .radio--check:hover {\n border: 1px solid #888 !important;\n}\n#sbz92 .form .radio--check::before {\n display: block !important;\n position: absolute !important;\n content: '' !important;\n border-radius: 100% !important;\n height: 10px !important;\n width: 10px !important;\n top: 2px !important;\n left: 2px !important;\n margin: auto !important;\n transition: background 0.15s linear !important;\n -webkit-transition: background 0.15s linear !important;\n}\n#sbz92 .form input[type='radio']:checked ~ .radio--check {\n border: 1px solid '@primary_color' !important;\n}\n#sbz92 .form input[type='radio']:checked ~ .radio--check::before {\n background: '@primary_color' !important;\n}\n#sbz92 .form .checkbox {\n display: block !important;\n position: relative !important;\n width: 100% !important;\n margin-top: 5px !important;\n}\n#sbz92 .form .checkbox:first-of-type {\n margin-top: 0 !important;\n}\n#sbz92 .form input[type='checkbox'] {\n position: absolute !important;\n visibility: hidden !important;\n}\n#sbz92 .form .checkbox--label {\n padding-left: 22px !important;\n display: block !important;\n position: relative !important;\n z-index: 9 !important;\n cursor: pointer !important;\n}\n#sbz92 .form .checkbox--check {\n display: block !important;\n position: absolute !important;\n border: 1px solid #aaa !important;\n border-radius: 4 px !important;\n height: 16px !important;\n width: 16px !important;\n top: 0px !important;\n left: 0px !important;\n z-index: 5 !important;\n transition: border 0.15s linear !important;\n -webkit-transition: border 0.15s linear !important;\n}\n#sbz92 .form .checkbox--check:hover {\n border: 1px solid #888 !important;\n}\n#sbz92 .form .checkbox--check::before {\n display: block !important;\n position: absolute !important;\n content: '' !important;\n height: 100% !important;\n width: 100% !important;\n margin: auto !important;\n transition: background 0.15s linear !important;\n -webkit-transition: background 0.15s linear !important;\n}\n#sbz92 .form input[type='checkbox']:checked ~ .checkbox--check {\n border: 1px solid '@primary_color' !important;\n}\n#sbz92 .form input[type='checkbox']:checked ~ .checkbox--check::before {\n background: '@primary_color' !important;\n}\n#sbz92 .form .select .form-control {\n padding-right: 20px !important;\n}\n#sbz92 .form select {\n /*background: url(\"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00LjQxMDU4IDYuOTExMDdDNC43MzYwMiA2LjU4NTYzIDUuMjYzNjYgNi41ODU2MyA1LjU4OTA5IDYuOTExMDdMOS45OTk4NCAxMS4zMjE4TDE0LjQxMDYgNi45MTEwN0MxNC43MzYgNi41ODU2MyAxNS4yNjM3IDYuNTg1NjMgMTUuNTg5MSA2LjkxMTA3QzE1LjkxNDUgNy4yMzY1MSAxNS45MTQ1IDcuNzY0MTQgMTUuNTg5MSA4LjA4OTU4TDEwLjU4OTEgMTMuMDg5NkMxMC4yNjM3IDEzLjQxNSA5LjczNjAyIDEzLjQxNSA5LjQxMDU4IDEzLjA4OTZMNC40MTA1OCA4LjA4OTU4QzQuMDg1MTQgNy43NjQxNCA0LjA4NTE0IDcuMjM2NTEgNC40MTA1OCA2LjkxMTA3WiIgZmlsbD0iYmxhY2siLz4KPC9zdmc+\") no-repeat right;*/\n}\n#sbz92 .form-require-info--list {\n background: #fff !important;\n overflow-y: auto !important;\n overflow-x: hidden !important;\n}\n#sbz92 .form-require-info--title {\n font-size: 18px !important;\n line-height: 20px !important;\n color: #000 !important;\n -webkit-text-fill-color: #000 !important;\n background: #fff !important;\n border-bottom: 1px solid #f0f0f0 !important;\n}\n#sbz92 .form-require-info--item {\n border-bottom: 1px solid #f0f0f0 !important;\n}\n#sbz92 .form-require-info--item:hover {\n cursor: pointer !important;\n background: #e0e0e0 !important;\n}\n#sbz92 input[type='checkbox'] {\n background-color: initial !important;\n cursor: default !important;\n -webkit-appearance: checkbox !important;\n box-sizing: border-box !important;\n margin: 3px 3px 3px 4px !important;\n padding: initial !important;\n border: initial !important;\n}\n#sbz92 input[type='radio'] {\n background-color: initial !important;\n cursor: default !important;\n -webkit-appearance: radio !important;\n box-sizing: border-box !important;\n margin: 3px 3px 0px 5px !important;\n padding: initial !important;\n border: initial !important;\n}\n#sbz92 option {\n font-weight: normal !important;\n display: block !important;\n white-space: pre !important;\n min-height: 1.2em !important;\n padding: 0px 2px 1px !important;\n}\n#sbz92 select {\n -webkit-writing-mode: horizontal-tb !important;\n text-rendering: auto !important;\n color: -internal-light-dark-color(black, white) !important;\n letter-spacing: normal !important;\n word-spacing: normal !important;\n text-transform: none !important;\n text-indent: 0px !important;\n text-shadow: none !important;\n display: inline-block !important;\n text-align: start !important;\n -webkit-appearance: menulist !important;\n box-sizing: border-box !important;\n align-items: center !important;\n white-space: pre !important;\n -webkit-rtl-ordering: logical !important;\n background-color: -internal-light-dark-color(white, black) !important;\n cursor: default !important;\n margin: 0em !important;\n font: 400 13.3333px Arial !important;\n border-radius: 0px !important;\n border-width: 1px !important;\n border-style: solid !important;\n border-color: #a9a9a9 !important;\n border-image: initial !important;\n}\n#sbz92 select {\n position: relative !important;\n display: inline-block !important;\n border: 2px #cccc solid !important;\n border-radius: 5px !important;\n height: 36px !important;\n line-height: 34px !important;\n padding: 0 12px !important;\n font-size: 14px !important;\n color: #000 !important;\n -webkit-text-fill-color: #000 !important;\n}\n#sbz92 .custom-select--wrap-selected {\n display: flex !important;\n position: relative !important;\n justify-content: space-between !important;\n cursor: pointer !important;\n border: 1px solid #d8d8d8 !important;\n border-radius: 5px !important;\n padding: 5px !important;\n}\n#sbz92 .custom-select--selected-items {\n display: flex !important;\n align-items: center !important;\n flex-wrap: wrap !important;\n}\n#sbz92 .custom-select--selected-item {\n display: flex !important;\n align-items: center !important;\n margin: 3px 3px !important;\n padding: 1px 6px !important;\n border-radius: 5px !important;\n border: 1px solid #d8d8d8 !important;\n font-size: 14px !important;\n color: #000 !important;\n -webkit-text-fill-color: #000 !important;\n vertical-align: top !important;\n}\n#sbz92 .icn-delete:before {\n display: flex !important;\n justify-items: center !important;\n font-size: 12px !important;\n margin-left: 5px !important;\n opacity: 0.5 !important;\n content: '\\2715' !important;\n}\n#sbz92 .custom-select--wrap-options {\n display: flex !important;\n flex-direction: column !important;\n position: absolute !important;\n left: 0 !important;\n top: 100% !important;\n border: 1px solid #dadce0 !important;\n -webkit-box-shadow: 0 4px 16px rgba(0, 0, 0, 0.1) !important;\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.1) !important;\n border-radius: 5px !important;\n width: 100% !important;\n background: #fff !important;\n z-index: 11 !important;\n max-height: 200px !important;\n overflow-y: auto !important;\n}\n#sbz92 .custom-select--input-search {\n font-size: 15px !important;\n padding: 8px !important;\n border-bottom: 1px solid #d8d8d8 !important;\n}\n#sbz92 .custom-select--items-options {\n margin: 0 !important;\n display: flex !important;\n flex-direction: column !important;\n}\n#sbz92 .custom-select--item-options {\n padding: 10px !important;\n cursor: pointer !important;\n}\n#sbz92 .custom-select--item-options:hover {\n background-color: '@primary_color' !important;\n color: '@text_color' !important;\n -webkit-text-fill-color: '@text_color' !important;\n}\n#sbz92 .custom-select--icon-dropdown {\n margin-left: auto !important;\n float: right !important;\n cursor: pointer !important;\n}\n#sbz92 .custom-select--icon-dropdown path {\n d: path('M 7 9.5 L 12 14.5 L 17 9.5 H 7 Z') !important;\n fill: black !important;\n}\n#sbz92 .form-component {\n margin-bottom: 15px !important;\n}\n#sbz92 .form-component:last-child {\n margin-bottom: 0 !important;\n}\n#sbz92 .form-component.submitted {\n margin-bottom: 8px !important;\n}\n#sbz92 .form-component.form-component-submit-button {\n margin-top: 20px !important;\n}\n#sbz92 .form-wrapper.form {\n padding: 20px !important;\n background-color: #fff !important;\n}\n#sbz92 .form-wrapper.form-wrapper-attachment.form {\n padding: 12px 15px !important;\n margin-top: 5px !important;\n box-shadow: 0 0 0 1px #eeeeee !important;\n}\n#sbz92 .form-wrapper.form-wrapper-attachment.form input[type='text'].form-control,\n#sbz92 .form-wrapper.form-wrapper-attachment.form input[type='number'].form-control,\n#sbz92 .form-wrapper.form-wrapper-attachment.form input[type='date'].form-control,\n#sbz92 .form-wrapper.form-wrapper-attachment.form select.form-control,\n#sbz92 .form-wrapper.form-wrapper-attachment.form textarea.form-control {\n padding: 6px 10px !important;\n}\n#sbz92 .form-wrapper.form-wrapper-attachment.form .form-component {\n margin-bottom: 12px !important;\n}\n#sbz92 .form-wrapper.form-wrapper-attachment.form .form-component:last-child {\n margin-bottom: 0 !important;\n}\n#sbz92 .form-wrapper.form-wrapper-attachment.form .form-component.submitted {\n margin-bottom: 5px !important;\n}\n#sbz92 .form-wrapper.form-wrapper-attachment.form .form-component.submitted:last-child {\n margin-bottom: 0 !important;\n}\n#sbz92 .form-wrapper.form-wrapper-attachment.form .form-component:first-child .label {\n margin-top: 0 !important;\n}\n#sbz92 .form-wrapper.form-wrapper-attachment.form .form-component.form-component-submit-button {\n margin-top: 16px !important;\n}\n#sbz92 .form-wrapper.form-wrapper-attachment.form .label {\n padding-bottom: 4px !important;\n}\n#sbz92 .form-wrapper.form-wrapper-attachment.form .form-control--valid-input--error {\n padding-top: 3px !important;\n}\n#sbz92 .form-wrapper.form-wrapper-attachment.form .btn--start-convo {\n height: 36px !important;\n}\n#sbz92 select.form-control.form-control--empty {\n color: #6c757d !important;\n -webkit-text-fill-color: #6c757d !important;\n}\n@media only screen and (min-width: 968px) {\n #sbz92 .form-radios-wrapper.horizontal {\n display: flex;\n flex-wrap: wrap;\n }\n #sbz92 .form-radios-wrapper.horizontal .radio {\n margin-right: 10px;\n width: 300px;\n }\n #sbz92 .form-radios-wrapper.horizontal .radio:first-child {\n margin-top: 0;\n }\n #sbz92 .form-radios-wrapper.horizontal .radio:nth-child(2) {\n margin-top: 0;\n }\n #sbz92 .form-radios-wrapper.horizontal .radio:nth-child(2n) {\n margin-right: 0;\n }\n #sbz92 .form-checkboxes-wrapper.horizontal {\n display: flex;\n flex-wrap: wrap;\n }\n #sbz92 .form-checkboxes-wrapper.horizontal .checkbox {\n margin-right: 10px;\n width: 300px;\n }\n #sbz92 .form-checkboxes-wrapper.horizontal .checkbox:first-child {\n margin-top: 0;\n }\n #sbz92 .form-checkboxes-wrapper.horizontal .checkbox:nth-child(2) {\n margin-top: 0;\n }\n #sbz92 .form-checkboxes-wrapper.horizontal .checkbox:nth-child(2n) {\n margin-right: 0;\n }\n}\n#sbz92 .form-ratings-wrapper {\n display: inline-flex !important;\n}\n#sbz92 .star {\n width: 32px !important;\n height: 30px !important;\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_0___ + ") !important;\n background-position: 0px 0px !important;\n background-size: cover !important;\n}\n#sbz92 .form-wrapper-attachment .star-wrapper {\n padding-right: 12px !important;\n}\n#sbz92 .star-wrapper {\n cursor: pointer !important;\n padding-right: 20px !important;\n}\n#sbz92 .star-wrapper:last-child {\n padding-right: 0 !important;\n}\n#sbz92 .star-wrapper.hovering .star {\n background-position: -32px 0 !important;\n}\n#sbz92 .star-wrapper.selected {\n cursor: auto !important;\n}\n#sbz92 .star-wrapper.selected .star {\n background-position: -64px 0 !important;\n}\n#sbz92 .widget-body--events-container {\n overflow-x: hidden !important;\n overflow-y: auto !important;\n display: flex !important;\n flex-direction: column !important;\n flex: 1 !important;\n padding-left: 22.5px !important;\n padding-right: 22.5px !important;\n}\n#sbz92 .widget-body--events {\n padding-top: 20px !important;\n flex: 1 !important;\n}\n#sbz92 .mobile .widget-body--events {\n display: flex !important;\n flex-direction: column !important;\n justify-content: flex-end !important;\n padding-bottom: 15px !important;\n}\n#sbz92 .widget-body--events-container.widget-body--events-container__error {\n align-items: center !important;\n justify-content: center !important;\n}\n#sbz92 .convo-event {\n position: relative !important;\n}\n#sbz92 .convo-event-time {\n text-align: center !important;\n margin-top: 15px !important;\n}\n#sbz92 .convo-event-time span {\n color: #6c757d !important;\n -webkit-text-fill-color: #6c757d !important;\n}\n#sbz92 .file-attachment {\n padding: 10px !important;\n border-radius: 10px !important;\n cursor: pointer !important;\n margin: 5px 0 0 0 !important;\n}\n#sbz92 .file-attachment--agent {\n background-color: '@primary_color' !important;\n width: fit-content !important;\n}\n#sbz92 .file-attachment--user {\n background-color: #eeeeee !important;\n align-self: flex-end !important;\n}\n#sbz92 .file-attachment--link {\n display: flex !important;\n flex-direction: row !important;\n align-items: center !important;\n width: fit-content !important;\n}\n#sbz92 .file-attachment--agent .file-attachment--filename {\n color: '@text_color' !important;\n -webkit-text-fill-color: '@text_color' !important;\n text-decoration: underline !important;\n text-overflow: ellipsis !important;\n white-space: nowrap !important;\n overflow: hidden !important;\n max-width: 200px !important;\n}\n#sbz92 .file-attachment--user .file-attachment--filename {\n color: #000 !important;\n -webkit-text-fill-color: #000 !important;\n text-decoration: underline !important;\n text-overflow: ellipsis !important;\n overflow: hidden !important;\n white-space: nowrap !important;\n max-width: 200px !important;\n}\n#sbz92 .file-attachment--download {\n width: 24px !important;\n height: 24px !important;\n border-radius: 30px !important;\n display: inline-block !important;\n}\n#sbz92 .file-attachment--agent .file-attachment--download {\n background: '@text_color' !important;\n background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9IiMwMjY1RkYiIHN0cm9rZS13aWR0aD0iMyIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBjbGFzcz0iZmVhdGhlciBmZWF0aGVyLWFycm93LWRvd24iPjxsaW5lIHgxPSIxMiIgeTE9IjUiIHgyPSIxMiIgeTI9IjE5Ij48L2xpbmU+PHBvbHlsaW5lIHBvaW50cz0iMTkgMTIgMTIgMTkgNSAxMiI+PC9wb2x5bGluZT48L3N2Zz4K') !important;\n background-size: 15px 15px !important;\n background-repeat: no-repeat !important;\n background-position: center !important;\n}\n#sbz92 .file-attachment--user .file-attachment--download {\n background: #c4c4c4 !important;\n background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9IndoaXRlIiBzdHJva2Utd2lkdGg9IjMiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgY2xhc3M9ImZlYXRoZXIgZmVhdGhlci1hcnJvdy1kb3duIj48bGluZSB4MT0iMTIiIHkxPSI1IiB4Mj0iMTIiIHkyPSIxOSI+PC9saW5lPjxwb2x5bGluZSBwb2ludHM9IjE5IDEyIDEyIDE5IDUgMTIiPjwvcG9seWxpbmU+PC9zdmc+Cg==') !important;\n background-size: 15px 15px !important;\n background-repeat: no-repeat !important;\n background-position: center !important;\n}\n#sbz92 .message-text--user {\n line-height: 1.5 !important;\n margin: 5px 0 0 !important;\n display: inline-block !important;\n font-weight: 500 !important;\n background-color: '@primary_color' !important;\n color: '@text_color' !important;\n -webkit-text-fill-color: '@text_color' !important;\n padding: 12px 16px 12px 16px !important;\n}\n#sbz92 .message-text--user.just-focused {\n box-shadow: 0 0 0 2px #000 !important;\n}\n#sbz92 .message-text--agent.just-focused {\n box-shadow: 0 0 0 2px #000 !important;\n}\n#sbz92 .message-text--user.message-user--error {\n background-color: #dc3545 !important;\n}\n#sbz92 .message-text--agent.message-text--deleted {\n opacity: 0.7 !important;\n font-style: italic !important;\n}\n#sbz92 .message-text--agent {\n line-height: 1.5 !important;\n white-space: pre-wrap !important;\n display: inline-block !important;\n background: '@primary_color_faded' !important;\n color: #000 !important;\n -webkit-text-fill-color: #000 !important;\n padding: 12px 16px 12px 16px !important;\n}\n#sbz92 .message-agent.message-text--agent {\n max-width: 100% !important;\n margin-top: 0 !important;\n}\n#sbz92 .message-block-pre {\n max-width: 100% !important;\n margin: 0 !important;\n overflow-x: auto !important;\n white-space: pre !important;\n}\n#sbz92 .message-block-code {\n font-family: monospace !important;\n}\n#sbz92 .message-user__container {\n display: flex !important;\n flex-direction: row !important;\n align-items: flex-end !important;\n justify-content: flex-end !important;\n}\n#sbz92 .sending_dot.sending_dot__hide {\n opacity: 0 !important;\n background-color: #000 !important;\n}\n#sbz92 .sending_dot {\n width: 15px !important;\n height: 15px !important;\n margin-right: 5px !important;\n border-radius: 50% !important;\n background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9IiM3NzciIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBjbGFzcz0iZmVhdGhlciBmZWF0aGVyLWNsb2NrIj48Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCI+PC9jaXJjbGU+PHBvbHlsaW5lIHBvaW50cz0iMTIgNiAxMiAxMiAxNiAxNCI+PC9wb2x5bGluZT48L3N2Zz4K') !important;\n background-size: contain !important;\n background-repeat: no-repeat !important;\n}\n#sbz92 .message-user {\n border-radius: 18px !important;\n border-bottom-right-radius: 4px !important;\n max-width: 85% !important;\n align-self: flex-end !important;\n word-break: break-word !important;\n position: relative !important;\n white-space: pre-wrap !important;\n}\n#sbz92 .message-user.message-user-images-container {\n width: 85% !important;\n display: flex !important;\n justify-content: flex-end !important;\n}\n#sbz92 .message-user.message-user-audio {\n flex: 1 !important;\n}\n#sbz92 .message-agent {\n border-radius: 18px !important;\n border-bottom-left-radius: 4px !important;\n max-width: 85% !important;\n word-break: break-word !important;\n position: relative !important;\n}\n#sbz92 a.message_error {\n color: #dc3545 !important;\n -webkit-text-fill-color: #dc3545 !important;\n opacity: 0.8 !important;\n display: block !important;\n text-align: end !important;\n font-size: 13px !important;\n margin-top: 5px !important;\n margin-bottom: 10px !important;\n}\n#sbz92 a.message_error:hover {\n opacity: 1 !important;\n color: #dc3545 !important;\n -webkit-text-fill-color: #dc3545 !important;\n}\n#sbz92 .message_error__text {\n display: inline-block !important;\n vertical-align: text-top !important;\n}\n#sbz92 .message_error__icon {\n display: inline-block !important;\n vertical-align: bottom !important;\n background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSIjZGMzNTQ1IiBzdHJva2U9IiNmZmYiIHN0cm9rZS13aWR0aD0iMyIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBjbGFzcz0iZmVhdGhlciBmZWF0aGVyLWFsZXJ0LWNpcmNsZSI+PGNpcmNsZSBjeD0iMTIiIGN5PSIxMiIgcj0iMTAiPjwvY2lyY2xlPjxsaW5lIHgxPSIxMiIgeTE9IjgiIHgyPSIxMiIgeTI9IjEyIj48L2xpbmU+PGxpbmUgeDE9IjEyIiB5MT0iMTYiIHgyPSIxMi4wMSIgeTI9IjE2Ij48L2xpbmU+PC9zdmc+Cgo=') !important;\n background-size: contain !important;\n background-repeat: no-repeat !important;\n background-position: center !important;\n width: 20px !important;\n height: 20px !important;\n}\n#sbz92 .image-attachment__img {\n width: 100% !important;\n margin: 5px 0 0 0 !important;\n border-radius: 7px !important;\n border: 1px solid #eeeeee !important;\n}\n#sbz92 .audio-attachment {\n width: 100% !important;\n margin: 5px 0 0 0 !important;\n height: 45px !important;\n display: inline !important;\n}\n#sbz92 .audio-attachment__audio {\n all: inherit !important;\n width: 100% !important;\n}\n#sbz92 .video-attachment {\n border-radius: 7px !important;\n width: 100% !important;\n margin: 5px 0 0 0 !important;\n}\n#sbz92 .video-attachment__video {\n all: inherit !important;\n width: 100% !important;\n}\n#sbz92 .info-message {\n text-align: center !important;\n color: #6c757d !important;\n -webkit-text-fill-color: #6c757d !important;\n margin: 10px !important;\n}\n#sbz92 .message-sender {\n margin-top: 10px !important;\n}\n#sbz92 .message-sender-avatar {\n border-radius: 50% !important;\n width: 25px !important;\n height: 25px !important;\n margin-right: 10px !important;\n}\n#sbz92 .message-sender-name {\n color: #495057 !important;\n -webkit-text-fill-color: #495057 !important;\n vertical-align: middle !important;\n}\n#sbz92 .message-system {\n text-align: center !important;\n margin: 10px !important;\n color: #6c757d !important;\n -webkit-text-fill-color: #6c757d !important;\n}\n#sbz92 .form-attachment {\n display: flex !important;\n flex-direction: column !important;\n padding: 10px !important;\n -webkit-box-shadow: 0 0 10px #dee2e6 !important;\n box-shadow: 0 0 10px #dee2e6 !important;\n border-radius: 7px !important;\n margin-top: 10px !important;\n}\n#sbz92 .form-attachment-field {\n display: flex !important;\n flex-direction: column !important;\n margin-bottom: 0px !important;\n}\n#sbz92 .form-attachment-field__title {\n color: #4c4c4c !important;\n -webkit-text-fill-color: #4c4c4c !important;\n}\n#sbz92 .form-attachment-field__text {\n width: 100% !important;\n border: 1px solid #dbdbdb !important;\n padding: 10px !important;\n margin: 3px 0px 0px 0px !important;\n border-radius: 7px !important;\n}\n#sbz92 .input--error {\n border: 1px solid red !important;\n}\n#sbz92 .input--success {\n background-color: #f9f9f9 !important;\n pointer-events: none !important;\n}\n#sbz92 .form-attachment-field__error {\n color: brown !important;\n -webkit-text-fill-color: brown !important;\n float: right !important;\n}\n#sbz92 .form-attachment-field__checkbox {\n width: 100% !important;\n all: inherit !important;\n -webkit-appearance: textfield !important;\n margin-right: 8px !important;\n}\n#sbz92 .form-attachment-field__checkbox:hover {\n cursor: pointer !important;\n}\n#sbz92 .form-attachment-field__list-item {\n display: flex !important;\n align-items: center !important;\n margin: 4px !important;\n margin-left: 0px !important;\n}\n#sbz92 .form-attachment-field__radio {\n width: 100% !important;\n all: inherit !important;\n -webkit-appearance: textfield !important;\n margin-right: 8px !important;\n}\n#sbz92 .form-attachment-field__datetime {\n width: 100% !important;\n border: 1px solid #dbdbdb !important;\n padding: 10px !important;\n margin: 3px 0px 0px 0px !important;\n border-radius: 7px !important;\n}\n#sbz92 .form-attachment--submit-btn {\n background-color: '@primary_color' !important;\n color: '@text_color' !important;\n -webkit-text-fill-color: '@text_color' !important;\n width: 100% !important;\n margin-top: 10px !important;\n border-radius: 7px !important;\n padding: 10px !important;\n text-align: center !important;\n font-size: 16px !important;\n}\n#sbz92 .form-attachment--submit-btn:hover {\n color: '@text_color' !important;\n -webkit-text-fill-color: '@text_color' !important;\n}\n#sbz92 .red {\n color: #dc3545 !important;\n -webkit-text-fill-color: #dc3545 !important;\n}\n#sbz92 .typing {\n background-color: #f4f5f7 !important;\n color: #7a7a7b !important;\n -webkit-text-fill-color: #7a7a7b !important;\n padding: 10px !important;\n opacity: 1 !important;\n transition: all 0.2s !important;\n position: absolute !important;\n bottom: 0px !important;\n left: 0px !important;\n width: 100% !important;\n}\n#sbz92 .typing--hidden {\n opacity: 0 !important;\n display: none !important;\n}\n#sbz92 .markdown-message img {\n max-width: 100% !important;\n margin-top: 10px !important;\n}\n#sbz92 .button-attachments {\n display: block !important;\n margin-top: 5px !important;\n}\n#sbz92 .url-button-attachment:first-child {\n border-top-left-radius: 7px !important;\n border-top-right-radius: 7px !important;\n}\n#sbz92 .url-button-attachment:last-child {\n border-bottom-left-radius: 7px !important;\n border-bottom-right-radius: 7px !important;\n border-bottom: 1px solid '@primary_color' !important;\n}\n#sbz92 .agent-message .url-button-attachment {\n text-decoration: none !important;\n padding: 10px 18px !important;\n display: block !important;\n text-align: center !important;\n color: #000 !important;\n -webkit-text-fill-color: #000 !important;\n border: 1px solid #000 !important;\n border-radius: 12px !important;\n text-overflow: ellipsis !important;\n overflow: hidden !important;\n font-weight: 500 !important;\n white-space: nowrap !important;\n}\n#sbz92 .agent-message .url-button-attachment:hover {\n color: '@primary_color' !important;\n -webkit-text-fill-color: '@primary_color' !important;\n border-color: '@primary_color' !important;\n}\n#sbz92 .message_quick_replies {\n display: flex !important;\n flex-wrap: wrap !important;\n flex-direction: column !important;\n}\n#sbz92 .message_quick_reply {\n cursor: pointer !important;\n position: relative !important;\n padding: 10px 18px !important;\n margin-top: 8px !important;\n color: #000 !important;\n -webkit-text-fill-color: #000 !important;\n border-radius: 12px !important;\n user-select: none !important;\n overflow: hidden !important;\n white-space: nowrap !important;\n width: fit-content !important;\n font-weight: 500 !important;\n max-width: 100% !important;\n text-overflow: ellipsis !important;\n border: 1px solid #000 !important;\n transition: all 100ms ease !important;\n}\n#sbz92 .message_quick_reply:hover {\n background: '@primary_color' !important;\n color: '@text_color' !important;\n -webkit-text-fill-color: '@text_color' !important;\n border-color: '@primary_color' !important;\n}\n#sbz92 .generic-attachment-container {\n position: relative !important;\n margin-top: 10px !important;\n}\n#sbz92 .generic-attachments {\n display: block !important;\n}\n#sbz92 .generic-attachment {\n display: flex !important;\n width: 100% !important;\n white-space: nowrap !important;\n overflow: hidden !important;\n user-select: none !important;\n cursor: grab !important;\n}\n#sbz92 .generic-attachment--element-content {\n flex: 1 !important;\n}\n#sbz92 .generic-attachment--element {\n border: 1px solid #d8d8d8 !important;\n background: white !important;\n border-radius: 7px !important;\n overflow: hidden !important;\n width: 220px !important;\n margin-right: 10px !important;\n vertical-align: top !important;\n display: flex !important;\n flex-direction: column !important;\n flex-shrink: 0 !important;\n}\n#sbz92 .generic-attachment--element:last-child {\n margin-right: 0 !important;\n}\n#sbz92 .generic-attachment--element .generic-attachment--element-img {\n width: 100% !important;\n height: 150px !important;\n object-fit: cover !important;\n}\n#sbz92 .generic-attachment--element .url-button-attachment:first-child {\n border-radius: 0 !important;\n}\n#sbz92 .generic-attachment--element .url-button-attachment {\n padding: 10px !important;\n display: block !important;\n padding-top: 9px !important;\n padding-button: 9px !important;\n text-align: center !important;\n border: none !important;\n border-top: 1px solid #d8d8d8 !important;\n width: 100% !important;\n color: #0d6efd !important;\n -webkit-text-fill-color: #0d6efd !important;\n}\n#sbz92 .generic-attachment--element .url-button-attachment:hover {\n color: #024dbc !important;\n -webkit-text-fill-color: #024dbc !important;\n border-color: #d8d8d8 !important;\n}\n#sbz92 .generic-attachment--element .generic-attachment--element-title {\n padding: 0px 13px !important;\n margin-top: 13px !important;\n color: #000 !important;\n -webkit-text-fill-color: #000 !important;\n font-weight: 600 !important;\n font-size: 16px !important;\n line-height: 20px !important;\n white-space: normal !important;\n}\n#sbz92 .generic-attachment--element .generic-attachment--element-subtitle {\n padding: 0px 13px !important;\n color: gray !important;\n -webkit-text-fill-color: gray !important;\n margin-top: 5px !important;\n white-space: pre-wrap !important;\n display: -webkit-box !important;\n -webkit-line-clamp: 4 !important;\n -webkit-box-orient: vertical !important;\n overflow: hidden !important;\n text-overflow: ellipsis !important;\n}\n#sbz92 .generic-attachment--element.clickable {\n cursor: pointer !important;\n}\n#sbz92 .widget_body__events__error_msg {\n margin-top: 50px !important;\n color: #6c757d !important;\n -webkit-text-fill-color: #6c757d !important;\n text-align: center !important;\n}\n#sbz92 .widget_body__events__error_retry {\n margin-top: 10px !important;\n}\n#sbz92 .generic-attachment-navigator {\n position: absolute !important;\n top: 50% !important;\n transform: translateY(-50%) !important;\n cursor: pointer !important;\n width: 20px !important;\n font-size: 80px !important;\n display: flex !important;\n align-items: center !important;\n justify-content: center !important;\n color: rgba(255, 255, 255, 0.85) !important;\n -webkit-text-fill-color: rgba(255, 255, 255, 0.85) !important;\n text-shadow: 0 10px 25px rgba(0, 0, 0, 0.75) !important;\n z-index: 999 !important;\n user-select: none !important;\n}\n#sbz92 .generic-attachment-navigator:hover {\n text-shadow: 0 10px 20px rgba(0, 0, 0, 0.75) !important;\n color: #ffffff !important;\n -webkit-text-fill-color: #ffffff !important;\n}\n#sbz92 .generic-attachment-navigator.generic-attachment-navigator--disabled {\n display: none !important;\n}\n#sbz92 .generic-attachment-navigator.generic-attachment-navigator--left {\n left: 2px !important;\n}\n#sbz92 .generic-attachment-navigator.generic-attachment-navigator--right {\n right: 2px !important;\n}\n#sbz92 .generic-attachment-navigator-icon {\n font-size: 80px !important;\n}\n#sbz92 .order_attachment__product_img {\n width: 40px !important;\n height: 40px !important;\n margin-right: 10px !important;\n border-radius: 5px !important;\n flex-shrink: 0 !important;\n display: block !important;\n object-fit: contain !important;\n background: whitesmoke !important;\n}\n#sbz92 .order_attachment__product_name {\n text-overflow: ellipsis !important;\n white-space: nowrap !important;\n overflow: hidden !important;\n color: black !important;\n -webkit-text-fill-color: black !important;\n}\n#sbz92 .order_attachment__header {\n padding-bottom: 5px !important;\n border-bottom: 1px solid #ccc !important;\n margin-bottom: 5px !important;\n display: flex !important;\n align-items: center !important;\n justify-content: space-between !important;\n}\n#sbz92 .order_attachment__product_desc {\n text-overflow: ellipsis !important;\n white-space: nowrap !important;\n overflow: hidden !important;\n color: #999 !important;\n -webkit-text-fill-color: #999 !important;\n font-size: 13px !important;\n}\n#sbz92 .order_attachment__product {\n display: flex !important;\n align-items: center !important;\n margin-top: 5px !important;\n margin-bottom: 5 !important;\n}\n#sbz92 .order_attachment__text_sm {\n font-size: 13px !important;\n}\n#sbz92 .order_attachment__text_muted {\n color: #6c757d !important;\n -webkit-text-fill-color: #6c757d !important;\n}\n#sbz92 .order_attachment__text_truncate {\n text-overflow: ellipsis !important;\n white-space: nowrap !important;\n overflow: hidden !important;\n}\n#sbz92 .order_attachment {\n margin-top: 10px !important;\n color: black !important;\n -webkit-text-fill-color: black !important;\n border: 1px solid #aaa !important;\n background: white !important;\n border-radius: 8px !important;\n width: 220px !important;\n overflow-y: auto !important;\n overflow-x: hidden !important;\n padding: 10px !important;\n}\n#sbz92 .order_attachment__footer {\n margin-top: 10px !important;\n padding-top: 10px !important;\n border-top: 1px solid #ccc !important;\n}\n#sbz92 .order_attachment__total {\n font-size: 16px !important;\n}\n#sbz92 .order_attachment__label {\n font-size: 13px !important;\n color: #777 !important;\n -webkit-text-fill-color: #777 !important;\n margin-top: 10px !important;\n}\n#sbz92 .order_attachment__label.no_margin {\n margin-top: 0 !important;\n}\n#sbz92 .order_attachment.order_attachment__user {\n margin-right: 50px !important;\n align-self: flex-end !important;\n margin-right: 0 !important;\n margin-left: 50px !important;\n align-self: flex-start !important;\n}\n#sbz92 .product_attachment {\n margin-top: 10px !important;\n border: 1px solid #d8d8d8 !important;\n background: white !important;\n border-radius: 7px !important;\n overflow: hidden !important;\n width: 200px !important;\n display: inline-block !important;\n vertical-align: top !important;\n transition: all 0.1s !important;\n}\n#sbz92 .product_attachment.product_attachment__user {\n margin-right: 50px !important;\n align-self: flex-end !important;\n margin-right: 0 !important;\n margin-left: 50px !important;\n align-self: flex-start !important;\n}\n#sbz92 .product_attachment__img {\n width: 200px !important;\n height: 200px !important;\n border-bottom: 1px solid #d8d8d8 !important;\n object-fit: cover !important;\n display: block !important;\n}\n#sbz92 .product_attachment__price {\n padding-left: 10px !important;\n}\n#sbz92 .product_attachment__btns {\n margin-top: 5px !important;\n}\n#sbz92 .product_attachment__btn {\n border-top: 1px solid #d8d8d8 !important;\n display: flex !important;\n padding: 8px 10px !important;\n align-items: center !important;\n color: #000 !important;\n -webkit-text-fill-color: #000 !important;\n justify-content: center !important;\n cursor: pointer !important;\n text-transform: capitalize !important;\n}\n#sbz92 .product_attachment__btn:last-child {\n margin-right: 0 !important;\n}\n#sbz92 .product_attachment__btn:hover {\n color: '@primary_color' !important;\n -webkit-text-fill-color: '@primary_color' !important;\n}\n#sbz92 a.product_attachment__title {\n display: block !important;\n padding: 8px 10px 0 10px !important;\n font-weight: 500 !important;\n color: #000 !important;\n -webkit-text-fill-color: #000 !important;\n word-break: break-word !important;\n margin-bottom: 5px !important;\n}\n#sbz92 .product_attachment__subtitle {\n white-space: pre-wrap !important;\n display: -webkit-box !important;\n -webkit-line-clamp: 3 !important;\n -webkit-box-orient: vertical !important;\n overflow: hidden !important;\n padding: 5px 10px !important;\n color: #aaa !important;\n -webkit-text-fill-color: #aaa !important;\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n margin-bottom: 5px !important;\n}\n#sbz92 .product_attachment__btn_external_link {\n width: 16px !important;\n height: 16px !important;\n margin-left: 5px !important;\n margin-top: -2px !important;\n}\n#sbz92 .agent-convo-event-wrapper {\n max-width: 85% !important;\n margin-top: 5px !important;\n}\n#sbz92 .agent-convo-event-wrapper.full {\n max-width: 100% !important;\n}\n#sbz92 .agent-convo-event-inner {\n position: relative !important;\n display: inline-block !important;\n max-width: 100% !important;\n}\n#sbz92 .message-event-actions {\n position: absolute !important;\n bottom: -10px !important;\n opacity: 0.7 !important;\n left: calc(100% - 25px) !important;\n display: none !important;\n border: 1px solid #dee2e6 !important;\n background-color: white !important;\n border-radius: 4px !important;\n z-index: 10 !important;\n}\n#sbz92 .message-event-actions.ended {\n bottom: -10px !important;\n}\n#sbz92 .message-event-actions:hover {\n opacity: 1 !important;\n}\n#sbz92 .agent-convo-event-inner:hover .message-event-actions {\n display: flex !important;\n}\n#sbz92 .message-event-actions-static {\n display: none !important;\n margin-top: 2px !important;\n border: none !important;\n padding: 0 !important;\n gap: 4px !important;\n}\n#sbz92 .agent-convo-event-inner.last .message-event-actions {\n display: none !important;\n}\n#sbz92 .agent-convo-event-inner.last .message-event-actions-static {\n display: flex !important;\n position: absolute !important;\n bottom: -30px !important;\n left: 0 !important;\n z-index: 2 !important;\n}\n#sbz92 .agent-convo-event-inner.last .message-event-action-btn {\n padding: 0 !important;\n}\n#sbz92 .agent-convo-event-inner.last .message-event-action-btn .message-event-action-btn-svg {\n width: 24px !important;\n height: 24px !important;\n background-position: 2px 2px !important;\n background-size: 20px 20px !important;\n}\n#sbz92 .agent-convo-event-inner.last .message-event-action-btn.message-event-action-btn__dev {\n color: #6c757d !important;\n -webkit-text-fill-color: #6c757d !important;\n padding-right: 10px !important;\n border-radius: 5px !important;\n}\n#sbz92 .agent-convo-event-inner.last .message-event-action-btn.message-event-action-btn__dev .message-event-action-btn-svg {\n width: 24px !important;\n height: 24px !important;\n background-position: 2px 2px !important;\n background-size: 20px 20px !important;\n}\n#sbz92 .agent-convo-event-inner.last .message-event-action-btn.message-event-action-btn__dev:hover {\n color: #000 !important;\n -webkit-text-fill-color: #000 !important;\n}\n#sbz92 .agent-convo-event-inner.last .message-event-action-btn.message-event-action-btn__dev.message-event-action-btn_like.active {\n color: #34c759 !important;\n -webkit-text-fill-color: #34c759 !important;\n}\n#sbz92 .agent-convo-event-inner.last .message-event-action-btn.message-event-action-btn__dev.message-event-action-btn_like.active {\n color: #34c759 !important;\n -webkit-text-fill-color: #34c759 !important;\n}\n#sbz92 .message-event-action-btn.message-event-action-btn__dev:hover {\n background-color: unset !important;\n}\n#sbz92 .message-event-action-btn {\n display: flex !important;\n align-items: center !important;\n justify-content: center !important;\n cursor: pointer !important;\n padding: 2px !important;\n}\n#sbz92 .message-event-action-btn:hover {\n background-color: #ececec !important;\n}\n#sbz92 .message-event-action-btn.active:hover {\n background-color: #dbfde3 !important;\n}\n#sbz92 .message-event-action-btn.message-event-action-btn__dev {\n padding: 0px !important;\n}\n#sbz92 .message-event-action-btn.message-event-action-btn__dev:hover {\n background-color: unset !important;\n}\n#sbz92 .message-event-action-btn.message-event-action-btn__dev.active:hover {\n background-color: unset !important;\n}\n#sbz92 .message-event-action-btn .message-event-action-btn-svg {\n width: 20px !important;\n height: 20px !important;\n border-radius: 4px !important;\n background-position: 2px 2px !important;\n background-size: 16px 16px !important;\n background-repeat: no-repeat !important;\n background-position: center !important;\n}\n#sbz92 .message-event-action-btn-svg.like {\n background-image: url('data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiAgd2lkdGg9IjI0IiAgaGVpZ2h0PSIyNCIgIHZpZXdCb3g9IjAgMCAyNCAyNCIgIGZpbGw9Im5vbmUiICBzdHJva2U9IiM2Yzc1N2QiICBzdHJva2Utd2lkdGg9IjIiICBzdHJva2UtbGluZWNhcD0icm91bmQiICBzdHJva2UtbGluZWpvaW49InJvdW5kIiAgY2xhc3M9Imljb24gaWNvbi10YWJsZXIgaWNvbnMtdGFibGVyLW91dGxpbmUgaWNvbi10YWJsZXItdGh1bWItdXAiPjxwYXRoIHN0cm9rZT0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik03IDExdjhhMSAxIDAgMCAxIC0xIDFoLTJhMSAxIDAgMCAxIC0xIC0xdi03YTEgMSAwIDAgMSAxIC0xaDNhNCA0IDAgMCAwIDQgLTR2LTFhMiAyIDAgMCAxIDQgMHY1aDNhMiAyIDAgMCAxIDIgMmwtMSA1YTIgMyAwIDAgMSAtMiAyaC03YTMgMyAwIDAgMSAtMyAtMyIgLz48L3N2Zz4K') !important;\n}\n#sbz92 .message-event-action-btn-svg.dislike {\n background-image: url('data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiAgd2lkdGg9IjI0IiAgaGVpZ2h0PSIyNCIgIHZpZXdCb3g9IjAgMCAyNCAyNCIgIGZpbGw9Im5vbmUiICBzdHJva2U9IiM2Yzc1N2QiICBzdHJva2Utd2lkdGg9IjIiICBzdHJva2UtbGluZWNhcD0icm91bmQiICBzdHJva2UtbGluZWpvaW49InJvdW5kIiAgY2xhc3M9Imljb24gaWNvbi10YWJsZXIgaWNvbnMtdGFibGVyLW91dGxpbmUgaWNvbi10YWJsZXItdGh1bWItZG93biI+PHBhdGggc3Ryb2tlPSJub25lIiBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTcgMTN2LThhMSAxIDAgMCAwIC0xIC0xaC0yYTEgMSAwIDAgMCAtMSAxdjdhMSAxIDAgMCAwIDEgMWgzYTQgNCAwIDAgMSA0IDR2MWEyIDIgMCAwIDAgNCAwdi01aDNhMiAyIDAgMCAwIDIgLTJsLTEgLTVhMiAzIDAgMCAwIC0yIC0yaC03YTMgMyAwIDAgMCAtMyAzIiAvPjwvc3ZnPgo=') !important;\n}\n#sbz92 .message-event-action-btn-svg.info {\n background-image: url('data:image/svg+xml;base64,PHN2ZwogIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICB3aWR0aD0iMjQiCiAgaGVpZ2h0PSIyNCIKICB2aWV3Qm94PSIwIDAgMjQgMjQiCiAgZmlsbD0ibm9uZSIKICBzdHJva2U9IiM2Yzc1N2QiCiAgc3Ryb2tlLXdpZHRoPSIyIgogIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIKICBzdHJva2UtbGluZWpvaW49InJvdW5kIgo+CiAgPHBhdGggZD0iTTMgMTJhOSA5IDAgMSAwIDE4IDBhOSA5IDAgMCAwIC0xOCAwIiAvPgogIDxwYXRoIGQ9Ik0xMiA5aC4wMSIgLz4KICA8cGF0aCBkPSJNMTEgMTJoMXY0aDEiIC8+Cjwvc3ZnPgo=') !important;\n}\n#sbz92 .message-event-action-btn:hover .message-event-action-btn-svg.like {\n background-image: url('data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiAgd2lkdGg9IjI0IiAgaGVpZ2h0PSIyNCIgIHZpZXdCb3g9IjAgMCAyNCAyNCIgIGZpbGw9Im5vbmUiICBzdHJva2U9ImJsYWNrIiAgc3Ryb2tlLXdpZHRoPSIyIiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiAgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgIGNsYXNzPSJpY29uIGljb24tdGFibGVyIGljb25zLXRhYmxlci1vdXRsaW5lIGljb24tdGFibGVyLXRodW1iLXVwIj48cGF0aCBzdHJva2U9Im5vbmUiIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNNyAxMXY4YTEgMSAwIDAgMSAtMSAxaC0yYTEgMSAwIDAgMSAtMSAtMXYtN2ExIDEgMCAwIDEgMSAtMWgzYTQgNCAwIDAgMCA0IC00di0xYTIgMiAwIDAgMSA0IDB2NWgzYTIgMiAwIDAgMSAyIDJsLTEgNWEyIDMgMCAwIDEgLTIgMmgtN2EzIDMgMCAwIDEgLTMgLTMiIC8+PC9zdmc+Cg==') !important;\n}\n#sbz92 .message-event-action-btn:hover .message-event-action-btn-svg.dislike {\n background-image: url('data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiAgd2lkdGg9IjI0IiAgaGVpZ2h0PSIyNCIgIHZpZXdCb3g9IjAgMCAyNCAyNCIgIGZpbGw9Im5vbmUiICBzdHJva2U9ImJsYWNrIiAgc3Ryb2tlLXdpZHRoPSIyIiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiAgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgIGNsYXNzPSJpY29uIGljb24tdGFibGVyIGljb25zLXRhYmxlci1vdXRsaW5lIGljb24tdGFibGVyLXRodW1iLWRvd24iPjxwYXRoIHN0cm9rZT0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik03IDEzdi04YTEgMSAwIDAgMCAtMSAtMWgtMmExIDEgMCAwIDAgLTEgMXY3YTEgMSAwIDAgMCAxIDFoM2E0IDQgMCAwIDEgNCA0djFhMiAyIDAgMCAwIDQgMHYtNWgzYTIgMiAwIDAgMCAyIC0ybC0xIC01YTIgMyAwIDAgMCAtMiAtMmgtN2EzIDMgMCAwIDAgLTMgMyIgLz48L3N2Zz4K') !important;\n}\n#sbz92 .message-event-action-btn:hover .message-event-action-btn-svg.info {\n background-image: url('data:image/svg+xml;base64,PHN2ZwogIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICB3aWR0aD0iMjQiCiAgaGVpZ2h0PSIyNCIKICB2aWV3Qm94PSIwIDAgMjQgMjQiCiAgZmlsbD0ibm9uZSIKICBzdHJva2U9IiMwMDAiCiAgc3Ryb2tlLXdpZHRoPSIyIgogIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIKICBzdHJva2UtbGluZWpvaW49InJvdW5kIgo+CiAgPHBhdGggZD0iTTMgMTJhOSA5IDAgMSAwIDE4IDBhOSA5IDAgMCAwIC0xOCAwIiAvPgogIDxwYXRoIGQ9Ik0xMiA5aC4wMSIgLz4KICA8cGF0aCBkPSJNMTEgMTJoMXY0aDEiIC8+Cjwvc3ZnPgo=') !important;\n}\n#sbz92 .message-event-action-btn.active .message-event-action-btn-svg.like {\n background-image: url('data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiAgd2lkdGg9IjI0IiAgaGVpZ2h0PSIyNCIgIHZpZXdCb3g9IjAgMCAyNCAyNCIgIGZpbGw9IiMzNEM3NTkiICBjbGFzcz0iaWNvbiBpY29uLXRhYmxlciBpY29ucy10YWJsZXItZmlsbGVkIGljb24tdGFibGVyLXRodW1iLXVwIj48cGF0aCBzdHJva2U9Im5vbmUiIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMTMgM2EzIDMgMCAwIDEgMi45OTUgMi44MjRsLjAwNSAuMTc2djRoMmEzIDMgMCAwIDEgMi45OCAyLjY1bC4wMTUgLjE3NGwuMDA1IC4xNzZsLS4wMiAuMTk2bC0xLjAwNiA1LjAzMmMtLjM4MSAxLjYyNiAtMS41MDIgMi43OTYgLTIuODEgMi43OGwtLjE2NCAtLjAwOGgtOGExIDEgMCAwIDEgLS45OTMgLS44ODNsLS4wMDcgLS4xMTdsLjAwMSAtOS41MzZhMSAxIDAgMCAxIC41IC0uODY1YTIuOTk4IDIuOTk4IDAgMCAwIDEuNDkyIC0yLjM5N2wuMDA3IC0uMjAydi0xYTMgMyAwIDAgMSAzIC0zeiIgLz48cGF0aCBkPSJNNSAxMGExIDEgMCAwIDEgLjk5MyAuODgzbC4wMDcgLjExN3Y5YTEgMSAwIDAgMSAtLjg4MyAuOTkzbC0uMTE3IC4wMDdoLTFhMiAyIDAgMCAxIC0xLjk5NSAtMS44NWwtLjAwNSAtLjE1di03YTIgMiAwIDAgMSAxLjg1IC0xLjk5NWwuMTUgLS4wMDVoMXoiIC8+PC9zdmc+Cg==') !important;\n}\n#sbz92 .message-event-action-btn.active .message-event-action-btn-svg.dislike {\n background-image: url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzI0ODBfOTUpIj4KPHBhdGggZD0iTTEzIDIxLjAwNzlDMTMuNzY1IDIxLjAwOCAxNC41MDEyIDIwLjcxNTcgMTUuMDU3OSAyMC4xOTFDMTUuNjE0NyAxOS42NjYyIDE1Ljk0OTkgMTguOTQ4NiAxNS45OTUgMTguMTg0OUwxNiAxOC4wMDc5VjE0LjAwNzlIMThDMTguNzM1MSAxNC4wMDggMTkuNDQ0NyAxMy43MzgyIDE5Ljk5NCAxMy4yNDk3QzIwLjU0MzQgMTIuNzYxMiAyMC44OTQyIDEyLjA4OCAyMC45OCAxMS4zNTc5TDIwLjk5NSAxMS4xODQ5TDIxIDExLjAwNzlMMjAuOTggMTAuODExOUwxOS45NzQgNS43Nzk5MkMxOS41OTMgNC4xNTQ5MiAxOC40NzIgMi45ODM5MiAxNy4xNjQgMi45OTk5MkwxNyAzLjAwNzkySDlDOC43NTQ5MSAzLjAwNzk4IDguNTE4MzggMy4wOTgwNCA4LjMzNTMzIDMuMjYxMDFDOC4xNTIyNyAzLjQyMzk3IDguMDM1NDMgMy42NDg0OSA4LjAwNyAzLjg5MTkyTDggNC4wMDc5Mkw4LjAwMSAxMy41NDM5QzguMDAxIDEzLjcxOTUgOC4wNDcyMSAxMy44OTE5IDguMTM0OTggMTQuMDQzOUM4LjIyMjc1IDE0LjE5NTkgOC4zNDg5OCAxNC4zMjIyIDguNTAxIDE0LjQwOTlDOC45MjcyOSAxNC42NTYxIDkuMjg2NCAxNS4wMDM1IDkuNTQ2NjEgMTUuNDIxM0M5LjgwNjgyIDE1LjgzOTIgOS45NjAxMyAxNi4zMTQ3IDkuOTkzIDE2LjgwNTlMMTAgMTcuMDA3OVYxOC4wMDc5QzEwIDE4LjgwMzYgMTAuMzE2MSAxOS41NjY2IDEwLjg3ODcgMjAuMTI5MkMxMS40NDEzIDIwLjY5MTggMTIuMjA0NCAyMS4wMDc5IDEzIDIxLjAwNzlaIiBmaWxsPSIjMzMzMzMzIi8+CjxwYXRoIGQ9Ik01IDE0LjAwODFDNS4yNDQ5MyAxNC4wMDggNS40ODEzNCAxMy45MTgxIDUuNjY0MzcgMTMuNzU1M0M1Ljg0NzQxIDEzLjU5MjYgNS45NjQzNCAxMy4zNjgzIDUuOTkzIDEzLjEyNTFMNiAxMy4wMDgxVjQuMDA4MDZDNS45OTk5NyAzLjc2MzEyIDUuOTEwMDQgMy41MjY3MiA1Ljc0NzI4IDMuMzQzNjhDNS41ODQ1MyAzLjE2MDY1IDUuMzYwMjUgMy4wNDM3MSA1LjExNyAzLjAxNTA2TDUgMy4wMDgwNkg0QzMuNDk1MSAzLjAwNzkzIDMuMDA4ODQgMy4xOTg3OCAyLjYzODgxIDMuNTQyMjlDMi4yNjg3OCAzLjg4NTc5IDIuMDQyMzYgNC4zNTY1NCAyLjAwNSA0Ljg2MDA2TDIgNS4wMTAwNlYxMi4wMTAxQzIuMDAwMDkgMTIuNTE0NSAyLjE5MDc3IDEzLjAwMDIgMi41MzM4NCAxMy4zN0MyLjg3NjkgMTMuNzM5NyAzLjM0NzAyIDEzLjk2NjIgMy44NSAxNC4wMDQxTDQgMTQuMDA5MUw1IDE0LjAwODFaIiBmaWxsPSIjMzMzMzMzIi8+CjwvZz4KPGRlZnM+CjxjbGlwUGF0aCBpZD0iY2xpcDBfMjQ4MF85NSI+CjxyZWN0IHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0id2hpdGUiLz4KPC9jbGlwUGF0aD4KPC9kZWZzPgo8L3N2Zz4K') !important;\n}\n#sbz92 .inline-time {\n font-size: 13px !important;\n margin-top: 6px !important;\n color: #000 !important;\n -webkit-text-fill-color: #000 !important;\n font-weight: 500 !important;\n opacity: 0.4 !important;\n}\n#sbz92 .message-text-inline-image-wrapper {\n display: block !important;\n margin-top: 8px !important;\n margin-bottom: 8px !important;\n max-width: 100% !important;\n}\n#sbz92 .message-text-inline-image {\n width: 100% !important;\n}\n#sbz92 .text-message-ul {\n display: block !important;\n list-style-type: disc !important;\n margin-block-start: 8px !important;\n margin-block-end: 8px !important;\n padding-inline-start: 20px !important;\n}\n#sbz92 .text-message-ol {\n display: block !important;\n list-style-type: decimal !important;\n margin-block-start: 8px !important;\n margin-block-end: 8px !important;\n padding-inline-start: 20px !important;\n}\n#sbz92 .text-message-li {\n display: list-item !important;\n}\n#sbz92 .agent-message .text-message-link {\n color: #0d6efd !important;\n -webkit-text-fill-color: #0d6efd !important;\n font-weight: 400 !important;\n}\n#sbz92 .agent-message .text-message-link:hover {\n color: #024dbc !important;\n -webkit-text-fill-color: #024dbc !important;\n}\n#sbz92 .user-message .text-message-link {\n text-decoration: underline !important;\n text-decoration-color: rgba(255, 255, 255, 0.6) !important;\n text-underline-offset: 4px !important;\n}\n#sbz92 .user-message .text-message-link:hover {\n text-decoration-color: #fff !important;\n background-color: rgba(255, 255, 255, 0.08) !important;\n}\n#sbz92 .message-quote {\n padding: 6px 10px !important;\n border-left: 3px solid '@primary_color' !important;\n background-color: #dfdfdf !important;\n border-top-left-radius: 0 !important;\n border-bottom-left-radius: 0 !important;\n margin-bottom: 8px !important;\n max-width: 100% !important;\n}\n#sbz92 .message-quote-title {\n font-weight: 600 !important;\n font-size: 14px !important;\n text-overflow: ellipsis !important;\n white-space: nowrap !important;\n overflow: hidden !important;\n}\n#sbz92 .message-quote-content {\n opacity: 0.7 !important;\n color: '@secondary_color' !important;\n -webkit-text-fill-color: '@secondary_color' !important;\n font-size: 14px !important;\n text-overflow: ellipsis !important;\n white-space: nowrap !important;\n overflow: hidden !important;\n}\n#sbz92 .message-quote-inner-img {\n width: 36px !important;\n height: 36px !important;\n object-fit: cover !important;\n}\n#sbz92 .message-quote-inner {\n margin-left: 15px !important;\n flex: 1 !important;\n overflow: hidden !important;\n}\n#sbz92 .image-attachment.just-focused {\n box-shadow: 0 0 0 2px #000 !important;\n}\n#sbz92 .file-attachment.just-focused {\n box-shadow: 0 0 0 2px #000 !important;\n}\n#sbz92 .widget_body_empty_img {\n max-width: 150px !important;\n max-height: 150px !important;\n}\n#sbz92 .emoji {\n position: relative !important;\n width: 20px !important;\n height: 20px !important;\n background-size: 100% !important;\n background-repeat: no-repeat !important;\n border: none !important;\n display: inline-block !important;\n vertical-align: text-bottom !important;\n}\n#sbz92 .emoji--angry {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_1___ + ") !important;\n}\n#sbz92 .emoji--confused {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_2___ + ") !important;\n}\n#sbz92 .emoji--crying,\n#sbz92 .emoji--cry {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_3___ + ") !important;\n}\n#sbz92 .emoji--grinning {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_4___ + ") !important;\n}\n#sbz92 .emoji--heart_eyes,\n#sbz92 .emoji--heart-eyes {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_5___ + ") !important;\n}\n#sbz92 .emoji--neutral_face,\n#sbz92 .emoji--neutral {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_6___ + ") !important;\n}\n#sbz92 .emoji--disappointed,\n#sbz92 .emoji--sad {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_7___ + ") !important;\n}\n#sbz92 .emoji--sleepy {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_8___ + ") !important;\n}\n#sbz92 .emoji--smile,\n#sbz92 .emoji--smiling {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_9___ + ") !important;\n}\n#sbz92 .emoji--open_mouth,\n#sbz92 .emoji--surprised {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_10___ + ") !important;\n}\n#sbz92 .emoji--tired_face,\n#sbz92 .emoji--tired {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_11___ + ") !important;\n}\n#sbz92 .emoji--stuck_out_tongue,\n#sbz92 .emoji--tongue-out {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_12___ + ") !important;\n}\n#sbz92 .emoji--wink {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_13___ + ") !important;\n}\n#sbz92 .emoji--moyai {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_14___ + ") !important;\n}\n#sbz92 .emoji--dislike,\n#sbz92 .emoji--unlike,\n#sbz92 .emoji--thumbsdown {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_15___ + ") !important;\n}\n#sbz92 .emoji--like,\n#sbz92 .emoji--thumbsup {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_16___ + ") !important;\n}\n#sbz92 .emoji--ok_hand {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_17___ + ") !important;\n}\n#sbz92 .emoji--octopus {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_18___ + ") !important;\n}\n#sbz92 .emoji--pig2 {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_19___ + ") !important;\n}\n#sbz92 .emoji--wave {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_20___ + ") !important;\n}\n#sbz92 .emoji--mouse {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_21___ + ") !important;\n}\n#sbz92 .emoji--mouse2 {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_22___ + ") !important;\n}\n#sbz92 .emoji--rat {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_23___ + ") !important;\n}\n#sbz92 .emoji-picker {\n display: flex !important;\n flex-direction: row !important;\n z-index: 20 !important;\n position: absolute !important;\n max-width: 240px !important;\n background: #fff !important;\n color: #000 !important;\n -webkit-text-fill-color: #000 !important;\n border-radius: 10px !important;\n box-shadow: 0px 5px 30px rgba(0, 0, 0, 0.15) !important;\n right: 15px !important;\n bottom: 55px !important;\n flex-wrap: wrap !important;\n padding: 10px !important;\n justify-content: space-between !important;\n align-items: center !important;\n}\n#sbz92 .emoji-picker--item {\n background-size: 100% !important;\n width: 30px !important;\n height: 30px !important;\n position: relative !important;\n background-repeat: no-repeat !important;\n display: inline-block !important;\n vertical-align: text-bottom !important;\n margin: 5px !important;\n cursor: pointer !important;\n transition: background-color 0.2s !important;\n}\n#sbz92 .emoji-picker-background-item {\n background-size: 50% !important;\n width: 40px !important;\n height: 40px !important;\n border-radius: 100% !important;\n}\n#sbz92 .emoji-picker-background-item:hover {\n background-color: #dee2e6 !important;\n}\n#sbz92 .convo-list {\n display: flex !important;\n flex-direction: column !important;\n flex: 1 !important;\n width: 100% !important;\n justify-content: space-between !important;\n overflow: auto !important;\n margin-top: -60px !important;\n padding-left: 22.5px !important;\n padding-right: 22.5px !important;\n}\n#sbz92 .convo-list--list {\n background: #fff !important;\n overflow-y: auto !important;\n overflow-x: hidden !important;\n}\n#sbz92 .convo-list--title {\n font-weight: 500 !important;\n color: #000 !important;\n -webkit-text-fill-color: #000 !important;\n background: #fff !important;\n border-bottom: 1px solid #f0f0f0 !important;\n padding: 15px !important;\n}\n#sbz92 .convo-list--container {\n border-radius: 10px !important;\n box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.1) !important;\n overflow: auto !important;\n display: flex !important;\n flex-direction: column !important;\n user-select: none !important;\n}\n#sbz92 .convo-list--footer {\n display: flex !important;\n flex-direction: column !important;\n align-items: center !important;\n margin-top: 22.5px !important;\n}\n#sbz92 .convo-list--convo-last-info {\n overflow: hidden !important;\n white-space: nowrap !important;\n justify-content: center !important;\n display: flex !important;\n flex-direction: column !important;\n flex: 1 !important;\n margin-left: 15px !important;\n}\n#sbz92 .convo-list--convo-last-message {\n font-weight: normal !important;\n flex: 1 !important;\n cursor: pointer !important;\n display: flex !important;\n width: 100% !important;\n overflow: hidden !important;\n align-items: center !important;\n}\n#sbz92 .convo-list--convo-last-mes {\n text-overflow: ellipsis !important;\n opacity: 0.6 !important;\n white-space: nowrap !important;\n overflow: hidden !important;\n font-weight: normal !important;\n}\n#sbz92 .convo-list--convo-title {\n text-overflow: ellipsis !important;\n white-space: nowrap !important;\n overflow: hidden !important;\n font-weight: 500 !important;\n}\n#sbz92 .convo-list--convo-completed {\n width: 14px !important;\n}\n#sbz92 .convo-list--convo-name {\n text-overflow: ellipsis !important;\n white-space: nowrap !important;\n overflow: hidden !important;\n flex: 1 !important;\n margin-right: 16px !important;\n cursor: pointer !important;\n}\n#sbz92 .convo-list--item {\n cursor: pointer !important;\n border-bottom: 1px solid '@primary_color_faded' !important;\n padding: 15px !important;\n display: flex !important;\n flex-direction: row !important;\n transition: background 0.15s ease !important;\n}\n#sbz92 .convo-list--item:hover {\n background: '@primary_color_faded' !important;\n}\n#sbz92 .convo-list--convo-time span {\n font-size: 14px !important;\n line-height: 20px !important;\n color: #000 !important;\n -webkit-text-fill-color: #000 !important;\n opacity: 0.6 !important;\n min-width: 70px !important;\n cursor: pointer !important;\n}\n#sbz92 .convo-list--item-unread {\n width: 8px !important;\n height: 8px !important;\n background: #dc3545 !important;\n border-radius: 50% !important;\n margin-left: 15px !important;\n align-self: center !important;\n}\n#sbz92 .convo-list--item-avatar {\n width: 32px !important;\n height: 32px !important;\n}\n#sbz92 .widget-body--empty {\n display: flex !important;\n flex: 1 !important;\n justify-content: center !important;\n align-items: center !important;\n flex-direction: column !important;\n}\n#sbz92 .widget-body--empty-text {\n color: #343a40 !important;\n -webkit-text-fill-color: #343a40 !important;\n margin-top: 30px !important;\n text-align: center !important;\n}\n#sbz92 .widget-body--empty-icon {\n width: 128px !important;\n height: 128px !important;\n -webkit-mask-image: url('data:image/svg+xml,%3C?xml%20version%3D%221.0%22%20?%3E%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20viewBox%3D%220%200%20512%20512%22%3E%3Cg%20data-name%3D%22Layer%202%22%3E%3Cpath%20d%3D%22M130.9%20366.9a9.9%209.9%200%200%200-2.9%207.1%2010.33%2010.33%200%200%200%202.9%207.1%209.73%209.73%200%200%200%207.1%202.9%2010.33%2010.33%200%200%200%207.1-2.9%209.73%209.73%200%200%200%202.9-7.1%2010.52%2010.52%200%200%200-2.9-7.1%209.9%209.9%200%200%200-7.1-2.9%2010.33%2010.33%200%200%200-7.1%202.9zM483.7%20282a183.07%20183.07%200%200%200%2028.3-98C512%2082.5%20429.5%200%20328%200a183.16%20183.16%200%200%200-96%2027%2010%2010%200%200%200%2010.5%2017.1A162.67%20162.67%200%200%201%20328%2020c90.4%200%20164%2073.6%20164%20164a162.73%20162.73%200%200%201-27.9%2091.5%2010.07%2010.07%200%200%200%20.3%2011.6l11%2040.9-44-11.8a10%2010%200%200%200-8.4%201.5%20164.32%20164.32%200%200%201-151.8%2020.2%20138.68%20138.68%200%200%200-97.1-97.1%20164.31%20164.31%200%200%201%2014.5-143.2%2010%2010%200%200%200-17-10.6%20184%20184%200%200%200-19.9%20149.6c-4.5-.4-9.1-.7-13.7-.7C61.9%20236%200%20297.9%200%20374a136.88%20136.88%200%200%200%2022.9%2076.1L12.2%20490a10%2010%200%200%200%2012.3%2012.3l40.9-11a137.71%20137.71%200%200%200%20146.5-.8%2010%2010%200%200%200-10.7-16.9%20118.09%20118.09%200%200%201-128.6-1.5%209.73%209.73%200%200%200-8.1-1.3L36%20478.5l7.4-27.7a10%2010%200%200%200-1.5-8.4%20117.95%20117.95%200%201%201%20207-28%2010%2010%200%200%200%2018.8%206.8%20137.72%20137.72%200%200%200%208.3-47.3%20124.44%20124.44%200%200%200-.7-13.7%20183.93%20183.93%200%200%200%20155.3-23.6l56.2%2015.1a10%2010%200%200%200%2012.3-12.3zm-246%20162.2a10.52%2010.52%200%200%200-7.1%202.9%209.73%209.73%200%200%200-2.9%207.1%2010.33%2010.33%200%200%200%202.9%207.1%209.73%209.73%200%200%200%207.1%202.9%2010.52%2010.52%200%200%200%207.1-2.9%209.73%209.73%200%200%200%202.9-7.1%209.9%209.9%200%200%200-10-10zM205.3%2070.7a10.52%2010.52%200%200%200%207.1-2.9%209.73%209.73%200%200%200%202.9-7.1%2010.14%2010.14%200%200%200-2.9-7.1%209.9%209.9%200%200%200-7.1-2.9%2010.52%2010.52%200%200%200-7.1%202.9%209.9%209.9%200%200%200-2.9%207.1%2010.52%2010.52%200%200%200%202.9%207.1%209.9%209.9%200%200%200%207.1%202.9zm-19.4%20296.2a9.9%209.9%200%200%200-2.9%207.1%2010.33%2010.33%200%200%200%202.9%207.1%209.73%209.73%200%200%200%207.1%202.9%2010.33%2010.33%200%200%200%207.1-2.9%209.73%209.73%200%200%200%202.9-7.1%2010.33%2010.33%200%200%200-2.9-7.1%209.9%209.9%200%200%200-7.1-2.9%2010.33%2010.33%200%200%200-7.1%202.9zm210.8-201.1a9.8%209.8%200%200%200%205.2-1.5l1.3-.8a9.92%209.92%200%200%200%203.3-13.7%2010.06%2010.06%200%200%200-13.8-3.3l-1.3.8a10%2010%200%200%200%205.3%2018.5zm-68.1%20107.4a58%2058%200%200%200%2057.9-57.9%207%207%200%200%200-7-7H277.7a7%207%200%200%200-7%207%2058%2058%200%200%200%2057.9%2057.9zm-43.5-50.9h87.1l-1%203.7a43.93%2043.93%200%200%201-85.2%200zm-25.8-56.5a9.8%209.8%200%200%200%205.2-1.5l1.3-.8a9.92%209.92%200%200%200%203.3-13.7%2010.06%2010.06%200%200%200-13.8-3.3l-1.3.8a10%2010%200%200%200%205.3%2018.5zM75.9%20366.9A9.9%209.9%200%200%200%2073%20374a10.33%2010.33%200%200%200%202.9%207.1A9.73%209.73%200%200%200%2083%20384a10.33%2010.33%200%200%200%207.1-2.9A9.73%209.73%200%200%200%2093%20374a10.33%2010.33%200%200%200-2.9-7.1A9.9%209.9%200%200%200%2083%20364a10.33%2010.33%200%200%200-7.1%202.9z%22%20fill%3D%22%234285f4%22%20data-name%3D%22Capa%201%22/%3E%3C/g%3E%3C/svg%3E') !important;\n border-radius: 0 !important;\n background-color: '@primary_color' !important;\n}\n#sbz92 .mobile .widget-container {\n border-radius: 0px !important;\n max-height: 100% !important;\n margin-bottom: 0 !important;\n top: auto !important;\n left: 0 !important;\n right: 0 !important;\n width: 100% !important;\n height: '@mobile_height' !important;\n opacity: 1 !important;\n transition: opacity 0.15s cubic-bezier(1, 0.5, 0.8, 1) !important;\n}\n#sbz92 .mobile .widget-container.widget-container--left {\n left: 0 !important;\n right: 0 !important;\n}\n#sbz92 .mobile .widget-container.widget-container--right {\n right: 0 !important;\n left: 0 !important;\n}\n#sbz92 .mobile .widget-container.widget-container--hide {\n top: -100vh !important;\n opacity: 0 !important;\n transition: opacity 0.15s cubic-bezier(1, 0.5, 0.8, 1), bottom 0.15s cubic-bezier(1, 0.5, 0.8, 1) !important;\n}\n#sbz92 .widget-container.widget-container--left {\n left: '@desktop_button.margin_x' !important;\n right: unset !important;\n}\n#sbz92 .widget-container.widget-container--right {\n right: '@desktop_button.margin_x' !important;\n left: unset !important;\n}\n#sbz92 .widget-container {\n max-height: 100% !important;\n max-height: '@desktop_widget_max_height' !important;\n max-width: 100% !important;\n background: #fff !important;\n z-index: '@z_index_3' !important;\n border-radius: 15px !important;\n box-shadow: 0 5px 25px 0 rgba(0, 0, 0, 0.13) !important;\n display: flex !important;\n flex-direction: column !important;\n align-items: center !important;\n position: '@widget_position' !important;\n margin-bottom: '@desktop_button.margin_y' !important;\n width: '@width' !important;\n height: '@height' !important;\n bottom: 0 !important;\n opacity: 1 !important;\n transform: translateY(0) !important;\n transition: transform 0.15s cubic-bezier(1, 0.5, 0.8, 1), opacity 0.2s cubic-bezier(1, 0.5, 0.8, 1), scale 0.15s ease !important;\n visibility: visible !important;\n overflow: hidden !important;\n}\n#sbz92 .widget-container.widget-container--full {\n max-height: 100% !important;\n height: 100% !important;\n margin-bottom: 0 !important;\n}\n#sbz92 .widget-container.widget-container--hide {\n opacity: 0 !important;\n transform: translateY(20px) !important;\n visibility: hidden !important;\n transition: transform 0.15s cubic-bezier(1, 0.5, 0.8, 1), opacity 0.1s cubic-bezier(1, 0.5, 0.8, 1), visibility 0.1s cubic-bezier(1, 0.5, 0.8, 1) !important;\n}\n#sbz92 .btn--start-convo {\n border-radius: 7px !important;\n flex-shrink: 0 !important;\n display: flex !important;\n align-items: center !important;\n justify-content: center !important;\n padding-left: 32px !important;\n padding-right: 32px !important;\n height: 42px !important;\n color: '@text_color' !important;\n -webkit-text-fill-color: '@text_color' !important;\n font-size: 16px !important;\n font-weight: 500 !important;\n line-height: 20px !important;\n text-align: center !important;\n background: '@primary_color' !important;\n width: 100% !important;\n text-overflow: ellipsis !important;\n white-space: nowrap !important;\n overflow: hidden !important;\n transition: filter 250ms ease !important;\n}\n#sbz92 .btn--start-convo::after {\n display: none !important;\n}\n#sbz92 .btn--start-convo:hover {\n filter: brightness(1.1) !important;\n}\n#sbz92 .btn--start-convo:disabled {\n opacity: 0.5 !important;\n cursor: default !important;\n pointer-events: none !important;\n}\n#sbz92 .widget-body.widget-body--none {\n display: none !important;\n}\n#sbz92 .widget-body {\n flex: 1 !important;\n flex-grow: 1 !important;\n z-index: -1 !important;\n width: 100% !important;\n overflow-y: auto !important;\n flex-direction: column !important;\n display: flex !important;\n position: relative !important;\n}\n#sbz92 .embed-chat .widget-body--events {\n width: 600px !important;\n margin: 0 auto !important;\n max-width: 100% !important;\n}\n#sbz92 .embed-chat .message-input {\n max-width: 600px !important;\n margin: 20px auto !important;\n}\n#sbz92 .embed-chat .widget-header--inner {\n max-width: 100% !important;\n width: 600px !important;\n}\n#sbz92 .embed-chat .widget-body--content {\n width: 600px !important;\n margin: 0 auto !important;\n max-width: 100% !important;\n}\n#sbz92 .embed-chat .convo-list {\n width: 600px !important;\n margin: 0 auto !important;\n max-width: 100% !important;\n}\n#sbz92 .widget-body--content {\n overflow-y: auto !important;\n overflow-x: hidden !important;\n flex: 1 !important;\n display: flex !important;\n flex-direction: column !important;\n position: relative !important;\n min-height: 0 !important;\n}\n#sbz92 .poweredby {\n margin-bottom: 15px !important;\n text-align: center !important;\n}\n#sbz92 .poweredby .poweredby--text {\n text-decoration: none !important;\n font-size: 13px !important;\n color: #7c7c7c !important;\n -webkit-text-fill-color: #7c7c7c !important;\n vertical-align: baseline !important;\n}\n#sbz92 .poweredby .poweredby--text .poweredby--subiz-logo {\n opacity: 0.7 !important;\n margin-top: -1px !important;\n height: 12px !important;\n}\n#sbz92 .poweredby .poweredby--text:hover {\n color: #333 !important;\n -webkit-text-fill-color: #333 !important;\n}\n#sbz92 .poweredby .poweredby--text:hover .poweredby--subiz-logo {\n opacity: 1 !important;\n}\n#sbz92 .empty-container {\n display: flex !important;\n justify-content: center !important;\n flex-direction: column !important;\n margin-top: 30px !important;\n margin-bottom: 30px !important;\n}\n#sbz92 .empty-desc {\n text-align: center !important;\n margin: 30px !important;\n color: #6c757d !important;\n -webkit-text-fill-color: #6c757d !important;\n}\n#sbz92 .chat-button--white-bg {\n display: none !important;\n z-index: -1 !important;\n}\n#sbz92 .chat-button--white-bg--mask-only {\n background: white !important;\n width: 66px !important;\n height: 66px !important;\n top: 2px !important;\n left: 2px !important;\n position: absolute !important;\n border-radius: 50% !important;\n display: block !important;\n}\n#sbz92 .mobile .chat-button--default {\n width: '@mobile_button.width' !important;\n height: '@mobile_button.height' !important;\n background: '@background' !important;\n border-radius: '@mobile_button.border_radius' !important;\n}\n#sbz92 .mobile .widget-layout {\n bottom: '@mobile_button.margin_y' !important;\n}\n#sbz92 .mobile .widget-layout.widget-layout--left {\n left: '@mobile_button.margin_x' !important;\n right: unset !important;\n}\n#sbz92 .mobile .widget-layout.widget-layout--right {\n right: '@mobile_button.margin_x' !important;\n left: unset !important;\n}\n#sbz92 .mobile .chat-button--img {\n min-width: '@mobile_button.width' !important;\n}\n#sbz92 .chat-button {\n cursor: pointer !important;\n position: relative !important;\n scale: 1 !important;\n transition: filter 250ms ease, opacity 0.15s ease-in, scale 0.125s ease-in-out, transform 0.2s ease-in-out !important;\n}\n#sbz92 .chat-button.hidden {\n opacity: 0 !important;\n}\n#sbz92 .chat-button:hover {\n filter: brightness(1.1) !important;\n scale: 1.05 !important;\n}\n#sbz92 .chat-button--img {\n opacity: 0 !important;\n min-width: '@desktop_button.width' !important;\n display: block !important;\n}\n#sbz92 .chat-button.chat-button--left {\n float: left !important;\n}\n#sbz92 .chat-button.chat-button--right {\n float: right !important;\n}\n#sbz92 .widget-layout {\n z-index: '@z_index_2' !important;\n position: '@widget_position' !important;\n bottom: '@desktop_button.margin_y' !important;\n transition: opacity 150ms !important;\n opacity: 1 !important;\n}\n#sbz92 .widget-layout.widget-layout--hidden {\n opacity: 0 !important;\n pointer-events: none !important;\n}\n#sbz92 .widget-layout.widget-layout--left {\n left: '@desktop_button.margin_x' !important;\n right: unset !important;\n}\n#sbz92 .widget-layout.widget-layout--right {\n right: '@desktop_button.margin_x' !important;\n left: unset !important;\n}\n#sbz92 .chat-button--unread {\n position: absolute !important;\n right: 0px !important;\n top: -5px !important;\n background: #dc3545 !important;\n padding-left: 5px !important;\n padding-right: 5px !important;\n padding-top: 2px !important;\n padding-bottom: 2px !important;\n border-radius: 5px !important;\n color: #fff !important;\n -webkit-text-fill-color: #fff !important;\n box-shadow: 0px 5px 30px rgba(0, 0, 0, 0.15) !important;\n}\n#sbz92 .widget-preview {\n z-index: '@z_index_3' !important;\n background: #fff !important;\n box-shadow: 0px 5px 30px rgba(0, 0, 0, 0.15) !important;\n border-radius: 15px !important;\n max-width: 100% !important;\n width: 340px !important;\n margin-bottom: 20px !important;\n}\n#sbz92 .widget-preview.widget-preview--hidden {\n display: none !important;\n}\n#sbz92 .widget-preview--btn-close {\n cursor: pointer !important;\n opacity: 0.5 !important;\n align-self: flex-start !important;\n background-color: #e5e5e5 !important;\n background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9IiMzMzMiIHN0cm9rZS13aWR0aD0iMi4yIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJmZWF0aGVyIGZlYXRoZXIteCI+PGxpbmUgeDE9IjE4IiB5MT0iNiIgeDI9IjYiIHkyPSIxOCI+PC9saW5lPjxsaW5lIHgxPSI2IiB5MT0iNiIgeDI9IjE4IiB5Mj0iMTgiPjwvbGluZT48L3N2Zz4K') !important;\n background-size: 16px 16px !important;\n background-repeat: no-repeat !important;\n background-position: center !important;\n width: 24px !important;\n height: 24px !important;\n display: block !important;\n border-radius: 100% !important;\n transition: background-color 0.2s !important;\n}\n#sbz92 .widget-preview--btn-close:hover {\n opacity: 1 !important;\n}\n#sbz92 .widget-preview--avatar {\n width: 45px !important;\n height: 45px !important;\n border: 1px solid rgba(31, 54, 90, 0.1) !important;\n border-radius: 100% !important;\n margin-right: 15px !important;\n}\n#sbz92 .widget-preview--body {\n display: flex !important;\n padding: 15px !important;\n}\n#sbz92 .widget-preview--title {\n display: block !important;\n font-size: 15px !important;\n color: black !important;\n -webkit-text-fill-color: black !important;\n margin-bottom: 5px !important;\n opacity: 0.7 !important;\n}\n#sbz92 .widget-preview--content {\n cursor: pointer !important;\n flex: 1 !important;\n overflow: hidden !important;\n}\n#sbz92 .widget-preview--message {\n white-space: pre-wrap !important;\n word-wrap: break-word !important;\n font-weight: 500 !important;\n font-size: 16px !important;\n display: block !important;\n margin: 0 !important;\n margin-bottom: 0px !important;\n max-height: 78px !important;\n overflow: hidden !important;\n}\n#sbz92 .widget-preview--action {\n border-top: 1px solid #f0f0f0 !important;\n cursor: pointer !important;\n padding: 13px !important;\n}\n#sbz92 .widget-preview--action-text {\n display: block !important;\n text-align: center !important;\n font-weight: 500 !important;\n font-size: 16px !important;\n color: '@primary_color' !important;\n -webkit-text-fill-color: '@primary_color' !important;\n margin: 0 !important;\n}\n#sbz92 .widget-internet-status {\n position: absolute !important;\n bottom: 0 !important;\n left: 0 !important;\n width: 100% !important;\n font-size: 14px !important;\n z-index: 10 !important;\n text-align: center !important;\n padding: 6px 5px !important;\n}\n#sbz92 .widget-internet-status.negative {\n background-color: #212325 !important;\n color: #fff !important;\n}\n#sbz92 .widget-internet-status.positive {\n background-color: #19b600 !important;\n color: #fff !important;\n}\n#sbz92 .widget-preview-text-message--header {\n display: flex !important;\n overflow: hidden !important;\n align-items: center !important;\n width: 100% !important;\n}\n#sbz92 .widget-preview-text-message--header .widget-preview--avatar {\n width: 24px !important;\n height: 24px !important;\n flex-shrink: 0 !important;\n margin-right: 10px !important;\n}\n#sbz92 .widget-preview-text-message--author {\n flex: 1 !important;\n overflow: hidden !important;\n display: flex !important;\n align-items: center !important;\n}\n#sbz92 .widget-preview-text-message--author .badge {\n margin-left: 10px !important;\n}\n#sbz92 .widget-preview-text-message--author-text {\n text-overflow: ellipsis !important;\n white-space: nowrap !important;\n overflow: hidden !important;\n line-height: 1.5 !important;\n color: '@secondary_color' !important;\n -webkit-text-fill-color: '@secondary_color' !important;\n}\n#sbz92 .widget-preview-text-message--content {\n margin-top: 10px !important;\n white-space: pre-wrap !important;\n}\n#sbz92 .widget-preview-quick-reply-wrapper {\n z-index: '@z_index_3' !important;\n width: 100% !important;\n margin-bottom: 15px !important;\n display: flex !important;\n flex-direction: column !important;\n align-items: flex-start !important;\n}\n#sbz92 .widget-preview-quick-reply-wrapper.right {\n align-items: flex-end !important;\n}\n#sbz92 .widget-preview-quick-reply-wrapper.horizontal {\n flex-direction: row !important;\n flex-wrap: wrap !important;\n align-items: center !important;\n gap: 10px !important;\n}\n#sbz92 .widget-preview-quick-reply-wrapper.horizontal.right {\n justify-content: flex-end !important;\n}\n#sbz92 .widget-preview-quick-reply-wrapper.horizontal.left {\n justify-content: flex-start !important;\n}\n#sbz92 .widget-preview-quick-reply-wrapper.horizontal .widget-preview-quick-reply-item {\n margin: 0 !important;\n max-width: 200px !important;\n overflow: hidden !important;\n text-overflow: ellipsis !important;\n white-space: nowrap !important;\n padding: 6px 15px !important;\n}\n#sbz92 .widget-preview-quick-reply-wrapper.horizontal .widget-preview-quick-reply-item:last-child {\n margin-bottom: 0 !important;\n}\n#sbz92 .widget-preview-quick-reply-item {\n border-radius: 20px !important;\n padding: 8px 20px !important;\n background: #fff !important;\n border: 1.5px solid !important;\n border-color: '@primary_color' !important;\n color: '@primary_color' !important;\n -webkit-text-fill-color: '@primary_color' !important;\n margin-bottom: 15px !important;\n cursor: pointer !important;\n transition: 0.3s ease !important;\n position: relative !important;\n}\n#sbz92 .widget-preview-quick-reply-item:last-child {\n margin-bottom: 0 !important;\n}\n#sbz92 .widget-preview-quick-reply-item:hover {\n color: #fff !important;\n -webkit-text-fill-color: #fff !important;\n background-color: '@primary_color' !important;\n}\n#sbz92 .widget-preview-image-wrapper {\n z-index: '@z_index_3' !important;\n width: 100% !important;\n margin-bottom: 15px !important;\n display: flex !important;\n flex-direction: column !important;\n align-items: flex-start !important;\n}\n#sbz92 .widget-preview-image-wrapper.right {\n align-items: flex-end !important;\n}\n#sbz92 .widget-preview-image-item {\n max-width: 300px !important;\n border-radius: 15px !important;\n box-shadow: 0px 5px 30px rgba(0, 0, 0, 0.15) !important;\n border: 1px solid #dee2e6 !important;\n overflow: hidden !important;\n cursor: pointer !important;\n}\n#sbz92 .widget-preview-image-item img {\n width: 100% !important;\n max-height: 300px !important;\n object-fit: cover !important;\n}\n#sbz92 .widget-preview-text-message {\n z-index: '@z_index_3' !important;\n background: #fff !important;\n box-shadow: 0px 5px 30px rgba(0, 0, 0, 0.15) !important;\n border: 1px solid #dee2e6 !important;\n border-radius: 15px !important;\n max-width: 100% !important;\n min-width: 210px !important;\n margin-bottom: 15px !important;\n padding: 15px 20px !important;\n positive: relative !important;\n cursor: pointer !important;\n}\n#sbz92 .widget-preview-text-message.right {\n border-bottom-right-radius: 8px !important;\n}\n#sbz92 .widget-preview-text-message.left {\n border-bottom-left-radius: 8px !important;\n}\n#sbz92 .widget-preview-new-wrapper {\n max-width: '@preview_max_width' !important;\n position: relative !important;\n opacity: 1 !important;\n transition: opacity 0.15s ease-in, transform 0.15s ease-in !important;\n transform: translateY(0) !important;\n}\n#sbz92 .widget-preview-new-wrapper.hidden {\n transform: translateY(20px) !important;\n transition: opacity 0.15s ease-out, transform 0.15s ease-out !important;\n opacity: 0 !important;\n}\n#sbz92 .widget-preview-new-wrapper:hover .widget-preview-x-wrapper {\n display: flex !important;\n}\n#sbz92 .widget-preview-x-wrapper {\n display: none !important;\n justify-content: flex-start !important;\n width: calc(100% + 40px) !important;\n position: absolute !important;\n padding: 15px 20px !important;\n left: -20px !important;\n bottom: 100% !important;\n}\n#sbz92 .widget-preview-x-wrapper.mobile {\n display: flex !important;\n}\n#sbz92 .widget-preview-x-wrapper.right {\n justify-content: flex-end !important;\n left: unset !important;\n right: -20px !important;\n}\n#sbz92 .widget-preview-x-wrapper .widget-preview--btn-close {\n opacity: 1 !important;\n width: 32px !important;\n height: 32px !important;\n border: 1px solid #ececec !important;\n box-shadow: 0px 5px 30px rgba(0, 0, 0, 0.15) !important;\n background-color: #00000040 !important;\n background-size: 16px 16px !important;\n background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9IiNlY2VjZWMiIHN0cm9rZS13aWR0aD0iMi4yIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJmZWF0aGVyIGZlYXRoZXIteCI+PGxpbmUgeDE9IjE4IiB5MT0iNiIgeDI9IjYiIHkyPSIxOCI+PC9saW5lPjxsaW5lIHgxPSI2IiB5MT0iNiIgeDI9IjE4IiB5Mj0iMTgiPjwvbGluZT48L3N2Zz4K') !important;\n}\n#sbz92 .widget-preview-x-wrapper .widget-preview--btn-close:hover {\n border-color: #fff !important;\n background-color: #00000066 !important;\n background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9IiNmZmYiIHN0cm9rZS13aWR0aD0iMi4yIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJmZWF0aGVyIGZlYXRoZXIteCI+PGxpbmUgeDE9IjE4IiB5MT0iNiIgeDI9IjYiIHkyPSIxOCI+PC9saW5lPjxsaW5lIHgxPSI2IiB5MT0iNiIgeDI9IjE4IiB5Mj0iMTgiPjwvbGluZT48L3N2Zz4K') !important;\n}\n#sbz92 .rating--overlay {\n position: absolute !important;\n height: 100% !important;\n width: 100% !important;\n background: black !important;\n opacity: 0.3 !important;\n top: 0 !important;\n left: 0 !important;\n border-bottom-left-radius: 15px !important;\n border-bottom-right-radius: 15px !important;\n z-index: 9 !important;\n}\n#sbz92 .rating {\n border-top-left-radius: 10px !important;\n border-top-right-radius: 10px !important;\n overflow: hidden !important;\n position: absolute !important;\n height: 400px !important;\n max-height: 80% !important;\n width: 100% !important;\n bottom: 0 !important;\n /* centering */\n left: 0 !important;\n background: white !important;\n border-bottom-left-radius: 15px !important;\n border-bottom-right-radius: 15px !important;\n z-index: 10 !important;\n}\n#sbz92 .rating .rating--comment {\n color: #000 !important;\n -webkit-text-fill-color: #000 !important;\n resize: none !important;\n margin-left: 20px !important;\n margin-right: 20px !important;\n border: 2px solid lightgray !important;\n border-radius: 5px !important;\n padding: 10px !important;\n height: 60px !important;\n min-height: 60px !important;\n}\n#sbz92 .rating .rating--close-btn {\n right: 20px !important;\n top: -2px !important;\n width: 22px !important;\n height: 22px !important;\n position: absolute !important;\n background-image: url('data:image/svg+xml,%3C?xml%20version%3D%221.0%22%20?%3E%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23acacac%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20class%3D%22feather%20feather-x%22%3E%3Cline%20x1%3D%2218%22%20y1%3D%226%22%20x2%3D%226%22%20y2%3D%2218%22%3E%3C/line%3E%3Cline%20x1%3D%226%22%20y1%3D%226%22%20x2%3D%2218%22%20y2%3D%2218%22%3E%3C/line%3E%3C/svg%3E') !important;\n cursor: pointer !important;\n}\n#sbz92 .rating .rating--close-btn:hover {\n background-image: url('data:image/svg+xml,%3C?xml%20version%3D%221.0%22%20?%3E%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23a0a0a0%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20class%3D%22feather%20feather-x%22%3E%3Cline%20x1%3D%2218%22%20y1%3D%226%22%20x2%3D%226%22%20y2%3D%2218%22%3E%3C/line%3E%3Cline%20x1%3D%226%22%20y1%3D%226%22%20x2%3D%2218%22%20y2%3D%2218%22%3E%3C/line%3E%3C/svg%3E') !important;\n}\n#sbz92 .rating .rating--handle:hover .rating--thumb {\n background: #e0e0e0 !important;\n}\n#sbz92 .rating .rating--thumb {\n width: 70px !important;\n height: 6px !important;\n background: #eaeaea !important;\n border-radius: 5px !important;\n margin: 0 auto !important;\n cursor: grabbing !important;\n margin-top: 8px !important;\n margin-bottom: 20px !important;\n}\n#sbz92 .rating .rating--content {\n display: flex !important;\n flex: 1 !important;\n flex-grow: 1 !important;\n height: calc(100% - 40px) !important;\n flex-direction: column !important;\n justify-content: space-between !important;\n}\n#sbz92 .rating .rating--heading {\n margin: 0 !important;\n font-weight: 500 !important;\n font-size: 20px !important;\n line-height: 20px !important;\n text-align: center !important;\n flex-grow: 1 !important;\n position: relative !important;\n}\n#sbz92 .rating .rating--description {\n text-align: center !important;\n flex-grow: 1 !important;\n font-size: 15px !important;\n padding-left: 20px !important;\n padding-right: 20px !important;\n display: flex !important;\n align-items: center !important;\n margin-top: 10px !important;\n margin-bottom: 15px !important;\n}\n#sbz92 .rating .rating-faces-container {\n flex: 5 !important;\n display: flex !important;\n justify-content: space-around !important;\n align-items: center !important;\n margin: 10px 10px !important;\n}\n#sbz92 .rating .rating-face-container {\n padding: 15px !important;\n display: flex !important;\n flex-direction: column !important;\n align-items: center !important;\n cursor: pointer !important;\n border-radius: 10px !important;\n user-select: none !important;\n -webkit-transition: all 0.1s !important;\n transition: all 0.1s !important;\n}\n#sbz92 .rating .rating-face-container:hover {\n box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.1) !important;\n}\n#sbz92 .rating .rating-face--text {\n margin-top: 10px !important;\n margin-bottom: 0px !important;\n font-size: 13px !important;\n color: #4d4d4d !important;\n -webkit-text-fill-color: #4d4d4d !important;\n}\n#sbz92 .rating .rating-no-thanks {\n flex: 10 !important;\n text-align: center !important;\n cursor: pointer !important;\n display: flex !important;\n justify-content: center !important;\n align-items: flex-end !important;\n color: #acacac !important;\n -webkit-text-fill-color: #acacac !important;\n}\n#sbz92 .rating .rating-no-thanks:hover {\n color: black !important;\n -webkit-text-fill-color: black !important;\n}\n#sbz92 .text__danger {\n color: #dc3545 !important;\n}\n#sbz92 .extension--close-btn {\n background: #00000088 !important;\n border-radius: 8px !important;\n color: #ffffffaa !important;\n -webkit-text-fill-color: #ffffffaa !important;\n right: 10px !important;\n top: -35px !important;\n font-size: 14px !important;\n position: absolute !important;\n padding: 5px 15px !important;\n cursor: pointer !important;\n}\n#sbz92 .extension--close-btn:hover {\n background: #000000 !important;\n color: #ffffff !important;\n -webkit-text-fill-color: #ffffff !important;\n}\n#sbz92 .extension--handle {\n margin-bottom: 10px !important;\n}\n#sbz92 .extension--handle:hover .extension--thumb {\n background: #e0e0e0 !important;\n}\n#sbz92 .extension--thumb {\n width: 70px !important;\n cursor: grabbing !important;\n margin: 0 auto !important;\n height: 6px !important;\n background: #eaeaea !important;\n border-radius: 5px !important;\n flex: 1 !important;\n margin-top: 5px !important;\n}\n#sbz92 .extension {\n border-top-left-radius: 10px !important;\n position: absolute !important;\n border-top-right-radius: 10px !important;\n width: 100% !important;\n bottom: 0 !important;\n /* centering */\n left: 0 !important;\n border-bottom-left-radius: 15px !important;\n border-bottom-right-radius: 15px !important;\n display: flex !important;\n flex-direction: column !important;\n background: white !important;\n z-index: 10 !important;\n}\n#sbz92 .extension--overlay {\n position: absolute !important;\n height: 100% !important;\n width: 100% !important;\n background: black !important;\n opacity: 0.3 !important;\n top: 0 !important;\n left: 0 !important;\n border-bottom-left-radius: 15px !important;\n border-bottom-right-radius: 15px !important;\n z-index: 9 !important;\n}\n#sbz92 .order__footer {\n margin-top: 40px !important;\n color: #888 !important;\n -webkit-text-fill-color: #888 !important;\n display: flex !important;\n align-items: center !important;\n justify-content: center !important;\n margin-bottom: 20px !important;\n}\n#sbz92 .order__footer_delimiter {\n width: 1px !important;\n height: 15px !important;\n border-right: 1px solid #bbb !important;\n}\n#sbz92 .order__footer_link {\n padding: 0 10px !important;\n font-size: 14px !important;\n cursor: pointer !important;\n}\n#sbz92 .order__footer_link:hover {\n text-decoration: none !important;\n color: #555 !important;\n -webkit-text-fill-color: #555 !important;\n}\n#sbz92 .desktop.order {\n border-radius: 0 !important;\n width: 780px !important;\n margin: 0 auto !important;\n height: 100% !important;\n}\n#sbz92 .desktop.order .order_section__line {\n display: none !important;\n}\n#sbz92 .desktop.order .desktop_order__heading {\n line-height: 20px !important;\n}\n#sbz92 .desktop.order .order_attachment__product_img {\n width: 50px !important;\n height: 50px !important;\n}\n#sbz92 .desktop.order .order_label {\n font-weight: 500 !important;\n margin-top: 30px !important;\n margin-bottom: 10px !important;\n font-size: 16px !important;\n}\n#sbz92 .desktop.order .order_label:first-child {\n margin-top: 0 !important;\n}\n#sbz92 .desktop.order .order_recap {\n margin-top: 0px !important;\n background: #f4f4f4 !important;\n margin-top: 20px !important;\n width: 270px !important;\n box-shadow: 0 0 0 1px hsla(0, 0%, 69%, 0.2), 0 15px 35px 0 rgba(49, 49, 93, 0.08), 0 5px 15px 0 rgba(0, 0, 0, 0.06) !important;\n border-radius: 6px !important;\n background-color: #fff !important;\n padding: 32px 32px 20px !important;\n}\n#sbz92 .desktop.order .order_acc_header {\n display: flex !important;\n align-items: center !important;\n margin-top: 20px !important;\n}\n#sbz92 .desktop.order .order_acc_logo {\n height: 50px !important;\n}\n#sbz92 .desktop.order .order_acc_name {\n font-size: 16px !important;\n margin-left: 10px !important;\n border-left: 1px solid #aaa !important;\n padding-left: 10px !important;\n}\n#sbz92 .desktop.order .order_summary_line {\n align-items: center !important;\n overflow: hidden !important;\n padding: 5px 0 !important;\n display: flex !important;\n justify-content: space-between !important;\n}\n#sbz92 .desktop_order__content {\n display: flex !important;\n}\n#sbz92 .order {\n width: 100% !important;\n display: flex !important;\n flex-direction: column !important;\n background: white !important;\n z-index: 10 !important;\n}\n#sbz92 .order .ship_card {\n display: flex !important;\n align-items: center !important;\n overflow: hidden !important;\n width: 190px !important;\n cursor: pointer !important;\n padding: 10px 15px !important;\n box-shadow: none !important;\n border: 2px solid #eee !important;\n color: #777 !important;\n -webkit-text-fill-color: #777 !important;\n margin-top: 5px !important;\n border-radius: 8px !important;\n background: white !important;\n transition: all 150ms ease-out !important;\n}\n#sbz92 .order .ship_card:hover {\n color: #555 !important;\n -webkit-text-fill-color: #555 !important;\n border: 2px solid #aaa !important;\n}\n#sbz92 .order .ship_card.ship_card__active {\n color: #333 !important;\n -webkit-text-fill-color: #333 !important;\n border: 2px solid #777 !important;\n background: #fafafa !important;\n}\n#sbz92 .order .order_ship_icon {\n margin-top: -3px !important;\n width: 15px !important;\n height: 15px !important;\n opacity: 0.6 !important;\n}\n#sbz92 .order .card_section {\n margin-top: 20px !important;\n max-width: 500px !important;\n box-shadow: 0 0 0 1px hsla(0, 0%, 69%, 0.2), 0 15px 35px 0 rgba(49, 49, 93, 0.08), 0 5px 15px 0 rgba(0, 0, 0, 0.06) !important;\n border-radius: 6px !important;\n background-color: #fff !important;\n padding: 32px !important;\n}\n#sbz92 .order input[type='text'].form-control,\n#sbz92 .order input[type='number'].form-control,\n#sbz92 .order input[type='date'].form-control,\n#sbz92 .order textarea.form-control,\n#sbz92 .order select.form-control {\n background: #f4f4f4 !important;\n border: 1px solid transparent !important;\n padding: 7px 10px !important;\n}\n#sbz92 .order input[type='text'].form-control:hover,\n#sbz92 .order input[type='number'].form-control:hover,\n#sbz92 .order input[type='date'].form-control:hover,\n#sbz92 .order textarea.form-control:hover,\n#sbz92 .order select.form-control:hover {\n background: #f0f0f0 !important;\n}\n#sbz92 .order input[type='text'].form-control:focus,\n#sbz92 .order input[type='number'].form-control:focus,\n#sbz92 .order input[type='date'].form-control:focus,\n#sbz92 .order textarea.form-control:focus,\n#sbz92 .order select.form-control:focus,\n#sbz92 .order input[type='text'].form-control:active,\n#sbz92 .order input[type='number'].form-control:active,\n#sbz92 .order input[type='date'].form-control:active,\n#sbz92 .order textarea.form-control:active,\n#sbz92 .order select.form-control:active {\n background: #eee !important;\n}\n#sbz92 .order input[type='text'].form-control.err,\n#sbz92 .order input[type='number'].form-control.err,\n#sbz92 .order input[type='date'].form-control.err,\n#sbz92 .order textarea.form-control.err,\n#sbz92 .order select.form-control.err {\n background: #ffe6e6 !important;\n border: 1px solid #ff8a8a !important;\n}\n#sbz92 .order .form {\n box-shadow: none !important;\n border: none !important;\n padding: 0 !important;\n}\n#sbz92 .order .form .radio {\n height: unset !important;\n}\n#sbz92 .order .order--content {\n display: flex !important;\n flex: 1 !important;\n flex-direction: column !important;\n}\n#sbz92 .order .order--content-content {\n flex: 1 !important;\n overflow: auto !important;\n}\n#sbz92 .order .order--heading {\n margin: 0 !important;\n margin-top: 20px !important;\n padding-left: 20px !important;\n padding-right: 20px !important;\n padding-bottom: 8px !important;\n line-height: 20px !important;\n position: relative !important;\n}\n#sbz92 .order .order--header-desc {\n color: #6c757d !important;\n -webkit-text-fill-color: #6c757d !important;\n font-size: 13px !important;\n}\n#sbz92 .order .order__product_line {\n display: flex !important;\n overflow: hidden !important;\n}\n#sbz92 .order .order--footer {\n text-align: k center !important;\n cursor: pointer !important;\n display: flex !important;\n justify-content: center !important;\n align-items: flex-end !important;\n color: #acacac !important;\n -webkit-text-fill-color: #acacac !important;\n}\n#sbz92 .order .order--footer:hover {\n color: black !important;\n -webkit-text-fill-color: black !important;\n}\n#sbz92 .order .order_section_label {\n color: #444 !important;\n -webkit-text-fill-color: #444 !important;\n margin-bottom: 5px !important;\n text-transform: uppercase !important;\n font-size: 13px !important;\n font-weight: 500 !important;\n}\n#sbz92 .order .order_label {\n color: #444 !important;\n -webkit-text-fill-color: #444 !important;\n margin-bottom: 5px !important;\n text-transform: uppercase !important;\n font-size: 13px !important;\n font-weight: 500 !important;\n}\n#sbz92 .order .order_section {\n padding-left: 20px !important;\n padding-right: 20px !important;\n padding-bottom: 15px !important;\n padding-top: 15px !important;\n}\n#sbz92 .order .order_section__line {\n border-top: 4px solid #eee !important;\n width: 100% !important;\n}\n#sbz92 .order .order_summary_line {\n overflow: hidden !important;\n padding: 3px 0 !important;\n display: flex !important;\n justify-content: space-between !important;\n}\n#sbz92 .order .order_btn {\n width: 100% !important;\n}\n#sbz92 .order .order_tracking_link {\n text-decoration: underline !important;\n cursor: pointer !important;\n}\n#sbz92 .order .order_tracking_link:hover {\n color: '@primary_color' !important;\n -webkit-text-fill-color: '@primary_color' !important;\n}\n#sbz92 .order .order_tracking_link_icon {\n margin-top: -3px !important;\n width: 15px !important;\n height: 15px !important;\n}\n#sbz92 .order .order_shipping_provider_logo {\n width: 32px !important;\n height: 32px !important;\n margin-right: 10px !important;\n}\n#sbz92 .order .order_btn.order__btn__light {\n background: #f0f0f0 !important;\n color: black !important;\n -webkit-text-fill-color: black !important;\n border-radius: 6px !important;\n text-align: center !important;\n padding: 8px !important;\n cursor: pointer !important;\n}\n#sbz92 .order .order_btn.order__btn__light:hover {\n color: black !important;\n -webkit-text-fill-color: black !important;\n background: #ddd !important;\n}\n#sbz92 div.order__card {\n display: flex !important;\n padding: 15px !important;\n box-shadow: none !important;\n border: 2px solid #eee !important;\n margin-top: 10px !important;\n border-radius: 8px !important;\n background: #fafafa !important;\n}\n#sbz92 div.order__card.order__card__active {\n border: 2px solid #777 !important;\n background: white !important;\n}\n#sbz92 .order_form_label {\n margin-top: 10px !important;\n margin-bottom: 4px !important;\n}\n#sbz92 .btn-confirm-order {\n width: 100% !important;\n background: '@primary_color' !important;\n display: flex !important;\n align-items: center !important;\n border-radius: 5px !important;\n color: #fff !important;\n -webkit-text-fill-color: #fff !important;\n padding: 15px 10px !important;\n cursor: pointer !important;\n justify-content: center !important;\n font-weight: 500 !important;\n margin-top: 10px !important;\n}\n#sbz92 .btn-confirm-order:hover {\n background: #0053d4 !important;\n}\n#sbz92 .order__total {\n font-weight: 500 !important;\n font-size: 20px !important;\n color: '@primary_color' !important;\n -webkit-text-fill-color: '@primary_color' !important;\n}\n#sbz92 .btn-cancel-order {\n color: #666 !important;\n -webkit-text-fill-color: #666 !important;\n text-decoration: underline !important;\n display: inline-block !important;\n margin-top: 10px !important;\n cursor: pointer !important;\n}\n#sbz92 .btn-cancel-order:hover {\n color: #333 !important;\n -webkit-text-fill-color: #333 !important;\n}\n#sbz92 .order_status {\n text-transform: uppercase !important;\n background: black !important;\n color: white !important;\n -webkit-text-fill-color: white !important;\n display: inline-block !important;\n border-radius: 4px !important;\n padding: 6px 6px 4px 6px !important;\n line-height: 1 !important;\n font-weight: 500 !important;\n font-size: 12px !important;\n}\n#sbz92 .order_status.order_status__canceled {\n background: whitesmoke !important;\n color: #000 !important;\n -webkit-text-fill-color: #000 !important;\n}\n#sbz92 .order_status.order_status__cancel {\n background: whitesmoke !important;\n color: #000 !important;\n -webkit-text-fill-color: #000 !important;\n}\n#sbz92 .order_status.order_status__confirmed {\n background: '@primary_color' !important;\n color: white !important;\n -webkit-text-fill-color: white !important;\n}\n#sbz92 .order_status.order_status__shipping {\n background: #000 !important;\n color: white !important;\n -webkit-text-fill-color: white !important;\n}\n#sbz92 .order_status.order_status__fullfilled {\n background: #28a745 !important;\n color: white !important;\n -webkit-text-fill-color: white !important;\n}\n#sbz92 .order_status.order_status__hold {\n background: #dc3545 !important;\n color: white !important;\n -webkit-text-fill-color: white !important;\n}\n#sbz92 .order_status.order_status__draft {\n background: #ffc107 !important;\n color: white !important;\n -webkit-text-fill-color: white !important;\n}\n#sbz92 .order_status.order_status__open {\n background: #ffc107 !important;\n color: white !important;\n -webkit-text-fill-color: white !important;\n}\n#sbz92 .order_error {\n display: flex !important;\n flex-direction: column !important;\n align-items: center !important;\n justify-content: center !important;\n height: 100% !important;\n width: 100% !important;\n}\n#sbz92 .order_attachment__note {\n font-size: 14px !important;\n white-space: pre-wrap !important;\n overflow: hidden !important;\n text-overflow: ellipsis !important;\n display: -webkit-box !important;\n -webkit-line-clamp: 3 !important;\n -webkit-box-orient: vertical !important;\n}\n#sbz92 .dropdown_select {\n position: absolute !important;\n background: white !important;\n -webkit-box-shadow: 0 4px 16px rgba(0, 0, 0, 0.1) !important;\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.1) !important;\n border-radius: 5px !important;\n width: 150px !important;\n z-index: 20 !important;\n overflow: hidden !important;\n}\n#sbz92 .dropdown_select__overlay {\n top: 0 !important;\n overflow: hidden !important;\n position: absolute !important;\n background: #000000aa !important;\n z-index: 19 !important;\n left: 0 !important;\n right: 0 !important;\n bottom: 0 !important;\n}\n#sbz92 .dropdown_select__item {\n padding: 7px 10px !important;\n cursor: pointer !important;\n}\n#sbz92 .dropdown_select__item:hover {\n background: '@primary_color' !important;\n color: #fff !important;\n -webkit-text-fill-color: #fff !important;\n}\n#sbz92 .dropdown_select_filter {\n padding: 8px 10px !important;\n border-bottom: 1px solid #eee !important;\n position: relative !important;\n}\n#sbz92 .dropdown_select_filter:hover .dropdown_select_filter__icon {\n opacity: 1 !important;\n}\n#sbz92 .dropdown_select_filter_input {\n border-radius: 5px !important;\n width: 100% !important;\n display: block !important;\n background: #f4f4f4 !important;\n border: none !important;\n padding: 7px 10px !important;\n padding-left: 35px !important;\n}\n#sbz92 .dropdown_select_filter_input:hover {\n background: #f0f0f0 !important;\n}\n#sbz92 .dropdown_select_filter_input:focus,\n#sbz92 .dropdown_select_filter_input:active {\n background: #eee !important;\n}\n#sbz92 .dropdown_select_input {\n border-radius: 5px !important;\n overflow: hidden !important;\n cursor: pointer !important;\n flex-wrap: nowrap !important;\n display: flex !important;\n background: #f4f4f4 !important;\n border: 1px solid trasparent !important;\n padding: 7px 10px !important;\n height: 32px !important;\n min-width: 120px !important;\n width: 100% !important;\n}\n#sbz92 .dropdown_select_input:hover {\n background: #f0f0f0 !important;\n}\n#sbz92 .dropdown_select_input:focus,\n#sbz92 .dropdown_select_input:active {\n background: #eee !important;\n}\n#sbz92 .dropdown_select_input.err {\n background: #ffe6e6 !important;\n border: 1px solid #ff8a8a !important;\n}\n#sbz92 .dropdown_select__items {\n max-height: 300px !important;\n min-height: 100px !important;\n overflow-x: hidden !important;\n overflow-y: auto !important;\n}\n#sbz92 .dropdown_select_filter__icon {\n width: 22px !important;\n height: 15px !important;\n position: absolute !important;\n z-index: 2 !important;\n top: 15px !important;\n left: 18px !important;\n border-right: 1px solid #aaa !important;\n padding-right: 7px !important;\n opacity: 0.5 !important;\n}\n#sbz92 .dropdown_select_filter__empty {\n display: flex !important;\n align-items: center !important;\n justify-content: center !important;\n flex-direction: column !important;\n}\n#sbz92 .dropdown_select_filter__empty_img {\n height: 50px !important;\n margin-top: 10px !important;\n margin-bottom: 10px !important;\n}\n#sbz92 .dropdown_select__caret {\n width: 14px !important;\n margin-top: 3px !important;\n opacity: 0.6 !important;\n height: 15px !important;\n}\ndiv#sbz92 {\n all: initial;\n}\nbody div#sbz92 {\n all: initial !important;\n}\n", ""]);
|
|
3761
|
+
___CSS_LOADER_EXPORT___.push([module.id, "#sbz92 * {\n all: unset !important;\n}\n.sbz_no_scroll {\n overflow: hidden !important;\n overflow-x: hidden !important;\n overflow-y: hidden !important;\n}\n#sbz92 {\n /* Handle on hover */\n /*\n.widget-header--button-close {\n\tdisplay: flex;\n\tborder-radius: 6px;\n\tjustify-self: flex-end;\n\talign-items: center;\n\talign-self: flex-start;\n\n\tfilter: brightness(0.95);\n\t&:hover {\n\t\topacity: 1;\n\t\tfilter: brightness(1.1);\n\t\tscale: 1.1;\n\t}\n}\n*/\n /*\n[data-tooltip]::after {\n\ttext-align: center;\n\tmin-width: 60px;\n\tmax-width: 350px;\n\n\ttransform: translate3d(0, 0, 0);\n\t-webkit-backface-visibility: hidden;\n\tbackface-visibility: hidden;\n\twill-change: transform;\n\topacity: 0;\n\tpointer-events: none;\n\ttransition: opacity @tooltip-transition-duration @tooltip-transition-easing @tooltip-transition-delay;\n\tposition: absolute;\n\tbox-sizing: border-box;\n\tz-index: @z-index + 2000;\n\ttransform-origin: top;\n\twhite-space: pre-wrap;\n\twidth: 100%;\n\n\tbackground: @black;\n\tborder-radius: 5px;\n\n\t.color(@white);\n\n\tcontent: attr(data-tooltip);\n\tfont-size: @tooltip-font-size;\n\tfont-weight: @tooltip-font-weight;\n\ttext-transform: @tooltip-text-transform;\n\tpadding: 0.5em;\n\tbox-sizing: content-box;\n}\n\n[data-tooltip]:hover::after,\n[data-tooltip]:focus::after {\n\topacity: 1;\n\tpointer-events: auto;\n}\n\n// ------------------------------------------------\n// [2] Position Modifiers\n// ------------------------------------------------\n\n[data-tooltip][data-tooltip-position|='top']::after {\n\tmargin-bottom: @tooltip-margin;\n\ttransform: translate3d(-50%, -5px, 0);\n\tbottom: 100%;\n\tleft: 50%;\n}\n\n// ------------------------------------------------\n// [2.1] Top Left\n// ------------------------------------------------\n[data-tooltip][data-tooltip-position='top-left']::after {\n\ttransform: translate3d(~'calc(-100% + 16px)', -5px, 0);\n\tbottom: 100%;\n}\n\n// ------------------------------------------------\n// [2.2] Top Right\n// ------------------------------------------------\n[data-tooltip][data-tooltip-position='top-right']::after {\n\ttransform: translate3d(~'calc(0% + -16px)', -5px, 0);\n\tbottom: 100%;\n}\n\n// ------------------------------------------------\n// [2.3] Bottom\n// ------------------------------------------------\n\n[data-tooltip][data-tooltip-position|='bottom']::after,\n[data-tooltip]:not([data-tooltip-position])::after {\n\ttransform: translate3d(-50%, 0, 0);\n\tmargin-top: @tooltip-margin;\n\tleft: 50%;\n\ttop: 100%;\n}\n\n// ------------------------------------------------\n// [2.4] Bottom Left\n// ------------------------------------------------\n[data-tooltip][data-tooltip-position='bottom-left']::after {\n\ttransform: translate3d(~'calc(-100% + 16px)', 0, 0);\n}\n\n// ------------------------------------------------\n// [2.5] Bottom Right\n// ------------------------------------------------\n[data-tooltip][data-tooltip-position='bottom-right']::after {\n\ttransform: translate3d(~'calc(0% + -16px)', 0, 0);\n}\n\n// ------------------------------------------------\n// [2.6] Left\n// ------------------------------------------------\n[data-tooltip][data-tooltip-position='left']::after {\n\tbottom: auto;\n\tleft: auto;\n\tright: 100%;\n\ttop: 50%;\n\ttransform: translate3d(0, -50%, 0);\n\tmargin-right: @tooltip-margin;\n}\n\n// ------------------------------------------------\n// [2.7] Right\n// ------------------------------------------------\n[data-tooltip][data-tooltip-position='right']::after {\n\tbottom: auto;\n\tleft: 100%;\n\ttop: 50%;\n\ttransform: translate3d(0, -50%, 0);\n\tmargin-left: @tooltip-margin;\n}\n\n*/\n}\n#sbz92 *,\n#sbz92 *::before,\n#sbz92 *::after {\n box-sizing: border-box !important;\n}\n#sbz92 [tabindex='-1']:focus:not(:focus-visible) {\n outline: 0 !important;\n}\n#sbz92 b,\n#sbz92 strong {\n font-weight: 500 !important;\n}\n#sbz92 a {\n color: #020202 !important;\n text-decoration: none !important;\n background-color: transparent !important;\n font-weight: 600 !important;\n}\n#sbz92 a:hover {\n cursor: pointer !important;\n color: #000000 !important;\n text-decoration: underline !important;\n}\n#sbz92 a:not([href]) {\n color: inherit !important;\n text-decoration: none !important;\n}\n#sbz92 a:not([href]):hover {\n color: inherit !important;\n text-decoration: none !important;\n}\n#sbz92 img {\n vertical-align: middle !important;\n border-style: none !important;\n}\n#sbz92 svg {\n overflow: hidden !important;\n vertical-align: middle !important;\n}\n#sbz92 label {\n display: inline-block !important;\n}\n#sbz92 button {\n border-radius: 0 !important;\n}\n#sbz92 button:focus {\n outline: 1px dotted !important;\n outline: 5px auto -webkit-focus-ring-color !important;\n}\n#sbz92 input,\n#sbz92 button,\n#sbz92 select,\n#sbz92 optgroup,\n#sbz92 textarea {\n margin: 0 !important;\n}\n#sbz92 button,\n#sbz92 input {\n overflow: visible !important;\n}\n#sbz92 button,\n#sbz92 select {\n text-transform: none !important;\n}\n#sbz92 select {\n word-wrap: normal !important;\n}\n#sbz92 button,\n#sbz92 [type=\"button\"],\n#sbz92 [type=\"reset\"],\n#sbz92 [type=\"submit\"] {\n -webkit-appearance: button !important;\n}\n#sbz92 button:not(:disabled),\n#sbz92 [type='button']:not(:disabled),\n#sbz92 [type='reset']:not(:disabled),\n#sbz92 [type='submit']:not(:disabled) {\n cursor: pointer !important;\n}\n#sbz92 button::-moz-focus-inner,\n#sbz92 [type='button']::-moz-focus-inner,\n#sbz92 [type='reset']::-moz-focus-inner,\n#sbz92 [type='submit']::-moz-focus-inner {\n padding: 0 !important;\n border-style: none !important;\n}\n#sbz92 input[type='radio'],\n#sbz92 input[type='checkbox'] {\n box-sizing: border-box !important;\n padding: 0 !important;\n}\n#sbz92 input[type='date'],\n#sbz92 input[type='time'],\n#sbz92 input[type='datetime-local'],\n#sbz92 input[type='month'] {\n -webkit-appearance: listbox !important;\n}\n#sbz92 textarea {\n overflow: auto !important;\n resize: vertical !important;\n}\n#sbz92 [type='number']::-webkit-inner-spin-button,\n#sbz92 [type='number']::-webkit-outer-spin-button {\n height: auto !important;\n}\n#sbz92 [hidden] {\n display: none !important;\n}\n#sbz92 ::-webkit-input-placeholder {\n /* Edge */\n color: #777 !important;\n}\n#sbz92 :-ms-input-placeholder {\n /* Internet Explorer 10-11 */\n color: #777 !important;\n}\n#sbz92 ::placeholder {\n color: #777 !important;\n}\n#sbz92 div {\n display: block !important;\n text-rendering: geometricPrecision !important;\n -webkit-font-smoothing: antialiased !important;\n -moz-osx-font-smoothing: grayscale !important;\n}\n#sbz92 ::-webkit-scrollbar {\n width: 7px !important;\n height: 7px !important;\n}\n#sbz92 ::-webkit-scrollbar-track {\n border-radius: 10px !important;\n}\n#sbz92 ::-webkit-scrollbar-thumb {\n border-radius: 10px !important;\n background: #d6d6d6 !important;\n}\n#sbz92 ::-webkit-scrollbar-thumb:hover {\n background: #aaa !important;\n}\n#sbz92 .badge {\n padding: 2px 8px !important;\n font-size: 12px !important;\n font-weight: 600 !important;\n border-radius: 6px !important;\n display: inline-flex !important;\n align-items: center !important;\n}\n#sbz92 .badge.badge--success {\n color: #28a745 !important;\n -webkit-text-fill-color: #28a745 !important;\n background: #28a74526 !important;\n}\n#sbz92 .dot {\n width: 8px !important;\n height: 8px !important;\n border-radius: 4px !important;\n flex-shrink: 0 !important;\n background: #000 !important;\n}\n#sbz92 .dot.dot--success {\n background: #28a745 !important;\n}\n#sbz92 * {\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0) !important;\n -webkit-tap-highlight-color: transparent !important;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Helvetica Neue', Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji' !important;\n font-size: 16px !important;\n -webkit-box-sizing: border-box !important;\n -moz-box-sizing: border-box !important;\n box-sizing: border-box !important;\n margin: 0 !important;\n padding: 0 !important;\n border: 0 !important;\n vertical-align: baseline !important;\n}\n#sbz92 button:focus {\n outline: none !important;\n}\n#sbz92 button:focus-visible {\n outline: 2px solid #6c757d !important;\n outline-offset: 3px !important;\n}\n#sbz92 button:not(:disabled) {\n cursor: pointer !important;\n}\n#sbz92 img {\n overflow: hidden !important;\n flex-shrink: 0 !important;\n background-repeat: no-repeat !important;\n background-position: center !important;\n background-size: 100% 100% !important;\n -webkit-user-select: none !important;\n -khtml-user-select: none !important;\n -moz-user-select: none !important;\n -o-user-select: none !important;\n user-select: none !important;\n -webkit-user-drag: none !important;\n}\n#sbz92 .pos-relative {\n position: relative !important;\n}\n#sbz92 .flex-row {\n flex-direction: row !important;\n}\n#sbz92 .flex-column {\n flex-direction: column !important;\n}\n#sbz92 .flex-grow-1 {\n flex-grow: 1 !important;\n}\n#sbz92 .align-self-end {\n align-self: flex-end !important;\n}\n#sbz92 .align-items-end {\n align-items: flex-end !important;\n}\n#sbz92 .justify-content-center {\n justify-content: center !important;\n}\n#sbz92 .h-full {\n height: 100% !important;\n}\n#sbz92 .w-full {\n width: 100% !important;\n}\n#sbz92 .text-muted {\n color: #6c757d !important;\n -webkit-text-fill-color: #6c757d !important;\n}\n#sbz92 .text-lg {\n font-size: 18px !important;\n}\n#sbz92 .text-xl {\n font-size: 20px !important;\n}\n#sbz92 .text-sm {\n font-size: 14px !important;\n}\n#sbz92 .text-center {\n text-align: center !important;\n}\n#sbz92 .text-danger {\n color: #ea3d2f !important;\n}\n#sbz92 .text-italic {\n font-style: italic !important;\n}\n#sbz92 .d-none {\n display: none !important;\n}\n#sbz92 .d-flex {\n display: flex !important;\n}\n#sbz92 .d-inline-block {\n display: inline-block !important;\n}\n#sbz92 .ml-1 {\n margin-left: 7.5px !important;\n}\n#sbz92 .pl-2 {\n padding-left: 15px !important;\n}\n#sbz92 .pr-2 {\n padding-right: 15px !important;\n}\n#sbz92 .pb-2 {\n padding-bottom: 15px !important;\n}\n#sbz92 .mt-1 {\n margin-top: 7.5px !important;\n}\n#sbz92 .mt-2 {\n margin-top: 15px !important;\n}\n#sbz92 .ml-2 {\n margin-left: 15px !important;\n}\n#sbz92 .mr-1 {\n margin-right: 7.5px !important;\n}\n#sbz92 .mr-2 {\n margin-right: 15px !important;\n}\n#sbz92 .pt-3 {\n padding-top: 22.5px !important;\n}\n#sbz92 .pl-3 {\n padding-left: 22.5px !important;\n}\n#sbz92 .pr-3 {\n padding-right: 22.5px !important;\n}\n#sbz92 .pb-3 {\n padding-bottom: 22.5px !important;\n}\n#sbz92 .mt-3 {\n margin-top: 22.5px !important;\n}\n#sbz92 .ml-3 {\n margin-left: 22.5px !important;\n}\n#sbz92 .mr-3 {\n margin-right: 22.5px !important;\n}\n#sbz92 .mb-3 {\n margin-bottom: 22.5px !important;\n}\n#sbz92 .mb-2 {\n margin-bottom: 15px !important;\n}\n#sbz92 .mb-1 {\n margin-bottom: 7.5px !important;\n}\n#sbz92 .muted {\n color: #6c757d !important;\n -webkit-text-fill-color: #6c757d !important;\n}\n#sbz92 .i {\n font-style: italic !important;\n}\n#sbz92 .align-items-center {\n align-items: center !important;\n}\n#sbz92 .text-truncate {\n text-overflow: ellipsis !important;\n white-space: nowrap !important;\n overflow: hidden !important;\n}\n#sbz92 .flex_1 {\n flex: 1 !important;\n flex-shrink: 0 !important;\n}\n#sbz92 .justify-content-between {\n justify-content: space-between !important;\n}\n#sbz92 .no-shrink {\n flex-shrink: 0 !important;\n}\n#sbz92 .loading {\n flex: 1 !important;\n align-items: center !important;\n justify-content: center !important;\n display: flex !important;\n flex-direction: column !important;\n background: white !important;\n}\n#sbz92 .avatar-container {\n text-align: center !important;\n}\n#sbz92 .avatar {\n position: relative !important;\n object-fit: cover !important;\n display: inline-block !important;\n}\n#sbz92 .group-avatar--primary .avatar {\n width: 40px !important;\n height: 40px !important;\n border-radius: 35px !important;\n}\n#sbz92 .group-avatar--secondary .avatar {\n position: relative !important;\n width: 35px !important;\n height: 35px !important;\n border-radius: 35px !important;\n}\n#sbz92 .avatar.avatar__account {\n width: 38px !important;\n height: 38px !important;\n border-radius: 38px !important;\n margin-right: 7.5px !important;\n}\n#sbz92 .group-avatar--primary .group-avatar--agent-middle {\n width: 50px !important;\n height: 50px !important;\n margin-left: -10px !important;\n z-index: 3 !important;\n position: relative !important;\n}\n#sbz92 .group-avatar--primary .group-avatar--agent-left {\n z-index: 2 !important;\n}\n#sbz92 .group-avatar--primary .group-avatar--agent-right {\n z-index: 2 !important;\n margin-left: -10px !important;\n}\n#sbz92 .group-avatar--secondary .group-avatar--agent-left {\n z-index: 3 !important;\n}\n#sbz92 .group-avatar--secondary .group-avatar--agent-middle {\n z-index: 2 !important;\n margin-left: -15px !important;\n}\n#sbz92 .group-avatar--secondary .group-avatar--agent-right {\n z-index: 1 !important;\n margin-left: -15px !important;\n}\n#sbz92 .widget-header {\n z-index: -1 !important;\n position: relative !important;\n transition: height 0.2s !important;\n border-radius: 15px 15px 0px 0px !important;\n background: '@background' !important;\n color: '@text_color' !important;\n -webkit-text-fill-color: '@text_color' !important;\n width: 100% !important;\n}\n#sbz92 .widget-header .widget-header--total-unread-convo {\n font-size: 13px !important;\n font-weight: 500 !important;\n background: #ef000d !important;\n display: flex !important;\n border-radius: 50% !important;\n justify-content: center !important;\n align-items: center !important;\n width: 20px !important;\n height: 20px !important;\n position: absolute !important;\n cursor: pointer !important;\n right: -8px !important;\n top: -4px !important;\n}\n#sbz92 .widget-header--collapsed {\n height: auto !important;\n}\n#sbz92 .widget-header--inner.widget-header--inner--collapsed {\n height: auto !important;\n padding: 15px 22.5px !important;\n position: relative !important;\n}\n#sbz92 .widget-header--inner.widget-header--inner--collapsed .widget-header--title {\n white-space: nowrap !important;\n overflow: hidden !important;\n font-weight: 500 !important;\n text-overflow: ellipsis !important;\n font-size: 16px !important;\n color: '@text_color' !important;\n -webkit-text-fill-color: '@text_color' !important;\n}\n#sbz92 .widget-header--inner.widget-header--inner--collapsed .widget-header--description {\n font-size: 14px !important;\n overflow: hidden !important;\n opacity: 0.7 !important;\n flex: 1 !important;\n color: '@text_color' !important;\n -webkit-text-fill-color: '@text_color' !important;\n margin-top: 2.5px !important;\n position: relative !important;\n line-height: 1.5 !important;\n}\n#sbz92 .mobile .widget-header {\n border-radius: 0px !important;\n}\n#sbz92 .widget-header--inner.widget-header--inner--expanded {\n height: 224px !important;\n padding: 15px 22.5px !important;\n}\n#sbz92 .widget-header--inner.widget-header--inner--expanded .widget-header--top-wrapper {\n display: flex !important;\n flex-direction: row !important;\n align-items: center !important;\n margin-bottom: 10px !important;\n}\n#sbz92 .widget-header--inner.widget-header--inner--expanded .widget-header--avatar-wrapper {\n display: flex !important;\n flex-direction: column !important;\n align-items: center !important;\n}\n#sbz92 .widget-header--inner.widget-header--inner--expanded .widget-header--title {\n white-space: nowrap !important;\n overflow: hidden !important;\n font-weight: 500 !important;\n text-overflow: ellipsis !important;\n flex: 1 !important;\n font-size: 16px !important;\n}\n#sbz92 .widget-header--inner.widget-header--inner--expanded .widget-header--description {\n position: relative !important;\n text-align: center !important;\n margin-top: 15px !important;\n white-space: pre-wrap !important;\n display: -webkit-box !important;\n -webkit-box-orient: vertical !important;\n -webkit-line-clamp: 2 !important;\n overflow: hidden !important;\n line-height: 1.5 !important;\n}\n#sbz92 .widget-header--convo-expanded {\n height: 224px !important;\n}\n#sbz92 .widget-header--inner {\n position: absolute !important;\n top: 0 !important;\n left: 50% !important;\n transform: translateX(-50%) !important;\n width: 100% !important;\n opacity: 1 !important;\n display: flex !important;\n}\n#sbz92 .widget-header--inner.widget-header--inner--hidden {\n opacity: 0 !important;\n transform: scale(0) !important;\n animation-duration: 0.05s !important;\n animation-name: hide !important;\n}\n#sbz92 .widget-header--title-container {\n min-width: 0 !important;\n flex: 1 !important;\n display: flex !important;\n flex-direction: column !important;\n z-index: 1 !important;\n}\n#sbz92 .widget-header--button-close {\n display: flex !important;\n border-radius: 6px !important;\n justify-self: flex-end !important;\n align-items: center !important;\n align-self: flex-start !important;\n opacity: 0.6 !important;\n transition: opacity 0.15s ease, scale 0.15s ease, filter 0.15s ease !important;\n filter: brightness(0.95) !important;\n}\n#sbz92 .widget-header--button-close:hover {\n opacity: 1 !important;\n filter: brightness(1.1) !important;\n scale: 1.1 !important;\n}\n#sbz92 .widget-header--button-close-icon {\n background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9IndoaXRlIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgY2xhc3M9ImZlYXRoZXIgZmVhdGhlci14Ij48bGluZSB4MT0iMTgiIHkxPSI2IiB4Mj0iNiIgeTI9IjE4Ij48L2xpbmU+PGxpbmUgeDE9IjYiIHkxPSI2IiB4Mj0iMTgiIHkyPSIxOCI+PC9saW5lPjwvc3ZnPgo=') !important;\n background-size: contain !important;\n background-repeat: no-repeat !important;\n background-position: center !important;\n width: 24px !important;\n height: 24px !important;\n display: block !important;\n cursor: pointer !important;\n}\n#sbz92 .widget-header--button-back {\n background-image: url('data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiAgd2lkdGg9IjI0IiAgaGVpZ2h0PSIyNCIgIHZpZXdCb3g9IjAgMCAyNCAyNCIgIGZpbGw9Im5vbmUiICBzdHJva2U9IndoaXRlIiAgc3Ryb2tlLXdpZHRoPSIyIiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiAgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCI+PHBhdGggc3Ryb2tlPSJub25lIiBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTQgNmwxNiAwIiAvPjxwYXRoIGQ9Ik00IDEybDE2IDAiIC8+PHBhdGggZD0iTTQgMThsMTYgMCIgLz48L3N2Zz4K') !important;\n background-size: contain !important;\n background-repeat: no-repeat !important;\n background-position: center !important;\n background-size: 24px 24px !important;\n width: 24px !important;\n height: 24px !important;\n display: block !important;\n position: relative !important;\n}\n#sbz92 .widget-header--wrap-button-back {\n display: flex !important;\n position: relative !important;\n margin-right: 7.5px !important;\n cursor: pointer !important;\n scale: 1 !important;\n opacity: 0.6 !important;\n transition: opacity 0.15s ease, scale 0.15s ease, filter 0.15s ease !important;\n filter: brightness(0.95) !important;\n}\n#sbz92 .widget-header--wrap-button-back:hover {\n opacity: 1 !important;\n filter: brightness(1.1) !important;\n scale: 1.1 !important;\n}\n#sbz92 .fade-enter-active,\n#sbz92 .fade-leave-active {\n transition: opacity 0.5s ease-out 0.2s !important;\n}\n#sbz92 .fade-enter,\n#sbz92 .fade-leave-to {\n opacity: 0 !important;\n}\n#sbz92 .slide-fade-enter-active {\n transition: all 0.3s ease !important;\n}\n#sbz92 .slide-fade-leave-active {\n transition: all 0.2s cubic-bezier(1, 0.5, 0.8, 1) !important;\n}\n#sbz92 .slide-fade-enter,\n#sbz92 .slide-fade-leave-to {\n transform: translateX(10px) !important;\n opacity: 0 !important;\n}\n#sbz92 .widget_header__body {\n padding-bottom: 70px !important;\n}\n#sbz92 .widget_header__body.widget_header__body__social {\n display: flex !important;\n}\n#sbz92 .social__account_logo {\n height: 90px !important;\n width: 90px !important;\n margin-right: 15px !important;\n border-radius: 15px !important;\n object-fit: cover !important;\n}\n#sbz92 .social__introduction {\n color: '@text_color' !important;\n -webkit-text-fill-color: '@text_color' !important;\n max-height: 72px !important;\n overflow: hidden !important;\n display: -webkit-box !important;\n -webkit-box-orient: vertical !important;\n -webkit-line-clamp: 3 !important;\n}\n#sbz92 .social__links {\n display: flex !important;\n flex-direction: row !important;\n}\n#sbz92 .social__links-logo {\n height: 30px !important;\n width: 30px !important;\n border-radius: 50% !important;\n margin-right: 10px !important;\n margin-top: 5px !important;\n background-size: contain !important;\n background-repeat: no-repeat !important;\n background-position: center !important;\n display: block !important;\n}\n#sbz92 .social__links-logo--facebook {\n background-image: url('data:image/svg+xml,%3C?xml%20version%3D%221.0%22%20?%3E%3Csvg%20width%3D%2230%22%20height%3D%2230%22%20viewBox%3D%220%200%2030%2030%22%20fill%3D%22none%22%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%3E%3Ccircle%20cx%3D%2215%22%20cy%3D%2215%22%20r%3D%2215%22%20fill%3D%22%230264FF%22/%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M17.2944%2029.8252C16.5464%2029.9404%2015.7803%2030%2015%2030C14.0962%2030%2013.2109%2029.9199%2012.3511%2029.7666V18.4775H10V14.4287H12.3511V11.8086C12.3511%209.93457%2013.2744%207%2017.3384%207L21%207.01465V10.9453H18.3433C17.9075%2010.9453%2017.2947%2011.1553%2017.2947%2012.0488V14.4326H20.989L20.5571%2018.4775H17.2944V29.8252Z%22%20fill%3D%22white%22/%3E%3C/svg%3E') !important;\n}\n#sbz92 .social__links-logo--messenger {\n background-image: url('data:image/svg+xml,%3C?xml%20version%3D%221.0%22%20?%3E%3Csvg%20width%3D%2230%22%20height%3D%2230%22%20viewBox%3D%220%200%2030%2030%22%20fill%3D%22none%22%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%3E%3Crect%20width%3D%2230%22%20height%3D%2230%22%20rx%3D%2215%22%20fill%3D%22%23007FFF%22/%3E%3Crect%20x%3D%224.28564%22%20y%3D%226%22%20width%3D%2221.4286%22%20height%3D%2218.8571%22%20fill%3D%22white%22/%3E%3Cpath%20d%3D%22M14.9478%2014.5713C14.8228%2014.5917%2014.6974%2014.6104%2014.5715%2014.6276C14.6974%2014.6104%2014.8228%2014.5917%2014.9478%2014.5713Z%22%20fill%3D%22black%22/%3E%3Cpath%20d%3D%22M14.7507%2014.5713C14.691%2014.5823%2014.6313%2014.5923%2014.5715%2014.6026C14.6313%2014.5923%2014.691%2014.5823%2014.7507%2014.5713Z%22%20fill%3D%22black%22/%3E%3Cpath%20d%3D%22M15.0126%2014.5713C14.8663%2014.5878%2014.7192%2014.6024%2014.5715%2014.6148C14.7192%2014.6024%2014.8663%2014.5878%2015.0126%2014.5713Z%22%20fill%3D%22black%22/%3E%3Cpath%20d%3D%22M14.783%2014.5713C14.7128%2014.5807%2014.642%2014.5894%2014.5715%2014.5976C14.642%2014.5894%2014.7128%2014.5807%2014.783%2014.5713Z%22%20fill%3D%22black%22/%3E%3Cpath%20d%3D%22M14.7299%2014.5713C14.6773%2014.5825%2014.6244%2014.5937%2014.5715%2014.6045C14.6244%2014.5937%2014.6773%2014.5825%2014.7299%2014.5713Z%22%20fill%3D%22black%22/%3E%3Cpath%20d%3D%22M14.6992%2014.5713C14.6567%2014.5834%2014.6141%2014.5949%2014.5715%2014.6068C14.6141%2014.5949%2014.6567%2014.5834%2014.6992%2014.5713Z%22%20fill%3D%22black%22/%3E%3Cpath%20d%3D%22M14.7107%2014.5713C14.6645%2014.5834%2014.618%2014.5958%2014.5715%2014.6075C14.618%2014.5958%2014.6645%2014.5836%2014.7107%2014.5713Z%22%20fill%3D%22black%22/%3E%3Cpath%20d%3D%22M14.7194%2014.5713C14.6704%2014.5827%2014.621%2014.5935%2014.5715%2014.6045C14.621%2014.5935%2014.6704%2014.5827%2014.7194%2014.5713Z%22%20fill%3D%22black%22/%3E%3Cpath%20d%3D%22M14.8087%2014.5713C14.7297%2014.5779%2014.6507%2014.5839%2014.5715%2014.5891C14.6507%2014.5839%2014.7297%2014.5779%2014.8087%2014.5713Z%22%20fill%3D%22black%22/%3E%3Cpath%20d%3D%22M15.0417%2014.5713C14.8856%2014.5814%2014.7288%2014.5894%2014.5715%2014.5946C14.7288%2014.5894%2014.8856%2014.5814%2015.0417%2014.5713Z%22%20fill%3D%22black%22/%3E%3Cpath%20d%3D%22M14.8206%2014.5713C14.7377%2014.574%2014.6546%2014.5761%2014.5715%2014.5775C14.6546%2014.5761%2014.7377%2014.574%2014.8206%2014.5713Z%22%20fill%3D%22black%22/%3E%3Cpath%20d%3D%22M14.1547%2012.3174L9.29419%2017.4636L13.7176%2015.0365L16.0288%2017.4636L20.8621%2012.3174L16.4877%2014.7019L14.1547%2012.3174Z%22%20fill%3D%22%23448AFF%22/%3E%3Cpath%20d%3D%22M15%200C6.717%200%200%206.717%200%2015C0%2023.283%206.717%2030%2015%2030C23.283%2030%2030%2023.283%2030%2015C30%206.717%2023.283%200%2015%200ZM15.1172%2023.0294C14.1886%2023.0294%2013.2923%2022.8983%2012.4491%2022.6554L9.42421%2024.375V21.14C7.39815%2019.5982%206.10428%2017.2501%206.10428%2014.6203C6.10428%209.97581%2010.1395%206.21094%2015.1172%206.21094C20.0951%206.21094%2024.1301%209.97581%2024.1301%2014.6203C24.1301%2019.2643%2020.0951%2023.0294%2015.1172%2023.0294V23.0294Z%22%20fill%3D%22%23007FFF%22/%3E%3C/svg%3E') !important;\n}\n#sbz92 .social__links-logo--email {\n background-image: url('data:image/svg+xml,%3C?xml%20version%3D%221.0%22%20?%3E%3Csvg%20width%3D%2230%22%20height%3D%2230%22%20viewBox%3D%220%200%2030%2030%22%20fill%3D%22none%22%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%3E%3Cpath%20d%3D%22M22.6875%2012.9688C21.9375%2013.5625%2020.3125%2014.75%2017.875%2016.5L17.5625%2016.75C17.0625%2017.125%2016.6875%2017.4062%2016.375%2017.5625C15.875%2017.875%2015.4062%2018%2015%2018C14.5625%2018%2014.125%2017.875%2013.625%2017.5938C13.3125%2017.4375%2012.9375%2017.1562%2012.4375%2016.7812L12.125%2016.5C9.59375%2014.6875%208%2013.5%207.3125%2012.9688C7.25%2012.9375%207.15625%2012.9375%207.09375%2012.9688C7.03125%2013%207%2013.0625%207%2013.125V19.5C7%2019.9375%207.125%2020.2812%207.4375%2020.5625C7.71875%2020.875%208.0625%2021%208.5%2021H21.5C21.9062%2021%2022.25%2020.875%2022.5625%2020.5625C22.8438%2020.2812%2023%2019.9375%2023%2019.5V13.125C23%2013.0625%2022.9375%2013%2022.875%2012.9375C22.8125%2012.9062%2022.75%2012.9062%2022.6875%2012.9688ZM15%2017C14.7188%2017%2014.375%2016.875%2014%2016.625C13.75%2016.5%2013.4375%2016.2812%2013.0312%2015.9375L12.7188%2015.7188C10.1562%2013.8438%208.40625%2012.5625%207.5%2011.8438L7.28125%2011.6875C7.09375%2011.5625%207%2011.3438%207%2011.0938V10.5C7%2010.0938%207.125%209.75%207.4375%209.4375C7.71875%209.15625%208.0625%209%208.5%209H21.5C21.9062%209%2022.25%209.15625%2022.5625%209.4375C22.8438%209.75%2023%2010.0938%2023%2010.5V11.0938C23%2011.3438%2022.9062%2011.5625%2022.7188%2011.6875L22.5625%2011.8125C21.6562%2012.5312%2019.9062%2013.8438%2017.2812%2015.7188L16.9688%2015.9375C16.5312%2016.2812%2016.2188%2016.5%2016%2016.625C15.5938%2016.875%2015.25%2017%2015%2017Z%22%20fill%3D%22white%22/%3E%3C/svg%3E') !important;\n}\n#sbz92 .social__links-logo--zalo {\n background-image: url('data:image/svg+xml,%3C?xml%20version%3D%221.0%22%20?%3E%3Csvg%20width%3D%2230%22%20height%3D%2230%22%20viewBox%3D%220%200%2030%2030%22%20fill%3D%22none%22%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M29.9999%2014.9385C29.9669%206.68262%2023.2639%200%2015%200C6.7157%200%200%206.71582%200%2015C0%2023.2842%206.7157%2030%2015%2030C23.2639%2030%2029.9669%2023.3174%2029.9999%2015.0615C29.9999%2015.041%2030%2015.0205%2030%2015C30%2014.9795%2029.9999%2014.959%2029.9999%2014.9385Z%22%20fill%3D%22white%22/%3E%3Cpath%20d%3D%22M24.5612%2017.4695C22.9394%2017.4726%2021.6242%2016.1862%2021.6279%2014.6005C21.6316%2013.0345%2022.9474%2011.7445%2024.5473%2011.7383C26.1556%2011.732%2027.4826%2013.0349%2027.4786%2014.6162C27.4746%2016.1926%2026.1719%2017.4665%2024.5612%2017.4695ZM22.8416%2014.6183C22.8459%2015.5573%2023.6166%2016.3004%2024.5777%2016.2923C25.5165%2016.2845%2026.2699%2015.5301%2026.2673%2014.6005C26.2646%2013.6712%2025.51%2012.9317%2024.56%2012.9277C23.6012%2012.9237%2022.8373%2013.6751%2022.8416%2014.6183Z%22%20fill%3D%22%230068FE%22/%3E%3Cpath%20d%3D%22M19.5054%2010.0762H20.795V17.4217H19.9447C19.7021%2017.4217%2019.5054%2017.225%2019.5054%2016.9823V10.0762Z%22%20fill%3D%22%230068FE%22/%3E%3Cpath%20d%3D%22M18.5227%2011.8907H17.2881V12.2935C16.5767%2011.8601%2015.8509%2011.6775%2015.06%2011.831C14.2526%2011.9876%2013.6164%2012.4043%2013.167%2013.0917C12.4538%2014.1826%2012.5894%2015.5904%2013.4938%2016.5431C14.3504%2017.4454%2015.8628%2017.8178%2017.2815%2016.9247C17.2835%2016.934%2017.286%2016.9422%2017.2881%2016.9511V16.9826C17.2881%2017.2252%2017.4849%2017.422%2017.7275%2017.422H18.5227V11.8907V11.8907ZM15.5853%2016.2787C14.6636%2016.268%2013.8924%2015.5006%2013.8986%2014.6004C13.9048%2013.692%2014.6716%2012.9481%2015.602%2012.9479C16.5427%2012.9477%2017.2871%2013.6781%2017.2882%2014.6026C17.2893%2015.5333%2016.521%2016.2896%2015.5853%2016.2787Z%22%20fill%3D%22%230068FE%22/%3E%3Cpath%20d%3D%22M8.0481%2016.2438C9.39854%2014.5856%2010.6939%2012.9885%2011.9984%2011.3989C12.2464%2011.0968%2012.3662%2010.7671%2012.3731%2010.3807C12.3761%2010.2135%2012.3261%2010.1646%2012.1596%2010.165C11.6056%2010.1666%206.41195%2010.165%206.41195%2010.165V11.4709H10.4978C10.4424%2011.543%207.83556%2014.7218%206.57932%2016.2403C6.37112%2016.4919%206.26503%2016.7645%206.25401%2017.0936C6.24628%2017.3242%206.28864%2017.4139%206.52267%2017.4211V17.4217H11.9356C12.1782%2017.4217%2012.3749%2017.225%2012.3749%2016.9823V16.2487V16.2438H8.0481V16.2438Z%22%20fill%3D%22%230068FE%22/%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M4.948%2026.1338C6.03613%2027.1172%207.26917%2027.9424%208.61108%2028.5752V26.1338H4.948ZM0.00268555%2014.7119C0.0775146%2010.7393%201.69666%207.14453%204.28479%204.50293C4.0459%204.98242%203.83435%205.47949%203.64661%205.99121C2.58862%208.87598%202.31299%2011.8506%202.69116%2014.8916C2.95862%2017.042%203.55518%2019.0869%204.63391%2020.9775C4.8269%2021.3154%205.02271%2021.6582%205.26489%2021.9609C5.76672%2022.5879%205.80981%2023.2725%205.59888%2024.0049C5.4873%2024.3926%205.32227%2024.75%205.11304%2025.082C4.95691%2025.3291%204.77612%2025.5635%204.57434%2025.7842C1.81921%2023.1201%200.0819092%2019.4102%200.00280762%2015.2939C0.000976562%2015.1963%200%2015.0986%200%2015C0%2014.9033%200.000854492%2014.8076%200.00268555%2014.7119Z%22%20fill%3D%22%230068FE%22/%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M24.8226%2026.3367C22.191%2028.6189%2018.7568%2029.9998%2015%2029.9998C11.1449%2029.9998%207.62952%2028.5457%204.97241%2026.156C6.32458%2026.1921%207.61877%2025.9031%208.86353%2025.3464C8.97681%2025.2957%209.06262%2025.3113%209.16443%2025.364C12.2258%2026.9646%2015.5131%2027.5125%2018.926%2027.3962C20.9574%2027.3269%2022.9333%2027.0046%2024.8226%2026.3367Z%22%20fill%3D%22%23015BDF%22/%3E%3C/svg%3E') !important;\n}\n@keyframes hide {\n 100% {\n opacity: 0;\n transform: scale(0);\n }\n}\n#sbz92 .widget-header-expand-container {\n width: 100% !important;\n}\n#sbz92 .message-input {\n width: 100% !important;\n border-top: 1px solid #e3e3e3 !important;\n display: flex !important;\n flex-direction: row !important;\n padding: 15px 22.5px !important;\n}\n#sbz92 .message-input--disabled {\n background: #f0f0f0 !important;\n opacity: 0.6 !important;\n filter: grayscale(1) !important;\n}\n#sbz92 textarea[disabled='disabled']::-webkit-input-placeholder {\n color: #a4a4a4 !important;\n -webkit-text-fill-color: #a4a4a4 !important;\n}\n#sbz92 textarea[disabled='disabled']:-ms-input-placeholder {\n color: #a4a4a4 !important;\n -webkit-text-fill-color: #a4a4a4 !important;\n}\n#sbz92 textarea[disabled='disabled']::placeholder {\n color: #a4a4a4 !important;\n -webkit-text-fill-color: #a4a4a4 !important;\n}\n#sbz92 .message-input--input {\n word-wrap: break-word !important;\n resize: none !important;\n flex: 1 !important;\n align-self: center !important;\n margin-right: 7.5px !important;\n color: #000 !important;\n -webkit-text-fill-color: #000 !important;\n}\n#sbz92 .message-input--input::placeholder {\n opacity: 0.5 !important;\n /* Firefox */\n}\n#sbz92 .message-input--input::-ms-input-placeholder {\n /* Edge 12 -18 */\n opacity: 0.5 !important;\n /* Firefox */\n}\n#sbz92 .message-input--emoji-button {\n background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImdyYXkiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBjbGFzcz0iZmVhdGhlciBmZWF0aGVyLXNtaWxlIj48Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCI+PC9jaXJjbGU+PHBhdGggZD0iTTggMTRzMS41IDIgNCAyIDQtMiA0LTIiPjwvcGF0aD48bGluZSB4MT0iOSIgeTE9IjkiIHgyPSI5LjAxIiB5Mj0iOSI+PC9saW5lPjxsaW5lIHgxPSIxNSIgeTE9IjkiIHgyPSIxNS4wMSIgeTI9IjkiPjwvbGluZT48L3N2Zz4K') !important;\n}\n#sbz92 .message-input--button {\n background-size: 70% !important;\n background-repeat: no-repeat !important;\n background-position: center !important;\n width: 32px !important;\n height: 32px !important;\n display: block !important;\n cursor: pointer !important;\n position: relative !important;\n border-radius: 20px !important;\n transition: background-color 0.2s !important;\n}\n#sbz92 .message-input--button:hover {\n background-color: #eeeeee !important;\n}\n#sbz92 .message-input--disabled .message-input--button {\n cursor: default !important;\n}\n#sbz92 .message-input--disabled .message-input--button {\n cursor: default !important;\n}\n#sbz92 .message-input--attachment-button {\n background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImdyYXkiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBjbGFzcz0iZmVhdGhlciBmZWF0aGVyLXBhcGVyY2xpcCI+PHBhdGggZD0iTTIxLjQ0IDExLjA1bC05LjE5IDkuMTlhNiA2IDAgMCAxLTguNDktOC40OWw5LjE5LTkuMTlhNCA0IDAgMCAxIDUuNjYgNS42NmwtOS4yIDkuMTlhMiAyIDAgMCAxLTIuODMtMi44M2w4LjQ5LTguNDgiPjwvcGF0aD48L3N2Zz4K') !important;\n}\n#sbz92 .message-input--send-button {\n background-image: url('data:image/svg+xml,%3C?xml%20version%3D%221.0%22%20?%3E%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2225%22%20height%3D%2225%22%20viewBox%3D%220%200%2024%2024%22%20stroke-width%3D%221.5%22%20stroke%3D%22@esc-primary-color-esc%22%20fill%3D%22none%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Cpath%20stroke%3D%22none%22%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22/%3E%3Cpath%20d%3D%22M4.698%204.034l16.302%207.966l-16.302%207.966a.503%20.503%200%200%201%20-.546%20-.124a.555%20.555%200%200%201%20-.12%20-.568l2.468%20-7.274l-2.468%20-7.274a.555%20.555%200%200%201%20.12%20-.568a.503%20.503%200%200%201%20.546%20-.124z%22%20fill%3D%22@esc-primary-color-esc%22/%3E%3Cpath%20d%3D%22M6.5%2012h14.5%22%20/%3E%3C/svg%3E') !important;\n background-size: 82% !important;\n}\n#sbz92 .message-input--preform {\n justify-content: center !important;\n padding: 11px !important;\n @spacer 2;\n}\n#sbz92 .btn--preform {\n border-radius: 7px !important;\n padding-left: 32px !important;\n padding-right: 32px !important;\n height: 40px !important;\n color: #fff !important;\n -webkit-text-fill-color: #fff !important;\n font-size: 14px !important;\n line-height: 20px !important;\n text-align: center !important;\n background: '@primary_color' !important;\n width: 60% !important;\n}\n#sbz92 .widget-body.embed-chat .message-input {\n border: 1px solid #e3e3e3 !important;\n border-radius: 8px !important;\n margin-bottom: 20px !important;\n}\n#sbz92 .form-label {\n margin-top: 15px !important;\n}\n#sbz92 .form {\n border: 1px solid #eeeeee !important;\n box-sizing: border-box !important;\n box-shadow: 0px 2px 10px rgba(0, 0, 0, 0.15) !important;\n border-radius: 7px !important;\n}\n#sbz92 textarea.form-control {\n resize: none !important;\n word-wrap: break-word !important;\n}\n#sbz92 .form-control--container {\n position: relative !important;\n}\n#sbz92 input.form-control[disabled] {\n background: #f9f9f9 !important;\n}\n#sbz92 .form-control--container .form-control--check {\n position: absolute !important;\n right: 10px !important;\n top: 10px !important;\n background-size: 100% 100% !important;\n background-repeat: no-repeat !important;\n background-position: center !important;\n width: 20px !important;\n height: 20px !important;\n background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9IiM1QkFBMUQiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBjbGFzcz0iZmVhdGhlciBmZWF0aGVyLWNoZWNrIj48cG9seWxpbmUgcG9pbnRzPSIyMCA2IDkgMTcgNCAxMiI+PC9wb2x5bGluZT48L3N2Zz4K') !important;\n}\n#sbz92 .form-control--valid-input--error {\n color: #dc3545 !important;\n -webkit-text-fill-color: #dc3545 !important;\n font-size: 14px !important;\n padding-top: 5px !important;\n}\n#sbz92 input[type='text'].form-control.input--error,\n#sbz92 input[type='tel'].form-control.input--error,\n#sbz92 input[type='email'].form-control.input--error,\n#sbz92 input[type='number'].form-control.input--error,\n#sbz92 input[type='date'].form-control.input--error,\n#sbz92 textarea.form-control.input--error,\n#sbz92 select.form-control.input--error {\n border: 1px solid #dc3545 !important;\n background: #dd41500f !important;\n}\n#sbz92 input[type='text'].form-control,\n#sbz92 input[type='tel'].form-control,\n#sbz92 input[type='email'].form-control,\n#sbz92 input[type='number'].form-control,\n#sbz92 input[type='date'].form-control,\n#sbz92 textarea.form-control,\n#sbz92 select.form-control {\n width: 100% !important;\n border: 1px solid #c4c4c4 !important;\n border-radius: 8px !important;\n transition: all 100ms ease !important;\n padding: 10px 12px !important;\n}\n#sbz92 input[type='text'].form-control:hover,\n#sbz92 input[type='tel'].form-control:hover,\n#sbz92 input[type='email'].form-control:hover,\n#sbz92 input[type='number'].form-control:hover,\n#sbz92 input[type='date'].form-control:hover,\n#sbz92 textarea.form-control:hover,\n#sbz92 select.form-control:hover {\n border: 1px solid #6c757d !important;\n}\n#sbz92 input[type='text'].form-control.input--error:hover,\n#sbz92 input[type='tel'].form-control.input--error:hover,\n#sbz92 input[type='email'].form-control.input--error:hover,\n#sbz92 input[type='number'].form-control.input--error:hover,\n#sbz92 input[type='date'].form-control.input--error:hover,\n#sbz92 textarea.form-control.input--error:hover,\n#sbz92 select.form-control.input--error:hover {\n border: 1px solid #dc3545 !important;\n}\n#sbz92 select.form-control {\n padding: 1px 8px !important;\n}\n#sbz92 input[type='date'].form-control {\n height: 40px !important;\n width: 100% !important;\n background-color: #fff !important;\n}\n#sbz92 .form-wrapper-attachment input[type='date'].form-control {\n height: 32px !important;\n padding-top: 6px !important;\n padding-bottom: 6px !important;\n}\n#sbz92 input[type='text'].form-control:focus,\n#sbz92 input[type='tel'].form-control:focus,\n#sbz92 input[type='email'].form-control:focus,\n#sbz92 input[type='number'].form-control:focus,\n#sbz92 input[type='date'].form-control:focus,\n#sbz92 textarea.form-control:focus,\n#sbz92 select.form-control:focus {\n border: 1px solid '@primary_color' !important;\n}\n#sbz92 input[type='text'].form-control.input--error:focus,\n#sbz92 input[type='tel'].form-control.input--error:focus,\n#sbz92 input[type='email'].form-control.input--error:focus,\n#sbz92 input[type='number'].form-control.input--error:focus,\n#sbz92 input[type='date'].form-control.input--error:focus,\n#sbz92 textarea.form-control.input--error:focus,\n#sbz92 select.form-control.input--error:focus {\n border: 1px solid #dc3545 !important;\n}\n#sbz92 .label {\n display: block !important;\n padding-bottom: 6px !important;\n margin-top: 8px !important;\n color: #6c757d !important;\n -webkit-text-fill-color: #6c757d !important;\n font-size: 14px !important;\n font-weight: 500 !important;\n}\n#sbz92 .form--btn-submit {\n border-radius: 7px !important;\n padding-left: 32px !important;\n padding-right: 32px !important;\n width: 100% !important;\n}\n#sbz92 .form .radio {\n display: block !important;\n position: relative !important;\n width: 100% !important;\n margin-top: 5px !important;\n}\n#sbz92 .form .radio:first-of-type {\n margin-top: 0 !important;\n}\n#sbz92 .form input[type='radio'] {\n position: absolute !important;\n visibility: hidden !important;\n}\n#sbz92 .form .radio--label {\n padding-left: 22px !important;\n display: block !important;\n position: relative !important;\n z-index: 9 !important;\n cursor: pointer !important;\n}\n#sbz92 .form .radio--check {\n display: block !important;\n position: absolute !important;\n border: 1px solid #aaa !important;\n border-radius: 100% !important;\n height: 16px !important;\n width: 16px !important;\n top: 0px !important;\n left: 0px !important;\n z-index: 5 !important;\n transition: border 0.15s linear !important;\n -webkit-transition: border 0.15s linear !important;\n}\n#sbz92 .form .radio--check:hover {\n border: 1px solid #888 !important;\n}\n#sbz92 .form .radio--check::before {\n display: block !important;\n position: absolute !important;\n content: '' !important;\n border-radius: 100% !important;\n height: 10px !important;\n width: 10px !important;\n top: 2px !important;\n left: 2px !important;\n margin: auto !important;\n transition: background 0.15s linear !important;\n -webkit-transition: background 0.15s linear !important;\n}\n#sbz92 .form input[type='radio']:checked ~ .radio--check {\n border: 1px solid '@primary_color' !important;\n}\n#sbz92 .form input[type='radio']:checked ~ .radio--check::before {\n background: '@primary_color' !important;\n}\n#sbz92 .form .checkbox {\n display: block !important;\n position: relative !important;\n width: 100% !important;\n margin-top: 5px !important;\n}\n#sbz92 .form .checkbox:first-of-type {\n margin-top: 0 !important;\n}\n#sbz92 .form input[type='checkbox'] {\n position: absolute !important;\n visibility: hidden !important;\n}\n#sbz92 .form .checkbox--label {\n padding-left: 22px !important;\n display: block !important;\n position: relative !important;\n z-index: 9 !important;\n cursor: pointer !important;\n}\n#sbz92 .form .checkbox--check {\n display: block !important;\n position: absolute !important;\n border: 1px solid #aaa !important;\n border-radius: 4 px !important;\n height: 16px !important;\n width: 16px !important;\n top: 0px !important;\n left: 0px !important;\n z-index: 5 !important;\n transition: border 0.15s linear !important;\n -webkit-transition: border 0.15s linear !important;\n}\n#sbz92 .form .checkbox--check:hover {\n border: 1px solid #888 !important;\n}\n#sbz92 .form .checkbox--check::before {\n display: block !important;\n position: absolute !important;\n content: '' !important;\n height: 100% !important;\n width: 100% !important;\n margin: auto !important;\n transition: background 0.15s linear !important;\n -webkit-transition: background 0.15s linear !important;\n}\n#sbz92 .form input[type='checkbox']:checked ~ .checkbox--check {\n border: 1px solid '@primary_color' !important;\n}\n#sbz92 .form input[type='checkbox']:checked ~ .checkbox--check::before {\n background: '@primary_color' !important;\n}\n#sbz92 .form .select .form-control {\n padding-right: 20px !important;\n}\n#sbz92 .form select {\n /*background: url(\"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00LjQxMDU4IDYuOTExMDdDNC43MzYwMiA2LjU4NTYzIDUuMjYzNjYgNi41ODU2MyA1LjU4OTA5IDYuOTExMDdMOS45OTk4NCAxMS4zMjE4TDE0LjQxMDYgNi45MTEwN0MxNC43MzYgNi41ODU2MyAxNS4yNjM3IDYuNTg1NjMgMTUuNTg5MSA2LjkxMTA3QzE1LjkxNDUgNy4yMzY1MSAxNS45MTQ1IDcuNzY0MTQgMTUuNTg5MSA4LjA4OTU4TDEwLjU4OTEgMTMuMDg5NkMxMC4yNjM3IDEzLjQxNSA5LjczNjAyIDEzLjQxNSA5LjQxMDU4IDEzLjA4OTZMNC40MTA1OCA4LjA4OTU4QzQuMDg1MTQgNy43NjQxNCA0LjA4NTE0IDcuMjM2NTEgNC40MTA1OCA2LjkxMTA3WiIgZmlsbD0iYmxhY2siLz4KPC9zdmc+\") no-repeat right;*/\n}\n#sbz92 .form-require-info--list {\n background: #fff !important;\n overflow-y: auto !important;\n overflow-x: hidden !important;\n}\n#sbz92 .form-require-info--title {\n font-size: 18px !important;\n line-height: 20px !important;\n color: #000 !important;\n -webkit-text-fill-color: #000 !important;\n background: #fff !important;\n border-bottom: 1px solid #f0f0f0 !important;\n}\n#sbz92 .form-require-info--item {\n border-bottom: 1px solid #f0f0f0 !important;\n}\n#sbz92 .form-require-info--item:hover {\n cursor: pointer !important;\n background: #e0e0e0 !important;\n}\n#sbz92 input[type='checkbox'] {\n background-color: initial !important;\n cursor: default !important;\n -webkit-appearance: checkbox !important;\n box-sizing: border-box !important;\n margin: 3px 3px 3px 4px !important;\n padding: initial !important;\n border: initial !important;\n}\n#sbz92 input[type='radio'] {\n background-color: initial !important;\n cursor: default !important;\n -webkit-appearance: radio !important;\n box-sizing: border-box !important;\n margin: 3px 3px 0px 5px !important;\n padding: initial !important;\n border: initial !important;\n}\n#sbz92 option {\n font-weight: normal !important;\n display: block !important;\n white-space: pre !important;\n min-height: 1.2em !important;\n padding: 0px 2px 1px !important;\n}\n#sbz92 select {\n -webkit-writing-mode: horizontal-tb !important;\n text-rendering: auto !important;\n color: -internal-light-dark-color(black, white) !important;\n letter-spacing: normal !important;\n word-spacing: normal !important;\n text-transform: none !important;\n text-indent: 0px !important;\n text-shadow: none !important;\n display: inline-block !important;\n text-align: start !important;\n -webkit-appearance: menulist !important;\n box-sizing: border-box !important;\n align-items: center !important;\n white-space: pre !important;\n -webkit-rtl-ordering: logical !important;\n background-color: -internal-light-dark-color(white, black) !important;\n cursor: default !important;\n margin: 0em !important;\n font: 400 13.3333px Arial !important;\n border-radius: 0px !important;\n border-width: 1px !important;\n border-style: solid !important;\n border-color: #a9a9a9 !important;\n border-image: initial !important;\n}\n#sbz92 select {\n position: relative !important;\n display: inline-block !important;\n border: 2px #cccc solid !important;\n border-radius: 5px !important;\n height: 36px !important;\n line-height: 34px !important;\n padding: 0 12px !important;\n font-size: 14px !important;\n color: #000 !important;\n -webkit-text-fill-color: #000 !important;\n}\n#sbz92 .custom-select--wrap-selected {\n display: flex !important;\n position: relative !important;\n justify-content: space-between !important;\n cursor: pointer !important;\n border: 1px solid #d8d8d8 !important;\n border-radius: 5px !important;\n padding: 5px !important;\n}\n#sbz92 .custom-select--selected-items {\n display: flex !important;\n align-items: center !important;\n flex-wrap: wrap !important;\n}\n#sbz92 .custom-select--selected-item {\n display: flex !important;\n align-items: center !important;\n margin: 3px 3px !important;\n padding: 1px 6px !important;\n border-radius: 5px !important;\n border: 1px solid #d8d8d8 !important;\n font-size: 14px !important;\n color: #000 !important;\n -webkit-text-fill-color: #000 !important;\n vertical-align: top !important;\n}\n#sbz92 .icn-delete:before {\n display: flex !important;\n justify-items: center !important;\n font-size: 12px !important;\n margin-left: 5px !important;\n opacity: 0.5 !important;\n content: '\\2715' !important;\n}\n#sbz92 .custom-select--wrap-options {\n display: flex !important;\n flex-direction: column !important;\n position: absolute !important;\n left: 0 !important;\n top: 100% !important;\n border: 1px solid #dadce0 !important;\n -webkit-box-shadow: 0 4px 16px rgba(0, 0, 0, 0.1) !important;\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.1) !important;\n border-radius: 5px !important;\n width: 100% !important;\n background: #fff !important;\n z-index: 11 !important;\n max-height: 200px !important;\n overflow-y: auto !important;\n}\n#sbz92 .custom-select--input-search {\n font-size: 15px !important;\n padding: 8px !important;\n border-bottom: 1px solid #d8d8d8 !important;\n}\n#sbz92 .custom-select--items-options {\n margin: 0 !important;\n display: flex !important;\n flex-direction: column !important;\n}\n#sbz92 .custom-select--item-options {\n padding: 10px !important;\n cursor: pointer !important;\n}\n#sbz92 .custom-select--item-options:hover {\n background-color: '@primary_color' !important;\n color: '@text_color' !important;\n -webkit-text-fill-color: '@text_color' !important;\n}\n#sbz92 .custom-select--icon-dropdown {\n margin-left: auto !important;\n float: right !important;\n cursor: pointer !important;\n}\n#sbz92 .custom-select--icon-dropdown path {\n d: path('M 7 9.5 L 12 14.5 L 17 9.5 H 7 Z') !important;\n fill: black !important;\n}\n#sbz92 .form-component {\n margin-bottom: 15px !important;\n}\n#sbz92 .form-component:last-child {\n margin-bottom: 0 !important;\n}\n#sbz92 .form-component.submitted {\n margin-bottom: 8px !important;\n}\n#sbz92 .form-component.form-component-submit-button {\n margin-top: 20px !important;\n}\n#sbz92 .form-wrapper.form {\n padding: 20px !important;\n background-color: #fff !important;\n}\n#sbz92 .form-wrapper.form-wrapper-attachment.form {\n padding: 12px 15px !important;\n margin-top: 5px !important;\n box-shadow: 0 0 0 1px #eeeeee !important;\n}\n#sbz92 .form-wrapper.form-wrapper-attachment.form input[type='text'].form-control,\n#sbz92 .form-wrapper.form-wrapper-attachment.form input[type='tel'].form-control,\n#sbz92 .form-wrapper.form-wrapper-attachment.form input[type='email'].form-control,\n#sbz92 .form-wrapper.form-wrapper-attachment.form input[type='number'].form-control,\n#sbz92 .form-wrapper.form-wrapper-attachment.form input[type='date'].form-control,\n#sbz92 .form-wrapper.form-wrapper-attachment.form select.form-control,\n#sbz92 .form-wrapper.form-wrapper-attachment.form textarea.form-control {\n padding: 6px 10px !important;\n}\n#sbz92 .form-wrapper.form-wrapper-attachment.form .form-component {\n margin-bottom: 12px !important;\n}\n#sbz92 .form-wrapper.form-wrapper-attachment.form .form-component:last-child {\n margin-bottom: 0 !important;\n}\n#sbz92 .form-wrapper.form-wrapper-attachment.form .form-component.submitted {\n margin-bottom: 5px !important;\n}\n#sbz92 .form-wrapper.form-wrapper-attachment.form .form-component.submitted:last-child {\n margin-bottom: 0 !important;\n}\n#sbz92 .form-wrapper.form-wrapper-attachment.form .form-component:first-child .label {\n margin-top: 0 !important;\n}\n#sbz92 .form-wrapper.form-wrapper-attachment.form .form-component.form-component-submit-button {\n margin-top: 16px !important;\n}\n#sbz92 .form-wrapper.form-wrapper-attachment.form .label {\n padding-bottom: 4px !important;\n}\n#sbz92 .form-wrapper.form-wrapper-attachment.form .form-control--valid-input--error {\n padding-top: 3px !important;\n}\n#sbz92 .form-wrapper.form-wrapper-attachment.form .btn--start-convo {\n height: 36px !important;\n}\n#sbz92 select.form-control.form-control--empty {\n color: #6c757d !important;\n -webkit-text-fill-color: #6c757d !important;\n}\n@media only screen and (min-width: 968px) {\n #sbz92 .form-radios-wrapper.horizontal {\n display: flex;\n flex-wrap: wrap;\n }\n #sbz92 .form-radios-wrapper.horizontal .radio {\n margin-right: 10px;\n width: 300px;\n }\n #sbz92 .form-radios-wrapper.horizontal .radio:first-child {\n margin-top: 0;\n }\n #sbz92 .form-radios-wrapper.horizontal .radio:nth-child(2) {\n margin-top: 0;\n }\n #sbz92 .form-radios-wrapper.horizontal .radio:nth-child(2n) {\n margin-right: 0;\n }\n #sbz92 .form-checkboxes-wrapper.horizontal {\n display: flex;\n flex-wrap: wrap;\n }\n #sbz92 .form-checkboxes-wrapper.horizontal .checkbox {\n margin-right: 10px;\n width: 300px;\n }\n #sbz92 .form-checkboxes-wrapper.horizontal .checkbox:first-child {\n margin-top: 0;\n }\n #sbz92 .form-checkboxes-wrapper.horizontal .checkbox:nth-child(2) {\n margin-top: 0;\n }\n #sbz92 .form-checkboxes-wrapper.horizontal .checkbox:nth-child(2n) {\n margin-right: 0;\n }\n}\n#sbz92 .form-ratings-wrapper {\n display: inline-flex !important;\n}\n#sbz92 .star {\n width: 32px !important;\n height: 30px !important;\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_0___ + ") !important;\n background-position: 0px 0px !important;\n background-size: cover !important;\n}\n#sbz92 .form-wrapper-attachment .star-wrapper {\n padding-right: 12px !important;\n}\n#sbz92 .star-wrapper {\n cursor: pointer !important;\n padding-right: 20px !important;\n}\n#sbz92 .star-wrapper:last-child {\n padding-right: 0 !important;\n}\n#sbz92 .star-wrapper.hovering .star {\n background-position: -32px 0 !important;\n}\n#sbz92 .star-wrapper.selected {\n cursor: auto !important;\n}\n#sbz92 .star-wrapper.selected .star {\n background-position: -64px 0 !important;\n}\n#sbz92 .conversation-history-error {\n display: flex !important;\n align-items: center !important;\n gap: 8px !important;\n margin: 8px 0 16px !important;\n padding: 8px 10px !important;\n border-radius: 10px !important;\n background: #f5f6f8 !important;\n color: #737782 !important;\n font-size: 12px !important;\n line-height: 18px !important;\n text-align: left !important;\n}\n#sbz92 .conversation-history-error__text {\n flex: 1 !important;\n min-width: 0 !important;\n}\n#sbz92 .conversation-history-error__retry {\n position: relative !important;\n flex-shrink: 0 !important;\n border: 0 !important;\n border-radius: 6px !important;\n padding: 5px 8px !important;\n background: transparent !important;\n color: #545866 !important;\n font-size: 12px !important;\n font-weight: 600 !important;\n line-height: 18px !important;\n cursor: pointer !important;\n}\n#sbz92 .conversation-history-error__retry:hover:not(:disabled) {\n background: #e8eaf0 !important;\n}\n#sbz92 .conversation-history-error__retry:disabled {\n cursor: wait !important;\n}\n#sbz92 .conversation-history-error__retry:focus-visible {\n outline: 2px solid #737782 !important;\n outline-offset: 2px !important;\n}\n#sbz92 .conversation-history-error__spinner {\n position: absolute !important;\n inset: 0 !important;\n display: flex !important;\n align-items: center !important;\n justify-content: center !important;\n}\n#sbz92 .widget-body--events-container {\n overflow-x: hidden !important;\n overflow-y: auto !important;\n display: flex !important;\n flex-direction: column !important;\n flex: 1 !important;\n padding-left: 22.5px !important;\n padding-right: 22.5px !important;\n}\n#sbz92 .widget-body--events {\n padding-top: 20px !important;\n flex: 1 !important;\n}\n#sbz92 .mobile .widget-body--events {\n display: flex !important;\n flex-direction: column !important;\n justify-content: flex-end !important;\n padding-bottom: 15px !important;\n}\n#sbz92 .widget-body--events-container.widget-body--events-container__error {\n align-items: center !important;\n justify-content: center !important;\n}\n#sbz92 .convo-event {\n position: relative !important;\n}\n#sbz92 .convo-event-time {\n text-align: center !important;\n margin-top: 15px !important;\n}\n#sbz92 .convo-event-time span {\n color: #6c757d !important;\n -webkit-text-fill-color: #6c757d !important;\n}\n#sbz92 .file-attachment {\n padding: 10px !important;\n border-radius: 10px !important;\n cursor: pointer !important;\n margin: 5px 0 0 0 !important;\n}\n#sbz92 .file-attachment--agent {\n background-color: '@primary_color' !important;\n width: fit-content !important;\n}\n#sbz92 .file-attachment--user {\n background-color: #eeeeee !important;\n align-self: flex-end !important;\n}\n#sbz92 .file-attachment--link {\n display: flex !important;\n flex-direction: row !important;\n align-items: center !important;\n width: fit-content !important;\n}\n#sbz92 .file-attachment--agent .file-attachment--filename {\n color: '@text_color' !important;\n -webkit-text-fill-color: '@text_color' !important;\n text-decoration: underline !important;\n text-overflow: ellipsis !important;\n white-space: nowrap !important;\n overflow: hidden !important;\n max-width: 200px !important;\n}\n#sbz92 .file-attachment--user .file-attachment--filename {\n color: #000 !important;\n -webkit-text-fill-color: #000 !important;\n text-decoration: underline !important;\n text-overflow: ellipsis !important;\n overflow: hidden !important;\n white-space: nowrap !important;\n max-width: 200px !important;\n}\n#sbz92 .file-attachment--download {\n width: 24px !important;\n height: 24px !important;\n border-radius: 30px !important;\n display: inline-block !important;\n}\n#sbz92 .file-attachment--agent .file-attachment--download {\n background: '@text_color' !important;\n background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9IiMwMjY1RkYiIHN0cm9rZS13aWR0aD0iMyIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBjbGFzcz0iZmVhdGhlciBmZWF0aGVyLWFycm93LWRvd24iPjxsaW5lIHgxPSIxMiIgeTE9IjUiIHgyPSIxMiIgeTI9IjE5Ij48L2xpbmU+PHBvbHlsaW5lIHBvaW50cz0iMTkgMTIgMTIgMTkgNSAxMiI+PC9wb2x5bGluZT48L3N2Zz4K') !important;\n background-size: 15px 15px !important;\n background-repeat: no-repeat !important;\n background-position: center !important;\n}\n#sbz92 .file-attachment--user .file-attachment--download {\n background: #c4c4c4 !important;\n background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9IndoaXRlIiBzdHJva2Utd2lkdGg9IjMiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgY2xhc3M9ImZlYXRoZXIgZmVhdGhlci1hcnJvdy1kb3duIj48bGluZSB4MT0iMTIiIHkxPSI1IiB4Mj0iMTIiIHkyPSIxOSI+PC9saW5lPjxwb2x5bGluZSBwb2ludHM9IjE5IDEyIDEyIDE5IDUgMTIiPjwvcG9seWxpbmU+PC9zdmc+Cg==') !important;\n background-size: 15px 15px !important;\n background-repeat: no-repeat !important;\n background-position: center !important;\n}\n#sbz92 .message-text--user {\n line-height: 1.5 !important;\n margin: 5px 0 0 !important;\n display: inline-block !important;\n font-weight: 500 !important;\n background-color: '@primary_color' !important;\n color: '@text_color' !important;\n -webkit-text-fill-color: '@text_color' !important;\n padding: 12px 16px 12px 16px !important;\n}\n#sbz92 .message-text--user.just-focused {\n box-shadow: 0 0 0 2px #000 !important;\n}\n#sbz92 .message-text--agent.just-focused {\n box-shadow: 0 0 0 2px #000 !important;\n}\n#sbz92 .message-text--user.message-user--error {\n background-color: #dc3545 !important;\n}\n#sbz92 .message-text--deleted {\n opacity: 0.7 !important;\n font-style: italic !important;\n}\n#sbz92 .message-text--agent {\n line-height: 1.5 !important;\n white-space: pre-wrap !important;\n display: inline-block !important;\n background: '@primary_color_faded' !important;\n color: #000 !important;\n -webkit-text-fill-color: #000 !important;\n padding: 12px 16px 12px 16px !important;\n}\n#sbz92 .message-agent.message-text--agent {\n max-width: 100% !important;\n margin-top: 0 !important;\n}\n#sbz92 .message-block-pre {\n display: block !important;\n min-width: 0 !important;\n max-width: 100% !important;\n margin: 4px 0 !important;\n padding: 10px 12px !important;\n border: 1px solid rgba(0, 0, 0, 0.06) !important;\n border-radius: 8px !important;\n background: rgba(0, 0, 0, 0.03) !important;\n white-space: pre-wrap !important;\n overflow-wrap: anywhere !important;\n word-break: normal !important;\n}\n#sbz92 .message-block-code,\n#sbz92 .message-block-code * {\n font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace !important;\n font-size: 13px !important;\n line-height: 20px !important;\n}\n#sbz92 .message-block-pre .message-block-code {\n display: block !important;\n}\n#sbz92 .message-user__container {\n display: flex !important;\n flex-direction: row !important;\n align-items: flex-end !important;\n justify-content: flex-end !important;\n}\n#sbz92 .sending_dot.sending_dot__hide {\n opacity: 0 !important;\n background-color: #000 !important;\n}\n#sbz92 .sending_dot {\n width: 15px !important;\n height: 15px !important;\n margin-right: 5px !important;\n border-radius: 50% !important;\n background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9IiM3NzciIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBjbGFzcz0iZmVhdGhlciBmZWF0aGVyLWNsb2NrIj48Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCI+PC9jaXJjbGU+PHBvbHlsaW5lIHBvaW50cz0iMTIgNiAxMiAxMiAxNiAxNCI+PC9wb2x5bGluZT48L3N2Zz4K') !important;\n background-size: contain !important;\n background-repeat: no-repeat !important;\n}\n#sbz92 .message-user {\n border-radius: 18px !important;\n border-bottom-right-radius: 4px !important;\n max-width: 85% !important;\n align-self: flex-end !important;\n word-break: break-word !important;\n position: relative !important;\n white-space: pre-wrap !important;\n}\n#sbz92 .message-user.message-user-images-container {\n width: 85% !important;\n display: flex !important;\n justify-content: flex-end !important;\n}\n#sbz92 .message-user.message-user-audio {\n flex: 1 !important;\n}\n#sbz92 .message-agent {\n border-radius: 18px !important;\n border-bottom-left-radius: 4px !important;\n max-width: 85% !important;\n word-break: break-word !important;\n position: relative !important;\n}\n#sbz92 a.message_error {\n color: #dc3545 !important;\n -webkit-text-fill-color: #dc3545 !important;\n opacity: 0.8 !important;\n display: block !important;\n text-align: end !important;\n font-size: 13px !important;\n margin-top: 5px !important;\n margin-bottom: 10px !important;\n}\n#sbz92 a.message_error:hover {\n opacity: 1 !important;\n color: #dc3545 !important;\n -webkit-text-fill-color: #dc3545 !important;\n}\n#sbz92 .message_error__text {\n display: inline-block !important;\n vertical-align: text-top !important;\n}\n#sbz92 .message_error__icon {\n display: inline-block !important;\n vertical-align: bottom !important;\n background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSIjZGMzNTQ1IiBzdHJva2U9IiNmZmYiIHN0cm9rZS13aWR0aD0iMyIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBjbGFzcz0iZmVhdGhlciBmZWF0aGVyLWFsZXJ0LWNpcmNsZSI+PGNpcmNsZSBjeD0iMTIiIGN5PSIxMiIgcj0iMTAiPjwvY2lyY2xlPjxsaW5lIHgxPSIxMiIgeTE9IjgiIHgyPSIxMiIgeTI9IjEyIj48L2xpbmU+PGxpbmUgeDE9IjEyIiB5MT0iMTYiIHgyPSIxMi4wMSIgeTI9IjE2Ij48L2xpbmU+PC9zdmc+Cgo=') !important;\n background-size: contain !important;\n background-repeat: no-repeat !important;\n background-position: center !important;\n width: 20px !important;\n height: 20px !important;\n}\n#sbz92 .image-attachment__img {\n width: 100% !important;\n margin: 5px 0 0 0 !important;\n border-radius: 7px !important;\n border: 1px solid #eeeeee !important;\n}\n#sbz92 .audio-attachment {\n width: 100% !important;\n margin: 5px 0 0 0 !important;\n height: 45px !important;\n display: inline !important;\n}\n#sbz92 .audio-attachment__audio {\n all: inherit !important;\n width: 100% !important;\n}\n#sbz92 .video-attachment {\n border-radius: 7px !important;\n width: 100% !important;\n margin: 5px 0 0 0 !important;\n}\n#sbz92 .video-attachment__video {\n all: inherit !important;\n width: 100% !important;\n}\n#sbz92 .info-message {\n text-align: center !important;\n color: #6c757d !important;\n -webkit-text-fill-color: #6c757d !important;\n margin: 10px !important;\n}\n#sbz92 .info-message--ended {\n padding-top: 16px !important;\n}\n#sbz92 .conversation-event {\n display: block !important;\n min-width: 0 !important;\n border: 0 !important;\n padding: 0 !important;\n margin: 0 !important;\n}\n#sbz92 .conversation-history-start {\n display: block !important;\n height: 1px !important;\n flex-shrink: 0 !important;\n}\n#sbz92 .message-user__container--send {\n transition: transform 260ms cubic-bezier(0.25, 0.46, 0.45, 0.94) !important;\n transform: translate3d(0, 0, 0) !important;\n}\n#sbz92 .message-user__container--send.message-user__container--enter {\n transform: translate3d(0, 14px, 0) !important;\n}\n@media (prefers-reduced-motion: reduce) {\n #sbz92 .message-user__container--send {\n transition: none !important;\n }\n #sbz92 .message-user__container--send.message-user__container--enter {\n transform: none !important;\n }\n}\n#sbz92 .conversation-event--history {\n filter: grayscale(0.8) !important;\n}\n#sbz92 .conversation-event--history + .conversation-event:not(.conversation-event--history)::before {\n content: '' !important;\n display: block !important;\n border-top: 2px solid '@primary_color_faded' !important;\n margin: 60px 40px !important;\n}\n#sbz92 .message-sender {\n margin-top: 10px !important;\n}\n#sbz92 .message-sender-avatar {\n border-radius: 50% !important;\n width: 25px !important;\n height: 25px !important;\n margin-right: 10px !important;\n}\n#sbz92 .message-sender-name {\n color: #495057 !important;\n -webkit-text-fill-color: #495057 !important;\n vertical-align: middle !important;\n}\n#sbz92 .message-system {\n text-align: center !important;\n margin: 10px !important;\n color: #6c757d !important;\n -webkit-text-fill-color: #6c757d !important;\n}\n#sbz92 .form-attachment {\n display: flex !important;\n flex-direction: column !important;\n padding: 10px !important;\n -webkit-box-shadow: 0 0 10px #dee2e6 !important;\n box-shadow: 0 0 10px #dee2e6 !important;\n border-radius: 7px !important;\n margin-top: 10px !important;\n}\n#sbz92 .form-attachment-field {\n display: flex !important;\n flex-direction: column !important;\n margin-bottom: 0px !important;\n}\n#sbz92 .form-attachment-field__title {\n color: #4c4c4c !important;\n -webkit-text-fill-color: #4c4c4c !important;\n}\n#sbz92 .form-attachment-field__text {\n width: 100% !important;\n border: 1px solid #dbdbdb !important;\n padding: 10px !important;\n margin: 3px 0px 0px 0px !important;\n border-radius: 7px !important;\n}\n#sbz92 .input--error {\n border: 1px solid red !important;\n}\n#sbz92 .input--success {\n background-color: #f9f9f9 !important;\n pointer-events: none !important;\n}\n#sbz92 .form-attachment-field__error {\n color: brown !important;\n -webkit-text-fill-color: brown !important;\n float: right !important;\n}\n#sbz92 .form-attachment-field__checkbox {\n width: 100% !important;\n all: inherit !important;\n -webkit-appearance: textfield !important;\n margin-right: 8px !important;\n}\n#sbz92 .form-attachment-field__checkbox:hover {\n cursor: pointer !important;\n}\n#sbz92 .form-attachment-field__list-item {\n display: flex !important;\n align-items: center !important;\n margin: 4px !important;\n margin-left: 0px !important;\n}\n#sbz92 .form-attachment-field__radio {\n width: 100% !important;\n all: inherit !important;\n -webkit-appearance: textfield !important;\n margin-right: 8px !important;\n}\n#sbz92 .form-attachment-field__datetime {\n width: 100% !important;\n border: 1px solid #dbdbdb !important;\n padding: 10px !important;\n margin: 3px 0px 0px 0px !important;\n border-radius: 7px !important;\n}\n#sbz92 .form-attachment--submit-btn {\n background-color: '@primary_color' !important;\n color: '@text_color' !important;\n -webkit-text-fill-color: '@text_color' !important;\n width: 100% !important;\n margin-top: 10px !important;\n border-radius: 7px !important;\n padding: 10px !important;\n text-align: center !important;\n font-size: 16px !important;\n}\n#sbz92 .form-attachment--submit-btn:hover {\n color: '@text_color' !important;\n -webkit-text-fill-color: '@text_color' !important;\n}\n#sbz92 .red {\n color: #dc3545 !important;\n -webkit-text-fill-color: #dc3545 !important;\n}\n#sbz92 .typing {\n background-color: #f4f5f7 !important;\n color: #7a7a7b !important;\n -webkit-text-fill-color: #7a7a7b !important;\n padding: 10px !important;\n opacity: 1 !important;\n transition: all 0.2s !important;\n position: absolute !important;\n bottom: 0px !important;\n left: 0px !important;\n width: 100% !important;\n}\n#sbz92 .typing--hidden {\n opacity: 0 !important;\n display: none !important;\n}\n#sbz92 .markdown-message img {\n max-width: 100% !important;\n margin-top: 10px !important;\n}\n#sbz92 .button-attachments {\n display: block !important;\n margin-top: 5px !important;\n}\n#sbz92 .url-button-attachment:first-child {\n border-top-left-radius: 7px !important;\n border-top-right-radius: 7px !important;\n}\n#sbz92 .url-button-attachment:last-child {\n border-bottom-left-radius: 7px !important;\n border-bottom-right-radius: 7px !important;\n border-bottom: 1px solid '@primary_color' !important;\n}\n#sbz92 .agent-message .url-button-attachment {\n text-decoration: none !important;\n padding: 10px 18px !important;\n display: block !important;\n text-align: center !important;\n color: #000 !important;\n -webkit-text-fill-color: #000 !important;\n border: 1px solid #000 !important;\n border-radius: 12px !important;\n text-overflow: ellipsis !important;\n overflow: hidden !important;\n font-weight: 500 !important;\n white-space: nowrap !important;\n}\n#sbz92 .agent-message .url-button-attachment:hover {\n color: '@primary_color' !important;\n -webkit-text-fill-color: '@primary_color' !important;\n border-color: '@primary_color' !important;\n}\n#sbz92 .message_quick_replies {\n display: flex !important;\n flex-wrap: wrap !important;\n flex-direction: column !important;\n}\n#sbz92 .message_quick_reply {\n cursor: pointer !important;\n position: relative !important;\n padding: 10px 18px !important;\n margin-top: 8px !important;\n color: #000 !important;\n -webkit-text-fill-color: #000 !important;\n border-radius: 12px !important;\n user-select: none !important;\n overflow: hidden !important;\n white-space: nowrap !important;\n width: fit-content !important;\n font-weight: 500 !important;\n max-width: 100% !important;\n text-overflow: ellipsis !important;\n border: 1px solid #000 !important;\n transition: all 100ms ease !important;\n}\n#sbz92 .message_quick_reply:hover {\n background: '@primary_color' !important;\n color: '@text_color' !important;\n -webkit-text-fill-color: '@text_color' !important;\n border-color: '@primary_color' !important;\n}\n#sbz92 .generic-attachment-container {\n position: relative !important;\n margin-top: 10px !important;\n}\n#sbz92 .generic-attachments {\n display: block !important;\n}\n#sbz92 .generic-attachment {\n display: flex !important;\n width: 100% !important;\n white-space: nowrap !important;\n overflow: hidden !important;\n user-select: none !important;\n cursor: grab !important;\n}\n#sbz92 .generic-attachment--element-content {\n flex: 1 !important;\n}\n#sbz92 .generic-attachment--element {\n border: 1px solid #d8d8d8 !important;\n background: white !important;\n border-radius: 7px !important;\n overflow: hidden !important;\n width: 220px !important;\n margin-right: 10px !important;\n vertical-align: top !important;\n display: flex !important;\n flex-direction: column !important;\n flex-shrink: 0 !important;\n}\n#sbz92 .generic-attachment--element:last-child {\n margin-right: 0 !important;\n}\n#sbz92 .generic-attachment--element .generic-attachment--element-img {\n width: 100% !important;\n height: 150px !important;\n object-fit: cover !important;\n}\n#sbz92 .generic-attachment--element .url-button-attachment {\n padding: 10px !important;\n display: block !important;\n padding-top: 9px !important;\n padding-bottom: 9px !important;\n text-align: center !important;\n border: none !important;\n border-top: 1px solid #d8d8d8 !important;\n border-radius: 0 !important;\n width: 100% !important;\n color: #0d6efd !important;\n -webkit-text-fill-color: #0d6efd !important;\n}\n#sbz92 .generic-attachment--element .url-button-attachment:hover {\n color: #024dbc !important;\n -webkit-text-fill-color: #024dbc !important;\n border-color: #d8d8d8 !important;\n}\n#sbz92 .generic-attachment--element .generic-attachment--element-title {\n padding: 0px 13px !important;\n margin-top: 13px !important;\n color: #000 !important;\n -webkit-text-fill-color: #000 !important;\n font-weight: 600 !important;\n font-size: 16px !important;\n line-height: 20px !important;\n white-space: normal !important;\n}\n#sbz92 .generic-attachment--element .generic-attachment--element-subtitle {\n padding: 0px 13px !important;\n color: gray !important;\n -webkit-text-fill-color: gray !important;\n margin-top: 5px !important;\n white-space: pre-wrap !important;\n display: -webkit-box !important;\n -webkit-line-clamp: 4 !important;\n -webkit-box-orient: vertical !important;\n overflow: hidden !important;\n text-overflow: ellipsis !important;\n}\n#sbz92 .generic-attachment--element.clickable {\n cursor: pointer !important;\n}\n#sbz92 .widget_body__events__error_msg {\n margin-top: 50px !important;\n color: #6c757d !important;\n -webkit-text-fill-color: #6c757d !important;\n text-align: center !important;\n}\n#sbz92 .widget_body__events__error_retry {\n margin-top: 10px !important;\n}\n#sbz92 .generic-attachment-navigator {\n position: absolute !important;\n top: 50% !important;\n transform: translateY(-50%) !important;\n cursor: pointer !important;\n width: 20px !important;\n font-size: 80px !important;\n display: flex !important;\n align-items: center !important;\n justify-content: center !important;\n color: rgba(255, 255, 255, 0.85) !important;\n -webkit-text-fill-color: rgba(255, 255, 255, 0.85) !important;\n text-shadow: 0 10px 25px rgba(0, 0, 0, 0.75) !important;\n z-index: 999 !important;\n user-select: none !important;\n}\n#sbz92 .generic-attachment-navigator:hover {\n text-shadow: 0 10px 20px rgba(0, 0, 0, 0.75) !important;\n color: #ffffff !important;\n -webkit-text-fill-color: #ffffff !important;\n}\n#sbz92 .generic-attachment-navigator.generic-attachment-navigator--disabled {\n display: none !important;\n}\n#sbz92 .generic-attachment-navigator.generic-attachment-navigator--left {\n left: 2px !important;\n}\n#sbz92 .generic-attachment-navigator.generic-attachment-navigator--right {\n right: 2px !important;\n}\n#sbz92 .generic-attachment-navigator-icon {\n font-size: 80px !important;\n}\n#sbz92 .order_attachment__product_img {\n width: 40px !important;\n height: 40px !important;\n margin-right: 10px !important;\n border-radius: 5px !important;\n flex-shrink: 0 !important;\n display: block !important;\n object-fit: contain !important;\n background: whitesmoke !important;\n}\n#sbz92 .order_attachment__product_name {\n text-overflow: ellipsis !important;\n white-space: nowrap !important;\n overflow: hidden !important;\n color: black !important;\n -webkit-text-fill-color: black !important;\n}\n#sbz92 .order_attachment__header {\n padding-bottom: 5px !important;\n border-bottom: 1px solid #ccc !important;\n margin-bottom: 5px !important;\n display: flex !important;\n align-items: center !important;\n justify-content: space-between !important;\n}\n#sbz92 .order_attachment__product_desc {\n text-overflow: ellipsis !important;\n white-space: nowrap !important;\n overflow: hidden !important;\n color: #999 !important;\n -webkit-text-fill-color: #999 !important;\n font-size: 13px !important;\n}\n#sbz92 .order_attachment__product {\n display: flex !important;\n align-items: center !important;\n margin-top: 5px !important;\n margin-bottom: 5 !important;\n}\n#sbz92 .order_attachment__text_sm {\n font-size: 13px !important;\n}\n#sbz92 .order_attachment__text_muted {\n color: #6c757d !important;\n -webkit-text-fill-color: #6c757d !important;\n}\n#sbz92 .order_attachment__text_truncate {\n text-overflow: ellipsis !important;\n white-space: nowrap !important;\n overflow: hidden !important;\n}\n#sbz92 .order_attachment {\n margin-top: 10px !important;\n color: black !important;\n -webkit-text-fill-color: black !important;\n border: 1px solid #aaa !important;\n background: white !important;\n border-radius: 8px !important;\n width: 220px !important;\n overflow-y: auto !important;\n overflow-x: hidden !important;\n padding: 10px !important;\n}\n#sbz92 .order_attachment__footer {\n margin-top: 10px !important;\n padding-top: 10px !important;\n border-top: 1px solid #ccc !important;\n}\n#sbz92 .order_attachment__total {\n font-size: 16px !important;\n}\n#sbz92 .order_attachment__label {\n font-size: 13px !important;\n color: #777 !important;\n -webkit-text-fill-color: #777 !important;\n margin-top: 10px !important;\n}\n#sbz92 .order_attachment__label.no_margin {\n margin-top: 0 !important;\n}\n#sbz92 .order_attachment.order_attachment__user {\n margin-right: 50px !important;\n align-self: flex-end !important;\n margin-right: 0 !important;\n margin-left: 50px !important;\n align-self: flex-start !important;\n}\n#sbz92 .product_attachment {\n margin-top: 10px !important;\n border: 1px solid #d8d8d8 !important;\n background: white !important;\n border-radius: 7px !important;\n overflow: hidden !important;\n width: 200px !important;\n display: inline-block !important;\n vertical-align: top !important;\n transition: all 0.1s !important;\n}\n#sbz92 .product_attachment.product_attachment__user {\n margin-right: 50px !important;\n align-self: flex-end !important;\n margin-right: 0 !important;\n margin-left: 50px !important;\n align-self: flex-start !important;\n}\n#sbz92 .product_attachment__img {\n width: 200px !important;\n height: 200px !important;\n border-bottom: 1px solid #d8d8d8 !important;\n object-fit: cover !important;\n display: block !important;\n}\n#sbz92 .product_attachment__price {\n padding-left: 10px !important;\n}\n#sbz92 .product_attachment__btns {\n margin-top: 5px !important;\n}\n#sbz92 .product_attachment__btn {\n border-top: 1px solid #d8d8d8 !important;\n display: flex !important;\n padding: 8px 10px !important;\n align-items: center !important;\n color: #000 !important;\n -webkit-text-fill-color: #000 !important;\n justify-content: center !important;\n cursor: pointer !important;\n text-transform: capitalize !important;\n}\n#sbz92 .product_attachment__btn:last-child {\n margin-right: 0 !important;\n}\n#sbz92 .product_attachment__btn:hover {\n color: '@primary_color' !important;\n -webkit-text-fill-color: '@primary_color' !important;\n}\n#sbz92 a.product_attachment__title {\n display: block !important;\n padding: 8px 10px 0 10px !important;\n font-weight: 500 !important;\n color: #000 !important;\n -webkit-text-fill-color: #000 !important;\n word-break: break-word !important;\n margin-bottom: 5px !important;\n}\n#sbz92 .product_attachment__subtitle {\n white-space: pre-wrap !important;\n display: -webkit-box !important;\n -webkit-line-clamp: 3 !important;\n -webkit-box-orient: vertical !important;\n overflow: hidden !important;\n padding: 5px 10px !important;\n color: #aaa !important;\n -webkit-text-fill-color: #aaa !important;\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n margin-bottom: 5px !important;\n}\n#sbz92 .product_attachment__btn_external_link {\n width: 16px !important;\n height: 16px !important;\n margin-left: 5px !important;\n margin-top: -2px !important;\n}\n#sbz92 .agent-convo-event-wrapper {\n max-width: 85% !important;\n margin-top: 5px !important;\n}\n#sbz92 .agent-convo-event-wrapper.full {\n max-width: 100% !important;\n}\n#sbz92 .agent-convo-event-inner {\n position: relative !important;\n display: inline-block !important;\n max-width: 100% !important;\n}\n#sbz92 .message-event-actions {\n position: absolute !important;\n bottom: -10px !important;\n opacity: 0.7 !important;\n left: calc(100% - 25px) !important;\n display: none !important;\n border: 1px solid #dee2e6 !important;\n background-color: white !important;\n border-radius: 4px !important;\n z-index: 10 !important;\n}\n#sbz92 .message-event-actions.ended {\n bottom: -10px !important;\n}\n#sbz92 .message-event-actions:hover {\n opacity: 1 !important;\n}\n#sbz92 .agent-convo-event-inner:hover .message-event-actions {\n display: flex !important;\n}\n#sbz92 .message-event-actions-static {\n display: none !important;\n margin-top: 2px !important;\n border: none !important;\n padding: 0 !important;\n gap: 4px !important;\n}\n#sbz92 .agent-convo-event-inner.last .message-event-actions {\n display: none !important;\n}\n#sbz92 .agent-convo-event-inner.last .message-event-actions-static {\n display: flex !important;\n position: absolute !important;\n bottom: -30px !important;\n left: 0 !important;\n z-index: 2 !important;\n}\n#sbz92 .agent-convo-event-inner.last .message-event-action-btn {\n padding: 0 !important;\n}\n#sbz92 .agent-convo-event-inner.last .message-event-action-btn .message-event-action-btn-svg {\n width: 24px !important;\n height: 24px !important;\n background-position: 2px 2px !important;\n background-size: 20px 20px !important;\n}\n#sbz92 .agent-convo-event-inner.last .message-event-action-btn.message-event-action-btn__dev {\n color: #6c757d !important;\n -webkit-text-fill-color: #6c757d !important;\n padding-right: 10px !important;\n border-radius: 5px !important;\n}\n#sbz92 .agent-convo-event-inner.last .message-event-action-btn.message-event-action-btn__dev .message-event-action-btn-svg {\n width: 24px !important;\n height: 24px !important;\n background-position: 2px 2px !important;\n background-size: 20px 20px !important;\n}\n#sbz92 .agent-convo-event-inner.last .message-event-action-btn.message-event-action-btn__dev:hover {\n color: #000 !important;\n -webkit-text-fill-color: #000 !important;\n}\n#sbz92 .agent-convo-event-inner.last .message-event-action-btn.message-event-action-btn__dev.message-event-action-btn_like.active {\n color: #34c759 !important;\n -webkit-text-fill-color: #34c759 !important;\n}\n#sbz92 .agent-convo-event-inner.last .message-event-action-btn.message-event-action-btn__dev.message-event-action-btn_like.active {\n color: #34c759 !important;\n -webkit-text-fill-color: #34c759 !important;\n}\n#sbz92 .message-event-action-btn.message-event-action-btn__dev:hover {\n background-color: unset !important;\n}\n#sbz92 .message-event-action-btn {\n display: flex !important;\n align-items: center !important;\n justify-content: center !important;\n cursor: pointer !important;\n padding: 2px !important;\n}\n#sbz92 .message-event-action-btn:hover {\n background-color: #ececec !important;\n}\n#sbz92 .message-event-action-btn.active:hover {\n background-color: #dbfde3 !important;\n}\n#sbz92 .message-event-action-btn.message-event-action-btn__dev {\n padding: 0px !important;\n}\n#sbz92 .message-event-action-btn.message-event-action-btn__dev:hover {\n background-color: unset !important;\n}\n#sbz92 .message-event-action-btn.message-event-action-btn__dev.active:hover {\n background-color: unset !important;\n}\n#sbz92 .message-event-action-btn .message-event-action-btn-svg {\n width: 20px !important;\n height: 20px !important;\n border-radius: 4px !important;\n background-position: 2px 2px !important;\n background-size: 16px 16px !important;\n background-repeat: no-repeat !important;\n background-position: center !important;\n}\n#sbz92 .message-event-action-btn-svg.like {\n background-image: url('data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiAgd2lkdGg9IjI0IiAgaGVpZ2h0PSIyNCIgIHZpZXdCb3g9IjAgMCAyNCAyNCIgIGZpbGw9Im5vbmUiICBzdHJva2U9IiM2Yzc1N2QiICBzdHJva2Utd2lkdGg9IjIiICBzdHJva2UtbGluZWNhcD0icm91bmQiICBzdHJva2UtbGluZWpvaW49InJvdW5kIiAgY2xhc3M9Imljb24gaWNvbi10YWJsZXIgaWNvbnMtdGFibGVyLW91dGxpbmUgaWNvbi10YWJsZXItdGh1bWItdXAiPjxwYXRoIHN0cm9rZT0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik03IDExdjhhMSAxIDAgMCAxIC0xIDFoLTJhMSAxIDAgMCAxIC0xIC0xdi03YTEgMSAwIDAgMSAxIC0xaDNhNCA0IDAgMCAwIDQgLTR2LTFhMiAyIDAgMCAxIDQgMHY1aDNhMiAyIDAgMCAxIDIgMmwtMSA1YTIgMyAwIDAgMSAtMiAyaC03YTMgMyAwIDAgMSAtMyAtMyIgLz48L3N2Zz4K') !important;\n}\n#sbz92 .message-event-action-btn-svg.dislike {\n background-image: url('data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiAgd2lkdGg9IjI0IiAgaGVpZ2h0PSIyNCIgIHZpZXdCb3g9IjAgMCAyNCAyNCIgIGZpbGw9Im5vbmUiICBzdHJva2U9IiM2Yzc1N2QiICBzdHJva2Utd2lkdGg9IjIiICBzdHJva2UtbGluZWNhcD0icm91bmQiICBzdHJva2UtbGluZWpvaW49InJvdW5kIiAgY2xhc3M9Imljb24gaWNvbi10YWJsZXIgaWNvbnMtdGFibGVyLW91dGxpbmUgaWNvbi10YWJsZXItdGh1bWItZG93biI+PHBhdGggc3Ryb2tlPSJub25lIiBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTcgMTN2LThhMSAxIDAgMCAwIC0xIC0xaC0yYTEgMSAwIDAgMCAtMSAxdjdhMSAxIDAgMCAwIDEgMWgzYTQgNCAwIDAgMSA0IDR2MWEyIDIgMCAwIDAgNCAwdi01aDNhMiAyIDAgMCAwIDIgLTJsLTEgLTVhMiAzIDAgMCAwIC0yIC0yaC03YTMgMyAwIDAgMCAtMyAzIiAvPjwvc3ZnPgo=') !important;\n}\n#sbz92 .message-event-action-btn-svg.info {\n background-image: url('data:image/svg+xml;base64,PHN2ZwogIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICB3aWR0aD0iMjQiCiAgaGVpZ2h0PSIyNCIKICB2aWV3Qm94PSIwIDAgMjQgMjQiCiAgZmlsbD0ibm9uZSIKICBzdHJva2U9IiM2Yzc1N2QiCiAgc3Ryb2tlLXdpZHRoPSIyIgogIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIKICBzdHJva2UtbGluZWpvaW49InJvdW5kIgo+CiAgPHBhdGggZD0iTTMgMTJhOSA5IDAgMSAwIDE4IDBhOSA5IDAgMCAwIC0xOCAwIiAvPgogIDxwYXRoIGQ9Ik0xMiA5aC4wMSIgLz4KICA8cGF0aCBkPSJNMTEgMTJoMXY0aDEiIC8+Cjwvc3ZnPgo=') !important;\n}\n#sbz92 .message-event-action-btn:hover .message-event-action-btn-svg.like {\n background-image: url('data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiAgd2lkdGg9IjI0IiAgaGVpZ2h0PSIyNCIgIHZpZXdCb3g9IjAgMCAyNCAyNCIgIGZpbGw9Im5vbmUiICBzdHJva2U9ImJsYWNrIiAgc3Ryb2tlLXdpZHRoPSIyIiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiAgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgIGNsYXNzPSJpY29uIGljb24tdGFibGVyIGljb25zLXRhYmxlci1vdXRsaW5lIGljb24tdGFibGVyLXRodW1iLXVwIj48cGF0aCBzdHJva2U9Im5vbmUiIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNNyAxMXY4YTEgMSAwIDAgMSAtMSAxaC0yYTEgMSAwIDAgMSAtMSAtMXYtN2ExIDEgMCAwIDEgMSAtMWgzYTQgNCAwIDAgMCA0IC00di0xYTIgMiAwIDAgMSA0IDB2NWgzYTIgMiAwIDAgMSAyIDJsLTEgNWEyIDMgMCAwIDEgLTIgMmgtN2EzIDMgMCAwIDEgLTMgLTMiIC8+PC9zdmc+Cg==') !important;\n}\n#sbz92 .message-event-action-btn:hover .message-event-action-btn-svg.dislike {\n background-image: url('data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiAgd2lkdGg9IjI0IiAgaGVpZ2h0PSIyNCIgIHZpZXdCb3g9IjAgMCAyNCAyNCIgIGZpbGw9Im5vbmUiICBzdHJva2U9ImJsYWNrIiAgc3Ryb2tlLXdpZHRoPSIyIiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiAgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgIGNsYXNzPSJpY29uIGljb24tdGFibGVyIGljb25zLXRhYmxlci1vdXRsaW5lIGljb24tdGFibGVyLXRodW1iLWRvd24iPjxwYXRoIHN0cm9rZT0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik03IDEzdi04YTEgMSAwIDAgMCAtMSAtMWgtMmExIDEgMCAwIDAgLTEgMXY3YTEgMSAwIDAgMCAxIDFoM2E0IDQgMCAwIDEgNCA0djFhMiAyIDAgMCAwIDQgMHYtNWgzYTIgMiAwIDAgMCAyIC0ybC0xIC01YTIgMyAwIDAgMCAtMiAtMmgtN2EzIDMgMCAwIDAgLTMgMyIgLz48L3N2Zz4K') !important;\n}\n#sbz92 .message-event-action-btn:hover .message-event-action-btn-svg.info {\n background-image: url('data:image/svg+xml;base64,PHN2ZwogIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICB3aWR0aD0iMjQiCiAgaGVpZ2h0PSIyNCIKICB2aWV3Qm94PSIwIDAgMjQgMjQiCiAgZmlsbD0ibm9uZSIKICBzdHJva2U9IiMwMDAiCiAgc3Ryb2tlLXdpZHRoPSIyIgogIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIKICBzdHJva2UtbGluZWpvaW49InJvdW5kIgo+CiAgPHBhdGggZD0iTTMgMTJhOSA5IDAgMSAwIDE4IDBhOSA5IDAgMCAwIC0xOCAwIiAvPgogIDxwYXRoIGQ9Ik0xMiA5aC4wMSIgLz4KICA8cGF0aCBkPSJNMTEgMTJoMXY0aDEiIC8+Cjwvc3ZnPgo=') !important;\n}\n#sbz92 .message-event-action-btn.active .message-event-action-btn-svg.like {\n background-image: url('data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiAgd2lkdGg9IjI0IiAgaGVpZ2h0PSIyNCIgIHZpZXdCb3g9IjAgMCAyNCAyNCIgIGZpbGw9IiMzNEM3NTkiICBjbGFzcz0iaWNvbiBpY29uLXRhYmxlciBpY29ucy10YWJsZXItZmlsbGVkIGljb24tdGFibGVyLXRodW1iLXVwIj48cGF0aCBzdHJva2U9Im5vbmUiIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMTMgM2EzIDMgMCAwIDEgMi45OTUgMi44MjRsLjAwNSAuMTc2djRoMmEzIDMgMCAwIDEgMi45OCAyLjY1bC4wMTUgLjE3NGwuMDA1IC4xNzZsLS4wMiAuMTk2bC0xLjAwNiA1LjAzMmMtLjM4MSAxLjYyNiAtMS41MDIgMi43OTYgLTIuODEgMi43OGwtLjE2NCAtLjAwOGgtOGExIDEgMCAwIDEgLS45OTMgLS44ODNsLS4wMDcgLS4xMTdsLjAwMSAtOS41MzZhMSAxIDAgMCAxIC41IC0uODY1YTIuOTk4IDIuOTk4IDAgMCAwIDEuNDkyIC0yLjM5N2wuMDA3IC0uMjAydi0xYTMgMyAwIDAgMSAzIC0zeiIgLz48cGF0aCBkPSJNNSAxMGExIDEgMCAwIDEgLjk5MyAuODgzbC4wMDcgLjExN3Y5YTEgMSAwIDAgMSAtLjg4MyAuOTkzbC0uMTE3IC4wMDdoLTFhMiAyIDAgMCAxIC0xLjk5NSAtMS44NWwtLjAwNSAtLjE1di03YTIgMiAwIDAgMSAxLjg1IC0xLjk5NWwuMTUgLS4wMDVoMXoiIC8+PC9zdmc+Cg==') !important;\n}\n#sbz92 .message-event-action-btn.active .message-event-action-btn-svg.dislike {\n background-image: url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzI0ODBfOTUpIj4KPHBhdGggZD0iTTEzIDIxLjAwNzlDMTMuNzY1IDIxLjAwOCAxNC41MDEyIDIwLjcxNTcgMTUuMDU3OSAyMC4xOTFDMTUuNjE0NyAxOS42NjYyIDE1Ljk0OTkgMTguOTQ4NiAxNS45OTUgMTguMTg0OUwxNiAxOC4wMDc5VjE0LjAwNzlIMThDMTguNzM1MSAxNC4wMDggMTkuNDQ0NyAxMy43MzgyIDE5Ljk5NCAxMy4yNDk3QzIwLjU0MzQgMTIuNzYxMiAyMC44OTQyIDEyLjA4OCAyMC45OCAxMS4zNTc5TDIwLjk5NSAxMS4xODQ5TDIxIDExLjAwNzlMMjAuOTggMTAuODExOUwxOS45NzQgNS43Nzk5MkMxOS41OTMgNC4xNTQ5MiAxOC40NzIgMi45ODM5MiAxNy4xNjQgMi45OTk5MkwxNyAzLjAwNzkySDlDOC43NTQ5MSAzLjAwNzk4IDguNTE4MzggMy4wOTgwNCA4LjMzNTMzIDMuMjYxMDFDOC4xNTIyNyAzLjQyMzk3IDguMDM1NDMgMy42NDg0OSA4LjAwNyAzLjg5MTkyTDggNC4wMDc5Mkw4LjAwMSAxMy41NDM5QzguMDAxIDEzLjcxOTUgOC4wNDcyMSAxMy44OTE5IDguMTM0OTggMTQuMDQzOUM4LjIyMjc1IDE0LjE5NTkgOC4zNDg5OCAxNC4zMjIyIDguNTAxIDE0LjQwOTlDOC45MjcyOSAxNC42NTYxIDkuMjg2NCAxNS4wMDM1IDkuNTQ2NjEgMTUuNDIxM0M5LjgwNjgyIDE1LjgzOTIgOS45NjAxMyAxNi4zMTQ3IDkuOTkzIDE2LjgwNTlMMTAgMTcuMDA3OVYxOC4wMDc5QzEwIDE4LjgwMzYgMTAuMzE2MSAxOS41NjY2IDEwLjg3ODcgMjAuMTI5MkMxMS40NDEzIDIwLjY5MTggMTIuMjA0NCAyMS4wMDc5IDEzIDIxLjAwNzlaIiBmaWxsPSIjMzMzMzMzIi8+CjxwYXRoIGQ9Ik01IDE0LjAwODFDNS4yNDQ5MyAxNC4wMDggNS40ODEzNCAxMy45MTgxIDUuNjY0MzcgMTMuNzU1M0M1Ljg0NzQxIDEzLjU5MjYgNS45NjQzNCAxMy4zNjgzIDUuOTkzIDEzLjEyNTFMNiAxMy4wMDgxVjQuMDA4MDZDNS45OTk5NyAzLjc2MzEyIDUuOTEwMDQgMy41MjY3MiA1Ljc0NzI4IDMuMzQzNjhDNS41ODQ1MyAzLjE2MDY1IDUuMzYwMjUgMy4wNDM3MSA1LjExNyAzLjAxNTA2TDUgMy4wMDgwNkg0QzMuNDk1MSAzLjAwNzkzIDMuMDA4ODQgMy4xOTg3OCAyLjYzODgxIDMuNTQyMjlDMi4yNjg3OCAzLjg4NTc5IDIuMDQyMzYgNC4zNTY1NCAyLjAwNSA0Ljg2MDA2TDIgNS4wMTAwNlYxMi4wMTAxQzIuMDAwMDkgMTIuNTE0NSAyLjE5MDc3IDEzLjAwMDIgMi41MzM4NCAxMy4zN0MyLjg3NjkgMTMuNzM5NyAzLjM0NzAyIDEzLjk2NjIgMy44NSAxNC4wMDQxTDQgMTQuMDA5MUw1IDE0LjAwODFaIiBmaWxsPSIjMzMzMzMzIi8+CjwvZz4KPGRlZnM+CjxjbGlwUGF0aCBpZD0iY2xpcDBfMjQ4MF85NSI+CjxyZWN0IHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0id2hpdGUiLz4KPC9jbGlwUGF0aD4KPC9kZWZzPgo8L3N2Zz4K') !important;\n}\n#sbz92 .inline-time {\n font-size: 13px !important;\n margin-top: 6px !important;\n color: #000 !important;\n -webkit-text-fill-color: #000 !important;\n font-weight: 500 !important;\n opacity: 0.4 !important;\n}\n#sbz92 .message-text-inline-image-wrapper {\n display: block !important;\n margin-top: 8px !important;\n margin-bottom: 8px !important;\n max-width: 100% !important;\n}\n#sbz92 .message-text-inline-image {\n width: 100% !important;\n}\n#sbz92 .text-message-ul {\n display: block !important;\n list-style-type: disc !important;\n margin-block-start: 8px !important;\n margin-block-end: 8px !important;\n padding-inline-start: 20px !important;\n}\n#sbz92 .text-message-ol {\n display: block !important;\n list-style-type: decimal !important;\n margin-block-start: 8px !important;\n margin-block-end: 8px !important;\n padding-inline-start: 20px !important;\n}\n#sbz92 .text-message-li {\n display: list-item !important;\n}\n#sbz92 .agent-message .text-message-link {\n color: #0d6efd !important;\n -webkit-text-fill-color: #0d6efd !important;\n font-weight: 400 !important;\n}\n#sbz92 .agent-message .text-message-link:hover {\n color: #024dbc !important;\n -webkit-text-fill-color: #024dbc !important;\n}\n#sbz92 .user-message .text-message-link {\n text-decoration: underline !important;\n text-decoration-color: rgba(255, 255, 255, 0.6) !important;\n text-underline-offset: 4px !important;\n}\n#sbz92 .user-message .text-message-link:hover {\n text-decoration-color: #fff !important;\n background-color: rgba(255, 255, 255, 0.08) !important;\n}\n#sbz92 .message-quote {\n padding: 6px 10px !important;\n border-left: 3px solid '@primary_color' !important;\n background-color: #dfdfdf !important;\n border-top-left-radius: 0 !important;\n border-bottom-left-radius: 0 !important;\n margin-bottom: 8px !important;\n max-width: 100% !important;\n}\n#sbz92 .message-quote-title {\n font-weight: 600 !important;\n font-size: 14px !important;\n text-overflow: ellipsis !important;\n white-space: nowrap !important;\n overflow: hidden !important;\n}\n#sbz92 .message-quote-content {\n opacity: 0.7 !important;\n color: '@secondary_color' !important;\n -webkit-text-fill-color: '@secondary_color' !important;\n font-size: 14px !important;\n text-overflow: ellipsis !important;\n white-space: nowrap !important;\n overflow: hidden !important;\n}\n#sbz92 .message-quote-inner-img {\n width: 36px !important;\n height: 36px !important;\n object-fit: cover !important;\n}\n#sbz92 .message-quote-inner {\n margin-left: 15px !important;\n flex: 1 !important;\n overflow: hidden !important;\n}\n#sbz92 .image-attachment.just-focused {\n box-shadow: 0 0 0 2px #000 !important;\n}\n#sbz92 .file-attachment.just-focused {\n box-shadow: 0 0 0 2px #000 !important;\n}\n#sbz92 .widget_body_empty_img {\n max-width: 150px !important;\n max-height: 150px !important;\n}\n#sbz92 .emoji {\n position: relative !important;\n width: 20px !important;\n height: 20px !important;\n background-size: 100% !important;\n background-repeat: no-repeat !important;\n border: none !important;\n display: inline-block !important;\n vertical-align: text-bottom !important;\n}\n#sbz92 .emoji--angry {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_1___ + ") !important;\n}\n#sbz92 .emoji--confused {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_2___ + ") !important;\n}\n#sbz92 .emoji--crying,\n#sbz92 .emoji--cry {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_3___ + ") !important;\n}\n#sbz92 .emoji--grinning {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_4___ + ") !important;\n}\n#sbz92 .emoji--heart_eyes,\n#sbz92 .emoji--heart-eyes {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_5___ + ") !important;\n}\n#sbz92 .emoji--neutral_face,\n#sbz92 .emoji--neutral {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_6___ + ") !important;\n}\n#sbz92 .emoji--disappointed,\n#sbz92 .emoji--sad {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_7___ + ") !important;\n}\n#sbz92 .emoji--sleepy {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_8___ + ") !important;\n}\n#sbz92 .emoji--smile,\n#sbz92 .emoji--smiling {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_9___ + ") !important;\n}\n#sbz92 .emoji--open_mouth,\n#sbz92 .emoji--surprised {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_10___ + ") !important;\n}\n#sbz92 .emoji--tired_face,\n#sbz92 .emoji--tired {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_11___ + ") !important;\n}\n#sbz92 .emoji--stuck_out_tongue,\n#sbz92 .emoji--tongue-out {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_12___ + ") !important;\n}\n#sbz92 .emoji--wink {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_13___ + ") !important;\n}\n#sbz92 .emoji--moyai {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_14___ + ") !important;\n}\n#sbz92 .emoji--dislike,\n#sbz92 .emoji--unlike,\n#sbz92 .emoji--thumbsdown {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_15___ + ") !important;\n}\n#sbz92 .emoji--like,\n#sbz92 .emoji--thumbsup {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_16___ + ") !important;\n}\n#sbz92 .emoji--ok_hand {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_17___ + ") !important;\n}\n#sbz92 .emoji--octopus {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_18___ + ") !important;\n}\n#sbz92 .emoji--pig2 {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_19___ + ") !important;\n}\n#sbz92 .emoji--wave {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_20___ + ") !important;\n}\n#sbz92 .emoji--mouse {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_21___ + ") !important;\n}\n#sbz92 .emoji--mouse2 {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_22___ + ") !important;\n}\n#sbz92 .emoji--rat {\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_23___ + ") !important;\n}\n#sbz92 .emoji-picker {\n display: flex !important;\n flex-direction: row !important;\n z-index: 20 !important;\n position: absolute !important;\n max-width: 240px !important;\n background: #fff !important;\n color: #000 !important;\n -webkit-text-fill-color: #000 !important;\n border-radius: 10px !important;\n box-shadow: 0px 5px 30px rgba(0, 0, 0, 0.15) !important;\n right: 15px !important;\n bottom: 55px !important;\n flex-wrap: wrap !important;\n padding: 10px !important;\n justify-content: space-between !important;\n align-items: center !important;\n}\n#sbz92 .emoji-picker--item {\n background-size: 100% !important;\n width: 30px !important;\n height: 30px !important;\n position: relative !important;\n background-repeat: no-repeat !important;\n display: inline-block !important;\n vertical-align: text-bottom !important;\n margin: 5px !important;\n cursor: pointer !important;\n transition: background-color 0.2s !important;\n}\n#sbz92 .emoji-picker-background-item {\n background-size: 50% !important;\n width: 40px !important;\n height: 40px !important;\n border-radius: 100% !important;\n}\n#sbz92 .emoji-picker-background-item:hover {\n background-color: #dee2e6 !important;\n}\n#sbz92 .convo-list {\n display: flex !important;\n flex-direction: column !important;\n flex: 1 !important;\n width: 100% !important;\n justify-content: space-between !important;\n overflow: auto !important;\n margin-top: -60px !important;\n padding-left: 22.5px !important;\n padding-right: 22.5px !important;\n}\n#sbz92 .convo-list--list {\n background: #fff !important;\n overflow-y: auto !important;\n overflow-x: hidden !important;\n}\n#sbz92 .convo-list--title {\n font-weight: 500 !important;\n color: #000 !important;\n -webkit-text-fill-color: #000 !important;\n background: #fff !important;\n border-bottom: 1px solid #f0f0f0 !important;\n padding: 15px !important;\n}\n#sbz92 .convo-list--container {\n border-radius: 10px !important;\n box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.1) !important;\n overflow: auto !important;\n display: flex !important;\n flex-direction: column !important;\n user-select: none !important;\n}\n#sbz92 .convo-list--footer {\n display: flex !important;\n flex-direction: column !important;\n align-items: center !important;\n margin-top: 22.5px !important;\n}\n#sbz92 .convo-list--convo-last-info {\n overflow: hidden !important;\n white-space: nowrap !important;\n justify-content: center !important;\n display: flex !important;\n flex-direction: column !important;\n flex: 1 !important;\n margin-left: 15px !important;\n}\n#sbz92 .convo-list--convo-last-message {\n font-weight: normal !important;\n flex: 1 !important;\n cursor: pointer !important;\n display: flex !important;\n width: 100% !important;\n overflow: hidden !important;\n align-items: center !important;\n}\n#sbz92 .convo-list--convo-last-mes {\n text-overflow: ellipsis !important;\n opacity: 0.6 !important;\n white-space: nowrap !important;\n overflow: hidden !important;\n font-weight: normal !important;\n}\n#sbz92 .convo-list--convo-title {\n text-overflow: ellipsis !important;\n white-space: nowrap !important;\n overflow: hidden !important;\n font-weight: 500 !important;\n}\n#sbz92 .convo-list--convo-completed {\n width: 14px !important;\n}\n#sbz92 .convo-list--convo-name {\n text-overflow: ellipsis !important;\n white-space: nowrap !important;\n overflow: hidden !important;\n flex: 1 !important;\n margin-right: 16px !important;\n cursor: pointer !important;\n}\n#sbz92 .convo-list--item {\n cursor: pointer !important;\n border-bottom: 1px solid '@primary_color_faded' !important;\n padding: 15px !important;\n display: flex !important;\n flex-direction: row !important;\n transition: background 0.15s ease !important;\n}\n#sbz92 .convo-list--item:hover {\n background: '@primary_color_faded' !important;\n}\n#sbz92 .convo-list--convo-time span {\n font-size: 14px !important;\n line-height: 20px !important;\n color: #000 !important;\n -webkit-text-fill-color: #000 !important;\n opacity: 0.6 !important;\n min-width: 70px !important;\n cursor: pointer !important;\n}\n#sbz92 .convo-list--item-unread {\n width: 8px !important;\n height: 8px !important;\n background: #dc3545 !important;\n border-radius: 50% !important;\n margin-left: 15px !important;\n align-self: center !important;\n}\n#sbz92 .convo-list--item-avatar {\n width: 32px !important;\n height: 32px !important;\n}\n#sbz92 .widget-body--empty {\n display: flex !important;\n flex: 1 !important;\n justify-content: center !important;\n align-items: center !important;\n flex-direction: column !important;\n}\n#sbz92 .widget-body--empty-text {\n color: #343a40 !important;\n -webkit-text-fill-color: #343a40 !important;\n margin-top: 30px !important;\n text-align: center !important;\n}\n#sbz92 .mobile .widget-container {\n border-radius: 0px !important;\n max-height: 100% !important;\n margin-bottom: 0 !important;\n top: auto !important;\n left: 0 !important;\n right: 0 !important;\n width: 100% !important;\n height: '@mobile_height' !important;\n opacity: 1 !important;\n transition: opacity 0.15s cubic-bezier(1, 0.5, 0.8, 1) !important;\n}\n#sbz92 .mobile .widget-container.widget-container--left {\n left: 0 !important;\n right: 0 !important;\n}\n#sbz92 .mobile .widget-container.widget-container--right {\n right: 0 !important;\n left: 0 !important;\n}\n#sbz92 .mobile .widget-container.widget-container--hide {\n top: -100vh !important;\n opacity: 0 !important;\n transition: opacity 0.15s cubic-bezier(1, 0.5, 0.8, 1), bottom 0.15s cubic-bezier(1, 0.5, 0.8, 1) !important;\n}\n#sbz92 .widget-container.widget-container--left {\n left: '@desktop_button.margin_x' !important;\n right: unset !important;\n}\n#sbz92 .widget-container.widget-container--right {\n right: '@desktop_button.margin_x' !important;\n left: unset !important;\n}\n#sbz92 .widget-container {\n max-height: 100% !important;\n max-height: '@desktop_widget_max_height' !important;\n max-width: 100% !important;\n background: #fff !important;\n z-index: '@z_index_3' !important;\n border-radius: 15px !important;\n box-shadow: 0 5px 25px 0 rgba(0, 0, 0, 0.13) !important;\n display: flex !important;\n flex-direction: column !important;\n align-items: center !important;\n position: '@widget_position' !important;\n margin-bottom: '@desktop_button.margin_y' !important;\n width: '@width' !important;\n height: '@height' !important;\n bottom: 0 !important;\n opacity: 1 !important;\n transform: translateY(0) !important;\n transition: transform 0.15s cubic-bezier(1, 0.5, 0.8, 1), opacity 0.2s cubic-bezier(1, 0.5, 0.8, 1), scale 0.15s ease !important;\n visibility: visible !important;\n overflow: hidden !important;\n}\n#sbz92 .widget-container.widget-container--full {\n max-height: 100% !important;\n height: 100% !important;\n margin-bottom: 0 !important;\n}\n#sbz92 .widget-container.widget-container--hide {\n opacity: 0 !important;\n transform: translateY(20px) !important;\n visibility: hidden !important;\n transition: transform 0.15s cubic-bezier(1, 0.5, 0.8, 1), opacity 0.1s cubic-bezier(1, 0.5, 0.8, 1), visibility 0.1s cubic-bezier(1, 0.5, 0.8, 1) !important;\n}\n#sbz92 .btn--start-convo {\n border-radius: 7px !important;\n flex-shrink: 0 !important;\n display: flex !important;\n align-items: center !important;\n justify-content: center !important;\n padding-left: 32px !important;\n padding-right: 32px !important;\n height: 42px !important;\n color: '@text_color' !important;\n -webkit-text-fill-color: '@text_color' !important;\n font-size: 16px !important;\n font-weight: 500 !important;\n line-height: 20px !important;\n text-align: center !important;\n background: '@primary_color' !important;\n width: 100% !important;\n text-overflow: ellipsis !important;\n white-space: nowrap !important;\n overflow: hidden !important;\n transition: filter 250ms ease !important;\n}\n#sbz92 .btn--start-convo::after {\n display: none !important;\n}\n#sbz92 .btn--start-convo:hover {\n filter: brightness(1.1) !important;\n}\n#sbz92 .btn--start-convo:disabled {\n opacity: 0.5 !important;\n cursor: default !important;\n pointer-events: none !important;\n}\n#sbz92 .widget-body.widget-body--none {\n display: none !important;\n}\n#sbz92 .widget-body {\n flex: 1 !important;\n flex-grow: 1 !important;\n z-index: -1 !important;\n width: 100% !important;\n overflow-y: auto !important;\n flex-direction: column !important;\n display: flex !important;\n position: relative !important;\n}\n#sbz92 .embed-chat .widget-body--events {\n width: 600px !important;\n margin: 0 auto !important;\n max-width: 100% !important;\n}\n#sbz92 .embed-chat .message-input {\n max-width: 600px !important;\n margin: 20px auto !important;\n}\n#sbz92 .embed-chat .widget-header--inner {\n max-width: 100% !important;\n width: 600px !important;\n}\n#sbz92 .embed-chat .widget-body--content {\n width: 600px !important;\n margin: 0 auto !important;\n max-width: 100% !important;\n}\n#sbz92 .embed-chat .convo-list {\n width: 600px !important;\n margin: 0 auto !important;\n max-width: 100% !important;\n}\n#sbz92 .widget-body--content {\n overflow-y: auto !important;\n overflow-x: hidden !important;\n flex: 1 !important;\n display: flex !important;\n flex-direction: column !important;\n position: relative !important;\n min-height: 0 !important;\n}\n#sbz92 .poweredby {\n margin-bottom: 15px !important;\n text-align: center !important;\n}\n#sbz92 .poweredby .poweredby--text {\n text-decoration: none !important;\n font-size: 13px !important;\n color: #7c7c7c !important;\n -webkit-text-fill-color: #7c7c7c !important;\n vertical-align: baseline !important;\n}\n#sbz92 .poweredby .poweredby--text .poweredby--subiz-logo {\n opacity: 0.7 !important;\n margin-top: -1px !important;\n height: 12px !important;\n}\n#sbz92 .poweredby .poweredby--text:hover {\n color: #333 !important;\n -webkit-text-fill-color: #333 !important;\n}\n#sbz92 .poweredby .poweredby--text:hover .poweredby--subiz-logo {\n opacity: 1 !important;\n}\n#sbz92 .empty-container {\n display: flex !important;\n justify-content: center !important;\n flex-direction: column !important;\n margin-top: 30px !important;\n margin-bottom: 30px !important;\n}\n#sbz92 .empty-desc {\n text-align: center !important;\n margin: 30px !important;\n color: #6c757d !important;\n -webkit-text-fill-color: #6c757d !important;\n}\n#sbz92 .chat-button--white-bg {\n display: none !important;\n z-index: -1 !important;\n}\n#sbz92 .chat-button--white-bg--mask-only {\n background: white !important;\n width: 66px !important;\n height: 66px !important;\n top: 2px !important;\n left: 2px !important;\n position: absolute !important;\n border-radius: 50% !important;\n display: block !important;\n}\n#sbz92 .mobile .chat-button--default {\n width: '@mobile_button.width' !important;\n height: '@mobile_button.height' !important;\n background: '@background' !important;\n border-radius: '@mobile_button.border_radius' !important;\n}\n#sbz92 .mobile .widget-layout {\n bottom: '@mobile_button.margin_y' !important;\n}\n#sbz92 .mobile .widget-layout.widget-layout--left {\n left: '@mobile_button.margin_x' !important;\n right: unset !important;\n}\n#sbz92 .mobile .widget-layout.widget-layout--right {\n right: '@mobile_button.margin_x' !important;\n left: unset !important;\n}\n#sbz92 .mobile .chat-button--img {\n min-width: '@mobile_button.width' !important;\n}\n#sbz92 .chat-button {\n cursor: pointer !important;\n position: relative !important;\n transform: scale(1) !important;\n transition: opacity 200ms ease-in, transform 250ms cubic-bezier(0.34, 1.5, 0.64, 1) !important;\n}\n#sbz92 .chat-button.hidden {\n visibility: hidden !important;\n opacity: 0 !important;\n transform: scale(0.2) !important;\n pointer-events: none !important;\n}\n@media (prefers-reduced-motion: reduce) {\n #sbz92 .chat-button {\n transition: none !important;\n }\n}\n#sbz92 .chat-button:not(.hidden):hover {\n filter: brightness(1.1) !important;\n transform: scale(1.05) !important;\n}\n#sbz92 .chat-button--img {\n opacity: 0 !important;\n min-width: '@desktop_button.width' !important;\n display: block !important;\n}\n#sbz92 .chat-button.chat-button--left {\n float: left !important;\n}\n#sbz92 .chat-button.chat-button--right {\n float: right !important;\n}\n#sbz92 .widget-layout {\n z-index: '@z_index_2' !important;\n position: '@widget_position' !important;\n bottom: '@desktop_button.margin_y' !important;\n transition: opacity 150ms !important;\n opacity: 1 !important;\n}\n#sbz92 .widget-layout.widget-layout--hidden {\n opacity: 0 !important;\n pointer-events: none !important;\n}\n#sbz92 .widget-layout.widget-layout--left {\n left: '@desktop_button.margin_x' !important;\n right: unset !important;\n}\n#sbz92 .widget-layout.widget-layout--right {\n right: '@desktop_button.margin_x' !important;\n left: unset !important;\n}\n#sbz92 .chat-button--unread {\n position: absolute !important;\n right: 0px !important;\n top: -5px !important;\n background: #dc3545 !important;\n padding-left: 5px !important;\n padding-right: 5px !important;\n padding-top: 2px !important;\n padding-bottom: 2px !important;\n border-radius: 5px !important;\n color: #fff !important;\n -webkit-text-fill-color: #fff !important;\n box-shadow: 0px 5px 30px rgba(0, 0, 0, 0.15) !important;\n}\n#sbz92 .widget-preview {\n z-index: '@z_index_3' !important;\n background: #fff !important;\n box-shadow: 0px 5px 30px rgba(0, 0, 0, 0.15) !important;\n border-radius: 15px !important;\n max-width: 100% !important;\n width: 340px !important;\n margin-bottom: 20px !important;\n}\n#sbz92 .widget-preview.widget-preview--hidden {\n display: none !important;\n}\n#sbz92 .widget-preview--btn-close {\n cursor: pointer !important;\n opacity: 0.5 !important;\n align-self: flex-start !important;\n background-color: #e5e5e5 !important;\n background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9IiMzMzMiIHN0cm9rZS13aWR0aD0iMi4yIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJmZWF0aGVyIGZlYXRoZXIteCI+PGxpbmUgeDE9IjE4IiB5MT0iNiIgeDI9IjYiIHkyPSIxOCI+PC9saW5lPjxsaW5lIHgxPSI2IiB5MT0iNiIgeDI9IjE4IiB5Mj0iMTgiPjwvbGluZT48L3N2Zz4K') !important;\n background-size: 16px 16px !important;\n background-repeat: no-repeat !important;\n background-position: center !important;\n width: 24px !important;\n height: 24px !important;\n display: block !important;\n border-radius: 100% !important;\n transition: background-color 0.2s !important;\n}\n#sbz92 .widget-preview--btn-close:hover {\n opacity: 1 !important;\n}\n#sbz92 .widget-preview--avatar {\n width: 45px !important;\n height: 45px !important;\n border: 1px solid rgba(31, 54, 90, 0.1) !important;\n border-radius: 100% !important;\n margin-right: 15px !important;\n}\n#sbz92 .widget-preview--body {\n display: flex !important;\n padding: 15px !important;\n}\n#sbz92 .widget-preview--title {\n display: block !important;\n font-size: 15px !important;\n color: black !important;\n -webkit-text-fill-color: black !important;\n margin-bottom: 5px !important;\n opacity: 0.7 !important;\n}\n#sbz92 .widget-preview--content {\n cursor: pointer !important;\n flex: 1 !important;\n overflow: hidden !important;\n}\n#sbz92 .widget-preview--message {\n white-space: pre-wrap !important;\n word-wrap: break-word !important;\n font-weight: 500 !important;\n font-size: 16px !important;\n display: block !important;\n margin: 0 !important;\n margin-bottom: 0px !important;\n max-height: 78px !important;\n overflow: hidden !important;\n}\n#sbz92 .widget-preview--action {\n border-top: 1px solid #f0f0f0 !important;\n cursor: pointer !important;\n padding: 13px !important;\n}\n#sbz92 .widget-preview--action-text {\n display: block !important;\n text-align: center !important;\n font-weight: 500 !important;\n font-size: 16px !important;\n color: '@primary_color' !important;\n -webkit-text-fill-color: '@primary_color' !important;\n margin: 0 !important;\n}\n#sbz92 .widget-internet-status {\n position: absolute !important;\n bottom: 0 !important;\n left: 0 !important;\n width: 100% !important;\n font-size: 14px !important;\n z-index: 10 !important;\n text-align: center !important;\n padding: 6px 5px !important;\n}\n#sbz92 .widget-internet-status.negative {\n background-color: #212325 !important;\n color: #fff !important;\n}\n#sbz92 .widget-internet-status.positive {\n background-color: #19b600 !important;\n color: #fff !important;\n}\n#sbz92 .widget-preview-text-message--header {\n display: flex !important;\n overflow: hidden !important;\n align-items: center !important;\n width: 100% !important;\n}\n#sbz92 .widget-preview-text-message--header .widget-preview--avatar {\n width: 24px !important;\n height: 24px !important;\n flex-shrink: 0 !important;\n margin-right: 10px !important;\n}\n#sbz92 .widget-preview-text-message--author {\n flex: 1 !important;\n overflow: hidden !important;\n display: flex !important;\n align-items: center !important;\n}\n#sbz92 .widget-preview-text-message--author .badge {\n margin-left: 10px !important;\n}\n#sbz92 .widget-preview-text-message--author-text {\n text-overflow: ellipsis !important;\n white-space: nowrap !important;\n overflow: hidden !important;\n line-height: 1.5 !important;\n color: '@secondary_color' !important;\n -webkit-text-fill-color: '@secondary_color' !important;\n}\n#sbz92 .widget-preview-text-message--content {\n margin-top: 10px !important;\n white-space: pre-wrap !important;\n}\n#sbz92 .widget-preview-quick-reply-wrapper {\n z-index: '@z_index_3' !important;\n width: 100% !important;\n margin-bottom: 15px !important;\n display: flex !important;\n flex-direction: column !important;\n align-items: flex-start !important;\n}\n#sbz92 .widget-preview-quick-reply-wrapper.right {\n align-items: flex-end !important;\n}\n#sbz92 .widget-preview-quick-reply-wrapper.horizontal {\n flex-direction: row !important;\n flex-wrap: wrap !important;\n align-items: center !important;\n gap: 10px !important;\n}\n#sbz92 .widget-preview-quick-reply-wrapper.horizontal.right {\n justify-content: flex-end !important;\n}\n#sbz92 .widget-preview-quick-reply-wrapper.horizontal.left {\n justify-content: flex-start !important;\n}\n#sbz92 .widget-preview-quick-reply-wrapper.horizontal .widget-preview-quick-reply-item {\n margin: 0 !important;\n max-width: 200px !important;\n overflow: hidden !important;\n text-overflow: ellipsis !important;\n white-space: nowrap !important;\n padding: 6px 15px !important;\n}\n#sbz92 .widget-preview-quick-reply-wrapper.horizontal .widget-preview-quick-reply-item:last-child {\n margin-bottom: 0 !important;\n}\n#sbz92 .widget-preview-quick-reply-item {\n border-radius: 20px !important;\n padding: 8px 20px !important;\n background: #fff !important;\n border: 1.5px solid !important;\n border-color: '@primary_color' !important;\n color: '@primary_color' !important;\n -webkit-text-fill-color: '@primary_color' !important;\n margin-bottom: 15px !important;\n cursor: pointer !important;\n transition: 0.3s ease !important;\n position: relative !important;\n}\n#sbz92 .widget-preview-quick-reply-item:last-child {\n margin-bottom: 0 !important;\n}\n#sbz92 .widget-preview-quick-reply-item:hover {\n color: #fff !important;\n -webkit-text-fill-color: #fff !important;\n background-color: '@primary_color' !important;\n}\n#sbz92 .widget-preview-image-wrapper {\n z-index: '@z_index_3' !important;\n width: 100% !important;\n margin-bottom: 15px !important;\n display: flex !important;\n flex-direction: column !important;\n align-items: flex-start !important;\n}\n#sbz92 .widget-preview-image-wrapper.right {\n align-items: flex-end !important;\n}\n#sbz92 .widget-preview-image-item {\n max-width: 300px !important;\n border-radius: 15px !important;\n box-shadow: 0px 5px 30px rgba(0, 0, 0, 0.15) !important;\n border: 1px solid #dee2e6 !important;\n overflow: hidden !important;\n cursor: pointer !important;\n}\n#sbz92 .widget-preview-image-item img {\n width: 100% !important;\n max-height: 300px !important;\n object-fit: cover !important;\n}\n#sbz92 .widget-preview-text-message {\n z-index: '@z_index_3' !important;\n background: #fff !important;\n box-shadow: 0px 5px 30px rgba(0, 0, 0, 0.15) !important;\n border-radius: 15px !important;\n max-width: 100% !important;\n min-width: 210px !important;\n margin-bottom: 15px !important;\n padding: 15px 20px !important;\n position: relative !important;\n cursor: pointer !important;\n}\n#sbz92 .widget-preview-text-message.right {\n border-bottom-right-radius: 8px !important;\n}\n#sbz92 .widget-preview-text-message.left {\n border-bottom-left-radius: 8px !important;\n}\n#sbz92 .widget-preview-new-wrapper {\n max-width: '@preview_max_width' !important;\n position: relative !important;\n opacity: 1 !important;\n transition: opacity 0.15s ease-in, transform 0.15s ease-in !important;\n transform: translateY(0) !important;\n}\n#sbz92 .widget-preview-new-wrapper.hidden {\n transform: translateY(20px) !important;\n transition: opacity 0.15s ease-out, transform 0.15s ease-out !important;\n opacity: 0 !important;\n}\n#sbz92 .widget-preview-new-wrapper:hover .widget-preview-x-wrapper {\n display: flex !important;\n}\n#sbz92 .widget-preview-x-wrapper {\n display: none !important;\n justify-content: flex-start !important;\n width: calc(100% + 40px) !important;\n position: absolute !important;\n padding: 15px 20px !important;\n left: -20px !important;\n bottom: 100% !important;\n}\n#sbz92 .widget-preview-x-wrapper.mobile {\n display: flex !important;\n}\n#sbz92 .widget-preview-x-wrapper.right {\n justify-content: flex-end !important;\n left: unset !important;\n right: -20px !important;\n}\n#sbz92 .widget-preview-x-wrapper .widget-preview--btn-close {\n opacity: 1 !important;\n width: 32px !important;\n height: 32px !important;\n border: 1px solid #ececec !important;\n box-shadow: 0px 5px 30px rgba(0, 0, 0, 0.15) !important;\n background-color: #00000040 !important;\n background-size: 16px 16px !important;\n background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9IiNlY2VjZWMiIHN0cm9rZS13aWR0aD0iMi4yIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJmZWF0aGVyIGZlYXRoZXIteCI+PGxpbmUgeDE9IjE4IiB5MT0iNiIgeDI9IjYiIHkyPSIxOCI+PC9saW5lPjxsaW5lIHgxPSI2IiB5MT0iNiIgeDI9IjE4IiB5Mj0iMTgiPjwvbGluZT48L3N2Zz4K') !important;\n}\n#sbz92 .widget-preview-x-wrapper .widget-preview--btn-close:hover {\n border-color: #fff !important;\n background-color: #00000066 !important;\n background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9IiNmZmYiIHN0cm9rZS13aWR0aD0iMi4yIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJmZWF0aGVyIGZlYXRoZXIteCI+PGxpbmUgeDE9IjE4IiB5MT0iNiIgeDI9IjYiIHkyPSIxOCI+PC9saW5lPjxsaW5lIHgxPSI2IiB5MT0iNiIgeDI9IjE4IiB5Mj0iMTgiPjwvbGluZT48L3N2Zz4K') !important;\n}\n#sbz92 .rating--overlay {\n position: absolute !important;\n height: 100% !important;\n width: 100% !important;\n background: black !important;\n opacity: 0.3 !important;\n top: 0 !important;\n left: 0 !important;\n border-bottom-left-radius: 15px !important;\n border-bottom-right-radius: 15px !important;\n z-index: 9 !important;\n}\n#sbz92 .rating {\n border-top-left-radius: 10px !important;\n border-top-right-radius: 10px !important;\n overflow: hidden !important;\n position: absolute !important;\n height: 400px !important;\n max-height: 80% !important;\n width: 100% !important;\n bottom: 0 !important;\n /* centering */\n left: 0 !important;\n background: white !important;\n border-bottom-left-radius: 15px !important;\n border-bottom-right-radius: 15px !important;\n z-index: 10 !important;\n}\n#sbz92 .rating .rating--comment {\n color: #000 !important;\n -webkit-text-fill-color: #000 !important;\n resize: none !important;\n margin-left: 20px !important;\n margin-right: 20px !important;\n border: 2px solid lightgray !important;\n border-radius: 5px !important;\n padding: 10px !important;\n height: 60px !important;\n min-height: 60px !important;\n}\n#sbz92 .rating .rating--close-btn {\n right: 20px !important;\n top: -2px !important;\n width: 22px !important;\n height: 22px !important;\n position: absolute !important;\n background-image: url('data:image/svg+xml,%3C?xml%20version%3D%221.0%22%20?%3E%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23acacac%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20class%3D%22feather%20feather-x%22%3E%3Cline%20x1%3D%2218%22%20y1%3D%226%22%20x2%3D%226%22%20y2%3D%2218%22%3E%3C/line%3E%3Cline%20x1%3D%226%22%20y1%3D%226%22%20x2%3D%2218%22%20y2%3D%2218%22%3E%3C/line%3E%3C/svg%3E') !important;\n cursor: pointer !important;\n}\n#sbz92 .rating .rating--close-btn:hover {\n background-image: url('data:image/svg+xml,%3C?xml%20version%3D%221.0%22%20?%3E%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23a0a0a0%22%20stroke-width%3D%222%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%20class%3D%22feather%20feather-x%22%3E%3Cline%20x1%3D%2218%22%20y1%3D%226%22%20x2%3D%226%22%20y2%3D%2218%22%3E%3C/line%3E%3Cline%20x1%3D%226%22%20y1%3D%226%22%20x2%3D%2218%22%20y2%3D%2218%22%3E%3C/line%3E%3C/svg%3E') !important;\n}\n#sbz92 .rating .rating--handle:hover .rating--thumb {\n background: #e0e0e0 !important;\n}\n#sbz92 .rating .rating--thumb {\n width: 70px !important;\n height: 6px !important;\n background: #eaeaea !important;\n border-radius: 5px !important;\n margin: 0 auto !important;\n cursor: grabbing !important;\n margin-top: 8px !important;\n margin-bottom: 20px !important;\n}\n#sbz92 .rating .rating--content {\n display: flex !important;\n flex: 1 !important;\n flex-grow: 1 !important;\n height: calc(100% - 40px) !important;\n flex-direction: column !important;\n justify-content: space-between !important;\n}\n#sbz92 .rating .rating--heading {\n margin: 0 !important;\n font-weight: 500 !important;\n font-size: 20px !important;\n line-height: 20px !important;\n text-align: center !important;\n flex-grow: 1 !important;\n position: relative !important;\n}\n#sbz92 .rating .rating--description {\n text-align: center !important;\n flex-grow: 1 !important;\n font-size: 15px !important;\n padding-left: 20px !important;\n padding-right: 20px !important;\n display: flex !important;\n align-items: center !important;\n margin-top: 10px !important;\n margin-bottom: 15px !important;\n}\n#sbz92 .rating .rating-faces-container {\n flex: 5 !important;\n display: flex !important;\n justify-content: space-around !important;\n align-items: center !important;\n margin: 10px 10px !important;\n}\n#sbz92 .rating .rating-face-container {\n padding: 15px !important;\n display: flex !important;\n flex-direction: column !important;\n align-items: center !important;\n cursor: pointer !important;\n border-radius: 10px !important;\n user-select: none !important;\n -webkit-transition: all 0.1s !important;\n transition: all 0.1s !important;\n}\n#sbz92 .rating .rating-face-container:hover {\n box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.1) !important;\n}\n#sbz92 .rating .rating-face--text {\n margin-top: 10px !important;\n margin-bottom: 0px !important;\n font-size: 13px !important;\n color: #4d4d4d !important;\n -webkit-text-fill-color: #4d4d4d !important;\n}\n#sbz92 .rating .rating-no-thanks {\n flex: 10 !important;\n text-align: center !important;\n cursor: pointer !important;\n display: flex !important;\n justify-content: center !important;\n align-items: flex-end !important;\n color: #acacac !important;\n -webkit-text-fill-color: #acacac !important;\n}\n#sbz92 .rating .rating-no-thanks:hover {\n color: black !important;\n -webkit-text-fill-color: black !important;\n}\n#sbz92 .text__danger {\n color: #dc3545 !important;\n}\n#sbz92 .extension--close-btn {\n background: #00000088 !important;\n border-radius: 8px !important;\n color: #ffffffaa !important;\n -webkit-text-fill-color: #ffffffaa !important;\n right: 10px !important;\n top: -35px !important;\n font-size: 14px !important;\n position: absolute !important;\n padding: 5px 15px !important;\n cursor: pointer !important;\n}\n#sbz92 .extension--close-btn:hover {\n background: #000000 !important;\n color: #ffffff !important;\n -webkit-text-fill-color: #ffffff !important;\n}\n#sbz92 .extension--handle {\n margin-bottom: 10px !important;\n}\n#sbz92 .extension--handle:hover .extension--thumb {\n background: #e0e0e0 !important;\n}\n#sbz92 .extension--thumb {\n width: 70px !important;\n cursor: grabbing !important;\n margin: 0 auto !important;\n height: 6px !important;\n background: #eaeaea !important;\n border-radius: 5px !important;\n flex: 1 !important;\n margin-top: 5px !important;\n}\n#sbz92 .extension {\n border-top-left-radius: 10px !important;\n position: absolute !important;\n border-top-right-radius: 10px !important;\n width: 100% !important;\n bottom: 0 !important;\n /* centering */\n left: 0 !important;\n border-bottom-left-radius: 15px !important;\n border-bottom-right-radius: 15px !important;\n display: flex !important;\n flex-direction: column !important;\n background: white !important;\n z-index: 10 !important;\n}\n#sbz92 .extension--overlay {\n position: absolute !important;\n height: 100% !important;\n width: 100% !important;\n background: black !important;\n opacity: 0.3 !important;\n top: 0 !important;\n left: 0 !important;\n border-bottom-left-radius: 15px !important;\n border-bottom-right-radius: 15px !important;\n z-index: 9 !important;\n}\n#sbz92 .order__footer {\n margin-top: 40px !important;\n color: #888 !important;\n -webkit-text-fill-color: #888 !important;\n display: flex !important;\n align-items: center !important;\n justify-content: center !important;\n margin-bottom: 20px !important;\n}\n#sbz92 .order__footer_delimiter {\n width: 1px !important;\n height: 15px !important;\n border-right: 1px solid #bbb !important;\n}\n#sbz92 .order__footer_link {\n padding: 0 10px !important;\n font-size: 14px !important;\n cursor: pointer !important;\n}\n#sbz92 .order__footer_link:hover {\n text-decoration: none !important;\n color: #555 !important;\n -webkit-text-fill-color: #555 !important;\n}\n#sbz92 .desktop.order {\n border-radius: 0 !important;\n width: 780px !important;\n margin: 0 auto !important;\n height: 100% !important;\n}\n#sbz92 .desktop.order .order_section__line {\n display: none !important;\n}\n#sbz92 .desktop.order .desktop_order__heading {\n line-height: 20px !important;\n}\n#sbz92 .desktop.order .order_attachment__product_img {\n width: 50px !important;\n height: 50px !important;\n}\n#sbz92 .desktop.order .order_label {\n font-weight: 500 !important;\n margin-top: 30px !important;\n margin-bottom: 10px !important;\n font-size: 16px !important;\n}\n#sbz92 .desktop.order .order_label:first-child {\n margin-top: 0 !important;\n}\n#sbz92 .desktop.order .order_recap {\n margin-top: 0px !important;\n background: #f4f4f4 !important;\n margin-top: 20px !important;\n width: 270px !important;\n box-shadow: 0 0 0 1px hsla(0, 0%, 69%, 0.2), 0 15px 35px 0 rgba(49, 49, 93, 0.08), 0 5px 15px 0 rgba(0, 0, 0, 0.06) !important;\n border-radius: 6px !important;\n background-color: #fff !important;\n padding: 32px 32px 20px !important;\n}\n#sbz92 .desktop.order .order_acc_header {\n display: flex !important;\n align-items: center !important;\n margin-top: 20px !important;\n}\n#sbz92 .desktop.order .order_acc_logo {\n height: 50px !important;\n}\n#sbz92 .desktop.order .order_acc_name {\n font-size: 16px !important;\n margin-left: 10px !important;\n border-left: 1px solid #aaa !important;\n padding-left: 10px !important;\n}\n#sbz92 .desktop.order .order_summary_line {\n align-items: center !important;\n overflow: hidden !important;\n padding: 5px 0 !important;\n display: flex !important;\n justify-content: space-between !important;\n}\n#sbz92 .desktop_order__content {\n display: flex !important;\n}\n#sbz92 .order {\n width: 100% !important;\n display: flex !important;\n flex-direction: column !important;\n background: white !important;\n z-index: 10 !important;\n}\n#sbz92 .order .ship_card {\n display: flex !important;\n align-items: center !important;\n overflow: hidden !important;\n width: 190px !important;\n cursor: pointer !important;\n padding: 10px 15px !important;\n box-shadow: none !important;\n border: 2px solid #eee !important;\n color: #777 !important;\n -webkit-text-fill-color: #777 !important;\n margin-top: 5px !important;\n border-radius: 8px !important;\n background: white !important;\n transition: all 150ms ease-out !important;\n}\n#sbz92 .order .ship_card:hover {\n color: #555 !important;\n -webkit-text-fill-color: #555 !important;\n border: 2px solid #aaa !important;\n}\n#sbz92 .order .ship_card.ship_card__active {\n color: #333 !important;\n -webkit-text-fill-color: #333 !important;\n border: 2px solid #777 !important;\n background: #fafafa !important;\n}\n#sbz92 .order .order_ship_icon {\n margin-top: -3px !important;\n width: 15px !important;\n height: 15px !important;\n opacity: 0.6 !important;\n}\n#sbz92 .order .card_section {\n margin-top: 20px !important;\n max-width: 500px !important;\n box-shadow: 0 0 0 1px hsla(0, 0%, 69%, 0.2), 0 15px 35px 0 rgba(49, 49, 93, 0.08), 0 5px 15px 0 rgba(0, 0, 0, 0.06) !important;\n border-radius: 6px !important;\n background-color: #fff !important;\n padding: 32px !important;\n}\n#sbz92 .order input[type='text'].form-control,\n#sbz92 .order input[type='number'].form-control,\n#sbz92 .order input[type='date'].form-control,\n#sbz92 .order textarea.form-control,\n#sbz92 .order select.form-control {\n background: #f4f4f4 !important;\n border: 1px solid transparent !important;\n padding: 7px 10px !important;\n}\n#sbz92 .order input[type='text'].form-control:hover,\n#sbz92 .order input[type='number'].form-control:hover,\n#sbz92 .order input[type='date'].form-control:hover,\n#sbz92 .order textarea.form-control:hover,\n#sbz92 .order select.form-control:hover {\n background: #f0f0f0 !important;\n}\n#sbz92 .order input[type='text'].form-control:focus,\n#sbz92 .order input[type='number'].form-control:focus,\n#sbz92 .order input[type='date'].form-control:focus,\n#sbz92 .order textarea.form-control:focus,\n#sbz92 .order select.form-control:focus,\n#sbz92 .order input[type='text'].form-control:active,\n#sbz92 .order input[type='number'].form-control:active,\n#sbz92 .order input[type='date'].form-control:active,\n#sbz92 .order textarea.form-control:active,\n#sbz92 .order select.form-control:active {\n background: #eee !important;\n}\n#sbz92 .order input[type='text'].form-control.err,\n#sbz92 .order input[type='number'].form-control.err,\n#sbz92 .order input[type='date'].form-control.err,\n#sbz92 .order textarea.form-control.err,\n#sbz92 .order select.form-control.err {\n background: #ffe6e6 !important;\n border: 1px solid #ff8a8a !important;\n}\n#sbz92 .order .form {\n box-shadow: none !important;\n border: none !important;\n padding: 0 !important;\n}\n#sbz92 .order .form .radio {\n height: unset !important;\n}\n#sbz92 .order .order--content {\n display: flex !important;\n flex: 1 !important;\n flex-direction: column !important;\n}\n#sbz92 .order .order--content-content {\n flex: 1 !important;\n overflow: auto !important;\n}\n#sbz92 .order .order--heading {\n margin: 0 !important;\n margin-top: 20px !important;\n padding-left: 20px !important;\n padding-right: 20px !important;\n padding-bottom: 8px !important;\n line-height: 20px !important;\n position: relative !important;\n}\n#sbz92 .order .order--header-desc {\n color: #6c757d !important;\n -webkit-text-fill-color: #6c757d !important;\n font-size: 13px !important;\n}\n#sbz92 .order .order__product_line {\n display: flex !important;\n overflow: hidden !important;\n}\n#sbz92 .order .order--footer {\n text-align: k center !important;\n cursor: pointer !important;\n display: flex !important;\n justify-content: center !important;\n align-items: flex-end !important;\n color: #acacac !important;\n -webkit-text-fill-color: #acacac !important;\n}\n#sbz92 .order .order--footer:hover {\n color: black !important;\n -webkit-text-fill-color: black !important;\n}\n#sbz92 .order .order_section_label {\n color: #444 !important;\n -webkit-text-fill-color: #444 !important;\n margin-bottom: 5px !important;\n text-transform: uppercase !important;\n font-size: 13px !important;\n font-weight: 500 !important;\n}\n#sbz92 .order .order_label {\n color: #444 !important;\n -webkit-text-fill-color: #444 !important;\n margin-bottom: 5px !important;\n text-transform: uppercase !important;\n font-size: 13px !important;\n font-weight: 500 !important;\n}\n#sbz92 .order .order_section {\n padding-left: 20px !important;\n padding-right: 20px !important;\n padding-bottom: 15px !important;\n padding-top: 15px !important;\n}\n#sbz92 .order .order_section__line {\n border-top: 4px solid #eee !important;\n width: 100% !important;\n}\n#sbz92 .order .order_summary_line {\n overflow: hidden !important;\n padding: 3px 0 !important;\n display: flex !important;\n justify-content: space-between !important;\n}\n#sbz92 .order .order_btn {\n width: 100% !important;\n}\n#sbz92 .order .order_tracking_link {\n text-decoration: underline !important;\n cursor: pointer !important;\n}\n#sbz92 .order .order_tracking_link:hover {\n color: '@primary_color' !important;\n -webkit-text-fill-color: '@primary_color' !important;\n}\n#sbz92 .order .order_tracking_link_icon {\n margin-top: -3px !important;\n width: 15px !important;\n height: 15px !important;\n}\n#sbz92 .order .order_shipping_provider_logo {\n width: 32px !important;\n height: 32px !important;\n margin-right: 10px !important;\n}\n#sbz92 .order .order_btn.order__btn__light {\n background: #f0f0f0 !important;\n color: black !important;\n -webkit-text-fill-color: black !important;\n border-radius: 6px !important;\n text-align: center !important;\n padding: 8px !important;\n cursor: pointer !important;\n}\n#sbz92 .order .order_btn.order__btn__light:hover {\n color: black !important;\n -webkit-text-fill-color: black !important;\n background: #ddd !important;\n}\n#sbz92 div.order__card {\n display: flex !important;\n padding: 15px !important;\n box-shadow: none !important;\n border: 2px solid #eee !important;\n margin-top: 10px !important;\n border-radius: 8px !important;\n background: #fafafa !important;\n}\n#sbz92 div.order__card.order__card__active {\n border: 2px solid #777 !important;\n background: white !important;\n}\n#sbz92 .order_form_label {\n margin-top: 10px !important;\n margin-bottom: 4px !important;\n}\n#sbz92 .btn-confirm-order {\n width: 100% !important;\n background: '@primary_color' !important;\n display: flex !important;\n align-items: center !important;\n border-radius: 5px !important;\n color: #fff !important;\n -webkit-text-fill-color: #fff !important;\n padding: 15px 10px !important;\n cursor: pointer !important;\n justify-content: center !important;\n font-weight: 500 !important;\n margin-top: 10px !important;\n}\n#sbz92 .btn-confirm-order:hover {\n background: #0053d4 !important;\n}\n#sbz92 .order__total {\n font-weight: 500 !important;\n font-size: 20px !important;\n color: '@primary_color' !important;\n -webkit-text-fill-color: '@primary_color' !important;\n}\n#sbz92 .btn-cancel-order {\n color: #666 !important;\n -webkit-text-fill-color: #666 !important;\n text-decoration: underline !important;\n display: inline-block !important;\n margin-top: 10px !important;\n cursor: pointer !important;\n}\n#sbz92 .btn-cancel-order:hover {\n color: #333 !important;\n -webkit-text-fill-color: #333 !important;\n}\n#sbz92 .order_status {\n text-transform: uppercase !important;\n background: black !important;\n color: white !important;\n -webkit-text-fill-color: white !important;\n display: inline-block !important;\n border-radius: 4px !important;\n padding: 6px 6px 4px 6px !important;\n line-height: 1 !important;\n font-weight: 500 !important;\n font-size: 12px !important;\n}\n#sbz92 .order_status.order_status__canceled {\n background: whitesmoke !important;\n color: #000 !important;\n -webkit-text-fill-color: #000 !important;\n}\n#sbz92 .order_status.order_status__cancel {\n background: whitesmoke !important;\n color: #000 !important;\n -webkit-text-fill-color: #000 !important;\n}\n#sbz92 .order_status.order_status__confirmed {\n background: '@primary_color' !important;\n color: white !important;\n -webkit-text-fill-color: white !important;\n}\n#sbz92 .order_status.order_status__shipping {\n background: #000 !important;\n color: white !important;\n -webkit-text-fill-color: white !important;\n}\n#sbz92 .order_status.order_status__fullfilled {\n background: #28a745 !important;\n color: white !important;\n -webkit-text-fill-color: white !important;\n}\n#sbz92 .order_status.order_status__hold {\n background: #dc3545 !important;\n color: white !important;\n -webkit-text-fill-color: white !important;\n}\n#sbz92 .order_status.order_status__draft {\n background: #ffc107 !important;\n color: white !important;\n -webkit-text-fill-color: white !important;\n}\n#sbz92 .order_status.order_status__open {\n background: #ffc107 !important;\n color: white !important;\n -webkit-text-fill-color: white !important;\n}\n#sbz92 .order_error {\n display: flex !important;\n flex-direction: column !important;\n align-items: center !important;\n justify-content: center !important;\n height: 100% !important;\n width: 100% !important;\n}\n#sbz92 .order_attachment__note {\n font-size: 14px !important;\n white-space: pre-wrap !important;\n overflow: hidden !important;\n text-overflow: ellipsis !important;\n display: -webkit-box !important;\n -webkit-line-clamp: 3 !important;\n -webkit-box-orient: vertical !important;\n}\n#sbz92 .dropdown_select {\n position: absolute !important;\n background: white !important;\n -webkit-box-shadow: 0 4px 16px rgba(0, 0, 0, 0.1) !important;\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.1) !important;\n border-radius: 5px !important;\n width: 150px !important;\n z-index: 20 !important;\n overflow: hidden !important;\n}\n#sbz92 .dropdown_select__overlay {\n top: 0 !important;\n overflow: hidden !important;\n position: absolute !important;\n background: #000000aa !important;\n z-index: 19 !important;\n left: 0 !important;\n right: 0 !important;\n bottom: 0 !important;\n}\n#sbz92 .dropdown_select__item {\n padding: 7px 10px !important;\n cursor: pointer !important;\n}\n#sbz92 .dropdown_select__item:hover {\n background: '@primary_color' !important;\n color: #fff !important;\n -webkit-text-fill-color: #fff !important;\n}\n#sbz92 .dropdown_select_filter {\n padding: 8px 10px !important;\n border-bottom: 1px solid #eee !important;\n position: relative !important;\n}\n#sbz92 .dropdown_select_filter:hover .dropdown_select_filter__icon {\n opacity: 1 !important;\n}\n#sbz92 .dropdown_select_filter_input {\n border-radius: 5px !important;\n width: 100% !important;\n display: block !important;\n background: #f4f4f4 !important;\n border: none !important;\n padding: 7px 10px !important;\n padding-left: 35px !important;\n}\n#sbz92 .dropdown_select_filter_input:hover {\n background: #f0f0f0 !important;\n}\n#sbz92 .dropdown_select_filter_input:focus,\n#sbz92 .dropdown_select_filter_input:active {\n background: #eee !important;\n}\n#sbz92 .dropdown_select_input {\n border-radius: 5px !important;\n overflow: hidden !important;\n cursor: pointer !important;\n flex-wrap: nowrap !important;\n display: flex !important;\n background: #f4f4f4 !important;\n border: 1px solid trasparent !important;\n padding: 7px 10px !important;\n height: 32px !important;\n min-width: 120px !important;\n width: 100% !important;\n}\n#sbz92 .dropdown_select_input:hover {\n background: #f0f0f0 !important;\n}\n#sbz92 .dropdown_select_input:focus,\n#sbz92 .dropdown_select_input:active {\n background: #eee !important;\n}\n#sbz92 .dropdown_select_input.err {\n background: #ffe6e6 !important;\n border: 1px solid #ff8a8a !important;\n}\n#sbz92 .dropdown_select__items {\n max-height: 300px !important;\n min-height: 100px !important;\n overflow-x: hidden !important;\n overflow-y: auto !important;\n}\n#sbz92 .dropdown_select_filter__icon {\n width: 22px !important;\n height: 15px !important;\n position: absolute !important;\n z-index: 2 !important;\n top: 15px !important;\n left: 18px !important;\n border-right: 1px solid #aaa !important;\n padding-right: 7px !important;\n opacity: 0.5 !important;\n}\n#sbz92 .dropdown_select_filter__empty {\n display: flex !important;\n align-items: center !important;\n justify-content: center !important;\n flex-direction: column !important;\n}\n#sbz92 .dropdown_select_filter__empty_img {\n height: 50px !important;\n margin-top: 10px !important;\n margin-bottom: 10px !important;\n}\n#sbz92 .dropdown_select__caret {\n width: 14px !important;\n margin-top: 3px !important;\n opacity: 0.6 !important;\n height: 15px !important;\n}\ndiv#sbz92 {\n all: initial;\n}\nbody div#sbz92 {\n all: initial !important;\n}\n", ""]);
|
|
3703
3762
|
// Exports
|
|
3704
3763
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
|
|
3705
3764
|
|
|
@@ -3866,6 +3925,13 @@ module.exports = __webpack_require__.p + "assets/img/done_gray.d7e8203.svg";
|
|
|
3866
3925
|
|
|
3867
3926
|
/***/ },
|
|
3868
3927
|
|
|
3928
|
+
/***/ 4218
|
|
3929
|
+
(module, __unused_webpack_exports, __webpack_require__) {
|
|
3930
|
+
|
|
3931
|
+
module.exports = __webpack_require__.p + "assets/img/dot_chat.335fd8a.svg";
|
|
3932
|
+
|
|
3933
|
+
/***/ },
|
|
3934
|
+
|
|
3869
3935
|
/***/ 6120
|
|
3870
3936
|
(module, __unused_webpack_exports, __webpack_require__) {
|
|
3871
3937
|
|
|
@@ -4414,6 +4480,11 @@ var done_gray_namespaceFn = () => {
|
|
|
4414
4480
|
return __webpack_require__(9150);
|
|
4415
4481
|
};
|
|
4416
4482
|
|
|
4483
|
+
// EXTERNAL MODULE: ./assets/img/dot_chat.svg
|
|
4484
|
+
var dot_chat_namespaceFn = () => {
|
|
4485
|
+
return __webpack_require__(4218);
|
|
4486
|
+
};
|
|
4487
|
+
|
|
4417
4488
|
// EXTERNAL MODULE: ./assets/img/empty.svg
|
|
4418
4489
|
var empty_namespaceFn = () => {
|
|
4419
4490
|
return __webpack_require__(9419);
|
|
@@ -4497,7 +4568,6 @@ let trackResponseFn = (param, done) => {
|
|
|
4497
4568
|
};
|
|
4498
4569
|
/* harmony default export */ const api = { default: (class {
|
|
4499
4570
|
constructor(ApiURL, FileURL) {
|
|
4500
|
-
_defineProperty(this, "sendBugReport", str => this.bugReq.post('/bugs', str));
|
|
4501
4571
|
_defineProperty(this, "listConversations", _ => this.apireq.addQuery('user_id', this.uid).addQuery('integration_id', `${this.accid}.subizv4.subikon`).get(`/accounts/${this.accid}/conversations`));
|
|
4502
4572
|
_defineProperty(this, "listMessages", (cid, limit, start_id) => this.apireq.addQuery('limit', limit).addQuery('start_id', start_id).get(`/accounts/${this.accid}/conversations/${cid}/messages`));
|
|
4503
4573
|
_defineProperty(this, "ajax", api_ajax);
|
|
@@ -4667,7 +4737,6 @@ let trackResponseFn = (param, done) => {
|
|
|
4667
4737
|
this.refreshLock = new util/* default */.A.Mutex();
|
|
4668
4738
|
this.FileURL = FileURL;
|
|
4669
4739
|
this.ApiURL = ApiURL;
|
|
4670
|
-
this.bugReq = api_ajax.setBaseUrl('https://api5.subiz.com.vn/4.1').setContentType('text/plain');
|
|
4671
4740
|
this.api41 = api_ajax.setBaseUrl('https://api.sbz.vn/4.1').withCredentials(true).setContentType('text/plain').beforeHook(jsonifyTextPlain).afterHook(trackResponseFn).beforeHook(trackRequestFn).setParser('json');
|
|
4672
4741
|
this.apireq = api_ajax.setBaseUrl(ApiURL).withCredentials(true).addQuery('v', '6').setContentType('text/plain').beforeHook(jsonifyTextPlain).afterHook(trackResponseFn).setParser('json').beforeHook(trackRequestFn).beforeHook((param, done) => {
|
|
4673
4742
|
if (this.token_generator) {
|
|
@@ -4908,7 +4977,7 @@ const LIMIT = 80;
|
|
|
4908
4977
|
}) }.default;
|
|
4909
4978
|
function lsdb_toString(obj) {
|
|
4910
4979
|
if (obj === undefined) return 'null';
|
|
4911
|
-
return
|
|
4980
|
+
return util/* default */.A.stringify(obj);
|
|
4912
4981
|
}
|
|
4913
4982
|
;// ./src/store/chain.js
|
|
4914
4983
|
const ChainMaxSize = 50;
|
|
@@ -5011,6 +5080,20 @@ class Chain {
|
|
|
5011
5080
|
this.cache[chain] = inmemItemM;
|
|
5012
5081
|
return {};
|
|
5013
5082
|
}
|
|
5083
|
+
merge(chain, items) {
|
|
5084
|
+
if (this.dead) return;
|
|
5085
|
+
const cached = this.cache[chain] || {};
|
|
5086
|
+
for (const item of items) {
|
|
5087
|
+
const node = {
|
|
5088
|
+
...item,
|
|
5089
|
+
chain,
|
|
5090
|
+
full_id: chain + ':' + item.id
|
|
5091
|
+
};
|
|
5092
|
+
cached[item.id] = node;
|
|
5093
|
+
this.db.put('items', node.full_id, node);
|
|
5094
|
+
}
|
|
5095
|
+
this.cache[chain] = cached;
|
|
5096
|
+
}
|
|
5014
5097
|
del(chain, id) {
|
|
5015
5098
|
if (this.dead) return;
|
|
5016
5099
|
let inmemItemM = this.cache[chain] || {};
|
|
@@ -5023,7 +5106,7 @@ class Chain {
|
|
|
5023
5106
|
}
|
|
5024
5107
|
async reload(chain, api) {
|
|
5025
5108
|
if (this.dead) return;
|
|
5026
|
-
let top = maxIndex(this.
|
|
5109
|
+
let top = maxIndex(this.cache[chain] || {}) || {};
|
|
5027
5110
|
let topindex = top.index;
|
|
5028
5111
|
if (!topindex) topindex = Date.now();
|
|
5029
5112
|
var lastanchor = '';
|
|
@@ -5040,7 +5123,12 @@ class Chain {
|
|
|
5040
5123
|
});
|
|
5041
5124
|
});
|
|
5042
5125
|
if (newItems.length === 0 || newanchor === lastanchor) break;
|
|
5043
|
-
|
|
5126
|
+
let minindexitem = minIndex(fetchedItems) || {};
|
|
5127
|
+
if (minindexitem.index <= topindex) {
|
|
5128
|
+
lastanchor = this.anchorCache[chain] || newanchor;
|
|
5129
|
+
break;
|
|
5130
|
+
}
|
|
5131
|
+
if (size(fetchedItems) >= 200) {
|
|
5044
5132
|
let inmemItemM = this.cache[chain] || {};
|
|
5045
5133
|
let removeids = [];
|
|
5046
5134
|
map(inmemItemM, item => {
|
|
@@ -5049,17 +5137,12 @@ class Chain {
|
|
|
5049
5137
|
});
|
|
5050
5138
|
this.db.removes('items', removeids);
|
|
5051
5139
|
this.cache[chain] = {};
|
|
5052
|
-
|
|
5053
|
-
}
|
|
5054
|
-
let minindexitem = minIndex(fetchedItems) || {};
|
|
5055
|
-
if (minindexitem.index <= topindex) {
|
|
5056
|
-
lastanchor = this.anchorCache[chain] || newanchor;
|
|
5140
|
+
lastanchor = newanchor;
|
|
5057
5141
|
break;
|
|
5058
5142
|
}
|
|
5059
5143
|
lastanchor = newanchor;
|
|
5060
5144
|
}
|
|
5061
|
-
for (
|
|
5062
|
-
let item = fetchedItems[Object.keys(fetchedItems)[i]];
|
|
5145
|
+
for (const item of Object.values(fetchedItems)) {
|
|
5063
5146
|
this.db.put('items', item.full_id, item);
|
|
5064
5147
|
this.cache[item.chain] = this.cache[item.chain] || {};
|
|
5065
5148
|
this.cache[item.chain][item.id] = item;
|
|
@@ -5095,7 +5178,7 @@ function maxIndex(obj) {
|
|
|
5095
5178
|
maxKey = keys[i];
|
|
5096
5179
|
}
|
|
5097
5180
|
}
|
|
5098
|
-
return obj[
|
|
5181
|
+
return obj[maxKey];
|
|
5099
5182
|
}
|
|
5100
5183
|
function map(collection, predicate) {
|
|
5101
5184
|
if (!collection) return [];
|
|
@@ -5161,21 +5244,16 @@ let KvMaxSize = 500;
|
|
|
5161
5244
|
inmemItemM[item.key] = item.value;
|
|
5162
5245
|
});
|
|
5163
5246
|
this.cache = inmemItemM;
|
|
5164
|
-
|
|
5165
|
-
if (allkeys.length > KvMaxSize) {
|
|
5166
|
-
let liveChance = KvMaxSize / 2 / allkeys.lenth;
|
|
5167
|
-
let removekeys = [];
|
|
5168
|
-
for (var i = 0; i < KvMaxSize; i++) {
|
|
5169
|
-
let live = Math.random() <= liveChance;
|
|
5170
|
-
if (live) continue;
|
|
5171
|
-
let key = allkeys[i];
|
|
5172
|
-
delete this.cache[key];
|
|
5173
|
-
removekeys.push(key);
|
|
5174
|
-
}
|
|
5175
|
-
this.db.removes('items', [removekeys]);
|
|
5176
|
-
}
|
|
5247
|
+
this.trimCache();
|
|
5177
5248
|
this.initialized = true;
|
|
5178
5249
|
}
|
|
5250
|
+
trimCache() {
|
|
5251
|
+
const keys = Object.keys(this.cache);
|
|
5252
|
+
if (keys.length <= KvMaxSize) return;
|
|
5253
|
+
const removed = keys.slice(0, keys.length - Math.floor(KvMaxSize / 2));
|
|
5254
|
+
for (const key of removed) delete this.cache[key];
|
|
5255
|
+
this.db.removes('items', removed);
|
|
5256
|
+
}
|
|
5179
5257
|
all() {
|
|
5180
5258
|
if (this.dead) return [];
|
|
5181
5259
|
if (!this.initialized) return [];
|
|
@@ -5195,6 +5273,7 @@ let KvMaxSize = 500;
|
|
|
5195
5273
|
key,
|
|
5196
5274
|
value
|
|
5197
5275
|
});
|
|
5276
|
+
this.trimCache();
|
|
5198
5277
|
}
|
|
5199
5278
|
del(key) {
|
|
5200
5279
|
if (this.dead) return;
|
|
@@ -5448,6 +5527,7 @@ function makeFakeMessages(accid, convoid, userid, agentid) {
|
|
|
5448
5527
|
}
|
|
5449
5528
|
}, {
|
|
5450
5529
|
id: 'evqyiyjmzatvtgpdmmpzwnwgn',
|
|
5530
|
+
source_event_id: 'wrueysyjbhqrkiwhsejpqrwqrdkkyaibajdw',
|
|
5451
5531
|
account_id: accid,
|
|
5452
5532
|
created: 1616213202685,
|
|
5453
5533
|
type: 'message_sent',
|
|
@@ -5461,7 +5541,6 @@ function makeFakeMessages(accid, convoid, userid, agentid) {
|
|
|
5461
5541
|
conversation_id: convoid,
|
|
5462
5542
|
text: 'Xin chào',
|
|
5463
5543
|
format: 'plaintext',
|
|
5464
|
-
idempotency_key: 'wrueysyjbhqrkiwhsejpqrwqrdkkyaibajdw',
|
|
5465
5544
|
integration_id: inteid,
|
|
5466
5545
|
pongs: [{
|
|
5467
5546
|
member_id: userid,
|
|
@@ -5598,6 +5677,29 @@ function makeFakeMessages(accid, convoid, userid, agentid) {
|
|
|
5598
5677
|
}
|
|
5599
5678
|
reconnect() {}
|
|
5600
5679
|
}) }.default;
|
|
5680
|
+
;// ./src/store/attachments.js
|
|
5681
|
+
async function uploadAttachments(attachments, upload) {
|
|
5682
|
+
let error, errorMessage;
|
|
5683
|
+
for (const attachment of attachments) {
|
|
5684
|
+
try {
|
|
5685
|
+
const result = await upload(attachment._file);
|
|
5686
|
+
if (result.body && result.body.code === 'invalid_field_size') {
|
|
5687
|
+
errorMessage = 'cannot_send_too_big_file';
|
|
5688
|
+
}
|
|
5689
|
+
if (result.error || !result.url) {
|
|
5690
|
+
error = error || result.error || 'upload_failed';
|
|
5691
|
+
continue;
|
|
5692
|
+
}
|
|
5693
|
+
attachment.url = result.url;
|
|
5694
|
+
} catch (err) {
|
|
5695
|
+
error = error || err;
|
|
5696
|
+
}
|
|
5697
|
+
}
|
|
5698
|
+
return {
|
|
5699
|
+
error,
|
|
5700
|
+
errorMessage
|
|
5701
|
+
};
|
|
5702
|
+
}
|
|
5601
5703
|
;// ./src/store/store.js
|
|
5602
5704
|
function store_defineProperty(e, r, t) { return (r = store_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
5603
5705
|
function store_toPropertyKey(t) { var i = store_toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
@@ -5610,6 +5712,7 @@ var store_flow = (flow_namespaceFn());
|
|
|
5610
5712
|
|
|
5611
5713
|
|
|
5612
5714
|
|
|
5715
|
+
|
|
5613
5716
|
var Realtime = (realtime_namespaceFn());
|
|
5614
5717
|
var cookie = (cookie_umd_namespaceFn());
|
|
5615
5718
|
cookie.defaults.path = '/';
|
|
@@ -5618,7 +5721,6 @@ cookie.defaults.expires = 3650;
|
|
|
5618
5721
|
let store_memlocalStorage = (inmem_localstorage_namespaceFn());
|
|
5619
5722
|
const MAX_CONVO = 20;
|
|
5620
5723
|
const page_loaded = util/* default */.A.Date.now();
|
|
5621
|
-
const DEBUG_ACCOUNT_IDS = ['acqsulrowbxiugvginhw', 'acryguzgwxmamhzmqlyx'];
|
|
5622
5724
|
class Store {
|
|
5623
5725
|
constructor(ApiURL, FileURL, RealtimeURL, inmem, fakeapi) {
|
|
5624
5726
|
store_defineProperty(this, "inmem", false);
|
|
@@ -5689,14 +5791,23 @@ class Store {
|
|
|
5689
5791
|
if (this._die) return dieErr;
|
|
5690
5792
|
await this.readyGate.entry();
|
|
5691
5793
|
await this.reconnectGate.entry(undefined, true);
|
|
5692
|
-
|
|
5693
|
-
|
|
5694
|
-
|
|
5695
|
-
|
|
5696
|
-
|
|
5697
|
-
|
|
5698
|
-
|
|
5699
|
-
|
|
5794
|
+
try {
|
|
5795
|
+
if (this._die || this.isInsync(cid)) return;
|
|
5796
|
+
this.convoFetchAfter = this.convoFetchAfter || {};
|
|
5797
|
+
if (util/* default */.A.Date.now() < (this.convoFetchAfter[cid] || 0)) return;
|
|
5798
|
+
this.convoFetchAfter[cid] = util/* default */.A.Date.now() + 15_000;
|
|
5799
|
+
let {
|
|
5800
|
+
body: convo,
|
|
5801
|
+
error
|
|
5802
|
+
} = await this.api.getConversation(cid);
|
|
5803
|
+
if (convo && !error) this._setConvo(convo);
|
|
5804
|
+
} catch (error) {
|
|
5805
|
+
return {
|
|
5806
|
+
error
|
|
5807
|
+
};
|
|
5808
|
+
} finally {
|
|
5809
|
+
this.reconnectGate.open();
|
|
5810
|
+
}
|
|
5700
5811
|
});
|
|
5701
5812
|
store_defineProperty(this, "list_provinces", () => this.api.list_provinces());
|
|
5702
5813
|
store_defineProperty(this, "list_districts", p => this.api.list_districts(p));
|
|
@@ -5707,25 +5818,48 @@ class Store {
|
|
|
5707
5818
|
if (id.startsWith('cslight')) return util/* default */.A.get(this.lightConvos, [id, 'events'], []);
|
|
5708
5819
|
return this.chain.listM(id);
|
|
5709
5820
|
});
|
|
5710
|
-
store_defineProperty(this, "fetchMoreEvents",
|
|
5711
|
-
|
|
5712
|
-
if (
|
|
5713
|
-
|
|
5714
|
-
|
|
5715
|
-
|
|
5716
|
-
|
|
5717
|
-
|
|
5718
|
-
|
|
5821
|
+
store_defineProperty(this, "fetchMoreEvents", (cid, limit = 150) => {
|
|
5822
|
+
this.historyRequests = this.historyRequests || new Map();
|
|
5823
|
+
if (this.historyRequests.has(cid)) return this.historyRequests.get(cid);
|
|
5824
|
+
this.historyFailures = this.historyFailures || {};
|
|
5825
|
+
const failure = this.historyFailures[cid];
|
|
5826
|
+
if (failure && util/* default */.A.Date.now() < failure.retryAt) return Promise.resolve({
|
|
5827
|
+
error: failure.error
|
|
5828
|
+
});
|
|
5829
|
+
const request = this._fetchMoreEvents(cid, limit).then(result => {
|
|
5830
|
+
if (result.error) this.historyFailures[cid] = {
|
|
5831
|
+
error: result.error,
|
|
5832
|
+
retryAt: util/* default */.A.Date.now() + 15_000
|
|
5833
|
+
};else delete this.historyFailures[cid];
|
|
5834
|
+
return result;
|
|
5835
|
+
}).finally(() => {
|
|
5836
|
+
if (this.historyRequests.get(cid) === request) this.historyRequests.delete(cid);
|
|
5837
|
+
});
|
|
5838
|
+
this.historyRequests.set(cid, request);
|
|
5839
|
+
return request;
|
|
5840
|
+
});
|
|
5841
|
+
store_defineProperty(this, "syncConvoEvents", cid => {
|
|
5842
|
+
if (this._die || !cid || cid.startsWith('cslight')) return Promise.resolve({});
|
|
5843
|
+
this.messageSyncRequests = this.messageSyncRequests || new Map();
|
|
5844
|
+
if (this.messageSyncRequests.has(cid)) return this.messageSyncRequests.get(cid);
|
|
5845
|
+
this.messageSyncNextAt = this.messageSyncNextAt || {};
|
|
5846
|
+
if (util/* default */.A.Date.now() < (this.messageSyncNextAt[cid] || 0)) return Promise.resolve({
|
|
5847
|
+
skipped: true
|
|
5848
|
+
});
|
|
5849
|
+
const chain = this.chain;
|
|
5850
|
+
const request = this._syncConvoEvents(cid, chain).then(result => {
|
|
5851
|
+
if (chain === this.chain && !this._die) {
|
|
5852
|
+
this.messageSyncFailures = this.messageSyncFailures || {};
|
|
5853
|
+
const failures = result.error ? Math.min((this.messageSyncFailures[cid] || 0) + 1, 4) : 0;
|
|
5854
|
+
this.messageSyncFailures[cid] = failures;
|
|
5855
|
+
this.messageSyncNextAt[cid] = util/* default */.A.Date.now() + (failures ? 15_000 * 2 ** (failures - 1) : 15_000);
|
|
5719
5856
|
}
|
|
5720
|
-
|
|
5721
|
-
|
|
5722
|
-
|
|
5723
|
-
|
|
5724
|
-
|
|
5725
|
-
|
|
5726
|
-
return out;
|
|
5727
|
-
}
|
|
5728
|
-
return this._doFetchMsg(convoid);
|
|
5857
|
+
return result;
|
|
5858
|
+
}).finally(() => {
|
|
5859
|
+
if (this.messageSyncRequests.get(cid) === request) this.messageSyncRequests.delete(cid);
|
|
5860
|
+
});
|
|
5861
|
+
this.messageSyncRequests.set(cid, request);
|
|
5862
|
+
return request;
|
|
5729
5863
|
});
|
|
5730
5864
|
store_defineProperty(this, "reloadConvoEvents", async convoid => {
|
|
5731
5865
|
await this.chain.reload(convoid, () => {
|
|
@@ -5742,10 +5876,10 @@ class Store {
|
|
|
5742
5876
|
error
|
|
5743
5877
|
};
|
|
5744
5878
|
});
|
|
5745
|
-
store_defineProperty(this, "_doFetchMsg", async convoid => {
|
|
5879
|
+
store_defineProperty(this, "_doFetchMsg", async (convoid, limit = 150) => {
|
|
5746
5880
|
let {
|
|
5747
5881
|
error
|
|
5748
|
-
} = await this.chain.fetchMore(convoid,
|
|
5882
|
+
} = await this.chain.fetchMore(convoid, limit, async (type, anchor, limit) => {
|
|
5749
5883
|
if (this.outofmsgM[convoid]) return [[], ''];
|
|
5750
5884
|
let [events, newanchor, error, outofmsg] = await this.listmessageapi(type, anchor, limit);
|
|
5751
5885
|
if (outofmsg) this.outofmsgM[convoid] = true;
|
|
@@ -5784,17 +5918,6 @@ class Store {
|
|
|
5784
5918
|
store_defineProperty(this, "now", () => util/* default */.A.Date.now() + this.timeDiff);
|
|
5785
5919
|
store_defineProperty(this, "seenQueue", []);
|
|
5786
5920
|
store_defineProperty(this, "matchTrafficSource", () => this.kv.match('traffic_source'));
|
|
5787
|
-
store_defineProperty(this, "sendBugReport", str => this.api.sendBugReport(str));
|
|
5788
|
-
store_defineProperty(this, "matchDebugAccountIds", () => DEBUG_ACCOUNT_IDS);
|
|
5789
|
-
store_defineProperty(this, "sbzListConversations", () => {
|
|
5790
|
-
return this.api.listConversations();
|
|
5791
|
-
});
|
|
5792
|
-
store_defineProperty(this, "sbzListMessages", cid => {
|
|
5793
|
-
return this.api.listMessages(cid, 100, '');
|
|
5794
|
-
});
|
|
5795
|
-
store_defineProperty(this, "listAgentRealtimeMessageSent", () => {
|
|
5796
|
-
return this.agent_rt_message_sent_dict;
|
|
5797
|
-
});
|
|
5798
5921
|
store_defineProperty(this, "_alreadyReceived", {});
|
|
5799
5922
|
store_defineProperty(this, "_typing", util/* default */.A.throttle(convoid => this.api.sendTyping(convoid), 3000, {
|
|
5800
5923
|
trailing: false
|
|
@@ -5830,7 +5953,6 @@ class Store {
|
|
|
5830
5953
|
this.CONNECTION_CHECK_INTERVAL = 3000;
|
|
5831
5954
|
this.reconnectTimestamp = 0;
|
|
5832
5955
|
this.g_sync = {};
|
|
5833
|
-
this.agent_rt_message_sent_dict = {};
|
|
5834
5956
|
this._die = false;
|
|
5835
5957
|
this.forceDevice = null;
|
|
5836
5958
|
this.forcePlugins = {};
|
|
@@ -5862,15 +5984,22 @@ class Store {
|
|
|
5862
5984
|
this.getLocaleContent = this.api.getLocaleContent;
|
|
5863
5985
|
this.g_haveSentSeenM = {};
|
|
5864
5986
|
this.last_focused = this.now();
|
|
5865
|
-
|
|
5987
|
+
this._onBlur = () => {
|
|
5988
|
+
if (this._die) return;
|
|
5866
5989
|
this.last_focused = this.now();
|
|
5867
5990
|
this.sendPresence();
|
|
5868
|
-
}
|
|
5869
|
-
|
|
5991
|
+
};
|
|
5992
|
+
this._onFocus = () => {
|
|
5993
|
+
if (this._die) return;
|
|
5870
5994
|
this.last_focused = 0;
|
|
5871
5995
|
this.sendPresence();
|
|
5872
|
-
}
|
|
5873
|
-
|
|
5996
|
+
};
|
|
5997
|
+
this._onBeforeUnload = () => {
|
|
5998
|
+
if (!this._die) this.api.sendLostFocus();
|
|
5999
|
+
};
|
|
6000
|
+
window.addEventListener('blur', this._onBlur);
|
|
6001
|
+
window.addEventListener('focus', this._onFocus);
|
|
6002
|
+
window.addEventListener('beforeunload', this._onBeforeUnload);
|
|
5874
6003
|
this._lastPresenceURL = window.location.href;
|
|
5875
6004
|
this._urlCheckInterval = util/* default */.A.setInterval(() => {
|
|
5876
6005
|
if (this._die) return util/* default */.A.clearInterval(this._urlCheckInterval);
|
|
@@ -5897,19 +6026,20 @@ class Store {
|
|
|
5897
6026
|
}
|
|
5898
6027
|
this.sendPresence();
|
|
5899
6028
|
}, 60000);
|
|
5900
|
-
onVisibilityChange(val => {
|
|
6029
|
+
this._visibilityCleanup = onVisibilityChange(val => {
|
|
5901
6030
|
if (this._die) return;
|
|
5902
6031
|
this.browserVisibility = val;
|
|
5903
6032
|
this.sendPresence();
|
|
5904
6033
|
});
|
|
5905
6034
|
this.loopTime();
|
|
5906
6035
|
this.device = this.getDeviceInfo();
|
|
5907
|
-
|
|
6036
|
+
this._gaInterval = util/* default */.A.setInterval(() => {
|
|
6037
|
+
if (this._die) return;
|
|
5908
6038
|
let user = this.cache.match('user') || {};
|
|
5909
6039
|
if (!user.id) return;
|
|
5910
6040
|
var dev = this.getDeviceInfo();
|
|
5911
6041
|
if (!dev.ga_tracking_ids || !dev.ga_client_id) return;
|
|
5912
|
-
util/* default */.A.clearInterval(_gaInterval);
|
|
6042
|
+
util/* default */.A.clearInterval(this._gaInterval);
|
|
5913
6043
|
this.device = dev;
|
|
5914
6044
|
let ga_client_id = dev.ga_client_id;
|
|
5915
6045
|
if (ga_client_id !== util/* default */.A.getUserAttr(user, 'ga_client_id', 'text')) {
|
|
@@ -5937,8 +6067,28 @@ class Store {
|
|
|
5937
6067
|
console.log('publish connectionStatus', this.connectionStatus);
|
|
5938
6068
|
this.pubsub.publish('connection');
|
|
5939
6069
|
}
|
|
6070
|
+
if (this.connectionStatus === 'active' && (this._needsMessageSync || currentStatus !== 'active')) {
|
|
6071
|
+
this._needsMessageSync = false;
|
|
6072
|
+
this.syncKnownConvoEvents();
|
|
6073
|
+
}
|
|
5940
6074
|
}
|
|
5941
6075
|
}
|
|
6076
|
+
syncKnownConvoEvents() {
|
|
6077
|
+
if (this._die) return Promise.resolve();
|
|
6078
|
+
if (this.knownConvoSyncRequest) return this.knownConvoSyncRequest;
|
|
6079
|
+
const chain = this.chain;
|
|
6080
|
+
const request = (async () => {
|
|
6081
|
+
const convos = util/* default */.A.filter(this.cache.all(), (value, key) => key.startsWith('convo_'));
|
|
6082
|
+
for (const convo of convos) {
|
|
6083
|
+
if (this._die || chain !== this.chain) break;
|
|
6084
|
+
await this.syncConvoEvents(convo.id);
|
|
6085
|
+
}
|
|
6086
|
+
})().finally(() => {
|
|
6087
|
+
if (this.knownConvoSyncRequest === request) this.knownConvoSyncRequest = null;
|
|
6088
|
+
});
|
|
6089
|
+
this.knownConvoSyncRequest = request;
|
|
6090
|
+
return request;
|
|
6091
|
+
}
|
|
5942
6092
|
linkProduct(p) {
|
|
5943
6093
|
if (!p) {
|
|
5944
6094
|
this._currentViewingProduct = {};
|
|
@@ -6082,7 +6232,90 @@ class Store {
|
|
|
6082
6232
|
async _touchAcc() {
|
|
6083
6233
|
if (this.isInsync('account')) return;
|
|
6084
6234
|
await this.readyGate.entry();
|
|
6085
|
-
if (!this.isInsync('account')) this.
|
|
6235
|
+
if (!this.isInsync('account')) this.refreshAccount();
|
|
6236
|
+
}
|
|
6237
|
+
refreshAccount() {
|
|
6238
|
+
if (this._die || util/* default */.A.Date.now() < (this.accountRefreshAfter || 0)) return;
|
|
6239
|
+
this.accountRefreshAfter = util/* default */.A.Date.now() + 30_000;
|
|
6240
|
+
return this.reconnect();
|
|
6241
|
+
}
|
|
6242
|
+
async _fetchMoreEvents(convoid, limit = 150) {
|
|
6243
|
+
if (!convoid || convoid.startsWith('cslight')) return {};
|
|
6244
|
+
await this.readyGate.entry();
|
|
6245
|
+
await this.reconnectGate.entry(undefined, true);
|
|
6246
|
+
try {
|
|
6247
|
+
if (this._die) return dieErr;
|
|
6248
|
+
const refresh = !this.isInsync('events' + convoid);
|
|
6249
|
+
if (refresh) {
|
|
6250
|
+
this.chain.anchorCache[convoid] = '';
|
|
6251
|
+
delete this.outofmsgM[convoid];
|
|
6252
|
+
}
|
|
6253
|
+
const out = await this._doFetchMsg(convoid, limit);
|
|
6254
|
+
if (!out.error) this.markSync('events' + convoid);
|
|
6255
|
+
return out;
|
|
6256
|
+
} catch (error) {
|
|
6257
|
+
return {
|
|
6258
|
+
error
|
|
6259
|
+
};
|
|
6260
|
+
} finally {
|
|
6261
|
+
this.reconnectGate.open();
|
|
6262
|
+
}
|
|
6263
|
+
}
|
|
6264
|
+
async _syncConvoEvents(cid, chain) {
|
|
6265
|
+
await this.readyGate.entry();
|
|
6266
|
+
await this.reconnectGate.entry(undefined, true);
|
|
6267
|
+
try {
|
|
6268
|
+
if (this._die || chain !== this.chain) return dieErr;
|
|
6269
|
+
this.messageSyncTimes = this.messageSyncTimes || {};
|
|
6270
|
+
this.messageSyncProgress = this.messageSyncProgress || {};
|
|
6271
|
+
let progress = this.messageSyncProgress[cid];
|
|
6272
|
+
if (!progress) {
|
|
6273
|
+
const cached = Object.values(chain.listM(cid));
|
|
6274
|
+
const boundary = this.messageSyncTimes[cid] || cached.reduce((min, ev) => Math.min(min, util/* default */.A.getMs(ev.created)), Infinity);
|
|
6275
|
+
progress = this.messageSyncProgress[cid] = {
|
|
6276
|
+
boundary,
|
|
6277
|
+
anchor: '',
|
|
6278
|
+
newest: 0,
|
|
6279
|
+
visited: new Set()
|
|
6280
|
+
};
|
|
6281
|
+
}
|
|
6282
|
+
for (let page = 0; page < 5; page++) {
|
|
6283
|
+
const wait = (this.nextMessageSyncRequestAt || 0) - util/* default */.A.Date.now();
|
|
6284
|
+
if (wait > 0) await util/* default */.A.sleep(wait);
|
|
6285
|
+
if (this._die || chain !== this.chain) return dieErr;
|
|
6286
|
+
this.nextMessageSyncRequestAt = util/* default */.A.Date.now() + 250;
|
|
6287
|
+
const [items, next, error, end] = await this.listmessageapi(cid, progress.anchor, 150);
|
|
6288
|
+
if (this._die || chain !== this.chain) return dieErr;
|
|
6289
|
+
if (error) return {
|
|
6290
|
+
error
|
|
6291
|
+
};
|
|
6292
|
+
chain.merge(cid, items);
|
|
6293
|
+
for (const item of items) progress.newest = Math.max(progress.newest, item.index);
|
|
6294
|
+
this.pubsub.publish('account');
|
|
6295
|
+
if (end || !items.length || items.some(item => item.index < progress.boundary)) {
|
|
6296
|
+
if (progress.newest) this.messageSyncTimes[cid] = progress.newest;
|
|
6297
|
+
delete this.messageSyncProgress[cid];
|
|
6298
|
+
return {};
|
|
6299
|
+
}
|
|
6300
|
+
progress.visited.add(progress.anchor);
|
|
6301
|
+
if (!next || progress.visited.has(next)) {
|
|
6302
|
+
delete this.messageSyncProgress[cid];
|
|
6303
|
+
return {
|
|
6304
|
+
error: 'message_cursor_stalled'
|
|
6305
|
+
};
|
|
6306
|
+
}
|
|
6307
|
+
progress.anchor = next;
|
|
6308
|
+
}
|
|
6309
|
+
return {
|
|
6310
|
+
pending: true
|
|
6311
|
+
};
|
|
6312
|
+
} catch (error) {
|
|
6313
|
+
return {
|
|
6314
|
+
error
|
|
6315
|
+
};
|
|
6316
|
+
} finally {
|
|
6317
|
+
this.reconnectGate.open();
|
|
6318
|
+
}
|
|
6086
6319
|
}
|
|
6087
6320
|
async init(accid, mask, userRef, options) {
|
|
6088
6321
|
this.g_sync = {};
|
|
@@ -6163,7 +6396,6 @@ class Store {
|
|
|
6163
6396
|
}
|
|
6164
6397
|
async _initResource(accid, auth, realtimep) {
|
|
6165
6398
|
this.g_sync = {};
|
|
6166
|
-
this._current_acc_id = accid;
|
|
6167
6399
|
let user = await this.api.setAuth(auth);
|
|
6168
6400
|
if (typeof sbz_info != 'undefined') sbz_info.store_7 = true;
|
|
6169
6401
|
if (user.error) {
|
|
@@ -6175,6 +6407,7 @@ class Store {
|
|
|
6175
6407
|
let lightConvos = this.kv.match('light_convos') || {};
|
|
6176
6408
|
this.lightConvos = {};
|
|
6177
6409
|
util/* default */.A.map(lightConvos, convo => {
|
|
6410
|
+
if (convo.light_type === 'widget' && (convo.account_id !== accid || convo.initial_by !== user.id)) return;
|
|
6178
6411
|
let in7Day = convo.created > util/* default */.A.Date.now() - 7 * 24 * 3_600_000;
|
|
6179
6412
|
let events = util/* default */.A.filter(convo.events, ev => ev.type === 'message_sent');
|
|
6180
6413
|
let messages = util/* default */.A.map(events, ev => util/* default */.A.get(ev, 'data.message') || {});
|
|
@@ -6188,8 +6421,10 @@ class Store {
|
|
|
6188
6421
|
if (this.fake) this.realtime = new realtime_fake();else this.realtime = new Realtime(this.RealtimeURL, realtimep, xhrsend, accid);
|
|
6189
6422
|
this.realtime.onEvent(this.onWs.bind(this));
|
|
6190
6423
|
this.realtime.onInterrupted(async () => {
|
|
6424
|
+
if (this._die) return;
|
|
6425
|
+
this._needsMessageSync = true;
|
|
6191
6426
|
await this.reconnectWs(accid, user.id);
|
|
6192
|
-
this.
|
|
6427
|
+
await this.refreshAccount();
|
|
6193
6428
|
});
|
|
6194
6429
|
if (typeof sbz_info != 'undefined') sbz_info.store_8 = true;
|
|
6195
6430
|
this.seenLoop();
|
|
@@ -6237,7 +6472,7 @@ class Store {
|
|
|
6237
6472
|
var lastmsgsent = events[util/* default */.A.size(events) - 1];
|
|
6238
6473
|
if (!lastmsgsent) return;
|
|
6239
6474
|
if (this.g_haveSentSeenM[lastmsgsent.id]) return;
|
|
6240
|
-
if (lastmsgsent.id === lastmsgsent.
|
|
6475
|
+
if (lastmsgsent.id === lastmsgsent.source_event_id) return;
|
|
6241
6476
|
this.pubsub.publish('events', {
|
|
6242
6477
|
created: this.now(),
|
|
6243
6478
|
type: 'message_pong',
|
|
@@ -6279,34 +6514,52 @@ class Store {
|
|
|
6279
6514
|
await this.realtime.subscribe([`conversation_state_updated.account.${accid}.user.${userid}`, `conversation_joined.account.${accid}.user.${userid}`, `conversation_typing.account.${accid}.user.${userid}`, `message_sent.account.${accid}.user.${userid}`, `message_pong.account.${accid}.user.${userid}`, `conversation_rating_requested.account.${accid}.user.${userid}`, `conversation_rated.account.${accid}.user.${userid}`, `conversation_events.account.${accid}.user.${userid}`]);
|
|
6280
6515
|
await this.readyGate.entry();
|
|
6281
6516
|
}
|
|
6282
|
-
|
|
6517
|
+
reconnect(p) {
|
|
6518
|
+
if (this.reconnectRequest) return this.reconnectRequest;
|
|
6519
|
+
const request = this._reconnect(p).finally(() => {
|
|
6520
|
+
if (this.reconnectRequest === request) this.reconnectRequest = null;
|
|
6521
|
+
});
|
|
6522
|
+
this.reconnectRequest = request;
|
|
6523
|
+
return request;
|
|
6524
|
+
}
|
|
6525
|
+
async _reconnect(p) {
|
|
6283
6526
|
if (this._die) return;
|
|
6284
6527
|
await this.reconnectGate.entry(undefined, true);
|
|
6285
|
-
|
|
6286
|
-
|
|
6287
|
-
|
|
6288
|
-
|
|
6289
|
-
|
|
6290
|
-
|
|
6291
|
-
|
|
6292
|
-
|
|
6293
|
-
|
|
6294
|
-
|
|
6295
|
-
|
|
6296
|
-
|
|
6297
|
-
|
|
6298
|
-
|
|
6299
|
-
|
|
6300
|
-
|
|
6301
|
-
|
|
6302
|
-
|
|
6303
|
-
|
|
6304
|
-
|
|
6305
|
-
|
|
6306
|
-
|
|
6307
|
-
|
|
6528
|
+
try {
|
|
6529
|
+
let fetchuser = p && p.user ? Promise.resolve({
|
|
6530
|
+
body: p.user
|
|
6531
|
+
}) : this.api.getUser();
|
|
6532
|
+
let outs = await Promise.all([fetchuser, this.api.getAccountSetting({
|
|
6533
|
+
bot_id: this.forceBotId
|
|
6534
|
+
})]);
|
|
6535
|
+
let error = util/* default */.A.find(outs, out => out.error);
|
|
6536
|
+
if (error) return error;
|
|
6537
|
+
let set = outs[1].body;
|
|
6538
|
+
set.user = outs[0].body;
|
|
6539
|
+
await this._setSetting(set);
|
|
6540
|
+
let convob = await this.api.listConversations();
|
|
6541
|
+
error = convob.error;
|
|
6542
|
+
let body = convob.body;
|
|
6543
|
+
if (!error) {
|
|
6544
|
+
let convos = util/* default */.A.get(body, 'conversations', []);
|
|
6545
|
+
util/* default */.A.map(this.cache.all(), (value, k) => {
|
|
6546
|
+
if (k.startsWith('convo_')) {
|
|
6547
|
+
if (this.now() - util/* default */.A.getMs(util/* default */.A.get(value, 'actived')) > 1209600000) this.cache.del(k);
|
|
6548
|
+
}
|
|
6549
|
+
});
|
|
6550
|
+
util/* default */.A.map(convos, convo => this._setConvo(convo));
|
|
6551
|
+
}
|
|
6552
|
+
if (error) return {
|
|
6553
|
+
error
|
|
6554
|
+
};
|
|
6555
|
+
this.markSync('account');
|
|
6556
|
+
} catch (error) {
|
|
6557
|
+
return {
|
|
6558
|
+
error
|
|
6559
|
+
};
|
|
6560
|
+
} finally {
|
|
6561
|
+
this.reconnectGate.open();
|
|
6308
6562
|
}
|
|
6309
|
-
return this.reconnectGate.open();
|
|
6310
6563
|
}
|
|
6311
6564
|
async submitForm(formid, data, user) {
|
|
6312
6565
|
await this.readyGate.entry();
|
|
@@ -6420,20 +6673,19 @@ class Store {
|
|
|
6420
6673
|
return this.api.sendEvent(e);
|
|
6421
6674
|
}
|
|
6422
6675
|
async onWs(ev) {
|
|
6423
|
-
await this.wsGate.entry();
|
|
6424
|
-
|
|
6425
|
-
|
|
6426
|
-
|
|
6427
|
-
|
|
6428
|
-
|
|
6429
|
-
|
|
6430
|
-
|
|
6431
|
-
|
|
6432
|
-
|
|
6433
|
-
|
|
6676
|
+
await this.wsGate.entry(undefined, true);
|
|
6677
|
+
try {
|
|
6678
|
+
await this._onWs(ev);
|
|
6679
|
+
} catch (error) {
|
|
6680
|
+
console.error(error);
|
|
6681
|
+
return {
|
|
6682
|
+
error
|
|
6683
|
+
};
|
|
6684
|
+
} finally {
|
|
6685
|
+
this.wsGate.open();
|
|
6686
|
+
}
|
|
6434
6687
|
}
|
|
6435
6688
|
async _onWs(ev) {
|
|
6436
|
-
this.handleLogCompare(ev);
|
|
6437
6689
|
if (this._die) return;
|
|
6438
6690
|
if (!ev || !ev.type) return;
|
|
6439
6691
|
ev.created = util/* default */.A.getMs(ev.created);
|
|
@@ -6507,7 +6759,7 @@ class Store {
|
|
|
6507
6759
|
}
|
|
6508
6760
|
}
|
|
6509
6761
|
if (util/* default */.A.startsWith(ev.type, 'message_') || util/* default */.A.startsWith(ev.type, 'conversation_')) {
|
|
6510
|
-
this.restConvoEvent(ev);
|
|
6762
|
+
await this.restConvoEvent(ev);
|
|
6511
6763
|
if (ev.type === 'message_sent' && util/* default */.A.get(ev, 'by.id') !== user.id) {
|
|
6512
6764
|
sendEventToThirdParty('SUBIZ Chat', 'Received', 'User');
|
|
6513
6765
|
}
|
|
@@ -6556,8 +6808,8 @@ class Store {
|
|
|
6556
6808
|
}
|
|
6557
6809
|
if (ev.type !== 'message_pong' && ev.type !== 'conversation_typing') {
|
|
6558
6810
|
if (ev.type === 'message_sent') {
|
|
6559
|
-
let
|
|
6560
|
-
let found = util/* default */.A.find(this.listEvents(cid), oldev => oldev.id ===
|
|
6811
|
+
let sourceEventId = util/* default */.A.get(ev, 'source_event_id');
|
|
6812
|
+
let found = util/* default */.A.find(this.listEvents(cid), oldev => oldev.id === sourceEventId);
|
|
6561
6813
|
if (found) {
|
|
6562
6814
|
this.chain.del(cid, found.id);
|
|
6563
6815
|
ev.created = found.created;
|
|
@@ -6583,6 +6835,58 @@ class Store {
|
|
|
6583
6835
|
delete this.lightConvos[id];
|
|
6584
6836
|
this.kv.put('light_convos', this.lightConvos);
|
|
6585
6837
|
}
|
|
6838
|
+
startWidgetConvo(greeting, locale) {
|
|
6839
|
+
const user = this.matchUser();
|
|
6840
|
+
const existing = util/* default */.A.find(this.lightConvos, convo => convo.light_type === 'widget' && convo.account_id === user.account_id && convo.initial_by === user.id);
|
|
6841
|
+
if (existing) return {
|
|
6842
|
+
convo: existing
|
|
6843
|
+
};
|
|
6844
|
+
const id = 'cslightwidget_' + util/* default */.A.randomString(24);
|
|
6845
|
+
const ev = util/* default */.A.cloneDeep(greeting);
|
|
6846
|
+
ev.data.message.conversation_id = id;
|
|
6847
|
+
const convo = {
|
|
6848
|
+
id,
|
|
6849
|
+
account_id: user.account_id,
|
|
6850
|
+
initial_by: user.id,
|
|
6851
|
+
locale,
|
|
6852
|
+
light_type: 'widget',
|
|
6853
|
+
state: 'pending',
|
|
6854
|
+
created: ev.created,
|
|
6855
|
+
members: [{
|
|
6856
|
+
id: user.id,
|
|
6857
|
+
type: 'user',
|
|
6858
|
+
seen_at: ev.created + 1
|
|
6859
|
+
}],
|
|
6860
|
+
events: [ev],
|
|
6861
|
+
last_message_sent: ev,
|
|
6862
|
+
touchpoint: {
|
|
6863
|
+
id,
|
|
6864
|
+
channel: 'subiz',
|
|
6865
|
+
source: 'web'
|
|
6866
|
+
}
|
|
6867
|
+
};
|
|
6868
|
+
this.lightConvos[id] = convo;
|
|
6869
|
+
this.kv.put('light_convos', this.lightConvos);
|
|
6870
|
+
this.pubsub.publish('account');
|
|
6871
|
+
return {
|
|
6872
|
+
convo
|
|
6873
|
+
};
|
|
6874
|
+
}
|
|
6875
|
+
promoteWidgetConvo(localId, cid) {
|
|
6876
|
+
this.widgetConvoOrigins = this.widgetConvoOrigins || {};
|
|
6877
|
+
this.widgetConvoOrigins[cid] = localId;
|
|
6878
|
+
const greeting = util/* default */.A.cloneDeep(util/* default */.A.get(this.lightConvos, [localId, 'events', 0]));
|
|
6879
|
+
if (greeting) {
|
|
6880
|
+
greeting.source_event_id = greeting.id;
|
|
6881
|
+
greeting.data.message.conversation_id = cid;
|
|
6882
|
+
this.chain.merge(cid, [{
|
|
6883
|
+
id: greeting.id,
|
|
6884
|
+
index: greeting.created,
|
|
6885
|
+
value: greeting
|
|
6886
|
+
}]);
|
|
6887
|
+
}
|
|
6888
|
+
this.deleteLightConvo(localId);
|
|
6889
|
+
}
|
|
6586
6890
|
startLightConvo(botid, messages, locale, is_testing, botversion) {
|
|
6587
6891
|
let convoid = 'cslight' + botid + '_' + this.now();
|
|
6588
6892
|
let user = this.cache.match('user') || {};
|
|
@@ -6676,10 +6980,10 @@ class Store {
|
|
|
6676
6980
|
}
|
|
6677
6981
|
async sendConvoEvent(cid, type, data) {
|
|
6678
6982
|
await this.readyGate.entry();
|
|
6679
|
-
var
|
|
6983
|
+
var sourceEventId = util/* default */.A.randomString(36);
|
|
6680
6984
|
let user = this.cache.match('user') || {};
|
|
6681
6985
|
var event = {
|
|
6682
|
-
id:
|
|
6986
|
+
id: sourceEventId,
|
|
6683
6987
|
by: {
|
|
6684
6988
|
id: user.id,
|
|
6685
6989
|
type: 'user',
|
|
@@ -6692,7 +6996,7 @@ class Store {
|
|
|
6692
6996
|
util/* default */.A.convoToEv(cid, event);
|
|
6693
6997
|
let files = [];
|
|
6694
6998
|
if (type === 'message_sent') {
|
|
6695
|
-
event.
|
|
6999
|
+
event.source_event_id = sourceEventId;
|
|
6696
7000
|
event.data.message.conversation_id = cid;
|
|
6697
7001
|
await store_flow.map(event.data.message.attachments, 2, async (att, i) => {
|
|
6698
7002
|
if (att.type !== 'file') return;
|
|
@@ -6712,18 +7016,9 @@ class Store {
|
|
|
6712
7016
|
}
|
|
6713
7017
|
this.onWs(event);
|
|
6714
7018
|
await this.convoGate.entry();
|
|
6715
|
-
await
|
|
6716
|
-
|
|
6717
|
-
|
|
6718
|
-
url,
|
|
6719
|
-
error
|
|
6720
|
-
} = await this.api.uploadToS3(att._file);
|
|
6721
|
-
if (util/* default */.A.get(body, 'code') == 'invalid_field_size') {
|
|
6722
|
-
event._error_message = 'cannot_send_too_big_file';
|
|
6723
|
-
}
|
|
6724
|
-
event._error = error;
|
|
6725
|
-
att.url = url;
|
|
6726
|
-
});
|
|
7019
|
+
const uploaded = await uploadAttachments(files, file => this.api.uploadToS3(file));
|
|
7020
|
+
event._error = uploaded.error;
|
|
7021
|
+
if (uploaded.errorMessage) event._error_message = uploaded.errorMessage;
|
|
6727
7022
|
if (event._error) return this.onWs(event);
|
|
6728
7023
|
if (cid && cid.startsWith('cslight')) return;
|
|
6729
7024
|
let {
|
|
@@ -6832,13 +7127,20 @@ class Store {
|
|
|
6832
7127
|
}
|
|
6833
7128
|
async listmessageapi(type, anchor, limit) {
|
|
6834
7129
|
let convoid = type;
|
|
6835
|
-
if (convoid && convoid.startsWith('cslight'))
|
|
7130
|
+
if (convoid && convoid.startsWith('cslight')) {
|
|
7131
|
+
let events = util/* default */.A.map(this.listEvents(convoid), ev => ({
|
|
7132
|
+
id: ev.id,
|
|
7133
|
+
index: ev.created,
|
|
7134
|
+
value: ev
|
|
7135
|
+
}));
|
|
7136
|
+
return [events, '', undefined, true];
|
|
7137
|
+
}
|
|
6836
7138
|
let {
|
|
6837
7139
|
body: events,
|
|
6838
7140
|
code,
|
|
6839
7141
|
error
|
|
6840
7142
|
} = await this.api.listMessages(convoid, -limit, anchor);
|
|
6841
|
-
if (error || code !== 200) return [[], anchor, error];
|
|
7143
|
+
if (error || code !== 200) return [[], anchor, error || 'message_fetch_failed'];
|
|
6842
7144
|
anchor = util/* default */.A.get(util/* default */.A.last(events), 'id');
|
|
6843
7145
|
events = util/* default */.A.map(events, event => {
|
|
6844
7146
|
event.created = util/* default */.A.getMs(event.created);
|
|
@@ -6867,17 +7169,18 @@ class Store {
|
|
|
6867
7169
|
async loopTime() {
|
|
6868
7170
|
if (this._die) return;
|
|
6869
7171
|
let startms = this.now();
|
|
6870
|
-
if (!this.cache || !util/* default */.A.get(this.cache.match('user'), 'id')) return util/* default */.A.setTimeout(() => this.loopTime(), 240000);
|
|
7172
|
+
if (!this.cache || !util/* default */.A.get(this.cache.match('user'), 'id')) return this._timeTimeout = util/* default */.A.setTimeout(() => this.loopTime(), 240000);
|
|
6871
7173
|
let {
|
|
6872
7174
|
body: t,
|
|
6873
7175
|
error
|
|
6874
7176
|
} = await this.api.time();
|
|
6875
|
-
if (
|
|
7177
|
+
if (this._die) return;
|
|
7178
|
+
if (error) return this._timeTimeout = util/* default */.A.setTimeout(() => this.loopTime(), 30000);
|
|
6876
7179
|
var latences = Math.abs(this.now() - startms) / 2;
|
|
6877
7180
|
var serverMs = new util/* default */.A.Date(t).getTime() + latences;
|
|
6878
7181
|
var localMs = this.now();
|
|
6879
7182
|
this.timeDiff = Math.floor(serverMs - localMs);
|
|
6880
|
-
util/* default */.A.setTimeout(() => this.loopTime(), 240000);
|
|
7183
|
+
this._timeTimeout = util/* default */.A.setTimeout(() => this.loopTime(), 240000);
|
|
6881
7184
|
}
|
|
6882
7185
|
replaceFileUrl(src) {
|
|
6883
7186
|
if (!src) return '';
|
|
@@ -6910,6 +7213,14 @@ class Store {
|
|
|
6910
7213
|
this.kv = new kv(new lsdb('sbz2023', this.inmem), 'kv');
|
|
6911
7214
|
if (this.chain) this.chain.destroy();
|
|
6912
7215
|
this.chain = new Chain(new lsdb('cbz2023', true), 'ch');
|
|
7216
|
+
this.outofmsgM = {};
|
|
7217
|
+
this.messageSyncTimes = {};
|
|
7218
|
+
this.messageSyncNextAt = {};
|
|
7219
|
+
this.messageSyncFailures = {};
|
|
7220
|
+
this.messageSyncProgress = {};
|
|
7221
|
+
this.accountRefreshAfter = 0;
|
|
7222
|
+
this.historyFailures = {};
|
|
7223
|
+
this.convoFetchAfter = {};
|
|
6913
7224
|
if (this.realtime) this.realtime.stop();
|
|
6914
7225
|
if (this.cache) this.cache.destroy();
|
|
6915
7226
|
this.pubsub.publish('destroy');
|
|
@@ -6918,14 +7229,22 @@ class Store {
|
|
|
6918
7229
|
return this._die;
|
|
6919
7230
|
}
|
|
6920
7231
|
destroy() {
|
|
7232
|
+
if (this._die) return;
|
|
6921
7233
|
this._die = true;
|
|
6922
7234
|
this.clearBrowserData();
|
|
6923
7235
|
util/* default */.A.clearInterval(this._seenInterval);
|
|
6924
7236
|
util/* default */.A.clearInterval(this._urlCheckInterval);
|
|
7237
|
+
util/* default */.A.clearInterval(this._presenceInterval1);
|
|
7238
|
+
util/* default */.A.clearInterval(this._presenceInterval2);
|
|
7239
|
+
util/* default */.A.clearInterval(this._gaInterval);
|
|
7240
|
+
util/* default */.A.clearTimeout(this._timeTimeout);
|
|
6925
7241
|
if (this.realtime) this.realtime.stop();
|
|
6926
|
-
this.readyGate.close();
|
|
6927
|
-
window.removeEventListener('blur', this.
|
|
6928
|
-
window.removeEventListener('focus', this.
|
|
7242
|
+
if (this.readyGate) this.readyGate.close();
|
|
7243
|
+
window.removeEventListener('blur', this._onBlur);
|
|
7244
|
+
window.removeEventListener('focus', this._onFocus);
|
|
7245
|
+
window.removeEventListener('beforeunload', this._onBeforeUnload);
|
|
7246
|
+
if (this._visibilityCleanup) this._visibilityCleanup();
|
|
7247
|
+
this.pubsub.clear();
|
|
6929
7248
|
}
|
|
6930
7249
|
}
|
|
6931
7250
|
function loadImage(file) {
|
|
@@ -6949,7 +7268,23 @@ function loadImage(file) {
|
|
|
6949
7268
|
const ImageTypes = ['image/gif', 'image/jpeg', 'image/png', 'image/svg+xml'];
|
|
6950
7269
|
function onVisibilityChange(cb) {
|
|
6951
7270
|
var hidden = 'hidden';
|
|
6952
|
-
|
|
7271
|
+
let target = document,
|
|
7272
|
+
eventName;
|
|
7273
|
+
let previous = {};
|
|
7274
|
+
if (hidden in document) eventName = 'visibilitychange';else if ((hidden = 'mozHidden') in document) eventName = 'mozvisibilitychange';else if ((hidden = 'webkitHidden') in document) eventName = 'webkitvisibilitychange';else if ((hidden = 'msHidden') in document) eventName = 'msvisibilitychange';else if ('onfocusin' in document) {
|
|
7275
|
+
previous = {
|
|
7276
|
+
onfocusin: document.onfocusin,
|
|
7277
|
+
onfocusout: document.onfocusout
|
|
7278
|
+
};
|
|
7279
|
+
document.onfocusin = document.onfocusout = onchange;
|
|
7280
|
+
} else {
|
|
7281
|
+
target = window;
|
|
7282
|
+
for (const key of ['onpageshow', 'onpagehide', 'onfocus', 'onblur']) {
|
|
7283
|
+
previous[key] = window[key];
|
|
7284
|
+
window[key] = onchange;
|
|
7285
|
+
}
|
|
7286
|
+
}
|
|
7287
|
+
if (eventName) target.addEventListener(eventName, onchange);
|
|
6953
7288
|
function onchange(evt) {
|
|
6954
7289
|
var v = 'visible';
|
|
6955
7290
|
var h = 'hidden';
|
|
@@ -6967,6 +7302,12 @@ function onVisibilityChange(cb) {
|
|
|
6967
7302
|
if (document[hidden] !== undefined) onchange({
|
|
6968
7303
|
type: document[hidden] ? 'blur' : 'focus'
|
|
6969
7304
|
});
|
|
7305
|
+
return () => {
|
|
7306
|
+
if (eventName) target.removeEventListener(eventName, onchange);
|
|
7307
|
+
for (const key of Object.keys(previous)) {
|
|
7308
|
+
if (target[key] === onchange) target[key] = previous[key];
|
|
7309
|
+
}
|
|
7310
|
+
};
|
|
6970
7311
|
}
|
|
6971
7312
|
const inmemCookie = {
|
|
6972
7313
|
data: {},
|
|
@@ -7114,6 +7455,7 @@ var chatbox_block = __webpack_require__(7072);
|
|
|
7114
7455
|
|
|
7115
7456
|
|
|
7116
7457
|
var defaultBubble = (bubble_default_namespaceFn());
|
|
7458
|
+
const dotChatIcon = (dot_chat_namespaceFn());
|
|
7117
7459
|
let defaultAvatar = (default_avatar_namespaceFn());
|
|
7118
7460
|
|
|
7119
7461
|
|
|
@@ -7451,22 +7793,7 @@ class ChatButton extends common/* Com */.Mw {
|
|
|
7451
7793
|
}, reply.title);
|
|
7452
7794
|
})));
|
|
7453
7795
|
}
|
|
7454
|
-
|
|
7455
|
-
let accountSetting = this.props.plugin.chatbox;
|
|
7456
|
-
accountSetting = this.fixMissingSetting(accountSetting);
|
|
7457
|
-
let imgsrc = util/* default */.A.get(accountSetting, 'desktop_button.background_image_url') || util/* default */.A.get(accountSetting, 'desktop_button.background_mask_url') || defaultBubble;
|
|
7458
|
-
if (this.props.store.isMobile()) {
|
|
7459
|
-
imgsrc = util/* default */.A.get(accountSetting, 'mobile_button.background_image_url') || util/* default */.A.get(accountSetting, 'mobile_button.background_mask_url') || imgsrc;
|
|
7460
|
-
}
|
|
7461
|
-
imgsrc = this.props.store.replaceFileUrl(imgsrc);
|
|
7462
|
-
await util/* default */.A.preloadImg(imgsrc);
|
|
7463
|
-
this.setState({
|
|
7464
|
-
ready: true
|
|
7465
|
-
});
|
|
7466
|
-
this.readyGate.open();
|
|
7467
|
-
}
|
|
7468
|
-
renderButton() {
|
|
7469
|
-
if (typeof sbz_info != 'undefined') sbz_info.render_chatbox_button = util/* default */.A.Date.now();
|
|
7796
|
+
getButtonAppearance() {
|
|
7470
7797
|
let accountSetting = this.props.plugin.chatbox;
|
|
7471
7798
|
accountSetting = this.fixMissingSetting(accountSetting);
|
|
7472
7799
|
let imgsrc = util/* default */.A.get(accountSetting, 'desktop_button.background_image_url') || util/* default */.A.get(accountSetting, 'desktop_button.background_mask_url') || defaultBubble;
|
|
@@ -7488,22 +7815,93 @@ class ChatButton extends common/* Com */.Mw {
|
|
|
7488
7815
|
maskurl = mobilemaskurl;
|
|
7489
7816
|
}
|
|
7490
7817
|
}
|
|
7818
|
+
const imageUrl = url => {
|
|
7819
|
+
const asset = normalizeButtonImageUrl(this.props.store.replaceFileUrl(url));
|
|
7820
|
+
return asset === dotChatIcon ? asset : addVersionParam(asset);
|
|
7821
|
+
};
|
|
7822
|
+
imgsrc = imageUrl(imgsrc);
|
|
7823
|
+
imgurl = imageUrl(imgurl);
|
|
7824
|
+
maskurl = imageUrl(maskurl);
|
|
7825
|
+
const defaultMask = !imgurl && !maskurl ? DEF_BG_URL : '';
|
|
7826
|
+
const urls = [...new Set([imgsrc, imgurl && encodeURI(imgurl), maskurl && encodeURI(maskurl), defaultMask].filter(Boolean))];
|
|
7827
|
+
return {
|
|
7828
|
+
imgsrc,
|
|
7829
|
+
imgurl,
|
|
7830
|
+
maskurl,
|
|
7831
|
+
background,
|
|
7832
|
+
position,
|
|
7833
|
+
imgwidth,
|
|
7834
|
+
imgheight,
|
|
7835
|
+
urls,
|
|
7836
|
+
maskAsset: maskurl ? encodeURI(maskurl) : defaultMask,
|
|
7837
|
+
key: JSON.stringify([urls, maskurl, defaultMask])
|
|
7838
|
+
};
|
|
7839
|
+
}
|
|
7840
|
+
componentDidUpdate() {
|
|
7841
|
+
if (this.getButtonAppearance().key !== this._buttonImageKey) this.prepareButtonImage();
|
|
7842
|
+
}
|
|
7843
|
+
async prepareButtonImage() {
|
|
7844
|
+
const appearance = this.getButtonAppearance();
|
|
7845
|
+
const version = this._buttonImageVersion = (this._buttonImageVersion || 0) + 1;
|
|
7846
|
+
this._buttonImageKey = appearance.key;
|
|
7847
|
+
this.readyGate.close();
|
|
7848
|
+
const [loaded, mask] = await Promise.all([Promise.all(appearance.urls.filter(url => url !== appearance.maskAsset).map(url => preloadButtonImage(url))), appearance.maskAsset ? prepareButtonMask(appearance.maskAsset) : Promise.resolve(null)]);
|
|
7849
|
+
const stale = () => !this._isMounted || this._buttonImageVersion !== version;
|
|
7850
|
+
if (stale()) {
|
|
7851
|
+
if (mask) URL.revokeObjectURL(mask);
|
|
7852
|
+
return;
|
|
7853
|
+
}
|
|
7854
|
+
const fallback = loaded.some(success => !success) || !!appearance.maskAsset && !mask;
|
|
7855
|
+
const ready = !fallback || (await preloadButtonImage(defaultBubble));
|
|
7856
|
+
if (stale()) {
|
|
7857
|
+
if (mask) URL.revokeObjectURL(mask);
|
|
7858
|
+
return;
|
|
7859
|
+
}
|
|
7860
|
+
if (this._buttonMaskUrl) URL.revokeObjectURL(this._buttonMaskUrl);
|
|
7861
|
+
this._buttonMaskUrl = mask;
|
|
7862
|
+
if (this._buttonElement) window.getComputedStyle(this._buttonElement).transform;
|
|
7863
|
+
this.setState({
|
|
7864
|
+
ready,
|
|
7865
|
+
readyImageKey: appearance.key,
|
|
7866
|
+
fallbackButtonImage: fallback,
|
|
7867
|
+
buttonMaskUrl: mask
|
|
7868
|
+
});
|
|
7869
|
+
this.readyGate.open();
|
|
7870
|
+
}
|
|
7871
|
+
componentWillUnmount() {
|
|
7872
|
+
if (this._buttonMaskUrl) URL.revokeObjectURL(this._buttonMaskUrl);
|
|
7873
|
+
if (this._animateTimeout) clearTimeout(this._animateTimeout);
|
|
7874
|
+
}
|
|
7875
|
+
renderButton() {
|
|
7876
|
+
if (typeof sbz_info != 'undefined') sbz_info.render_chatbox_button = util/* default */.A.Date.now();
|
|
7877
|
+
const appearance = this.getButtonAppearance();
|
|
7878
|
+
let {
|
|
7879
|
+
imgsrc,
|
|
7880
|
+
imgurl,
|
|
7881
|
+
maskurl,
|
|
7882
|
+
background,
|
|
7883
|
+
position,
|
|
7884
|
+
imgwidth,
|
|
7885
|
+
imgheight
|
|
7886
|
+
} = appearance;
|
|
7887
|
+
if (appearance.maskAsset) {
|
|
7888
|
+
maskurl = this.state.readyImageKey === appearance.key ? this.state.buttonMaskUrl : '';
|
|
7889
|
+
if (imgsrc === appearance.maskAsset) imgsrc = maskurl || '';
|
|
7890
|
+
}
|
|
7891
|
+
if (this.state.readyImageKey === appearance.key && this.state.fallbackButtonImage) {
|
|
7892
|
+
imgsrc = imgurl = defaultBubble;
|
|
7893
|
+
maskurl = '';
|
|
7894
|
+
}
|
|
7491
7895
|
let whitebgcls = 'chat-button--white-bg';
|
|
7492
7896
|
if (!imgurl && maskurl) whitebgcls += ' chat-button--white-bg--mask-only';
|
|
7493
7897
|
let imgcontainerstyle = '';
|
|
7494
|
-
imgurl = this.props.store.replaceFileUrl(imgurl);
|
|
7495
|
-
imgsrc = this.props.store.replaceFileUrl(imgsrc);
|
|
7496
|
-
maskurl = this.props.store.replaceFileUrl(maskurl);
|
|
7497
|
-
imgurl = addVersionParam(imgurl);
|
|
7498
|
-
imgsrc = addVersionParam(imgsrc);
|
|
7499
|
-
maskurl = addVersionParam(maskurl);
|
|
7500
7898
|
if (!imgurl && !maskurl) {
|
|
7501
7899
|
whitebgcls += ' chat-button--white-bg--mask-only';
|
|
7502
7900
|
imgcontainerstyle = `
|
|
7503
|
-
-webkit-mask-image:
|
|
7504
|
-
-o-mask-image:
|
|
7505
|
-
-moz-mask-image:
|
|
7506
|
-
mask-image:
|
|
7901
|
+
-webkit-mask-image: none !important;
|
|
7902
|
+
-o-mask-image: none !important;
|
|
7903
|
+
-moz-mask-image: none !important;
|
|
7904
|
+
mask-image: none !important;
|
|
7507
7905
|
height: ${imgheight}px !important;
|
|
7508
7906
|
width: ${imgwidth}px !important;
|
|
7509
7907
|
background: ${background} !important;
|
|
@@ -7556,9 +7954,15 @@ class ChatButton extends common/* Com */.Mw {
|
|
|
7556
7954
|
height: ${imgheight - 4}px !important;
|
|
7557
7955
|
|
|
7558
7956
|
`;
|
|
7559
|
-
if (!this.state.ready) cls += ' hidden';
|
|
7560
|
-
return (0,preact_module.h)("
|
|
7957
|
+
if (!this.state.ready || this.state.readyImageKey !== appearance.key) cls += ' hidden';
|
|
7958
|
+
return (0,preact_module.h)("button", {
|
|
7959
|
+
ref: element => {
|
|
7960
|
+
this._buttonElement = element;
|
|
7961
|
+
},
|
|
7962
|
+
type: "button",
|
|
7561
7963
|
class: cls,
|
|
7964
|
+
"aria-label": this.props.t('chat'),
|
|
7965
|
+
"aria-expanded": !this.props.isShow,
|
|
7562
7966
|
onClick: e => this.onClick(e)
|
|
7563
7967
|
}, (0,preact_module.h)("div", {
|
|
7564
7968
|
class: whitebgcls,
|
|
@@ -7598,7 +8002,9 @@ class ChatButton extends common/* Com */.Mw {
|
|
|
7598
8002
|
return defmsg;
|
|
7599
8003
|
}
|
|
7600
8004
|
return (0,preact_module.h)(chatbox_block/* default */.A, {
|
|
7601
|
-
block: block
|
|
8005
|
+
block: block,
|
|
8006
|
+
store: this.props.store,
|
|
8007
|
+
t: this.props.t
|
|
7602
8008
|
});
|
|
7603
8009
|
}
|
|
7604
8010
|
let message = util/* default */.A.get(ev, 'data.message.text', defmsg);
|
|
@@ -7626,6 +8032,10 @@ function randomAgent(agentM) {
|
|
|
7626
8032
|
return agents[Math.floor(Math.random() * util/* default */.A.size(agents))] || {};
|
|
7627
8033
|
}
|
|
7628
8034
|
const Ms30Mins = 30 * 60 * 1000;
|
|
8035
|
+
function normalizeButtonImageUrl(url) {
|
|
8036
|
+
if (/^https:\/\/(?:storage\.googleapis\.com\/public-gcs\.subiz-cdn\.com|public-gcs\.subiz-cdn\.com|vcdn\.subiz-cdn\.com)\/dashboard-v4\/public\/img\/bubble\/dot_chat\.svg(?=$|[?#])/.test(url)) return dotChatIcon;
|
|
8037
|
+
return url;
|
|
8038
|
+
}
|
|
7629
8039
|
const DEF_BG_URL = 'https://vcdn.subiz-cdn.com/file/bubble_11.svg?v=5';
|
|
7630
8040
|
const DEF_BG = 'linear-gradient(280.16deg, #0053d3 22.03%, #0265ff 78.2%)';
|
|
7631
8041
|
function addVersionParam(url, version = 8) {
|
|
@@ -7641,10 +8051,39 @@ function addVersionParam(url, version = 8) {
|
|
|
7641
8051
|
return hash ? newUrl + '#' + hash : newUrl;
|
|
7642
8052
|
}
|
|
7643
8053
|
}
|
|
7644
|
-
|
|
7645
|
-
|
|
7646
|
-
|
|
7647
|
-
|
|
8054
|
+
function preloadButtonImage(src, {
|
|
8055
|
+
crossOrigin = false
|
|
8056
|
+
} = {}) {
|
|
8057
|
+
return new Promise(resolve => {
|
|
8058
|
+
const image = new Image();
|
|
8059
|
+
if (crossOrigin) image.crossOrigin = 'anonymous';
|
|
8060
|
+
image.onerror = () => resolve(false);
|
|
8061
|
+
image.onload = async () => {
|
|
8062
|
+
try {
|
|
8063
|
+
if (image.decode) await image.decode();
|
|
8064
|
+
resolve(true);
|
|
8065
|
+
} catch (_) {
|
|
8066
|
+
resolve(false);
|
|
8067
|
+
}
|
|
8068
|
+
};
|
|
8069
|
+
image.src = src;
|
|
8070
|
+
});
|
|
8071
|
+
}
|
|
8072
|
+
async function prepareButtonMask(src) {
|
|
8073
|
+
let url;
|
|
8074
|
+
try {
|
|
8075
|
+
const response = await fetch(src);
|
|
8076
|
+
if (!response.ok) return null;
|
|
8077
|
+
url = URL.createObjectURL(await response.blob());
|
|
8078
|
+
if (await preloadButtonImage(url)) return url;
|
|
8079
|
+
} catch (_) {}
|
|
8080
|
+
if (url) URL.revokeObjectURL(url);
|
|
8081
|
+
return null;
|
|
8082
|
+
}
|
|
8083
|
+
;// ./src/chatbox/PoweredBy.js
|
|
8084
|
+
var logo = (subiz_mono_namespaceFn());
|
|
8085
|
+
|
|
8086
|
+
function PoweredBy(props) {
|
|
7648
8087
|
if (props.store.isMobile()) return null;
|
|
7649
8088
|
if (props.store.isAIDevMode()) return null;
|
|
7650
8089
|
let user = props.store.matchUser() || {};
|
|
@@ -7975,6 +8414,7 @@ Vui lòng hỏi chúng tôi bất cứ điều gì hoặc chia sẻ phản hồi
|
|
|
7975
8414
|
getTitle() {
|
|
7976
8415
|
let accSetting = this.props.plugin.chatbox || {};
|
|
7977
8416
|
let acc = this.props.store.matchAccount() || {};
|
|
8417
|
+
if (accSetting.hide_agent_profile) return acc.name || this.props.t('widget_title');
|
|
7978
8418
|
let agentsJoined = this.getAgentJoined(this.props.cid);
|
|
7979
8419
|
let caption = util/* default */.A.get(this.props.plugin, 'chatbox.caption', {});
|
|
7980
8420
|
let title = this.props.t.i18n(caption) || accSetting.title;
|
|
@@ -7996,7 +8436,9 @@ Vui lòng hỏi chúng tôi bất cứ điều gì hoặc chia sẻ phản hồi
|
|
|
7996
8436
|
class: "widget-header--total-unread-convo"
|
|
7997
8437
|
}, unreadcount);
|
|
7998
8438
|
}
|
|
7999
|
-
return (0,preact_module.h)("
|
|
8439
|
+
return (0,preact_module.h)("button", {
|
|
8440
|
+
type: "button",
|
|
8441
|
+
"aria-label": this.props.t('menu_back'),
|
|
8000
8442
|
class: `widget-header--wrap-button-back ${unreadcount ? 'widget-header--has-convo-unred' : ''}`,
|
|
8001
8443
|
onClick: e => this.onBackClick(e)
|
|
8002
8444
|
}, (0,preact_module.h)("div", {
|
|
@@ -8008,7 +8450,9 @@ Vui lòng hỏi chúng tôi bất cứ điều gì hoặc chia sẻ phản hồi
|
|
|
8008
8450
|
let accSetting = this.props.plugin.chatbox || {};
|
|
8009
8451
|
if (accSetting.hide_close_button) return null;
|
|
8010
8452
|
if (this.props.store.isEmbededChatMode()) return;
|
|
8011
|
-
return (0,preact_module.h)("
|
|
8453
|
+
return (0,preact_module.h)("button", {
|
|
8454
|
+
type: "button",
|
|
8455
|
+
"aria-label": this.props.t('close'),
|
|
8012
8456
|
class: "widget-header--button-close",
|
|
8013
8457
|
"data-tooltip": this.props.t('close'),
|
|
8014
8458
|
"data-tooltip-position": "bottom",
|
|
@@ -8081,10 +8525,14 @@ class MessageInput extends common/* Com */.Mw {
|
|
|
8081
8525
|
$input.blur();
|
|
8082
8526
|
}
|
|
8083
8527
|
render() {
|
|
8528
|
+
const disabled = this.hasUnfinishRequiredFormOrLock() || this.props.disabled || this.props.is_loading;
|
|
8084
8529
|
var $buttons = (0,preact_module.h)("div", {
|
|
8085
8530
|
class: "d-flex flex-row align-self-end"
|
|
8086
|
-
}, this.renderEmoji(), (0,preact_module.h)("
|
|
8087
|
-
|
|
8531
|
+
}, this.renderEmoji(), (0,preact_module.h)("button", {
|
|
8532
|
+
type: "button",
|
|
8533
|
+
disabled: disabled,
|
|
8534
|
+
"aria-label": this.props.t('attachment'),
|
|
8535
|
+
"data-tooltip-position": "top-left",
|
|
8088
8536
|
class: "message-input--button message-input--attachment-button",
|
|
8089
8537
|
onClick: e => this.selectFile(e)
|
|
8090
8538
|
}));
|
|
@@ -8092,7 +8540,10 @@ class MessageInput extends common/* Com */.Mw {
|
|
|
8092
8540
|
if (msg.length > 0) {
|
|
8093
8541
|
$buttons = (0,preact_module.h)("div", {
|
|
8094
8542
|
class: "d-flex flex-row align-self-end"
|
|
8095
|
-
}, this.renderEmoji(), (0,preact_module.h)("
|
|
8543
|
+
}, this.renderEmoji(), (0,preact_module.h)("button", {
|
|
8544
|
+
type: "button",
|
|
8545
|
+
disabled: disabled,
|
|
8546
|
+
"aria-label": this.props.t('send'),
|
|
8096
8547
|
"data-tooltip-position": "top-left",
|
|
8097
8548
|
class: "message-input--button message-input--send-button",
|
|
8098
8549
|
onClick: () => this.submitMessage()
|
|
@@ -8106,7 +8557,6 @@ class MessageInput extends common/* Com */.Mw {
|
|
|
8106
8557
|
}));
|
|
8107
8558
|
}
|
|
8108
8559
|
var containercls = '';
|
|
8109
|
-
var disabled = this.hasUnfinishRequiredFormOrLock() || this.props.disabled;
|
|
8110
8560
|
if (disabled || this.props.is_loading) containercls = 'message-input--disabled';
|
|
8111
8561
|
return (0,preact_module.h)("div", {
|
|
8112
8562
|
class: `message-input ${containercls}`,
|
|
@@ -8121,6 +8571,7 @@ class MessageInput extends common/* Com */.Mw {
|
|
|
8121
8571
|
multiple: true
|
|
8122
8572
|
}), (0,preact_module.h)("textarea", {
|
|
8123
8573
|
disabled: disabled,
|
|
8574
|
+
"aria-label": this.props.t('message_input_help'),
|
|
8124
8575
|
class: "message-input--input",
|
|
8125
8576
|
maxlength: "1024",
|
|
8126
8577
|
placeholder: this.props.t('message_input_help').substr(0, 25),
|
|
@@ -8283,7 +8734,11 @@ class MessageInput extends common/* Com */.Mw {
|
|
|
8283
8734
|
}, 100);
|
|
8284
8735
|
}
|
|
8285
8736
|
renderEmoji() {
|
|
8286
|
-
return (0,preact_module.h)("div", null, this.renderEmojiPopup(), (0,preact_module.h)("
|
|
8737
|
+
return (0,preact_module.h)("div", null, this.renderEmojiPopup(), (0,preact_module.h)("button", {
|
|
8738
|
+
type: "button",
|
|
8739
|
+
"aria-label": "Emoji",
|
|
8740
|
+
"aria-expanded": !!this.state.openEmoji,
|
|
8741
|
+
disabled: this.props.disabled || this.props.is_loading,
|
|
8287
8742
|
class: "message-input--button message-input--emoji-button",
|
|
8288
8743
|
onClick: e => this.toggleEmoji(e)
|
|
8289
8744
|
}));
|
|
@@ -8313,13 +8768,15 @@ class MessageInput extends common/* Com */.Mw {
|
|
|
8313
8768
|
return e.preventDefault();
|
|
8314
8769
|
}
|
|
8315
8770
|
this._forceUpdate();
|
|
8316
|
-
this.sendTyping();
|
|
8317
8771
|
}
|
|
8318
8772
|
onChange(e) {
|
|
8773
|
+
const value = e.target.value;
|
|
8774
|
+
const changed = value !== (this.state.msgValue || '');
|
|
8319
8775
|
this.setState({
|
|
8320
|
-
msgValue:
|
|
8776
|
+
msgValue: value
|
|
8321
8777
|
});
|
|
8322
8778
|
this.resizeInput();
|
|
8779
|
+
if (changed && util/* default */.A.trim(value)) this.sendTyping();
|
|
8323
8780
|
}
|
|
8324
8781
|
selectFile() {
|
|
8325
8782
|
if (this.props.disabled) return;
|
|
@@ -8351,10 +8808,10 @@ class MessageInput extends common/* Com */.Mw {
|
|
|
8351
8808
|
if (!msg) return;
|
|
8352
8809
|
if (this.props.disabled) return;
|
|
8353
8810
|
if (this.props.onSend) {
|
|
8354
|
-
await this.props.onSend({
|
|
8811
|
+
if ((await this.props.onSend({
|
|
8355
8812
|
text: msg,
|
|
8356
8813
|
format: 'plaintext'
|
|
8357
|
-
});
|
|
8814
|
+
})) === false) return;
|
|
8358
8815
|
}
|
|
8359
8816
|
this.setState({
|
|
8360
8817
|
openEmoji: false,
|
|
@@ -8363,7 +8820,9 @@ class MessageInput extends common/* Com */.Mw {
|
|
|
8363
8820
|
this.resizeInput();
|
|
8364
8821
|
}
|
|
8365
8822
|
sendTyping() {
|
|
8823
|
+
if (this.props.disabled || this.props.is_loading) return;
|
|
8366
8824
|
if (!this.props.cid) return;
|
|
8825
|
+
if (util/* default */.A.get(this.props.store.matchConvo(this.props.cid), 'state') === 'ended') return;
|
|
8367
8826
|
return this.props.store.typing(this.props.cid);
|
|
8368
8827
|
}
|
|
8369
8828
|
pasteImage(event) {
|
|
@@ -8393,6 +8852,121 @@ function isSummited(form) {
|
|
|
8393
8852
|
let fields = util/* default */.A.get(form, 'fields') || [];
|
|
8394
8853
|
return util/* default */.A.find(fields, field => !!field.answered);
|
|
8395
8854
|
}
|
|
8855
|
+
;// ./src/chatbox/event-layout.js
|
|
8856
|
+
|
|
8857
|
+
function processEvents(convo, events) {
|
|
8858
|
+
events = events.filter(event => visibleEvent(event.ev));
|
|
8859
|
+
if (events.length < 1) return;
|
|
8860
|
+
var lastAgentEvent;
|
|
8861
|
+
for (var i = 1; i < events.length; i++) {
|
|
8862
|
+
let curEvent = events[i];
|
|
8863
|
+
let lastEvent = events[i - 1];
|
|
8864
|
+
if (util/* default */.A.get(curEvent, 'ev.by.type') != 'user' && !curEvent.is_typing) {
|
|
8865
|
+
lastAgentEvent = curEvent;
|
|
8866
|
+
}
|
|
8867
|
+
if (visibleEvent(curEvent.ev)) {
|
|
8868
|
+
let elapsedSec = util/* default */.A.unixSec(curEvent.ev.created) - util/* default */.A.unixSec(lastEvent.ev.created);
|
|
8869
|
+
if (elapsedSec > 300) curEvent.show_time = true;
|
|
8870
|
+
}
|
|
8871
|
+
}
|
|
8872
|
+
if (lastAgentEvent) lastAgentEvent.show_time = true;
|
|
8873
|
+
for (var i = 0; i < events.length; i++) {
|
|
8874
|
+
let curEvent = events[i];
|
|
8875
|
+
if (util/* default */.A.get(curEvent, 'ev.type') === 'message_sent') {
|
|
8876
|
+
curEvent.show_time = true;
|
|
8877
|
+
break;
|
|
8878
|
+
}
|
|
8879
|
+
}
|
|
8880
|
+
let lastMsgSentIdx = -1;
|
|
8881
|
+
for (var i = 0; i < events.length; i++) {
|
|
8882
|
+
let curEvent = events[i];
|
|
8883
|
+
let prevEvent = events[i - 1];
|
|
8884
|
+
let nextEvent = events[i + 1];
|
|
8885
|
+
if (curEvent.ev.type === 'message_sent') {
|
|
8886
|
+
lastMsgSentIdx = i;
|
|
8887
|
+
curEvent.mode = 'lead';
|
|
8888
|
+
if (util/* default */.A.get(prevEvent, 'ev.type') === 'message_sent' && util/* default */.A.get(prevEvent, 'ev.by.id') === util/* default */.A.get(curEvent, 'ev.by.id')) {
|
|
8889
|
+
curEvent.mode = 'follow';
|
|
8890
|
+
}
|
|
8891
|
+
if (util/* default */.A.get(nextEvent, 'ev.type') !== 'message_sent' || util/* default */.A.get(nextEvent, 'ev.by.id') !== util/* default */.A.get(curEvent, 'ev.by.id')) {
|
|
8892
|
+
curEvent.is_end = true;
|
|
8893
|
+
}
|
|
8894
|
+
continue;
|
|
8895
|
+
}
|
|
8896
|
+
}
|
|
8897
|
+
if (lastMsgSentIdx > -1) {
|
|
8898
|
+
events[lastMsgSentIdx].is_last_message_send = true;
|
|
8899
|
+
}
|
|
8900
|
+
}
|
|
8901
|
+
function visibleEvent(ev) {
|
|
8902
|
+
let type = util/* default */.A.get(ev, 'type');
|
|
8903
|
+
if (type === 'message_sent') return true;
|
|
8904
|
+
if (type === 'conversation_state_updated') {
|
|
8905
|
+
return util/* default */.A.get(ev, 'data.conversation.state') == 'ended';
|
|
8906
|
+
}
|
|
8907
|
+
}
|
|
8908
|
+
;// ./src/chatbox/conversation-history.js
|
|
8909
|
+
|
|
8910
|
+
function conversationHistory(store, cid) {
|
|
8911
|
+
if (!cid) return [];
|
|
8912
|
+
const current = store.matchConvo(cid);
|
|
8913
|
+
if (!current || !current.created) return [current || {
|
|
8914
|
+
id: cid
|
|
8915
|
+
}];
|
|
8916
|
+
const conversations = util/* default */.A.map(store.matchConvo('*'));
|
|
8917
|
+
const unique = new Map();
|
|
8918
|
+
for (const convo of conversations) {
|
|
8919
|
+
if (!convo || !convo.id || convo.id === cid || convo.id.startsWith('cslight')) continue;
|
|
8920
|
+
if (current.account_id && convo.account_id !== current.account_id) continue;
|
|
8921
|
+
if (convo.created && util/* default */.A.getMs(convo.created) < util/* default */.A.getMs(current.created)) unique.set(convo.id, convo);
|
|
8922
|
+
}
|
|
8923
|
+
return [...unique.values()].sort((a, b) => util/* default */.A.getMs(a.created) - util/* default */.A.getMs(b.created) || a.id.localeCompare(b.id)).concat(current);
|
|
8924
|
+
}
|
|
8925
|
+
function conversationEvents(store, convo) {
|
|
8926
|
+
const events = util/* default */.A.orderBy(util/* default */.A.map(store.listEvents(convo.id)), 'created', 'asc');
|
|
8927
|
+
const unique = new Map();
|
|
8928
|
+
for (const ev of events) {
|
|
8929
|
+
const key = conversationEventKey(ev);
|
|
8930
|
+
const previous = unique.get(key);
|
|
8931
|
+
if (!previous) unique.set(key, ev);else if (previous.id === previous.source_event_id && ev.id !== ev.source_event_id) unique.set(key, {
|
|
8932
|
+
...ev,
|
|
8933
|
+
created: previous.created
|
|
8934
|
+
});
|
|
8935
|
+
}
|
|
8936
|
+
return [...unique.values()].map(ev => ({
|
|
8937
|
+
ev
|
|
8938
|
+
}));
|
|
8939
|
+
}
|
|
8940
|
+
function conversationEventKey(ev) {
|
|
8941
|
+
const id = ev.type === 'message_sent' ? ev.source_event_id || ev.id : ev.id;
|
|
8942
|
+
return ev.type + ':' + id;
|
|
8943
|
+
}
|
|
8944
|
+
;// ./src/chatbox/greeting.js
|
|
8945
|
+
|
|
8946
|
+
function widgetGreeting(chatbox, t, created = util/* default */.A.Date.now()) {
|
|
8947
|
+
const greeting = util/* default */.A.get(chatbox, 'greeting', {});
|
|
8948
|
+
const localized = t.i18n ? t.i18n(greeting.greeting || {}) : '';
|
|
8949
|
+
const text = util/* default */.A.trim(localized) || util/* default */.A.trim(greeting.message) || util/* default */.A.trim(t('team_intro')) || t('empty_convo_text');
|
|
8950
|
+
return {
|
|
8951
|
+
id: 'widget-greeting-' + util/* default */.A.randomString(24),
|
|
8952
|
+
type: 'message_sent',
|
|
8953
|
+
created,
|
|
8954
|
+
by: {
|
|
8955
|
+
type: 'system',
|
|
8956
|
+
id: 'system',
|
|
8957
|
+
...(greeting.agent_id ? {
|
|
8958
|
+
display_type: 'agent',
|
|
8959
|
+
display_id: greeting.agent_id
|
|
8960
|
+
} : {})
|
|
8961
|
+
},
|
|
8962
|
+
data: {
|
|
8963
|
+
message: {
|
|
8964
|
+
text,
|
|
8965
|
+
format: 'plaintext'
|
|
8966
|
+
}
|
|
8967
|
+
}
|
|
8968
|
+
};
|
|
8969
|
+
}
|
|
8396
8970
|
;// ./src/chatbox/ImageAttachments.js
|
|
8397
8971
|
function ImageAttachments_defineProperty(e, r, t) { return (r = ImageAttachments_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
8398
8972
|
function ImageAttachments_toPropertyKey(t) { var i = ImageAttachments_toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
@@ -8656,16 +9230,19 @@ class FileAttachments extends common/* Com */.Mw {
|
|
|
8656
9230
|
}, 3000);
|
|
8657
9231
|
}
|
|
8658
9232
|
}
|
|
9233
|
+
// EXTERNAL MODULE: ./src/util/url.js
|
|
9234
|
+
var util_url = __webpack_require__(4339);
|
|
8659
9235
|
;// ./src/chatbox/Buttons.js
|
|
8660
9236
|
|
|
8661
9237
|
|
|
9238
|
+
|
|
8662
9239
|
function Buttons(props) {
|
|
8663
9240
|
if (util/* default */.A.size(props.buttons) === 0) return null;
|
|
8664
9241
|
var $buttons = util/* default */.A.map(props.buttons, (button, index) => {
|
|
8665
9242
|
if (button.type === 'call_button') {
|
|
8666
9243
|
return (0,preact_module.h)("a", {
|
|
8667
9244
|
class: "url-button-attachment",
|
|
8668
|
-
href: 'tel:' + button.phone_number,
|
|
9245
|
+
href: (0,util_url/* safeUrl */.P)('tel:' + button.phone_number),
|
|
8669
9246
|
key: index,
|
|
8670
9247
|
title: button.title
|
|
8671
9248
|
}, props.t.i18n(button.i18n_title) || props.t.i18n(button.old_i18n_title) || button.title || `${props.t('call')} ${button.phone_number}`);
|
|
@@ -8673,16 +9250,18 @@ function Buttons(props) {
|
|
|
8673
9250
|
if (button.type === 'url_button') {
|
|
8674
9251
|
return (0,preact_module.h)("a", {
|
|
8675
9252
|
class: "url-button-attachment",
|
|
8676
|
-
href: button.url,
|
|
9253
|
+
href: (0,util_url/* safeUrl */.P)(button.url) || undefined,
|
|
8677
9254
|
target: "_blank",
|
|
9255
|
+
rel: "noopener noreferrer",
|
|
8678
9256
|
key: index,
|
|
8679
9257
|
title: button.title
|
|
8680
9258
|
}, props.t.i18n(button.i18n_title) || props.t.i18n(button.old_i18n_title) || button.title || button.url);
|
|
8681
9259
|
}
|
|
8682
9260
|
if (button.type === 'postback_button') {
|
|
8683
|
-
return (0,preact_module.h)("
|
|
9261
|
+
return (0,preact_module.h)("button", {
|
|
9262
|
+
type: "button",
|
|
8684
9263
|
class: "url-button-attachment",
|
|
8685
|
-
|
|
9264
|
+
key: index,
|
|
8686
9265
|
onClick: _ => props.onSelect(button)
|
|
8687
9266
|
}, props.t.i18n(button.i18n_title) || button.title);
|
|
8688
9267
|
}
|
|
@@ -9611,8 +10190,6 @@ class VideoAttachments extends common/* Com */.Mw {
|
|
|
9611
10190
|
}, $videos);
|
|
9612
10191
|
}
|
|
9613
10192
|
}
|
|
9614
|
-
// EXTERNAL MODULE: ./src/chatbox/time.js
|
|
9615
|
-
var chatbox_time = __webpack_require__(1620);
|
|
9616
10193
|
;// ./src/chatbox/QuoteMessage.js
|
|
9617
10194
|
function QuoteMessage_defineProperty(e, r, t) { return (r = QuoteMessage_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
9618
10195
|
function QuoteMessage_toPropertyKey(t) { var i = QuoteMessage_toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
@@ -9653,7 +10230,7 @@ class QuoteMessage extends common/* Com */.Mw {
|
|
|
9653
10230
|
if (util/* default */.A.get(this.props, 'chatbox.hide_agent_profile')) sendername = acc.name;
|
|
9654
10231
|
}
|
|
9655
10232
|
let att = util/* default */.A.get(this.props.ev, 'data.message.attachments.0');
|
|
9656
|
-
if (att) {
|
|
10233
|
+
if (att && !util/* default */.A.get(this.props.ev, 'data.message.deleted')) {
|
|
9657
10234
|
let isImg = util/* default */.A.includes(att.mimetype, 'image');
|
|
9658
10235
|
if (isImg) {
|
|
9659
10236
|
let uri = att.url;
|
|
@@ -9687,7 +10264,8 @@ class QuoteMessage extends common/* Com */.Mw {
|
|
|
9687
10264
|
let format = util/* default */.A.get(this.props.ev, 'data.message.format', 'plaintext');
|
|
9688
10265
|
let block = util/* default */.A.get(this.props.ev, 'data.message.block');
|
|
9689
10266
|
let text = util/* default */.A.get(this.props.ev, 'data.message.text');
|
|
9690
|
-
if (block) text = util/* default */.A.blockToText(block);
|
|
10267
|
+
if (block) text = util/* default */.A.blockToText(block) || text;
|
|
10268
|
+
if (util/* default */.A.get(this.props.ev, 'data.message.deleted')) text = this.props.t('recalled_message');
|
|
9691
10269
|
return (0,preact_module.h)("div", {
|
|
9692
10270
|
class: "message-quote",
|
|
9693
10271
|
onClick: () => this.scrollToSourceEvent(this.props.ev)
|
|
@@ -9722,10 +10300,9 @@ class TextMessage extends common/* Com */.Mw {
|
|
|
9722
10300
|
}
|
|
9723
10301
|
renderTime() {
|
|
9724
10302
|
return null;
|
|
9725
|
-
|
|
9726
|
-
|
|
9727
|
-
|
|
9728
|
-
|
|
10303
|
+
}
|
|
10304
|
+
componentWillUnmount() {
|
|
10305
|
+
util/* default */.A.clearTimeout(this.focusTimeout);
|
|
9729
10306
|
}
|
|
9730
10307
|
focusSourceEventFromQuote(ev) {
|
|
9731
10308
|
if (ev.id !== this.props.ev.id) return;
|
|
@@ -9733,7 +10310,7 @@ class TextMessage extends common/* Com */.Mw {
|
|
|
9733
10310
|
let attachmentIndexField = util/* default */.A.find(fields, f => f.key === 'attachment_index');
|
|
9734
10311
|
let attachmentIndex = util/* default */.A.get(attachmentIndexField, 'value');
|
|
9735
10312
|
try {
|
|
9736
|
-
attachmentIndex =
|
|
10313
|
+
attachmentIndex = util/* default */.A.parseJSON(attachmentIndex);
|
|
9737
10314
|
} catch (err) {
|
|
9738
10315
|
attachmentIndex = undefined;
|
|
9739
10316
|
}
|
|
@@ -9741,17 +10318,22 @@ class TextMessage extends common/* Com */.Mw {
|
|
|
9741
10318
|
this.setState({
|
|
9742
10319
|
focused: true
|
|
9743
10320
|
});
|
|
9744
|
-
if (this.focusTimeout) clearTimeout(this.focusTimeout);
|
|
9745
|
-
this.focusTimeout = setTimeout(() => {
|
|
10321
|
+
if (this.focusTimeout) util/* default */.A.clearTimeout(this.focusTimeout);
|
|
10322
|
+
this.focusTimeout = util/* default */.A.setTimeout(() => {
|
|
9746
10323
|
this.setState({
|
|
9747
10324
|
focused: false
|
|
9748
10325
|
});
|
|
9749
10326
|
}, 3000);
|
|
9750
10327
|
}
|
|
9751
10328
|
render() {
|
|
9752
|
-
|
|
10329
|
+
if (util/* default */.A.get(this.props.ev, 'data.message.deleted')) {
|
|
10330
|
+
let byType = util/* default */.A.get(this.props.ev, 'by.type') === 'user' ? 'user' : 'agent';
|
|
10331
|
+
return (0,preact_module.h)("div", {
|
|
10332
|
+
class: 'message-' + byType + ' message-text--' + byType + ' message-text--deleted'
|
|
10333
|
+
}, this.props.t('recalled_message'));
|
|
10334
|
+
}
|
|
9753
10335
|
let block = util/* default */.A.get(this.props.ev, 'data.message.block');
|
|
9754
|
-
if (block) return this.renderBlock(block);
|
|
10336
|
+
if (block && !util/* default */.A.isEmptyBlock(block)) return this.renderBlock(block);
|
|
9755
10337
|
return this.renderPlainText();
|
|
9756
10338
|
}
|
|
9757
10339
|
renderPlainText() {
|
|
@@ -9771,11 +10353,14 @@ class TextMessage extends common/* Com */.Mw {
|
|
|
9771
10353
|
if (!url.startsWith('//') && !url.startsWith('https://') && !url.startsWith('http://') && !url.startsWith('data:')) {
|
|
9772
10354
|
url = '//' + url;
|
|
9773
10355
|
}
|
|
10356
|
+
url = (0,util_url/* safeUrl */.P)(url);
|
|
10357
|
+
if (!url) return tag.text;
|
|
9774
10358
|
return (0,preact_module.h)("a", {
|
|
9775
10359
|
class: "text-message-link",
|
|
9776
10360
|
href: url,
|
|
9777
10361
|
target: "_blank",
|
|
9778
|
-
|
|
10362
|
+
rel: "noopener noreferrer",
|
|
10363
|
+
onClick: e => this.props.onLink && this.props.onLink(e, url)
|
|
9779
10364
|
}, tag.text);
|
|
9780
10365
|
}
|
|
9781
10366
|
if (tag.type === 'phone') return (0,preact_module.h)("a", {
|
|
@@ -9789,15 +10374,10 @@ class TextMessage extends common/* Com */.Mw {
|
|
|
9789
10374
|
return tag.text;
|
|
9790
10375
|
});
|
|
9791
10376
|
if (util/* default */.A.size(tags) === 0) return null;
|
|
9792
|
-
let isDeleted = util/* default */.A.get(this.props.ev, 'data.message.deleted');
|
|
9793
10377
|
let attachments = util/* default */.A.get(this.props.ev, 'data.message.attachments', []);
|
|
9794
10378
|
let quote = util/* default */.A.find(attachments, att => att.type === 'quote');
|
|
9795
10379
|
if (byType === 'agent') {
|
|
9796
10380
|
let cls = 'message-agent message-text--agent';
|
|
9797
|
-
if (isDeleted) {
|
|
9798
|
-
tags = this.props.t('recalled_message');
|
|
9799
|
-
cls += ' message-text--deleted';
|
|
9800
|
-
}
|
|
9801
10381
|
if (this.state.focused) cls += ' just-focused';
|
|
9802
10382
|
return (0,preact_module.h)("div", {
|
|
9803
10383
|
class: cls,
|
|
@@ -9829,6 +10409,8 @@ class TextMessage extends common/* Com */.Mw {
|
|
|
9829
10409
|
}, (0,preact_module.h)(chatbox_block/* default */.A, {
|
|
9830
10410
|
block: block,
|
|
9831
10411
|
onLink: this.props.onLink,
|
|
10412
|
+
store: this.props.store,
|
|
10413
|
+
t: this.props.t,
|
|
9832
10414
|
textMessage: true
|
|
9833
10415
|
}), this.renderTime());
|
|
9834
10416
|
}
|
|
@@ -9840,6 +10422,8 @@ class TextMessage extends common/* Com */.Mw {
|
|
|
9840
10422
|
}, (0,preact_module.h)(chatbox_block/* default */.A, {
|
|
9841
10423
|
block: block,
|
|
9842
10424
|
onLink: this.props.onLink,
|
|
10425
|
+
store: this.props.store,
|
|
10426
|
+
t: this.props.t,
|
|
9843
10427
|
textMessage: true
|
|
9844
10428
|
}));
|
|
9845
10429
|
}
|
|
@@ -9873,12 +10457,14 @@ class InfoMessage extends common/* Com */.Mw {
|
|
|
9873
10457
|
return (0,preact_module.h)("div", {
|
|
9874
10458
|
class: "convo-event"
|
|
9875
10459
|
}, (0,preact_module.h)("div", {
|
|
9876
|
-
class: "info-message"
|
|
10460
|
+
class: "info-message info-message--ended"
|
|
9877
10461
|
}, this.props.t('conversation_ended')));
|
|
9878
10462
|
}
|
|
9879
10463
|
return null;
|
|
9880
10464
|
}
|
|
9881
10465
|
}
|
|
10466
|
+
// EXTERNAL MODULE: ./src/chatbox/time.js
|
|
10467
|
+
var chatbox_time = __webpack_require__(1620);
|
|
9882
10468
|
;// ./src/chatbox/Event.js
|
|
9883
10469
|
function Event_defineProperty(e, r, t) { return (r = Event_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
9884
10470
|
function Event_toPropertyKey(t) { var i = Event_toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
@@ -9930,10 +10516,26 @@ class Event extends common/* Com */.Mw {
|
|
|
9930
10516
|
this.state = {
|
|
9931
10517
|
pongs: util/* default */.A.get(this.props.event, 'ev.data.message.pongs') || []
|
|
9932
10518
|
};
|
|
10519
|
+
const _ev = this.props.event.ev;
|
|
10520
|
+
const age = (this.props.store.now ? this.props.store.now() : util/* default */.A.Date.now()) - _ev.created;
|
|
10521
|
+
this.animateSend = !props.isHistory && _ev.type === 'message_sent' && util/* default */.A.get(_ev, 'by.type') === 'user' && _ev.id === util/* default */.A.get(_ev, 'source_event_id') && age >= 0 && age < 2000;
|
|
9933
10522
|
this.textMessageRef = (0,preact_module/* createRef */._3)();
|
|
9934
10523
|
this.fileAttachmentRef = (0,preact_module/* createRef */._3)();
|
|
9935
10524
|
this.imageAttachmentRef = (0,preact_module/* createRef */._3)();
|
|
9936
10525
|
}
|
|
10526
|
+
componentDidMount() {
|
|
10527
|
+
if (!this.animateSend) return;
|
|
10528
|
+
this.sendAnimationFrame = window.requestAnimationFrame(() => {
|
|
10529
|
+
this.sendAnimationFrame = window.requestAnimationFrame(() => {
|
|
10530
|
+
if (this._isMounted) this.setState({
|
|
10531
|
+
sendEntered: true
|
|
10532
|
+
});
|
|
10533
|
+
});
|
|
10534
|
+
});
|
|
10535
|
+
}
|
|
10536
|
+
componentWillUnmount() {
|
|
10537
|
+
if (this.sendAnimationFrame) window.cancelAnimationFrame(this.sendAnimationFrame);
|
|
10538
|
+
}
|
|
9937
10539
|
render() {
|
|
9938
10540
|
var ev = util/* default */.A.get(this.props.event, 'ev', {});
|
|
9939
10541
|
switch (ev.type) {
|
|
@@ -9978,6 +10580,7 @@ class Event extends common/* Com */.Mw {
|
|
|
9978
10580
|
return !!util/* default */.A.find(pongs, pong => pong.type === 'dislike');
|
|
9979
10581
|
}
|
|
9980
10582
|
chooseQuickReply(reply) {
|
|
10583
|
+
if (this.props.isHistory) return;
|
|
9981
10584
|
let ev = util/* default */.A.get(this.props.event, 'ev', {});
|
|
9982
10585
|
let message = {
|
|
9983
10586
|
text: reply.title,
|
|
@@ -9995,6 +10598,7 @@ class Event extends common/* Com */.Mw {
|
|
|
9995
10598
|
this.props.onSend(message);
|
|
9996
10599
|
}
|
|
9997
10600
|
choosePostbackBtn(button) {
|
|
10601
|
+
if (this.props.isHistory) return;
|
|
9998
10602
|
let ev = util/* default */.A.get(this.props.event, 'ev', {});
|
|
9999
10603
|
let message = {
|
|
10000
10604
|
text: button.title,
|
|
@@ -10135,6 +10739,17 @@ class Event extends common/* Com */.Mw {
|
|
|
10135
10739
|
}
|
|
10136
10740
|
renderMessageSent() {
|
|
10137
10741
|
let ev = this.props.event.ev;
|
|
10742
|
+
if (util/* default */.A.get(ev, 'data.message.deleted')) {
|
|
10743
|
+
let byType = util/* default */.A.get(ev, 'by.type') === 'user' ? 'user' : 'agent';
|
|
10744
|
+
return (0,preact_module.h)("div", {
|
|
10745
|
+
class: 'convo-event ' + byType + '-message',
|
|
10746
|
+
"data-ev-id": ev.id
|
|
10747
|
+
}, (0,preact_module.h)(TextMessage, {
|
|
10748
|
+
ev: ev,
|
|
10749
|
+
t: this.props.t,
|
|
10750
|
+
store: this.props.store
|
|
10751
|
+
}));
|
|
10752
|
+
}
|
|
10138
10753
|
let attachments = util/* default */.A.get(ev, 'data.message.attachments');
|
|
10139
10754
|
let hasForm = util/* default */.A.find(attachments, att => att.type === 'form');
|
|
10140
10755
|
if (util/* default */.A.isEmptyMessage(util/* default */.A.get(ev, 'data.message'))) return null;
|
|
@@ -10205,13 +10820,13 @@ class Event extends common/* Com */.Mw {
|
|
|
10205
10820
|
t: this.props.t,
|
|
10206
10821
|
store: this.props.store,
|
|
10207
10822
|
ev: ev
|
|
10208
|
-
}), (0,preact_module.h)(QuickReplies, {
|
|
10823
|
+
}), !this.props.isHistory && (0,preact_module.h)(QuickReplies, {
|
|
10209
10824
|
store: this.props.store,
|
|
10210
10825
|
ev: ev,
|
|
10211
10826
|
onSelect: e => this.chooseQuickReply(e)
|
|
10212
10827
|
}), this.renderReactions(), this.renderAIDevNote())));
|
|
10213
10828
|
}
|
|
10214
|
-
if (util/* default */.A.get(ev, '
|
|
10829
|
+
if (util/* default */.A.get(ev, 'source_event_id') === ev.id && this.props.store.now() - ev.created < 900) {
|
|
10215
10830
|
util/* default */.A.setTimeout(() => this.setState({
|
|
10216
10831
|
refresh: this.state.refresh
|
|
10217
10832
|
}), 1000);
|
|
@@ -10219,7 +10834,7 @@ class Event extends common/* Com */.Mw {
|
|
|
10219
10834
|
let $dot = (0,preact_module.h)("div", {
|
|
10220
10835
|
class: "sending_dot"
|
|
10221
10836
|
});
|
|
10222
|
-
if (this.props.store.now() - ev.created < 900 || util/* default */.A.get(ev, '
|
|
10837
|
+
if (this.props.store.now() - ev.created < 900 || util/* default */.A.get(ev, 'source_event_id') !== ev.id) {
|
|
10223
10838
|
$dot = (0,preact_module.h)("div", {
|
|
10224
10839
|
class: "sending_dot sending_dot__hide"
|
|
10225
10840
|
});
|
|
@@ -10247,10 +10862,11 @@ class Event extends common/* Com */.Mw {
|
|
|
10247
10862
|
class: "convo-event user-message",
|
|
10248
10863
|
"data-ev-id": ev.id
|
|
10249
10864
|
}, $sender, (0,preact_module.h)("div", {
|
|
10250
|
-
class:
|
|
10865
|
+
class: 'message-user__container' + (this.animateSend && !this.props.isHistory ? ' message-user__container--send' + (this.state.sendEntered ? '' : ' message-user__container--enter') : '')
|
|
10251
10866
|
}, $dot, (0,preact_module.h)(TextMessage, {
|
|
10252
10867
|
ref: this.textMessageRef,
|
|
10253
10868
|
store: this.props.store,
|
|
10869
|
+
t: this.props.t,
|
|
10254
10870
|
ev: ev,
|
|
10255
10871
|
refresh: this.state.refresh,
|
|
10256
10872
|
onLink: this.props.onLink
|
|
@@ -10286,6 +10902,7 @@ class Event extends common/* Com */.Mw {
|
|
|
10286
10902
|
})), $error);
|
|
10287
10903
|
}
|
|
10288
10904
|
async onSendReaction(action) {
|
|
10905
|
+
if (this.props.isHistory) return;
|
|
10289
10906
|
if (this._reacting) return;
|
|
10290
10907
|
let ev = this.props.event.ev;
|
|
10291
10908
|
let cid = util/* default */.A.get(ev, 'data.message.conversation_id');
|
|
@@ -10337,6 +10954,7 @@ class Event extends common/* Com */.Mw {
|
|
|
10337
10954
|
this._reacting = false;
|
|
10338
10955
|
}
|
|
10339
10956
|
renderReactions() {
|
|
10957
|
+
if (this.props.isHistory) return null;
|
|
10340
10958
|
if (this.props.store.isAIDevMode()) return null;
|
|
10341
10959
|
let cid = util/* default */.A.get(this.props.event.ev, 'data.message.conversation_id', '');
|
|
10342
10960
|
if (cid.startsWith('cslight')) return null;
|
|
@@ -10424,7 +11042,7 @@ class Event extends common/* Com */.Mw {
|
|
|
10424
11042
|
let byid = util/* default */.A.get(ev, 'by.display_id', util/* default */.A.get(ev, 'by.id')) || '';
|
|
10425
11043
|
if (bytype === 'user') return util/* default */.A.getUserDisplayName(this.props.store.matchUser());
|
|
10426
11044
|
let acc = this.props.store.matchAccount();
|
|
10427
|
-
if (bytype === 'agent') return util/* default */.A.getAgentDisplayName(acc, this.props.store.matchAgent(byid));
|
|
11045
|
+
if (bytype === 'agent' || util/* default */.A.get(ev, 'by.display_type') === 'agent') return util/* default */.A.getAgentDisplayName(acc, this.props.store.matchAgent(byid));
|
|
10428
11046
|
if (byid.startsWith('at')) return util/* default */.A.getAgentDisplayName(acc, this.props.store.matchAgent(byid));
|
|
10429
11047
|
if (bytype === 'bot') {
|
|
10430
11048
|
let bot = this.props.store.matchBot()[byid];
|
|
@@ -10441,6 +11059,9 @@ function Events_toPropertyKey(t) { var i = Events_toPrimitive(t, "string"); retu
|
|
|
10441
11059
|
function Events_toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
10442
11060
|
;
|
|
10443
11061
|
|
|
11062
|
+
|
|
11063
|
+
|
|
11064
|
+
|
|
10444
11065
|
const convoemptyimg = (convos_empty_namespaceFn());
|
|
10445
11066
|
|
|
10446
11067
|
|
|
@@ -10468,6 +11089,11 @@ class Events extends common/* Com */.Mw {
|
|
|
10468
11089
|
this.checkAndSeen();
|
|
10469
11090
|
}
|
|
10470
11091
|
componentDidMount() {
|
|
11092
|
+
this.syncTimer = util/* default */.A.setInterval(() => this.syncMessages(), 120_000);
|
|
11093
|
+
this.resumeSync = () => this.syncMessages();
|
|
11094
|
+
window.addEventListener('focus', this.resumeSync);
|
|
11095
|
+
document.addEventListener('visibilitychange', this.resumeSync);
|
|
11096
|
+
this.syncMessages();
|
|
10471
11097
|
this.setState({
|
|
10472
11098
|
isShowTyping: false,
|
|
10473
11099
|
typing_event: {}
|
|
@@ -10502,13 +11128,123 @@ class Events extends common/* Com */.Mw {
|
|
|
10502
11128
|
}, 5000);
|
|
10503
11129
|
});
|
|
10504
11130
|
this.props.store.onMessageUpdated(this, async ev => {
|
|
10505
|
-
|
|
10506
|
-
|
|
11131
|
+
const cid = util/* default */.A.convoOfEv(ev);
|
|
11132
|
+
if (!this.visibleCounts || !this.visibleCounts[cid]) return;
|
|
11133
|
+
await this.props.store.reloadConvoEvents(cid);
|
|
10507
11134
|
this.forceUpdate();
|
|
10508
11135
|
});
|
|
11136
|
+
this.restoreInitialBottom();
|
|
11137
|
+
this.observeHistoryStart();
|
|
10509
11138
|
}
|
|
10510
11139
|
componentDidUpdate(prevProps) {
|
|
10511
|
-
if (prevProps.cid !== this.props.cid) this.loadConvo();
|
|
11140
|
+
if (prevProps.cid !== this.props.cid && !this.isDraftPromotion(prevProps, this.props)) this.loadConvo();
|
|
11141
|
+
if (prevProps.cid !== this.props.cid || !prevProps.isShow && this.props.isShow) this.syncMessages();
|
|
11142
|
+
this.restoreInitialBottom();
|
|
11143
|
+
this.observeHistoryStart();
|
|
11144
|
+
}
|
|
11145
|
+
componentWillReceiveProps(nextProps) {
|
|
11146
|
+
if (nextProps.cid === this.props.cid) return;
|
|
11147
|
+
if (this.isDraftPromotion(this.props, nextProps)) {
|
|
11148
|
+
this.visibleCounts[nextProps.cid] = this.visibleCounts[this.props.cid] || 30;
|
|
11149
|
+
delete this.visibleCounts[this.props.cid];
|
|
11150
|
+
return;
|
|
11151
|
+
}
|
|
11152
|
+
this.loadVersion = (this.loadVersion || 0) + 1;
|
|
11153
|
+
this.visibleCounts = this.initialVisibleCounts(nextProps);
|
|
11154
|
+
this.evRefs = {};
|
|
11155
|
+
this.historyBusy = true;
|
|
11156
|
+
this.setState({
|
|
11157
|
+
error: false,
|
|
11158
|
+
historyError: false,
|
|
11159
|
+
historyLoading: false,
|
|
11160
|
+
isShowTyping: false,
|
|
11161
|
+
loading: nextProps.cid ? util/* default */.A.Date.now() : false
|
|
11162
|
+
});
|
|
11163
|
+
}
|
|
11164
|
+
isDraftPromotion(previous, next) {
|
|
11165
|
+
return !!previous.cid && util/* default */.A.get(next.store.widgetConvoOrigins, next.cid) === previous.cid;
|
|
11166
|
+
}
|
|
11167
|
+
initialVisibleCounts(props) {
|
|
11168
|
+
const counts = props.cid ? {
|
|
11169
|
+
[props.cid]: 30
|
|
11170
|
+
} : {};
|
|
11171
|
+
if (!props.store.matchConvo || util/* default */.A.get(props.store.matchConvo(props.cid), 'light_type') !== 'widget') return counts;
|
|
11172
|
+
const history = conversationHistory(props.store, props.cid).slice(0, -1).reverse();
|
|
11173
|
+
let remaining = 30;
|
|
11174
|
+
for (const convo of history) {
|
|
11175
|
+
const cached = util/* default */.A.size(props.store.listEvents(convo.id));
|
|
11176
|
+
if (!cached || !remaining) break;
|
|
11177
|
+
counts[convo.id] = Math.min(cached, remaining);
|
|
11178
|
+
remaining -= counts[convo.id];
|
|
11179
|
+
if (!util/* default */.A.get(props.store.outofmsgM, convo.id)) break;
|
|
11180
|
+
}
|
|
11181
|
+
return counts;
|
|
11182
|
+
}
|
|
11183
|
+
syncMessages() {
|
|
11184
|
+
if (!this._isMounted || !this.props.isShow || document.visibilityState === 'hidden') return;
|
|
11185
|
+
const ids = Object.keys(this.visibleCounts || {}).filter(cid => this.visibleCounts[cid]);
|
|
11186
|
+
return Promise.all(ids.map(cid => this.props.store.syncConvoEvents(cid)));
|
|
11187
|
+
}
|
|
11188
|
+
componentWillUnmount() {
|
|
11189
|
+
util/* default */.A.clearInterval(this.syncTimer);
|
|
11190
|
+
window.removeEventListener('focus', this.resumeSync);
|
|
11191
|
+
document.removeEventListener('visibilitychange', this.resumeSync);
|
|
11192
|
+
this.loadVersion = (this.loadVersion || 0) + 1;
|
|
11193
|
+
if (this.timer) util/* default */.A.clearTimeout(this.timer);
|
|
11194
|
+
if (this.historyCheckTimer) util/* default */.A.clearTimeout(this.historyCheckTimer);
|
|
11195
|
+
if (this.historyObserver) this.historyObserver.disconnect();
|
|
11196
|
+
if (this.scrollTimer) util/* default */.A.clearTimeout(this.scrollTimer);
|
|
11197
|
+
if (this.initialSizeObserver) this.initialSizeObserver.disconnect();
|
|
11198
|
+
}
|
|
11199
|
+
stopInitialBottom() {
|
|
11200
|
+
this.initialBottom = false;
|
|
11201
|
+
}
|
|
11202
|
+
restoreInitialBottom() {
|
|
11203
|
+
if (!this.initialBottom || this.props.isShow === false || !this.refBody) return;
|
|
11204
|
+
if (window.ResizeObserver && (this.initialObservedBody !== this.refBody || this.initialObservedContent !== this.refContent)) {
|
|
11205
|
+
if (this.initialSizeObserver) this.initialSizeObserver.disconnect();
|
|
11206
|
+
this.initialObservedBody = this.refBody;
|
|
11207
|
+
this.initialObservedContent = this.refContent;
|
|
11208
|
+
this.initialSizeObserver = new window.ResizeObserver(() => {
|
|
11209
|
+
if (this._isMounted) this.restoreInitialBottom();
|
|
11210
|
+
});
|
|
11211
|
+
this.initialSizeObserver.observe(this.refBody);
|
|
11212
|
+
if (this.refContent) this.initialSizeObserver.observe(this.refContent);
|
|
11213
|
+
}
|
|
11214
|
+
this.refBody.scrollTop = this.refBody.scrollHeight;
|
|
11215
|
+
if (this.checkAndSeen) this.checkAndSeen();
|
|
11216
|
+
}
|
|
11217
|
+
observeHistoryStart() {
|
|
11218
|
+
if (this.observedHistoryStart !== this.historyStart || this.observedHistoryRoot !== this.refBody) {
|
|
11219
|
+
if (this.historyObserver) this.historyObserver.disconnect();
|
|
11220
|
+
this.observedHistoryStart = this.historyStart;
|
|
11221
|
+
this.observedHistoryRoot = this.refBody;
|
|
11222
|
+
if (this.historyStart && this.refBody && window.IntersectionObserver) {
|
|
11223
|
+
this.historyObserver = new window.IntersectionObserver(entries => {
|
|
11224
|
+
if (entries.some(entry => entry.isIntersecting)) this.queueHistoryCheck();
|
|
11225
|
+
}, {
|
|
11226
|
+
root: this.refBody
|
|
11227
|
+
});
|
|
11228
|
+
this.historyObserver.observe(this.historyStart);
|
|
11229
|
+
}
|
|
11230
|
+
}
|
|
11231
|
+
this.queueHistoryCheck();
|
|
11232
|
+
}
|
|
11233
|
+
queueHistoryCheck() {
|
|
11234
|
+
if (this.historyCheckTimer || !this._isMounted) return;
|
|
11235
|
+
this.historyCheckTimer = util/* default */.A.setTimeout(() => {
|
|
11236
|
+
this.historyCheckTimer = null;
|
|
11237
|
+
this.loadVisibleHistory();
|
|
11238
|
+
}, 0);
|
|
11239
|
+
}
|
|
11240
|
+
loadVisibleHistory() {
|
|
11241
|
+
if (!this._isMounted || this.props.isShow === false || this.historyBusy || this.state.historyError || !this.hasMore()) return;
|
|
11242
|
+
if (!this.refBody || !this.historyStart) return;
|
|
11243
|
+
const root = this.refBody.getBoundingClientRect();
|
|
11244
|
+
const marker = this.historyStart.getBoundingClientRect();
|
|
11245
|
+
if (root.width <= 0 || root.height <= 0 || marker.height <= 0) return;
|
|
11246
|
+
if (marker.right <= Math.max(root.left, 0) || marker.left >= Math.min(root.right, window.innerWidth)) return;
|
|
11247
|
+
if (marker.bottom > Math.max(root.top, 0) && marker.top < Math.min(root.bottom, window.innerHeight)) return this.loadMore();
|
|
10512
11248
|
}
|
|
10513
11249
|
setEventChildRef(ele, id) {
|
|
10514
11250
|
this.evRefs[id] = ele;
|
|
@@ -10535,26 +11271,28 @@ class Events extends common/* Com */.Mw {
|
|
|
10535
11271
|
}
|
|
10536
11272
|
render() {
|
|
10537
11273
|
if (this.state.error) return this.renderError();
|
|
10538
|
-
|
|
10539
|
-
|
|
10540
|
-
|
|
10541
|
-
|
|
10542
|
-
|
|
10543
|
-
|
|
10544
|
-
|
|
10545
|
-
}, (0,preact_module.h)("div", {
|
|
10546
|
-
class: "widget-body--empty-icon"
|
|
10547
|
-
}), (0,preact_module.h)("div", {
|
|
10548
|
-
class: "widget-body--empty-text"
|
|
10549
|
-
}, this.props.t('empty_convo_text'))), (0,preact_module.h)(PoweredBy, {
|
|
10550
|
-
store: this.props.store
|
|
11274
|
+
const conversations = conversationHistory(this.props.store, this.props.cid).filter(convo => this.visibleCounts && this.visibleCounts[convo.id]);
|
|
11275
|
+
let events = conversations.flatMap(convo => {
|
|
11276
|
+
const entries = conversationEvents(this.props.store, convo).slice(-this.visibleCounts[convo.id]).filter(entry => convo.id === this.props.cid || entry.ev.type !== 'conversation_state_updated');
|
|
11277
|
+
processEvents(convo, entries);
|
|
11278
|
+
return entries.map(entry => ({
|
|
11279
|
+
...entry,
|
|
11280
|
+
convo
|
|
10551
11281
|
}));
|
|
11282
|
+
});
|
|
11283
|
+
if (!this.state.loading && !this.props.creating && events.length === 0 && !this.props.cid) {
|
|
11284
|
+
if (!this.greetingCreated) this.greetingCreated = util/* default */.A.Date.now();
|
|
11285
|
+
events.push({
|
|
11286
|
+
mode: 'lead',
|
|
11287
|
+
is_last_message_send: true,
|
|
11288
|
+
ev: {
|
|
11289
|
+
...widgetGreeting(this.props.chatbox, this.props.t, this.greetingCreated),
|
|
11290
|
+
id: 'widget-virtual-greeting'
|
|
11291
|
+
}
|
|
11292
|
+
});
|
|
10552
11293
|
}
|
|
10553
|
-
|
|
11294
|
+
this.renderedIds = new Set(events.map(entry => entry.ev.id));
|
|
10554
11295
|
let convo = this.props.store.matchConvo(this.props.cid);
|
|
10555
|
-
events = util/* default */.A.map(events, ev => ({
|
|
10556
|
-
ev: ev
|
|
10557
|
-
}));
|
|
10558
11296
|
let ev = this.state.typing_event || {
|
|
10559
11297
|
id: 'evzz' + util/* default */.A.Date.now(),
|
|
10560
11298
|
created: util/* default */.A.Date.now(),
|
|
@@ -10579,11 +11317,21 @@ class Events extends common/* Com */.Mw {
|
|
|
10579
11317
|
}
|
|
10580
11318
|
}
|
|
10581
11319
|
};
|
|
10582
|
-
|
|
11320
|
+
const hasMessages = events.some(entry => entry.ev.type === 'message_sent');
|
|
10583
11321
|
events.push(fakeev);
|
|
10584
11322
|
let $events = util/* default */.A.map(events, ev => {
|
|
10585
|
-
|
|
10586
|
-
|
|
11323
|
+
const sourceConvo = ev.convo || convo;
|
|
11324
|
+
const isHistory = sourceConvo && sourceConvo.id !== this.props.cid;
|
|
11325
|
+
let isLast = !isHistory && ev.is_last_message_send && util/* default */.A.get(sourceConvo, 'state') !== 'ended';
|
|
11326
|
+
const sourceId = sourceConvo ? sourceConvo.id : '';
|
|
11327
|
+
const key = (util/* default */.A.get(this.props.store.widgetConvoOrigins, sourceId) || sourceId) + ':' + conversationEventKey(ev.ev);
|
|
11328
|
+
return (0,preact_module.h)("fieldset", {
|
|
11329
|
+
class: isHistory ? 'conversation-event conversation-event--history' : 'conversation-event',
|
|
11330
|
+
disabled: isHistory,
|
|
11331
|
+
"data-conversation-id": sourceConvo && sourceConvo.id,
|
|
11332
|
+
key: key
|
|
11333
|
+
}, (0,preact_module.h)(Event, {
|
|
11334
|
+
isHistory: isHistory,
|
|
10587
11335
|
isLast: isLast,
|
|
10588
11336
|
chatbox: this.props.chatbox,
|
|
10589
11337
|
onLink: this.props.onLink,
|
|
@@ -10593,45 +11341,78 @@ class Events extends common/* Com */.Mw {
|
|
|
10593
11341
|
onPostback: this.props.onPostback,
|
|
10594
11342
|
onFocusSourceEventFromQuote: this.onFocusSourceEventFromQuote,
|
|
10595
11343
|
ref: ele => this.setEventChildRef(ele, ev.ev.id),
|
|
10596
|
-
isConvoEnded: util/* default */.A.get(
|
|
11344
|
+
isConvoEnded: util/* default */.A.get(sourceConvo, 'state') === 'ended',
|
|
10597
11345
|
event: ev,
|
|
10598
11346
|
t: this.props.t,
|
|
10599
|
-
key:
|
|
10600
|
-
});
|
|
11347
|
+
key: key
|
|
11348
|
+
}));
|
|
10601
11349
|
});
|
|
10602
11350
|
let $loading = null;
|
|
10603
|
-
|
|
10604
|
-
if (this.props.creating) {
|
|
11351
|
+
if (!hasMessages && (this.props.creating || this.state.loading)) {
|
|
10605
11352
|
$loading = (0,preact_module.h)(spinner/* default */.A, {
|
|
10606
11353
|
static: true,
|
|
10607
11354
|
mode: util/* default */.A.get(this.props.chatbox, 'primary_color', 'dark'),
|
|
10608
11355
|
size: "120",
|
|
10609
11356
|
center: true
|
|
10610
11357
|
});
|
|
10611
|
-
style = 'opacity: 0 !important';
|
|
10612
|
-
}
|
|
10613
|
-
if (this.state.loading) {
|
|
10614
|
-
if (util/* default */.A.Date.now() - this.state.loading > 500) {
|
|
10615
|
-
$loading = (0,preact_module.h)(spinner/* default */.A, {
|
|
10616
|
-
static: true,
|
|
10617
|
-
mode: util/* default */.A.get(this.props.chatbox, 'primary_color', 'dark'),
|
|
10618
|
-
size: "120",
|
|
10619
|
-
center: true
|
|
10620
|
-
});
|
|
10621
|
-
style = 'opacity: 0 !important';
|
|
10622
|
-
}
|
|
10623
11358
|
}
|
|
10624
11359
|
return (0,preact_module.h)(preact_module/* Fragment */.FK, null, $loading, (0,preact_module.h)("div", {
|
|
10625
|
-
style: style,
|
|
10626
11360
|
ref: ref => this.refBody = ref,
|
|
10627
11361
|
class: "widget-body--events-container",
|
|
10628
|
-
onMouseOver: this.checkAndSeen
|
|
10629
|
-
|
|
10630
|
-
|
|
11362
|
+
onMouseOver: this.checkAndSeen,
|
|
11363
|
+
onScroll: () => this.queueHistoryCheck(),
|
|
11364
|
+
onWheel: () => this.stopInitialBottom(),
|
|
11365
|
+
onTouchStart: () => this.stopInitialBottom(),
|
|
11366
|
+
onPointerDown: () => this.stopInitialBottom(),
|
|
11367
|
+
onKeyDown: () => this.stopInitialBottom()
|
|
11368
|
+
}, this.hasMore() && (0,preact_module.h)("div", {
|
|
11369
|
+
ref: ref => {
|
|
11370
|
+
this.historyStart = ref;
|
|
11371
|
+
},
|
|
11372
|
+
class: "conversation-history-start",
|
|
11373
|
+
"aria-hidden": "true"
|
|
11374
|
+
}), this.state.historyLoading && !this.state.historyError && (0,preact_module.h)(spinner/* default */.A, {
|
|
11375
|
+
size: "16",
|
|
11376
|
+
mode: "blue"
|
|
11377
|
+
}), this.state.historyError && this.renderHistoryError(), (0,preact_module.h)("div", {
|
|
11378
|
+
class: "widget-body--events",
|
|
11379
|
+
ref: ref => {
|
|
11380
|
+
this.refContent = ref;
|
|
11381
|
+
}
|
|
10631
11382
|
}, $events), (0,preact_module.h)(PoweredBy, {
|
|
10632
11383
|
store: this.props.store
|
|
10633
11384
|
})));
|
|
10634
11385
|
}
|
|
11386
|
+
renderHistoryError() {
|
|
11387
|
+
const t = this.props.t;
|
|
11388
|
+
const translated = t('load_history_error');
|
|
11389
|
+
const locale = t.locale ? t.locale().toLowerCase() : 'en';
|
|
11390
|
+
const fallback = locale.startsWith('vi') ? 'Chưa tải được tin nhắn cũ' : 'Couldn’t load earlier messages';
|
|
11391
|
+
const text = translated && translated !== 'load_history_error' ? translated : fallback;
|
|
11392
|
+
return (0,preact_module.h)("div", {
|
|
11393
|
+
class: "conversation-history-error",
|
|
11394
|
+
role: "status"
|
|
11395
|
+
}, (0,preact_module.h)("span", {
|
|
11396
|
+
class: "conversation-history-error__text"
|
|
11397
|
+
}, text), (0,preact_module.h)("button", {
|
|
11398
|
+
class: "conversation-history-error__retry",
|
|
11399
|
+
type: "button",
|
|
11400
|
+
disabled: this.state.historyLoading,
|
|
11401
|
+
"aria-label": t('try_again'),
|
|
11402
|
+
"aria-busy": !!this.state.historyLoading,
|
|
11403
|
+
onClick: () => this.loadMore()
|
|
11404
|
+
}, (0,preact_module.h)("span", {
|
|
11405
|
+
class: "conversation-history-error__retry-label",
|
|
11406
|
+
style: {
|
|
11407
|
+
visibility: this.state.historyLoading ? 'hidden' : 'visible'
|
|
11408
|
+
}
|
|
11409
|
+
}, t('try_again')), this.state.historyLoading && (0,preact_module.h)("span", {
|
|
11410
|
+
class: "conversation-history-error__spinner",
|
|
11411
|
+
"aria-hidden": "true"
|
|
11412
|
+
}, (0,preact_module.h)(spinner/* default */.A, {
|
|
11413
|
+
size: "14"
|
|
11414
|
+
}))));
|
|
11415
|
+
}
|
|
10635
11416
|
renderError() {
|
|
10636
11417
|
let $tryAgainBtn = (0,preact_module.h)("a", {
|
|
10637
11418
|
href: "#",
|
|
@@ -10679,61 +11460,168 @@ class Events extends common/* Com */.Mw {
|
|
|
10679
11460
|
});
|
|
10680
11461
|
}
|
|
10681
11462
|
onEvent(newev) {
|
|
10682
|
-
|
|
11463
|
+
const cid = util/* default */.A.convoOfEv(newev);
|
|
11464
|
+
if (!this.visibleCounts || !this.visibleCounts[cid]) return;
|
|
11465
|
+
if (newev.type === 'message_sent') {
|
|
11466
|
+
const sourceEventId = util/* default */.A.get(newev, 'source_event_id');
|
|
11467
|
+
const key = cid + ':' + (sourceEventId || newev.id);
|
|
11468
|
+
this.receivedMessageKeys = this.receivedMessageKeys || new Set();
|
|
11469
|
+
const known = this.receivedMessageKeys.has(key) || this.renderedIds && (this.renderedIds.has(newev.id) || this.renderedIds.has(sourceEventId));
|
|
11470
|
+
this.receivedMessageKeys.add(key);
|
|
11471
|
+
if (known) return;
|
|
11472
|
+
if (this.renderedIds) this.visibleCounts[cid]++;
|
|
11473
|
+
}
|
|
11474
|
+
if (cid !== this.props.cid) {
|
|
11475
|
+
const container = this.refBody;
|
|
11476
|
+
const height = container ? container.scrollHeight : 0;
|
|
11477
|
+
const top = container ? container.scrollTop : 0;
|
|
11478
|
+
this.forceUpdate();
|
|
11479
|
+
util/* default */.A.setTimeout(() => {
|
|
11480
|
+
if (container && container === this.refBody) container.scrollTop = top + container.scrollHeight - height;
|
|
11481
|
+
});
|
|
11482
|
+
return;
|
|
11483
|
+
}
|
|
10683
11484
|
let isBottom = this.isBottom();
|
|
11485
|
+
if (newev.type === 'message_sent') this.stopInitialBottom();
|
|
10684
11486
|
var byme = false;
|
|
10685
|
-
if (util/* default */.A.get(newev, 'type') === 'message_sent' && newev.id === util/* default */.A.get(newev, '
|
|
10686
|
-
if (byme || isBottom) this.scrollToBottom();
|
|
11487
|
+
if (util/* default */.A.get(newev, 'type') === 'message_sent' && newev.id === util/* default */.A.get(newev, 'source_event_id')) byme = true;
|
|
11488
|
+
if (byme || isBottom) this.scrollToBottom('smooth');
|
|
11489
|
+
}
|
|
11490
|
+
historyTarget() {
|
|
11491
|
+
const conversations = conversationHistory(this.props.store, this.props.cid);
|
|
11492
|
+
const first = conversations.findIndex(convo => this.visibleCounts && this.visibleCounts[convo.id]);
|
|
11493
|
+
if (first < 0) return;
|
|
11494
|
+
const convo = conversations[first];
|
|
11495
|
+
const count = util/* default */.A.size(this.props.store.listEvents(convo.id));
|
|
11496
|
+
if (this.visibleCounts[convo.id] < count || !convo.id.startsWith('cslight') && !util/* default */.A.get(this.props.store.outofmsgM, convo.id)) return convo;
|
|
11497
|
+
return conversations[first - 1];
|
|
11498
|
+
}
|
|
11499
|
+
hasMore() {
|
|
11500
|
+
return !!this.historyTarget();
|
|
11501
|
+
}
|
|
11502
|
+
async fetchPage(cid) {
|
|
11503
|
+
if (cid.startsWith('cslight') || util/* default */.A.get(this.props.store.outofmsgM, cid)) return {};
|
|
11504
|
+
this.eventRequests = this.eventRequests || new Map();
|
|
11505
|
+
let request = this.eventRequests.get(cid);
|
|
11506
|
+
if (!request) {
|
|
11507
|
+
request = this.props.store.fetchMoreEvents(cid, 30);
|
|
11508
|
+
this.eventRequests.set(cid, request);
|
|
11509
|
+
}
|
|
11510
|
+
try {
|
|
11511
|
+
return await request;
|
|
11512
|
+
} finally {
|
|
11513
|
+
if (this.eventRequests.get(cid) === request) this.eventRequests.delete(cid);
|
|
11514
|
+
}
|
|
10687
11515
|
}
|
|
10688
11516
|
async loadConvo() {
|
|
10689
|
-
|
|
10690
|
-
this.
|
|
11517
|
+
const cid = this.props.cid;
|
|
11518
|
+
this.receivedMessageKeys = new Set();
|
|
11519
|
+
this.initialBottom = true;
|
|
11520
|
+
const version = this.loadVersion = (this.loadVersion || 0) + 1;
|
|
11521
|
+
this.visibleCounts = this.initialVisibleCounts(this.props);
|
|
11522
|
+
this.historyBusy = true;
|
|
11523
|
+
this.evRefs = {};
|
|
10691
11524
|
this.setState({
|
|
10692
|
-
|
|
11525
|
+
error: false,
|
|
11526
|
+
historyError: false,
|
|
11527
|
+
historyLoading: false,
|
|
11528
|
+
isShowTyping: false,
|
|
11529
|
+
loading: cid && !util/* default */.A.size(this.props.store.listEvents(cid)) ? util/* default */.A.Date.now() : false
|
|
10693
11530
|
});
|
|
10694
|
-
|
|
10695
|
-
|
|
10696
|
-
|
|
10697
|
-
|
|
10698
|
-
|
|
10699
|
-
|
|
10700
|
-
|
|
10701
|
-
|
|
10702
|
-
|
|
10703
|
-
|
|
10704
|
-
|
|
10705
|
-
|
|
10706
|
-
|
|
10707
|
-
loading: false
|
|
11531
|
+
try {
|
|
11532
|
+
if (cid && !util/* default */.A.size(this.props.store.listEvents(cid))) {
|
|
11533
|
+
const result = await this.fetchPage(cid);
|
|
11534
|
+
if (version !== this.loadVersion || !this._isMounted) return;
|
|
11535
|
+
if (result && result.error) this.setState({
|
|
11536
|
+
error: !util/* default */.A.size(this.props.store.listEvents(cid)),
|
|
11537
|
+
historyError: true
|
|
11538
|
+
});
|
|
11539
|
+
}
|
|
11540
|
+
} catch (_) {
|
|
11541
|
+
if (version === this.loadVersion) this.setState({
|
|
11542
|
+
error: !util/* default */.A.size(this.props.store.listEvents(cid)),
|
|
11543
|
+
historyError: true
|
|
10708
11544
|
});
|
|
10709
|
-
|
|
10710
|
-
if (
|
|
11545
|
+
} finally {
|
|
11546
|
+
if (version === this.loadVersion && this._isMounted) {
|
|
11547
|
+
this.historyBusy = false;
|
|
10711
11548
|
this.setState({
|
|
10712
|
-
|
|
11549
|
+
loading: false
|
|
10713
11550
|
});
|
|
10714
|
-
|
|
11551
|
+
if (!this.initialBottom && this.receivedMessageKeys.size && this.isBottom()) this.scrollToBottom('smooth');
|
|
11552
|
+
this.queueHistoryCheck();
|
|
11553
|
+
if (cid && cid.startsWith('cslightwidget_') && Object.keys(this.visibleCounts).length === 1 && this.hasMore()) this.loadMore();
|
|
10715
11554
|
}
|
|
10716
11555
|
}
|
|
10717
|
-
|
|
11556
|
+
}
|
|
11557
|
+
async loadMore() {
|
|
11558
|
+
if (this.historyBusy || !this._isMounted) return;
|
|
11559
|
+
const target = this.historyTarget();
|
|
11560
|
+
if (!target) return;
|
|
11561
|
+
const version = this.loadVersion;
|
|
11562
|
+
this.historyBusy = true;
|
|
11563
|
+
const container = this.refBody;
|
|
11564
|
+
const visible = this.visibleCounts[target.id] || 0;
|
|
10718
11565
|
this.setState({
|
|
10719
|
-
|
|
11566
|
+
historyLoading: true
|
|
10720
11567
|
});
|
|
10721
|
-
|
|
11568
|
+
try {
|
|
11569
|
+
if (visible >= util/* default */.A.size(this.props.store.listEvents(target.id))) {
|
|
11570
|
+
const result = await this.fetchPage(target.id);
|
|
11571
|
+
if (result && result.error) throw result.error;
|
|
11572
|
+
}
|
|
11573
|
+
if (version !== this.loadVersion || !this._isMounted) return;
|
|
11574
|
+
this.visibleCounts[target.id] = visible + 30;
|
|
11575
|
+
this.setState({
|
|
11576
|
+
historyError: false
|
|
11577
|
+
});
|
|
11578
|
+
} catch (_) {
|
|
11579
|
+
if (version === this.loadVersion) this.setState({
|
|
11580
|
+
historyError: true
|
|
11581
|
+
});
|
|
11582
|
+
} finally {
|
|
11583
|
+
if (version === this.loadVersion && this._isMounted) {
|
|
11584
|
+
const height = container ? container.scrollHeight : 0;
|
|
11585
|
+
const top = container ? container.scrollTop : 0;
|
|
11586
|
+
this.setState({
|
|
11587
|
+
historyLoading: false
|
|
11588
|
+
});
|
|
11589
|
+
this.forceUpdate();
|
|
11590
|
+
await new Promise(resolve => util/* default */.A.setTimeout(resolve, 0));
|
|
11591
|
+
if (version === this.loadVersion && this._isMounted) {
|
|
11592
|
+
if (this.initialBottom) this.restoreInitialBottom();else if (container && container === this.refBody) {
|
|
11593
|
+
container.scrollTop = top + container.scrollHeight - height;
|
|
11594
|
+
this.lastScrollTop = container.scrollTop;
|
|
11595
|
+
}
|
|
11596
|
+
this.historyBusy = false;
|
|
11597
|
+
this.queueHistoryCheck();
|
|
11598
|
+
}
|
|
11599
|
+
}
|
|
11600
|
+
}
|
|
10722
11601
|
}
|
|
10723
11602
|
isBottom() {
|
|
10724
11603
|
let $container = this.refBody;
|
|
10725
11604
|
if (!$container) return false;
|
|
10726
11605
|
return $container.scrollHeight < $container.scrollTop + $container.offsetHeight + 50;
|
|
10727
11606
|
}
|
|
10728
|
-
scrollToBottom() {
|
|
10729
|
-
util/* default */.A.
|
|
11607
|
+
scrollToBottom(behavior = 'auto') {
|
|
11608
|
+
if (this.scrollTimer) util/* default */.A.clearTimeout(this.scrollTimer);
|
|
11609
|
+
const cid = this.props.cid;
|
|
11610
|
+
this.scrollTimer = util/* default */.A.setTimeout(() => {
|
|
11611
|
+
this.scrollTimer = null;
|
|
11612
|
+
if (!this._isMounted || this.props.cid !== cid) return;
|
|
10730
11613
|
const $div = this.refBody;
|
|
10731
|
-
if (
|
|
11614
|
+
if (!$div) return;
|
|
11615
|
+
const reducedMotion = window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches;
|
|
11616
|
+
if (behavior === 'smooth' && !reducedMotion && $div.scrollTo) {
|
|
11617
|
+
$div.scrollTo({
|
|
11618
|
+
top: $div.scrollHeight,
|
|
11619
|
+
behavior: 'smooth'
|
|
11620
|
+
});
|
|
11621
|
+
} else {
|
|
11622
|
+
$div.scrollTop = $div.scrollHeight;
|
|
11623
|
+
}
|
|
10732
11624
|
});
|
|
10733
|
-
util/* default */.A.setTimeout(() => {
|
|
10734
|
-
const $div = this.refBody;
|
|
10735
|
-
if ($div) $div.scrollTop = $div.scrollHeight;
|
|
10736
|
-
}, 100);
|
|
10737
11625
|
if (this.props.isShow) {
|
|
10738
11626
|
if (this.props.store.browserVisibility === 'visible' && document.hasFocus()) {
|
|
10739
11627
|
this.props.store.seenConvo(this.props.cid);
|
|
@@ -10741,57 +11629,6 @@ class Events extends common/* Com */.Mw {
|
|
|
10741
11629
|
}
|
|
10742
11630
|
}
|
|
10743
11631
|
}
|
|
10744
|
-
function processEvents(convo, events) {
|
|
10745
|
-
events = events.filter(event => visibleEvent(event.ev));
|
|
10746
|
-
if (events.length < 1) return;
|
|
10747
|
-
var lastAgentEvent;
|
|
10748
|
-
for (var i = 1; i < events.length; i++) {
|
|
10749
|
-
let curEvent = events[i];
|
|
10750
|
-
let lastEvent = events[i - 1];
|
|
10751
|
-
if (util/* default */.A.get(curEvent, 'ev.by.type') != 'user' && !curEvent.is_typing) {
|
|
10752
|
-
lastAgentEvent = curEvent;
|
|
10753
|
-
}
|
|
10754
|
-
if (visibleEvent(curEvent.ev)) {
|
|
10755
|
-
let elapsedSec = util/* default */.A.unixSec(curEvent.ev.created) - util/* default */.A.unixSec(lastEvent.ev.created);
|
|
10756
|
-
if (elapsedSec > 300) curEvent.show_time = true;
|
|
10757
|
-
}
|
|
10758
|
-
}
|
|
10759
|
-
if (lastAgentEvent) lastAgentEvent.show_time = true;
|
|
10760
|
-
for (var i = 0; i < events.length; i++) {
|
|
10761
|
-
let curEvent = events[i];
|
|
10762
|
-
if (util/* default */.A.get(curEvent, 'ev.type') === 'message_sent') {
|
|
10763
|
-
curEvent.show_time = true;
|
|
10764
|
-
break;
|
|
10765
|
-
}
|
|
10766
|
-
}
|
|
10767
|
-
let lastMsgSentIdx = -1;
|
|
10768
|
-
for (var i = 0; i < events.length; i++) {
|
|
10769
|
-
let curEvent = events[i];
|
|
10770
|
-
let prevEvent = events[i - 1];
|
|
10771
|
-
let nextEvent = events[i + 1];
|
|
10772
|
-
if (curEvent.ev.type === 'message_sent') {
|
|
10773
|
-
lastMsgSentIdx = i;
|
|
10774
|
-
curEvent.mode = 'lead';
|
|
10775
|
-
if (util/* default */.A.get(prevEvent, 'ev.type') === 'message_sent' && util/* default */.A.get(prevEvent, 'ev.by.id') === util/* default */.A.get(curEvent, 'ev.by.id')) {
|
|
10776
|
-
curEvent.mode = 'follow';
|
|
10777
|
-
}
|
|
10778
|
-
if (util/* default */.A.get(nextEvent, 'ev.type') !== 'message_sent' || util/* default */.A.get(nextEvent, 'ev.by.id') !== util/* default */.A.get(curEvent, 'ev.by.id')) {
|
|
10779
|
-
curEvent.is_end = true;
|
|
10780
|
-
}
|
|
10781
|
-
continue;
|
|
10782
|
-
}
|
|
10783
|
-
}
|
|
10784
|
-
if (lastMsgSentIdx > -1) {
|
|
10785
|
-
events[lastMsgSentIdx].is_last_message_send = true;
|
|
10786
|
-
}
|
|
10787
|
-
}
|
|
10788
|
-
function visibleEvent(ev) {
|
|
10789
|
-
let type = util/* default */.A.get(ev, 'type');
|
|
10790
|
-
if (type === 'message_sent') return true;
|
|
10791
|
-
if (type === 'conversation_state_updated') {
|
|
10792
|
-
return util/* default */.A.get(ev, 'data.conversation.state') == 'ended';
|
|
10793
|
-
}
|
|
10794
|
-
}
|
|
10795
11632
|
function Events_isSummited(form) {
|
|
10796
11633
|
let fields = util/* default */.A.get(form, 'fields') || [];
|
|
10797
11634
|
return util/* default */.A.find(fields, field => !!field.answered);
|
|
@@ -11245,6 +12082,7 @@ var Widget_empty = (empty_namespaceFn());
|
|
|
11245
12082
|
|
|
11246
12083
|
|
|
11247
12084
|
|
|
12085
|
+
|
|
11248
12086
|
let Order = false;
|
|
11249
12087
|
const LoadOrder = () => __webpack_require__.e(/* import() */ 185).then(() => (__webpack_require__(4185)));
|
|
11250
12088
|
|
|
@@ -11256,51 +12094,12 @@ class Widget extends common/* Com */.Mw {
|
|
|
11256
12094
|
constructor(props) {
|
|
11257
12095
|
super(props);
|
|
11258
12096
|
Widget_defineProperty(this, "msgInput", (0,preact_module/* createRef */._3)());
|
|
11259
|
-
Widget_defineProperty(this, "findMissingRTMessage", async started => {
|
|
11260
|
-
let messageSentDict = this.props.store.listAgentRealtimeMessageSent();
|
|
11261
|
-
let res1 = await this.props.store.sbzListConversations();
|
|
11262
|
-
let conversions = util/* default */.A.get(res1, 'body.conversations') || [];
|
|
11263
|
-
let cids = util/* default */.A.map(conversions, convo => convo.id);
|
|
11264
|
-
let promises = util/* default */.A.map(cids, cid => this.props.store.sbzListMessages(cid));
|
|
11265
|
-
let msgReses = await Promise.all(promises);
|
|
11266
|
-
util/* default */.A.map(msgReses, msgRes => {
|
|
11267
|
-
let messages = util/* default */.A.get(msgRes, 'body') || [];
|
|
11268
|
-
util/* default */.A.map(messages, ev => {
|
|
11269
|
-
if (ev.created < started) return;
|
|
11270
|
-
if (ev.type !== 'message_sent') return;
|
|
11271
|
-
if (util/* default */.A.get(ev, 'by.type') === 'user') return;
|
|
11272
|
-
console.log('check ev pass condition', ev);
|
|
11273
|
-
if (!messageSentDict[ev.id] && !this.debugAgentSentEvIds[ev.id]) {
|
|
11274
|
-
let accid = util/* default */.A.get(this.props.store.matchAccount(), 'id');
|
|
11275
|
-
this.props.store.sendBugReport(`[WIDGET ${accid}] Missing agent message sent evid ${ev.id}, cid ${util/* default */.A.convoOfEv(ev)}, ev_created ${ev.created}, FE timestamp ${Date.now()}, Init Debug timestamp ${started}`);
|
|
11276
|
-
this.debugAgentSentEvIds[ev.id] = true;
|
|
11277
|
-
}
|
|
11278
|
-
});
|
|
11279
|
-
});
|
|
11280
|
-
});
|
|
11281
|
-
Widget_defineProperty(this, "debugRTAgentMessageSent", async () => {
|
|
11282
|
-
try {
|
|
11283
|
-
let debugAccountIds = this.props.store.matchDebugAccountIds();
|
|
11284
|
-
let accid = util/* default */.A.get(this.props.store.matchAccount(), 'id');
|
|
11285
|
-
if (!debugAccountIds.includes(accid)) return;
|
|
11286
|
-
console.log('START check RT agent message with BE source');
|
|
11287
|
-
let started = Date.now();
|
|
11288
|
-
this.findMissingRTMessage(started);
|
|
11289
|
-
for (let i = 0; i < 100_000; i++) {
|
|
11290
|
-
await util/* default */.A.sleep(120_000);
|
|
11291
|
-
console.log('LOOP check RT agent message with BE source', i);
|
|
11292
|
-
this.findMissingRTMessage(started);
|
|
11293
|
-
}
|
|
11294
|
-
} catch (err) {
|
|
11295
|
-
this.props.store.sendBugReport(`debugRTAgentMessageSent ERROR ${err.stack}`);
|
|
11296
|
-
}
|
|
11297
|
-
});
|
|
11298
12097
|
Widget_defineProperty(this, "formMounted", form => {
|
|
11299
12098
|
let formData = this.fillForm(form);
|
|
11300
12099
|
if (form.question_required || this.state.quickReplyMessage.text) {
|
|
11301
12100
|
formData['question'] = {
|
|
11302
12101
|
key: 'question',
|
|
11303
|
-
is_required:
|
|
12102
|
+
is_required: false,
|
|
11304
12103
|
label: this.props.t.i18n(util/* default */.A.get(form, `i18n_question_label`, {})) || form.question_label,
|
|
11305
12104
|
type: 'text',
|
|
11306
12105
|
value: this.state.quickReplyMessage.text
|
|
@@ -11311,14 +12110,118 @@ class Widget extends common/* Com */.Mw {
|
|
|
11311
12110
|
});
|
|
11312
12111
|
if (!this.props.store.isMobile() && !form._updated) this.focusInput();
|
|
11313
12112
|
});
|
|
11314
|
-
Widget_defineProperty(this, "sendMessage", async message
|
|
11315
|
-
|
|
11316
|
-
|
|
11317
|
-
|
|
11318
|
-
|
|
12113
|
+
Widget_defineProperty(this, "sendMessage", async (message, {
|
|
12114
|
+
formSubmitted = false,
|
|
12115
|
+
groupId
|
|
12116
|
+
} = {}) => {
|
|
12117
|
+
if (this._sendingNewConversation) return false;
|
|
12118
|
+
if (util/* default */.A.get(this.props.store.matchConvo(this.props.cid), 'state') === 'ended') {
|
|
12119
|
+
const form = this.startingConversationForm();
|
|
12120
|
+
if (form && (util/* default */.A.size(form.groups) || form.group_required || this.isFormRequired(''))) {
|
|
12121
|
+
this.setState({
|
|
12122
|
+
restartForm: true,
|
|
12123
|
+
quickReplyMessage: message
|
|
12124
|
+
});
|
|
12125
|
+
return;
|
|
12126
|
+
}
|
|
12127
|
+
this._sendingNewConversation = true;
|
|
12128
|
+
this.setState({
|
|
12129
|
+
creating: true,
|
|
12130
|
+
creatingError: null
|
|
12131
|
+
});
|
|
12132
|
+
try {
|
|
12133
|
+
const {
|
|
12134
|
+
convo,
|
|
12135
|
+
error
|
|
12136
|
+
} = await this.props.store.startConvo({
|
|
12137
|
+
locale: this.props.t.locale(),
|
|
12138
|
+
message: message.text,
|
|
12139
|
+
initial_by: this.props.store.matchUser().id
|
|
12140
|
+
});
|
|
12141
|
+
if (error) {
|
|
12142
|
+
this.setState({
|
|
12143
|
+
creatingError: error
|
|
12144
|
+
});
|
|
12145
|
+
return false;
|
|
12146
|
+
}
|
|
12147
|
+
await this.props.store.sendConvoEvent(convo.id, 'message_sent', {
|
|
12148
|
+
message
|
|
12149
|
+
});
|
|
12150
|
+
this.props.onGo({
|
|
12151
|
+
view: 'chat',
|
|
12152
|
+
cid: convo.id
|
|
12153
|
+
});
|
|
12154
|
+
} finally {
|
|
12155
|
+
this._sendingNewConversation = false;
|
|
12156
|
+
this.setState({
|
|
12157
|
+
creating: false
|
|
12158
|
+
});
|
|
12159
|
+
}
|
|
12160
|
+
return;
|
|
12161
|
+
}
|
|
12162
|
+
const form = this.startingConversationForm();
|
|
12163
|
+
const needsGroup = form && !this.hasSentMessage(this.props.cid) && (util/* default */.A.size(form.groups) || form.group_required);
|
|
12164
|
+
if (!formSubmitted && (this.isFormRequired() || needsGroup)) {
|
|
12165
|
+
this.setState({
|
|
12166
|
+
clickedJoin: true,
|
|
12167
|
+
quickReplyMessage: message
|
|
12168
|
+
});
|
|
11319
12169
|
return;
|
|
11320
12170
|
}
|
|
11321
12171
|
let text = message.text;
|
|
12172
|
+
const localConvo = this.props.store.matchConvo(this.props.cid);
|
|
12173
|
+
if (localConvo && localConvo.light_type === 'widget') {
|
|
12174
|
+
this._sendingNewConversation = true;
|
|
12175
|
+
this.setState({
|
|
12176
|
+
creating: true,
|
|
12177
|
+
creatingError: null
|
|
12178
|
+
});
|
|
12179
|
+
try {
|
|
12180
|
+
const {
|
|
12181
|
+
convo,
|
|
12182
|
+
error
|
|
12183
|
+
} = await this.props.store.startConvo({
|
|
12184
|
+
locale: localConvo.locale,
|
|
12185
|
+
message: text,
|
|
12186
|
+
group_id: groupId,
|
|
12187
|
+
initial_by: this.props.store.matchUser().id,
|
|
12188
|
+
greeting_message: localConvo.events[0]
|
|
12189
|
+
});
|
|
12190
|
+
if (error || !convo) {
|
|
12191
|
+
this.setState({
|
|
12192
|
+
creatingError: error || 'start_failed'
|
|
12193
|
+
});
|
|
12194
|
+
return false;
|
|
12195
|
+
}
|
|
12196
|
+
this.props.store.promoteWidgetConvo(localConvo.id, convo.id);
|
|
12197
|
+
const sending = this.props.store.sendConvoEvent(convo.id, 'message_sent', {
|
|
12198
|
+
message
|
|
12199
|
+
});
|
|
12200
|
+
this.props.onGo({
|
|
12201
|
+
view: 'chat',
|
|
12202
|
+
cid: convo.id
|
|
12203
|
+
});
|
|
12204
|
+
await sending;
|
|
12205
|
+
this.userSent[convo.id] = true;
|
|
12206
|
+
if (formSubmitted && form && form.end_conversation_after_submit) await this.props.store.endConvo(convo.id);
|
|
12207
|
+
this.setState({
|
|
12208
|
+
clickedJoin: false,
|
|
12209
|
+
restartForm: false,
|
|
12210
|
+
quickReplyMessage: {}
|
|
12211
|
+
});
|
|
12212
|
+
} catch (error) {
|
|
12213
|
+
this.setState({
|
|
12214
|
+
creatingError: error
|
|
12215
|
+
});
|
|
12216
|
+
return false;
|
|
12217
|
+
} finally {
|
|
12218
|
+
this._sendingNewConversation = false;
|
|
12219
|
+
this.setState({
|
|
12220
|
+
creating: false
|
|
12221
|
+
});
|
|
12222
|
+
}
|
|
12223
|
+
return;
|
|
12224
|
+
}
|
|
11322
12225
|
if (this.props.cid && this.props.cid.startsWith('cslight')) {
|
|
11323
12226
|
let cid = this.props.cid;
|
|
11324
12227
|
this._creating = (this._creating || 0) + 1;
|
|
@@ -11389,14 +12292,15 @@ class Widget extends common/* Com */.Mw {
|
|
|
11389
12292
|
});
|
|
11390
12293
|
return;
|
|
11391
12294
|
}
|
|
11392
|
-
|
|
12295
|
+
const sending = this.props.store.sendConvoEvent(convo.id, 'message_sent', {
|
|
11393
12296
|
message
|
|
11394
12297
|
});
|
|
11395
|
-
if (_creating != this._creating) return;
|
|
11396
12298
|
this.props.onGo({
|
|
11397
12299
|
view: 'chat',
|
|
11398
12300
|
cid: convo.id
|
|
11399
12301
|
});
|
|
12302
|
+
await sending;
|
|
12303
|
+
if (_creating != this._creating) return;
|
|
11400
12304
|
this.setState({
|
|
11401
12305
|
creating: false
|
|
11402
12306
|
});
|
|
@@ -11436,7 +12340,6 @@ class Widget extends common/* Com */.Mw {
|
|
|
11436
12340
|
this.focusInput();
|
|
11437
12341
|
});
|
|
11438
12342
|
this.userSent = {};
|
|
11439
|
-
this.debugAgentSentEvIds = {};
|
|
11440
12343
|
this.wasFormInputed = false;
|
|
11441
12344
|
this.setState({
|
|
11442
12345
|
creating: false,
|
|
@@ -11452,7 +12355,6 @@ class Widget extends common/* Com */.Mw {
|
|
|
11452
12355
|
componentDidMount() {
|
|
11453
12356
|
if (!this.props.store.isMobile()) this.focusInput();
|
|
11454
12357
|
this.updateFormDataFields();
|
|
11455
|
-
this.debugRTAgentMessageSent();
|
|
11456
12358
|
}
|
|
11457
12359
|
applyMessage(text) {
|
|
11458
12360
|
this.focusInput(text);
|
|
@@ -11467,6 +12369,7 @@ class Widget extends common/* Com */.Mw {
|
|
|
11467
12369
|
this.closeOrder();
|
|
11468
12370
|
this.setState({
|
|
11469
12371
|
clickedJoin: false,
|
|
12372
|
+
restartForm: false,
|
|
11470
12373
|
quickReplyMessage: {}
|
|
11471
12374
|
});
|
|
11472
12375
|
util/* default */.A.setTimeout(() => {
|
|
@@ -11476,19 +12379,14 @@ class Widget extends common/* Com */.Mw {
|
|
|
11476
12379
|
this.updateFormDataFields();
|
|
11477
12380
|
}
|
|
11478
12381
|
}
|
|
12382
|
+
componentWillUnmount() {
|
|
12383
|
+
this.cancelContainerFocus();
|
|
12384
|
+
}
|
|
11479
12385
|
ShowTyping() {
|
|
11480
12386
|
this.$events && this.$events.ShowTyping();
|
|
11481
12387
|
}
|
|
11482
12388
|
shouldShowForm() {
|
|
11483
|
-
|
|
11484
|
-
let accountSetting = this.props.plugin.chatbox || {};
|
|
11485
|
-
let acc = this.props.store.matchAccount() || {};
|
|
11486
|
-
if (util/* default */.A.get(accountSetting, 'prechat_form.enabled')) form = accountSetting.prechat_form;
|
|
11487
|
-
let offlineEnabled = util/* default */.A.get(accountSetting, 'offline_form.enabled');
|
|
11488
|
-
if (this.isOffline(acc, accountSetting) && offlineEnabled) form = accountSetting.offline_form;
|
|
11489
|
-
if (!this.hasSentMessage(this.props.cid) && form && (util/* default */.A.size(form.groups) || form.group_required)) return true;
|
|
11490
|
-
let formRequired = this.isFormRequired();
|
|
11491
|
-
return formRequired && !this.props.cid || formRequired && this.props.cid && this.state.clickedJoin;
|
|
12389
|
+
return !!(this.state.restartForm || this.state.clickedJoin);
|
|
11492
12390
|
}
|
|
11493
12391
|
render() {
|
|
11494
12392
|
let showform = this.shouldShowForm();
|
|
@@ -11552,42 +12450,22 @@ class Widget extends common/* Com */.Mw {
|
|
|
11552
12450
|
util/* default */.A.map(formData, (field, key) => {
|
|
11553
12451
|
field = Object.assign({}, field);
|
|
11554
12452
|
field.is_empty_error = false;
|
|
11555
|
-
if (field.is_required && (field.value
|
|
12453
|
+
if (field.is_required && (field.value == null || typeof field.value === 'string' && !field.value.trim() || util/* default */.A.size(field.value) === 0 && Array.isArray(field.value))) {
|
|
11556
12454
|
field.is_empty_error = true;
|
|
11557
12455
|
field.error = this.props.t('error_empty');
|
|
11558
12456
|
} else field.error = '';
|
|
11559
|
-
if (key
|
|
11560
|
-
|
|
11561
|
-
if (!util/* default */.A.isEmail(field.value)) {
|
|
11562
|
-
field.error = this.props.t('error_email_invalid');
|
|
11563
|
-
}
|
|
11564
|
-
} else {
|
|
11565
|
-
let value = field.value || '';
|
|
11566
|
-
if (typeof value !== 'string') value = value + '';
|
|
11567
|
-
if (value.trim() && !util/* default */.A.isEmail(field.value)) {
|
|
11568
|
-
field.error = this.props.t('error_email_invalid');
|
|
11569
|
-
}
|
|
11570
|
-
}
|
|
12457
|
+
if (key === 'attr:emails' && !field.error && String(field.value ?? '').trim() && !util/* default */.A.isEmail(field.value)) {
|
|
12458
|
+
field.error = this.props.t('error_email_invalid');
|
|
11571
12459
|
}
|
|
11572
|
-
if (key
|
|
11573
|
-
|
|
11574
|
-
if (!util/* default */.A.isPhone(field.value)) {
|
|
11575
|
-
field.error = this.props.t('error_phone_invalid');
|
|
11576
|
-
}
|
|
11577
|
-
} else {
|
|
11578
|
-
let value = field.value || '';
|
|
11579
|
-
if (typeof value !== 'string') value = value + '';
|
|
11580
|
-
if (value.trim() && !util/* default */.A.isPhone(field.value)) {
|
|
11581
|
-
field.error = this.props.t('error_phone_invalid');
|
|
11582
|
-
}
|
|
11583
|
-
}
|
|
12460
|
+
if (key === 'attr:phones' && !field.error && String(field.value ?? '').trim() && !util/* default */.A.isPhone(field.value)) {
|
|
12461
|
+
field.error = this.props.t('error_phone_invalid');
|
|
11584
12462
|
}
|
|
11585
12463
|
newformdata[key] = field;
|
|
11586
12464
|
});
|
|
11587
12465
|
return newformdata;
|
|
11588
12466
|
}
|
|
11589
12467
|
async submitPrechatForm(form, formName) {
|
|
11590
|
-
if (this.state.submiting) return;
|
|
12468
|
+
if (this.state.submiting || this.state.creating) return;
|
|
11591
12469
|
let newData = this.validateForm(this.state.formData);
|
|
11592
12470
|
let hasError = util/* default */.A.find(newData, field => !!field.error);
|
|
11593
12471
|
if (hasError) {
|
|
@@ -11602,6 +12480,8 @@ class Widget extends common/* Com */.Mw {
|
|
|
11602
12480
|
let is_lead = false;
|
|
11603
12481
|
util/* default */.A.map(data, (field, key) => {
|
|
11604
12482
|
if (!key.startsWith('attr:')) return;
|
|
12483
|
+
if (key === 'attr:phones') field.value = String(field.value ?? '').trim().replace(/[(). \-]/g, '');
|
|
12484
|
+
if (key === 'attr:emails') field.value = String(field.value ?? '').trim();
|
|
11605
12485
|
var attr = {
|
|
11606
12486
|
key: key.substr(5)
|
|
11607
12487
|
};
|
|
@@ -11616,7 +12496,8 @@ class Widget extends common/* Com */.Mw {
|
|
|
11616
12496
|
key: 'lead_source',
|
|
11617
12497
|
text: 'widget'
|
|
11618
12498
|
});
|
|
11619
|
-
|
|
12499
|
+
const question = String(util/* default */.A.get(data, 'question.value', '') ?? '').trim();
|
|
12500
|
+
const firstmsg = question || (/^vi(?:[-_]|$)/i.test(navigator.language || '') ? 'Xin chào' : 'Hello');
|
|
11620
12501
|
let groupid = util/* default */.A.get(data, 'group.value', '');
|
|
11621
12502
|
this._creating = (this._creating || 0) + 1;
|
|
11622
12503
|
let _creating = this._creating;
|
|
@@ -11634,7 +12515,7 @@ class Widget extends common/* Com */.Mw {
|
|
|
11634
12515
|
await util/* default */.A.sleep(500);
|
|
11635
12516
|
if (_creating != this._creating) return;
|
|
11636
12517
|
if (this.props.cid && this.props.cid.startsWith('cslight')) {
|
|
11637
|
-
this.sendMessage({
|
|
12518
|
+
await this.sendMessage({
|
|
11638
12519
|
text: firstmsg,
|
|
11639
12520
|
format: 'plaintext',
|
|
11640
12521
|
fields: [{
|
|
@@ -11642,10 +12523,13 @@ class Widget extends common/* Com */.Mw {
|
|
|
11642
12523
|
value: util/* default */.A.stringify(groupid)
|
|
11643
12524
|
}],
|
|
11644
12525
|
attachments: this.state.quickReplyMessage.attachments
|
|
12526
|
+
}, {
|
|
12527
|
+
formSubmitted: true,
|
|
12528
|
+
groupId: groupid
|
|
11645
12529
|
});
|
|
11646
12530
|
return;
|
|
11647
12531
|
}
|
|
11648
|
-
if (this.props.cid) {
|
|
12532
|
+
if (this.props.cid && util/* default */.A.get(this.props.store.matchConvo(this.props.cid), 'state') !== 'ended') {
|
|
11649
12533
|
this.setState({
|
|
11650
12534
|
clickedJoin: false
|
|
11651
12535
|
});
|
|
@@ -11671,7 +12555,8 @@ class Widget extends common/* Com */.Mw {
|
|
|
11671
12555
|
}
|
|
11672
12556
|
let message = {
|
|
11673
12557
|
text: firstmsg,
|
|
11674
|
-
format: 'plaintext'
|
|
12558
|
+
format: 'plaintext',
|
|
12559
|
+
attachments: this.state.quickReplyMessage.attachments
|
|
11675
12560
|
};
|
|
11676
12561
|
let req = {
|
|
11677
12562
|
group_id: groupid,
|
|
@@ -11700,9 +12585,12 @@ class Widget extends common/* Com */.Mw {
|
|
|
11700
12585
|
message
|
|
11701
12586
|
});
|
|
11702
12587
|
if (_creating != this._creating) return;
|
|
12588
|
+
if (form.end_conversation_after_submit) await this.props.store.endConvo(newconvoid);
|
|
12589
|
+
if (_creating != this._creating) return;
|
|
11703
12590
|
this.setState({
|
|
11704
12591
|
creating: false,
|
|
11705
12592
|
clickedJoin: false,
|
|
12593
|
+
restartForm: false,
|
|
11706
12594
|
quickReplyMessage: {}
|
|
11707
12595
|
});
|
|
11708
12596
|
this.props.onGo({
|
|
@@ -11733,6 +12621,7 @@ class Widget extends common/* Com */.Mw {
|
|
|
11733
12621
|
if (!field) return;
|
|
11734
12622
|
field.value = val;
|
|
11735
12623
|
field.error = undefined;
|
|
12624
|
+
field.is_empty_error = false;
|
|
11736
12625
|
this.setState({
|
|
11737
12626
|
formData
|
|
11738
12627
|
});
|
|
@@ -11853,7 +12742,7 @@ class Widget extends common/* Com */.Mw {
|
|
|
11853
12742
|
renderFields(form, formName) {
|
|
11854
12743
|
if (util/* default */.A.size(this.state.formData) === 0) return null;
|
|
11855
12744
|
let $fields = util/* default */.A.map(this.state.formData, (field, key) => {
|
|
11856
|
-
if (this.state.quickReplyMessage.
|
|
12745
|
+
if (key === 'question' && util/* default */.A.find(this.state.quickReplyMessage.attachments, att => att.type === 'postback')) return null;
|
|
11857
12746
|
let $field = null;
|
|
11858
12747
|
var errclass = field.error ? 'input--error' : '';
|
|
11859
12748
|
if (field.type === 'text') {
|
|
@@ -11886,7 +12775,11 @@ class Widget extends common/* Com */.Mw {
|
|
|
11886
12775
|
this['form_' + encode(key)] = ref;
|
|
11887
12776
|
},
|
|
11888
12777
|
class: `form-control ${errclass}`,
|
|
11889
|
-
type:
|
|
12778
|
+
type: key === 'attr:phones' ? 'tel' : key === 'attr:emails' ? 'email' : 'text',
|
|
12779
|
+
inputMode: key === 'attr:phones' ? 'tel' : key === 'attr:emails' ? 'email' : undefined,
|
|
12780
|
+
autoComplete: key === 'attr:phones' ? 'tel' : key === 'attr:emails' ? 'email' : undefined,
|
|
12781
|
+
"aria-invalid": field.error ? 'true' : undefined,
|
|
12782
|
+
"aria-describedby": field.error ? 'form-error_' + encode(key) : undefined
|
|
11890
12783
|
});
|
|
11891
12784
|
}
|
|
11892
12785
|
} else if (field.type === 'number') {
|
|
@@ -11970,6 +12863,8 @@ class Widget extends common/* Com */.Mw {
|
|
|
11970
12863
|
}, label, field.is_required ? (0,preact_module.h)("span", {
|
|
11971
12864
|
class: "red"
|
|
11972
12865
|
}, "*") : ''), $field, field.error ? (0,preact_module.h)("div", {
|
|
12866
|
+
id: 'form-error_' + encode(key),
|
|
12867
|
+
role: "alert",
|
|
11973
12868
|
class: "form-control--valid-input--error"
|
|
11974
12869
|
}, field.error) : '');
|
|
11975
12870
|
});
|
|
@@ -11982,9 +12877,10 @@ class Widget extends common/* Com */.Mw {
|
|
|
11982
12877
|
if (!title) title = util/* default */.A.get(form, 'title', this.props.t('capture_lead_title'));
|
|
11983
12878
|
title = title.replace('↵', '');
|
|
11984
12879
|
let btncls = 'btn--start-convo ';
|
|
11985
|
-
let hasError = util/* default */.A.find(this.state.formData, field => !!field.error);
|
|
11986
12880
|
let newData = this.validateForm(this.state.formData);
|
|
11987
12881
|
let hasEmptyError = util/* default */.A.find(newData, field => !!field.is_empty_error);
|
|
12882
|
+
const phone = String(util/* default */.A.get(this.state.formData, 'attr:phones.value', '') ?? '').trim();
|
|
12883
|
+
const phoneTooShort = phone.length > 0 && phone.length < 5;
|
|
11988
12884
|
let bodycls = 'widget-body';
|
|
11989
12885
|
if (this.props.store.isEmbededChatMode()) bodycls += ' embed-chat';
|
|
11990
12886
|
return (0,preact_module.h)("div", {
|
|
@@ -12004,12 +12900,28 @@ class Widget extends common/* Com */.Mw {
|
|
|
12004
12900
|
}), (0,preact_module.h)("button", {
|
|
12005
12901
|
class: btncls,
|
|
12006
12902
|
onClick: _ => this.submitPrechatForm(form, formName),
|
|
12007
|
-
disabled: !!hasEmptyError ||
|
|
12903
|
+
disabled: !!hasEmptyError || phoneTooShort || this.state.creating
|
|
12008
12904
|
}, submitLabel)));
|
|
12009
12905
|
}
|
|
12010
12906
|
goToConvo(cid) {
|
|
12907
|
+
let view = 'chat';
|
|
12908
|
+
if (!cid) {
|
|
12909
|
+
const greeting = widgetGreeting(this.props.plugin.chatbox, this.props.t);
|
|
12910
|
+
cid = this.props.store.startWidgetConvo(greeting, this.props.t.locale()).convo.id;
|
|
12911
|
+
const form = this.startingConversationForm();
|
|
12912
|
+
const setting = this.props.plugin.chatbox || {};
|
|
12913
|
+
const offline = util/* default */.A.get(setting, 'offline_form.enabled') && this.isOffline(this.props.store.matchAccount() || {}, setting);
|
|
12914
|
+
if (form && (offline || this.isFormRequired(cid) || util/* default */.A.size(form.groups) || form.group_required)) {
|
|
12915
|
+
view = offline ? 'offline_form' : 'prechat_form';
|
|
12916
|
+
this.setState({
|
|
12917
|
+
clickedJoin: false,
|
|
12918
|
+
restartForm: false,
|
|
12919
|
+
quickReplyMessage: {}
|
|
12920
|
+
});
|
|
12921
|
+
}
|
|
12922
|
+
}
|
|
12011
12923
|
this.props.onGo({
|
|
12012
|
-
view
|
|
12924
|
+
view,
|
|
12013
12925
|
cid
|
|
12014
12926
|
});
|
|
12015
12927
|
}
|
|
@@ -12083,7 +12995,7 @@ class Widget extends common/* Com */.Mw {
|
|
|
12083
12995
|
util/* default */.A.setTimeout(() => $input && $input.blur());
|
|
12084
12996
|
util/* default */.A.setTimeout(() => $input && $input.blur(), 300);
|
|
12085
12997
|
}
|
|
12086
|
-
focusInput(text) {
|
|
12998
|
+
focusInput(text, repeat = true) {
|
|
12087
12999
|
if (this.props.store.isPreview) return;
|
|
12088
13000
|
if (this.shouldShowForm()) {
|
|
12089
13001
|
let focusfieldkey = '';
|
|
@@ -12108,6 +13020,7 @@ class Widget extends common/* Com */.Mw {
|
|
|
12108
13020
|
if (text != undefined && typeof text === 'string') {
|
|
12109
13021
|
$input.applyMessage(text);
|
|
12110
13022
|
}
|
|
13023
|
+
if (!repeat) return $input.focus();
|
|
12111
13024
|
util/* default */.A.setTimeout(() => $input.focus());
|
|
12112
13025
|
util/* default */.A.setTimeout(() => $input.focus(), 300);
|
|
12113
13026
|
}
|
|
@@ -12144,21 +13057,13 @@ class Widget extends common/* Com */.Mw {
|
|
|
12144
13057
|
onSend: this.sendMessage,
|
|
12145
13058
|
t: this.props.t
|
|
12146
13059
|
});
|
|
12147
|
-
let convo = this.props.store.matchConvo(this.props.cid) || {};
|
|
12148
|
-
if (this.isFormRequired() || convo.state === 'ended') {
|
|
12149
|
-
$input = (0,preact_module.h)("div", {
|
|
12150
|
-
class: "message-input message-input--preform"
|
|
12151
|
-
}, (0,preact_module.h)("button", {
|
|
12152
|
-
class: "btn--start-convo",
|
|
12153
|
-
onClick: e => this.onStartConvoClick(e)
|
|
12154
|
-
}, this.props.t('offline_preform_btn')));
|
|
12155
|
-
}
|
|
12156
13060
|
let bodycls = 'widget-body';
|
|
12157
13061
|
if (this.props.store.isEmbededChatMode()) bodycls += ' embed-chat';
|
|
12158
13062
|
return (0,preact_module.h)("div", {
|
|
12159
13063
|
class: bodycls
|
|
12160
13064
|
}, (0,preact_module.h)("div", {
|
|
12161
13065
|
class: "widget-body--content",
|
|
13066
|
+
onPointerDown: () => this.cancelContainerFocus(),
|
|
12162
13067
|
onClick: e => this.onContainerClick(e)
|
|
12163
13068
|
}, (0,preact_module.h)(Events, {
|
|
12164
13069
|
isShow: this.props.isShow,
|
|
@@ -12168,7 +13073,7 @@ class Widget extends common/* Com */.Mw {
|
|
|
12168
13073
|
onFormSubmit: e => this.onEventFormSubmit(e),
|
|
12169
13074
|
ref: ref => this.$events = ref,
|
|
12170
13075
|
cid: this.props.cid,
|
|
12171
|
-
creating: this.creating,
|
|
13076
|
+
creating: this.state.creating,
|
|
12172
13077
|
onSend: e => this.sendMessage(e),
|
|
12173
13078
|
onPostback: e => this.createPostback(e),
|
|
12174
13079
|
t: this.props.t,
|
|
@@ -12195,42 +13100,45 @@ class Widget extends common/* Com */.Mw {
|
|
|
12195
13100
|
t: this.props.t
|
|
12196
13101
|
}), $input);
|
|
12197
13102
|
}
|
|
12198
|
-
async onStartConvoClick() {
|
|
12199
|
-
var convo = this.props.store.matchConvo(this.props.cid) || {};
|
|
12200
|
-
if (convo.state === 'ended') return this.props.onGo({
|
|
12201
|
-
view: 'chat',
|
|
12202
|
-
cid: ''
|
|
12203
|
-
});
|
|
12204
|
-
this.setState({
|
|
12205
|
-
clickedJoin: true,
|
|
12206
|
-
quickReplyMessage: {}
|
|
12207
|
-
});
|
|
12208
|
-
}
|
|
12209
13103
|
onEventFormSubmit() {
|
|
12210
13104
|
this.focusInput();
|
|
12211
13105
|
}
|
|
12212
|
-
|
|
12213
|
-
|
|
12214
|
-
|
|
12215
|
-
|
|
12216
|
-
|
|
12217
|
-
|
|
12218
|
-
|
|
12219
|
-
|
|
12220
|
-
|
|
12221
|
-
if (
|
|
12222
|
-
|
|
12223
|
-
|
|
13106
|
+
cancelContainerFocus() {
|
|
13107
|
+
if (this.containerFocusTimer) util/* default */.A.clearTimeout(this.containerFocusTimer);
|
|
13108
|
+
this.containerFocusTimer = null;
|
|
13109
|
+
}
|
|
13110
|
+
onContainerClick(event) {
|
|
13111
|
+
this.cancelContainerFocus();
|
|
13112
|
+
const target = event && event.target;
|
|
13113
|
+
const element = target && (target.nodeType === 1 ? target : target.parentElement);
|
|
13114
|
+
if (element && element.closest('a, button, input, textarea, select, [contenteditable]')) return;
|
|
13115
|
+
if (event && event.detail > 1) return;
|
|
13116
|
+
if (this.props.store.isMobile() || window.getSelection()?.toString()) return;
|
|
13117
|
+
const cid = this.props.cid;
|
|
13118
|
+
this.containerFocusTimer = util/* default */.A.setTimeout(() => {
|
|
13119
|
+
this.containerFocusTimer = null;
|
|
13120
|
+
if (!this._isMounted || this.props.cid !== cid || this.props.isShow === false || window.getSelection()?.toString()) return;
|
|
13121
|
+
this.focusInput(undefined, false);
|
|
13122
|
+
}, 300);
|
|
13123
|
+
}
|
|
13124
|
+
startingConversationForm() {
|
|
13125
|
+
const setting = this.props.plugin.chatbox || {};
|
|
13126
|
+
const account = this.props.store.matchAccount() || {};
|
|
13127
|
+
if (this.isOffline(account, setting) && util/* default */.A.get(setting, 'offline_form.enabled')) return setting.offline_form;
|
|
13128
|
+
if (util/* default */.A.get(setting, 'prechat_form.enabled')) return setting.prechat_form;
|
|
13129
|
+
}
|
|
13130
|
+
isFormRequired(cid = this.props.cid) {
|
|
13131
|
+
let form = this.startingConversationForm();
|
|
12224
13132
|
if (!form) return false;
|
|
12225
13133
|
let formData = this.fillForm(form);
|
|
12226
|
-
let convo = this.props.store.matchConvo(
|
|
13134
|
+
let convo = this.props.store.matchConvo(cid) || {};
|
|
12227
13135
|
if (convo.state === 'ended') return true;
|
|
12228
13136
|
if (convo.state && convo.state !== 'pending') delete formData.group;
|
|
12229
13137
|
let isAllFiledEmpty = true;
|
|
12230
13138
|
util/* default */.A.each(formData, field => {
|
|
12231
13139
|
if (field.value) isAllFiledEmpty = false;
|
|
12232
13140
|
});
|
|
12233
|
-
if (isAllFiledEmpty && !this.userHasSent(
|
|
13141
|
+
if (isAllFiledEmpty && !this.userHasSent(cid)) return true;
|
|
12234
13142
|
return !!util/* default */.A.find(formData, field => field.is_required && (field.value == null || field.value === ''));
|
|
12235
13143
|
}
|
|
12236
13144
|
renderConvoSummary(convo) {
|
|
@@ -12375,7 +13283,7 @@ class Widget extends common/* Com */.Mw {
|
|
|
12375
13283
|
if (form.question_required) {
|
|
12376
13284
|
data['question'] = {
|
|
12377
13285
|
key: 'question',
|
|
12378
|
-
is_required:
|
|
13286
|
+
is_required: false,
|
|
12379
13287
|
label: this.props.t.i18n(util/* default */.A.get(form, `i18n_question_label`, {})) || form.question_label,
|
|
12380
13288
|
type: 'text'
|
|
12381
13289
|
};
|
|
@@ -12651,6 +13559,9 @@ class Main extends common/* Com */.Mw {
|
|
|
12651
13559
|
cid
|
|
12652
13560
|
};
|
|
12653
13561
|
}
|
|
13562
|
+
if (newView.view === 'chat' && !newView.opts.cid && this.refWidget.current) {
|
|
13563
|
+
return this.refWidget.current.goToConvo('');
|
|
13564
|
+
}
|
|
12654
13565
|
if (this.props.store.isMobile()) modifyViewport(this.shouldLockPageScroll());
|
|
12655
13566
|
this.props.store.updateLastview(newView);
|
|
12656
13567
|
this.forceUpdate();
|
|
@@ -12724,7 +13635,6 @@ function modifyViewport(lockPageScroll) {
|
|
|
12724
13635
|
|
|
12725
13636
|
|
|
12726
13637
|
|
|
12727
|
-
const LoadContact = () => __webpack_require__.e(/* import() */ 74).then(() => (__webpack_require__(9074)));
|
|
12728
13638
|
const LoadPopup = () => __webpack_require__.e(/* import() */ 132).then(() => (__webpack_require__(132)));
|
|
12729
13639
|
const LoadNotif = () => __webpack_require__.e(/* import() */ 490).then(() => (__webpack_require__(1490)));
|
|
12730
13640
|
function Plugin(plugin, store, $container, lib) {
|
|
@@ -12766,7 +13676,6 @@ function Plugin(plugin, store, $container, lib) {
|
|
|
12766
13676
|
};
|
|
12767
13677
|
var _ref = (0,preact_module/* createRef */._3)();
|
|
12768
13678
|
let Popup = null;
|
|
12769
|
-
let Contact = null;
|
|
12770
13679
|
let Notif = null;
|
|
12771
13680
|
var showCurrentChatbox = p => lib.showWidget(p);
|
|
12772
13681
|
var nextPage = () => {
|
|
@@ -12813,16 +13722,6 @@ function Plugin(plugin, store, $container, lib) {
|
|
|
12813
13722
|
ref: _ref
|
|
12814
13723
|
}), $div);
|
|
12815
13724
|
}
|
|
12816
|
-
if (plugin.type === 'contact') {
|
|
12817
|
-
if (!Contact) Contact = (await LoadContact()).default;
|
|
12818
|
-
(0,preact_module/* render */.XX)((0,preact_module.h)(Contact, {
|
|
12819
|
-
destroy: _destroy,
|
|
12820
|
-
t: this.t,
|
|
12821
|
-
plugin: plugin,
|
|
12822
|
-
store: store,
|
|
12823
|
-
ref: _ref
|
|
12824
|
-
}), $div);
|
|
12825
|
-
}
|
|
12826
13725
|
domGate.open();
|
|
12827
13726
|
};
|
|
12828
13727
|
this.call = (method, param) => domGate.entry().then(() => {
|
|
@@ -12831,9 +13730,10 @@ function Plugin(plugin, store, $container, lib) {
|
|
|
12831
13730
|
});
|
|
12832
13731
|
var _destroy = false;
|
|
12833
13732
|
this.destroy = () => {
|
|
13733
|
+
if (_destroy) return;
|
|
12834
13734
|
_destroy = true;
|
|
12835
13735
|
(0,preact_module/* render */.XX)(null, $div);
|
|
12836
|
-
$div.parentNode.removeChild($div);
|
|
13736
|
+
if ($div.parentNode) $div.parentNode.removeChild($div);
|
|
12837
13737
|
};
|
|
12838
13738
|
this.highlight = comref => {
|
|
12839
13739
|
highlight = comref;
|
|
@@ -12914,14 +13814,15 @@ class PluginMgr {
|
|
|
12914
13814
|
this.$div = $div;
|
|
12915
13815
|
this.pluginM = {};
|
|
12916
13816
|
this._destroy = false;
|
|
12917
|
-
|
|
13817
|
+
this._subscriptions = [];
|
|
13818
|
+
this._subscriptions.push(lib.store.onHighlight({
|
|
12918
13819
|
_isMounted: true
|
|
12919
13820
|
}, (id, comref) => {
|
|
12920
13821
|
let plugin = this.pluginM[id];
|
|
12921
13822
|
if (!plugin) return;
|
|
12922
13823
|
plugin.highlight(comref);
|
|
12923
|
-
});
|
|
12924
|
-
lib.store.onUpdate({
|
|
13824
|
+
}));
|
|
13825
|
+
this._subscriptions.push(lib.store.onUpdate({
|
|
12925
13826
|
_isMounted: true
|
|
12926
13827
|
}, () => {
|
|
12927
13828
|
if (this._destroy) return;
|
|
@@ -12943,7 +13844,7 @@ class PluginMgr {
|
|
|
12943
13844
|
this.pluginM[id].destroy();
|
|
12944
13845
|
delete this.pluginM[id];
|
|
12945
13846
|
});
|
|
12946
|
-
});
|
|
13847
|
+
}));
|
|
12947
13848
|
let pluginM = this.lib.store.matchPlugin();
|
|
12948
13849
|
if (typeof sbz_info != 'undefined') sbz_info['plugins'] = pluginM;
|
|
12949
13850
|
let foundchatbox = false;
|
|
@@ -13017,13 +13918,26 @@ class PluginMgr {
|
|
|
13017
13918
|
if (chatbox) return chatbox.setLocale(locale);
|
|
13018
13919
|
}
|
|
13019
13920
|
destroy() {
|
|
13921
|
+
if (this._destroy) return;
|
|
13922
|
+
this._destroy = true;
|
|
13923
|
+
for (const unsubscribe of this._subscriptions) unsubscribe();
|
|
13924
|
+
this._subscriptions = [];
|
|
13020
13925
|
util/* default */.A.map(this.pluginM, (conf, id) => {
|
|
13021
13926
|
conf.destroy();
|
|
13022
13927
|
delete this.pluginM[id];
|
|
13023
13928
|
});
|
|
13024
|
-
this._destroy = true;
|
|
13025
13929
|
}
|
|
13026
13930
|
}
|
|
13931
|
+
;// ./src/util/event.js
|
|
13932
|
+
function normalizeCdpEvent(type, payload, options) {
|
|
13933
|
+
if (type && typeof type === 'object') return type;
|
|
13934
|
+
let data = {
|
|
13935
|
+
type
|
|
13936
|
+
};
|
|
13937
|
+
if (payload !== undefined) data.payload = payload;
|
|
13938
|
+
if (options && typeof options === 'object') data = Object.assign({}, options, data);
|
|
13939
|
+
return data;
|
|
13940
|
+
}
|
|
13027
13941
|
;// ./src/lib.js
|
|
13028
13942
|
function lib_defineProperty(e, r, t) { return (r = lib_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
13029
13943
|
function lib_toPropertyKey(t) { var i = lib_toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
@@ -13031,6 +13945,7 @@ function lib_toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e
|
|
|
13031
13945
|
;
|
|
13032
13946
|
|
|
13033
13947
|
|
|
13948
|
+
|
|
13034
13949
|
class lib_Widget {
|
|
13035
13950
|
constructor(ApiURL, FileURL, RealtimeURL, inmem, fake) {
|
|
13036
13951
|
lib_defineProperty(this, "version", () => '4.5');
|
|
@@ -13047,6 +13962,7 @@ class lib_Widget {
|
|
|
13047
13962
|
});
|
|
13048
13963
|
lib_defineProperty(this, "pageview", v => this.store.sendPageview(v));
|
|
13049
13964
|
this.impressionTokens = {};
|
|
13965
|
+
this._containerTimers = new Set();
|
|
13050
13966
|
this.domGate = new util/* default */.A.Gate();
|
|
13051
13967
|
this.store = new Store(ApiURL, FileURL, RealtimeURL, inmem, fake);
|
|
13052
13968
|
window.sbz_store = this.store;
|
|
@@ -13066,6 +13982,16 @@ class lib_Widget {
|
|
|
13066
13982
|
await this.store.readyGate.entry();
|
|
13067
13983
|
cb();
|
|
13068
13984
|
}
|
|
13985
|
+
watchContainer(container) {
|
|
13986
|
+
const manager = this.pluginMgr;
|
|
13987
|
+
const timer = util/* default */.A.setInterval(() => {
|
|
13988
|
+
if (!this.store.isDead() && container && container.isConnected) return;
|
|
13989
|
+
manager.destroy();
|
|
13990
|
+
util/* default */.A.clearInterval(timer);
|
|
13991
|
+
this._containerTimers.delete(timer);
|
|
13992
|
+
}, 1000);
|
|
13993
|
+
this._containerTimers.add(timer);
|
|
13994
|
+
}
|
|
13069
13995
|
setAIDevMode(mode) {
|
|
13070
13996
|
this.store.setAIDevMode(mode);
|
|
13071
13997
|
}
|
|
@@ -13083,11 +14009,7 @@ class lib_Widget {
|
|
|
13083
14009
|
let user = await this.store.login(accid, user_id, tokenGenerator);
|
|
13084
14010
|
if (!$container) $container = document.body;
|
|
13085
14011
|
this.pluginMgr = new PluginMgr(this, $container);
|
|
13086
|
-
|
|
13087
|
-
if ($container && $container.isConnected) return;
|
|
13088
|
-
this.pluginMgr.destroy();
|
|
13089
|
-
util/* default */.A.clearInterval(clean);
|
|
13090
|
-
}, 1000);
|
|
14012
|
+
this.watchContainer($container);
|
|
13091
14013
|
this.domGate.open();
|
|
13092
14014
|
return user;
|
|
13093
14015
|
}
|
|
@@ -13109,11 +14031,7 @@ class lib_Widget {
|
|
|
13109
14031
|
}, '*'), 0);
|
|
13110
14032
|
if (!$container) $container = document.body || document;
|
|
13111
14033
|
this.pluginMgr = new PluginMgr(this, $container);
|
|
13112
|
-
|
|
13113
|
-
if ($container && $container.isConnected) return;
|
|
13114
|
-
this.pluginMgr.destroy();
|
|
13115
|
-
util/* default */.A.clearInterval(clean);
|
|
13116
|
-
}, 1000);
|
|
14034
|
+
this.watchContainer($container);
|
|
13117
14035
|
this.domGate.open();
|
|
13118
14036
|
return user;
|
|
13119
14037
|
}
|
|
@@ -13127,11 +14045,7 @@ class lib_Widget {
|
|
|
13127
14045
|
}, '*'), 0);
|
|
13128
14046
|
if (!$container) $container = document.body || document;
|
|
13129
14047
|
this.pluginMgr = new PluginMgr(this, $container);
|
|
13130
|
-
|
|
13131
|
-
if ($container && $container.isConnected) return;
|
|
13132
|
-
this.pluginMgr.destroy();
|
|
13133
|
-
util/* default */.A.clearInterval(clean);
|
|
13134
|
-
}, 1000);
|
|
14048
|
+
this.watchContainer($container);
|
|
13135
14049
|
this.domGate.open();
|
|
13136
14050
|
cb && cb(outmask);
|
|
13137
14051
|
return outmask;
|
|
@@ -13155,11 +14069,7 @@ class lib_Widget {
|
|
|
13155
14069
|
}, '*'), 0);
|
|
13156
14070
|
if (!$container) $container = document.body || document;
|
|
13157
14071
|
this.pluginMgr = new PluginMgr(this, $container);
|
|
13158
|
-
|
|
13159
|
-
if ($container && $container.isConnected) return;
|
|
13160
|
-
this.pluginMgr.destroy();
|
|
13161
|
-
util/* default */.A.clearInterval(clean);
|
|
13162
|
-
}, 1000);
|
|
14072
|
+
this.watchContainer($container);
|
|
13163
14073
|
this.domGate.open();
|
|
13164
14074
|
if (typeof sbz_info != 'undefined') sbz_info.set_account_done = util/* default */.A.Date.now();
|
|
13165
14075
|
cb && cb(outmask);
|
|
@@ -13186,7 +14096,7 @@ class lib_Widget {
|
|
|
13186
14096
|
}
|
|
13187
14097
|
async createTicket(ticket) {
|
|
13188
14098
|
await this.domGate.entry();
|
|
13189
|
-
return this.createTicket(ticket);
|
|
14099
|
+
return this.store.createTicket(ticket);
|
|
13190
14100
|
}
|
|
13191
14101
|
expandWidget(view, convo) {
|
|
13192
14102
|
return this.showWidget(view, convo);
|
|
@@ -13292,7 +14202,7 @@ class lib_Widget {
|
|
|
13292
14202
|
if (req.bot_id) {
|
|
13293
14203
|
let botid = req.bot_id;
|
|
13294
14204
|
delete req.bot_id;
|
|
13295
|
-
if (!util/* default */.A.find(members, m =>
|
|
14205
|
+
if (!util/* default */.A.find(members, m => m.id == botid)) {
|
|
13296
14206
|
members.push({
|
|
13297
14207
|
type: 'bot',
|
|
13298
14208
|
id: botid,
|
|
@@ -13343,6 +14253,9 @@ class lib_Widget {
|
|
|
13343
14253
|
this.store.overrideDeviceType(type);
|
|
13344
14254
|
}
|
|
13345
14255
|
unload() {
|
|
14256
|
+
for (const timer of this._containerTimers) util/* default */.A.clearInterval(timer);
|
|
14257
|
+
this._containerTimers.clear();
|
|
14258
|
+
this.subs = [];
|
|
13346
14259
|
if (this.pluginMgr) this.pluginMgr.destroy();
|
|
13347
14260
|
this.store.destroy();
|
|
13348
14261
|
}
|
|
@@ -13389,15 +14302,6 @@ class lib_Widget {
|
|
|
13389
14302
|
this.store.doNotStartBot();
|
|
13390
14303
|
}
|
|
13391
14304
|
}
|
|
13392
|
-
function normalizeCdpEvent(type, payload, options) {
|
|
13393
|
-
if (type && typeof type === 'object') return type;
|
|
13394
|
-
let data = {
|
|
13395
|
-
type: type
|
|
13396
|
-
};
|
|
13397
|
-
if (payload !== undefined) data.payload = payload;
|
|
13398
|
-
if (options && typeof options === 'object') data = Object.assign({}, options, data);
|
|
13399
|
-
return data;
|
|
13400
|
-
}
|
|
13401
14305
|
window.__sbz_WIDGET = lib_Widget;
|
|
13402
14306
|
/* harmony default export */ const lib = (lib_Widget);
|
|
13403
14307
|
;// ./screenshoot.js
|