vue-element-ui-x 0.2.2 → 1.0.2

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.
Files changed (97) hide show
  1. package/lib/components/Attachments/index.js +18 -18
  2. package/lib/components/Bubble/index.js +145 -155
  3. package/lib/components/BubbleList/index.js +180 -207
  4. package/lib/components/Conversations/index.js +14370 -14370
  5. package/lib/components/FilesCard/index.js +5 -5
  6. package/lib/components/Prompts/index.js +25 -25
  7. package/lib/components/Sender/index.js +1606 -1459
  8. package/lib/components/Thinking/index.js +157 -23
  9. package/lib/components/ThoughtChain/index.js +143 -144
  10. package/lib/components/Typewriter/index.js +124 -125
  11. package/lib/components/Welcome/index.js +5 -5
  12. package/lib/index.common.js +1 -1
  13. package/lib/index.esm.js +1 -1
  14. package/lib/index.js +817 -389
  15. package/lib/index.umd.js +1 -1
  16. package/lib/locale/index.js +97 -0
  17. package/lib/locale/lang/ar-SA.js +18 -0
  18. package/lib/locale/lang/ar-SA.umd.js +26 -0
  19. package/lib/locale/lang/ar.js +18 -0
  20. package/lib/locale/lang/ar.umd.js +26 -0
  21. package/lib/locale/lang/de-DE.js +18 -0
  22. package/lib/locale/lang/de-DE.umd.js +26 -0
  23. package/lib/locale/lang/de.js +18 -0
  24. package/lib/locale/lang/de.umd.js +26 -0
  25. package/lib/locale/lang/en.js +18 -0
  26. package/lib/locale/lang/en.umd.js +26 -0
  27. package/lib/locale/lang/es-ES.js +18 -0
  28. package/lib/locale/lang/es-ES.umd.js +26 -0
  29. package/lib/locale/lang/es.js +18 -0
  30. package/lib/locale/lang/es.umd.js +26 -0
  31. package/lib/locale/lang/fr-FR.js +18 -0
  32. package/lib/locale/lang/fr-FR.umd.js +26 -0
  33. package/lib/locale/lang/fr.js +18 -0
  34. package/lib/locale/lang/fr.umd.js +26 -0
  35. package/lib/locale/lang/index.js +50 -0
  36. package/lib/locale/lang/it-IT.js +18 -0
  37. package/lib/locale/lang/it-IT.umd.js +26 -0
  38. package/lib/locale/lang/it.js +18 -0
  39. package/lib/locale/lang/it.umd.js +26 -0
  40. package/lib/locale/lang/ja-JP.js +18 -0
  41. package/lib/locale/lang/ja-JP.umd.js +26 -0
  42. package/lib/locale/lang/ja.js +18 -0
  43. package/lib/locale/lang/ja.umd.js +26 -0
  44. package/lib/locale/lang/ko-KR.js +18 -0
  45. package/lib/locale/lang/ko-KR.umd.js +26 -0
  46. package/lib/locale/lang/ko.js +18 -0
  47. package/lib/locale/lang/ko.umd.js +26 -0
  48. package/lib/locale/lang/pt-BR.js +18 -0
  49. package/lib/locale/lang/pt-BR.umd.js +26 -0
  50. package/lib/locale/lang/ru-RU.js +18 -0
  51. package/lib/locale/lang/ru-RU.umd.js +26 -0
  52. package/lib/locale/lang/zh-CN.js +18 -0
  53. package/lib/locale/lang/zh-CN.umd.js +26 -0
  54. package/lib/locale/lang/zh-TW.js +18 -0
  55. package/lib/locale/lang/zh-TW.umd.js +26 -0
  56. package/lib/locale/mixin.js +9 -0
  57. package/package.json +15 -10
  58. package/src/components/Attachments/src/main.vue +2 -10
  59. package/src/components/Bubble/src/main.vue +288 -299
  60. package/src/components/BubbleList/src/main.vue +2 -19
  61. package/src/components/Conversations/src/main.vue +0 -41
  62. package/src/components/Prompts/src/main.vue +248 -248
  63. package/src/components/Sender/src/components/LoadingButton.vue +37 -39
  64. package/src/components/Sender/src/components/SpeechLoadingButton.vue +41 -43
  65. package/src/components/Sender/src/main.vue +13 -3
  66. package/src/components/Thinking/src/main.vue +13 -9
  67. package/src/components/ThoughtChain/src/main.vue +1 -3
  68. package/src/components/Typewriter/src/main.vue +3 -7
  69. package/src/components/Welcome/src/main.vue +151 -151
  70. package/src/index.js +23 -6
  71. package/src/locale/index.js +97 -0
  72. package/src/locale/lang/ar.js +18 -0
  73. package/src/locale/lang/de.js +18 -0
  74. package/src/locale/lang/en.js +18 -0
  75. package/src/locale/lang/es.js +18 -0
  76. package/src/locale/lang/fr.js +18 -0
  77. package/src/locale/lang/index.js +62 -0
  78. package/src/locale/lang/it.js +18 -0
  79. package/src/locale/lang/ja.js +18 -0
  80. package/src/locale/lang/ko.js +18 -0
  81. package/src/locale/lang/pt-br.js +18 -0
  82. package/src/locale/lang/ru-RU.js +18 -0
  83. package/src/locale/lang/zh-CN.js +18 -0
  84. package/src/locale/lang/zh-TW.js +18 -0
  85. package/src/locale/mixin.js +9 -0
  86. package/src/styles/Attachments.scss +236 -236
  87. package/src/styles/Bubble.scss +5 -4
  88. package/src/styles/BubbleList.scss +148 -148
  89. package/src/styles/Conversations.scss +260 -260
  90. package/src/styles/FilesCard.scss +222 -221
  91. package/src/styles/Prompts.scss +197 -195
  92. package/src/styles/Sender.scss +207 -199
  93. package/src/styles/Thinking.scss +36 -6
  94. package/src/styles/ThoughtChain.scss +113 -113
  95. package/src/styles/Typewriter.scss +66 -66
  96. package/src/styles/var.scss +4 -5
  97. package/src/theme/var.scss +183 -72
@@ -82,7 +82,7 @@ module.exports =
82
82
  /******/
83
83
  /******/
84
84
  /******/ // Load entry module and return exports
85
- /******/ return __webpack_require__(__webpack_require__.s = 97);
85
+ /******/ return __webpack_require__(__webpack_require__.s = 100);
86
86
  /******/ })
87
87
  /************************************************************************/
88
88
  /******/ ({
@@ -192,658 +192,1276 @@ function normalizeComponent(
192
192
 
193
193
  /***/ }),
194
194
 
195
- /***/ 2:
196
- /***/ (function(module, exports, __webpack_require__) {
195
+ /***/ 100:
196
+ /***/ (function(module, __webpack_exports__, __webpack_require__) {
197
197
 
198
198
  "use strict";
199
+ // ESM COMPAT FLAG
200
+ __webpack_require__.r(__webpack_exports__);
199
201
 
200
-
201
- /*
202
- MIT License http://www.opensource.org/licenses/mit-license.php
203
- Author Tobias Koppers @sokra
204
- */
205
- // css base code, injected by the css-loader
206
- // eslint-disable-next-line func-names
207
- module.exports = function (cssWithMappingToString) {
208
- var list = []; // return the list of modules as css string
209
-
210
- list.toString = function toString() {
211
- return this.map(function (item) {
212
- var content = cssWithMappingToString(item);
213
-
214
- if (item[2]) {
215
- return "@media ".concat(item[2], " {").concat(content, "}");
202
+ // CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--6!./node_modules/vue-loader/lib??vue-loader-options!./src/components/Sender/src/main.vue?vue&type=template&id=1822655c&scoped=true
203
+ var render = function render() {
204
+ var _vm = this,
205
+ _c = _vm._self._c;
206
+ return _c("div", {
207
+ staticClass: "el-x-sender-wrap",
208
+ style: {
209
+ display: "block",
210
+ cursor: _vm.disabled ? "not-allowed" : "default",
211
+ "--el-x-sender-trigger-popover-width": _vm.triggerPopoverWidth,
212
+ "--el-x-sender-trigger-popover-left": _vm.triggerPopoverLeft
213
+ }
214
+ }, [_c("div", {
215
+ ref: "senderRef",
216
+ staticClass: "el-x-sender",
217
+ class: {
218
+ "el-x-sender-disabled": _vm.disabled
219
+ },
220
+ style: {
221
+ "--el-x-sender-box-shadow-tertiary": "0 1px 2px 0 rgba(0, 0, 0, 0.03), 0 1px 6px -1px rgba(0, 0, 0, 0.02), 0 2px 4px 0 rgba(0, 0, 0, 0.02)",
222
+ "--el-x-sender-input-font-size": "14px",
223
+ "--el-x-sender-header-animation-duration": `${_vm.headerAnimationTimer}ms`
224
+ }
225
+ }, [_c("transition", {
226
+ attrs: {
227
+ name: "slide"
228
+ }
229
+ }, [_vm.visiableHeader ? _c("div", {
230
+ staticClass: "el-x-sender-header-wrap"
231
+ }, [_vm.$slots.header ? _c("div", {
232
+ staticClass: "el-x-sender-header"
233
+ }, [_vm._t("header")], 2) : _vm._e()]) : _vm._e()]), _vm._v(" "), _c("div", {
234
+ staticClass: "el-x-sender-content",
235
+ class: {
236
+ "content-variant-updown": _vm.variant === "updown"
237
+ },
238
+ on: {
239
+ mousedown: _vm.onContentMouseDown
240
+ }
241
+ }, [_vm.$slots.prefix && _vm.variant === "default" ? _c("div", {
242
+ staticClass: "el-x-sender-prefix"
243
+ }, [_vm._t("prefix")], 2) : _vm._e(), _vm._v(" "), _c("el-input", {
244
+ ref: "inputRef",
245
+ staticClass: "el-x-sender-input",
246
+ attrs: {
247
+ rows: 1,
248
+ autosize: _vm.computedAutoSize,
249
+ type: "textarea",
250
+ "validate-event": false,
251
+ placeholder: _vm.computedPlaceholder,
252
+ readonly: _vm.readOnly || _vm.disabled,
253
+ disabled: _vm.disabled
254
+ },
255
+ on: {
256
+ compositionstart: _vm.handleCompositionStart,
257
+ compositionend: _vm.handleCompositionEnd
258
+ },
259
+ nativeOn: {
260
+ keydown: function ($event) {
261
+ return _vm.handleKeyDown.apply(null, arguments);
216
262
  }
217
-
218
- return content;
219
- }).join("");
220
- }; // import a list of modules into the list
221
- // eslint-disable-next-line func-names
222
-
223
-
224
- list.i = function (modules, mediaQuery, dedupe) {
225
- if (typeof modules === "string") {
226
- // eslint-disable-next-line no-param-reassign
227
- modules = [[null, modules, ""]];
263
+ },
264
+ model: {
265
+ value: _vm.internalValue,
266
+ callback: function ($$v) {
267
+ _vm.internalValue = $$v;
268
+ },
269
+ expression: "internalValue"
228
270
  }
229
-
230
- var alreadyImportedModules = {};
231
-
232
- if (dedupe) {
233
- for (var i = 0; i < this.length; i++) {
234
- // eslint-disable-next-line prefer-destructuring
235
- var id = this[i][0];
236
-
237
- if (id != null) {
238
- alreadyImportedModules[id] = true;
239
- }
271
+ }), _vm._v(" "), _vm.variant === "default" ? _c("div", {
272
+ staticClass: "el-x-sender-action-list"
273
+ }, [_vm._t("action-list", function () {
274
+ return [_c("div", {
275
+ staticClass: "el-x-sender-action-list-presets"
276
+ }, [!_vm.loading ? _c("send-button", {
277
+ attrs: {
278
+ disabled: _vm.isSubmitDisabled
279
+ },
280
+ on: {
281
+ submit: _vm.submit
282
+ }
283
+ }) : _vm._e(), _vm._v(" "), _vm.loading ? _c("loading-button", {
284
+ on: {
285
+ cancel: _vm.cancel
286
+ }
287
+ }) : _vm._e(), _vm._v(" "), !_vm.speechLoading && _vm.allowSpeech ? _c("speech-button", {
288
+ on: {
289
+ click: _vm.startRecognition
290
+ }
291
+ }) : _vm._e(), _vm._v(" "), _vm.speechLoading && _vm.allowSpeech ? _c("speech-loading-button", {
292
+ on: {
293
+ click: _vm.stopRecognition
294
+ }
295
+ }) : _vm._e(), _vm._v(" "), _vm.clearable ? _c("clear-button", {
296
+ on: {
297
+ clear: _vm.clear
298
+ }
299
+ }) : _vm._e()], 1)];
300
+ })], 2) : _vm._e(), _vm._v(" "), _vm.variant === "updown" && _vm.showUpdown ? _c("div", {
301
+ staticClass: "el-x-sender-updown-wrap"
302
+ }, [_vm.$slots.prefix ? _c("div", {
303
+ staticClass: "el-x-sender-prefix"
304
+ }, [_vm._t("prefix")], 2) : _vm._e(), _vm._v(" "), _c("div", {
305
+ staticClass: "el-x-sender-action-list"
306
+ }, [_vm._t("action-list", function () {
307
+ return [_c("div", {
308
+ staticClass: "el-x-sender-action-list-presets"
309
+ }, [!_vm.loading ? _c("send-button", {
310
+ attrs: {
311
+ disabled: _vm.isSubmitDisabled
312
+ },
313
+ on: {
314
+ submit: _vm.submit
315
+ }
316
+ }) : _vm._e(), _vm._v(" "), _vm.loading ? _c("loading-button", {
317
+ on: {
318
+ cancel: _vm.cancel
319
+ }
320
+ }) : _vm._e(), _vm._v(" "), !_vm.speechLoading && _vm.allowSpeech ? _c("speech-button", {
321
+ on: {
322
+ click: _vm.startRecognition
323
+ }
324
+ }) : _vm._e(), _vm._v(" "), _vm.speechLoading && _vm.allowSpeech ? _c("speech-loading-button", {
325
+ on: {
326
+ click: _vm.stopRecognition
327
+ }
328
+ }) : _vm._e(), _vm._v(" "), _vm.clearable ? _c("clear-button", {
329
+ on: {
330
+ clear: _vm.clear
240
331
  }
332
+ }) : _vm._e()], 1)];
333
+ })], 2)]) : _vm._e()], 1), _vm._v(" "), _c("transition", {
334
+ attrs: {
335
+ name: "slide"
336
+ }
337
+ }, [_vm.$slots.footer ? _c("div", {
338
+ staticClass: "el-x-sender-footer"
339
+ }, [_vm._t("footer")], 2) : _vm._e()]), _vm._v(" "), _c("el-popover", {
340
+ ref: "popoverRef",
341
+ attrs: {
342
+ disabled: _vm.disabled,
343
+ "visible-arrow": false,
344
+ appendToBody: false,
345
+ placement: _vm.triggerPopoverPlacement,
346
+ offset: _vm.triggerPopoverOffset,
347
+ "popper-class": "el-x-sender-trigger-popover",
348
+ trigger: "manual"
349
+ },
350
+ on: {
351
+ show: _vm.onPopoverShow
352
+ },
353
+ model: {
354
+ value: _vm.popoverVisible,
355
+ callback: function ($$v) {
356
+ _vm.popoverVisible = $$v;
357
+ },
358
+ expression: "popoverVisible"
241
359
  }
360
+ }, [_c("template", {
361
+ slot: "default"
362
+ }, [_vm._t("trigger-popover", function () {
363
+ return [_vm._v("\n 当前触发的字符为:" + _vm._s(`${_vm.triggerString}`) + " 在这里定义的内容,但注意这里的回车事件将会被\n 输入框 覆盖\n ")];
364
+ }, {
365
+ triggerString: _vm.triggerString,
366
+ readonly: _vm.readOnly
367
+ })], 2)], 2)], 1)]);
368
+ };
369
+ var staticRenderFns = [];
370
+ render._withStripped = true;
242
371
 
243
- for (var _i = 0; _i < modules.length; _i++) {
244
- var item = [].concat(modules[_i]);
372
+ // CONCATENATED MODULE: ./src/components/Sender/src/main.vue?vue&type=template&id=1822655c&scoped=true
245
373
 
246
- if (dedupe && alreadyImportedModules[item[0]]) {
247
- // eslint-disable-next-line no-continue
248
- continue;
249
- }
374
+ // EXTERNAL MODULE: ./src/locale/mixin.js
375
+ var mixin = __webpack_require__(31);
250
376
 
251
- if (mediaQuery) {
252
- if (!item[2]) {
253
- item[2] = mediaQuery;
254
- } else {
255
- item[2] = "".concat(mediaQuery, " and ").concat(item[2]);
256
- }
377
+ // CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--6!./node_modules/vue-loader/lib??vue-loader-options!./src/components/Sender/src/components/ClearButton.vue?vue&type=template&id=74c70621&scoped=true
378
+ var ClearButtonvue_type_template_id_74c70621_scoped_true_render = function render() {
379
+ var _vm = this,
380
+ _c = _vm._self._c;
381
+ return _c("div", {
382
+ staticClass: "el-x-send-button"
383
+ }, [_c("el-button", {
384
+ attrs: {
385
+ circle: "",
386
+ size: "small"
387
+ },
388
+ on: {
389
+ click: function ($event) {
390
+ return _vm.$emit("clear");
257
391
  }
258
-
259
- list.push(item);
260
392
  }
261
- };
262
-
263
- return list;
393
+ }, [_c("i", {
394
+ staticClass: "el-icon-brush"
395
+ })])], 1);
264
396
  };
397
+ var ClearButtonvue_type_template_id_74c70621_scoped_true_staticRenderFns = [];
398
+ ClearButtonvue_type_template_id_74c70621_scoped_true_render._withStripped = true;
265
399
 
266
- /***/ }),
400
+ // CONCATENATED MODULE: ./src/components/Sender/src/components/ClearButton.vue?vue&type=template&id=74c70621&scoped=true
267
401
 
268
- /***/ 3:
269
- /***/ (function(module, exports, __webpack_require__) {
402
+ // CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./src/components/Sender/src/components/ClearButton.vue?vue&type=script&lang=js
403
+ /* harmony default export */ var ClearButtonvue_type_script_lang_js = ({
404
+ name: 'ClearButton'
405
+ });
406
+ // CONCATENATED MODULE: ./src/components/Sender/src/components/ClearButton.vue?vue&type=script&lang=js
407
+ /* harmony default export */ var components_ClearButtonvue_type_script_lang_js = (ClearButtonvue_type_script_lang_js);
408
+ // EXTERNAL MODULE: ./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js
409
+ var injectStylesIntoStyleTag = __webpack_require__(3);
410
+ var injectStylesIntoStyleTag_default = /*#__PURE__*/__webpack_require__.n(injectStylesIntoStyleTag);
270
411
 
271
- "use strict";
412
+ // EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib??vue-loader-options!./src/components/Sender/src/components/ClearButton.vue?vue&type=style&index=0&id=74c70621&prod&scoped=true&lang=scss
413
+ var ClearButtonvue_type_style_index_0_id_74c70621_prod_scoped_true_lang_scss = __webpack_require__(92);
272
414
 
415
+ // CONCATENATED MODULE: ./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib??vue-loader-options!./src/components/Sender/src/components/ClearButton.vue?vue&type=style&index=0&id=74c70621&prod&scoped=true&lang=scss
273
416
 
274
- var isOldIE = function isOldIE() {
275
- var memo;
276
- return function memorize() {
277
- if (typeof memo === 'undefined') {
278
- // Test for IE <= 9 as proposed by Browserhacks
279
- // @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805
280
- // Tests for existence of standard globals is to allow style-loader
281
- // to operate correctly into non-standard environments
282
- // @see https://github.com/webpack-contrib/style-loader/issues/177
283
- memo = Boolean(window && document && document.all && !window.atob);
284
- }
417
+
285
418
 
286
- return memo;
287
- };
288
- }();
419
+ var options = {};
289
420
 
290
- var getTarget = function getTarget() {
291
- var memo = {};
292
- return function memorize(target) {
293
- if (typeof memo[target] === 'undefined') {
294
- var styleTarget = document.querySelector(target); // Special case to return head of iframe instead of iframe itself
421
+ options.insert = "head";
422
+ options.singleton = false;
295
423
 
296
- if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {
297
- try {
298
- // This will throw an exception if access to iframe is blocked
299
- // due to cross-origin restrictions
300
- styleTarget = styleTarget.contentDocument.head;
301
- } catch (e) {
302
- // istanbul ignore next
303
- styleTarget = null;
304
- }
305
- }
424
+ var update = injectStylesIntoStyleTag_default()(ClearButtonvue_type_style_index_0_id_74c70621_prod_scoped_true_lang_scss["a" /* default */], options);
306
425
 
307
- memo[target] = styleTarget;
308
- }
309
426
 
310
- return memo[target];
311
- };
312
- }();
313
427
 
314
- var stylesInDom = [];
428
+ /* harmony default export */ var components_ClearButtonvue_type_style_index_0_id_74c70621_prod_scoped_true_lang_scss = (ClearButtonvue_type_style_index_0_id_74c70621_prod_scoped_true_lang_scss["a" /* default */].locals || {});
429
+ // CONCATENATED MODULE: ./src/components/Sender/src/components/ClearButton.vue?vue&type=style&index=0&id=74c70621&prod&scoped=true&lang=scss
315
430
 
316
- function getIndexByIdentifier(identifier) {
317
- var result = -1;
431
+ // EXTERNAL MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js
432
+ var componentNormalizer = __webpack_require__(0);
318
433
 
319
- for (var i = 0; i < stylesInDom.length; i++) {
320
- if (stylesInDom[i].identifier === identifier) {
321
- result = i;
322
- break;
323
- }
324
- }
434
+ // CONCATENATED MODULE: ./src/components/Sender/src/components/ClearButton.vue
325
435
 
326
- return result;
327
- }
328
436
 
329
- function modulesToDom(list, options) {
330
- var idCountMap = {};
331
- var identifiers = [];
332
437
 
333
- for (var i = 0; i < list.length; i++) {
334
- var item = list[i];
335
- var id = options.base ? item[0] + options.base : item[0];
336
- var count = idCountMap[id] || 0;
337
- var identifier = "".concat(id, " ").concat(count);
338
- idCountMap[id] = count + 1;
339
- var index = getIndexByIdentifier(identifier);
340
- var obj = {
341
- css: item[1],
342
- media: item[2],
343
- sourceMap: item[3]
344
- };
345
438
 
346
- if (index !== -1) {
347
- stylesInDom[index].references++;
348
- stylesInDom[index].updater(obj);
349
- } else {
350
- stylesInDom.push({
351
- identifier: identifier,
352
- updater: addStyle(obj, options),
353
- references: 1
354
- });
355
- }
356
439
 
357
- identifiers.push(identifier);
358
- }
359
440
 
360
- return identifiers;
361
- }
441
+ /* normalize component */
362
442
 
363
- function insertStyleElement(options) {
364
- var style = document.createElement('style');
365
- var attributes = options.attributes || {};
443
+ var component = Object(componentNormalizer["a" /* default */])(
444
+ components_ClearButtonvue_type_script_lang_js,
445
+ ClearButtonvue_type_template_id_74c70621_scoped_true_render,
446
+ ClearButtonvue_type_template_id_74c70621_scoped_true_staticRenderFns,
447
+ false,
448
+ null,
449
+ "74c70621",
450
+ null
451
+
452
+ )
366
453
 
367
- if (typeof attributes.nonce === 'undefined') {
368
- var nonce = true ? __webpack_require__.nc : undefined;
454
+ /* harmony default export */ var ClearButton = (component.exports);
455
+ // CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--6!./node_modules/vue-loader/lib??vue-loader-options!./src/components/Sender/src/components/LoadingButton.vue?vue&type=template&id=46826223&scoped=true
456
+ var LoadingButtonvue_type_template_id_46826223_scoped_true_render = function render() {
457
+ var _vm = this,
458
+ _c = _vm._self._c;
459
+ return _c("div", {
460
+ staticClass: "el-x-send-button"
461
+ }, [_c("el-button", {
462
+ attrs: {
463
+ circle: "",
464
+ size: "small"
465
+ },
466
+ on: {
467
+ click: function ($event) {
468
+ return _vm.$emit("cancel");
469
+ }
470
+ }
471
+ }, [_c("loading", {
472
+ staticClass: "loading-svg"
473
+ })], 1)], 1);
474
+ };
475
+ var LoadingButtonvue_type_template_id_46826223_scoped_true_staticRenderFns = [];
476
+ LoadingButtonvue_type_template_id_46826223_scoped_true_render._withStripped = true;
369
477
 
370
- if (nonce) {
371
- attributes.nonce = nonce;
478
+ // CONCATENATED MODULE: ./src/components/Sender/src/components/LoadingButton.vue?vue&type=template&id=46826223&scoped=true
479
+
480
+ // CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--6!./node_modules/vue-loader/lib??vue-loader-options!./src/components/Sender/src/components/Loading.vue?vue&type=template&id=1f0f8c14&scoped=true
481
+ var Loadingvue_type_template_id_1f0f8c14_scoped_true_render = function render() {
482
+ var _vm = this,
483
+ _c = _vm._self._c;
484
+ return _c("svg", {
485
+ attrs: {
486
+ viewBox: "0 0 1000 1000",
487
+ xmlns: "http://www.w3.org/2000/svg",
488
+ "xmlns:xlink": "http://www.w3.org/1999/xlink"
372
489
  }
373
- }
490
+ }, [_c("title", [_vm._v("Loading")]), _vm._v(" "), _c("rect", {
491
+ attrs: {
492
+ fill: "currentColor",
493
+ height: "250",
494
+ rx: "24",
495
+ ry: "24",
496
+ width: "250",
497
+ x: "375",
498
+ y: "375"
499
+ }
500
+ }), _vm._v(" "), _c("circle", {
501
+ attrs: {
502
+ cx: "500",
503
+ cy: "500",
504
+ fill: "none",
505
+ r: "450",
506
+ stroke: "currentColor",
507
+ "stroke-width": "100",
508
+ opacity: "0.45"
509
+ }
510
+ }), _vm._v(" "), _c("circle", {
511
+ attrs: {
512
+ cx: "500",
513
+ cy: "500",
514
+ fill: "none",
515
+ r: "450",
516
+ stroke: "currentColor",
517
+ "stroke-width": "100",
518
+ "stroke-dasharray": "600 9999999"
519
+ }
520
+ }, [_c("animateTransform", {
521
+ attrs: {
522
+ attributeName: "transform",
523
+ dur: "1s",
524
+ from: "0 500 500",
525
+ repeatCount: "indefinite",
526
+ to: "360 500 500",
527
+ type: "rotate"
528
+ }
529
+ })], 1)]);
530
+ };
531
+ var Loadingvue_type_template_id_1f0f8c14_scoped_true_staticRenderFns = [];
532
+ Loadingvue_type_template_id_1f0f8c14_scoped_true_render._withStripped = true;
374
533
 
375
- Object.keys(attributes).forEach(function (key) {
376
- style.setAttribute(key, attributes[key]);
377
- });
534
+ // CONCATENATED MODULE: ./src/components/Sender/src/components/Loading.vue?vue&type=template&id=1f0f8c14&scoped=true
378
535
 
379
- if (typeof options.insert === 'function') {
380
- options.insert(style);
381
- } else {
382
- var target = getTarget(options.insert || 'head');
536
+ // CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./src/components/Sender/src/components/Loading.vue?vue&type=script&lang=js
537
+ /* harmony default export */ var Loadingvue_type_script_lang_js = ({
538
+ name: 'Loading'
539
+ });
540
+ // CONCATENATED MODULE: ./src/components/Sender/src/components/Loading.vue?vue&type=script&lang=js
541
+ /* harmony default export */ var components_Loadingvue_type_script_lang_js = (Loadingvue_type_script_lang_js);
542
+ // CONCATENATED MODULE: ./src/components/Sender/src/components/Loading.vue
383
543
 
384
- if (!target) {
385
- throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");
386
- }
387
544
 
388
- target.appendChild(style);
389
- }
390
545
 
391
- return style;
392
- }
393
546
 
394
- function removeStyleElement(style) {
395
- // istanbul ignore if
396
- if (style.parentNode === null) {
397
- return false;
398
- }
399
547
 
400
- style.parentNode.removeChild(style);
401
- }
402
- /* istanbul ignore next */
548
+ /* normalize component */
403
549
 
550
+ var Loading_component = Object(componentNormalizer["a" /* default */])(
551
+ components_Loadingvue_type_script_lang_js,
552
+ Loadingvue_type_template_id_1f0f8c14_scoped_true_render,
553
+ Loadingvue_type_template_id_1f0f8c14_scoped_true_staticRenderFns,
554
+ false,
555
+ null,
556
+ "1f0f8c14",
557
+ null
558
+
559
+ )
404
560
 
405
- var replaceText = function replaceText() {
406
- var textStore = [];
407
- return function replace(index, replacement) {
408
- textStore[index] = replacement;
409
- return textStore.filter(Boolean).join('\n');
410
- };
411
- }();
561
+ /* harmony default export */ var Loading = (Loading_component.exports);
562
+ // CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./src/components/Sender/src/components/LoadingButton.vue?vue&type=script&lang=js
412
563
 
413
- function applyToSingletonTag(style, index, remove, obj) {
414
- var css = remove ? '' : obj.media ? "@media ".concat(obj.media, " {").concat(obj.css, "}") : obj.css; // For old IE
564
+ /* harmony default export */ var LoadingButtonvue_type_script_lang_js = ({
565
+ name: 'LoadingButton',
566
+ components: {
567
+ Loading: Loading
568
+ }
569
+ });
570
+ // CONCATENATED MODULE: ./src/components/Sender/src/components/LoadingButton.vue?vue&type=script&lang=js
571
+ /* harmony default export */ var components_LoadingButtonvue_type_script_lang_js = (LoadingButtonvue_type_script_lang_js);
572
+ // EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib??vue-loader-options!./src/components/Sender/src/components/LoadingButton.vue?vue&type=style&index=0&id=46826223&prod&scoped=true&lang=scss
573
+ var LoadingButtonvue_type_style_index_0_id_46826223_prod_scoped_true_lang_scss = __webpack_require__(93);
415
574
 
416
- /* istanbul ignore if */
575
+ // CONCATENATED MODULE: ./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib??vue-loader-options!./src/components/Sender/src/components/LoadingButton.vue?vue&type=style&index=0&id=46826223&prod&scoped=true&lang=scss
417
576
 
418
- if (style.styleSheet) {
419
- style.styleSheet.cssText = replaceText(index, css);
420
- } else {
421
- var cssNode = document.createTextNode(css);
422
- var childNodes = style.childNodes;
577
+
423
578
 
424
- if (childNodes[index]) {
425
- style.removeChild(childNodes[index]);
426
- }
579
+ var LoadingButtonvue_type_style_index_0_id_46826223_prod_scoped_true_lang_scss_options = {};
427
580
 
428
- if (childNodes.length) {
429
- style.insertBefore(cssNode, childNodes[index]);
430
- } else {
431
- style.appendChild(cssNode);
432
- }
433
- }
434
- }
581
+ LoadingButtonvue_type_style_index_0_id_46826223_prod_scoped_true_lang_scss_options.insert = "head";
582
+ LoadingButtonvue_type_style_index_0_id_46826223_prod_scoped_true_lang_scss_options.singleton = false;
435
583
 
436
- function applyToTag(style, options, obj) {
437
- var css = obj.css;
438
- var media = obj.media;
439
- var sourceMap = obj.sourceMap;
584
+ var LoadingButtonvue_type_style_index_0_id_46826223_prod_scoped_true_lang_scss_update = injectStylesIntoStyleTag_default()(LoadingButtonvue_type_style_index_0_id_46826223_prod_scoped_true_lang_scss["a" /* default */], LoadingButtonvue_type_style_index_0_id_46826223_prod_scoped_true_lang_scss_options);
440
585
 
441
- if (media) {
442
- style.setAttribute('media', media);
443
- } else {
444
- style.removeAttribute('media');
445
- }
446
586
 
447
- if (sourceMap && typeof btoa !== 'undefined') {
448
- css += "\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), " */");
449
- } // For old IE
450
587
 
451
- /* istanbul ignore if */
588
+ /* harmony default export */ var components_LoadingButtonvue_type_style_index_0_id_46826223_prod_scoped_true_lang_scss = (LoadingButtonvue_type_style_index_0_id_46826223_prod_scoped_true_lang_scss["a" /* default */].locals || {});
589
+ // CONCATENATED MODULE: ./src/components/Sender/src/components/LoadingButton.vue?vue&type=style&index=0&id=46826223&prod&scoped=true&lang=scss
452
590
 
591
+ // CONCATENATED MODULE: ./src/components/Sender/src/components/LoadingButton.vue
453
592
 
454
- if (style.styleSheet) {
455
- style.styleSheet.cssText = css;
456
- } else {
457
- while (style.firstChild) {
458
- style.removeChild(style.firstChild);
459
- }
460
593
 
461
- style.appendChild(document.createTextNode(css));
462
- }
463
- }
464
594
 
465
- var singleton = null;
466
- var singletonCounter = 0;
467
595
 
468
- function addStyle(obj, options) {
469
- var style;
470
- var update;
471
- var remove;
472
596
 
473
- if (options.singleton) {
474
- var styleIndex = singletonCounter++;
475
- style = singleton || (singleton = insertStyleElement(options));
476
- update = applyToSingletonTag.bind(null, style, styleIndex, false);
477
- remove = applyToSingletonTag.bind(null, style, styleIndex, true);
478
- } else {
479
- style = insertStyleElement(options);
480
- update = applyToTag.bind(null, style, options);
481
597
 
482
- remove = function remove() {
483
- removeStyleElement(style);
484
- };
485
- }
598
+ /* normalize component */
486
599
 
487
- update(obj);
488
- return function updateStyle(newObj) {
489
- if (newObj) {
490
- if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap) {
491
- return;
492
- }
600
+ var LoadingButton_component = Object(componentNormalizer["a" /* default */])(
601
+ components_LoadingButtonvue_type_script_lang_js,
602
+ LoadingButtonvue_type_template_id_46826223_scoped_true_render,
603
+ LoadingButtonvue_type_template_id_46826223_scoped_true_staticRenderFns,
604
+ false,
605
+ null,
606
+ "46826223",
607
+ null
608
+
609
+ )
493
610
 
494
- update(obj = newObj);
495
- } else {
496
- remove();
611
+ /* harmony default export */ var LoadingButton = (LoadingButton_component.exports);
612
+ // CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--6!./node_modules/vue-loader/lib??vue-loader-options!./src/components/Sender/src/components/SendButton.vue?vue&type=template&id=671e6570&scoped=true
613
+ var SendButtonvue_type_template_id_671e6570_scoped_true_render = function render() {
614
+ var _vm = this,
615
+ _c = _vm._self._c;
616
+ return _c("div", {
617
+ staticClass: "el-x-send-button"
618
+ }, [_c("el-button", {
619
+ attrs: {
620
+ circle: "",
621
+ disabled: _vm.disabled,
622
+ size: "small"
623
+ },
624
+ on: {
625
+ click: function ($event) {
626
+ return _vm.$emit("submit");
627
+ }
497
628
  }
498
- };
499
- }
629
+ }, [_c("i", {
630
+ staticClass: "el-icon-top"
631
+ })])], 1);
632
+ };
633
+ var SendButtonvue_type_template_id_671e6570_scoped_true_staticRenderFns = [];
634
+ SendButtonvue_type_template_id_671e6570_scoped_true_render._withStripped = true;
500
635
 
501
- module.exports = function (list, options) {
502
- options = options || {}; // Force single-tag solution on IE6-9, which has a hard limit on the # of <style>
503
- // tags it will allow on a page
636
+ // CONCATENATED MODULE: ./src/components/Sender/src/components/SendButton.vue?vue&type=template&id=671e6570&scoped=true
504
637
 
505
- if (!options.singleton && typeof options.singleton !== 'boolean') {
506
- options.singleton = isOldIE();
638
+ // CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./src/components/Sender/src/components/SendButton.vue?vue&type=script&lang=js
639
+ /* harmony default export */ var SendButtonvue_type_script_lang_js = ({
640
+ name: 'SendButton',
641
+ props: {
642
+ disabled: {
643
+ type: Boolean,
644
+ default: false
645
+ }
507
646
  }
647
+ });
648
+ // CONCATENATED MODULE: ./src/components/Sender/src/components/SendButton.vue?vue&type=script&lang=js
649
+ /* harmony default export */ var components_SendButtonvue_type_script_lang_js = (SendButtonvue_type_script_lang_js);
650
+ // CONCATENATED MODULE: ./src/components/Sender/src/components/SendButton.vue
508
651
 
509
- list = list || [];
510
- var lastIdentifiers = modulesToDom(list, options);
511
- return function update(newList) {
512
- newList = newList || [];
513
-
514
- if (Object.prototype.toString.call(newList) !== '[object Array]') {
515
- return;
516
- }
517
652
 
518
- for (var i = 0; i < lastIdentifiers.length; i++) {
519
- var identifier = lastIdentifiers[i];
520
- var index = getIndexByIdentifier(identifier);
521
- stylesInDom[index].references--;
522
- }
523
653
 
524
- var newLastIdentifiers = modulesToDom(newList, options);
525
654
 
526
- for (var _i = 0; _i < lastIdentifiers.length; _i++) {
527
- var _identifier = lastIdentifiers[_i];
528
655
 
529
- var _index = getIndexByIdentifier(_identifier);
656
+ /* normalize component */
530
657
 
531
- if (stylesInDom[_index].references === 0) {
532
- stylesInDom[_index].updater();
658
+ var SendButton_component = Object(componentNormalizer["a" /* default */])(
659
+ components_SendButtonvue_type_script_lang_js,
660
+ SendButtonvue_type_template_id_671e6570_scoped_true_render,
661
+ SendButtonvue_type_template_id_671e6570_scoped_true_staticRenderFns,
662
+ false,
663
+ null,
664
+ "671e6570",
665
+ null
666
+
667
+ )
533
668
 
534
- stylesInDom.splice(_index, 1);
535
- }
669
+ /* harmony default export */ var SendButton = (SendButton_component.exports);
670
+ // CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--6!./node_modules/vue-loader/lib??vue-loader-options!./src/components/Sender/src/components/SpeechButton.vue?vue&type=template&id=7e5519b2&scoped=true
671
+ var SpeechButtonvue_type_template_id_7e5519b2_scoped_true_render = function render() {
672
+ var _vm = this,
673
+ _c = _vm._self._c;
674
+ return _c("div", {
675
+ staticClass: "el-x-send-button"
676
+ }, [_c("el-button", {
677
+ attrs: {
678
+ circle: "",
679
+ size: "small"
680
+ },
681
+ on: {
682
+ click: _vm.onClick
536
683
  }
537
-
538
- lastIdentifiers = newLastIdentifiers;
539
- };
684
+ }, [_c("i", {
685
+ staticClass: "el-icon-microphone"
686
+ })])], 1);
540
687
  };
688
+ var SpeechButtonvue_type_template_id_7e5519b2_scoped_true_staticRenderFns = [];
689
+ SpeechButtonvue_type_template_id_7e5519b2_scoped_true_render._withStripped = true;
541
690
 
542
- /***/ }),
543
-
544
- /***/ 89:
545
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
546
-
547
- "use strict";
548
- /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2);
549
- /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__);
550
- // Imports
551
-
552
- var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default()(function(i){return i[1]});
553
- // Module
554
- ___CSS_LOADER_EXPORT___.push([module.i, ".el-x-send-button .el-button .el-icon-brush[data-v-74c70621]{transform:rotate(180deg)}", ""]);
555
- // Exports
556
- /* harmony default export */ __webpack_exports__["a"] = (___CSS_LOADER_EXPORT___);
557
-
558
-
559
- /***/ }),
560
-
561
- /***/ 90:
562
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
563
-
564
- "use strict";
565
- /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2);
566
- /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__);
567
- // Imports
568
-
569
- var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default()(function(i){return i[1]});
570
- // Module
571
- ___CSS_LOADER_EXPORT___.push([module.i, ".el-x-send-button[data-v-4d4a8cac]{height:32px}.el-x-send-button .el-button[data-v-4d4a8cac]{padding:0;width:32px;height:32px}.el-x-send-button .loading-svg[data-v-4d4a8cac]{color:#409eff;width:100%}", ""]);
572
- // Exports
573
- /* harmony default export */ __webpack_exports__["a"] = (___CSS_LOADER_EXPORT___);
574
-
575
-
576
- /***/ }),
577
-
578
- /***/ 91:
579
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
580
-
581
- "use strict";
582
- /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2);
583
- /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__);
584
- // Imports
585
-
586
- var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default()(function(i){return i[1]});
587
- // Module
588
- ___CSS_LOADER_EXPORT___.push([module.i, ".el-x-send-button .el-button[data-v-1d4ab0c1]{padding:0;width:32px;height:32px}.el-x-send-button .loading-svg[data-v-1d4ab0c1]{color:#409eff;width:16px}", ""]);
589
- // Exports
590
- /* harmony default export */ __webpack_exports__["a"] = (___CSS_LOADER_EXPORT___);
591
-
592
-
593
- /***/ }),
691
+ // CONCATENATED MODULE: ./src/components/Sender/src/components/SpeechButton.vue?vue&type=template&id=7e5519b2&scoped=true
594
692
 
595
- /***/ 92:
596
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
693
+ // CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./src/components/Sender/src/components/SpeechButton.vue?vue&type=script&lang=js
694
+ /* harmony default export */ var SpeechButtonvue_type_script_lang_js = ({
695
+ name: 'SpeechButton',
696
+ methods: {
697
+ onClick() {
698
+ this.$emit('click');
699
+ }
700
+ }
701
+ });
702
+ // CONCATENATED MODULE: ./src/components/Sender/src/components/SpeechButton.vue?vue&type=script&lang=js
703
+ /* harmony default export */ var components_SpeechButtonvue_type_script_lang_js = (SpeechButtonvue_type_script_lang_js);
704
+ // CONCATENATED MODULE: ./src/components/Sender/src/components/SpeechButton.vue
597
705
 
598
- "use strict";
599
- /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2);
600
- /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__);
601
- // Imports
602
706
 
603
- var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default()(function(i){return i[1]});
604
- // Module
605
- ___CSS_LOADER_EXPORT___.push([module.i, "[data-v-32628228]:root{--color-primary: #409EFF;--color-success: #67C23A;--color-warning: #E6A23C;--color-danger: #F56C6C;--color-info: #909399}[data-v-32628228]:root{--el-x-sender-trigger-popover-width: fit-content;--el-x-sender-trigger-popover-left: 0px}.el-x-sender[data-v-32628228]{width:100%;display:flex;flex-direction:column;position:relative;box-sizing:border-box;box-shadow:0 1px 2px 0 rgba(0,0,0,.03),0 1px 6px -1px rgba(0,0,0,.02),0 2px 4px 0 rgba(0,0,0,.02);transition:background .3s;border-radius:calc(4px*2);border-color:#dcdfe6;border-width:0;border-style:solid;transition:width 300ms}.el-x-sender[data-v-32628228]:after{content:\"\";position:absolute;inset:0;pointer-events:none;transition:border-color .3s;border-radius:inherit;border-style:inherit;border-color:inherit;border-width:1px}.el-x-sender[data-v-32628228]:focus-within{box-shadow:0 2px 4px rgba(0,0,0,.12),0 0 6px rgba(0,0,0,.04);border-color:#409eff}.el-x-sender[data-v-32628228]:focus-within::after{border-width:2px}.el-x-sender .el-x-sender-header-wrap[data-v-32628228]{display:flex;flex-direction:column;gap:8px;width:100%;margin:0;padding:0}.el-x-sender .slide-enter-active[data-v-32628228],.el-x-sender .slide-leave-active[data-v-32628228]{transition:height 300ms,opacity 300ms,border 300ms;overflow:hidden}.el-x-sender .slide-enter[data-v-32628228],.el-x-sender .slide-leave-to[data-v-32628228]{height:0;opacity:0}.el-x-sender .el-x-sender-header[data-v-32628228]{border-bottom-width:1px;border-bottom-style:solid;border-bottom-color:#dcdfe6}.el-x-sender .el-x-sender-content[data-v-32628228]{display:flex;gap:8px;width:100%;padding-block:12px;padding-inline-start:16px;padding-inline-end:12px;box-sizing:border-box;align-items:flex-end}.el-x-sender .el-x-sender-content .el-x-sender-prefix[data-v-32628228]{flex:none}.el-x-sender .el-x-sender-content .el-x-sender-input[data-v-32628228]{height:100%;display:flex;align-items:center;align-self:center}.el-x-sender .el-x-sender-content .el-x-sender-input[data-v-32628228] .el-textarea__inner{padding:0;margin:0;color:#303133;font-size:14px;line-height:24px;list-style:none;position:relative;display:inline-block;box-sizing:border-box;width:100%;min-width:0;max-width:100%;height:auto;min-height:auto !important;border-radius:0;border:none;flex:auto;align-self:center;vertical-align:bottom;resize:none;background-color:rgba(0,0,0,0);transition:all .3s,height 0s;box-shadow:none !important}.el-x-sender .el-x-sender-content .el-x-sender-action-list-presets[data-v-32628228]{display:flex;gap:8px;flex-direction:row-reverse}.el-x-sender .content-variant-updown[data-v-32628228]{display:flex;flex-direction:column;align-items:initial}.el-x-sender .content-variant-updown .el-x-sender-updown-wrap[data-v-32628228]{display:flex;justify-content:space-between;gap:8px}.el-x-sender .content-variant-updown .el-x-sender-updown-wrap .el-x-sender-prefix[data-v-32628228]{flex:initial}.el-x-sender .content-variant-updown .el-x-sender-updown-wrap .el-x-sender-action-list[data-v-32628228]{margin-left:auto}.el-x-sender .el-x-sender-footer[data-v-32628228]{border-top-width:1px;border-top-style:solid;border-top-color:#dcdfe6}.el-x-sender-disabled[data-v-32628228]{background-color:#f5f7fa;pointer-events:none}.el-x-sender-trigger-popover[data-v-32628228]{width:fit-content !important;margin-left:0px !important;max-width:calc(100% - 54px) !important;width:var(--el-x-sender-trigger-popover-width) !important;margin-left:var(--el-x-sender-trigger-popover-left) !important}", ""]);
606
- // Exports
607
- /* harmony default export */ __webpack_exports__["a"] = (___CSS_LOADER_EXPORT___);
608
707
 
609
708
 
610
- /***/ }),
611
709
 
612
- /***/ 97:
613
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
710
+ /* normalize component */
614
711
 
615
- "use strict";
616
- // ESM COMPAT FLAG
617
- __webpack_require__.r(__webpack_exports__);
712
+ var SpeechButton_component = Object(componentNormalizer["a" /* default */])(
713
+ components_SpeechButtonvue_type_script_lang_js,
714
+ SpeechButtonvue_type_template_id_7e5519b2_scoped_true_render,
715
+ SpeechButtonvue_type_template_id_7e5519b2_scoped_true_staticRenderFns,
716
+ false,
717
+ null,
718
+ "7e5519b2",
719
+ null
720
+
721
+ )
618
722
 
619
- // CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--6!./node_modules/vue-loader/lib??vue-loader-options!./src/components/Sender/src/main.vue?vue&type=template&id=32628228&scoped=true
620
- var render = function render() {
723
+ /* harmony default export */ var SpeechButton = (SpeechButton_component.exports);
724
+ // CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--6!./node_modules/vue-loader/lib??vue-loader-options!./src/components/Sender/src/components/SpeechLoadingButton.vue?vue&type=template&id=26ea2934&scoped=true
725
+ var SpeechLoadingButtonvue_type_template_id_26ea2934_scoped_true_render = function render() {
621
726
  var _vm = this,
622
727
  _c = _vm._self._c;
623
728
  return _c("div", {
624
- staticClass: "el-x-sender-wrap",
625
- style: {
626
- cursor: _vm.disabled ? "not-allowed" : "default",
627
- "--el-x-sender-trigger-popover-width": _vm.triggerPopoverWidth,
628
- "--el-x-sender-trigger-popover-left": _vm.triggerPopoverLeft
629
- }
630
- }, [_c("div", {
631
- ref: "senderRef",
632
- staticClass: "el-x-sender",
633
- class: {
634
- "el-x-sender-disabled": _vm.disabled
635
- },
636
- style: {
637
- "--el-x-sender-box-shadow-tertiary": "0 1px 2px 0 rgba(0, 0, 0, 0.03), 0 1px 6px -1px rgba(0, 0, 0, 0.02), 0 2px 4px 0 rgba(0, 0, 0, 0.02)",
638
- "--el-x-sender-input-font-size": "14px",
639
- "--el-x-sender-header-animation-duration": `${_vm.headerAnimationTimer}ms`
640
- }
641
- }, [_c("transition", {
642
- attrs: {
643
- name: "slide"
644
- }
645
- }, [_vm.visiableHeader ? _c("div", {
646
- staticClass: "el-x-sender-header-wrap"
647
- }, [_vm.$slots.header ? _c("div", {
648
- staticClass: "el-x-sender-header"
649
- }, [_vm._t("header")], 2) : _vm._e()]) : _vm._e()]), _vm._v(" "), _c("div", {
650
- staticClass: "el-x-sender-content",
651
- class: {
652
- "content-variant-updown": _vm.variant === "updown"
729
+ staticClass: "el-x-send-button"
730
+ }, [_c("el-button", {
731
+ attrs: {
732
+ circle: "",
733
+ size: "small"
653
734
  },
654
735
  on: {
655
- mousedown: _vm.onContentMouseDown
736
+ click: _vm.onClick
656
737
  }
657
- }, [_vm.$slots.prefix && _vm.variant === "default" ? _c("div", {
658
- staticClass: "el-x-sender-prefix"
659
- }, [_vm._t("prefix")], 2) : _vm._e(), _vm._v(" "), _c("el-input", {
660
- ref: "inputRef",
661
- staticClass: "el-x-sender-input",
738
+ }, [_c("speech-loading", {
739
+ staticClass: "loading-svg"
740
+ })], 1)], 1);
741
+ };
742
+ var SpeechLoadingButtonvue_type_template_id_26ea2934_scoped_true_staticRenderFns = [];
743
+ SpeechLoadingButtonvue_type_template_id_26ea2934_scoped_true_render._withStripped = true;
744
+
745
+ // CONCATENATED MODULE: ./src/components/Sender/src/components/SpeechLoadingButton.vue?vue&type=template&id=26ea2934&scoped=true
746
+
747
+ // CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--6!./node_modules/vue-loader/lib??vue-loader-options!./src/components/Sender/src/components/SpeechLoading.vue?vue&type=template&id=5cab3032&scoped=true
748
+ var SpeechLoadingvue_type_template_id_5cab3032_scoped_true_render = function render() {
749
+ var _vm = this,
750
+ _c = _vm._self._c;
751
+ return _c("svg", {
752
+ class: _vm.className,
662
753
  attrs: {
663
- rows: 1,
664
- autosize: _vm.computedAutoSize,
665
- type: "textarea",
666
- "validate-event": false,
667
- placeholder: _vm.placeholder,
668
- readonly: _vm.readOnly || _vm.disabled,
669
- disabled: _vm.disabled
670
- },
671
- on: {
672
- compositionstart: _vm.handleCompositionStart,
673
- compositionend: _vm.handleCompositionEnd
674
- },
675
- nativeOn: {
676
- keydown: function ($event) {
677
- return _vm.handleKeyDown.apply(null, arguments);
678
- }
679
- },
680
- model: {
681
- value: _vm.internalValue,
682
- callback: function ($$v) {
683
- _vm.internalValue = $$v;
684
- },
685
- expression: "internalValue"
754
+ color: "currentColor",
755
+ viewBox: `0 0 ${_vm.SIZE} ${_vm.SIZE}`,
756
+ xmlns: "http://www.w3.org/2000/svg",
757
+ "xmlns:xlink": "http://www.w3.org/1999/xlink"
686
758
  }
687
- }), _vm._v(" "), _vm.variant === "default" ? _c("div", {
688
- staticClass: "el-x-sender-action-list"
689
- }, [_vm._t("action-list", function () {
690
- return [_c("div", {
691
- staticClass: "el-x-sender-action-list-presets"
692
- }, [!_vm.loading ? _c("send-button", {
759
+ }, [_c("title", [_vm._v("Speech Recording")]), _vm._v(" "), _vm._l(_vm.rects, function (item, index) {
760
+ return _c("rect", {
761
+ key: index,
693
762
  attrs: {
694
- disabled: _vm.isSubmitDisabled
695
- },
696
- on: {
697
- submit: _vm.submit
698
- }
699
- }) : _vm._e(), _vm._v(" "), _vm.loading ? _c("loading-button", {
700
- on: {
701
- cancel: _vm.cancel
702
- }
703
- }) : _vm._e(), _vm._v(" "), !_vm.speechLoading && _vm.allowSpeech ? _c("speech-button", {
704
- on: {
705
- click: _vm.startRecognition
706
- }
707
- }) : _vm._e(), _vm._v(" "), _vm.speechLoading && _vm.allowSpeech ? _c("speech-loading-button", {
708
- on: {
709
- click: _vm.stopRecognition
710
- }
711
- }) : _vm._e(), _vm._v(" "), _vm.clearable ? _c("clear-button", {
712
- on: {
713
- clear: _vm.clear
763
+ fill: "currentColor",
764
+ rx: _vm.RECT_RADIUS,
765
+ ry: _vm.RECT_RADIUS,
766
+ height: _vm.RECT_HEIGHT_MIN,
767
+ width: _vm.RECT_WIDTH,
768
+ x: item.x,
769
+ y: item.yMin
714
770
  }
715
- }) : _vm._e()], 1)];
716
- })], 2) : _vm._e(), _vm._v(" "), _vm.variant === "updown" && _vm.showUpdown ? _c("div", {
717
- staticClass: "el-x-sender-updown-wrap"
718
- }, [_vm.$slots.prefix ? _c("div", {
719
- staticClass: "el-x-sender-prefix"
720
- }, [_vm._t("prefix")], 2) : _vm._e(), _vm._v(" "), _c("div", {
721
- staticClass: "el-x-sender-action-list"
722
- }, [_vm._t("action-list", function () {
723
- return [_c("div", {
724
- staticClass: "el-x-sender-action-list-presets"
725
- }, [!_vm.loading ? _c("send-button", {
771
+ }, [_c("animate", {
726
772
  attrs: {
727
- disabled: _vm.isSubmitDisabled
728
- },
729
- on: {
730
- submit: _vm.submit
731
- }
732
- }) : _vm._e(), _vm._v(" "), _vm.loading ? _c("loading-button", {
733
- on: {
734
- cancel: _vm.cancel
735
- }
736
- }) : _vm._e(), _vm._v(" "), !_vm.speechLoading && _vm.allowSpeech ? _c("speech-button", {
737
- on: {
738
- click: _vm.startRecognition
739
- }
740
- }) : _vm._e(), _vm._v(" "), _vm.speechLoading && _vm.allowSpeech ? _c("speech-loading-button", {
741
- on: {
742
- click: _vm.stopRecognition
773
+ attributeName: "height",
774
+ values: `${_vm.RECT_HEIGHT_MIN}; ${_vm.RECT_HEIGHT_MAX}; ${_vm.RECT_HEIGHT_MIN}`,
775
+ keyTimes: "0; 0.5; 1",
776
+ dur: `${_vm.DURATION}s`,
777
+ begin: `${_vm.DURATION / _vm.COUNT * index}s`,
778
+ repeatCount: "indefinite"
743
779
  }
744
- }) : _vm._e(), _vm._v(" "), _vm.clearable ? _c("clear-button", {
745
- on: {
746
- clear: _vm.clear
780
+ }), _vm._v(" "), _c("animate", {
781
+ attrs: {
782
+ attributeName: "y",
783
+ values: `${item.yMin}; ${item.yMax}; ${item.yMin}`,
784
+ keyTimes: "0; 0.5; 1",
785
+ dur: `${_vm.DURATION}s`,
786
+ begin: `${_vm.DURATION / _vm.COUNT * index}s`,
787
+ repeatCount: "indefinite"
747
788
  }
748
- }) : _vm._e()], 1)];
749
- })], 2)]) : _vm._e()], 1), _vm._v(" "), _c("transition", {
750
- attrs: {
751
- name: "slide"
752
- }
753
- }, [_vm.$slots.footer ? _c("div", {
754
- staticClass: "el-x-sender-footer"
755
- }, [_vm._t("footer")], 2) : _vm._e()]), _vm._v(" "), _c("el-popover", {
756
- ref: "popoverRef",
757
- attrs: {
758
- disabled: _vm.disabled,
759
- "visible-arrow": false,
760
- placement: _vm.triggerPopoverPlacement,
761
- offset: _vm.triggerPopoverOffset,
762
- "popper-class": "el-x-sender-trigger-popover",
763
- trigger: "manual"
764
- },
765
- on: {
766
- show: _vm.onPopoverShow
767
- },
768
- model: {
769
- value: _vm.popoverVisible,
770
- callback: function ($$v) {
771
- _vm.popoverVisible = $$v;
772
- },
773
- expression: "popoverVisible"
774
- }
775
- }, [_c("template", {
776
- slot: "default"
777
- }, [_vm._t("trigger-popover", function () {
778
- return [_vm._v("\n 当前触发的字符为:" + _vm._s(`${_vm.triggerString}`) + " 在这里定义的内容,但注意这里的回车事件将会被\n 输入框 覆盖\n ")];
779
- }, {
780
- triggerString: _vm.triggerString,
781
- readonly: _vm.readOnly
782
- })], 2)], 2)], 1)]);
789
+ })]);
790
+ })], 2);
783
791
  };
784
- var staticRenderFns = [];
785
- render._withStripped = true;
792
+ var SpeechLoadingvue_type_template_id_5cab3032_scoped_true_staticRenderFns = [];
793
+ SpeechLoadingvue_type_template_id_5cab3032_scoped_true_render._withStripped = true;
786
794
 
787
- // CONCATENATED MODULE: ./src/components/Sender/src/main.vue?vue&type=template&id=32628228&scoped=true
795
+ // CONCATENATED MODULE: ./src/components/Sender/src/components/SpeechLoading.vue?vue&type=template&id=5cab3032&scoped=true
788
796
 
789
- // CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--6!./node_modules/vue-loader/lib??vue-loader-options!./src/components/Sender/src/components/ClearButton.vue?vue&type=template&id=74c70621&scoped=true
790
- var ClearButtonvue_type_template_id_74c70621_scoped_true_render = function render() {
791
- var _vm = this,
792
- _c = _vm._self._c;
793
- return _c("div", {
794
- staticClass: "el-x-send-button"
795
- }, [_c("el-button", {
796
- attrs: {
797
- circle: "",
798
- size: "small"
799
- },
800
- on: {
801
- click: function ($event) {
802
- return _vm.$emit("clear");
803
- }
797
+ // CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./src/components/Sender/src/components/SpeechLoading.vue?vue&type=script&lang=js
798
+ /* harmony default export */ var SpeechLoadingvue_type_script_lang_js = ({
799
+ name: 'SpeechLoading',
800
+ props: {
801
+ className: {
802
+ type: String,
803
+ default: ''
804
804
  }
805
- }, [_c("i", {
806
- staticClass: "el-icon-brush"
807
- })])], 1);
808
- };
809
- var ClearButtonvue_type_template_id_74c70621_scoped_true_staticRenderFns = [];
810
- ClearButtonvue_type_template_id_74c70621_scoped_true_render._withStripped = true;
805
+ },
806
+ data() {
807
+ return {
808
+ // 定义常量
809
+ SIZE: 1000,
810
+ COUNT: 4,
811
+ RECT_WIDTH: 140,
812
+ RECT_RADIUS: 70,
813
+ // RECT_WIDTH / 2
814
+ RECT_HEIGHT_MIN: 250,
815
+ RECT_HEIGHT_MAX: 500,
816
+ DURATION: 0.8
817
+ };
818
+ },
819
+ computed: {
820
+ // 计算矩形的位置和高度范围
821
+ rects() {
822
+ const dest = (this.SIZE - this.RECT_WIDTH * this.COUNT) / (this.COUNT - 1);
823
+ return Array.from({
824
+ length: this.COUNT
825
+ }).map((_, index) => {
826
+ const x = index * (dest + this.RECT_WIDTH);
827
+ const yMin = this.SIZE / 2 - this.RECT_HEIGHT_MIN / 2;
828
+ const yMax = this.SIZE / 2 - this.RECT_HEIGHT_MAX / 2;
829
+ return {
830
+ x,
831
+ yMin,
832
+ yMax
833
+ };
834
+ });
835
+ }
836
+ }
837
+ });
838
+ // CONCATENATED MODULE: ./src/components/Sender/src/components/SpeechLoading.vue?vue&type=script&lang=js
839
+ /* harmony default export */ var components_SpeechLoadingvue_type_script_lang_js = (SpeechLoadingvue_type_script_lang_js);
840
+ // CONCATENATED MODULE: ./src/components/Sender/src/components/SpeechLoading.vue
811
841
 
812
- // CONCATENATED MODULE: ./src/components/Sender/src/components/ClearButton.vue?vue&type=template&id=74c70621&scoped=true
813
842
 
814
- // CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./src/components/Sender/src/components/ClearButton.vue?vue&type=script&lang=js
815
- /* harmony default export */ var ClearButtonvue_type_script_lang_js = ({
816
- name: 'ClearButton'
843
+
844
+
845
+
846
+ /* normalize component */
847
+
848
+ var SpeechLoading_component = Object(componentNormalizer["a" /* default */])(
849
+ components_SpeechLoadingvue_type_script_lang_js,
850
+ SpeechLoadingvue_type_template_id_5cab3032_scoped_true_render,
851
+ SpeechLoadingvue_type_template_id_5cab3032_scoped_true_staticRenderFns,
852
+ false,
853
+ null,
854
+ "5cab3032",
855
+ null
856
+
857
+ )
858
+
859
+ /* harmony default export */ var SpeechLoading = (SpeechLoading_component.exports);
860
+ // CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./src/components/Sender/src/components/SpeechLoadingButton.vue?vue&type=script&lang=js
861
+
862
+ /* harmony default export */ var SpeechLoadingButtonvue_type_script_lang_js = ({
863
+ name: 'SpeechLoadingButton',
864
+ components: {
865
+ SpeechLoading: SpeechLoading
866
+ },
867
+ methods: {
868
+ onClick() {
869
+ this.$emit('click');
870
+ }
871
+ }
872
+ });
873
+ // CONCATENATED MODULE: ./src/components/Sender/src/components/SpeechLoadingButton.vue?vue&type=script&lang=js
874
+ /* harmony default export */ var components_SpeechLoadingButtonvue_type_script_lang_js = (SpeechLoadingButtonvue_type_script_lang_js);
875
+ // EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib??vue-loader-options!./src/components/Sender/src/components/SpeechLoadingButton.vue?vue&type=style&index=0&id=26ea2934&prod&scoped=true&lang=scss
876
+ var SpeechLoadingButtonvue_type_style_index_0_id_26ea2934_prod_scoped_true_lang_scss = __webpack_require__(94);
877
+
878
+ // CONCATENATED MODULE: ./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib??vue-loader-options!./src/components/Sender/src/components/SpeechLoadingButton.vue?vue&type=style&index=0&id=26ea2934&prod&scoped=true&lang=scss
879
+
880
+
881
+
882
+ var SpeechLoadingButtonvue_type_style_index_0_id_26ea2934_prod_scoped_true_lang_scss_options = {};
883
+
884
+ SpeechLoadingButtonvue_type_style_index_0_id_26ea2934_prod_scoped_true_lang_scss_options.insert = "head";
885
+ SpeechLoadingButtonvue_type_style_index_0_id_26ea2934_prod_scoped_true_lang_scss_options.singleton = false;
886
+
887
+ var SpeechLoadingButtonvue_type_style_index_0_id_26ea2934_prod_scoped_true_lang_scss_update = injectStylesIntoStyleTag_default()(SpeechLoadingButtonvue_type_style_index_0_id_26ea2934_prod_scoped_true_lang_scss["a" /* default */], SpeechLoadingButtonvue_type_style_index_0_id_26ea2934_prod_scoped_true_lang_scss_options);
888
+
889
+
890
+
891
+ /* harmony default export */ var components_SpeechLoadingButtonvue_type_style_index_0_id_26ea2934_prod_scoped_true_lang_scss = (SpeechLoadingButtonvue_type_style_index_0_id_26ea2934_prod_scoped_true_lang_scss["a" /* default */].locals || {});
892
+ // CONCATENATED MODULE: ./src/components/Sender/src/components/SpeechLoadingButton.vue?vue&type=style&index=0&id=26ea2934&prod&scoped=true&lang=scss
893
+
894
+ // CONCATENATED MODULE: ./src/components/Sender/src/components/SpeechLoadingButton.vue
895
+
896
+
897
+
898
+
899
+
900
+
901
+ /* normalize component */
902
+
903
+ var SpeechLoadingButton_component = Object(componentNormalizer["a" /* default */])(
904
+ components_SpeechLoadingButtonvue_type_script_lang_js,
905
+ SpeechLoadingButtonvue_type_template_id_26ea2934_scoped_true_render,
906
+ SpeechLoadingButtonvue_type_template_id_26ea2934_scoped_true_staticRenderFns,
907
+ false,
908
+ null,
909
+ "26ea2934",
910
+ null
911
+
912
+ )
913
+
914
+ /* harmony default export */ var SpeechLoadingButton = (SpeechLoadingButton_component.exports);
915
+ // CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./src/components/Sender/src/main.vue?vue&type=script&lang=js
916
+
917
+
918
+
919
+
920
+
921
+
922
+ /* harmony default export */ var mainvue_type_script_lang_js = ({
923
+ name: 'ElXSender',
924
+ mixins: [mixin["a" /* default */]],
925
+ components: {
926
+ ClearButton: ClearButton,
927
+ LoadingButton: LoadingButton,
928
+ SendButton: SendButton,
929
+ SpeechButton: SpeechButton,
930
+ SpeechLoadingButton: SpeechLoadingButton
931
+ },
932
+ props: {
933
+ value: {
934
+ type: String,
935
+ default: ''
936
+ },
937
+ placeholder: {
938
+ type: String,
939
+ default: ''
940
+ },
941
+ autoSize: {
942
+ type: Object,
943
+ default: () => ({
944
+ minRows: 1,
945
+ maxRows: 6
946
+ })
947
+ },
948
+ readOnly: Boolean,
949
+ disabled: Boolean,
950
+ loading: Boolean,
951
+ clearable: Boolean,
952
+ allowSpeech: Boolean,
953
+ submitType: {
954
+ type: String,
955
+ default: 'enter',
956
+ validator: value => ['enter', 'shiftEnter'].includes(value)
957
+ },
958
+ headerAnimationTimer: {
959
+ type: Number,
960
+ default: 300
961
+ },
962
+ inputWidth: {
963
+ type: String,
964
+ default: '100%'
965
+ },
966
+ // 变体属性
967
+ variant: {
968
+ type: String,
969
+ default: 'default',
970
+ validator: value => ['default', 'updown'].includes(value)
971
+ },
972
+ showUpdown: {
973
+ type: Boolean,
974
+ default: true
975
+ },
976
+ submitBtnDisabled: Boolean,
977
+ inputStyle: {
978
+ type: Object,
979
+ default: () => ({})
980
+ },
981
+ // 新增 el-popover 样式透传
982
+ triggerStrings: {
983
+ type: Array,
984
+ default: () => []
985
+ },
986
+ triggerPopoverVisible: {
987
+ type: Boolean,
988
+ default: false
989
+ },
990
+ triggerPopoverWidth: {
991
+ type: String,
992
+ default: 'fit-content'
993
+ },
994
+ triggerPopoverLeft: {
995
+ type: String,
996
+ default: '0px'
997
+ },
998
+ triggerPopoverOffset: {
999
+ type: Number,
1000
+ default: 0
1001
+ },
1002
+ triggerPopoverPlacement: {
1003
+ type: String,
1004
+ default: 'top-start',
1005
+ validator: value => ['top', 'top-start', 'top-end', 'bottom', 'bottom-start', 'bottom-end', 'left', 'left-start', 'left-end', 'right', 'right-start', 'right-end'].includes(value)
1006
+ }
1007
+ },
1008
+ data() {
1009
+ return {
1010
+ senderRef: null,
1011
+ inputRef: null,
1012
+ popoverVisible: this.triggerPopoverVisible,
1013
+ internalValue: this.value,
1014
+ isComposing: false,
1015
+ popoverRef: null,
1016
+ triggerString: '',
1017
+ visiableHeader: false,
1018
+ recognition: null,
1019
+ speechLoading: false,
1020
+ triggerDebounce: false
1021
+ };
1022
+ },
1023
+ computed: {
1024
+ // 判断是否存在 recordingChange 监听器
1025
+ hasOnRecordingChangeListener() {
1026
+ return !!(this.$listeners && this.$listeners.recordingChange);
1027
+ },
1028
+ // 判断是否存在 trigger 监听器
1029
+ hasOnTriggerListener() {
1030
+ return !!(this.$listeners && this.$listeners.trigger);
1031
+ },
1032
+ // 计算提交按钮禁用状态
1033
+ isSubmitDisabled() {
1034
+ // 用户显式设置了 submitBtnDisabled 时优先使用
1035
+ if (typeof this.submitBtnDisabled === 'boolean') {
1036
+ return this.submitBtnDisabled;
1037
+ }
1038
+ // 否则保持默认逻辑:无内容时禁用
1039
+ return !this.internalValue;
1040
+ },
1041
+ // 根据字体大小动态计算 autoSize
1042
+ computedAutoSize() {
1043
+ // 如果用户提供了autoSize,则优先使用
1044
+ if (this.autoSize) return this.autoSize;
1045
+
1046
+ // 否则返回默认值
1047
+ return {
1048
+ minRows: 1,
1049
+ maxRows: 6
1050
+ };
1051
+ },
1052
+ // 计算 placeholder
1053
+ computedPlaceholder() {
1054
+ return this.placeholder || this.elXt('el_x.sender.placeholder');
1055
+ }
1056
+ },
1057
+ watch: {
1058
+ value(val) {
1059
+ this.internalValue = val;
1060
+ },
1061
+ // 监听样式变化
1062
+ inputStyle: {
1063
+ handler() {
1064
+ this.$nextTick(() => {
1065
+ this.applyInputStyles();
1066
+ });
1067
+ },
1068
+ deep: true
1069
+ },
1070
+ inputWidth() {
1071
+ this.$nextTick(() => {
1072
+ this.applyInputStyles();
1073
+ });
1074
+ },
1075
+ // 监听外部传入的 triggerPopoverVisible 变化
1076
+ triggerPopoverVisible(val) {
1077
+ // 仅在值不同时更新,避免循环触发
1078
+ if (this.popoverVisible !== val) {
1079
+ this.popoverVisible = val;
1080
+ }
1081
+ },
1082
+ // 监听内部 popoverVisible 变化,向外同步
1083
+ popoverVisible(val) {
1084
+ if (val !== this.triggerPopoverVisible) {
1085
+ this.$emit('update:triggerPopoverVisible', val);
1086
+ }
1087
+
1088
+ // 新增:当弹窗关闭时,设置短时间内的防抖状态
1089
+ if (val === false) {
1090
+ this.triggerDebounce = true;
1091
+ setTimeout(() => {
1092
+ this.triggerDebounce = false;
1093
+ }, 300); // 300ms 防抖时间,防止频繁触发
1094
+ }
1095
+ },
1096
+ internalValue(newVal, oldVal) {
1097
+ this.$emit('input', newVal);
1098
+
1099
+ // 当内容变化时,修复高度问题
1100
+
1101
+ if (this.isComposing) return;
1102
+ // 新增:如果处于防抖状态,则不进行触发检测
1103
+ if (this.triggerDebounce) return;
1104
+
1105
+ // 触发逻辑:检测输入内容中是否出现了触发字符
1106
+ const triggerStrings = this.triggerStrings || []; // 如果为 undefined,就使用空数组
1107
+
1108
+ // 新的检测逻辑:检查是否在当前光标位置前有触发字符
1109
+ if (this.inputRef && triggerStrings.length > 0) {
1110
+ const textArea = this.inputRef.$el.querySelector('textarea');
1111
+ if (textArea) {
1112
+ const cursorPosition = textArea.selectionStart;
1113
+ // 检查光标前是否有新增的触发字符
1114
+ if (cursorPosition > 0 && newVal.length > oldVal.length) {
1115
+ const lastChar = newVal.charAt(cursorPosition - 1);
1116
+ if (triggerStrings.includes(lastChar)) {
1117
+ this.triggerString = lastChar;
1118
+ if (this.hasOnTriggerListener) {
1119
+ this.$emit('trigger', {
1120
+ oldValue: oldVal,
1121
+ newValue: newVal,
1122
+ triggerString: lastChar,
1123
+ isOpen: true,
1124
+ cursorPosition: cursorPosition
1125
+ });
1126
+ }
1127
+ this.popoverVisible = true;
1128
+ return;
1129
+ }
1130
+ }
1131
+ }
1132
+ }
1133
+
1134
+ // 原有的处理逻辑,用于向后兼容
1135
+ const validOldVal = typeof oldVal === 'string' ? oldVal : '';
1136
+ const wasOldValTrigger = triggerStrings.includes(validOldVal);
1137
+ const isNewValTrigger = triggerStrings.includes(newVal);
1138
+
1139
+ // 触发显示:从空变为触发字符
1140
+ if (oldVal === '' && isNewValTrigger) {
1141
+ this.triggerString = newVal;
1142
+ if (this.hasOnTriggerListener) {
1143
+ this.$emit('trigger', {
1144
+ oldValue: oldVal,
1145
+ newValue: newVal,
1146
+ triggerString: newVal,
1147
+ isOpen: true
1148
+ });
1149
+ }
1150
+ this.popoverVisible = true;
1151
+ }
1152
+ // 关闭:从触发字符变为非触发字符
1153
+ else if (!isNewValTrigger && wasOldValTrigger) {
1154
+ if (this.hasOnTriggerListener) {
1155
+ this.$emit('trigger', {
1156
+ oldValue: oldVal,
1157
+ newValue: newVal,
1158
+ triggerString: undefined,
1159
+ isOpen: false
1160
+ });
1161
+ }
1162
+ this.popoverVisible = false;
1163
+ }
1164
+ // 触发显示:从非空且非触发字符变为触发字符
1165
+ else if (oldVal !== '' && isNewValTrigger && !wasOldValTrigger) {
1166
+ this.triggerString = newVal;
1167
+ if (this.hasOnTriggerListener) {
1168
+ this.$emit('trigger', {
1169
+ oldValue: oldVal,
1170
+ newValue: newVal,
1171
+ triggerString: newVal,
1172
+ isOpen: true
1173
+ });
1174
+ }
1175
+ this.popoverVisible = true;
1176
+ }
1177
+ }
1178
+ },
1179
+ methods: {
1180
+ /* 直接应用输入框样式 */
1181
+ applyInputStyles() {
1182
+ if (!this.inputRef) return;
1183
+ const textareaEl = this.inputRef.$el.querySelector('textarea');
1184
+ if (!textareaEl) return;
1185
+
1186
+ // 设置默认基础样式
1187
+ const defaultStyles = {
1188
+ width: this.inputWidth || '100%',
1189
+ height: '24px',
1190
+ maxHeight: '176px',
1191
+ boxSizing: 'border-box'
1192
+ };
1193
+
1194
+ // 应用默认样式
1195
+ Object.keys(defaultStyles).forEach(key => {
1196
+ textareaEl.style[key] = defaultStyles[key];
1197
+ });
1198
+
1199
+ // 如果用户传入了样式对象,则应用覆盖默认样式
1200
+ if (this.inputStyle && typeof this.inputStyle === 'object') {
1201
+ Object.keys(this.inputStyle).forEach(key => {
1202
+ textareaEl.style[key] = this.inputStyle[key];
1203
+ });
1204
+
1205
+ // 如果用户设置了字体大小,需要调整高度
1206
+ if (this.inputStyle.fontSize) {
1207
+ // 确保高度能完全容纳当前字体大小
1208
+ const computedFontSize = window.getComputedStyle(textareaEl).fontSize;
1209
+ const fontSize = parseInt(computedFontSize);
1210
+ const minHeight = Math.max(fontSize * 1.5, 24) + 'px';
1211
+ textareaEl.style.minHeight = minHeight;
1212
+
1213
+ // 重新触发 autosize
1214
+ this.$nextTick(() => {
1215
+ // 在某些情况下需要手动触发Element UI的autosize更新
1216
+ const event = document.createEvent('Event');
1217
+ event.initEvent('autosize:update', true, false);
1218
+ textareaEl.dispatchEvent(event);
1219
+ });
1220
+ }
1221
+ }
1222
+ },
1223
+ /* 手动更新 popover 位置 */
1224
+ onPopoverShow() {
1225
+ if (this.$refs.popoverRef) {
1226
+ this.$nextTick(() => {
1227
+ this.$refs.popoverRef.referenceElm = this.$refs.senderRef;
1228
+ this.$refs.popoverRef.doDestroy();
1229
+ this.$refs.popoverRef.updatePopper();
1230
+ });
1231
+ }
1232
+ },
1233
+ /* 内容容器聚焦 开始 */
1234
+ onContentMouseDown(e) {
1235
+ // 点击容器后设置输入框的聚焦,会触发 &:focus-within 样式
1236
+ if (e.target !== this.$el.querySelector(`.el-textarea__inner`)) {
1237
+ e.preventDefault();
1238
+ }
1239
+ this.inputRef.focus();
1240
+ },
1241
+ /* 内容容器聚焦 结束 */
1242
+
1243
+ /* 头部显示隐藏 开始 */
1244
+ openHeader() {
1245
+ if (!this.$slots.header) return false;
1246
+ if (this.readOnly) return false;
1247
+ this.visiableHeader = true;
1248
+ },
1249
+ closeHeader() {
1250
+ if (!this.$slots.header) return;
1251
+ if (this.readOnly) return;
1252
+ this.visiableHeader = false;
1253
+ },
1254
+ /* 头部显示隐藏 结束 */
1255
+
1256
+ /* 使用浏览器自带的语音转文字功能 开始 */
1257
+ startRecognition() {
1258
+ if (this.readOnly || this.disabled) return; // 直接返回,不执行后续逻辑
1259
+
1260
+ if (this.hasOnRecordingChangeListener) {
1261
+ this.speechLoading = true;
1262
+ this.$emit('recording-change', true);
1263
+ return;
1264
+ }
1265
+
1266
+ // 检查浏览器支持的 SpeechRecognition API
1267
+ const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition || window.mozSpeechRecognition || window.msSpeechRecognition;
1268
+ if (SpeechRecognition) {
1269
+ try {
1270
+ this.recognition = new SpeechRecognition();
1271
+ this.recognition.continuous = true;
1272
+ this.recognition.interimResults = true;
1273
+ this.recognition.lang = 'zh-CN';
1274
+ this.recognition.onresult = event => {
1275
+ let results = '';
1276
+ for (let i = 0; i <= event.resultIndex; i++) {
1277
+ results += event.results[i][0].transcript;
1278
+ }
1279
+ if (!this.readOnly) {
1280
+ this.internalValue = results;
1281
+ }
1282
+ };
1283
+ this.recognition.onstart = () => {
1284
+ this.speechLoading = true;
1285
+ console.log('语音识别已启动');
1286
+ };
1287
+ this.recognition.onend = () => {
1288
+ this.speechLoading = false;
1289
+ console.log('语音识别已结束');
1290
+ };
1291
+ this.recognition.onerror = event => {
1292
+ console.error('语音识别出错:', event.error);
1293
+ this.speechLoading = false;
1294
+ // 可以添加用户友好提示
1295
+ if (event.error === 'not-allowed') {
1296
+ console.error('用户拒绝了麦克风访问权限');
1297
+ // 这里可以显示提示
1298
+ }
1299
+ };
1300
+ this.recognition.start();
1301
+ } catch (error) {
1302
+ console.error('启动语音识别失败:', error);
1303
+ this.speechLoading = false;
1304
+ }
1305
+ } else {
1306
+ console.error('浏览器不支持 Web Speech API');
1307
+ this.speechLoading = false;
1308
+ }
1309
+ },
1310
+ stopRecognition() {
1311
+ // 如果有自定义处理函数
1312
+ if (this.hasOnRecordingChangeListener) {
1313
+ this.speechLoading = false;
1314
+ this.$emit('recordingChange', false);
1315
+ return;
1316
+ }
1317
+ if (this.recognition) {
1318
+ this.recognition.stop();
1319
+ this.speechLoading = false;
1320
+ }
1321
+ },
1322
+ /* 使用浏览器自带的语音转文字功能 结束 */
1323
+
1324
+ /* 输入框事件 开始 */
1325
+ submit() {
1326
+ if (this.readOnly || this.loading || this.disabled || this.isSubmitDisabled) return;
1327
+ this.$emit('submit', this.internalValue);
1328
+ },
1329
+ // 取消按钮
1330
+ cancel() {
1331
+ if (this.readOnly) return;
1332
+ this.$emit('cancel', this.internalValue);
1333
+ },
1334
+ clear() {
1335
+ if (this.readOnly) return; // 直接返回,不执行后续逻辑
1336
+ this.inputRef.clear();
1337
+ this.internalValue = '';
1338
+ },
1339
+ // 在这判断组合键的回车键 (目前支持两种模式)
1340
+ handleKeyDown(e) {
1341
+ if (this.readOnly) return; // 直接返回,不执行后续逻辑
1342
+
1343
+ if (this.submitType === 'enter') {
1344
+ // 判断是否按下了 Shift + 回车键
1345
+ if (e.shiftKey && e.keyCode === 13) {
1346
+ e.preventDefault();
1347
+ const cursorPosition = e.target.selectionStart; // 获取光标位置
1348
+ const textBeforeCursor = this.internalValue.slice(0, cursorPosition); // 光标前的文本
1349
+ const textAfterCursor = this.internalValue.slice(cursorPosition); // 光标后的文本
1350
+ this.internalValue = `${textBeforeCursor}\n${textAfterCursor}`; // 插入换行符
1351
+ this.$nextTick(() => {
1352
+ e.target.setSelectionRange(cursorPosition + 1, cursorPosition + 1); // 更新光标位置
1353
+ });
1354
+ } else if (e.keyCode === 13 && !e.shiftKey) {
1355
+ // 阻止掉 Enter 的默认换行行为
1356
+ e.preventDefault();
1357
+ // 触发提交功能
1358
+ this.submit();
1359
+ }
1360
+ } else if (this.submitType === 'shiftEnter') {
1361
+ // 判断是否按下了 Shift + 回车键
1362
+ if (e.shiftKey && e.keyCode === 13) {
1363
+ // 阻止掉 Enter 的默认换行行为
1364
+ e.preventDefault();
1365
+ // 触发提交功能
1366
+ this.submit();
1367
+ } else if (e.keyCode === 13 && !e.shiftKey) {
1368
+ e.preventDefault();
1369
+ const cursorPosition = e.target.selectionStart; // 获取光标位置
1370
+ const textBeforeCursor = this.internalValue.slice(0, cursorPosition); // 光标前的文本
1371
+ const textAfterCursor = this.internalValue.slice(cursorPosition); // 光标后的文本
1372
+ this.internalValue = `${textBeforeCursor}\n${textAfterCursor}`; // 插入换行符
1373
+ this.$nextTick(() => {
1374
+ e.target.setSelectionRange(cursorPosition + 1, cursorPosition + 1); // 更新光标位置
1375
+ });
1376
+ }
1377
+ }
1378
+ },
1379
+ /* 输入框事件 结束 */
1380
+
1381
+ /* 焦点 事件 开始 */
1382
+ blur() {
1383
+ if (this.readOnly) return false;
1384
+ this.inputRef.blur();
1385
+ },
1386
+ focus(type = 'all') {
1387
+ if (this.readOnly) return false;
1388
+ if (type === 'all') {
1389
+ this.inputRef.select();
1390
+ } else if (type === 'start') {
1391
+ this.focusToStart();
1392
+ } else if (type === 'end') {
1393
+ this.focusToEnd();
1394
+ }
1395
+ },
1396
+ // 聚焦到文本最前方
1397
+ focusToStart() {
1398
+ if (this.inputRef) {
1399
+ // 获取底层的 textarea DOM 元素
1400
+ const textarea = this.inputRef.$el.querySelector('textarea');
1401
+ if (textarea) {
1402
+ textarea.focus(); // 聚焦到输入框
1403
+ textarea.setSelectionRange(0, 0); // 设置光标到最前方
1404
+ }
1405
+ }
1406
+ },
1407
+ // 聚焦到文本最后方
1408
+ focusToEnd() {
1409
+ if (this.inputRef) {
1410
+ // 获取底层的 textarea DOM 元素
1411
+ const textarea = this.inputRef.$el.querySelector('textarea');
1412
+ if (textarea) {
1413
+ textarea.focus(); // 聚焦到输入框
1414
+ textarea.setSelectionRange(this.internalValue.length, this.internalValue.length); // 设置光标到最后方
1415
+ }
1416
+ }
1417
+ },
1418
+ /* 焦点 事件 结束 */
1419
+
1420
+ // 处理输入法开始/结束 (此方法是拼音输入法的时候用)
1421
+ handleCompositionStart() {
1422
+ this.isComposing = true;
1423
+ },
1424
+ handleCompositionEnd() {
1425
+ this.isComposing = false;
1426
+ }
1427
+ },
1428
+ mounted() {
1429
+ // 应用样式
1430
+ this.$nextTick(() => {
1431
+ // 获取组件引用
1432
+ this.senderRef = this.$refs.senderRef;
1433
+ this.inputRef = this.$refs.inputRef;
1434
+ this.popoverRef = this.$refs.popoverRef;
1435
+ this.applyInputStyles();
1436
+ });
1437
+ },
1438
+ updated() {
1439
+ // 确保在组件更新后重新应用样式
1440
+ this.applyInputStyles();
1441
+ }
817
1442
  });
818
- // CONCATENATED MODULE: ./src/components/Sender/src/components/ClearButton.vue?vue&type=script&lang=js
819
- /* harmony default export */ var components_ClearButtonvue_type_script_lang_js = (ClearButtonvue_type_script_lang_js);
820
- // EXTERNAL MODULE: ./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js
821
- var injectStylesIntoStyleTag = __webpack_require__(3);
822
- var injectStylesIntoStyleTag_default = /*#__PURE__*/__webpack_require__.n(injectStylesIntoStyleTag);
823
-
824
- // EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib??vue-loader-options!./src/components/Sender/src/components/ClearButton.vue?vue&type=style&index=0&id=74c70621&prod&scoped=true&lang=scss
825
- var ClearButtonvue_type_style_index_0_id_74c70621_prod_scoped_true_lang_scss = __webpack_require__(89);
1443
+ // CONCATENATED MODULE: ./src/components/Sender/src/main.vue?vue&type=script&lang=js
1444
+ /* harmony default export */ var src_mainvue_type_script_lang_js = (mainvue_type_script_lang_js);
1445
+ // EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib??vue-loader-options!./src/components/Sender/src/main.vue?vue&type=style&index=0&id=1822655c&prod&lang=scss&scoped=true
1446
+ var mainvue_type_style_index_0_id_1822655c_prod_lang_scss_scoped_true = __webpack_require__(95);
826
1447
 
827
- // CONCATENATED MODULE: ./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib??vue-loader-options!./src/components/Sender/src/components/ClearButton.vue?vue&type=style&index=0&id=74c70621&prod&scoped=true&lang=scss
1448
+ // CONCATENATED MODULE: ./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib??vue-loader-options!./src/components/Sender/src/main.vue?vue&type=style&index=0&id=1822655c&prod&lang=scss&scoped=true
828
1449
 
829
1450
 
830
1451
 
831
- var options = {};
832
-
833
- options.insert = "head";
834
- options.singleton = false;
1452
+ var mainvue_type_style_index_0_id_1822655c_prod_lang_scss_scoped_true_options = {};
835
1453
 
836
- var update = injectStylesIntoStyleTag_default()(ClearButtonvue_type_style_index_0_id_74c70621_prod_scoped_true_lang_scss["a" /* default */], options);
1454
+ mainvue_type_style_index_0_id_1822655c_prod_lang_scss_scoped_true_options.insert = "head";
1455
+ mainvue_type_style_index_0_id_1822655c_prod_lang_scss_scoped_true_options.singleton = false;
837
1456
 
1457
+ var mainvue_type_style_index_0_id_1822655c_prod_lang_scss_scoped_true_update = injectStylesIntoStyleTag_default()(mainvue_type_style_index_0_id_1822655c_prod_lang_scss_scoped_true["a" /* default */], mainvue_type_style_index_0_id_1822655c_prod_lang_scss_scoped_true_options);
838
1458
 
839
1459
 
840
- /* harmony default export */ var components_ClearButtonvue_type_style_index_0_id_74c70621_prod_scoped_true_lang_scss = (ClearButtonvue_type_style_index_0_id_74c70621_prod_scoped_true_lang_scss["a" /* default */].locals || {});
841
- // CONCATENATED MODULE: ./src/components/Sender/src/components/ClearButton.vue?vue&type=style&index=0&id=74c70621&prod&scoped=true&lang=scss
842
1460
 
843
- // EXTERNAL MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js
844
- var componentNormalizer = __webpack_require__(0);
1461
+ /* harmony default export */ var src_mainvue_type_style_index_0_id_1822655c_prod_lang_scss_scoped_true = (mainvue_type_style_index_0_id_1822655c_prod_lang_scss_scoped_true["a" /* default */].locals || {});
1462
+ // CONCATENATED MODULE: ./src/components/Sender/src/main.vue?vue&type=style&index=0&id=1822655c&prod&lang=scss&scoped=true
845
1463
 
846
- // CONCATENATED MODULE: ./src/components/Sender/src/components/ClearButton.vue
1464
+ // CONCATENATED MODULE: ./src/components/Sender/src/main.vue
847
1465
 
848
1466
 
849
1467
 
@@ -852,1049 +1470,578 @@ var componentNormalizer = __webpack_require__(0);
852
1470
 
853
1471
  /* normalize component */
854
1472
 
855
- var component = Object(componentNormalizer["a" /* default */])(
856
- components_ClearButtonvue_type_script_lang_js,
857
- ClearButtonvue_type_template_id_74c70621_scoped_true_render,
858
- ClearButtonvue_type_template_id_74c70621_scoped_true_staticRenderFns,
1473
+ var main_component = Object(componentNormalizer["a" /* default */])(
1474
+ src_mainvue_type_script_lang_js,
1475
+ render,
1476
+ staticRenderFns,
859
1477
  false,
860
1478
  null,
861
- "74c70621",
1479
+ "1822655c",
862
1480
  null
863
1481
 
864
1482
  )
865
1483
 
866
- /* harmony default export */ var ClearButton = (component.exports);
867
- // CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--6!./node_modules/vue-loader/lib??vue-loader-options!./src/components/Sender/src/components/LoadingButton.vue?vue&type=template&id=4d4a8cac&scoped=true
868
- var LoadingButtonvue_type_template_id_4d4a8cac_scoped_true_render = function render() {
869
- var _vm = this,
870
- _c = _vm._self._c;
871
- return _c("div", {
872
- staticClass: "el-x-send-button"
873
- }, [_c("el-button", {
874
- attrs: {
875
- circle: "",
876
- size: "small"
877
- },
878
- on: {
879
- click: function ($event) {
880
- return _vm.$emit("cancel");
881
- }
882
- }
883
- }, [_c("loading", {
884
- staticClass: "loading-svg"
885
- })], 1)], 1);
886
- };
887
- var LoadingButtonvue_type_template_id_4d4a8cac_scoped_true_staticRenderFns = [];
888
- LoadingButtonvue_type_template_id_4d4a8cac_scoped_true_render._withStripped = true;
1484
+ /* harmony default export */ var main = (main_component.exports);
1485
+ // CONCATENATED MODULE: ./src/components/Sender/index.js
889
1486
 
890
- // CONCATENATED MODULE: ./src/components/Sender/src/components/LoadingButton.vue?vue&type=template&id=4d4a8cac&scoped=true
891
1487
 
892
- // CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--6!./node_modules/vue-loader/lib??vue-loader-options!./src/components/Sender/src/components/Loading.vue?vue&type=template&id=1f0f8c14&scoped=true
893
- var Loadingvue_type_template_id_1f0f8c14_scoped_true_render = function render() {
894
- var _vm = this,
895
- _c = _vm._self._c;
896
- return _c("svg", {
897
- attrs: {
898
- viewBox: "0 0 1000 1000",
899
- xmlns: "http://www.w3.org/2000/svg",
900
- "xmlns:xlink": "http://www.w3.org/1999/xlink"
901
- }
902
- }, [_c("title", [_vm._v("Loading")]), _vm._v(" "), _c("rect", {
903
- attrs: {
904
- fill: "currentColor",
905
- height: "250",
906
- rx: "24",
907
- ry: "24",
908
- width: "250",
909
- x: "375",
910
- y: "375"
911
- }
912
- }), _vm._v(" "), _c("circle", {
913
- attrs: {
914
- cx: "500",
915
- cy: "500",
916
- fill: "none",
917
- r: "450",
918
- stroke: "currentColor",
919
- "stroke-width": "100",
920
- opacity: "0.45"
921
- }
922
- }), _vm._v(" "), _c("circle", {
923
- attrs: {
924
- cx: "500",
925
- cy: "500",
926
- fill: "none",
927
- r: "450",
928
- stroke: "currentColor",
929
- "stroke-width": "100",
930
- "stroke-dasharray": "600 9999999"
931
- }
932
- }, [_c("animateTransform", {
933
- attrs: {
934
- attributeName: "transform",
935
- dur: "1s",
936
- from: "0 500 500",
937
- repeatCount: "indefinite",
938
- to: "360 500 500",
939
- type: "rotate"
940
- }
941
- })], 1)]);
1488
+ /* istanbul ignore next */
1489
+ main.install = function (Vue) {
1490
+ Vue.component(main.name, main);
942
1491
  };
943
- var Loadingvue_type_template_id_1f0f8c14_scoped_true_staticRenderFns = [];
944
- Loadingvue_type_template_id_1f0f8c14_scoped_true_render._withStripped = true;
945
-
946
- // CONCATENATED MODULE: ./src/components/Sender/src/components/Loading.vue?vue&type=template&id=1f0f8c14&scoped=true
947
-
948
- // CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./src/components/Sender/src/components/Loading.vue?vue&type=script&lang=js
949
- /* harmony default export */ var Loadingvue_type_script_lang_js = ({
950
- name: 'Loading'
951
- });
952
- // CONCATENATED MODULE: ./src/components/Sender/src/components/Loading.vue?vue&type=script&lang=js
953
- /* harmony default export */ var components_Loadingvue_type_script_lang_js = (Loadingvue_type_script_lang_js);
954
- // CONCATENATED MODULE: ./src/components/Sender/src/components/Loading.vue
955
-
956
-
957
-
958
-
959
-
960
- /* normalize component */
961
-
962
- var Loading_component = Object(componentNormalizer["a" /* default */])(
963
- components_Loadingvue_type_script_lang_js,
964
- Loadingvue_type_template_id_1f0f8c14_scoped_true_render,
965
- Loadingvue_type_template_id_1f0f8c14_scoped_true_staticRenderFns,
966
- false,
967
- null,
968
- "1f0f8c14",
969
- null
970
-
971
- )
972
-
973
- /* harmony default export */ var Loading = (Loading_component.exports);
974
- // CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./src/components/Sender/src/components/LoadingButton.vue?vue&type=script&lang=js
975
-
976
- /* harmony default export */ var LoadingButtonvue_type_script_lang_js = ({
977
- name: 'LoadingButton',
978
- components: {
979
- Loading: Loading
980
- }
981
- });
982
- // CONCATENATED MODULE: ./src/components/Sender/src/components/LoadingButton.vue?vue&type=script&lang=js
983
- /* harmony default export */ var components_LoadingButtonvue_type_script_lang_js = (LoadingButtonvue_type_script_lang_js);
984
- // EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib??vue-loader-options!./src/components/Sender/src/components/LoadingButton.vue?vue&type=style&index=0&id=4d4a8cac&prod&scoped=true&lang=scss
985
- var LoadingButtonvue_type_style_index_0_id_4d4a8cac_prod_scoped_true_lang_scss = __webpack_require__(90);
986
-
987
- // CONCATENATED MODULE: ./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib??vue-loader-options!./src/components/Sender/src/components/LoadingButton.vue?vue&type=style&index=0&id=4d4a8cac&prod&scoped=true&lang=scss
988
-
989
-
990
-
991
- var LoadingButtonvue_type_style_index_0_id_4d4a8cac_prod_scoped_true_lang_scss_options = {};
992
-
993
- LoadingButtonvue_type_style_index_0_id_4d4a8cac_prod_scoped_true_lang_scss_options.insert = "head";
994
- LoadingButtonvue_type_style_index_0_id_4d4a8cac_prod_scoped_true_lang_scss_options.singleton = false;
995
-
996
- var LoadingButtonvue_type_style_index_0_id_4d4a8cac_prod_scoped_true_lang_scss_update = injectStylesIntoStyleTag_default()(LoadingButtonvue_type_style_index_0_id_4d4a8cac_prod_scoped_true_lang_scss["a" /* default */], LoadingButtonvue_type_style_index_0_id_4d4a8cac_prod_scoped_true_lang_scss_options);
997
-
998
-
999
-
1000
- /* harmony default export */ var components_LoadingButtonvue_type_style_index_0_id_4d4a8cac_prod_scoped_true_lang_scss = (LoadingButtonvue_type_style_index_0_id_4d4a8cac_prod_scoped_true_lang_scss["a" /* default */].locals || {});
1001
- // CONCATENATED MODULE: ./src/components/Sender/src/components/LoadingButton.vue?vue&type=style&index=0&id=4d4a8cac&prod&scoped=true&lang=scss
1002
-
1003
- // CONCATENATED MODULE: ./src/components/Sender/src/components/LoadingButton.vue
1004
-
1492
+ /* harmony default export */ var Sender = __webpack_exports__["default"] = (main);
1005
1493
 
1494
+ /***/ }),
1006
1495
 
1496
+ /***/ 2:
1497
+ /***/ (function(module, exports, __webpack_require__) {
1007
1498
 
1499
+ "use strict";
1008
1500
 
1009
1501
 
1010
- /* normalize component */
1502
+ /*
1503
+ MIT License http://www.opensource.org/licenses/mit-license.php
1504
+ Author Tobias Koppers @sokra
1505
+ */
1506
+ // css base code, injected by the css-loader
1507
+ // eslint-disable-next-line func-names
1508
+ module.exports = function (cssWithMappingToString) {
1509
+ var list = []; // return the list of modules as css string
1011
1510
 
1012
- var LoadingButton_component = Object(componentNormalizer["a" /* default */])(
1013
- components_LoadingButtonvue_type_script_lang_js,
1014
- LoadingButtonvue_type_template_id_4d4a8cac_scoped_true_render,
1015
- LoadingButtonvue_type_template_id_4d4a8cac_scoped_true_staticRenderFns,
1016
- false,
1017
- null,
1018
- "4d4a8cac",
1019
- null
1020
-
1021
- )
1511
+ list.toString = function toString() {
1512
+ return this.map(function (item) {
1513
+ var content = cssWithMappingToString(item);
1022
1514
 
1023
- /* harmony default export */ var LoadingButton = (LoadingButton_component.exports);
1024
- // CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--6!./node_modules/vue-loader/lib??vue-loader-options!./src/components/Sender/src/components/SendButton.vue?vue&type=template&id=671e6570&scoped=true
1025
- var SendButtonvue_type_template_id_671e6570_scoped_true_render = function render() {
1026
- var _vm = this,
1027
- _c = _vm._self._c;
1028
- return _c("div", {
1029
- staticClass: "el-x-send-button"
1030
- }, [_c("el-button", {
1031
- attrs: {
1032
- circle: "",
1033
- disabled: _vm.disabled,
1034
- size: "small"
1035
- },
1036
- on: {
1037
- click: function ($event) {
1038
- return _vm.$emit("submit");
1515
+ if (item[2]) {
1516
+ return "@media ".concat(item[2], " {").concat(content, "}");
1039
1517
  }
1040
- }
1041
- }, [_c("i", {
1042
- staticClass: "el-icon-top"
1043
- })])], 1);
1044
- };
1045
- var SendButtonvue_type_template_id_671e6570_scoped_true_staticRenderFns = [];
1046
- SendButtonvue_type_template_id_671e6570_scoped_true_render._withStripped = true;
1047
1518
 
1048
- // CONCATENATED MODULE: ./src/components/Sender/src/components/SendButton.vue?vue&type=template&id=671e6570&scoped=true
1519
+ return content;
1520
+ }).join("");
1521
+ }; // import a list of modules into the list
1522
+ // eslint-disable-next-line func-names
1049
1523
 
1050
- // CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./src/components/Sender/src/components/SendButton.vue?vue&type=script&lang=js
1051
- /* harmony default export */ var SendButtonvue_type_script_lang_js = ({
1052
- name: 'SendButton',
1053
- props: {
1054
- disabled: {
1055
- type: Boolean,
1056
- default: false
1057
- }
1058
- }
1059
- });
1060
- // CONCATENATED MODULE: ./src/components/Sender/src/components/SendButton.vue?vue&type=script&lang=js
1061
- /* harmony default export */ var components_SendButtonvue_type_script_lang_js = (SendButtonvue_type_script_lang_js);
1062
- // CONCATENATED MODULE: ./src/components/Sender/src/components/SendButton.vue
1063
1524
 
1525
+ list.i = function (modules, mediaQuery, dedupe) {
1526
+ if (typeof modules === "string") {
1527
+ // eslint-disable-next-line no-param-reassign
1528
+ modules = [[null, modules, ""]];
1529
+ }
1530
+
1531
+ var alreadyImportedModules = {};
1064
1532
 
1533
+ if (dedupe) {
1534
+ for (var i = 0; i < this.length; i++) {
1535
+ // eslint-disable-next-line prefer-destructuring
1536
+ var id = this[i][0];
1065
1537
 
1538
+ if (id != null) {
1539
+ alreadyImportedModules[id] = true;
1540
+ }
1541
+ }
1542
+ }
1066
1543
 
1544
+ for (var _i = 0; _i < modules.length; _i++) {
1545
+ var item = [].concat(modules[_i]);
1067
1546
 
1068
- /* normalize component */
1547
+ if (dedupe && alreadyImportedModules[item[0]]) {
1548
+ // eslint-disable-next-line no-continue
1549
+ continue;
1550
+ }
1069
1551
 
1070
- var SendButton_component = Object(componentNormalizer["a" /* default */])(
1071
- components_SendButtonvue_type_script_lang_js,
1072
- SendButtonvue_type_template_id_671e6570_scoped_true_render,
1073
- SendButtonvue_type_template_id_671e6570_scoped_true_staticRenderFns,
1074
- false,
1075
- null,
1076
- "671e6570",
1077
- null
1078
-
1079
- )
1552
+ if (mediaQuery) {
1553
+ if (!item[2]) {
1554
+ item[2] = mediaQuery;
1555
+ } else {
1556
+ item[2] = "".concat(mediaQuery, " and ").concat(item[2]);
1557
+ }
1558
+ }
1080
1559
 
1081
- /* harmony default export */ var SendButton = (SendButton_component.exports);
1082
- // CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--6!./node_modules/vue-loader/lib??vue-loader-options!./src/components/Sender/src/components/SpeechButton.vue?vue&type=template&id=7e5519b2&scoped=true
1083
- var SpeechButtonvue_type_template_id_7e5519b2_scoped_true_render = function render() {
1084
- var _vm = this,
1085
- _c = _vm._self._c;
1086
- return _c("div", {
1087
- staticClass: "el-x-send-button"
1088
- }, [_c("el-button", {
1089
- attrs: {
1090
- circle: "",
1091
- size: "small"
1092
- },
1093
- on: {
1094
- click: _vm.onClick
1560
+ list.push(item);
1095
1561
  }
1096
- }, [_c("i", {
1097
- staticClass: "el-icon-microphone"
1098
- })])], 1);
1562
+ };
1563
+
1564
+ return list;
1099
1565
  };
1100
- var SpeechButtonvue_type_template_id_7e5519b2_scoped_true_staticRenderFns = [];
1101
- SpeechButtonvue_type_template_id_7e5519b2_scoped_true_render._withStripped = true;
1102
1566
 
1103
- // CONCATENATED MODULE: ./src/components/Sender/src/components/SpeechButton.vue?vue&type=template&id=7e5519b2&scoped=true
1567
+ /***/ }),
1104
1568
 
1105
- // CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./src/components/Sender/src/components/SpeechButton.vue?vue&type=script&lang=js
1106
- /* harmony default export */ var SpeechButtonvue_type_script_lang_js = ({
1107
- name: 'SpeechButton',
1108
- methods: {
1109
- onClick() {
1110
- this.$emit('click');
1569
+ /***/ 25:
1570
+ /***/ (function(module, __webpack_exports__, __webpack_require__) {
1571
+
1572
+ "use strict";
1573
+ /* harmony import */ var _lang_zh_CN__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(26);
1574
+
1575
+ let lang = _lang_zh_CN__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"];
1576
+ let merged = false;
1577
+ let i18nHandler = function () {
1578
+ // 检查是否存在 vue-i18n@5.x (Vue.locale)
1579
+ if (typeof window !== 'undefined' && window.Vue && window.Vue.locale) {
1580
+ const vuei18n = window.Vue.locale;
1581
+ if (typeof vuei18n === 'function') {
1582
+ if (!merged) {
1583
+ merged = true;
1584
+ window.Vue.locale(window.Vue.config.lang, deepMerge(lang, window.Vue.locale(window.Vue.config.lang) || {}, {
1585
+ clone: true
1586
+ }));
1587
+ }
1588
+ return vuei18n.apply(this, arguments);
1111
1589
  }
1112
1590
  }
1113
- });
1114
- // CONCATENATED MODULE: ./src/components/Sender/src/components/SpeechButton.vue?vue&type=script&lang=js
1115
- /* harmony default export */ var components_SpeechButtonvue_type_script_lang_js = (SpeechButtonvue_type_script_lang_js);
1116
- // CONCATENATED MODULE: ./src/components/Sender/src/components/SpeechButton.vue
1117
-
1118
-
1119
-
1120
1591
 
1592
+ // 检查是否存在 vue-i18n@6.x+ (this.$t)
1593
+ if (this && this.$t && typeof this.$t === 'function') {
1594
+ try {
1595
+ return this.$t.apply(this, arguments);
1596
+ } catch (e) {
1597
+ // 如果出错,回退到内置翻译
1598
+ }
1599
+ }
1600
+ };
1601
+ const deepMerge = function (target, source, options) {
1602
+ options = options || {};
1603
+ const clone = options.clone !== false;
1604
+ const mergedTarget = clone ? {
1605
+ ...target
1606
+ } : target;
1607
+ for (const key in source) {
1608
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
1609
+ const value = source[key];
1610
+ if (value !== null && typeof value === 'object' && !Array.isArray(value)) {
1611
+ mergedTarget[key] = deepMerge(mergedTarget[key] || {}, value, options);
1612
+ } else {
1613
+ mergedTarget[key] = value;
1614
+ }
1615
+ }
1616
+ }
1617
+ return mergedTarget;
1618
+ };
1619
+ const t = function (path, options) {
1620
+ let value = i18nHandler.apply(this, arguments);
1621
+ if (value !== null && value !== undefined) return value;
1622
+ const array = path.split('.');
1623
+ let current = lang;
1624
+ for (let i = 0, j = array.length; i < j; i++) {
1625
+ const property = array[i];
1626
+ value = current[property];
1627
+ if (i === j - 1) return format(value, options);
1628
+ if (!value) return '';
1629
+ current = value;
1630
+ }
1631
+ return '';
1632
+ };
1633
+ const format = function (template, ...args) {
1634
+ if (typeof template === 'function') {
1635
+ return template(...args);
1636
+ }
1637
+ if (typeof template !== 'string') {
1638
+ return template;
1639
+ }
1640
+ const [options] = args;
1641
+ if (!options) return template;
1642
+ return template.replace(/\{(\w+)\}/g, (match, key) => {
1643
+ return options[key] !== undefined ? options[key] : match;
1644
+ });
1645
+ };
1646
+ const use = function (l) {
1647
+ lang = l || lang;
1648
+ merged = false;
1649
+ };
1650
+ const i18n = function (fn) {
1651
+ i18nHandler = fn || i18nHandler;
1652
+ };
1653
+ /* harmony default export */ __webpack_exports__["a"] = ({
1654
+ use,
1655
+ t,
1656
+ i18n
1657
+ });
1121
1658
 
1122
- /* normalize component */
1659
+ /***/ }),
1123
1660
 
1124
- var SpeechButton_component = Object(componentNormalizer["a" /* default */])(
1125
- components_SpeechButtonvue_type_script_lang_js,
1126
- SpeechButtonvue_type_template_id_7e5519b2_scoped_true_render,
1127
- SpeechButtonvue_type_template_id_7e5519b2_scoped_true_staticRenderFns,
1128
- false,
1129
- null,
1130
- "7e5519b2",
1131
- null
1132
-
1133
- )
1661
+ /***/ 26:
1662
+ /***/ (function(module, __webpack_exports__, __webpack_require__) {
1134
1663
 
1135
- /* harmony default export */ var SpeechButton = (SpeechButton_component.exports);
1136
- // CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--6!./node_modules/vue-loader/lib??vue-loader-options!./src/components/Sender/src/components/SpeechLoadingButton.vue?vue&type=template&id=1d4ab0c1&scoped=true
1137
- var SpeechLoadingButtonvue_type_template_id_1d4ab0c1_scoped_true_render = function render() {
1138
- var _vm = this,
1139
- _c = _vm._self._c;
1140
- return _c("div", {
1141
- staticClass: "el-x-send-button"
1142
- }, [_c("el-button", {
1143
- attrs: {
1144
- circle: "",
1145
- size: "small"
1664
+ "use strict";
1665
+ /* harmony default export */ __webpack_exports__["a"] = ({
1666
+ el_x: {
1667
+ thinking: {
1668
+ start: '开始思考',
1669
+ processing: '思考中...',
1670
+ completed: '思考完成',
1671
+ error: '思考遇到问题',
1672
+ errorContent: '思考过程中出现错误'
1146
1673
  },
1147
- on: {
1148
- click: _vm.onClick
1674
+ sender: {
1675
+ placeholder: '请输入内容'
1676
+ },
1677
+ common: {
1678
+ loading: '加载中...',
1679
+ success: '成功',
1680
+ error: '错误',
1681
+ warning: '警告'
1149
1682
  }
1150
- }, [_c("speech-loading", {
1151
- staticClass: "loading-svg"
1152
- })], 1)], 1);
1153
- };
1154
- var SpeechLoadingButtonvue_type_template_id_1d4ab0c1_scoped_true_staticRenderFns = [];
1155
- SpeechLoadingButtonvue_type_template_id_1d4ab0c1_scoped_true_render._withStripped = true;
1683
+ }
1684
+ });
1156
1685
 
1157
- // CONCATENATED MODULE: ./src/components/Sender/src/components/SpeechLoadingButton.vue?vue&type=template&id=1d4ab0c1&scoped=true
1686
+ /***/ }),
1158
1687
 
1159
- // CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--6!./node_modules/vue-loader/lib??vue-loader-options!./src/components/Sender/src/components/SpeechLoading.vue?vue&type=template&id=5cab3032&scoped=true
1160
- var SpeechLoadingvue_type_template_id_5cab3032_scoped_true_render = function render() {
1161
- var _vm = this,
1162
- _c = _vm._self._c;
1163
- return _c("svg", {
1164
- class: _vm.className,
1165
- attrs: {
1166
- color: "currentColor",
1167
- viewBox: `0 0 ${_vm.SIZE} ${_vm.SIZE}`,
1168
- xmlns: "http://www.w3.org/2000/svg",
1169
- "xmlns:xlink": "http://www.w3.org/1999/xlink"
1170
- }
1171
- }, [_c("title", [_vm._v("Speech Recording")]), _vm._v(" "), _vm._l(_vm.rects, function (item, index) {
1172
- return _c("rect", {
1173
- key: index,
1174
- attrs: {
1175
- fill: "currentColor",
1176
- rx: _vm.RECT_RADIUS,
1177
- ry: _vm.RECT_RADIUS,
1178
- height: _vm.RECT_HEIGHT_MIN,
1179
- width: _vm.RECT_WIDTH,
1180
- x: item.x,
1181
- y: item.yMin
1182
- }
1183
- }, [_c("animate", {
1184
- attrs: {
1185
- attributeName: "height",
1186
- values: `${_vm.RECT_HEIGHT_MIN}; ${_vm.RECT_HEIGHT_MAX}; ${_vm.RECT_HEIGHT_MIN}`,
1187
- keyTimes: "0; 0.5; 1",
1188
- dur: `${_vm.DURATION}s`,
1189
- begin: `${_vm.DURATION / _vm.COUNT * index}s`,
1190
- repeatCount: "indefinite"
1191
- }
1192
- }), _vm._v(" "), _c("animate", {
1193
- attrs: {
1194
- attributeName: "y",
1195
- values: `${item.yMin}; ${item.yMax}; ${item.yMin}`,
1196
- keyTimes: "0; 0.5; 1",
1197
- dur: `${_vm.DURATION}s`,
1198
- begin: `${_vm.DURATION / _vm.COUNT * index}s`,
1199
- repeatCount: "indefinite"
1200
- }
1201
- })]);
1202
- })], 2);
1203
- };
1204
- var SpeechLoadingvue_type_template_id_5cab3032_scoped_true_staticRenderFns = [];
1205
- SpeechLoadingvue_type_template_id_5cab3032_scoped_true_render._withStripped = true;
1688
+ /***/ 3:
1689
+ /***/ (function(module, exports, __webpack_require__) {
1206
1690
 
1207
- // CONCATENATED MODULE: ./src/components/Sender/src/components/SpeechLoading.vue?vue&type=template&id=5cab3032&scoped=true
1691
+ "use strict";
1208
1692
 
1209
- // CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./src/components/Sender/src/components/SpeechLoading.vue?vue&type=script&lang=js
1210
- /* harmony default export */ var SpeechLoadingvue_type_script_lang_js = ({
1211
- name: 'SpeechLoading',
1212
- props: {
1213
- className: {
1214
- type: String,
1215
- default: ''
1216
- }
1217
- },
1218
- data() {
1219
- return {
1220
- // 定义常量
1221
- SIZE: 1000,
1222
- COUNT: 4,
1223
- RECT_WIDTH: 140,
1224
- RECT_RADIUS: 70,
1225
- // RECT_WIDTH / 2
1226
- RECT_HEIGHT_MIN: 250,
1227
- RECT_HEIGHT_MAX: 500,
1228
- DURATION: 0.8
1229
- };
1230
- },
1231
- computed: {
1232
- // 计算矩形的位置和高度范围
1233
- rects() {
1234
- const dest = (this.SIZE - this.RECT_WIDTH * this.COUNT) / (this.COUNT - 1);
1235
- return Array.from({
1236
- length: this.COUNT
1237
- }).map((_, index) => {
1238
- const x = index * (dest + this.RECT_WIDTH);
1239
- const yMin = this.SIZE / 2 - this.RECT_HEIGHT_MIN / 2;
1240
- const yMax = this.SIZE / 2 - this.RECT_HEIGHT_MAX / 2;
1241
- return {
1242
- x,
1243
- yMin,
1244
- yMax
1245
- };
1246
- });
1693
+
1694
+ var isOldIE = function isOldIE() {
1695
+ var memo;
1696
+ return function memorize() {
1697
+ if (typeof memo === 'undefined') {
1698
+ // Test for IE <= 9 as proposed by Browserhacks
1699
+ // @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805
1700
+ // Tests for existence of standard globals is to allow style-loader
1701
+ // to operate correctly into non-standard environments
1702
+ // @see https://github.com/webpack-contrib/style-loader/issues/177
1703
+ memo = Boolean(window && document && document.all && !window.atob);
1247
1704
  }
1248
- }
1249
- });
1250
- // CONCATENATED MODULE: ./src/components/Sender/src/components/SpeechLoading.vue?vue&type=script&lang=js
1251
- /* harmony default export */ var components_SpeechLoadingvue_type_script_lang_js = (SpeechLoadingvue_type_script_lang_js);
1252
- // CONCATENATED MODULE: ./src/components/Sender/src/components/SpeechLoading.vue
1253
1705
 
1706
+ return memo;
1707
+ };
1708
+ }();
1254
1709
 
1710
+ var getTarget = function getTarget() {
1711
+ var memo = {};
1712
+ return function memorize(target) {
1713
+ if (typeof memo[target] === 'undefined') {
1714
+ var styleTarget = document.querySelector(target); // Special case to return head of iframe instead of iframe itself
1255
1715
 
1716
+ if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {
1717
+ try {
1718
+ // This will throw an exception if access to iframe is blocked
1719
+ // due to cross-origin restrictions
1720
+ styleTarget = styleTarget.contentDocument.head;
1721
+ } catch (e) {
1722
+ // istanbul ignore next
1723
+ styleTarget = null;
1724
+ }
1725
+ }
1256
1726
 
1727
+ memo[target] = styleTarget;
1728
+ }
1257
1729
 
1258
- /* normalize component */
1730
+ return memo[target];
1731
+ };
1732
+ }();
1259
1733
 
1260
- var SpeechLoading_component = Object(componentNormalizer["a" /* default */])(
1261
- components_SpeechLoadingvue_type_script_lang_js,
1262
- SpeechLoadingvue_type_template_id_5cab3032_scoped_true_render,
1263
- SpeechLoadingvue_type_template_id_5cab3032_scoped_true_staticRenderFns,
1264
- false,
1265
- null,
1266
- "5cab3032",
1267
- null
1268
-
1269
- )
1734
+ var stylesInDom = [];
1270
1735
 
1271
- /* harmony default export */ var SpeechLoading = (SpeechLoading_component.exports);
1272
- // CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./src/components/Sender/src/components/SpeechLoadingButton.vue?vue&type=script&lang=js
1736
+ function getIndexByIdentifier(identifier) {
1737
+ var result = -1;
1273
1738
 
1274
- /* harmony default export */ var SpeechLoadingButtonvue_type_script_lang_js = ({
1275
- name: 'SpeechLoadingButton',
1276
- components: {
1277
- SpeechLoading: SpeechLoading
1278
- },
1279
- methods: {
1280
- onClick() {
1281
- this.$emit('click');
1739
+ for (var i = 0; i < stylesInDom.length; i++) {
1740
+ if (stylesInDom[i].identifier === identifier) {
1741
+ result = i;
1742
+ break;
1282
1743
  }
1283
1744
  }
1284
- });
1285
- // CONCATENATED MODULE: ./src/components/Sender/src/components/SpeechLoadingButton.vue?vue&type=script&lang=js
1286
- /* harmony default export */ var components_SpeechLoadingButtonvue_type_script_lang_js = (SpeechLoadingButtonvue_type_script_lang_js);
1287
- // EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib??vue-loader-options!./src/components/Sender/src/components/SpeechLoadingButton.vue?vue&type=style&index=0&id=1d4ab0c1&prod&scoped=true&lang=scss
1288
- var SpeechLoadingButtonvue_type_style_index_0_id_1d4ab0c1_prod_scoped_true_lang_scss = __webpack_require__(91);
1289
1745
 
1290
- // CONCATENATED MODULE: ./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib??vue-loader-options!./src/components/Sender/src/components/SpeechLoadingButton.vue?vue&type=style&index=0&id=1d4ab0c1&prod&scoped=true&lang=scss
1746
+ return result;
1747
+ }
1291
1748
 
1292
-
1749
+ function modulesToDom(list, options) {
1750
+ var idCountMap = {};
1751
+ var identifiers = [];
1293
1752
 
1294
- var SpeechLoadingButtonvue_type_style_index_0_id_1d4ab0c1_prod_scoped_true_lang_scss_options = {};
1753
+ for (var i = 0; i < list.length; i++) {
1754
+ var item = list[i];
1755
+ var id = options.base ? item[0] + options.base : item[0];
1756
+ var count = idCountMap[id] || 0;
1757
+ var identifier = "".concat(id, " ").concat(count);
1758
+ idCountMap[id] = count + 1;
1759
+ var index = getIndexByIdentifier(identifier);
1760
+ var obj = {
1761
+ css: item[1],
1762
+ media: item[2],
1763
+ sourceMap: item[3]
1764
+ };
1295
1765
 
1296
- SpeechLoadingButtonvue_type_style_index_0_id_1d4ab0c1_prod_scoped_true_lang_scss_options.insert = "head";
1297
- SpeechLoadingButtonvue_type_style_index_0_id_1d4ab0c1_prod_scoped_true_lang_scss_options.singleton = false;
1766
+ if (index !== -1) {
1767
+ stylesInDom[index].references++;
1768
+ stylesInDom[index].updater(obj);
1769
+ } else {
1770
+ stylesInDom.push({
1771
+ identifier: identifier,
1772
+ updater: addStyle(obj, options),
1773
+ references: 1
1774
+ });
1775
+ }
1298
1776
 
1299
- var SpeechLoadingButtonvue_type_style_index_0_id_1d4ab0c1_prod_scoped_true_lang_scss_update = injectStylesIntoStyleTag_default()(SpeechLoadingButtonvue_type_style_index_0_id_1d4ab0c1_prod_scoped_true_lang_scss["a" /* default */], SpeechLoadingButtonvue_type_style_index_0_id_1d4ab0c1_prod_scoped_true_lang_scss_options);
1777
+ identifiers.push(identifier);
1778
+ }
1300
1779
 
1780
+ return identifiers;
1781
+ }
1301
1782
 
1783
+ function insertStyleElement(options) {
1784
+ var style = document.createElement('style');
1785
+ var attributes = options.attributes || {};
1302
1786
 
1303
- /* harmony default export */ var components_SpeechLoadingButtonvue_type_style_index_0_id_1d4ab0c1_prod_scoped_true_lang_scss = (SpeechLoadingButtonvue_type_style_index_0_id_1d4ab0c1_prod_scoped_true_lang_scss["a" /* default */].locals || {});
1304
- // CONCATENATED MODULE: ./src/components/Sender/src/components/SpeechLoadingButton.vue?vue&type=style&index=0&id=1d4ab0c1&prod&scoped=true&lang=scss
1787
+ if (typeof attributes.nonce === 'undefined') {
1788
+ var nonce = true ? __webpack_require__.nc : undefined;
1305
1789
 
1306
- // CONCATENATED MODULE: ./src/components/Sender/src/components/SpeechLoadingButton.vue
1790
+ if (nonce) {
1791
+ attributes.nonce = nonce;
1792
+ }
1793
+ }
1307
1794
 
1795
+ Object.keys(attributes).forEach(function (key) {
1796
+ style.setAttribute(key, attributes[key]);
1797
+ });
1308
1798
 
1799
+ if (typeof options.insert === 'function') {
1800
+ options.insert(style);
1801
+ } else {
1802
+ var target = getTarget(options.insert || 'head');
1309
1803
 
1804
+ if (!target) {
1805
+ throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");
1806
+ }
1310
1807
 
1808
+ target.appendChild(style);
1809
+ }
1311
1810
 
1811
+ return style;
1812
+ }
1312
1813
 
1313
- /* normalize component */
1814
+ function removeStyleElement(style) {
1815
+ // istanbul ignore if
1816
+ if (style.parentNode === null) {
1817
+ return false;
1818
+ }
1314
1819
 
1315
- var SpeechLoadingButton_component = Object(componentNormalizer["a" /* default */])(
1316
- components_SpeechLoadingButtonvue_type_script_lang_js,
1317
- SpeechLoadingButtonvue_type_template_id_1d4ab0c1_scoped_true_render,
1318
- SpeechLoadingButtonvue_type_template_id_1d4ab0c1_scoped_true_staticRenderFns,
1319
- false,
1320
- null,
1321
- "1d4ab0c1",
1322
- null
1323
-
1324
- )
1820
+ style.parentNode.removeChild(style);
1821
+ }
1822
+ /* istanbul ignore next */
1325
1823
 
1326
- /* harmony default export */ var SpeechLoadingButton = (SpeechLoadingButton_component.exports);
1327
- // CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./src/components/Sender/src/main.vue?vue&type=script&lang=js
1328
1824
 
1825
+ var replaceText = function replaceText() {
1826
+ var textStore = [];
1827
+ return function replace(index, replacement) {
1828
+ textStore[index] = replacement;
1829
+ return textStore.filter(Boolean).join('\n');
1830
+ };
1831
+ }();
1329
1832
 
1833
+ function applyToSingletonTag(style, index, remove, obj) {
1834
+ var css = remove ? '' : obj.media ? "@media ".concat(obj.media, " {").concat(obj.css, "}") : obj.css; // For old IE
1330
1835
 
1836
+ /* istanbul ignore if */
1331
1837
 
1838
+ if (style.styleSheet) {
1839
+ style.styleSheet.cssText = replaceText(index, css);
1840
+ } else {
1841
+ var cssNode = document.createTextNode(css);
1842
+ var childNodes = style.childNodes;
1332
1843
 
1333
- /* harmony default export */ var mainvue_type_script_lang_js = ({
1334
- name: 'ElXSender',
1335
- components: {
1336
- ClearButton: ClearButton,
1337
- LoadingButton: LoadingButton,
1338
- SendButton: SendButton,
1339
- SpeechButton: SpeechButton,
1340
- SpeechLoadingButton: SpeechLoadingButton
1341
- },
1342
- props: {
1343
- value: {
1344
- type: String,
1345
- default: ''
1346
- },
1347
- placeholder: {
1348
- type: String,
1349
- default: '请输入内容'
1350
- },
1351
- autoSize: {
1352
- type: Object,
1353
- default: () => ({
1354
- minRows: 1,
1355
- maxRows: 6
1356
- })
1357
- },
1358
- readOnly: Boolean,
1359
- disabled: Boolean,
1360
- loading: Boolean,
1361
- clearable: Boolean,
1362
- allowSpeech: Boolean,
1363
- submitType: {
1364
- type: String,
1365
- default: 'enter',
1366
- validator: value => ['enter', 'shiftEnter'].includes(value)
1367
- },
1368
- headerAnimationTimer: {
1369
- type: Number,
1370
- default: 300
1371
- },
1372
- inputWidth: {
1373
- type: String,
1374
- default: '100%'
1375
- },
1376
- // 变体属性
1377
- variant: {
1378
- type: String,
1379
- default: 'default',
1380
- validator: value => ['default', 'updown'].includes(value)
1381
- },
1382
- showUpdown: {
1383
- type: Boolean,
1384
- default: true
1385
- },
1386
- submitBtnDisabled: Boolean,
1387
- inputStyle: {
1388
- type: Object,
1389
- default: () => ({})
1390
- },
1391
- // 新增 el-popover 样式透传
1392
- triggerStrings: {
1393
- type: Array,
1394
- default: () => []
1395
- },
1396
- triggerPopoverVisible: {
1397
- type: Boolean,
1398
- default: false
1399
- },
1400
- triggerPopoverWidth: {
1401
- type: String,
1402
- default: 'fit-content'
1403
- },
1404
- triggerPopoverLeft: {
1405
- type: String,
1406
- default: '0px'
1407
- },
1408
- triggerPopoverOffset: {
1409
- type: Number,
1410
- default: 0
1411
- },
1412
- triggerPopoverPlacement: {
1413
- type: String,
1414
- default: 'top-start',
1415
- validator: value => ['top', 'top-start', 'top-end', 'bottom', 'bottom-start', 'bottom-end', 'left', 'left-start', 'left-end', 'right', 'right-start', 'right-end'].includes(value)
1844
+ if (childNodes[index]) {
1845
+ style.removeChild(childNodes[index]);
1416
1846
  }
1417
- },
1418
- data() {
1419
- return {
1420
- senderRef: null,
1421
- inputRef: null,
1422
- popoverVisible: this.triggerPopoverVisible,
1423
- internalValue: this.value,
1424
- isComposing: false,
1425
- popoverRef: null,
1426
- triggerString: '',
1427
- visiableHeader: false,
1428
- recognition: null,
1429
- speechLoading: false,
1430
- triggerDebounce: false
1431
- };
1432
- },
1433
- computed: {
1434
- // 判断是否存在 recordingChange 监听器
1435
- hasOnRecordingChangeListener() {
1436
- return !!(this.$listeners && this.$listeners.recordingChange);
1437
- },
1438
- // 判断是否存在 trigger 监听器
1439
- hasOnTriggerListener() {
1440
- return !!(this.$listeners && this.$listeners.trigger);
1441
- },
1442
- // 计算提交按钮禁用状态
1443
- isSubmitDisabled() {
1444
- // 用户显式设置了 submitBtnDisabled 时优先使用
1445
- if (typeof this.submitBtnDisabled === 'boolean') {
1446
- return this.submitBtnDisabled;
1447
- }
1448
- // 否则保持默认逻辑:无内容时禁用
1449
- return !this.internalValue;
1450
- },
1451
- // 根据字体大小动态计算 autoSize
1452
- computedAutoSize() {
1453
- // 如果用户提供了autoSize,则优先使用
1454
- if (this.autoSize) return this.autoSize;
1455
1847
 
1456
- // 否则返回默认值
1457
- return {
1458
- minRows: 1,
1459
- maxRows: 6
1460
- };
1461
- }
1462
- },
1463
- watch: {
1464
- value(val) {
1465
- this.internalValue = val;
1466
- },
1467
- // 监听样式变化
1468
- inputStyle: {
1469
- handler() {
1470
- this.$nextTick(() => {
1471
- this.applyInputStyles();
1472
- });
1473
- },
1474
- deep: true
1475
- },
1476
- inputWidth() {
1477
- this.$nextTick(() => {
1478
- this.applyInputStyles();
1479
- });
1480
- },
1481
- // 监听外部传入的 triggerPopoverVisible 变化
1482
- triggerPopoverVisible(val) {
1483
- // 仅在值不同时更新,避免循环触发
1484
- if (this.popoverVisible !== val) {
1485
- this.popoverVisible = val;
1486
- }
1487
- },
1488
- // 监听内部 popoverVisible 变化,向外同步
1489
- popoverVisible(val) {
1490
- if (val !== this.triggerPopoverVisible) {
1491
- this.$emit('update:triggerPopoverVisible', val);
1492
- }
1848
+ if (childNodes.length) {
1849
+ style.insertBefore(cssNode, childNodes[index]);
1850
+ } else {
1851
+ style.appendChild(cssNode);
1852
+ }
1853
+ }
1854
+ }
1855
+
1856
+ function applyToTag(style, options, obj) {
1857
+ var css = obj.css;
1858
+ var media = obj.media;
1859
+ var sourceMap = obj.sourceMap;
1860
+
1861
+ if (media) {
1862
+ style.setAttribute('media', media);
1863
+ } else {
1864
+ style.removeAttribute('media');
1865
+ }
1866
+
1867
+ if (sourceMap && typeof btoa !== 'undefined') {
1868
+ css += "\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), " */");
1869
+ } // For old IE
1493
1870
 
1494
- // 新增:当弹窗关闭时,设置短时间内的防抖状态
1495
- if (val === false) {
1496
- this.triggerDebounce = true;
1497
- setTimeout(() => {
1498
- this.triggerDebounce = false;
1499
- }, 300); // 300ms 防抖时间,防止频繁触发
1500
- }
1501
- },
1502
- internalValue(newVal, oldVal) {
1503
- this.$emit('input', newVal);
1871
+ /* istanbul ignore if */
1504
1872
 
1505
- // 当内容变化时,修复高度问题
1506
1873
 
1507
- if (this.isComposing) return;
1508
- // 新增:如果处于防抖状态,则不进行触发检测
1509
- if (this.triggerDebounce) return;
1874
+ if (style.styleSheet) {
1875
+ style.styleSheet.cssText = css;
1876
+ } else {
1877
+ while (style.firstChild) {
1878
+ style.removeChild(style.firstChild);
1879
+ }
1510
1880
 
1511
- // 触发逻辑:检测输入内容中是否出现了触发字符
1512
- const triggerStrings = this.triggerStrings || []; // 如果为 undefined,就使用空数组
1881
+ style.appendChild(document.createTextNode(css));
1882
+ }
1883
+ }
1513
1884
 
1514
- // 新的检测逻辑:检查是否在当前光标位置前有触发字符
1515
- if (this.inputRef && triggerStrings.length > 0) {
1516
- const textArea = this.inputRef.$el.querySelector('textarea');
1517
- if (textArea) {
1518
- const cursorPosition = textArea.selectionStart;
1519
- // 检查光标前是否有新增的触发字符
1520
- if (cursorPosition > 0 && newVal.length > oldVal.length) {
1521
- const lastChar = newVal.charAt(cursorPosition - 1);
1522
- if (triggerStrings.includes(lastChar)) {
1523
- this.triggerString = lastChar;
1524
- if (this.hasOnTriggerListener) {
1525
- this.$emit('trigger', {
1526
- oldValue: oldVal,
1527
- newValue: newVal,
1528
- triggerString: lastChar,
1529
- isOpen: true,
1530
- cursorPosition: cursorPosition
1531
- });
1532
- }
1533
- this.popoverVisible = true;
1534
- return;
1535
- }
1536
- }
1537
- }
1538
- }
1885
+ var singleton = null;
1886
+ var singletonCounter = 0;
1539
1887
 
1540
- // 原有的处理逻辑,用于向后兼容
1541
- const validOldVal = typeof oldVal === 'string' ? oldVal : '';
1542
- const wasOldValTrigger = triggerStrings.includes(validOldVal);
1543
- const isNewValTrigger = triggerStrings.includes(newVal);
1888
+ function addStyle(obj, options) {
1889
+ var style;
1890
+ var update;
1891
+ var remove;
1544
1892
 
1545
- // 触发显示:从空变为触发字符
1546
- if (oldVal === '' && isNewValTrigger) {
1547
- this.triggerString = newVal;
1548
- if (this.hasOnTriggerListener) {
1549
- this.$emit('trigger', {
1550
- oldValue: oldVal,
1551
- newValue: newVal,
1552
- triggerString: newVal,
1553
- isOpen: true
1554
- });
1555
- }
1556
- this.popoverVisible = true;
1557
- }
1558
- // 关闭:从触发字符变为非触发字符
1559
- else if (!isNewValTrigger && wasOldValTrigger) {
1560
- if (this.hasOnTriggerListener) {
1561
- this.$emit('trigger', {
1562
- oldValue: oldVal,
1563
- newValue: newVal,
1564
- triggerString: undefined,
1565
- isOpen: false
1566
- });
1567
- }
1568
- this.popoverVisible = false;
1569
- }
1570
- // 触发显示:从非空且非触发字符变为触发字符
1571
- else if (oldVal !== '' && isNewValTrigger && !wasOldValTrigger) {
1572
- this.triggerString = newVal;
1573
- if (this.hasOnTriggerListener) {
1574
- this.$emit('trigger', {
1575
- oldValue: oldVal,
1576
- newValue: newVal,
1577
- triggerString: newVal,
1578
- isOpen: true
1579
- });
1580
- }
1581
- this.popoverVisible = true;
1893
+ if (options.singleton) {
1894
+ var styleIndex = singletonCounter++;
1895
+ style = singleton || (singleton = insertStyleElement(options));
1896
+ update = applyToSingletonTag.bind(null, style, styleIndex, false);
1897
+ remove = applyToSingletonTag.bind(null, style, styleIndex, true);
1898
+ } else {
1899
+ style = insertStyleElement(options);
1900
+ update = applyToTag.bind(null, style, options);
1901
+
1902
+ remove = function remove() {
1903
+ removeStyleElement(style);
1904
+ };
1905
+ }
1906
+
1907
+ update(obj);
1908
+ return function updateStyle(newObj) {
1909
+ if (newObj) {
1910
+ if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap) {
1911
+ return;
1582
1912
  }
1913
+
1914
+ update(obj = newObj);
1915
+ } else {
1916
+ remove();
1583
1917
  }
1584
- },
1585
- methods: {
1586
- /* 直接应用输入框样式 */
1587
- applyInputStyles() {
1588
- if (!this.inputRef) return;
1589
- const textareaEl = this.inputRef.$el.querySelector('textarea');
1590
- if (!textareaEl) return;
1918
+ };
1919
+ }
1591
1920
 
1592
- // 设置默认基础样式
1593
- const defaultStyles = {
1594
- maxHeight: '176px',
1595
- maxWidth: this.inputWidth || '100%',
1596
- boxSizing: 'border-box'
1597
- };
1921
+ module.exports = function (list, options) {
1922
+ options = options || {}; // Force single-tag solution on IE6-9, which has a hard limit on the # of <style>
1923
+ // tags it will allow on a page
1598
1924
 
1599
- // 应用默认样式
1600
- Object.keys(defaultStyles).forEach(key => {
1601
- textareaEl.style[key] = defaultStyles[key];
1602
- });
1925
+ if (!options.singleton && typeof options.singleton !== 'boolean') {
1926
+ options.singleton = isOldIE();
1927
+ }
1603
1928
 
1604
- // 如果用户传入了样式对象,则应用覆盖默认样式
1605
- if (this.inputStyle && typeof this.inputStyle === 'object') {
1606
- Object.keys(this.inputStyle).forEach(key => {
1607
- textareaEl.style[key] = this.inputStyle[key];
1608
- });
1929
+ list = list || [];
1930
+ var lastIdentifiers = modulesToDom(list, options);
1931
+ return function update(newList) {
1932
+ newList = newList || [];
1609
1933
 
1610
- // 如果用户设置了字体大小,需要调整高度
1611
- if (this.inputStyle.fontSize) {
1612
- // 确保高度能完全容纳当前字体大小
1613
- const computedFontSize = window.getComputedStyle(textareaEl).fontSize;
1614
- const fontSize = parseInt(computedFontSize);
1615
- const minHeight = Math.max(fontSize * 1.5, 24) + 'px';
1616
- textareaEl.style.minHeight = minHeight;
1934
+ if (Object.prototype.toString.call(newList) !== '[object Array]') {
1935
+ return;
1936
+ }
1617
1937
 
1618
- // 重新触发 autosize
1619
- this.$nextTick(() => {
1620
- // 在某些情况下需要手动触发Element UI的autosize更新
1621
- const event = document.createEvent('Event');
1622
- event.initEvent('autosize:update', true, false);
1623
- textareaEl.dispatchEvent(event);
1624
- });
1625
- }
1626
- }
1627
- },
1628
- /* 手动更新 popover 位置 */
1629
- onPopoverShow() {
1630
- if (this.$refs.popoverRef) {
1631
- this.$nextTick(() => {
1632
- this.$refs.popoverRef.referenceElm = this.$refs.senderRef;
1633
- this.$refs.popoverRef.doDestroy();
1634
- this.$refs.popoverRef.updatePopper();
1635
- });
1636
- }
1637
- },
1638
- /* 内容容器聚焦 开始 */
1639
- onContentMouseDown(e) {
1640
- // 点击容器后设置输入框的聚焦,会触发 &:focus-within 样式
1641
- if (e.target !== this.$el.querySelector(`.el-textarea__inner`)) {
1642
- e.preventDefault();
1643
- }
1644
- this.inputRef.focus();
1645
- },
1646
- /* 内容容器聚焦 结束 */
1938
+ for (var i = 0; i < lastIdentifiers.length; i++) {
1939
+ var identifier = lastIdentifiers[i];
1940
+ var index = getIndexByIdentifier(identifier);
1941
+ stylesInDom[index].references--;
1942
+ }
1647
1943
 
1648
- /* 头部显示隐藏 开始 */
1649
- openHeader() {
1650
- if (!this.$slots.header) return false;
1651
- if (this.readOnly) return false;
1652
- this.visiableHeader = true;
1653
- },
1654
- closeHeader() {
1655
- if (!this.$slots.header) return;
1656
- if (this.readOnly) return;
1657
- this.visiableHeader = false;
1658
- },
1659
- /* 头部显示隐藏 结束 */
1944
+ var newLastIdentifiers = modulesToDom(newList, options);
1945
+
1946
+ for (var _i = 0; _i < lastIdentifiers.length; _i++) {
1947
+ var _identifier = lastIdentifiers[_i];
1660
1948
 
1661
- /* 使用浏览器自带的语音转文字功能 开始 */
1662
- startRecognition() {
1663
- if (this.readOnly || this.disabled) return; // 直接返回,不执行后续逻辑
1949
+ var _index = getIndexByIdentifier(_identifier);
1664
1950
 
1665
- if (this.hasOnRecordingChangeListener) {
1666
- this.speechLoading = true;
1667
- this.$emit('recording-change', true);
1668
- return;
1669
- }
1951
+ if (stylesInDom[_index].references === 0) {
1952
+ stylesInDom[_index].updater();
1670
1953
 
1671
- // 检查浏览器支持的 SpeechRecognition API
1672
- const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition || window.mozSpeechRecognition || window.msSpeechRecognition;
1673
- if (SpeechRecognition) {
1674
- try {
1675
- this.recognition = new SpeechRecognition();
1676
- this.recognition.continuous = true;
1677
- this.recognition.interimResults = true;
1678
- this.recognition.lang = 'zh-CN';
1679
- this.recognition.onresult = event => {
1680
- let results = '';
1681
- for (let i = 0; i <= event.resultIndex; i++) {
1682
- results += event.results[i][0].transcript;
1683
- }
1684
- if (!this.readOnly) {
1685
- this.internalValue = results;
1686
- }
1687
- };
1688
- this.recognition.onstart = () => {
1689
- this.speechLoading = true;
1690
- console.log('语音识别已启动');
1691
- };
1692
- this.recognition.onend = () => {
1693
- this.speechLoading = false;
1694
- console.log('语音识别已结束');
1695
- };
1696
- this.recognition.onerror = event => {
1697
- console.error('语音识别出错:', event.error);
1698
- this.speechLoading = false;
1699
- // 可以添加用户友好提示
1700
- if (event.error === 'not-allowed') {
1701
- console.error('用户拒绝了麦克风访问权限');
1702
- // 这里可以显示提示
1703
- }
1704
- };
1705
- this.recognition.start();
1706
- } catch (error) {
1707
- console.error('启动语音识别失败:', error);
1708
- this.speechLoading = false;
1709
- }
1710
- } else {
1711
- console.error('浏览器不支持 Web Speech API');
1712
- this.speechLoading = false;
1713
- }
1714
- },
1715
- stopRecognition() {
1716
- // 如果有自定义处理函数
1717
- if (this.hasOnRecordingChangeListener) {
1718
- this.speechLoading = false;
1719
- this.$emit('recordingChange', false);
1720
- return;
1721
- }
1722
- if (this.recognition) {
1723
- this.recognition.stop();
1724
- this.speechLoading = false;
1954
+ stylesInDom.splice(_index, 1);
1725
1955
  }
1726
- },
1727
- /* 使用浏览器自带的语音转文字功能 结束 */
1956
+ }
1728
1957
 
1729
- /* 输入框事件 开始 */
1730
- submit() {
1731
- if (this.readOnly || this.loading || this.disabled || this.isSubmitDisabled) return;
1732
- this.$emit('submit', this.internalValue);
1733
- },
1734
- // 取消按钮
1735
- cancel() {
1736
- if (this.readOnly) return;
1737
- this.$emit('cancel', this.internalValue);
1738
- },
1739
- clear() {
1740
- if (this.readOnly) return; // 直接返回,不执行后续逻辑
1741
- this.inputRef.clear();
1742
- this.internalValue = '';
1743
- },
1744
- // 在这判断组合键的回车键 (目前支持两种模式)
1745
- handleKeyDown(e) {
1746
- if (this.readOnly) return; // 直接返回,不执行后续逻辑
1958
+ lastIdentifiers = newLastIdentifiers;
1959
+ };
1960
+ };
1747
1961
 
1748
- if (this.submitType === 'enter') {
1749
- // 判断是否按下了 Shift + 回车键
1750
- if (e.shiftKey && e.keyCode === 13) {
1751
- e.preventDefault();
1752
- const cursorPosition = e.target.selectionStart; // 获取光标位置
1753
- const textBeforeCursor = this.internalValue.slice(0, cursorPosition); // 光标前的文本
1754
- const textAfterCursor = this.internalValue.slice(cursorPosition); // 光标后的文本
1755
- this.internalValue = `${textBeforeCursor}\n${textAfterCursor}`; // 插入换行符
1756
- this.$nextTick(() => {
1757
- e.target.setSelectionRange(cursorPosition + 1, cursorPosition + 1); // 更新光标位置
1758
- });
1759
- } else if (e.keyCode === 13 && !e.shiftKey) {
1760
- // 阻止掉 Enter 的默认换行行为
1761
- e.preventDefault();
1762
- // 触发提交功能
1763
- this.submit();
1764
- }
1765
- } else if (this.submitType === 'shiftEnter') {
1766
- // 判断是否按下了 Shift + 回车键
1767
- if (e.shiftKey && e.keyCode === 13) {
1768
- // 阻止掉 Enter 的默认换行行为
1769
- e.preventDefault();
1770
- // 触发提交功能
1771
- this.submit();
1772
- } else if (e.keyCode === 13 && !e.shiftKey) {
1773
- e.preventDefault();
1774
- const cursorPosition = e.target.selectionStart; // 获取光标位置
1775
- const textBeforeCursor = this.internalValue.slice(0, cursorPosition); // 光标前的文本
1776
- const textAfterCursor = this.internalValue.slice(cursorPosition); // 光标后的文本
1777
- this.internalValue = `${textBeforeCursor}\n${textAfterCursor}`; // 插入换行符
1778
- this.$nextTick(() => {
1779
- e.target.setSelectionRange(cursorPosition + 1, cursorPosition + 1); // 更新光标位置
1780
- });
1781
- }
1782
- }
1783
- },
1784
- /* 输入框事件 结束 */
1962
+ /***/ }),
1785
1963
 
1786
- /* 焦点 事件 开始 */
1787
- blur() {
1788
- if (this.readOnly) return false;
1789
- this.inputRef.blur();
1790
- },
1791
- focus(type = 'all') {
1792
- if (this.readOnly) return false;
1793
- if (type === 'all') {
1794
- this.inputRef.select();
1795
- } else if (type === 'start') {
1796
- this.focusToStart();
1797
- } else if (type === 'end') {
1798
- this.focusToEnd();
1799
- }
1800
- },
1801
- // 聚焦到文本最前方
1802
- focusToStart() {
1803
- if (this.inputRef) {
1804
- // 获取底层的 textarea DOM 元素
1805
- const textarea = this.inputRef.$el.querySelector('textarea');
1806
- if (textarea) {
1807
- textarea.focus(); // 聚焦到输入框
1808
- textarea.setSelectionRange(0, 0); // 设置光标到最前方
1809
- }
1810
- }
1811
- },
1812
- // 聚焦到文本最后方
1813
- focusToEnd() {
1814
- if (this.inputRef) {
1815
- // 获取底层的 textarea DOM 元素
1816
- const textarea = this.inputRef.$el.querySelector('textarea');
1817
- if (textarea) {
1818
- textarea.focus(); // 聚焦到输入框
1819
- textarea.setSelectionRange(this.internalValue.length, this.internalValue.length); // 设置光标到最后方
1820
- }
1821
- }
1822
- },
1823
- /* 焦点 事件 结束 */
1964
+ /***/ 31:
1965
+ /***/ (function(module, __webpack_exports__, __webpack_require__) {
1824
1966
 
1825
- // 处理输入法开始/结束 (此方法是拼音输入法的时候用)
1826
- handleCompositionStart() {
1827
- this.isComposing = true;
1828
- },
1829
- handleCompositionEnd() {
1830
- this.isComposing = false;
1967
+ "use strict";
1968
+ /* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(25);
1969
+
1970
+ /* harmony default export */ __webpack_exports__["a"] = ({
1971
+ methods: {
1972
+ elXt(...args) {
1973
+ return _index__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].t.apply(this, args);
1831
1974
  }
1832
- },
1833
- mounted() {
1834
- // 应用样式
1835
- this.$nextTick(() => {
1836
- // 获取组件引用
1837
- this.senderRef = this.$refs.senderRef;
1838
- this.inputRef = this.$refs.inputRef;
1839
- this.popoverRef = this.$refs.popoverRef;
1840
- this.applyInputStyles();
1841
- });
1842
- },
1843
- updated() {
1844
- // 确保在组件更新后重新应用样式
1845
- this.applyInputStyles();
1846
1975
  }
1847
1976
  });
1848
- // CONCATENATED MODULE: ./src/components/Sender/src/main.vue?vue&type=script&lang=js
1849
- /* harmony default export */ var src_mainvue_type_script_lang_js = (mainvue_type_script_lang_js);
1850
- // EXTERNAL MODULE: ./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib??vue-loader-options!./src/components/Sender/src/main.vue?vue&type=style&index=0&id=32628228&prod&lang=scss&scoped=true
1851
- var mainvue_type_style_index_0_id_32628228_prod_lang_scss_scoped_true = __webpack_require__(92);
1852
1977
 
1853
- // CONCATENATED MODULE: ./node_modules/style-loader/dist/cjs.js!./node_modules/css-loader/dist/cjs.js!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/sass-loader/dist/cjs.js!./node_modules/vue-loader/lib??vue-loader-options!./src/components/Sender/src/main.vue?vue&type=style&index=0&id=32628228&prod&lang=scss&scoped=true
1978
+ /***/ }),
1854
1979
 
1855
-
1980
+ /***/ 92:
1981
+ /***/ (function(module, __webpack_exports__, __webpack_require__) {
1982
+
1983
+ "use strict";
1984
+ /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2);
1985
+ /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__);
1986
+ // Imports
1856
1987
 
1857
- var mainvue_type_style_index_0_id_32628228_prod_lang_scss_scoped_true_options = {};
1988
+ var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default()(function(i){return i[1]});
1989
+ // Module
1990
+ ___CSS_LOADER_EXPORT___.push([module.i, ".el-x-send-button .el-button .el-icon-brush[data-v-74c70621]{transform:rotate(180deg)}", ""]);
1991
+ // Exports
1992
+ /* harmony default export */ __webpack_exports__["a"] = (___CSS_LOADER_EXPORT___);
1858
1993
 
1859
- mainvue_type_style_index_0_id_32628228_prod_lang_scss_scoped_true_options.insert = "head";
1860
- mainvue_type_style_index_0_id_32628228_prod_lang_scss_scoped_true_options.singleton = false;
1861
1994
 
1862
- var mainvue_type_style_index_0_id_32628228_prod_lang_scss_scoped_true_update = injectStylesIntoStyleTag_default()(mainvue_type_style_index_0_id_32628228_prod_lang_scss_scoped_true["a" /* default */], mainvue_type_style_index_0_id_32628228_prod_lang_scss_scoped_true_options);
1995
+ /***/ }),
1863
1996
 
1997
+ /***/ 93:
1998
+ /***/ (function(module, __webpack_exports__, __webpack_require__) {
1864
1999
 
2000
+ "use strict";
2001
+ /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2);
2002
+ /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__);
2003
+ // Imports
1865
2004
 
1866
- /* harmony default export */ var src_mainvue_type_style_index_0_id_32628228_prod_lang_scss_scoped_true = (mainvue_type_style_index_0_id_32628228_prod_lang_scss_scoped_true["a" /* default */].locals || {});
1867
- // CONCATENATED MODULE: ./src/components/Sender/src/main.vue?vue&type=style&index=0&id=32628228&prod&lang=scss&scoped=true
2005
+ var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default()(function(i){return i[1]});
2006
+ // Module
2007
+ ___CSS_LOADER_EXPORT___.push([module.i, "[data-v-46826223]:root{--color-primary: #409eff;--color-success: #67c23a;--color-warning: #e6a23c;--color-danger: #f56c6c;--color-info: #909399}.el-x-send-button[data-v-46826223]{height:32px}.el-x-send-button .el-button[data-v-46826223]{padding:0;width:32px;height:32px}.el-x-send-button .loading-svg[data-v-46826223]{color:#409eff;width:100%}", ""]);
2008
+ // Exports
2009
+ /* harmony default export */ __webpack_exports__["a"] = (___CSS_LOADER_EXPORT___);
1868
2010
 
1869
- // CONCATENATED MODULE: ./src/components/Sender/src/main.vue
1870
2011
 
2012
+ /***/ }),
1871
2013
 
2014
+ /***/ 94:
2015
+ /***/ (function(module, __webpack_exports__, __webpack_require__) {
1872
2016
 
2017
+ "use strict";
2018
+ /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2);
2019
+ /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__);
2020
+ // Imports
1873
2021
 
2022
+ var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default()(function(i){return i[1]});
2023
+ // Module
2024
+ ___CSS_LOADER_EXPORT___.push([module.i, "[data-v-26ea2934]:root{--color-primary: #409eff;--color-success: #67c23a;--color-warning: #e6a23c;--color-danger: #f56c6c;--color-info: #909399}.el-x-send-button .el-button[data-v-26ea2934]{padding:0;width:32px;height:32px}.el-x-send-button .loading-svg[data-v-26ea2934]{color:#409eff;width:16px}", ""]);
2025
+ // Exports
2026
+ /* harmony default export */ __webpack_exports__["a"] = (___CSS_LOADER_EXPORT___);
1874
2027
 
1875
2028
 
1876
- /* normalize component */
2029
+ /***/ }),
1877
2030
 
1878
- var main_component = Object(componentNormalizer["a" /* default */])(
1879
- src_mainvue_type_script_lang_js,
1880
- render,
1881
- staticRenderFns,
1882
- false,
1883
- null,
1884
- "32628228",
1885
- null
1886
-
1887
- )
2031
+ /***/ 95:
2032
+ /***/ (function(module, __webpack_exports__, __webpack_require__) {
1888
2033
 
1889
- /* harmony default export */ var main = (main_component.exports);
1890
- // CONCATENATED MODULE: ./src/components/Sender/index.js
2034
+ "use strict";
2035
+ /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2);
2036
+ /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__);
2037
+ // Imports
1891
2038
 
2039
+ var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default()(function(i){return i[1]});
2040
+ // Module
2041
+ ___CSS_LOADER_EXPORT___.push([module.i, "[data-v-1822655c]:root{--color-primary: #409eff;--color-success: #67c23a;--color-warning: #e6a23c;--color-danger: #f56c6c;--color-info: #909399}.el-x-sender[data-v-1822655c]{width:100%;display:flex;flex-direction:column;position:relative;box-sizing:border-box;box-shadow:0 1px 2px 0 rgba(0,0,0,.03),0 1px 6px -1px rgba(0,0,0,.02),0 2px 4px 0 rgba(0,0,0,.02);transition:background .3s;border-radius:calc(4px * 2);border-color:#dcdfe6;border-width:0;border-style:solid;transition:width var(--el-x-sender-header-animation-duration)}.el-x-sender[data-v-1822655c]:after{content:\"\";position:absolute;inset:0;pointer-events:none;transition:border-color .3s;border-radius:inherit;border-style:inherit;border-color:inherit;border-width:1px}.el-x-sender[data-v-1822655c]:focus-within{box-shadow:0 2px 4px rgba(0,0,0,.12),0 0 6px rgba(0,0,0,.04);border-color:#409eff}.el-x-sender[data-v-1822655c]:focus-within::after{border-width:2px}.el-x-sender .el-x-sender-header-wrap[data-v-1822655c]{display:flex;flex-direction:column;gap:8px;width:100%;margin:0;padding:0}.el-x-sender .slide-enter-active[data-v-1822655c],.el-x-sender .slide-leave-active[data-v-1822655c]{height:calc-size(max-content, size);opacity:1;transition:height var(--el-x-sender-header-animation-duration),opacity var(--el-x-sender-header-animation-duration),border var(--el-x-sender-header-animation-duration);overflow:hidden}.el-x-sender .slide-enter[data-v-1822655c],.el-x-sender .slide-leave-to[data-v-1822655c]{height:0;opacity:0 !important}.el-x-sender .slide-enter-to[data-v-1822655c],.el-x-sender .slide-leave[data-v-1822655c]{height:calc-size(max-content, size);opacity:1}.el-x-sender .slide-enter-active .el-x-sender-header-wrap[data-v-1822655c],.el-x-sender .slide-leave-active .el-x-sender-header-wrap[data-v-1822655c]{min-height:0;overflow:hidden}.el-x-sender .el-x-sender-header[data-v-1822655c]{border-bottom-width:1px;border-bottom-style:solid;border-bottom-color:#dcdfe6}.el-x-sender .el-x-sender-content[data-v-1822655c]{display:flex;gap:8px;width:100%;padding-block:12px;padding-inline-start:16px;padding-inline-end:12px;box-sizing:border-box;align-items:flex-end}.el-x-sender .el-x-sender-content .el-x-sender-prefix[data-v-1822655c]{flex:none}.el-x-sender .el-x-sender-content .el-x-sender-input[data-v-1822655c]{height:100%;display:flex;align-items:center;align-self:center}.el-x-sender .el-x-sender-content .el-x-sender-input[data-v-1822655c] .el-textarea__inner{padding:0;margin:0;color:#303133;font-size:14px;line-height:24px;list-style:none;position:relative;display:inline-block;box-sizing:border-box;width:100%;min-width:0;max-width:100%;height:auto;min-height:auto !important;border-radius:0;border:none;flex:auto;align-self:center;vertical-align:bottom;resize:none;background-color:transparent;transition:all .3s,height 0s;box-shadow:none !important}.el-x-sender .el-x-sender-content .el-x-sender-action-list-presets[data-v-1822655c]{display:flex;gap:8px;flex-direction:row-reverse}.el-x-sender .content-variant-updown[data-v-1822655c]{display:flex;flex-direction:column;align-items:initial}.el-x-sender .content-variant-updown .el-x-sender-updown-wrap[data-v-1822655c]{display:flex;justify-content:space-between;gap:8px}.el-x-sender .content-variant-updown .el-x-sender-updown-wrap .el-x-sender-prefix[data-v-1822655c]{flex:initial}.el-x-sender .content-variant-updown .el-x-sender-updown-wrap .el-x-sender-action-list[data-v-1822655c]{margin-left:auto}.el-x-sender .el-x-sender-footer[data-v-1822655c]{border-top-width:1px;border-top-style:solid;border-top-color:#dcdfe6}.el-x-sender-disabled[data-v-1822655c]{background-color:#f5f7fa;pointer-events:none}[data-v-1822655c] .el-x-sender-trigger-popover{max-width:calc(100% - 54px) !important;width:var(--el-x-sender-trigger-popover-width) !important;margin-left:var(--el-x-sender-trigger-popover-left) !important}", ""]);
2042
+ // Exports
2043
+ /* harmony default export */ __webpack_exports__["a"] = (___CSS_LOADER_EXPORT___);
1892
2044
 
1893
- /* istanbul ignore next */
1894
- main.install = function (Vue) {
1895
- Vue.component(main.name, main);
1896
- };
1897
- /* harmony default export */ var Sender = __webpack_exports__["default"] = (main);
1898
2045
 
1899
2046
  /***/ })
1900
2047