vue-element-ui-x 0.2.2 → 1.0.1

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