chat-customer-47net 1.3.9 → 1.4.1-staging

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.
@@ -17,7 +17,7 @@ var __publicField = (obj, key, value) => {
17
17
  return value;
18
18
  };
19
19
  var _a;
20
- var render$9 = function () {
20
+ var render$a = function () {
21
21
  var _vm = this;
22
22
  var _h = _vm.$createElement;
23
23
  var _c = _vm._self._c || _h;
@@ -105,7 +105,7 @@ var render$9 = function () {
105
105
  }
106
106
  }, [_vm._v(" End Conversation ")]) : _vm._e()]) : _vm._e()]);
107
107
  };
108
- var staticRenderFns$8 = [];
108
+ var staticRenderFns$9 = [];
109
109
  const ConsultHeader_vue_vue_type_style_index_0_scoped_true_lang = "";
110
110
  function normalizeComponent(scriptExports, render2, staticRenderFns2, functionalTemplate, injectStyles, scopeId, moduleIdentifier, shadowMode) {
111
111
  var options = typeof scriptExports === "function" ? scriptExports.options : scriptExports;
@@ -162,7 +162,7 @@ function normalizeComponent(scriptExports, render2, staticRenderFns2, functional
162
162
  options
163
163
  };
164
164
  }
165
- const __vue2_script$8 = {
165
+ const __vue2_script$9 = {
166
166
  name: "ConsultHeader",
167
167
  props: {
168
168
  route: {
@@ -234,15 +234,15 @@ const __vue2_script$8 = {
234
234
  }
235
235
  }
236
236
  };
237
- const __cssModules$8 = {};
238
- var __component__$8 = /* @__PURE__ */normalizeComponent(__vue2_script$8, render$9, staticRenderFns$8, false, __vue2_injectStyles$8, "2330793e", null, null);
239
- function __vue2_injectStyles$8(context) {
240
- for (let o in __cssModules$8) {
241
- this[o] = __cssModules$8[o];
237
+ const __cssModules$9 = {};
238
+ var __component__$9 = /* @__PURE__ */normalizeComponent(__vue2_script$9, render$a, staticRenderFns$9, false, __vue2_injectStyles$9, "2330793e", null, null);
239
+ function __vue2_injectStyles$9(context) {
240
+ for (let o in __cssModules$9) {
241
+ this[o] = __cssModules$9[o];
242
242
  }
243
243
  }
244
244
  const ConsultHeader = /* @__PURE__ */function () {
245
- return __component__$8.exports;
245
+ return __component__$9.exports;
246
246
  }();
247
247
  var commonjsGlobal = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {};
248
248
  function getDefaultExportFromCjs(x) {
@@ -832,9 +832,336 @@ var timezone$1 = {
832
832
  })(timezone$1);
833
833
  var timezoneExports = timezone$1.exports;
834
834
  const timezone = /* @__PURE__ */getDefaultExportFromCjs(timezoneExports);
835
+ var conversion = {
836
+ exports: {}
837
+ };
838
+ (function (module, exports) {
839
+ !function (t, e) {
840
+ module.exports = e();
841
+ }(commonjsGlobal, function () {
842
+ return function (t) {
843
+ var e = {};
844
+ function n(r) {
845
+ if (e[r]) return e[r].exports;
846
+ var o = e[r] = {
847
+ i: r,
848
+ l: false,
849
+ exports: {}
850
+ };
851
+ return t[r].call(o.exports, o, o.exports, n), o.l = true, o.exports;
852
+ }
853
+ return n.m = t, n.c = e, n.d = function (t2, e2, r) {
854
+ n.o(t2, e2) || Object.defineProperty(t2, e2, {
855
+ enumerable: true,
856
+ get: r
857
+ });
858
+ }, n.r = function (t2) {
859
+ "undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(t2, Symbol.toStringTag, {
860
+ value: "Module"
861
+ }), Object.defineProperty(t2, "__esModule", {
862
+ value: true
863
+ });
864
+ }, n.t = function (t2, e2) {
865
+ if (1 & e2 && (t2 = n(t2)), 8 & e2) return t2;
866
+ if (4 & e2 && "object" == typeof t2 && t2 && t2.__esModule) return t2;
867
+ var r = /* @__PURE__ */Object.create(null);
868
+ if (n.r(r), Object.defineProperty(r, "default", {
869
+ enumerable: true,
870
+ value: t2
871
+ }), 2 & e2 && "string" != typeof t2) for (var o in t2) n.d(r, o, function (e3) {
872
+ return t2[e3];
873
+ }.bind(null, o));
874
+ return r;
875
+ }, n.n = function (t2) {
876
+ var e2 = t2 && t2.__esModule ? function () {
877
+ return t2.default;
878
+ } : function () {
879
+ return t2;
880
+ };
881
+ return n.d(e2, "a", e2), e2;
882
+ }, n.o = function (t2, e2) {
883
+ return Object.prototype.hasOwnProperty.call(t2, e2);
884
+ }, n.p = "", n(n.s = 0);
885
+ }([function (t, e, n) {
886
+ var r;
887
+ function o(t2) {
888
+ return ["image/png", "image/jpeg", "image/gif"].some(e2 => e2 === t2);
889
+ }
890
+ n.r(e), n.d(e, "canvastoDataURL", function () {
891
+ return a;
892
+ }), n.d(e, "canvastoFile", function () {
893
+ return c;
894
+ }), n.d(e, "dataURLtoFile", function () {
895
+ return s;
896
+ }), n.d(e, "dataURLtoImage", function () {
897
+ return l;
898
+ }), n.d(e, "downloadFile", function () {
899
+ return d;
900
+ }), n.d(e, "filetoDataURL", function () {
901
+ return f;
902
+ }), n.d(e, "imagetoCanvas", function () {
903
+ return g;
904
+ }), n.d(e, "urltoBlob", function () {
905
+ return w;
906
+ }), n.d(e, "urltoImage", function () {
907
+ return m;
908
+ }), n.d(e, "compress", function () {
909
+ return p;
910
+ }), n.d(e, "compressAccurately", function () {
911
+ return b;
912
+ }), n.d(e, "EImageType", function () {
913
+ return r;
914
+ }), function (t2) {
915
+ t2.PNG = "image/png", t2.JPEG = "image/jpeg", t2.GIF = "image/gif";
916
+ }(r || (r = {}));
917
+ var i = function (t2, e2, n2, r2) {
918
+ return new (n2 || (n2 = Promise))(function (o2, i2) {
919
+ function a2(t3) {
920
+ try {
921
+ u2(r2.next(t3));
922
+ } catch (t4) {
923
+ i2(t4);
924
+ }
925
+ }
926
+ function c2(t3) {
927
+ try {
928
+ u2(r2.throw(t3));
929
+ } catch (t4) {
930
+ i2(t4);
931
+ }
932
+ }
933
+ function u2(t3) {
934
+ var e3;
935
+ t3.done ? o2(t3.value) : (e3 = t3.value, e3 instanceof n2 ? e3 : new n2(function (t4) {
936
+ t4(e3);
937
+ })).then(a2, c2);
938
+ }
939
+ u2((r2 = r2.apply(t2, e2 || [])).next());
940
+ });
941
+ };
942
+ function a(t2, e2 = 0.92, n2 = r.JPEG) {
943
+ return i(this, void 0, void 0, function* () {
944
+ return o(n2) || (n2 = r.JPEG), t2.toDataURL(n2, e2);
945
+ });
946
+ }
947
+ function c(t2, e2 = 0.92, n2 = r.JPEG) {
948
+ return new Promise(r2 => t2.toBlob(t3 => r2(t3), n2, e2));
949
+ }
950
+ var u = function (t2, e2, n2, r2) {
951
+ return new (n2 || (n2 = Promise))(function (o2, i2) {
952
+ function a2(t3) {
953
+ try {
954
+ u2(r2.next(t3));
955
+ } catch (t4) {
956
+ i2(t4);
957
+ }
958
+ }
959
+ function c2(t3) {
960
+ try {
961
+ u2(r2.throw(t3));
962
+ } catch (t4) {
963
+ i2(t4);
964
+ }
965
+ }
966
+ function u2(t3) {
967
+ var e3;
968
+ t3.done ? o2(t3.value) : (e3 = t3.value, e3 instanceof n2 ? e3 : new n2(function (t4) {
969
+ t4(e3);
970
+ })).then(a2, c2);
971
+ }
972
+ u2((r2 = r2.apply(t2, e2 || [])).next());
973
+ });
974
+ };
975
+ function s(t2, e2) {
976
+ return u(this, void 0, void 0, function* () {
977
+ const n2 = t2.split(",");
978
+ let r2 = n2[0].match(/:(.*?);/)[1];
979
+ const i2 = atob(n2[1]);
980
+ let a2 = i2.length;
981
+ const c2 = new Uint8Array(a2);
982
+ for (; a2--;) c2[a2] = i2.charCodeAt(a2);
983
+ return o(e2) && (r2 = e2), new Blob([c2], {
984
+ type: r2
985
+ });
986
+ });
987
+ }
988
+ function l(t2) {
989
+ return new Promise((e2, n2) => {
990
+ const r2 = new Image();
991
+ r2.onload = () => e2(r2), r2.onerror = () => n2(new Error("dataURLtoImage(): dataURL is illegal")), r2.src = t2;
992
+ });
993
+ }
994
+ function d(t2, e2) {
995
+ const n2 = document.createElement("a");
996
+ n2.href = window.URL.createObjectURL(t2), n2.download = e2 || Date.now().toString(36), document.body.appendChild(n2);
997
+ const r2 = document.createEvent("MouseEvents");
998
+ r2.initEvent("click", false, false), n2.dispatchEvent(r2), document.body.removeChild(n2);
999
+ }
1000
+ function f(t2) {
1001
+ return new Promise(e2 => {
1002
+ const n2 = new FileReader();
1003
+ n2.onloadend = t3 => e2(t3.target.result), n2.readAsDataURL(t2);
1004
+ });
1005
+ }
1006
+ var h = function (t2, e2, n2, r2) {
1007
+ return new (n2 || (n2 = Promise))(function (o2, i2) {
1008
+ function a2(t3) {
1009
+ try {
1010
+ u2(r2.next(t3));
1011
+ } catch (t4) {
1012
+ i2(t4);
1013
+ }
1014
+ }
1015
+ function c2(t3) {
1016
+ try {
1017
+ u2(r2.throw(t3));
1018
+ } catch (t4) {
1019
+ i2(t4);
1020
+ }
1021
+ }
1022
+ function u2(t3) {
1023
+ var e3;
1024
+ t3.done ? o2(t3.value) : (e3 = t3.value, e3 instanceof n2 ? e3 : new n2(function (t4) {
1025
+ t4(e3);
1026
+ })).then(a2, c2);
1027
+ }
1028
+ u2((r2 = r2.apply(t2, e2 || [])).next());
1029
+ });
1030
+ };
1031
+ function g(t2, e2 = {}) {
1032
+ return h(this, void 0, void 0, function* () {
1033
+ const n2 = Object.assign({}, e2),
1034
+ r2 = document.createElement("canvas"),
1035
+ o2 = r2.getContext("2d");
1036
+ let i2, a2;
1037
+ for (const t3 in n2) Object.prototype.hasOwnProperty.call(n2, t3) && (n2[t3] = Number(n2[t3]));
1038
+ if (n2.scale) {
1039
+ const e3 = n2.scale > 0 && n2.scale < 10 ? n2.scale : 1;
1040
+ a2 = t2.width * e3, i2 = t2.height * e3;
1041
+ } else a2 = n2.width || n2.height * t2.width / t2.height || t2.width, i2 = n2.height || n2.width * t2.height / t2.width || t2.height;
1042
+ switch ([5, 6, 7, 8].some(t3 => t3 === n2.orientation) ? (r2.height = a2, r2.width = i2) : (r2.height = i2, r2.width = a2), n2.orientation) {
1043
+ case 3:
1044
+ o2.rotate(180 * Math.PI / 180), o2.drawImage(t2, -r2.width, -r2.height, r2.width, r2.height);
1045
+ break;
1046
+ case 6:
1047
+ o2.rotate(90 * Math.PI / 180), o2.drawImage(t2, 0, -r2.width, r2.height, r2.width);
1048
+ break;
1049
+ case 8:
1050
+ o2.rotate(270 * Math.PI / 180), o2.drawImage(t2, -r2.height, 0, r2.height, r2.width);
1051
+ break;
1052
+ case 2:
1053
+ o2.translate(r2.width, 0), o2.scale(-1, 1), o2.drawImage(t2, 0, 0, r2.width, r2.height);
1054
+ break;
1055
+ case 4:
1056
+ o2.translate(r2.width, 0), o2.scale(-1, 1), o2.rotate(180 * Math.PI / 180), o2.drawImage(t2, -r2.width, -r2.height, r2.width, r2.height);
1057
+ break;
1058
+ case 5:
1059
+ o2.translate(r2.width, 0), o2.scale(-1, 1), o2.rotate(90 * Math.PI / 180), o2.drawImage(t2, 0, -r2.width, r2.height, r2.width);
1060
+ break;
1061
+ case 7:
1062
+ o2.translate(r2.width, 0), o2.scale(-1, 1), o2.rotate(270 * Math.PI / 180), o2.drawImage(t2, -r2.height, 0, r2.height, r2.width);
1063
+ break;
1064
+ default:
1065
+ o2.drawImage(t2, 0, 0, r2.width, r2.height);
1066
+ }
1067
+ return r2;
1068
+ });
1069
+ }
1070
+ function w(t2) {
1071
+ return fetch(t2).then(t3 => t3.blob());
1072
+ }
1073
+ function m(t2) {
1074
+ return new Promise((e2, n2) => {
1075
+ const r2 = new Image();
1076
+ r2.onload = () => e2(r2), r2.onerror = () => n2(new Error("urltoImage(): Image failed to load, please check the image URL")), r2.src = t2;
1077
+ });
1078
+ }
1079
+ var y = function (t2, e2, n2, r2) {
1080
+ return new (n2 || (n2 = Promise))(function (o2, i2) {
1081
+ function a2(t3) {
1082
+ try {
1083
+ u2(r2.next(t3));
1084
+ } catch (t4) {
1085
+ i2(t4);
1086
+ }
1087
+ }
1088
+ function c2(t3) {
1089
+ try {
1090
+ u2(r2.throw(t3));
1091
+ } catch (t4) {
1092
+ i2(t4);
1093
+ }
1094
+ }
1095
+ function u2(t3) {
1096
+ var e3;
1097
+ t3.done ? o2(t3.value) : (e3 = t3.value, e3 instanceof n2 ? e3 : new n2(function (t4) {
1098
+ t4(e3);
1099
+ })).then(a2, c2);
1100
+ }
1101
+ u2((r2 = r2.apply(t2, e2 || [])).next());
1102
+ });
1103
+ };
1104
+ function p(t2, e2 = {}) {
1105
+ return y(this, void 0, void 0, function* () {
1106
+ if (!(t2 instanceof Blob)) throw new Error("compress(): First arg must be a Blob object or a File object.");
1107
+ if ("object" != typeof e2 && (e2 = Object.assign({
1108
+ quality: e2
1109
+ })), e2.quality = Number(e2.quality), Number.isNaN(e2.quality)) return t2;
1110
+ const n2 = yield f(t2);
1111
+ let i2 = n2.split(",")[0].match(/:(.*?);/)[1],
1112
+ c2 = r.JPEG;
1113
+ o(e2.type) && (c2 = e2.type, i2 = e2.type);
1114
+ const u2 = yield l(n2),
1115
+ d2 = yield g(u2, Object.assign({}, e2)),
1116
+ h2 = yield a(d2, e2.quality, c2),
1117
+ w2 = yield s(h2, i2);
1118
+ return w2.size > t2.size ? t2 : w2;
1119
+ });
1120
+ }
1121
+ function b(t2, e2 = {}) {
1122
+ return y(this, void 0, void 0, function* () {
1123
+ if (!(t2 instanceof Blob)) throw new Error("compressAccurately(): First arg must be a Blob object or a File object.");
1124
+ if ("object" != typeof e2 && (e2 = Object.assign({
1125
+ size: e2
1126
+ })), e2.size = Number(e2.size), Number.isNaN(e2.size)) return t2;
1127
+ if (1024 * e2.size > t2.size) return t2;
1128
+ e2.accuracy = Number(e2.accuracy), (!e2.accuracy || e2.accuracy < 0.8 || e2.accuracy > 0.99) && (e2.accuracy = 0.95);
1129
+ const n2 = e2.size * (2 - e2.accuracy) * 1024,
1130
+ i2 = 1024 * e2.size,
1131
+ c2 = e2.size * e2.accuracy * 1024,
1132
+ u2 = yield f(t2);
1133
+ let d2 = u2.split(",")[0].match(/:(.*?);/)[1],
1134
+ h2 = r.JPEG;
1135
+ o(e2.type) && (h2 = e2.type, d2 = e2.type);
1136
+ const w2 = yield l(u2),
1137
+ m2 = yield g(w2, Object.assign({}, e2));
1138
+ let y2,
1139
+ p2 = 0.5;
1140
+ const b2 = [null, null];
1141
+ for (let t3 = 1; t3 <= 7; t3++) {
1142
+ y2 = yield a(m2, p2, h2);
1143
+ const e3 = 0.75 * y2.length;
1144
+ if (7 === t3) {
1145
+ (n2 < e3 || c2 > e3) && (y2 = [y2, ...b2].filter(t4 => t4).sort((t4, e4) => Math.abs(0.75 * t4.length - i2) - Math.abs(0.75 * e4.length - i2))[0]);
1146
+ break;
1147
+ }
1148
+ if (n2 < e3) b2[1] = y2, p2 -= Math.pow(0.5, t3 + 1);else {
1149
+ if (!(c2 > e3)) break;
1150
+ b2[0] = y2, p2 += Math.pow(0.5, t3 + 1);
1151
+ }
1152
+ }
1153
+ const v = yield s(y2, d2);
1154
+ return v.size > t2.size ? t2 : v;
1155
+ });
1156
+ }
1157
+ }]);
1158
+ });
1159
+ })(conversion);
1160
+ var conversionExports = conversion.exports;
1161
+ var imageConversion = conversionExports;
835
1162
  dayjs.extend(utc);
836
1163
  dayjs.extend(timezone);
837
- const version = "1.3.9";
1164
+ const version = "1.4.0-staging";
838
1165
  const publicDateFormat = "MM/DD/YY";
839
1166
  const serverLocal = "America/New_York";
840
1167
  const getTime = dateTime => {
@@ -938,7 +1265,30 @@ const getToken = () => {
938
1265
  const token = getCookie("auth._token.login");
939
1266
  return token && token !== "false" ? token : "";
940
1267
  };
941
- var render$8 = function () {
1268
+ const compressImageGetFile = ({
1269
+ file,
1270
+ fileChange = null
1271
+ }, size = 100) => {
1272
+ return new Promise(resolve => {
1273
+ const type = file.type;
1274
+ if (type === "image/jpeg" || type === "image/png") {
1275
+ let endType = fileChange ? fileChange.type : type;
1276
+ imageConversion.compressAccurately(file, {
1277
+ size,
1278
+ quality: 1,
1279
+ type: endType
1280
+ }).then(res => {
1281
+ const newFile = new File([res], fileChange ? `${file.name.replace(/\.[^/.]+$/, "")}.${fileChange.nameSuffix}` : file.name, {
1282
+ type: endType
1283
+ });
1284
+ resolve(newFile);
1285
+ });
1286
+ } else {
1287
+ resolve(file);
1288
+ }
1289
+ });
1290
+ };
1291
+ var render$9 = function () {
942
1292
  var _vm = this;
943
1293
  var _h = _vm.$createElement;
944
1294
  var _c = _vm._self._c || _h;
@@ -1000,7 +1350,7 @@ var render$8 = function () {
1000
1350
  }
1001
1351
  }, [_vm._v(" Start New Conversation 💬 ")]) : _vm._e()], 2)]);
1002
1352
  };
1003
- var staticRenderFns$7 = [function () {
1353
+ var staticRenderFns$8 = [function () {
1004
1354
  var _vm = this;
1005
1355
  var _h = _vm.$createElement;
1006
1356
  var _c = _vm._self._c || _h;
@@ -1009,7 +1359,7 @@ var staticRenderFns$7 = [function () {
1009
1359
  }, [_c("p", [_vm._v("Welcome !")]), _c("p", [_vm._v("We’re here to help")])]);
1010
1360
  }];
1011
1361
  const ConsultCover_vue_vue_type_style_index_0_scoped_true_lang = "";
1012
- const __vue2_script$7 = {
1362
+ const __vue2_script$8 = {
1013
1363
  name: "ConsultCover",
1014
1364
  components: {},
1015
1365
  props: {
@@ -1111,17 +1461,17 @@ const __vue2_script$7 = {
1111
1461
  }
1112
1462
  }
1113
1463
  };
1114
- const __cssModules$7 = {};
1115
- var __component__$7 = /* @__PURE__ */normalizeComponent(__vue2_script$7, render$8, staticRenderFns$7, false, __vue2_injectStyles$7, "3c515d99", null, null);
1116
- function __vue2_injectStyles$7(context) {
1117
- for (let o in __cssModules$7) {
1118
- this[o] = __cssModules$7[o];
1464
+ const __cssModules$8 = {};
1465
+ var __component__$8 = /* @__PURE__ */normalizeComponent(__vue2_script$8, render$9, staticRenderFns$8, false, __vue2_injectStyles$8, "3c515d99", null, null);
1466
+ function __vue2_injectStyles$8(context) {
1467
+ for (let o in __cssModules$8) {
1468
+ this[o] = __cssModules$8[o];
1119
1469
  }
1120
1470
  }
1121
1471
  const ConsultCover = /* @__PURE__ */function () {
1122
- return __component__$7.exports;
1472
+ return __component__$8.exports;
1123
1473
  }();
1124
- var render$7 = function () {
1474
+ var render$8 = function () {
1125
1475
  var _vm = this;
1126
1476
  var _h = _vm.$createElement;
1127
1477
  var _c = _vm._self._c || _h;
@@ -1183,9 +1533,9 @@ var render$7 = function () {
1183
1533
  }
1184
1534
  }, [_vm._v(" Send ")])])]);
1185
1535
  };
1186
- var staticRenderFns$6 = [];
1536
+ var staticRenderFns$7 = [];
1187
1537
  const ConsultSign_vue_vue_type_style_index_0_scoped_true_lang = "";
1188
- const __vue2_script$6 = {
1538
+ const __vue2_script$7 = {
1189
1539
  name: "ConsultSign",
1190
1540
  components: {},
1191
1541
  props: {
@@ -1236,17 +1586,17 @@ const __vue2_script$6 = {
1236
1586
  }
1237
1587
  }
1238
1588
  };
1239
- const __cssModules$6 = {};
1240
- var __component__$6 = /* @__PURE__ */normalizeComponent(__vue2_script$6, render$7, staticRenderFns$6, false, __vue2_injectStyles$6, "ebcf6c66", null, null);
1241
- function __vue2_injectStyles$6(context) {
1242
- for (let o in __cssModules$6) {
1243
- this[o] = __cssModules$6[o];
1589
+ const __cssModules$7 = {};
1590
+ var __component__$7 = /* @__PURE__ */normalizeComponent(__vue2_script$7, render$8, staticRenderFns$7, false, __vue2_injectStyles$7, "ebcf6c66", null, null);
1591
+ function __vue2_injectStyles$7(context) {
1592
+ for (let o in __cssModules$7) {
1593
+ this[o] = __cssModules$7[o];
1244
1594
  }
1245
1595
  }
1246
1596
  const ConsultSign = /* @__PURE__ */function () {
1247
- return __component__$6.exports;
1597
+ return __component__$7.exports;
1248
1598
  }();
1249
- var render$6 = function () {
1599
+ var render$7 = function () {
1250
1600
  var _vm = this;
1251
1601
  var _h = _vm.$createElement;
1252
1602
  var _c = _vm._self._c || _h;
@@ -1300,9 +1650,9 @@ var render$6 = function () {
1300
1650
  }
1301
1651
  }, [_vm._v(" Start New Conversation 💬 ")])])]);
1302
1652
  };
1303
- var staticRenderFns$5 = [];
1653
+ var staticRenderFns$6 = [];
1304
1654
  const ConsultConversations_vue_vue_type_style_index_0_scoped_true_lang = "";
1305
- const __vue2_script$5 = {
1655
+ const __vue2_script$6 = {
1306
1656
  name: "ConsultConversations",
1307
1657
  components: {},
1308
1658
  props: {
@@ -1345,15 +1695,15 @@ const __vue2_script$5 = {
1345
1695
  }
1346
1696
  }
1347
1697
  };
1348
- const __cssModules$5 = {};
1349
- var __component__$5 = /* @__PURE__ */normalizeComponent(__vue2_script$5, render$6, staticRenderFns$5, false, __vue2_injectStyles$5, "61a191ac", null, null);
1350
- function __vue2_injectStyles$5(context) {
1351
- for (let o in __cssModules$5) {
1352
- this[o] = __cssModules$5[o];
1698
+ const __cssModules$6 = {};
1699
+ var __component__$6 = /* @__PURE__ */normalizeComponent(__vue2_script$6, render$7, staticRenderFns$6, false, __vue2_injectStyles$6, "61a191ac", null, null);
1700
+ function __vue2_injectStyles$6(context) {
1701
+ for (let o in __cssModules$6) {
1702
+ this[o] = __cssModules$6[o];
1353
1703
  }
1354
1704
  }
1355
1705
  const ConsultConversations = /* @__PURE__ */function () {
1356
- return __component__$5.exports;
1706
+ return __component__$6.exports;
1357
1707
  }();
1358
1708
  function _getDefaults() {
1359
1709
  return {
@@ -6121,11 +6471,23 @@ function updateUserEmail(data, baseURL) {
6121
6471
  baseURL
6122
6472
  });
6123
6473
  }
6124
- var render$5 = function () {
6474
+ function uploadChatImage(data, baseURL) {
6475
+ return request({
6476
+ url: `/api/chats/uploadChatImage`,
6477
+ method: "post",
6478
+ data,
6479
+ baseURL,
6480
+ headers: {
6481
+ "Content-Type": "multipart/form-data"
6482
+ }
6483
+ });
6484
+ }
6485
+ var render$6 = function () {
6486
+ var _vm$item$commodityInf, _vm$item$commodityInf2, _vm$item$commodityInf3, _vm$item$commodityInf4, _vm$item$commodityInf5, _vm$item$commodityInf6, _vm$item$commodityInf7, _vm$item$commodityInf8, _vm$item$commodityInf9;
6125
6487
  var _vm = this;
6126
6488
  var _h = _vm.$createElement;
6127
6489
  var _c = _vm._self._c || _h;
6128
- return _c("div", [_vm.type === 1 || _vm.type === 8 || _vm.type === 10 ? _c("div", {
6490
+ return _c("div", [_vm.chatUi ? _c("div", {
6129
6491
  staticClass: "consult-47this-chat-item",
6130
6492
  style: {
6131
6493
  "--theme-color": _vm.themeColors,
@@ -6133,7 +6495,7 @@ var render$5 = function () {
6133
6495
  }
6134
6496
  }, [_vm.userOrOther === "user" || _vm.itemUserId === _vm.userId ? _c("div", {
6135
6497
  staticClass: "consult-47this-chat-item-user"
6136
- }, [_c("p", {
6498
+ }, [_vm.type !== 2 ? _c("p", {
6137
6499
  on: {
6138
6500
  "click": _vm.handleLinkClick
6139
6501
  }
@@ -6144,6 +6506,22 @@ var render$5 = function () {
6144
6506
  }
6145
6507
  }), _c("span", {
6146
6508
  staticClass: "time"
6509
+ }, [_vm._v(_vm._s(_vm.time))])]) : _c("div", {
6510
+ staticClass: "consult-47this-chat-item-img",
6511
+ class: {
6512
+ "consult-image-loaded": _vm.isImageLoaded
6513
+ }
6514
+ }, [_c("img", {
6515
+ attrs: {
6516
+ "src": _vm.message,
6517
+ "alt": ""
6518
+ },
6519
+ on: {
6520
+ "load": _vm.handleImageLoad,
6521
+ "click": _vm.showPreviewImage
6522
+ }
6523
+ }), _c("span", {
6524
+ staticClass: "time"
6147
6525
  }, [_vm._v(_vm._s(_vm.time))])])]) : _c("div", {
6148
6526
  staticClass: "consult-47this-chat-item-consult"
6149
6527
  }, [_c("div", {
@@ -6152,12 +6530,67 @@ var render$5 = function () {
6152
6530
  flicker: _vm.chatType === "ai-thinking"
6153
6531
  }
6154
6532
  }, [_c("img", {
6533
+ staticClass: "consult-47this-chat-item-face",
6155
6534
  attrs: {
6156
6535
  "src": _vm.avatar,
6157
6536
  "alt": "avatar",
6158
6537
  "onload": "this.style.opacity=1"
6159
6538
  }
6160
- })]), _c("div", [_c("h3", [_vm._v(_vm._s(_vm.name))]), _c("p", {
6539
+ })]), _c("div", [_c("h3", [_vm._v(_vm._s(_vm.name))]), _vm.type === 2 ? _c("div", {
6540
+ staticClass: "consult-47this-chat-item-img",
6541
+ class: {
6542
+ "consult-image-loaded": _vm.isImageLoaded
6543
+ }
6544
+ }, [_c("img", {
6545
+ attrs: {
6546
+ "src": _vm.message,
6547
+ "alt": ""
6548
+ },
6549
+ on: {
6550
+ "load": _vm.handleImageLoad,
6551
+ "click": _vm.showPreviewImage
6552
+ }
6553
+ }), _c("span", {
6554
+ staticClass: "time"
6555
+ }, [_vm._v(_vm._s(_vm.time))])]) : _vm.type === 12 ? _c("div", {
6556
+ staticClass: "consult-47this-chat-commodity"
6557
+ }, [_c("h3", [_c("a", {
6558
+ attrs: {
6559
+ "href": (_vm$item$commodityInf = _vm.item.commodityInformation) === null || _vm$item$commodityInf === void 0 ? void 0 : _vm$item$commodityInf.url,
6560
+ "target": "_blank"
6561
+ }
6562
+ }, [_vm._v(_vm._s((_vm$item$commodityInf2 = _vm.item.commodityInformation) === null || _vm$item$commodityInf2 === void 0 ? void 0 : _vm$item$commodityInf2.url))])]), _c("div", [(_vm$item$commodityInf3 = _vm.item.commodityInformation) !== null && _vm$item$commodityInf3 !== void 0 && _vm$item$commodityInf3.domain ? _c("h5", [_c("img", {
6563
+ attrs: {
6564
+ "src": (_vm$item$commodityInf4 = _vm.item.commodityInformation) === null || _vm$item$commodityInf4 === void 0 ? void 0 : _vm$item$commodityInf4.domainIcon,
6565
+ "alt": ""
6566
+ }
6567
+ }), _vm._v(" " + _vm._s((_vm$item$commodityInf5 = _vm.item.commodityInformation) === null || _vm$item$commodityInf5 === void 0 ? void 0 : _vm$item$commodityInf5.domain) + " ")]) : _vm._e(), _c("h4", [_c("a", {
6568
+ attrs: {
6569
+ "href": (_vm$item$commodityInf6 = _vm.item.commodityInformation) === null || _vm$item$commodityInf6 === void 0 ? void 0 : _vm$item$commodityInf6.url,
6570
+ "target": "_blank"
6571
+ }
6572
+ }, [_vm._v(_vm._s((_vm$item$commodityInf7 = _vm.item.commodityInformation) === null || _vm$item$commodityInf7 === void 0 ? void 0 : _vm$item$commodityInf7.title))])]), _c("div", [_vm._v(_vm._s((_vm$item$commodityInf8 = _vm.item.commodityInformation) === null || _vm$item$commodityInf8 === void 0 ? void 0 : _vm$item$commodityInf8.productDescription))]), _c("img", {
6573
+ attrs: {
6574
+ "src": (_vm$item$commodityInf9 = _vm.item.commodityInformation) === null || _vm$item$commodityInf9 === void 0 ? void 0 : _vm$item$commodityInf9.image,
6575
+ "alt": ""
6576
+ },
6577
+ on: {
6578
+ "load": _vm.handleCommodityImageLoad
6579
+ }
6580
+ })])]) : _vm.type === 13 ? _c("div", {
6581
+ staticClass: "consult-47this-chat-navigation"
6582
+ }, [_c("div", {
6583
+ domProps: {
6584
+ "innerHTML": _vm._s(_vm.message)
6585
+ }
6586
+ }), _c("div", {
6587
+ staticClass: "consult-47this-chat-navigation-footer"
6588
+ }, [_c("a", {
6589
+ attrs: {
6590
+ "href": _vm.item.linkUrl,
6591
+ "target": "_blank"
6592
+ }
6593
+ }, [_vm._v("View")])])]) : _c("p", {
6161
6594
  on: {
6162
6595
  "click": _vm.handleLinkClick
6163
6596
  }
@@ -6282,7 +6715,7 @@ var render$5 = function () {
6282
6715
  }
6283
6716
  }, [_vm._v("send")])]) : _vm._e()]);
6284
6717
  };
6285
- var staticRenderFns$4 = [function () {
6718
+ var staticRenderFns$5 = [function () {
6286
6719
  var _vm = this;
6287
6720
  var _h = _vm.$createElement;
6288
6721
  var _c = _vm._self._c || _h;
@@ -6312,15 +6745,15 @@ const hexToRgb = hex => {
6312
6745
  const b = parseInt(hex.slice(5, 7), 16);
6313
6746
  return `${r}, ${g}, ${b}`;
6314
6747
  };
6315
- const render$4 = new marked.Renderer();
6748
+ const render$5 = new marked.Renderer();
6316
6749
  marked.setOptions({
6317
- renderer: render$4,
6750
+ renderer: render$5,
6318
6751
  gfm: true,
6319
6752
  pedantic: false,
6320
6753
  breaks: true,
6321
6754
  sanitize: false
6322
6755
  });
6323
- const __vue2_script$4 = {
6756
+ const __vue2_script$5 = {
6324
6757
  name: "ConsultChatItem",
6325
6758
  props: {
6326
6759
  item: {
@@ -6422,7 +6855,8 @@ const __vue2_script$4 = {
6422
6855
  _typeController: null,
6423
6856
  isTyping: false,
6424
6857
  // 标记组件已挂载:只有当 _hasMounted 为 true 时,新的 message 才会触发打字机
6425
- _hasMounted: false
6858
+ _hasMounted: false,
6859
+ isImageLoaded: false
6426
6860
  };
6427
6861
  },
6428
6862
  computed: {
@@ -6434,6 +6868,10 @@ const __vue2_script$4 = {
6434
6868
  },
6435
6869
  _shouldType() {
6436
6870
  return this.stream || this.chatType === "ai" && this.userOrOther !== "user";
6871
+ },
6872
+ chatUi() {
6873
+ const typeList = [1, 2, 8, 10, 12, 13];
6874
+ return typeList.includes(this.type);
6437
6875
  }
6438
6876
  },
6439
6877
  watch: {
@@ -6441,7 +6879,7 @@ const __vue2_script$4 = {
6441
6879
  this.stopTypewriter();
6442
6880
  if (this._shouldType && newVal && this._hasMounted && this.item.source === "socket") {
6443
6881
  this.isTyping = true;
6444
- this._typeController = this.typewriterRender2(newVal, {
6882
+ this._typeController = this.typewriterRender(newVal, {
6445
6883
  speed: this.typeSpeed,
6446
6884
  chunk: this.chunk,
6447
6885
  charsPerRender: this.charsPerRender,
@@ -6485,61 +6923,8 @@ const __vue2_script$4 = {
6485
6923
  const text = (src || "").replace(/ {2,}/g, match => "&nbsp;".repeat(match.length));
6486
6924
  return marked(text);
6487
6925
  },
6488
- typewriterRender(message, opts = {}) {
6489
- const speed = typeof opts.speed === "number" ? opts.speed : 40;
6490
- const chunk = Math.max(1, typeof opts.chunk === "number" ? opts.chunk : 1);
6491
- const charsPerRender = Math.max(1, typeof opts.charsPerRender === "number" ? opts.charsPerRender : 3);
6492
- const onUpdate = typeof opts.onUpdate === "function" ? opts.onUpdate : html2 => {
6493
- this.displayedHtml = html2;
6494
- };
6495
- const onComplete = typeof opts.onComplete === "function" ? opts.onComplete : () => {};
6496
- if (!message) {
6497
- onUpdate("");
6498
- onComplete();
6499
- return {
6500
- stop() {}
6501
- };
6502
- }
6503
- const preprocess = s => (s || "").replace(/ {2,}/g, m => "&nbsp;".repeat(m.length));
6504
- const src = preprocess(message);
6505
- const len = src.length;
6506
- let index = 0;
6507
- let stopped = false;
6508
- let timer = null;
6509
- const step = () => {
6510
- if (stopped) return;
6511
- index = Math.min(len, index + chunk);
6512
- if (index % charsPerRender === 0 || index === len) {
6513
- try {
6514
- const html2 = marked(src.slice(0, index));
6515
- onUpdate(html2);
6516
- } catch (err) {
6517
- onUpdate(marked(src));
6518
- stopped = true;
6519
- onComplete();
6520
- return;
6521
- }
6522
- }
6523
- if (index >= len) {
6524
- stopped = true;
6525
- onComplete();
6526
- return;
6527
- }
6528
- timer = setTimeout(step, speed);
6529
- };
6530
- timer = setTimeout(step, speed);
6531
- return {
6532
- stop() {
6533
- stopped = true;
6534
- if (timer) {
6535
- clearTimeout(timer);
6536
- timer = null;
6537
- }
6538
- }
6539
- };
6540
- },
6541
6926
  // 避免打出a标签
6542
- typewriterRender2(message, opts = {}) {
6927
+ typewriterRender(message, opts = {}) {
6543
6928
  const speed = typeof opts.speed === "number" ? opts.speed : 40;
6544
6929
  const chunk = Math.max(1, typeof opts.chunk === "number" ? opts.chunk : 1);
6545
6930
  const charsPerRender = Math.max(1, typeof opts.charsPerRender === "number" ? opts.charsPerRender : 3);
@@ -6757,17 +7142,1192 @@ const __vue2_script$4 = {
6757
7142
  question: this.clientQuestion,
6758
7143
  updateTime: this.updateTime
6759
7144
  });
7145
+ },
7146
+ showPreviewImage() {
7147
+ this.$emit("showPreviewImage", this.message);
7148
+ },
7149
+ handleImageLoad() {
7150
+ this.isImageLoaded = true;
7151
+ },
7152
+ handleCommodityImageLoad() {
7153
+ this.$nextTick(() => {
7154
+ this.$emit("toBottom");
7155
+ });
7156
+ }
7157
+ }
7158
+ };
7159
+ const __cssModules$5 = {};
7160
+ var __component__$5 = /* @__PURE__ */normalizeComponent(__vue2_script$5, render$6, staticRenderFns$5, false, __vue2_injectStyles$5, "9df8809c", null, null);
7161
+ function __vue2_injectStyles$5(context) {
7162
+ for (let o in __cssModules$5) {
7163
+ this[o] = __cssModules$5[o];
7164
+ }
7165
+ }
7166
+ const ConsultChatItem = /* @__PURE__ */function () {
7167
+ return __component__$5.exports;
7168
+ }();
7169
+ var render$4 = function () {
7170
+ var _vm = this;
7171
+ var _h = _vm.$createElement;
7172
+ var _c = _vm._self._c || _h;
7173
+ return _c("div", {
7174
+ staticClass: "consult-47this-emoji-picker"
7175
+ }, [_c("div", {
7176
+ staticClass: "consult-47this-emoji-tabs"
7177
+ }, _vm._l(_vm.tabs, function (tab) {
7178
+ return _c("button", {
7179
+ key: tab,
7180
+ class: {
7181
+ active: _vm.activeTab === tab
7182
+ },
7183
+ on: {
7184
+ "click": function ($event) {
7185
+ _vm.activeTab = tab;
7186
+ }
7187
+ }
7188
+ }, [_vm._v(" " + _vm._s(tab) + " ")]);
7189
+ }), 0), _c("div", {
7190
+ staticClass: "consult-47this-emoji-grid"
7191
+ }, _vm._l(_vm.filteredEmojis, function (emoji) {
7192
+ return _c("span", {
7193
+ key: emoji.char,
7194
+ staticClass: "consult-47this-emoji",
7195
+ attrs: {
7196
+ "title": emoji.name
7197
+ },
7198
+ on: {
7199
+ "click": function ($event) {
7200
+ return _vm.insertEmoji(emoji.char);
7201
+ }
7202
+ }
7203
+ }, [_vm._v(" " + _vm._s(emoji.char) + " ")]);
7204
+ }), 0)]);
7205
+ };
7206
+ var staticRenderFns$4 = [];
7207
+ const UnicodeEmojiPicker_vue_vue_type_style_index_0_scoped_true_lang = "";
7208
+ const __vue2_script$4 = {
7209
+ name: "UnicodeEmojiPicker",
7210
+ data() {
7211
+ return {
7212
+ activeTab: "Smileys",
7213
+ // 默认选中分类
7214
+ tabs: ["Smileys", "Animals", "Food", "Travel", "Objects", "Symbols"],
7215
+ emojis: [
7216
+ // Smileys & People (45个)
7217
+ {
7218
+ char: "😀",
7219
+ name: "Grinning Face",
7220
+ category: "Smileys"
7221
+ }, {
7222
+ char: "😃",
7223
+ name: "Grinning Face with Big Eyes",
7224
+ category: "Smileys"
7225
+ }, {
7226
+ char: "😄",
7227
+ name: "Grinning Face with Smiling Eyes",
7228
+ category: "Smileys"
7229
+ }, {
7230
+ char: "😁",
7231
+ name: "Beaming Face with Smiling Eyes",
7232
+ category: "Smileys"
7233
+ }, {
7234
+ char: "😆",
7235
+ name: "Grinning Squinting Face",
7236
+ category: "Smileys"
7237
+ }, {
7238
+ char: "😅",
7239
+ name: "Grinning Face with Sweat",
7240
+ category: "Smileys"
7241
+ }, {
7242
+ char: "🤣",
7243
+ name: "Rolling on the Floor Laughing",
7244
+ category: "Smileys"
7245
+ }, {
7246
+ char: "😂",
7247
+ name: "Face with Tears of Joy",
7248
+ category: "Smileys"
7249
+ }, {
7250
+ char: "👍",
7251
+ name: "Thumbs Up",
7252
+ category: "Smileys"
7253
+ }, {
7254
+ char: "👏",
7255
+ name: "Clapping Hands",
7256
+ category: "Smileys"
7257
+ }, {
7258
+ char: "🙂",
7259
+ name: "Slightly Smiling Face",
7260
+ category: "Smileys"
7261
+ }, {
7262
+ char: "🙃",
7263
+ name: "Upside-Down Face",
7264
+ category: "Smileys"
7265
+ }, {
7266
+ char: "😉",
7267
+ name: "Winking Face",
7268
+ category: "Smileys"
7269
+ }, {
7270
+ char: "😊",
7271
+ name: "Smiling Face with Smiling Eyes",
7272
+ category: "Smileys"
7273
+ }, {
7274
+ char: "😇",
7275
+ name: "Smiling Face with Halo",
7276
+ category: "Smileys"
7277
+ }, {
7278
+ char: "🥰",
7279
+ name: "Smiling Face with Hearts",
7280
+ category: "Smileys"
7281
+ }, {
7282
+ char: "😍",
7283
+ name: "Smiling Face with Heart-Eyes",
7284
+ category: "Smileys"
7285
+ }, {
7286
+ char: "🤩",
7287
+ name: "Star-Struck",
7288
+ category: "Smileys"
7289
+ }, {
7290
+ char: "😘",
7291
+ name: "Face Blowing a Kiss",
7292
+ category: "Smileys"
7293
+ }, {
7294
+ char: "😗",
7295
+ name: "Kissing Face",
7296
+ category: "Smileys"
7297
+ }, {
7298
+ char: "😚",
7299
+ name: "Kissing Face with Closed Eyes",
7300
+ category: "Smileys"
7301
+ }, {
7302
+ char: "😙",
7303
+ name: "Kissing Face with Smiling Eyes",
7304
+ category: "Smileys"
7305
+ }, {
7306
+ char: "🥲",
7307
+ name: "Smiling Face with Tear",
7308
+ category: "Smileys"
7309
+ }, {
7310
+ char: "😋",
7311
+ name: "Face Savoring Food",
7312
+ category: "Smileys"
7313
+ }, {
7314
+ char: "😛",
7315
+ name: "Face with Tongue",
7316
+ category: "Smileys"
7317
+ }, {
7318
+ char: "😜",
7319
+ name: "Winking Face with Tongue",
7320
+ category: "Smileys"
7321
+ }, {
7322
+ char: "🤪",
7323
+ name: "Zany Face",
7324
+ category: "Smileys"
7325
+ }, {
7326
+ char: "😝",
7327
+ name: "Squinting Face with Tongue",
7328
+ category: "Smileys"
7329
+ }, {
7330
+ char: "🤑",
7331
+ name: "Money-Mouth Face",
7332
+ category: "Smileys"
7333
+ }, {
7334
+ char: "🤗",
7335
+ name: "Hugging Face",
7336
+ category: "Smileys"
7337
+ }, {
7338
+ char: "🤭",
7339
+ name: "Face with Hand Over Mouth",
7340
+ category: "Smileys"
7341
+ }, {
7342
+ char: "🤫",
7343
+ name: "Shushing Face",
7344
+ category: "Smileys"
7345
+ }, {
7346
+ char: "🤔",
7347
+ name: "Thinking Face",
7348
+ category: "Smileys"
7349
+ }, {
7350
+ char: "😐",
7351
+ name: "Neutral Face",
7352
+ category: "Smileys"
7353
+ }, {
7354
+ char: "😑",
7355
+ name: "Expressionless Face",
7356
+ category: "Smileys"
7357
+ }, {
7358
+ char: "😶",
7359
+ name: "Face Without Mouth",
7360
+ category: "Smileys"
7361
+ }, {
7362
+ char: "😏",
7363
+ name: "Smirking Face",
7364
+ category: "Smileys"
7365
+ }, {
7366
+ char: "😒",
7367
+ name: "Unamused Face",
7368
+ category: "Smileys"
7369
+ }, {
7370
+ char: "🙄",
7371
+ name: "Face with Rolling Eyes",
7372
+ category: "Smileys"
7373
+ }, {
7374
+ char: "😬",
7375
+ name: "Grimacing Face",
7376
+ category: "Smileys"
7377
+ }, {
7378
+ char: "🤥",
7379
+ name: "Lying Face",
7380
+ category: "Smileys"
7381
+ }, {
7382
+ char: "😌",
7383
+ name: "Relieved Face",
7384
+ category: "Smileys"
7385
+ }, {
7386
+ char: "😔",
7387
+ name: "Pensive Face",
7388
+ category: "Smileys"
7389
+ }, {
7390
+ char: "😪",
7391
+ name: "Sleepy Face",
7392
+ category: "Smileys"
7393
+ }, {
7394
+ char: "🤤",
7395
+ name: "Drooling Face",
7396
+ category: "Smileys"
7397
+ }, {
7398
+ char: "😴",
7399
+ name: "Sleeping Face",
7400
+ category: "Smileys"
7401
+ }, {
7402
+ char: "😷",
7403
+ name: "Face with Medical Mask",
7404
+ category: "Smileys"
7405
+ },
7406
+ // Animals & Nature (45个)
7407
+ {
7408
+ char: "🐶",
7409
+ name: "Dog Face",
7410
+ category: "Animals"
7411
+ }, {
7412
+ char: "🐱",
7413
+ name: "Cat Face",
7414
+ category: "Animals"
7415
+ }, {
7416
+ char: "🐭",
7417
+ name: "Mouse Face",
7418
+ category: "Animals"
7419
+ }, {
7420
+ char: "🐹",
7421
+ name: "Hamster",
7422
+ category: "Animals"
7423
+ }, {
7424
+ char: "🐰",
7425
+ name: "Rabbit Face",
7426
+ category: "Animals"
7427
+ }, {
7428
+ char: "🦊",
7429
+ name: "Fox Face",
7430
+ category: "Animals"
7431
+ }, {
7432
+ char: "🐻",
7433
+ name: "Bear",
7434
+ category: "Animals"
7435
+ }, {
7436
+ char: "🐼",
7437
+ name: "Panda",
7438
+ category: "Animals"
7439
+ }, {
7440
+ char: "🐨",
7441
+ name: "Koala",
7442
+ category: "Animals"
7443
+ }, {
7444
+ char: "🐯",
7445
+ name: "Tiger Face",
7446
+ category: "Animals"
7447
+ }, {
7448
+ char: "🦁",
7449
+ name: "Lion",
7450
+ category: "Animals"
7451
+ }, {
7452
+ char: "🐮",
7453
+ name: "Cow Face",
7454
+ category: "Animals"
7455
+ }, {
7456
+ char: "🐷",
7457
+ name: "Pig Face",
7458
+ category: "Animals"
7459
+ }, {
7460
+ char: "🐸",
7461
+ name: "Frog",
7462
+ category: "Animals"
7463
+ }, {
7464
+ char: "🐵",
7465
+ name: "Monkey Face",
7466
+ category: "Animals"
7467
+ }, {
7468
+ char: "🐔",
7469
+ name: "Chicken",
7470
+ category: "Animals"
7471
+ }, {
7472
+ char: "🐧",
7473
+ name: "Penguin",
7474
+ category: "Animals"
7475
+ }, {
7476
+ char: "🐦",
7477
+ name: "Bird",
7478
+ category: "Animals"
7479
+ }, {
7480
+ char: "🐤",
7481
+ name: "Baby Chick",
7482
+ category: "Animals"
7483
+ }, {
7484
+ char: "🦆",
7485
+ name: "Duck",
7486
+ category: "Animals"
7487
+ }, {
7488
+ char: "🦅",
7489
+ name: "Eagle",
7490
+ category: "Animals"
7491
+ }, {
7492
+ char: "🦉",
7493
+ name: "Owl",
7494
+ category: "Animals"
7495
+ }, {
7496
+ char: "🦇",
7497
+ name: "Bat",
7498
+ category: "Animals"
7499
+ }, {
7500
+ char: "🐺",
7501
+ name: "Wolf",
7502
+ category: "Animals"
7503
+ }, {
7504
+ char: "🐗",
7505
+ name: "Boar",
7506
+ category: "Animals"
7507
+ }, {
7508
+ char: "🐴",
7509
+ name: "Horse Face",
7510
+ category: "Animals"
7511
+ }, {
7512
+ char: "🦄",
7513
+ name: "Unicorn",
7514
+ category: "Animals"
7515
+ }, {
7516
+ char: "🐝",
7517
+ name: "Honeybee",
7518
+ category: "Animals"
7519
+ }, {
7520
+ char: "🐛",
7521
+ name: "Bug",
7522
+ category: "Animals"
7523
+ }, {
7524
+ char: "🦋",
7525
+ name: "Butterfly",
7526
+ category: "Animals"
7527
+ }, {
7528
+ char: "🐌",
7529
+ name: "Snail",
7530
+ category: "Animals"
7531
+ }, {
7532
+ char: "🐞",
7533
+ name: "Lady Beetle",
7534
+ category: "Animals"
7535
+ }, {
7536
+ char: "🐜",
7537
+ name: "Ant",
7538
+ category: "Animals"
7539
+ }, {
7540
+ char: "🦗",
7541
+ name: "Cricket",
7542
+ category: "Animals"
7543
+ }, {
7544
+ char: "🕷️",
7545
+ name: "Spider",
7546
+ category: "Animals"
7547
+ }, {
7548
+ char: "🦂",
7549
+ name: "Scorpion",
7550
+ category: "Animals"
7551
+ }, {
7552
+ char: "🐢",
7553
+ name: "Turtle",
7554
+ category: "Animals"
7555
+ }, {
7556
+ char: "🐍",
7557
+ name: "Snake",
7558
+ category: "Animals"
7559
+ }, {
7560
+ char: "🦎",
7561
+ name: "Lizard",
7562
+ category: "Animals"
7563
+ }, {
7564
+ char: "🦖",
7565
+ name: "T-Rex",
7566
+ category: "Animals"
7567
+ }, {
7568
+ char: "🦕",
7569
+ name: "Sauropod",
7570
+ category: "Animals"
7571
+ }, {
7572
+ char: "🐙",
7573
+ name: "Octopus",
7574
+ category: "Animals"
7575
+ }, {
7576
+ char: "🦑",
7577
+ name: "Squid",
7578
+ category: "Animals"
7579
+ }, {
7580
+ char: "🦐",
7581
+ name: "Shrimp",
7582
+ category: "Animals"
7583
+ }, {
7584
+ char: "🦞",
7585
+ name: "Lobster",
7586
+ category: "Animals"
7587
+ },
7588
+ // Food & Drink (45个)
7589
+ {
7590
+ char: "🍏",
7591
+ name: "Green Apple",
7592
+ category: "Food"
7593
+ }, {
7594
+ char: "🍎",
7595
+ name: "Red Apple",
7596
+ category: "Food"
7597
+ }, {
7598
+ char: "🍐",
7599
+ name: "Pear",
7600
+ category: "Food"
7601
+ }, {
7602
+ char: "🍊",
7603
+ name: "Tangerine",
7604
+ category: "Food"
7605
+ }, {
7606
+ char: "🍋",
7607
+ name: "Lemon",
7608
+ category: "Food"
7609
+ }, {
7610
+ char: "🍌",
7611
+ name: "Banana",
7612
+ category: "Food"
7613
+ }, {
7614
+ char: "🍉",
7615
+ name: "Watermelon",
7616
+ category: "Food"
7617
+ }, {
7618
+ char: "🍇",
7619
+ name: "Grapes",
7620
+ category: "Food"
7621
+ }, {
7622
+ char: "🍓",
7623
+ name: "Strawberry",
7624
+ category: "Food"
7625
+ }, {
7626
+ char: "🫐",
7627
+ name: "Blueberries",
7628
+ category: "Food"
7629
+ }, {
7630
+ char: "🍈",
7631
+ name: "Melon",
7632
+ category: "Food"
7633
+ }, {
7634
+ char: "🍒",
7635
+ name: "Cherries",
7636
+ category: "Food"
7637
+ }, {
7638
+ char: "🍑",
7639
+ name: "Peach",
7640
+ category: "Food"
7641
+ }, {
7642
+ char: "🥭",
7643
+ name: "Mango",
7644
+ category: "Food"
7645
+ }, {
7646
+ char: "🍍",
7647
+ name: "Pineapple",
7648
+ category: "Food"
7649
+ }, {
7650
+ char: "🥥",
7651
+ name: "Coconut",
7652
+ category: "Food"
7653
+ }, {
7654
+ char: "🥝",
7655
+ name: "Kiwi Fruit",
7656
+ category: "Food"
7657
+ }, {
7658
+ char: "🍅",
7659
+ name: "Tomato",
7660
+ category: "Food"
7661
+ }, {
7662
+ char: "🍆",
7663
+ name: "Eggplant",
7664
+ category: "Food"
7665
+ }, {
7666
+ char: "🥑",
7667
+ name: "Avocado",
7668
+ category: "Food"
7669
+ }, {
7670
+ char: "🥦",
7671
+ name: "Broccoli",
7672
+ category: "Food"
7673
+ }, {
7674
+ char: "🥬",
7675
+ name: "Leafy Green",
7676
+ category: "Food"
7677
+ }, {
7678
+ char: "🥒",
7679
+ name: "Cucumber",
7680
+ category: "Food"
7681
+ }, {
7682
+ char: "🌶️",
7683
+ name: "Hot Pepper",
7684
+ category: "Food"
7685
+ }, {
7686
+ char: "🌽",
7687
+ name: "Corn",
7688
+ category: "Food"
7689
+ }, {
7690
+ char: "🥕",
7691
+ name: "Carrot",
7692
+ category: "Food"
7693
+ }, {
7694
+ char: "🧄",
7695
+ name: "Garlic",
7696
+ category: "Food"
7697
+ }, {
7698
+ char: "🧅",
7699
+ name: "Onion",
7700
+ category: "Food"
7701
+ }, {
7702
+ char: "🥔",
7703
+ name: "Potato",
7704
+ category: "Food"
7705
+ }, {
7706
+ char: "🍠",
7707
+ name: "Roasted Sweet Potato",
7708
+ category: "Food"
7709
+ }, {
7710
+ char: "🥐",
7711
+ name: "Croissant",
7712
+ category: "Food"
7713
+ }, {
7714
+ char: "🥯",
7715
+ name: "Bagel",
7716
+ category: "Food"
7717
+ }, {
7718
+ char: "🍞",
7719
+ name: "Bread",
7720
+ category: "Food"
7721
+ }, {
7722
+ char: "🥖",
7723
+ name: "Baguette Bread",
7724
+ category: "Food"
7725
+ }, {
7726
+ char: "🧀",
7727
+ name: "Cheese Wedge",
7728
+ category: "Food"
7729
+ }, {
7730
+ char: "🥚",
7731
+ name: "Egg",
7732
+ category: "Food"
7733
+ }, {
7734
+ char: "🍳",
7735
+ name: "Cooking",
7736
+ category: "Food"
7737
+ }, {
7738
+ char: "🥞",
7739
+ name: "Pancakes",
7740
+ category: "Food"
7741
+ }, {
7742
+ char: "🧇",
7743
+ name: "Waffle",
7744
+ category: "Food"
7745
+ }, {
7746
+ char: "🥓",
7747
+ name: "Bacon",
7748
+ category: "Food"
7749
+ }, {
7750
+ char: "🥩",
7751
+ name: "Cut of Meat",
7752
+ category: "Food"
7753
+ }, {
7754
+ char: "🍗",
7755
+ name: "Poultry Leg",
7756
+ category: "Food"
7757
+ }, {
7758
+ char: "🍖",
7759
+ name: "Meat on Bone",
7760
+ category: "Food"
7761
+ }, {
7762
+ char: "🦴",
7763
+ name: "Bone",
7764
+ category: "Food"
7765
+ }, {
7766
+ char: "🍕",
7767
+ name: "Pizza",
7768
+ category: "Food"
7769
+ },
7770
+ // Travel & Places (45个)
7771
+ {
7772
+ char: "🚗",
7773
+ name: "Car",
7774
+ category: "Travel"
7775
+ }, {
7776
+ char: "🚕",
7777
+ name: "Taxi",
7778
+ category: "Travel"
7779
+ }, {
7780
+ char: "🚙",
7781
+ name: "SUV",
7782
+ category: "Travel"
7783
+ }, {
7784
+ char: "🚌",
7785
+ name: "Bus",
7786
+ category: "Travel"
7787
+ }, {
7788
+ char: "🚎",
7789
+ name: "Trolleybus",
7790
+ category: "Travel"
7791
+ }, {
7792
+ char: "🏎️",
7793
+ name: "Racing Car",
7794
+ category: "Travel"
7795
+ }, {
7796
+ char: "🚓",
7797
+ name: "Police Car",
7798
+ category: "Travel"
7799
+ }, {
7800
+ char: "🚑",
7801
+ name: "Ambulance",
7802
+ category: "Travel"
7803
+ }, {
7804
+ char: "🚒",
7805
+ name: "Fire Engine",
7806
+ category: "Travel"
7807
+ }, {
7808
+ char: "🚐",
7809
+ name: "Minibus",
7810
+ category: "Travel"
7811
+ }, {
7812
+ char: "🚚",
7813
+ name: "Delivery Truck",
7814
+ category: "Travel"
7815
+ }, {
7816
+ char: "🚛",
7817
+ name: "Articulated Lorry",
7818
+ category: "Travel"
7819
+ }, {
7820
+ char: "🚜",
7821
+ name: "Tractor",
7822
+ category: "Travel"
7823
+ }, {
7824
+ char: "🛴",
7825
+ name: "Kick Scooter",
7826
+ category: "Travel"
7827
+ }, {
7828
+ char: "🚲",
7829
+ name: "Bicycle",
7830
+ category: "Travel"
7831
+ }, {
7832
+ char: "🛵",
7833
+ name: "Motor Scooter",
7834
+ category: "Travel"
7835
+ }, {
7836
+ char: "🏍️",
7837
+ name: "Motorcycle",
7838
+ category: "Travel"
7839
+ }, {
7840
+ char: "🚨",
7841
+ name: "Police Car Light",
7842
+ category: "Travel"
7843
+ }, {
7844
+ char: "🚔",
7845
+ name: "Oncoming Police Car",
7846
+ category: "Travel"
7847
+ }, {
7848
+ char: "🚍",
7849
+ name: "Oncoming Bus",
7850
+ category: "Travel"
7851
+ }, {
7852
+ char: "🚘",
7853
+ name: "Oncoming Automobile",
7854
+ category: "Travel"
7855
+ }, {
7856
+ char: "🚖",
7857
+ name: "Oncoming Taxi",
7858
+ category: "Travel"
7859
+ }, {
7860
+ char: "✈️",
7861
+ name: "Airplane",
7862
+ category: "Travel"
7863
+ }, {
7864
+ char: "🛫",
7865
+ name: "Airplane Departure",
7866
+ category: "Travel"
7867
+ }, {
7868
+ char: "🛬",
7869
+ name: "Airplane Arrival",
7870
+ category: "Travel"
7871
+ }, {
7872
+ char: "🚀",
7873
+ name: "Rocket",
7874
+ category: "Travel"
7875
+ }, {
7876
+ char: "🛸",
7877
+ name: "Flying Saucer",
7878
+ category: "Travel"
7879
+ }, {
7880
+ char: "🚁",
7881
+ name: "Helicopter",
7882
+ category: "Travel"
7883
+ }, {
7884
+ char: "🛶",
7885
+ name: "Canoe",
7886
+ category: "Travel"
7887
+ }, {
7888
+ char: "⛵",
7889
+ name: "Sailboat",
7890
+ category: "Travel"
7891
+ }, {
7892
+ char: "🚤",
7893
+ name: "Speedboat",
7894
+ category: "Travel"
7895
+ }, {
7896
+ char: "🛳️",
7897
+ name: "Passenger Ship",
7898
+ category: "Travel"
7899
+ }, {
7900
+ char: "⛴️",
7901
+ name: "Ferry",
7902
+ category: "Travel"
7903
+ }, {
7904
+ char: "🚢",
7905
+ name: "Ship",
7906
+ category: "Travel"
7907
+ }, {
7908
+ char: "🌍",
7909
+ name: "Globe Showing Europe-Africa",
7910
+ category: "Travel"
7911
+ }, {
7912
+ char: "🌎",
7913
+ name: "Globe Showing Americas",
7914
+ category: "Travel"
7915
+ }, {
7916
+ char: "🌏",
7917
+ name: "Globe Showing Asia-Australia",
7918
+ category: "Travel"
7919
+ }, {
7920
+ char: "🗺️",
7921
+ name: "World Map",
7922
+ category: "Travel"
7923
+ }, {
7924
+ char: "🏠",
7925
+ name: "House",
7926
+ category: "Travel"
7927
+ }, {
7928
+ char: "🏡",
7929
+ name: "House with Garden",
7930
+ category: "Travel"
7931
+ }, {
7932
+ char: "🏢",
7933
+ name: "Office Building",
7934
+ category: "Travel"
7935
+ }, {
7936
+ char: "🏣",
7937
+ name: "Japanese Post Office",
7938
+ category: "Travel"
7939
+ }, {
7940
+ char: "🏤",
7941
+ name: "Post Office",
7942
+ category: "Travel"
7943
+ }, {
7944
+ char: "🏥",
7945
+ name: "Hospital",
7946
+ category: "Travel"
7947
+ }, {
7948
+ char: "🏦",
7949
+ name: "Bank",
7950
+ category: "Travel"
7951
+ },
7952
+ // Objects (45个)
7953
+ {
7954
+ char: "⌚",
7955
+ name: "Watch",
7956
+ category: "Objects"
7957
+ }, {
7958
+ char: "📱",
7959
+ name: "Mobile Phone",
7960
+ category: "Objects"
7961
+ }, {
7962
+ char: "📲",
7963
+ name: "Mobile Phone with Arrow",
7964
+ category: "Objects"
7965
+ }, {
7966
+ char: "💻",
7967
+ name: "Laptop",
7968
+ category: "Objects"
7969
+ }, {
7970
+ char: "⌨️",
7971
+ name: "Keyboard",
7972
+ category: "Objects"
7973
+ }, {
7974
+ char: "🖥️",
7975
+ name: "Desktop Computer",
7976
+ category: "Objects"
7977
+ }, {
7978
+ char: "🖨️",
7979
+ name: "Printer",
7980
+ category: "Objects"
7981
+ }, {
7982
+ char: "🖱️",
7983
+ name: "Computer Mouse",
7984
+ category: "Objects"
7985
+ }, {
7986
+ char: "🖲️",
7987
+ name: "Trackball",
7988
+ category: "Objects"
7989
+ }, {
7990
+ char: "🕹️",
7991
+ name: "Joystick",
7992
+ category: "Objects"
7993
+ }, {
7994
+ char: "🗜️",
7995
+ name: "Clamp",
7996
+ category: "Objects"
7997
+ }, {
7998
+ char: "💽",
7999
+ name: "Computer Disk",
8000
+ category: "Objects"
8001
+ }, {
8002
+ char: "💾",
8003
+ name: "Floppy Disk",
8004
+ category: "Objects"
8005
+ }, {
8006
+ char: "💿",
8007
+ name: "Optical Disk",
8008
+ category: "Objects"
8009
+ }, {
8010
+ char: "📀",
8011
+ name: "DVD",
8012
+ category: "Objects"
8013
+ }, {
8014
+ char: "📼",
8015
+ name: "Videocassette",
8016
+ category: "Objects"
8017
+ }, {
8018
+ char: "📷",
8019
+ name: "Camera",
8020
+ category: "Objects"
8021
+ }, {
8022
+ char: "📸",
8023
+ name: "Camera with Flash",
8024
+ category: "Objects"
8025
+ }, {
8026
+ char: "📹",
8027
+ name: "Video Camera",
8028
+ category: "Objects"
8029
+ }, {
8030
+ char: "🎥",
8031
+ name: "Movie Camera",
8032
+ category: "Objects"
8033
+ }, {
8034
+ char: "📽️",
8035
+ name: "Film Projector",
8036
+ category: "Objects"
8037
+ }, {
8038
+ char: "🎞️",
8039
+ name: "Film Frames",
8040
+ category: "Objects"
8041
+ }, {
8042
+ char: "📞",
8043
+ name: "Telephone Receiver",
8044
+ category: "Objects"
8045
+ }, {
8046
+ char: "☎️",
8047
+ name: "Telephone",
8048
+ category: "Objects"
8049
+ }, {
8050
+ char: "📟",
8051
+ name: "Pager",
8052
+ category: "Objects"
8053
+ }, {
8054
+ char: "📠",
8055
+ name: "Fax Machine",
8056
+ category: "Objects"
8057
+ }, {
8058
+ char: "📺",
8059
+ name: "Television",
8060
+ category: "Objects"
8061
+ }, {
8062
+ char: "📻",
8063
+ name: "Radio",
8064
+ category: "Objects"
8065
+ }, {
8066
+ char: "🎙️",
8067
+ name: "Studio Microphone",
8068
+ category: "Objects"
8069
+ }, {
8070
+ char: "🎚️",
8071
+ name: "Level Slider",
8072
+ category: "Objects"
8073
+ }, {
8074
+ char: "🎛️",
8075
+ name: "Control Knobs",
8076
+ category: "Objects"
8077
+ }, {
8078
+ char: "🧭",
8079
+ name: "Compass",
8080
+ category: "Objects"
8081
+ }, {
8082
+ char: "⏱️",
8083
+ name: "Stopwatch",
8084
+ category: "Objects"
8085
+ }, {
8086
+ char: "⏲️",
8087
+ name: "Timer Clock",
8088
+ category: "Objects"
8089
+ }, {
8090
+ char: "⏰",
8091
+ name: "Alarm Clock",
8092
+ category: "Objects"
8093
+ }, {
8094
+ char: "🕰️",
8095
+ name: "Mantelpiece Clock",
8096
+ category: "Objects"
8097
+ }, {
8098
+ char: "⌛",
8099
+ name: "Hourglass Done",
8100
+ category: "Objects"
8101
+ }, {
8102
+ char: "⏳",
8103
+ name: "Hourglass Not Done",
8104
+ category: "Objects"
8105
+ }, {
8106
+ char: "📡",
8107
+ name: "Satellite Antenna",
8108
+ category: "Objects"
8109
+ }, {
8110
+ char: "🔋",
8111
+ name: "Battery",
8112
+ category: "Objects"
8113
+ }, {
8114
+ char: "🔌",
8115
+ name: "Electric Plug",
8116
+ category: "Objects"
8117
+ }, {
8118
+ char: "💡",
8119
+ name: "Light Bulb",
8120
+ category: "Objects"
8121
+ }, {
8122
+ char: "🔦",
8123
+ name: "Flashlight",
8124
+ category: "Objects"
8125
+ }, {
8126
+ char: "🕯️",
8127
+ name: "Candle",
8128
+ category: "Objects"
8129
+ }, {
8130
+ char: "🧯",
8131
+ name: "Fire Extinguisher",
8132
+ category: "Objects"
8133
+ },
8134
+ // Symbols
8135
+ {
8136
+ char: "❤️",
8137
+ name: "Red Heart",
8138
+ category: "Symbols"
8139
+ }, {
8140
+ char: "🧡",
8141
+ name: "Orange Heart",
8142
+ category: "Symbols"
8143
+ }, {
8144
+ char: "💛",
8145
+ name: "Yellow Heart",
8146
+ category: "Symbols"
8147
+ }, {
8148
+ char: "💚",
8149
+ name: "Green Heart",
8150
+ category: "Symbols"
8151
+ }, {
8152
+ char: "💙",
8153
+ name: "Blue Heart",
8154
+ category: "Symbols"
8155
+ }, {
8156
+ char: "💜",
8157
+ name: "Purple Heart",
8158
+ category: "Symbols"
8159
+ }, {
8160
+ char: "🖤",
8161
+ name: "Black Heart",
8162
+ category: "Symbols"
8163
+ }, {
8164
+ char: "🤍",
8165
+ name: "White Heart",
8166
+ category: "Symbols"
8167
+ }, {
8168
+ char: "🤎",
8169
+ name: "Brown Heart",
8170
+ category: "Symbols"
8171
+ }, {
8172
+ char: "💔",
8173
+ name: "Broken Heart",
8174
+ category: "Symbols"
8175
+ }, {
8176
+ char: "❣️",
8177
+ name: "Heart Exclamation",
8178
+ category: "Symbols"
8179
+ }, {
8180
+ char: "💕",
8181
+ name: "Two Hearts",
8182
+ category: "Symbols"
8183
+ }, {
8184
+ char: "💞",
8185
+ name: "Revolving Hearts",
8186
+ category: "Symbols"
8187
+ }, {
8188
+ char: "💓",
8189
+ name: "Beating Heart",
8190
+ category: "Symbols"
8191
+ }, {
8192
+ char: "💗",
8193
+ name: "Growing Heart",
8194
+ category: "Symbols"
8195
+ }, {
8196
+ char: "💖",
8197
+ name: "Sparkling Heart",
8198
+ category: "Symbols"
8199
+ }, {
8200
+ char: "💘",
8201
+ name: "Heart with Arrow",
8202
+ category: "Symbols"
8203
+ }, {
8204
+ char: "💝",
8205
+ name: "Heart with Ribbon",
8206
+ category: "Symbols"
8207
+ }, {
8208
+ char: "💟",
8209
+ name: "Heart Decoration",
8210
+ category: "Symbols"
8211
+ }, {
8212
+ char: "✨",
8213
+ name: "Sparkles",
8214
+ category: "Symbols"
8215
+ }, {
8216
+ char: "⭐",
8217
+ name: "Star",
8218
+ category: "Symbols"
8219
+ }, {
8220
+ char: "🌟",
8221
+ name: "Glowing Star",
8222
+ category: "Symbols"
8223
+ }, {
8224
+ char: "💯",
8225
+ name: "Hundred Points",
8226
+ category: "Symbols"
8227
+ }, {
8228
+ char: "❓",
8229
+ name: "Question Mark",
8230
+ category: "Symbols"
8231
+ }, {
8232
+ char: "❗",
8233
+ name: "Exclamation Mark",
8234
+ category: "Symbols"
8235
+ }, {
8236
+ char: "‼️",
8237
+ name: "Double Exclamation Mark",
8238
+ category: "Symbols"
8239
+ }, {
8240
+ char: "⏰",
8241
+ name: "Alarm Clock",
8242
+ category: "Symbols"
8243
+ }, {
8244
+ char: "♻️",
8245
+ name: "Recycling Symbol",
8246
+ category: "Symbols"
8247
+ }, {
8248
+ char: "✅",
8249
+ name: "Check Mark Button",
8250
+ category: "Symbols"
8251
+ }, {
8252
+ char: "❌",
8253
+ name: "Cross Mark",
8254
+ category: "Symbols"
8255
+ }, {
8256
+ char: "💟",
8257
+ name: "Heart Decoration",
8258
+ category: "Symbols"
8259
+ }, {
8260
+ char: "☮️",
8261
+ name: "Peace Symbol",
8262
+ category: "Symbols"
8263
+ }, {
8264
+ char: "✝️",
8265
+ name: "Latin Cross",
8266
+ category: "Symbols"
8267
+ }, {
8268
+ char: "☪️",
8269
+ name: "Star and Crescent",
8270
+ category: "Symbols"
8271
+ }, {
8272
+ char: "🕉️",
8273
+ name: "Om",
8274
+ category: "Symbols"
8275
+ }, {
8276
+ char: "☸️",
8277
+ name: "Wheel of Dharma",
8278
+ category: "Symbols"
8279
+ }, {
8280
+ char: "✡️",
8281
+ name: "Star of David",
8282
+ category: "Symbols"
8283
+ }, {
8284
+ char: "🔯",
8285
+ name: "Dotted Six-Pointed Star",
8286
+ category: "Symbols"
8287
+ }, {
8288
+ char: "🕎",
8289
+ name: "Menorah",
8290
+ category: "Symbols"
8291
+ }, {
8292
+ char: "☯️",
8293
+ name: "Yin Yang",
8294
+ category: "Symbols"
8295
+ }, {
8296
+ char: "☦️",
8297
+ name: "Orthodox Cross",
8298
+ category: "Symbols"
8299
+ }, {
8300
+ char: "🛐",
8301
+ name: "Place of Worship",
8302
+ category: "Symbols"
8303
+ }, {
8304
+ char: "⛎",
8305
+ name: "Ophiuchus",
8306
+ category: "Symbols"
8307
+ }]
8308
+ };
8309
+ },
8310
+ computed: {
8311
+ // 根据当前选中的分类过滤表情
8312
+ filteredEmojis() {
8313
+ return this.emojis.filter(emoji => emoji.category === this.activeTab);
8314
+ }
8315
+ },
8316
+ methods: {
8317
+ // 插入表情到输入框
8318
+ insertEmoji(emoji) {
8319
+ this.$emit("select", emoji);
6760
8320
  }
6761
8321
  }
6762
8322
  };
6763
8323
  const __cssModules$4 = {};
6764
- var __component__$4 = /* @__PURE__ */normalizeComponent(__vue2_script$4, render$5, staticRenderFns$4, false, __vue2_injectStyles$4, "0444573a", null, null);
8324
+ var __component__$4 = /* @__PURE__ */normalizeComponent(__vue2_script$4, render$4, staticRenderFns$4, false, __vue2_injectStyles$4, "0f9274ec", null, null);
6765
8325
  function __vue2_injectStyles$4(context) {
6766
8326
  for (let o in __cssModules$4) {
6767
8327
  this[o] = __cssModules$4[o];
6768
8328
  }
6769
8329
  }
6770
- const ConsultChatItem = /* @__PURE__ */function () {
8330
+ const UnicodeEmojiPicker = /* @__PURE__ */function () {
6771
8331
  return __component__$4.exports;
6772
8332
  }();
6773
8333
  var render$3 = function () {
@@ -6818,7 +8378,8 @@ var render$3 = function () {
6818
8378
  "submitEmail": _vm.submitEmail,
6819
8379
  "sendLeaveMessage": _vm.sendLeaveMessage,
6820
8380
  "changeTopToast": _vm.changeTopToast,
6821
- "toBottom": _vm.scrollToBottom
8381
+ "toBottom": _vm.scrollToBottom,
8382
+ "showPreviewImage": _vm.showPreviewImage
6822
8383
  }
6823
8384
  });
6824
8385
  }), 1)], 1), _vm.activeItem.status === "3" ? _c("div", {
@@ -6839,12 +8400,28 @@ var render$3 = function () {
6839
8400
  }
6840
8401
  }, [_vm._v("Continue my conversation")])]) : _vm._e(), _vm.activeItem.status !== "3" && !_vm.pauseConversation ? _c("div", {
6841
8402
  staticClass: "consult-47this-dialog-input"
6842
- }, [_c("textarea", {
8403
+ }, [_c("span", {
8404
+ staticClass: "consult-47this-dialog-add",
8405
+ on: {
8406
+ "click": _vm.changeShowActionPop
8407
+ }
8408
+ }), _c("textarea", {
8409
+ directives: [{
8410
+ name: "model",
8411
+ rawName: "v-model",
8412
+ value: _vm.message,
8413
+ expression: "message"
8414
+ }],
6843
8415
  ref: "inputRef",
8416
+ staticClass: "custom-input",
6844
8417
  attrs: {
6845
8418
  "type": "text",
8419
+ "rows": "1",
6846
8420
  "placeholder": "Your Message"
6847
8421
  },
8422
+ domProps: {
8423
+ "value": _vm.message
8424
+ },
6848
8425
  on: {
6849
8426
  "keydown": function ($event) {
6850
8427
  if (!$event.type.indexOf("key") && _vm._k($event.keyCode, "enter", 13, $event.key, "Enter")) return null;
@@ -6852,7 +8429,10 @@ var render$3 = function () {
6852
8429
  $event.preventDefault();
6853
8430
  return _vm.handleEnter.apply(null, arguments);
6854
8431
  },
6855
- "input": _vm.updateMessage,
8432
+ "input": [function ($event) {
8433
+ if ($event.target.composing) return;
8434
+ _vm.message = $event.target.value;
8435
+ }, _vm.updateMessage],
6856
8436
  "compositionstart": function ($event) {
6857
8437
  _vm.isComposing = true;
6858
8438
  },
@@ -6867,20 +8447,60 @@ var render$3 = function () {
6867
8447
  on: {
6868
8448
  "click": _vm.sendMessage
6869
8449
  }
6870
- })])]) : _vm._e(), _vm.topToast ? _c("div", {
8450
+ })]), _c("div", {
8451
+ directives: [{
8452
+ name: "show",
8453
+ rawName: "v-show",
8454
+ value: _vm.showActionPop,
8455
+ expression: "showActionPop"
8456
+ }],
8457
+ staticClass: "consult-47this-dialog-action-pop"
8458
+ }, [_c("div", {
8459
+ staticClass: "consult-47this-dialog-action-pop-item"
8460
+ }, [_vm._v(" Upload Picture "), _c("input", {
8461
+ attrs: {
8462
+ "type": "file",
8463
+ "accept": "image/*"
8464
+ },
8465
+ on: {
8466
+ "change": _vm.handleUploadPicture
8467
+ }
8468
+ })]), _c("div", {
8469
+ staticClass: "consult-47this-dialog-action-pop-item",
8470
+ on: {
8471
+ "click": _vm.sendEmoji
8472
+ }
8473
+ }, [_vm._v(" Add Emoji ")])]), _vm.showEmojiPicker ? _c("UnicodeEmojiPicker", {
8474
+ staticClass: "consult-47this-dialog-emoji-picker",
8475
+ on: {
8476
+ "select": _vm.insertEmoji
8477
+ }
8478
+ }) : _vm._e()], 1) : _vm._e(), _vm.topToast ? _c("div", {
6871
8479
  staticClass: "consult-47this-top-toast"
6872
8480
  }, [_c("div", {
6873
8481
  staticClass: "consult-47this-top-toast-content"
6874
8482
  }, [_vm._v(" " + _vm._s(_vm.topToast)), _c("span", {
6875
8483
  staticClass: "dots"
6876
- })])]) : _vm._e()]);
8484
+ })])]) : _vm._e(), _vm.showToastLoading ? _c("div", {
8485
+ staticClass: "consult-toast-loading"
8486
+ }, [_vm._m(0)]) : _vm._e()]);
6877
8487
  };
6878
- var staticRenderFns$3 = [];
8488
+ var staticRenderFns$3 = [function () {
8489
+ var _vm = this;
8490
+ var _h = _vm.$createElement;
8491
+ var _c = _vm._self._c || _h;
8492
+ return _c("div", {
8493
+ staticClass: "consult-toast-loading-content"
8494
+ }, [_c("div", {
8495
+ staticClass: "consult-toast-loading-text"
8496
+ }, [_vm._v("Loading...")])]);
8497
+ }];
6879
8498
  const ConsultDialog_vue_vue_type_style_index_0_scoped_true_lang = "";
6880
8499
  const __vue2_script$3 = {
6881
8500
  name: "ConsultDialog",
6882
8501
  components: {
6883
- ConsultChatItem
8502
+ ConsultChatItem,
8503
+ UnicodeEmojiPicker
6884
8504
  },
6885
8505
  props: {
6886
8506
  initData: {
@@ -6912,7 +8532,11 @@ const __vue2_script$3 = {
6912
8532
  isInit: true,
6913
8533
  isComposing: false,
6914
8534
  pauseConversation: false,
6915
- topToast: ""
8535
+ topToast: "",
8536
+ showActionPop: false,
8537
+ textareaHeight: 36,
8538
+ showEmojiPicker: false,
8539
+ showToastLoading: false
6916
8540
  };
6917
8541
  },
6918
8542
  watch: {
@@ -6943,6 +8567,7 @@ const __vue2_script$3 = {
6943
8567
  top: this.$refs.chatDialogRef.scrollHeight,
6944
8568
  behavior: "auto"
6945
8569
  });
8570
+ this.adjustTextareaHeight();
6946
8571
  },
6947
8572
  methods: {
6948
8573
  scrollToBottom() {
@@ -6961,12 +8586,23 @@ const __vue2_script$3 = {
6961
8586
  if (!this.initData.socketUrl || message.trim() === "") {
6962
8587
  return;
6963
8588
  }
6964
- this.$emit("send", message);
8589
+ this.$emit("send", 1, message);
6965
8590
  this.$refs.inputRef.value = "";
8591
+ this.message = "";
8592
+ this.adjustTextareaHeight();
6966
8593
  },
6967
8594
  updateMessage(event) {
6968
8595
  this.message = event.target.value;
6969
8596
  this.$emit("updateMessage");
8597
+ this.adjustTextareaHeight();
8598
+ },
8599
+ adjustTextareaHeight() {
8600
+ const textarea = this.$refs.inputRef;
8601
+ if (!textarea) return;
8602
+ textarea.style.height = "auto";
8603
+ const scrollHeight = textarea.scrollHeight + 3;
8604
+ this.textareaHeight = Math.min(scrollHeight, 200);
8605
+ textarea.style.height = `${this.textareaHeight}px`;
6970
8606
  },
6971
8607
  loadMore() {
6972
8608
  if (this.isInit || this.loading || this.noMore) {
@@ -7026,6 +8662,76 @@ const __vue2_script$3 = {
7026
8662
  },
7027
8663
  changeTopToast(message) {
7028
8664
  this.topToast = message;
8665
+ },
8666
+ changeShowActionPop() {
8667
+ if (this.showEmojiPicker) {
8668
+ this.showEmojiPicker = false;
8669
+ this.showActionPop = true;
8670
+ return;
8671
+ }
8672
+ this.showActionPop = !this.showActionPop;
8673
+ },
8674
+ uploadPicture(data) {
8675
+ uploadChatImage(data, this.initData.socketUrl).then(res => {
8676
+ if (res.data.length > 0) {
8677
+ this.$emit("send", 2, res.data[0]);
8678
+ this.showActionPop = false;
8679
+ }
8680
+ }).catch(error => {
8681
+ if (this.$sweetalert) {
8682
+ this.$sweetalert.insert({
8683
+ title: "Something went wrong",
8684
+ text: error.response.data,
8685
+ type: "error",
8686
+ confirmButtonText: "OK"
8687
+ });
8688
+ } else {
8689
+ alert(error.response.data);
8690
+ }
8691
+ }).finally(() => {
8692
+ this.showToastLoading = false;
8693
+ });
8694
+ },
8695
+ async handleUploadPicture(event) {
8696
+ const file = event.target.files[0];
8697
+ if (file && file.size > 5 * 1024 * 1024) {
8698
+ if (this.$sweetalert) {
8699
+ this.$sweetalert.insert({
8700
+ title: "Something went wrong",
8701
+ text: "picture size is too large, max size is 5MB",
8702
+ type: "error",
8703
+ confirmButtonText: "OK"
8704
+ });
8705
+ } else {
8706
+ alert("Picture size is too large, max size is 5MB");
8707
+ }
8708
+ return;
8709
+ }
8710
+ const data = new FormData();
8711
+ if (file) {
8712
+ let compressFile = null;
8713
+ await compressImageGetFile({
8714
+ file
8715
+ }).then(res => {
8716
+ compressFile = res;
8717
+ }).catch(error => {
8718
+ console.error(error);
8719
+ });
8720
+ data.append("files", compressFile);
8721
+ this.uploadPicture(data);
8722
+ this.showToastLoading = true;
8723
+ }
8724
+ },
8725
+ sendEmoji() {
8726
+ this.showEmojiPicker = true;
8727
+ this.showActionPop = false;
8728
+ },
8729
+ insertEmoji(emoji) {
8730
+ this.message += emoji;
8731
+ this.showEmojiPicker = false;
8732
+ },
8733
+ showPreviewImage(url) {
8734
+ this.$emit("showPreviewImage", url);
7029
8735
  }
7030
8736
  },
7031
8737
  beforeDestroy() {
@@ -7033,7 +8739,7 @@ const __vue2_script$3 = {
7033
8739
  }
7034
8740
  };
7035
8741
  const __cssModules$3 = {};
7036
- var __component__$3 = /* @__PURE__ */normalizeComponent(__vue2_script$3, render$3, staticRenderFns$3, false, __vue2_injectStyles$3, "07011d53", null, null);
8742
+ var __component__$3 = /* @__PURE__ */normalizeComponent(__vue2_script$3, render$3, staticRenderFns$3, false, __vue2_injectStyles$3, "55405e10", null, null);
7037
8743
  function __vue2_injectStyles$3(context) {
7038
8744
  for (let o in __cssModules$3) {
7039
8745
  this[o] = __cssModules$3[o];
@@ -7088,9 +8794,20 @@ var render$2 = function () {
7088
8794
  "sendLeaveMessage": _vm.sendLeaveMessage,
7089
8795
  "restart": _vm.restart,
7090
8796
  "updateMessage": _vm.updateMessage,
8797
+ "showPreviewImage": _vm.showPreviewImage,
7091
8798
  "trackEvent": _vm.trackEvent
7092
8799
  }
7093
- })], 1);
8800
+ }), _vm.showPreview ? _c("div", {
8801
+ staticClass: "consult-preview-image",
8802
+ on: {
8803
+ "click": _vm.hidePreview
8804
+ }
8805
+ }, [_c("img", {
8806
+ attrs: {
8807
+ "src": _vm.previewImage,
8808
+ "alt": ""
8809
+ }
8810
+ })]) : _vm._e()], 1);
7094
8811
  };
7095
8812
  var staticRenderFns$2 = [];
7096
8813
  const ConsultContainer_vue_vue_type_style_index_0_scoped_true_lang = "";
@@ -7131,7 +8848,9 @@ const __vue2_script$2 = {
7131
8848
  roomId: ""
7132
8849
  },
7133
8850
  salesUserStatus: "",
7134
- buttonLock: false
8851
+ buttonLock: false,
8852
+ showPreview: false,
8853
+ previewImage: ""
7135
8854
  };
7136
8855
  },
7137
8856
  computed: {
@@ -7150,6 +8869,7 @@ const __vue2_script$2 = {
7150
8869
  messages() {
7151
8870
  const list2 = this.activeChats.map((item, index) => {
7152
8871
  return {
8872
+ ...item,
7153
8873
  id: index + 1,
7154
8874
  userId: item.userId,
7155
8875
  roomId: item.roomId,
@@ -7162,7 +8882,8 @@ const __vue2_script$2 = {
7162
8882
  time: chatShowDateTime(item.updateTime),
7163
8883
  updateTime: item.updateTime,
7164
8884
  type: item.type || 1,
7165
- source: item.source || ""
8885
+ source: item.source || "",
8886
+ commodityInformation: item.commodityInformation || null
7166
8887
  };
7167
8888
  });
7168
8889
  return list2;
@@ -7358,8 +9079,8 @@ const __vue2_script$2 = {
7358
9079
  if (res.data.length > 0) this.makeChatList(query, res.data);
7359
9080
  } catch {}
7360
9081
  },
7361
- sendMessage(roomId, message) {
7362
- this.socket.emit("sendMessage", roomId, message);
9082
+ sendMessage(roomId, type, message) {
9083
+ this.socket.emit("sendMessage", roomId, type, message);
7363
9084
  },
7364
9085
  logOut() {
7365
9086
  this.socket.emit("logOut");
@@ -7392,6 +9113,7 @@ const __vue2_script$2 = {
7392
9113
  }
7393
9114
  }
7394
9115
  this.chats.chatList.push({
9116
+ ...data,
7395
9117
  userId,
7396
9118
  message,
7397
9119
  userName: userName || data.name,
@@ -7405,14 +9127,14 @@ const __vue2_script$2 = {
7405
9127
  source: source || ""
7406
9128
  });
7407
9129
  },
7408
- handleSend(message) {
7409
- this.sendMessage(this.onRoomId, message);
9130
+ handleSend(type, message) {
9131
+ this.sendMessage(this.onRoomId, type, message);
7410
9132
  this.pushChat({
7411
9133
  userId: this.userId,
7412
9134
  message,
7413
9135
  userName: this.initData.user.name,
7414
9136
  updateTime: getCurrentTime(),
7415
- type: 1
9137
+ type: type || 1
7416
9138
  });
7417
9139
  this.scrollToBottom();
7418
9140
  this.trackEvent("Chat message sent", {
@@ -7526,11 +9248,19 @@ const __vue2_script$2 = {
7526
9248
  },
7527
9249
  trackEvent() {
7528
9250
  this.$emit("trackEvent", ...arguments);
9251
+ },
9252
+ showPreviewImage(url) {
9253
+ this.previewImage = url;
9254
+ this.showPreview = true;
9255
+ },
9256
+ hidePreview() {
9257
+ this.showPreview = false;
9258
+ this.previewImage = "";
7529
9259
  }
7530
9260
  }
7531
9261
  };
7532
9262
  const __cssModules$2 = {};
7533
- var __component__$2 = /* @__PURE__ */normalizeComponent(__vue2_script$2, render$2, staticRenderFns$2, false, __vue2_injectStyles$2, "23c2206c", null, null);
9263
+ var __component__$2 = /* @__PURE__ */normalizeComponent(__vue2_script$2, render$2, staticRenderFns$2, false, __vue2_injectStyles$2, "0ac374b4", null, null);
7534
9264
  function __vue2_injectStyles$2(context) {
7535
9265
  for (let o in __cssModules$2) {
7536
9266
  this[o] = __cssModules$2[o];