@droppii-org/chat-mobile 0.2.23 → 0.2.24

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 (93) hide show
  1. package/lib/module/config/uploadLimits.js +13 -0
  2. package/lib/module/config/uploadLimits.js.map +1 -0
  3. package/lib/module/hooks/useChatCompose.js +142 -0
  4. package/lib/module/hooks/useChatCompose.js.map +1 -0
  5. package/lib/module/hooks/useImageAttachment.js +71 -151
  6. package/lib/module/hooks/useImageAttachment.js.map +1 -1
  7. package/lib/module/hooks/useSendAttachment.js +2 -2
  8. package/lib/module/hooks/useSendAttachment.js.map +1 -1
  9. package/lib/module/hooks/useVideoAttachment.js +4 -4
  10. package/lib/module/hooks/useVideoAttachment.js.map +1 -1
  11. package/lib/module/index.js +0 -1
  12. package/lib/module/index.js.map +1 -1
  13. package/lib/module/screens/chat-detail/ChatComposer.js +50 -185
  14. package/lib/module/screens/chat-detail/ChatComposer.js.map +1 -1
  15. package/lib/module/screens/chat-detail/ChatDetail.js +16 -137
  16. package/lib/module/screens/chat-detail/ChatDetail.js.map +1 -1
  17. package/lib/module/screens/chat-detail/index.js +0 -1
  18. package/lib/module/screens/chat-detail/index.js.map +1 -1
  19. package/lib/module/services/attachmentHandlers/fileAttachmentHandler.js +2 -2
  20. package/lib/module/services/attachmentHandlers/fileAttachmentHandler.js.map +1 -1
  21. package/lib/module/services/attachmentHandlers/imageAttachmentHandler.js +3 -3
  22. package/lib/module/services/attachmentHandlers/imageAttachmentHandler.js.map +1 -1
  23. package/lib/module/services/attachmentHandlers/videoAttachmentHandler.js +2 -1
  24. package/lib/module/services/attachmentHandlers/videoAttachmentHandler.js.map +1 -1
  25. package/lib/module/services/attachmentOrchestrator.js +6 -5
  26. package/lib/module/services/attachmentOrchestrator.js.map +1 -1
  27. package/lib/module/utils/imageUtils.js +3 -3
  28. package/lib/module/utils/imageUtils.js.map +1 -1
  29. package/lib/module/utils/pLimit.js +19 -0
  30. package/lib/module/utils/pLimit.js.map +1 -0
  31. package/lib/module/utils/videoThumbnail.js +8 -3
  32. package/lib/module/utils/videoThumbnail.js.map +1 -1
  33. package/lib/module/utils/videoThumbnailUpload.js +76 -0
  34. package/lib/module/utils/videoThumbnailUpload.js.map +1 -0
  35. package/lib/typescript/src/config/uploadLimits.d.ts +7 -0
  36. package/lib/typescript/src/config/uploadLimits.d.ts.map +1 -0
  37. package/lib/typescript/src/hooks/useChatCompose.d.ts +27 -0
  38. package/lib/typescript/src/hooks/useChatCompose.d.ts.map +1 -0
  39. package/lib/typescript/src/hooks/useImageAttachment.d.ts +2 -2
  40. package/lib/typescript/src/hooks/useImageAttachment.d.ts.map +1 -1
  41. package/lib/typescript/src/hooks/useSendAttachment.d.ts +1 -1
  42. package/lib/typescript/src/hooks/useSendAttachment.d.ts.map +1 -1
  43. package/lib/typescript/src/hooks/useVideoAttachment.d.ts.map +1 -1
  44. package/lib/typescript/src/index.d.ts +0 -2
  45. package/lib/typescript/src/index.d.ts.map +1 -1
  46. package/lib/typescript/src/screens/chat-detail/ChatComposer.d.ts +5 -2
  47. package/lib/typescript/src/screens/chat-detail/ChatComposer.d.ts.map +1 -1
  48. package/lib/typescript/src/screens/chat-detail/ChatDetail.d.ts +1 -1
  49. package/lib/typescript/src/screens/chat-detail/ChatDetail.d.ts.map +1 -1
  50. package/lib/typescript/src/screens/chat-detail/index.d.ts +0 -2
  51. package/lib/typescript/src/screens/chat-detail/index.d.ts.map +1 -1
  52. package/lib/typescript/src/screens/chat-detail/types.d.ts +1 -35
  53. package/lib/typescript/src/screens/chat-detail/types.d.ts.map +1 -1
  54. package/lib/typescript/src/services/attachmentHandlers/fileAttachmentHandler.d.ts.map +1 -1
  55. package/lib/typescript/src/services/attachmentHandlers/imageAttachmentHandler.d.ts.map +1 -1
  56. package/lib/typescript/src/services/attachmentHandlers/videoAttachmentHandler.d.ts.map +1 -1
  57. package/lib/typescript/src/services/attachmentOrchestrator.d.ts +1 -1
  58. package/lib/typescript/src/services/attachmentOrchestrator.d.ts.map +1 -1
  59. package/lib/typescript/src/utils/imageUtils.d.ts.map +1 -1
  60. package/lib/typescript/src/utils/pLimit.d.ts +6 -0
  61. package/lib/typescript/src/utils/pLimit.d.ts.map +1 -0
  62. package/lib/typescript/src/utils/videoThumbnail.d.ts.map +1 -1
  63. package/lib/typescript/src/utils/videoThumbnailUpload.d.ts +11 -0
  64. package/lib/typescript/src/utils/videoThumbnailUpload.d.ts.map +1 -0
  65. package/package.json +1 -1
  66. package/src/config/uploadLimits.ts +11 -0
  67. package/src/hooks/useChatCompose.ts +186 -0
  68. package/src/hooks/useImageAttachment.ts +110 -197
  69. package/src/hooks/useSendAttachment.ts +3 -6
  70. package/src/hooks/useVideoAttachment.ts +4 -4
  71. package/src/index.tsx +1 -5
  72. package/src/screens/chat-detail/ChatComposer.tsx +88 -240
  73. package/src/screens/chat-detail/ChatDetail.tsx +24 -195
  74. package/src/screens/chat-detail/index.ts +1 -5
  75. package/src/screens/chat-detail/types.ts +1 -38
  76. package/src/services/attachmentHandlers/fileAttachmentHandler.ts +3 -2
  77. package/src/services/attachmentHandlers/imageAttachmentHandler.ts +6 -3
  78. package/src/services/attachmentHandlers/videoAttachmentHandler.ts +2 -1
  79. package/src/services/attachmentOrchestrator.ts +6 -8
  80. package/src/utils/imageUtils.ts +3 -4
  81. package/src/utils/pLimit.ts +20 -0
  82. package/src/utils/videoThumbnail.ts +10 -3
  83. package/src/utils/videoThumbnailUpload.ts +103 -0
  84. package/lib/module/screens/chat-detail/hooks/useAttachmentSendHandler.js +0 -288
  85. package/lib/module/screens/chat-detail/hooks/useAttachmentSendHandler.js.map +0 -1
  86. package/lib/module/utils/giftedChatMessage.js +0 -90
  87. package/lib/module/utils/giftedChatMessage.js.map +0 -1
  88. package/lib/typescript/src/screens/chat-detail/hooks/useAttachmentSendHandler.d.ts +0 -26
  89. package/lib/typescript/src/screens/chat-detail/hooks/useAttachmentSendHandler.d.ts.map +0 -1
  90. package/lib/typescript/src/utils/giftedChatMessage.d.ts +0 -10
  91. package/lib/typescript/src/utils/giftedChatMessage.d.ts.map +0 -1
  92. package/src/screens/chat-detail/hooks/useAttachmentSendHandler.ts +0 -386
  93. package/src/utils/giftedChatMessage.ts +0 -137
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+
3
+ import RNFS from 'react-native-fs';
4
+ import VideoThumbnailUtil from "./videoThumbnail.js";
5
+ import { ImageUploadAPI } from "../services/imageUpload.js";
6
+ import UIUtils from "./ui.js";
7
+ export async function generateAndUploadVideoThumbnails(videos) {
8
+ const thumbnails = {};
9
+ const failed = [];
10
+ for (let idx = 0; idx < videos.length; idx++) {
11
+ const vidItem = videos[idx];
12
+ // Key by uploadedUrl so callers can look up by the same value.
13
+ const videoId = vidItem.uploadedUrl || `video-${idx}`;
14
+ let cachedVideoPath = null;
15
+ try {
16
+ let videoDuration = vidItem.image.duration ?? 0;
17
+ if (videoDuration <= 0 || videoDuration > 3600000) {
18
+ videoDuration = 5000;
19
+ }
20
+
21
+ // Clamp upper bound to avoid negative timeMs on clips shorter than 1s.
22
+ const timeMs = Math.min(Math.max(1000, Math.floor(videoDuration * 0.35)), Math.max(0, videoDuration - 1000));
23
+
24
+ // Copy the picker-returned path to CachesDirectory before generating a
25
+ // thumbnail. On iOS the picker can return Photos-library paths that
26
+ // react-native-create-thumbnail cannot open directly; a copy to a
27
+ // stable app-owned location is required.
28
+ const filename = vidItem.image.filename || 'video.mp4';
29
+ const ext = filename.split('.').pop() || 'mp4';
30
+ const cachedFileName = `thumb-src-${idx}-${Date.now()}.${ext}`;
31
+ cachedVideoPath = `${RNFS.CachesDirectoryPath}/${cachedFileName}`;
32
+ await RNFS.copyFile(vidItem.image.path, cachedVideoPath);
33
+ const thumbnail = await VideoThumbnailUtil.generateThumbnail(cachedVideoPath, {
34
+ time: timeMs,
35
+ quality: 80,
36
+ cacheId: `thumb-${idx}-${Date.now()}`
37
+ });
38
+ if (!thumbnail) throw new Error('Failed to generate thumbnail');
39
+ const baseName = filename.split('.')[0] || `video-${idx}`;
40
+ const uploaded = await ImageUploadAPI.uploadImageFile({
41
+ path: thumbnail.path,
42
+ filename: `thumb-${baseName}.jpg`,
43
+ size: 0,
44
+ width: thumbnail.width || 320,
45
+ height: thumbnail.height || 180,
46
+ mime: 'image/jpeg'
47
+ }, () => {});
48
+ if (!uploaded?.url) throw new Error('No thumbnail URL returned');
49
+ thumbnails[videoId] = {
50
+ url: uploaded.url,
51
+ size: uploaded.size || 0
52
+ };
53
+
54
+ // Clean up the local thumbnail file after a successful upload.
55
+ VideoThumbnailUtil.cleanupThumbnail(thumbnail.path).catch(err => console.warn('[videoThumbnailUpload] Thumbnail cleanup failed:', err));
56
+ } catch (error) {
57
+ const msg = error instanceof Error ? error.message : String(error);
58
+ console.error('[videoThumbnailUpload] Failed for video:', idx, msg);
59
+ failed.push(vidItem.image.filename || `video-${idx}`);
60
+ // Do NOT insert a poison entry — callers treat a missing key as "no thumbnail".
61
+ } finally {
62
+ if (cachedVideoPath) {
63
+ RNFS.unlink(cachedVideoPath).catch(err => console.warn('[videoThumbnailUpload] Temp copy cleanup failed:', err));
64
+ }
65
+ }
66
+ }
67
+ if (failed.length > 0) {
68
+ UIUtils.toast.open({
69
+ title: 'Thumbnail Generation Failed',
70
+ message: `Failed for: ${failed.join(', ')}. Videos will be sent without thumbnails.`,
71
+ theme: 'warning'
72
+ });
73
+ }
74
+ return thumbnails;
75
+ }
76
+ //# sourceMappingURL=videoThumbnailUpload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["RNFS","VideoThumbnailUtil","ImageUploadAPI","UIUtils","generateAndUploadVideoThumbnails","videos","thumbnails","failed","idx","length","vidItem","videoId","uploadedUrl","cachedVideoPath","videoDuration","image","duration","timeMs","Math","min","max","floor","filename","ext","split","pop","cachedFileName","Date","now","CachesDirectoryPath","copyFile","path","thumbnail","generateThumbnail","time","quality","cacheId","Error","baseName","uploaded","uploadImageFile","size","width","height","mime","url","cleanupThumbnail","catch","err","console","warn","error","msg","message","String","push","unlink","toast","open","title","join","theme"],"sourceRoot":"../../../src","sources":["utils/videoThumbnailUpload.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,7 @@
1
+ export declare const UPLOAD_LIMITS: {
2
+ readonly image: number;
3
+ readonly video: number;
4
+ readonly file: number;
5
+ };
6
+ export declare const UPLOAD_CONCURRENCY = 2;
7
+ //# sourceMappingURL=uploadLimits.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uploadLimits.d.ts","sourceRoot":"","sources":["../../../../src/config/uploadLimits.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,aAAa;;;;CAIhB,CAAC;AAIX,eAAO,MAAM,kBAAkB,IAAI,CAAC"}
@@ -0,0 +1,27 @@
1
+ import { type ImageWithUploadStatus } from './useImageAttachment';
2
+ export declare function useChatCompose(): {
3
+ text: string;
4
+ setText: import("react").Dispatch<import("react").SetStateAction<string>>;
5
+ selectedImages: ImageWithUploadStatus[];
6
+ selectedFiles: import("./useFileAttachment").FileWithUploadStatus[];
7
+ isImagePreviewVisible: boolean;
8
+ isFilePreviewVisible: boolean;
9
+ addImages: (multipleMode?: boolean) => Promise<void>;
10
+ addFiles: () => Promise<void>;
11
+ removeImage: (index: number) => void;
12
+ removeFile: (id: string) => void;
13
+ showLinkPreview: boolean;
14
+ urlMetadata: {
15
+ url: string;
16
+ title?: string;
17
+ description?: string;
18
+ image?: string;
19
+ };
20
+ isMetadataLoading: boolean;
21
+ dismissPreview: () => void;
22
+ isUploading: boolean;
23
+ canSend: boolean;
24
+ send: () => Promise<void>;
25
+ clearAll: () => void;
26
+ };
27
+ //# sourceMappingURL=useChatCompose.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useChatCompose.d.ts","sourceRoot":"","sources":["../../../../src/hooks/useChatCompose.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,qBAAqB,EAC3B,MAAM,sBAAsB,CAAC;AAW9B,wBAAgB,cAAc;;;;;;;;;;;;;;;;;;;;;;;;EAyK7B"}
@@ -1,4 +1,4 @@
1
- import type { Image as PickedImage } from 'react-native-image-crop-picker';
1
+ import type { ImageOrVideo as PickedImage } from 'react-native-image-crop-picker';
2
2
  export interface ImageWithUploadStatus {
3
3
  image: PickedImage;
4
4
  uploadProgress: number;
@@ -11,7 +11,7 @@ export interface ImageWithUploadStatus {
11
11
  export interface UseImageAttachmentReturn {
12
12
  selectedImages: ImageWithUploadStatus[];
13
13
  isImagePreviewVisible: boolean;
14
- handleImageAttach: () => Promise<void>;
14
+ handleImageAttach: (multipleMode?: boolean) => Promise<void>;
15
15
  handleImageRemove: (index: number) => void;
16
16
  clearAllImages: () => void;
17
17
  }
@@ -1 +1 @@
1
- {"version":3,"file":"useImageAttachment.d.ts","sourceRoot":"","sources":["../../../../src/hooks/useImageAttachment.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,IAAI,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAQ3E,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,WAAW,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,wBAAwB;IACvC,cAAc,EAAE,qBAAqB,EAAE,CAAC;IACxC,qBAAqB,EAAE,OAAO,CAAC;IAC/B,iBAAiB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,iBAAiB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,cAAc,EAAE,MAAM,IAAI,CAAC;CAC5B;AAED,eAAO,MAAM,kBAAkB,QAAO,wBAiTrC,CAAC"}
1
+ {"version":3,"file":"useImageAttachment.d.ts","sourceRoot":"","sources":["../../../../src/hooks/useImageAttachment.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,YAAY,IAAI,WAAW,EAE5B,MAAM,gCAAgC,CAAC;AAUxC,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,WAAW,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,wBAAwB;IACvC,cAAc,EAAE,qBAAqB,EAAE,CAAC;IACxC,qBAAqB,EAAE,OAAO,CAAC;IAC/B,iBAAiB,EAAE,CAAC,YAAY,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7D,iBAAiB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,cAAc,EAAE,MAAM,IAAI,CAAC;CAC5B;AAED,eAAO,MAAM,kBAAkB,QAAO,wBAqNrC,CAAC"}
@@ -46,7 +46,7 @@ export type AttachmentItem = ImageItem | VideoItem | FileItem;
46
46
  export interface UseSendAttachmentReturn {
47
47
  isLoading: boolean;
48
48
  error: string | null;
49
- send(items: AttachmentItem[], options?: Partial<AttachmentSendOptions>, onMessageSent?: (message: any) => void): Promise<boolean>;
49
+ send(items: AttachmentItem[], options?: Partial<AttachmentSendOptions>): Promise<boolean>;
50
50
  clearError(): void;
51
51
  }
52
52
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"useSendAttachment.d.ts","sourceRoot":"","sources":["../../../../src/hooks/useSendAttachment.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAc,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAG7E,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE;QACL,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE;QACL,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE;QACJ,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IACF,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;AAE9D,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,IAAI,CACF,KAAK,EAAE,cAAc,EAAE,EACvB,OAAO,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,EACxC,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,IAAI,GACrC,OAAO,CAAC,OAAO,CAAC,CAAC;IACpB,UAAU,IAAI,IAAI,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,IAAI,uBAAuB,CAgO3D"}
1
+ {"version":3,"file":"useSendAttachment.d.ts","sourceRoot":"","sources":["../../../../src/hooks/useSendAttachment.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAc,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAG7E,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE;QACL,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE;QACL,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE;QACJ,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IACF,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;AAE9D,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,IAAI,CACF,KAAK,EAAE,cAAc,EAAE,EACvB,OAAO,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,GACvC,OAAO,CAAC,OAAO,CAAC,CAAC;IACpB,UAAU,IAAI,IAAI,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,IAAI,uBAAuB,CA8N3D"}
@@ -1 +1 @@
1
- {"version":3,"file":"useVideoAttachment.d.ts","sourceRoot":"","sources":["../../../../src/hooks/useVideoAttachment.ts"],"names":[],"mappings":"AASA,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,qBAAqB;IAC7B,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,WAAW,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,wBAAwB;IACvC,cAAc,EAAE,qBAAqB,EAAE,CAAC;IACxC,qBAAqB,EAAE,OAAO,CAAC;IAC/B,iBAAiB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,iBAAiB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,cAAc,EAAE,MAAM,IAAI,CAAC;CAC5B;AAED,eAAO,MAAM,kBAAkB,QAAO,wBAuSrC,CAAC"}
1
+ {"version":3,"file":"useVideoAttachment.d.ts","sourceRoot":"","sources":["../../../../src/hooks/useVideoAttachment.ts"],"names":[],"mappings":"AAUA,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,qBAAqB;IAC7B,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,WAAW,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,wBAAwB;IACvC,cAAc,EAAE,qBAAqB,EAAE,CAAC;IACxC,qBAAqB,EAAE,OAAO,CAAC;IAC/B,iBAAiB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,iBAAiB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,cAAc,EAAE,MAAM,IAAI,CAAC;CAC5B;AAED,eAAO,MAAM,kBAAkB,QAAO,wBAsSrC,CAAC"}
@@ -23,7 +23,5 @@ export { Inbox } from './screens/inbox';
23
23
  export { default as MediaViewerScreen } from './screens/MediaView';
24
24
  export { ChatDetail, ChatDetailHeader, ChatComposer, ChatQuickActions, ChatAttachmentPanel, DEFAULT_Chat_QUICK_ACTIONS, DEFAULT_ATTACHMENT_ACTIONS, } from './screens/chat-detail';
25
25
  export type { DChatActionItem, DChatActionIconProvider, DChatQuickAction, DChatAttachmentAction, ChatDetailProps, ChatDetailHeaderProps, ChatListProps, ChatComposerProps, ChatQuickActionsProps, ChatQuickActionsRenderParams, ChatAttachmentPanelProps, } from './screens/chat-detail';
26
- export type { DGiftedChatMessage } from './utils/giftedChatMessage';
27
- export { mapOpenIMMessageToGiftedChat, mapOpenIMMessagesToGiftedChat, } from './utils/giftedChatMessage';
28
26
  export type { PeerType } from '@droppii/openim-rn-client-sdk';
29
27
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,uBAAuB,EACvB,6BAA6B,EAC7B,gBAAgB,GACjB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yBAAyB,CAAC;AACxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,YAAY,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,OAAO,EAAE,4BAA4B,EAAE,MAAM,+BAA+B,CAAC;AAC7E,OAAO,EAAE,6BAA6B,EAAE,MAAM,mCAAmC,CAAC;AAClF,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,YAAY,EACZ,gBAAgB,EAChB,mBAAmB,EACnB,0BAA0B,EAC1B,0BAA0B,GAC3B,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EACV,eAAe,EACf,uBAAuB,EACvB,gBAAgB,EAChB,qBAAqB,EACrB,eAAe,EACf,qBAAqB,EACrB,aAAa,EACb,iBAAiB,EACjB,qBAAqB,EACrB,4BAA4B,EAC5B,wBAAwB,GACzB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EACL,4BAA4B,EAC5B,6BAA6B,GAC9B,MAAM,2BAA2B,CAAC;AACnC,YAAY,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,uBAAuB,EACvB,6BAA6B,EAC7B,gBAAgB,GACjB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yBAAyB,CAAC;AACxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,YAAY,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,OAAO,EAAE,4BAA4B,EAAE,MAAM,+BAA+B,CAAC;AAC7E,OAAO,EAAE,6BAA6B,EAAE,MAAM,mCAAmC,CAAC;AAClF,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,YAAY,EACZ,gBAAgB,EAChB,mBAAmB,EACnB,0BAA0B,EAC1B,0BAA0B,GAC3B,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EACV,eAAe,EACf,uBAAuB,EACvB,gBAAgB,EAChB,qBAAqB,EACrB,eAAe,EACf,qBAAqB,EACrB,aAAa,EACb,iBAAiB,EACjB,qBAAqB,EACrB,4BAA4B,EAC5B,wBAAwB,GACzB,MAAM,uBAAuB,CAAC;AAE/B,YAAY,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC"}
@@ -1,3 +1,6 @@
1
- import type { ChatComposerProps } from './types';
2
- export declare const ChatComposer: import("react").MemoExoticComponent<({ value, placeholder, onChangeText, onSend, onMessageSent, onPressEmoji: _onPressEmoji, showQuickActions, quickActions, attachmentActions, onQuickActionPress, onAttachmentAction, renderQuickAction, renderQuickActions, renderAttachmentAction, attachmentColumns, isEmptyMessage, }: ChatComposerProps) => import("react").JSX.Element>;
1
+ interface ChatComposerInternalProps {
2
+ isEmptyMessage?: boolean;
3
+ }
4
+ export declare const ChatComposer: import("react").MemoExoticComponent<({ isEmptyMessage }: ChatComposerInternalProps) => import("react").JSX.Element>;
5
+ export {};
3
6
  //# sourceMappingURL=ChatComposer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ChatComposer.d.ts","sourceRoot":"","sources":["../../../../../src/screens/chat-detail/ChatComposer.tsx"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAejD,eAAO,MAAM,YAAY,+TAkBpB,iBAAiB,iCA6XrB,CAAC"}
1
+ {"version":3,"file":"ChatComposer.d.ts","sourceRoot":"","sources":["../../../../../src/screens/chat-detail/ChatComposer.tsx"],"names":[],"mappings":"AAmCA,UAAU,yBAAyB;IACjC,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,eAAO,MAAM,YAAY,2DACM,yBAAyB,iCAkPvD,CAAC"}
@@ -1,4 +1,4 @@
1
1
  import type { ChatDetailProps } from './types';
2
- declare const ChatDetail: import("react").MemoExoticComponent<({ conversationId, enabled, title, subtitle, avatarUri, avatarFullName, showAddMember, getSubtitle, onBack, onPressSearch, onPressAddMember, onPressMenu, onPressAvatar, showQuickActions, quickActions, inputPlaceholder, onChangeInput, onPressAttach, onPressEmoji, attachmentActions, onQuickActionPress, onAttachmentAction, renderQuickAction, renderQuickActions, renderAttachmentAction, attachmentColumns, onPressUrl, customMessageItemFactory, }: ChatDetailProps) => import("react").JSX.Element>;
2
+ declare const ChatDetail: import("react").MemoExoticComponent<({ conversationId, enabled, title, subtitle, avatarUri, avatarFullName, showAddMember, getSubtitle, onBack, onPressSearch, onPressAddMember, onPressMenu, onPressAvatar, onPressUrl, customMessageItemFactory, }: ChatDetailProps) => import("react").JSX.Element>;
3
3
  export default ChatDetail;
4
4
  //# sourceMappingURL=ChatDetail.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ChatDetail.d.ts","sourceRoot":"","sources":["../../../../../src/screens/chat-detail/ChatDetail.tsx"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EACV,eAAe,EAGhB,MAAM,SAAS,CAAC;AAOjB,QAAA,MAAM,UAAU,meA8BX,eAAe,iCAqPnB,CAAC;AAUF,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"ChatDetail.d.ts","sourceRoot":"","sources":["../../../../../src/screens/chat-detail/ChatDetail.tsx"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAI/C,QAAA,MAAM,UAAU,wPAiBX,eAAe,iCAoGnB,CAAC;AAQF,eAAe,UAAU,CAAC"}
@@ -6,7 +6,5 @@ export { ChatAttachmentPanel } from './ChatAttachmentPanel';
6
6
  export { DEFAULT_Chat_QUICK_ACTIONS, DEFAULT_ATTACHMENT_ACTIONS, DEFAULT_ATTACHMENT_PANEL_HEIGHT, } from './constants';
7
7
  export { getConversationTitle, getConversationAvatarUri, getConversationSubtitle, shouldShowAddMember, } from './conversationHeader.utils';
8
8
  export type { DChatActionItem, DChatActionIconProvider, DChatQuickAction, DChatAttachmentAction, ChatDetailProps, ChatDetailHeaderProps, ChatListProps, ChatComposerProps, ChatQuickActionsProps, ChatQuickActionsRenderParams, ChatAttachmentPanelProps, } from './types';
9
- export type { DGiftedChatMessage } from '../../utils/giftedChatMessage';
10
9
  export { DChatMessageType, CUSTOM_MESSAGE_DATA_TYPE, } from '../../types/message';
11
- export { mapOpenIMMessageToGiftedChat, mapOpenIMMessagesToGiftedChat, } from '../../utils/giftedChatMessage';
12
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/screens/chat-detail/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EACL,0BAA0B,EAC1B,0BAA0B,EAC1B,+BAA+B,GAChC,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,4BAA4B,CAAC;AACpC,YAAY,EACV,eAAe,EACf,uBAAuB,EACvB,gBAAgB,EAChB,qBAAqB,EACrB,eAAe,EACf,qBAAqB,EACrB,aAAa,EACb,iBAAiB,EACjB,qBAAqB,EACrB,4BAA4B,EAC5B,wBAAwB,GACzB,MAAM,SAAS,CAAC;AACjB,YAAY,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACxE,OAAO,EACL,gBAAgB,EAChB,wBAAwB,GACzB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,4BAA4B,EAC5B,6BAA6B,GAC9B,MAAM,+BAA+B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/screens/chat-detail/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EACL,0BAA0B,EAC1B,0BAA0B,EAC1B,+BAA+B,GAChC,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,4BAA4B,CAAC;AACpC,YAAY,EACV,eAAe,EACf,uBAAuB,EACvB,gBAAgB,EAChB,qBAAqB,EACrB,eAAe,EACf,qBAAqB,EACrB,aAAa,EACb,iBAAiB,EACjB,qBAAqB,EACrB,4BAA4B,EAC5B,wBAAwB,GACzB,MAAM,SAAS,CAAC;AAEjB,OAAO,EACL,gBAAgB,EAChB,wBAAwB,GACzB,MAAM,qBAAqB,CAAC"}
@@ -1,7 +1,6 @@
1
1
  import type { ReactNode } from 'react';
2
2
  import type { MediaItem } from '../../hooks/useMediaViewer';
3
3
  import type { DMessageItem } from '../../types/chat';
4
- import type { IUrlMetadata } from '../../types/common';
5
4
  import type { ConversationItem } from '@droppii/openim-rn-client-sdk';
6
5
  export type DChatActionIconProvider = 'MaterialCommunityIcons' | 'DroppiiNew';
7
6
  export interface DChatActionItem {
@@ -46,23 +45,7 @@ export interface ChatAttachmentPanelProps {
46
45
  renderAction?: (action: DChatAttachmentAction, onPress: () => void) => ReactNode;
47
46
  }
48
47
  export interface ChatComposerProps {
49
- value?: string;
50
- placeholder?: string;
51
- onChangeText?: (text?: string) => void;
52
- onSend?: (urlMetadata?: IUrlMetadata) => void;
53
- onPressAttach?: () => void;
54
- onPressEmoji?: () => void;
55
- onMessageSent?: (message: DMessageItem) => void;
56
- showQuickActions?: boolean;
57
- quickActions?: DChatQuickAction[];
58
- attachmentActions?: DChatAttachmentAction[];
59
- onQuickActionPress?: (action: DChatQuickAction) => void;
60
- onAttachmentAction?: (action: DChatAttachmentAction) => void;
61
- renderQuickAction?: ChatQuickActionsProps['renderAction'];
62
- renderQuickActions?: ChatQuickActionsProps['renderQuickActions'];
63
- renderAttachmentAction?: ChatAttachmentPanelProps['renderAction'];
64
- attachmentColumns?: number;
65
- isEmptyMessage: boolean;
48
+ isEmptyMessage?: boolean;
66
49
  }
67
50
  export interface ChatListProps {
68
51
  messages?: DMessageItem[];
@@ -87,23 +70,6 @@ export interface ChatDetailProps extends Omit<ChatDetailHeaderProps, 'title' | '
87
70
  avatarFullName?: string;
88
71
  showAddMember?: boolean;
89
72
  getSubtitle?: (conversation: ConversationItem) => string | undefined;
90
- renderChat?: (item: DMessageItem) => ReactNode;
91
- showQuickActions?: boolean;
92
- showAttachmentActions?: boolean;
93
- quickActions?: DChatQuickAction[];
94
- getQuickActions?: (conversation: ConversationItem) => DChatQuickAction[] | undefined;
95
- attachmentActions?: DChatAttachmentAction[];
96
- inputPlaceholder?: string;
97
- onChangeInput?: (text: string) => void;
98
- onSend?: () => void;
99
- onPressAttach?: () => void;
100
- onPressEmoji?: () => void;
101
- onQuickActionPress?: (action: DChatQuickAction) => void;
102
- onAttachmentAction?: (action: DChatAttachmentAction) => void;
103
- renderQuickAction?: ChatQuickActionsProps['renderAction'];
104
- renderQuickActions?: ChatQuickActionsProps['renderQuickActions'];
105
- renderAttachmentAction?: ChatAttachmentPanelProps['renderAction'];
106
- attachmentColumns?: number;
107
73
  onPressUrl?: (url: string) => void;
108
74
  customMessageItemFactory?: (item: DMessageItem) => ReactNode;
109
75
  }
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/screens/chat-detail/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/screens/chat-detail/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"fileAttachmentHandler.d.ts","sourceRoot":"","sources":["../../../../../src/services/attachmentHandlers/fileAttachmentHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAkB,MAAM,wBAAwB,CAAC;AACzE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAExE,UAAU,QAAQ;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAGD,eAAO,MAAM,aAAa,QAAU,CAAC;AAErC,qBAAa,qBAAsB,YAAW,kBAAkB;IAC9D,QAAQ,CACN,UAAU,EAAE,UAAU,GACrB;QAAE,KAAK,EAAE,IAAI,CAAA;KAAE,GAAG;QAAE,KAAK,EAAE,KAAK,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;IAkC/C,YAAY,CAChB,UAAU,EAAE,UAAU,EACtB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,QAAQ,CAAC;CAsBrB;;AAED,wBAA2C"}
1
+ {"version":3,"file":"fileAttachmentHandler.d.ts","sourceRoot":"","sources":["../../../../../src/services/attachmentHandlers/fileAttachmentHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAkB,MAAM,wBAAwB,CAAC;AACzE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAExE,UAAU,QAAQ;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAID,eAAO,MAAM,aAAa,QAAqB,CAAC;AAEhD,qBAAa,qBAAsB,YAAW,kBAAkB;IAC9D,QAAQ,CACN,UAAU,EAAE,UAAU,GACrB;QAAE,KAAK,EAAE,IAAI,CAAA;KAAE,GAAG;QAAE,KAAK,EAAE,KAAK,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;IAkC/C,YAAY,CAChB,UAAU,EAAE,UAAU,EACtB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,QAAQ,CAAC;CAsBrB;;AAED,wBAA2C"}
@@ -1 +1 @@
1
- {"version":3,"file":"imageAttachmentHandler.d.ts","sourceRoot":"","sources":["../../../../../src/services/attachmentHandlers/imageAttachmentHandler.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAGxE,eAAO,MAAM,sBAAsB,EAAE,kBA2DpC,CAAC"}
1
+ {"version":3,"file":"imageAttachmentHandler.d.ts","sourceRoot":"","sources":["../../../../../src/services/attachmentHandlers/imageAttachmentHandler.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAIxE,eAAO,MAAM,sBAAsB,EAAE,kBA6DpC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"videoAttachmentHandler.d.ts","sourceRoot":"","sources":["../../../../../src/services/attachmentHandlers/videoAttachmentHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAmB,MAAM,wBAAwB,CAAC;AAC1E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAExE,UAAU,YAAY;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,sBAAuB,YAAW,kBAAkB;IAC/D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAqB;IAC3D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAoC;IAE3E,QAAQ,CACN,UAAU,EAAE,UAAU,GACrB;QAAE,KAAK,EAAE,IAAI,CAAA;KAAE,GAAG;QAAE,KAAK,EAAE,KAAK,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;IAqC/C,YAAY,CAChB,UAAU,EAAE,UAAU,EACtB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,YAAY,CAAC;CA8CzB;;AAED,wBAA4C"}
1
+ {"version":3,"file":"videoAttachmentHandler.d.ts","sourceRoot":"","sources":["../../../../../src/services/attachmentHandlers/videoAttachmentHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAmB,MAAM,wBAAwB,CAAC;AAC1E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAGxE,UAAU,YAAY;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,sBAAuB,YAAW,kBAAkB;IAC/D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAuB;IAC7D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAoC;IAE3E,QAAQ,CACN,UAAU,EAAE,UAAU,GACrB;QAAE,KAAK,EAAE,IAAI,CAAA;KAAE,GAAG;QAAE,KAAK,EAAE,KAAK,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;IAqC/C,YAAY,CAChB,UAAU,EAAE,UAAU,EACtB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,YAAY,CAAC;CA8CzB;;AAED,wBAA4C"}
@@ -1,5 +1,5 @@
1
1
  import type { Attachment, AttachmentSendOptions, AttachmentSendResult } from '../types/attachment';
2
2
  export declare namespace AttachmentOrchestratorService {
3
- function sendPreparedAttachments(attachments: Attachment[], uploadedUrls: Record<string, string>, options?: AttachmentSendOptions, onMessageSent?: (message: any) => void): Promise<AttachmentSendResult>;
3
+ function sendPreparedAttachments(attachments: Attachment[], uploadedUrls: Record<string, string>, options?: AttachmentSendOptions): Promise<AttachmentSendResult>;
4
4
  }
5
5
  //# sourceMappingURL=attachmentOrchestrator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"attachmentOrchestrator.d.ts","sourceRoot":"","sources":["../../../../src/services/attachmentOrchestrator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,UAAU,EACV,qBAAqB,EACrB,oBAAoB,EACrB,MAAM,qBAAqB,CAAC;AAQ7B,yBAAiB,6BAA6B,CAAC;IAC7C,SAAsB,uBAAuB,CAC3C,WAAW,EAAE,UAAU,EAAE,EACzB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACpC,OAAO,GAAE,qBAAkD,EAC3D,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,IAAI,GACrC,OAAO,CAAC,oBAAoB,CAAC,CA+F/B;CAyLF"}
1
+ {"version":3,"file":"attachmentOrchestrator.d.ts","sourceRoot":"","sources":["../../../../src/services/attachmentOrchestrator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,UAAU,EACV,qBAAqB,EACrB,oBAAoB,EACrB,MAAM,qBAAqB,CAAC;AAS7B,yBAAiB,6BAA6B,CAAC;IAC7C,SAAsB,uBAAuB,CAC3C,WAAW,EAAE,UAAU,EAAE,EACzB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACpC,OAAO,GAAE,qBAAkD,GAC1D,OAAO,CAAC,oBAAoB,CAAC,CA8F/B;CAwLF"}
@@ -1 +1 @@
1
- {"version":3,"file":"imageUtils.d.ts","sourceRoot":"","sources":["../../../../src/utils/imageUtils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAGtD,eAAO,MAAM,YAAY,QAAO,MAE/B,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,UAAU,MAAM,GAAG,SAAS,KAAG,OAI1D,CAAC;AAGF,eAAO,MAAM,iBAAiB,GAAI,YAAY,GAAG,KAAG,OAInD,CAAC;AA+BF,eAAO,MAAM,WAAW,GAAI,UAAU,MAAM,KAAG,MAG9C,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,WAAW,MAAM,KAAG,MAkB/C,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,OAAO,MAAM,KAAG,MAM9C,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,MAAM,SAAS,KAAG,MAAM,GAAG,IAmB5D,CAAC;AAEF,eAAO,MAAM,sBAAsB,GAAI,SAAS,MAAM,KAAG,MAExD,CAAC"}
1
+ {"version":3,"file":"imageUtils.d.ts","sourceRoot":"","sources":["../../../../src/utils/imageUtils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAItD,eAAO,MAAM,YAAY,QAAO,MAE/B,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,UAAU,MAAM,GAAG,SAAS,KAAG,OAI1D,CAAC;AAGF,eAAO,MAAM,iBAAiB,GAAI,YAAY,GAAG,KAAG,OAInD,CAAC;AA+BF,eAAO,MAAM,WAAW,GAAI,UAAU,MAAM,KAAG,MAG9C,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,WAAW,MAAM,KAAG,MAkB/C,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,OAAO,MAAM,KAAG,MAM9C,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,MAAM,SAAS,KAAG,MAAM,GAAG,IAiB5D,CAAC;AAEF,eAAO,MAAM,sBAAsB,GAAI,SAAS,MAAM,KAAG,MAExD,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Run `items` through `fn` with at most `concurrency` items in-flight at once.
3
+ * Errors per-item are swallowed — wrap `fn` if you need to capture them.
4
+ */
5
+ export declare function pLimit<T>(items: T[], fn: (item: T, index: number) => Promise<void>, concurrency: number): Promise<void>;
6
+ //# sourceMappingURL=pLimit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pLimit.d.ts","sourceRoot":"","sources":["../../../../src/utils/pLimit.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAsB,MAAM,CAAC,CAAC,EAC5B,KAAK,EAAE,CAAC,EAAE,EACV,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,EAC7C,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC,CAWf"}
@@ -1 +1 @@
1
- {"version":3,"file":"videoThumbnail.d.ts","sourceRoot":"","sources":["../../../../src/utils/videoThumbnail.ts"],"names":[],"mappings":"AAIA,UAAU,gBAAgB;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,eAAe;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AA4DD,eAAO,MAAM,kBAAkB;mCAEhB,MAAM,YACR,gBAAgB,KACxB,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;sCA6DM,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC;0CAWhD,MAAM,EAAE,YACX,gBAAgB,KACxB,OAAO,CAAC,eAAe,EAAE,CAAC;CAe9B,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
1
+ {"version":3,"file":"videoThumbnail.d.ts","sourceRoot":"","sources":["../../../../src/utils/videoThumbnail.ts"],"names":[],"mappings":"AAIA,UAAU,gBAAgB;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,eAAe;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAmED,eAAO,MAAM,kBAAkB;mCAEhB,MAAM,YACR,gBAAgB,KACxB,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;sCA4DM,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC;0CAYhD,MAAM,EAAE,YACX,gBAAgB,KACxB,OAAO,CAAC,eAAe,EAAE,CAAC;CAe9B,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { Video as PickedVideo } from 'react-native-image-crop-picker';
2
+ import type { ImageWithUploadStatus } from '../hooks/useImageAttachment';
3
+ export type VideoWithUploadStatus = Omit<ImageWithUploadStatus, 'image'> & {
4
+ image: PickedVideo;
5
+ };
6
+ export interface VideoThumbnailResult {
7
+ url: string;
8
+ size: number;
9
+ }
10
+ export declare function generateAndUploadVideoThumbnails(videos: VideoWithUploadStatus[]): Promise<Record<string, VideoThumbnailResult>>;
11
+ //# sourceMappingURL=videoThumbnailUpload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"videoThumbnailUpload.d.ts","sourceRoot":"","sources":["../../../../src/utils/videoThumbnailUpload.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,KAAK,IAAI,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAEzE,MAAM,MAAM,qBAAqB,GAAG,IAAI,CAAC,qBAAqB,EAAE,OAAO,CAAC,GAAG;IACzE,KAAK,EAAE,WAAW,CAAC;CACpB,CAAC;AAEF,MAAM,WAAW,oBAAoB;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAsB,gCAAgC,CACpD,MAAM,EAAE,qBAAqB,EAAE,GAC9B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC,CAoF/C"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@droppii-org/chat-mobile",
3
- "version": "0.2.23",
3
+ "version": "0.2.24",
4
4
  "description": "Droppii chat mobile",
5
5
  "keywords": [
6
6
  "react-native",
@@ -0,0 +1,11 @@
1
+ const MB = 1024 * 1024;
2
+
3
+ export const UPLOAD_LIMITS = {
4
+ image: 5 * MB,
5
+ video: 200 * MB,
6
+ file: 50 * MB,
7
+ } as const;
8
+
9
+ // Max concurrent thumbnail generations and file uploads.
10
+ // Keep low to avoid OOM on low-end devices.
11
+ export const UPLOAD_CONCURRENCY = 2;
@@ -0,0 +1,186 @@
1
+ import { useCallback, useMemo, useState } from 'react';
2
+ import ImagePicker from 'react-native-image-crop-picker';
3
+ import {
4
+ useImageAttachment,
5
+ type ImageWithUploadStatus,
6
+ } from './useImageAttachment';
7
+ import { useFileAttachment } from './useFileAttachment';
8
+ import { useLinkPreview } from './useLinkPreview/useLinkPreview';
9
+ import { useSendAttachment } from './useSendAttachment';
10
+ import { useSendMessage } from './message/useSendMessage';
11
+ import { isVideoFromPicker } from '../utils/imageUtils';
12
+ import {
13
+ generateAndUploadVideoThumbnails,
14
+ type VideoWithUploadStatus,
15
+ } from '../utils/videoThumbnailUpload';
16
+
17
+ export function useChatCompose() {
18
+ const [text, setText] = useState('');
19
+
20
+ const imageAttachment = useImageAttachment();
21
+ const fileAttachment = useFileAttachment();
22
+ const linkPreview = useLinkPreview(text);
23
+ const { send: sendAttachments } = useSendAttachment();
24
+ const { sendMessage } = useSendMessage();
25
+
26
+ const isUploading = useMemo(
27
+ () =>
28
+ imageAttachment.selectedImages.some(
29
+ (img: ImageWithUploadStatus) => img.isUploading
30
+ ) || fileAttachment.selectedFiles.some((f) => f.isUploading || !!f.error),
31
+ [imageAttachment.selectedImages, fileAttachment.selectedFiles]
32
+ );
33
+
34
+ const canSend = useMemo(
35
+ () =>
36
+ (text.trim().length > 0 ||
37
+ imageAttachment.selectedImages.length > 0 ||
38
+ fileAttachment.selectedFiles.length > 0) &&
39
+ !isUploading,
40
+ [
41
+ text,
42
+ imageAttachment.selectedImages,
43
+ fileAttachment.selectedFiles,
44
+ isUploading,
45
+ ]
46
+ );
47
+
48
+ const send = useCallback(async () => {
49
+ const { selectedImages, clearAllImages } = imageAttachment;
50
+ const { selectedFiles, clearAllFiles } = fileAttachment;
51
+ const urlMeta = linkPreview.isVisible ? linkPreview.metadata : undefined;
52
+
53
+ // --- Attachments ---
54
+ if (selectedImages.length > 0 || selectedFiles.length > 0) {
55
+ const actualImages = selectedImages.filter(
56
+ (img: ImageWithUploadStatus) => !isVideoFromPicker(img.image)
57
+ );
58
+ const videos = selectedImages.filter((img: ImageWithUploadStatus) =>
59
+ isVideoFromPicker(img.image)
60
+ );
61
+
62
+ const uploadedImages = actualImages.filter(
63
+ (img: ImageWithUploadStatus) => img.uploadedUrl
64
+ );
65
+ const uploadedVideos = videos.filter(
66
+ (v) => v.uploadedUrl
67
+ ) as unknown as VideoWithUploadStatus[];
68
+
69
+ // Generate + upload thumbnails for gallery videos
70
+ let videoThumbnails: Record<string, { url: string; size: number }> = {};
71
+ if (uploadedVideos.length > 0) {
72
+ videoThumbnails =
73
+ await generateAndUploadVideoThumbnails(uploadedVideos);
74
+ }
75
+
76
+ // Send images + videos
77
+ if (uploadedImages.length > 0 || uploadedVideos.length > 0) {
78
+ const attachmentItems = [
79
+ ...uploadedImages.map((img: ImageWithUploadStatus) => ({
80
+ ...img,
81
+ type: 'image' as const,
82
+ })),
83
+ ...uploadedVideos.map(
84
+ (vid: VideoWithUploadStatus, vidIdx: number) => {
85
+ const videoId = vid.uploadedUrl || `video-${vidIdx}`;
86
+ const thumb = videoThumbnails[videoId];
87
+ return {
88
+ type: 'video' as const,
89
+ video: {
90
+ path: vid.image.path,
91
+ filename: vid.image.filename ?? undefined,
92
+ size: vid.image.size ?? undefined,
93
+ width: vid.image.width ?? undefined,
94
+ height: vid.image.height ?? undefined,
95
+ duration: vid.image.duration ?? undefined,
96
+ },
97
+ uploadProgress: vid.uploadProgress,
98
+ error: vid.error,
99
+ isUploading: vid.isUploading,
100
+ uploadedUrl: vid.uploadedUrl,
101
+ thumbnailUrl: thumb?.url,
102
+ thumbnailSize: thumb?.size,
103
+ };
104
+ }
105
+ ),
106
+ ];
107
+
108
+ const success = await sendAttachments(attachmentItems, undefined);
109
+ if (success) {
110
+ // Release all picker temp files to free native memory.
111
+ ImagePicker.clean().catch(() => {});
112
+ clearAllImages();
113
+ }
114
+ }
115
+
116
+ // Send each file as its own message
117
+ const uploadedFiles = selectedFiles.filter(
118
+ (f) => f.uploadedUrl && !f.error
119
+ );
120
+ for (const file of uploadedFiles) {
121
+ await sendAttachments(
122
+ [
123
+ {
124
+ type: 'file' as const,
125
+ file: { path: file.uri, filename: file.name, size: file.size },
126
+ uploadProgress: 100,
127
+ error: null,
128
+ isUploading: false,
129
+ uploadedUrl: file.uploadedUrl,
130
+ },
131
+ ],
132
+ undefined
133
+ );
134
+ }
135
+ if (uploadedFiles.length > 0) clearAllFiles();
136
+ }
137
+
138
+ // --- Text / link preview ---
139
+ if (text.trim() || urlMeta) {
140
+ await sendMessage({
141
+ files: [],
142
+ plainText: text.trim(),
143
+ urlMetadata: urlMeta,
144
+ });
145
+ setText('');
146
+ }
147
+ }, [
148
+ imageAttachment,
149
+ fileAttachment,
150
+ linkPreview.isVisible,
151
+ linkPreview.metadata,
152
+ sendAttachments,
153
+ sendMessage,
154
+ text,
155
+ ]);
156
+
157
+ return {
158
+ // Text
159
+ text,
160
+ setText,
161
+ // Attachments
162
+ selectedImages: imageAttachment.selectedImages,
163
+ selectedFiles: fileAttachment.selectedFiles,
164
+ isImagePreviewVisible: imageAttachment.isImagePreviewVisible,
165
+ isFilePreviewVisible: fileAttachment.isFilePreviewVisible,
166
+ addImages: imageAttachment.handleImageAttach,
167
+ addFiles: fileAttachment.handleFileAttach,
168
+ removeImage: imageAttachment.handleImageRemove,
169
+ removeFile: fileAttachment.handleFileRemove,
170
+ // Link preview
171
+ showLinkPreview: linkPreview.isVisible,
172
+ urlMetadata: linkPreview.metadata,
173
+ isMetadataLoading: linkPreview.isLoading,
174
+ dismissPreview: linkPreview.dismiss,
175
+ // Status
176
+ isUploading,
177
+ canSend,
178
+ // Actions
179
+ send,
180
+ clearAll: () => {
181
+ imageAttachment.clearAllImages();
182
+ fileAttachment.clearAllFiles();
183
+ setText('');
184
+ },
185
+ };
186
+ }