@matechat/core 1.11.1 → 1.12.0-alpha

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 (42) hide show
  1. package/Attachment/Attachment.vue.d.ts +8 -8
  2. package/Attachment/attachment-types.d.ts +3 -35
  3. package/Attachment/index.css +1 -1
  4. package/Attachment/index.js +43 -45
  5. package/Bubble/index.css +1 -1
  6. package/Bubble/index.js +276 -146
  7. package/Bubble/useBubbleFoundation.d.ts +9 -0
  8. package/FileList/index.js +1 -1
  9. package/Header/index.css +1 -1
  10. package/Header/index.js +11 -11
  11. package/Input/components/EditableBlock.vue.d.ts +2 -2
  12. package/Input/index.css +1 -1
  13. package/Input/index.js +82 -57
  14. package/Introduction/index.css +1 -1
  15. package/Introduction/index.js +129 -39
  16. package/Layout/index.js +6 -6
  17. package/List/index.js +5 -5
  18. package/MarkdownCard/MDCardParser.d.ts +0 -10
  19. package/MarkdownCard/MermaidService-yeLQUW_e.js +142 -0
  20. package/MarkdownCard/index.css +1 -1
  21. package/MarkdownCard/index.js +542 -361
  22. package/MarkdownCard/mdCard.types.d.ts +2 -29
  23. package/MarkdownCard/mdCard.vue.d.ts +2 -2
  24. package/MarkdownCard/useMarkdownCardFoundation.d.ts +8 -0
  25. package/Mention/Mention.vue.d.ts +12 -3
  26. package/Mention/index.css +1 -1
  27. package/Mention/index.js +364 -110
  28. package/Mention/mention-types.d.ts +6 -4
  29. package/Mention/use-mention.d.ts +7 -0
  30. package/Prompt/index.js +1 -1
  31. package/Toolbar/index.css +1 -1
  32. package/Toolbar/index.d.ts +2 -1
  33. package/Toolbar/index.js +189 -198
  34. package/Toolbar/toolbar.types.d.ts +2 -26
  35. package/index.d.ts +2 -2
  36. package/mate-chat.js +2 -1
  37. package/package.json +1 -1
  38. package/Attachment/uploader.d.ts +0 -11
  39. package/MarkdownCard/MDCardService.d.ts +0 -14
  40. package/MarkdownCard/MermaidService-B6BcjbW_.js +0 -127
  41. package/MarkdownCard/MermaidService.d.ts +0 -22
  42. package/Mention/const.d.ts +0 -4
@@ -3,7 +3,7 @@ import type { FileItem } from "./attachment-types";
3
3
  type __VLS_Slots = AttachmentSlots;
4
4
  declare const __VLS_base: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
5
5
  uploadOptions: {
6
- readonly type: import("vue").PropType<import("./attachment-types").UploadOptions>;
6
+ readonly type: import("vue").PropType<import("@matechat/common/Attachment/common/attachment-types").UploadOptions>;
7
7
  readonly default: () => {};
8
8
  };
9
9
  disabled: {
@@ -34,7 +34,7 @@ declare const __VLS_base: import("vue").DefineComponent<import("vue").ExtractPro
34
34
  readonly default: true;
35
35
  };
36
36
  beforeUpload: {
37
- readonly type: import("vue").PropType<(file: File) => boolean | Promise<boolean>>;
37
+ readonly type: import("vue").PropType<import("@matechat/common/Attachment/common/attachment-types").BeforeUpload>;
38
38
  readonly default: null;
39
39
  };
40
40
  getDropContainer: {
@@ -49,11 +49,11 @@ declare const __VLS_base: import("vue").DefineComponent<import("vue").ExtractPro
49
49
  change: (file: File, fileList: FileItem<unknown, unknown>[]) => void;
50
50
  drop: (files: File[]) => void;
51
51
  success: (file: File, response: unknown, fileList: FileItem<unknown, unknown>[]) => void;
52
- validChange: (e: import("./attachment-types").IValidResult[]) => void;
52
+ validChange: (e: import("@matechat/common/Attachment/common/attachment-types").IValidResult[]) => void;
53
53
  "update:modelValue": (value: FileItem<unknown, unknown>[]) => void;
54
54
  }, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
55
55
  uploadOptions: {
56
- readonly type: import("vue").PropType<import("./attachment-types").UploadOptions>;
56
+ readonly type: import("vue").PropType<import("@matechat/common/Attachment/common/attachment-types").UploadOptions>;
57
57
  readonly default: () => {};
58
58
  };
59
59
  disabled: {
@@ -84,7 +84,7 @@ declare const __VLS_base: import("vue").DefineComponent<import("vue").ExtractPro
84
84
  readonly default: true;
85
85
  };
86
86
  beforeUpload: {
87
- readonly type: import("vue").PropType<(file: File) => boolean | Promise<boolean>>;
87
+ readonly type: import("vue").PropType<import("@matechat/common/Attachment/common/attachment-types").BeforeUpload>;
88
88
  readonly default: null;
89
89
  };
90
90
  getDropContainer: {
@@ -99,17 +99,17 @@ declare const __VLS_base: import("vue").DefineComponent<import("vue").ExtractPro
99
99
  onChange?: ((file: File, fileList: FileItem<unknown, unknown>[]) => any) | undefined;
100
100
  onDrop?: ((files: File[]) => any) | undefined;
101
101
  onSuccess?: ((file: File, response: unknown, fileList: FileItem<unknown, unknown>[]) => any) | undefined;
102
- onValidChange?: ((e: import("./attachment-types").IValidResult[]) => any) | undefined;
102
+ onValidChange?: ((e: import("@matechat/common/Attachment/common/attachment-types").IValidResult[]) => any) | undefined;
103
103
  "onUpdate:modelValue"?: ((value: FileItem<unknown, unknown>[]) => any) | undefined;
104
104
  }>, {
105
105
  draggable: boolean;
106
106
  disabled: boolean;
107
107
  multiple: boolean;
108
108
  accept: string;
109
- uploadOptions: import("./attachment-types").UploadOptions;
109
+ uploadOptions: import("@matechat/common/Attachment/common/attachment-types").UploadOptions;
110
110
  maxCount: number;
111
111
  maxSize: number;
112
- beforeUpload: (file: File) => boolean | Promise<boolean>;
112
+ beforeUpload: import("@matechat/common/Attachment/common/attachment-types").BeforeUpload;
113
113
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
114
114
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
115
115
  declare const _default: typeof __VLS_export;
@@ -1,33 +1,6 @@
1
1
  import type { ExtractPropTypes, InjectionKey, PropType, Ref, VNode } from "vue";
2
- export type FileStatus = "uploading" | "downloading" | "success" | "uploadError" | "downloadError";
3
- export interface FileItem<T = unknown, E = unknown> {
4
- uid: number;
5
- name: string;
6
- size: number;
7
- type?: string;
8
- status?: FileStatus;
9
- percentage?: number;
10
- id?: string | number;
11
- response?: T;
12
- error?: E;
13
- thumbUrl?: string;
14
- url?: string;
15
- }
16
- export interface UploadOptions {
17
- uri: string | URL;
18
- method?: "POST" | "PUT" | "PATCH";
19
- headers?: {
20
- [key: string]: string;
21
- };
22
- authToken?: string;
23
- authTokenHeader?: string;
24
- additionalParameter?: {
25
- [key: string]: string | Blob;
26
- };
27
- fileFieldName?: string;
28
- withCredentials?: boolean;
29
- responseType?: "arraybuffer" | "blob" | "json" | "text";
30
- }
2
+ import type { UploadOptions, FileStatus, FileItem, BeforeUpload, ValidResultType, IValidResult } from "@matechat/common/Attachment/common/attachment-types.ts";
3
+ export { UploadOptions, FileStatus, FileItem, BeforeUpload, ValidResultType, IValidResult, };
31
4
  export declare const AttachmentProps: {
32
5
  readonly uploadOptions: {
33
6
  readonly type: PropType<UploadOptions>;
@@ -61,7 +34,7 @@ export declare const AttachmentProps: {
61
34
  readonly default: true;
62
35
  };
63
36
  readonly beforeUpload: {
64
- readonly type: PropType<(file: File) => boolean | Promise<boolean>>;
37
+ readonly type: PropType<BeforeUpload>;
65
38
  readonly default: null;
66
39
  };
67
40
  readonly getDropContainer: {
@@ -69,11 +42,6 @@ export declare const AttachmentProps: {
69
42
  };
70
43
  };
71
44
  export type AttachmentProps = ExtractPropTypes<typeof AttachmentProps>;
72
- export type ValidResultType = "exceedCount" | "unsupportedFileType" | "exceedSizeLimit" | "beforeUploadRejected";
73
- export interface IValidResult {
74
- type: ValidResultType;
75
- file?: File;
76
- }
77
45
  export declare const AttachmentEmits: {
78
46
  change: (file: File, fileList: FileItem[]) => boolean;
79
47
  success: (file: File, response: FileItem["response"], fileList: FileItem[]) => boolean;
@@ -1 +1 @@
1
- .mc-attachment{display:inline-block;cursor:pointer;position:relative}.mc-attachment .mc-attachment-file{display:none}.mc-attachment-drop-area{position:fixed;padding:20px 40px;display:flex;justify-content:center;align-items:center;border:2px dashed var(--devui-brand, #5e7ce0);border-radius:var(--devui-border-radius, 2px);color:var(--devui-text, #252b3a);font-size:var(--devui-font-size, 12px);font-weight:700;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);z-index:9999}
1
+ .mc-attachment-drop-area{position:fixed;padding:20px 40px;display:flex;justify-content:center;align-items:center;border:2px dashed var(--devui-brand, #5e7ce0);border-radius:var(--devui-border-radius, 2px);color:var(--devui-text, #252b3a);font-size:var(--devui-font-size, 12px);font-weight:700;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);z-index:9999;box-sizing:border-box}.mc-attachment-drop-area.hide-drop-area{display:none}.mc-attachment{display:inline-block;cursor:pointer;position:relative}.mc-attachment .mc-attachment-file{display:none}
@@ -1,7 +1,7 @@
1
1
  import "./index.css";
2
- import { computed as P, defineComponent as E, inject as U, ref as b, watch as N, onMounted as S, onBeforeUnmount as R, createBlock as k, openBlock as T, Teleport as V, withDirectives as M, createElementVNode as w, renderSlot as A, vShow as O, mergeModels as x, useSlots as B, useModel as $, provide as j, createElementBlock as z, unref as g, normalizeClass as _, createCommentVNode as H, withCtx as L, createTextVNode as W, toDisplayString as q } from "vue";
3
- import { useMcI18n as Y } from "@matechat/core/Locale";
4
- const K = {
2
+ import { computed as U, defineComponent as E, inject as N, ref as b, watch as S, onMounted as R, onBeforeUnmount as V, openBlock as T, createBlock as k, Teleport as M, createElementVNode as w, normalizeClass as I, renderSlot as A, useSlots as O, useModel as B, provide as $, createElementBlock as j, unref as g, withCtx as z, createTextVNode as _, toDisplayString as H, createCommentVNode as L, mergeModels as x } from "vue";
3
+ import { useMcI18n as W } from "@matechat/core/Locale";
4
+ const q = {
5
5
  uploadOptions: {
6
6
  type: Object,
7
7
  default: () => ({})
@@ -40,15 +40,15 @@ const K = {
40
40
  getDropContainer: {
41
41
  type: Function
42
42
  }
43
- }, X = {
43
+ }, Y = {
44
44
  change: (a, s) => a instanceof File && Array.isArray(s),
45
45
  success: (a, s, o) => a instanceof File && Array.isArray(o),
46
46
  error: (a, s, o) => a instanceof File && Array.isArray(o),
47
47
  progress: (a, s) => a instanceof File && Array.isArray(s),
48
48
  drop: (a) => Array.isArray(a),
49
49
  validChange: (a) => Array.isArray(a)
50
- }, I = "mc-attachment";
51
- function G(a) {
50
+ }, P = "mc-attachment";
51
+ function K(a) {
52
52
  const { file: s, options: o, onProgress: i, onSuccess: h, onError: p } = a, t = new XMLHttpRequest();
53
53
  t.upload.onprogress = (l) => {
54
54
  if (l.lengthComputable) {
@@ -86,12 +86,12 @@ function G(a) {
86
86
  }
87
87
  t.send(c);
88
88
  }
89
- let J = Date.now();
90
- function Q(a, s, o, i) {
91
- const h = P(() => a.disabled || i.value.length >= a.maxCount), p = (r) => {
89
+ let X = Date.now();
90
+ function G(a, s, o, i) {
91
+ const h = U(() => a.disabled || i.value.length >= a.maxCount), p = (r) => {
92
92
  const d = URL.createObjectURL(r);
93
93
  return {
94
- uid: J++,
94
+ uid: X++,
95
95
  name: r.name,
96
96
  size: r.size,
97
97
  type: r.type,
@@ -110,8 +110,8 @@ function Q(a, s, o, i) {
110
110
  for (const n of r) {
111
111
  let e = !0;
112
112
  if (a.accept && a.accept !== "*") {
113
- const f = a.accept.split(",").map((y) => y.trim().toLowerCase()), v = n.type.toLowerCase(), C = n.name.toLowerCase();
114
- f.some((y) => y.endsWith("/*") ? v.startsWith(y.slice(0, -1)) : y.startsWith(".") ? C.endsWith(y) : v === y) || (u.push({ type: "unsupportedFileType", file: n }), e = !1);
113
+ const f = a.accept.split(",").map((v) => v.trim().toLowerCase()), y = n.type.toLowerCase(), C = n.name.toLowerCase();
114
+ f.some((v) => v.endsWith("/*") ? y.startsWith(v.slice(0, -1)) : v.startsWith(".") ? C.endsWith(v) : y === v) || (u.push({ type: "unsupportedFileType", file: n }), e = !1);
115
115
  }
116
116
  if (e && n.size / 1024 / 1024 > a.maxSize && (u.push({ type: "exceedSizeLimit", file: n }), e = !1), e && a.beforeUpload)
117
117
  try {
@@ -128,7 +128,7 @@ function Q(a, s, o, i) {
128
128
  }
129
129
  }, c = (r, d) => {
130
130
  const u = () => i.value.findIndex((n) => n.uid === d.uid);
131
- G({
131
+ K({
132
132
  file: r,
133
133
  options: a.uploadOptions,
134
134
  onProgress: (n) => {
@@ -158,14 +158,14 @@ function Q(a, s, o, i) {
158
158
  uploadFiles: t
159
159
  };
160
160
  }
161
- const Z = /* @__PURE__ */ E({
161
+ const J = /* @__PURE__ */ E({
162
162
  __name: "drop-area",
163
163
  setup(a) {
164
- const { rootProps: s, rootEmits: o, isDisabled: i, uploadFiles: h } = U(
165
- I
164
+ const { rootProps: s, rootEmits: o, isDisabled: i, uploadFiles: h } = N(
165
+ P
166
166
  ), p = b(), t = b(), c = b(!1);
167
167
  let m = 0;
168
- N(
168
+ S(
169
169
  () => s.getDropContainer,
170
170
  (e) => {
171
171
  if (e) {
@@ -179,71 +179,69 @@ const Z = /* @__PURE__ */ E({
179
179
  if (p.value === document.body)
180
180
  t.value.style.inset = "0";
181
181
  else {
182
- const { x: f, y: v, width: C, height: D } = p.value.getBoundingClientRect();
183
- t.value.style.width = `${C}px`, t.value.style.height = `${D}px`, t.value.style.top = `${v}px`, t.value.style.left = `${f}px`;
182
+ const { x: f, y, width: C, height: D } = p.value.getBoundingClientRect();
183
+ t.value.style.width = `${C}px`, t.value.style.height = `${D}px`, t.value.style.top = `${y}px`, t.value.style.left = `${f}px`;
184
184
  }
185
185
  }, r = (e) => {
186
186
  e.preventDefault();
187
187
  }, d = (e) => {
188
188
  e.preventDefault(), m--, m === 0 && (c.value = !1);
189
189
  }, u = (e) => {
190
- var v;
190
+ var y;
191
191
  if (e.preventDefault(), c.value = !1, m = 0, i.value) return;
192
- const f = Array.from(((v = e.dataTransfer) == null ? void 0 : v.files) || []);
192
+ const f = Array.from(((y = e.dataTransfer) == null ? void 0 : y.files) || []);
193
193
  f.length > 0 && (o("drop", f), h(f));
194
194
  };
195
195
  function n(e) {
196
196
  e.preventDefault(), c.value = !1, m = 0;
197
197
  }
198
- return S(() => {
198
+ return R(() => {
199
199
  s.getDropContainer && (p.value = s.getDropContainer()), document.body.addEventListener("dragenter", l), document.body.addEventListener("dragover", r), document.body.addEventListener("dragleave", d), document.body.addEventListener("drop", n);
200
- }), R(() => {
200
+ }), V(() => {
201
201
  document.body.removeEventListener("dragenter", l), document.body.removeEventListener("dragover", r), document.body.removeEventListener("dragleave", d), document.body.removeEventListener("drop", n);
202
- }), (e, f) => (T(), k(V, { to: "body" }, [
203
- M(w(
202
+ }), (e, f) => (T(), k(M, { to: "body" }, [
203
+ w(
204
204
  "div",
205
205
  {
206
206
  ref_key: "dropAreaEl",
207
207
  ref: t,
208
- class: "mc-attachment-drop-area",
208
+ class: I(["mc-attachment-drop-area", !c.value && "hide-drop-area"]),
209
209
  onDrop: u
210
210
  },
211
211
  [
212
212
  A(e.$slots, "default")
213
213
  ],
214
- 544
215
- /* NEED_HYDRATION, NEED_PATCH */
216
- ), [
217
- [O, c.value]
218
- ])
214
+ 34
215
+ /* CLASS, NEED_HYDRATION */
216
+ )
219
217
  ]));
220
218
  }
221
- }), ee = ["accept", "multiple", "disabled"], F = /* @__PURE__ */ E({
219
+ }), Q = ["accept", "multiple", "disabled"], F = /* @__PURE__ */ E({
222
220
  name: "McAttachment",
223
221
  __name: "Attachment",
224
- props: /* @__PURE__ */ x(K, {
222
+ props: /* @__PURE__ */ x(q, {
225
223
  modelValue: { default: [] },
226
224
  modelModifiers: {}
227
225
  }),
228
- emits: /* @__PURE__ */ x(X, ["update:modelValue"]),
226
+ emits: /* @__PURE__ */ x(Y, ["update:modelValue"]),
229
227
  setup(a, { emit: s }) {
230
228
  const o = a, i = s;
231
- B();
232
- const h = $(a, "modelValue"), { t: p } = Y(), t = b(), { handleClick: c, handleFileChange: m, isDisabled: l, uploadFiles: r } = Q(
229
+ O();
230
+ const h = B(a, "modelValue"), { t: p } = W(), t = b(), { handleClick: c, handleFileChange: m, isDisabled: l, uploadFiles: r } = G(
233
231
  o,
234
232
  i,
235
233
  t,
236
234
  h
237
235
  );
238
- return j(I, {
236
+ return $(P, {
239
237
  rootProps: o,
240
238
  rootEmits: i,
241
239
  isDisabled: l,
242
240
  uploadFiles: r
243
- }), (d, u) => (T(), z(
241
+ }), (d, u) => (T(), j(
244
242
  "div",
245
243
  {
246
- class: _(["mc-attachment", { "is-disabled": g(l) }]),
244
+ class: I(["mc-attachment", { "is-disabled": g(l) }]),
247
245
  onClick: u[1] || (u[1] = //@ts-ignore
248
246
  (...n) => g(c) && g(c)(...n))
249
247
  },
@@ -259,12 +257,12 @@ const Z = /* @__PURE__ */ E({
259
257
  disabled: g(l),
260
258
  onChange: u[0] || (u[0] = //@ts-ignore
261
259
  (...n) => g(m) && g(m)(...n))
262
- }, null, 40, ee),
263
- d.draggable ? (T(), k(Z, { key: 0 }, {
264
- default: L(() => [
260
+ }, null, 40, Q),
261
+ d.draggable ? (T(), k(J, { key: 0 }, {
262
+ default: z(() => [
265
263
  A(d.$slots, "dropPlaceholder", {}, () => [
266
- W(
267
- q(d.dropPlaceholder ?? g(p)("Attachment.dragToUpload")),
264
+ _(
265
+ H(d.dropPlaceholder ?? g(p)("Attachment.dragToUpload")),
268
266
  1
269
267
  /* TEXT */
270
268
  )
@@ -272,7 +270,7 @@ const Z = /* @__PURE__ */ E({
272
270
  ]),
273
271
  _: 3
274
272
  /* FORWARDED */
275
- })) : H("v-if", !0)
273
+ })) : L("v-if", !0)
276
274
  ],
277
275
  2
278
276
  /* CLASS */
package/Bubble/index.css CHANGED
@@ -1 +1 @@
1
- .mc-bubble-loading[data-v-395fc568]{display:flex;align-items:center;gap:8px}.mc-bubble-loading .loading-dot[data-v-395fc568]{width:8px;height:8px;border-radius:5px;background-color:#9880ff}.mc-bubble-loading .loading-dot.dot-start[data-v-395fc568]{animation:dotFlashing-395fc568 1s infinite linear alternate;animation-delay:0s}.mc-bubble-loading .loading-dot.dot-middle[data-v-395fc568]{animation:dotFlashing-395fc568 1s infinite linear alternate;animation-delay:.5s}.mc-bubble-loading .loading-dot.dot-end[data-v-395fc568]{animation:dotFlashing-395fc568 1s infinite linear alternate;animation-delay:1s}@keyframes dotFlashing-395fc568{0%{background-color:#9880ff}to{background-color:#ebe6ff}}.mc-bubble-avatar-wrapper{display:inline-block}.mc-bubble-avatar-wrapper .mc-bubble-avatar-style{display:inline-block;text-align:center;color:var(--devui-light-text, #ffffff)}.mc-bubble-avatar-wrapper .mc-bubble-avatar-background-0{background-color:#ff8b87}.mc-bubble-avatar-wrapper .mc-bubble-avatar-background-1{background-color:#7693f5}.mc-bubble[data-v-f104b241]{display:flex;gap:4px;font-size:var(--devui-font-size, 14px)}.mc-bubble .mc-bubble-content[data-v-f104b241]{word-wrap:break-word;word-break:break-all}.mc-bubble .mc-bubble-content.filled[data-v-f104b241],.mc-bubble .mc-bubble-content.bordered[data-v-f104b241]{padding:12px 16px;border-radius:12px}.mc-bubble .mc-bubble-content.filled[data-v-f104b241]{background-color:var(--devui-global-bg, #f6f6f8)}.mc-bubble .mc-bubble-content.bordered[data-v-f104b241]{border:1px solid var(--devui-dividing-line, #f2f2f3)}.mc-bubble .mc-bubble-avatar[data-v-f104b241]{flex-shrink:0;display:flex;gap:4px}.mc-bubble .mc-bubble-avatar .mc-bubble-avatar-name[data-v-f104b241]{font-size:14px}.mc-bubble .mc-bubble-avatar.empty-avatar[data-v-f104b241]{visibility:hidden}.mc-bubble.mc-bubble-avatar-top .mc-bubble-avatar[data-v-f104b241]{align-items:center}.mc-bubble .mc-bubble-content-container[data-v-f104b241]{max-width:100%}.mc-bubble.mc-bubble-avatar-top[data-v-f104b241]{flex-direction:column}.mc-bubble.mc-bubble-avatar-top .mc-bubble-content-container[data-v-f104b241]{align-items:flex-start;flex-direction:column}.mc-bubble.mc-bubble-loading.mc-bubble-avatar-side[data-v-f104b241]{align-items:center}.mc-bubble.mc-bubble-avatar-side.mc-bubble-right[data-v-f104b241]{flex-direction:row-reverse;justify-content:end}.mc-bubble.mc-bubble-avatar-top .mc-bubble-avatar[data-v-f104b241],.mc-bubble.mc-bubble-avatar-top .mc-bubble-content-container[data-v-f104b241]{display:flex}.mc-bubble.mc-bubble-avatar-top.mc-bubble-right .mc-bubble-avatar[data-v-f104b241],.mc-bubble.mc-bubble-avatar-top.mc-bubble-right .mc-bubble-content-container[data-v-f104b241]{align-items:flex-end}.mc-bubble.mc-bubble-avatar-top.mc-bubble-right .mc-bubble-avatar[data-v-f104b241]{flex-direction:row-reverse}
1
+ .mc-bubble-loading[data-v-395fc568]{display:flex;align-items:center;gap:8px}.mc-bubble-loading .loading-dot[data-v-395fc568]{width:8px;height:8px;border-radius:5px;background-color:#9880ff}.mc-bubble-loading .loading-dot.dot-start[data-v-395fc568]{animation:dotFlashing-395fc568 1s infinite linear alternate;animation-delay:0s}.mc-bubble-loading .loading-dot.dot-middle[data-v-395fc568]{animation:dotFlashing-395fc568 1s infinite linear alternate;animation-delay:.5s}.mc-bubble-loading .loading-dot.dot-end[data-v-395fc568]{animation:dotFlashing-395fc568 1s infinite linear alternate;animation-delay:1s}@keyframes dotFlashing-395fc568{0%{background-color:#9880ff}to{background-color:#ebe6ff}}.mc-bubble-avatar-wrapper{display:inline-block}.mc-bubble-avatar-wrapper .mc-bubble-avatar-style{display:inline-block;text-align:center;color:var(--devui-light-text, #ffffff)}.mc-bubble-avatar-wrapper .mc-bubble-avatar-background-0{background-color:#ff8b87}.mc-bubble-avatar-wrapper .mc-bubble-avatar-background-1{background-color:#7693f5}.mc-bubble[data-v-9c10edf4]{display:flex;gap:4px;font-size:var(--devui-font-size, 14px)}.mc-bubble .mc-bubble-content[data-v-9c10edf4]{word-wrap:break-word;word-break:break-all}.mc-bubble .mc-bubble-content.filled[data-v-9c10edf4],.mc-bubble .mc-bubble-content.bordered[data-v-9c10edf4]{padding:12px 16px;border-radius:12px}.mc-bubble .mc-bubble-content.filled[data-v-9c10edf4]{background-color:var(--devui-global-bg, #f6f6f8)}.mc-bubble .mc-bubble-content.bordered[data-v-9c10edf4]{border:1px solid var(--devui-dividing-line, #f2f2f3)}.mc-bubble .mc-bubble-avatar[data-v-9c10edf4]{flex-shrink:0;display:flex;gap:4px}.mc-bubble .mc-bubble-avatar .mc-bubble-avatar-name[data-v-9c10edf4]{font-size:14px}.mc-bubble .mc-bubble-avatar.empty-avatar[data-v-9c10edf4]{visibility:hidden}.mc-bubble.mc-bubble-avatar-top .mc-bubble-avatar[data-v-9c10edf4]{align-items:center}.mc-bubble .mc-bubble-content-container[data-v-9c10edf4]{max-width:100%}.mc-bubble.mc-bubble-avatar-top[data-v-9c10edf4]{flex-direction:column}.mc-bubble.mc-bubble-avatar-top .mc-bubble-content-container[data-v-9c10edf4]{align-items:flex-start;flex-direction:column}.mc-bubble.mc-bubble-loading.mc-bubble-avatar-side[data-v-9c10edf4]{align-items:center}.mc-bubble.mc-bubble-avatar-side.mc-bubble-right[data-v-9c10edf4]{flex-direction:row-reverse;justify-content:end}.mc-bubble.mc-bubble-avatar-top .mc-bubble-avatar[data-v-9c10edf4],.mc-bubble.mc-bubble-avatar-top .mc-bubble-content-container[data-v-9c10edf4]{display:flex}.mc-bubble.mc-bubble-avatar-top.mc-bubble-right .mc-bubble-avatar[data-v-9c10edf4],.mc-bubble.mc-bubble-avatar-top.mc-bubble-right .mc-bubble-content-container[data-v-9c10edf4]{align-items:flex-end}.mc-bubble.mc-bubble-avatar-top.mc-bubble-right .mc-bubble-avatar[data-v-9c10edf4]{flex-direction:row-reverse}