vue-element-ui-x 0.1.9-beta → 0.1.10-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 (80) hide show
  1. package/lib/components/Attachments/index.js +2 -2
  2. package/lib/components/Bubble/index.js +47 -34
  3. package/lib/components/BubbleList/index.js +57 -49
  4. package/lib/components/Conversations/index.js +27 -64
  5. package/lib/components/FilesCard/index.js +1 -1
  6. package/lib/components/Prompts/index.js +21 -21
  7. package/lib/components/Sender/index.js +4 -4
  8. package/lib/components/Think/index.js +1 -1
  9. package/lib/components/Thinking/index.js +1 -1
  10. package/lib/components/ThoughtChain/index.js +47 -34
  11. package/lib/components/Typewriter/index.js +46 -33
  12. package/lib/components/Welcome/index.js +1 -1
  13. package/lib/index.common.js +1 -1
  14. package/lib/index.esm.js +1 -1
  15. package/lib/index.js +220 -160
  16. package/lib/index.umd.js +1 -1
  17. package/lib/mixins/index.js +105 -16
  18. package/package.json +1 -1
  19. package/src/components/Attachments/index.js +8 -8
  20. package/src/components/Bubble/index.js +6 -6
  21. package/src/components/Bubble/src/main.vue +299 -299
  22. package/src/components/BubbleList/index.js +8 -8
  23. package/src/components/BubbleList/src/loading.vue +75 -75
  24. package/src/components/BubbleList/src/main.vue +461 -466
  25. package/src/components/Conversations/index.js +8 -8
  26. package/src/components/Conversations/src/components/item.vue +13 -34
  27. package/src/components/Conversations/src/main.vue +4 -18
  28. package/src/components/FilesCard/index.js +8 -8
  29. package/src/components/FilesCard/src/fileSvg/audio.vue +38 -38
  30. package/src/components/FilesCard/src/fileSvg/code.vue +35 -35
  31. package/src/components/FilesCard/src/fileSvg/database.vue +94 -94
  32. package/src/components/FilesCard/src/fileSvg/excel.vue +38 -38
  33. package/src/components/FilesCard/src/fileSvg/file.vue +40 -40
  34. package/src/components/FilesCard/src/fileSvg/image.vue +40 -40
  35. package/src/components/FilesCard/src/fileSvg/index.js +46 -46
  36. package/src/components/FilesCard/src/fileSvg/link.vue +54 -54
  37. package/src/components/FilesCard/src/fileSvg/mark.vue +38 -38
  38. package/src/components/FilesCard/src/fileSvg/pdf.vue +38 -38
  39. package/src/components/FilesCard/src/fileSvg/ppt.vue +38 -38
  40. package/src/components/FilesCard/src/fileSvg/three.vue +38 -38
  41. package/src/components/FilesCard/src/fileSvg/txt.vue +38 -38
  42. package/src/components/FilesCard/src/fileSvg/unknown.vue +54 -54
  43. package/src/components/FilesCard/src/fileSvg/video.vue +38 -38
  44. package/src/components/FilesCard/src/fileSvg/word.vue +38 -38
  45. package/src/components/FilesCard/src/fileSvg/zip.vue +38 -38
  46. package/src/components/FilesCard/src/options.js +18 -18
  47. package/src/components/Prompts/index.js +8 -8
  48. package/src/components/Prompts/src/main.vue +248 -248
  49. package/src/components/Sender/index.js +8 -8
  50. package/src/components/Sender/src/components/ClearButton.vue +28 -28
  51. package/src/components/Sender/src/components/Loading.vue +53 -53
  52. package/src/components/Sender/src/components/LoadingButton.vue +39 -39
  53. package/src/components/Sender/src/components/SendButton.vue +26 -26
  54. package/src/components/Sender/src/components/SpeechButton.vue +24 -24
  55. package/src/components/Sender/src/components/SpeechLoading.vue +87 -87
  56. package/src/components/Sender/src/components/SpeechLoadingButton.vue +43 -43
  57. package/src/components/Think/index.js +8 -8
  58. package/src/components/Think/src/main.vue +190 -190
  59. package/src/components/Thinking/index.js +8 -8
  60. package/src/components/ThoughtChain/index.js +8 -8
  61. package/src/components/Typewriter/index.js +8 -8
  62. package/src/components/Typewriter/src/main.vue +10 -2
  63. package/src/components/Welcome/index.js +8 -8
  64. package/src/components/Welcome/src/main.vue +151 -151
  65. package/src/mixins/recordMixin.js +0 -1
  66. package/src/mixins/sendMixin.js +104 -11
  67. package/src/mixins/streamMixin.js +3 -5
  68. package/src/styles/Attachments.scss +236 -236
  69. package/src/styles/Bubble.scss +157 -157
  70. package/src/styles/BubbleList.scss +148 -148
  71. package/src/styles/Conversations.scss +260 -260
  72. package/src/styles/FilesCard.scss +221 -221
  73. package/src/styles/Prompts.scss +195 -195
  74. package/src/styles/Sender.scss +199 -199
  75. package/src/styles/Think.scss +134 -134
  76. package/src/styles/ThoughtChain.scss +113 -113
  77. package/src/styles/Typewriter.scss +66 -66
  78. package/src/theme/var.scss +72 -72
  79. package/src/styles/button.scss +0 -302
  80. package/src/styles/var.scss +0 -1052
@@ -1,190 +1,190 @@
1
- <template>
2
- <div
3
- class="el-x-think"
4
- :style="{
5
- '--el-x-think-button-width': buttonWidth,
6
- '--el-x-think-animation-duration': duration,
7
- '--el-x-think-content-wrapper-width': maxWidth,
8
- '--el-x-think-content-wrapper-background-color': backgroundColor,
9
- '--el-x-think-content-wrapper-color': color,
10
- }"
11
- >
12
- <!-- 触发按钮 -->
13
- <button
14
- class="trigger"
15
- :class="[status, { disabled: !disabled }]"
16
- :disabled="disabled"
17
- @click="changeExpand"
18
- >
19
- <span class="status-icon">
20
- <slot
21
- name="status-icon"
22
- :status="status"
23
- >
24
- <i
25
- v-if="status === 'thinking'"
26
- class="is-loading el-icon-center el-icon-loading"
27
- ></i>
28
-
29
- <i
30
- v-if="status === 'start'"
31
- class="el-icon-center start-color el-icon-opportunity"
32
- ></i>
33
-
34
- <i
35
- v-if="status === 'end'"
36
- class="el-icon-center end-color el-icon-success"
37
- ></i>
38
-
39
- <i
40
- v-if="status === 'error'"
41
- class="el-icon-center error-color el-icon-circle-close"
42
- ></i>
43
- </slot>
44
- </span>
45
-
46
- <span class="label">
47
- <slot
48
- name="label"
49
- :status="status"
50
- >
51
- {{
52
- status === 'thinking'
53
- ? '思考中...'
54
- : status === 'error'
55
- ? '思考遇到问题'
56
- : status === 'end'
57
- ? '思考完成'
58
- : '开始思考'
59
- }}
60
- </slot>
61
- </span>
62
-
63
- <transition name="rotate">
64
- <span
65
- v-if="!disabled"
66
- class="arrow el-icon-center"
67
- :class="{ expanded: isExpanded }"
68
- >
69
- <slot name="arrow">
70
- <i class="el-icon-center el-icon-arrow-up"></i>
71
- </slot>
72
- </span>
73
- </transition>
74
- </button>
75
-
76
- <!-- 内容区域 -->
77
- <transition name="slide">
78
- <div
79
- v-show="isExpanded"
80
- v-if="displayedContent"
81
- class="content-wrapper"
82
- :class="{ 'error-state': status === 'error' }"
83
- >
84
- <div class="content">
85
- <slot
86
- v-if="status !== 'error'"
87
- name="content"
88
- :content="displayedContent"
89
- >
90
- <pre>{{ displayedContent }}</pre>
91
- </slot>
92
-
93
- <slot
94
- v-else
95
- name="error"
96
- :error-content="displayedContent"
97
- >
98
- <div class="error-message">{{ displayedContent }}</div>
99
- </slot>
100
- </div>
101
- </div>
102
- </transition>
103
- </div>
104
- </template>
105
-
106
- <script>
107
- export default {
108
- name: 'ElXThink',
109
- props: {
110
- content: {
111
- type: String,
112
- default: '',
113
- },
114
- modelValue: {
115
- type: Boolean,
116
- default: true,
117
- },
118
- status: {
119
- type: String,
120
- default: 'start',
121
- validator: function (value) {
122
- return ['start', 'thinking', 'end', 'error'].indexOf(value) !== -1;
123
- },
124
- },
125
- disabled: {
126
- type: Boolean,
127
- default: false,
128
- },
129
- autoCollapse: {
130
- type: Boolean,
131
- default: false,
132
- },
133
- buttonWidth: {
134
- type: String,
135
- default: '160px',
136
- },
137
- duration: {
138
- type: String,
139
- default: '0.2s',
140
- },
141
- maxWidth: {
142
- type: String,
143
- default: '500px',
144
- },
145
- backgroundColor: {
146
- type: String,
147
- default: '#fcfcfc',
148
- },
149
- color: {
150
- type: String,
151
- default: 'var(--el-color-info)',
152
- },
153
- },
154
- data() {
155
- return {
156
- isExpanded: this.modelValue,
157
- };
158
- },
159
- computed: {
160
- displayedContent() {
161
- return this.status === 'error' ? '思考过程中出现错误' : this.content;
162
- },
163
- },
164
- watch: {
165
- modelValue(newVal) {
166
- this.isExpanded = newVal;
167
- },
168
- status(newVal) {
169
- if (newVal === 'end' && this.autoCollapse) {
170
- this.isExpanded = false;
171
- }
172
- },
173
- },
174
- methods: {
175
- changeExpand() {
176
- if (this.disabled) return;
177
- this.isExpanded = !this.isExpanded;
178
- this.$emit('change', {
179
- value: this.isExpanded,
180
- status: this.status,
181
- });
182
- this.$emit('update:expanded', this.isExpanded);
183
- },
184
- },
185
- };
186
- </script>
187
-
188
- <style lang="scss">
189
- @import '../../../styles/Think.scss';
190
- </style>
1
+ <template>
2
+ <div
3
+ class="el-x-think"
4
+ :style="{
5
+ '--el-x-think-button-width': buttonWidth,
6
+ '--el-x-think-animation-duration': duration,
7
+ '--el-x-think-content-wrapper-width': maxWidth,
8
+ '--el-x-think-content-wrapper-background-color': backgroundColor,
9
+ '--el-x-think-content-wrapper-color': color,
10
+ }"
11
+ >
12
+ <!-- 触发按钮 -->
13
+ <button
14
+ class="trigger"
15
+ :class="[status, { disabled: !disabled }]"
16
+ :disabled="disabled"
17
+ @click="changeExpand"
18
+ >
19
+ <span class="status-icon">
20
+ <slot
21
+ name="status-icon"
22
+ :status="status"
23
+ >
24
+ <i
25
+ v-if="status === 'thinking'"
26
+ class="is-loading el-icon-center el-icon-loading"
27
+ ></i>
28
+
29
+ <i
30
+ v-if="status === 'start'"
31
+ class="el-icon-center start-color el-icon-opportunity"
32
+ ></i>
33
+
34
+ <i
35
+ v-if="status === 'end'"
36
+ class="el-icon-center end-color el-icon-success"
37
+ ></i>
38
+
39
+ <i
40
+ v-if="status === 'error'"
41
+ class="el-icon-center error-color el-icon-circle-close"
42
+ ></i>
43
+ </slot>
44
+ </span>
45
+
46
+ <span class="label">
47
+ <slot
48
+ name="label"
49
+ :status="status"
50
+ >
51
+ {{
52
+ status === 'thinking'
53
+ ? '思考中...'
54
+ : status === 'error'
55
+ ? '思考遇到问题'
56
+ : status === 'end'
57
+ ? '思考完成'
58
+ : '开始思考'
59
+ }}
60
+ </slot>
61
+ </span>
62
+
63
+ <transition name="rotate">
64
+ <span
65
+ v-if="!disabled"
66
+ class="arrow el-icon-center"
67
+ :class="{ expanded: isExpanded }"
68
+ >
69
+ <slot name="arrow">
70
+ <i class="el-icon-center el-icon-arrow-up"></i>
71
+ </slot>
72
+ </span>
73
+ </transition>
74
+ </button>
75
+
76
+ <!-- 内容区域 -->
77
+ <transition name="slide">
78
+ <div
79
+ v-show="isExpanded"
80
+ v-if="displayedContent"
81
+ class="content-wrapper"
82
+ :class="{ 'error-state': status === 'error' }"
83
+ >
84
+ <div class="content">
85
+ <slot
86
+ v-if="status !== 'error'"
87
+ name="content"
88
+ :content="displayedContent"
89
+ >
90
+ <pre>{{ displayedContent }}</pre>
91
+ </slot>
92
+
93
+ <slot
94
+ v-else
95
+ name="error"
96
+ :error-content="displayedContent"
97
+ >
98
+ <div class="error-message">{{ displayedContent }}</div>
99
+ </slot>
100
+ </div>
101
+ </div>
102
+ </transition>
103
+ </div>
104
+ </template>
105
+
106
+ <script>
107
+ export default {
108
+ name: 'ElXThink',
109
+ props: {
110
+ content: {
111
+ type: String,
112
+ default: '',
113
+ },
114
+ modelValue: {
115
+ type: Boolean,
116
+ default: true,
117
+ },
118
+ status: {
119
+ type: String,
120
+ default: 'start',
121
+ validator: function (value) {
122
+ return ['start', 'thinking', 'end', 'error'].indexOf(value) !== -1;
123
+ },
124
+ },
125
+ disabled: {
126
+ type: Boolean,
127
+ default: false,
128
+ },
129
+ autoCollapse: {
130
+ type: Boolean,
131
+ default: false,
132
+ },
133
+ buttonWidth: {
134
+ type: String,
135
+ default: '160px',
136
+ },
137
+ duration: {
138
+ type: String,
139
+ default: '0.2s',
140
+ },
141
+ maxWidth: {
142
+ type: String,
143
+ default: '500px',
144
+ },
145
+ backgroundColor: {
146
+ type: String,
147
+ default: '#fcfcfc',
148
+ },
149
+ color: {
150
+ type: String,
151
+ default: 'var(--el-color-info)',
152
+ },
153
+ },
154
+ data() {
155
+ return {
156
+ isExpanded: this.modelValue,
157
+ };
158
+ },
159
+ computed: {
160
+ displayedContent() {
161
+ return this.status === 'error' ? '思考过程中出现错误' : this.content;
162
+ },
163
+ },
164
+ watch: {
165
+ modelValue(newVal) {
166
+ this.isExpanded = newVal;
167
+ },
168
+ status(newVal) {
169
+ if (newVal === 'end' && this.autoCollapse) {
170
+ this.isExpanded = false;
171
+ }
172
+ },
173
+ },
174
+ methods: {
175
+ changeExpand() {
176
+ if (this.disabled) return;
177
+ this.isExpanded = !this.isExpanded;
178
+ this.$emit('change', {
179
+ value: this.isExpanded,
180
+ status: this.status,
181
+ });
182
+ this.$emit('update:expanded', this.isExpanded);
183
+ },
184
+ },
185
+ };
186
+ </script>
187
+
188
+ <style lang="scss">
189
+ @import '../../../styles/Think.scss';
190
+ </style>
@@ -1,8 +1,8 @@
1
- import ElXThinking from './src/main.vue';
2
-
3
- /* istanbul ignore next */
4
- ElXThinking.install = function (Vue) {
5
- Vue.component(ElXThinking.name, ElXThinking);
6
- };
7
-
8
- export default ElXThinking;
1
+ import ElXThinking from './src/main.vue';
2
+
3
+ /* istanbul ignore next */
4
+ ElXThinking.install = function (Vue) {
5
+ Vue.component(ElXThinking.name, ElXThinking);
6
+ };
7
+
8
+ export default ElXThinking;
@@ -1,8 +1,8 @@
1
- import ElXThoughtChain from './src/main.vue';
2
-
3
- /* istanbul ignore next */
4
- ElXThoughtChain.install = function (Vue) {
5
- Vue.component(ElXThoughtChain.name, ElXThoughtChain);
6
- };
7
-
8
- export default ElXThoughtChain;
1
+ import ElXThoughtChain from './src/main.vue';
2
+
3
+ /* istanbul ignore next */
4
+ ElXThoughtChain.install = function (Vue) {
5
+ Vue.component(ElXThoughtChain.name, ElXThoughtChain);
6
+ };
7
+
8
+ export default ElXThoughtChain;
@@ -1,8 +1,8 @@
1
- import ElXTypewriter from './src/main.vue';
2
-
3
- /* istanbul ignore next */
4
- ElXTypewriter.install = function (Vue) {
5
- Vue.component(ElXTypewriter.name, ElXTypewriter);
6
- };
7
-
8
- export default ElXTypewriter;
1
+ import ElXTypewriter from './src/main.vue';
2
+
3
+ /* istanbul ignore next */
4
+ ElXTypewriter.install = function (Vue) {
5
+ Vue.component(ElXTypewriter.name, ElXTypewriter);
6
+ };
7
+
8
+ export default ElXTypewriter;
@@ -137,8 +137,16 @@
137
137
  return;
138
138
  }
139
139
 
140
- // 仅在内容完全不同时重置
141
- if (!oldVal || newVal !== oldVal) {
140
+ // 流式更新优化:如果新内容是旧内容的扩展,则不重置
141
+ if (oldVal && newVal && newVal.startsWith(oldVal)) {
142
+ // 增量更新,只更新缓存,不重置打字状态
143
+ this.contentCache = newVal;
144
+ // 如果当前没在打字,且有新内容,继续打字
145
+ if (!this.isTyping && this.typingIndex < newVal.length) {
146
+ this.startTyping();
147
+ }
148
+ } else if (!oldVal || newVal !== oldVal) {
149
+ // 完全不同的内容才重置
142
150
  this.contentCache = newVal || '';
143
151
  if (!this.isTyping) {
144
152
  this.typingIndex = 0;
@@ -1,8 +1,8 @@
1
- import ElXWelcome from './src/main.vue';
2
-
3
- /* istanbul ignore next */
4
- ElXWelcome.install = function (Vue) {
5
- Vue.component(ElXWelcome.name, ElXWelcome);
6
- };
7
-
8
- export default ElXWelcome;
1
+ import ElXWelcome from './src/main.vue';
2
+
3
+ /* istanbul ignore next */
4
+ ElXWelcome.install = function (Vue) {
5
+ Vue.component(ElXWelcome.name, ElXWelcome);
6
+ };
7
+
8
+ export default ElXWelcome;