vue-element-ui-x 0.1.0

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 (91) hide show
  1. package/README.md +47 -0
  2. package/lib/attachments.js +3046 -0
  3. package/lib/bubble-list.js +13845 -0
  4. package/lib/bubble.js +13130 -0
  5. package/lib/conversations.js +18817 -0
  6. package/lib/files-card.js +2457 -0
  7. package/lib/index.common.js +19 -0
  8. package/lib/index.esm.js +19 -0
  9. package/lib/index.js +38282 -0
  10. package/lib/index.umd.js +19 -0
  11. package/lib/mixins.js +1016 -0
  12. package/lib/prompts.js +832 -0
  13. package/lib/sender.js +1901 -0
  14. package/lib/think.js +799 -0
  15. package/lib/thinking.js +809 -0
  16. package/lib/thought-chain.js +30396 -0
  17. package/lib/typewriter.js +12793 -0
  18. package/lib/welcome.js +755 -0
  19. package/package.json +42 -0
  20. package/src/components/Attachments/index.js +8 -0
  21. package/src/components/Attachments/src/main.vue +537 -0
  22. package/src/components/Bubble/index.js +6 -0
  23. package/src/components/Bubble/src/main.vue +299 -0
  24. package/src/components/BubbleList/index.js +8 -0
  25. package/src/components/BubbleList/src/loading.vue +75 -0
  26. package/src/components/BubbleList/src/main.vue +466 -0
  27. package/src/components/Conversations/index.js +8 -0
  28. package/src/components/Conversations/src/components/item.vue +371 -0
  29. package/src/components/Conversations/src/main.vue +635 -0
  30. package/src/components/FilesCard/index.js +8 -0
  31. package/src/components/FilesCard/src/fileSvg/audio.vue +38 -0
  32. package/src/components/FilesCard/src/fileSvg/changeFileName.bat +18 -0
  33. package/src/components/FilesCard/src/fileSvg/code.vue +35 -0
  34. package/src/components/FilesCard/src/fileSvg/database.vue +94 -0
  35. package/src/components/FilesCard/src/fileSvg/excel.vue +38 -0
  36. package/src/components/FilesCard/src/fileSvg/file.vue +40 -0
  37. package/src/components/FilesCard/src/fileSvg/image.vue +40 -0
  38. package/src/components/FilesCard/src/fileSvg/index.js +46 -0
  39. package/src/components/FilesCard/src/fileSvg/link.vue +54 -0
  40. package/src/components/FilesCard/src/fileSvg/mark.vue +38 -0
  41. package/src/components/FilesCard/src/fileSvg/pdf.vue +38 -0
  42. package/src/components/FilesCard/src/fileSvg/ppt.vue +38 -0
  43. package/src/components/FilesCard/src/fileSvg/three.vue +38 -0
  44. package/src/components/FilesCard/src/fileSvg/txt.vue +38 -0
  45. package/src/components/FilesCard/src/fileSvg/unknown.vue +54 -0
  46. package/src/components/FilesCard/src/fileSvg/video.vue +38 -0
  47. package/src/components/FilesCard/src/fileSvg/word.vue +38 -0
  48. package/src/components/FilesCard/src/fileSvg/zip.vue +38 -0
  49. package/src/components/FilesCard/src/main.vue +405 -0
  50. package/src/components/FilesCard/src/options.js +18 -0
  51. package/src/components/Prompts/index.js +8 -0
  52. package/src/components/Prompts/src/main.vue +248 -0
  53. package/src/components/Sender/index.js +8 -0
  54. package/src/components/Sender/src/components/ClearButton.vue +28 -0
  55. package/src/components/Sender/src/components/Loading.vue +53 -0
  56. package/src/components/Sender/src/components/LoadingButton.vue +39 -0
  57. package/src/components/Sender/src/components/SendButton.vue +26 -0
  58. package/src/components/Sender/src/components/SpeechButton.vue +24 -0
  59. package/src/components/Sender/src/components/SpeechLoading.vue +87 -0
  60. package/src/components/Sender/src/components/SpeechLoadingButton.vue +43 -0
  61. package/src/components/Sender/src/main.vue +758 -0
  62. package/src/components/Think/index.js +8 -0
  63. package/src/components/Think/src/main.vue +190 -0
  64. package/src/components/Thinking/index.js +8 -0
  65. package/src/components/Thinking/src/main.vue +195 -0
  66. package/src/components/ThoughtChain/index.js +8 -0
  67. package/src/components/ThoughtChain/src/main.vue +293 -0
  68. package/src/components/Typewriter/index.js +8 -0
  69. package/src/components/Typewriter/src/main.vue +251 -0
  70. package/src/components/Welcome/index.js +8 -0
  71. package/src/components/Welcome/src/main.vue +151 -0
  72. package/src/index.js +63 -0
  73. package/src/mixins/index.js +49 -0
  74. package/src/mixins/recordMixin.js +118 -0
  75. package/src/mixins/sendMixin.js +357 -0
  76. package/src/mixins/streamMixin.js +499 -0
  77. package/src/styles/Attachments.scss +236 -0
  78. package/src/styles/Bubble.scss +157 -0
  79. package/src/styles/BubbleList.scss +148 -0
  80. package/src/styles/Conversations.scss +260 -0
  81. package/src/styles/FilesCard.scss +221 -0
  82. package/src/styles/Prompts.scss +195 -0
  83. package/src/styles/Sender.scss +199 -0
  84. package/src/styles/Think.scss +134 -0
  85. package/src/styles/Thinking.scss +112 -0
  86. package/src/styles/ThoughtChain.scss +113 -0
  87. package/src/styles/Typewriter.scss +66 -0
  88. package/src/styles/Welcome.scss +283 -0
  89. package/src/theme/var.scss +72 -0
  90. package/src/utils/index.js +199 -0
  91. package/src/utils/scrollDetector.js +34 -0
@@ -0,0 +1,236 @@
1
+ @import '../theme/var.scss';
2
+
3
+ /* CSS 动画样式调整 */
4
+ .card-motion {
5
+ &-enter-active,
6
+ &-move,
7
+ &-leave-active {
8
+ transition: all 0.3s ease;
9
+ opacity: 1;
10
+ transform: translateX(0);
11
+ }
12
+
13
+ &-enter,
14
+ &-leave-to {
15
+ opacity: 0;
16
+ /* 从左侧外进入(进场)/ 移动到右侧外(退场) */
17
+ transform: translateX(-100%);
18
+ /* 进场初始位置在左侧外 */
19
+ }
20
+
21
+ &-leave-active {
22
+ /* 退场时从当前位置移动到右侧外 */
23
+ transform: translateX(100%);
24
+ opacity: 0;
25
+ }
26
+ }
27
+
28
+ .el-x-attachments {
29
+ &-file-card-wrap {
30
+ display: flex;
31
+ height: 100%;
32
+ align-items: center;
33
+ }
34
+
35
+ &-upload-placeholder {
36
+ display: inline-block;
37
+ width: fit-content;
38
+ align-self: center;
39
+ margin: 6px;
40
+ }
41
+
42
+ &-card {
43
+ display: inline-block;
44
+ vertical-align: top;
45
+
46
+ &-item {
47
+ margin: 6px;
48
+ }
49
+ }
50
+
51
+ &-prev-btn,
52
+ &-next-btn {
53
+ position: absolute;
54
+ top: 50%;
55
+ transform: translateY(-50%);
56
+ z-index: 10;
57
+ background-color: rgba(0, 0, 0, 0.3);
58
+ color: white;
59
+ border: none;
60
+ padding: 4px 0px;
61
+ border-radius: 3px;
62
+ transition: background-color 0.3s ease;
63
+
64
+ &:hover {
65
+ background-color: rgba(0, 0, 0, 0.5);
66
+ }
67
+
68
+ &:active {
69
+ background-color: rgba(0, 0, 0, 0.7);
70
+ }
71
+ }
72
+
73
+ &-prev-btn {
74
+ left: 8px;
75
+ border-top-left-radius: 0px;
76
+ border-bottom-left-radius: 0px;
77
+ }
78
+
79
+ &-next-btn {
80
+ right: 8px;
81
+ border-top-right-radius: 0px;
82
+ border-bottom-right-radius: 0px;
83
+ }
84
+
85
+ &-background {
86
+ position: absolute;
87
+ top: 0;
88
+ left: 0;
89
+ right: 0;
90
+ bottom: 0;
91
+ width: 100%;
92
+ pointer-events: none;
93
+
94
+ &-start {
95
+ position: absolute;
96
+ top: 0;
97
+ left: 0;
98
+ bottom: 0;
99
+ width: 50px;
100
+ background: linear-gradient(to right, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));
101
+ z-index: 5;
102
+ }
103
+
104
+ &-end {
105
+ position: absolute;
106
+ top: 0;
107
+ right: 0;
108
+ bottom: 0;
109
+ width: 50px;
110
+ background: linear-gradient(to left, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0));
111
+ z-index: 5;
112
+ }
113
+ }
114
+
115
+ &-overflow-scrollX {
116
+ height: 100%;
117
+
118
+ &::-webkit-scrollbar {
119
+ display: none;
120
+ }
121
+
122
+ scrollbar-width: none;
123
+ }
124
+
125
+ &-overflow-scrollY {
126
+ width: 100%;
127
+ height: 100%;
128
+ }
129
+
130
+ &-wrapper {
131
+ position: relative;
132
+ display: block;
133
+ }
134
+
135
+ &-upload-btn {
136
+ display: flex;
137
+
138
+ ::v-deep .el-upload {
139
+ border: 1px dashed $--border-color-base;
140
+ border-radius: 6px;
141
+ cursor: pointer;
142
+ position: relative;
143
+ overflow: hidden;
144
+ transition: $--all-transition;
145
+ box-sizing: border-box;
146
+ text-align: center;
147
+
148
+ &:hover {
149
+ border-color: $--color-primary;
150
+
151
+ .uploader-icon {
152
+ color: $--color-primary;
153
+ }
154
+ }
155
+ }
156
+
157
+ .uploader-icon {
158
+ font-size: 28px;
159
+ color: #8c939d;
160
+ text-align: center;
161
+ width: var(--el-x-attachments-upload-icon-size);
162
+ height: var(--el-x-attachments-upload-icon-size);
163
+ line-height: var(--el-x-attachments-upload-icon-size);
164
+ }
165
+
166
+ ::v-deep .el-upload-dragger {
167
+ padding: 0;
168
+ width: auto !important;
169
+ height: auto !important;
170
+ background-color: transparent;
171
+
172
+ &:hover .el-icon {
173
+ color: $--color-primary;
174
+ }
175
+ }
176
+ }
177
+
178
+ /* 设置拖放区域的样式 */
179
+ &-drop-area {
180
+ position: absolute !important;
181
+ top: 0 !important;
182
+ left: 0 !important;
183
+ width: calc(100% - 4px) !important;
184
+ height: calc(100% - 4px) !important;
185
+ border-radius: 15px !important;
186
+ border: 2px dashed $--color-primary !important;
187
+ z-index: 9999 !important;
188
+ display: flex !important;
189
+ align-items: center !important;
190
+ justify-content: center !important;
191
+ flex-direction: column !important;
192
+ background: rgba(225, 225, 225, 0.8) !important; // 增加透明度
193
+ backdrop-filter: blur(4px) !important; // 增加模糊效果
194
+ animation: dragAreaShow 0.3s ease-in-out !important; // 添加显示动画
195
+ pointer-events: none !important; // 防止拖拽区域本身阻止事件
196
+
197
+ &-icon {
198
+ font-size: 50px !important;
199
+ color: $--color-primary !important;
200
+ animation: bounce 1s infinite alternate !important; // 添加跳动动画
201
+ }
202
+
203
+ &-text {
204
+ font-size: 16px !important;
205
+ color: $--color-primary !important;
206
+ margin-top: 10px !important;
207
+ text-align: center !important;
208
+ width: 100% !important;
209
+ max-width: 300px !important;
210
+ font-weight: bold !important;
211
+ }
212
+ }
213
+
214
+ // 添加动画关键帧
215
+ @keyframes dragAreaShow {
216
+ from {
217
+ opacity: 0;
218
+ transform: scale(0.9);
219
+ }
220
+
221
+ to {
222
+ opacity: 1;
223
+ transform: scale(1);
224
+ }
225
+ }
226
+
227
+ @keyframes bounce {
228
+ from {
229
+ transform: translateY(0);
230
+ }
231
+
232
+ to {
233
+ transform: translateY(-10px);
234
+ }
235
+ }
236
+ }
@@ -0,0 +1,157 @@
1
+ @import '../theme/var.scss';
2
+
3
+ .el-x-bubble {
4
+ display: flex;
5
+ gap: var(--el-x-bubble-avatar-placeholder-gap);
6
+ }
7
+
8
+ .el-x-bubble-avatar-size {
9
+ ::v-deep .el-avatar {
10
+ width: var(--el-x-bubble-avatar-placeholder-width);
11
+ height: var(--el-x-bubble-avatar-placeholder-height);
12
+ }
13
+ }
14
+
15
+ .el-x-bubble-avatar-placeholder {
16
+ width: var(--el-x-bubble-avatar-placeholder-width);
17
+ height: var(--el-x-bubble-avatar-placeholder-height);
18
+ }
19
+
20
+ .el-x-bubble-start {
21
+ .el-x-bubble-content-wrapper {
22
+ .el-x-bubble-content-corner {
23
+ border-start-start-radius: calc($--el-x-border-radius-base - 2px);
24
+ }
25
+ }
26
+ }
27
+
28
+ .el-x-bubble-end {
29
+ justify-content: end;
30
+ flex-direction: row-reverse;
31
+
32
+ .el-x-bubble-content-wrapper {
33
+ align-items: flex-end;
34
+
35
+ .el-x-bubble-content-corner {
36
+ border-start-end-radius: calc($--el-x-border-radius-base - 2px);
37
+ }
38
+ }
39
+ }
40
+
41
+ .el-x-bubble-no-style {
42
+ .el-x-bubble-content-wrapper {
43
+ .el-x-bubble-content {
44
+ background-color: transparent;
45
+ padding: 0;
46
+ }
47
+ }
48
+ }
49
+
50
+ .el-x-bubble-content-wrapper {
51
+ flex: auto;
52
+ display: flex;
53
+ flex-direction: column;
54
+ align-items: flex-start;
55
+ min-width: 0;
56
+ max-width: 100%;
57
+
58
+ .el-x-bubble-header,
59
+ .el-x-bubble-content,
60
+ .el-x-bubble-footer {
61
+ font-size: $--el-x-font-size-base;
62
+ color: $--el-x-text-color-primary;
63
+ line-height: $--el-x-font-line-height-primary;
64
+ }
65
+
66
+ // .el-x-bubble-header {
67
+ // margin-bottom: var();
68
+ // }
69
+
70
+ .el-x-bubble-content {
71
+ background-color: $--el-x-fill-color;
72
+ padding: $--el-x-padding-md $--el-x-padding-lg;
73
+ border-radius: calc($--el-x-border-radius-base + 4px);
74
+ position: relative;
75
+ box-sizing: border-box;
76
+ min-width: 0;
77
+ max-width: var(--bubble-content-max-width);
78
+ color: $--el-x-text-color-primary;
79
+ font-size: $--el-x-font-size-base;
80
+ line-height: $--el-x-font-line-height-primary;
81
+ // min-height: calc(#{$--el-x-padding-md} * 2 + #{$--el-x-font-line-height-primary} * #{$--el-x-font-size-base} );
82
+ word-break: break-word;
83
+
84
+ // 打字器没有内容时候展示高度
85
+ .no-content {
86
+ // height: 16px;
87
+ height: 0;
88
+ }
89
+ }
90
+
91
+ // 气泡圆角
92
+ .el-x-bubble-content-round {
93
+ border-radius: $--el-x-border-radius-round;
94
+ }
95
+
96
+ // 气泡样式
97
+ .el-x-bubble-content-filled {
98
+ background-color: $--el-x-fill-color;
99
+ }
100
+
101
+ .el-x-bubble-content-borderless {
102
+ background-color: $--el-x-fill-color;
103
+ border: $--el-x-border-width solid $--el-x-border-color;
104
+ }
105
+
106
+ .el-x-bubble-content-outlined {
107
+ background: none;
108
+ border: $--el-x-border-width solid $--el-x-border-color;
109
+ }
110
+
111
+ .el-x-bubble-content-shadow {
112
+ background: none;
113
+ // box-shadow: var(--el-box-shadow-tertiary);
114
+ box-shadow: $--el-x-box-shadow-base;
115
+ }
116
+
117
+ .el-x-bubble-content-loading {
118
+ width: fit-content;
119
+
120
+ .el-x-bubble-loading-wrap {
121
+ display: flex;
122
+ justify-content: center;
123
+ align-items: center;
124
+ // height: 16px;
125
+ /* 盒子高度 */
126
+ gap: 5px;
127
+ }
128
+
129
+ .dot {
130
+ width: 5px;
131
+ height: 5px;
132
+ background-color: $--color-primary;
133
+ /* 点的颜色 */
134
+ border-radius: 50%;
135
+ /* 圆形 */
136
+ animation: wave 1s infinite ease-in-out;
137
+ /* 动画 */
138
+ }
139
+
140
+ /* 波浪动画 */
141
+ @keyframes wave {
142
+ 0%,
143
+ 100% {
144
+ transform: translateY(-2px);
145
+ }
146
+
147
+ 50% {
148
+ transform: translateY(2px);
149
+ /* 上下波动 */
150
+ }
151
+ }
152
+ }
153
+
154
+ .el-x-bubble-footer {
155
+ margin-top: $--el-x-padding-sm;
156
+ }
157
+ }
@@ -0,0 +1,148 @@
1
+ @import '../theme/var.scss';
2
+
3
+ .el-x-bubble-list {
4
+ display: flex;
5
+ flex-direction: column;
6
+ gap: 16px;
7
+ min-height: 0;
8
+ max-height: var(--el-x-bubble-list-max-height);
9
+ overflow: auto;
10
+ scroll-behavior: smooth;
11
+
12
+ position: relative;
13
+
14
+ &::-webkit-scrollbar {
15
+ width: 6px;
16
+ height: 8px;
17
+ }
18
+
19
+ &::-webkit-scrollbar-thumb {
20
+ background: transparent;
21
+ background-color: #0003;
22
+ border-radius: 10px;
23
+ transition: background-color 0.2s ease-in-out;
24
+ }
25
+
26
+ &::-webkit-scrollbar-track {
27
+ border-radius: 10px;
28
+ background: transparent;
29
+ }
30
+
31
+ &:hover {
32
+ &::-webkit-scrollbar-thumb {
33
+ background: #c1c1c1;
34
+ }
35
+
36
+ &::-webkit-scrollbar-thumb:hover {
37
+ background: #a8a8a8;
38
+ }
39
+ }
40
+
41
+ &.always-scrollbar {
42
+ &::-webkit-scrollbar-thumb {
43
+ background: #c1c1c1;
44
+ }
45
+
46
+ &:hover::-webkit-scrollbar-thumb {
47
+ background: #a8a8a8;
48
+ }
49
+ }
50
+ }
51
+
52
+ @supports (scrollbar-color: auto) {
53
+ .el-x-bubble-list {
54
+ scrollbar-color: transparent transparent;
55
+ scrollbar-width: thin;
56
+
57
+ &:hover {
58
+ scrollbar-color: #c1c1c1 transparent;
59
+ }
60
+
61
+ &.always-scrollbar {
62
+ scrollbar-color: #c1c1c1 transparent;
63
+ }
64
+ }
65
+ }
66
+
67
+ .el-x-bubble-list-default-back-button {
68
+ position: sticky;
69
+ user-select: none;
70
+ cursor: pointer;
71
+ width: 40px;
72
+ height: 40px;
73
+ padding: 10px;
74
+ box-sizing: border-box;
75
+ display: flex;
76
+ align-items: center;
77
+ justify-content: center;
78
+ background-color: #ffffff;
79
+ border-radius: 50%;
80
+ box-shadow: 0 0 4px 0 rgba(0, 0, 0, 0.02), 0 6px 10px 0 rgba(47, 53, 64, 0.1);
81
+ transition: all 0.3s ease;
82
+ z-index: 100;
83
+
84
+ &:hover {
85
+ transform: translateY(-1px);
86
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
87
+ }
88
+
89
+ .el-x-bubble-list-back-to-bottom-icon {
90
+ font-size: var(--el-x-bubble-list-btn-size);
91
+ position: relative;
92
+
93
+ .back-to-bottom-loading-svg-bg {
94
+ position: absolute;
95
+ font-size: calc(var(--el-x-bubble-list-btn-size) + 26px);
96
+ animation: is-loading 1s infinite linear;
97
+ width: 40px;
98
+ height: 40px;
99
+ }
100
+
101
+ @keyframes is-loading {
102
+ 0% {
103
+ transform: rotate(0deg);
104
+ }
105
+
106
+ 100% {
107
+ transform: rotate(360deg);
108
+ }
109
+ }
110
+ }
111
+
112
+ .back-to-bottom-loading-svg-bg {
113
+ position: absolute;
114
+ font-size: calc(var(--el-x-bubble-list-btn-size) + 26px);
115
+ animation: is-loading 1s infinite linear;
116
+ width: 40px;
117
+ height: 40px;
118
+ }
119
+
120
+ @keyframes is-loading {
121
+ 0% {
122
+ transform: rotate(0deg);
123
+ }
124
+
125
+ 100% {
126
+ transform: rotate(360deg);
127
+ }
128
+ }
129
+ }
130
+
131
+ .el-x-bubble-list-back-to-bottom-solt {
132
+ position: sticky;
133
+ user-select: none;
134
+ cursor: initial;
135
+ width: fit-content;
136
+ height: fit-content;
137
+ padding: 0;
138
+ box-sizing: border-box;
139
+ display: flex;
140
+ align-items: center;
141
+ justify-content: center;
142
+ box-shadow: initial;
143
+
144
+ &:hover {
145
+ transform: translateY(0px);
146
+ box-shadow: initial;
147
+ }
148
+ }