@mobilon-dev/chotto 0.0.1 → 0.0.2

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.
package/README.md CHANGED
@@ -5,7 +5,7 @@ Vue3 Chat UI - собери свой интерфейс чата
5
5
 
6
6
  ## документация
7
7
 
8
- - ссылка
8
+ - [storybook](https://mobilon-dev.github.io/chotto/)
9
9
 
10
10
  ## схема
11
11
 
@@ -13,14 +13,13 @@ Vue3 Chat UI - собери свой интерфейс чата
13
13
 
14
14
  ## пример
15
15
 
16
- - ссылка
16
+ [пример](https://github.com/antirek/chotto-sample)
17
17
 
18
18
  ## скриншот
19
19
 
20
20
  ![](images/screenshot1.png)
21
21
 
22
22
 
23
-
24
23
  # разработка
25
24
 
26
25
 
@@ -32,6 +31,10 @@ Vue3 Chat UI - собери свой интерфейс чата
32
31
 
33
32
  > npm run storybook
34
33
 
34
+ ## run dev
35
+
36
+ > npm run dev
37
+
35
38
  ## build
36
39
 
37
40
  > npm run build
package/dist/style.css CHANGED
@@ -1 +1 @@
1
- .chat[data-v-77b8ac34]{cursor:pointer;padding:8px;border-bottom:1px solid #ccc}.file-message a[data-v-9fef0716]{color:#00f;text-decoration:underline}.image-message img[data-v-1c1327d6]{max-width:100%;border-radius:5px}.text-message-left[data-v-4deff5d3]{background-color:#c3e8ba;max-height:50px;min-width:300px;border-radius:10px;padding:10px;margin-bottom:10px;max-width:70%;text-align:left;position:relative;justify-content:flex-start;flex-basis:200px;flex-grow:2;align-self:flex-start}.text-message-right[data-v-4deff5d3]{background-color:#f5f5f5;max-height:50px;min-width:300px;border-radius:10px;padding:10px;margin-bottom:10px;max-width:70%;position:relative;justify-content:flex-end;flex-basis:500px;flex-grow:2;align-self:flex-end}.chat-info[data-v-7ca4835c]{padding:16px}.chat-input[data-v-07719b64]{padding:10px}.chat-input input[data-v-07719b64]{flex:1;width:500px;padding:10px;border:1px solid #ece5dd;border-radius:20px}.chat-input button[data-v-07719b64]{padding:10px;margin-left:10px;border:none;background-color:#25d366;color:#fff;border-radius:20px;cursor:pointer}.chat-input button[data-v-07719b64]:hover{background-color:#128c7e}.chat-list[data-v-dda91c95]{max-height:400px;overflow-y:auto;grid-column:span 1}.message-feed[data-v-b2d2ed34]{flex:1;max-height:400px;height:300px;overflow:auto;display:flex;flex-direction:column;gap:5px}.profile[data-v-e1bf37ef]{padding:16px}
1
+ .chat[data-v-77b8ac34]{cursor:pointer;padding:8px;border-bottom:1px solid #ccc}.chat-item[data-v-b194d366]{display:flex;align-items:center;padding:15px;border-bottom:1px solid #eee;cursor:pointer}.chat-item-selected[data-v-b194d366]{display:flex;align-items:center;padding:15px;background:#bbb;border-bottom:1px solid #a09d9d;cursor:pointer}.avatar[data-v-b194d366]{width:50px;height:50px;border-radius:50%;background-size:cover;margin-right:15px}.chat-info[data-v-b194d366]{flex-grow:1;margin-right:15px}.name[data-v-b194d366]{font-weight:700;font-size:16px;margin-bottom:5px}.last-message[data-v-b194d366]{font-size:14px;color:#888}.chat-details[data-v-b194d366]{display:flex;align-items:center}.unread[data-v-b194d366]{background-color:red;color:#fff;padding:5px 8px;border-radius:50%;font-size:12px;margin-right:10px}.time[data-v-b194d366]{font-size:12px;color:#888}.file-message a[data-v-18efd407]{color:#00f;text-decoration:underline}.image-message[data-v-1f459534]{max-width:300px;max-height:240px;height:auto;border-radius:5px}.image-message-left[data-v-1f459534]{background-color:#c3e8ba;max-height:50px;min-width:300px;border-radius:10px;padding:10px;margin-bottom:10px;max-width:70%;text-align:left;position:relative;justify-content:flex-start;flex-basis:200px;flex-grow:2;align-self:flex-start}.image-message-right[data-v-1f459534]{background-color:#f5f5f5;max-height:50px;min-width:300px;border-radius:10px;padding:10px;margin-bottom:10px;max-width:70%;position:relative;justify-content:flex-end;flex-basis:500px;flex-grow:2;align-self:flex-end}.message-time[data-v-1f459534]{font-size:12px;color:#777;margin-left:10px}.text-message-left[data-v-c807c835]{background-color:#c3e8ba;max-height:50px;min-width:300px;border-radius:10px;padding:10px;margin-bottom:10px;max-width:70%;text-align:left;position:relative;justify-content:flex-start;flex-basis:200px;flex-grow:2;align-self:flex-start}.text-message-right[data-v-c807c835]{background-color:#f5f5f5;max-height:50px;min-width:300px;border-radius:10px;padding:10px;margin-bottom:10px;max-width:70%;position:relative;justify-content:flex-end;flex-basis:500px;flex-grow:2;align-self:flex-end}.message-time[data-v-c807c835]{font-size:12px;color:#777;margin-left:10px}.chat-info[data-v-7ca4835c]{padding:16px}.chat-input[data-v-07719b64]{padding:10px}.chat-input input[data-v-07719b64]{flex:1;width:500px;padding:10px;border:1px solid #ece5dd;border-radius:20px}.chat-input button[data-v-07719b64]{padding:10px;margin-left:10px;border:none;background-color:#25d366;color:#fff;border-radius:20px;cursor:pointer}.chat-input button[data-v-07719b64]:hover{background-color:#128c7e}.chat-list[data-v-fafd9097],.chat-list[data-v-1fd0e46c]{max-height:400px;overflow-y:auto;grid-column:span 1}.message-container{display:flex;align-items:center;margin-bottom:10px;padding:8px 12px;border-radius:10px}.message-container.sent{background-color:#e0f2f7;color:#333;margin-left:auto}.message-container.received{background-color:#f5f5f5;color:#000;margin-right:auto}.message-content{margin-right:10px}.chat-image{max-width:200px;max-height:150px;cursor:pointer}.preview-container{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);background-color:#fff;padding:20px;border-radius:10px;z-index:100}.preview-image{max-width:80%;max-height:80vh}.message-info{display:flex;align-items:center;margin-left:10px}.message-status{font-size:12px}.status{margin-left:5px}.status.read{color:#34a853}.status.delivered{color:#333}.status.sending{color:#777}.message-time{font-size:12px;color:#777;margin-left:10px}.dateMessage[data-v-2d53fb22]{display:flex;align-items:center;justify-content:center;margin:0 auto;padding:15px 0;width:150px;height:40px}.dateMessage__text[data-v-2d53fb22]{width:100%;padding:10px 15px;border-radius:15px;background-color:#fff;-webkit-box-shadow:0 2px 5px 0 rgba(193,193,193,.26),0 2px 10px 0 rgba(193,193,193,.16);-moz-box-shadow:0 2px 5px 0 rgba(193,193,193,.26),0 2px 10px 0 rgba(193,193,193,.16);box-shadow:0 2px 5px #c1c1c142,0 2px 10px #c1c1c129;font-size:16px;font-weight:600;color:#000000b3;text-align:center}.audio-message-left[data-v-127acb40]{background-color:#c3e8ba;max-height:50px;min-width:300px;border-radius:10px;padding:10px;margin-bottom:10px;max-width:70%;text-align:left;position:relative;justify-content:flex-start;flex-basis:200px;flex-grow:2;align-self:flex-start}.audio-message-right[data-v-127acb40]{background-color:#f5f5f5;max-height:50px;min-width:300px;border-radius:10px;padding:10px;margin-bottom:10px;max-width:70%;position:relative;justify-content:flex-end;flex-basis:500px;flex-grow:2;align-self:flex-end}.message-time[data-v-127acb40]{font-size:12px;color:#777;margin-left:10px}.message-feed[data-v-37208651]{flex:1;max-height:600px;height:500px;max-width:800px;overflow:auto;display:flex;flex-direction:column;gap:5px}.profile[data-v-e1bf37ef]{padding:16px}
@@ -1,8 +1,8 @@
1
- import { openBlock as c, createElementBlock as a, createElementVNode as u, toDisplayString as i, normalizeClass as x, createCommentVNode as p, ref as m, withDirectives as I, withKeys as C, vModelText as $, unref as h, Fragment as f, renderList as g, createBlock as v, watch as k, resolveDynamicComponent as b, nextTick as M } from "vue";
2
- const l = (e, s) => {
1
+ import { openBlock as a, createElementBlock as n, createElementVNode as r, toDisplayString as u, normalizeClass as p, createCommentVNode as h, ref as v, withDirectives as x, withKeys as k, vModelText as w, unref as I, Fragment as $, renderList as C, createBlock as y, onUpdated as b, watch as M, resolveDynamicComponent as U, nextTick as S } from "vue";
2
+ const _ = (e, s) => {
3
3
  const t = e.__vccOpts || e;
4
- for (const [n, r] of s)
5
- t[n] = r;
4
+ for (const [c, o] of s)
5
+ t[c] = o;
6
6
  return t;
7
7
  }, q = {
8
8
  __name: "Chat",
@@ -14,17 +14,60 @@ const l = (e, s) => {
14
14
  },
15
15
  emits: ["select"],
16
16
  setup(e, { emit: s }) {
17
- const t = e, n = s, r = () => {
18
- n("select", t.chat);
17
+ const t = e, c = s, o = () => {
18
+ c("select", t.chat);
19
19
  };
20
- return (o, d) => (c(), a("div", {
20
+ return (i, l) => (a(), n("div", {
21
21
  class: "chat",
22
- onClick: r
22
+ onClick: o
23
23
  }, [
24
- u("p", null, i(e.chat.name) + " " + i(e.chat.countUnread), 1)
24
+ r("p", null, u(e.chat.name) + " " + u(e.chat.countUnread), 1)
25
25
  ]));
26
26
  }
27
- }, F = /* @__PURE__ */ l(q, [["__scopeId", "data-v-77b8ac34"]]), O = { class: "file-message" }, T = ["href"], j = {
27
+ }, j = /* @__PURE__ */ _(q, [["__scopeId", "data-v-77b8ac34"]]), A = { class: "avatar" }, F = ["src"], O = { class: "chat-info" }, P = { class: "name" }, T = {
28
+ key: 0,
29
+ class: "last-message"
30
+ }, B = { class: "chat-details" }, D = {
31
+ key: 0,
32
+ class: "unread"
33
+ }, V = {
34
+ key: 1,
35
+ class: "time"
36
+ }, E = {
37
+ __name: "Chat2",
38
+ props: {
39
+ chat: {
40
+ type: Object,
41
+ required: !0
42
+ }
43
+ },
44
+ emits: ["select"],
45
+ setup(e, { emit: s }) {
46
+ const t = e, c = s, o = () => {
47
+ c("select", t.chat);
48
+ }, i = () => t.chat.isSelected ? "chat-item-selected" : "chat-item", l = () => t.chat.avatar ? t.chat.avatar : "data:image/svg+xml;base64," + window.btoa('<svg fill="#000000" width="800px" height="800px" viewBox="0 -2.93 32.537 32.537" xmlns="http://www.w3.org/2000/svg"><g id="SVGRepo_bgCarrier" stroke-width="0"/><g id="SVGRepo_tracerCarrier" stroke-linecap="round" stroke-linejoin="round"/><g id="SVGRepo_iconCarrier"> <g transform="translate(-481.391 -197.473)"> <path d="M512.928,224.152a.991.991,0,0,1-.676-.264,21.817,21.817,0,0,0-29.2-.349,1,1,0,1,1-1.322-1.5,23.814,23.814,0,0,1,31.875.377,1,1,0,0,1-.677,1.736Z"/> <path d="M498.191,199.473a7.949,7.949,0,1,1-7.949,7.95,7.959,7.959,0,0,1,7.949-7.95m0-2a9.949,9.949,0,1,0,9.95,9.95,9.949,9.949,0,0,0-9.95-9.95Z"/> </g> </g></svg>');
49
+ return (m, d) => (a(), n("div", {
50
+ class: p(i()),
51
+ onClick: o
52
+ }, [
53
+ r("div", A, [
54
+ r("img", {
55
+ src: l(),
56
+ width: "50",
57
+ height: "50"
58
+ }, null, 8, F)
59
+ ]),
60
+ r("div", O, [
61
+ r("div", P, u(e.chat.name), 1),
62
+ e.chat.lastMessage ? (a(), n("div", T, u(e.chat.lastMessage), 1)) : h("", !0)
63
+ ]),
64
+ r("div", B, [
65
+ e.chat.countUnread > 0 ? (a(), n("div", D, u(e.chat.countUnread), 1)) : h("", !0),
66
+ e.chat["lastActivity.time"] ? (a(), n("div", V, u(e.chat["lastActivity.time"]), 1)) : h("", !0)
67
+ ])
68
+ ], 2));
69
+ }
70
+ }, L = /* @__PURE__ */ _(E, [["__scopeId", "data-v-b194d366"]]), R = { class: "file-message" }, G = ["href"], K = {
28
71
  __name: "FileMessage",
29
72
  props: {
30
73
  message: {
@@ -33,14 +76,14 @@ const l = (e, s) => {
33
76
  }
34
77
  },
35
78
  setup(e) {
36
- return (s, t) => (c(), a("div", O, [
37
- u("a", {
79
+ return (s, t) => (a(), n("div", R, [
80
+ r("a", {
38
81
  href: e.message.url,
39
82
  download: ""
40
- }, i(e.message.filename), 9, T)
83
+ }, u(e.message.filename), 9, G)
41
84
  ]));
42
85
  }
43
- }, w = /* @__PURE__ */ l(j, [["__scopeId", "data-v-9fef0716"]]), B = { class: "image-message" }, D = ["src", "alt"], L = {
86
+ }, N = /* @__PURE__ */ _(K, [["__scopeId", "data-v-18efd407"]]), Z = ["messageId"], z = ["src", "alt"], H = { class: "message-time" }, J = {
44
87
  __name: "ImageMessage",
45
88
  props: {
46
89
  message: {
@@ -49,14 +92,23 @@ const l = (e, s) => {
49
92
  }
50
93
  },
51
94
  setup(e) {
52
- return (s, t) => (c(), a("div", B, [
53
- u("img", {
95
+ const s = e;
96
+ function t() {
97
+ return s.message.position === "left" ? "image-message-left" : "image-message-right";
98
+ }
99
+ return (c, o) => (a(), n("div", {
100
+ class: p(t()),
101
+ messageId: e.message.messageId
102
+ }, [
103
+ r("img", {
54
104
  src: e.message.url,
55
- alt: e.message.alt
56
- }, null, 8, D)
57
- ]));
105
+ alt: e.message.alt,
106
+ class: "image-message"
107
+ }, null, 8, z),
108
+ r("div", H, u(e.message.time), 1)
109
+ ], 10, Z));
58
110
  }
59
- }, S = /* @__PURE__ */ l(L, [["__scopeId", "data-v-1c1327d6"]]), V = {
111
+ }, Be = /* @__PURE__ */ _(J, [["__scopeId", "data-v-1f459534"]]), Q = ["messageId"], W = { class: "message-time" }, X = {
60
112
  __name: "TextMessage",
61
113
  props: {
62
114
  message: {
@@ -66,15 +118,17 @@ const l = (e, s) => {
66
118
  },
67
119
  setup(e) {
68
120
  function s(t) {
69
- return t.direction === "incoming" ? "text-message-left" : "text-message-right";
121
+ return t.position === "left" ? "text-message-left" : "text-message-right";
70
122
  }
71
- return (t, n) => (c(), a("div", {
72
- class: x(s(e.message))
123
+ return (t, c) => (a(), n("div", {
124
+ class: p(s(e.message)),
125
+ messageId: e.message.messageId
73
126
  }, [
74
- u("p", null, i(e.message.text), 1)
75
- ], 2));
127
+ r("p", null, u(e.message.text), 1),
128
+ r("div", W, u(e.message.time), 1)
129
+ ], 10, Q));
76
130
  }
77
- }, A = /* @__PURE__ */ l(V, [["__scopeId", "data-v-4deff5d3"]]), E = { class: "chat-info" }, K = { key: 0 }, N = {
131
+ }, Y = /* @__PURE__ */ _(X, [["__scopeId", "data-v-c807c835"]]), ee = { class: "chat-info" }, te = { key: 0 }, se = {
78
132
  __name: "ChatInfo",
79
133
  props: {
80
134
  chat: {
@@ -83,33 +137,33 @@ const l = (e, s) => {
83
137
  }
84
138
  },
85
139
  setup(e) {
86
- return (s, t) => (c(), a("div", E, [
87
- e.chat ? (c(), a("div", K, [
88
- u("h2", null, i(e.chat.name), 1)
89
- ])) : p("", !0)
140
+ return (s, t) => (a(), n("div", ee, [
141
+ e.chat ? (a(), n("div", te, [
142
+ r("h2", null, u(e.chat.name), 1)
143
+ ])) : h("", !0)
90
144
  ]));
91
145
  }
92
- }, X = /* @__PURE__ */ l(N, [["__scopeId", "data-v-7ca4835c"]]), P = { class: "chat-input" }, U = {
146
+ }, De = /* @__PURE__ */ _(se, [["__scopeId", "data-v-7ca4835c"]]), ae = { class: "chat-input" }, ne = {
93
147
  __name: "ChatInput",
94
148
  emits: ["send"],
95
149
  setup(e, { emit: s }) {
96
- const t = s, n = m(""), r = m(null), o = () => {
97
- n.value.trim() && (t("send", n.value), n.value = "", h(r).focus());
150
+ const t = s, c = v(""), o = v(null), i = () => {
151
+ c.value.trim() && (t("send", c.value), c.value = "", I(o).focus());
98
152
  };
99
- return (d, _) => (c(), a("div", P, [
100
- I(u("input", {
101
- "onUpdate:modelValue": _[0] || (_[0] = (y) => n.value = y),
153
+ return (l, m) => (a(), n("div", ae, [
154
+ x(r("input", {
155
+ "onUpdate:modelValue": m[0] || (m[0] = (d) => c.value = d),
102
156
  ref_key: "refInput",
103
- ref: r,
104
- onKeydown: C(o, ["enter"]),
157
+ ref: o,
158
+ onKeydown: k(i, ["enter"]),
105
159
  placeholder: "Type a message..."
106
160
  }, null, 544), [
107
- [$, n.value]
161
+ [w, c.value]
108
162
  ]),
109
- u("button", { onClick: o }, "Send")
163
+ r("button", { onClick: i }, "Send")
110
164
  ]));
111
165
  }
112
- }, Y = /* @__PURE__ */ l(U, [["__scopeId", "data-v-07719b64"]]), z = { class: "chat-list" }, H = {
166
+ }, Ve = /* @__PURE__ */ _(ne, [["__scopeId", "data-v-07719b64"]]), ce = { class: "chat-list" }, re = {
113
167
  __name: "ChatList",
114
168
  props: {
115
169
  chats: {
@@ -119,49 +173,230 @@ const l = (e, s) => {
119
173
  },
120
174
  emits: ["select"],
121
175
  setup(e, { emit: s }) {
122
- const t = s, n = (r) => {
123
- t("select", r);
124
- };
125
- return (r, o) => (c(), a("div", z, [
126
- (c(!0), a(f, null, g(e.chats, (d) => (c(), v(F, {
176
+ const t = e, c = s, o = (l) => {
177
+ c("select", l);
178
+ }, i = () => t.chats.sort((l, m) => {
179
+ if (l.countUnread > m.countUnread) return -1;
180
+ if (l.countUnread < m.countUnread) return 1;
181
+ if (l.countUnread == m.countUnread) return 0;
182
+ });
183
+ return (l, m) => (a(), n("div", ce, [
184
+ (a(!0), n($, null, C(i(), (d) => (a(), y(j, {
127
185
  key: d.chatId,
128
186
  chat: d,
129
- onSelect: n
187
+ onSelect: o
130
188
  }, null, 8, ["chat"]))), 128))
131
189
  ]));
132
190
  }
133
- }, Z = /* @__PURE__ */ l(H, [["__scopeId", "data-v-dda91c95"]]), G = {
134
- __name: "MessageFeed",
191
+ }, Ee = /* @__PURE__ */ _(re, [["__scopeId", "data-v-fafd9097"]]), oe = {
192
+ __name: "ChatFilter",
193
+ emits: ["update"],
194
+ setup(e, { emit: s }) {
195
+ const t = v(""), c = s, o = () => {
196
+ const i = I(t);
197
+ c("update", i.value);
198
+ };
199
+ return (i, l) => (a(), n("div", null, [
200
+ r("input", {
201
+ type: "text",
202
+ ref_key: "refInput",
203
+ ref: t,
204
+ onInput: o,
205
+ placeholder: "Поиск..."
206
+ }, null, 544)
207
+ ]));
208
+ }
209
+ }, ie = { class: "chat-list" }, de = {
210
+ __name: "ChatList2",
211
+ props: {
212
+ chats: {
213
+ type: Array,
214
+ required: !0
215
+ },
216
+ filterEnabled: {
217
+ type: Boolean,
218
+ required: !0
219
+ }
220
+ },
221
+ emits: ["select"],
222
+ setup(e, { emit: s }) {
223
+ const t = v(""), c = e, o = s, i = (d) => {
224
+ o("select", d), c.chats.forEach((f) => f.isSelected = !1);
225
+ const g = c.chats.find((f) => f.chatId === d.chatId);
226
+ g.isSelected = !0;
227
+ }, l = () => c.chats.sort((d, g) => {
228
+ if (d.countUnread > g.countUnread) return -1;
229
+ if (d.countUnread < g.countUnread) return 1;
230
+ if (d.countUnread == g.countUnread) return 0;
231
+ }).filter((d) => d.name.includes(t.value)), m = (d) => {
232
+ t.value = d;
233
+ };
234
+ return (d, g) => (a(), n("div", null, [
235
+ e.filterEnabled ? (a(), y(oe, {
236
+ key: 0,
237
+ onUpdate: m
238
+ })) : h("", !0),
239
+ r("div", ie, [
240
+ (a(!0), n($, null, C(l(), (f) => (a(), y(L, {
241
+ key: f.chatId,
242
+ chat: f,
243
+ onSelect: i
244
+ }, null, 8, ["chat"]))), 128))
245
+ ])
246
+ ]));
247
+ }
248
+ }, Le = /* @__PURE__ */ _(de, [["__scopeId", "data-v-1fd0e46c"]]), le = {
249
+ props: {
250
+ message: {
251
+ type: Object,
252
+ required: !0
253
+ }
254
+ /*
255
+ imageSrc: {
256
+ type: String,
257
+ required: true,
258
+ },
259
+ isSent: {
260
+ type: Boolean,
261
+ default: false,
262
+ },
263
+ isDelivered: {
264
+ type: Boolean,
265
+ default: false,
266
+ },
267
+ isRead: {
268
+ type: Boolean,
269
+ default: false,
270
+ },
271
+ timestamp: {
272
+ type: Number,
273
+ required: true,
274
+ },
275
+ */
276
+ },
277
+ setup(e) {
278
+ return {
279
+ showPreview: v(!1)
280
+ };
281
+ }
282
+ }, ue = {
283
+ key: 0,
284
+ class: "message-content"
285
+ }, me = ["src"], _e = {
286
+ key: 1,
287
+ class: "preview-container"
288
+ }, he = ["src"], ge = { class: "message-info" }, fe = {
289
+ key: 0,
290
+ class: "message-status"
291
+ }, ve = {
292
+ key: 0,
293
+ class: "status read"
294
+ }, pe = {
295
+ key: 1,
296
+ class: "status delivered"
297
+ }, ye = {
298
+ key: 2,
299
+ class: "status sending"
300
+ }, Ie = { class: "message-time" };
301
+ function $e(e, s, t, c, o, i) {
302
+ return a(), n("div", {
303
+ class: p(["message-container", { sent: t.message.isSent, received: !t.message.isSent }])
304
+ }, [
305
+ c.showPreview ? (a(), n("div", _e, [
306
+ r("img", {
307
+ src: t.message.url,
308
+ alt: "Изображение",
309
+ class: "preview-image"
310
+ }, null, 8, he),
311
+ s[2] || (s[2] = r("br", null, null, -1)),
312
+ r("button", {
313
+ onClick: s[1] || (s[1] = (l) => c.showPreview = !1)
314
+ }, "Закрыть")
315
+ ])) : (a(), n("div", ue, [
316
+ r("img", {
317
+ src: t.message.url,
318
+ onClick: s[0] || (s[0] = (l) => c.showPreview = !0),
319
+ alt: "Изображение",
320
+ class: "chat-image"
321
+ }, null, 8, me)
322
+ ])),
323
+ r("div", ge, [
324
+ t.message.isSent ? (a(), n("div", fe, [
325
+ t.message.isRead ? (a(), n("span", ve, "✓")) : t.message.isDelivered ? (a(), n("span", pe, "✓")) : (a(), n("span", ye, "..."))
326
+ ])) : h("", !0),
327
+ r("div", Ie, u(t.message.time), 1)
328
+ ])
329
+ ], 2);
330
+ }
331
+ const Ce = /* @__PURE__ */ _(le, [["render", $e]]), xe = { class: "dateMessage" }, ke = { class: "dateMessage__text" }, we = {
332
+ __name: "DateMessage",
333
+ props: {
334
+ message: {
335
+ type: Object
336
+ }
337
+ },
338
+ setup(e) {
339
+ return (s, t) => (a(), n("div", xe, [
340
+ r("p", ke, u(e.message.text), 1)
341
+ ]));
342
+ }
343
+ }, be = /* @__PURE__ */ _(we, [["__scopeId", "data-v-2d53fb22"]]), Me = ["messageId"], Ue = ["src"], Se = { class: "message-time" }, qe = {
344
+ __name: "AudioMessage",
345
+ props: {
346
+ message: {
347
+ type: Object,
348
+ required: !0
349
+ }
350
+ },
351
+ setup(e) {
352
+ function s(t) {
353
+ return t.position === "left" ? "audio-message-left" : "audio-message-right";
354
+ }
355
+ return (t, c) => (a(), n("div", {
356
+ class: p(s(e.message)),
357
+ messageId: e.message.messageId
358
+ }, [
359
+ r("audio", {
360
+ src: e.message.url,
361
+ controls: ""
362
+ }, null, 8, Ue),
363
+ r("div", Se, u(e.message.time), 1)
364
+ ], 10, Me));
365
+ }
366
+ }, je = /* @__PURE__ */ _(qe, [["__scopeId", "data-v-127acb40"]]), Ae = {
367
+ __name: "Feed",
135
368
  props: {
136
- messages: {
369
+ objects: {
137
370
  type: Array,
138
371
  required: !0
139
372
  }
140
373
  },
141
374
  setup(e) {
142
- const s = m(null), t = e, n = (o) => ({
143
- "message.text": A,
144
- "message.image": S,
145
- "message.file": w
146
- })[o];
147
- function r() {
148
- M(function() {
149
- const o = h(s);
150
- o.scrollTop = o.scrollHeight;
375
+ const s = v(null), t = e, c = (i) => ({
376
+ "message.text": Y,
377
+ "message.image": Ce,
378
+ "message.file": N,
379
+ "message.audio": je,
380
+ "system.date": be
381
+ })[i];
382
+ function o() {
383
+ S(function() {
384
+ const i = I(s);
385
+ i.scrollTop = i.scrollHeight;
151
386
  });
152
387
  }
153
- return k(() => t.messages, r), (o, d) => (c(), a("div", {
388
+ return b(() => o), M(() => t.objects, o), (i, l) => (a(), n("div", {
154
389
  class: "message-feed",
155
390
  ref_key: "refFeed",
156
391
  ref: s
157
392
  }, [
158
- (c(!0), a(f, null, g(e.messages, (_) => (c(), v(b(n(_.type)), {
159
- key: _.id,
160
- message: _
393
+ (a(!0), n($, null, C(e.objects, (m) => (a(), y(U(c(m.type)), {
394
+ key: m.messageId,
395
+ message: m
161
396
  }, null, 8, ["message"]))), 128))
162
397
  ], 512));
163
398
  }
164
- }, ee = /* @__PURE__ */ l(G, [["__scopeId", "data-v-b2d2ed34"]]), J = { class: "profile" }, Q = { key: 0 }, R = {
399
+ }, Re = /* @__PURE__ */ _(Ae, [["__scopeId", "data-v-37208651"]]), Fe = { class: "profile" }, Oe = { key: 0 }, Pe = {
165
400
  __name: "Profile",
166
401
  props: {
167
402
  user: {
@@ -170,23 +405,25 @@ const l = (e, s) => {
170
405
  }
171
406
  },
172
407
  setup(e) {
173
- return (s, t) => (c(), a("div", J, [
174
- e.user ? (c(), a("div", Q, [
175
- u("h2", null, i(e.user.name), 1),
176
- u("p", null, i(e.user.email), 1),
177
- u("p", null, i(e.user.phone), 1)
178
- ])) : p("", !0)
408
+ return (s, t) => (a(), n("div", Fe, [
409
+ e.user ? (a(), n("div", Oe, [
410
+ r("h2", null, u(e.user.name), 1),
411
+ r("p", null, u(e.user.email), 1),
412
+ r("p", null, u(e.user.phone), 1)
413
+ ])) : h("", !0)
179
414
  ]));
180
415
  }
181
- }, te = /* @__PURE__ */ l(R, [["__scopeId", "data-v-e1bf37ef"]]);
416
+ }, Ge = /* @__PURE__ */ _(Pe, [["__scopeId", "data-v-e1bf37ef"]]);
182
417
  export {
183
- F as Chat,
184
- X as ChatInfo,
185
- Y as ChatInput,
186
- Z as ChatList,
187
- w as FileMessage,
188
- S as ImageMessage,
189
- ee as MessageFeed,
190
- te as Profile,
191
- A as TextMessage
418
+ j as Chat,
419
+ L as Chat2,
420
+ De as ChatInfo,
421
+ Ve as ChatInput,
422
+ Ee as ChatList,
423
+ Le as ChatList2,
424
+ Re as Feed,
425
+ N as FileMessage,
426
+ Be as ImageMessage,
427
+ Ge as Profile,
428
+ Y as TextMessage
192
429
  };
@@ -1 +1 @@
1
- (function(c,e){typeof exports=="object"&&typeof module<"u"?e(exports,require("vue")):typeof define=="function"&&define.amd?define(["exports","vue"],e):(c=typeof globalThis<"u"?globalThis:c||self,e(c.vuessages={},c.Vue))})(this,function(c,e){"use strict";const l=(t,n)=>{const s=t.__vccOpts||t;for(const[a,o]of n)s[a]=o;return s},d=l({__name:"Chat",props:{chat:{type:Object,required:!0}},emits:["select"],setup(t,{emit:n}){const s=t,a=n,o=()=>{a("select",s.chat)};return(r,i)=>(e.openBlock(),e.createElementBlock("div",{class:"chat",onClick:o},[e.createElementVNode("p",null,e.toDisplayString(t.chat.name)+" "+e.toDisplayString(t.chat.countUnread),1)]))}},[["__scopeId","data-v-77b8ac34"]]),h={class:"file-message"},g=["href"],_=l({__name:"FileMessage",props:{message:{type:Object,required:!0}},setup(t){return(n,s)=>(e.openBlock(),e.createElementBlock("div",h,[e.createElementVNode("a",{href:t.message.url,download:""},e.toDisplayString(t.message.filename),9,g)]))}},[["__scopeId","data-v-9fef0716"]]),u={class:"image-message"},k=["src","alt"],p=l({__name:"ImageMessage",props:{message:{type:Object,required:!0}},setup(t){return(n,s)=>(e.openBlock(),e.createElementBlock("div",u,[e.createElementVNode("img",{src:t.message.url,alt:t.message.alt},null,8,k)]))}},[["__scopeId","data-v-1c1327d6"]]),f=l({__name:"TextMessage",props:{message:{type:Object,required:!0}},setup(t){function n(s){return s.direction==="incoming"?"text-message-left":"text-message-right"}return(s,a)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(n(t.message))},[e.createElementVNode("p",null,e.toDisplayString(t.message.text),1)],2))}},[["__scopeId","data-v-4deff5d3"]]),y={class:"chat-info"},B={key:0},$=l({__name:"ChatInfo",props:{chat:{type:Object,required:!0}},setup(t){return(n,s)=>(e.openBlock(),e.createElementBlock("div",y,[t.chat?(e.openBlock(),e.createElementBlock("div",B,[e.createElementVNode("h2",null,e.toDisplayString(t.chat.name),1)])):e.createCommentVNode("",!0)]))}},[["__scopeId","data-v-7ca4835c"]]),E={class:"chat-input"},C=l({__name:"ChatInput",emits:["send"],setup(t,{emit:n}){const s=n,a=e.ref(""),o=e.ref(null),r=()=>{a.value.trim()&&(s("send",a.value),a.value="",e.unref(o).focus())};return(i,m)=>(e.openBlock(),e.createElementBlock("div",E,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":m[0]||(m[0]=S=>a.value=S),ref_key:"refInput",ref:o,onKeydown:e.withKeys(r,["enter"]),placeholder:"Type a message..."},null,544),[[e.vModelText,a.value]]),e.createElementVNode("button",{onClick:r},"Send")]))}},[["__scopeId","data-v-07719b64"]]),I={class:"chat-list"},M=l({__name:"ChatList",props:{chats:{type:Array,required:!0}},emits:["select"],setup(t,{emit:n}){const s=n,a=o=>{s("select",o)};return(o,r)=>(e.openBlock(),e.createElementBlock("div",I,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.chats,i=>(e.openBlock(),e.createBlock(d,{key:i.chatId,chat:i,onSelect:a},null,8,["chat"]))),128))]))}},[["__scopeId","data-v-dda91c95"]]),V=l({__name:"MessageFeed",props:{messages:{type:Array,required:!0}},setup(t){const n=e.ref(null),s=t,a=r=>({"message.text":f,"message.image":p,"message.file":_})[r];function o(){e.nextTick(function(){const r=e.unref(n);r.scrollTop=r.scrollHeight})}return e.watch(()=>s.messages,o),(r,i)=>(e.openBlock(),e.createElementBlock("div",{class:"message-feed",ref_key:"refFeed",ref:n},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.messages,m=>(e.openBlock(),e.createBlock(e.resolveDynamicComponent(a(m.type)),{key:m.id,message:m},null,8,["message"]))),128))],512))}},[["__scopeId","data-v-b2d2ed34"]]),b={class:"profile"},x={key:0},N=l({__name:"Profile",props:{user:{type:Object,required:!0}},setup(t){return(n,s)=>(e.openBlock(),e.createElementBlock("div",b,[t.user?(e.openBlock(),e.createElementBlock("div",x,[e.createElementVNode("h2",null,e.toDisplayString(t.user.name),1),e.createElementVNode("p",null,e.toDisplayString(t.user.email),1),e.createElementVNode("p",null,e.toDisplayString(t.user.phone),1)])):e.createCommentVNode("",!0)]))}},[["__scopeId","data-v-e1bf37ef"]]);c.Chat=d,c.ChatInfo=$,c.ChatInput=C,c.ChatList=M,c.FileMessage=_,c.ImageMessage=p,c.MessageFeed=V,c.Profile=N,c.TextMessage=f,Object.defineProperty(c,Symbol.toStringTag,{value:"Module"})});
1
+ (function(l,e){typeof exports=="object"&&typeof module<"u"?e(exports,require("vue")):typeof define=="function"&&define.amd?define(["exports","vue"],e):(l=typeof globalThis<"u"?globalThis:l||self,e(l.vuessages={},l.Vue))})(this,function(l,e){"use strict";const m=(t,a)=>{const s=t.__vccOpts||t;for(const[n,c]of a)s[n]=c;return s},h=m({__name:"Chat",props:{chat:{type:Object,required:!0}},emits:["select"],setup(t,{emit:a}){const s=t,n=a,c=()=>{n("select",s.chat)};return(o,i)=>(e.openBlock(),e.createElementBlock("div",{class:"chat",onClick:c},[e.createElementVNode("p",null,e.toDisplayString(t.chat.name)+" "+e.toDisplayString(t.chat.countUnread),1)]))}},[["__scopeId","data-v-77b8ac34"]]),u={class:"avatar"},B=["src"],y={class:"chat-info"},E={class:"name"},C={key:0,class:"last-message"},$={class:"chat-details"},I={key:0,class:"unread"},V={key:1,class:"time"},f=m({__name:"Chat2",props:{chat:{type:Object,required:!0}},emits:["select"],setup(t,{emit:a}){const s=t,n=a,c=()=>{n("select",s.chat)},o=()=>s.chat.isSelected?"chat-item-selected":"chat-item",i=()=>s.chat.avatar?s.chat.avatar:"data:image/svg+xml;base64,"+window.btoa('<svg fill="#000000" width="800px" height="800px" viewBox="0 -2.93 32.537 32.537" xmlns="http://www.w3.org/2000/svg"><g id="SVGRepo_bgCarrier" stroke-width="0"/><g id="SVGRepo_tracerCarrier" stroke-linecap="round" stroke-linejoin="round"/><g id="SVGRepo_iconCarrier"> <g transform="translate(-481.391 -197.473)"> <path d="M512.928,224.152a.991.991,0,0,1-.676-.264,21.817,21.817,0,0,0-29.2-.349,1,1,0,1,1-1.322-1.5,23.814,23.814,0,0,1,31.875.377,1,1,0,0,1-.677,1.736Z"/> <path d="M498.191,199.473a7.949,7.949,0,1,1-7.949,7.95,7.959,7.959,0,0,1,7.949-7.95m0-2a9.949,9.949,0,1,0,9.95,9.95,9.949,9.949,0,0,0-9.95-9.95Z"/> </g> </g></svg>');return(d,r)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(o()),onClick:c},[e.createElementVNode("div",u,[e.createElementVNode("img",{src:i(),width:"50",height:"50"},null,8,B)]),e.createElementVNode("div",y,[e.createElementVNode("div",E,e.toDisplayString(t.chat.name),1),t.chat.lastMessage?(e.openBlock(),e.createElementBlock("div",C,e.toDisplayString(t.chat.lastMessage),1)):e.createCommentVNode("",!0)]),e.createElementVNode("div",$,[t.chat.countUnread>0?(e.openBlock(),e.createElementBlock("div",I,e.toDisplayString(t.chat.countUnread),1)):e.createCommentVNode("",!0),t.chat["lastActivity.time"]?(e.openBlock(),e.createElementBlock("div",V,e.toDisplayString(t.chat["lastActivity.time"]),1)):e.createCommentVNode("",!0)])],2))}},[["__scopeId","data-v-b194d366"]]),N={class:"file-message"},S=["href"],p=m({__name:"FileMessage",props:{message:{type:Object,required:!0}},setup(t){return(a,s)=>(e.openBlock(),e.createElementBlock("div",N,[e.createElementVNode("a",{href:t.message.url,download:""},e.toDisplayString(t.message.filename),9,S)]))}},[["__scopeId","data-v-18efd407"]]),w=["messageId"],b=["src","alt"],x={class:"message-time"},M=m({__name:"ImageMessage",props:{message:{type:Object,required:!0}},setup(t){const a=t;function s(){return a.message.position==="left"?"image-message-left":"image-message-right"}return(n,c)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(s()),messageId:t.message.messageId},[e.createElementVNode("img",{src:t.message.url,alt:t.message.alt,class:"image-message"},null,8,b),e.createElementVNode("div",x,e.toDisplayString(t.message.time),1)],10,w))}},[["__scopeId","data-v-1f459534"]]),D=["messageId"],U={class:"message-time"},k=m({__name:"TextMessage",props:{message:{type:Object,required:!0}},setup(t){function a(s){return s.position==="left"?"text-message-left":"text-message-right"}return(s,n)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(a(t.message)),messageId:t.message.messageId},[e.createElementVNode("p",null,e.toDisplayString(t.message.text),1),e.createElementVNode("div",U,e.toDisplayString(t.message.time),1)],10,D))}},[["__scopeId","data-v-c807c835"]]),F={class:"chat-info"},j={key:0},q=m({__name:"ChatInfo",props:{chat:{type:Object,required:!0}},setup(t){return(a,s)=>(e.openBlock(),e.createElementBlock("div",F,[t.chat?(e.openBlock(),e.createElementBlock("div",j,[e.createElementVNode("h2",null,e.toDisplayString(t.chat.name),1)])):e.createCommentVNode("",!0)]))}},[["__scopeId","data-v-7ca4835c"]]),O={class:"chat-input"},A=m({__name:"ChatInput",emits:["send"],setup(t,{emit:a}){const s=a,n=e.ref(""),c=e.ref(null),o=()=>{n.value.trim()&&(s("send",n.value),n.value="",e.unref(c).focus())};return(i,d)=>(e.openBlock(),e.createElementBlock("div",O,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":d[0]||(d[0]=r=>n.value=r),ref_key:"refInput",ref:c,onKeydown:e.withKeys(o,["enter"]),placeholder:"Type a message..."},null,544),[[e.vModelText,n.value]]),e.createElementVNode("button",{onClick:o},"Send")]))}},[["__scopeId","data-v-07719b64"]]),T={class:"chat-list"},L=m({__name:"ChatList",props:{chats:{type:Array,required:!0}},emits:["select"],setup(t,{emit:a}){const s=t,n=a,c=i=>{n("select",i)},o=()=>s.chats.sort((i,d)=>{if(i.countUnread>d.countUnread)return-1;if(i.countUnread<d.countUnread)return 1;if(i.countUnread==d.countUnread)return 0});return(i,d)=>(e.openBlock(),e.createElementBlock("div",T,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o(),r=>(e.openBlock(),e.createBlock(h,{key:r.chatId,chat:r,onSelect:c},null,8,["chat"]))),128))]))}},[["__scopeId","data-v-fafd9097"]]),P={__name:"ChatFilter",emits:["update"],setup(t,{emit:a}){const s=e.ref(""),n=a,c=()=>{const o=e.unref(s);n("update",o.value)};return(o,i)=>(e.openBlock(),e.createElementBlock("div",null,[e.createElementVNode("input",{type:"text",ref_key:"refInput",ref:s,onInput:c,placeholder:"Поиск..."},null,544)]))}},z={class:"chat-list"},R=m({__name:"ChatList2",props:{chats:{type:Array,required:!0},filterEnabled:{type:Boolean,required:!0}},emits:["select"],setup(t,{emit:a}){const s=e.ref(""),n=t,c=a,o=r=>{c("select",r),n.chats.forEach(g=>g.isSelected=!1);const _=n.chats.find(g=>g.chatId===r.chatId);_.isSelected=!0},i=()=>n.chats.sort((r,_)=>{if(r.countUnread>_.countUnread)return-1;if(r.countUnread<_.countUnread)return 1;if(r.countUnread==_.countUnread)return 0}).filter(r=>r.name.includes(s.value)),d=r=>{s.value=r};return(r,_)=>(e.openBlock(),e.createElementBlock("div",null,[t.filterEnabled?(e.openBlock(),e.createBlock(P,{key:0,onUpdate:d})):e.createCommentVNode("",!0),e.createElementVNode("div",z,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i(),g=>(e.openBlock(),e.createBlock(f,{key:g.chatId,chat:g,onSelect:o},null,8,["chat"]))),128))])]))}},[["__scopeId","data-v-1fd0e46c"]]),G={props:{message:{type:Object,required:!0}},setup(t){return{showPreview:e.ref(!1)}}},K={key:0,class:"message-content"},Z=["src"],H={key:1,class:"preview-container"},J=["src"],Q={class:"message-info"},W={key:0,class:"message-status"},X={key:0,class:"status read"},Y={key:1,class:"status delivered"},v={key:2,class:"status sending"},ee={class:"message-time"};function te(t,a,s,n,c,o){return e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["message-container",{sent:s.message.isSent,received:!s.message.isSent}])},[n.showPreview?(e.openBlock(),e.createElementBlock("div",H,[e.createElementVNode("img",{src:s.message.url,alt:"Изображение",class:"preview-image"},null,8,J),a[2]||(a[2]=e.createElementVNode("br",null,null,-1)),e.createElementVNode("button",{onClick:a[1]||(a[1]=i=>n.showPreview=!1)},"Закрыть")])):(e.openBlock(),e.createElementBlock("div",K,[e.createElementVNode("img",{src:s.message.url,onClick:a[0]||(a[0]=i=>n.showPreview=!0),alt:"Изображение",class:"chat-image"},null,8,Z)])),e.createElementVNode("div",Q,[s.message.isSent?(e.openBlock(),e.createElementBlock("div",W,[s.message.isRead?(e.openBlock(),e.createElementBlock("span",X,"✓")):s.message.isDelivered?(e.openBlock(),e.createElementBlock("span",Y,"✓")):(e.openBlock(),e.createElementBlock("span",v,"..."))])):e.createCommentVNode("",!0),e.createElementVNode("div",ee,e.toDisplayString(s.message.time),1)])],2)}const se=m(G,[["render",te]]),ae={class:"dateMessage"},ne={class:"dateMessage__text"},ce=m({__name:"DateMessage",props:{message:{type:Object}},setup(t){return(a,s)=>(e.openBlock(),e.createElementBlock("div",ae,[e.createElementVNode("p",ne,e.toDisplayString(t.message.text),1)]))}},[["__scopeId","data-v-2d53fb22"]]),oe=["messageId"],re=["src"],le={class:"message-time"},ie=m({__name:"AudioMessage",props:{message:{type:Object,required:!0}},setup(t){function a(s){return s.position==="left"?"audio-message-left":"audio-message-right"}return(s,n)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(a(t.message)),messageId:t.message.messageId},[e.createElementVNode("audio",{src:t.message.url,controls:""},null,8,re),e.createElementVNode("div",le,e.toDisplayString(t.message.time),1)],10,oe))}},[["__scopeId","data-v-127acb40"]]),de=m({__name:"Feed",props:{objects:{type:Array,required:!0}},setup(t){const a=e.ref(null),s=t,n=o=>({"message.text":k,"message.image":se,"message.file":p,"message.audio":ie,"system.date":ce})[o];function c(){e.nextTick(function(){const o=e.unref(a);o.scrollTop=o.scrollHeight})}return e.onUpdated(()=>c),e.watch(()=>s.objects,c),(o,i)=>(e.openBlock(),e.createElementBlock("div",{class:"message-feed",ref_key:"refFeed",ref:a},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.objects,d=>(e.openBlock(),e.createBlock(e.resolveDynamicComponent(n(d.type)),{key:d.messageId,message:d},null,8,["message"]))),128))],512))}},[["__scopeId","data-v-37208651"]]),me={class:"profile"},_e={key:0},ge=m({__name:"Profile",props:{user:{type:Object,required:!0}},setup(t){return(a,s)=>(e.openBlock(),e.createElementBlock("div",me,[t.user?(e.openBlock(),e.createElementBlock("div",_e,[e.createElementVNode("h2",null,e.toDisplayString(t.user.name),1),e.createElementVNode("p",null,e.toDisplayString(t.user.email),1),e.createElementVNode("p",null,e.toDisplayString(t.user.phone),1)])):e.createCommentVNode("",!0)]))}},[["__scopeId","data-v-e1bf37ef"]]);l.Chat=h,l.Chat2=f,l.ChatInfo=q,l.ChatInput=A,l.ChatList=L,l.ChatList2=R,l.Feed=de,l.FileMessage=p,l.ImageMessage=M,l.Profile=ge,l.TextMessage=k,Object.defineProperty(l,Symbol.toStringTag,{value:"Module"})});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mobilon-dev/chotto",
3
- "version": "0.0.1",
3
+ "version": "0.0.2",
4
4
  "type": "module",
5
5
  "main": "./dist/vuessages.umd.js",
6
6
  "module": "./dist/vuessages.es.js",
@@ -25,24 +25,23 @@
25
25
  "dependencies": {
26
26
  "date-fns": "^4.1.0",
27
27
  "pinia": "^2.2.2",
28
- "vue": "^3.5.6",
28
+ "vue": "^3.5.8",
29
29
  "vue3-emoji-picker": "^1.1.8"
30
30
  },
31
31
  "devDependencies": {
32
- "@chromatic-com/storybook": "^1.9.0",
33
- "@storybook/addon-essentials": "^8.3.1",
34
- "@storybook/addon-interactions": "^8.3.1",
35
- "@storybook/addon-links": "^8.3.1",
36
- "@storybook/addon-onboarding": "^8.3.1",
37
- "@storybook/blocks": "^8.3.1",
38
- "@storybook/test": "^8.3.1",
39
- "@storybook/vue3": "^8.3.1",
40
- "@storybook/vue3-vite": "^8.3.1",
41
- "@types/node": "^22.5.5",
32
+ "@chromatic-com/storybook": "^2.0.2",
33
+ "@storybook/addon-essentials": "^8.3.2",
34
+ "@storybook/addon-interactions": "^8.3.2",
35
+ "@storybook/addon-links": "^8.3.2",
36
+ "@storybook/blocks": "^8.3.2",
37
+ "@storybook/test": "^8.3.2",
38
+ "@storybook/vue3": "^8.3.2",
39
+ "@storybook/vue3-vite": "^8.3.2",
40
+ "@types/node": "^22.6.1",
42
41
  "@vitejs/plugin-vue": "^5.1.4",
43
- "storybook": "^8.3.1",
42
+ "storybook": "^8.3.2",
44
43
  "typescript": "^5.6.2",
45
- "vite": "^5.4.6",
44
+ "vite": "^5.4.7",
46
45
  "vite-plugin-static-copy": "^1.0.6",
47
46
  "vue-tsc": "^2.1.6"
48
47
  }