@convokitapp/vue-ui 0.7.0 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +100 -0
- package/PARITY.md +37 -0
- package/README.md +118 -4
- package/dist/index.cjs +411 -22
- package/dist/index.cjs.map +1 -1
- package/dist/index.css +93 -0
- package/dist/index.css.map +1 -1
- package/dist/index.d.cts +265 -5
- package/dist/index.d.ts +265 -5
- package/dist/index.js +418 -26
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/dist/index.d.cts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Conversation as Conversation$1, InboxPage, MessageListOptions, Message, SendMessageInput, MarkConversationReadOptions, ConversationPrivateState, ClearConversationUnreadOptions, ClearUnreadResult, RealtimeConnectionHandlers, RealtimeSubscription, MessageEvent, MessageDeletedEvent, ReadEvent, TypingEvent, ReadPosition, InboxSummary, MessageMedia, ConvoKitClient, InboxEntry } from '@convokitapp/sdk';
|
|
1
|
+
import { Conversation as Conversation$1, InboxPage, MessageListOptions, Message, SendMessageInput, EditMessageInput, MarkConversationReadOptions, ConversationPrivateState, ClearConversationUnreadOptions, ClearUnreadResult, RealtimeConnectionHandlers, RealtimeSubscription, MessageEvent, MessageDeletedEvent, ReadEvent, TypingEvent, ReadPosition, InboxSummary, MessageMedia, ConvoKitClient, InboxEntry } from '@convokitapp/sdk';
|
|
2
2
|
import * as vue from 'vue';
|
|
3
3
|
import { CSSProperties, HTMLAttributes, Ref, VNodeChild, PropType, MaybeRefOrGetter, TextareaHTMLAttributes } from 'vue';
|
|
4
4
|
|
|
@@ -29,6 +29,18 @@ interface ConvoKitUiClient {
|
|
|
29
29
|
/** Complete authorized message, including related media absent from raw row events. */
|
|
30
30
|
getMessage(id: string): Promise<Message>;
|
|
31
31
|
sendMessage(input: SendMessageInput): Promise<Message>;
|
|
32
|
+
/** Replace the text of one of the caller's own messages, or clear the caption of a message with attachments with
|
|
33
|
+
* `text: null` (0.8.0). `revision` is the row's `Message.revision` as the user saw it; a stale value must reject
|
|
34
|
+
* with `code: 'REVISION_CONFLICT'` (status 409) and a deleted or inaccessible message with `code: 'MESSAGE_NOT_FOUND'`
|
|
35
|
+
* (status 404). Attachments are never changed. Optional: without it the room store hides the edit affordance and
|
|
36
|
+
* `saveEdit` rejects.
|
|
37
|
+
*/
|
|
38
|
+
editMessage?(messageId: string, input: EditMessageInput): Promise<Message>;
|
|
39
|
+
/** Delete one of the caller's own messages for every member (0.8.0); a message that is already gone must reject
|
|
40
|
+
* with `code: 'MESSAGE_NOT_FOUND'`. Optional: without it the room store hides the delete affordance and
|
|
41
|
+
* `deleteMessage` rejects.
|
|
42
|
+
*/
|
|
43
|
+
deleteMessage?(messageId: string): Promise<void>;
|
|
32
44
|
/** Acknowledge through `options.throughMessageId` (the newest rendered row). Custom adapters must forward the
|
|
33
45
|
* options unchanged (0.7 adds `privateStateVersion`, the version captured when the room opened; an adapter that
|
|
34
46
|
* drops it acknowledges the position but never clears the caller's unread marker) and reject a missing target
|
|
@@ -107,6 +119,15 @@ interface ConversationState {
|
|
|
107
119
|
hasLoaded: Readonly<Ref<boolean>>;
|
|
108
120
|
error: Readonly<Ref<unknown>>;
|
|
109
121
|
currentUserId: Readonly<Ref<string>>;
|
|
122
|
+
/** The row being edited as the user saw it when editing started (0.8.0); its `revision` is what `saveEdit`
|
|
123
|
+
* sends. Replaced by the current row on a conflict; null when not editing.
|
|
124
|
+
*/
|
|
125
|
+
editingMessage: Readonly<Ref<Message | null>>;
|
|
126
|
+
/** Whether the adapter implements `editMessage` / `deleteMessage` (0.8.0). Without it the default rows render no
|
|
127
|
+
* actions and `startEditing` is a no-op.
|
|
128
|
+
*/
|
|
129
|
+
canEditMessages: Readonly<Ref<boolean>>;
|
|
130
|
+
canDeleteMessages: Readonly<Ref<boolean>>;
|
|
110
131
|
readerIdsFor(message: Message): ReadonlySet<string>;
|
|
111
132
|
}
|
|
112
133
|
type ConvoKitUiDensity = 'comfortable' | 'compact';
|
|
@@ -135,6 +156,20 @@ interface MessageSlotProps {
|
|
|
135
156
|
isCurrentUser: boolean;
|
|
136
157
|
sender: Conversation$1['participants'][number] | undefined;
|
|
137
158
|
readerIds: ReadonlySet<string>;
|
|
159
|
+
/** `message.revision > 0` (0.8.0): the content changed after the send; never derived from `updatedAt`. */
|
|
160
|
+
isEdited: boolean;
|
|
161
|
+
/** Whether the default row would offer the action (0.8.0): the view has the callback and the row is the viewer's
|
|
162
|
+
* own, confirmed and not read-only (or `canEditMessage` says so).
|
|
163
|
+
*/
|
|
164
|
+
canEdit: boolean;
|
|
165
|
+
canDelete: boolean;
|
|
166
|
+
/** Ask the view to start editing this message (`onEditMessage`); present while `canEdit`. */
|
|
167
|
+
edit?: () => void;
|
|
168
|
+
/** Ask the view to delete this message (`onDeleteMessage`) after `confirmDelete` when the view has one, otherwise
|
|
169
|
+
* at once (a custom row owns its own confirmation); resolves to whether the deletion was accepted. Present while
|
|
170
|
+
* `canDelete`.
|
|
171
|
+
*/
|
|
172
|
+
remove?: () => Promise<boolean>;
|
|
138
173
|
}
|
|
139
174
|
interface MediaSlotProps {
|
|
140
175
|
media: MessageMedia;
|
|
@@ -146,8 +181,13 @@ interface ComposerSlotProps {
|
|
|
146
181
|
value: string;
|
|
147
182
|
setValue: (value: string) => void;
|
|
148
183
|
isSending: boolean;
|
|
184
|
+
/** Sends the draft, or saves the edit in progress while `editing` is present (0.8.0). */
|
|
149
185
|
send: () => void;
|
|
150
186
|
addAttachment?: () => void;
|
|
187
|
+
/** The message being edited (0.8.0); present while the view is in edit mode. The field already holds its text. */
|
|
188
|
+
editing?: Message;
|
|
189
|
+
/** Leave edit mode and restore the unsent draft (0.8.0); present while `editing` is. */
|
|
190
|
+
cancelEdit?: () => void;
|
|
151
191
|
}
|
|
152
192
|
interface TypingSlotProps {
|
|
153
193
|
userIds: ReadonlySet<string>;
|
|
@@ -217,6 +257,21 @@ interface ConversationController extends ConversationState {
|
|
|
217
257
|
text?: string;
|
|
218
258
|
media?: MessageMedia[];
|
|
219
259
|
}): Promise<Message | null>;
|
|
260
|
+
/** Enter edit mode on one of the caller's own confirmed messages (0.8.0); a no-op for other rows, for a `READ`
|
|
261
|
+
* role and for adapters without `editMessage`. Sends nothing (no typing update either).
|
|
262
|
+
*/
|
|
263
|
+
startEditing(messageId: string): void;
|
|
264
|
+
/** Leave edit mode without a request. */
|
|
265
|
+
cancelEditing(): void;
|
|
266
|
+
/** Save the edit in progress with the snapshot's revision; resolves true when the server accepted it. A stale
|
|
267
|
+
* revision reloads the row, refreshes `editingMessage` and reports `REVISION_CONFLICT` through `error` (edit mode
|
|
268
|
+
* and draft kept); see the README for the other outcomes. Rejects when the adapter lacks `editMessage`.
|
|
269
|
+
*/
|
|
270
|
+
saveEdit(text: string): Promise<boolean>;
|
|
271
|
+
/** Delete one of the caller's own confirmed messages; resolves true once the row is gone (accepted, or already
|
|
272
|
+
* unknown to the server). No optimistic removal. Rejects when the adapter lacks `deleteMessage`.
|
|
273
|
+
*/
|
|
274
|
+
deleteMessage(messageId: string): Promise<boolean>;
|
|
220
275
|
/** Acknowledge through the newest rendered message now; no request is sent while nothing is rendered. */
|
|
221
276
|
markRead(): Promise<void>;
|
|
222
277
|
/** Automatic acknowledgements pause while hidden and resume when the view becomes visible again. */
|
|
@@ -242,6 +297,27 @@ interface ConversationViewProps extends ConvoKitAppearanceProps {
|
|
|
242
297
|
onTypingChange?: (isTyping: boolean) => void | Promise<void>;
|
|
243
298
|
onAddAttachment?: () => void;
|
|
244
299
|
onAttachmentClick?: (media: MessageMedia, message: Message) => void;
|
|
300
|
+
/** The message being edited (0.8.0), or null. Entering edit mode stashes the unsent draft and prefills the field
|
|
301
|
+
* with the message text without a typing update; the composer then saves instead of sending.
|
|
302
|
+
*/
|
|
303
|
+
editingMessage?: Message | null;
|
|
304
|
+
/** Start editing a message (0.8.0): set `editingMessage` in response. Without it rows offer no edit action. */
|
|
305
|
+
onEditMessage?: (message: Message) => void;
|
|
306
|
+
/** Save the edit in progress (0.8.0); the composer's submit calls it instead of `onSendMessage` while
|
|
307
|
+
* `editingMessage` is set. `false` keeps edit mode and the draft (like `onSendMessage`); any other result
|
|
308
|
+
* restores the stashed unsent draft. Clear `editingMessage` when the edit is done.
|
|
309
|
+
*/
|
|
310
|
+
onSaveEdit?: (message: Message, text: string) => boolean | void | Promise<boolean | void>;
|
|
311
|
+
/** Leave edit mode (0.8.0): clear `editingMessage` in response; the view restores the unsent draft. */
|
|
312
|
+
onCancelEdit?: () => void;
|
|
313
|
+
/** Delete a message after confirmation (0.8.0); `false` means it was not accepted. Without it rows offer no
|
|
314
|
+
* delete action.
|
|
315
|
+
*/
|
|
316
|
+
onDeleteMessage?: (message: Message) => boolean | void | Promise<boolean | void>;
|
|
317
|
+
/** Replaces the default row eligibility (own confirmed rows while the viewer's role is not `READ`). */
|
|
318
|
+
canEditMessage?: (message: Message) => boolean;
|
|
319
|
+
/** Replaces the inline "Delete this message?" prompt (and confirms `remove()` from custom rows). */
|
|
320
|
+
confirmDelete?: (message: Message) => boolean | Promise<boolean>;
|
|
245
321
|
isInitialLoading?: boolean;
|
|
246
322
|
isLoadingOlder?: boolean;
|
|
247
323
|
isSending?: boolean;
|
|
@@ -321,6 +397,34 @@ declare const ConversationView: vue.DefineComponent<vue.ExtractPropTypes<{
|
|
|
321
397
|
readonly type: PropType<(media: MessageMedia, message: Message) => void>;
|
|
322
398
|
readonly default: undefined;
|
|
323
399
|
};
|
|
400
|
+
readonly editingMessage: {
|
|
401
|
+
readonly type: PropType<Message | null>;
|
|
402
|
+
readonly default: null;
|
|
403
|
+
};
|
|
404
|
+
readonly onEditMessage: {
|
|
405
|
+
readonly type: PropType<(message: Message) => void>;
|
|
406
|
+
readonly default: undefined;
|
|
407
|
+
};
|
|
408
|
+
readonly onSaveEdit: {
|
|
409
|
+
readonly type: PropType<(message: Message, text: string) => boolean | void | Promise<boolean | void>>;
|
|
410
|
+
readonly default: undefined;
|
|
411
|
+
};
|
|
412
|
+
readonly onCancelEdit: {
|
|
413
|
+
readonly type: PropType<() => void>;
|
|
414
|
+
readonly default: undefined;
|
|
415
|
+
};
|
|
416
|
+
readonly onDeleteMessage: {
|
|
417
|
+
readonly type: PropType<(message: Message) => boolean | void | Promise<boolean | void>>;
|
|
418
|
+
readonly default: undefined;
|
|
419
|
+
};
|
|
420
|
+
readonly canEditMessage: {
|
|
421
|
+
readonly type: PropType<(message: Message) => boolean>;
|
|
422
|
+
readonly default: undefined;
|
|
423
|
+
};
|
|
424
|
+
readonly confirmDelete: {
|
|
425
|
+
readonly type: PropType<(message: Message) => boolean | Promise<boolean>>;
|
|
426
|
+
readonly default: undefined;
|
|
427
|
+
};
|
|
324
428
|
readonly isInitialLoading: {
|
|
325
429
|
readonly type: BooleanConstructor;
|
|
326
430
|
readonly default: false;
|
|
@@ -411,7 +515,7 @@ declare const ConversationView: vue.DefineComponent<vue.ExtractPropTypes<{
|
|
|
411
515
|
};
|
|
412
516
|
}>, () => vue.VNode<vue.RendererNode, vue.RendererElement, {
|
|
413
517
|
[key: string]: any;
|
|
414
|
-
}>, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, ("load-older" | "attachment-click" | "send-message" | "typing-change" | "back" | "refresh" | "add-attachment" | "update:modelValue")[], "load-older" | "attachment-click" | "send-message" | "typing-change" | "back" | "refresh" | "add-attachment" | "update:modelValue", vue.PublicProps, Readonly<vue.ExtractPropTypes<{
|
|
518
|
+
}>, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, ("load-older" | "attachment-click" | "edit-message" | "delete-message" | "send-message" | "typing-change" | "back" | "refresh" | "add-attachment" | "update:modelValue" | "save-edit" | "cancel-edit")[], "load-older" | "attachment-click" | "edit-message" | "delete-message" | "send-message" | "typing-change" | "back" | "refresh" | "add-attachment" | "update:modelValue" | "save-edit" | "cancel-edit", vue.PublicProps, Readonly<vue.ExtractPropTypes<{
|
|
415
519
|
readonly conversation: {
|
|
416
520
|
readonly type: PropType<Conversation$1>;
|
|
417
521
|
readonly required: true;
|
|
@@ -468,6 +572,34 @@ declare const ConversationView: vue.DefineComponent<vue.ExtractPropTypes<{
|
|
|
468
572
|
readonly type: PropType<(media: MessageMedia, message: Message) => void>;
|
|
469
573
|
readonly default: undefined;
|
|
470
574
|
};
|
|
575
|
+
readonly editingMessage: {
|
|
576
|
+
readonly type: PropType<Message | null>;
|
|
577
|
+
readonly default: null;
|
|
578
|
+
};
|
|
579
|
+
readonly onEditMessage: {
|
|
580
|
+
readonly type: PropType<(message: Message) => void>;
|
|
581
|
+
readonly default: undefined;
|
|
582
|
+
};
|
|
583
|
+
readonly onSaveEdit: {
|
|
584
|
+
readonly type: PropType<(message: Message, text: string) => boolean | void | Promise<boolean | void>>;
|
|
585
|
+
readonly default: undefined;
|
|
586
|
+
};
|
|
587
|
+
readonly onCancelEdit: {
|
|
588
|
+
readonly type: PropType<() => void>;
|
|
589
|
+
readonly default: undefined;
|
|
590
|
+
};
|
|
591
|
+
readonly onDeleteMessage: {
|
|
592
|
+
readonly type: PropType<(message: Message) => boolean | void | Promise<boolean | void>>;
|
|
593
|
+
readonly default: undefined;
|
|
594
|
+
};
|
|
595
|
+
readonly canEditMessage: {
|
|
596
|
+
readonly type: PropType<(message: Message) => boolean>;
|
|
597
|
+
readonly default: undefined;
|
|
598
|
+
};
|
|
599
|
+
readonly confirmDelete: {
|
|
600
|
+
readonly type: PropType<(message: Message) => boolean | Promise<boolean>>;
|
|
601
|
+
readonly default: undefined;
|
|
602
|
+
};
|
|
471
603
|
readonly isInitialLoading: {
|
|
472
604
|
readonly type: BooleanConstructor;
|
|
473
605
|
readonly default: false;
|
|
@@ -559,12 +691,16 @@ declare const ConversationView: vue.DefineComponent<vue.ExtractPropTypes<{
|
|
|
559
691
|
}>> & Readonly<{
|
|
560
692
|
"onLoad-older"?: (...args: any[]) => any;
|
|
561
693
|
"onAttachment-click"?: (...args: any[]) => any;
|
|
694
|
+
"onEdit-message"?: (...args: any[]) => any;
|
|
695
|
+
"onDelete-message"?: (...args: any[]) => any;
|
|
562
696
|
onBack?: (...args: any[]) => any;
|
|
563
697
|
onRefresh?: (...args: any[]) => any;
|
|
564
698
|
"onSend-message"?: (...args: any[]) => any;
|
|
565
699
|
"onTyping-change"?: (...args: any[]) => any;
|
|
566
700
|
"onAdd-attachment"?: (...args: any[]) => any;
|
|
567
701
|
"onUpdate:modelValue"?: (...args: any[]) => any;
|
|
702
|
+
"onSave-edit"?: (...args: any[]) => any;
|
|
703
|
+
"onCancel-edit"?: (...args: any[]) => any;
|
|
568
704
|
}>, {
|
|
569
705
|
readonly typingUserIds: ReadonlySet<string>;
|
|
570
706
|
readonly readAtByUserId: ReadonlyMap<string, Date>;
|
|
@@ -573,9 +709,14 @@ declare const ConversationView: vue.DefineComponent<vue.ExtractPropTypes<{
|
|
|
573
709
|
readonly isLoadingOlder: boolean;
|
|
574
710
|
readonly isSending: boolean;
|
|
575
711
|
readonly hasOlderMessages: boolean;
|
|
712
|
+
readonly editingMessage: Message | null;
|
|
576
713
|
readonly readersResolver: (message: Message) => ReadonlySet<string>;
|
|
577
714
|
readonly onLoadOlder: () => void | Promise<void>;
|
|
578
715
|
readonly onAttachmentClick: (media: MessageMedia, message: Message) => void;
|
|
716
|
+
readonly onEditMessage: (message: Message) => void;
|
|
717
|
+
readonly onDeleteMessage: (message: Message) => boolean | void | Promise<boolean | void>;
|
|
718
|
+
readonly canEditMessage: (message: Message) => boolean;
|
|
719
|
+
readonly confirmDelete: (message: Message) => boolean | Promise<boolean>;
|
|
579
720
|
readonly paginationThreshold: number;
|
|
580
721
|
readonly stickToBottom: boolean;
|
|
581
722
|
readonly formatTime: (date: Date) => string;
|
|
@@ -588,6 +729,8 @@ declare const ConversationView: vue.DefineComponent<vue.ExtractPropTypes<{
|
|
|
588
729
|
readonly onRefresh: () => void | Promise<void>;
|
|
589
730
|
readonly onTypingChange: (isTyping: boolean) => void | Promise<void>;
|
|
590
731
|
readonly onAddAttachment: () => void;
|
|
732
|
+
readonly onSaveEdit: (message: Message, text: string) => boolean | void | Promise<boolean | void>;
|
|
733
|
+
readonly onCancelEdit: () => void;
|
|
591
734
|
readonly displayNameForUser: (userId: string) => string | null | undefined;
|
|
592
735
|
readonly reverseMessages: boolean;
|
|
593
736
|
readonly composerPlaceholder: string;
|
|
@@ -597,7 +740,7 @@ declare const ConversationView: vue.DefineComponent<vue.ExtractPropTypes<{
|
|
|
597
740
|
readonly defaultDraft: string;
|
|
598
741
|
readonly onDraftChange: (value: string) => void;
|
|
599
742
|
}, {}, {}, {}, string, vue.ComponentProvideOptions, true, {}, any>;
|
|
600
|
-
interface ConversationProps extends Omit<ConversationViewProps, 'conversation' | 'messages' | 'currentUserId' | 'onSendMessage' | 'typingUserIds' | 'readAtByUserId' | 'readPositionByUserId' | 'onRefresh' | 'onLoadOlder' | 'onTypingChange' | 'isInitialLoading' | 'isLoadingOlder' | 'isSending' | 'hasOlderMessages' | 'error'>, Omit<UseConversationOptions, 'client' | 'conversationId'> {
|
|
743
|
+
interface ConversationProps extends Omit<ConversationViewProps, 'conversation' | 'messages' | 'currentUserId' | 'onSendMessage' | 'typingUserIds' | 'readAtByUserId' | 'readPositionByUserId' | 'onRefresh' | 'onLoadOlder' | 'onTypingChange' | 'isInitialLoading' | 'isLoadingOlder' | 'isSending' | 'hasOlderMessages' | 'error' | 'editingMessage' | 'onEditMessage' | 'onSaveEdit' | 'onCancelEdit' | 'onDeleteMessage'>, Omit<UseConversationOptions, 'client' | 'conversationId'> {
|
|
601
744
|
client: ConvoKitUiClient;
|
|
602
745
|
conversationId: string;
|
|
603
746
|
onControllerChange?: (controller: ConversationController) => void;
|
|
@@ -620,6 +763,26 @@ declare const Conversation: vue.DefineComponent<vue.ExtractPropTypes<{
|
|
|
620
763
|
type: PropType<(text: string) => boolean | void | Promise<boolean | void>>;
|
|
621
764
|
default: undefined;
|
|
622
765
|
};
|
|
766
|
+
editingMessage: {
|
|
767
|
+
type: PropType<Message | null>;
|
|
768
|
+
default: undefined;
|
|
769
|
+
};
|
|
770
|
+
onEditMessage: {
|
|
771
|
+
type: PropType<(message: Message) => void>;
|
|
772
|
+
default: undefined;
|
|
773
|
+
};
|
|
774
|
+
onSaveEdit: {
|
|
775
|
+
type: PropType<(message: Message, text: string) => boolean | void | Promise<boolean | void>>;
|
|
776
|
+
default: undefined;
|
|
777
|
+
};
|
|
778
|
+
onCancelEdit: {
|
|
779
|
+
type: PropType<() => void>;
|
|
780
|
+
default: undefined;
|
|
781
|
+
};
|
|
782
|
+
onDeleteMessage: {
|
|
783
|
+
type: PropType<(message: Message) => boolean | void | Promise<boolean | void>>;
|
|
784
|
+
default: undefined;
|
|
785
|
+
};
|
|
623
786
|
client: {
|
|
624
787
|
type: PropType<ConvoKitUiClient>;
|
|
625
788
|
required: true;
|
|
@@ -692,6 +855,14 @@ declare const Conversation: vue.DefineComponent<vue.ExtractPropTypes<{
|
|
|
692
855
|
readonly type: PropType<(media: MessageMedia, message: Message) => void>;
|
|
693
856
|
readonly default: undefined;
|
|
694
857
|
};
|
|
858
|
+
canEditMessage: {
|
|
859
|
+
readonly type: PropType<(message: Message) => boolean>;
|
|
860
|
+
readonly default: undefined;
|
|
861
|
+
};
|
|
862
|
+
confirmDelete: {
|
|
863
|
+
readonly type: PropType<(message: Message) => boolean | Promise<boolean>>;
|
|
864
|
+
readonly default: undefined;
|
|
865
|
+
};
|
|
695
866
|
isInitialLoading: {
|
|
696
867
|
readonly type: BooleanConstructor;
|
|
697
868
|
readonly default: false;
|
|
@@ -782,7 +953,7 @@ declare const Conversation: vue.DefineComponent<vue.ExtractPropTypes<{
|
|
|
782
953
|
};
|
|
783
954
|
}>, () => vue.VNode<vue.RendererNode, vue.RendererElement, {
|
|
784
955
|
[key: string]: any;
|
|
785
|
-
}>, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, ("load-older" | "attachment-click" | "send-message" | "typing-change" | "back" | "refresh" | "add-attachment" | "update:modelValue" | "controller-change")[], "load-older" | "attachment-click" | "send-message" | "typing-change" | "back" | "refresh" | "add-attachment" | "update:modelValue" | "controller-change", vue.PublicProps, Readonly<vue.ExtractPropTypes<{
|
|
956
|
+
}>, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, ("load-older" | "attachment-click" | "edit-message" | "delete-message" | "send-message" | "typing-change" | "back" | "refresh" | "add-attachment" | "update:modelValue" | "save-edit" | "cancel-edit" | "controller-change")[], "load-older" | "attachment-click" | "edit-message" | "delete-message" | "send-message" | "typing-change" | "back" | "refresh" | "add-attachment" | "update:modelValue" | "save-edit" | "cancel-edit" | "controller-change", vue.PublicProps, Readonly<vue.ExtractPropTypes<{
|
|
786
957
|
conversation: {
|
|
787
958
|
type: PropType<Conversation$1>;
|
|
788
959
|
default: undefined;
|
|
@@ -799,6 +970,26 @@ declare const Conversation: vue.DefineComponent<vue.ExtractPropTypes<{
|
|
|
799
970
|
type: PropType<(text: string) => boolean | void | Promise<boolean | void>>;
|
|
800
971
|
default: undefined;
|
|
801
972
|
};
|
|
973
|
+
editingMessage: {
|
|
974
|
+
type: PropType<Message | null>;
|
|
975
|
+
default: undefined;
|
|
976
|
+
};
|
|
977
|
+
onEditMessage: {
|
|
978
|
+
type: PropType<(message: Message) => void>;
|
|
979
|
+
default: undefined;
|
|
980
|
+
};
|
|
981
|
+
onSaveEdit: {
|
|
982
|
+
type: PropType<(message: Message, text: string) => boolean | void | Promise<boolean | void>>;
|
|
983
|
+
default: undefined;
|
|
984
|
+
};
|
|
985
|
+
onCancelEdit: {
|
|
986
|
+
type: PropType<() => void>;
|
|
987
|
+
default: undefined;
|
|
988
|
+
};
|
|
989
|
+
onDeleteMessage: {
|
|
990
|
+
type: PropType<(message: Message) => boolean | void | Promise<boolean | void>>;
|
|
991
|
+
default: undefined;
|
|
992
|
+
};
|
|
802
993
|
client: {
|
|
803
994
|
type: PropType<ConvoKitUiClient>;
|
|
804
995
|
required: true;
|
|
@@ -871,6 +1062,14 @@ declare const Conversation: vue.DefineComponent<vue.ExtractPropTypes<{
|
|
|
871
1062
|
readonly type: PropType<(media: MessageMedia, message: Message) => void>;
|
|
872
1063
|
readonly default: undefined;
|
|
873
1064
|
};
|
|
1065
|
+
canEditMessage: {
|
|
1066
|
+
readonly type: PropType<(message: Message) => boolean>;
|
|
1067
|
+
readonly default: undefined;
|
|
1068
|
+
};
|
|
1069
|
+
confirmDelete: {
|
|
1070
|
+
readonly type: PropType<(message: Message) => boolean | Promise<boolean>>;
|
|
1071
|
+
readonly default: undefined;
|
|
1072
|
+
};
|
|
874
1073
|
isInitialLoading: {
|
|
875
1074
|
readonly type: BooleanConstructor;
|
|
876
1075
|
readonly default: false;
|
|
@@ -962,12 +1161,16 @@ declare const Conversation: vue.DefineComponent<vue.ExtractPropTypes<{
|
|
|
962
1161
|
}>> & Readonly<{
|
|
963
1162
|
"onLoad-older"?: (...args: any[]) => any;
|
|
964
1163
|
"onAttachment-click"?: (...args: any[]) => any;
|
|
1164
|
+
"onEdit-message"?: (...args: any[]) => any;
|
|
1165
|
+
"onDelete-message"?: (...args: any[]) => any;
|
|
965
1166
|
onBack?: (...args: any[]) => any;
|
|
966
1167
|
onRefresh?: (...args: any[]) => any;
|
|
967
1168
|
"onSend-message"?: (...args: any[]) => any;
|
|
968
1169
|
"onTyping-change"?: (...args: any[]) => any;
|
|
969
1170
|
"onAdd-attachment"?: (...args: any[]) => any;
|
|
970
1171
|
"onUpdate:modelValue"?: (...args: any[]) => any;
|
|
1172
|
+
"onSave-edit"?: (...args: any[]) => any;
|
|
1173
|
+
"onCancel-edit"?: (...args: any[]) => any;
|
|
971
1174
|
"onController-change"?: (...args: any[]) => any;
|
|
972
1175
|
}>, {
|
|
973
1176
|
messages: readonly Message[];
|
|
@@ -980,9 +1183,14 @@ declare const Conversation: vue.DefineComponent<vue.ExtractPropTypes<{
|
|
|
980
1183
|
isSending: boolean;
|
|
981
1184
|
hasOlderMessages: boolean;
|
|
982
1185
|
currentUserId: string;
|
|
1186
|
+
editingMessage: Message | null;
|
|
983
1187
|
readersResolver: (message: Message) => ReadonlySet<string>;
|
|
984
1188
|
onLoadOlder: () => void | Promise<void>;
|
|
985
1189
|
onAttachmentClick: (media: MessageMedia, message: Message) => void;
|
|
1190
|
+
onEditMessage: (message: Message) => void;
|
|
1191
|
+
onDeleteMessage: (message: Message) => boolean | void | Promise<boolean | void>;
|
|
1192
|
+
canEditMessage: (message: Message) => boolean;
|
|
1193
|
+
confirmDelete: (message: Message) => boolean | Promise<boolean>;
|
|
986
1194
|
paginationThreshold: number;
|
|
987
1195
|
stickToBottom: boolean;
|
|
988
1196
|
formatTime: (date: Date) => string;
|
|
@@ -996,6 +1204,8 @@ declare const Conversation: vue.DefineComponent<vue.ExtractPropTypes<{
|
|
|
996
1204
|
onRefresh: () => void | Promise<void>;
|
|
997
1205
|
onTypingChange: (isTyping: boolean) => void | Promise<void>;
|
|
998
1206
|
onAddAttachment: () => void;
|
|
1207
|
+
onSaveEdit: (message: Message, text: string) => boolean | void | Promise<boolean | void>;
|
|
1208
|
+
onCancelEdit: () => void;
|
|
999
1209
|
displayNameForUser: (userId: string) => string | null | undefined;
|
|
1000
1210
|
reverseMessages: boolean;
|
|
1001
1211
|
composerPlaceholder: string;
|
|
@@ -1508,6 +1718,18 @@ interface MessageListViewProps extends ConvoKitAppearanceProps {
|
|
|
1508
1718
|
isLoadingOlder?: boolean;
|
|
1509
1719
|
error?: unknown;
|
|
1510
1720
|
onAttachmentClick?: (media: MessageMedia, message: Message) => void;
|
|
1721
|
+
/** Start editing a message (0.8.0). Without it no row offers an edit action and the markup is unchanged. */
|
|
1722
|
+
onEditMessage?: (message: Message) => void;
|
|
1723
|
+
/** Delete a message after confirmation (0.8.0); `false` means the deletion was not accepted. Without it no row
|
|
1724
|
+
* offers a delete action.
|
|
1725
|
+
*/
|
|
1726
|
+
onDeleteMessage?: (message: Message) => boolean | void | Promise<boolean | void>;
|
|
1727
|
+
/** Replaces the default eligibility (the viewer's own confirmed rows while the viewer's role is not `READ`) for
|
|
1728
|
+
* both actions; pending rows are never eligible.
|
|
1729
|
+
*/
|
|
1730
|
+
canEditMessage?: (message: Message) => boolean;
|
|
1731
|
+
/** Replaces the row's inline "Delete this message?" prompt (and confirms `remove()` from custom rows). */
|
|
1732
|
+
confirmDelete?: (message: Message) => boolean | Promise<boolean>;
|
|
1511
1733
|
scrollElement?: Ref<HTMLElement | null>;
|
|
1512
1734
|
paginationThreshold?: number;
|
|
1513
1735
|
reverse?: boolean;
|
|
@@ -1563,6 +1785,22 @@ declare const MessageListView: vue.DefineComponent<vue.ExtractPropTypes<{
|
|
|
1563
1785
|
type: PropType<(media: MessageMedia, message: Message) => void>;
|
|
1564
1786
|
default: undefined;
|
|
1565
1787
|
};
|
|
1788
|
+
onEditMessage: {
|
|
1789
|
+
type: PropType<(message: Message) => void>;
|
|
1790
|
+
default: undefined;
|
|
1791
|
+
};
|
|
1792
|
+
onDeleteMessage: {
|
|
1793
|
+
type: PropType<(message: Message) => boolean | void | Promise<boolean | void>>;
|
|
1794
|
+
default: undefined;
|
|
1795
|
+
};
|
|
1796
|
+
canEditMessage: {
|
|
1797
|
+
type: PropType<(message: Message) => boolean>;
|
|
1798
|
+
default: undefined;
|
|
1799
|
+
};
|
|
1800
|
+
confirmDelete: {
|
|
1801
|
+
type: PropType<(message: Message) => boolean | Promise<boolean>>;
|
|
1802
|
+
default: undefined;
|
|
1803
|
+
};
|
|
1566
1804
|
scrollElement: {
|
|
1567
1805
|
type: PropType<Ref<HTMLElement | null>>;
|
|
1568
1806
|
default: undefined;
|
|
@@ -1605,7 +1843,7 @@ declare const MessageListView: vue.DefineComponent<vue.ExtractPropTypes<{
|
|
|
1605
1843
|
};
|
|
1606
1844
|
}>, () => vue.VNode<vue.RendererNode, vue.RendererElement, {
|
|
1607
1845
|
[key: string]: any;
|
|
1608
|
-
}>, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, ("load-older" | "attachment-click")[], "load-older" | "attachment-click", vue.PublicProps, Readonly<vue.ExtractPropTypes<{
|
|
1846
|
+
}>, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, ("load-older" | "attachment-click" | "edit-message" | "delete-message")[], "load-older" | "attachment-click" | "edit-message" | "delete-message", vue.PublicProps, Readonly<vue.ExtractPropTypes<{
|
|
1609
1847
|
conversation: {
|
|
1610
1848
|
type: PropType<Conversation$1>;
|
|
1611
1849
|
required: true;
|
|
@@ -1650,6 +1888,22 @@ declare const MessageListView: vue.DefineComponent<vue.ExtractPropTypes<{
|
|
|
1650
1888
|
type: PropType<(media: MessageMedia, message: Message) => void>;
|
|
1651
1889
|
default: undefined;
|
|
1652
1890
|
};
|
|
1891
|
+
onEditMessage: {
|
|
1892
|
+
type: PropType<(message: Message) => void>;
|
|
1893
|
+
default: undefined;
|
|
1894
|
+
};
|
|
1895
|
+
onDeleteMessage: {
|
|
1896
|
+
type: PropType<(message: Message) => boolean | void | Promise<boolean | void>>;
|
|
1897
|
+
default: undefined;
|
|
1898
|
+
};
|
|
1899
|
+
canEditMessage: {
|
|
1900
|
+
type: PropType<(message: Message) => boolean>;
|
|
1901
|
+
default: undefined;
|
|
1902
|
+
};
|
|
1903
|
+
confirmDelete: {
|
|
1904
|
+
type: PropType<(message: Message) => boolean | Promise<boolean>>;
|
|
1905
|
+
default: undefined;
|
|
1906
|
+
};
|
|
1653
1907
|
scrollElement: {
|
|
1654
1908
|
type: PropType<Ref<HTMLElement | null>>;
|
|
1655
1909
|
default: undefined;
|
|
@@ -1693,6 +1947,8 @@ declare const MessageListView: vue.DefineComponent<vue.ExtractPropTypes<{
|
|
|
1693
1947
|
}>> & Readonly<{
|
|
1694
1948
|
"onLoad-older"?: (...args: any[]) => any;
|
|
1695
1949
|
"onAttachment-click"?: (...args: any[]) => any;
|
|
1950
|
+
"onEdit-message"?: (...args: any[]) => any;
|
|
1951
|
+
"onDelete-message"?: (...args: any[]) => any;
|
|
1696
1952
|
}>, {
|
|
1697
1953
|
reverse: boolean;
|
|
1698
1954
|
readAtByUserId: ReadonlyMap<string, Date>;
|
|
@@ -1702,6 +1958,10 @@ declare const MessageListView: vue.DefineComponent<vue.ExtractPropTypes<{
|
|
|
1702
1958
|
readersResolver: (message: Message) => ReadonlySet<string>;
|
|
1703
1959
|
onLoadOlder: () => void | Promise<void>;
|
|
1704
1960
|
onAttachmentClick: (media: MessageMedia, message: Message) => void;
|
|
1961
|
+
onEditMessage: (message: Message) => void;
|
|
1962
|
+
onDeleteMessage: (message: Message) => boolean | void | Promise<boolean | void>;
|
|
1963
|
+
canEditMessage: (message: Message) => boolean;
|
|
1964
|
+
confirmDelete: (message: Message) => boolean | Promise<boolean>;
|
|
1705
1965
|
scrollElement: Ref<HTMLElement | null, HTMLElement | null>;
|
|
1706
1966
|
paginationThreshold: number;
|
|
1707
1967
|
stickToBottom: boolean;
|