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.
- package/dist/chat.css +57 -35
- package/dist/chunks/{Call-D48LfnDv.cjs → Call-CDT92h1x.cjs} +62 -57
- package/dist/chunks/Call-CDT92h1x.cjs.map +1 -0
- package/dist/chunks/{Call-7lGaUPcp.mjs → Call-jiZGoCtR.mjs} +62 -57
- package/dist/chunks/Call-jiZGoCtR.mjs.map +1 -0
- package/dist/chunks/{index-C8N5eSUe.mjs → index-CHFzAdVI.mjs} +150 -145
- package/dist/chunks/index-CHFzAdVI.mjs.map +1 -0
- package/dist/chunks/{index-DrcpfLUy.cjs → index-efTNVoBF.cjs} +131 -126
- package/dist/chunks/index-efTNVoBF.cjs.map +1 -0
- package/dist/chunks/{session-B8Q7eiUV.mjs → session-CN61aKfb.mjs} +3 -2
- package/dist/chunks/{session-BwgUu6F3.cjs.map → session-CN61aKfb.mjs.map} +1 -1
- package/dist/chunks/{session-BwgUu6F3.cjs → session-DLxWccUj.cjs} +3 -2
- package/dist/chunks/{session-B8Q7eiUV.mjs.map → session-DLxWccUj.cjs.map} +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.mjs +19 -19
- package/dist/types/app/components/ChatPage.vue.d.ts.map +1 -1
- package/dist/types/app/components/call/Call.vue.d.ts.map +1 -1
- package/dist/types/app/components/chat/ChatBubble.vue.d.ts.map +1 -1
- package/dist/types/app/components/chat/ChatInput.vue.d.ts.map +1 -1
- package/dist/types/app/components/chat/ChatMessages.vue.d.ts.map +1 -1
- package/dist/types/app/components/chat/ChatPageBar.vue.d.ts.map +1 -1
- package/dist/types/app/components/chat/ChatProfileOverview.vue.d.ts +5 -1
- package/dist/types/app/components/chat/ChatProfileOverview.vue.d.ts.map +1 -1
- package/dist/types/app/components/chat/ChatView.vue.d.ts.map +1 -1
- package/dist/types/app/components/chat/chat-bubbles/BubbleOptions.vue.d.ts.map +1 -1
- package/dist/types/app/components/chat/chat-bubbles/MediaViewer.vue.d.ts.map +1 -1
- package/dist/types/app/components/chat/chat-input/InputAttachement.vue.d.ts.map +1 -1
- package/dist/types/app/components/chat/contact/ChatList.vue.d.ts.map +1 -1
- package/dist/types/app/components/chat/messages/FloatingDateHeader.vue.d.ts +0 -1
- package/dist/types/app/components/chat/messages/FloatingDateHeader.vue.d.ts.map +1 -1
- package/dist/types/app/components/general/ResponsiveDialog.vue.d.ts.map +1 -1
- package/dist/types/app/composables/call/session.d.ts +2 -0
- package/dist/types/app/composables/call/session.d.ts.map +1 -1
- package/dist/types/app/composables/useFlippedVirtualScroll.d.ts +0 -1
- package/dist/types/app/composables/useFlippedVirtualScroll.d.ts.map +1 -1
- package/dist/types/app/stores/callStore.d.ts +9 -3
- package/dist/types/app/stores/callStore.d.ts.map +1 -1
- package/dist/types/i18n/locales/index.d.ts +10 -0
- package/dist/types/i18n/locales/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/chunks/Call-7lGaUPcp.mjs.map +0 -1
- package/dist/chunks/Call-D48LfnDv.cjs.map +0 -1
- package/dist/chunks/index-C8N5eSUe.mjs.map +0 -1
- package/dist/chunks/index-DrcpfLUy.cjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatPage.vue.d.ts","sourceRoot":"","sources":["../../../../app/components/ChatPage.vue"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ChatPage.vue.d.ts","sourceRoot":"","sources":["../../../../app/components/ChatPage.vue"],"names":[],"mappings":"AA4GA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAEvC,KAAK,WAAW,GAAG;IACf;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AAoCJ,iBAAS,cAAc;WAyGT,OAAO,IAA6B;;QAtIhD,2DAA2D;gBACnD,MAAM,OAAO;QACrB,wEAAwE;2BACrD,CAAC,KAAK,EAAE;YAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAAA;SAAE,KAAK,OAAO;QAClE,2CAA2C;6BACtB,CAAC,KAAK,EAAE;YAC3B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;YAC9B,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;SACzB,KAAK,OAAO;QACb,8DAA8D;wBAC9C,CAAC,KAAK,EAAE;YACtB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;YAC9B,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;SACzB,KAAK,OAAO;;QAbb,2DAA2D;gBACnD,MAAM,OAAO;QACrB,wEAAwE;2BACrD,CAAC,KAAK,EAAE;YAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAAA;SAAE,KAAK,OAAO;QAClE,2CAA2C;6BACtB,CAAC,KAAK,EAAE;YAC3B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;YAC9B,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;SACzB,KAAK,OAAO;QACb,8DAA8D;wBAC9C,CAAC,KAAK,EAAE;YACtB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;YAC9B,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;SACzB,KAAK,OAAO;;;;EA8Hd;AAmBD,KAAK,oBAAoB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AAC9D,QAAA,MAAM,eAAe;gBAvKJ,OAAO;6EA8KtB,CAAC;wBACkB,uBAAuB,CAAC,OAAO,eAAe,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAAnG,wBAAoG;AAapG,KAAK,uBAAuB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IACxC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KAEV,CAAA;CACD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Call.vue.d.ts","sourceRoot":"","sources":["../../../../../app/components/call/Call.vue"],"names":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"Call.vue.d.ts","sourceRoot":"","sources":["../../../../../app/components/call/Call.vue"],"names":[],"mappings":";;;;;;AA8hEA,wBAMG"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatBubble.vue.d.ts","sourceRoot":"","sources":["../../../../../app/components/chat/ChatBubble.vue"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ChatBubble.vue.d.ts","sourceRoot":"","sources":["../../../../../app/components/chat/ChatBubble.vue"],"names":[],"mappings":"AAyTA,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAW,MAAM,SAAS,CAAC;AAwBjE,KAAK,WAAW,GAAG;IACf,OAAO,EAAE,eAAe,CAAC;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;;mBAFgB,OAAO;gBACV,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4fxB,wBASG"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatInput.vue.d.ts","sourceRoot":"","sources":["../../../../../app/components/chat/ChatInput.vue"],"names":[],"mappings":"AAqGA;
|
|
1
|
+
{"version":3,"file":"ChatInput.vue.d.ts","sourceRoot":"","sources":["../../../../../app/components/chat/ChatInput.vue"],"names":[],"mappings":"AAqGA;AAmgBA,KAAK,WAAW,GAAG;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;;;;;;;;;;cADW,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0sBtB,wBAWG"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatMessages.vue.d.ts","sourceRoot":"","sources":["../../../../../app/components/chat/ChatMessages.vue"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ChatMessages.vue.d.ts","sourceRoot":"","sources":["../../../../../app/components/chat/ChatMessages.vue"],"names":[],"mappings":"AAwGA;AAwXA,OAAO,KAAK,EAAE,OAAO,EAAmB,MAAM,SAAS,CAAC;AAWxD,KAAK,WAAW,GAAG;IAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAAA;CAAE,CAAC;;aAAjB,OAAO,GAAG,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgZ5C,wBAQG"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatPageBar.vue.d.ts","sourceRoot":"","sources":["../../../../../app/components/chat/ChatPageBar.vue"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ChatPageBar.vue.d.ts","sourceRoot":"","sources":["../../../../../app/components/chat/ChatPageBar.vue"],"names":[],"mappings":"AAyHA;AAsMA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AASlE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAGvC,KAAK,WAAW,GAAG;IACf,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACxB,qFAAqF;IACrF,OAAO,EAAE,UAAU,EAAE,CAAC;CACvB,CAAC;AAyDJ,iBAAS,cAAc;WAmPT,OAAO,IAA6B;;;;YAXpB,GAAG;;;;;;;;;;EAgBhC;AA0BD,KAAK,oBAAoB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AAC9D,QAAA,MAAM,eAAe;;;;;;;;;aA/UR,OAAO,GAAG,IAAI;aAEd,UAAU,EAAE;;;;;;;kBAuVvB,CAAC;wBACkB,uBAAuB,CAAC,OAAO,eAAe,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAAnG,wBAAoG;AAapG,KAAK,uBAAuB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IACxC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KAEV,CAAA;CACD,CAAC"}
|
|
@@ -2,7 +2,11 @@ import { Contact } from '../../types';
|
|
|
2
2
|
type __VLS_Props = {
|
|
3
3
|
profile?: Contact | null;
|
|
4
4
|
};
|
|
5
|
-
declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
|
|
5
|
+
declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
|
|
6
|
+
end: () => any;
|
|
7
|
+
}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
8
|
+
onEnd?: (() => any) | undefined;
|
|
9
|
+
}>, {
|
|
6
10
|
profile: Contact | null;
|
|
7
11
|
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {
|
|
8
12
|
imagesSection: HTMLDivElement;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatProfileOverview.vue.d.ts","sourceRoot":"","sources":["../../../../../app/components/chat/ChatProfileOverview.vue"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ChatProfileOverview.vue.d.ts","sourceRoot":"","sources":["../../../../../app/components/chat/ChatProfileOverview.vue"],"names":[],"mappings":"AAsdA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAUvC,KAAK,WAAW,GAAG;IACf,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;CAC1B,CAAC;;;;;;aADU,OAAO,GAAG,IAAI;;;;AA+qB5B,wBAUG"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatView.vue.d.ts","sourceRoot":"","sources":["../../../../../app/components/chat/ChatView.vue"],"names":[],"mappings":"AAuEA;
|
|
1
|
+
{"version":3,"file":"ChatView.vue.d.ts","sourceRoot":"","sources":["../../../../../app/components/chat/ChatView.vue"],"names":[],"mappings":"AAuEA;AA+PA,iBAAS,cAAc;WAsNT,OAAO,IAA6B;;;;YAdX,GAAG;;;;YACD,GAAG;;;;YACR,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiBtC;AA6BD,KAAK,oBAAoB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AAC9D,QAAA,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAOnB,CAAC;wBACkB,uBAAuB,CAAC,OAAO,eAAe,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAAnG,wBAAoG;AAEpG,KAAK,uBAAuB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IACxC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KAEV,CAAA;CACD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BubbleOptions.vue.d.ts","sourceRoot":"","sources":["../../../../../../app/components/chat/chat-bubbles/BubbleOptions.vue"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"BubbleOptions.vue.d.ts","sourceRoot":"","sources":["../../../../../../app/components/chat/chat-bubbles/BubbleOptions.vue"],"names":[],"mappings":"AAsVA,OAAO,KAAK,EAAE,eAAe,EAAiB,MAAM,SAAS,CAAC;AAM9D,KAAK,WAAW,GAAG;IACjB,OAAO,EAAE,eAAe,CAAC;IACzB,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC;;sBA+CuB,UAAU,GAAG,YAAY;;;;;;;;;AAsblD,wBASG"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MediaViewer.vue.d.ts","sourceRoot":"","sources":["../../../../../../app/components/chat/chat-bubbles/MediaViewer.vue"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MediaViewer.vue.d.ts","sourceRoot":"","sources":["../../../../../../app/components/chat/chat-bubbles/MediaViewer.vue"],"names":[],"mappings":"AAuPA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAWzC,KAAK,WAAW,GAAG;IACjB,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,IAAI,CAAC;CACZ,CAAC;;kBAuFc,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6VtB,wBASG"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InputAttachement.vue.d.ts","sourceRoot":"","sources":["../../../../../../app/components/chat/chat-input/InputAttachement.vue"],"names":[],"mappings":"AA6EA;
|
|
1
|
+
{"version":3,"file":"InputAttachement.vue.d.ts","sourceRoot":"","sources":["../../../../../../app/components/chat/chat-input/InputAttachement.vue"],"names":[],"mappings":"AA6EA;AAkQA,KAAK,WAAW,GAAG;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;;;;;;oBADiB,MAAM;;;;;;;;AAgZ3B,wBAUG"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatList.vue.d.ts","sourceRoot":"","sources":["../../../../../../app/components/chat/contact/ChatList.vue"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"ChatList.vue.d.ts","sourceRoot":"","sources":["../../../../../../app/components/chat/contact/ChatList.vue"],"names":[],"mappings":";;;AAiYA,wBAOG"}
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
type __VLS_Props = {
|
|
3
3
|
label: string | null;
|
|
4
4
|
opacity: number;
|
|
5
|
-
offset: boolean;
|
|
6
5
|
};
|
|
7
6
|
declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLDivElement>;
|
|
8
7
|
export default _default;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FloatingDateHeader.vue.d.ts","sourceRoot":"","sources":["../../../../../../app/components/chat/messages/FloatingDateHeader.vue"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"FloatingDateHeader.vue.d.ts","sourceRoot":"","sources":["../../../../../../app/components/chat/messages/FloatingDateHeader.vue"],"names":[],"mappings":"AAsBA,2FAA2F;AAC3F,KAAK,WAAW,GAAG;IAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;;AAkD7D,wBAOG"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ResponsiveDialog.vue.d.ts","sourceRoot":"","sources":["../../../../../app/components/general/ResponsiveDialog.vue"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ResponsiveDialog.vue.d.ts","sourceRoot":"","sources":["../../../../../app/components/general/ResponsiveDialog.vue"],"names":[],"mappings":"AAqDA,KAAK,WAAW,GAAG;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAgBtC,KAAK,iBAAiB,GAAG;IACzB,SAAS,CAAC,EAAE,OAAO,CAAC;CACnB,GAAG,WAAW,CAAC;AAKhB,iBAAS,cAAc;WAuDT,OAAO,IAA6B;8CAZmC,GAAG;;;EAiBvF;AAeD,KAAK,oBAAoB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AAC9D,QAAA,MAAM,eAAe;;;;;WAnGQ,MAAM;6EA2GjC,CAAC;wBACkB,uBAAuB,CAAC,OAAO,eAAe,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAAnG,wBAAoG;AAapG,KAAK,uBAAuB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IACxC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KAEV,CAAA;CACD,CAAC"}
|
|
@@ -9,6 +9,8 @@ export interface CallSessionOptions {
|
|
|
9
9
|
};
|
|
10
10
|
/** Shows an error; `key` is a translation key. */
|
|
11
11
|
notify: (key: string) => void;
|
|
12
|
+
/** Join with the camera on (the default) or off, for a voice call. */
|
|
13
|
+
video?: boolean;
|
|
12
14
|
}
|
|
13
15
|
/**
|
|
14
16
|
* One call, from joining to hanging up: signalling, peer connections and local media. It lives in
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../../../app/composables/call/session.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAK5C,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,YAAY,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,IAAI,GAAG,SAAS,CAAA;KAAE,CAAC;IACzE,kDAAkD;IAClD,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../../../app/composables/call/session.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAK5C,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,YAAY,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,IAAI,GAAG,SAAS,CAAA;KAAE,CAAC;IACzE,kDAAkD;IAClD,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9B,sEAAsE;IACtE,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AASD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,kBAAkB;;;;;6BA4GlB,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA0B7C;AAED,MAAM,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFlippedVirtualScroll.d.ts","sourceRoot":"","sources":["../../../../app/composables/useFlippedVirtualScroll.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,GAAG,EAAE,MAAM,KAAK,CAAC;AAG9C,UAAU,aAAa;IACrB,eAAe,EAAE,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IACzC,
|
|
1
|
+
{"version":3,"file":"useFlippedVirtualScroll.d.ts","sourceRoot":"","sources":["../../../../app/composables/useFlippedVirtualScroll.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,GAAG,EAAE,MAAM,KAAK,CAAC;AAG9C,UAAU,aAAa;IACrB,eAAe,EAAE,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IACzC,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;IACxB,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;IACvB,UAAU,EAAE,MAAM,IAAI,CAAC;CACxB;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,aAAa;;;;;;qBAiFpC,UAAU;;;0BA4DV,MAAM;wBAGR,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,MAAM;EAIzD"}
|
|
@@ -536,7 +536,9 @@ export declare const useCallStore: import('pinia').StoreDefinition<"call-modal",
|
|
|
536
536
|
elapsedTime: globalThis.Ref<number, number>;
|
|
537
537
|
channelId: globalThis.Ref<string | null, string | null>;
|
|
538
538
|
setHandlers: (val: CallHandlers) => void;
|
|
539
|
-
startCall: (id: string
|
|
539
|
+
startCall: (id: string, { video }?: {
|
|
540
|
+
video?: boolean;
|
|
541
|
+
}) => void;
|
|
540
542
|
endCall: () => void;
|
|
541
543
|
minimize: () => void;
|
|
542
544
|
maximize: () => void;
|
|
@@ -1077,7 +1079,9 @@ export declare const useCallStore: import('pinia').StoreDefinition<"call-modal",
|
|
|
1077
1079
|
elapsedTime: globalThis.Ref<number, number>;
|
|
1078
1080
|
channelId: globalThis.Ref<string | null, string | null>;
|
|
1079
1081
|
setHandlers: (val: CallHandlers) => void;
|
|
1080
|
-
startCall: (id: string
|
|
1082
|
+
startCall: (id: string, { video }?: {
|
|
1083
|
+
video?: boolean;
|
|
1084
|
+
}) => void;
|
|
1081
1085
|
endCall: () => void;
|
|
1082
1086
|
minimize: () => void;
|
|
1083
1087
|
maximize: () => void;
|
|
@@ -1618,7 +1622,9 @@ export declare const useCallStore: import('pinia').StoreDefinition<"call-modal",
|
|
|
1618
1622
|
elapsedTime: globalThis.Ref<number, number>;
|
|
1619
1623
|
channelId: globalThis.Ref<string | null, string | null>;
|
|
1620
1624
|
setHandlers: (val: CallHandlers) => void;
|
|
1621
|
-
startCall: (id: string
|
|
1625
|
+
startCall: (id: string, { video }?: {
|
|
1626
|
+
video?: boolean;
|
|
1627
|
+
}) => void;
|
|
1622
1628
|
endCall: () => void;
|
|
1623
1629
|
minimize: () => void;
|
|
1624
1630
|
maximize: () => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"callStore.d.ts","sourceRoot":"","sources":["../../../../app/stores/callStore.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAO5C,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uBAMG,YAAY;
|
|
1
|
+
{"version":3,"file":"callStore.d.ts","sourceRoot":"","sources":["../../../../app/stores/callStore.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAO5C,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uBAMG,YAAY;oBAoCf,MAAM,cAAoB;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uBApC1C,YAAY;oBAoCf,MAAM,cAAoB;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uBApC1C,YAAY;oBAoCf,MAAM,cAAoB;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE;;;;sEAqEpE,CAAC"}
|
|
@@ -251,6 +251,11 @@ export declare const chat: {
|
|
|
251
251
|
call: {
|
|
252
252
|
title: string;
|
|
253
253
|
you: string;
|
|
254
|
+
active: string;
|
|
255
|
+
participants: string;
|
|
256
|
+
yourPresentation: string;
|
|
257
|
+
presentationOf: string;
|
|
258
|
+
cameraIsOff: string;
|
|
254
259
|
deviceDoesntSupport: string;
|
|
255
260
|
errors: {
|
|
256
261
|
noMicDevice: string;
|
|
@@ -479,6 +484,11 @@ export declare const chat: {
|
|
|
479
484
|
call: {
|
|
480
485
|
title: string;
|
|
481
486
|
you: string;
|
|
487
|
+
active: string;
|
|
488
|
+
participants: string;
|
|
489
|
+
yourPresentation: string;
|
|
490
|
+
presentationOf: string;
|
|
491
|
+
cameraIsOff: string;
|
|
482
492
|
deviceDoesntSupport: string;
|
|
483
493
|
errors: {
|
|
484
494
|
noMicDevice: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../i18n/locales/index.ts"],"names":[],"mappings":"AA0DA,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAGnB,CAAC;AAEF,eAAO,MAAM,IAAI
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../i18n/locales/index.ts"],"names":[],"mappings":"AA0DA,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAGnB,CAAC;AAEF,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAGhB,CAAC;AAEF,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAGnB,CAAC;AAEF,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAGpB,CAAC;AAEF,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAGtB,CAAC;AAEF,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAGhB,CAAC;AAEF,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAG7B,CAAC;AAEF,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAGlB,CAAC;AAEF,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAG5B,CAAC;AAEF,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAGzB,CAAC;AAEF,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAG3B,CAAC;AAEF,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAG1B,CAAC;AAEF,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAGtB,CAAC;AAEF,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAG9B,CAAC;AAEF,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAGrB,CAAC;AAEF,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAGpB,CAAC;AAEF,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAG1B,CAAC;AAEF,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAGxB,CAAC;AAEF,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAGpB,CAAC;AAEF,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAGvB,CAAC;AAEF,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAG/B,CAAC;AAEF,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAGpB,CAAC;AAEF,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAG5B,CAAC;AAEF,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAG3B,CAAC;AAEF,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAGvB,CAAC;AAEF,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAGlC,CAAC;AAEF,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAG9B,CAAC"}
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Call-7lGaUPcp.mjs","sources":["../../app/composables/call/useCallUi.ts","../../app/composables/useCall.ts","../../app/components/call/Call.vue"],"sourcesContent":["import { nextTick, onMounted, onUnmounted, ref, watch, type Ref } from \"vue\";\nimport type { RemoteStream } from \"./peers\";\n\nexport interface CallUiOptions {\n localStream: Ref<MediaStream | null>;\n screenStream: Ref<MediaStream | null>;\n remoteVideos: Ref<Record<string, RemoteStream>>;\n remoteScreens: Ref<Record<string, RemoteStream>>;\n /** Re-attach streams when this changes: minimizing swaps the <video> elements. */\n isMinimized: () => boolean;\n}\n\nconst CONTROLS_HIDE_AFTER_MS = 3000;\n\n/** The call screen's view state, and keeping each <video> element showing the right stream. */\nexport function useCallUi(opts: CallUiOptions) {\n const { localStream, screenStream, remoteVideos, remoteScreens } = opts;\n\n // Template refs, bound by Call.vue.\n const localVideo = ref<HTMLVideoElement | null>(null);\n const localScreen = ref<HTMLVideoElement | null>(null);\n const remoteRefs = ref<Record<string, HTMLVideoElement | null>>({});\n const remoteScreenRefs = ref<Record<string, HTMLVideoElement | undefined>>({});\n const remoteParents = ref<Record<string, HTMLElement>>({});\n\n // --- Controls fade out after a few seconds without input ---\n const showControls = ref(true);\n let controlsTimeout: ReturnType<typeof setTimeout> | undefined;\n function resetControlsTimeout() {\n showControls.value = true;\n clearTimeout(controlsTimeout);\n controlsTimeout = setTimeout(\n () => (showControls.value = false),\n CONTROLS_HIDE_AFTER_MS,\n );\n }\n const inputEvents = [\"mousemove\", \"click\", \"keydown\"] as const;\n onMounted(() => {\n resetControlsTimeout();\n inputEvents.forEach((e) => document.addEventListener(e, resetControlsTimeout));\n });\n onUnmounted(() => {\n inputEvents.forEach((e) => document.removeEventListener(e, resetControlsTimeout));\n clearTimeout(controlsTimeout);\n // The call goes on; only this view lets go of its elements.\n detachAll();\n });\n\n // --- Fullscreen: the whole call, or a single tile ---\n const isFullscreen = ref(false);\n function toggleFullscreen(target: HTMLElement = document.documentElement) {\n if (!document.fullscreenElement) {\n void target.requestFullscreen?.();\n isFullscreen.value = true;\n } else {\n void document.exitFullscreen();\n isFullscreen.value = false;\n }\n }\n const toggleRemote = (tileId: string, el?: HTMLElement) => {\n const container = el ?? remoteParents.value[tileId];\n if (container) toggleFullscreen(container);\n };\n\n // --- Pausing a single tile ---\n const videoPaused = ref<Record<string, boolean>>({});\n function toggleVideoPause(tileId: string, el: HTMLVideoElement | null | undefined) {\n if (!(el instanceof HTMLVideoElement)) return;\n if (videoPaused.value[tileId]) void el.play();\n else el.pause();\n videoPaused.value[tileId] = !videoPaused.value[tileId];\n }\n\n // --- Keep each <video> showing its stream ---\n const attach = (el: HTMLVideoElement | null | undefined, stream: MediaStream) => {\n if (!el) return;\n if (el.srcObject !== stream) el.srcObject = stream;\n el.play().catch(() => {});\n };\n\n watch(\n [localStream, opts.isMinimized],\n async () => {\n await nextTick();\n if (localStream.value && localVideo.value)\n localVideo.value.srcObject = localStream.value;\n },\n { immediate: true },\n );\n watch(\n [screenStream, opts.isMinimized],\n async () => {\n await nextTick();\n if (localScreen.value) localScreen.value.srcObject = screenStream.value;\n },\n { immediate: true },\n );\n watch(\n [() => ({ ...remoteVideos.value }), opts.isMinimized],\n async () => {\n await nextTick();\n for (const [id, { stream }] of Object.entries(remoteVideos.value))\n attach(remoteRefs.value[id], stream);\n },\n { immediate: true },\n );\n watch(\n [() => ({ ...remoteScreens.value }), opts.isMinimized],\n async () => {\n await nextTick();\n for (const [id, { stream }] of Object.entries(remoteScreens.value))\n attach(remoteScreenRefs.value[id], stream);\n },\n { immediate: true },\n );\n\n /** Detaches every <video>, so no element keeps a stopped stream alive. */\n function detachAll() {\n const all = [\n localVideo.value,\n localScreen.value,\n ...Object.values(remoteRefs.value),\n ...Object.values(remoteScreenRefs.value),\n ];\n for (const el of all) if (el) el.srcObject = null;\n }\n\n return {\n localVideo,\n localScreen,\n remoteRefs,\n remoteScreenRefs,\n remoteParents,\n showControls,\n resetControlsTimeout,\n isFullscreen,\n toggleFullscreen: () => toggleFullscreen(),\n toggleRemote,\n videoPaused,\n toggleVideoPause,\n detachAll,\n };\n}\n","import { ref } from \"vue\";\nimport { useCallStore } from \"~/stores/callStore\";\nimport { useCallUi } from \"./call/useCallUi\";\n\n/**\n * The view side of the running call, for Call.vue. The call itself (signalling, peers, media)\n * lives in the call store, so unmounting this view doesn't end it.\n */\nexport default function useCall() {\n const callStore = useCallStore();\n const session = callStore.session;\n if (!session) {\n throw new Error(\"[vue-chat] useCall() needs a running call: callStore.startCall() first\");\n }\n const { media, peers } = session;\n\n const ui = useCallUi({\n localStream: media.localStream,\n screenStream: media.screenStream,\n remoteVideos: peers.remoteVideos,\n remoteScreens: peers.remoteScreens,\n isMinimized: () => callStore.isMinimized,\n });\n\n async function switchCamera(deviceId: string) {\n const stream = await session!.switchCamera(deviceId);\n // Same stream object with a new track: the preview has to be told.\n if (stream && ui.localVideo.value) ui.localVideo.value.srcObject = stream;\n }\n\n return {\n // Call state\n participantCount: session.participantCount,\n tileCount: session.tileCount,\n localStream: media.localStream,\n remoteVideos: peers.remoteVideos,\n remoteScreens: peers.remoteScreens,\n // Local media\n cameras: media.cameras,\n isAudioOn: media.isAudioOn,\n isVideoOn: media.isVideoOn,\n isScreenSharing: media.isScreenSharing,\n isFlashlightOn: media.isFlashlightOn,\n isFlashlightSupported: media.isFlashlightSupported,\n toggleAudio: media.toggleAudio,\n toggleVideo: media.toggleVideo,\n toggleFlashlight: media.toggleFlashlight,\n toggleScreenShare: session.toggleScreenShare,\n switchCamera,\n endCall: callStore.endCall,\n // View\n showCameraModal: ref(false),\n showControls: ui.showControls,\n resetControlsTimeout: ui.resetControlsTimeout,\n isFullscreen: ui.isFullscreen,\n toggleFullscreen: ui.toggleFullscreen,\n toggleRemote: ui.toggleRemote,\n videoPaused: ui.videoPaused,\n toggleVideoPause: ui.toggleVideoPause,\n localVideo: ui.localVideo,\n localScreen: ui.localScreen,\n remoteRefs: ui.remoteRefs,\n remoteScreenRefs: ui.remoteScreenRefs,\n remoteParents: ui.remoteParents,\n };\n}\n","<script setup lang=\"ts\">\nimport { useCallStore } from \"~/stores/callStore\";\nimport useLocalI18n, { useDirection } from \"~/composables/useLocalI18n\";\nimport { chat } from \"@i18n/locales\";\nimport useCall from \"~/composables/useCall\";\nimport { useDraggable, useWindowSize } from \"@vueuse/core\";\nimport { ref, computed, watch, onMounted, nextTick } from \"vue\";\nimport Button from \"primevue/button\";\nimport Listbox from \"primevue/listbox\";\nimport IconButton from \"~/components/general/IconButton.vue\";\nimport ResponsiveDialog from \"~/components/general/ResponsiveDialog.vue\";\n\nconst callStore = useCallStore();\n\n// ارجاع به المان مینیمایز شده برای VueUse\nconst minimizedRef = ref<HTMLElement | null>(null);\nconst bodyRef = ref<HTMLElement | null>(null);\nconst cameraPickerOpen = ref(false);\nconst { t, locale } = useLocalI18n(chat);\nconst { dir } = useDirection();\n\nconst {\n toggleVideoPause,\n toggleRemote,\n participantCount,\n endCall,\n toggleFullscreen,\n toggleFlashlight,\n toggleScreenShare,\n toggleAudio,\n toggleVideo,\n switchCamera,\n isFlashlightSupported,\n tileCount,\n isAudioOn,\n isVideoOn,\n isFlashlightOn,\n isFullscreen,\n isScreenSharing,\n showControls,\n resetControlsTimeout,\n cameras,\n videoPaused,\n localStream,\n localVideo,\n localScreen,\n remoteParents,\n remoteRefs,\n remoteScreens,\n remoteScreenRefs,\n remoteVideos,\n} = useCall();\n\nconst pickCamera = (deviceId: string) => {\n cameraPickerOpen.value = false;\n switchCamera(deviceId);\n};\n\n// The call screen is dark whatever the host's colour scheme, so its round controls use fixed\n// translucent tokens instead of the theme's secondary and contrast colours.\nconst translucent = {\n background: \"rgb(255 255 255 / 0.12)\",\n hoverBackground: \"rgb(255 255 255 / 0.2)\",\n activeBackground: \"rgb(255 255 255 / 0.28)\",\n borderColor: \"transparent\",\n hoverBorderColor: \"transparent\",\n activeBorderColor: \"transparent\",\n color: \"#ffffff\",\n hoverColor: \"#ffffff\",\n activeColor: \"#ffffff\",\n};\nconst lit = {\n background: \"#ffffff\",\n hoverBackground: \"rgb(255 255 255 / 0.9)\",\n activeBackground: \"rgb(255 255 255 / 0.8)\",\n borderColor: \"#ffffff\",\n hoverBorderColor: \"#ffffff\",\n activeBorderColor: \"#ffffff\",\n color: \"#151823\",\n hoverColor: \"#151823\",\n activeColor: \"#151823\",\n};\nconst callScheme = { root: { secondary: translucent, contrast: lit } };\nconst callButtonDt = { colorScheme: { light: callScheme, dark: callScheme } };\n\nconst footerButton = {\n dt: callButtonDt,\n text: false,\n size: \"large\",\n iconClass: \"size-6\",\n} as const;\n\n// --- PIP BACKGROUND VIDEO ---\n// در حالت مینیمایز، پسزمینه PIP یک ویدیوی زنده است: اگر کاربر ریموت فعال باشد\n// استریم آن کاربر نمایش داده میشود؛ در غیر این صورت استریم محلی کاربر.\nconst pipVideoRef = ref<HTMLVideoElement | null>(null);\nconst activeRemoteIndex = ref(0);\n\nconst remoteVideoEntries = computed(() => Object.entries(remoteVideos.value));\nconst hasRemoteVideos = computed(() => remoteVideoEntries.value.length > 0);\nconst activeRemoteUserId = computed<string | null>(() => {\n const entries = remoteVideoEntries.value;\n if (entries.length === 0) return null;\n return entries[activeRemoteIndex.value % entries.length][0];\n});\n\nconst pipStream = computed<MediaStream | null>(() => {\n if (hasRemoteVideos.value) {\n const id = activeRemoteUserId.value;\n return id ? (remoteVideos.value[id]?.stream ?? null) : null;\n }\n return localStream.value ?? null;\n});\n\nfunction cycleRemote() {\n const count = remoteVideoEntries.value.length;\n if (count === 0) return;\n activeRemoteIndex.value = (activeRemoteIndex.value + 1) % count;\n}\n\nwatch(\n [pipStream, () => callStore.isMinimized],\n async () => {\n await nextTick();\n const el = pipVideoRef.value;\n if (!el) return;\n const stream = pipStream.value;\n if (stream && el.srcObject !== stream) {\n el.srcObject = stream;\n el.play().catch(() => {});\n } else if (!stream && el.srcObject) {\n el.srcObject = null;\n }\n },\n { immediate: true },\n);\n\nonMounted(() => {\n bodyRef.value = document.body;\n});\n\n// --- DRAG LOGIC WITH BOUNDARIES & CORNER SNAPPING ---\nconst { width: windowWidth, height: windowHeight } = useWindowSize();\n\nconst PIP_WIDTH = 280; // معادل w-70 در Tailwind\nconst PIP_HEIGHT = 160; // معادل h-40 در Tailwind\nconst PADDING = 16;\n\n// ۱. راهاندازی Draggable روی عنصر minimizedRef\nconst { x, y, isDragging } = useDraggable(minimizedRef, {\n initialValue: {\n x:\n typeof window !== \"undefined\"\n ? window.innerWidth - PIP_WIDTH - PADDING\n : PADDING,\n y:\n typeof window !== \"undefined\"\n ? window.innerHeight - PIP_HEIGHT - PADDING\n : PADDING,\n },\n // غیرفعال کردن درگ در صورتی که کامپوننت مینیمایز نباشد\n disabled: computed(() => !callStore.isMinimized),\n});\n\n// ۲. اسنپ شدن به نزدیکترین گوشه بعد از رها کردن کلیک/لمس\nwatch(isDragging, (dragging) => {\n if (!dragging && callStore.isMinimized) {\n const maxX = windowWidth.value - PIP_WIDTH - PADDING;\n const maxY = windowHeight.value - PIP_HEIGHT - PADDING;\n\n // جهت RTL روی گوشه پیشفرض اولیه تاثیر میگذارد\n const isRtl = dir.value === \"rtl\";\n\n // پیدا کردن نزدیکترین گوشه بر اساس موقعیت فعلی درگ شده\n const targetX = x.value < windowWidth.value / 2 ? PADDING : maxX;\n const targetY = y.value < windowHeight.value / 2 ? PADDING : maxY;\n\n x.value = targetX;\n y.value = targetY;\n }\n});\n\n// بازنشانی موقعیت به گوشه مناسب در هنگام مینیمایز شدن مجدد\nwatch(\n () => callStore.isMinimized,\n (isMinimized) => {\n if (isMinimized) {\n nextTick(() => {\n const isRtl = dir.value === \"rtl\";\n x.value = isRtl ? PADDING : windowWidth.value - PIP_WIDTH - PADDING;\n y.value = windowHeight.value - PIP_HEIGHT - PADDING;\n });\n }\n },\n { immediate: true },\n);\n\n// ۳. محدود کردن مختصات در محدوده مانیتور و خروجی استایل\nconst clampedStyle = computed(() => {\n if (!callStore.isMinimized) return {};\n\n const maxX = windowWidth.value - PIP_WIDTH - PADDING;\n const maxY = windowHeight.value - PIP_HEIGHT - PADDING;\n\n const safeX = Math.max(PADDING, Math.min(x.value, maxX));\n const safeY = Math.max(PADDING, Math.min(y.value, maxY));\n\n return {\n left: `${safeX}px`,\n top: `${safeY}px`,\n };\n});\n</script>\n\n<template>\n <!-- استفاده از div معمولی به جای motion.div و اعمال پوزیشن با clampedStyle -->\n <div\n v-if=\"callStore.isActive && callStore.isMinimized\"\n ref=\"minimizedRef\"\n data-testid=\"call-pip\"\n :style=\"clampedStyle\"\n class=\"vue-chat fixed w-70 h-40 bg-black-600 rounded-2xl shadow-floating z-9999 overflow-hidden border border-white/10 flex flex-col items-center justify-center cursor-move touch-none\"\n :class=\"[!isDragging ? 'transition-all duration-300 ease-out' : '']\"\n >\n <video\n ref=\"pipVideoRef\"\n muted\n autoplay\n playsinline\n class=\"pointer-events-none absolute inset-0 z-0 h-full w-full object-cover\"\n />\n <div\n class=\"pointer-events-none absolute inset-0 bg-gradient-to-br from-blue-500/5 via-purple-500/5 to-pink-500/5 opacity-0 transition-opacity duration-500 group-hover:opacity-100\"\n />\n <div\n class=\"pointer-events-none absolute inset-0 bg-gradient-to-t from-black/50 via-transparent to-black/20\"\n />\n\n <div class=\"relative h-full w-full\">\n <div\n class=\"absolute top-3 right-3 left-3 z-10 flex items-center justify-between\"\n >\n <div\n class=\"flex items-center gap-x-2 rounded-full bg-black/40 px-3 py-1.5 backdrop-blur-sm\"\n >\n <div class=\"relative\">\n <div\n class=\"h-2.5 w-2.5 animate-pulse rounded-full bg-diamond-error\"\n />\n <div\n class=\"absolute inset-0 h-2.5 w-2.5 animate-ping rounded-full bg-diamond-error/30\"\n />\n </div>\n <span class=\"text-label-sm text-white/90 select-none\">{{\n t(\"Call active\")\n }}</span>\n <div class=\"flex -space-x-1\">\n <div\n class=\"h-1.5 w-1.5 animate-pulse rounded-full bg-green-400\"\n style=\"animation-delay: 0s\"\n />\n <div\n class=\"h-1.5 w-1.5 animate-pulse rounded-full bg-green-400\"\n style=\"animation-delay: 0.2s\"\n />\n <div\n class=\"h-1.5 w-1.5 animate-pulse rounded-full bg-green-400\"\n style=\"animation-delay: 0.4s\"\n />\n </div>\n </div>\n\n <IconButton\n icon=\"PhPhoneX\"\n :label=\"t('chat.call.controls.endCall')\"\n severity=\"danger\"\n :text=\"false\"\n icon-class=\"size-4\"\n data-testid=\"call-pip-end\"\n @pointerdown.stop\n @click.stop=\"endCall\"\n />\n </div>\n\n <div\n class=\"absolute right-3 bottom-3 left-3 z-10 flex items-center justify-between\"\n >\n <div class=\"flex items-center gap-2\">\n <Button\n :label=\"String(participantCount)\"\n :aria-label=\"t('chat.call.controls.nextParticipant')\"\n :disabled=\"!hasRemoteVideos\"\n :dt=\"callButtonDt\"\n severity=\"secondary\"\n size=\"small\"\n rounded\n @pointerdown.stop\n @click.stop=\"cycleRemote\"\n >\n <template #icon>\n <BIcon icon=\"PhUsers\" class=\"size-3\" />\n </template>\n </Button>\n\n <div v-if=\"!isAudioOn || !isVideoOn\" class=\"flex gap-1\">\n <div\n v-if=\"!isAudioOn\"\n class=\"flex h-7 w-7 items-center justify-center rounded-full bg-diamond-error\"\n >\n <BIcon icon=\"PhMicrophoneSlash\" class=\"h-3 w-3 fill-white\" />\n </div>\n <div\n v-if=\"!isVideoOn\"\n class=\"flex h-7 w-7 items-center justify-center rounded-full bg-diamond-error\"\n >\n <BIcon icon=\"PhVideoCameraSlash\" class=\"h-3 w-3 fill-white\" />\n </div>\n </div>\n </div>\n\n <IconButton\n icon=\"PhResize\"\n :label=\"t('chat.call.controls.maximize')\"\n :dt=\"callButtonDt\"\n :text=\"false\"\n icon-class=\"size-4\"\n data-testid=\"call-maximize\"\n @pointerdown.stop\n @click.stop=\"callStore.maximize()\"\n />\n </div>\n </div>\n </div>\n\n <div\n v-show=\"callStore.isActive && !callStore.isMinimized\"\n data-testid=\"call-view\"\n class=\"vue-chat fixed inset-0 z-[60] flex h-full w-full flex-col bg-diamond-black\"\n >\n <!-- Header -->\n <div\n v-if=\"!callStore.isMinimized\"\n class=\"flex h-16 items-center justify-between px-4 transition-all duration-300 sm:h-20\"\n :class=\"showControls ? 'opacity-100' : 'opacity-0'\"\n @mouseenter=\"resetControlsTimeout\"\n @mousemove=\"resetControlsTimeout\"\n >\n <div class=\"flex items-center gap-x-4\">\n <div class=\"hidden select-none text-label-lg text-white md:block\">\n {{ t(\"Behayand Meeting\") }}\n </div>\n <div class=\"flex items-center gap-x-2 text-white text-body-sm\">\n <BIcon icon=\"PhUsers\" class=\"h-4 w-4 fill-white\" />\n <span data-testid=\"call-participants\"\n >{{ participantCount }}\n {{\n participantCount > 1 ? t(\"participants\") : t(\"participant\")\n }}</span\n >\n </div>\n </div>\n <div class=\"flex items-center gap-x-4.5\">\n <div\n class=\"flex h-6 items-center justify-center rounded-full bg-diamond-error px-2 text-white select-none\"\n >\n <div class=\"text-body-sm\">\n {{\n new Date().toLocaleTimeString(locale, {\n hour: \"2-digit\",\n minute: \"2-digit\",\n hour12: true,\n })\n }}\n </div>\n </div>\n <IconButton\n icon=\"PhCaretDown\"\n :label=\"t('chat.call.controls.minimize')\"\n v-bind=\"footerButton\"\n data-testid=\"call-minimize\"\n @click=\"callStore.minimize\"\n />\n </div>\n </div>\n\n <!-- Main Content -->\n <div\n class=\"relative grid w-full overflow-hidden\"\n :class=\"callStore.isMinimized ? 'h-full p-0' : 'h-full p-4'\"\n @mousemove=\"resetControlsTimeout\"\n >\n <div\n v-show=\"tileCount\"\n class=\"grid h-full min-h-0 w-full min-w-0 grid-cols-1 gap-4 md:grid-cols-[repeat(auto-fit,minmax(300px,1fr))]\"\n >\n <div\n v-show=\"isScreenSharing\"\n :ref=\"(el) => (remoteParents[`self_screen`] = el as any)\"\n class=\"group relative flex aspect-video h-full w-full flex-col items-center justify-center overflow-hidden rounded-2xl border-2 border-chat-primary/0 bg-black-600 p-2\"\n >\n <video\n ref=\"localScreen\"\n autoplay\n muted\n playsinline\n class=\"absolute inset-0 z-0 h-full w-full object-cover\"\n />\n\n <div class=\"absolute bottom-3 left-3 z-20 flex items-center gap-x-2\">\n <div\n class=\"rounded bg-black-500 px-2 py-1 text-label-sm text-white select-none\"\n >\n {{ t(\"Your Presentation\") }}\n </div>\n <div\n class=\"flex h-10 w-10 items-center justify-center rounded-full bg-black-500\"\n >\n <BIcon icon=\"PhMonitor\" class=\"h-4 w-4 fill-white\" />\n </div>\n <IconButton\n :icon=\"videoPaused['self_screen'] ? 'PhPlay' : 'PhPause'\"\n :label=\"videoPaused['self_screen'] ? t('chat.call.controls.playVideo') : t('chat.call.controls.pauseVideo')\"\n :dt=\"callButtonDt\"\n :text=\"false\"\n icon-class=\"size-4\"\n @click=\"toggleVideoPause('self_screen', localScreen as any)\"\n />\n <IconButton\n :icon=\"isFullscreen ? 'PhCornersIn' : 'PhFrameCorners'\"\n :label=\"\n\n isFullscreen\n\n ? t('chat.call.controls.exitFullscreen')\n\n : t('chat.call.controls.fullscreen')\n\n \"\n :dt=\"callButtonDt\"\n :text=\"false\"\n icon-class=\"size-4\"\n @click=\"toggleRemote(`self_screen`)\"\n />\n </div>\n </div>\n <div\n v-for=\"(stream, remoteUserId) in remoteVideos\"\n :key=\"`remote-${remoteUserId}`\"\n data-testid=\"call-remote-video\"\n :ref=\"\n (el) => (remoteParents[`remote_video_${remoteUserId}`] = el as any)\n \"\n class=\"group relative flex aspect-video h-full w-full flex-col items-center justify-center overflow-hidden rounded-2xl border-2 border-chat-primary/0 bg-black-600 p-2\"\n >\n <video\n :ref=\"\n (el) => {\n if (el) remoteRefs[remoteUserId] = el as any;\n }\n \"\n autoplay\n playsinline\n class=\"absolute inset-0 z-0 h-full w-full object-cover\"\n />\n\n <div class=\"absolute bottom-2 left-2 z-20 flex items-center gap-x-1\">\n <div\n class=\"rounded bg-black-500 px-1.5 py-0.5 text-label-sm text-white select-none\"\n >\n {{ stream.name.slice(0, 15) }}\n </div>\n <IconButton\n :icon=\"videoPaused[`remote_video_${remoteUserId}`] ? 'PhPlay' : 'PhPause'\"\n :label=\"\n videoPaused[`remote_video_${remoteUserId}`]\n ? t('chat.call.controls.playVideo')\n : t('chat.call.controls.pauseVideo')\n \"\n :dt=\"callButtonDt\"\n :text=\"false\"\n icon-class=\"size-4\"\n @click=\"\n toggleVideoPause(\n `remote_video_${remoteUserId}`,\n remoteRefs[remoteUserId] as any,\n )\n \"\n />\n <IconButton\n :icon=\"isFullscreen ? 'PhCornersIn' : 'PhFrameCorners'\"\n :label=\"\n\n isFullscreen\n\n ? t('chat.call.controls.exitFullscreen')\n\n : t('chat.call.controls.fullscreen')\n\n \"\n :dt=\"callButtonDt\"\n :text=\"false\"\n icon-class=\"size-4\"\n @click=\"toggleRemote(`remote_video_${remoteUserId}`)\"\n />\n </div>\n </div>\n\n <div\n v-for=\"(stream, remoteUserId) in remoteScreens\"\n :key=\"`remote-screen-${remoteUserId}`\"\n data-testid=\"call-remote-screen\"\n :ref=\"\n (el) => (remoteParents[`remote_screen_${remoteUserId}`] = el as any)\n \"\n class=\"group relative flex aspect-video h-full w-full flex-col items-center justify-center overflow-hidden rounded-2xl border-2 border-chat-primary/0 bg-black-600 p-2\"\n >\n <video\n :ref=\"\n (el) => {\n if (el) remoteScreenRefs[remoteUserId] = el as any;\n }\n \"\n autoplay\n muted\n playsinline\n class=\"absolute inset-0 z-0 h-full w-full object-cover\"\n />\n\n <div class=\"absolute bottom-3 left-3 z-20 flex items-center gap-x-2\">\n <div\n class=\"rounded bg-black-500 px-2 py-1 text-label-sm text-white select-none\"\n >\n {{ t(\"Presentation of\") }} {{ stream.name.slice(0, 15) }}\n </div>\n <div\n class=\"flex h-10 w-10 items-center justify-center rounded-full bg-black-500\"\n >\n <BIcon icon=\"PhMonitor\" class=\"h-4 w-4 fill-white\" />\n </div>\n <IconButton\n :icon=\"videoPaused[`remote_screen_${remoteUserId}`] ? 'PhPlay' : 'PhPause'\"\n :label=\"\n videoPaused[`remote_screen_${remoteUserId}`]\n ? t('chat.call.controls.playVideo')\n : t('chat.call.controls.pauseVideo')\n \"\n :dt=\"callButtonDt\"\n :text=\"false\"\n icon-class=\"size-4\"\n @click=\"\n toggleVideoPause(\n `remote_screen_${remoteUserId}`,\n remoteScreenRefs[remoteUserId] || null,\n )\n \"\n />\n <IconButton\n :icon=\"isFullscreen ? 'PhCornersIn' : 'PhFrameCorners'\"\n :label=\"\n\n isFullscreen\n\n ? t('chat.call.controls.exitFullscreen')\n\n : t('chat.call.controls.fullscreen')\n\n \"\n :dt=\"callButtonDt\"\n :text=\"false\"\n icon-class=\"size-4\"\n @click=\"toggleRemote(`remote_screen_${remoteUserId}`)\"\n />\n </div>\n </div>\n </div>\n\n <!-- وبکم محلی (وقتی هنوز کارهای دیگر در صفحه فعال است) -->\n <div class=\"flex min-h-0\" :class=\"[tileCount && 'absolute inset-0 m-4']\">\n <div\n v-if=\"!callStore.isMinimized\"\n class=\"relative flex flex-col items-center justify-center overflow-hidden rounded-2xl border-2 border-chat-primary/0 bg-black-600 p-2\"\n :class=\"[\n tileCount ? 'absolute z-10 h-[132px] w-[236px]' : 'h-full w-full',\n ]\"\n >\n <video\n ref=\"localVideo\"\n data-testid=\"call-local-video\"\n autoplay\n muted\n playsinline\n class=\"pointer-events-none absolute inset-0 z-0 h-full w-full object-cover\"\n />\n\n <div\n class=\"pointer-events-none absolute inset-0 bg-gradient-to-t from-black/60 via-transparent to-transparent\"\n />\n\n <div class=\"absolute bottom-3 left-3 z-20 flex items-center gap-x-2\">\n <div\n class=\"rounded bg-black-500 px-2 py-1 text-label-sm text-white select-none\"\n >\n {{ t(\"You\") }}\n </div>\n <div\n v-if=\"!isAudioOn\"\n class=\"flex h-7 w-7 items-center justify-center rounded-full bg-diamond-error\"\n >\n <BIcon icon=\"PhMicrophoneSlash\" class=\"h-3 w-3 fill-white\" />\n </div>\n <IconButton\n :icon=\"videoPaused['self_cam'] ? 'PhPlay' : 'PhPause'\"\n :label=\"videoPaused['self_cam'] ? t('chat.call.controls.playVideo') : t('chat.call.controls.pauseVideo')\"\n :dt=\"callButtonDt\"\n :text=\"false\"\n icon-class=\"size-4\"\n @click=\"toggleVideoPause('self_cam', localVideo as any)\"\n />\n <IconButton\n :icon=\"isFullscreen ? 'PhCornersIn' : 'PhFrameCorners'\"\n :label=\"\n\n isFullscreen\n\n ? t('chat.call.controls.exitFullscreen')\n\n : t('chat.call.controls.fullscreen')\n\n \"\n :dt=\"callButtonDt\"\n :text=\"false\"\n icon-class=\"size-4\"\n @click=\"toggleRemote('self_cam')\"\n />\n </div>\n\n <div\n v-if=\"!isVideoOn\"\n class=\"absolute inset-0 flex items-center justify-center bg-black-600\"\n >\n <div class=\"text-center text-white\">\n <div\n class=\"mx-auto mb-2 flex h-16 w-16 items-center justify-center rounded-full bg-chat-primary\"\n >\n <span class=\"text-title-lg font-semibold\">{{ t(\"You\") }}</span>\n </div>\n <p class=\"text-label-md\">{{ t(\"Camera is off\") }}</p>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Footer Controls -->\n <div\n v-if=\"!callStore.isMinimized\"\n class=\"flex h-21 w-full items-center justify-center gap-x-1.5 border-t border-t-[#2C2C2E] bg-black-600 transition-all duration-300 sm:gap-x-3\"\n :class=\"showControls ? 'opacity-100' : 'opacity-0'\"\n @mouseenter=\"resetControlsTimeout\"\n @mousemove=\"resetControlsTimeout\"\n >\n <IconButton\n :icon=\"isAudioOn ? 'PhMicrophone' : 'PhMicrophoneSlash'\"\n :label=\"isAudioOn ? t('chat.call.controls.mute') : t('chat.call.controls.unmute')\"\n :severity=\"isAudioOn ? 'secondary' : 'contrast'\"\n v-bind=\"footerButton\"\n data-testid=\"call-toggle-audio\"\n :data-active=\"isAudioOn\"\n @click=\"toggleAudio\"\n />\n\n <IconButton\n :icon=\"isVideoOn ? 'PhVideo' : 'PhVideoCameraSlash'\"\n :label=\"isVideoOn ? t('chat.call.controls.cameraOff') : t('chat.call.controls.cameraOn')\"\n :severity=\"isVideoOn ? 'secondary' : 'contrast'\"\n v-bind=\"footerButton\"\n data-testid=\"call-toggle-video\"\n :data-active=\"isVideoOn\"\n @click=\"toggleVideo\"\n />\n\n <template v-if=\"cameras.length > 1\">\n <IconButton\n icon=\"PhCaretUp\"\n :label=\"t('chat.call.controls.chooseCamera')\"\n v-bind=\"footerButton\"\n @click=\"cameraPickerOpen = true\"\n />\n <ResponsiveDialog\n v-model:visible=\"cameraPickerOpen\"\n :header=\"t('chat.call.controls.cameras')\"\n width=\"24rem\"\n >\n <Listbox\n :options=\"cameras\"\n option-value=\"deviceId\"\n :option-label=\"(camera: MediaDeviceInfo) => camera.label || `Camera ${camera.deviceId}`\"\n class=\"w-full\"\n @change=\"(event) => pickCamera(event.value)\"\n />\n </ResponsiveDialog>\n </template>\n\n <IconButton\n icon=\"PhMonitorArrowUp\"\n :label=\"isScreenSharing ? t('chat.call.controls.stopSharing') : t('chat.call.controls.shareScreen')\"\n :severity=\"isScreenSharing ? 'contrast' : 'secondary'\"\n v-bind=\"footerButton\"\n data-testid=\"call-toggle-screen\"\n :data-active=\"isScreenSharing\"\n @click=\"toggleScreenShare\"\n />\n\n <IconButton\n :icon=\"isFullscreen ? 'PhCornersIn' : 'PhFrameCorners'\"\n :label=\"\n\n isFullscreen\n\n ? t('chat.call.controls.exitFullscreen')\n\n : t('chat.call.controls.fullscreen')\n\n \"\n v-bind=\"footerButton\"\n @click=\"toggleFullscreen\"\n />\n\n <IconButton\n v-if=\"isFlashlightSupported\"\n :icon=\"isFlashlightOn ? 'PhLightning' : 'PhLightningSlash'\"\n :label=\"t('chat.call.controls.flashlight')\"\n :severity=\"isFlashlightOn ? 'contrast' : 'secondary'\"\n v-bind=\"footerButton\"\n @click=\"toggleFlashlight\"\n />\n\n <IconButton\n icon=\"PhPhoneX\"\n :label=\"t('chat.call.controls.endCall')\"\n severity=\"danger\"\n :text=\"false\"\n size=\"large\"\n icon-class=\"size-6\"\n data-testid=\"call-end\"\n @click=\"endCall\"\n />\n </div>\n </div>\n</template>\n"],"names":["_unref","_createElementBlock","_normalizeClass","_createElementVNode","_toDisplayString","_createVNode","IconButton","_openBlock","_withModifiers","_withDirectives","_mergeProps","_Fragment","_renderList","ResponsiveDialog","_createBlock","_vShow"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Call-D48LfnDv.cjs","sources":["../../app/composables/call/useCallUi.ts","../../app/composables/useCall.ts","../../app/components/call/Call.vue"],"sourcesContent":["import { nextTick, onMounted, onUnmounted, ref, watch, type Ref } from \"vue\";\nimport type { RemoteStream } from \"./peers\";\n\nexport interface CallUiOptions {\n localStream: Ref<MediaStream | null>;\n screenStream: Ref<MediaStream | null>;\n remoteVideos: Ref<Record<string, RemoteStream>>;\n remoteScreens: Ref<Record<string, RemoteStream>>;\n /** Re-attach streams when this changes: minimizing swaps the <video> elements. */\n isMinimized: () => boolean;\n}\n\nconst CONTROLS_HIDE_AFTER_MS = 3000;\n\n/** The call screen's view state, and keeping each <video> element showing the right stream. */\nexport function useCallUi(opts: CallUiOptions) {\n const { localStream, screenStream, remoteVideos, remoteScreens } = opts;\n\n // Template refs, bound by Call.vue.\n const localVideo = ref<HTMLVideoElement | null>(null);\n const localScreen = ref<HTMLVideoElement | null>(null);\n const remoteRefs = ref<Record<string, HTMLVideoElement | null>>({});\n const remoteScreenRefs = ref<Record<string, HTMLVideoElement | undefined>>({});\n const remoteParents = ref<Record<string, HTMLElement>>({});\n\n // --- Controls fade out after a few seconds without input ---\n const showControls = ref(true);\n let controlsTimeout: ReturnType<typeof setTimeout> | undefined;\n function resetControlsTimeout() {\n showControls.value = true;\n clearTimeout(controlsTimeout);\n controlsTimeout = setTimeout(\n () => (showControls.value = false),\n CONTROLS_HIDE_AFTER_MS,\n );\n }\n const inputEvents = [\"mousemove\", \"click\", \"keydown\"] as const;\n onMounted(() => {\n resetControlsTimeout();\n inputEvents.forEach((e) => document.addEventListener(e, resetControlsTimeout));\n });\n onUnmounted(() => {\n inputEvents.forEach((e) => document.removeEventListener(e, resetControlsTimeout));\n clearTimeout(controlsTimeout);\n // The call goes on; only this view lets go of its elements.\n detachAll();\n });\n\n // --- Fullscreen: the whole call, or a single tile ---\n const isFullscreen = ref(false);\n function toggleFullscreen(target: HTMLElement = document.documentElement) {\n if (!document.fullscreenElement) {\n void target.requestFullscreen?.();\n isFullscreen.value = true;\n } else {\n void document.exitFullscreen();\n isFullscreen.value = false;\n }\n }\n const toggleRemote = (tileId: string, el?: HTMLElement) => {\n const container = el ?? remoteParents.value[tileId];\n if (container) toggleFullscreen(container);\n };\n\n // --- Pausing a single tile ---\n const videoPaused = ref<Record<string, boolean>>({});\n function toggleVideoPause(tileId: string, el: HTMLVideoElement | null | undefined) {\n if (!(el instanceof HTMLVideoElement)) return;\n if (videoPaused.value[tileId]) void el.play();\n else el.pause();\n videoPaused.value[tileId] = !videoPaused.value[tileId];\n }\n\n // --- Keep each <video> showing its stream ---\n const attach = (el: HTMLVideoElement | null | undefined, stream: MediaStream) => {\n if (!el) return;\n if (el.srcObject !== stream) el.srcObject = stream;\n el.play().catch(() => {});\n };\n\n watch(\n [localStream, opts.isMinimized],\n async () => {\n await nextTick();\n if (localStream.value && localVideo.value)\n localVideo.value.srcObject = localStream.value;\n },\n { immediate: true },\n );\n watch(\n [screenStream, opts.isMinimized],\n async () => {\n await nextTick();\n if (localScreen.value) localScreen.value.srcObject = screenStream.value;\n },\n { immediate: true },\n );\n watch(\n [() => ({ ...remoteVideos.value }), opts.isMinimized],\n async () => {\n await nextTick();\n for (const [id, { stream }] of Object.entries(remoteVideos.value))\n attach(remoteRefs.value[id], stream);\n },\n { immediate: true },\n );\n watch(\n [() => ({ ...remoteScreens.value }), opts.isMinimized],\n async () => {\n await nextTick();\n for (const [id, { stream }] of Object.entries(remoteScreens.value))\n attach(remoteScreenRefs.value[id], stream);\n },\n { immediate: true },\n );\n\n /** Detaches every <video>, so no element keeps a stopped stream alive. */\n function detachAll() {\n const all = [\n localVideo.value,\n localScreen.value,\n ...Object.values(remoteRefs.value),\n ...Object.values(remoteScreenRefs.value),\n ];\n for (const el of all) if (el) el.srcObject = null;\n }\n\n return {\n localVideo,\n localScreen,\n remoteRefs,\n remoteScreenRefs,\n remoteParents,\n showControls,\n resetControlsTimeout,\n isFullscreen,\n toggleFullscreen: () => toggleFullscreen(),\n toggleRemote,\n videoPaused,\n toggleVideoPause,\n detachAll,\n };\n}\n","import { ref } from \"vue\";\nimport { useCallStore } from \"~/stores/callStore\";\nimport { useCallUi } from \"./call/useCallUi\";\n\n/**\n * The view side of the running call, for Call.vue. The call itself (signalling, peers, media)\n * lives in the call store, so unmounting this view doesn't end it.\n */\nexport default function useCall() {\n const callStore = useCallStore();\n const session = callStore.session;\n if (!session) {\n throw new Error(\"[vue-chat] useCall() needs a running call: callStore.startCall() first\");\n }\n const { media, peers } = session;\n\n const ui = useCallUi({\n localStream: media.localStream,\n screenStream: media.screenStream,\n remoteVideos: peers.remoteVideos,\n remoteScreens: peers.remoteScreens,\n isMinimized: () => callStore.isMinimized,\n });\n\n async function switchCamera(deviceId: string) {\n const stream = await session!.switchCamera(deviceId);\n // Same stream object with a new track: the preview has to be told.\n if (stream && ui.localVideo.value) ui.localVideo.value.srcObject = stream;\n }\n\n return {\n // Call state\n participantCount: session.participantCount,\n tileCount: session.tileCount,\n localStream: media.localStream,\n remoteVideos: peers.remoteVideos,\n remoteScreens: peers.remoteScreens,\n // Local media\n cameras: media.cameras,\n isAudioOn: media.isAudioOn,\n isVideoOn: media.isVideoOn,\n isScreenSharing: media.isScreenSharing,\n isFlashlightOn: media.isFlashlightOn,\n isFlashlightSupported: media.isFlashlightSupported,\n toggleAudio: media.toggleAudio,\n toggleVideo: media.toggleVideo,\n toggleFlashlight: media.toggleFlashlight,\n toggleScreenShare: session.toggleScreenShare,\n switchCamera,\n endCall: callStore.endCall,\n // View\n showCameraModal: ref(false),\n showControls: ui.showControls,\n resetControlsTimeout: ui.resetControlsTimeout,\n isFullscreen: ui.isFullscreen,\n toggleFullscreen: ui.toggleFullscreen,\n toggleRemote: ui.toggleRemote,\n videoPaused: ui.videoPaused,\n toggleVideoPause: ui.toggleVideoPause,\n localVideo: ui.localVideo,\n localScreen: ui.localScreen,\n remoteRefs: ui.remoteRefs,\n remoteScreenRefs: ui.remoteScreenRefs,\n remoteParents: ui.remoteParents,\n };\n}\n","<script setup lang=\"ts\">\nimport { useCallStore } from \"~/stores/callStore\";\nimport useLocalI18n, { useDirection } from \"~/composables/useLocalI18n\";\nimport { chat } from \"@i18n/locales\";\nimport useCall from \"~/composables/useCall\";\nimport { useDraggable, useWindowSize } from \"@vueuse/core\";\nimport { ref, computed, watch, onMounted, nextTick } from \"vue\";\nimport Button from \"primevue/button\";\nimport Listbox from \"primevue/listbox\";\nimport IconButton from \"~/components/general/IconButton.vue\";\nimport ResponsiveDialog from \"~/components/general/ResponsiveDialog.vue\";\n\nconst callStore = useCallStore();\n\n// ارجاع به المان مینیمایز شده برای VueUse\nconst minimizedRef = ref<HTMLElement | null>(null);\nconst bodyRef = ref<HTMLElement | null>(null);\nconst cameraPickerOpen = ref(false);\nconst { t, locale } = useLocalI18n(chat);\nconst { dir } = useDirection();\n\nconst {\n toggleVideoPause,\n toggleRemote,\n participantCount,\n endCall,\n toggleFullscreen,\n toggleFlashlight,\n toggleScreenShare,\n toggleAudio,\n toggleVideo,\n switchCamera,\n isFlashlightSupported,\n tileCount,\n isAudioOn,\n isVideoOn,\n isFlashlightOn,\n isFullscreen,\n isScreenSharing,\n showControls,\n resetControlsTimeout,\n cameras,\n videoPaused,\n localStream,\n localVideo,\n localScreen,\n remoteParents,\n remoteRefs,\n remoteScreens,\n remoteScreenRefs,\n remoteVideos,\n} = useCall();\n\nconst pickCamera = (deviceId: string) => {\n cameraPickerOpen.value = false;\n switchCamera(deviceId);\n};\n\n// The call screen is dark whatever the host's colour scheme, so its round controls use fixed\n// translucent tokens instead of the theme's secondary and contrast colours.\nconst translucent = {\n background: \"rgb(255 255 255 / 0.12)\",\n hoverBackground: \"rgb(255 255 255 / 0.2)\",\n activeBackground: \"rgb(255 255 255 / 0.28)\",\n borderColor: \"transparent\",\n hoverBorderColor: \"transparent\",\n activeBorderColor: \"transparent\",\n color: \"#ffffff\",\n hoverColor: \"#ffffff\",\n activeColor: \"#ffffff\",\n};\nconst lit = {\n background: \"#ffffff\",\n hoverBackground: \"rgb(255 255 255 / 0.9)\",\n activeBackground: \"rgb(255 255 255 / 0.8)\",\n borderColor: \"#ffffff\",\n hoverBorderColor: \"#ffffff\",\n activeBorderColor: \"#ffffff\",\n color: \"#151823\",\n hoverColor: \"#151823\",\n activeColor: \"#151823\",\n};\nconst callScheme = { root: { secondary: translucent, contrast: lit } };\nconst callButtonDt = { colorScheme: { light: callScheme, dark: callScheme } };\n\nconst footerButton = {\n dt: callButtonDt,\n text: false,\n size: \"large\",\n iconClass: \"size-6\",\n} as const;\n\n// --- PIP BACKGROUND VIDEO ---\n// در حالت مینیمایز، پسزمینه PIP یک ویدیوی زنده است: اگر کاربر ریموت فعال باشد\n// استریم آن کاربر نمایش داده میشود؛ در غیر این صورت استریم محلی کاربر.\nconst pipVideoRef = ref<HTMLVideoElement | null>(null);\nconst activeRemoteIndex = ref(0);\n\nconst remoteVideoEntries = computed(() => Object.entries(remoteVideos.value));\nconst hasRemoteVideos = computed(() => remoteVideoEntries.value.length > 0);\nconst activeRemoteUserId = computed<string | null>(() => {\n const entries = remoteVideoEntries.value;\n if (entries.length === 0) return null;\n return entries[activeRemoteIndex.value % entries.length][0];\n});\n\nconst pipStream = computed<MediaStream | null>(() => {\n if (hasRemoteVideos.value) {\n const id = activeRemoteUserId.value;\n return id ? (remoteVideos.value[id]?.stream ?? null) : null;\n }\n return localStream.value ?? null;\n});\n\nfunction cycleRemote() {\n const count = remoteVideoEntries.value.length;\n if (count === 0) return;\n activeRemoteIndex.value = (activeRemoteIndex.value + 1) % count;\n}\n\nwatch(\n [pipStream, () => callStore.isMinimized],\n async () => {\n await nextTick();\n const el = pipVideoRef.value;\n if (!el) return;\n const stream = pipStream.value;\n if (stream && el.srcObject !== stream) {\n el.srcObject = stream;\n el.play().catch(() => {});\n } else if (!stream && el.srcObject) {\n el.srcObject = null;\n }\n },\n { immediate: true },\n);\n\nonMounted(() => {\n bodyRef.value = document.body;\n});\n\n// --- DRAG LOGIC WITH BOUNDARIES & CORNER SNAPPING ---\nconst { width: windowWidth, height: windowHeight } = useWindowSize();\n\nconst PIP_WIDTH = 280; // معادل w-70 در Tailwind\nconst PIP_HEIGHT = 160; // معادل h-40 در Tailwind\nconst PADDING = 16;\n\n// ۱. راهاندازی Draggable روی عنصر minimizedRef\nconst { x, y, isDragging } = useDraggable(minimizedRef, {\n initialValue: {\n x:\n typeof window !== \"undefined\"\n ? window.innerWidth - PIP_WIDTH - PADDING\n : PADDING,\n y:\n typeof window !== \"undefined\"\n ? window.innerHeight - PIP_HEIGHT - PADDING\n : PADDING,\n },\n // غیرفعال کردن درگ در صورتی که کامپوننت مینیمایز نباشد\n disabled: computed(() => !callStore.isMinimized),\n});\n\n// ۲. اسنپ شدن به نزدیکترین گوشه بعد از رها کردن کلیک/لمس\nwatch(isDragging, (dragging) => {\n if (!dragging && callStore.isMinimized) {\n const maxX = windowWidth.value - PIP_WIDTH - PADDING;\n const maxY = windowHeight.value - PIP_HEIGHT - PADDING;\n\n // جهت RTL روی گوشه پیشفرض اولیه تاثیر میگذارد\n const isRtl = dir.value === \"rtl\";\n\n // پیدا کردن نزدیکترین گوشه بر اساس موقعیت فعلی درگ شده\n const targetX = x.value < windowWidth.value / 2 ? PADDING : maxX;\n const targetY = y.value < windowHeight.value / 2 ? PADDING : maxY;\n\n x.value = targetX;\n y.value = targetY;\n }\n});\n\n// بازنشانی موقعیت به گوشه مناسب در هنگام مینیمایز شدن مجدد\nwatch(\n () => callStore.isMinimized,\n (isMinimized) => {\n if (isMinimized) {\n nextTick(() => {\n const isRtl = dir.value === \"rtl\";\n x.value = isRtl ? PADDING : windowWidth.value - PIP_WIDTH - PADDING;\n y.value = windowHeight.value - PIP_HEIGHT - PADDING;\n });\n }\n },\n { immediate: true },\n);\n\n// ۳. محدود کردن مختصات در محدوده مانیتور و خروجی استایل\nconst clampedStyle = computed(() => {\n if (!callStore.isMinimized) return {};\n\n const maxX = windowWidth.value - PIP_WIDTH - PADDING;\n const maxY = windowHeight.value - PIP_HEIGHT - PADDING;\n\n const safeX = Math.max(PADDING, Math.min(x.value, maxX));\n const safeY = Math.max(PADDING, Math.min(y.value, maxY));\n\n return {\n left: `${safeX}px`,\n top: `${safeY}px`,\n };\n});\n</script>\n\n<template>\n <!-- استفاده از div معمولی به جای motion.div و اعمال پوزیشن با clampedStyle -->\n <div\n v-if=\"callStore.isActive && callStore.isMinimized\"\n ref=\"minimizedRef\"\n data-testid=\"call-pip\"\n :style=\"clampedStyle\"\n class=\"vue-chat fixed w-70 h-40 bg-black-600 rounded-2xl shadow-floating z-9999 overflow-hidden border border-white/10 flex flex-col items-center justify-center cursor-move touch-none\"\n :class=\"[!isDragging ? 'transition-all duration-300 ease-out' : '']\"\n >\n <video\n ref=\"pipVideoRef\"\n muted\n autoplay\n playsinline\n class=\"pointer-events-none absolute inset-0 z-0 h-full w-full object-cover\"\n />\n <div\n class=\"pointer-events-none absolute inset-0 bg-gradient-to-br from-blue-500/5 via-purple-500/5 to-pink-500/5 opacity-0 transition-opacity duration-500 group-hover:opacity-100\"\n />\n <div\n class=\"pointer-events-none absolute inset-0 bg-gradient-to-t from-black/50 via-transparent to-black/20\"\n />\n\n <div class=\"relative h-full w-full\">\n <div\n class=\"absolute top-3 right-3 left-3 z-10 flex items-center justify-between\"\n >\n <div\n class=\"flex items-center gap-x-2 rounded-full bg-black/40 px-3 py-1.5 backdrop-blur-sm\"\n >\n <div class=\"relative\">\n <div\n class=\"h-2.5 w-2.5 animate-pulse rounded-full bg-diamond-error\"\n />\n <div\n class=\"absolute inset-0 h-2.5 w-2.5 animate-ping rounded-full bg-diamond-error/30\"\n />\n </div>\n <span class=\"text-label-sm text-white/90 select-none\">{{\n t(\"Call active\")\n }}</span>\n <div class=\"flex -space-x-1\">\n <div\n class=\"h-1.5 w-1.5 animate-pulse rounded-full bg-green-400\"\n style=\"animation-delay: 0s\"\n />\n <div\n class=\"h-1.5 w-1.5 animate-pulse rounded-full bg-green-400\"\n style=\"animation-delay: 0.2s\"\n />\n <div\n class=\"h-1.5 w-1.5 animate-pulse rounded-full bg-green-400\"\n style=\"animation-delay: 0.4s\"\n />\n </div>\n </div>\n\n <IconButton\n icon=\"PhPhoneX\"\n :label=\"t('chat.call.controls.endCall')\"\n severity=\"danger\"\n :text=\"false\"\n icon-class=\"size-4\"\n data-testid=\"call-pip-end\"\n @pointerdown.stop\n @click.stop=\"endCall\"\n />\n </div>\n\n <div\n class=\"absolute right-3 bottom-3 left-3 z-10 flex items-center justify-between\"\n >\n <div class=\"flex items-center gap-2\">\n <Button\n :label=\"String(participantCount)\"\n :aria-label=\"t('chat.call.controls.nextParticipant')\"\n :disabled=\"!hasRemoteVideos\"\n :dt=\"callButtonDt\"\n severity=\"secondary\"\n size=\"small\"\n rounded\n @pointerdown.stop\n @click.stop=\"cycleRemote\"\n >\n <template #icon>\n <BIcon icon=\"PhUsers\" class=\"size-3\" />\n </template>\n </Button>\n\n <div v-if=\"!isAudioOn || !isVideoOn\" class=\"flex gap-1\">\n <div\n v-if=\"!isAudioOn\"\n class=\"flex h-7 w-7 items-center justify-center rounded-full bg-diamond-error\"\n >\n <BIcon icon=\"PhMicrophoneSlash\" class=\"h-3 w-3 fill-white\" />\n </div>\n <div\n v-if=\"!isVideoOn\"\n class=\"flex h-7 w-7 items-center justify-center rounded-full bg-diamond-error\"\n >\n <BIcon icon=\"PhVideoCameraSlash\" class=\"h-3 w-3 fill-white\" />\n </div>\n </div>\n </div>\n\n <IconButton\n icon=\"PhResize\"\n :label=\"t('chat.call.controls.maximize')\"\n :dt=\"callButtonDt\"\n :text=\"false\"\n icon-class=\"size-4\"\n data-testid=\"call-maximize\"\n @pointerdown.stop\n @click.stop=\"callStore.maximize()\"\n />\n </div>\n </div>\n </div>\n\n <div\n v-show=\"callStore.isActive && !callStore.isMinimized\"\n data-testid=\"call-view\"\n class=\"vue-chat fixed inset-0 z-[60] flex h-full w-full flex-col bg-diamond-black\"\n >\n <!-- Header -->\n <div\n v-if=\"!callStore.isMinimized\"\n class=\"flex h-16 items-center justify-between px-4 transition-all duration-300 sm:h-20\"\n :class=\"showControls ? 'opacity-100' : 'opacity-0'\"\n @mouseenter=\"resetControlsTimeout\"\n @mousemove=\"resetControlsTimeout\"\n >\n <div class=\"flex items-center gap-x-4\">\n <div class=\"hidden select-none text-label-lg text-white md:block\">\n {{ t(\"Behayand Meeting\") }}\n </div>\n <div class=\"flex items-center gap-x-2 text-white text-body-sm\">\n <BIcon icon=\"PhUsers\" class=\"h-4 w-4 fill-white\" />\n <span data-testid=\"call-participants\"\n >{{ participantCount }}\n {{\n participantCount > 1 ? t(\"participants\") : t(\"participant\")\n }}</span\n >\n </div>\n </div>\n <div class=\"flex items-center gap-x-4.5\">\n <div\n class=\"flex h-6 items-center justify-center rounded-full bg-diamond-error px-2 text-white select-none\"\n >\n <div class=\"text-body-sm\">\n {{\n new Date().toLocaleTimeString(locale, {\n hour: \"2-digit\",\n minute: \"2-digit\",\n hour12: true,\n })\n }}\n </div>\n </div>\n <IconButton\n icon=\"PhCaretDown\"\n :label=\"t('chat.call.controls.minimize')\"\n v-bind=\"footerButton\"\n data-testid=\"call-minimize\"\n @click=\"callStore.minimize\"\n />\n </div>\n </div>\n\n <!-- Main Content -->\n <div\n class=\"relative grid w-full overflow-hidden\"\n :class=\"callStore.isMinimized ? 'h-full p-0' : 'h-full p-4'\"\n @mousemove=\"resetControlsTimeout\"\n >\n <div\n v-show=\"tileCount\"\n class=\"grid h-full min-h-0 w-full min-w-0 grid-cols-1 gap-4 md:grid-cols-[repeat(auto-fit,minmax(300px,1fr))]\"\n >\n <div\n v-show=\"isScreenSharing\"\n :ref=\"(el) => (remoteParents[`self_screen`] = el as any)\"\n class=\"group relative flex aspect-video h-full w-full flex-col items-center justify-center overflow-hidden rounded-2xl border-2 border-chat-primary/0 bg-black-600 p-2\"\n >\n <video\n ref=\"localScreen\"\n autoplay\n muted\n playsinline\n class=\"absolute inset-0 z-0 h-full w-full object-cover\"\n />\n\n <div class=\"absolute bottom-3 left-3 z-20 flex items-center gap-x-2\">\n <div\n class=\"rounded bg-black-500 px-2 py-1 text-label-sm text-white select-none\"\n >\n {{ t(\"Your Presentation\") }}\n </div>\n <div\n class=\"flex h-10 w-10 items-center justify-center rounded-full bg-black-500\"\n >\n <BIcon icon=\"PhMonitor\" class=\"h-4 w-4 fill-white\" />\n </div>\n <IconButton\n :icon=\"videoPaused['self_screen'] ? 'PhPlay' : 'PhPause'\"\n :label=\"videoPaused['self_screen'] ? t('chat.call.controls.playVideo') : t('chat.call.controls.pauseVideo')\"\n :dt=\"callButtonDt\"\n :text=\"false\"\n icon-class=\"size-4\"\n @click=\"toggleVideoPause('self_screen', localScreen as any)\"\n />\n <IconButton\n :icon=\"isFullscreen ? 'PhCornersIn' : 'PhFrameCorners'\"\n :label=\"\n\n isFullscreen\n\n ? t('chat.call.controls.exitFullscreen')\n\n : t('chat.call.controls.fullscreen')\n\n \"\n :dt=\"callButtonDt\"\n :text=\"false\"\n icon-class=\"size-4\"\n @click=\"toggleRemote(`self_screen`)\"\n />\n </div>\n </div>\n <div\n v-for=\"(stream, remoteUserId) in remoteVideos\"\n :key=\"`remote-${remoteUserId}`\"\n data-testid=\"call-remote-video\"\n :ref=\"\n (el) => (remoteParents[`remote_video_${remoteUserId}`] = el as any)\n \"\n class=\"group relative flex aspect-video h-full w-full flex-col items-center justify-center overflow-hidden rounded-2xl border-2 border-chat-primary/0 bg-black-600 p-2\"\n >\n <video\n :ref=\"\n (el) => {\n if (el) remoteRefs[remoteUserId] = el as any;\n }\n \"\n autoplay\n playsinline\n class=\"absolute inset-0 z-0 h-full w-full object-cover\"\n />\n\n <div class=\"absolute bottom-2 left-2 z-20 flex items-center gap-x-1\">\n <div\n class=\"rounded bg-black-500 px-1.5 py-0.5 text-label-sm text-white select-none\"\n >\n {{ stream.name.slice(0, 15) }}\n </div>\n <IconButton\n :icon=\"videoPaused[`remote_video_${remoteUserId}`] ? 'PhPlay' : 'PhPause'\"\n :label=\"\n videoPaused[`remote_video_${remoteUserId}`]\n ? t('chat.call.controls.playVideo')\n : t('chat.call.controls.pauseVideo')\n \"\n :dt=\"callButtonDt\"\n :text=\"false\"\n icon-class=\"size-4\"\n @click=\"\n toggleVideoPause(\n `remote_video_${remoteUserId}`,\n remoteRefs[remoteUserId] as any,\n )\n \"\n />\n <IconButton\n :icon=\"isFullscreen ? 'PhCornersIn' : 'PhFrameCorners'\"\n :label=\"\n\n isFullscreen\n\n ? t('chat.call.controls.exitFullscreen')\n\n : t('chat.call.controls.fullscreen')\n\n \"\n :dt=\"callButtonDt\"\n :text=\"false\"\n icon-class=\"size-4\"\n @click=\"toggleRemote(`remote_video_${remoteUserId}`)\"\n />\n </div>\n </div>\n\n <div\n v-for=\"(stream, remoteUserId) in remoteScreens\"\n :key=\"`remote-screen-${remoteUserId}`\"\n data-testid=\"call-remote-screen\"\n :ref=\"\n (el) => (remoteParents[`remote_screen_${remoteUserId}`] = el as any)\n \"\n class=\"group relative flex aspect-video h-full w-full flex-col items-center justify-center overflow-hidden rounded-2xl border-2 border-chat-primary/0 bg-black-600 p-2\"\n >\n <video\n :ref=\"\n (el) => {\n if (el) remoteScreenRefs[remoteUserId] = el as any;\n }\n \"\n autoplay\n muted\n playsinline\n class=\"absolute inset-0 z-0 h-full w-full object-cover\"\n />\n\n <div class=\"absolute bottom-3 left-3 z-20 flex items-center gap-x-2\">\n <div\n class=\"rounded bg-black-500 px-2 py-1 text-label-sm text-white select-none\"\n >\n {{ t(\"Presentation of\") }} {{ stream.name.slice(0, 15) }}\n </div>\n <div\n class=\"flex h-10 w-10 items-center justify-center rounded-full bg-black-500\"\n >\n <BIcon icon=\"PhMonitor\" class=\"h-4 w-4 fill-white\" />\n </div>\n <IconButton\n :icon=\"videoPaused[`remote_screen_${remoteUserId}`] ? 'PhPlay' : 'PhPause'\"\n :label=\"\n videoPaused[`remote_screen_${remoteUserId}`]\n ? t('chat.call.controls.playVideo')\n : t('chat.call.controls.pauseVideo')\n \"\n :dt=\"callButtonDt\"\n :text=\"false\"\n icon-class=\"size-4\"\n @click=\"\n toggleVideoPause(\n `remote_screen_${remoteUserId}`,\n remoteScreenRefs[remoteUserId] || null,\n )\n \"\n />\n <IconButton\n :icon=\"isFullscreen ? 'PhCornersIn' : 'PhFrameCorners'\"\n :label=\"\n\n isFullscreen\n\n ? t('chat.call.controls.exitFullscreen')\n\n : t('chat.call.controls.fullscreen')\n\n \"\n :dt=\"callButtonDt\"\n :text=\"false\"\n icon-class=\"size-4\"\n @click=\"toggleRemote(`remote_screen_${remoteUserId}`)\"\n />\n </div>\n </div>\n </div>\n\n <!-- وبکم محلی (وقتی هنوز کارهای دیگر در صفحه فعال است) -->\n <div class=\"flex min-h-0\" :class=\"[tileCount && 'absolute inset-0 m-4']\">\n <div\n v-if=\"!callStore.isMinimized\"\n class=\"relative flex flex-col items-center justify-center overflow-hidden rounded-2xl border-2 border-chat-primary/0 bg-black-600 p-2\"\n :class=\"[\n tileCount ? 'absolute z-10 h-[132px] w-[236px]' : 'h-full w-full',\n ]\"\n >\n <video\n ref=\"localVideo\"\n data-testid=\"call-local-video\"\n autoplay\n muted\n playsinline\n class=\"pointer-events-none absolute inset-0 z-0 h-full w-full object-cover\"\n />\n\n <div\n class=\"pointer-events-none absolute inset-0 bg-gradient-to-t from-black/60 via-transparent to-transparent\"\n />\n\n <div class=\"absolute bottom-3 left-3 z-20 flex items-center gap-x-2\">\n <div\n class=\"rounded bg-black-500 px-2 py-1 text-label-sm text-white select-none\"\n >\n {{ t(\"You\") }}\n </div>\n <div\n v-if=\"!isAudioOn\"\n class=\"flex h-7 w-7 items-center justify-center rounded-full bg-diamond-error\"\n >\n <BIcon icon=\"PhMicrophoneSlash\" class=\"h-3 w-3 fill-white\" />\n </div>\n <IconButton\n :icon=\"videoPaused['self_cam'] ? 'PhPlay' : 'PhPause'\"\n :label=\"videoPaused['self_cam'] ? t('chat.call.controls.playVideo') : t('chat.call.controls.pauseVideo')\"\n :dt=\"callButtonDt\"\n :text=\"false\"\n icon-class=\"size-4\"\n @click=\"toggleVideoPause('self_cam', localVideo as any)\"\n />\n <IconButton\n :icon=\"isFullscreen ? 'PhCornersIn' : 'PhFrameCorners'\"\n :label=\"\n\n isFullscreen\n\n ? t('chat.call.controls.exitFullscreen')\n\n : t('chat.call.controls.fullscreen')\n\n \"\n :dt=\"callButtonDt\"\n :text=\"false\"\n icon-class=\"size-4\"\n @click=\"toggleRemote('self_cam')\"\n />\n </div>\n\n <div\n v-if=\"!isVideoOn\"\n class=\"absolute inset-0 flex items-center justify-center bg-black-600\"\n >\n <div class=\"text-center text-white\">\n <div\n class=\"mx-auto mb-2 flex h-16 w-16 items-center justify-center rounded-full bg-chat-primary\"\n >\n <span class=\"text-title-lg font-semibold\">{{ t(\"You\") }}</span>\n </div>\n <p class=\"text-label-md\">{{ t(\"Camera is off\") }}</p>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Footer Controls -->\n <div\n v-if=\"!callStore.isMinimized\"\n class=\"flex h-21 w-full items-center justify-center gap-x-1.5 border-t border-t-[#2C2C2E] bg-black-600 transition-all duration-300 sm:gap-x-3\"\n :class=\"showControls ? 'opacity-100' : 'opacity-0'\"\n @mouseenter=\"resetControlsTimeout\"\n @mousemove=\"resetControlsTimeout\"\n >\n <IconButton\n :icon=\"isAudioOn ? 'PhMicrophone' : 'PhMicrophoneSlash'\"\n :label=\"isAudioOn ? t('chat.call.controls.mute') : t('chat.call.controls.unmute')\"\n :severity=\"isAudioOn ? 'secondary' : 'contrast'\"\n v-bind=\"footerButton\"\n data-testid=\"call-toggle-audio\"\n :data-active=\"isAudioOn\"\n @click=\"toggleAudio\"\n />\n\n <IconButton\n :icon=\"isVideoOn ? 'PhVideo' : 'PhVideoCameraSlash'\"\n :label=\"isVideoOn ? t('chat.call.controls.cameraOff') : t('chat.call.controls.cameraOn')\"\n :severity=\"isVideoOn ? 'secondary' : 'contrast'\"\n v-bind=\"footerButton\"\n data-testid=\"call-toggle-video\"\n :data-active=\"isVideoOn\"\n @click=\"toggleVideo\"\n />\n\n <template v-if=\"cameras.length > 1\">\n <IconButton\n icon=\"PhCaretUp\"\n :label=\"t('chat.call.controls.chooseCamera')\"\n v-bind=\"footerButton\"\n @click=\"cameraPickerOpen = true\"\n />\n <ResponsiveDialog\n v-model:visible=\"cameraPickerOpen\"\n :header=\"t('chat.call.controls.cameras')\"\n width=\"24rem\"\n >\n <Listbox\n :options=\"cameras\"\n option-value=\"deviceId\"\n :option-label=\"(camera: MediaDeviceInfo) => camera.label || `Camera ${camera.deviceId}`\"\n class=\"w-full\"\n @change=\"(event) => pickCamera(event.value)\"\n />\n </ResponsiveDialog>\n </template>\n\n <IconButton\n icon=\"PhMonitorArrowUp\"\n :label=\"isScreenSharing ? t('chat.call.controls.stopSharing') : t('chat.call.controls.shareScreen')\"\n :severity=\"isScreenSharing ? 'contrast' : 'secondary'\"\n v-bind=\"footerButton\"\n data-testid=\"call-toggle-screen\"\n :data-active=\"isScreenSharing\"\n @click=\"toggleScreenShare\"\n />\n\n <IconButton\n :icon=\"isFullscreen ? 'PhCornersIn' : 'PhFrameCorners'\"\n :label=\"\n\n isFullscreen\n\n ? t('chat.call.controls.exitFullscreen')\n\n : t('chat.call.controls.fullscreen')\n\n \"\n v-bind=\"footerButton\"\n @click=\"toggleFullscreen\"\n />\n\n <IconButton\n v-if=\"isFlashlightSupported\"\n :icon=\"isFlashlightOn ? 'PhLightning' : 'PhLightningSlash'\"\n :label=\"t('chat.call.controls.flashlight')\"\n :severity=\"isFlashlightOn ? 'contrast' : 'secondary'\"\n v-bind=\"footerButton\"\n @click=\"toggleFlashlight\"\n />\n\n <IconButton\n icon=\"PhPhoneX\"\n :label=\"t('chat.call.controls.endCall')\"\n severity=\"danger\"\n :text=\"false\"\n size=\"large\"\n icon-class=\"size-6\"\n data-testid=\"call-end\"\n @click=\"endCall\"\n />\n </div>\n </div>\n</template>\n"],"names":["ref","onMounted","onUnmounted","watch","nextTick","useCallStore","useLocalI18n","chat","useDirection","computed","useWindowSize","useDraggable","_unref","_createElementBlock","_normalizeClass","_createElementVNode","_toDisplayString","_createVNode","IconButton","_openBlock","_withModifiers","_withDirectives","_mergeProps","_Fragment","_renderList","ResponsiveDialog","_createBlock","_vShow"],"mappings":"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"}
|