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
@@ -168,7 +168,7 @@ const general$2 = { "themes": { "light": "Light", "dark": "Dark" }, "all": "All"
168
168
  const generalEn = {
169
169
  general: general$2
170
170
  };
171
- 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." } };
171
+ 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." } };
172
172
  const chatEn = {
173
173
  chat: chat$2
174
174
  };
@@ -176,7 +176,7 @@ const general$1 = { "themes": { "light": "روشن", "dark": "تاریک" }, "al
176
176
  const generalFa = {
177
177
  general: general$1
178
178
  };
179
- 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": "تصویر با موفقیت ذخیره سازی شد." } };
179
+ 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": "تصویر با موفقیت ذخیره سازی شد." } };
180
180
  const chatFa = {
181
181
  chat: chat$1
182
182
  };
@@ -552,7 +552,7 @@ const useCallStore = defineStore("call-modal", () => {
552
552
  );
553
553
  }, 1e3);
554
554
  };
555
- const startCall = (id) => {
555
+ const startCall = (id, { video = true } = {}) => {
556
556
  if (isActive.value) {
557
557
  isMinimized.value = false;
558
558
  return;
@@ -568,7 +568,7 @@ const useCallStore = defineStore("call-modal", () => {
568
568
  channelId.value = id;
569
569
  isActive.value = true;
570
570
  isMinimized.value = false;
571
- void import("./session-B8Q7eiUV.mjs").then(({ createCallSession }) => {
571
+ void import("./session-CN61aKfb.mjs").then(({ createCallSession }) => {
572
572
  if (current !== attempt) return;
573
573
  const call = createCallSession({
574
574
  handlers: callHandlers,
@@ -578,7 +578,8 @@ const useCallStore = defineStore("call-modal", () => {
578
578
  name: () => profileStore.userName ?? "",
579
579
  avatar: () => profileStore.userAvatar
580
580
  },
581
- notify: (key) => openToast(t(key), "error")
581
+ notify: (key) => openToast(t(key), "error"),
582
+ video
582
583
  });
583
584
  session.value = markRaw(call);
584
585
  void call.start();
@@ -1780,7 +1781,7 @@ const _hoisted_6$b = {
1780
1781
  };
1781
1782
  const _hoisted_7$a = { class: "text-chat-muted text-[11px]" };
1782
1783
  const _hoisted_8$5 = { class: "w-full flex items-center justify-between mt-0.5" };
1783
- const _hoisted_9$4 = { class: "flex items-center gap-x-1.5 flex-1 overflow-hidden" };
1784
+ const _hoisted_9$3 = { class: "flex items-center gap-x-1.5 flex-1 overflow-hidden" };
1784
1785
  const _hoisted_10$3 = {
1785
1786
  key: 0,
1786
1787
  class: "max-w-full truncate text-body-sm flex items-center gap-x-1"
@@ -1907,7 +1908,7 @@ const _sfc_main$H = /* @__PURE__ */ defineComponent({
1907
1908
  ])) : createCommentVNode("", true)
1908
1909
  ]),
1909
1910
  createElementVNode("div", _hoisted_8$5, [
1910
- createElementVNode("div", _hoisted_9$4, [
1911
+ createElementVNode("div", _hoisted_9$3, [
1911
1912
  draft2.value ? (openBlock(), createElementBlock("div", _hoisted_10$3, [
1912
1913
  createElementVNode("span", _hoisted_11$3, toDisplayString(unref(t)("draft")) + ":", 1),
1913
1914
  createVNode(_sfc_main$J, {
@@ -2069,7 +2070,7 @@ const _sfc_main$E = /* @__PURE__ */ defineComponent({
2069
2070
  };
2070
2071
  }
2071
2072
  });
2072
- const _hoisted_1$x = { class: "vue-chat flex h-full w-full flex-col overflow-hidden border border-chat-outline-variant bg-chat-background" };
2073
+ const _hoisted_1$x = ["dir"];
2073
2074
  const _hoisted_2$u = { class: "flex w-full flex-1 flex-col overflow-hidden" };
2074
2075
  const _hoisted_3$n = { class: "flex w-full shrink-0 items-center gap-x-2 px-5 py-2" };
2075
2076
  const _hoisted_4$l = {
@@ -2084,6 +2085,7 @@ const _sfc_main$D = /* @__PURE__ */ defineComponent({
2084
2085
  __name: "ChatList",
2085
2086
  setup(__props) {
2086
2087
  const { t } = useLocalI18n(chatList);
2088
+ const { dir } = useDirection();
2087
2089
  const chatStore = useChatStore();
2088
2090
  const activeFilter = ref("");
2089
2091
  const searchText = ref("");
@@ -2128,7 +2130,10 @@ const _sfc_main$D = /* @__PURE__ */ defineComponent({
2128
2130
  });
2129
2131
  return (_ctx, _cache) => {
2130
2132
  const _component_BVirtualVerticalList = _sfc_main$L;
2131
- return openBlock(), createElementBlock("div", _hoisted_1$x, [
2133
+ return openBlock(), createElementBlock("div", {
2134
+ dir: unref(dir),
2135
+ class: "vue-chat flex h-full w-full flex-col overflow-hidden border border-chat-outline-variant bg-chat-background"
2136
+ }, [
2132
2137
  createVNode(_sfc_main$E, {
2133
2138
  modelValue: searchText.value,
2134
2139
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => searchText.value = $event),
@@ -2176,7 +2181,7 @@ const _sfc_main$D = /* @__PURE__ */ defineComponent({
2176
2181
  }, null, 8, ["image-path", "title"])
2177
2182
  ]))
2178
2183
  ])
2179
- ]);
2184
+ ], 8, _hoisted_1$x);
2180
2185
  };
2181
2186
  }
2182
2187
  });
@@ -2266,6 +2271,7 @@ const _sfc_main$C = /* @__PURE__ */ defineComponent({
2266
2271
  const visible = useModel(__props, "visible");
2267
2272
  const slotNames = Object.keys(useSlots());
2268
2273
  const isSheet = useMediaQuery("(max-width: 767.98px)");
2274
+ const { dir } = useDirection();
2269
2275
  return (_ctx, _cache) => {
2270
2276
  return openBlock(), createBlock(unref(Dialog), mergeProps({
2271
2277
  visible: visible.value,
@@ -2274,7 +2280,8 @@ const _sfc_main$C = /* @__PURE__ */ defineComponent({
2274
2280
  position: unref(isSheet) ? "bottom" : "center",
2275
2281
  draggable: false,
2276
2282
  style: { width: __props.width },
2277
- breakpoints: { "767.98px": "100vw" }
2283
+ breakpoints: { "767.98px": "100vw" },
2284
+ dir: unref(dir)
2278
2285
  }, _ctx.$attrs, {
2279
2286
  class: ["vue-chat", unref(isSheet) && "m-0! rounded-b-none!"]
2280
2287
  }), createSlots({ _: 2 }, [
@@ -2286,7 +2293,7 @@ const _sfc_main$C = /* @__PURE__ */ defineComponent({
2286
2293
  ])
2287
2294
  };
2288
2295
  })
2289
- ]), 1040, ["visible", "position", "style", "class"]);
2296
+ ]), 1040, ["visible", "position", "style", "dir", "class"]);
2290
2297
  };
2291
2298
  }
2292
2299
  });
@@ -2574,15 +2581,15 @@ const _hoisted_5$e = { class: "h-29 w-full" };
2574
2581
  const _hoisted_6$9 = { class: "p-1" };
2575
2582
  const _hoisted_7$8 = { class: "flex w-full -translate-y-1/2 items-center justify-center absolute z-20" };
2576
2583
  const _hoisted_8$4 = { class: "h-25 w-25 overflow-hidden rounded-full" };
2577
- const _hoisted_9$3 = { class: "flex w-full shrink-0 flex-col items-center justify-center gap-y-2 select-none mt-2" };
2584
+ const _hoisted_9$2 = { class: "flex w-full shrink-0 flex-col items-center justify-center gap-y-2 select-none mt-2" };
2578
2585
  const _hoisted_10$2 = { class: "text-title-md text-chat-on-background" };
2579
2586
  const _hoisted_11$2 = { class: "w-full shrink-0 px-6" };
2580
2587
  const _hoisted_12$2 = { class: "flex w-full items-center justify-center gap-x-2 py-4" };
2581
2588
  const _hoisted_13$2 = { class: "flex w-full flex-col gap-y-4 py-4" };
2582
2589
  const _hoisted_14$2 = { class: "text-body-sm text-chat-muted" };
2583
2590
  const _hoisted_15$1 = { class: "text-body-md text-chat-on-background" };
2584
- const _hoisted_16$1 = { class: "flex min-h-0 w-full flex-1 flex-col select-none" };
2585
- const _hoisted_17$1 = {
2591
+ const _hoisted_16 = { class: "flex min-h-0 w-full flex-1 flex-col select-none" };
2592
+ const _hoisted_17 = {
2586
2593
  key: 0,
2587
2594
  class: "flex h-full w-full min-h-0 flex-col gap-y-1"
2588
2595
  };
@@ -2611,8 +2618,10 @@ const _sfc_main$z = /* @__PURE__ */ defineComponent({
2611
2618
  props: {
2612
2619
  profile: { default: null }
2613
2620
  },
2614
- setup(__props) {
2621
+ emits: ["end"],
2622
+ setup(__props, { emit: __emit }) {
2615
2623
  const props = __props;
2624
+ const emit = __emit;
2616
2625
  const { getYearsPassed } = useDate();
2617
2626
  const callStore = useCallStore();
2618
2627
  const chatStore = useChatStore();
@@ -2659,7 +2668,7 @@ const _sfc_main$z = /* @__PURE__ */ defineComponent({
2659
2668
  {
2660
2669
  title: t("options.end"),
2661
2670
  icon: "PhX",
2662
- active: localProfile.value ? localProfile.value.isActive : false,
2671
+ active: localProfile.value ? localProfile.value.isActive && chatStore.canEndConversation : false,
2663
2672
  key: "end",
2664
2673
  color: "error"
2665
2674
  },
@@ -2746,11 +2755,14 @@ const _sfc_main$z = /* @__PURE__ */ defineComponent({
2746
2755
  if (!action.active) return;
2747
2756
  switch (action.key) {
2748
2757
  case "end":
2758
+ emit("end");
2749
2759
  break;
2750
2760
  case "voice-call":
2751
2761
  case "video-call":
2752
2762
  if (chatStore.activeConversationId && props.profile) {
2753
- callStore.startCall(chatStore.activeConversationId);
2763
+ callStore.startCall(chatStore.activeConversationId, {
2764
+ video: action.key === "video-call"
2765
+ });
2754
2766
  }
2755
2767
  break;
2756
2768
  }
@@ -2808,7 +2820,7 @@ const _sfc_main$z = /* @__PURE__ */ defineComponent({
2808
2820
  ]),
2809
2821
  _cache[1] || (_cache[1] = createElementVNode("div", { class: "h-12.5 w-full" }, null, -1))
2810
2822
  ]),
2811
- createElementVNode("div", _hoisted_9$3, [
2823
+ createElementVNode("div", _hoisted_9$2, [
2812
2824
  withDirectives((openBlock(), createElementBlock("div", _hoisted_10$2, [
2813
2825
  createTextVNode(toDisplayString((_a = localProfile.value) == null ? void 0 : _a.name), 1)
2814
2826
  ])), [
@@ -2868,8 +2880,8 @@ const _sfc_main$z = /* @__PURE__ */ defineComponent({
2868
2880
  }), 128))
2869
2881
  ])
2870
2882
  ]),
2871
- createElementVNode("div", _hoisted_16$1, [
2872
- !shouldShowTabs.value ? (openBlock(), createElementBlock("div", _hoisted_17$1, [
2883
+ createElementVNode("div", _hoisted_16, [
2884
+ !shouldShowTabs.value ? (openBlock(), createElementBlock("div", _hoisted_17, [
2873
2885
  fileAttachements.value.length > 0 ? (openBlock(), createElementBlock("div", _hoisted_18, [
2874
2886
  createElementVNode("div", _hoisted_19, toDisplayString(unref(t)("info.files")), 1),
2875
2887
  (openBlock(true), createElementBlock(Fragment, null, renderList(fileAttachements.value, (file2, index) => {
@@ -3674,6 +3686,7 @@ const _sfc_main$u = /* @__PURE__ */ defineComponent({
3674
3686
  "onUpdate:activeIndex": _cache[4] || (_cache[4] = ($event) => activeIndex.value = $event),
3675
3687
  value: __props.items,
3676
3688
  "full-screen": "",
3689
+ dir: unref(dir),
3677
3690
  "show-thumbnails": hasMany.value,
3678
3691
  "show-item-navigators": hasMany.value,
3679
3692
  "num-visible": __props.items.length,
@@ -3750,7 +3763,7 @@ const _sfc_main$u = /* @__PURE__ */ defineComponent({
3750
3763
  }, null, 8, ["item", "class"])
3751
3764
  ]),
3752
3765
  _: 1
3753
- }, 8, ["visible", "active-index", "value", "show-thumbnails", "show-item-navigators", "num-visible", "pt"]);
3766
+ }, 8, ["visible", "active-index", "value", "dir", "show-thumbnails", "show-item-navigators", "num-visible", "pt"]);
3754
3767
  };
3755
3768
  }
3756
3769
  });
@@ -3772,7 +3785,7 @@ const _hoisted_8$3 = {
3772
3785
  "data-testid": "message-reader",
3773
3786
  class: "flex select-none items-center gap-x-2.5 px-2 py-1.5"
3774
3787
  };
3775
- const _hoisted_9$2 = { class: "size-8 shrink-0" };
3788
+ const _hoisted_9$1 = { class: "size-8 shrink-0" };
3776
3789
  const _hoisted_10$1 = { class: "flex min-w-0 flex-1 flex-col" };
3777
3790
  const _hoisted_11$1 = { class: "truncate text-label-md text-chat-on-background" };
3778
3791
  const _hoisted_12$1 = {
@@ -3792,6 +3805,7 @@ const _sfc_main$t = /* @__PURE__ */ defineComponent({
3792
3805
  setup(__props, { expose: __expose }) {
3793
3806
  const props = __props;
3794
3807
  const { t } = useLocalI18n(bubbleOptions);
3808
+ const { dir } = useDirection();
3795
3809
  const { formatDateShort, formatTime } = useDate();
3796
3810
  const messagesStore = useMessagesStore();
3797
3811
  const menu = ref(null);
@@ -3946,6 +3960,7 @@ const _sfc_main$t = /* @__PURE__ */ defineComponent({
3946
3960
  ref: menu,
3947
3961
  model: items.value,
3948
3962
  pt,
3963
+ dir: unref(dir),
3949
3964
  class: "vue-chat",
3950
3965
  onHide: onMenuClosed
3951
3966
  }, {
@@ -4006,7 +4021,7 @@ const _sfc_main$t = /* @__PURE__ */ defineComponent({
4006
4021
  })
4007
4022
  ], 64))
4008
4023
  ], 16)) : item.reader ? (openBlock(), createElementBlock("div", _hoisted_8$3, [
4009
- createElementVNode("span", _hoisted_9$2, [
4024
+ createElementVNode("span", _hoisted_9$1, [
4010
4025
  createVNode(_sfc_main$I, {
4011
4026
  contact: readerAvatar(item.reader),
4012
4027
  "show-online": false
@@ -4035,7 +4050,7 @@ const _sfc_main$t = /* @__PURE__ */ defineComponent({
4035
4050
  ], 16))
4036
4051
  ]),
4037
4052
  _: 1
4038
- }, 8, ["model"]);
4053
+ }, 8, ["model", "dir"]);
4039
4054
  };
4040
4055
  }
4041
4056
  });
@@ -5072,21 +5087,20 @@ const _hoisted_2$b = {
5072
5087
  class: "py-3 w-full flex justify-center"
5073
5088
  };
5074
5089
  const _hoisted_3$8 = { class: "select-none md:select-auto w-full" };
5075
- const _hoisted_4$8 = { class: "flex max-w-4/5 items-end gap-x-2" };
5076
- const _hoisted_5$5 = { class: "flex-1 min-w-0" };
5077
- const _hoisted_6$4 = {
5090
+ const _hoisted_4$8 = { class: "flex-1 min-w-0" };
5091
+ const _hoisted_5$5 = {
5078
5092
  key: 1,
5079
5093
  class: "max-w-full wrap-break-word px-2.5 py-1.5"
5080
5094
  };
5081
- const _hoisted_7$3 = {
5095
+ const _hoisted_6$4 = {
5082
5096
  key: 5,
5083
5097
  class: "flex justify-end px-2 pb-1"
5084
5098
  };
5085
- const _hoisted_8$2 = {
5099
+ const _hoisted_7$3 = {
5086
5100
  key: 1,
5087
5101
  class: "relative"
5088
5102
  };
5089
- const _hoisted_9$1 = {
5103
+ const _hoisted_8$2 = {
5090
5104
  key: 0,
5091
5105
  class: "size-8 shrink-0"
5092
5106
  };
@@ -5132,12 +5146,15 @@ const _sfc_main$f = /* @__PURE__ */ defineComponent({
5132
5146
  const groupedWithNext = computed(
5133
5147
  () => sameGroup(props.message, props.message.nextMessage)
5134
5148
  );
5149
+ const sideClass = computed(
5150
+ () => isMine.value ? "justify-end rtl:justify-start" : "justify-start rtl:justify-end"
5151
+ );
5135
5152
  const roundingClasses = computed(() => {
5136
5153
  const prev = groupedWithPrev.value;
5137
5154
  const next = groupedWithNext.value;
5138
5155
  if (isMine.value)
5139
- return [prev && "rounded-ss-md", next ? "rounded-es-md" : "rounded-es-xs"];
5140
- return [prev && "rounded-se-md", next ? "rounded-ee-md" : "rounded-ee-xs"];
5156
+ return [prev && "rounded-tr-md", next ? "rounded-br-md" : "rounded-br-xs"];
5157
+ return [prev && "rounded-tl-md", next ? "rounded-bl-md" : "rounded-bl-xs"];
5141
5158
  });
5142
5159
  const uploadData = computed(
5143
5160
  () => messagesStore.uploadProgress.get(props.message.id)
@@ -5203,15 +5220,17 @@ const _sfc_main$f = /* @__PURE__ */ defineComponent({
5203
5220
  }, null, 8, ["message", "contact"])
5204
5221
  ])) : (openBlock(), createElementBlock("div", mergeProps({
5205
5222
  key: 2,
5206
- class: ["flex items-center flex-1 min-w-0 relative", { "justify-start": isMine.value, "justify-end": !isMine.value }],
5223
+ class: ["flex items-center flex-1 min-w-0 relative", sideClass.value],
5207
5224
  onClick: handleLeftClick
5208
5225
  }, toHandlers(unref(longPress), true)), [
5209
5226
  createElementVNode("div", _hoisted_3$8, [
5210
5227
  createElementVNode("div", {
5211
- class: normalizeClass(["w-full flex items-center", { "justify-start": isMine.value, "justify-end": !isMine.value }])
5228
+ class: normalizeClass(["w-full flex items-center", sideClass.value])
5212
5229
  }, [
5213
- createElementVNode("div", _hoisted_4$8, [
5214
- createElementVNode("div", _hoisted_5$5, [
5230
+ createElementVNode("div", {
5231
+ class: normalizeClass(["flex max-w-4/5 items-end gap-x-2", { "flex-row-reverse rtl:flex-row": !isMine.value }])
5232
+ }, [
5233
+ createElementVNode("div", _hoisted_4$8, [
5215
5234
  isTextBased.value ? (openBlock(), createElementBlock("div", {
5216
5235
  key: 0,
5217
5236
  class: normalizeClass(["relative rounded-2xl p-1 shadow-xs", [
@@ -5227,7 +5246,7 @@ const _sfc_main$f = /* @__PURE__ */ defineComponent({
5227
5246
  "is-mine": isMine.value,
5228
5247
  "current-user-id": currentUserId.value
5229
5248
  }, null, 8, ["message", "contact", "is-mine", "current-user-id"])) : createCommentVNode("", true),
5230
- messageType.value === "text" ? (openBlock(), createElementBlock("p", _hoisted_6$4, [
5249
+ messageType.value === "text" ? (openBlock(), createElementBlock("p", _hoisted_5$5, [
5231
5250
  createVNode(_sfc_main$J, {
5232
5251
  text: __props.message.text
5233
5252
  }, null, 8, ["text"]),
@@ -5254,13 +5273,13 @@ const _sfc_main$f = /* @__PURE__ */ defineComponent({
5254
5273
  "message-id": __props.message.id,
5255
5274
  "is-sent": __props.message.isSent
5256
5275
  }, null, 8, ["url", "message-id", "is-sent"])) : createCommentVNode("", true),
5257
- messageType.value !== "text" ? (openBlock(), createElementBlock("div", _hoisted_7$3, [
5276
+ messageType.value !== "text" ? (openBlock(), createElementBlock("div", _hoisted_6$4, [
5258
5277
  createVNode(_sfc_main$h, {
5259
5278
  message: __props.message,
5260
5279
  "is-mine": isMine.value
5261
5280
  }, null, 8, ["message", "is-mine"])
5262
5281
  ])) : createCommentVNode("", true)
5263
- ], 2)) : (openBlock(), createElementBlock("div", _hoisted_8$2, [
5282
+ ], 2)) : (openBlock(), createElementBlock("div", _hoisted_7$3, [
5264
5283
  messageType.value === "image" || messageType.value === "multiImage" ? (openBlock(), createBlock(_sfc_main$l, {
5265
5284
  key: 0,
5266
5285
  items: media.value,
@@ -5284,14 +5303,14 @@ const _sfc_main$f = /* @__PURE__ */ defineComponent({
5284
5303
  message: __props.message
5285
5304
  }, null, 8, ["message"])) : createCommentVNode("", true)
5286
5305
  ]),
5287
- !isMine.value ? (openBlock(), createElementBlock("div", _hoisted_9$1, [
5306
+ !isMine.value ? (openBlock(), createElementBlock("div", _hoisted_8$2, [
5288
5307
  !groupedWithNext.value ? (openBlock(), createBlock(_sfc_main$I, {
5289
5308
  key: 0,
5290
5309
  contact: __props.contact,
5291
5310
  "show-online": false
5292
5311
  }, null, 8, ["contact"])) : createCommentVNode("", true)
5293
5312
  ])) : createCommentVNode("", true)
5294
- ])
5313
+ ], 2)
5295
5314
  ], 2)
5296
5315
  ]),
5297
5316
  viewerMounted.value && media.value.length > 0 ? (openBlock(), createBlock(_sfc_main$u, {
@@ -5378,19 +5397,18 @@ const _sfc_main$d = /* @__PURE__ */ defineComponent({
5378
5397
  __name: "FloatingDateHeader",
5379
5398
  props: {
5380
5399
  label: {},
5381
- opacity: {},
5382
- offset: { type: Boolean }
5400
+ opacity: {}
5383
5401
  },
5384
5402
  setup(__props) {
5385
5403
  return (_ctx, _cache) => {
5386
5404
  return openBlock(), createElementBlock("div", {
5387
- class: normalizeClass([[__props.offset ? "top-12" : "top-4"], "absolute left-0 right-0 z-20 flex justify-center pointer-events-none transition-opacity duration-200"]),
5405
+ class: "absolute top-4 left-0 right-0 z-20 flex justify-center pointer-events-none transition-opacity duration-200",
5388
5406
  style: normalizeStyle({ opacity: __props.opacity })
5389
5407
  }, [
5390
5408
  __props.label ? (openBlock(), createElementBlock("div", _hoisted_1$b, [
5391
5409
  createElementVNode("div", _hoisted_2$9, toDisplayString(__props.label), 1)
5392
5410
  ])) : createCommentVNode("", true)
5393
- ], 6);
5411
+ ], 4);
5394
5412
  };
5395
5413
  }
5396
5414
  });
@@ -5562,7 +5580,6 @@ function useChatMessageList(chatId) {
5562
5580
  function useFlippedVirtualScroll(options2) {
5563
5581
  const {
5564
5582
  scrollContainer,
5565
- hasCall,
5566
5583
  isLoading,
5567
5584
  isLocked,
5568
5585
  onLoadMore
@@ -5603,7 +5620,7 @@ function useFlippedVirtualScroll(options2) {
5603
5620
  }
5604
5621
  const items = virtualizer.value.getVirtualItems();
5605
5622
  if (items.length > 0) {
5606
- const targetOffset = hasCall.value ? 88 : 44;
5623
+ const targetOffset = 44;
5607
5624
  const physicalTopOfViewport = el.scrollHeight - el.clientHeight - el.scrollTop;
5608
5625
  const targetPhysicalTop = physicalTopOfViewport + targetOffset;
5609
5626
  let closestIndex = items[0].index;
@@ -5670,10 +5687,7 @@ function useFlippedVirtualScroll(options2) {
5670
5687
  }
5671
5688
  };
5672
5689
  }
5673
- const _hoisted_1$9 = {
5674
- key: 0,
5675
- class: "vue-chat relative w-full h-full overflow-hidden"
5676
- };
5690
+ const _hoisted_1$9 = ["dir"];
5677
5691
  const _hoisted_2$8 = { class: "w-full max-w-dvw overflow-x-hidden" };
5678
5692
  const _hoisted_3$7 = ["data-index"];
5679
5693
  const _hoisted_4$7 = { class: "w-full shrink-0 flip-vertical" };
@@ -5687,22 +5701,20 @@ const _sfc_main$b = /* @__PURE__ */ defineComponent({
5687
5701
  setup(__props) {
5688
5702
  const modal = ref(null);
5689
5703
  const chatStore = useChatStore();
5690
- const callStore = useCallStore();
5691
5704
  const messagesStore = useMessagesStore();
5692
5705
  const { t } = useLocalI18n(chatMessages, chat);
5706
+ const { dir } = useDirection();
5693
5707
  const { openToast } = useAppToast();
5694
5708
  const { formatDateShort } = useDate();
5695
5709
  const profileStore = useProfileStore();
5696
5710
  const currentUserId = computed(() => profileStore.userId);
5697
5711
  const chatId = computed(() => chatStore.activeConversationId);
5698
- const hasCall = computed(() => callStore.isActive);
5699
5712
  const lockScroll = computed(() => messagesStore.isOptionMenuOpen);
5700
5713
  const scrollContainer = ref(null);
5701
5714
  const selectedToDelete = ref([]);
5702
5715
  const msgList = useChatMessageList(chatId);
5703
5716
  const scroll = useFlippedVirtualScroll({
5704
5717
  scrollContainer,
5705
- hasCall,
5706
5718
  isLoading: msgList.isLoading,
5707
5719
  isLocked: lockScroll,
5708
5720
  onLoadMore: msgList.loadNextPage
@@ -5815,14 +5827,16 @@ const _sfc_main$b = /* @__PURE__ */ defineComponent({
5815
5827
  });
5816
5828
  return (_ctx, _cache) => {
5817
5829
  return openBlock(), createElementBlock(Fragment, null, [
5818
- __props.contact ? (openBlock(), createElementBlock("div", _hoisted_1$9, [
5830
+ __props.contact ? (openBlock(), createElementBlock("div", {
5831
+ key: 0,
5832
+ dir: unref(dir),
5833
+ class: "vue-chat relative w-full h-full overflow-hidden"
5834
+ }, [
5819
5835
  createVNode(_sfc_main$d, {
5820
5836
  label: floatingHeader.value,
5821
- opacity: unref(scroll).headerOpacity.value,
5822
- offset: hasCall.value
5823
- }, null, 8, ["label", "opacity", "offset"]),
5837
+ opacity: unref(scroll).headerOpacity.value
5838
+ }, null, 8, ["label", "opacity"]),
5824
5839
  createElementVNode("div", {
5825
- dir: "rtl",
5826
5840
  id: "list",
5827
5841
  ref_key: "scrollContainer",
5828
5842
  ref: scrollContainer,
@@ -5904,7 +5918,7 @@ const _sfc_main$b = /* @__PURE__ */ defineComponent({
5904
5918
  onClick: _cache[2] || (_cache[2] = ($event) => unref(scroll).resetScroll())
5905
5919
  }, null, 8, ["visible", "unseen"])
5906
5920
  ])
5907
- ])) : createCommentVNode("", true),
5921
+ ], 8, _hoisted_1$9)) : createCommentVNode("", true),
5908
5922
  createVNode(_sfc_main$y, {
5909
5923
  ref_key: "modal",
5910
5924
  ref: modal,
@@ -5921,8 +5935,8 @@ const _export_sfc = (sfc, props) => {
5921
5935
  }
5922
5936
  return target;
5923
5937
  };
5924
- const ChatMessages = /* @__PURE__ */ _export_sfc(_sfc_main$b, [["__scopeId", "data-v-01ea74e6"]]);
5925
- const _hoisted_1$8 = { class: "vue-chat relative z-20 w-full" };
5938
+ const ChatMessages = /* @__PURE__ */ _export_sfc(_sfc_main$b, [["__scopeId", "data-v-cb7cc93f"]]);
5939
+ const _hoisted_1$8 = ["dir"];
5926
5940
  const _hoisted_2$7 = {
5927
5941
  key: 0,
5928
5942
  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"
@@ -5946,8 +5960,6 @@ const _hoisted_12 = { class: "h-full w-full" };
5946
5960
  const _hoisted_13 = { class: "flex flex-col gap-y-1.5" };
5947
5961
  const _hoisted_14 = { class: "h-4 w-32" };
5948
5962
  const _hoisted_15 = { class: "h-3 w-20" };
5949
- const _hoisted_16 = { class: "absolute bottom-0 z-20 h-0 w-full overflow-visible" };
5950
- const _hoisted_17 = { class: "flex-1 select-none text-label-md text-white" };
5951
5963
  const _sfc_main$a = /* @__PURE__ */ defineComponent({
5952
5964
  __name: "ChatPageBar",
5953
5965
  props: {
@@ -5970,15 +5982,12 @@ const _sfc_main$a = /* @__PURE__ */ defineComponent({
5970
5982
  const messagesStore = useMessagesStore();
5971
5983
  const { formatRelativeDate } = useDate();
5972
5984
  const { t } = useLocalI18n(chatPageBar);
5985
+ const { dir } = useDirection();
5973
5986
  const callStore = useCallStore();
5974
5987
  const chatStore = useChatStore();
5975
5988
  const currentConversationId = computed(() => chatStore.activeConversationId);
5976
5989
  const isSelectMode = computed(() => messagesStore.isSelectMode);
5977
5990
  const selectedChat = computed(() => props.contact);
5978
- const callData = computed(() => ({
5979
- show: callStore.isActive,
5980
- duration: formatDuration$1(callStore.elapsedTime)
5981
- }));
5982
5991
  const openProfile = () => {
5983
5992
  emit("open-profile");
5984
5993
  };
@@ -5990,13 +5999,20 @@ const _sfc_main$a = /* @__PURE__ */ defineComponent({
5990
5999
  callStore.startCall(currentConversationId.value);
5991
6000
  }
5992
6001
  };
5993
- const backToCall = () => {
5994
- callStore.maximize();
5995
- };
5996
6002
  return (_ctx, _cache) => {
5997
6003
  const _component_BIcon = _sfc_main$K;
5998
- return openBlock(), createElementBlock("div", _hoisted_1$8, [
6004
+ return openBlock(), createElementBlock("div", {
6005
+ dir: unref(dir),
6006
+ class: "vue-chat relative z-20 w-full"
6007
+ }, [
5999
6008
  selectedChat.value ? (openBlock(), createElementBlock("div", _hoisted_2$7, [
6009
+ createVNode(_sfc_main$F, {
6010
+ icon: "PhArrowLeft",
6011
+ "icon-class": "size-6 rtl:-scale-x-100",
6012
+ label: unref(t)("actions.back"),
6013
+ class: "shrink-0 md:hidden!",
6014
+ onClick: goBack
6015
+ }, null, 8, ["label"]),
6000
6016
  createElementVNode("div", _hoisted_3$6, [
6001
6017
  createVNode(unref(Button), {
6002
6018
  text: "",
@@ -6051,6 +6067,7 @@ const _sfc_main$a = /* @__PURE__ */ defineComponent({
6051
6067
  ref: "optionsMenu",
6052
6068
  model: menuItems.value,
6053
6069
  popup: "",
6070
+ dir: unref(dir),
6054
6071
  class: "vue-chat"
6055
6072
  }, {
6056
6073
  itemicon: withCtx(({ item }) => [
@@ -6060,18 +6077,11 @@ const _sfc_main$a = /* @__PURE__ */ defineComponent({
6060
6077
  }, null, 8, ["icon", "class"])
6061
6078
  ]),
6062
6079
  _: 1
6063
- }, 8, ["model"])
6080
+ }, 8, ["model", "dir"])
6064
6081
  ])
6065
6082
  ], 2)
6066
6083
  ])
6067
- ]),
6068
- createVNode(_sfc_main$F, {
6069
- icon: "PhArrowLeft",
6070
- "icon-class": "size-6",
6071
- label: unref(t)("actions.back"),
6072
- class: "md:hidden!",
6073
- onClick: goBack
6074
- }, null, 8, ["label"])
6084
+ ])
6075
6085
  ])) : currentConversationId.value ? (openBlock(), createElementBlock("div", _hoisted_10, [
6076
6086
  createElementVNode("div", _hoisted_11, [
6077
6087
  withDirectives(createElementVNode("div", _hoisted_12, null, 512), [
@@ -6086,30 +6096,8 @@ const _sfc_main$a = /* @__PURE__ */ defineComponent({
6086
6096
  [unref(loadingDirective), true]
6087
6097
  ])
6088
6098
  ])
6089
- ])) : createCommentVNode("", true),
6090
- createElementVNode("div", _hoisted_16, [
6091
- createElementVNode("div", {
6092
- class: 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"]])
6093
- }, [
6094
- createElementVNode("div", {
6095
- class: normalizeClass(["flex w-full items-center gap-x-3 transition-all duration-200 ease-in-out", [callData.value.show ? "opacity-100" : "opacity-0"]])
6096
- }, [
6097
- createVNode(_component_BIcon, {
6098
- icon: "PhPhoneCall",
6099
- class: "h-5 w-5 shrink-0 fill-white"
6100
- }),
6101
- createElementVNode("div", _hoisted_17, toDisplayString(callData.value.duration), 1),
6102
- createVNode(_sfc_main$F, {
6103
- icon: "PhFrameCorners",
6104
- label: unref(t)("actions.returnToCall"),
6105
- size: "small",
6106
- class: "shrink-0 text-white!",
6107
- onClick: backToCall
6108
- }, null, 8, ["label"])
6109
- ], 2)
6110
- ], 2)
6111
- ])
6112
- ]);
6099
+ ])) : createCommentVNode("", true)
6100
+ ], 8, _hoisted_1$8);
6113
6101
  };
6114
6102
  }
6115
6103
  });
@@ -6244,6 +6232,7 @@ const _sfc_main$7 = /* @__PURE__ */ defineComponent({
6244
6232
  const props = __props;
6245
6233
  const emit = __emit;
6246
6234
  const { t } = useLocalI18n(inputAttachement);
6235
+ const { dir } = useDirection();
6247
6236
  const { openToast } = useAppToast();
6248
6237
  const menu = ref(null);
6249
6238
  const dialogOpen = ref(false);
@@ -6357,6 +6346,7 @@ const _sfc_main$7 = /* @__PURE__ */ defineComponent({
6357
6346
  ref: menu,
6358
6347
  model: menuItems.value,
6359
6348
  popup: "",
6349
+ dir: unref(dir),
6360
6350
  class: "vue-chat"
6361
6351
  }, {
6362
6352
  itemicon: withCtx(({ item }) => [
@@ -6366,7 +6356,7 @@ const _sfc_main$7 = /* @__PURE__ */ defineComponent({
6366
6356
  }, null, 8, ["icon"])
6367
6357
  ]),
6368
6358
  _: 1
6369
- }, 8, ["model"]),
6359
+ }, 8, ["model", "dir"]),
6370
6360
  createVNode(_sfc_main$C, {
6371
6361
  visible: dialogOpen.value,
6372
6362
  "onUpdate:visible": _cache[3] || (_cache[3] = ($event) => dialogOpen.value = $event),
@@ -7105,10 +7095,7 @@ function useInputDraft(editor, isEditing) {
7105
7095
  });
7106
7096
  return { restoreDraft };
7107
7097
  }
7108
- const _hoisted_1$2 = {
7109
- dir: "rtl",
7110
- class: "vue-chat w-full relative"
7111
- };
7098
+ const _hoisted_1$2 = ["dir"];
7112
7099
  const _hoisted_2$2 = { class: "flex-1 flex items-end gap-x-5" };
7113
7100
  const _hoisted_3$1 = { class: "min-h-11 flex items-center w-full" };
7114
7101
  const _hoisted_4$1 = ["onKeydown", "data-placeholder"];
@@ -7123,6 +7110,7 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
7123
7110
  setup(__props, { expose: __expose, emit: __emit }) {
7124
7111
  const props = __props;
7125
7112
  const { t } = useLocalI18n(chatInput, chat);
7113
+ const { dir } = useDirection();
7126
7114
  const { requestWithPopup, checkMediaStatus } = useAppPermissions();
7127
7115
  const messagesStore = useMessagesStore();
7128
7116
  const chatStore = useChatStore();
@@ -7383,7 +7371,10 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
7383
7371
  } });
7384
7372
  return (_ctx, _cache) => {
7385
7373
  const _component_BEmojiPicker = _sfc_main$9;
7386
- return openBlock(), createElementBlock("div", _hoisted_1$2, [
7374
+ return openBlock(), createElementBlock("div", {
7375
+ dir: unref(dir),
7376
+ class: "vue-chat w-full relative"
7377
+ }, [
7387
7378
  createVNode(_sfc_main$6, {
7388
7379
  ref: "videoDisplay",
7389
7380
  stream: unref(mediaStream),
@@ -7435,7 +7426,7 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
7435
7426
  onMouseup: _cache[3] || (_cache[3] = //@ts-ignore
7436
7427
  (...args) => unref(editor).saveCursorPosition && unref(editor).saveCursorPosition(...args)),
7437
7428
  "data-placeholder": inputPlaceholder.value,
7438
- 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"
7429
+ 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"
7439
7430
  }, null, 40, _hoisted_4$1)
7440
7431
  ]),
7441
7432
  createElementVNode("div", _hoisted_5$1, [
@@ -7452,6 +7443,7 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
7452
7443
  }, null, 8, ["label", "disabled"]),
7453
7444
  createVNode(unref(Popover), {
7454
7445
  ref: "emojiPopover",
7446
+ dir: unref(dir),
7455
7447
  class: "vue-chat"
7456
7448
  }, {
7457
7449
  default: withCtx(() => [
@@ -7461,7 +7453,7 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
7461
7453
  })) : createCommentVNode("", true)
7462
7454
  ]),
7463
7455
  _: 1
7464
- }, 512),
7456
+ }, 8, ["dir"]),
7465
7457
  createVNode(_sfc_main$F, {
7466
7458
  icon: "PhSmiley",
7467
7459
  "icon-class": "size-6",
@@ -7500,11 +7492,11 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
7500
7492
  onSelect: handleEmojiSelect
7501
7493
  })) : createCommentVNode("", true)
7502
7494
  ], 2)
7503
- ]);
7495
+ ], 8, _hoisted_1$2);
7504
7496
  };
7505
7497
  }
7506
7498
  });
7507
- const _hoisted_1$1 = { class: "vue-chat h-full w-full bg-chat-surface" };
7499
+ const _hoisted_1$1 = ["dir"];
7508
7500
  const _hoisted_2$1 = { class: "flex h-full w-full" };
7509
7501
  const _hoisted_3 = { class: "h-16 w-full bg-chat-background md:h-20" };
7510
7502
  const _hoisted_4 = {
@@ -7526,6 +7518,7 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
7526
7518
  setup(__props) {
7527
7519
  const chatStore = useChatStore();
7528
7520
  const { t } = useLocalI18n(chatView);
7521
+ const { dir } = useDirection();
7529
7522
  const chatInput2 = ref(null);
7530
7523
  const chatId = computed(() => chatStore.activeConversationId);
7531
7524
  const isProfile = computed(() => chatStore.profileViewOpen);
@@ -7588,9 +7581,15 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
7588
7581
  return (_ctx, _cache) => {
7589
7582
  var _a, _b;
7590
7583
  const _component_BIcon = _sfc_main$K;
7591
- return openBlock(), createElementBlock("div", _hoisted_1$1, [
7584
+ return openBlock(), createElementBlock("div", {
7585
+ dir: unref(dir),
7586
+ class: "vue-chat h-full w-full bg-chat-surface"
7587
+ }, [
7592
7588
  createElementVNode("div", _hoisted_2$1, [
7593
- createVNode(_sfc_main$z, { profile: selectedChat.value }, null, 8, ["profile"]),
7589
+ createVNode(_sfc_main$z, {
7590
+ profile: selectedChat.value,
7591
+ onEnd: _cache[0] || (_cache[0] = ($event) => handleOption("end-chat"))
7592
+ }, null, 8, ["profile"]),
7594
7593
  withDirectives(createElementVNode("div", {
7595
7594
  class: normalizeClass(["h-full flex-1 flex-col items-center justify-between", isProfile.value ? "hidden md:flex" : "flex"])
7596
7595
  }, [
@@ -7656,13 +7655,14 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
7656
7655
  createVNode(unref(Toast), {
7657
7656
  group: unref(TOAST_GROUP),
7658
7657
  position: "bottom-center",
7658
+ dir: unref(dir),
7659
7659
  class: "vue-chat"
7660
- }, null, 8, ["group"])
7661
- ]);
7660
+ }, null, 8, ["group", "dir"])
7661
+ ], 8, _hoisted_1$1);
7662
7662
  };
7663
7663
  }
7664
7664
  });
7665
- 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" };
7665
+ const _hoisted_1 = ["dir"];
7666
7666
  const _hoisted_2 = {
7667
7667
  key: 1,
7668
7668
  class: "w-full h-full flex items-center justify-center"
@@ -7673,16 +7673,20 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
7673
7673
  renderCall: { type: Boolean, default: true }
7674
7674
  },
7675
7675
  setup(__props) {
7676
- const Call2 = defineAsyncComponent(() => import("./Call-7lGaUPcp.mjs"));
7676
+ const Call2 = defineAsyncComponent(() => import("./Call-jiZGoCtR.mjs"));
7677
7677
  const props = __props;
7678
7678
  const slots = useSlots();
7679
7679
  const chatStore = useChatStore();
7680
7680
  const callStore = useCallStore();
7681
7681
  const { t } = useLocalI18n(chatPage);
7682
+ const { dir } = useDirection();
7682
7683
  const isInChat = computed(() => chatStore.activeConversationId !== null);
7683
7684
  return (_ctx, _cache) => {
7684
7685
  return openBlock(), createElementBlock(Fragment, null, [
7685
- createElementVNode("div", _hoisted_1, [
7686
+ createElementVNode("div", {
7687
+ dir: unref(dir),
7688
+ 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"
7689
+ }, [
7686
7690
  createElementVNode("div", {
7687
7691
  class: normalizeClass(["relative h-full flex-1", isInChat.value ? "block" : "hidden md:block"])
7688
7692
  }, [
@@ -7722,7 +7726,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
7722
7726
  }, [
7723
7727
  createVNode(_sfc_main$D)
7724
7728
  ], 2)
7725
- ]),
7729
+ ], 8, _hoisted_1),
7726
7730
  props.renderCall && unref(callStore).session ? (openBlock(), createBlock(unref(Call2), { key: 0 })) : createCommentVNode("", true)
7727
7731
  ], 64);
7728
7732
  };
@@ -7786,32 +7790,33 @@ function createChat(options2) {
7786
7790
  }
7787
7791
  };
7788
7792
  }
7789
- const Call = defineAsyncComponent(() => import("./Call-7lGaUPcp.mjs"));
7793
+ const Call = defineAsyncComponent(() => import("./Call-jiZGoCtR.mjs"));
7790
7794
  export {
7791
7795
  CallMessageType as C,
7792
7796
  _sfc_main$F as _,
7793
7797
  useLocalI18n as a,
7794
7798
  useDirection as b,
7795
7799
  chat as c,
7796
- _sfc_main$K as d,
7797
- _sfc_main$C as e,
7798
- _sfc_main$9 as f,
7799
- _sfc_main$L as g,
7800
- Call as h,
7801
- _sfc_main$f as i,
7802
- _sfc_main$1 as j,
7803
- _sfc_main$a as k,
7804
- _sfc_main$2 as l,
7805
- _sfc_main$D as m,
7806
- ChatMessages as n,
7807
- _sfc_main as o,
7808
- createChat as p,
7809
- messageMedia as q,
7810
- provideCallHandlers as r,
7811
- useChatStore as s,
7812
- useMediaStore as t,
7800
+ useChatStore as d,
7801
+ _sfc_main$K as e,
7802
+ formatDuration$1 as f,
7803
+ _sfc_main$C as g,
7804
+ _sfc_main$9 as h,
7805
+ _sfc_main$L as i,
7806
+ Call as j,
7807
+ _sfc_main$f as k,
7808
+ _sfc_main$1 as l,
7809
+ _sfc_main$a as m,
7810
+ _sfc_main$2 as n,
7811
+ _sfc_main$D as o,
7812
+ ChatMessages as p,
7813
+ _sfc_main as q,
7814
+ createChat as r,
7815
+ messageMedia as s,
7816
+ provideCallHandlers as t,
7813
7817
  useCallStore as u,
7814
- useMessagesStore as v,
7815
- useProfileStore as w
7818
+ useMediaStore as v,
7819
+ useMessagesStore as w,
7820
+ useProfileStore as x
7816
7821
  };
7817
- //# sourceMappingURL=index-C8N5eSUe.mjs.map
7822
+ //# sourceMappingURL=index-CHFzAdVI.mjs.map