vue-element-ui-x 1.0.42-beta → 1.0.43-beta

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 (89) hide show
  1. package/lib/index.common.js +1 -1
  2. package/lib/index.esm.js +1 -1
  3. package/lib/index.ssr.js +90 -0
  4. package/lib/index.umd.js +1 -1
  5. package/package.json +5 -5
  6. package/src/components/Attachments/index.js +0 -8
  7. package/src/components/Attachments/src/main.vue +0 -529
  8. package/src/components/Bubble/index.js +0 -6
  9. package/src/components/Bubble/src/main.vue +0 -288
  10. package/src/components/BubbleList/index.js +0 -8
  11. package/src/components/BubbleList/src/loading.vue +0 -75
  12. package/src/components/BubbleList/src/main.vue +0 -444
  13. package/src/components/Conversations/index.js +0 -8
  14. package/src/components/Conversations/src/components/item.vue +0 -350
  15. package/src/components/Conversations/src/main.vue +0 -587
  16. package/src/components/FilesCard/index.js +0 -8
  17. package/src/components/FilesCard/src/fileSvg/audio.vue +0 -38
  18. package/src/components/FilesCard/src/fileSvg/changeFileName.bat +0 -18
  19. package/src/components/FilesCard/src/fileSvg/code.vue +0 -35
  20. package/src/components/FilesCard/src/fileSvg/database.vue +0 -94
  21. package/src/components/FilesCard/src/fileSvg/excel.vue +0 -38
  22. package/src/components/FilesCard/src/fileSvg/file.vue +0 -40
  23. package/src/components/FilesCard/src/fileSvg/image.vue +0 -40
  24. package/src/components/FilesCard/src/fileSvg/index.js +0 -46
  25. package/src/components/FilesCard/src/fileSvg/link.vue +0 -54
  26. package/src/components/FilesCard/src/fileSvg/mark.vue +0 -38
  27. package/src/components/FilesCard/src/fileSvg/pdf.vue +0 -38
  28. package/src/components/FilesCard/src/fileSvg/ppt.vue +0 -38
  29. package/src/components/FilesCard/src/fileSvg/three.vue +0 -38
  30. package/src/components/FilesCard/src/fileSvg/txt.vue +0 -38
  31. package/src/components/FilesCard/src/fileSvg/unknown.vue +0 -54
  32. package/src/components/FilesCard/src/fileSvg/video.vue +0 -38
  33. package/src/components/FilesCard/src/fileSvg/word.vue +0 -38
  34. package/src/components/FilesCard/src/fileSvg/zip.vue +0 -38
  35. package/src/components/FilesCard/src/main.vue +0 -403
  36. package/src/components/FilesCard/src/options.js +0 -18
  37. package/src/components/Prompts/index.js +0 -8
  38. package/src/components/Prompts/src/main.vue +0 -248
  39. package/src/components/Sender/index.js +0 -8
  40. package/src/components/Sender/src/components/ClearButton.vue +0 -28
  41. package/src/components/Sender/src/components/Loading.vue +0 -53
  42. package/src/components/Sender/src/components/LoadingButton.vue +0 -37
  43. package/src/components/Sender/src/components/SendButton.vue +0 -26
  44. package/src/components/Sender/src/components/SpeechButton.vue +0 -24
  45. package/src/components/Sender/src/components/SpeechLoading.vue +0 -87
  46. package/src/components/Sender/src/components/SpeechLoadingButton.vue +0 -41
  47. package/src/components/Sender/src/main.vue +0 -803
  48. package/src/components/Thinking/index.js +0 -8
  49. package/src/components/Thinking/src/main.vue +0 -199
  50. package/src/components/ThoughtChain/index.js +0 -8
  51. package/src/components/ThoughtChain/src/main.vue +0 -291
  52. package/src/components/Typewriter/index.js +0 -8
  53. package/src/components/Typewriter/src/main.vue +0 -255
  54. package/src/components/Welcome/index.js +0 -8
  55. package/src/components/Welcome/src/main.vue +0 -151
  56. package/src/index.js +0 -104
  57. package/src/locale/index.js +0 -97
  58. package/src/locale/lang/ar.js +0 -18
  59. package/src/locale/lang/de.js +0 -18
  60. package/src/locale/lang/en.js +0 -18
  61. package/src/locale/lang/es.js +0 -18
  62. package/src/locale/lang/fr.js +0 -18
  63. package/src/locale/lang/index.js +0 -62
  64. package/src/locale/lang/it.js +0 -18
  65. package/src/locale/lang/ja.js +0 -18
  66. package/src/locale/lang/ko.js +0 -18
  67. package/src/locale/lang/pt-br.js +0 -18
  68. package/src/locale/lang/ru-RU.js +0 -18
  69. package/src/locale/lang/zh-CN.js +0 -18
  70. package/src/locale/lang/zh-TW.js +0 -18
  71. package/src/locale/mixin.js +0 -9
  72. package/src/mixins/index.js +0 -49
  73. package/src/mixins/recordMixin.js +0 -117
  74. package/src/mixins/sendMixin.js +0 -450
  75. package/src/mixins/streamMixin.js +0 -497
  76. package/src/styles/Attachments.scss +0 -236
  77. package/src/styles/Bubble.scss +0 -158
  78. package/src/styles/BubbleList.scss +0 -148
  79. package/src/styles/Conversations.scss +0 -283
  80. package/src/styles/FilesCard.scss +0 -222
  81. package/src/styles/Prompts.scss +0 -197
  82. package/src/styles/Sender.scss +0 -211
  83. package/src/styles/Thinking.scss +0 -142
  84. package/src/styles/ThoughtChain.scss +0 -113
  85. package/src/styles/Typewriter.scss +0 -66
  86. package/src/styles/Welcome.scss +0 -283
  87. package/src/theme/var.scss +0 -183
  88. package/src/utils/index.js +0 -199
  89. package/src/utils/scrollDetector.js +0 -34
@@ -1,350 +0,0 @@
1
- <template>
2
- <li
3
- :key="item.key"
4
- class="el-x-conversation-item"
5
- :class="{
6
- disabled: item.disabled,
7
- active: active,
8
- hovered: item.disabled ? false : isHovered,
9
- 'menu-opened': isShowMenuBtn,
10
- }"
11
- :style="{
12
- ...itemsStyle,
13
- ...(isHovered ? itemsHoverStyle : {}),
14
- ...(isShowMenuBtn ? itemsMenuOpenedStyle : {}),
15
- ...(active ? itemsActiveStyle : {}),
16
- }"
17
- @click="handleClick(item.key)"
18
- @mouseenter="handleMouseEnter"
19
- @mouseleave="handleMouseLeave"
20
- >
21
- <div class="el-x-conversation-content">
22
- <!-- 标签区域 - 通过插槽自定义 -->
23
- <div class="el-x-conversation-content-main">
24
- <slot name="label">
25
- <!-- 前缀图标 -->
26
- <span
27
- v-if="prefixIconRender"
28
- class="el-x-conversation-prefix-icon"
29
- >
30
- <i :class="prefixIcon"></i>
31
- </span>
32
-
33
- <!-- 标签和时间戳 -->
34
- <div class="el-x-conversation-label-container">
35
- <el-tooltip
36
- v-if="showTooltip && isTextOverflow(item.label)"
37
- :content="item.label"
38
- :placement="tooltipPlacement"
39
- :offset="tooltipOffset"
40
- effect="dark"
41
- >
42
- <span
43
- class="el-x-conversation-label"
44
- :class="{ 'text-gradient': isTextOverflow(item.label) }"
45
- :style="labelStyle"
46
- >
47
- {{ item.label }}
48
- </span>
49
- </el-tooltip>
50
- <span
51
- v-else
52
- class="el-x-conversation-label"
53
- :class="{ 'text-gradient': isTextOverflow(item.label) }"
54
- :style="labelStyle"
55
- >
56
- {{ item.label }}
57
- </span>
58
- </div>
59
- </slot>
60
- </div>
61
-
62
- <!-- 后缀图标 -->
63
- <span
64
- v-if="suffixIcon"
65
- class="el-x-conversation-suffix-icon"
66
- >
67
- <i :class="suffixIcon"></i>
68
- </span>
69
-
70
- <!-- 菜单区域 - 只在hover或active状态下显示 -->
71
- <div v-if="shouldShowMenu && showBuiltInMenu">
72
- <div
73
- v-if="menu && menu.length"
74
- ref="menuButtonRef"
75
- class="el-x-conversation-dropdown-more"
76
- @click.stop
77
- >
78
- <el-dropdown
79
- trigger="click"
80
- :placement="menuPlacement"
81
- :disabled="item.disabled"
82
- @visible-change="updateMenuStatus"
83
- @command="onMenuCommand"
84
- >
85
- <span class="el-dropdown-link">
86
- <slot
87
- name="more-filled"
88
- :item="item"
89
- :is-hovered="item.disabled ? false : isHovered"
90
- :is-active="active"
91
- :is-menu-opened="isShowMenuBtn"
92
- :is-disabled="item.disabled"
93
- >
94
- <i class="el-icon-more el-x-conversation-dropdown-more-icon"></i>
95
- </slot>
96
- </span>
97
- <el-dropdown-menu
98
- slot="dropdown"
99
- :style="mergedMenuStyle"
100
- >
101
- <slot name="menu">
102
- <el-dropdown-item
103
- v-for="menuItem in menu"
104
- :key="menuItem.key"
105
- :icon="menuItem.icon"
106
- :disabled="menuItem.disabled"
107
- :divided="menuItem.divided"
108
- :command="menuItem.command"
109
- :style="menuItem.menuItemStyle"
110
- >
111
- {{ menuItem.label }}
112
- </el-dropdown-item>
113
- </slot>
114
- </el-dropdown-menu>
115
- </el-dropdown>
116
- </div>
117
- </div>
118
- </div>
119
- </li>
120
- </template>
121
-
122
- <script>
123
- export default {
124
- name: 'ConversationsItem',
125
-
126
- props: {
127
- item: {
128
- type: Object,
129
- required: true,
130
- },
131
- itemsStyle: {
132
- type: Object,
133
- default: () => ({}),
134
- },
135
- itemsHoverStyle: {
136
- type: Object,
137
- default: () => ({}),
138
- },
139
- itemsActiveStyle: {
140
- type: Object,
141
- default: () => ({}),
142
- },
143
- itemsMenuOpenedStyle: {
144
- type: Object,
145
- default: () => ({}),
146
- },
147
- prefixIcon: {
148
- type: [String, Object],
149
- default: null,
150
- },
151
- suffixIcon: {
152
- type: [String, Object],
153
- default: null,
154
- },
155
- showTooltip: {
156
- type: Boolean,
157
- default: false,
158
- },
159
- labelMaxWidth: {
160
- type: Number,
161
- default: undefined,
162
- },
163
- menu: {
164
- type: Array,
165
- default: () => [],
166
- },
167
- showBuiltInMenu: {
168
- type: Boolean,
169
- default: false,
170
- },
171
- tooltipPlacement: {
172
- type: String,
173
- default: 'top',
174
- },
175
- tooltipOffset: {
176
- type: Number,
177
- default: 12,
178
- },
179
- menuPlacement: {
180
- type: String,
181
- default: 'bottom-start',
182
- },
183
-
184
- menuStyle: {
185
- type: Object,
186
- default: () => ({}),
187
- },
188
- menuShowArrow: {
189
- type: Boolean,
190
- default: false,
191
- },
192
- active: {
193
- type: Boolean,
194
- default: false,
195
- },
196
- activeKey: {
197
- type: [String, Number],
198
- default: '',
199
- },
200
- },
201
-
202
- data() {
203
- return {
204
- isHovered: false,
205
- isShowMenuBtn: false,
206
- menuButtonRef: null,
207
- };
208
- },
209
-
210
- computed: {
211
- prefixIconRender() {
212
- return this.prefixIcon;
213
- },
214
-
215
- suffixIconRender() {
216
- return this.suffixIcon;
217
- },
218
-
219
- isTextOverflow() {
220
- return (label = '') => {
221
- // 如果没有设置labelMaxWidth,直接返回false
222
- if (!this.labelMaxWidth) return false;
223
-
224
- // 创建一个临时的span元素来测量文本宽度
225
- const span = document.createElement('span');
226
- span.style.visibility = 'hidden';
227
- span.style.position = 'absolute';
228
- span.style.whiteSpace = 'nowrap';
229
- span.style.fontSize = '14px'; // 与CSS中定义的字体大小一致
230
- span.textContent = label;
231
-
232
- document.body.appendChild(span);
233
- const textWidth = span.offsetWidth;
234
- document.body.removeChild(span);
235
-
236
- // 如果文本宽度大于最大宽度,则返回true表示溢出
237
- return textWidth > this.labelMaxWidth;
238
- };
239
- },
240
-
241
- labelStyle() {
242
- // 如果有labelMaxWidth,设置最大宽度并使用截断样式
243
- if (this.labelMaxWidth) {
244
- return {
245
- maxWidth: `${this.labelMaxWidth}px`,
246
- overflow: 'hidden',
247
- };
248
- }
249
- // 否则返回空对象
250
- return {};
251
- },
252
-
253
- shouldShowMenu() {
254
- return this.isHovered || this.active || this.isShowMenuBtn;
255
- },
256
-
257
- mergedMenuStyle() {
258
- return {
259
- ...this.menuStyle,
260
- };
261
- },
262
- },
263
-
264
- methods: {
265
- handleMouseEnter() {
266
- this.isHovered = true;
267
- },
268
-
269
- handleMouseLeave() {
270
- this.isHovered = false;
271
- },
272
-
273
- handleClick(key) {
274
- this.$emit('click', key);
275
- },
276
-
277
- // 辅助函数:驼峰式转短横线格式
278
- camelToKebab(str) {
279
- return str.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();
280
- },
281
-
282
- // 当菜单显示、隐藏时候触发
283
- updateMenuStatus(isOpen) {
284
- this.isShowMenuBtn = isOpen;
285
- if (isOpen) {
286
- // 延迟执行,确保菜单已经渲染完成
287
- // 展开菜单时候 决定隐藏箭头
288
- this.$nextTick(() => {
289
- // 获取页面的所有 el-dropdown-menu el-popper 组件
290
- const dropdownMenu = document.querySelectorAll('.el-dropdown-menu.el-popper');
291
-
292
- if (dropdownMenu.length === 0) {
293
- return;
294
- }
295
- dropdownMenu.forEach(dropdownMenuItem => {
296
- // 将它子元素中所有 popper__arrow 元素的 display 设置为 none
297
- // 如果 dropdownMenuItem 存在,且display 不为 none
298
- if (dropdownMenuItem && dropdownMenuItem.style.display !== 'none') {
299
- // 隐藏箭头
300
- const arrows = dropdownMenuItem.querySelectorAll('.popper__arrow');
301
- if (arrows.length === 0) {
302
- return;
303
- }
304
- arrows.forEach(arrow => {
305
- arrow.style.display = this.menuShowArrow ? 'block' : 'none';
306
- });
307
-
308
- // 设置 .el-dropdown-menu__item 悬停样式
309
- const items = dropdownMenuItem.querySelectorAll('.el-dropdown-menu__item');
310
- if (items.length === 0) {
311
- return;
312
- }
313
- items.forEach((item, index) => {
314
- if (!this.menu || this.menu.length === 0) {
315
- return;
316
- }
317
- const menuItemHoverStyle = this.menu[index].menuItemHoverStyle || {};
318
- // 生成固定类名(基于索引)
319
- const className = `custom-hover-${index}`;
320
- item.classList.add(className);
321
- // 动态插入样式规则
322
- const style = document.createElement('style');
323
- style.textContent = `
324
- .${className}:hover,
325
- .${className}:focus {
326
- ${Object.entries(menuItemHoverStyle)
327
- .map(([prop, val]) => `${this.camelToKebab(prop)}: ${val} !important;`)
328
- .join(' ')}
329
- }
330
- `;
331
- document.head.appendChild(style);
332
- });
333
- }
334
- });
335
- });
336
- }
337
- },
338
-
339
- // 菜单命令处理
340
- onMenuCommand(command) {
341
- // 如果已经有自定义插槽,则不执行这个函数
342
- // 菜单的所有内容由开发者自行处理
343
- if (this.$scopedSlots.menu) {
344
- return false;
345
- }
346
- this.$emit('menu-command', command, this.item);
347
- },
348
- },
349
- };
350
- </script>