@mobilon-dev/chotto 0.3.41 → 0.3.43

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 (47) hide show
  1. package/dist/chotto.css +1 -1
  2. package/dist/components/1_atoms/Tooltip/Tooltip.vue.js +2 -2
  3. package/dist/components/1_atoms/Tooltip/Tooltip.vue2.js +60 -52
  4. package/dist/components/2_feed_elements/FileMessage/FileMessage.vue.js +3 -3
  5. package/dist/components/2_feed_elements/FileMessage/FileMessage.vue2.js +99 -89
  6. package/dist/components/2_feed_elements/MessageSmsInvite/MessageSmsInvite.vue.js +7 -0
  7. package/dist/components/2_feed_elements/MessageSmsInvite/MessageSmsInvite.vue2.js +64 -0
  8. package/dist/components/2_feed_elements/MissedCallMessage/MissedCallMessage.vue.js +7 -0
  9. package/dist/components/2_feed_elements/MissedCallMessage/MissedCallMessage.vue2.js +109 -0
  10. package/dist/components/2_feed_elements/MissedCallMessage/icons/MissedCallIcon.vue.js +34 -0
  11. package/dist/components/2_feed_elements/TextMessage/TextMessage.vue.js +1 -1
  12. package/dist/components/2_feed_elements/TextMessage/TextMessage.vue2.js +74 -64
  13. package/dist/components/3_compounds/ChatList/ChatListHeader.vue.js +43 -10
  14. package/dist/components/3_compounds/ChatList/icons/LogoIcon.vue.js +19 -0
  15. package/dist/components/3_compounds/Feed/Feed.vue.js +1 -1
  16. package/dist/components/3_compounds/Feed/Feed.vue2.js +134 -127
  17. package/dist/components/3_compounds/Feed/composables/useFeedComponents.js +10 -8
  18. package/dist/index.js +147 -145
  19. package/dist/locale/en.js +2 -1
  20. package/dist/locale/ru.js +2 -1
  21. package/dist/themes/dark.css +1 -1
  22. package/dist/themes/default.css +1 -1
  23. package/dist/themes/glass.css +1 -1
  24. package/dist/themes/green.css +1 -1
  25. package/dist/themes/mobilon1.css +1 -1
  26. package/dist/types/apps/data/messages.d.ts +166 -7
  27. package/dist/types/components/1_atoms/Tooltip/Tooltip.vue.d.ts +9 -0
  28. package/dist/types/components/1_atoms/Tooltip/styles/types.d.ts +2 -0
  29. package/dist/types/components/2_feed_elements/FileMessage/FileMessage.vue.d.ts +2 -0
  30. package/dist/types/components/2_feed_elements/FileMessage/styles/types.d.ts +2 -0
  31. package/dist/types/components/2_feed_elements/MessageSmsInvite/MessageSmsInvite.vue.d.ts +11 -0
  32. package/dist/types/components/2_feed_elements/MessageSmsInvite/styles/types.d.ts +49 -0
  33. package/dist/types/components/2_feed_elements/MissedCallMessage/MissedCallMessage.vue.d.ts +40 -0
  34. package/dist/types/components/2_feed_elements/MissedCallMessage/icons/MissedCallIcon.vue.d.ts +2 -0
  35. package/dist/types/components/2_feed_elements/MissedCallMessage/stories/MissedCallMessage.stories.d.ts +12 -0
  36. package/dist/types/components/2_feed_elements/TextMessage/TextMessage.vue.d.ts +2 -0
  37. package/dist/types/components/2_feed_elements/types/messages.d.ts +22 -0
  38. package/dist/types/components/3_compounds/ChatList/ChatListHeader.vue.d.ts +6 -0
  39. package/dist/types/components/3_compounds/ChatList/icons/LogoIcon.vue.d.ts +2 -0
  40. package/dist/types/components/3_compounds/ChatList/styles/types.d.ts +44 -0
  41. package/dist/types/components/3_compounds/Feed/Feed.vue.d.ts +4 -2
  42. package/dist/types/components/index.d.ts +1 -0
  43. package/dist/types/hooks/validators/messages/types.d.ts +1 -0
  44. package/dist/types/locale/en.d.ts +1 -0
  45. package/dist/types/locale/ru.d.ts +1 -0
  46. package/dist/types/main.d.ts +3 -0
  47. package/package.json +1 -1
@@ -1,7 +1,7 @@
1
1
  import o from "./Feed.vue2.js";
2
2
  /* empty css */
3
3
  import t from "../../../_virtual/_plugin-vue_export-helper.js";
4
- const m = /* @__PURE__ */ t(o, [["__scopeId", "data-v-08344bf7"]]);
4
+ const m = /* @__PURE__ */ t(o, [["__scopeId", "data-v-05a59365"]]);
5
5
  export {
6
6
  m as default
7
7
  };
@@ -1,25 +1,25 @@
1
- import { defineComponent as se, ref as b, computed as r, inject as le, watch as ne, nextTick as F, onMounted as ae, createElementBlock as d, openBlock as o, Fragment as M, createBlock as u, createCommentVNode as c, unref as t, normalizeStyle as re, createVNode as y, Transition as p, withCtx as k, renderList as ie, resolveDynamicComponent as de, createElementVNode as C, toDisplayString as ce, renderSlot as ue, Teleport as fe } from "vue";
2
- import me from "../../2_feed_elements/DateMessageSticky/DateMessageSticky.vue.js";
3
- import ye from "../../2_feed_elements/BaseReplyMessage/BaseReplyMessage.vue.js";
4
- import ge from "../../2_feed_elements/MessageKeyboard/MessageKeyboard.vue.js";
5
- import be from "../../2_feed_elements/FeedKeyboard/FeedKeyboard.vue.js";
6
- import pe from "../../2_feed_elements/TypingMessage/TypingMessage.vue.js";
7
- import { useFeedButton as ke } from "./composables/useFeedButton.js";
8
- import { useFeedComponents as he } from "./composables/useFeedComponents.js";
9
- import { useFeedGrouping as Se } from "./composables/useFeedGrouping.js";
1
+ import { defineComponent as ne, ref as b, computed as i, inject as ae, watch as re, nextTick as C, onMounted as ie, createElementBlock as d, openBlock as s, Fragment as D, createBlock as m, createCommentVNode as c, unref as t, normalizeStyle as I, createVNode as y, Transition as p, withCtx as k, renderList as de, resolveDynamicComponent as ce, createElementVNode as w, toDisplayString as ue, renderSlot as me, Teleport as fe } from "vue";
2
+ import ye from "../../2_feed_elements/DateMessageSticky/DateMessageSticky.vue.js";
3
+ import ge from "../../2_feed_elements/BaseReplyMessage/BaseReplyMessage.vue.js";
4
+ import be from "../../2_feed_elements/MessageKeyboard/MessageKeyboard.vue.js";
5
+ import pe from "../../2_feed_elements/FeedKeyboard/FeedKeyboard.vue.js";
6
+ import ke from "../../2_feed_elements/TypingMessage/TypingMessage.vue.js";
7
+ import { useFeedButton as ve } from "./composables/useFeedButton.js";
8
+ import { useFeedComponents as Se } from "./composables/useFeedComponents.js";
9
+ import { useFeedGrouping as he } from "./composables/useFeedGrouping.js";
10
10
  import { useFeedKeyboard as Re } from "./composables/useFeedKeyboard.js";
11
- import { useFeedLoadMore as ve } from "./composables/useFeedLoadMore.js";
12
- import { useFeedMessageVisibility as Be } from "./composables/useFeedMessageVisibility.js";
13
- import { useFeedReply as Te } from "./composables/useFeedReply.js";
14
- import { useFeedScroll as Ae } from "./composables/useFeedScroll.js";
15
- import { useFeedScrollTo as Fe } from "./composables/useFeedScrollTo.js";
16
- import { useStickyDate as Me } from "./composables/useStickyDate.js";
17
- import { throttle as Ce } from "./functions/throttle.js";
18
- import De from "./assets/chat-background.svg.js";
11
+ import { useFeedLoadMore as Be } from "./composables/useFeedLoadMore.js";
12
+ import { useFeedMessageVisibility as Te } from "./composables/useFeedMessageVisibility.js";
13
+ import { useFeedReply as Ae } from "./composables/useFeedReply.js";
14
+ import { useFeedScroll as Fe } from "./composables/useFeedScroll.js";
15
+ import { useFeedScrollTo as Me } from "./composables/useFeedScrollTo.js";
16
+ import { useStickyDate as Ce } from "./composables/useStickyDate.js";
17
+ import { throttle as De } from "./functions/throttle.js";
18
+ import Ie from "./assets/chat-background.svg.js";
19
19
  const we = ["id"], je = ["id", "onDblclick"], Ke = {
20
20
  key: 0,
21
21
  class: "message-feed__unread-amount"
22
- }, xe = { style: { margin: "auto" } }, Ze = /* @__PURE__ */ se({
22
+ }, xe = { style: { margin: "auto" } }, _e = /* @__PURE__ */ ne({
23
23
  __name: "Feed",
24
24
  props: {
25
25
  objects: {
@@ -93,141 +93,147 @@ const we = ["id"], je = ["id", "onDblclick"], Ke = {
93
93
  "clickRepliedMessage",
94
94
  "forceScrollToBottom",
95
95
  "keyboardAction",
96
- "feedAction"
96
+ "feedAction",
97
+ "smsInvite"
97
98
  ],
98
- setup(e, { emit: D }) {
99
- const s = e, g = b(), n = b(), h = b(), {
100
- isShowButton: w,
101
- isKeyboardPlace: j,
102
- checkButtonVisibility: K
103
- } = ke({
99
+ setup(e, { emit: j }) {
100
+ const l = e, g = b(), n = b(), v = b(), {
101
+ isShowButton: K,
102
+ isKeyboardPlace: x,
103
+ checkButtonVisibility: $
104
+ } = ve({
104
105
  feedRef: n,
105
- keyboardRef: h
106
- }), { componentsMap: x } = he(), I = r(() => s.reactionsEnabled), { groupedObjects: O } = Se({
107
- objects: r(() => s.objects)
108
- }), m = le("chatAppId"), f = D, {
109
- checkScrollPosition: $,
106
+ keyboardRef: v
107
+ }), { componentsMap: O } = Se(), V = i(() => l.reactionsEnabled), { groupedObjects: q } = he({
108
+ objects: i(() => l.objects)
109
+ }), f = ae("chatAppId"), u = j, {
110
+ checkScrollPosition: z,
110
111
  startScrollWatch: S,
111
- stopScrollWatch: R,
112
- resetAllowFlags: V
113
- } = ve({
112
+ stopScrollWatch: h,
113
+ resetAllowFlags: E
114
+ } = Be({
114
115
  feedRef: n,
115
- emit: f,
116
- isLoadingMoreRef: r(() => s.isLoadingMore)
116
+ emit: u,
117
+ isLoadingMoreRef: i(() => l.isLoadingMore)
117
118
  }), {
118
- getMessage: v,
119
- messageAction: q,
120
- handleClickReplied: z,
121
- feedObjectDoubleClick: E,
122
- handleResetReply: L
123
- } = Te({
124
- enableDoubleClickReply: s.enableDoubleClickReply,
125
- emit: f
126
- }), {
127
- showKeyboard: P,
128
- keyboardAction: N,
129
- feedKeyboardAction: W
119
+ getMessage: R,
120
+ messageAction: L,
121
+ handleClickReplied: P,
122
+ feedObjectDoubleClick: N,
123
+ handleResetReply: W
124
+ } = Ae({
125
+ enableDoubleClickReply: l.enableDoubleClickReply,
126
+ emit: u
127
+ });
128
+ function G(a) {
129
+ u("smsInvite", a);
130
+ }
131
+ const {
132
+ showKeyboard: J,
133
+ keyboardAction: U,
134
+ feedKeyboardAction: H
130
135
  } = Re({
131
- isKeyboardPlace: j,
132
- objects: r(() => s.objects),
133
- emit: f
136
+ isKeyboardPlace: x,
137
+ objects: i(() => l.objects),
138
+ emit: u
134
139
  }), {
135
- showStickyDate: G,
136
- stickyDateText: J,
137
- show: U
138
- } = Me({
140
+ showStickyDate: Q,
141
+ stickyDateText: X,
142
+ show: Y
143
+ } = Ce({
139
144
  feedRef: n,
140
145
  trackingObjects: g
141
146
  }), {
142
- isInitialized: H,
143
- performScrollToBottom: Q,
147
+ isInitialized: Z,
148
+ performScrollToBottom: _,
144
149
  ensureScrollToBottom: B,
145
- initializeScroll: X,
146
- smoothScrollToBottom: Y
147
- } = Ae({
150
+ initializeScroll: ee,
151
+ smoothScrollToBottom: te
152
+ } = Fe({
148
153
  feedRef: n,
149
- objectsRef: r(() => s.objects),
150
- scrollToBottomRef: r(() => s.scrollToBottom)
151
- }), Z = r(() => s.chatBackground ?? `data:image/svg+xml;charset=utf-8,${encodeURIComponent(De)}`);
152
- function T(i = !0) {
153
- K(), $(i), U();
154
+ objectsRef: i(() => l.objects),
155
+ scrollToBottomRef: i(() => l.scrollToBottom)
156
+ }), T = i(() => l.chatBackground ?? `data:image/svg+xml;charset=utf-8,${encodeURIComponent(Ie)}`);
157
+ function A(a = !0) {
158
+ $(), z(a), Y();
154
159
  }
155
- const _ = Ce(() => T(), 250);
156
- function ee() {
157
- f("forceScrollToBottom"), Y();
160
+ const oe = De(() => A(), 250);
161
+ function se() {
162
+ u("forceScrollToBottom"), te();
158
163
  }
159
- const { restartObserving: te } = Be({
164
+ const { restartObserving: le } = Te({
160
165
  feedRef: n,
161
166
  trackingObjects: g,
162
- chatAppId: m,
163
- onMessageVisible: (i) => f("messageVisible", i)
167
+ chatAppId: f,
168
+ onMessageVisible: (a) => u("messageVisible", a)
164
169
  });
165
- return ne(
166
- () => s.objects,
170
+ return re(
171
+ () => l.objects,
167
172
  () => {
168
- F(() => {
169
- V(), T(!1), g.value = document.querySelectorAll(".tracking-message"), te();
173
+ C(() => {
174
+ E(), A(!1), g.value = document.querySelectorAll(".tracking-message"), le();
170
175
  });
171
176
  },
172
177
  { immediate: !0 }
173
- ), Fe({
174
- targetIdRef: r(() => s.scrollTo),
175
- feedContainerId: `feed-container-${m}`
176
- }), ae(() => {
177
- F(() => {
178
- s.objects.length > 0 && !H.value && X();
179
- const i = new ResizeObserver(() => {
180
- s.scrollToBottom && (Q(), setTimeout(() => {
178
+ ), Me({
179
+ targetIdRef: i(() => l.scrollTo),
180
+ feedContainerId: `feed-container-${f}`
181
+ }), ie(() => {
182
+ C(() => {
183
+ l.objects.length > 0 && !Z.value && ee();
184
+ const a = new ResizeObserver(() => {
185
+ l.scrollToBottom && (_(), setTimeout(() => {
181
186
  B();
182
187
  }, 200), setTimeout(() => {
183
188
  B();
184
189
  }, 800));
185
190
  });
186
- n.value && i.observe(n.value);
191
+ n.value && a.observe(n.value);
187
192
  });
188
- }), (i, a) => (o(), d(M, null, [
189
- e.objects.length > 0 || e.typing ? (o(), d("div", {
193
+ }), (a, r) => (s(), d(D, null, [
194
+ e.objects.length > 0 || e.typing ? (s(), d("div", {
190
195
  key: 0,
191
- id: "feed-container-" + t(m),
196
+ id: "feed-container-" + t(f),
192
197
  ref_key: "refFeed",
193
198
  ref: n,
194
199
  class: "message-feed",
195
- style: re({ backgroundImage: `url(${Z.value})` }),
196
- onScroll: a[0] || (a[0] = (l) => t(_)()),
197
- onMousedown: a[1] || (a[1] = //@ts-ignore
198
- (...l) => t(S) && t(S)(...l)),
199
- onMouseup: a[2] || (a[2] = //@ts-ignore
200
- (...l) => t(R) && t(R)(...l))
200
+ style: I({ backgroundImage: `url(${T.value})` }),
201
+ onScroll: r[0] || (r[0] = (o) => t(oe)()),
202
+ onMousedown: r[1] || (r[1] = //@ts-ignore
203
+ (...o) => t(S) && t(S)(...o)),
204
+ onMouseup: r[2] || (r[2] = //@ts-ignore
205
+ (...o) => t(h) && t(h)(...o))
201
206
  }, [
202
207
  y(p, null, {
203
208
  default: k(() => [
204
- t(G) ? (o(), u(me, {
209
+ t(Q) ? (s(), m(ye, {
205
210
  key: 0,
206
211
  class: "message-feed__sticky-date",
207
- text: t(J)
212
+ text: t(X)
208
213
  }, null, 8, ["text"])) : c("", !0)
209
214
  ]),
210
215
  _: 1
211
216
  }),
212
- (o(!0), d(M, null, ie(t(O), (l, A) => (o(), d("div", {
213
- id: JSON.stringify(l),
214
- key: `${l.messageId ?? "mid"}-${A}`,
217
+ (s(!0), d(D, null, de(t(q), (o, F) => (s(), d("div", {
218
+ id: JSON.stringify(o),
219
+ key: `${o.messageId ?? "mid"}-${F}`,
215
220
  class: "tracking-message",
216
- onDblclick: (oe) => t(E)(oe, l)
221
+ onDblclick: (M) => t(N)(M, o)
217
222
  }, [
218
- (o(), u(de(t(x)(l.type)), {
219
- key: `${l.messageId ?? "mid"}-${A}`,
223
+ (s(), m(ce(t(O)(o.type)), {
224
+ key: `${o.messageId ?? "mid"}-${F}`,
220
225
  class: "message-feed__message",
221
- message: l,
226
+ message: o,
222
227
  "apply-style": e.applyStyle,
223
- "is-first-in-series": l.isFirstInSeries,
224
- "reactions-enabled": I.value,
228
+ "is-first-in-series": o.isFirstInSeries,
229
+ "reactions-enabled": V.value,
225
230
  "subtext-tooltip-data": e.subtextTooltipData,
226
- onAction: t(q),
227
- onReply: t(z)
228
- }, null, 40, ["message", "apply-style", "is-first-in-series", "reactions-enabled", "subtext-tooltip-data", "onAction", "onReply"]))
231
+ onAction: t(L),
232
+ onReply: t(P),
233
+ onSmsInvite: (M) => G(o)
234
+ }, null, 40, ["message", "apply-style", "is-first-in-series", "reactions-enabled", "subtext-tooltip-data", "onAction", "onReply", "onSmsInvite"]))
229
235
  ], 40, je))), 128)),
230
- e.typing ? (o(), u(pe, {
236
+ e.typing ? (s(), m(ke, {
231
237
  key: 0,
232
238
  message: {
233
239
  subText: e.typing.title,
@@ -236,60 +242,61 @@ const we = ["id"], je = ["id", "onDblclick"], Ke = {
236
242
  }, null, 8, ["message"])) : c("", !0),
237
243
  y(p, null, {
238
244
  default: k(() => [
239
- t(P) ? (o(), u(ge, {
245
+ t(J) ? (s(), m(be, {
240
246
  key: 0,
241
247
  ref_key: "keyboardRef",
242
- ref: h,
248
+ ref: v,
243
249
  class: "message-feed__keyboard",
244
250
  keyboard: e.objects[e.objects.length - 1].keyboard,
245
251
  align: e.keyboardAlign,
246
- onAction: t(N)
252
+ onAction: t(U)
247
253
  }, null, 8, ["keyboard", "align", "onAction"])) : c("", !0)
248
254
  ]),
249
255
  _: 1
250
256
  }),
251
257
  y(p, null, {
252
258
  default: k(() => [
253
- t(w) ? (o(), d("button", {
259
+ t(K) ? (s(), d("button", {
254
260
  key: 0,
255
261
  class: "message-feed__button-down",
256
- onClick: ee
262
+ onClick: se
257
263
  }, [
258
- e.buttonParams ? (o(), d("div", Ke, ce(e.buttonParams.unreadAmount), 1)) : c("", !0),
259
- a[3] || (a[3] = C("span", { class: "pi pi-angle-down message-feed__icon-down" }, null, -1))
264
+ e.buttonParams ? (s(), d("div", Ke, ue(e.buttonParams.unreadAmount), 1)) : c("", !0),
265
+ r[3] || (r[3] = w("span", { class: "pi pi-angle-down message-feed__icon-down" }, null, -1))
260
266
  ])) : c("", !0)
261
267
  ]),
262
268
  _: 1
263
269
  }),
264
- e.feedKeyboards && e.feedKeyboards.length > 0 ? (o(), u(be, {
270
+ e.feedKeyboards && e.feedKeyboards.length > 0 ? (s(), m(pe, {
265
271
  key: 1,
266
272
  buttons: e.feedKeyboards,
267
273
  align: e.feedKeyboardAlign,
268
- onAction: t(W)
274
+ onAction: t(H)
269
275
  }, null, 8, ["buttons", "align", "onAction"])) : c("", !0)
270
- ], 44, we)) : (o(), d("div", {
276
+ ], 44, we)) : (s(), d("div", {
271
277
  key: 1,
272
278
  ref_key: "refFeed",
273
279
  ref: n,
274
- class: "message-feed"
280
+ class: "message-feed",
281
+ style: I({ backgroundImage: `url(${T.value})` })
275
282
  }, [
276
- C("div", xe, [
277
- ue(i.$slots, "empty-feed", {}, void 0, !0)
283
+ w("div", xe, [
284
+ me(a.$slots, "empty-feed", {}, void 0, !0)
278
285
  ])
279
- ], 512)),
280
- t(v)().reply ? (o(), u(fe, {
286
+ ], 4)),
287
+ t(R)().reply ? (s(), m(fe, {
281
288
  key: 2,
282
- to: "#chat-input-reply-line-" + t(m)
289
+ to: "#chat-input-reply-line-" + t(f)
283
290
  }, [
284
- y(ye, {
291
+ y(ge, {
285
292
  class: "chat-input-reply",
286
- message: t(v)().reply,
287
- onReset: t(L)
293
+ message: t(R)().reply,
294
+ onReset: t(W)
288
295
  }, null, 8, ["message", "onReset"])
289
296
  ], 8, ["to"])) : c("", !0)
290
297
  ], 64));
291
298
  }
292
299
  });
293
300
  export {
294
- Ze as default
301
+ _e as default
295
302
  };
@@ -2,23 +2,25 @@ import s from "../../../2_feed_elements/AudioMessage/AudioMessage.vue.js";
2
2
  import m from "../../../2_feed_elements/CallMessage/CallMessage.vue.js";
3
3
  import o from "../../../2_feed_elements/FileMessage/FileMessage.vue.js";
4
4
  import r from "../../../2_feed_elements/ImageMessage/ImageMessage.vue.js";
5
- import t from "../../../2_feed_elements/TextMessage/TextMessage.vue.js";
6
- import a from "../../../2_feed_elements/VideoMessage/VideoMessage.vue.js";
5
+ import a from "../../../2_feed_elements/TextMessage/TextMessage.vue.js";
6
+ import t from "../../../2_feed_elements/VideoMessage/VideoMessage.vue.js";
7
7
  import i from "../../../2_feed_elements/DateMessage/DateMessage.vue.js";
8
8
  import g from "../../../2_feed_elements/SystemMessage/SystemMessage.vue.js";
9
9
  import p from "../../../2_feed_elements/TypingMessage/TypingMessage.vue.js";
10
- import n from "../../../2_feed_elements/StickerMessage/StickerMessage.vue.js";
10
+ import M from "../../../2_feed_elements/StickerMessage/StickerMessage.vue.js";
11
11
  import f from "../../../2_feed_elements/DelimiterMessage/DelimiterMessage.vue.js";
12
- function v() {
12
+ import n from "../../../2_feed_elements/MissedCallMessage/MissedCallMessage.vue.js";
13
+ function I() {
13
14
  return {
14
15
  componentsMap: (e) => ({
15
- "message.text": t,
16
+ "message.text": a,
16
17
  "message.image": r,
17
18
  "message.file": o,
18
19
  "message.audio": s,
19
- "message.video": a,
20
+ "message.video": t,
20
21
  "message.call": m,
21
- "message.sticker": n,
22
+ "message.missedCall": n,
23
+ "message.sticker": M,
22
24
  "message.system": g,
23
25
  "system.date": i,
24
26
  "message.typing": p,
@@ -27,5 +29,5 @@ function v() {
27
29
  };
28
30
  }
29
31
  export {
30
- v as useFeedComponents
32
+ I as useFeedComponents
31
33
  };