@mobilon-dev/chotto 0.3.84 → 0.3.85

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 (126) hide show
  1. package/dist/chotto.css +1 -1
  2. package/dist/components/1_atoms/ButtonContextMenu/ButtonContextMenu.vue2.js +3 -2
  3. package/dist/components/1_atoms/ContactContextMenu/ContactContextMenu.vue2.js +3 -2
  4. package/dist/components/1_atoms/EmojiGlyph/EmojiGlyph.vue.js +38 -0
  5. package/dist/components/1_atoms/EmojiGlyph/EmojiGlyph.vue2.js +4 -0
  6. package/dist/components/1_atoms/Tooltip/Tooltip.vue.js +1 -1
  7. package/dist/components/1_atoms/Tooltip/Tooltip.vue2.js +49 -36
  8. package/dist/components/1_icons/CloseIcon.vue.js +21 -0
  9. package/dist/components/2_blocks/FeedSearch/FeedSearch.vue2.js +10 -9
  10. package/dist/components/2_chatinput_elements/ButtonCommandsSelector/ButtonCommandsSelector.vue2.js +8 -7
  11. package/dist/components/2_chatinput_elements/ButtonEmojiPicker/ButtonEmojiPicker.vue.js +2 -2
  12. package/dist/components/2_chatinput_elements/ButtonEmojiPicker/ButtonEmojiPicker.vue2.js +48 -37
  13. package/dist/components/2_chatinput_elements/ButtonTemplateSelector/ButtonTemplateSelector.vue2.js +3 -2
  14. package/dist/components/2_chatinput_elements/ButtonWabaTemplateSelector/ButtonWabaTemplateSelector.vue.js +7 -6
  15. package/dist/components/2_chatinput_elements/FilePreview/FilePreview.vue2.js +3 -2
  16. package/dist/components/2_chatinput_elements/FileUploader/FileUploader.vue2.js +3 -2
  17. package/dist/components/2_chatinput_elements/StickerPicker/StickerPicker.vue2.js +3 -2
  18. package/dist/components/2_chatinput_elements/TemplateSelector/TemplateSelector.vue.js +27 -26
  19. package/dist/components/2_chatinput_elements/TextFormatToolbar/TextFormatToolbar.vue2.js +3 -2
  20. package/dist/components/2_chatinput_elements/WABAAttachmentSection/WABAAttachmentSection.vue2.js +3 -2
  21. package/dist/components/2_chatlist_elements/ChatItem/ChatItem.vue2.js +3 -2
  22. package/dist/components/2_elements/AudioRecorder/AudioRecorder.vue2.js +3 -2
  23. package/dist/components/2_elements/ChannelSelector/ChannelSelector.vue.js +6 -5
  24. package/dist/components/2_elements/ThemeMode/ThemeMode.vue.js +10 -9
  25. package/dist/components/2_elements/VideoRecorder/VideoRecorder.vue2.js +3 -2
  26. package/dist/components/2_feed_elements/AudioMessage/AudioMessage.vue.js +1 -1
  27. package/dist/components/2_feed_elements/AudioMessage/AudioMessage.vue2.js +169 -143
  28. package/dist/components/2_feed_elements/BaseReplyMessage/BaseReplyMessage.vue.js +4 -4
  29. package/dist/components/2_feed_elements/BaseReplyMessage/BaseReplyMessage.vue2.js +33 -32
  30. package/dist/components/2_feed_elements/CallMessage/CallMessage.vue2.js +8 -2
  31. package/dist/components/2_feed_elements/FileMessage/FileMessage.vue.js +3 -3
  32. package/dist/components/2_feed_elements/FileMessage/FileMessage.vue2.js +134 -108
  33. package/dist/components/2_feed_elements/ImageMessage/ImageMessage.vue.js +1 -1
  34. package/dist/components/2_feed_elements/ImageMessage/ImageMessage.vue2.js +116 -97
  35. package/dist/components/2_feed_elements/MessageKeyboard/MessageKeyboard.vue2.js +3 -2
  36. package/dist/components/2_feed_elements/MessageReactions/MessageReactions.vue.js +2 -2
  37. package/dist/components/2_feed_elements/MessageReactions/MessageReactions.vue2.js +232 -113
  38. package/dist/components/2_feed_elements/MessageReactions/composables/usePositioning.js +77 -62
  39. package/dist/components/2_feed_elements/MessageReactions/composables/useReactions.js +62 -20
  40. package/dist/components/2_feed_elements/MessageReactions/composables/useReactionsPanel.js +91 -69
  41. package/dist/components/2_feed_elements/MessageReactions/composables/useReactionsState.js +46 -22
  42. package/dist/components/2_feed_elements/MessageReactions/icons/ExpandReactionsIcon.vue.js +21 -0
  43. package/dist/components/2_feed_elements/MessageReactions/icons/ReplyIcon.vue.js +21 -0
  44. package/dist/components/2_feed_elements/MessageReactions/utils/quickReactions.js +2 -8
  45. package/dist/components/2_feed_elements/MessageReactions/utils/reactionTooltip.js +39 -0
  46. package/dist/components/2_feed_elements/MissedCallMessage/MissedCallMessage.vue2.js +26 -20
  47. package/dist/components/2_feed_elements/ReplyAudioMessage/ReplyAudioMessage.vue.js +2 -2
  48. package/dist/components/2_feed_elements/ReplyAudioMessage/ReplyAudioMessage.vue2.js +27 -18
  49. package/dist/components/2_feed_elements/ReplyCallMessage/ReplyCallMessage.vue.js +2 -2
  50. package/dist/components/2_feed_elements/ReplyCallMessage/ReplyCallMessage.vue2.js +16 -15
  51. package/dist/components/2_feed_elements/ReplyFileMessage/ReplyFileMessage.vue.js +3 -3
  52. package/dist/components/2_feed_elements/ReplyFileMessage/ReplyFileMessage.vue2.js +27 -18
  53. package/dist/components/2_feed_elements/ReplyImageMessage/ReplyImageMessage.vue.js +1 -1
  54. package/dist/components/2_feed_elements/ReplyImageMessage/ReplyImageMessage.vue2.js +16 -12
  55. package/dist/components/2_feed_elements/ReplyStickerMessage/ReplyStickerMessage.vue.js +4 -4
  56. package/dist/components/2_feed_elements/ReplyStickerMessage/ReplyStickerMessage.vue2.js +74 -65
  57. package/dist/components/2_feed_elements/ReplyTextMessage/ReplyTextMessage.vue.js +1 -1
  58. package/dist/components/2_feed_elements/ReplyTextMessage/ReplyTextMessage.vue2.js +20 -11
  59. package/dist/components/2_feed_elements/ReplyVideoMessage/ReplyVideoMessage.vue.js +2 -2
  60. package/dist/components/2_feed_elements/ReplyVideoMessage/ReplyVideoMessage.vue2.js +13 -9
  61. package/dist/components/2_feed_elements/StickerMessage/StickerMessage.vue.js +4 -4
  62. package/dist/components/2_feed_elements/StickerMessage/StickerMessage.vue2.js +74 -55
  63. package/dist/components/2_feed_elements/TextMessage/TextMessage.vue.js +4 -4
  64. package/dist/components/2_feed_elements/TextMessage/TextMessage.vue2.js +102 -76
  65. package/dist/components/2_feed_elements/VideoMessage/VideoMessage.vue.js +2 -2
  66. package/dist/components/2_feed_elements/VideoMessage/VideoMessage.vue2.js +74 -55
  67. package/dist/components/3_compounds/ChatInput/ChatInput.vue.js +2 -2
  68. package/dist/components/3_compounds/ChatInput/ChatInput.vue2.js +99 -82
  69. package/dist/components/3_compounds/Feed/Feed.vue.js +3 -3
  70. package/dist/components/3_compounds/Feed/Feed.vue2.js +159 -139
  71. package/dist/components/3_compounds/Feed/composables/useFeedReply.js +22 -25
  72. package/dist/functions/renderAppleEmojis.js +92 -0
  73. package/dist/hooks/messages/buildReplyPayload.js +14 -0
  74. package/dist/hooks/messages/useMessageLinks.js +60 -50
  75. package/dist/hooks/messages/useStartReply.js +29 -0
  76. package/dist/hooks/useEmojiNative.js +19 -0
  77. package/dist/index.js +130 -122
  78. package/dist/themes/dark.css +1 -1
  79. package/dist/themes/default.css +1 -1
  80. package/dist/themes/glass.css +1 -1
  81. package/dist/themes/green.css +1 -1
  82. package/dist/themes/mobilon1.css +1 -1
  83. package/dist/types/apps/data/messages.d.ts +20 -18
  84. package/dist/types/components/1_atoms/EmojiGlyph/EmojiGlyph.vue.d.ts +12 -0
  85. package/dist/types/components/1_atoms/Tooltip/stories/Tooltip.stories.d.ts +3 -0
  86. package/dist/types/components/1_icons/CloseIcon.vue.d.ts +2 -0
  87. package/dist/types/components/2_chatinput_elements/ButtonEmojiPicker/ButtonEmojiPicker.vue.d.ts +9 -1
  88. package/dist/types/components/2_feed_elements/AudioMessage/AudioMessage.vue.d.ts +29 -0
  89. package/dist/types/components/2_feed_elements/AudioMessage/styles/types.d.ts +24 -16
  90. package/dist/types/components/2_feed_elements/BaseReplyMessage/styles/types.d.ts +8 -4
  91. package/dist/types/components/2_feed_elements/FileMessage/FileMessage.vue.d.ts +29 -0
  92. package/dist/types/components/2_feed_elements/FileMessage/styles/types.d.ts +20 -0
  93. package/dist/types/components/2_feed_elements/ImageMessage/ImageMessage.vue.d.ts +29 -0
  94. package/dist/types/components/2_feed_elements/ImageMessage/styles/types.d.ts +2 -0
  95. package/dist/types/components/2_feed_elements/MessageReactions/MessageReactions.vue.d.ts +64 -1
  96. package/dist/types/components/2_feed_elements/MessageReactions/composables/index.d.ts +2 -2
  97. package/dist/types/components/2_feed_elements/MessageReactions/composables/usePositioning.d.ts +11 -1
  98. package/dist/types/components/2_feed_elements/MessageReactions/composables/useReactions.d.ts +20 -12
  99. package/dist/types/components/2_feed_elements/MessageReactions/composables/useReactionsPanel.d.ts +3 -3
  100. package/dist/types/components/2_feed_elements/MessageReactions/composables/useReactionsState.d.ts +13 -22
  101. package/dist/types/components/2_feed_elements/MessageReactions/icons/ExpandReactionsIcon.vue.d.ts +2 -0
  102. package/dist/types/components/2_feed_elements/MessageReactions/icons/ReplyIcon.vue.d.ts +2 -0
  103. package/dist/types/components/2_feed_elements/MessageReactions/styles/types.d.ts +14 -74
  104. package/dist/types/components/2_feed_elements/MessageReactions/utils/quickReactions.d.ts +1 -1
  105. package/dist/types/components/2_feed_elements/MessageReactions/utils/reactionTooltip.d.ts +14 -0
  106. package/dist/types/components/2_feed_elements/ReplyAudioMessage/styles/types.d.ts +6 -0
  107. package/dist/types/components/2_feed_elements/ReplyCallMessage/styles/types.d.ts +6 -0
  108. package/dist/types/components/2_feed_elements/ReplyFileMessage/styles/types.d.ts +6 -0
  109. package/dist/types/components/2_feed_elements/ReplyImageMessage/styles/types.d.ts +6 -0
  110. package/dist/types/components/2_feed_elements/ReplyStickerMessage/styles/types.d.ts +6 -0
  111. package/dist/types/components/2_feed_elements/ReplyTextMessage/styles/types.d.ts +4 -0
  112. package/dist/types/components/2_feed_elements/ReplyVideoMessage/styles/types.d.ts +6 -0
  113. package/dist/types/components/2_feed_elements/StickerMessage/StickerMessage.vue.d.ts +29 -0
  114. package/dist/types/components/2_feed_elements/TextMessage/TextMessage.vue.d.ts +29 -0
  115. package/dist/types/components/2_feed_elements/TextMessage/styles/types.d.ts +22 -0
  116. package/dist/types/components/2_feed_elements/VideoMessage/VideoMessage.vue.d.ts +29 -0
  117. package/dist/types/components/2_feed_elements/types/messages.d.ts +11 -6
  118. package/dist/types/components/3_compounds/ChatInput/styles/types.d.ts +2 -0
  119. package/dist/types/components/3_compounds/Feed/Feed.vue.d.ts +33 -0
  120. package/dist/types/functions/renderAppleEmojis.d.ts +16 -0
  121. package/dist/types/hooks/index.d.ts +1 -0
  122. package/dist/types/hooks/messages/buildReplyPayload.d.ts +11 -0
  123. package/dist/types/hooks/messages/index.d.ts +2 -0
  124. package/dist/types/hooks/messages/useStartReply.d.ts +6 -0
  125. package/dist/types/hooks/useEmojiNative.d.ts +9 -0
  126. package/package.json +1 -1
@@ -1477,8 +1477,9 @@ export declare const messages: ({
1477
1477
  reactions: {
1478
1478
  items: {
1479
1479
  key: string;
1480
- count: number;
1481
- reactedByMe: boolean;
1480
+ userId: string;
1481
+ name: string;
1482
+ date: number;
1482
1483
  }[];
1483
1484
  meta?: undefined;
1484
1485
  };
@@ -1522,8 +1523,9 @@ export declare const messages: ({
1522
1523
  reactions: {
1523
1524
  items: {
1524
1525
  key: string;
1525
- count: number;
1526
- reactedByMe: boolean;
1526
+ userId: string;
1527
+ name: string;
1528
+ date: number;
1527
1529
  }[];
1528
1530
  meta: {
1529
1531
  mode: string;
@@ -1610,8 +1612,9 @@ export declare const messages: ({
1610
1612
  reactions: {
1611
1613
  items: {
1612
1614
  key: string;
1613
- count: number;
1614
- reactedByMe: boolean;
1615
+ userId: string;
1616
+ name: string;
1617
+ date: number;
1615
1618
  }[];
1616
1619
  meta: {
1617
1620
  mode: string;
@@ -1809,8 +1812,9 @@ export declare const messages: ({
1809
1812
  reactions: {
1810
1813
  items: {
1811
1814
  key: string;
1812
- count: number;
1813
- reactedByMe: boolean;
1815
+ userId: string;
1816
+ name: string;
1817
+ date: number;
1814
1818
  }[];
1815
1819
  meta: {
1816
1820
  mode: string;
@@ -1892,15 +1896,12 @@ export declare const messages: ({
1892
1896
  subText: string;
1893
1897
  avatar: string;
1894
1898
  reactions: {
1895
- items: ({
1896
- key: string;
1897
- count: number;
1898
- reactedByMe?: undefined;
1899
- } | {
1899
+ items: {
1900
1900
  key: string;
1901
- count: number;
1902
- reactedByMe: boolean;
1903
- })[];
1901
+ userId: string;
1902
+ name: string;
1903
+ date: number;
1904
+ }[];
1904
1905
  meta: {
1905
1906
  mode: string;
1906
1907
  };
@@ -1987,8 +1988,9 @@ export declare const messages: ({
1987
1988
  reactions: {
1988
1989
  items: {
1989
1990
  key: string;
1990
- count: number;
1991
- reactedByMe: boolean;
1991
+ userId: string;
1992
+ name: string;
1993
+ date: number;
1992
1994
  }[];
1993
1995
  meta: {
1994
1996
  mode: string;
@@ -0,0 +1,12 @@
1
+ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
2
+ emoji: {
3
+ type: StringConstructor;
4
+ required: true;
5
+ };
6
+ }>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
7
+ emoji: {
8
+ type: StringConstructor;
9
+ required: true;
10
+ };
11
+ }>> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
12
+ export default _default;
@@ -9,6 +9,9 @@ export declare const Bottom: Story;
9
9
  export declare const Left: Story;
10
10
  export declare const Right: Story;
11
11
  export declare const BottomLeft: Story;
12
+ export declare const BottomRight: Story;
13
+ export declare const TopLeft: Story;
14
+ export declare const TopRight: Story;
12
15
  export declare const WithIcon: Story;
13
16
  export declare const WithButton: Story;
14
17
  export declare const LongText: Story;
@@ -0,0 +1,2 @@
1
+ declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
2
+ export default _default;
@@ -9,6 +9,10 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
9
9
  default: string;
10
10
  validator: (value: string) => boolean;
11
11
  };
12
+ /**
13
+ * true — системные эмодзи; false — 3D (Apple) в пикере, инпуте и ленте.
14
+ * Значение пишется в общий store чата (useEmojiNative).
15
+ */
12
16
  native: {
13
17
  type: BooleanConstructor;
14
18
  default: boolean;
@@ -23,13 +27,17 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
23
27
  default: string;
24
28
  validator: (value: string) => boolean;
25
29
  };
30
+ /**
31
+ * true — системные эмодзи; false — 3D (Apple) в пикере, инпуте и ленте.
32
+ * Значение пишется в общий store чата (useEmojiNative).
33
+ */
26
34
  native: {
27
35
  type: BooleanConstructor;
28
36
  default: boolean;
29
37
  };
30
38
  }>> & Readonly<{}>, {
39
+ native: boolean;
31
40
  mode: string;
32
41
  state: string;
33
- native: boolean;
34
42
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
35
43
  export default _default;
@@ -16,6 +16,19 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
16
16
  type: BooleanConstructor;
17
17
  default: boolean;
18
18
  };
19
+ reactionsMode: {
20
+ type: () => "single" | "multi";
21
+ default: string;
22
+ validator: (value: string) => boolean;
23
+ };
24
+ currentUserId: {
25
+ type: () => string | number | undefined;
26
+ default: undefined;
27
+ };
28
+ reactionUserNames: {
29
+ type: () => Record<string, string>;
30
+ default: undefined;
31
+ };
19
32
  subtextTooltipData: {
20
33
  type: () => Record<string, string>;
21
34
  required: false;
@@ -47,6 +60,19 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
47
60
  type: BooleanConstructor;
48
61
  default: boolean;
49
62
  };
63
+ reactionsMode: {
64
+ type: () => "single" | "multi";
65
+ default: string;
66
+ validator: (value: string) => boolean;
67
+ };
68
+ currentUserId: {
69
+ type: () => string | number | undefined;
70
+ default: undefined;
71
+ };
72
+ reactionUserNames: {
73
+ type: () => Record<string, string>;
74
+ default: undefined;
75
+ };
50
76
  subtextTooltipData: {
51
77
  type: () => Record<string, string>;
52
78
  required: false;
@@ -63,9 +89,12 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
63
89
  "onSms-invite"?: ((...args: any[]) => any) | undefined;
64
90
  }>, {
65
91
  channel: string;
92
+ currentUserId: string | number | undefined;
93
+ reactionUserNames: Record<string, string>;
66
94
  applyStyle: Function;
67
95
  isFirstInSeries: boolean;
68
96
  reactionsEnabled: boolean;
97
+ reactionsMode: "single" | "multi";
69
98
  subtextTooltipData: Record<string, string>;
70
99
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
71
100
  export default _default;
@@ -230,8 +230,22 @@ export interface AudioMessageThemeCSSVariables {
230
230
  '--chotto-audiomessage-avatar-min-height': string;
231
231
  /** Скругление аватара */
232
232
  '--chotto-audiomessage-avatar-border-radius': string;
233
- /** Колонки грида инфо-контейнера */
234
- '--chotto-audiomessage-info-container-grid-column': string;
233
+ /** Колонки грида футера */
234
+ '--chotto-audiomessage-footer-grid-column': string;
235
+ /** Отображение футера */
236
+ '--chotto-audiomessage-footer-display': string;
237
+ /** Выравнивание элементов футера по поперечной оси */
238
+ '--chotto-audiomessage-footer-align-items': string;
239
+ /** Выравнивание элементов футера по главной оси */
240
+ '--chotto-audiomessage-footer-justify-content': string;
241
+ /** Промежуток между элементами футера */
242
+ '--chotto-audiomessage-footer-column-gap': string;
243
+ /** Отступ сверху футера */
244
+ '--chotto-audiomessage-footer-margin-top': string;
245
+ /** Отступ справа футера */
246
+ '--chotto-audiomessage-footer-margin-right': string;
247
+ /** Доп. отступ сверху футера при наличии реакций */
248
+ '--chotto-audiomessage-footer-reactions-extra-margin-top': string;
235
249
  /** Отображение инфо-контейнера */
236
250
  '--chotto-audiomessage-info-container-display': string;
237
251
  /** Выравнивание элементов инфо-контейнера */
@@ -240,12 +254,12 @@ export interface AudioMessageThemeCSSVariables {
240
254
  '--chotto-audiomessage-info-container-justify-content': string;
241
255
  /** Промежуток между элементами инфо-контейнера */
242
256
  '--chotto-audiomessage-info-container-column-gap': string;
243
- /** Отступ справа инфо-контейнера */
244
- '--chotto-audiomessage-info-container-margin-right': string;
245
- /** Отступ сверху инфо-контейнера */
246
- '--chotto-audiomessage-info-container-margin-top': string;
247
257
  /** События указателя инфо-контейнера */
248
258
  '--chotto-audiomessage-info-container-pointer-events': string;
259
+ /** Растягивание инфо-контейнера в футере */
260
+ '--chotto-audiomessage-info-container-flex': string;
261
+ /** Минимальная ширина инфо-контейнера */
262
+ '--chotto-audiomessage-info-container-min-width': string;
249
263
  /** Отображение контейнера кнопок "Текст / Резюме" */
250
264
  '--chotto-audiomessage-actions-display': string;
251
265
  /** Выравнивание элементов контейнера кнопок */
@@ -386,20 +400,14 @@ export interface AudioMessageThemeCSSVariables {
386
400
  '--chotto-audiomessage-transcript-delimiter-height': string;
387
401
  /** Скругление разделителя */
388
402
  '--chotto-audiomessage-transcript-delimiter-border-radius': string;
389
- /** Колонка грида реакций */
390
- '--chotto-audiomessage-reactions-grid-column': string;
391
- /** Отступ сверху реакций */
392
- '--chotto-audiomessage-reactions-margin-top': string;
393
- /** Отступ снизу реакций */
394
- '--chotto-audiomessage-reactions-margin-bottom': string;
403
+ /** Растягивание блока реакций в футере */
404
+ '--chotto-audiomessage-reactions-flex': string;
395
405
  /** Перенос строк реакций */
396
406
  '--chotto-audiomessage-reactions-flex-wrap': string;
407
+ /** Минимальная ширина реакций */
408
+ '--chotto-audiomessage-reactions-min-width': string;
397
409
  /** Максимальная ширина реакций */
398
410
  '--chotto-audiomessage-reactions-max-width': string;
399
- /** Внутренний отступ справа реакций */
400
- '--chotto-audiomessage-reactions-padding-right': string;
401
- /** Внутренний отступ снизу реакций */
402
- '--chotto-audiomessage-reactions-padding-bottom': string;
403
411
  /** Отображение общего контейнера лево/право */
404
412
  '--chotto-audiomessage-left-right-display': string;
405
413
  /** Шаблон колонок левой раскладки */
@@ -20,6 +20,10 @@ export interface BaseReplyMessageThemeCSSVariables {
20
20
  '--chotto-basereplymessage-container-overflow': string;
21
21
  /** Отступ снизу контейнера */
22
22
  '--chotto-basereplymessage-container-margin-bottom': string;
23
+ /** Отступ справа контейнера */
24
+ '--chotto-basereplymessage-container-margin-right': string;
25
+ /** Цвет фона контейнера */
26
+ '--chotto-basereplymessage-container-background-color': string;
23
27
  /** Контент псевдоэлемента перед контейнером */
24
28
  '--chotto-basereplymessage-container-before-content': string;
25
29
  /** Позиционирование псевдоэлемента */
@@ -32,6 +36,10 @@ export interface BaseReplyMessageThemeCSSVariables {
32
36
  '--chotto-basereplymessage-container-before-width': string;
33
37
  /** Высота псевдоэлемента */
34
38
  '--chotto-basereplymessage-container-before-height': string;
39
+ /** Скругление верхнего левого угла псевдоэлемента */
40
+ '--chotto-basereplymessage-container-before-border-top-left-radius': string;
41
+ /** Скругление нижнего левого угла псевдоэлемента */
42
+ '--chotto-basereplymessage-container-before-border-bottom-left-radius': string;
35
43
  /** Отображение кнопки сброса */
36
44
  '--chotto-basereplymessage-reset-display': string;
37
45
  /** Позиционирование кнопки сброса */
@@ -52,10 +60,6 @@ export interface BaseReplyMessageThemeCSSVariables {
52
60
  '--chotto-basereplymessage-grid-padding': string;
53
61
  /** Правый внутренний отступ блока ответа в инпуте */
54
62
  '--chotto-basereplymessage-chat-input-reply-padding-right': string;
55
- /** Граница блока ответа в инпуте */
56
- '--chotto-basereplymessage-chat-input-reply-border': string;
57
- /** Скругление блока ответа в инпуте */
58
- '--chotto-basereplymessage-chat-input-reply-border-radius': string;
59
63
  /** Перенос слов в блоке ответа в инпуте */
60
64
  '--chotto-basereplymessage-chat-input-reply-word-break': string;
61
65
  /** Отступ снизу блока ответа в инпуте */
@@ -16,6 +16,19 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
16
16
  type: BooleanConstructor;
17
17
  default: boolean;
18
18
  };
19
+ reactionsMode: {
20
+ type: () => "single" | "multi";
21
+ default: string;
22
+ validator: (value: string) => boolean;
23
+ };
24
+ currentUserId: {
25
+ type: () => string | number | undefined;
26
+ default: undefined;
27
+ };
28
+ reactionUserNames: {
29
+ type: () => Record<string, string>;
30
+ default: undefined;
31
+ };
19
32
  subtextTooltipData: {
20
33
  type: () => Record<string, string>;
21
34
  required: false;
@@ -47,6 +60,19 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
47
60
  type: BooleanConstructor;
48
61
  default: boolean;
49
62
  };
63
+ reactionsMode: {
64
+ type: () => "single" | "multi";
65
+ default: string;
66
+ validator: (value: string) => boolean;
67
+ };
68
+ currentUserId: {
69
+ type: () => string | number | undefined;
70
+ default: undefined;
71
+ };
72
+ reactionUserNames: {
73
+ type: () => Record<string, string>;
74
+ default: undefined;
75
+ };
50
76
  subtextTooltipData: {
51
77
  type: () => Record<string, string>;
52
78
  required: false;
@@ -63,9 +89,12 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
63
89
  "onSms-invite"?: ((...args: any[]) => any) | undefined;
64
90
  }>, {
65
91
  channel: string;
92
+ currentUserId: string | number | undefined;
93
+ reactionUserNames: Record<string, string>;
66
94
  applyStyle: Function;
67
95
  isFirstInSeries: boolean;
68
96
  reactionsEnabled: boolean;
97
+ reactionsMode: "single" | "multi";
69
98
  subtextTooltipData: Record<string, string>;
70
99
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
71
100
  export default _default;
@@ -114,6 +114,22 @@ export interface FileMessageThemeCSSVariables {
114
114
  '--chotto-filemessage-filename-text-font-size': string;
115
115
  /** Цвет имени файла */
116
116
  '--chotto-filemessage-filename-text-color': string;
117
+ /** Отображение футера (реакции + время) */
118
+ '--chotto-filemessage-footer-display': string;
119
+ /** Выравнивание элементов футера по поперечной оси */
120
+ '--chotto-filemessage-footer-align-items': string;
121
+ /** Выравнивание элементов футера по главной оси */
122
+ '--chotto-filemessage-footer-justify-content': string;
123
+ /** Промежуток между элементами футера */
124
+ '--chotto-filemessage-footer-column-gap': string;
125
+ /** Отступ сверху футера */
126
+ '--chotto-filemessage-footer-margin-top': string;
127
+ /** Растягивание блока реакций в футере */
128
+ '--chotto-filemessage-reactions-flex': string;
129
+ /** Перенос реакций */
130
+ '--chotto-filemessage-reactions-flex-wrap': string;
131
+ /** Минимальная ширина блока реакций */
132
+ '--chotto-filemessage-reactions-min-width': string;
117
133
  /** Отображение контейнера информации */
118
134
  '--chotto-filemessage-info-container-display': string;
119
135
  /** Выравнивание элементов контейнера информации */
@@ -122,6 +138,10 @@ export interface FileMessageThemeCSSVariables {
122
138
  '--chotto-filemessage-info-container-justify-content': string;
123
139
  /** Промежуток между элементами контейнера информации */
124
140
  '--chotto-filemessage-info-container-column-gap': string;
141
+ /** Сжатие контейнера информации */
142
+ '--chotto-filemessage-info-container-flex-shrink': string;
143
+ /** Отступ слева у контейнера информации */
144
+ '--chotto-filemessage-info-container-margin-left': string;
125
145
  /** Отступ снизу кнопки скачивания */
126
146
  '--chotto-filemessage-download-button-margin-bottom': string;
127
147
  /** Отступ слева кнопки скачивания */
@@ -16,6 +16,19 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
16
16
  type: BooleanConstructor;
17
17
  default: boolean;
18
18
  };
19
+ reactionsMode: {
20
+ type: () => "single" | "multi";
21
+ default: string;
22
+ validator: (value: string) => boolean;
23
+ };
24
+ currentUserId: {
25
+ type: () => string | number | undefined;
26
+ default: undefined;
27
+ };
28
+ reactionUserNames: {
29
+ type: () => Record<string, string>;
30
+ default: undefined;
31
+ };
19
32
  subtextTooltipData: {
20
33
  type: () => Record<string, string>;
21
34
  required: false;
@@ -47,6 +60,19 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
47
60
  type: BooleanConstructor;
48
61
  default: boolean;
49
62
  };
63
+ reactionsMode: {
64
+ type: () => "single" | "multi";
65
+ default: string;
66
+ validator: (value: string) => boolean;
67
+ };
68
+ currentUserId: {
69
+ type: () => string | number | undefined;
70
+ default: undefined;
71
+ };
72
+ reactionUserNames: {
73
+ type: () => Record<string, string>;
74
+ default: undefined;
75
+ };
50
76
  subtextTooltipData: {
51
77
  type: () => Record<string, string>;
52
78
  required: false;
@@ -63,9 +89,12 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
63
89
  "onSms-invite"?: ((...args: any[]) => any) | undefined;
64
90
  }>, {
65
91
  channel: string;
92
+ currentUserId: string | number | undefined;
93
+ reactionUserNames: Record<string, string>;
66
94
  applyStyle: Function;
67
95
  isFirstInSeries: boolean;
68
96
  reactionsEnabled: boolean;
97
+ reactionsMode: "single" | "multi";
69
98
  subtextTooltipData: Record<string, string>;
70
99
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
71
100
  export default _default;
@@ -358,6 +358,8 @@ export interface ImageMessageThemeCSSVariables {
358
358
  '--chotto-imagemessage-right-context-menu-right': string;
359
359
  /** Отступ контекстного меню справа сверху */
360
360
  '--chotto-imagemessage-right-context-menu-margin-top': string;
361
+ /** Внешние отступы реакций */
362
+ '--chotto-imagemessage-reactions-margin': string;
361
363
  /** Ширина изображения в модальном окне */
362
364
  '--chotto-imagemessage-modal-image-width': string;
363
365
  /** Высота изображения в модальном окне */
@@ -1,5 +1,6 @@
1
1
  import 'vue3-emoji-picker-ru/css';
2
- import type { MessageReactions } from '@/types';
2
+ import type { MessageReactions, Reply } from '@/types';
3
+ import { type ReactionsMode } from './composables';
3
4
  declare const _default: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
4
5
  reactions: {
5
6
  type: () => MessageReactions | undefined;
@@ -18,6 +19,34 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
18
19
  type: BooleanConstructor;
19
20
  default: boolean;
20
21
  };
22
+ mode: {
23
+ type: () => ReactionsMode;
24
+ default: string;
25
+ validator: (value: string) => boolean;
26
+ };
27
+ /** Id текущего пользователя — для расчёта reactedByMe и локальных add/remove */
28
+ currentUserId: {
29
+ type: () => string | number | undefined;
30
+ default: undefined;
31
+ };
32
+ /** Имя текущего пользователя — для тултипа при локальном добавлении реакции */
33
+ currentUserName: {
34
+ type: StringConstructor;
35
+ default: undefined;
36
+ };
37
+ /** userId → имя (если в item нет name) */
38
+ reactionUserNames: {
39
+ type: () => Record<string, string>;
40
+ default: undefined;
41
+ };
42
+ reply: {
43
+ type: () => Reply | undefined;
44
+ default: undefined;
45
+ };
46
+ replyEnabled: {
47
+ type: BooleanConstructor;
48
+ default: boolean;
49
+ };
21
50
  }>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
22
51
  "toggle-reaction": (payload: {
23
52
  messageId: string | number;
@@ -49,6 +78,34 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
49
78
  type: BooleanConstructor;
50
79
  default: boolean;
51
80
  };
81
+ mode: {
82
+ type: () => ReactionsMode;
83
+ default: string;
84
+ validator: (value: string) => boolean;
85
+ };
86
+ /** Id текущего пользователя — для расчёта reactedByMe и локальных add/remove */
87
+ currentUserId: {
88
+ type: () => string | number | undefined;
89
+ default: undefined;
90
+ };
91
+ /** Имя текущего пользователя — для тултипа при локальном добавлении реакции */
92
+ currentUserName: {
93
+ type: StringConstructor;
94
+ default: undefined;
95
+ };
96
+ /** userId → имя (если в item нет name) */
97
+ reactionUserNames: {
98
+ type: () => Record<string, string>;
99
+ default: undefined;
100
+ };
101
+ reply: {
102
+ type: () => Reply | undefined;
103
+ default: undefined;
104
+ };
105
+ replyEnabled: {
106
+ type: BooleanConstructor;
107
+ default: boolean;
108
+ };
52
109
  }>> & Readonly<{
53
110
  "onToggle-reaction"?: ((payload: {
54
111
  messageId: string | number;
@@ -63,8 +120,14 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
63
120
  key: string;
64
121
  }) => any) | undefined;
65
122
  }>, {
123
+ reply: Reply | undefined;
124
+ mode: ReactionsMode;
66
125
  reactions: MessageReactions | undefined;
67
126
  readonly: boolean;
68
127
  enabled: boolean;
128
+ currentUserId: string | number | undefined;
129
+ currentUserName: string;
130
+ reactionUserNames: Record<string, string>;
131
+ replyEnabled: boolean;
69
132
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
70
133
  export default _default;
@@ -1,4 +1,4 @@
1
- export { findFeedContainer, isRightMessage, calculatePanelPosition, calculateFixedPanelPosition, } from './usePositioning';
2
- export { updateLocalReactionsAdd, updateLocalReactionsRemove, updateLocalReactionsToggle, } from './useReactions';
1
+ export { findFeedContainer, findMessageContent, isRightMessage, calculatePanelPosition, calculateFixedPanelPosition, calculatePickerPositionAboveQuickPanel, } from './usePositioning';
2
+ export { updateLocalReactionsAdd, updateLocalReactionsRemove, updateLocalReactionsToggle, updateLocalReactionsReplace, aggregateReactions, hasMyReaction, getMyReactionKey, sameUserId, type ReactionsMode, } from './useReactions';
3
3
  export { useReactionsState } from './useReactionsState';
4
4
  export { useReactionsPanel } from './useReactionsPanel';
@@ -2,15 +2,25 @@
2
2
  * Находит ближайший feed-контейнер в DOM дереве
3
3
  */
4
4
  export declare function findFeedContainer(element: HTMLElement | null): HTMLElement | null;
5
+ /**
6
+ * Находит контейнер содержимого сообщения (например, text-message__content)
7
+ */
8
+ export declare function findMessageContent(element: HTMLElement | null): HTMLElement | null;
5
9
  /**
6
10
  * Определяет, является ли сообщение правым (outgoing)
7
11
  */
8
12
  export declare function isRightMessage(element: HTMLElement | null): boolean;
9
13
  /**
10
- * Вычисляет позицию панели реакций относительно кнопки и feed контейнера
14
+ * Вычисляет позицию панели быстрых реакций в координатах viewport (position: fixed):
15
+ * по центру высоты, слева для правых сообщений и справа для левых.
16
+ * Fixed нужен, чтобы панель не обрезалась overflow ленты и могла перекрывать ChatList.
11
17
  */
12
18
  export declare function calculatePanelPosition(panelElement: HTMLElement | null, buttonElement: HTMLElement | null, estimatedWidth?: number): Promise<Record<string, string>>;
13
19
  /**
14
20
  * Вычисляет позицию для fixed-элемента относительно viewport
15
21
  */
16
22
  export declare function calculateFixedPanelPosition(panelElement: HTMLElement | null, buttonElement: HTMLElement | null, estimatedWidth?: number): Promise<Record<string, string>>;
23
+ /**
24
+ * Вычисляет позицию EmojiPicker над панелью быстрых реакций
25
+ */
26
+ export declare function calculatePickerPositionAboveQuickPanel(pickerElement: HTMLElement | null, quickPanelElement: HTMLElement | null, messageElement: HTMLElement | null, estimatedWidth?: number): Promise<Record<string, string>>;
@@ -1,19 +1,27 @@
1
- import type { MessageReactions } from '@/types';
1
+ import type { MessageReactionChip, MessageReactions } from '@/types';
2
+ export type ReactionsMode = 'single' | 'multi';
3
+ export type ReactionsRef = {
4
+ value: MessageReactions | undefined;
5
+ };
6
+ export declare function sameUserId(a: string | number | undefined | null, b: string | number | undefined | null): boolean;
7
+ export declare function hasMyReaction(localReactions: ReactionsRef, key: string, currentUserId: string | number | undefined | null): boolean;
8
+ export declare function getMyReactionKey(localReactions: ReactionsRef, currentUserId: string | number | undefined | null): string | undefined;
9
+ /** Группирует event-list в чипы для UI */
10
+ export declare function aggregateReactions(reactions: MessageReactions | undefined, currentUserId: string | number | undefined | null): MessageReactionChip[];
2
11
  /**
3
- * Добавляет или увеличивает реакцию в локальном состоянии
12
+ * Добавляет реакцию текущего пользователя
4
13
  */
5
- export declare function updateLocalReactionsAdd(localReactions: {
6
- value: MessageReactions | undefined;
7
- }, key: string): void;
14
+ export declare function updateLocalReactionsAdd(localReactions: ReactionsRef, key: string, currentUserId: string | number, mode?: ReactionsMode, name?: string): void;
8
15
  /**
9
- * Удаляет или уменьшает реакцию в локальном состоянии
16
+ * Удаляет реакцию текущего пользователя по ключу
10
17
  */
11
- export declare function updateLocalReactionsRemove(localReactions: {
12
- value: MessageReactions | undefined;
13
- }, key: string): void;
18
+ export declare function updateLocalReactionsRemove(localReactions: ReactionsRef, key: string, currentUserId: string | number): void;
19
+ /**
20
+ * В single-режиме заменяет свою текущую реакцию на новую.
21
+ * Возвращает ключ снятой реакции (если была).
22
+ */
23
+ export declare function updateLocalReactionsReplace(localReactions: ReactionsRef, key: string, currentUserId: string | number, name?: string): string | undefined;
14
24
  /**
15
25
  * Переключает реакцию (добавляет, если нет, или удаляет, если есть)
16
26
  */
17
- export declare function updateLocalReactionsToggle(localReactions: {
18
- value: MessageReactions | undefined;
19
- }, key: string): void;
27
+ export declare function updateLocalReactionsToggle(localReactions: ReactionsRef, key: string, currentUserId: string | number, mode?: ReactionsMode, name?: string): void;
@@ -2,7 +2,7 @@ import { type Ref } from 'vue';
2
2
  /**
3
3
  * Композабл для управления панелями реакций (быстрые реакции и полный picker)
4
4
  */
5
- export declare function useReactionsPanel(quickEmojis: Ref<readonly string[]>, addButtonRef: Ref<HTMLButtonElement | null>): {
5
+ export declare function useReactionsPanel(quickEmojis: Ref<readonly string[]>, messageRef: Ref<HTMLElement | null>): {
6
6
  isQuickReactionsOpen: Ref<boolean, boolean>;
7
7
  isFullPickerOpen: Ref<boolean, boolean>;
8
8
  pickerRef: Ref<HTMLElement | null, HTMLElement | null>;
@@ -13,11 +13,11 @@ export declare function useReactionsPanel(quickEmojis: Ref<readonly string[]>, a
13
13
  closeQuickPanel: () => void;
14
14
  openFullPicker: () => Promise<void>;
15
15
  closeFullPicker: () => void;
16
+ handleMessageMouseEnter: () => void;
17
+ handleMessageMouseLeave: () => void;
16
18
  handleQuickPanelMouseEnter: () => void;
17
19
  handleQuickPanelMouseLeave: () => void;
18
20
  handlePickerMouseEnter: () => void;
19
21
  handlePickerMouseLeave: () => void;
20
- handleButtonMouseEnter: () => void;
21
- handleButtonMouseLeave: () => void;
22
22
  handleClickOutside: (event: MouseEvent) => void;
23
23
  };