@mobilon-dev/chotto 0.3.86 → 0.3.88

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 (143) hide show
  1. package/dist/chotto.css +1 -1
  2. package/dist/components/1_atoms/ButtonContextMenu/ButtonContextMenu.vue2.js +15 -13
  3. package/dist/components/1_atoms/ContactContextMenu/ContactContextMenu.vue2.js +4 -2
  4. package/dist/components/1_atoms/ContextMenu/ContextMenu.vue.js +43 -39
  5. package/dist/components/1_atoms/EmojiGlyph/EmojiGlyph.vue.js +7 -5
  6. package/dist/components/1_atoms/LoadingIndicator/LoadingIndicator.vue.js +19 -18
  7. package/dist/components/1_atoms/Tooltip/Tooltip.vue.js +2 -2
  8. package/dist/components/1_atoms/Tooltip/Tooltip.vue2.js +83 -72
  9. package/dist/components/2_blocks/FeedSearch/FeedSearch.vue2.js +11 -10
  10. package/dist/components/2_chatinput_elements/ButtonCommandsSelector/ButtonCommandsSelector.vue2.js +4 -2
  11. package/dist/components/2_chatinput_elements/ButtonEmojiPicker/ButtonEmojiPicker.vue2.js +18 -16
  12. package/dist/components/2_chatinput_elements/ButtonTemplateSelector/ButtonTemplateSelector.vue2.js +16 -14
  13. package/dist/components/2_chatinput_elements/ButtonWabaTemplateSelector/ButtonWabaTemplateSelector.vue.js +4 -2
  14. package/dist/components/2_chatinput_elements/FilePreview/FilePreview.vue2.js +4 -2
  15. package/dist/components/2_chatinput_elements/FileUploader/FileUploader.vue2.js +4 -2
  16. package/dist/components/2_chatinput_elements/StickerPicker/StickerPicker.vue2.js +4 -2
  17. package/dist/components/2_chatinput_elements/TemplateSelector/TemplateSelector.vue.js +4 -2
  18. package/dist/components/2_chatinput_elements/TextFormatToolbar/TextFormatToolbar.vue2.js +4 -3
  19. package/dist/components/2_chatinput_elements/WABAAttachmentSection/WABAAttachmentSection.vue2.js +4 -2
  20. package/dist/components/2_chatlist_elements/ChatItem/ChatItem.vue2.js +3 -2
  21. package/dist/components/2_elements/AudioRecorder/AudioRecorder.vue2.js +4 -2
  22. package/dist/components/2_elements/ChannelSelector/ChannelSelector.vue.js +3 -2
  23. package/dist/components/2_elements/ThemeMode/ThemeMode.vue.js +7 -5
  24. package/dist/components/2_elements/VideoRecorder/VideoRecorder.vue2.js +4 -2
  25. package/dist/components/2_feed_elements/AudioMessage/AudioMessage.vue.js +1 -1
  26. package/dist/components/2_feed_elements/AudioMessage/AudioMessage.vue2.js +387 -340
  27. package/dist/components/2_feed_elements/BaseEditMessage/BaseEditMessage.vue.js +7 -0
  28. package/dist/components/2_feed_elements/BaseEditMessage/BaseEditMessage.vue2.js +34 -0
  29. package/dist/components/2_feed_elements/CallMessage/CallMessage.vue.js +2 -2
  30. package/dist/components/2_feed_elements/CallMessage/CallMessage.vue2.js +388 -352
  31. package/dist/components/2_feed_elements/DeletedMessageContent/DeletedMessageContent.vue.js +7 -0
  32. package/dist/components/2_feed_elements/DeletedMessageContent/DeletedMessageContent.vue2.js +63 -0
  33. package/dist/components/2_feed_elements/DeletedMessageContent/icons/DeletedMessageIcon.vue.js +21 -0
  34. package/dist/components/2_feed_elements/EditTextMessage/EditTextMessage.vue.js +7 -0
  35. package/dist/components/2_feed_elements/EditTextMessage/EditTextMessage.vue2.js +35 -0
  36. package/dist/components/2_feed_elements/FileMessage/FileMessage.vue.js +2 -2
  37. package/dist/components/2_feed_elements/FileMessage/FileMessage.vue2.js +204 -157
  38. package/dist/components/2_feed_elements/ImageMessage/ImageMessage.vue.js +3 -3
  39. package/dist/components/2_feed_elements/ImageMessage/ImageMessage.vue2.js +273 -226
  40. package/dist/components/2_feed_elements/MessageKeyboard/MessageKeyboard.vue2.js +9 -7
  41. package/dist/components/2_feed_elements/MessageReactions/MessageReactions.vue.js +2 -2
  42. package/dist/components/2_feed_elements/MessageReactions/MessageReactions.vue2.js +141 -117
  43. package/dist/components/2_feed_elements/MessageReactions/icons/DeleteIcon.vue.js +32 -0
  44. package/dist/components/2_feed_elements/MessageReactions/icons/EditIcon.vue.js +32 -0
  45. package/dist/components/2_feed_elements/MessageReactions/icons/MessageActionsIcon.vue.js +21 -0
  46. package/dist/components/2_feed_elements/MissedCallMessage/MissedCallMessage.vue.js +4 -4
  47. package/dist/components/2_feed_elements/MissedCallMessage/MissedCallMessage.vue2.js +102 -66
  48. package/dist/components/2_feed_elements/ReplyAudioMessage/ReplyAudioMessage.vue2.js +11 -9
  49. package/dist/components/2_feed_elements/ReplyFileMessage/ReplyFileMessage.vue2.js +14 -12
  50. package/dist/components/2_feed_elements/ReplyImageMessage/ReplyImageMessage.vue2.js +11 -9
  51. package/dist/components/2_feed_elements/ReplyStickerMessage/ReplyStickerMessage.vue2.js +13 -11
  52. package/dist/components/2_feed_elements/ReplyTextMessage/ReplyTextMessage.vue2.js +11 -9
  53. package/dist/components/2_feed_elements/ReplyVideoMessage/ReplyVideoMessage.vue2.js +4 -2
  54. package/dist/components/2_feed_elements/StickerMessage/StickerMessage.vue.js +2 -2
  55. package/dist/components/2_feed_elements/StickerMessage/StickerMessage.vue2.js +255 -210
  56. package/dist/components/2_feed_elements/TextMessage/TextMessage.vue.js +1 -1
  57. package/dist/components/2_feed_elements/TextMessage/TextMessage.vue2.js +241 -140
  58. package/dist/components/2_feed_elements/VideoMessage/VideoMessage.vue.js +3 -3
  59. package/dist/components/2_feed_elements/VideoMessage/VideoMessage.vue2.js +245 -200
  60. package/dist/components/2_modals/ConfirmDeleteMessage/ConfirmDeleteMessage.vue.js +7 -0
  61. package/dist/components/2_modals/ConfirmDeleteMessage/ConfirmDeleteMessage.vue3.js +58 -0
  62. package/dist/components/3_compounds/ChatInput/ChatInput.vue.js +2 -2
  63. package/dist/components/3_compounds/ChatInput/ChatInput.vue2.js +5 -4
  64. package/dist/components/3_compounds/ChatList/ChatListHeader.vue.js +8 -8
  65. package/dist/components/3_compounds/ChatList/icons/LogoIcon.vue.js +12 -13
  66. package/dist/components/3_compounds/Feed/Feed.vue.js +2 -2
  67. package/dist/components/3_compounds/Feed/Feed.vue2.js +187 -163
  68. package/dist/components/3_compounds/Feed/composables/useFeedComponents.js +41 -26
  69. package/dist/components/3_compounds/Feed/composables/useFeedGrouping.js +22 -5
  70. package/dist/components/3_compounds/Feed/composables/useFeedReply.js +16 -11
  71. package/dist/components/3_compounds/Feed/utils/getDefaultMessageMenuActions.js +31 -0
  72. package/dist/hooks/messages/buildEditPayload.js +10 -0
  73. package/dist/hooks/messages/calculateMessageMenuPosition.js +70 -0
  74. package/dist/hooks/messages/getDeletedOriginalText.js +26 -0
  75. package/dist/hooks/messages/getEditTooltipLines.js +28 -0
  76. package/dist/hooks/messages/useMessageActions.js +94 -19
  77. package/dist/hooks/messages/useMessageMenuActions.js +18 -0
  78. package/dist/hooks/messages/useStartEdit.js +30 -0
  79. package/dist/hooks/messages/useStartReply.js +16 -14
  80. package/dist/hooks/modals/useConfirmDeleteMessage.js +24 -0
  81. package/dist/hooks/useMessageDraft.js +46 -66
  82. package/dist/hooks/validators/messages/messageValidator.js +29 -35
  83. package/dist/index.js +220 -194
  84. package/dist/locale/en.js +6 -1
  85. package/dist/locale/ru.js +6 -1
  86. package/dist/themes/dark.css +1 -1
  87. package/dist/themes/default.css +1 -1
  88. package/dist/themes/glass.css +1 -1
  89. package/dist/themes/green.css +1 -1
  90. package/dist/themes/mobilon1.css +1 -1
  91. package/dist/types/apps/data/messages.d.ts +0 -321
  92. package/dist/types/components/1_atoms/ContextMenu/ContextMenu.vue.d.ts +0 -2
  93. package/dist/types/components/1_atoms/ContextMenu/stories/ContextMenu.stories.d.ts +1 -0
  94. package/dist/types/components/1_atoms/ContextMenu/styles/types.d.ts +18 -0
  95. package/dist/types/components/1_atoms/LoadingIndicator/styles/types.d.ts +0 -2
  96. package/dist/types/components/1_atoms/Tooltip/Tooltip.vue.d.ts +12 -1
  97. package/dist/types/components/2_feed_elements/BaseEditMessage/BaseEditMessage.vue.d.ts +23 -0
  98. package/dist/types/components/2_feed_elements/BaseEditMessage/stories/BaseEditMessage.stories.d.ts +6 -0
  99. package/dist/types/components/2_feed_elements/DeletedMessageContent/DeletedMessageContent.vue.d.ts +31 -0
  100. package/dist/types/components/2_feed_elements/DeletedMessageContent/icons/DeletedMessageIcon.vue.d.ts +2 -0
  101. package/dist/types/components/2_feed_elements/DeletedMessageContent/styles/types.d.ts +35 -0
  102. package/dist/types/components/2_feed_elements/EditTextMessage/EditTextMessage.vue.d.ts +13 -0
  103. package/dist/types/components/2_feed_elements/EditTextMessage/stories/EditTextMessage.stories.d.ts +7 -0
  104. package/dist/types/components/2_feed_elements/FeedKeyboard/FeedKeyboard.vue.d.ts +1 -1
  105. package/dist/types/components/2_feed_elements/MessageKeyboard/MessageKeyboard.vue.d.ts +1 -1
  106. package/dist/types/components/2_feed_elements/MessageReactions/MessageReactions.vue.d.ts +35 -0
  107. package/dist/types/components/2_feed_elements/MessageReactions/icons/DeleteIcon.vue.d.ts +2 -0
  108. package/dist/types/components/2_feed_elements/MessageReactions/icons/EditIcon.vue.d.ts +2 -0
  109. package/dist/types/components/2_feed_elements/MessageReactions/icons/MessageActionsIcon.vue.d.ts +2 -0
  110. package/dist/types/components/2_feed_elements/TextMessage/TextMessage.vue.d.ts +11 -3
  111. package/dist/types/components/2_feed_elements/TextMessage/stories/TextMessage.stories.d.ts +1 -0
  112. package/dist/types/components/2_feed_elements/TextMessage/styles/types.d.ts +22 -0
  113. package/dist/types/components/2_feed_elements/VideoMessage/stories/VideoMessage.stories.d.ts +2 -2
  114. package/dist/types/components/2_feed_elements/types/components.d.ts +1 -2
  115. package/dist/types/components/2_feed_elements/types/messages.d.ts +116 -9
  116. package/dist/types/components/2_modals/ConfirmDeleteMessage/ConfirmDeleteMessage.vue.d.ts +22 -0
  117. package/dist/types/components/2_modals/ConfirmDeleteMessage/stories/ConfirmDeleteMessage.stories.d.ts +37 -0
  118. package/dist/types/components/2_modals/ConfirmDeleteMessage/styles/types.d.ts +97 -0
  119. package/dist/types/components/3_compounds/ChatInput/types/IInputMessage.d.ts +2 -1
  120. package/dist/types/components/3_compounds/ChatList/styles/types.d.ts +2 -2
  121. package/dist/types/components/3_compounds/Feed/Feed.vue.d.ts +20 -3
  122. package/dist/types/components/3_compounds/Feed/composables/useFeedComponents.d.ts +6 -2
  123. package/dist/types/components/3_compounds/Feed/composables/useFeedGrouping.d.ts +0 -1
  124. package/dist/types/components/3_compounds/Feed/composables/useFeedReply.d.ts +7 -1
  125. package/dist/types/components/3_compounds/Feed/utils/getDefaultMessageMenuActions.d.ts +3 -0
  126. package/dist/types/components/3_compounds/SideBar/SideBar.vue.d.ts +2 -2
  127. package/dist/types/components/index.d.ts +4 -0
  128. package/dist/types/hooks/messages/buildEditPayload.d.ts +7 -0
  129. package/dist/types/hooks/messages/calculateMessageMenuPosition.d.ts +16 -0
  130. package/dist/types/hooks/messages/getDeletedOriginalText.d.ts +28 -0
  131. package/dist/types/hooks/messages/getEditTooltipLines.d.ts +17 -0
  132. package/dist/types/hooks/messages/index.d.ts +6 -0
  133. package/dist/types/hooks/messages/useMessageActions.d.ts +33 -39
  134. package/dist/types/hooks/messages/useMessageMenuActions.d.ts +10 -0
  135. package/dist/types/hooks/messages/useStartEdit.d.ts +6 -0
  136. package/dist/types/hooks/modals/index.d.ts +1 -0
  137. package/dist/types/hooks/modals/useConfirmDeleteMessage.d.ts +2 -0
  138. package/dist/types/hooks/useMessageDraft.d.ts +10 -1
  139. package/dist/types/hooks/validators/messages/types.d.ts +0 -6
  140. package/dist/types/locale/en.d.ts +5 -0
  141. package/dist/types/locale/ru.d.ts +5 -0
  142. package/dist/types/main.d.ts +1 -0
  143. package/package.json +1 -1
@@ -0,0 +1,22 @@
1
+ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
2
+ theme: {
3
+ type: StringConstructor;
4
+ required: false;
5
+ default: string;
6
+ };
7
+ }>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
8
+ cancel: () => any;
9
+ confirm: () => any;
10
+ }, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
11
+ theme: {
12
+ type: StringConstructor;
13
+ required: false;
14
+ default: string;
15
+ };
16
+ }>> & Readonly<{
17
+ onCancel?: (() => any) | undefined;
18
+ onConfirm?: (() => any) | undefined;
19
+ }>, {
20
+ theme: string;
21
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
22
+ export default _default;
@@ -0,0 +1,37 @@
1
+ import type { StoryObj } from '@storybook/vue3-vite';
2
+ declare const meta: {
3
+ title: string;
4
+ component: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
5
+ theme: {
6
+ type: StringConstructor;
7
+ required: false;
8
+ default: string;
9
+ };
10
+ }>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
11
+ cancel: () => any;
12
+ confirm: () => any;
13
+ }, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
14
+ theme: {
15
+ type: StringConstructor;
16
+ required: false;
17
+ default: string;
18
+ };
19
+ }>> & Readonly<{
20
+ onCancel?: (() => any) | undefined;
21
+ onConfirm?: (() => any) | undefined;
22
+ }>, {
23
+ theme: string;
24
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
25
+ args: {
26
+ theme: string;
27
+ };
28
+ argTypes: {
29
+ theme: {
30
+ control: "select";
31
+ options: string[];
32
+ };
33
+ };
34
+ };
35
+ export default meta;
36
+ type Story = StoryObj<typeof meta>;
37
+ export declare const Default: Story;
@@ -0,0 +1,97 @@
1
+ /**
2
+ * CSS переменные для компонента ConfirmDeleteMessage
3
+ */
4
+ export interface ConfirmDeleteMessageThemeCSSVariables {
5
+ /** Позиционирование оверлея */
6
+ '--chotto-confirmdeletemessage-backdrop-position': string;
7
+ /** Фон оверлея */
8
+ '--chotto-confirmdeletemessage-backdrop-bg': string;
9
+ /** Фильтр оверлея */
10
+ '--chotto-confirmdeletemessage-backdrop-filter': string;
11
+ /** Отображение оверлея */
12
+ '--chotto-confirmdeletemessage-backdrop-display': string;
13
+ /** Выравнивание по горизонтали */
14
+ '--chotto-confirmdeletemessage-backdrop-justify': string;
15
+ /** Выравнивание по вертикали */
16
+ '--chotto-confirmdeletemessage-backdrop-align': string;
17
+ /** Z-index оверлея */
18
+ '--chotto-confirmdeletemessage-backdrop-z-index': string;
19
+ /** Ширина диалога */
20
+ '--chotto-confirmdeletemessage-width': string;
21
+ /** Высота диалога */
22
+ '--chotto-confirmdeletemessage-height': string;
23
+ /** Внутренние отступы диалога */
24
+ '--chotto-confirmdeletemessage-padding': string;
25
+ /** Фон диалога */
26
+ '--chotto-confirmdeletemessage-background': string;
27
+ /** Граница диалога */
28
+ '--chotto-confirmdeletemessage-border': string;
29
+ /** Тень диалога */
30
+ '--chotto-confirmdeletemessage-box-shadow': string;
31
+ /** Радиус границы диалога */
32
+ '--chotto-confirmdeletemessage-border-radius': string;
33
+ /** Отображение диалога */
34
+ '--chotto-confirmdeletemessage-display': string;
35
+ /** Направление flex диалога */
36
+ '--chotto-confirmdeletemessage-flex-direction': string;
37
+ /** Выравнивание элементов по горизонтали */
38
+ '--chotto-confirmdeletemessage-align-items': string;
39
+ /** Выравнивание содержимого по вертикали */
40
+ '--chotto-confirmdeletemessage-justify-content': string;
41
+ /** Максимальная ширина диалога */
42
+ '--chotto-confirmdeletemessage-max-width': string;
43
+ /** Отступы заголовка */
44
+ '--chotto-confirmdeletemessage-title-margin': string;
45
+ /** Ширина заголовка */
46
+ '--chotto-confirmdeletemessage-title-width': string;
47
+ /** Выравнивание текста заголовка */
48
+ '--chotto-confirmdeletemessage-title-text-align': string;
49
+ /** Семейство шрифтов заголовка */
50
+ '--chotto-confirmdeletemessage-title-font-family': string;
51
+ /** Жирность шрифта заголовка */
52
+ '--chotto-confirmdeletemessage-title-font-weight': string;
53
+ /** Размер шрифта заголовка */
54
+ '--chotto-confirmdeletemessage-title-font-size': string;
55
+ /** Высота строки заголовка */
56
+ '--chotto-confirmdeletemessage-title-line-height': string;
57
+ /** Цвет заголовка */
58
+ '--chotto-confirmdeletemessage-title-color': string;
59
+ /** Отображение блока кнопок */
60
+ '--chotto-confirmdeletemessage-actions-display': string;
61
+ /** Выравнивание кнопок по вертикали */
62
+ '--chotto-confirmdeletemessage-actions-align-items': string;
63
+ /** Выравнивание кнопок по горизонтали */
64
+ '--chotto-confirmdeletemessage-actions-justify-content': string;
65
+ /** Отступ между кнопками */
66
+ '--chotto-confirmdeletemessage-actions-gap': string;
67
+ /** Ширина кнопки */
68
+ '--chotto-confirmdeletemessage-btn-width': string;
69
+ /** Высота кнопки */
70
+ '--chotto-confirmdeletemessage-btn-height': string;
71
+ /** Семейство шрифтов кнопки */
72
+ '--chotto-confirmdeletemessage-btn-font-family': string;
73
+ /** Жирность шрифта кнопки */
74
+ '--chotto-confirmdeletemessage-btn-font-weight': string;
75
+ /** Размер шрифта кнопки */
76
+ '--chotto-confirmdeletemessage-btn-font-size': string;
77
+ /** Курсор кнопки */
78
+ '--chotto-confirmdeletemessage-btn-cursor': string;
79
+ /** Фон кнопки */
80
+ '--chotto-confirmdeletemessage-btn-background': string;
81
+ /** Цвет текста кнопки удаления */
82
+ '--chotto-confirmdeletemessage-btn-delete-color': string;
83
+ /** Граница кнопки удаления */
84
+ '--chotto-confirmdeletemessage-btn-delete-border': string;
85
+ /** Радиус границы кнопки удаления */
86
+ '--chotto-confirmdeletemessage-btn-delete-border-radius': string;
87
+ /** Цвет текста кнопки отмены */
88
+ '--chotto-confirmdeletemessage-btn-cancel-color': string;
89
+ /** Граница кнопки отмены */
90
+ '--chotto-confirmdeletemessage-btn-cancel-border': string;
91
+ /** Переход появления/скрытия */
92
+ '--chotto-confirmdeletemessage-transition': string;
93
+ /** Начальная прозрачность */
94
+ '--chotto-confirmdeletemessage-enter-opacity': string;
95
+ /** Конечная прозрачность */
96
+ '--chotto-confirmdeletemessage-enter-to-opacity': string;
97
+ }
@@ -1,4 +1,4 @@
1
- import { Reply } from "@/types";
1
+ import { Edit, Reply } from "@/types";
2
2
  export interface IInputMessage {
3
3
  type: string;
4
4
  text?: string;
@@ -6,4 +6,5 @@ export interface IInputMessage {
6
6
  filename?: string;
7
7
  size?: string;
8
8
  reply?: Reply;
9
+ edit?: Edit;
9
10
  }
@@ -88,8 +88,8 @@ export interface ChatListThemeCSSVariables {
88
88
  '--chotto-chatlist-title-logo-width': string;
89
89
  /** Высота логотипа заголовка */
90
90
  '--chotto-chatlist-title-logo-height': string;
91
- /** Отступ слева логотипа заголовка */
92
- '--chotto-chatlist-title-logo-margin-left': string;
91
+ /** Отступ справа логотипа заголовка */
92
+ '--chotto-chatlist-title-logo-margin-right': string;
93
93
  /** Коэффициент сжатия логотипа заголовка */
94
94
  '--chotto-chatlist-title-logo-flex-shrink': string;
95
95
  /** Отображение бейджа beta заголовка */
@@ -1,4 +1,4 @@
1
- import { IFeedObject, IFeedTyping, IFeedUnreadButton, IFeedKeyboard } from '@/types';
1
+ import { IFeedObject, IFeedTyping, IFeedUnreadButton, IFeedKeyboard, IFeedMessageMenuAction } from '@/types';
2
2
  declare var __VLS_1: {}, __VLS_47: {};
3
3
  type __VLS_Slots = {} & {
4
4
  prepend?: (props: typeof __VLS_1) => any;
@@ -104,6 +104,14 @@ declare const __VLS_component: import("vue").DefineComponent<import("vue").Extra
104
104
  required: false;
105
105
  default: undefined;
106
106
  };
107
+ /**
108
+ * Пункты контекстного меню сообщений (с иконками).
109
+ * По умолчанию: Ответить, Редактировать, разделитель, Удалить (красный).
110
+ */
111
+ messageMenuActions: {
112
+ type: () => IFeedMessageMenuAction[];
113
+ default: () => IFeedMessageMenuAction[];
114
+ };
107
115
  }>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
108
116
  loadMore: (...args: any[]) => void;
109
117
  smsInvite: (...args: any[]) => void;
@@ -214,6 +222,14 @@ declare const __VLS_component: import("vue").DefineComponent<import("vue").Extra
214
222
  required: false;
215
223
  default: undefined;
216
224
  };
225
+ /**
226
+ * Пункты контекстного меню сообщений (с иконками).
227
+ * По умолчанию: Ответить, Редактировать, разделитель, Удалить (красный).
228
+ */
229
+ messageMenuActions: {
230
+ type: () => IFeedMessageMenuAction[];
231
+ default: () => IFeedMessageMenuAction[];
232
+ };
217
233
  }>> & Readonly<{
218
234
  onLoadMore?: ((...args: any[]) => any) | undefined;
219
235
  onSmsInvite?: ((...args: any[]) => any) | undefined;
@@ -227,6 +243,7 @@ declare const __VLS_component: import("vue").DefineComponent<import("vue").Extra
227
243
  onDelimiterRead?: ((...args: any[]) => any) | undefined;
228
244
  }>, {
229
245
  typing: boolean | IFeedTyping;
246
+ messageMenuActions: IFeedMessageMenuAction[];
230
247
  chatBackground: string;
231
248
  currentUserId: string | number | undefined;
232
249
  reactionUserNames: Record<string, string>;
@@ -238,9 +255,9 @@ declare const __VLS_component: import("vue").DefineComponent<import("vue").Extra
238
255
  buttonParams: IFeedUnreadButton;
239
256
  scrollToBottom: boolean;
240
257
  scrollTo: string;
241
- keyboardAlign: "left" | "right" | "center";
258
+ keyboardAlign: "center" | "left" | "right";
242
259
  feedKeyboards: IFeedKeyboard[];
243
- feedKeyboardAlign: "left" | "right" | "center";
260
+ feedKeyboardAlign: "center" | "left" | "right";
244
261
  isLoadingMore: boolean;
245
262
  callMessageOnCallback: ((message: IFeedObject) => void) | undefined;
246
263
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
@@ -1,6 +1,10 @@
1
1
  /**
2
- * Композабл для маппинга типов сообщений на компоненты
2
+ * Композабл для маппинга типов сообщений на компоненты.
3
+ * Удалённые сообщения ленты всегда рендерятся как TextMessage.
3
4
  */
4
5
  export declare function useFeedComponents(): {
5
- componentsMap: (type: string) => unknown;
6
+ componentsMap: (object: {
7
+ type?: string;
8
+ deleted?: boolean;
9
+ } | string) => unknown;
6
10
  };
@@ -21,7 +21,6 @@ export declare function useFeedGrouping({ objects }: UseFeedGroupingOptions): {
21
21
  filename?: string;
22
22
  avatar?: string;
23
23
  subtext?: string;
24
- actions?: import("@/types").IAction[];
25
24
  views?: number;
26
25
  callDuration?: string;
27
26
  isMissedCall?: boolean;
@@ -4,7 +4,7 @@ interface UseFeedReplyOptions {
4
4
  emit: (event: 'messageAction' | 'clickRepliedMessage', payload: IFeedObject | string) => void;
5
5
  }
6
6
  /**
7
- * Композабл для обработки ответов на сообщения
7
+ * Композабл для обработки ответов и редактирования сообщений
8
8
  */
9
9
  export declare function useFeedReply({ enableDoubleClickReply, emit }: UseFeedReplyOptions): {
10
10
  getMessage: () => {
@@ -26,6 +26,11 @@ export declare function useFeedReply({ enableDoubleClickReply, emit }: UseFeedRe
26
26
  callDuration?: string | undefined;
27
27
  isMissedCall?: boolean | undefined;
28
28
  } | undefined;
29
+ edit?: {
30
+ messageId: string;
31
+ type: string;
32
+ text?: string | undefined;
33
+ } | undefined;
29
34
  forceSend: boolean;
30
35
  isRecording: boolean;
31
36
  };
@@ -33,5 +38,6 @@ export declare function useFeedReply({ enableDoubleClickReply, emit }: UseFeedRe
33
38
  handleClickReplied: (messageId: string) => void;
34
39
  feedObjectDoubleClick: (event: MouseEvent, object: IFeedObject) => void;
35
40
  handleResetReply: () => void;
41
+ handleResetEdit: () => void;
36
42
  };
37
43
  export {};
@@ -0,0 +1,3 @@
1
+ import type { IFeedMessageMenuAction } from '@/types';
2
+ /** Пункты меню сообщения по умолчанию: Ответить, Редактировать | Удалить */
3
+ export declare function getDefaultMessageMenuActions(): IFeedMessageMenuAction[];
@@ -1,8 +1,8 @@
1
1
  declare const _default: import("vue").DefineComponent<{}, {
2
2
  $emit: (event: "selectItem" | "settingsClick", ...args: any[]) => void;
3
3
  sidebarItems: unknown[];
4
- horizontal: boolean;
5
4
  menuActions: unknown[];
5
+ horizontal: boolean;
6
6
  showSettings: boolean;
7
7
  settingsButtonMode: string;
8
8
  showSettingsIndicator: boolean;
@@ -11,8 +11,8 @@ declare const _default: import("vue").DefineComponent<{}, {
11
11
  settingsIndicatorTooltipAutoShowMs: number;
12
12
  $props: {
13
13
  readonly sidebarItems?: unknown[] | undefined;
14
- readonly horizontal?: boolean | undefined;
15
14
  readonly menuActions?: unknown[] | undefined;
15
+ readonly horizontal?: boolean | undefined;
16
16
  readonly showSettings?: boolean | undefined;
17
17
  readonly settingsButtonMode?: string | undefined;
18
18
  readonly showSettingsIndicator?: boolean | undefined;
@@ -49,11 +49,14 @@ export { default as UserProfile } from './2_elements/UserProfile/UserProfile.vue
49
49
  export { default as VideoRecorder } from './2_elements/VideoRecorder/VideoRecorder.vue';
50
50
  export { default as AudioMessage } from './2_feed_elements/AudioMessage/AudioMessage.vue';
51
51
  export { default as BaseReplyMessage } from './2_feed_elements/BaseReplyMessage/BaseReplyMessage.vue';
52
+ export { default as BaseEditMessage } from './2_feed_elements/BaseEditMessage/BaseEditMessage.vue';
52
53
  export { default as CallMessage } from './2_feed_elements/CallMessage/CallMessage.vue';
53
54
  export { default as DateMessage } from './2_feed_elements/DateMessage/DateMessage.vue';
55
+ export { default as DeletedMessageContent } from './2_feed_elements/DeletedMessageContent/DeletedMessageContent.vue';
54
56
  export { default as MissedCallMessage } from './2_feed_elements/MissedCallMessage/MissedCallMessage.vue';
55
57
  export { default as DateMessageSticky } from './2_feed_elements/DateMessageSticky/DateMessageSticky.vue';
56
58
  export { default as DelimiterMessage } from './2_feed_elements/DelimiterMessage/DelimiterMessage.vue';
59
+ export { default as EditTextMessage } from './2_feed_elements/EditTextMessage/EditTextMessage.vue';
57
60
  export { default as FeedKeyboard } from './2_feed_elements/FeedKeyboard/FeedKeyboard.vue';
58
61
  export { default as FileMessage } from './2_feed_elements/FileMessage/FileMessage.vue';
59
62
  export { default as ImageMessage } from './2_feed_elements/ImageMessage/ImageMessage.vue';
@@ -76,6 +79,7 @@ export { default as VideoMessage } from './2_feed_elements/VideoMessage/VideoMes
76
79
  export { default as Modal } from './2_modals/Modal/Modal.vue';
77
80
  export { default as ModalFullscreen } from './2_modals/ModalFullscreen/ModalFullscreen.vue';
78
81
  export { default as ModalNoFooter } from './2_modals/ModalNoFooter/ModalNoFooter.vue';
82
+ export { default as ConfirmDeleteMessage } from './2_modals/ConfirmDeleteMessage/ConfirmDeleteMessage.vue';
79
83
  export { default as SelectUser } from './2_modals/SelectUser/SelectUser.vue';
80
84
  export { default as ChatInput } from './3_compounds/ChatInput/ChatInput.vue';
81
85
  export { default as ChatListHeader } from './3_compounds/ChatList/ChatListHeader.vue';
@@ -0,0 +1,7 @@
1
+ import type { Edit } from '@/types';
2
+ export interface EditMessageSource {
3
+ messageId: string | number;
4
+ type?: string;
5
+ text?: string;
6
+ }
7
+ export declare function buildEditPayload(message: EditMessageSource, fallbackType?: string): Edit;
@@ -0,0 +1,16 @@
1
+ export type MenuTriggerRect = Pick<DOMRect, 'top' | 'right' | 'bottom' | 'left' | 'width' | 'height'>;
2
+ /**
3
+ * Границы приложения для встроек: .base__container / .base / .chat-app / [data-theme],
4
+ * пересечённые с viewport.
5
+ */
6
+ export declare function findAppBoundsRect(element: HTMLElement | null): DOMRect;
7
+ /**
8
+ * Позиция контекстного меню рядом с кнопкой «три точки» (position: fixed).
9
+ * Не выходит за границы приложения (важно для встроек).
10
+ */
11
+ export declare function calculateMessageMenuPosition(menuElement: HTMLElement | null, options: {
12
+ triggerRect: MenuTriggerRect | null;
13
+ boundsElement: HTMLElement | null;
14
+ estimatedWidth?: number;
15
+ estimatedHeight?: number;
16
+ }): Promise<Record<string, string>>;
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Текст и мета для тултипа удалённого сообщения
3
+ * (текст + «Имя, дата в время»).
4
+ */
5
+ export type DeletedTooltipLines = {
6
+ original: string;
7
+ meta: string;
8
+ };
9
+ /**
10
+ * Строки тултипа для «Сообщение удалено»:
11
+ * original — исходный текст/подпись;
12
+ * meta — «Имя, дата в время».
13
+ */
14
+ export declare function getDeletedTooltipLines(message: {
15
+ text?: string;
16
+ filename?: string;
17
+ alt?: string;
18
+ deletion?: {
19
+ deletedBy?: string;
20
+ deletedAt?: string;
21
+ } | null;
22
+ }): DeletedTooltipLines;
23
+ /** @deprecated используйте getDeletedTooltipLines().original */
24
+ export declare function getDeletedOriginalText(message: {
25
+ text?: string;
26
+ filename?: string;
27
+ alt?: string;
28
+ }): string;
@@ -0,0 +1,17 @@
1
+ import type { MessageEditInfo } from '@/types';
2
+ export type EditTooltipEntry = {
3
+ text: string;
4
+ meta: string;
5
+ };
6
+ export type EditTooltipLines = {
7
+ /** Оригинальный текст до первой правки */
8
+ original?: string;
9
+ /** Правки: текст версии и «Имя, дата в время» */
10
+ edits: EditTooltipEntry[];
11
+ };
12
+ /**
13
+ * Строки тултипа для метки «изменено»:
14
+ * original — текст до первой правки;
15
+ * edits — для каждой правки: текст версии + «Имя, дата в время».
16
+ */
17
+ export declare function getEditTooltipLines(edited?: MessageEditInfo | null): EditTooltipLines;
@@ -1,6 +1,12 @@
1
1
  export * from './useMessageActions';
2
+ export * from './calculateMessageMenuPosition';
3
+ export * from './useMessageMenuActions';
2
4
  export * from './useMessageLinks';
3
5
  export * from './useChannelAccentColor';
4
6
  export * from './useSubtextTooltip';
5
7
  export * from './useStartReply';
8
+ export * from './useStartEdit';
6
9
  export * from './buildReplyPayload';
10
+ export * from './buildEditPayload';
11
+ export * from './getEditTooltipLines';
12
+ export * from './getDeletedOriginalText';
@@ -1,55 +1,49 @@
1
1
  /**
2
- * Полезная нагрузка для событий действия сообщения
3
- * @typedef ActionPayload
4
- * @property {string} messageId - Идентификатор сообщения
5
- * @property {string} type - Тип действия (например, 'menu' | 'views')
2
+ * Composable для общих действий в компонентах сообщений (контекстное меню, просмотры, ответ)
3
+ *
4
+ * Предназначен для элементов ленты (`TextMessage`, `ImageMessage`, `VideoMessage`, `FileMessage`, `AudioMessage`).
5
+ * Централизует управление состоянием кнопки меню/контекстного меню и единообразно эмитит события наружу.
6
+ *
7
+ * @example
8
+ * const { isOpenMenu, toggleMenu, openMenu, menuStyle, menuRef, menuAnchorRef } = useMessageActions(...)
9
+ * // <button @click="toggleMenu">
10
+ * // <MessageReactions @menu="openMenu" />
11
+ * // <Teleport to="body"><ContextMenu v-if="isOpenMenu" ref="menuRef" :style="menuStyle" /></Teleport>
6
12
  */
13
+ import { type ComponentPublicInstance } from 'vue';
14
+ import { type MenuTriggerRect } from './calculateMessageMenuPosition';
7
15
  type ActionPayload = {
8
16
  messageId: string;
9
17
  type: string;
10
18
  } & Record<string, unknown>;
11
- /**
12
- * Тип эмиттера событий компонентов сообщений
13
- * @typedef EmitFn
14
- * @param {'action' | 'reply'} event - Имя события
15
- * @param {ActionPayload | string} payload - Данные события
16
- */
17
19
  type EmitFn = (event: 'action' | 'reply', payload: ActionPayload | string) => void;
18
- /**
19
- * Минимально необходимая структура сообщения для работы composable
20
- * @interface MessageWithMeta
21
- * @property {string} messageId - Идентификатор сообщения
22
- * @property {unknown} [actions] - Описание доступных действий (передается в `ContextMenu`)
23
- */
24
20
  export interface MessageWithMeta {
25
21
  messageId: string;
26
- actions?: unknown;
27
22
  }
28
- /**
29
- * Composable для унификации поведения контекстного меню и связанных действий у сообщений ленты
30
- *
31
- * Предоставляет реактивные флаги и обработчики действий: показать/скрыть меню, клик по пункту меню,
32
- * клик по просмотрам, эмит события ответа.
33
- *
34
- * @template T Расширяет {@link MessageWithMeta}
35
- * @param {T} message - Сообщение с `messageId` (и опционально `actions`)
36
- * @param {EmitFn} emit - Эмиттер событий из компонента сообщения
37
- *
38
- * @returns {object} Объект с состояниями и методами
39
- * @returns {import('vue').Ref<boolean>} returns.isOpenMenu - Открыт ли контекстное меню
40
- * @returns {import('vue').Ref<boolean>} returns.buttonMenuVisible - Видна ли кнопка вызова меню
41
- * @returns {Function} returns.showMenu - Показать кнопку меню
42
- * @returns {Function} returns.hideMenu - Скрыть кнопку и закрыть меню
43
- * @returns {Function} returns.clickAction - Обработчик клика по пункту контекстного меню
44
- * @returns {Function} returns.viewsAction - Обработчик клика по просмотрам
45
- * @returns {Function} returns.handleClickReplied - Эмит события ответа по `replyMessageId`
46
- */
47
- export declare const useMessageActions: <T extends MessageWithMeta>(message: T, emit: EmitFn) => {
23
+ type UseMessageActionsOptions = {
24
+ onReply?: () => void;
25
+ onEdit?: () => void;
26
+ };
27
+ /** Payload от MessageReactions @menu или клик по кнопке */
28
+ export type OpenMessageMenuSource = Event | {
29
+ event?: Event;
30
+ triggerRect?: MenuTriggerRect;
31
+ messageId?: string | number;
32
+ } | MenuTriggerRect | undefined;
33
+ export declare const useMessageActions: <T extends MessageWithMeta>(message: T, emit: EmitFn, options?: UseMessageActionsOptions) => {
48
34
  isOpenMenu: import("vue").Ref<boolean, boolean>;
49
35
  buttonMenuVisible: import("vue").Ref<boolean, boolean>;
36
+ menuAnchorRef: import("vue").Ref<HTMLElement | null, HTMLElement | null>;
37
+ menuRef: import("vue").Ref<HTMLElement | ComponentPublicInstance | null, HTMLElement | ComponentPublicInstance | null>;
38
+ menuStyle: import("vue").Ref<Record<string, string>, Record<string, string>>;
39
+ menuTheme: import("vue").ComputedRef<string>;
50
40
  showMenu: () => void;
51
- hideMenu: () => void;
52
- clickAction: (action: Record<string, unknown>) => void;
41
+ hideMenu: (event?: MouseEvent) => void;
42
+ openMenu: (source?: OpenMessageMenuSource) => void;
43
+ toggleMenu: (event?: Event) => void;
44
+ onMenuMouseEnter: () => void;
45
+ onMenuMouseLeave: () => void;
46
+ clickAction: (action: Record<string, unknown>) => Promise<void>;
53
47
  viewsAction: () => void;
54
48
  handleClickReplied: (replyMessageId: string) => void;
55
49
  };
@@ -0,0 +1,10 @@
1
+ import { type MaybeRefOrGetter } from 'vue';
2
+ import type { IFeedMessageMenuAction, MessageMenuActionContext } from '@/types';
3
+ /**
4
+ * Пункты контекстного меню сообщения из Feed (`messageMenuActions`)
5
+ * или дефолт: Ответить / Редактировать / Удалить.
6
+ * `disabled` может быть функцией от сообщения — резолвится здесь.
7
+ */
8
+ export declare function useMessageMenuActions(message?: MaybeRefOrGetter<MessageMenuActionContext>): {
9
+ menuActions: import("vue").ComputedRef<IFeedMessageMenuAction[]>;
10
+ };
@@ -0,0 +1,6 @@
1
+ import type { Edit } from '@/types';
2
+ export declare function useStartEdit(chatAppId: string): {
3
+ startEdit: (edit: Edit) => void;
4
+ };
5
+ export declare function hideEditPreview(chatAppId: string): void;
6
+ export declare function showEditPreview(chatAppId: string): void;
@@ -1,5 +1,6 @@
1
1
  export * from './useCreateChat';
2
2
  export * from './useCreateChat2';
3
3
  export * from './useCreateDialog';
4
+ export * from './useConfirmDeleteMessage';
4
5
  export * from './useModalSelectUser2';
5
6
  export * from './useVideoRecorder';
@@ -0,0 +1,2 @@
1
+ /** Показывает диалог «Удалить сообщение?» и возвращает true при подтверждении */
2
+ export declare function useConfirmDeleteMessage(theme?: string): Promise<boolean>;
@@ -1,4 +1,4 @@
1
- import { Reply } from '@/types';
1
+ import { Edit, Reply } from '@/types';
2
2
  /**
3
3
  * Структура загруженного файла
4
4
  * @interface UploadedFile
@@ -32,6 +32,8 @@ interface UploadedFile {
32
32
  * @returns {Function} returns.resetMessageFile - Удалить прикрепленный файл
33
33
  * @returns {Function} returns.setReply - Установить ответ на сообщение
34
34
  * @returns {Function} returns.resetReply - Удалить ответ на сообщение
35
+ * @returns {Function} returns.setEdit - Установить редактируемое сообщение
36
+ * @returns {Function} returns.resetEdit - Сбросить режим редактирования
35
37
  * @returns {Function} returns.setForceSendMessage - Установить флаг принудительной отправки
36
38
  * @returns {Function} returns.setRecordingMessage - Установить флаг записи
37
39
  *
@@ -93,6 +95,11 @@ export declare const useMessageDraft: (outId: string) => {
93
95
  callDuration?: string | undefined;
94
96
  isMissedCall?: boolean | undefined;
95
97
  } | undefined;
98
+ edit?: {
99
+ messageId: string;
100
+ type: string;
101
+ text?: string | undefined;
102
+ } | undefined;
96
103
  forceSend: boolean;
97
104
  isRecording: boolean;
98
105
  };
@@ -102,6 +109,8 @@ export declare const useMessageDraft: (outId: string) => {
102
109
  setMessageText: (text: string) => void;
103
110
  setReply: (reply: Reply) => void;
104
111
  resetReply: () => void;
112
+ setEdit: (edit: Edit) => void;
113
+ resetEdit: () => void;
105
114
  setForceSendMessage: (val: boolean) => void;
106
115
  setRecordingMessage: (val: boolean) => void;
107
116
  };
@@ -1,11 +1,6 @@
1
1
  /**
2
2
  * Типы для данных сообщений
3
3
  */
4
- export interface MessageAction {
5
- action: string;
6
- title: string;
7
- icon?: string;
8
- }
9
4
  export interface MessageReply {
10
5
  messageId: string | number;
11
6
  type: string;
@@ -55,7 +50,6 @@ export interface Message {
55
50
  filename?: string;
56
51
  alt?: string;
57
52
  views?: number;
58
- actions?: MessageAction[];
59
53
  reply?: MessageReply;
60
54
  embed?: MessageEmbed;
61
55
  linkPreview?: MessageLinkPreview;
@@ -21,4 +21,9 @@ export const en: {
21
21
  'component.TextFormatToolbar.Code': string;
22
22
  'component.TextFormatToolbar.Quote': string;
23
23
  'component.TextMessage.sendSmsInvite': string;
24
+ 'component.TextMessage.edited': string;
25
+ 'component.ConfirmDeleteMessage.title': string;
26
+ 'component.ConfirmDeleteMessage.delete': string;
27
+ 'component.ConfirmDeleteMessage.cancel': string;
28
+ 'component.DeletedMessageContent.text': string;
24
29
  };
@@ -21,4 +21,9 @@ export const ru: {
21
21
  'component.TextFormatToolbar.Code': string;
22
22
  'component.TextFormatToolbar.Quote': string;
23
23
  'component.TextMessage.sendSmsInvite': string;
24
+ 'component.TextMessage.edited': string;
25
+ 'component.ConfirmDeleteMessage.title': string;
26
+ 'component.ConfirmDeleteMessage.delete': string;
27
+ 'component.ConfirmDeleteMessage.cancel': string;
28
+ 'component.DeletedMessageContent.text': string;
24
29
  };
@@ -2,5 +2,6 @@ import './components/2_feed_elements/StickerMessage/utils/suppress-lit-warning';
2
2
  import 'primeicons/primeicons.css';
3
3
  import './themes/index.scss';
4
4
  import '@fontsource/inter/700';
5
+ import '@fontsource/montserrat/600';
5
6
  import '@fontsource/open-sans/400';
6
7
  import '@fontsource/open-sans/600';