@mobilon-dev/chotto 0.3.106 → 0.3.108

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 (38) hide show
  1. package/dist/chotto.css +1 -1
  2. package/dist/components/2_feed_elements/AudioMessage/AudioMessage.vue.js +2 -2
  3. package/dist/components/2_feed_elements/AudioMessage/AudioMessage.vue2.js +295 -268
  4. package/dist/components/2_feed_elements/FileMessage/FileMessage.vue.js +2 -2
  5. package/dist/components/2_feed_elements/FileMessage/FileMessage.vue2.js +185 -158
  6. package/dist/components/2_feed_elements/ImageMessage/ImageMessage.vue.js +3 -3
  7. package/dist/components/2_feed_elements/ImageMessage/ImageMessage.vue2.js +227 -200
  8. package/dist/components/2_feed_elements/MessageReactions/MessageReactions.vue.js +2 -2
  9. package/dist/components/2_feed_elements/MessageReactions/MessageReactions.vue2.js +62 -245
  10. package/dist/components/2_feed_elements/MessageReactions/MessageReactionsOverlay.vue.js +7 -0
  11. package/dist/components/2_feed_elements/MessageReactions/MessageReactionsOverlay.vue2.js +231 -0
  12. package/dist/components/2_feed_elements/MessageReactions/composables/usePositioning.js +25 -25
  13. package/dist/components/2_feed_elements/StickerMessage/StickerMessage.vue.js +2 -2
  14. package/dist/components/2_feed_elements/StickerMessage/StickerMessage.vue2.js +209 -182
  15. package/dist/components/2_feed_elements/TextMessage/TextMessage.vue.js +2 -2
  16. package/dist/components/2_feed_elements/TextMessage/TextMessage.vue2.js +190 -164
  17. package/dist/components/2_feed_elements/VideoMessage/VideoMessage.vue.js +3 -3
  18. package/dist/components/2_feed_elements/VideoMessage/VideoMessage.vue2.js +208 -181
  19. package/dist/components/3_compounds/Feed/Feed.vue.js +1 -1
  20. package/dist/components/3_compounds/Feed/Feed.vue2.js +207 -197
  21. package/dist/components/3_compounds/Feed/composables/useFeedProgressiveRender.js +52 -49
  22. package/dist/components/3_compounds/Feed/composables/useFeedReactionsOverlay.js +34 -0
  23. package/dist/hooks/messages/useMessageActions.js +81 -70
  24. package/dist/hooks/messages/useMessageHoverActions.js +9 -8
  25. package/dist/hooks/messages/useMessageReactionsInFeed.js +53 -0
  26. package/dist/hooks/messages/useMessageReactionsMount.js +21 -0
  27. package/dist/index.js +149 -144
  28. package/dist/types/apps/data/messages.d.ts +197 -0
  29. package/dist/types/components/2_feed_elements/MessageReactions/MessageReactions.vue.d.ts +4 -71
  30. package/dist/types/components/2_feed_elements/MessageReactions/MessageReactionsOverlay.vue.d.ts +2 -0
  31. package/dist/types/components/2_feed_elements/MessageReactions/composables/usePositioning.d.ts +2 -1
  32. package/dist/types/components/3_compounds/Feed/composables/index.d.ts +1 -0
  33. package/dist/types/components/3_compounds/Feed/composables/useFeedReactionsOverlay.d.ts +52 -0
  34. package/dist/types/hooks/messages/index.d.ts +2 -0
  35. package/dist/types/hooks/messages/useMessageHoverActions.d.ts +2 -1
  36. package/dist/types/hooks/messages/useMessageReactionsInFeed.d.ts +25 -0
  37. package/dist/types/hooks/messages/useMessageReactionsMount.d.ts +10 -0
  38. package/package.json +1 -1
@@ -1,5 +1,4 @@
1
- import 'vue3-emoji-picker-ru/css';
2
- import type { MessageReactions, Reply } from '@/types';
1
+ import type { MessageReactions } from '@/types';
3
2
  import { type ReactionsMode } from './composables';
4
3
  declare const _default: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
5
4
  reactions: {
@@ -11,10 +10,6 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
11
10
  type: (StringConstructor | NumberConstructor)[];
12
11
  required: true;
13
12
  };
14
- readonly: {
15
- type: BooleanConstructor;
16
- default: boolean;
17
- };
18
13
  enabled: {
19
14
  type: BooleanConstructor;
20
15
  default: boolean;
@@ -24,47 +19,21 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
24
19
  default: string;
25
20
  validator: (value: string) => boolean;
26
21
  };
27
- /** Id текущего пользователя — для расчёта reactedByMe и локальных add/remove */
28
22
  currentUserId: {
29
23
  type: () => string | number | undefined;
30
24
  default: undefined;
31
25
  };
32
- /** Имя текущего пользователя — для тултипа при локальном добавлении реакции */
33
26
  currentUserName: {
34
27
  type: StringConstructor;
35
28
  default: undefined;
36
29
  };
37
- /** userId → имя (если в item нет name) */
38
30
  reactionUserNames: {
39
31
  type: () => Record<string, string>;
40
32
  default: undefined;
41
33
  };
42
- reply: {
43
- type: () => Reply | undefined;
44
- default: undefined;
45
- };
46
- replyEnabled: {
47
- type: BooleanConstructor;
48
- default: boolean;
49
- };
50
- /** Показывать кнопку меню действий сообщения в панели быстрых реакций */
51
- menuEnabled: {
52
- type: BooleanConstructor;
53
- default: boolean;
54
- };
55
- }>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
56
- menu: (payload: {
57
- messageId: string | number;
58
- triggerRect?: {
59
- top: number;
60
- right: number;
61
- bottom: number;
62
- left: number;
63
- width: number;
64
- height: number;
65
- };
66
- event?: MouseEvent;
67
- }) => any;
34
+ }>, {
35
+ reactionsContainerRef: import("vue").Ref<HTMLElement | null, HTMLElement | null>;
36
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
68
37
  "toggle-reaction": (payload: {
69
38
  messageId: string | number;
70
39
  key: string;
@@ -87,10 +56,6 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
87
56
  type: (StringConstructor | NumberConstructor)[];
88
57
  required: true;
89
58
  };
90
- readonly: {
91
- type: BooleanConstructor;
92
- default: boolean;
93
- };
94
59
  enabled: {
95
60
  type: BooleanConstructor;
96
61
  default: boolean;
@@ -100,47 +65,19 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
100
65
  default: string;
101
66
  validator: (value: string) => boolean;
102
67
  };
103
- /** Id текущего пользователя — для расчёта reactedByMe и локальных add/remove */
104
68
  currentUserId: {
105
69
  type: () => string | number | undefined;
106
70
  default: undefined;
107
71
  };
108
- /** Имя текущего пользователя — для тултипа при локальном добавлении реакции */
109
72
  currentUserName: {
110
73
  type: StringConstructor;
111
74
  default: undefined;
112
75
  };
113
- /** userId → имя (если в item нет name) */
114
76
  reactionUserNames: {
115
77
  type: () => Record<string, string>;
116
78
  default: undefined;
117
79
  };
118
- reply: {
119
- type: () => Reply | undefined;
120
- default: undefined;
121
- };
122
- replyEnabled: {
123
- type: BooleanConstructor;
124
- default: boolean;
125
- };
126
- /** Показывать кнопку меню действий сообщения в панели быстрых реакций */
127
- menuEnabled: {
128
- type: BooleanConstructor;
129
- default: boolean;
130
- };
131
80
  }>> & Readonly<{
132
- onMenu?: ((payload: {
133
- messageId: string | number;
134
- triggerRect?: {
135
- top: number;
136
- right: number;
137
- bottom: number;
138
- left: number;
139
- width: number;
140
- height: number;
141
- };
142
- event?: MouseEvent;
143
- }) => any) | undefined;
144
81
  "onToggle-reaction"?: ((payload: {
145
82
  messageId: string | number;
146
83
  key: string;
@@ -154,15 +91,11 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
154
91
  key: string;
155
92
  }) => any) | undefined;
156
93
  }>, {
157
- reply: Reply | undefined;
158
94
  mode: ReactionsMode;
159
95
  reactions: MessageReactions | undefined;
160
- readonly: boolean;
161
96
  enabled: boolean;
162
97
  currentUserId: string | number | undefined;
163
98
  currentUserName: string;
164
99
  reactionUserNames: Record<string, string>;
165
- replyEnabled: boolean;
166
- menuEnabled: boolean;
167
100
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
168
101
  export default _default;
@@ -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;
@@ -3,7 +3,8 @@
3
3
  */
4
4
  export declare function findFeedContainer(element: HTMLElement | null): HTMLElement | null;
5
5
  /**
6
- * Находит контейнер содержимого сообщения (например, text-message__content)
6
+ * Находит контейнер содержимого сообщения (например, text-message__content).
7
+ * Якорь overlay может быть самим __content — проверяем элемент и предков.
7
8
  */
8
9
  export declare function findMessageContent(element: HTMLElement | null): HTMLElement | null;
9
10
  /**
@@ -5,6 +5,7 @@ export * from './useFeedKeyboard';
5
5
  export * from './useFeedLoadMore';
6
6
  export * from './useFeedMessageVisibility';
7
7
  export * from './useFeedProgressiveRender';
8
+ export * from './useFeedReactionsOverlay';
8
9
  export * from './useFeedReply';
9
10
  export * from './useFeedScroll';
10
11
  export * from './useFeedScrollTo';
@@ -0,0 +1,52 @@
1
+ import { type Ref } from 'vue';
2
+ import type { ReactionsMode } from '@/components/2_feed_elements/MessageReactions/composables';
3
+ import type { MessageReactions, Reply } from '@/types';
4
+ import type { OpenMessageMenuSource } from '@/hooks/messages/useMessageActions';
5
+ export interface FeedReactionsHandlers {
6
+ onToggleReaction: (payload: {
7
+ messageId: string | number;
8
+ key: string;
9
+ }) => void;
10
+ onAddReaction: (payload: {
11
+ messageId: string | number;
12
+ key: string;
13
+ }) => void;
14
+ onRemoveReaction: (payload: {
15
+ messageId: string | number;
16
+ key: string;
17
+ }) => void;
18
+ onMenu: (source?: OpenMessageMenuSource) => void;
19
+ }
20
+ export interface FeedReactionsTarget {
21
+ messageId: string | number;
22
+ anchorEl: HTMLElement;
23
+ chipsEl: HTMLElement | null;
24
+ reactions: MessageReactions | undefined;
25
+ reply: Reply | undefined;
26
+ replyEnabled: boolean;
27
+ menuEnabled: boolean;
28
+ mode: ReactionsMode;
29
+ enabled: boolean;
30
+ handlers: FeedReactionsHandlers;
31
+ /** Записать оптимистичное состояние реакций в объект сообщения ленты */
32
+ patchReactions: (next: MessageReactions) => void;
33
+ }
34
+ export interface FeedReactionsConsumerApi {
35
+ activate: (target: FeedReactionsTarget) => void;
36
+ handlePointerLeave: (event: PointerEvent, contentEl: HTMLElement | null, chipsEl?: HTMLElement | null) => void;
37
+ }
38
+ export interface FeedReactionsOverlayState {
39
+ activeTarget: Ref<FeedReactionsTarget | null>;
40
+ anchorRef: Ref<HTMLElement | null>;
41
+ }
42
+ type PanelBridge = {
43
+ onMessageEnter: () => void;
44
+ onMessageLeave: () => void;
45
+ isPanelOpen: () => boolean;
46
+ containsNode: (node: Node) => boolean;
47
+ };
48
+ export declare function registerFeedReactionsPanelBridge(bridge: PanelBridge | null): void;
49
+ export declare function provideFeedReactionsOverlay(): FeedReactionsOverlayState;
50
+ export declare function useFeedReactionsConsumer(): FeedReactionsConsumerApi | null;
51
+ export declare function useFeedReactionsOverlayState(): FeedReactionsOverlayState | null;
52
+ export {};
@@ -1,5 +1,7 @@
1
1
  export * from './useMessageActions';
2
2
  export * from './useMessageHoverActions';
3
+ export * from './useMessageReactionsMount';
4
+ export * from './useMessageReactionsInFeed';
3
5
  export * from './calculateMessageMenuPosition';
4
6
  export * from './useMessageMenuActions';
5
7
  export * from './useMessageLinks';
@@ -1,7 +1,8 @@
1
1
  import { type MaybeRefOrGetter } from 'vue';
2
2
  /**
3
3
  * Hover-панели сообщения (реакции и меню по трём точкам).
4
- * Для SMS недоступны: канал не поддерживает реакции, ответ и редактирование.
4
+ * Недоступны для SMS (канал не поддерживает реакции, ответ и редактирование)
5
+ * и для удалённых сообщений (tombstone).
5
6
  */
6
7
  export declare function useMessageHoverActions(channel: MaybeRefOrGetter<string | undefined>, reactionsEnabled?: MaybeRefOrGetter<boolean>, message?: MaybeRefOrGetter<unknown>): {
7
8
  hoverActionsEnabled: import("vue").ComputedRef<boolean>;
@@ -0,0 +1,25 @@
1
+ import { type InjectionKey, type MaybeRefOrGetter, type Ref } from 'vue';
2
+ import type { MessageReactions, Reply } from '@/types';
3
+ import type { FeedReactionsHandlers } from '@/components/3_compounds/Feed/composables/useFeedReactionsOverlay';
4
+ type MessageWithReactions = {
5
+ reactions?: MessageReactions;
6
+ };
7
+ export declare const MESSAGE_REACTIONS_PATCH_KEY: InjectionKey<(next: MessageReactions) => void>;
8
+ interface UseMessageReactionsInFeedOptions {
9
+ message: MaybeRefOrGetter<MessageWithReactions>;
10
+ messageId: MaybeRefOrGetter<string | number>;
11
+ reactions: MaybeRefOrGetter<MessageReactions | undefined>;
12
+ reactionsActive: MaybeRefOrGetter<boolean>;
13
+ reactionsMode: MaybeRefOrGetter<'single' | 'multi'>;
14
+ reply: MaybeRefOrGetter<Reply | undefined>;
15
+ menuEnabled: MaybeRefOrGetter<boolean>;
16
+ contentRef: Ref<HTMLElement | null>;
17
+ chipsRef?: Ref<HTMLElement | null>;
18
+ handlers: FeedReactionsHandlers;
19
+ }
20
+ export declare function useMessageReactionsInFeed(options: UseMessageReactionsInFeedOptions): {
21
+ showReactions: import("vue").ComputedRef<boolean>;
22
+ onContentPointerEnter: () => void;
23
+ onContentPointerLeave: (event: PointerEvent) => void;
24
+ };
25
+ export {};
@@ -0,0 +1,10 @@
1
+ import { type MaybeRefOrGetter } from 'vue';
2
+ import type { MessageReactions } from '@/types';
3
+ /**
4
+ * Отложенный mount MessageReactions: без items — только после pointerenter на контент.
5
+ */
6
+ export declare function useMessageReactionsMount(reactions: MaybeRefOrGetter<MessageReactions | undefined>, reactionsActive: MaybeRefOrGetter<boolean>): {
7
+ showReactions: import("vue").ComputedRef<boolean>;
8
+ engageReactionsMount: () => void;
9
+ hasReactionItems: import("vue").ComputedRef<boolean>;
10
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mobilon-dev/chotto",
3
- "version": "0.3.106",
3
+ "version": "0.3.108",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.js",