vue-parley 4.2.0 → 4.3.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.
Files changed (44) hide show
  1. package/dist/chat.css +57 -35
  2. package/dist/chunks/{Call-D48LfnDv.cjs → Call-CDT92h1x.cjs} +62 -57
  3. package/dist/chunks/Call-CDT92h1x.cjs.map +1 -0
  4. package/dist/chunks/{Call-7lGaUPcp.mjs → Call-jiZGoCtR.mjs} +62 -57
  5. package/dist/chunks/Call-jiZGoCtR.mjs.map +1 -0
  6. package/dist/chunks/{index-C8N5eSUe.mjs → index-CHFzAdVI.mjs} +150 -145
  7. package/dist/chunks/index-CHFzAdVI.mjs.map +1 -0
  8. package/dist/chunks/{index-DrcpfLUy.cjs → index-efTNVoBF.cjs} +131 -126
  9. package/dist/chunks/index-efTNVoBF.cjs.map +1 -0
  10. package/dist/chunks/{session-B8Q7eiUV.mjs → session-CN61aKfb.mjs} +3 -2
  11. package/dist/chunks/{session-BwgUu6F3.cjs.map → session-CN61aKfb.mjs.map} +1 -1
  12. package/dist/chunks/{session-BwgUu6F3.cjs → session-DLxWccUj.cjs} +3 -2
  13. package/dist/chunks/{session-B8Q7eiUV.mjs.map → session-DLxWccUj.cjs.map} +1 -1
  14. package/dist/index.cjs +1 -1
  15. package/dist/index.mjs +19 -19
  16. package/dist/types/app/components/ChatPage.vue.d.ts.map +1 -1
  17. package/dist/types/app/components/call/Call.vue.d.ts.map +1 -1
  18. package/dist/types/app/components/chat/ChatBubble.vue.d.ts.map +1 -1
  19. package/dist/types/app/components/chat/ChatInput.vue.d.ts.map +1 -1
  20. package/dist/types/app/components/chat/ChatMessages.vue.d.ts.map +1 -1
  21. package/dist/types/app/components/chat/ChatPageBar.vue.d.ts.map +1 -1
  22. package/dist/types/app/components/chat/ChatProfileOverview.vue.d.ts +5 -1
  23. package/dist/types/app/components/chat/ChatProfileOverview.vue.d.ts.map +1 -1
  24. package/dist/types/app/components/chat/ChatView.vue.d.ts.map +1 -1
  25. package/dist/types/app/components/chat/chat-bubbles/BubbleOptions.vue.d.ts.map +1 -1
  26. package/dist/types/app/components/chat/chat-bubbles/MediaViewer.vue.d.ts.map +1 -1
  27. package/dist/types/app/components/chat/chat-input/InputAttachement.vue.d.ts.map +1 -1
  28. package/dist/types/app/components/chat/contact/ChatList.vue.d.ts.map +1 -1
  29. package/dist/types/app/components/chat/messages/FloatingDateHeader.vue.d.ts +0 -1
  30. package/dist/types/app/components/chat/messages/FloatingDateHeader.vue.d.ts.map +1 -1
  31. package/dist/types/app/components/general/ResponsiveDialog.vue.d.ts.map +1 -1
  32. package/dist/types/app/composables/call/session.d.ts +2 -0
  33. package/dist/types/app/composables/call/session.d.ts.map +1 -1
  34. package/dist/types/app/composables/useFlippedVirtualScroll.d.ts +0 -1
  35. package/dist/types/app/composables/useFlippedVirtualScroll.d.ts.map +1 -1
  36. package/dist/types/app/stores/callStore.d.ts +9 -3
  37. package/dist/types/app/stores/callStore.d.ts.map +1 -1
  38. package/dist/types/i18n/locales/index.d.ts +10 -0
  39. package/dist/types/i18n/locales/index.d.ts.map +1 -1
  40. package/package.json +1 -1
  41. package/dist/chunks/Call-7lGaUPcp.mjs.map +0 -1
  42. package/dist/chunks/Call-D48LfnDv.cjs.map +0 -1
  43. package/dist/chunks/index-C8N5eSUe.mjs.map +0 -1
  44. package/dist/chunks/index-DrcpfLUy.cjs.map +0 -1
@@ -191,7 +191,7 @@ const general$2 = { "themes": { "light": "Light", "dark": "Dark" }, "all": "All"
191
191
  const generalEn = {
192
192
  general: general$2
193
193
  };
194
- const chat$2 = { "title": "Messages", "filters": { "active": "Active", "ended": "Ended", "online": "Online" }, "info": { "nationalCode": "National code", "phoneNumber": "Phone number", "age": "Age", "ageDisplay": "{year} years", "files": "Files", "media": "Images" }, "lastSeen": "Last seen {time}", "nationalId": "National code", "age": "Age", "ageText": "{years} years", "attachements": "Attachments", "options": { "end": "End", "voiceCall": "Call", "videoCall": "Video" }, "attachementTypes": { "image": "Photo", "file": "File", "voice": "Voice message", "video": "Video", "request": "Request" }, "messageOptions": { "edit": "Edit message", "delete": "Delete message", "copy": "Copy", "select": "Select", "reply": "Reply", "deselect": "Deselect" }, "barOptions": { "endChat": "End conversation", "deleteMessages": "Delete messages" }, "placeholder": "Write...", "chatLocked": "Conversation ended", "noConversationSelected": "No conversation selected yet", "noMessages": "No messages exchanged", "swipeToCancel": "Swipe to cancel", "cancel": "Cancel", "online": "Online", "file": { "calculating": "Calculating", "attachMedia": "Photo or video", "attachFile": "File", "sendImage": "Send image", "sendImages": "Send images", "sendFile": "Send file", "cancel": "Cancel" }, "permissions": { "permissionTitle": "Camera and microphone access", "description": "To join video calls or send voice messages, we need access to your camera and microphone.", "allow": "Allow access", "notNow": "Not now", "retry": "Try again", "mic": { "title": "Microphone access", "description": "We need microphone access to send voice messages and place video calls." }, "cam": { "title": "Camera access", "description": "We need camera access to send video messages and place video calls." }, "micError": { "title": "Your microphone is disabled", "description": "We need microphone permission to send voice messages or place calls." }, "camError": { "title": "Camera access error", "description": "We need camera permission to send video messages or place video calls." }, "screen": { "title": "Screen access", "description": "After tapping confirm, please select the screen or tab you want to share." }, "screenError": { "title": "Screen access error", "description": "Screen capture permission was denied. We need screen access permission to share your screen." } }, "you": "You", "copiedMessage": "Message copied to clipboard.", "editFailed": "Could not edit the message. Please try again.", "deleteFailed": "Could not delete the message. Please try again.", "unreadMessages": "Unread.", "caption": "Caption", "send": "Send", "delete": { "title": "Delete message", "singleMessage": "Are you sure you want to delete this message?", "multipleMessages": "Are you sure you want to delete {count} messages?", "confirm": "Delete", "requestTitle": "Cancel request", "request": "Are you sure you want to cancel this request?" }, "call": { "title": "Call", "you": "You", "deviceDoesntSupport": "Your device does not support this feature.", "errors": { "noMicDevice": "No microphone device detected", "noCameraDevice": "No camera device detected", "cameraDenied": "Camera access denied", "micDenied": "Microphone access denied", "noMicFound": "No microphone found", "micAccessError": "Error accessing microphone", "noCameraFound": "No camera found", "cameraAccessError": "Error accessing camera", "mediaInitError": "Error initializing media devices", "screenShareMobileUnsupported": "Screen sharing is not supported on mobile devices", "screenShareBrowserUnsupported": "Screen sharing is not supported in this browser", "screenShareDenied": "Screen sharing permission denied", "screenAccessError": "Unable to access screen", "screenShareMobileMaybeUnavailable": "Screen sharing may not be available on mobile devices", "screenShareStartFailed": "Failed to start screen sharing", "cameraUnavailable": "Camera not available", "flashlightToggleFailed": "Failed to toggle flashlight" }, "controls": { "endCall": "End call", "minimize": "Minimize", "maximize": "Return to call", "mute": "Mute", "unmute": "Unmute", "cameraOff": "Turn camera off", "cameraOn": "Turn camera on", "shareScreen": "Share screen", "stopSharing": "Stop sharing", "fullscreen": "Full screen", "exitFullscreen": "Exit full screen", "flashlight": "Flashlight", "cameras": "Available cameras", "chooseCamera": "Choose camera", "pauseVideo": "Pause video", "playVideo": "Play video", "nextParticipant": "Show next participant" } }, "board": { "title": "Board", "selectColor": "Select color", "page": "Page {page}", "addPage": "New page", "confirm": "Confirm", "savedSuccessfully": "Image saved successfully." } };
194
+ const chat$2 = { "title": "Messages", "filters": { "active": "Active", "ended": "Ended", "online": "Online" }, "info": { "nationalCode": "National code", "phoneNumber": "Phone number", "age": "Age", "ageDisplay": "{year} years", "files": "Files", "media": "Images" }, "lastSeen": "Last seen {time}", "nationalId": "National code", "age": "Age", "ageText": "{years} years", "attachements": "Attachments", "options": { "end": "End", "voiceCall": "Call", "videoCall": "Video" }, "attachementTypes": { "image": "Photo", "file": "File", "voice": "Voice message", "video": "Video", "request": "Request" }, "messageOptions": { "edit": "Edit message", "delete": "Delete message", "copy": "Copy", "select": "Select", "reply": "Reply", "deselect": "Deselect" }, "barOptions": { "endChat": "End conversation", "deleteMessages": "Delete messages" }, "placeholder": "Write...", "chatLocked": "Conversation ended", "noConversationSelected": "No conversation selected yet", "noMessages": "No messages exchanged", "swipeToCancel": "Swipe to cancel", "cancel": "Cancel", "online": "Online", "file": { "calculating": "Calculating", "attachMedia": "Photo or video", "attachFile": "File", "sendImage": "Send image", "sendImages": "Send images", "sendFile": "Send file", "cancel": "Cancel" }, "permissions": { "permissionTitle": "Camera and microphone access", "description": "To join video calls or send voice messages, we need access to your camera and microphone.", "allow": "Allow access", "notNow": "Not now", "retry": "Try again", "mic": { "title": "Microphone access", "description": "We need microphone access to send voice messages and place video calls." }, "cam": { "title": "Camera access", "description": "We need camera access to send video messages and place video calls." }, "micError": { "title": "Your microphone is disabled", "description": "We need microphone permission to send voice messages or place calls." }, "camError": { "title": "Camera access error", "description": "We need camera permission to send video messages or place video calls." }, "screen": { "title": "Screen access", "description": "After tapping confirm, please select the screen or tab you want to share." }, "screenError": { "title": "Screen access error", "description": "Screen capture permission was denied. We need screen access permission to share your screen." } }, "you": "You", "copiedMessage": "Message copied to clipboard.", "editFailed": "Could not edit the message. Please try again.", "deleteFailed": "Could not delete the message. Please try again.", "unreadMessages": "Unread.", "caption": "Caption", "send": "Send", "delete": { "title": "Delete message", "singleMessage": "Are you sure you want to delete this message?", "multipleMessages": "Are you sure you want to delete {count} messages?", "confirm": "Delete", "requestTitle": "Cancel request", "request": "Are you sure you want to cancel this request?" }, "call": { "title": "Call", "you": "You", "active": "Call active", "participants": "{count} participant | {count} participants", "yourPresentation": "Your presentation", "presentationOf": "Presented by {name}", "cameraIsOff": "Camera is off", "deviceDoesntSupport": "Your device does not support this feature.", "errors": { "noMicDevice": "No microphone device detected", "noCameraDevice": "No camera device detected", "cameraDenied": "Camera access denied", "micDenied": "Microphone access denied", "noMicFound": "No microphone found", "micAccessError": "Error accessing microphone", "noCameraFound": "No camera found", "cameraAccessError": "Error accessing camera", "mediaInitError": "Error initializing media devices", "screenShareMobileUnsupported": "Screen sharing is not supported on mobile devices", "screenShareBrowserUnsupported": "Screen sharing is not supported in this browser", "screenShareDenied": "Screen sharing permission denied", "screenAccessError": "Unable to access screen", "screenShareMobileMaybeUnavailable": "Screen sharing may not be available on mobile devices", "screenShareStartFailed": "Failed to start screen sharing", "cameraUnavailable": "Camera not available", "flashlightToggleFailed": "Failed to toggle flashlight" }, "controls": { "endCall": "End call", "minimize": "Minimize", "maximize": "Return to call", "mute": "Mute", "unmute": "Unmute", "cameraOff": "Turn camera off", "cameraOn": "Turn camera on", "shareScreen": "Share screen", "stopSharing": "Stop sharing", "fullscreen": "Full screen", "exitFullscreen": "Exit full screen", "flashlight": "Flashlight", "cameras": "Available cameras", "chooseCamera": "Choose camera", "pauseVideo": "Pause video", "playVideo": "Play video", "nextParticipant": "Show next participant" } }, "board": { "title": "Board", "selectColor": "Select color", "page": "Page {page}", "addPage": "New page", "confirm": "Confirm", "savedSuccessfully": "Image saved successfully." } };
195
195
  const chatEn = {
196
196
  chat: chat$2
197
197
  };
@@ -199,7 +199,7 @@ const general$1 = { "themes": { "light": "روشن", "dark": "تاریک" }, "al
199
199
  const generalFa = {
200
200
  general: general$1
201
201
  };
202
- const chat$1 = { "title": "پیام ها", "filters": { "active": "فعال", "ended": "خاتمه یافته", "online": "آنلاین ها" }, "info": { "nationalCode": "کد ملی", "phoneNumber": "شماره تماس", "age": "سن", "ageDisplay": "{year} سال", "files": "فایل ها", "media": "تصاویر" }, "lastSeen": "آخرین بازدید {time}", "nationalId": "کد ملی", "age": "سن", "ageText": "{years} سال", "attachements": "پیوست ها", "options": { "end": "خاتمه", "voiceCall": "تماس", "videoCall": "تصویری" }, "attachementTypes": { "image": "عکس", "file": "فایل", "voice": "پیام صوتی", "video": "ویدیو", "request": "درخواست" }, "messageOptions": { "edit": "ویرایش پیام", "delete": "حذف پیام", "copy": "کپی", "select": "انتخاب", "reply": "پاسخ", "deselect": "لغو انتخاب" }, "barOptions": { "endChat": "خاتمه مکالمه", "deleteMessages": "حذف پیام ها" }, "placeholder": "بنویسید ...", "chatLocked": "گفتگو تمام شده", "noConversationSelected": "هنوز مکالمه ای انتخاب نشده", "noMessages": "هیچ پیامی تبادل نشده", "swipeToCancel": "برای لغو بکشید", "cancel": "لغو", "online": "آنلاین", "file": { "calculating": "در حال محاسبه", "attachMedia": "عکس یا ویدیو", "attachFile": "فایل", "sendImage": "ارسال تصویر", "sendImages": "ارسال تصاویر", "sendFile": "ارسال فایل", "cancel": "انصراف" }, "permissions": { "permissionTitle": "دسترسی دوربین و میکروفون", "description": " برای اینکه بتونی توی تماس‌های تصویری شرکت کنی یا پیام صوتی بفرستی، نیاز داریم به دوربین و میکروفونت دسترسی داشته باشیم.", "allow": "تایید دسترسی", "notNow": "الان نه", "retry": "تلاش مجدد", "mic": { "title": "دسترسی میکروفون", "description": "برای ارسال پیام صوتی و برقراری تماس تصویری به دسترسی میکروفون شما نیاز داریم." }, "cam": { "title": "دسترسی دوربین", "description": "برای ارسال پیام ویدیویی و برقراری تماس تصویری به دسترسی دوربین شما نیاز داریم." }, "micError": { "title": "میکروفون شما غیرفعال است", "description": "برای ارسال پیام صوتی یا تماس، نیاز به تایید دسترسی میکروفون داریم." }, "camError": { "title": "خطای دسترسی به دوربین", "description": "برای ارسال پیام و تماس ویدیویی نیاز به تایید دسترسی دوربین داریم." }, "screen": { "title": "دسترسی به صفحه", "description": "بعد از زدن دکمه تایید لطفا صفحه یا زبانه انتخابی خویش را برای به اشتراک گذاری انتخاب نمایید." }, "screenError": { "title": "خطا در دسترسی به صفحه", "description": "دسترسی به تصویر صفحه با خطا مواجه شد. برای اشتراک گذاری تصویر صفحه شما نیازمند تایید دسترسی به صفحه هستیم." } }, "you": "شما", "copiedMessage": "پیام با موفقیت به کلیپ بورد الصاق شد.", "editFailed": "ویرایش پیام انجام نشد. دوباره تلاش کنید.", "deleteFailed": "حذف پیام انجام نشد. دوباره تلاش کنید.", "unreadMessages": "خوانده نشده.", "caption": "کپشن", "send": "ارسال", "delete": { "title": "حذف پیام", "singleMessage": "آیا از حذف پیام اطمینان دارید ؟", "multipleMessages": "آیا از حذف {count} پیام اطمینان دارید؟", "confirm": "حذف", "requestTitle": "لغو درخواست", "request": "آیا از لغو درخواست خود اطمینان دارید ؟" }, "call": { "title": "تماس", "you": "شما", "deviceDoesntSupport": "دستگاه شما از این قابلیت پشتیبانی نمیکند.", "errors": { "noMicDevice": "میکروفونی شناسایی نشد", "noCameraDevice": "دوربینی شناسایی نشد", "cameraDenied": "دسترسی به دوربین رد شد", "micDenied": "دسترسی به میکروفون رد شد", "noMicFound": "میکروفونی یافت نشد", "micAccessError": "خطا در دسترسی به میکروفون", "noCameraFound": "دوربینی یافت نشد", "cameraAccessError": "خطا در دسترسی به دوربین", "mediaInitError": "خطا در راه‌اندازی دستگاه‌های رسانه‌ای", "screenShareMobileUnsupported": "اشتراک‌گذاری صفحه در دستگاه‌های موبایل پشتیبانی نمی‌شود", "screenShareBrowserUnsupported": "اشتراک‌گذاری صفحه در این مرورگر پشتیبانی نمی‌شود", "screenShareDenied": "دسترسی به اشتراک‌گذاری صفحه رد شد", "screenAccessError": "امکان دسترسی به صفحه وجود ندارد", "screenShareMobileMaybeUnavailable": "ممکن است اشتراک‌گذاری صفحه در دستگاه‌های موبایل در دسترس نباشد", "screenShareStartFailed": "راه‌اندازی اشتراک‌گذاری صفحه ناموفق بود", "cameraUnavailable": "دوربین در دسترس نیست", "flashlightToggleFailed": "تغییر حالت چراغ قوه ناموفق بود" }, "controls": { "endCall": "پایان تماس", "minimize": "کوچک کردن", "maximize": "بازگشت به تماس", "mute": "قطع میکروفون", "unmute": "وصل میکروفون", "cameraOff": "خاموش کردن دوربین", "cameraOn": "روشن کردن دوربین", "shareScreen": "اشتراک‌گذاری صفحه", "stopSharing": "توقف اشتراک‌گذاری", "fullscreen": "تمام صفحه", "exitFullscreen": "خروج از تمام صفحه", "flashlight": "چراغ‌قوه", "cameras": "دوربین‌های موجود", "chooseCamera": "انتخاب دوربین", "pauseVideo": "توقف ویدیو", "playVideo": "پخش ویدیو", "nextParticipant": "نمایش شرکت‌کننده بعدی" } }, "board": { "title": "تخته", "selectColor": "انتخاب رنگ", "page": "صفحه {page}", "addPage": "صفحه جدید", "confirm": "تایید", "savedSuccessfully": "تصویر با موفقیت ذخیره سازی شد." } };
202
+ const chat$1 = { "title": "پیام ها", "filters": { "active": "فعال", "ended": "خاتمه یافته", "online": "آنلاین ها" }, "info": { "nationalCode": "کد ملی", "phoneNumber": "شماره تماس", "age": "سن", "ageDisplay": "{year} سال", "files": "فایل ها", "media": "تصاویر" }, "lastSeen": "آخرین بازدید {time}", "nationalId": "کد ملی", "age": "سن", "ageText": "{years} سال", "attachements": "پیوست ها", "options": { "end": "خاتمه", "voiceCall": "تماس", "videoCall": "تصویری" }, "attachementTypes": { "image": "عکس", "file": "فایل", "voice": "پیام صوتی", "video": "ویدیو", "request": "درخواست" }, "messageOptions": { "edit": "ویرایش پیام", "delete": "حذف پیام", "copy": "کپی", "select": "انتخاب", "reply": "پاسخ", "deselect": "لغو انتخاب" }, "barOptions": { "endChat": "خاتمه مکالمه", "deleteMessages": "حذف پیام ها" }, "placeholder": "بنویسید ...", "chatLocked": "گفتگو تمام شده", "noConversationSelected": "هنوز مکالمه ای انتخاب نشده", "noMessages": "هیچ پیامی تبادل نشده", "swipeToCancel": "برای لغو بکشید", "cancel": "لغو", "online": "آنلاین", "file": { "calculating": "در حال محاسبه", "attachMedia": "عکس یا ویدیو", "attachFile": "فایل", "sendImage": "ارسال تصویر", "sendImages": "ارسال تصاویر", "sendFile": "ارسال فایل", "cancel": "انصراف" }, "permissions": { "permissionTitle": "دسترسی دوربین و میکروفون", "description": " برای اینکه بتونی توی تماس‌های تصویری شرکت کنی یا پیام صوتی بفرستی، نیاز داریم به دوربین و میکروفونت دسترسی داشته باشیم.", "allow": "تایید دسترسی", "notNow": "الان نه", "retry": "تلاش مجدد", "mic": { "title": "دسترسی میکروفون", "description": "برای ارسال پیام صوتی و برقراری تماس تصویری به دسترسی میکروفون شما نیاز داریم." }, "cam": { "title": "دسترسی دوربین", "description": "برای ارسال پیام ویدیویی و برقراری تماس تصویری به دسترسی دوربین شما نیاز داریم." }, "micError": { "title": "میکروفون شما غیرفعال است", "description": "برای ارسال پیام صوتی یا تماس، نیاز به تایید دسترسی میکروفون داریم." }, "camError": { "title": "خطای دسترسی به دوربین", "description": "برای ارسال پیام و تماس ویدیویی نیاز به تایید دسترسی دوربین داریم." }, "screen": { "title": "دسترسی به صفحه", "description": "بعد از زدن دکمه تایید لطفا صفحه یا زبانه انتخابی خویش را برای به اشتراک گذاری انتخاب نمایید." }, "screenError": { "title": "خطا در دسترسی به صفحه", "description": "دسترسی به تصویر صفحه با خطا مواجه شد. برای اشتراک گذاری تصویر صفحه شما نیازمند تایید دسترسی به صفحه هستیم." } }, "you": "شما", "copiedMessage": "پیام با موفقیت به کلیپ بورد الصاق شد.", "editFailed": "ویرایش پیام انجام نشد. دوباره تلاش کنید.", "deleteFailed": "حذف پیام انجام نشد. دوباره تلاش کنید.", "unreadMessages": "خوانده نشده.", "caption": "کپشن", "send": "ارسال", "delete": { "title": "حذف پیام", "singleMessage": "آیا از حذف پیام اطمینان دارید ؟", "multipleMessages": "آیا از حذف {count} پیام اطمینان دارید؟", "confirm": "حذف", "requestTitle": "لغو درخواست", "request": "آیا از لغو درخواست خود اطمینان دارید ؟" }, "call": { "title": "تماس", "you": "شما", "active": "تماس برقرار است", "participants": "{count} شرکت‌کننده", "yourPresentation": "ارائه شما", "presentationOf": "ارائه {name}", "cameraIsOff": "دوربین خاموش است", "deviceDoesntSupport": "دستگاه شما از این قابلیت پشتیبانی نمیکند.", "errors": { "noMicDevice": "میکروفونی شناسایی نشد", "noCameraDevice": "دوربینی شناسایی نشد", "cameraDenied": "دسترسی به دوربین رد شد", "micDenied": "دسترسی به میکروفون رد شد", "noMicFound": "میکروفونی یافت نشد", "micAccessError": "خطا در دسترسی به میکروفون", "noCameraFound": "دوربینی یافت نشد", "cameraAccessError": "خطا در دسترسی به دوربین", "mediaInitError": "خطا در راه‌اندازی دستگاه‌های رسانه‌ای", "screenShareMobileUnsupported": "اشتراک‌گذاری صفحه در دستگاه‌های موبایل پشتیبانی نمی‌شود", "screenShareBrowserUnsupported": "اشتراک‌گذاری صفحه در این مرورگر پشتیبانی نمی‌شود", "screenShareDenied": "دسترسی به اشتراک‌گذاری صفحه رد شد", "screenAccessError": "امکان دسترسی به صفحه وجود ندارد", "screenShareMobileMaybeUnavailable": "ممکن است اشتراک‌گذاری صفحه در دستگاه‌های موبایل در دسترس نباشد", "screenShareStartFailed": "راه‌اندازی اشتراک‌گذاری صفحه ناموفق بود", "cameraUnavailable": "دوربین در دسترس نیست", "flashlightToggleFailed": "تغییر حالت چراغ قوه ناموفق بود" }, "controls": { "endCall": "پایان تماس", "minimize": "کوچک کردن", "maximize": "بازگشت به تماس", "mute": "قطع میکروفون", "unmute": "وصل میکروفون", "cameraOff": "خاموش کردن دوربین", "cameraOn": "روشن کردن دوربین", "shareScreen": "اشتراک‌گذاری صفحه", "stopSharing": "توقف اشتراک‌گذاری", "fullscreen": "تمام صفحه", "exitFullscreen": "خروج از تمام صفحه", "flashlight": "چراغ‌قوه", "cameras": "دوربین‌های موجود", "chooseCamera": "انتخاب دوربین", "pauseVideo": "توقف ویدیو", "playVideo": "پخش ویدیو", "nextParticipant": "نمایش شرکت‌کننده بعدی" } }, "board": { "title": "تخته", "selectColor": "انتخاب رنگ", "page": "صفحه {page}", "addPage": "صفحه جدید", "confirm": "تایید", "savedSuccessfully": "تصویر با موفقیت ذخیره سازی شد." } };
203
203
  const chatFa = {
204
204
  chat: chat$1
205
205
  };
@@ -575,7 +575,7 @@ const useCallStore = pinia.defineStore("call-modal", () => {
575
575
  );
576
576
  }, 1e3);
577
577
  };
578
- const startCall = (id) => {
578
+ const startCall = (id, { video = true } = {}) => {
579
579
  if (isActive.value) {
580
580
  isMinimized.value = false;
581
581
  return;
@@ -591,7 +591,7 @@ const useCallStore = pinia.defineStore("call-modal", () => {
591
591
  channelId.value = id;
592
592
  isActive.value = true;
593
593
  isMinimized.value = false;
594
- void Promise.resolve().then(() => require("./session-BwgUu6F3.cjs")).then(({ createCallSession }) => {
594
+ void Promise.resolve().then(() => require("./session-DLxWccUj.cjs")).then(({ createCallSession }) => {
595
595
  if (current !== attempt) return;
596
596
  const call = createCallSession({
597
597
  handlers: callHandlers,
@@ -601,7 +601,8 @@ const useCallStore = pinia.defineStore("call-modal", () => {
601
601
  name: () => profileStore.userName ?? "",
602
602
  avatar: () => profileStore.userAvatar
603
603
  },
604
- notify: (key) => openToast(t(key), "error")
604
+ notify: (key) => openToast(t(key), "error"),
605
+ video
605
606
  });
606
607
  session.value = vue.markRaw(call);
607
608
  void call.start();
@@ -1803,7 +1804,7 @@ const _hoisted_6$b = {
1803
1804
  };
1804
1805
  const _hoisted_7$a = { class: "text-chat-muted text-[11px]" };
1805
1806
  const _hoisted_8$5 = { class: "w-full flex items-center justify-between mt-0.5" };
1806
- const _hoisted_9$4 = { class: "flex items-center gap-x-1.5 flex-1 overflow-hidden" };
1807
+ const _hoisted_9$3 = { class: "flex items-center gap-x-1.5 flex-1 overflow-hidden" };
1807
1808
  const _hoisted_10$3 = {
1808
1809
  key: 0,
1809
1810
  class: "max-w-full truncate text-body-sm flex items-center gap-x-1"
@@ -1930,7 +1931,7 @@ const _sfc_main$H = /* @__PURE__ */ vue.defineComponent({
1930
1931
  ])) : vue.createCommentVNode("", true)
1931
1932
  ]),
1932
1933
  vue.createElementVNode("div", _hoisted_8$5, [
1933
- vue.createElementVNode("div", _hoisted_9$4, [
1934
+ vue.createElementVNode("div", _hoisted_9$3, [
1934
1935
  draft2.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_10$3, [
1935
1936
  vue.createElementVNode("span", _hoisted_11$3, vue.toDisplayString(vue.unref(t)("draft")) + ":", 1),
1936
1937
  vue.createVNode(_sfc_main$J, {
@@ -2092,7 +2093,7 @@ const _sfc_main$E = /* @__PURE__ */ vue.defineComponent({
2092
2093
  };
2093
2094
  }
2094
2095
  });
2095
- const _hoisted_1$x = { class: "vue-chat flex h-full w-full flex-col overflow-hidden border border-chat-outline-variant bg-chat-background" };
2096
+ const _hoisted_1$x = ["dir"];
2096
2097
  const _hoisted_2$u = { class: "flex w-full flex-1 flex-col overflow-hidden" };
2097
2098
  const _hoisted_3$n = { class: "flex w-full shrink-0 items-center gap-x-2 px-5 py-2" };
2098
2099
  const _hoisted_4$l = {
@@ -2107,6 +2108,7 @@ const _sfc_main$D = /* @__PURE__ */ vue.defineComponent({
2107
2108
  __name: "ChatList",
2108
2109
  setup(__props) {
2109
2110
  const { t } = useLocalI18n(chatList);
2111
+ const { dir } = useDirection();
2110
2112
  const chatStore = useChatStore();
2111
2113
  const activeFilter = vue.ref("");
2112
2114
  const searchText = vue.ref("");
@@ -2151,7 +2153,10 @@ const _sfc_main$D = /* @__PURE__ */ vue.defineComponent({
2151
2153
  });
2152
2154
  return (_ctx, _cache) => {
2153
2155
  const _component_BVirtualVerticalList = _sfc_main$L;
2154
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$x, [
2156
+ return vue.openBlock(), vue.createElementBlock("div", {
2157
+ dir: vue.unref(dir),
2158
+ class: "vue-chat flex h-full w-full flex-col overflow-hidden border border-chat-outline-variant bg-chat-background"
2159
+ }, [
2155
2160
  vue.createVNode(_sfc_main$E, {
2156
2161
  modelValue: searchText.value,
2157
2162
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => searchText.value = $event),
@@ -2199,7 +2204,7 @@ const _sfc_main$D = /* @__PURE__ */ vue.defineComponent({
2199
2204
  }, null, 8, ["image-path", "title"])
2200
2205
  ]))
2201
2206
  ])
2202
- ]);
2207
+ ], 8, _hoisted_1$x);
2203
2208
  };
2204
2209
  }
2205
2210
  });
@@ -2289,6 +2294,7 @@ const _sfc_main$C = /* @__PURE__ */ vue.defineComponent({
2289
2294
  const visible = vue.useModel(__props, "visible");
2290
2295
  const slotNames = Object.keys(vue.useSlots());
2291
2296
  const isSheet = core.useMediaQuery("(max-width: 767.98px)");
2297
+ const { dir } = useDirection();
2292
2298
  return (_ctx, _cache) => {
2293
2299
  return vue.openBlock(), vue.createBlock(vue.unref(Dialog), vue.mergeProps({
2294
2300
  visible: visible.value,
@@ -2297,7 +2303,8 @@ const _sfc_main$C = /* @__PURE__ */ vue.defineComponent({
2297
2303
  position: vue.unref(isSheet) ? "bottom" : "center",
2298
2304
  draggable: false,
2299
2305
  style: { width: __props.width },
2300
- breakpoints: { "767.98px": "100vw" }
2306
+ breakpoints: { "767.98px": "100vw" },
2307
+ dir: vue.unref(dir)
2301
2308
  }, _ctx.$attrs, {
2302
2309
  class: ["vue-chat", vue.unref(isSheet) && "m-0! rounded-b-none!"]
2303
2310
  }), vue.createSlots({ _: 2 }, [
@@ -2309,7 +2316,7 @@ const _sfc_main$C = /* @__PURE__ */ vue.defineComponent({
2309
2316
  ])
2310
2317
  };
2311
2318
  })
2312
- ]), 1040, ["visible", "position", "style", "class"]);
2319
+ ]), 1040, ["visible", "position", "style", "dir", "class"]);
2313
2320
  };
2314
2321
  }
2315
2322
  });
@@ -2597,15 +2604,15 @@ const _hoisted_5$e = { class: "h-29 w-full" };
2597
2604
  const _hoisted_6$9 = { class: "p-1" };
2598
2605
  const _hoisted_7$8 = { class: "flex w-full -translate-y-1/2 items-center justify-center absolute z-20" };
2599
2606
  const _hoisted_8$4 = { class: "h-25 w-25 overflow-hidden rounded-full" };
2600
- const _hoisted_9$3 = { class: "flex w-full shrink-0 flex-col items-center justify-center gap-y-2 select-none mt-2" };
2607
+ const _hoisted_9$2 = { class: "flex w-full shrink-0 flex-col items-center justify-center gap-y-2 select-none mt-2" };
2601
2608
  const _hoisted_10$2 = { class: "text-title-md text-chat-on-background" };
2602
2609
  const _hoisted_11$2 = { class: "w-full shrink-0 px-6" };
2603
2610
  const _hoisted_12$2 = { class: "flex w-full items-center justify-center gap-x-2 py-4" };
2604
2611
  const _hoisted_13$2 = { class: "flex w-full flex-col gap-y-4 py-4" };
2605
2612
  const _hoisted_14$2 = { class: "text-body-sm text-chat-muted" };
2606
2613
  const _hoisted_15$1 = { class: "text-body-md text-chat-on-background" };
2607
- const _hoisted_16$1 = { class: "flex min-h-0 w-full flex-1 flex-col select-none" };
2608
- const _hoisted_17$1 = {
2614
+ const _hoisted_16 = { class: "flex min-h-0 w-full flex-1 flex-col select-none" };
2615
+ const _hoisted_17 = {
2609
2616
  key: 0,
2610
2617
  class: "flex h-full w-full min-h-0 flex-col gap-y-1"
2611
2618
  };
@@ -2634,8 +2641,10 @@ const _sfc_main$z = /* @__PURE__ */ vue.defineComponent({
2634
2641
  props: {
2635
2642
  profile: { default: null }
2636
2643
  },
2637
- setup(__props) {
2644
+ emits: ["end"],
2645
+ setup(__props, { emit: __emit }) {
2638
2646
  const props = __props;
2647
+ const emit = __emit;
2639
2648
  const { getYearsPassed } = useDate();
2640
2649
  const callStore = useCallStore();
2641
2650
  const chatStore = useChatStore();
@@ -2682,7 +2691,7 @@ const _sfc_main$z = /* @__PURE__ */ vue.defineComponent({
2682
2691
  {
2683
2692
  title: t("options.end"),
2684
2693
  icon: "PhX",
2685
- active: localProfile.value ? localProfile.value.isActive : false,
2694
+ active: localProfile.value ? localProfile.value.isActive && chatStore.canEndConversation : false,
2686
2695
  key: "end",
2687
2696
  color: "error"
2688
2697
  },
@@ -2769,11 +2778,14 @@ const _sfc_main$z = /* @__PURE__ */ vue.defineComponent({
2769
2778
  if (!action.active) return;
2770
2779
  switch (action.key) {
2771
2780
  case "end":
2781
+ emit("end");
2772
2782
  break;
2773
2783
  case "voice-call":
2774
2784
  case "video-call":
2775
2785
  if (chatStore.activeConversationId && props.profile) {
2776
- callStore.startCall(chatStore.activeConversationId);
2786
+ callStore.startCall(chatStore.activeConversationId, {
2787
+ video: action.key === "video-call"
2788
+ });
2777
2789
  }
2778
2790
  break;
2779
2791
  }
@@ -2831,7 +2843,7 @@ const _sfc_main$z = /* @__PURE__ */ vue.defineComponent({
2831
2843
  ]),
2832
2844
  _cache[1] || (_cache[1] = vue.createElementVNode("div", { class: "h-12.5 w-full" }, null, -1))
2833
2845
  ]),
2834
- vue.createElementVNode("div", _hoisted_9$3, [
2846
+ vue.createElementVNode("div", _hoisted_9$2, [
2835
2847
  vue.withDirectives((vue.openBlock(), vue.createElementBlock("div", _hoisted_10$2, [
2836
2848
  vue.createTextVNode(vue.toDisplayString((_a = localProfile.value) == null ? void 0 : _a.name), 1)
2837
2849
  ])), [
@@ -2891,8 +2903,8 @@ const _sfc_main$z = /* @__PURE__ */ vue.defineComponent({
2891
2903
  }), 128))
2892
2904
  ])
2893
2905
  ]),
2894
- vue.createElementVNode("div", _hoisted_16$1, [
2895
- !shouldShowTabs.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_17$1, [
2906
+ vue.createElementVNode("div", _hoisted_16, [
2907
+ !shouldShowTabs.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_17, [
2896
2908
  fileAttachements.value.length > 0 ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_18, [
2897
2909
  vue.createElementVNode("div", _hoisted_19, vue.toDisplayString(vue.unref(t)("info.files")), 1),
2898
2910
  (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(fileAttachements.value, (file2, index) => {
@@ -3697,6 +3709,7 @@ const _sfc_main$u = /* @__PURE__ */ vue.defineComponent({
3697
3709
  "onUpdate:activeIndex": _cache[4] || (_cache[4] = ($event) => activeIndex.value = $event),
3698
3710
  value: __props.items,
3699
3711
  "full-screen": "",
3712
+ dir: vue.unref(dir),
3700
3713
  "show-thumbnails": hasMany.value,
3701
3714
  "show-item-navigators": hasMany.value,
3702
3715
  "num-visible": __props.items.length,
@@ -3773,7 +3786,7 @@ const _sfc_main$u = /* @__PURE__ */ vue.defineComponent({
3773
3786
  }, null, 8, ["item", "class"])
3774
3787
  ]),
3775
3788
  _: 1
3776
- }, 8, ["visible", "active-index", "value", "show-thumbnails", "show-item-navigators", "num-visible", "pt"]);
3789
+ }, 8, ["visible", "active-index", "value", "dir", "show-thumbnails", "show-item-navigators", "num-visible", "pt"]);
3777
3790
  };
3778
3791
  }
3779
3792
  });
@@ -3795,7 +3808,7 @@ const _hoisted_8$3 = {
3795
3808
  "data-testid": "message-reader",
3796
3809
  class: "flex select-none items-center gap-x-2.5 px-2 py-1.5"
3797
3810
  };
3798
- const _hoisted_9$2 = { class: "size-8 shrink-0" };
3811
+ const _hoisted_9$1 = { class: "size-8 shrink-0" };
3799
3812
  const _hoisted_10$1 = { class: "flex min-w-0 flex-1 flex-col" };
3800
3813
  const _hoisted_11$1 = { class: "truncate text-label-md text-chat-on-background" };
3801
3814
  const _hoisted_12$1 = {
@@ -3815,6 +3828,7 @@ const _sfc_main$t = /* @__PURE__ */ vue.defineComponent({
3815
3828
  setup(__props, { expose: __expose }) {
3816
3829
  const props = __props;
3817
3830
  const { t } = useLocalI18n(bubbleOptions);
3831
+ const { dir } = useDirection();
3818
3832
  const { formatDateShort, formatTime } = useDate();
3819
3833
  const messagesStore = useMessagesStore();
3820
3834
  const menu = vue.ref(null);
@@ -3969,6 +3983,7 @@ const _sfc_main$t = /* @__PURE__ */ vue.defineComponent({
3969
3983
  ref: menu,
3970
3984
  model: items.value,
3971
3985
  pt,
3986
+ dir: vue.unref(dir),
3972
3987
  class: "vue-chat",
3973
3988
  onHide: onMenuClosed
3974
3989
  }, {
@@ -4029,7 +4044,7 @@ const _sfc_main$t = /* @__PURE__ */ vue.defineComponent({
4029
4044
  })
4030
4045
  ], 64))
4031
4046
  ], 16)) : item.reader ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_8$3, [
4032
- vue.createElementVNode("span", _hoisted_9$2, [
4047
+ vue.createElementVNode("span", _hoisted_9$1, [
4033
4048
  vue.createVNode(_sfc_main$I, {
4034
4049
  contact: readerAvatar(item.reader),
4035
4050
  "show-online": false
@@ -4058,7 +4073,7 @@ const _sfc_main$t = /* @__PURE__ */ vue.defineComponent({
4058
4073
  ], 16))
4059
4074
  ]),
4060
4075
  _: 1
4061
- }, 8, ["model"]);
4076
+ }, 8, ["model", "dir"]);
4062
4077
  };
4063
4078
  }
4064
4079
  });
@@ -5095,21 +5110,20 @@ const _hoisted_2$b = {
5095
5110
  class: "py-3 w-full flex justify-center"
5096
5111
  };
5097
5112
  const _hoisted_3$8 = { class: "select-none md:select-auto w-full" };
5098
- const _hoisted_4$8 = { class: "flex max-w-4/5 items-end gap-x-2" };
5099
- const _hoisted_5$5 = { class: "flex-1 min-w-0" };
5100
- const _hoisted_6$4 = {
5113
+ const _hoisted_4$8 = { class: "flex-1 min-w-0" };
5114
+ const _hoisted_5$5 = {
5101
5115
  key: 1,
5102
5116
  class: "max-w-full wrap-break-word px-2.5 py-1.5"
5103
5117
  };
5104
- const _hoisted_7$3 = {
5118
+ const _hoisted_6$4 = {
5105
5119
  key: 5,
5106
5120
  class: "flex justify-end px-2 pb-1"
5107
5121
  };
5108
- const _hoisted_8$2 = {
5122
+ const _hoisted_7$3 = {
5109
5123
  key: 1,
5110
5124
  class: "relative"
5111
5125
  };
5112
- const _hoisted_9$1 = {
5126
+ const _hoisted_8$2 = {
5113
5127
  key: 0,
5114
5128
  class: "size-8 shrink-0"
5115
5129
  };
@@ -5155,12 +5169,15 @@ const _sfc_main$f = /* @__PURE__ */ vue.defineComponent({
5155
5169
  const groupedWithNext = vue.computed(
5156
5170
  () => sameGroup(props.message, props.message.nextMessage)
5157
5171
  );
5172
+ const sideClass = vue.computed(
5173
+ () => isMine.value ? "justify-end rtl:justify-start" : "justify-start rtl:justify-end"
5174
+ );
5158
5175
  const roundingClasses = vue.computed(() => {
5159
5176
  const prev = groupedWithPrev.value;
5160
5177
  const next = groupedWithNext.value;
5161
5178
  if (isMine.value)
5162
- return [prev && "rounded-ss-md", next ? "rounded-es-md" : "rounded-es-xs"];
5163
- return [prev && "rounded-se-md", next ? "rounded-ee-md" : "rounded-ee-xs"];
5179
+ return [prev && "rounded-tr-md", next ? "rounded-br-md" : "rounded-br-xs"];
5180
+ return [prev && "rounded-tl-md", next ? "rounded-bl-md" : "rounded-bl-xs"];
5164
5181
  });
5165
5182
  const uploadData = vue.computed(
5166
5183
  () => messagesStore.uploadProgress.get(props.message.id)
@@ -5226,15 +5243,17 @@ const _sfc_main$f = /* @__PURE__ */ vue.defineComponent({
5226
5243
  }, null, 8, ["message", "contact"])
5227
5244
  ])) : (vue.openBlock(), vue.createElementBlock("div", vue.mergeProps({
5228
5245
  key: 2,
5229
- class: ["flex items-center flex-1 min-w-0 relative", { "justify-start": isMine.value, "justify-end": !isMine.value }],
5246
+ class: ["flex items-center flex-1 min-w-0 relative", sideClass.value],
5230
5247
  onClick: handleLeftClick
5231
5248
  }, vue.toHandlers(vue.unref(longPress), true)), [
5232
5249
  vue.createElementVNode("div", _hoisted_3$8, [
5233
5250
  vue.createElementVNode("div", {
5234
- class: vue.normalizeClass(["w-full flex items-center", { "justify-start": isMine.value, "justify-end": !isMine.value }])
5251
+ class: vue.normalizeClass(["w-full flex items-center", sideClass.value])
5235
5252
  }, [
5236
- vue.createElementVNode("div", _hoisted_4$8, [
5237
- vue.createElementVNode("div", _hoisted_5$5, [
5253
+ vue.createElementVNode("div", {
5254
+ class: vue.normalizeClass(["flex max-w-4/5 items-end gap-x-2", { "flex-row-reverse rtl:flex-row": !isMine.value }])
5255
+ }, [
5256
+ vue.createElementVNode("div", _hoisted_4$8, [
5238
5257
  isTextBased.value ? (vue.openBlock(), vue.createElementBlock("div", {
5239
5258
  key: 0,
5240
5259
  class: vue.normalizeClass(["relative rounded-2xl p-1 shadow-xs", [
@@ -5250,7 +5269,7 @@ const _sfc_main$f = /* @__PURE__ */ vue.defineComponent({
5250
5269
  "is-mine": isMine.value,
5251
5270
  "current-user-id": currentUserId.value
5252
5271
  }, null, 8, ["message", "contact", "is-mine", "current-user-id"])) : vue.createCommentVNode("", true),
5253
- messageType.value === "text" ? (vue.openBlock(), vue.createElementBlock("p", _hoisted_6$4, [
5272
+ messageType.value === "text" ? (vue.openBlock(), vue.createElementBlock("p", _hoisted_5$5, [
5254
5273
  vue.createVNode(_sfc_main$J, {
5255
5274
  text: __props.message.text
5256
5275
  }, null, 8, ["text"]),
@@ -5277,13 +5296,13 @@ const _sfc_main$f = /* @__PURE__ */ vue.defineComponent({
5277
5296
  "message-id": __props.message.id,
5278
5297
  "is-sent": __props.message.isSent
5279
5298
  }, null, 8, ["url", "message-id", "is-sent"])) : vue.createCommentVNode("", true),
5280
- messageType.value !== "text" ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_7$3, [
5299
+ messageType.value !== "text" ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_6$4, [
5281
5300
  vue.createVNode(_sfc_main$h, {
5282
5301
  message: __props.message,
5283
5302
  "is-mine": isMine.value
5284
5303
  }, null, 8, ["message", "is-mine"])
5285
5304
  ])) : vue.createCommentVNode("", true)
5286
- ], 2)) : (vue.openBlock(), vue.createElementBlock("div", _hoisted_8$2, [
5305
+ ], 2)) : (vue.openBlock(), vue.createElementBlock("div", _hoisted_7$3, [
5287
5306
  messageType.value === "image" || messageType.value === "multiImage" ? (vue.openBlock(), vue.createBlock(_sfc_main$l, {
5288
5307
  key: 0,
5289
5308
  items: media.value,
@@ -5307,14 +5326,14 @@ const _sfc_main$f = /* @__PURE__ */ vue.defineComponent({
5307
5326
  message: __props.message
5308
5327
  }, null, 8, ["message"])) : vue.createCommentVNode("", true)
5309
5328
  ]),
5310
- !isMine.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_9$1, [
5329
+ !isMine.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_8$2, [
5311
5330
  !groupedWithNext.value ? (vue.openBlock(), vue.createBlock(_sfc_main$I, {
5312
5331
  key: 0,
5313
5332
  contact: __props.contact,
5314
5333
  "show-online": false
5315
5334
  }, null, 8, ["contact"])) : vue.createCommentVNode("", true)
5316
5335
  ])) : vue.createCommentVNode("", true)
5317
- ])
5336
+ ], 2)
5318
5337
  ], 2)
5319
5338
  ]),
5320
5339
  viewerMounted.value && media.value.length > 0 ? (vue.openBlock(), vue.createBlock(_sfc_main$u, {
@@ -5401,19 +5420,18 @@ const _sfc_main$d = /* @__PURE__ */ vue.defineComponent({
5401
5420
  __name: "FloatingDateHeader",
5402
5421
  props: {
5403
5422
  label: {},
5404
- opacity: {},
5405
- offset: { type: Boolean }
5423
+ opacity: {}
5406
5424
  },
5407
5425
  setup(__props) {
5408
5426
  return (_ctx, _cache) => {
5409
5427
  return vue.openBlock(), vue.createElementBlock("div", {
5410
- class: vue.normalizeClass([[__props.offset ? "top-12" : "top-4"], "absolute left-0 right-0 z-20 flex justify-center pointer-events-none transition-opacity duration-200"]),
5428
+ class: "absolute top-4 left-0 right-0 z-20 flex justify-center pointer-events-none transition-opacity duration-200",
5411
5429
  style: vue.normalizeStyle({ opacity: __props.opacity })
5412
5430
  }, [
5413
5431
  __props.label ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$b, [
5414
5432
  vue.createElementVNode("div", _hoisted_2$9, vue.toDisplayString(__props.label), 1)
5415
5433
  ])) : vue.createCommentVNode("", true)
5416
- ], 6);
5434
+ ], 4);
5417
5435
  };
5418
5436
  }
5419
5437
  });
@@ -5585,7 +5603,6 @@ function useChatMessageList(chatId) {
5585
5603
  function useFlippedVirtualScroll(options2) {
5586
5604
  const {
5587
5605
  scrollContainer,
5588
- hasCall,
5589
5606
  isLoading,
5590
5607
  isLocked,
5591
5608
  onLoadMore
@@ -5626,7 +5643,7 @@ function useFlippedVirtualScroll(options2) {
5626
5643
  }
5627
5644
  const items = virtualizer.value.getVirtualItems();
5628
5645
  if (items.length > 0) {
5629
- const targetOffset = hasCall.value ? 88 : 44;
5646
+ const targetOffset = 44;
5630
5647
  const physicalTopOfViewport = el.scrollHeight - el.clientHeight - el.scrollTop;
5631
5648
  const targetPhysicalTop = physicalTopOfViewport + targetOffset;
5632
5649
  let closestIndex = items[0].index;
@@ -5693,10 +5710,7 @@ function useFlippedVirtualScroll(options2) {
5693
5710
  }
5694
5711
  };
5695
5712
  }
5696
- const _hoisted_1$9 = {
5697
- key: 0,
5698
- class: "vue-chat relative w-full h-full overflow-hidden"
5699
- };
5713
+ const _hoisted_1$9 = ["dir"];
5700
5714
  const _hoisted_2$8 = { class: "w-full max-w-dvw overflow-x-hidden" };
5701
5715
  const _hoisted_3$7 = ["data-index"];
5702
5716
  const _hoisted_4$7 = { class: "w-full shrink-0 flip-vertical" };
@@ -5710,22 +5724,20 @@ const _sfc_main$b = /* @__PURE__ */ vue.defineComponent({
5710
5724
  setup(__props) {
5711
5725
  const modal = vue.ref(null);
5712
5726
  const chatStore = useChatStore();
5713
- const callStore = useCallStore();
5714
5727
  const messagesStore = useMessagesStore();
5715
5728
  const { t } = useLocalI18n(chatMessages, chat);
5729
+ const { dir } = useDirection();
5716
5730
  const { openToast } = useAppToast();
5717
5731
  const { formatDateShort } = useDate();
5718
5732
  const profileStore = useProfileStore();
5719
5733
  const currentUserId = vue.computed(() => profileStore.userId);
5720
5734
  const chatId = vue.computed(() => chatStore.activeConversationId);
5721
- const hasCall = vue.computed(() => callStore.isActive);
5722
5735
  const lockScroll = vue.computed(() => messagesStore.isOptionMenuOpen);
5723
5736
  const scrollContainer = vue.ref(null);
5724
5737
  const selectedToDelete = vue.ref([]);
5725
5738
  const msgList = useChatMessageList(chatId);
5726
5739
  const scroll = useFlippedVirtualScroll({
5727
5740
  scrollContainer,
5728
- hasCall,
5729
5741
  isLoading: msgList.isLoading,
5730
5742
  isLocked: lockScroll,
5731
5743
  onLoadMore: msgList.loadNextPage
@@ -5838,14 +5850,16 @@ const _sfc_main$b = /* @__PURE__ */ vue.defineComponent({
5838
5850
  });
5839
5851
  return (_ctx, _cache) => {
5840
5852
  return vue.openBlock(), vue.createElementBlock(vue.Fragment, null, [
5841
- __props.contact ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$9, [
5853
+ __props.contact ? (vue.openBlock(), vue.createElementBlock("div", {
5854
+ key: 0,
5855
+ dir: vue.unref(dir),
5856
+ class: "vue-chat relative w-full h-full overflow-hidden"
5857
+ }, [
5842
5858
  vue.createVNode(_sfc_main$d, {
5843
5859
  label: floatingHeader.value,
5844
- opacity: vue.unref(scroll).headerOpacity.value,
5845
- offset: hasCall.value
5846
- }, null, 8, ["label", "opacity", "offset"]),
5860
+ opacity: vue.unref(scroll).headerOpacity.value
5861
+ }, null, 8, ["label", "opacity"]),
5847
5862
  vue.createElementVNode("div", {
5848
- dir: "rtl",
5849
5863
  id: "list",
5850
5864
  ref_key: "scrollContainer",
5851
5865
  ref: scrollContainer,
@@ -5927,7 +5941,7 @@ const _sfc_main$b = /* @__PURE__ */ vue.defineComponent({
5927
5941
  onClick: _cache[2] || (_cache[2] = ($event) => vue.unref(scroll).resetScroll())
5928
5942
  }, null, 8, ["visible", "unseen"])
5929
5943
  ])
5930
- ])) : vue.createCommentVNode("", true),
5944
+ ], 8, _hoisted_1$9)) : vue.createCommentVNode("", true),
5931
5945
  vue.createVNode(_sfc_main$y, {
5932
5946
  ref_key: "modal",
5933
5947
  ref: modal,
@@ -5944,8 +5958,8 @@ const _export_sfc = (sfc, props) => {
5944
5958
  }
5945
5959
  return target;
5946
5960
  };
5947
- const ChatMessages = /* @__PURE__ */ _export_sfc(_sfc_main$b, [["__scopeId", "data-v-01ea74e6"]]);
5948
- const _hoisted_1$8 = { class: "vue-chat relative z-20 w-full" };
5961
+ const ChatMessages = /* @__PURE__ */ _export_sfc(_sfc_main$b, [["__scopeId", "data-v-cb7cc93f"]]);
5962
+ const _hoisted_1$8 = ["dir"];
5949
5963
  const _hoisted_2$7 = {
5950
5964
  key: 0,
5951
5965
  class: "relative z-50 flex h-16 w-full items-center justify-between gap-x-4 border-b border-b-chat-outline-variant bg-chat-background py-4 px-5 md:h-20"
@@ -5969,8 +5983,6 @@ const _hoisted_12 = { class: "h-full w-full" };
5969
5983
  const _hoisted_13 = { class: "flex flex-col gap-y-1.5" };
5970
5984
  const _hoisted_14 = { class: "h-4 w-32" };
5971
5985
  const _hoisted_15 = { class: "h-3 w-20" };
5972
- const _hoisted_16 = { class: "absolute bottom-0 z-20 h-0 w-full overflow-visible" };
5973
- const _hoisted_17 = { class: "flex-1 select-none text-label-md text-white" };
5974
5986
  const _sfc_main$a = /* @__PURE__ */ vue.defineComponent({
5975
5987
  __name: "ChatPageBar",
5976
5988
  props: {
@@ -5993,15 +6005,12 @@ const _sfc_main$a = /* @__PURE__ */ vue.defineComponent({
5993
6005
  const messagesStore = useMessagesStore();
5994
6006
  const { formatRelativeDate } = useDate();
5995
6007
  const { t } = useLocalI18n(chatPageBar);
6008
+ const { dir } = useDirection();
5996
6009
  const callStore = useCallStore();
5997
6010
  const chatStore = useChatStore();
5998
6011
  const currentConversationId = vue.computed(() => chatStore.activeConversationId);
5999
6012
  const isSelectMode = vue.computed(() => messagesStore.isSelectMode);
6000
6013
  const selectedChat = vue.computed(() => props.contact);
6001
- const callData = vue.computed(() => ({
6002
- show: callStore.isActive,
6003
- duration: formatDuration$1(callStore.elapsedTime)
6004
- }));
6005
6014
  const openProfile = () => {
6006
6015
  emit("open-profile");
6007
6016
  };
@@ -6013,13 +6022,20 @@ const _sfc_main$a = /* @__PURE__ */ vue.defineComponent({
6013
6022
  callStore.startCall(currentConversationId.value);
6014
6023
  }
6015
6024
  };
6016
- const backToCall = () => {
6017
- callStore.maximize();
6018
- };
6019
6025
  return (_ctx, _cache) => {
6020
6026
  const _component_BIcon = _sfc_main$K;
6021
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$8, [
6027
+ return vue.openBlock(), vue.createElementBlock("div", {
6028
+ dir: vue.unref(dir),
6029
+ class: "vue-chat relative z-20 w-full"
6030
+ }, [
6022
6031
  selectedChat.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$7, [
6032
+ vue.createVNode(_sfc_main$F, {
6033
+ icon: "PhArrowLeft",
6034
+ "icon-class": "size-6 rtl:-scale-x-100",
6035
+ label: vue.unref(t)("actions.back"),
6036
+ class: "shrink-0 md:hidden!",
6037
+ onClick: goBack
6038
+ }, null, 8, ["label"]),
6023
6039
  vue.createElementVNode("div", _hoisted_3$6, [
6024
6040
  vue.createVNode(vue.unref(Button), {
6025
6041
  text: "",
@@ -6074,6 +6090,7 @@ const _sfc_main$a = /* @__PURE__ */ vue.defineComponent({
6074
6090
  ref: "optionsMenu",
6075
6091
  model: menuItems.value,
6076
6092
  popup: "",
6093
+ dir: vue.unref(dir),
6077
6094
  class: "vue-chat"
6078
6095
  }, {
6079
6096
  itemicon: vue.withCtx(({ item }) => [
@@ -6083,18 +6100,11 @@ const _sfc_main$a = /* @__PURE__ */ vue.defineComponent({
6083
6100
  }, null, 8, ["icon", "class"])
6084
6101
  ]),
6085
6102
  _: 1
6086
- }, 8, ["model"])
6103
+ }, 8, ["model", "dir"])
6087
6104
  ])
6088
6105
  ], 2)
6089
6106
  ])
6090
- ]),
6091
- vue.createVNode(_sfc_main$F, {
6092
- icon: "PhArrowLeft",
6093
- "icon-class": "size-6",
6094
- label: vue.unref(t)("actions.back"),
6095
- class: "md:hidden!",
6096
- onClick: goBack
6097
- }, null, 8, ["label"])
6107
+ ])
6098
6108
  ])) : currentConversationId.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_10, [
6099
6109
  vue.createElementVNode("div", _hoisted_11, [
6100
6110
  vue.withDirectives(vue.createElementVNode("div", _hoisted_12, null, 512), [
@@ -6109,30 +6119,8 @@ const _sfc_main$a = /* @__PURE__ */ vue.defineComponent({
6109
6119
  [vue.unref(loadingDirective), true]
6110
6120
  ])
6111
6121
  ])
6112
- ])) : vue.createCommentVNode("", true),
6113
- vue.createElementVNode("div", _hoisted_16, [
6114
- vue.createElementVNode("div", {
6115
- class: vue.normalizeClass(["flex w-full items-center overflow-hidden whitespace-nowrap bg-diamond-primary-secondary text-wrap px-2 transition-all duration-200 ease-in-out", [callData.value.show ? "h-11" : "h-0"]])
6116
- }, [
6117
- vue.createElementVNode("div", {
6118
- class: vue.normalizeClass(["flex w-full items-center gap-x-3 transition-all duration-200 ease-in-out", [callData.value.show ? "opacity-100" : "opacity-0"]])
6119
- }, [
6120
- vue.createVNode(_component_BIcon, {
6121
- icon: "PhPhoneCall",
6122
- class: "h-5 w-5 shrink-0 fill-white"
6123
- }),
6124
- vue.createElementVNode("div", _hoisted_17, vue.toDisplayString(callData.value.duration), 1),
6125
- vue.createVNode(_sfc_main$F, {
6126
- icon: "PhFrameCorners",
6127
- label: vue.unref(t)("actions.returnToCall"),
6128
- size: "small",
6129
- class: "shrink-0 text-white!",
6130
- onClick: backToCall
6131
- }, null, 8, ["label"])
6132
- ], 2)
6133
- ], 2)
6134
- ])
6135
- ]);
6122
+ ])) : vue.createCommentVNode("", true)
6123
+ ], 8, _hoisted_1$8);
6136
6124
  };
6137
6125
  }
6138
6126
  });
@@ -6267,6 +6255,7 @@ const _sfc_main$7 = /* @__PURE__ */ vue.defineComponent({
6267
6255
  const props = __props;
6268
6256
  const emit = __emit;
6269
6257
  const { t } = useLocalI18n(inputAttachement);
6258
+ const { dir } = useDirection();
6270
6259
  const { openToast } = useAppToast();
6271
6260
  const menu = vue.ref(null);
6272
6261
  const dialogOpen = vue.ref(false);
@@ -6380,6 +6369,7 @@ const _sfc_main$7 = /* @__PURE__ */ vue.defineComponent({
6380
6369
  ref: menu,
6381
6370
  model: menuItems.value,
6382
6371
  popup: "",
6372
+ dir: vue.unref(dir),
6383
6373
  class: "vue-chat"
6384
6374
  }, {
6385
6375
  itemicon: vue.withCtx(({ item }) => [
@@ -6389,7 +6379,7 @@ const _sfc_main$7 = /* @__PURE__ */ vue.defineComponent({
6389
6379
  }, null, 8, ["icon"])
6390
6380
  ]),
6391
6381
  _: 1
6392
- }, 8, ["model"]),
6382
+ }, 8, ["model", "dir"]),
6393
6383
  vue.createVNode(_sfc_main$C, {
6394
6384
  visible: dialogOpen.value,
6395
6385
  "onUpdate:visible": _cache[3] || (_cache[3] = ($event) => dialogOpen.value = $event),
@@ -7128,10 +7118,7 @@ function useInputDraft(editor, isEditing) {
7128
7118
  });
7129
7119
  return { restoreDraft };
7130
7120
  }
7131
- const _hoisted_1$2 = {
7132
- dir: "rtl",
7133
- class: "vue-chat w-full relative"
7134
- };
7121
+ const _hoisted_1$2 = ["dir"];
7135
7122
  const _hoisted_2$2 = { class: "flex-1 flex items-end gap-x-5" };
7136
7123
  const _hoisted_3$1 = { class: "min-h-11 flex items-center w-full" };
7137
7124
  const _hoisted_4$1 = ["onKeydown", "data-placeholder"];
@@ -7146,6 +7133,7 @@ const _sfc_main$2 = /* @__PURE__ */ vue.defineComponent({
7146
7133
  setup(__props, { expose: __expose, emit: __emit }) {
7147
7134
  const props = __props;
7148
7135
  const { t } = useLocalI18n(chatInput, chat);
7136
+ const { dir } = useDirection();
7149
7137
  const { requestWithPopup, checkMediaStatus } = useAppPermissions();
7150
7138
  const messagesStore = useMessagesStore();
7151
7139
  const chatStore = useChatStore();
@@ -7406,7 +7394,10 @@ const _sfc_main$2 = /* @__PURE__ */ vue.defineComponent({
7406
7394
  } });
7407
7395
  return (_ctx, _cache) => {
7408
7396
  const _component_BEmojiPicker = _sfc_main$9;
7409
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$2, [
7397
+ return vue.openBlock(), vue.createElementBlock("div", {
7398
+ dir: vue.unref(dir),
7399
+ class: "vue-chat w-full relative"
7400
+ }, [
7410
7401
  vue.createVNode(_sfc_main$6, {
7411
7402
  ref: "videoDisplay",
7412
7403
  stream: vue.unref(mediaStream),
@@ -7458,7 +7449,7 @@ const _sfc_main$2 = /* @__PURE__ */ vue.defineComponent({
7458
7449
  onMouseup: _cache[3] || (_cache[3] = //@ts-ignore
7459
7450
  (...args) => vue.unref(editor).saveCursorPosition && vue.unref(editor).saveCursorPosition(...args)),
7460
7451
  "data-placeholder": inputPlaceholder.value,
7461
- class: "text-body-md text-on-surface outline-none flex-1 bg-transparent z-10 max-h-[144px] overflow-y-auto hide-scrollbar leading-6 py-1 cursor-text whitespace-pre-wrap break-words empty:before:content-[attr(data-placeholder)] empty:before:text-chat-muted pointer-events-auto"
7452
+ class: "text-body-md text-on-surface outline-none flex-1 bg-transparent z-10 [unicode-bidi:plaintext] max-h-[144px] overflow-y-auto hide-scrollbar leading-6 py-1 cursor-text whitespace-pre-wrap break-words empty:before:content-[attr(data-placeholder)] empty:before:text-chat-muted pointer-events-auto"
7462
7453
  }, null, 40, _hoisted_4$1)
7463
7454
  ]),
7464
7455
  vue.createElementVNode("div", _hoisted_5$1, [
@@ -7475,6 +7466,7 @@ const _sfc_main$2 = /* @__PURE__ */ vue.defineComponent({
7475
7466
  }, null, 8, ["label", "disabled"]),
7476
7467
  vue.createVNode(vue.unref(Popover), {
7477
7468
  ref: "emojiPopover",
7469
+ dir: vue.unref(dir),
7478
7470
  class: "vue-chat"
7479
7471
  }, {
7480
7472
  default: vue.withCtx(() => [
@@ -7484,7 +7476,7 @@ const _sfc_main$2 = /* @__PURE__ */ vue.defineComponent({
7484
7476
  })) : vue.createCommentVNode("", true)
7485
7477
  ]),
7486
7478
  _: 1
7487
- }, 512),
7479
+ }, 8, ["dir"]),
7488
7480
  vue.createVNode(_sfc_main$F, {
7489
7481
  icon: "PhSmiley",
7490
7482
  "icon-class": "size-6",
@@ -7523,11 +7515,11 @@ const _sfc_main$2 = /* @__PURE__ */ vue.defineComponent({
7523
7515
  onSelect: handleEmojiSelect
7524
7516
  })) : vue.createCommentVNode("", true)
7525
7517
  ], 2)
7526
- ]);
7518
+ ], 8, _hoisted_1$2);
7527
7519
  };
7528
7520
  }
7529
7521
  });
7530
- const _hoisted_1$1 = { class: "vue-chat h-full w-full bg-chat-surface" };
7522
+ const _hoisted_1$1 = ["dir"];
7531
7523
  const _hoisted_2$1 = { class: "flex h-full w-full" };
7532
7524
  const _hoisted_3 = { class: "h-16 w-full bg-chat-background md:h-20" };
7533
7525
  const _hoisted_4 = {
@@ -7549,6 +7541,7 @@ const _sfc_main$1 = /* @__PURE__ */ vue.defineComponent({
7549
7541
  setup(__props) {
7550
7542
  const chatStore = useChatStore();
7551
7543
  const { t } = useLocalI18n(chatView);
7544
+ const { dir } = useDirection();
7552
7545
  const chatInput2 = vue.ref(null);
7553
7546
  const chatId = vue.computed(() => chatStore.activeConversationId);
7554
7547
  const isProfile = vue.computed(() => chatStore.profileViewOpen);
@@ -7611,9 +7604,15 @@ const _sfc_main$1 = /* @__PURE__ */ vue.defineComponent({
7611
7604
  return (_ctx, _cache) => {
7612
7605
  var _a, _b;
7613
7606
  const _component_BIcon = _sfc_main$K;
7614
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$1, [
7607
+ return vue.openBlock(), vue.createElementBlock("div", {
7608
+ dir: vue.unref(dir),
7609
+ class: "vue-chat h-full w-full bg-chat-surface"
7610
+ }, [
7615
7611
  vue.createElementVNode("div", _hoisted_2$1, [
7616
- vue.createVNode(_sfc_main$z, { profile: selectedChat.value }, null, 8, ["profile"]),
7612
+ vue.createVNode(_sfc_main$z, {
7613
+ profile: selectedChat.value,
7614
+ onEnd: _cache[0] || (_cache[0] = ($event) => handleOption("end-chat"))
7615
+ }, null, 8, ["profile"]),
7617
7616
  vue.withDirectives(vue.createElementVNode("div", {
7618
7617
  class: vue.normalizeClass(["h-full flex-1 flex-col items-center justify-between", isProfile.value ? "hidden md:flex" : "flex"])
7619
7618
  }, [
@@ -7679,13 +7678,14 @@ const _sfc_main$1 = /* @__PURE__ */ vue.defineComponent({
7679
7678
  vue.createVNode(vue.unref(Toast), {
7680
7679
  group: vue.unref(TOAST_GROUP),
7681
7680
  position: "bottom-center",
7681
+ dir: vue.unref(dir),
7682
7682
  class: "vue-chat"
7683
- }, null, 8, ["group"])
7684
- ]);
7683
+ }, null, 8, ["group", "dir"])
7684
+ ], 8, _hoisted_1$1);
7685
7685
  };
7686
7686
  }
7687
7687
  });
7688
- const _hoisted_1 = { class: "vue-chat flex w-full h-full max-h-full overflow-hidden font-chat-family text-chat-base text-chat-on-background bg-chat-background" };
7688
+ const _hoisted_1 = ["dir"];
7689
7689
  const _hoisted_2 = {
7690
7690
  key: 1,
7691
7691
  class: "w-full h-full flex items-center justify-center"
@@ -7696,16 +7696,20 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent({
7696
7696
  renderCall: { type: Boolean, default: true }
7697
7697
  },
7698
7698
  setup(__props) {
7699
- const Call2 = vue.defineAsyncComponent(() => Promise.resolve().then(() => require("./Call-D48LfnDv.cjs")));
7699
+ const Call2 = vue.defineAsyncComponent(() => Promise.resolve().then(() => require("./Call-CDT92h1x.cjs")));
7700
7700
  const props = __props;
7701
7701
  const slots = vue.useSlots();
7702
7702
  const chatStore = useChatStore();
7703
7703
  const callStore = useCallStore();
7704
7704
  const { t } = useLocalI18n(chatPage);
7705
+ const { dir } = useDirection();
7705
7706
  const isInChat = vue.computed(() => chatStore.activeConversationId !== null);
7706
7707
  return (_ctx, _cache) => {
7707
7708
  return vue.openBlock(), vue.createElementBlock(vue.Fragment, null, [
7708
- vue.createElementVNode("div", _hoisted_1, [
7709
+ vue.createElementVNode("div", {
7710
+ dir: vue.unref(dir),
7711
+ class: "vue-chat flex w-full h-full max-h-full overflow-hidden font-chat-family text-chat-base text-chat-on-background bg-chat-background"
7712
+ }, [
7709
7713
  vue.createElementVNode("div", {
7710
7714
  class: vue.normalizeClass(["relative h-full flex-1", isInChat.value ? "block" : "hidden md:block"])
7711
7715
  }, [
@@ -7745,7 +7749,7 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent({
7745
7749
  }, [
7746
7750
  vue.createVNode(_sfc_main$D)
7747
7751
  ], 2)
7748
- ]),
7752
+ ], 8, _hoisted_1),
7749
7753
  props.renderCall && vue.unref(callStore).session ? (vue.openBlock(), vue.createBlock(vue.unref(Call2), { key: 0 })) : vue.createCommentVNode("", true)
7750
7754
  ], 64);
7751
7755
  };
@@ -7809,7 +7813,7 @@ function createChat(options2) {
7809
7813
  }
7810
7814
  };
7811
7815
  }
7812
- const Call = vue.defineAsyncComponent(() => Promise.resolve().then(() => require("./Call-D48LfnDv.cjs")));
7816
+ const Call = vue.defineAsyncComponent(() => Promise.resolve().then(() => require("./Call-CDT92h1x.cjs")));
7813
7817
  exports.Call = Call;
7814
7818
  exports.CallMessageType = CallMessageType;
7815
7819
  exports.ChatMessages = ChatMessages;
@@ -7826,6 +7830,7 @@ exports._sfc_main$8 = _sfc_main$2;
7826
7830
  exports._sfc_main$9 = _sfc_main$D;
7827
7831
  exports.chat = chat;
7828
7832
  exports.createChat = createChat;
7833
+ exports.formatDuration = formatDuration$1;
7829
7834
  exports.messageMedia = messageMedia;
7830
7835
  exports.provideCallHandlers = provideCallHandlers;
7831
7836
  exports.useCallStore = useCallStore;
@@ -7835,4 +7840,4 @@ exports.useLocalI18n = useLocalI18n;
7835
7840
  exports.useMediaStore = useMediaStore;
7836
7841
  exports.useMessagesStore = useMessagesStore;
7837
7842
  exports.useProfileStore = useProfileStore;
7838
- //# sourceMappingURL=index-DrcpfLUy.cjs.map
7843
+ //# sourceMappingURL=index-efTNVoBF.cjs.map