vlite3 1.0.5 → 1.0.7

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 (29) hide show
  1. package/components/AttachmentsList/AttachmentsList.vue.js +13 -13
  2. package/components/AttachmentsList/types.d.ts +1 -1
  3. package/components/Avatar.vue.js +2 -2
  4. package/components/Badge.vue.js +3 -3
  5. package/components/Chat/ChatBubble.vue.d.ts +6 -0
  6. package/components/Chat/ChatBubble.vue.js +90 -67
  7. package/components/Chat/ChatInterface.vue.d.ts +16 -2
  8. package/components/Chat/ChatInterface.vue.js +251 -145
  9. package/components/CommandPalette/CommandPaletteContent.vue2.js +1 -1
  10. package/components/CommandPalette/{CommandPaletteItem.vue2.js → CommandPaletteItem.vue.js} +1 -1
  11. package/components/DataTable/DataTable.vue.js +81 -78
  12. package/components/DataTable/DataTableHeader.vue.js +4 -4
  13. package/components/DataTable/DataTableRow.vue.js +75 -69
  14. package/components/Form/utils/form.utils.d.ts +4 -4
  15. package/components/Form/utils/form.utils.js +128 -118
  16. package/components/Kanban/Kanban.vue.d.ts +6 -5
  17. package/components/Kanban/Kanban.vue.js +2 -2
  18. package/components/Kanban/Kanban.vue2.js +71 -54
  19. package/components/Kanban/KanbanBoard.vue.d.ts +9 -0
  20. package/components/Kanban/KanbanBoard.vue.js +1 -1
  21. package/components/Kanban/KanbanBoard.vue2.js +102 -82
  22. package/components/Kanban/types.d.ts +17 -4
  23. package/components/NavbarCommandPalette.vue.js +1 -1
  24. package/components/Screen/Screen.vue.d.ts +2 -0
  25. package/components/Screen/Screen.vue.js +130 -129
  26. package/components/Screen/types.d.ts +8 -2
  27. package/components/Stats/Stats.vue.js +9 -9
  28. package/package.json +1 -1
  29. package/style.css +1 -1
@@ -4,9 +4,9 @@ import P from "../Icon.vue.js";
4
4
  import N from "../Button.vue.js";
5
5
  import { $t as w } from "../../utils/i18n.js";
6
6
  import { downloadFile as E } from "../../utils/functions.js";
7
- import g from "../FilePreview/FilePreview.vue.js";
7
+ import b from "../FilePreview/FilePreview.vue.js";
8
8
  import { getFileTypeIcon as F } from "./fileTypeIcon.js";
9
- const G = ["onClick"], K = ["src"], W = ["title"], q = { class: "vl-attachments-list__item-size text-xs text-muted-foreground mt-0.5" }, H = ["onClick"], J = { class: "flex items-center gap-3 overflow-hidden min-w-0" }, O = ["src"], Q = { class: "flex flex-col overflow-hidden leading-tight min-w-0" }, R = ["title"], X = ["aria-label"], Y = ["aria-label", "onClick"], ie = /* @__PURE__ */ S({
9
+ const G = ["onClick"], K = ["src"], W = ["title"], q = { class: "vl-attachments-list__item-size text-xs text-muted-foreground mt-0.5" }, H = ["onClick"], J = { class: "flex items-center gap-3 overflow-hidden min-w-0 flex-1" }, O = ["src"], Q = { class: "flex flex-col overflow-hidden leading-tight min-w-0" }, R = ["title"], X = ["aria-label"], Y = ["aria-label", "onClick"], ie = /* @__PURE__ */ S({
10
10
  __name: "AttachmentsList",
11
11
  props: {
12
12
  attachments: {},
@@ -31,16 +31,16 @@ const G = ["onClick"], K = ["src"], W = ["title"], q = { class: "vl-attachments-
31
31
  emptyClass: { default: "" }
32
32
  },
33
33
  setup(t) {
34
- const c = t, b = L(null), k = f(() => c.attachments ? Array.isArray(c.attachments) ? c.attachments : [c.attachments] : []), I = (n) => {
34
+ const c = t, g = L(null), k = f(() => c.attachments ? Array.isArray(c.attachments) ? c.attachments : [c.attachments] : []), I = (n) => {
35
35
  if (!n) return "0 Bytes";
36
36
  const h = 1024, e = ["Bytes", "KB", "MB", "GB"], s = Math.floor(Math.log(n) / Math.log(h));
37
37
  return parseFloat((n / Math.pow(h, s)).toFixed(2)) + " " + e[s];
38
38
  }, D = async (n) => {
39
39
  n.fileUrl && n.fileUrl !== "#" && await E(n.fileUrl, n.fileName || "attachment");
40
40
  }, A = (n) => n.fileType && n.fileType.startsWith("image/") ? !0 : /\.(jpg|jpeg|png|gif|webp|svg|bmp)(\?.*)?$/i.test(n.fileUrl || ""), V = (n) => {
41
- c.clickToPreview && c.canView && (b.value = n);
41
+ c.clickToPreview && c.canView && (g.value = n);
42
42
  }, $ = () => {
43
- b.value = null;
43
+ g.value = null;
44
44
  }, r = f(() => {
45
45
  switch (c.size) {
46
46
  case "sm":
@@ -108,7 +108,7 @@ const G = ["onClick"], K = ["src"], W = ["title"], q = { class: "vl-attachments-
108
108
  key: 0,
109
109
  title: e.fileName || i(w)("common.words.preview", "Preview"),
110
110
  "max-width": "max-w-3xl",
111
- body: i(g),
111
+ body: i(b),
112
112
  bodyProps: { url: e.fileUrl, name: e.fileName, canDownload: t.canDownload }
113
113
  }, {
114
114
  trigger: T(() => [
@@ -142,10 +142,10 @@ const G = ["onClick"], K = ["src"], W = ["title"], q = { class: "vl-attachments-
142
142
  ], 2),
143
143
  t.clickToPreview && t.canView ? (a(), u(x, {
144
144
  key: 0,
145
- show: b.value === s,
145
+ show: g.value === s,
146
146
  title: e.fileName || i(w)("common.words.preview", "Preview"),
147
147
  "max-width": "max-w-3xl",
148
- body: i(g),
148
+ body: i(b),
149
149
  bodyProps: { url: e.fileUrl, name: e.fileName, canDownload: t.canDownload },
150
150
  onClose: $
151
151
  }, null, 8, ["show", "title", "body", "bodyProps"])) : m("", !0)
@@ -184,7 +184,7 @@ const G = ["onClick"], K = ["src"], W = ["title"], q = { class: "vl-attachments-
184
184
  ], 2),
185
185
  d("div", Q, [
186
186
  d("span", {
187
- class: l(["vl-attachments-list__item-name font-medium truncate", [
187
+ class: l(["vl-attachments-list__item-name font-medium truncate block", [
188
188
  r.value.text,
189
189
  t.variant === "inline" ? "" : "text-foreground",
190
190
  t.itemNameClass
@@ -211,7 +211,7 @@ const G = ["onClick"], K = ["src"], W = ["title"], q = { class: "vl-attachments-
211
211
  key: 0,
212
212
  title: e.fileName || i(w)("common.words.preview", "Preview"),
213
213
  "max-width": "max-w-3xl",
214
- body: i(g),
214
+ body: i(b),
215
215
  bodyProps: { url: e.fileUrl, name: e.fileName, canDownload: t.canDownload }
216
216
  }, {
217
217
  trigger: T(() => [
@@ -245,7 +245,7 @@ const G = ["onClick"], K = ["src"], W = ["title"], q = { class: "vl-attachments-
245
245
  key: 0,
246
246
  title: e.fileName || i(w)("common.words.preview", "Preview"),
247
247
  "max-width": "max-w-3xl",
248
- body: i(g),
248
+ body: i(b),
249
249
  bodyProps: { url: e.fileUrl, name: e.fileName, canDownload: t.canDownload }
250
250
  }, {
251
251
  trigger: T(() => [
@@ -271,10 +271,10 @@ const G = ["onClick"], K = ["src"], W = ["title"], q = { class: "vl-attachments-
271
271
  ], 10, H))), 128)),
272
272
  t.clickToPreview && t.canView ? (a(!0), o(v, { key: 0 }, U(k.value, (e, s) => (a(), u(x, {
273
273
  key: `preview-${s}`,
274
- show: b.value === s,
274
+ show: g.value === s,
275
275
  title: e.fileName || i(w)("common.words.preview", "Preview"),
276
276
  "max-width": "max-w-3xl",
277
- body: i(g),
277
+ body: i(b),
278
278
  bodyProps: { url: e.fileUrl, name: e.fileName, canDownload: t.canDownload },
279
279
  onClose: $
280
280
  }, null, 8, ["show", "title", "body", "bodyProps"]))), 128)) : m("", !0)
@@ -1,7 +1,7 @@
1
1
  export interface AttachmentItem {
2
2
  fileName?: string;
3
3
  fileSize?: number;
4
- fileUrl: string;
4
+ fileUrl?: string;
5
5
  thumbnailUrl?: string;
6
6
  fileType?: string;
7
7
  [key: string]: any;
@@ -29,11 +29,11 @@ const y = ["src", "alt"], z = { key: 0 }, A = /* @__PURE__ */ k({
29
29
  return l.length === 1 ? l[0].slice(0, 2).toUpperCase() : (l[0][0] + l[l.length - 1][0]).toUpperCase();
30
30
  }), x = {
31
31
  xs: "h-6 w-6 text-[10px]",
32
- sm: "h-8 w-8 text-xs",
32
+ sm: "h-7.5 w-7.5 text-xs",
33
33
  md: "h-10 w-10 text-sm",
34
34
  lg: "h-14 w-14 text-base",
35
35
  xl: "h-18 w-18 text-lg",
36
- "2xl": "h-20 w-20 text-xl"
36
+ "2xl": "h-22 w-22 text-xl"
37
37
  }, h = {
38
38
  none: "rounded-none",
39
39
  sm: "rounded-sm",
@@ -11,9 +11,9 @@ const p = /* @__PURE__ */ b({
11
11
  const e = o, s = d(() => {
12
12
  const r = {
13
13
  xs: "px-1.5 h-4 text-[9.8px] font-medium leading-none",
14
- sm: "px-2 h-5.5 text-xs font-medium",
15
- md: "px-2.5 h-6.5 text-xs font-semibold",
16
- lg: "px-3 h-7.5 text-sm font-semibold"
14
+ sm: "px-2 h-5 text-xs font-medium",
15
+ md: "px-2.5 h-6 text-xs font-semibold",
16
+ lg: "px-2.5 h-7 text-sm font-semibold"
17
17
  }, l = `inline-flex items-center ${e.rounded === "none" ? "rounded-none" : `rounded-${e.rounded}`} border ${r[e.size] || r.md} focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2`, t = {
18
18
  default: "border-transparent bg-primary text-primary-foreground hover:bg-primary/80",
19
19
  outline: "text-foreground border-border",
@@ -12,6 +12,12 @@ type __VLS_Props = {
12
12
  * Defaults to true.
13
13
  */
14
14
  confirmDelete?: boolean;
15
+ /**
16
+ * Toggle to show or hide the "edited" status indicator on messages
17
+ */
18
+ showEditedStatus?: boolean;
19
+ editedText?: string;
20
+ editedTextI18n?: string;
15
21
  };
16
22
  declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {} & {
17
23
  delete: (id: string | number) => any;
@@ -1,23 +1,21 @@
1
- import { defineComponent as y, computed as b, ref as k, openBlock as t, createElementBlock as s, normalizeClass as o, createVNode as u, createCommentVNode as l, createElementVNode as n, toDisplayString as c, unref as B, createBlock as C, withModifiers as S } from "vue";
1
+ import { defineComponent as S, computed as x, ref as T, openBlock as t, createElementBlock as i, normalizeClass as l, createVNode as f, createCommentVNode as a, createElementVNode as d, toDisplayString as u, unref as B, createBlock as E, withModifiers as C } from "vue";
2
2
  import D from "../Avatar.vue.js";
3
- import f from "../Button.vue.js";
4
- import T from "../AttachmentsList/AttachmentsList.vue.js";
5
- const p = {
3
+ import g from "../Button.vue.js";
4
+ import I from "../AttachmentsList/AttachmentsList.vue.js";
5
+ import { $t as w } from "../../utils/i18n.js";
6
+ const z = {
6
7
  key: 0,
7
8
  class: "flex-shrink-0 flex flex-col justify-end pb-1"
8
9
  }, A = {
9
10
  key: 0,
10
- class: "mb-1 text-xs text-muted-foreground ml-1"
11
- }, E = {
12
- key: 0,
13
- class: "text-sm whitespace-pre-wrap leading-relaxed"
14
- }, N = { class: "opacity-0 group-hover/bubble:opacity-100 focus-within:opacity-100 transition-opacity flex gap-1 px-2 pointer-events-none group-hover/bubble:pointer-events-auto focus-within:pointer-events-auto" }, z = {
11
+ class: "mb-0.5 text-[9px] font-medium tracking-wide uppercase opacity-80 truncate text-gray-900/80"
12
+ }, N = {
15
13
  key: 1,
16
- class: "relative flex items-center"
17
- }, $ = {
14
+ class: "text-sm whitespace-pre-wrap leading-relaxed break-words"
15
+ }, j = {
18
16
  key: 1,
19
- class: "mt-1 text-[10px] text-muted-foreground mx-1"
20
- }, M = /* @__PURE__ */ y({
17
+ class: "relative flex items-center"
18
+ }, P = /* @__PURE__ */ S({
21
19
  __name: "ChatBubble",
22
20
  props: {
23
21
  message: {},
@@ -27,51 +25,62 @@ const p = {
27
25
  showTimestamp: { type: Boolean },
28
26
  allowDeleteAll: { type: Boolean },
29
27
  allowEditAll: { type: Boolean },
30
- confirmDelete: { type: Boolean }
28
+ confirmDelete: { type: Boolean },
29
+ showEditedStatus: { type: Boolean },
30
+ editedText: {},
31
+ editedTextI18n: {}
31
32
  },
32
33
  emits: ["delete", "edit"],
33
- setup(e, { emit: g }) {
34
- const r = e, m = g, x = b(() => r.message.timestamp ? new Date(r.message.timestamp).toLocaleTimeString([], { hour: "2-digit", minute: "2-digit" }) : ""), a = k(!1);
35
- let i = null;
36
- const v = () => {
37
- if (r.confirmDelete === !1) {
38
- m("delete", r.message.id);
34
+ setup(e, { emit: v }) {
35
+ const s = e, c = v, h = x(() => s.message.timestamp ? new Date(s.message.timestamp).toLocaleTimeString([], { hour: "2-digit", minute: "2-digit" }) : ""), y = x(() => {
36
+ if (s.editedTextI18n) {
37
+ const o = w(s.editedTextI18n);
38
+ if (o !== s.editedTextI18n) return o;
39
+ }
40
+ if (s.editedText) return s.editedText;
41
+ const m = w("vlite.chat.edited");
42
+ return m !== "vlite.chat.edited" ? m : "edited";
43
+ }), n = T(!1);
44
+ let r = null;
45
+ const b = () => {
46
+ if (s.confirmDelete === !1) {
47
+ c("delete", s.message.id);
39
48
  return;
40
49
  }
41
- a.value ? (a.value = !1, i && (clearTimeout(i), i = null), m("delete", r.message.id)) : (a.value = !0, i = setTimeout(() => {
42
- a.value = !1, i = null;
50
+ n.value ? (n.value = !1, r && (clearTimeout(r), r = null), c("delete", s.message.id)) : (n.value = !0, r = setTimeout(() => {
51
+ n.value = !1, r = null;
43
52
  }, 3e3));
44
- }, h = () => {
45
- a.value = !1, i && (clearTimeout(i), i = null);
53
+ }, k = () => {
54
+ n.value = !1, r && (clearTimeout(r), r = null);
46
55
  };
47
- return (w, d) => (t(), s("div", {
48
- class: o(["flex w-full gap-3 group", e.isSender ? "flex-row-reverse" : "flex-row"])
56
+ return (m, o) => (t(), i("div", {
57
+ class: l(["flex w-full min-w-0 gap-3 group", e.isSender ? "flex-row-reverse" : "flex-row"])
49
58
  }, [
50
- e.showAvatar ? (t(), s("div", p, [
51
- u(D, {
59
+ e.showAvatar ? (t(), i("div", z, [
60
+ f(D, {
52
61
  src: e.message.avatar,
53
62
  alt: e.message.senderName,
54
63
  size: "sm"
55
64
  }, null, 8, ["src", "alt"])
56
- ])) : l("", !0),
57
- n("div", {
58
- class: o(["flex flex-col max-w-[85%] md:max-w-[75%]", e.isSender ? "items-end" : "items-start"])
65
+ ])) : a("", !0),
66
+ d("div", {
67
+ class: l(["flex flex-col min-w-0 overflow-hidden max-w-[85%]", e.isSender ? "items-end" : "items-start"])
59
68
  }, [
60
- e.showUserInfo && e.message.senderName && !e.isSender ? (t(), s("div", A, c(e.message.senderName), 1)) : l("", !0),
61
- n("div", {
62
- class: o(["relative flex items-center group/bubble", e.isSender ? "flex-row-reverse" : "flex-row"])
69
+ d("div", {
70
+ class: l(["relative flex items-center min-w-0 max-w-full group/bubble", e.isSender ? "flex-row-reverse" : "flex-row"])
63
71
  }, [
64
- n("div", {
65
- class: o(["px-3.5 py-2.5 rounded-2xl break-words relative min-w-[60px]", [
72
+ d("div", {
73
+ class: l(["px-3.5 py-2.5 rounded-2xl break-words relative min-w-[60px] max-w-full min-w-0 overflow-hidden", [
66
74
  e.isSender ? "bg-primary text-primary-foreground rounded-br-sm" : "bg-muted text-foreground rounded-bl-sm"
67
75
  ]])
68
76
  }, [
69
- e.message.text ? (t(), s("p", E, c(e.message.text), 1)) : l("", !0),
70
- e.message.attachments && e.message.attachments.length > 0 ? (t(), s("div", {
71
- key: 1,
72
- class: o({ "mt-2": e.message.text })
77
+ e.showUserInfo && e.message.senderName && !e.isSender ? (t(), i("div", A, u(e.message.senderName), 1)) : a("", !0),
78
+ e.message.text ? (t(), i("p", N, u(e.message.text), 1)) : a("", !0),
79
+ e.message.attachments && e.message.attachments.length > 0 ? (t(), i("div", {
80
+ key: 2,
81
+ class: l({ "mt-2": e.message.text || e.showUserInfo && !e.isSender })
73
82
  }, [
74
- u(B(T), {
83
+ f(B(I), {
75
84
  attachments: e.message.attachments,
76
85
  variant: "inline",
77
86
  size: "sm",
@@ -80,40 +89,55 @@ const p = {
80
89
  "click-to-preview": !0,
81
90
  "show-download-in-list": !1
82
91
  }, null, 8, ["attachments"])
83
- ], 2)) : l("", !0),
84
- e.message.isEdited ? (t(), s("div", {
85
- key: 2,
86
- class: o(["text-[10px] opacity-70 mt-0.5 text-right", e.isSender ? "text-primary-foreground" : "text-muted-foreground"])
87
- }, " (edited) ", 2)) : l("", !0)
92
+ ], 2)) : a("", !0),
93
+ e.showTimestamp && (e.message.timestamp || e.message.isEdited) ? (t(), i("div", {
94
+ key: 3,
95
+ class: l(["mt-1 flex items-center gap-1", e.isSender ? "justify-end" : "justify-start"])
96
+ }, [
97
+ e.message.isEdited && e.showEditedStatus !== !1 ? (t(), i("span", {
98
+ key: 0,
99
+ class: l(["text-[10px] opacity-60", e.isSender ? "text-primary-foreground" : "text-muted-foreground"])
100
+ }, u(y.value), 3)) : a("", !0),
101
+ e.message.isEdited && e.showEditedStatus !== !1 && e.message.timestamp ? (t(), i("span", {
102
+ key: 1,
103
+ class: l(["text-[10px] opacity-40", e.isSender ? "text-primary-foreground" : "text-muted-foreground"])
104
+ }, " · ", 2)) : a("", !0),
105
+ e.message.timestamp ? (t(), i("span", {
106
+ key: 2,
107
+ class: l(["text-[10px] opacity-60 tabular-nums", e.isSender ? "text-primary-foreground" : "text-muted-foreground"])
108
+ }, u(h.value), 3)) : a("", !0)
109
+ ], 2)) : a("", !0)
88
110
  ], 2),
89
- n("div", N, [
90
- (e.isSender || e.allowEditAll) && e.message.text?.trim() ? (t(), C(f, {
111
+ d("div", {
112
+ class: l(["opacity-0 group-hover/bubble:opacity-100 focus-within:opacity-100 transition-opacity flex gap-0 pointer-events-none group-hover/bubble:pointer-events-auto focus-within:pointer-events-auto z-10", e.isSender ? "right-full pr-1" : "left-full pl-1"])
113
+ }, [
114
+ (e.isSender || e.allowEditAll) && e.message.text?.trim() ? (t(), E(g, {
91
115
  key: 0,
92
116
  variant: "ghost",
93
117
  size: "xs",
94
118
  icon: "lucide:pencil",
95
119
  rounded: "full",
96
120
  class: "text-muted-foreground hover:text-foreground h-7 w-7",
97
- onClick: d[0] || (d[0] = (j) => m("edit", e.message)),
121
+ onClick: o[0] || (o[0] = ($) => c("edit", e.message)),
98
122
  "aria-label": "Edit message"
99
- })) : l("", !0),
100
- e.isSender || e.allowDeleteAll ? (t(), s("div", z, [
101
- u(f, {
123
+ })) : a("", !0),
124
+ e.isSender || e.allowDeleteAll ? (t(), i("div", j, [
125
+ f(g, {
102
126
  variant: "ghost",
103
127
  size: "xs",
104
- icon: a.value ? "lucide:check" : "lucide:trash-2",
128
+ icon: n.value ? "lucide:check" : "lucide:trash-2",
105
129
  rounded: "full",
106
130
  class: "h-7 w-7 transition-colors",
107
- onClick: v,
108
- "aria-label": a.value ? "Confirm delete" : "Delete message"
131
+ onClick: b,
132
+ "aria-label": n.value ? "Confirm delete" : "Delete message"
109
133
  }, null, 8, ["icon", "aria-label"]),
110
- a.value ? (t(), s("button", {
134
+ n.value ? (t(), i("button", {
111
135
  key: 0,
112
136
  class: "absolute -top-1.5 -right-1.5 w-3.5 h-3.5 rounded-full bg-muted border border-border flex items-center justify-center text-muted-foreground hover:text-foreground transition-colors",
113
- onClick: S(h, ["stop"]),
137
+ onClick: C(k, ["stop"]),
114
138
  "aria-label": "Cancel delete"
115
- }, [...d[1] || (d[1] = [
116
- n("svg", {
139
+ }, [...o[1] || (o[1] = [
140
+ d("svg", {
117
141
  xmlns: "http://www.w3.org/2000/svg",
118
142
  viewBox: "0 0 24 24",
119
143
  fill: "none",
@@ -123,28 +147,27 @@ const p = {
123
147
  "stroke-linejoin": "round",
124
148
  class: "w-2 h-2"
125
149
  }, [
126
- n("line", {
150
+ d("line", {
127
151
  x1: "18",
128
152
  y1: "6",
129
153
  x2: "6",
130
154
  y2: "18"
131
155
  }),
132
- n("line", {
156
+ d("line", {
133
157
  x1: "6",
134
158
  y1: "6",
135
159
  x2: "18",
136
160
  y2: "18"
137
161
  })
138
162
  ], -1)
139
- ])])) : l("", !0)
140
- ])) : l("", !0)
141
- ])
142
- ], 2),
143
- e.showTimestamp && e.message.timestamp ? (t(), s("div", $, c(x.value), 1)) : l("", !0)
163
+ ])])) : a("", !0)
164
+ ])) : a("", !0)
165
+ ], 2)
166
+ ], 2)
144
167
  ], 2)
145
168
  ], 2));
146
169
  }
147
170
  });
148
171
  export {
149
- M as default
172
+ P as default
150
173
  };
@@ -1,5 +1,5 @@
1
1
  export interface ChatAttachment {
2
- fileUrl: string;
2
+ fileUrl?: string;
3
3
  fileName?: string;
4
4
  fileType?: string;
5
5
  fileSize?: number;
@@ -22,10 +22,23 @@ type __VLS_Props = {
22
22
  showAvatar?: boolean;
23
23
  showUserInfo?: boolean;
24
24
  showTimestamp?: boolean;
25
+ showEditedStatus?: boolean;
26
+ editedText?: string;
27
+ editedTextI18n?: string;
25
28
  placeholder?: string;
29
+ placeholderI18n?: string;
30
+ loadingMoreText?: string;
31
+ loadingMoreTextI18n?: string;
32
+ emptyText?: string;
33
+ emptyTextI18n?: string;
34
+ editingText?: string;
35
+ editingTextI18n?: string;
36
+ cancelEditText?: string;
37
+ cancelEditTextI18n?: string;
26
38
  isLoadingMore?: boolean;
27
39
  allowDeleteAll?: boolean;
28
40
  allowEditAll?: boolean;
41
+ allowFileUpload?: boolean;
29
42
  /**
30
43
  * When true (default), the delete button requires a second click to confirm deletion.
31
44
  * Set to false to delete immediately on first click.
@@ -45,7 +58,6 @@ declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {
45
58
  onRefetch?: () => any;
46
59
  onEdit?: (message: ChatMessage) => any;
47
60
  }>, {
48
- placeholder: string;
49
61
  isLoadingMore: boolean;
50
62
  confirmDelete: boolean;
51
63
  showAvatar: boolean;
@@ -53,6 +65,8 @@ declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {
53
65
  showTimestamp: boolean;
54
66
  allowDeleteAll: boolean;
55
67
  allowEditAll: boolean;
68
+ showEditedStatus: boolean;
69
+ allowFileUpload: boolean;
56
70
  }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {
57
71
  messageListRef: HTMLDivElement;
58
72
  observerTargetRef: HTMLDivElement;