@azure/communication-react 1.18.0-alpha-202406220013 → 1.18.0-alpha-202406260014

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 (30) hide show
  1. package/dist/communication-react.d.ts +4 -0
  2. package/dist/dist-cjs/communication-react/{ChatMessageComponentAsRichTextEditBox-Digltj4H.js → ChatMessageComponentAsRichTextEditBox-_hqOwT_h.js} +2 -2
  3. package/dist/dist-cjs/communication-react/{ChatMessageComponentAsRichTextEditBox-Digltj4H.js.map → ChatMessageComponentAsRichTextEditBox-_hqOwT_h.js.map} +1 -1
  4. package/dist/dist-cjs/communication-react/{RichTextSendBoxWrapper-CiwclH9-.js → RichTextSendBoxWrapper-D-KYGmZ9.js} +2 -2
  5. package/dist/dist-cjs/communication-react/{RichTextSendBoxWrapper-CiwclH9-.js.map → RichTextSendBoxWrapper-D-KYGmZ9.js.map} +1 -1
  6. package/dist/dist-cjs/communication-react/{index-DnTVRxCz.js → index-DCf8u3Nr.js} +42 -16
  7. package/dist/dist-cjs/communication-react/index-DCf8u3Nr.js.map +1 -0
  8. package/dist/dist-cjs/communication-react/index.js +1 -1
  9. package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js +1 -1
  10. package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js.map +1 -1
  11. package/dist/dist-esm/react-components/src/components/styles/RichTextInputBoxComponent.styles.js +1 -1
  12. package/dist/dist-esm/react-components/src/components/styles/RichTextInputBoxComponent.styles.js.map +1 -1
  13. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/AzureCommunicationCallAdapter.js +6 -2
  14. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/AzureCommunicationCallAdapter.js.map +1 -1
  15. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/CallingSoundSubscriber.d.ts +2 -0
  16. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/CallingSoundSubscriber.js +20 -0
  17. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/CallingSoundSubscriber.js.map +1 -1
  18. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/SidePane/usePeoplePane.js +1 -1
  19. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/SidePane/usePeoplePane.js.map +1 -1
  20. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/buttons/EndCall.d.ts +1 -0
  21. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/buttons/EndCall.js +1 -1
  22. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/buttons/EndCall.js.map +1 -1
  23. package/dist/dist-esm/react-composites/src/composites/common/ControlBar/CommonCallControlBar.js +6 -4
  24. package/dist/dist-esm/react-composites/src/composites/common/ControlBar/CommonCallControlBar.js.map +1 -1
  25. package/dist/dist-esm/react-composites/src/composites/common/ParticipantContainer.js +1 -1
  26. package/dist/dist-esm/react-composites/src/composites/common/ParticipantContainer.js.map +1 -1
  27. package/dist/dist-esm/react-composites/src/composites/common/types/CommonCallControlOptions.d.ts +4 -0
  28. package/dist/dist-esm/react-composites/src/composites/common/types/CommonCallControlOptions.js.map +1 -1
  29. package/package.json +6 -6
  30. package/dist/dist-cjs/communication-react/index-DnTVRxCz.js.map +0 -1
@@ -8,10 +8,12 @@ export declare class CallingSoundSubscriber {
8
8
  private call;
9
9
  private soundsLoaded?;
10
10
  private callee;
11
+ playingSounds: boolean;
11
12
  constructor(call: CallCommon, callee?: CommunicationIdentifier[], sounds?: CallingSounds);
12
13
  private onCallStateChanged;
13
14
  private subscribeCallSoundEvents;
14
15
  unsubscribeAll(): void;
16
+ pauseSounds(): void;
15
17
  private loadSounds;
16
18
  private playSound;
17
19
  }
@@ -9,25 +9,30 @@ const CALL_TRANSFER_SUBCODE = 7015;
9
9
  */
10
10
  export class CallingSoundSubscriber {
11
11
  constructor(call, callee, sounds) {
12
+ this.playingSounds = false;
12
13
  this.onCallStateChanged = () => {
13
14
  this.call.on('stateChanged', () => {
14
15
  var _a, _b, _c, _d, _e, _f, _g;
15
16
  if (shouldPlayRinging(this.call, this.callee) && ((_a = this.soundsLoaded) === null || _a === void 0 ? void 0 : _a.callRingingSound)) {
16
17
  this.soundsLoaded.callRingingSound.loop = true;
17
18
  this.playSound(this.soundsLoaded.callRingingSound);
19
+ this.playingSounds = true;
18
20
  }
19
21
  if (!shouldPlayRinging(this.call, this.callee) && ((_b = this.soundsLoaded) === null || _b === void 0 ? void 0 : _b.callRingingSound)) {
20
22
  this.soundsLoaded.callRingingSound.loop = false;
21
23
  this.soundsLoaded.callRingingSound.pause();
24
+ this.playingSounds = false;
22
25
  }
23
26
  if (this.call.state === 'Disconnected') {
24
27
  if (((_c = this.soundsLoaded) === null || _c === void 0 ? void 0 : _c.callBusySound) && ((_d = this.call.callEndReason) === null || _d === void 0 ? void 0 : _d.code) === CALL_REJECTED_CODE) {
25
28
  this.playSound(this.soundsLoaded.callBusySound);
29
+ this.playingSounds = true;
26
30
  }
27
31
  else if (((_e = this.soundsLoaded) === null || _e === void 0 ? void 0 : _e.callEndedSound) &&
28
32
  ((_f = this.call.callEndReason) === null || _f === void 0 ? void 0 : _f.code) === CALL_ENDED_CODE &&
29
33
  ((_g = this.call.callEndReason) === null || _g === void 0 ? void 0 : _g.subCode) !== CALL_TRANSFER_SUBCODE) {
30
34
  this.playSound(this.soundsLoaded.callEndedSound);
35
+ this.playingSounds = true;
31
36
  }
32
37
  }
33
38
  });
@@ -49,6 +54,21 @@ export class CallingSoundSubscriber {
49
54
  this.soundsLoaded.callRingingSound.pause();
50
55
  }
51
56
  }
57
+ pauseSounds() {
58
+ var _a, _b, _c;
59
+ if ((_a = this.soundsLoaded) === null || _a === void 0 ? void 0 : _a.callRingingSound) {
60
+ this.soundsLoaded.callRingingSound.pause();
61
+ this.playingSounds = false;
62
+ }
63
+ if ((_b = this.soundsLoaded) === null || _b === void 0 ? void 0 : _b.callEndedSound) {
64
+ this.soundsLoaded.callEndedSound.pause();
65
+ this.playingSounds = false;
66
+ }
67
+ if ((_c = this.soundsLoaded) === null || _c === void 0 ? void 0 : _c.callBusySound) {
68
+ this.soundsLoaded.callBusySound.pause();
69
+ this.playingSounds = false;
70
+ }
71
+ }
52
72
  loadSounds(sounds) {
53
73
  var _a, _b, _c;
54
74
  let callEndedSound;
@@ -1 +1 @@
1
- {"version":3,"file":"CallingSoundSubscriber.js","sourceRoot":"","sources":["../../../../../../../../react-composites/src/composites/CallComposite/adapter/CallingSoundSubscriber.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { CallCommon } from '@azure/communication-calling';\nimport { CallingSounds } from './CallAdapter';\nimport { isPhoneNumberIdentifier } from '@azure/communication-common';\nimport { CommunicationIdentifier } from '@azure/communication-common';\n\ntype CallingSoundsLoaded = {\n callEndedSound?: HTMLAudioElement;\n callRingingSound?: HTMLAudioElement;\n callBusySound?: HTMLAudioElement;\n};\n\nconst CALL_REJECTED_CODE = 603;\n\nconst CALL_ENDED_CODE = 0;\nconst CALL_TRANSFER_SUBCODE = 7015;\n\n/**\n * @private\n */\nexport class CallingSoundSubscriber {\n private call: CallCommon;\n private soundsLoaded?: CallingSoundsLoaded;\n private callee: CommunicationIdentifier[] | undefined;\n\n constructor(call: CallCommon, callee?: CommunicationIdentifier[], sounds?: CallingSounds) {\n this.call = call;\n this.callee = callee;\n if (sounds) {\n this.soundsLoaded = this.loadSounds(sounds);\n this.subscribeCallSoundEvents();\n }\n }\n\n private onCallStateChanged = (): void => {\n this.call.on('stateChanged', () => {\n if (shouldPlayRinging(this.call, this.callee) && this.soundsLoaded?.callRingingSound) {\n this.soundsLoaded.callRingingSound.loop = true;\n this.playSound(this.soundsLoaded.callRingingSound);\n }\n if (!shouldPlayRinging(this.call, this.callee) && this.soundsLoaded?.callRingingSound) {\n this.soundsLoaded.callRingingSound.loop = false;\n this.soundsLoaded.callRingingSound.pause();\n }\n if (this.call.state === 'Disconnected') {\n if (this.soundsLoaded?.callBusySound && this.call.callEndReason?.code === CALL_REJECTED_CODE) {\n this.playSound(this.soundsLoaded.callBusySound);\n } else if (\n this.soundsLoaded?.callEndedSound &&\n this.call.callEndReason?.code === CALL_ENDED_CODE &&\n this.call.callEndReason?.subCode !== CALL_TRANSFER_SUBCODE\n ) {\n this.playSound(this.soundsLoaded.callEndedSound);\n }\n }\n });\n };\n\n private subscribeCallSoundEvents(): void {\n this.onCallStateChanged();\n }\n\n public unsubscribeAll(): void {\n this.call?.off('stateChanged', this.onCallStateChanged);\n if (this.soundsLoaded?.callRingingSound) {\n this.soundsLoaded.callRingingSound.pause();\n }\n }\n\n private loadSounds(sounds?: CallingSounds): CallingSoundsLoaded | undefined {\n let callEndedSound;\n if (sounds?.callEnded) {\n callEndedSound = new Audio(sounds?.callEnded?.url);\n callEndedSound.preload = 'auto';\n }\n let callRingingSound;\n if (sounds?.callRinging) {\n callRingingSound = new Audio(sounds?.callRinging?.url);\n callRingingSound.preload = 'auto';\n }\n let callBusySound;\n if (sounds?.callBusy) {\n callBusySound = new Audio(sounds?.callBusy?.url);\n callBusySound.preload = 'auto';\n }\n return {\n callEndedSound,\n callRingingSound,\n callBusySound\n };\n }\n\n private playSound(sound: HTMLAudioElement): void {\n sound.play().catch((e) => {\n console.error(e, 'Failed to play sound, check loader config to make sure it is correct');\n });\n }\n}\n\n/**\n * Helper function to allow the calling sound subscriber to determine when to play the ringing\n * sound when making an outbound call.\n */\nconst shouldPlayRinging = (call: CallCommon, callee?: CommunicationIdentifier[]): boolean => {\n if (\n callee &&\n callee.length >= 1 &&\n !isPhoneNumberIdentifier(callee[0]) &&\n (call.state === 'Ringing' || call.state === 'Connecting')\n ) {\n return true;\n } else {\n return false;\n }\n return false;\n};\n"]}
1
+ {"version":3,"file":"CallingSoundSubscriber.js","sourceRoot":"","sources":["../../../../../../../../react-composites/src/composites/CallComposite/adapter/CallingSoundSubscriber.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAIlC,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAStE,MAAM,kBAAkB,GAAG,GAAG,CAAC;AAE/B,MAAM,eAAe,GAAG,CAAC,CAAC;AAC1B,MAAM,qBAAqB,GAAG,IAAI,CAAC;AAEnC;;GAEG;AACH,MAAM,OAAO,sBAAsB;IAMjC,YAAY,IAAgB,EAAE,MAAkC,EAAE,MAAsB;QAFjF,kBAAa,GAAY,KAAK,CAAC;QAW9B,uBAAkB,GAAG,GAAS,EAAE;YACtC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,cAAc,EAAE,GAAG,EAAE;;gBAChC,IAAI,iBAAiB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,KAAI,MAAA,IAAI,CAAC,YAAY,0CAAE,gBAAgB,CAAA,EAAE,CAAC;oBACrF,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,IAAI,GAAG,IAAI,CAAC;oBAC/C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC;oBACnD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;gBAC5B,CAAC;gBACD,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,KAAI,MAAA,IAAI,CAAC,YAAY,0CAAE,gBAAgB,CAAA,EAAE,CAAC;oBACtF,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,IAAI,GAAG,KAAK,CAAC;oBAChD,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;oBAC3C,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;gBAC7B,CAAC;gBACD,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,cAAc,EAAE,CAAC;oBACvC,IAAI,CAAA,MAAA,IAAI,CAAC,YAAY,0CAAE,aAAa,KAAI,CAAA,MAAA,IAAI,CAAC,IAAI,CAAC,aAAa,0CAAE,IAAI,MAAK,kBAAkB,EAAE,CAAC;wBAC7F,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;wBAChD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;oBAC5B,CAAC;yBAAM,IACL,CAAA,MAAA,IAAI,CAAC,YAAY,0CAAE,cAAc;wBACjC,CAAA,MAAA,IAAI,CAAC,IAAI,CAAC,aAAa,0CAAE,IAAI,MAAK,eAAe;wBACjD,CAAA,MAAA,IAAI,CAAC,IAAI,CAAC,aAAa,0CAAE,OAAO,MAAK,qBAAqB,EAC1D,CAAC;wBACD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC;wBACjD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;oBAC5B,CAAC;gBACH,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QAlCA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YAC5C,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAClC,CAAC;IACH,CAAC;IA8BO,wBAAwB;QAC9B,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC5B,CAAC;IAEM,cAAc;;QACnB,MAAA,IAAI,CAAC,IAAI,0CAAE,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACxD,IAAI,MAAA,IAAI,CAAC,YAAY,0CAAE,gBAAgB,EAAE,CAAC;YACxC,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;QAC7C,CAAC;IACH,CAAC;IAEM,WAAW;;QAChB,IAAI,MAAA,IAAI,CAAC,YAAY,0CAAE,gBAAgB,EAAE,CAAC;YACxC,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;YAC3C,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAC7B,CAAC;QACD,IAAI,MAAA,IAAI,CAAC,YAAY,0CAAE,cAAc,EAAE,CAAC;YACtC,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;YACzC,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAC7B,CAAC;QACD,IAAI,MAAA,IAAI,CAAC,YAAY,0CAAE,aAAa,EAAE,CAAC;YACrC,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;YACxC,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAC7B,CAAC;IACH,CAAC;IAEO,UAAU,CAAC,MAAsB;;QACvC,IAAI,cAAc,CAAC;QACnB,IAAI,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,SAAS,EAAE,CAAC;YACtB,cAAc,GAAG,IAAI,KAAK,CAAC,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,SAAS,0CAAE,GAAG,CAAC,CAAC;YACnD,cAAc,CAAC,OAAO,GAAG,MAAM,CAAC;QAClC,CAAC;QACD,IAAI,gBAAgB,CAAC;QACrB,IAAI,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,WAAW,EAAE,CAAC;YACxB,gBAAgB,GAAG,IAAI,KAAK,CAAC,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,WAAW,0CAAE,GAAG,CAAC,CAAC;YACvD,gBAAgB,CAAC,OAAO,GAAG,MAAM,CAAC;QACpC,CAAC;QACD,IAAI,aAAa,CAAC;QAClB,IAAI,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,QAAQ,EAAE,CAAC;YACrB,aAAa,GAAG,IAAI,KAAK,CAAC,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,QAAQ,0CAAE,GAAG,CAAC,CAAC;YACjD,aAAa,CAAC,OAAO,GAAG,MAAM,CAAC;QACjC,CAAC;QACD,OAAO;YACL,cAAc;YACd,gBAAgB;YAChB,aAAa;SACd,CAAC;IACJ,CAAC;IAEO,SAAS,CAAC,KAAuB;QACvC,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;YACvB,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,sEAAsE,CAAC,CAAC;QAC3F,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,iBAAiB,GAAG,CAAC,IAAgB,EAAE,MAAkC,EAAW,EAAE;IAC1F,IACE,MAAM;QACN,MAAM,CAAC,MAAM,IAAI,CAAC;QAClB,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACnC,CAAC,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,KAAK,YAAY,CAAC,EACzD,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;SAAM,CAAC;QACN,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { CallCommon } from '@azure/communication-calling';\nimport { CallingSounds } from './CallAdapter';\nimport { isPhoneNumberIdentifier } from '@azure/communication-common';\nimport { CommunicationIdentifier } from '@azure/communication-common';\n\ntype CallingSoundsLoaded = {\n callEndedSound?: HTMLAudioElement;\n callRingingSound?: HTMLAudioElement;\n callBusySound?: HTMLAudioElement;\n};\n\nconst CALL_REJECTED_CODE = 603;\n\nconst CALL_ENDED_CODE = 0;\nconst CALL_TRANSFER_SUBCODE = 7015;\n\n/**\n * @private\n */\nexport class CallingSoundSubscriber {\n private call: CallCommon;\n private soundsLoaded?: CallingSoundsLoaded;\n private callee: CommunicationIdentifier[] | undefined;\n public playingSounds: boolean = false;\n\n constructor(call: CallCommon, callee?: CommunicationIdentifier[], sounds?: CallingSounds) {\n this.call = call;\n this.callee = callee;\n if (sounds) {\n this.soundsLoaded = this.loadSounds(sounds);\n this.subscribeCallSoundEvents();\n }\n }\n\n private onCallStateChanged = (): void => {\n this.call.on('stateChanged', () => {\n if (shouldPlayRinging(this.call, this.callee) && this.soundsLoaded?.callRingingSound) {\n this.soundsLoaded.callRingingSound.loop = true;\n this.playSound(this.soundsLoaded.callRingingSound);\n this.playingSounds = true;\n }\n if (!shouldPlayRinging(this.call, this.callee) && this.soundsLoaded?.callRingingSound) {\n this.soundsLoaded.callRingingSound.loop = false;\n this.soundsLoaded.callRingingSound.pause();\n this.playingSounds = false;\n }\n if (this.call.state === 'Disconnected') {\n if (this.soundsLoaded?.callBusySound && this.call.callEndReason?.code === CALL_REJECTED_CODE) {\n this.playSound(this.soundsLoaded.callBusySound);\n this.playingSounds = true;\n } else if (\n this.soundsLoaded?.callEndedSound &&\n this.call.callEndReason?.code === CALL_ENDED_CODE &&\n this.call.callEndReason?.subCode !== CALL_TRANSFER_SUBCODE\n ) {\n this.playSound(this.soundsLoaded.callEndedSound);\n this.playingSounds = true;\n }\n }\n });\n };\n\n private subscribeCallSoundEvents(): void {\n this.onCallStateChanged();\n }\n\n public unsubscribeAll(): void {\n this.call?.off('stateChanged', this.onCallStateChanged);\n if (this.soundsLoaded?.callRingingSound) {\n this.soundsLoaded.callRingingSound.pause();\n }\n }\n\n public pauseSounds(): void {\n if (this.soundsLoaded?.callRingingSound) {\n this.soundsLoaded.callRingingSound.pause();\n this.playingSounds = false;\n }\n if (this.soundsLoaded?.callEndedSound) {\n this.soundsLoaded.callEndedSound.pause();\n this.playingSounds = false;\n }\n if (this.soundsLoaded?.callBusySound) {\n this.soundsLoaded.callBusySound.pause();\n this.playingSounds = false;\n }\n }\n\n private loadSounds(sounds?: CallingSounds): CallingSoundsLoaded | undefined {\n let callEndedSound;\n if (sounds?.callEnded) {\n callEndedSound = new Audio(sounds?.callEnded?.url);\n callEndedSound.preload = 'auto';\n }\n let callRingingSound;\n if (sounds?.callRinging) {\n callRingingSound = new Audio(sounds?.callRinging?.url);\n callRingingSound.preload = 'auto';\n }\n let callBusySound;\n if (sounds?.callBusy) {\n callBusySound = new Audio(sounds?.callBusy?.url);\n callBusySound.preload = 'auto';\n }\n return {\n callEndedSound,\n callRingingSound,\n callBusySound\n };\n }\n\n private playSound(sound: HTMLAudioElement): void {\n sound.play().catch((e) => {\n console.error(e, 'Failed to play sound, check loader config to make sure it is correct');\n });\n }\n}\n\n/**\n * Helper function to allow the calling sound subscriber to determine when to play the ringing\n * sound when making an outbound call.\n */\nconst shouldPlayRinging = (call: CallCommon, callee?: CommunicationIdentifier[]): boolean => {\n if (\n callee &&\n callee.length >= 1 &&\n !isPhoneNumberIdentifier(callee[0]) &&\n (call.state === 'Ringing' || call.state === 'Connecting')\n ) {\n return true;\n } else {\n return false;\n }\n return false;\n};\n"]}
@@ -71,6 +71,7 @@ export const usePeoplePane = (props) => {
71
71
  }
72
72
  }
73
73
  menuItems.push({
74
+ ['data-ui-id']: 'people-pane-mute-all-remote-participants',
74
75
  key: 'muteAllRemoteParticipants',
75
76
  text: localeStrings.muteAllMenuLabel,
76
77
  iconProps: {
@@ -80,7 +81,6 @@ export const usePeoplePane = (props) => {
80
81
  onClick: () => {
81
82
  setShowMuteAllPrompt(true);
82
83
  },
83
- 'data-ui-id': 'participant-item-mute-all-remote-participants',
84
84
  ariaLabel: localeStrings.muteAllMenuLabel,
85
85
  disabled: isAllMuted
86
86
  });
@@ -1 +1 @@
1
- {"version":3,"file":"usePeoplePane.js","sourceRoot":"","sources":["../../../../../../../../../react-composites/src/composites/CallComposite/components/SidePane/usePeoplePane.tsx"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,KAAK,EAAE,EAAa,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAC1E,OAAO,EAAoB,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;AACnF,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAKlD,4CAA4C;AAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,4CAA4C;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,4CAA4C;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnC,MAAM,mBAAmB,GAAG,QAAQ,CAAC;AAErC,eAAe;AACf,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,KAwB7B,EAIC,EAAE;IACF,MAAM,EACJ,sBAAsB,EACtB,UAAU,EACV,wBAAwB,EACxB,2BAA2B,EAC3B,kBAAkB,EAClB,UAAU,EACV,eAAe,EACf,sBAAsB,EACtB,6BAA6B,EAC7B,qBAAqB,EACrB,oBAAoB,EACpB,sBAAsB,EACtB,qBAAqB,EACrB,kBAAkB,EAClB,0BAA0B;IAC1B,4CAA4C;IAC5C,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB;IAClB,4CAA4C;IAC5C,2BAA2B,EAC5B,GAAG,KAAK,CAAC;IAEV,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE;;QACjC,sBAAsB,CAAC,SAAS,CAAC,CAAC;QAClC,MAAA,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,OAAO,0CAAE,KAAK,EAAE,CAAC;IACpC,CAAC,EAAE,CAAC,eAAe,EAAE,sBAAsB,CAAC,CAAC,CAAC;IAE9C,MAAM,aAAa,GAAG,SAAS,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IAC/C,4CAA4C;IAC5C,MAAM,kBAAkB,GAAG,WAAW,CAAC,qBAAqB,CAAC,CAAC;IAC9D,4CAA4C;IAC5C,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxE,4CAA4C;IAC5C,MAAM,mBAAmB,GAAG,OAAO,CACjC,GAAG,EAAE,CAAC,CAAC;QACL,kBAAkB,EAAE,aAAa,CAAC,yBAAyB;QAC3D,OAAO,EAAE,aAAa,CAAC,kBAAkB;QACzC,IAAI,EAAE,aAAa,CAAC,oBAAoB;QACxC,iBAAiB,EAAE,aAAa,CAAC,wBAAwB;KAC1D,CAAC,EACF;QACE,aAAa,CAAC,yBAAyB;QACvC,aAAa,CAAC,kBAAkB;QAChC,aAAa,CAAC,oBAAoB;QAClC,aAAa,CAAC,wBAAwB;KACvC,CACF,CAAC;IAEF,4CAA4C;IAC5C,MAAM,sBAAsB,GAAG,WAAW,CAAC,GAAG,EAAE;QAC9C,2BAA2B,IAAI,2BAA2B,EAAE,CAAC;QAC7D,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC,EAAE,CAAC,2BAA2B,EAAE,oBAAoB,CAAC,CAAC,CAAC;IAExD,MAAM,uBAAuB,GAAyB,OAAO,CAAC,GAAG,EAAE;QACjE,MAAM,SAAS,GAA0B,EAAE,CAAC;QAC5C,IAAI,kBAAkB,IAAI,6BAA6B,IAAI,6BAA6B,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpG,SAAS,CAAC,IAAI,CAAC;gBACb,GAAG,EAAE,qBAAqB;gBAC1B,IAAI,EAAE,aAAa,CAAC,yBAAyB;gBAC7C,SAAS,EAAE,EAAE,QAAQ,EAAE,4BAA4B,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE;gBAC1F,OAAO,EAAE,GAAG,EAAE;oBACZ,kBAAkB,EAAE,CAAC;gBACvB,CAAC;gBACD,SAAS,EAAE,aAAa,CAAC,yBAAyB;aACnD,CAAC,CAAC;QACL,CAAC;QACD,4CAA4C;QAC5C,IAAI,2BAA2B,IAAI,kBAAkB,EAAE,CAAC;YACtD,IAAI,UAAU,GAAG,IAAI,CAAC;YACtB,IAAI,kBAAkB,EAAE,CAAC;gBACvB,KAAK,MAAM,WAAW,IAAI,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,EAAE,CAAC;oBAC5D,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;wBACzB,UAAU,GAAG,KAAK,CAAC;wBACnB,MAAM;oBACR,CAAC;gBACH,CAAC;YACH,CAAC;YACD,SAAS,CAAC,IAAI,CAAC;gBACb,GAAG,EAAE,2BAA2B;gBAChC,IAAI,EAAE,aAAa,CAAC,gBAAgB;gBACpC,SAAS,EAAE;oBACT,QAAQ,EAAE,4BAA4B;oBACtC,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,EAAE;iBACpC;gBACD,OAAO,EAAE,GAAG,EAAE;oBACZ,oBAAoB,CAAC,IAAI,CAAC,CAAC;gBAC7B,CAAC;gBACD,YAAY,EAAE,+CAA+C;gBAC7D,SAAS,EAAE,aAAa,CAAC,gBAAgB;gBACzC,QAAQ,EAAE,UAAU;aACrB,CAAC,CAAC;QACL,CAAC;QACD,OAAO;YACL,KAAK,EAAE,SAAS;SACjB,CAAC;IACJ,CAAC,EAAE;QACD,kBAAkB;QAClB,6BAA6B;QAC7B,aAAa,CAAC,yBAAyB;QACvC,4CAA4C,CAAC,aAAa,CAAC,gBAAgB;QAC3E,4CAA4C,CAAC,2BAA2B;QACxE,4CAA4C,CAAC,kBAAkB;QAC/D,4CAA4C,CAAC,oBAAoB;KAClE,CAAC,CAAC;IAEH,MAAM,cAAc,GAAG,WAAW,CAChC,GAAG,EAAE,CAAC,CACJ,oBAAC,cAAc,IACb,OAAO,EAAE,SAAS,EAClB,WAAW,EAAE,aAAa,CAAC,eAAe,EAC1C,8BAA8B,EAAE,aAAa,CAAC,0BAA0B,EACxE,UAAU,EAAE,UAAU,aAAV,UAAU,cAAV,UAAU,GAAI,KAAK,GAC/B,CACH,EACD,CAAC,UAAU,EAAE,SAAS,EAAE,aAAa,CAAC,CACvC,CAAC;IAEF,MAAM,2CAA2C,GAAG,WAAW,CAC7D,CAAC,aAAqB,EAAE,QAAiB,EAAE,gBAAwC,EAAyB,EAAE;;QAC5G,IAAI,QAAQ,GAAG,kBAAkB,aAAlB,kBAAkB,uBAAlB,kBAAkB,CAAE,QAAQ,CAAC,aAAa,CAAC,CAAC;QAC3D,MAAM,iBAAiB,GAA0B,gBAAgB,aAAhB,gBAAgB,cAAhB,gBAAgB,GAAI,EAAE,CAAC;QACxE,MAAM,aAAa,GAAG,6BAA6B,aAA7B,6BAA6B,uBAA7B,6BAA6B,CAAE,QAAQ,CAAC,aAAa,CAAC,CAAC;QAC7E,MAAM,IAAI,GAAG,QAAQ,KAAK,aAAa,CAAC;QACxC,QAAQ,GAAG,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC;QAC5C,IAAI,aAAa,EAAE,CAAC;YAClB,MAAM,qBAAqB,GAAG,IAAI;gBAChC,CAAC,CAAC,aAAa,CAAC,4BAA4B;gBAC5C,CAAC,CAAC,aAAa,CAAC,sBAAsB,CAAC;YACzC,MAAM,eAAe,GAAG,IAAI;gBAC1B,CAAC,CAAC,oBAAoB;gBACtB,CAAC,CAAC,qBAAqB;oBACvB,CAAC,CAAC,GAAG,EAAE;wBACH,qBAAqB,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;oBACzC,CAAC;oBACH,CAAC,CAAC,SAAS,CAAC;YACd,IAAI,eAAe,IAAI,qBAAqB,EAAE,CAAC;gBAC7C,iBAAiB,CAAC,IAAI,CAAC;oBACrB,GAAG,EAAE,gBAAgB;oBACrB,IAAI,EAAE,qBAAqB;oBAC3B,OAAO,EAAE,eAAe;oBACxB,SAAS,EAAE;wBACT,QAAQ,EAAE,iCAAiC;wBAC3C,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,EAAE;qBACpC;oBACD,SAAS,EAAE,qBAAqB;iBACjC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,sBAAsB,GAC1B,6BAA6B,IAAI,6BAA6B,CAAC,MAAM,GAAG,CAAC;gBACvE,CAAC,CAAC,aAAa,CAAC,qBAAqB;gBACrC,CAAC,CAAC,aAAa,CAAC,uBAAuB,CAAC;YAC5C,MAAM,iCAAiC,GAAG,0BAA0B;gBAClE,CAAC,CAAC,6BAA6B;oBAC7B,CAAC,CAAC,6BAA6B,CAAC,MAAM,IAAI,0BAA0B;oBACpE,CAAC,CAAC,KAAK;gBACT,CAAC,CAAC,KAAK,CAAC;YACV,MAAM,gBAAgB,GAAG,IAAI;gBAC3B,CAAC,CAAC,qBAAqB;gBACvB,CAAC,CAAC,sBAAsB;oBACxB,CAAC,CAAC,GAAG,EAAE;wBACH,sBAAsB,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;oBAC1C,CAAC;oBACH,CAAC,CAAC,SAAS,CAAC;YACd,IAAI,gBAAgB,IAAI,sBAAsB,EAAE,CAAC;gBAC/C,iBAAiB,CAAC,IAAI,CAAC;oBACrB,GAAG,EAAE,iBAAiB;oBACtB,IAAI,EAAE,sBAAsB;oBAC5B,OAAO,EAAE,gBAAgB;oBACzB,SAAS,EAAE;wBACT,QAAQ,EAAE,kCAAkC;wBAC5C,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,EAAE;qBACpC;oBACD,SAAS,EAAE,sBAAsB;oBACjC,QAAQ,EAAE,iCAAiC;oBAC3C,KAAK,EAAE,iCAAiC,CAAC,CAAC,CAAC,aAAa,CAAC,8BAA8B,CAAC,CAAC,CAAC,SAAS;iBACpG,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QACD,4CAA4C;QAC5C,IAAI,iBAAiB,IAAI,CAAC,IAAI,EAAE,CAAC;YAC/B,MAAM,OAAO,GAAG,kBAAkB,KAAI,MAAA,kBAAkB,CAAC,aAAa,CAAC,0CAAE,OAAO,CAAA,CAAC;YACjF,iBAAiB,CAAC,IAAI,CAAC;gBACrB,GAAG,EAAE,MAAM;gBACX,IAAI,EAAE,MAAM;gBACZ,SAAS,EAAE;oBACT,QAAQ,EAAE,4BAA4B;oBACtC,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,EAAE;iBACpC;gBACD,OAAO,EAAE,GAAG,EAAE;oBACZ,iBAAiB,CAAC,aAAa,CAAC,CAAC;gBACnC,CAAC;gBACD,YAAY,EAAE,mCAAmC;gBACjD,SAAS,EAAE,MAAM;gBACjB,QAAQ,EAAE,OAAO;aAClB,CAAC,CAAC;QACL,CAAC;QAED,IAAI,CAAC,IAAI,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YACpC,IAAI,QAAQ,IAAI,kBAAkB,KAAI,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,yBAAyB,CAAA,EAAE,CAAC;gBAC/E,iBAAiB,CAAC,IAAI,CAAC;oBACrB,GAAG,EAAE,OAAO;oBACZ,IAAI,EAAE,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,yBAAyB;oBAC9C,SAAS,EAAE;wBACT,QAAQ,EAAE,kBAAkB;wBAC5B,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE;qBAC9D;oBACD,OAAO,EAAE,GAAG,EAAE;wBACZ,kBAAkB,aAAlB,kBAAkB,uBAAlB,kBAAkB,CAAG,aAAa,CAAC,CAAC;oBACtC,CAAC;oBACD,YAAY,EAAE,2CAA2C;oBACzD,SAAS,EAAE,aAAa,CAAC,iCAAiC;iBAC3D,CAAC,CAAC;YACL,CAAC;YACD,IAAI,CAAC,QAAQ,IAAI,gBAAgB,KAAI,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,uBAAuB,CAAA,EAAE,CAAC;gBAC5E,iBAAiB,CAAC,IAAI,CAAC;oBACrB,GAAG,EAAE,KAAK;oBACV,IAAI,EAAE,kBAAkB;wBACtB,CAAC,CAAC,aAAa,CAAC,mCAAmC;wBACnD,CAAC,CAAC,aAAa,CAAC,uBAAuB;oBACzC,SAAS,EAAE;wBACT,QAAQ,EAAE,gBAAgB;wBAC1B,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE;qBAC9D;oBACD,OAAO,EAAE,GAAG,EAAE;wBACZ,gBAAgB,CAAC,aAAa,CAAC,CAAC;oBAClC,CAAC;oBACD,YAAY,EAAE,yCAAyC;oBACvD,QAAQ,EAAE,kBAAkB,IAAI,aAAa;oBAC7C,SAAS,EAAE,aAAa,CAAC,+BAA+B;iBACzD,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QACD,OAAO,2BAA2B;YAChC,CAAC,CAAC,2BAA2B,CAAC,aAAa,EAAE,QAAQ,EAAE,iBAAiB,CAAC;YACzE,CAAC,CAAC,iBAAiB,CAAC;IACxB,CAAC,EACD;QACE,6BAA6B;QAC7B,qBAAqB;QACrB,oBAAoB;QACpB,sBAAsB;QACtB,qBAAqB;QACrB,2BAA2B;QAC3B,4CAA4C;QAC5C,iBAAiB;QACjB,4CAA4C;QAC5C,kBAAkB;QAClB,aAAa,CAAC,sBAAsB;QACpC,aAAa,CAAC,4BAA4B;QAC1C,aAAa,CAAC,qBAAqB;QACnC,aAAa,CAAC,uBAAuB;QACrC,aAAa,CAAC,8BAA8B;QAC5C,0BAA0B;QAC1B,kBAAkB;QAClB,gBAAgB;QAChB,kBAAkB;QAClB,kBAAkB;QAClB,aAAa,CAAC,uBAAuB;QACrC,aAAa,CAAC,mCAAmC;QACjD,aAAa,CAAC,yBAAyB;QACvC,aAAa,CAAC,iCAAiC;QAC/C,aAAa,CAAC,+BAA+B;KAC9C,CACF,CAAC;IAEF,MAAM,eAAe,GAAG,WAAW,CAAC,GAAgB,EAAE;QACpD,OAAO,CACL;YAEI,4CAA4C;YAC5C,oBAAC,MAAM,oBACD,mBAAmB,IACvB,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAC5D,SAAS,EAAE,GAAG,EAAE,CAAC,sBAAsB,EAAE,EACzC,MAAM,EAAE,iBAAiB,EACzB,QAAQ,EAAE,GAAG,EAAE,CAAC,oBAAoB,CAAC,KAAK,CAAC,IAC3C;YAEJ,oBAAC,iBAAiB,IAChB,UAAU,EAAE,UAAU,EACtB,wBAAwB,EAAE,wBAAwB,EAClD,2BAA2B,EAAE,2CAA2C,EACxE,kBAAkB,EAAE,kBAAkB,EACtC,UAAU,EAAE,UAAU,EACtB,sBAAsB,EAAE,sBAAsB,EAC9C,qCAAqC,EAAE,uBAAuB,EAC9D,kBAAkB,EAAE,kBAAkB,GACtC,CACD,CACJ,CAAC;IACJ,CAAC,EAAE;QACD,UAAU;QACV,UAAU;QACV,wBAAwB;QACxB,2CAA2C;QAC3C,kBAAkB;QAClB,sBAAsB;QACtB,uBAAuB;QACvB,kBAAkB;QAClB,4CAA4C,CAAC,iBAAiB;QAC9D,4CAA4C,CAAC,oBAAoB;QACjE,4CAA4C,CAAC,mBAAmB;QAChE,4CAA4C,CAAC,sBAAsB;KACpE,CAAC,CAAC;IAEH,MAAM,gBAAgB,GAAqB,OAAO,CAChD,GAAG,EAAE,CAAC,CAAC;QACL,cAAc,EAAE,cAAc;QAC9B,eAAe,EAAE,eAAe;QAChC,EAAE,EAAE,mBAAmB;KACxB,CAAC,EACF,CAAC,eAAe,EAAE,cAAc,CAAC,CAClC,CAAC;IAEF,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE;QAChC,sBAAsB,CAAC,gBAAgB,CAAC,CAAC;IAC3C,CAAC,EAAE,CAAC,gBAAgB,EAAE,sBAAsB,CAAC,CAAC,CAAC;IAE/C,MAAM,MAAM,GAAG,2BAA2B,CAAC,mBAAmB,CAAC,CAAC;IAEhE,kEAAkE;IAClE,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,MAAM,EAAE,CAAC;YACX,QAAQ,EAAE,CAAC;QACb,CAAC;IACH,CAAC,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IAEvB,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,eAAe,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,EAAE,CAAC;AAC5F,CAAC,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport React, { RefObject, useCallback, useEffect, useMemo } from 'react';\nimport { SidePaneRenderer, useIsParticularSidePaneOpen } from './SidePaneProvider';\nimport { SidePaneHeader } from '../../../common/SidePaneHeader';\nimport { PeoplePaneContent } from '../../../common/PeoplePaneContent';\nimport { useLocale } from '../../../localization';\nimport { ParticipantMenuItemsCallback, _DrawerMenuItemProps } from '@internal/react-components';\nimport { AvatarPersonaDataCallback } from '../../../common/AvatarPersona';\nimport { IButton } from '@fluentui/react';\nimport { IContextualMenuItem, IContextualMenuProps } from '@fluentui/react';\n/* @conditional-compile-remove(soft-mute) */\nimport { getRemoteParticipants } from '../../selectors/baseSelectors';\n/* @conditional-compile-remove(soft-mute) */\nimport { useSelector } from '../../hooks/useSelector';\n/* @conditional-compile-remove(soft-mute) */\nimport { Prompt } from '../Prompt';\n\nconst PEOPLE_SIDE_PANE_ID = 'people';\n\n/** @private */\nexport const usePeoplePane = (props: {\n updateSidePaneRenderer: (renderer: SidePaneRenderer | undefined) => void;\n setDrawerMenuItems: (items: _DrawerMenuItemProps[]) => void;\n inviteLink?: string;\n onFetchAvatarPersonaData?: AvatarPersonaDataCallback;\n onFetchParticipantMenuItems?: ParticipantMenuItemsCallback;\n mobileView?: boolean;\n peopleButtonRef?: RefObject<IButton>;\n setParticipantActioned?: (userId: string) => void;\n spotlightedParticipantUserIds?: string[];\n onStartLocalSpotlight?: () => Promise<void>;\n onStopLocalSpotlight?: () => Promise<void>;\n onStartRemoteSpotlight?: (userIds: string[]) => Promise<void>;\n onStopRemoteSpotlight?: (userIds: string[]) => Promise<void>;\n onStopAllSpotlight?: () => Promise<void>;\n maxParticipantsToSpotlight?: number;\n /* @conditional-compile-remove(soft-mute) */\n onMuteParticipant?: (userId: string) => Promise<void>;\n /* @conditional-compile-remove(soft-mute) */\n onMuteAllRemoteParticipants?: () => Promise<void>;\n pinnedParticipants?: string[];\n onPinParticipant?: (userId: string) => void;\n onUnpinParticipant?: (userId: string) => void;\n disablePinMenuItem?: boolean;\n}): {\n openPeoplePane: () => void;\n closePeoplePane: () => void;\n isPeoplePaneOpen: boolean;\n} => {\n const {\n updateSidePaneRenderer,\n inviteLink,\n onFetchAvatarPersonaData,\n onFetchParticipantMenuItems,\n setDrawerMenuItems,\n mobileView,\n peopleButtonRef,\n setParticipantActioned,\n spotlightedParticipantUserIds,\n onStartLocalSpotlight,\n onStopLocalSpotlight,\n onStartRemoteSpotlight,\n onStopRemoteSpotlight,\n onStopAllSpotlight,\n maxParticipantsToSpotlight,\n /* @conditional-compile-remove(soft-mute) */\n onMuteParticipant,\n pinnedParticipants,\n onPinParticipant,\n onUnpinParticipant,\n disablePinMenuItem,\n /* @conditional-compile-remove(soft-mute) */\n onMuteAllRemoteParticipants\n } = props;\n\n const closePane = useCallback(() => {\n updateSidePaneRenderer(undefined);\n peopleButtonRef?.current?.focus();\n }, [peopleButtonRef, updateSidePaneRenderer]);\n\n const localeStrings = useLocale().strings.call;\n /* @conditional-compile-remove(soft-mute) */\n const remoteParticipants = useSelector(getRemoteParticipants);\n /* @conditional-compile-remove(soft-mute) */\n const [showMuteAllPrompt, setShowMuteAllPrompt] = React.useState(false);\n /* @conditional-compile-remove(soft-mute) */\n const muteAllPromptLabels = useMemo(\n () => ({\n confirmButtonLabel: localeStrings.muteAllConfirmButtonLabel,\n heading: localeStrings.muteAllDialogTitle,\n text: localeStrings.muteAllDialogContent,\n cancelButtonLabel: localeStrings.muteAllCancelButtonLabel\n }),\n [\n localeStrings.muteAllConfirmButtonLabel,\n localeStrings.muteAllDialogTitle,\n localeStrings.muteAllDialogContent,\n localeStrings.muteAllCancelButtonLabel\n ]\n );\n\n /* @conditional-compile-remove(soft-mute) */\n const onMuteAllPromptConfirm = useCallback(() => {\n onMuteAllRemoteParticipants && onMuteAllRemoteParticipants();\n setShowMuteAllPrompt(false);\n }, [onMuteAllRemoteParticipants, setShowMuteAllPrompt]);\n\n const sidePaneHeaderMenuProps: IContextualMenuProps = useMemo(() => {\n const menuItems: IContextualMenuItem[] = [];\n if (onStopAllSpotlight && spotlightedParticipantUserIds && spotlightedParticipantUserIds.length > 0) {\n menuItems.push({\n key: 'stopAllSpotlightKey',\n text: localeStrings.stopAllSpotlightMenuLabel,\n iconProps: { iconName: 'StopAllSpotlightMenuButton', styles: { root: { lineHeight: 0 } } },\n onClick: () => {\n onStopAllSpotlight();\n },\n ariaLabel: localeStrings.stopAllSpotlightMenuLabel\n });\n }\n /* @conditional-compile-remove(soft-mute) */\n if (onMuteAllRemoteParticipants && remoteParticipants) {\n let isAllMuted = true;\n if (remoteParticipants) {\n for (const participant of Object.values(remoteParticipants)) {\n if (!participant.isMuted) {\n isAllMuted = false;\n break;\n }\n }\n }\n menuItems.push({\n key: 'muteAllRemoteParticipants',\n text: localeStrings.muteAllMenuLabel,\n iconProps: {\n iconName: 'ContextualMenuMicMutedIcon',\n styles: { root: { lineHeight: 0 } }\n },\n onClick: () => {\n setShowMuteAllPrompt(true);\n },\n 'data-ui-id': 'participant-item-mute-all-remote-participants',\n ariaLabel: localeStrings.muteAllMenuLabel,\n disabled: isAllMuted\n });\n }\n return {\n items: menuItems\n };\n }, [\n onStopAllSpotlight,\n spotlightedParticipantUserIds,\n localeStrings.stopAllSpotlightMenuLabel,\n /* @conditional-compile-remove(soft-mute) */ localeStrings.muteAllMenuLabel,\n /* @conditional-compile-remove(soft-mute) */ onMuteAllRemoteParticipants,\n /* @conditional-compile-remove(soft-mute) */ remoteParticipants,\n /* @conditional-compile-remove(soft-mute) */ setShowMuteAllPrompt\n ]);\n\n const onRenderHeader = useCallback(\n () => (\n <SidePaneHeader\n onClose={closePane}\n headingText={localeStrings.peoplePaneTitle}\n dismissSidePaneButtonAriaLabel={localeStrings.dismissSidePaneButtonLabel}\n mobileView={mobileView ?? false}\n />\n ),\n [mobileView, closePane, localeStrings]\n );\n\n const onFetchParticipantMenuItemsForCallComposite = useCallback(\n (participantId: string, myUserId?: string, defaultMenuItems?: IContextualMenuItem[]): IContextualMenuItem[] => {\n let isPinned = pinnedParticipants?.includes(participantId);\n const _defaultMenuItems: IContextualMenuItem[] = defaultMenuItems ?? [];\n const isSpotlighted = spotlightedParticipantUserIds?.includes(participantId);\n const isMe = myUserId === participantId;\n isPinned = isSpotlighted ? false : isPinned;\n if (isSpotlighted) {\n const stopSpotlightMenuText = isMe\n ? localeStrings.stopSpotlightOnSelfMenuLabel\n : localeStrings.stopSpotlightMenuLabel;\n const onStopSpotlight = isMe\n ? onStopLocalSpotlight\n : onStopRemoteSpotlight\n ? () => {\n onStopRemoteSpotlight([participantId]);\n }\n : undefined;\n if (onStopSpotlight && stopSpotlightMenuText) {\n _defaultMenuItems.push({\n key: 'stop-spotlight',\n text: stopSpotlightMenuText,\n onClick: onStopSpotlight,\n iconProps: {\n iconName: 'StopSpotlightContextualMenuItem',\n styles: { root: { lineHeight: 0 } }\n },\n ariaLabel: stopSpotlightMenuText\n });\n }\n } else {\n const startSpotlightMenuText =\n spotlightedParticipantUserIds && spotlightedParticipantUserIds.length > 0\n ? localeStrings.addSpotlightMenuLabel\n : localeStrings.startSpotlightMenuLabel;\n const maxSpotlightedParticipantsReached = maxParticipantsToSpotlight\n ? spotlightedParticipantUserIds\n ? spotlightedParticipantUserIds.length >= maxParticipantsToSpotlight\n : false\n : false;\n const onStartSpotlight = isMe\n ? onStartLocalSpotlight\n : onStartRemoteSpotlight\n ? () => {\n onStartRemoteSpotlight([participantId]);\n }\n : undefined;\n if (onStartSpotlight && startSpotlightMenuText) {\n _defaultMenuItems.push({\n key: 'start-spotlight',\n text: startSpotlightMenuText,\n onClick: onStartSpotlight,\n iconProps: {\n iconName: 'StartSpotlightContextualMenuItem',\n styles: { root: { lineHeight: 0 } }\n },\n ariaLabel: startSpotlightMenuText,\n disabled: maxSpotlightedParticipantsReached,\n title: maxSpotlightedParticipantsReached ? localeStrings.spotlightLimitReachedMenuTitle : undefined\n });\n }\n }\n /* @conditional-compile-remove(soft-mute) */\n if (onMuteParticipant && !isMe) {\n const isMuted = remoteParticipants && remoteParticipants[participantId]?.isMuted;\n _defaultMenuItems.push({\n key: 'mute',\n text: 'Mute',\n iconProps: {\n iconName: 'ContextualMenuMicMutedIcon',\n styles: { root: { lineHeight: 0 } }\n },\n onClick: () => {\n onMuteParticipant(participantId);\n },\n 'data-ui-id': 'participant-item-mute-participant',\n ariaLabel: 'Mute',\n disabled: isMuted\n });\n }\n\n if (!isMe && isPinned !== undefined) {\n if (isPinned && onUnpinParticipant && localeStrings?.unpinParticipantMenuLabel) {\n _defaultMenuItems.push({\n key: 'unpin',\n text: localeStrings?.unpinParticipantMenuLabel,\n iconProps: {\n iconName: 'UnpinParticipant',\n styles: { root: { lineHeight: '1rem', textAlign: 'center' } }\n },\n onClick: () => {\n onUnpinParticipant?.(participantId);\n },\n 'data-ui-id': 'participant-item-unpin-participant-button',\n ariaLabel: localeStrings.unpinParticipantMenuItemAriaLabel\n });\n }\n if (!isPinned && onPinParticipant && localeStrings?.pinParticipantMenuLabel) {\n _defaultMenuItems.push({\n key: 'pin',\n text: disablePinMenuItem\n ? localeStrings.pinParticipantLimitReachedMenuLabel\n : localeStrings.pinParticipantMenuLabel,\n iconProps: {\n iconName: 'PinParticipant',\n styles: { root: { lineHeight: '1rem', textAlign: 'center' } }\n },\n onClick: () => {\n onPinParticipant(participantId);\n },\n 'data-ui-id': 'participant-item-pin-participant-button',\n disabled: disablePinMenuItem || isSpotlighted,\n ariaLabel: localeStrings.pinParticipantMenuItemAriaLabel\n });\n }\n }\n return onFetchParticipantMenuItems\n ? onFetchParticipantMenuItems(participantId, myUserId, _defaultMenuItems)\n : _defaultMenuItems;\n },\n [\n spotlightedParticipantUserIds,\n onStartLocalSpotlight,\n onStopLocalSpotlight,\n onStartRemoteSpotlight,\n onStopRemoteSpotlight,\n onFetchParticipantMenuItems,\n /* @conditional-compile-remove(soft-mute) */\n onMuteParticipant,\n /* @conditional-compile-remove(soft-mute) */\n remoteParticipants,\n localeStrings.stopSpotlightMenuLabel,\n localeStrings.stopSpotlightOnSelfMenuLabel,\n localeStrings.addSpotlightMenuLabel,\n localeStrings.startSpotlightMenuLabel,\n localeStrings.spotlightLimitReachedMenuTitle,\n maxParticipantsToSpotlight,\n pinnedParticipants,\n onPinParticipant,\n onUnpinParticipant,\n disablePinMenuItem,\n localeStrings.pinParticipantMenuLabel,\n localeStrings.pinParticipantLimitReachedMenuLabel,\n localeStrings.unpinParticipantMenuLabel,\n localeStrings.unpinParticipantMenuItemAriaLabel,\n localeStrings.pinParticipantMenuItemAriaLabel\n ]\n );\n\n const onRenderContent = useCallback((): JSX.Element => {\n return (\n <>\n {\n /* @conditional-compile-remove(soft-mute) */\n <Prompt\n {...muteAllPromptLabels}\n styles={{ main: { minWidth: '22.5rem', padding: '1.5rem' } }}\n onConfirm={() => onMuteAllPromptConfirm()}\n isOpen={showMuteAllPrompt}\n onCancel={() => setShowMuteAllPrompt(false)}\n />\n }\n <PeoplePaneContent\n inviteLink={inviteLink}\n onFetchAvatarPersonaData={onFetchAvatarPersonaData}\n onFetchParticipantMenuItems={onFetchParticipantMenuItemsForCallComposite}\n setDrawerMenuItems={setDrawerMenuItems}\n mobileView={mobileView}\n setParticipantActioned={setParticipantActioned}\n participantListHeadingMoreButtonProps={sidePaneHeaderMenuProps}\n pinnedParticipants={pinnedParticipants}\n />\n </>\n );\n }, [\n inviteLink,\n mobileView,\n onFetchAvatarPersonaData,\n onFetchParticipantMenuItemsForCallComposite,\n setDrawerMenuItems,\n setParticipantActioned,\n sidePaneHeaderMenuProps,\n pinnedParticipants,\n /* @conditional-compile-remove(soft-mute) */ showMuteAllPrompt,\n /* @conditional-compile-remove(soft-mute) */ setShowMuteAllPrompt,\n /* @conditional-compile-remove(soft-mute) */ muteAllPromptLabels,\n /* @conditional-compile-remove(soft-mute) */ onMuteAllPromptConfirm\n ]);\n\n const sidePaneRenderer: SidePaneRenderer = useMemo(\n () => ({\n headerRenderer: onRenderHeader,\n contentRenderer: onRenderContent,\n id: PEOPLE_SIDE_PANE_ID\n }),\n [onRenderContent, onRenderHeader]\n );\n\n const openPane = useCallback(() => {\n updateSidePaneRenderer(sidePaneRenderer);\n }, [sidePaneRenderer, updateSidePaneRenderer]);\n\n const isOpen = useIsParticularSidePaneOpen(PEOPLE_SIDE_PANE_ID);\n\n // Update pane renderer if it is open and the openPane dep changes\n useEffect(() => {\n if (isOpen) {\n openPane();\n }\n }, [isOpen, openPane]);\n\n return { openPeoplePane: openPane, closePeoplePane: closePane, isPeoplePaneOpen: isOpen };\n};\n"]}
1
+ {"version":3,"file":"usePeoplePane.js","sourceRoot":"","sources":["../../../../../../../../../react-composites/src/composites/CallComposite/components/SidePane/usePeoplePane.tsx"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,KAAK,EAAE,EAAa,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAC1E,OAAO,EAAoB,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;AACnF,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAKlD,4CAA4C;AAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,4CAA4C;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,4CAA4C;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnC,MAAM,mBAAmB,GAAG,QAAQ,CAAC;AAErC,eAAe;AACf,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,KAwB7B,EAIC,EAAE;IACF,MAAM,EACJ,sBAAsB,EACtB,UAAU,EACV,wBAAwB,EACxB,2BAA2B,EAC3B,kBAAkB,EAClB,UAAU,EACV,eAAe,EACf,sBAAsB,EACtB,6BAA6B,EAC7B,qBAAqB,EACrB,oBAAoB,EACpB,sBAAsB,EACtB,qBAAqB,EACrB,kBAAkB,EAClB,0BAA0B;IAC1B,4CAA4C;IAC5C,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB;IAClB,4CAA4C;IAC5C,2BAA2B,EAC5B,GAAG,KAAK,CAAC;IAEV,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE;;QACjC,sBAAsB,CAAC,SAAS,CAAC,CAAC;QAClC,MAAA,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,OAAO,0CAAE,KAAK,EAAE,CAAC;IACpC,CAAC,EAAE,CAAC,eAAe,EAAE,sBAAsB,CAAC,CAAC,CAAC;IAE9C,MAAM,aAAa,GAAG,SAAS,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IAC/C,4CAA4C;IAC5C,MAAM,kBAAkB,GAAG,WAAW,CAAC,qBAAqB,CAAC,CAAC;IAC9D,4CAA4C;IAC5C,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxE,4CAA4C;IAC5C,MAAM,mBAAmB,GAAG,OAAO,CACjC,GAAG,EAAE,CAAC,CAAC;QACL,kBAAkB,EAAE,aAAa,CAAC,yBAAyB;QAC3D,OAAO,EAAE,aAAa,CAAC,kBAAkB;QACzC,IAAI,EAAE,aAAa,CAAC,oBAAoB;QACxC,iBAAiB,EAAE,aAAa,CAAC,wBAAwB;KAC1D,CAAC,EACF;QACE,aAAa,CAAC,yBAAyB;QACvC,aAAa,CAAC,kBAAkB;QAChC,aAAa,CAAC,oBAAoB;QAClC,aAAa,CAAC,wBAAwB;KACvC,CACF,CAAC;IAEF,4CAA4C;IAC5C,MAAM,sBAAsB,GAAG,WAAW,CAAC,GAAG,EAAE;QAC9C,2BAA2B,IAAI,2BAA2B,EAAE,CAAC;QAC7D,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC,EAAE,CAAC,2BAA2B,EAAE,oBAAoB,CAAC,CAAC,CAAC;IAExD,MAAM,uBAAuB,GAAyB,OAAO,CAAC,GAAG,EAAE;QACjE,MAAM,SAAS,GAA0B,EAAE,CAAC;QAC5C,IAAI,kBAAkB,IAAI,6BAA6B,IAAI,6BAA6B,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpG,SAAS,CAAC,IAAI,CAAC;gBACb,GAAG,EAAE,qBAAqB;gBAC1B,IAAI,EAAE,aAAa,CAAC,yBAAyB;gBAC7C,SAAS,EAAE,EAAE,QAAQ,EAAE,4BAA4B,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE;gBAC1F,OAAO,EAAE,GAAG,EAAE;oBACZ,kBAAkB,EAAE,CAAC;gBACvB,CAAC;gBACD,SAAS,EAAE,aAAa,CAAC,yBAAyB;aACnD,CAAC,CAAC;QACL,CAAC;QACD,4CAA4C;QAC5C,IAAI,2BAA2B,IAAI,kBAAkB,EAAE,CAAC;YACtD,IAAI,UAAU,GAAG,IAAI,CAAC;YACtB,IAAI,kBAAkB,EAAE,CAAC;gBACvB,KAAK,MAAM,WAAW,IAAI,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,EAAE,CAAC;oBAC5D,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;wBACzB,UAAU,GAAG,KAAK,CAAC;wBACnB,MAAM;oBACR,CAAC;gBACH,CAAC;YACH,CAAC;YACD,SAAS,CAAC,IAAI,CAAC;gBACb,CAAC,YAAY,CAAC,EAAE,0CAA0C;gBAC1D,GAAG,EAAE,2BAA2B;gBAChC,IAAI,EAAE,aAAa,CAAC,gBAAgB;gBACpC,SAAS,EAAE;oBACT,QAAQ,EAAE,4BAA4B;oBACtC,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,EAAE;iBACpC;gBACD,OAAO,EAAE,GAAG,EAAE;oBACZ,oBAAoB,CAAC,IAAI,CAAC,CAAC;gBAC7B,CAAC;gBACD,SAAS,EAAE,aAAa,CAAC,gBAAgB;gBACzC,QAAQ,EAAE,UAAU;aACrB,CAAC,CAAC;QACL,CAAC;QACD,OAAO;YACL,KAAK,EAAE,SAAS;SACjB,CAAC;IACJ,CAAC,EAAE;QACD,kBAAkB;QAClB,6BAA6B;QAC7B,aAAa,CAAC,yBAAyB;QACvC,4CAA4C,CAAC,aAAa,CAAC,gBAAgB;QAC3E,4CAA4C,CAAC,2BAA2B;QACxE,4CAA4C,CAAC,kBAAkB;QAC/D,4CAA4C,CAAC,oBAAoB;KAClE,CAAC,CAAC;IAEH,MAAM,cAAc,GAAG,WAAW,CAChC,GAAG,EAAE,CAAC,CACJ,oBAAC,cAAc,IACb,OAAO,EAAE,SAAS,EAClB,WAAW,EAAE,aAAa,CAAC,eAAe,EAC1C,8BAA8B,EAAE,aAAa,CAAC,0BAA0B,EACxE,UAAU,EAAE,UAAU,aAAV,UAAU,cAAV,UAAU,GAAI,KAAK,GAC/B,CACH,EACD,CAAC,UAAU,EAAE,SAAS,EAAE,aAAa,CAAC,CACvC,CAAC;IAEF,MAAM,2CAA2C,GAAG,WAAW,CAC7D,CAAC,aAAqB,EAAE,QAAiB,EAAE,gBAAwC,EAAyB,EAAE;;QAC5G,IAAI,QAAQ,GAAG,kBAAkB,aAAlB,kBAAkB,uBAAlB,kBAAkB,CAAE,QAAQ,CAAC,aAAa,CAAC,CAAC;QAC3D,MAAM,iBAAiB,GAA0B,gBAAgB,aAAhB,gBAAgB,cAAhB,gBAAgB,GAAI,EAAE,CAAC;QACxE,MAAM,aAAa,GAAG,6BAA6B,aAA7B,6BAA6B,uBAA7B,6BAA6B,CAAE,QAAQ,CAAC,aAAa,CAAC,CAAC;QAC7E,MAAM,IAAI,GAAG,QAAQ,KAAK,aAAa,CAAC;QACxC,QAAQ,GAAG,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC;QAC5C,IAAI,aAAa,EAAE,CAAC;YAClB,MAAM,qBAAqB,GAAG,IAAI;gBAChC,CAAC,CAAC,aAAa,CAAC,4BAA4B;gBAC5C,CAAC,CAAC,aAAa,CAAC,sBAAsB,CAAC;YACzC,MAAM,eAAe,GAAG,IAAI;gBAC1B,CAAC,CAAC,oBAAoB;gBACtB,CAAC,CAAC,qBAAqB;oBACvB,CAAC,CAAC,GAAG,EAAE;wBACH,qBAAqB,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;oBACzC,CAAC;oBACH,CAAC,CAAC,SAAS,CAAC;YACd,IAAI,eAAe,IAAI,qBAAqB,EAAE,CAAC;gBAC7C,iBAAiB,CAAC,IAAI,CAAC;oBACrB,GAAG,EAAE,gBAAgB;oBACrB,IAAI,EAAE,qBAAqB;oBAC3B,OAAO,EAAE,eAAe;oBACxB,SAAS,EAAE;wBACT,QAAQ,EAAE,iCAAiC;wBAC3C,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,EAAE;qBACpC;oBACD,SAAS,EAAE,qBAAqB;iBACjC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,sBAAsB,GAC1B,6BAA6B,IAAI,6BAA6B,CAAC,MAAM,GAAG,CAAC;gBACvE,CAAC,CAAC,aAAa,CAAC,qBAAqB;gBACrC,CAAC,CAAC,aAAa,CAAC,uBAAuB,CAAC;YAC5C,MAAM,iCAAiC,GAAG,0BAA0B;gBAClE,CAAC,CAAC,6BAA6B;oBAC7B,CAAC,CAAC,6BAA6B,CAAC,MAAM,IAAI,0BAA0B;oBACpE,CAAC,CAAC,KAAK;gBACT,CAAC,CAAC,KAAK,CAAC;YACV,MAAM,gBAAgB,GAAG,IAAI;gBAC3B,CAAC,CAAC,qBAAqB;gBACvB,CAAC,CAAC,sBAAsB;oBACxB,CAAC,CAAC,GAAG,EAAE;wBACH,sBAAsB,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;oBAC1C,CAAC;oBACH,CAAC,CAAC,SAAS,CAAC;YACd,IAAI,gBAAgB,IAAI,sBAAsB,EAAE,CAAC;gBAC/C,iBAAiB,CAAC,IAAI,CAAC;oBACrB,GAAG,EAAE,iBAAiB;oBACtB,IAAI,EAAE,sBAAsB;oBAC5B,OAAO,EAAE,gBAAgB;oBACzB,SAAS,EAAE;wBACT,QAAQ,EAAE,kCAAkC;wBAC5C,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,EAAE;qBACpC;oBACD,SAAS,EAAE,sBAAsB;oBACjC,QAAQ,EAAE,iCAAiC;oBAC3C,KAAK,EAAE,iCAAiC,CAAC,CAAC,CAAC,aAAa,CAAC,8BAA8B,CAAC,CAAC,CAAC,SAAS;iBACpG,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QACD,4CAA4C;QAC5C,IAAI,iBAAiB,IAAI,CAAC,IAAI,EAAE,CAAC;YAC/B,MAAM,OAAO,GAAG,kBAAkB,KAAI,MAAA,kBAAkB,CAAC,aAAa,CAAC,0CAAE,OAAO,CAAA,CAAC;YACjF,iBAAiB,CAAC,IAAI,CAAC;gBACrB,GAAG,EAAE,MAAM;gBACX,IAAI,EAAE,MAAM;gBACZ,SAAS,EAAE;oBACT,QAAQ,EAAE,4BAA4B;oBACtC,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,EAAE;iBACpC;gBACD,OAAO,EAAE,GAAG,EAAE;oBACZ,iBAAiB,CAAC,aAAa,CAAC,CAAC;gBACnC,CAAC;gBACD,YAAY,EAAE,mCAAmC;gBACjD,SAAS,EAAE,MAAM;gBACjB,QAAQ,EAAE,OAAO;aAClB,CAAC,CAAC;QACL,CAAC;QAED,IAAI,CAAC,IAAI,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YACpC,IAAI,QAAQ,IAAI,kBAAkB,KAAI,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,yBAAyB,CAAA,EAAE,CAAC;gBAC/E,iBAAiB,CAAC,IAAI,CAAC;oBACrB,GAAG,EAAE,OAAO;oBACZ,IAAI,EAAE,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,yBAAyB;oBAC9C,SAAS,EAAE;wBACT,QAAQ,EAAE,kBAAkB;wBAC5B,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE;qBAC9D;oBACD,OAAO,EAAE,GAAG,EAAE;wBACZ,kBAAkB,aAAlB,kBAAkB,uBAAlB,kBAAkB,CAAG,aAAa,CAAC,CAAC;oBACtC,CAAC;oBACD,YAAY,EAAE,2CAA2C;oBACzD,SAAS,EAAE,aAAa,CAAC,iCAAiC;iBAC3D,CAAC,CAAC;YACL,CAAC;YACD,IAAI,CAAC,QAAQ,IAAI,gBAAgB,KAAI,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,uBAAuB,CAAA,EAAE,CAAC;gBAC5E,iBAAiB,CAAC,IAAI,CAAC;oBACrB,GAAG,EAAE,KAAK;oBACV,IAAI,EAAE,kBAAkB;wBACtB,CAAC,CAAC,aAAa,CAAC,mCAAmC;wBACnD,CAAC,CAAC,aAAa,CAAC,uBAAuB;oBACzC,SAAS,EAAE;wBACT,QAAQ,EAAE,gBAAgB;wBAC1B,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE;qBAC9D;oBACD,OAAO,EAAE,GAAG,EAAE;wBACZ,gBAAgB,CAAC,aAAa,CAAC,CAAC;oBAClC,CAAC;oBACD,YAAY,EAAE,yCAAyC;oBACvD,QAAQ,EAAE,kBAAkB,IAAI,aAAa;oBAC7C,SAAS,EAAE,aAAa,CAAC,+BAA+B;iBACzD,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QACD,OAAO,2BAA2B;YAChC,CAAC,CAAC,2BAA2B,CAAC,aAAa,EAAE,QAAQ,EAAE,iBAAiB,CAAC;YACzE,CAAC,CAAC,iBAAiB,CAAC;IACxB,CAAC,EACD;QACE,6BAA6B;QAC7B,qBAAqB;QACrB,oBAAoB;QACpB,sBAAsB;QACtB,qBAAqB;QACrB,2BAA2B;QAC3B,4CAA4C;QAC5C,iBAAiB;QACjB,4CAA4C;QAC5C,kBAAkB;QAClB,aAAa,CAAC,sBAAsB;QACpC,aAAa,CAAC,4BAA4B;QAC1C,aAAa,CAAC,qBAAqB;QACnC,aAAa,CAAC,uBAAuB;QACrC,aAAa,CAAC,8BAA8B;QAC5C,0BAA0B;QAC1B,kBAAkB;QAClB,gBAAgB;QAChB,kBAAkB;QAClB,kBAAkB;QAClB,aAAa,CAAC,uBAAuB;QACrC,aAAa,CAAC,mCAAmC;QACjD,aAAa,CAAC,yBAAyB;QACvC,aAAa,CAAC,iCAAiC;QAC/C,aAAa,CAAC,+BAA+B;KAC9C,CACF,CAAC;IAEF,MAAM,eAAe,GAAG,WAAW,CAAC,GAAgB,EAAE;QACpD,OAAO,CACL;YAEI,4CAA4C;YAC5C,oBAAC,MAAM,oBACD,mBAAmB,IACvB,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAC5D,SAAS,EAAE,GAAG,EAAE,CAAC,sBAAsB,EAAE,EACzC,MAAM,EAAE,iBAAiB,EACzB,QAAQ,EAAE,GAAG,EAAE,CAAC,oBAAoB,CAAC,KAAK,CAAC,IAC3C;YAEJ,oBAAC,iBAAiB,IAChB,UAAU,EAAE,UAAU,EACtB,wBAAwB,EAAE,wBAAwB,EAClD,2BAA2B,EAAE,2CAA2C,EACxE,kBAAkB,EAAE,kBAAkB,EACtC,UAAU,EAAE,UAAU,EACtB,sBAAsB,EAAE,sBAAsB,EAC9C,qCAAqC,EAAE,uBAAuB,EAC9D,kBAAkB,EAAE,kBAAkB,GACtC,CACD,CACJ,CAAC;IACJ,CAAC,EAAE;QACD,UAAU;QACV,UAAU;QACV,wBAAwB;QACxB,2CAA2C;QAC3C,kBAAkB;QAClB,sBAAsB;QACtB,uBAAuB;QACvB,kBAAkB;QAClB,4CAA4C,CAAC,iBAAiB;QAC9D,4CAA4C,CAAC,oBAAoB;QACjE,4CAA4C,CAAC,mBAAmB;QAChE,4CAA4C,CAAC,sBAAsB;KACpE,CAAC,CAAC;IAEH,MAAM,gBAAgB,GAAqB,OAAO,CAChD,GAAG,EAAE,CAAC,CAAC;QACL,cAAc,EAAE,cAAc;QAC9B,eAAe,EAAE,eAAe;QAChC,EAAE,EAAE,mBAAmB;KACxB,CAAC,EACF,CAAC,eAAe,EAAE,cAAc,CAAC,CAClC,CAAC;IAEF,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE;QAChC,sBAAsB,CAAC,gBAAgB,CAAC,CAAC;IAC3C,CAAC,EAAE,CAAC,gBAAgB,EAAE,sBAAsB,CAAC,CAAC,CAAC;IAE/C,MAAM,MAAM,GAAG,2BAA2B,CAAC,mBAAmB,CAAC,CAAC;IAEhE,kEAAkE;IAClE,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,MAAM,EAAE,CAAC;YACX,QAAQ,EAAE,CAAC;QACb,CAAC;IACH,CAAC,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IAEvB,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,eAAe,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,EAAE,CAAC;AAC5F,CAAC,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport React, { RefObject, useCallback, useEffect, useMemo } from 'react';\nimport { SidePaneRenderer, useIsParticularSidePaneOpen } from './SidePaneProvider';\nimport { SidePaneHeader } from '../../../common/SidePaneHeader';\nimport { PeoplePaneContent } from '../../../common/PeoplePaneContent';\nimport { useLocale } from '../../../localization';\nimport { ParticipantMenuItemsCallback, _DrawerMenuItemProps } from '@internal/react-components';\nimport { AvatarPersonaDataCallback } from '../../../common/AvatarPersona';\nimport { IButton } from '@fluentui/react';\nimport { IContextualMenuItem, IContextualMenuProps } from '@fluentui/react';\n/* @conditional-compile-remove(soft-mute) */\nimport { getRemoteParticipants } from '../../selectors/baseSelectors';\n/* @conditional-compile-remove(soft-mute) */\nimport { useSelector } from '../../hooks/useSelector';\n/* @conditional-compile-remove(soft-mute) */\nimport { Prompt } from '../Prompt';\n\nconst PEOPLE_SIDE_PANE_ID = 'people';\n\n/** @private */\nexport const usePeoplePane = (props: {\n updateSidePaneRenderer: (renderer: SidePaneRenderer | undefined) => void;\n setDrawerMenuItems: (items: _DrawerMenuItemProps[]) => void;\n inviteLink?: string;\n onFetchAvatarPersonaData?: AvatarPersonaDataCallback;\n onFetchParticipantMenuItems?: ParticipantMenuItemsCallback;\n mobileView?: boolean;\n peopleButtonRef?: RefObject<IButton>;\n setParticipantActioned?: (userId: string) => void;\n spotlightedParticipantUserIds?: string[];\n onStartLocalSpotlight?: () => Promise<void>;\n onStopLocalSpotlight?: () => Promise<void>;\n onStartRemoteSpotlight?: (userIds: string[]) => Promise<void>;\n onStopRemoteSpotlight?: (userIds: string[]) => Promise<void>;\n onStopAllSpotlight?: () => Promise<void>;\n maxParticipantsToSpotlight?: number;\n /* @conditional-compile-remove(soft-mute) */\n onMuteParticipant?: (userId: string) => Promise<void>;\n /* @conditional-compile-remove(soft-mute) */\n onMuteAllRemoteParticipants?: () => Promise<void>;\n pinnedParticipants?: string[];\n onPinParticipant?: (userId: string) => void;\n onUnpinParticipant?: (userId: string) => void;\n disablePinMenuItem?: boolean;\n}): {\n openPeoplePane: () => void;\n closePeoplePane: () => void;\n isPeoplePaneOpen: boolean;\n} => {\n const {\n updateSidePaneRenderer,\n inviteLink,\n onFetchAvatarPersonaData,\n onFetchParticipantMenuItems,\n setDrawerMenuItems,\n mobileView,\n peopleButtonRef,\n setParticipantActioned,\n spotlightedParticipantUserIds,\n onStartLocalSpotlight,\n onStopLocalSpotlight,\n onStartRemoteSpotlight,\n onStopRemoteSpotlight,\n onStopAllSpotlight,\n maxParticipantsToSpotlight,\n /* @conditional-compile-remove(soft-mute) */\n onMuteParticipant,\n pinnedParticipants,\n onPinParticipant,\n onUnpinParticipant,\n disablePinMenuItem,\n /* @conditional-compile-remove(soft-mute) */\n onMuteAllRemoteParticipants\n } = props;\n\n const closePane = useCallback(() => {\n updateSidePaneRenderer(undefined);\n peopleButtonRef?.current?.focus();\n }, [peopleButtonRef, updateSidePaneRenderer]);\n\n const localeStrings = useLocale().strings.call;\n /* @conditional-compile-remove(soft-mute) */\n const remoteParticipants = useSelector(getRemoteParticipants);\n /* @conditional-compile-remove(soft-mute) */\n const [showMuteAllPrompt, setShowMuteAllPrompt] = React.useState(false);\n /* @conditional-compile-remove(soft-mute) */\n const muteAllPromptLabels = useMemo(\n () => ({\n confirmButtonLabel: localeStrings.muteAllConfirmButtonLabel,\n heading: localeStrings.muteAllDialogTitle,\n text: localeStrings.muteAllDialogContent,\n cancelButtonLabel: localeStrings.muteAllCancelButtonLabel\n }),\n [\n localeStrings.muteAllConfirmButtonLabel,\n localeStrings.muteAllDialogTitle,\n localeStrings.muteAllDialogContent,\n localeStrings.muteAllCancelButtonLabel\n ]\n );\n\n /* @conditional-compile-remove(soft-mute) */\n const onMuteAllPromptConfirm = useCallback(() => {\n onMuteAllRemoteParticipants && onMuteAllRemoteParticipants();\n setShowMuteAllPrompt(false);\n }, [onMuteAllRemoteParticipants, setShowMuteAllPrompt]);\n\n const sidePaneHeaderMenuProps: IContextualMenuProps = useMemo(() => {\n const menuItems: IContextualMenuItem[] = [];\n if (onStopAllSpotlight && spotlightedParticipantUserIds && spotlightedParticipantUserIds.length > 0) {\n menuItems.push({\n key: 'stopAllSpotlightKey',\n text: localeStrings.stopAllSpotlightMenuLabel,\n iconProps: { iconName: 'StopAllSpotlightMenuButton', styles: { root: { lineHeight: 0 } } },\n onClick: () => {\n onStopAllSpotlight();\n },\n ariaLabel: localeStrings.stopAllSpotlightMenuLabel\n });\n }\n /* @conditional-compile-remove(soft-mute) */\n if (onMuteAllRemoteParticipants && remoteParticipants) {\n let isAllMuted = true;\n if (remoteParticipants) {\n for (const participant of Object.values(remoteParticipants)) {\n if (!participant.isMuted) {\n isAllMuted = false;\n break;\n }\n }\n }\n menuItems.push({\n ['data-ui-id']: 'people-pane-mute-all-remote-participants',\n key: 'muteAllRemoteParticipants',\n text: localeStrings.muteAllMenuLabel,\n iconProps: {\n iconName: 'ContextualMenuMicMutedIcon',\n styles: { root: { lineHeight: 0 } }\n },\n onClick: () => {\n setShowMuteAllPrompt(true);\n },\n ariaLabel: localeStrings.muteAllMenuLabel,\n disabled: isAllMuted\n });\n }\n return {\n items: menuItems\n };\n }, [\n onStopAllSpotlight,\n spotlightedParticipantUserIds,\n localeStrings.stopAllSpotlightMenuLabel,\n /* @conditional-compile-remove(soft-mute) */ localeStrings.muteAllMenuLabel,\n /* @conditional-compile-remove(soft-mute) */ onMuteAllRemoteParticipants,\n /* @conditional-compile-remove(soft-mute) */ remoteParticipants,\n /* @conditional-compile-remove(soft-mute) */ setShowMuteAllPrompt\n ]);\n\n const onRenderHeader = useCallback(\n () => (\n <SidePaneHeader\n onClose={closePane}\n headingText={localeStrings.peoplePaneTitle}\n dismissSidePaneButtonAriaLabel={localeStrings.dismissSidePaneButtonLabel}\n mobileView={mobileView ?? false}\n />\n ),\n [mobileView, closePane, localeStrings]\n );\n\n const onFetchParticipantMenuItemsForCallComposite = useCallback(\n (participantId: string, myUserId?: string, defaultMenuItems?: IContextualMenuItem[]): IContextualMenuItem[] => {\n let isPinned = pinnedParticipants?.includes(participantId);\n const _defaultMenuItems: IContextualMenuItem[] = defaultMenuItems ?? [];\n const isSpotlighted = spotlightedParticipantUserIds?.includes(participantId);\n const isMe = myUserId === participantId;\n isPinned = isSpotlighted ? false : isPinned;\n if (isSpotlighted) {\n const stopSpotlightMenuText = isMe\n ? localeStrings.stopSpotlightOnSelfMenuLabel\n : localeStrings.stopSpotlightMenuLabel;\n const onStopSpotlight = isMe\n ? onStopLocalSpotlight\n : onStopRemoteSpotlight\n ? () => {\n onStopRemoteSpotlight([participantId]);\n }\n : undefined;\n if (onStopSpotlight && stopSpotlightMenuText) {\n _defaultMenuItems.push({\n key: 'stop-spotlight',\n text: stopSpotlightMenuText,\n onClick: onStopSpotlight,\n iconProps: {\n iconName: 'StopSpotlightContextualMenuItem',\n styles: { root: { lineHeight: 0 } }\n },\n ariaLabel: stopSpotlightMenuText\n });\n }\n } else {\n const startSpotlightMenuText =\n spotlightedParticipantUserIds && spotlightedParticipantUserIds.length > 0\n ? localeStrings.addSpotlightMenuLabel\n : localeStrings.startSpotlightMenuLabel;\n const maxSpotlightedParticipantsReached = maxParticipantsToSpotlight\n ? spotlightedParticipantUserIds\n ? spotlightedParticipantUserIds.length >= maxParticipantsToSpotlight\n : false\n : false;\n const onStartSpotlight = isMe\n ? onStartLocalSpotlight\n : onStartRemoteSpotlight\n ? () => {\n onStartRemoteSpotlight([participantId]);\n }\n : undefined;\n if (onStartSpotlight && startSpotlightMenuText) {\n _defaultMenuItems.push({\n key: 'start-spotlight',\n text: startSpotlightMenuText,\n onClick: onStartSpotlight,\n iconProps: {\n iconName: 'StartSpotlightContextualMenuItem',\n styles: { root: { lineHeight: 0 } }\n },\n ariaLabel: startSpotlightMenuText,\n disabled: maxSpotlightedParticipantsReached,\n title: maxSpotlightedParticipantsReached ? localeStrings.spotlightLimitReachedMenuTitle : undefined\n });\n }\n }\n /* @conditional-compile-remove(soft-mute) */\n if (onMuteParticipant && !isMe) {\n const isMuted = remoteParticipants && remoteParticipants[participantId]?.isMuted;\n _defaultMenuItems.push({\n key: 'mute',\n text: 'Mute',\n iconProps: {\n iconName: 'ContextualMenuMicMutedIcon',\n styles: { root: { lineHeight: 0 } }\n },\n onClick: () => {\n onMuteParticipant(participantId);\n },\n 'data-ui-id': 'participant-item-mute-participant',\n ariaLabel: 'Mute',\n disabled: isMuted\n });\n }\n\n if (!isMe && isPinned !== undefined) {\n if (isPinned && onUnpinParticipant && localeStrings?.unpinParticipantMenuLabel) {\n _defaultMenuItems.push({\n key: 'unpin',\n text: localeStrings?.unpinParticipantMenuLabel,\n iconProps: {\n iconName: 'UnpinParticipant',\n styles: { root: { lineHeight: '1rem', textAlign: 'center' } }\n },\n onClick: () => {\n onUnpinParticipant?.(participantId);\n },\n 'data-ui-id': 'participant-item-unpin-participant-button',\n ariaLabel: localeStrings.unpinParticipantMenuItemAriaLabel\n });\n }\n if (!isPinned && onPinParticipant && localeStrings?.pinParticipantMenuLabel) {\n _defaultMenuItems.push({\n key: 'pin',\n text: disablePinMenuItem\n ? localeStrings.pinParticipantLimitReachedMenuLabel\n : localeStrings.pinParticipantMenuLabel,\n iconProps: {\n iconName: 'PinParticipant',\n styles: { root: { lineHeight: '1rem', textAlign: 'center' } }\n },\n onClick: () => {\n onPinParticipant(participantId);\n },\n 'data-ui-id': 'participant-item-pin-participant-button',\n disabled: disablePinMenuItem || isSpotlighted,\n ariaLabel: localeStrings.pinParticipantMenuItemAriaLabel\n });\n }\n }\n return onFetchParticipantMenuItems\n ? onFetchParticipantMenuItems(participantId, myUserId, _defaultMenuItems)\n : _defaultMenuItems;\n },\n [\n spotlightedParticipantUserIds,\n onStartLocalSpotlight,\n onStopLocalSpotlight,\n onStartRemoteSpotlight,\n onStopRemoteSpotlight,\n onFetchParticipantMenuItems,\n /* @conditional-compile-remove(soft-mute) */\n onMuteParticipant,\n /* @conditional-compile-remove(soft-mute) */\n remoteParticipants,\n localeStrings.stopSpotlightMenuLabel,\n localeStrings.stopSpotlightOnSelfMenuLabel,\n localeStrings.addSpotlightMenuLabel,\n localeStrings.startSpotlightMenuLabel,\n localeStrings.spotlightLimitReachedMenuTitle,\n maxParticipantsToSpotlight,\n pinnedParticipants,\n onPinParticipant,\n onUnpinParticipant,\n disablePinMenuItem,\n localeStrings.pinParticipantMenuLabel,\n localeStrings.pinParticipantLimitReachedMenuLabel,\n localeStrings.unpinParticipantMenuLabel,\n localeStrings.unpinParticipantMenuItemAriaLabel,\n localeStrings.pinParticipantMenuItemAriaLabel\n ]\n );\n\n const onRenderContent = useCallback((): JSX.Element => {\n return (\n <>\n {\n /* @conditional-compile-remove(soft-mute) */\n <Prompt\n {...muteAllPromptLabels}\n styles={{ main: { minWidth: '22.5rem', padding: '1.5rem' } }}\n onConfirm={() => onMuteAllPromptConfirm()}\n isOpen={showMuteAllPrompt}\n onCancel={() => setShowMuteAllPrompt(false)}\n />\n }\n <PeoplePaneContent\n inviteLink={inviteLink}\n onFetchAvatarPersonaData={onFetchAvatarPersonaData}\n onFetchParticipantMenuItems={onFetchParticipantMenuItemsForCallComposite}\n setDrawerMenuItems={setDrawerMenuItems}\n mobileView={mobileView}\n setParticipantActioned={setParticipantActioned}\n participantListHeadingMoreButtonProps={sidePaneHeaderMenuProps}\n pinnedParticipants={pinnedParticipants}\n />\n </>\n );\n }, [\n inviteLink,\n mobileView,\n onFetchAvatarPersonaData,\n onFetchParticipantMenuItemsForCallComposite,\n setDrawerMenuItems,\n setParticipantActioned,\n sidePaneHeaderMenuProps,\n pinnedParticipants,\n /* @conditional-compile-remove(soft-mute) */ showMuteAllPrompt,\n /* @conditional-compile-remove(soft-mute) */ setShowMuteAllPrompt,\n /* @conditional-compile-remove(soft-mute) */ muteAllPromptLabels,\n /* @conditional-compile-remove(soft-mute) */ onMuteAllPromptConfirm\n ]);\n\n const sidePaneRenderer: SidePaneRenderer = useMemo(\n () => ({\n headerRenderer: onRenderHeader,\n contentRenderer: onRenderContent,\n id: PEOPLE_SIDE_PANE_ID\n }),\n [onRenderContent, onRenderHeader]\n );\n\n const openPane = useCallback(() => {\n updateSidePaneRenderer(sidePaneRenderer);\n }, [sidePaneRenderer, updateSidePaneRenderer]);\n\n const isOpen = useIsParticularSidePaneOpen(PEOPLE_SIDE_PANE_ID);\n\n // Update pane renderer if it is open and the openPane dep changes\n useEffect(() => {\n if (isOpen) {\n openPane();\n }\n }, [isOpen, openPane]);\n\n return { openPeoplePane: openPane, closePeoplePane: closePane, isPeoplePaneOpen: isOpen };\n};\n"]}
@@ -7,5 +7,6 @@ export declare const EndCall: (props: {
7
7
  styles?: ControlBarButtonStyles;
8
8
  mobileView?: boolean;
9
9
  enableEndCallMenu?: boolean;
10
+ disableEndCallModal?: boolean;
10
11
  }) => JSX.Element;
11
12
  //# sourceMappingURL=EndCall.d.ts.map
@@ -81,7 +81,7 @@ export const EndCall = (props) => {
81
81
  React.createElement(Prompt, Object.assign({}, dialogLabels, { styles: { main: { minWidth: '22.5rem', padding: '1.5rem' } }, cancelButtonLabel: localeStrings.call.hangUpCancelButtonLabel, onConfirm: () => onHangUpConfirm(props.enableEndCallMenu), isOpen: showHangUpConfirm, onCancel: toggleConfirm })),
82
82
  React.createElement(EndCallButton, Object.assign({ "data-ui-id": "call-composite-hangup-button" }, hangUpButtonProps, {
83
83
  /* @conditional-compile-remove(end-call-options) */
84
- onHangUp: hangUpOverride, styles: styles, showLabel: !compactMode,
84
+ onHangUp: props.disableEndCallModal ? onHangUp : hangUpOverride, styles: styles, showLabel: !compactMode,
85
85
  /* @conditional-compile-remove(end-call-options) */
86
86
  enableEndCallMenu: (_a = props.enableEndCallMenu) !== null && _a !== void 0 ? _a : false }))));
87
87
  };
@@ -1 +1 @@
1
- {"version":3,"file":"EndCall.js","sourceRoot":"","sources":["../../../../../../../../../react-composites/src/composites/CallComposite/components/buttons/EndCall.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { concatStyleSets } from '@fluentui/react';\nimport { ControlBarButtonStyles, EndCallButton } from '@internal/react-components';\nimport React, { useMemo } from 'react';\n/* @conditional-compile-remove(end-call-options) */\nimport { useState, useCallback } from 'react';\nimport { CallControlDisplayType } from '../../../common/types/CommonCallControlOptions';\nimport { usePropsFor } from '../../hooks/usePropsFor';\nimport { groupCallLeaveButtonCompressedStyle, groupCallLeaveButtonStyle } from '../../styles/Buttons.styles';\n/* @conditional-compile-remove(end-call-options) */\nimport { Prompt } from '../Prompt';\n/* @conditional-compile-remove(end-call-options) */\nimport { useLocale } from '../../../localization';\n\n/** @private */\nexport const EndCall = (props: {\n displayType?: CallControlDisplayType;\n styles?: ControlBarButtonStyles;\n mobileView?: boolean;\n /* @conditional-compile-remove(end-call-options) */\n enableEndCallMenu?: boolean;\n}): JSX.Element => {\n const compactMode = props.displayType === 'compact';\n const hangUpButtonProps = usePropsFor(EndCallButton);\n /* @conditional-compile-remove(end-call-options) */\n const localeStrings = useLocale().strings;\n\n /* @conditional-compile-remove(end-call-options) */\n const endCallDiaglogLabels = useMemo(\n () => ({\n confirmButtonLabel: localeStrings.call.endCallConfirmButtonLabel,\n heading: localeStrings.call.endCallConfirmDialogTitle,\n text: localeStrings.call.leaveConfirmDialogContent\n }),\n [\n localeStrings.call.endCallConfirmButtonLabel,\n localeStrings.call.endCallConfirmDialogTitle,\n localeStrings.call.leaveConfirmDialogContent\n ]\n );\n\n /* @conditional-compile-remove(end-call-options) */\n const leaveDiaglogLabels = useMemo(\n () => ({\n confirmButtonLabel: localeStrings.call.leaveConfirmButtonLabel,\n heading: localeStrings.call.leaveConfirmDialogTitle,\n text: localeStrings.call.leaveConfirmDialogContent\n }),\n [\n localeStrings.call.leaveConfirmButtonLabel,\n localeStrings.call.leaveConfirmDialogContent,\n localeStrings.call.leaveConfirmDialogTitle\n ]\n );\n\n /* @conditional-compile-remove(end-call-options) */\n const [dialogLabels, setDialogLabels] = useState(leaveDiaglogLabels);\n\n /* @conditional-compile-remove(end-call-options) */\n const { onHangUp } = hangUpButtonProps;\n\n /* @conditional-compile-remove(end-call-options) */\n const [showHangUpConfirm, setShowHangUpConfirm] = React.useState(false);\n\n /* @conditional-compile-remove(end-call-options) */\n const toggleConfirm = useCallback(() => {\n setShowHangUpConfirm(!showHangUpConfirm);\n }, [showHangUpConfirm]);\n\n /* @conditional-compile-remove(end-call-options) */\n const onHangUpConfirm = useCallback(\n (hangUpForEveryone?: boolean) => {\n onHangUp && onHangUp(hangUpForEveryone);\n toggleConfirm();\n },\n [onHangUp, toggleConfirm]\n );\n\n /* @conditional-compile-remove(end-call-options) */\n const hangUpOverride = useCallback(\n async (forEveryone?: boolean) => {\n if (\n props.mobileView ||\n forEveryone === false /* value being false(not undefined) because it comes from endCall option */\n ) {\n onHangUp();\n return;\n }\n setDialogLabels(forEveryone ? endCallDiaglogLabels : leaveDiaglogLabels);\n toggleConfirm();\n },\n [endCallDiaglogLabels, leaveDiaglogLabels, onHangUp, props.mobileView, toggleConfirm]\n );\n\n const styles = useMemo(\n () =>\n concatStyleSets(\n compactMode ? groupCallLeaveButtonCompressedStyle : groupCallLeaveButtonStyle,\n props.styles ?? {}\n ),\n [compactMode, props.styles]\n );\n return (\n <>\n {\n /* @conditional-compile-remove(end-call-options) */\n <Prompt\n {...dialogLabels}\n styles={{ main: { minWidth: '22.5rem', padding: '1.5rem' } }}\n cancelButtonLabel={localeStrings.call.hangUpCancelButtonLabel}\n onConfirm={() => onHangUpConfirm(props.enableEndCallMenu)} // if enableEndCallMenu is true, that means the dialog is triggered by hangUpForEveryone button\n isOpen={showHangUpConfirm}\n onCancel={toggleConfirm}\n />\n }\n <EndCallButton\n data-ui-id=\"call-composite-hangup-button\"\n {...hangUpButtonProps}\n /* @conditional-compile-remove(end-call-options) */\n onHangUp={hangUpOverride}\n styles={styles}\n showLabel={!compactMode}\n /* @conditional-compile-remove(end-call-options) */\n enableEndCallMenu={props.enableEndCallMenu ?? false}\n />\n </>\n );\n};\n"]}
1
+ {"version":3,"file":"EndCall.js","sourceRoot":"","sources":["../../../../../../../../../react-composites/src/composites/CallComposite/components/buttons/EndCall.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { concatStyleSets } from '@fluentui/react';\nimport { ControlBarButtonStyles, EndCallButton } from '@internal/react-components';\nimport React, { useMemo } from 'react';\n/* @conditional-compile-remove(end-call-options) */\nimport { useState, useCallback } from 'react';\nimport { CallControlDisplayType } from '../../../common/types/CommonCallControlOptions';\nimport { usePropsFor } from '../../hooks/usePropsFor';\nimport { groupCallLeaveButtonCompressedStyle, groupCallLeaveButtonStyle } from '../../styles/Buttons.styles';\n/* @conditional-compile-remove(end-call-options) */\nimport { Prompt } from '../Prompt';\n/* @conditional-compile-remove(end-call-options) */\nimport { useLocale } from '../../../localization';\n\n/** @private */\nexport const EndCall = (props: {\n displayType?: CallControlDisplayType;\n styles?: ControlBarButtonStyles;\n mobileView?: boolean;\n /* @conditional-compile-remove(end-call-options) */\n enableEndCallMenu?: boolean;\n disableEndCallModal?: boolean;\n}): JSX.Element => {\n const compactMode = props.displayType === 'compact';\n const hangUpButtonProps = usePropsFor(EndCallButton);\n /* @conditional-compile-remove(end-call-options) */\n const localeStrings = useLocale().strings;\n\n /* @conditional-compile-remove(end-call-options) */\n const endCallDiaglogLabels = useMemo(\n () => ({\n confirmButtonLabel: localeStrings.call.endCallConfirmButtonLabel,\n heading: localeStrings.call.endCallConfirmDialogTitle,\n text: localeStrings.call.leaveConfirmDialogContent\n }),\n [\n localeStrings.call.endCallConfirmButtonLabel,\n localeStrings.call.endCallConfirmDialogTitle,\n localeStrings.call.leaveConfirmDialogContent\n ]\n );\n\n /* @conditional-compile-remove(end-call-options) */\n const leaveDiaglogLabels = useMemo(\n () => ({\n confirmButtonLabel: localeStrings.call.leaveConfirmButtonLabel,\n heading: localeStrings.call.leaveConfirmDialogTitle,\n text: localeStrings.call.leaveConfirmDialogContent\n }),\n [\n localeStrings.call.leaveConfirmButtonLabel,\n localeStrings.call.leaveConfirmDialogContent,\n localeStrings.call.leaveConfirmDialogTitle\n ]\n );\n\n /* @conditional-compile-remove(end-call-options) */\n const [dialogLabels, setDialogLabels] = useState(leaveDiaglogLabels);\n\n /* @conditional-compile-remove(end-call-options) */\n const { onHangUp } = hangUpButtonProps;\n\n /* @conditional-compile-remove(end-call-options) */\n const [showHangUpConfirm, setShowHangUpConfirm] = React.useState(false);\n\n /* @conditional-compile-remove(end-call-options) */\n const toggleConfirm = useCallback(() => {\n setShowHangUpConfirm(!showHangUpConfirm);\n }, [showHangUpConfirm]);\n\n /* @conditional-compile-remove(end-call-options) */\n const onHangUpConfirm = useCallback(\n (hangUpForEveryone?: boolean) => {\n onHangUp && onHangUp(hangUpForEveryone);\n toggleConfirm();\n },\n [onHangUp, toggleConfirm]\n );\n\n /* @conditional-compile-remove(end-call-options) */\n const hangUpOverride = useCallback(\n async (forEveryone?: boolean) => {\n if (\n props.mobileView ||\n forEveryone === false /* value being false(not undefined) because it comes from endCall option */\n ) {\n onHangUp();\n return;\n }\n setDialogLabels(forEveryone ? endCallDiaglogLabels : leaveDiaglogLabels);\n toggleConfirm();\n },\n [endCallDiaglogLabels, leaveDiaglogLabels, onHangUp, props.mobileView, toggleConfirm]\n );\n\n const styles = useMemo(\n () =>\n concatStyleSets(\n compactMode ? groupCallLeaveButtonCompressedStyle : groupCallLeaveButtonStyle,\n props.styles ?? {}\n ),\n [compactMode, props.styles]\n );\n return (\n <>\n {\n /* @conditional-compile-remove(end-call-options) */\n <Prompt\n {...dialogLabels}\n styles={{ main: { minWidth: '22.5rem', padding: '1.5rem' } }}\n cancelButtonLabel={localeStrings.call.hangUpCancelButtonLabel}\n onConfirm={() => onHangUpConfirm(props.enableEndCallMenu)} // if enableEndCallMenu is true, that means the dialog is triggered by hangUpForEveryone button\n isOpen={showHangUpConfirm}\n onCancel={toggleConfirm}\n />\n }\n <EndCallButton\n data-ui-id=\"call-composite-hangup-button\"\n {...hangUpButtonProps}\n /* @conditional-compile-remove(end-call-options) */\n onHangUp={props.disableEndCallModal ? onHangUp : hangUpOverride}\n styles={styles}\n showLabel={!compactMode}\n /* @conditional-compile-remove(end-call-options) */\n enableEndCallMenu={props.enableEndCallMenu ?? false}\n />\n </>\n );\n};\n"]}
@@ -49,7 +49,7 @@ const inferCommonCallControlOptions = (mobileView, commonCallControlOptions) =>
49
49
  * @private
50
50
  */
51
51
  export const CommonCallControlBar = (props) => {
52
- var _a, _b, _c, _d, _e, _f, _g, _h, _j;
52
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
53
53
  const theme = useTheme();
54
54
  const rtl = theme.rtl;
55
55
  const controlBarContainerRef = useRef(null);
@@ -218,7 +218,9 @@ export const CommonCallControlBar = (props) => {
218
218
  ((_h = (_g = props.callControls) === null || _g === void 0 ? void 0 : _g.endCallButton) === null || _h === void 0 ? void 0 : _h.hangUpForEveryone) === 'endCallOptions' &&
219
219
  // Only show the end call menu when the call is connected, user should not be able to end the call for everyone
220
220
  // when they are not actively in the call to communicate they will.
221
- callState.callStatus === 'Connected' }))))))),
221
+ callState.callStatus === 'Connected', disableEndCallModal: !isBoolean(props.callControls) &&
222
+ !isBoolean((_j = props.callControls) === null || _j === void 0 ? void 0 : _j.endCallButton) &&
223
+ ((_l = (_k = props.callControls) === null || _k === void 0 ? void 0 : _k.endCallButton) === null || _l === void 0 ? void 0 : _l.disableEndCallModal) }))))))),
222
224
  !props.mobileView && sideButtonsPresent && (React.createElement(Stack.Item, null,
223
225
  React.createElement("div", { ref: sidepaneControlsRef },
224
226
  React.createElement(Stack, { horizontal: true, className: !props.mobileView ? mergeStyles(desktopButtonContainerStyle) : undefined },
@@ -226,8 +228,8 @@ export const CommonCallControlBar = (props) => {
226
228
  ? peopleButtonStrings === null || peopleButtonStrings === void 0 ? void 0 : peopleButtonStrings.tooltipCloseAriaLabel
227
229
  : peopleButtonStrings === null || peopleButtonStrings === void 0 ? void 0 : peopleButtonStrings.tooltipOpenAriaLabel, showLabel: options.displayType !== 'compact', onClick: props.onPeopleButtonClicked, "data-ui-id": "common-call-composite-people-button", disabled: props.disableButtonsForLobbyPage ||
228
230
  props.disableButtonsForHoldScreen ||
229
- isDisabled(options.peopleButton), strings: peopleButtonStrings, styles: commonButtonStyles, componentRef: props.peopleButtonRef })), (_j = customButtons['secondary']) === null || _j === void 0 ? void 0 :
230
- _j.slice(0, CUSTOM_BUTTON_OPTIONS.MAX_SECONDARY_DESKTOP_CUSTOM_BUTTONS).map((CustomButton, i) => {
231
+ isDisabled(options.peopleButton), strings: peopleButtonStrings, styles: commonButtonStyles, componentRef: props.peopleButtonRef })), (_m = customButtons['secondary']) === null || _m === void 0 ? void 0 :
232
+ _m.slice(0, CUSTOM_BUTTON_OPTIONS.MAX_SECONDARY_DESKTOP_CUSTOM_BUTTONS).map((CustomButton, i) => {
231
233
  return (React.createElement(CustomButton, { key: `secondary-custom-button-${i}`, styles: commonButtonStyles, showLabel: options.displayType !== 'compact' }));
232
234
  }))))))));
233
235
  };
@@ -1 +1 @@
1
- {"version":3,"file":"CommonCallControlBar.js","sourceRoot":"","sources":["../../../../../../../../react-composites/src/composites/common/ControlBar/CommonCallControlBar.tsx"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACjF,OAAO,EAAE,mBAAmB,EAAE,MAAM,iDAAiD,CAAC;AAEtF,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EACL,eAAe,EAIf,WAAW,EACX,cAAc,EACd,KAAK,EACL,QAAQ,EACT,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,yBAAyB,EAAE,MAAM,gDAAgD,CAAC;AAC3F,OAAO,EAAE,2BAA2B,EAAE,MAAM,4CAA4C,CAAC;AACzF,OAAO,EAAE,+BAA+B,EAAE,MAAM,mEAAmE,CAAC;AAGpH,OAAO,EAAE,UAAU,EAAE,4CAAmC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,mDAAmD,CAAC;AAC/E,OAAO,EAAE,MAAM,EAAE,MAAM,+CAA+C,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,oDAAoD,CAAC;AACjF,OAAO,EAAE,OAAO,EAAE,MAAM,gDAAgD,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,OAAO,EACL,qBAAqB,EACrB,kCAAkC,EAClC,kCAAkC,EACnC,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAGjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,kDAAkD,CAAC;AAC7E,OAAO,EAAE,QAAQ,EAAE,MAAM,iDAAiD,CAAC;AAC3E,OAAO,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kDAAkD,CAAC;AACtF,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,mDAAmD;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,mDAAmD;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,6CAA6C,CAAC;AAC7E,OAAO,EAAE,kBAAkB,EAAE,MAAM,kDAAkD,CAAC;AACtF,2DAA2D;AAC3D,OAAO,EAAE,+BAA+B,EAAE,4CAAmC;AAoC7E,MAAM,6BAA6B,GAAG,CACpC,UAAmB,EACnB,wBAA+D,EAC3B,EAAE;IACtC,IAAI,wBAAwB,KAAK,KAAK,EAAE,CAAC;QACvC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,OAAO,GACX,wBAAwB,KAAK,IAAI,IAAI,wBAAwB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,wBAAwB,CAAC;IAC9G,IAAI,UAAU,EAAE,CAAC;QACf,gEAAgE;QAChE,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;QAChC,gEAAgE;QAChE,OAAO,CAAC,iBAAiB,GAAG,KAAK,CAAC;IACpC,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,KAAqD,EAAe,EAAE;;IACzG,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;IAEtB,MAAM,sBAAsB,GAAG,MAAM,CAAqB,IAAI,CAAC,CAAC;IAChE,MAAM,mBAAmB,GAAG,MAAM,CAAqB,IAAI,CAAC,CAAC;IAC7D,MAAM,iBAAiB,GAAG,MAAM,CAAqB,IAAI,CAAC,CAAC;IAE3D,MAAM,CAAC,sBAAsB,EAAE,yBAAyB,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACxE,MAAM,CAAC,kBAAkB,EAAE,qBAAqB,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAChE,MAAM,CAAC,wBAAwB,EAAE,2BAA2B,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAE5E,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC9D,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAExD,MAAM,mBAAmB,GAAG,+BAA+B,EAAE,CAAC;IAC9D,MAAM,OAAO,GAAG,6BAA6B,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;IAEpF,MAAM,CAAC,yBAAyB,EAAE,4BAA4B,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAElF,mDAAmD;IACnD,8DAA8D;IAC9D,MAAM,0BAA0B,GAC9B,MAAA,WAAW,CAAC,CAAC,KAAK,EAAE,EAAE,eAAC,OAAA,MAAA,MAAA,KAAK,CAAC,IAAI,0CAAE,mBAAmB,0CAAE,YAAY,CAAC,iBAAiB,CAAC,SAAS,CAAA,EAAA,CAAC,mCAAI,IAAI,CAAC;IAC5G,mDAAmD;IACnD,MAAM,OAAO,GAAG,WAAW,CAAC,cAAc,CAAC,CAAC;IAE5C,MAAM,YAAY,GAAG,WAAW,CAAC,GAAS,EAAE;QAC1C,yBAAyB,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,CAAC,sBAAsB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3G,qBAAqB,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjG,2BAA2B,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,iBAAiB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrG,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,2BAA2B;IAC3B,SAAS,CAAC,GAAG,EAAE;QACb,yBAAyB,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,CAAC,sBAAsB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3G,qBAAqB,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjG,2BAA2B,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,iBAAiB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrG,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,kGAAkG;IAClG,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QAChD,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IAClE,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;IAEnB;;qEAEiE;IACjE,SAAS,CAAC,GAAG,EAAE;QACb,mJAAmJ;QACnJ,oBAAoB,CAClB,CAAC,wBAAwB,GAAG,sBAAsB,CAAC,GAAG,CAAC,GAAG,sBAAsB,GAAG,kBAAkB,CACtG,CAAC;IACJ,CAAC,EAAE,CAAC,sBAAsB,EAAE,kBAAkB,EAAE,wBAAwB,CAAC,CAAC,CAAC;IAE3E,SAAS,CAAC,GAAG,EAAE;QACb,eAAe,CAAC,iBAAiB,GAAG,wBAAwB,CAAC,CAAC;IAChE,CAAC,EAAE,CAAC,iBAAiB,EAAE,wBAAwB,CAAC,CAAC,CAAC;IAElD,MAAM,yBAAyB,GAAG,WAAW,CAAC,GAAS,EAAE;QACvD,4BAA4B,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,yBAAyB,GAAG,WAAW,CAAC,GAAS,EAAE;QACvD,4BAA4B,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,mBAAmB,GAAG,OAAO,CACjC,GAAG,EAAE,CAAC,CAAC;QACL,KAAK,EAAE,mBAAmB,CAAC,iBAAiB;QAC5C,aAAa,EAAE,mBAAmB,CAAC,yBAAyB;QAC5D,oBAAoB,EAAE,mBAAmB,CAAC,gCAAgC;QAC1E,qBAAqB,EAAE,mBAAmB,CAAC,iCAAiC;QAC5E,iBAAiB,EAAE,mBAAmB,CAAC,uBAAuB;QAC9D,gBAAgB,EAAE,mBAAmB,CAAC,wBAAwB;KAC/D,CAAC,EACF,CAAC,mBAAmB,CAAC,CACtB,CAAC;IACF,MAAM,iBAAiB,GAAG,OAAO,CAC/B,GAAG,EAAE,CAAC,CAAC;QACL,KAAK,EAAE,mBAAmB,CAAC,qBAAqB;QAChD,cAAc,EAAE,mBAAmB,CAAC,uBAAuB;KAC5D,CAAC,EACF,CAAC,mBAAmB,CAAC,CACtB,CAAC;IACF,MAAM,WAAW,GAAG,SAAS,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IAC7C,MAAM,0BAA0B,GAAG,OAAO,CACxC,GAAG,EAAE,CAAC,CAAC;QACL,KAAK,EAAE,WAAW,CAAC,wBAAwB;QAC3C,cAAc,EAAE,WAAW,CAAC,0BAA0B;KACvD,CAAC,EACF,CAAC,WAAW,CAAC,CACd,CAAC;IAEF,MAAM,qBAAqB,GAAG,OAAO,CAAC,GAAG,EAAE;QACzC,MAAM,MAAM,GAAqB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,EAAE,CAAC;QAClF,OAAO,cAAc,CAAC,MAAM,EAAE;YAC5B,IAAI,EAAE;gBACJ,iGAAiG;gBACjG,UAAU,EAAE,KAAK,CAAC,cAAc,CAAC,cAAc;aAChD;SACF,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC,CAAC;IAC5D,MAAM,uBAAuB,GAAG,OAAO,CACrC,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,iCAAiC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,EAChF,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,CAC1B,CAAC;IACF,MAAM,kBAAkB,GAAG,OAAO,CAChC,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,4BAA4B,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,EAC3E,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,CAC1B,CAAC;IACF,MAAM,mBAAmB,GAAG,OAAO,CACjC,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,6BAA6B,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,EAC5E,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,CAC1B,CAAC;IAEF,MAAM,8BAA8B,GAAW,OAAO;IACpD,mHAAmH;IACnH,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EACxG,CAAC,KAAK,CAAC,UAAU,EAAE,GAAG,EAAE,YAAY,CAAC,CACtC,CAAC;IAEF,mHAAmH;IACnH,MAAM,gCAAgC,GAAW,OAAO,CACtD,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAC9G,CAAC,KAAK,CAAC,UAAU,EAAE,YAAY,CAAC,CACjC,CAAC;IAEF,MAAM,aAAa,GAAG,OAAO,CAC3B,GAAG,EAAE,CACH,kCAAkC,CAChC,kCAAkC,CAAC,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,EAC3E,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,WAAW,CAAC,CAAC,CAAC,SAAS,CACrD,EACH,CAAC,OAAO,CAAC,CACV,CAAC;IAEF,MAAM,oBAAoB,GAAG,WAAW,CAAC,kBAAkB,CAAC,CAAC;IAC7D,MAAM,SAAS,GAAG,WAAW,CAAC,kBAAkB,CAAC,CAAC;IAClD,MAAM,iBAAiB,GACrB,SAAS,CAAC,UAAU,KAAK,WAAW;QACpC,CAAC,CAAA,oBAAoB,aAApB,oBAAoB,uBAApB,oBAAoB,CAAE,YAAY,CAAA;QACnC,oBAAoB,CAAC,YAAY,CAAC,YAAY,CAAC,SAAS,CAAC;IAE3D,oEAAoE;IACpE,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;QACtB,OAAO,yCAAK,CAAC;IACf,CAAC;IAED,MAAM,kBAAkB,GACtB,SAAS,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,aAAa,CAAC,WAAW,CAAC,KAAK,SAAS,CAAC;IAE/G,MAAM,0BAA0B,GAAG,SAAS,CAAC,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,iBAAiB,CAAC,CAAC;IAEzE,MAAM,yBAAyB,GAAG,SAAS,CAAC,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,gBAAgB,CAAC,CAAC;IAEvE,MAAM,qBAAqB,GAAG,SAAS,CAAC,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,YAAY,CAAC,CAAC;IAE/D,MAAM,uBAAuB,GAAG,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,mBAAmB,MAAK,KAAK,CAAC;IAEvE,MAAM,kBAAkB,GACtB,KAAK,CAAC,mBAAmB;QACzB,qDAAqD,CAAC,SAAS,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IAE1F,2DAA2D;IAC3D,MAAM,+BAA+B,GAAG,SAAS,CAAC,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,2BAA2B,CAAC,CAAC;IAExF,MAAM,qBAAqB,GACzB,SAAS,CAAC,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,UAAU,CAAC;QAC9B,CAAC,KAAK;YACJ,4CAA4C,CAAC,mDAAmD,CAAC,SAAS,CACxG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,UAAU,CACpB;YACD,kBAAkB;YAClB,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAElC,MAAM,IAAI,GAAG,MAAA,KAAK,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,IAAI,0CAAE,IAAI,CAAC;IACrD,MAAM,8BAA8B,GAClC,KAAK,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,WAAW,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC7F,MAAM,iBAAiB,GAAG,KAAK,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC;IAEjE,OAAO,CACL,6BAAK,GAAG,EAAE,iBAAiB;QACzB,oBAAC,mBAAmB,IAAC,OAAO,EAAE,KAAK,CAAC,WAAW;YAC5C,yBAAyB,IAAI,CAC5B,oBAAC,qBAAqB,IACpB,yBAAyB,EAAE,yBAAyB,EACpD,yBAAyB,EAAE,yBAAyB,EACpD,qBAAqB,EAAE,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,gBAAgB,GACnE,CACH;YAEC,2DAA2D,CAAC,KAAK,CAAC,kCAAkC,IAAI,CACtG,oBAAC,+BAA+B,IAC9B,uBAAuB,EAAE,MAAA,MAAA,KAAK,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,IAAI,0CAAE,sBAAsB,mCAAI,EAAE,EACxF,SAAS,EAAE,KAAK,CAAC,kCAAkC,EACnD,iCAAiC,EAAE,KAAK,CAAC,mCAAmC,GAC5E,CACH,CAEiB;QACtB,oBAAC,KAAK,IACJ,UAAU,QACV,QAAQ,EAAE,CAAC,KAAK,CAAC,UAAU,IAAI,CAAC,YAAY,EAC5C,eAAe,EAAC,eAAe,EAC/B,SAAS,EAAE,WAAW,CACpB,2BAA2B,EAC3B,yBAAyB,EACzB,gCAAgC,CACjC;YAED,oBAAC,KAAK,CAAC,IAAI,IAAC,IAAI,QAAC,SAAS,EAAE,WAAW,CAAC,8BAA8B,CAAC;gBACrE,oBAAC,mBAAmB,IAAC,OAAO,EAAE,KAAK,CAAC,WAAW;oBAC7C,oBAAC,KAAK,IAAC,eAAe,EAAC,QAAQ;wBAM7B,oBAAC,qBAAqB,OAAG;wBACzB,oBAAC,KAAK,CAAC,IAAI;4BAQT,6BAAK,GAAG,EAAE,sBAAsB;gCAC9B,oBAAC,UAAU,IAAC,MAAM,EAAE,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,EAAE,MAAM,EAAE,qBAAqB;oCACjG,yBAAyB,IAAI,CAC5B,oBAAC,UAAU,IACT,WAAW,EAAE,OAAO,CAAC,WAAW,EAChC,MAAM,EAAE,kBAAkB,EAC1B,8BAA8B,EAAE,CAAC,KAAK,CAAC,UAAU;wCACjD,6CAA6C,CAAC,mDAAmD;wCACjG,QAAQ,EAAE,KAAK,CAAC,2BAA2B,IAAI,UAAU,CAAC,OAAO,CAAC,gBAAgB,CAAC,EACnF,cAAc,EAAE,KAAK,CAAC,UAAU,GAChC,CACH;oCACA,qBAAqB,IAAI,CACxB,oBAAC,MAAM,IACL,WAAW,EAAE,OAAO,CAAC,WAAW,EAChC,MAAM,EAAE,kBAAkB,EAC1B,8BAA8B,EAAE,CAAC,KAAK,CAAC,UAAU;wCACjD,6CAA6C,CAAC,mDAAmD;wCACjG,QAAQ,EAAE,KAAK,CAAC,2BAA2B,IAAI,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC,EAC/E,mBAAmB,EAAE,KAAK,CAAC,mBAAmB,EAC9C,YAAY,EAAE,KAAK,CAAC,eAAe,EACnC,cAAc,EAAE,KAAK,CAAC,UAAU,GAChC,CACH;oCACA,CAAC,KAAK,CAAC,UAAU;wCAChB,iBAAiB;wCACjB,SAAS,CAAC,OAAO,CAAC,cAAc,CAAC;wCACjC,iBAAiB,IAAI,CACnB,oBAAC,QAAQ,IACP,WAAW,EAAE,OAAO,CAAC,WAAW,EAChC,MAAM,EAAE,kBAAkB,EAC1B,QAAQ,EAAE,KAAK,CAAC,2BAA2B,EAC3C,gBAAgB,EAAE,iBAAiB,GACnC,CACH;oCACF,CAAC,KAAK,CAAC,UAAU,IAAI,SAAS,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,8BAA8B,IAAI,CAC7F,oBAAC,SAAS,IACR,WAAW,EAAE,OAAO,CAAC,WAAW,EAChC,MAAM,EAAE,kBAAkB;wCAC1B,6CAA6C,CAAC,mDAAmD;wCACjG,QAAQ,EAAE,KAAK,CAAC,2BAA2B,IAAI,UAAU,CAAC,OAAO,CAAC,gBAAgB,CAAC,GACnF,CACH;oCACA,oBAAoB,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,gBAAgB,KAAK,SAAS,IAAI,CACxE,oBAAC,iBAAiB,IAChB,MAAM,EAAE,kBAAkB,EAC1B,WAAW,EAAE,OAAO,CAAC,WAAW,EAChC,OAAO,EAAE,GAAG,EAAE;4CACZ,IAAI,KAAK,CAAC,gBAAgB,KAAK,SAAS,EAAE,CAAC;gDACzC,KAAK,CAAC,gBAAgB,EAAE,CAAC;4CAC3B,CAAC;wCACH,CAAC,GACD,CACH;oCACA,uBAAuB,IAAI,KAAK,CAAC,oBAAoB,IAAI,CACxD,oBAAC,mBAAmB,IAClB,WAAW,EAAE,OAAO,CAAC,WAAW,EAChC,OAAO,EAAE,KAAK,CAAC,oBAAoB,EACnC,MAAM,EAAE,kBAAkB,EAC1B,OAAO,EAAE,0BAA0B,GACnC,CACH;oCACA,0BAA0B,IAAI,CAC7B,oBAAC,WAAW,IACV,MAAM,EAAE,OAAO,CAAC,iBAAiB,EACjC,WAAW,EAAE,OAAO,CAAC,WAAW,EAChC,MAAM,EAAE,uBAAuB;wCAC/B,6CAA6C,CAAC,mDAAmD;wCACjG,QAAQ,EAAE,KAAK,CAAC,2BAA2B,IAAI,UAAU,CAAC,OAAO,CAAC,iBAAiB,CAAC,GACpF,CACH,EACA,MAAA,aAAa,CAAC,SAAS,CAAC;uCACrB,KAAK,CACL,CAAC,EACD,KAAK,CAAC,UAAU;wCACd,CAAC,CAAC,qBAAqB,CAAC,iCAAiC;wCACzD,CAAC,CAAC,qBAAqB,CAAC,kCAAkC,EAE7D,GAAG,CAAC,CAAC,YAAY,EAAE,CAAC,EAAE,EAAE;wCACvB,OAAO,CACL,oBAAC,YAAY,IACX,GAAG,EAAE,yBAAyB,CAAC,EAAE,EACjC,MAAM,EAAE,kBAAkB,EAC1B,SAAS,EAAE,OAAO,CAAC,WAAW,KAAK,SAAS,EAC5C,cAAc,EAAE,KAAK,CAAC,UAAU,GAChC,CACH,CAAC;oCACJ,CAAC,CAAC;oCACH,KAAK,CAAC,UAAU,IAAI,CACnB,oBAAC,UAAU,kBACE,mCAAmC,EAC9C,OAAO,EAAE,iBAAiB,EAC1B,OAAO,EAAE,KAAK,CAAC,mBAAmB,EAClC,QAAQ,EAAE,KAAK,CAAC,0BAA0B,EAC1C,cAAc,EAAE,KAAK,CAAC,UAAU,GAChC,CACH;oCACA,CAAC,KAAK,CAAC,UAAU,IAAI,qBAAqB,IAAI,CAC7C,oBAAC,iBAAiB,IAChB,2BAA2B,EAAE,KAAK,CAAC,2BAA2B,EAC9D,MAAM,EAAE,kBAAkB;wCAC1B,4CAA4C;wCAC5C,kBAAkB,EAAE,KAAK,CAAC,kBAAkB,EAC5C,YAAY,EAAE,KAAK,CAAC,YAAY,EAChC,mBAAmB,EAAE,kBAAkB,EACvC,uBAAuB,EAAE,yBAAyB,EAClD,sCAAsC,EAAE,KAAK,CAAC,sCAAsC,EACpF,sBAAsB,EAAE,KAAK,CAAC,sBAAsB,EACpD,oBAAoB,EAAE,KAAK,CAAC,oBAAoB,EAChD,iBAAiB,EAAE,KAAK,CAAC,iBAAiB,EAC1C,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;wCACxC,2DAA2D;wCAC3D,2BAA2B,EAAE,+BAA+B;wCAC5D,2DAA2D;wCAC3D,uBAAuB,EAAE,KAAK,CAAC,mCAAmC,GAClE,CACH;oCACD,oBAAC,OAAO,IACN,WAAW,EAAC,SAAS,EACrB,UAAU,EAAE,KAAK,CAAC,UAAU,EAC5B,MAAM,EAAE,mBAAmB;wCAC3B,mDAAmD;wCACnD,iBAAiB,EACf,CAAC,SAAS,CAAC,KAAK,CAAC,YAAY,CAAC;4CAC9B,CAAC,SAAS,CAAC,MAAA,KAAK,CAAC,YAAY,0CAAE,aAAa,CAAC;4CAC7C,CAAC,KAAK,CAAC,UAAU;4CACjB,0BAA0B;4CAC1B,CAAC,OAAO,IAAI,sFAAsF;4CAClG,CAAA,MAAA,MAAA,KAAK,CAAC,YAAY,0CAAE,aAAa,0CAAE,iBAAiB,MAAK,gBAAgB;4CACzE,+GAA+G;4CAC/G,mEAAmE;4CACnE,SAAS,CAAC,UAAU,KAAK,WAAW,GAEtC,CACS,CACT,CACK,CACP,CACY,CACX;YACZ,CAAC,KAAK,CAAC,UAAU,IAAI,kBAAkB,IAAI,CAC1C,oBAAC,KAAK,CAAC,IAAI;gBACT,6BAAK,GAAG,EAAE,mBAAmB;oBAC3B,oBAAC,KAAK,IAAC,UAAU,QAAC,SAAS,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,2BAA2B,CAAC,CAAC,CAAC,CAAC,SAAS;wBAClG,SAAS,CAAC,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,YAAY,CAAC,IAAI,CACnC,oBAAC,YAAY,IACX,OAAO,EAAE,KAAK,CAAC,mBAAmB,EAClC,SAAS,EACP,KAAK,CAAC,mBAAmB;gCACvB,CAAC,CAAC,mBAAmB,aAAnB,mBAAmB,uBAAnB,mBAAmB,CAAE,qBAAqB;gCAC5C,CAAC,CAAC,mBAAmB,aAAnB,mBAAmB,uBAAnB,mBAAmB,CAAE,oBAAoB,EAE/C,SAAS,EAAE,OAAO,CAAC,WAAW,KAAK,SAAS,EAC5C,OAAO,EAAE,KAAK,CAAC,qBAAqB,gBACzB,qCAAqC,EAChD,QAAQ,EACN,KAAK,CAAC,0BAA0B;gCAChC,KAAK,CAAC,2BAA2B;gCACjC,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC,EAElC,OAAO,EAAE,mBAAmB,EAC5B,MAAM,EAAE,kBAAkB,EAC1B,YAAY,EAAE,KAAK,CAAC,eAAe,GACnC,CACH,EACA,MAAA,aAAa,CAAC,WAAW,CAAC;2BACvB,KAAK,CAAC,CAAC,EAAE,qBAAqB,CAAC,oCAAoC,EACpE,GAAG,CAAC,CAAC,YAAY,EAAE,CAAC,EAAE,EAAE;4BACvB,OAAO,CACL,oBAAC,YAAY,IACX,GAAG,EAAE,2BAA2B,CAAC,EAAE,EACnC,MAAM,EAAE,kBAAkB,EAC1B,SAAS,EAAE,OAAO,CAAC,WAAW,KAAK,SAAS,GAC5C,CACH,CAAC;wBACJ,CAAC,CAAC,CACE,CACJ,CACK,CACd,CACK,CACJ,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,2BAA2B,GAAW;IAC1C,OAAO,EAAE,SAAS;IAClB,SAAS,EAAE,QAAQ;CACpB,CAAC;AAEF,MAAM,uBAAuB,GAAqB;IAChD,IAAI,EAAE,2BAA2B;CAClC,CAAC;AAEF,CAAC;IACC;;;MAGE;AACJ,CAAC;AACD,MAAM,oBAAoB,GAAW;IACnC,QAAQ,EAAE,UAAU;IACpB,IAAI,EAAE,KAAK;IACX,SAAS,EAAE,oBAAoB;CAChC,CAAC;AAEF,MAAM,uBAAuB,GAAW;IACtC,QAAQ,EAAE,UAAU;IACpB,KAAK,EAAE,KAAK;IACZ,SAAS,EAAE,oBAAoB;CAChC,CAAC;AAEF,eAAe;AACf,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,KAAa,EAA0B,EAAE,CAAC,CAAC;IACtF,IAAI,EAAE;QACJ,MAAM,EAAE,aAAa,KAAK,CAAC,OAAO,CAAC,oBAAoB,EAAE;QACzD,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,cAAc;QAC1C,SAAS,EAAE,QAAQ;QACnB,QAAQ,EAAE,OAAO,CAAC,oHAAoH;KACvI;IACD,aAAa,EAAE;QACb,OAAO,EAAE,MAAM;QACf,QAAQ,EAAE,YAAY;KACvB;IACD,aAAa,EAAE;QACb,oEAAoE;QACpE,OAAO,EAAE,QAAQ;QAEjB,8FAA8F;QAC9F,QAAQ,EAAE,MAAM;KACjB;IACD,KAAK,EAAE;QACL,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ;QAErC,mHAAmH;QACnH,UAAU,EAAE,UAAU;QAEtB,mGAAmG;QACnG,UAAU,EAAE,QAAQ;QAEpB,mIAAmI;QACnI,OAAO,EAAE,OAAO;QAChB,YAAY,EAAE,UAAU;QACxB,UAAU,EAAE,QAAQ;QACpB,QAAQ,EAAE,QAAQ;KACnB;IACD,qBAAqB,EAAE;QACrB,MAAM,EAAE,aAAa,KAAK,CAAC,OAAO,CAAC,oBAAoB,EAAE;QACzD,oBAAoB,EAAE,KAAK,CAAC,OAAO,CAAC,cAAc;QAClD,uBAAuB,EAAE,KAAK,CAAC,OAAO,CAAC,cAAc;QACrD,mBAAmB,EAAE,GAAG;QACxB,sBAAsB,EAAE,GAAG;KAC5B;IACD,4BAA4B,EAAE;QAC5B,gFAAgF;QAChF,yEAAyE;QACzE,UAAU,EAAE,MAAM;KACnB;CACF,CAAC,CAAC;AAEH,MAAM,iCAAiC,GAAG,CAAC,KAAa,EAA0B,EAAE;IAClF,MAAM,cAAc,GAAG;QACrB,MAAM,EAAE,MAAM;QACd,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,YAAY;QACtC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK;QAC1B,SAAS,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE;QACxC,gCAAgC,EAAE;YAChC,MAAM,EAAE,WAAW;YACnB,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK;SACjC;KACF,CAAC;IACF,MAAM,SAAS,GAA2B;QACxC,WAAW,EAAE,cAAc;QAC3B,kBAAkB,EAAE,cAAc;KACnC,CAAC;IACF,OAAO,eAAe,CAAC,4BAA4B,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC,CAAC;AACzE,CAAC,CAAC;AAEF,MAAM,6BAA6B,GAAG,CAAC,KAAa,EAA0B,EAAE;IAC9E,MAAM,SAAS,GAA2B;QACxC,IAAI,EAAE;YACJ,8CAA8C;YAC9C,MAAM,EAAE,MAAM;SACf;QACD,WAAW,EAAE;YACX,gCAAgC,EAAE;gBAChC,UAAU,EAAE,WAAW;gBACvB,KAAK,EAAE,eAAe;gBACtB,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK;gBAChC,YAAY,EAAE,OAAO;gBACrB,OAAO,EAAE,aAAa,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE;aAC5C;SACF;QACD,IAAI,EAAE;YACJ,gCAAgC,EAAE;gBAChC,UAAU,EAAE;oBACV,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK;iBAC3B;aACF;SACF;KACF,CAAC;IACF,OAAO,eAAe,CAAC,4BAA4B,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC,CAAC;AACzE,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,MAAe,EAAW,EAAE,CAAC,MAAM,KAAK,KAAK,CAAC;AAEjE,MAAM,oBAAoB,GAAG,CAAC,OAA8D,EAAW,EAAE;IACvG,IAAI,OAAO,CAAC,UAAU,KAAK,KAAK,IAAI,OAAO,CAAC,gBAAgB,KAAK,KAAK,EAAE,CAAC;QACvE,OAAO,IAAI,CAAC;IACd,CAAC;SAAM,CAAC;QACN,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport React, { useMemo, useRef, useEffect, useState, useCallback } from 'react';\nimport { CallAdapterProvider } from '../../CallComposite/adapter/CallAdapterProvider';\nimport { CallAdapter } from '../../CallComposite';\nimport { PeopleButton } from './PeopleButton';\nimport {\n concatStyleSets,\n IButton,\n IStyle,\n ITheme,\n mergeStyles,\n mergeStyleSets,\n Stack,\n useTheme\n} from '@fluentui/react';\nimport { controlBarContainerStyles } from '../../CallComposite/styles/CallControls.styles';\nimport { callControlsContainerStyles } from '../../CallComposite/styles/CallPage.styles';\nimport { useCallWithChatCompositeStrings } from '../../CallWithChatComposite/hooks/useCallWithChatCompositeStrings';\nimport { BaseCustomStyles, ControlBarButtonStyles } from '@internal/react-components';\nimport { VideoGalleryLayout } from '@internal/react-components';\nimport { ControlBar } from '@internal/react-components';\nimport { Microphone } from '../../CallComposite/components/buttons/Microphone';\nimport { Camera } from '../../CallComposite/components/buttons/Camera';\nimport { ScreenShare } from '../../CallComposite/components/buttons/ScreenShare';\nimport { EndCall } from '../../CallComposite/components/buttons/EndCall';\nimport { MoreButton } from '../MoreButton';\nimport { ContainerRectProps } from '../ContainerRectProps';\nimport {\n CUSTOM_BUTTON_OPTIONS,\n generateCustomCallControlBarButton,\n onFetchCustomButtonPropsTrampoline\n} from './CustomButton';\nimport { DesktopMoreButton } from './DesktopMoreButton';\nimport { isDisabled } from '../../CallComposite/utils';\nimport { HiddenFocusStartPoint } from '../HiddenFocusStartPoint';\nimport { CallWithChatControlOptions } from '../../CallWithChatComposite';\nimport { CommonCallControlOptions } from '../types/CommonCallControlOptions';\nimport { CaptionsSettingsModal } from '../CaptionsSettingsModal';\nimport { RaiseHand } from '../../CallComposite/components/buttons/RaiseHand';\nimport { Reaction } from '../../CallComposite/components/buttons/Reaction';\nimport { useSelector } from '../../CallComposite/hooks/useSelector';\nimport { capabilitySelector } from '../../CallComposite/selectors/capabilitySelector';\nimport { DtmfDialpadButton } from './DtmfDialerButton';\nimport { ExitSpotlightButton } from '../ExitSpotlightButton';\nimport { useLocale } from '../../localization';\n/* @conditional-compile-remove(end-call-options) */\nimport { isBoolean } from '../utils';\n/* @conditional-compile-remove(end-call-options) */\nimport { getIsTeamsCall } from '../../CallComposite/selectors/baseSelectors';\nimport { callStatusSelector } from '../../CallComposite/selectors/callStatusSelector';\n/* @conditional-compile-remove(teams-meeting-conference) */\nimport { MeetingConferencePhoneInfoModal } from '@internal/react-components';\n\n/**\n * @private\n */\nexport interface CommonCallControlBarProps {\n callAdapter: CallAdapter;\n peopleButtonChecked: boolean;\n onPeopleButtonClicked: () => void;\n onMoreButtonClicked?: () => void;\n mobileView: boolean;\n disableButtonsForLobbyPage: boolean;\n callControls?: boolean | CommonCallControlOptions | CallWithChatControlOptions;\n disableButtonsForHoldScreen?: boolean;\n /* @conditional-compile-remove(PSTN-calls) */\n onClickShowDialpad?: () => void;\n onClickVideoEffects?: (showVideoEffects: boolean) => void;\n isCaptionsSupported?: boolean;\n isCaptionsOn?: boolean;\n displayVertical?: boolean;\n onUserSetOverflowGalleryPositionChange?: (position: 'Responsive' | 'horizontalTop') => void;\n onUserSetGalleryLayout?: (layout: VideoGalleryLayout) => void;\n userSetGalleryLayout?: VideoGalleryLayout;\n peopleButtonRef?: React.RefObject<IButton>;\n cameraButtonRef?: React.RefObject<IButton>;\n videoBackgroundPickerRef?: React.RefObject<IButton>;\n onSetDialpadPage?: () => void;\n dtmfDialerPresent?: boolean;\n onStopLocalSpotlight?: () => void;\n useTeamsCaptions?: boolean;\n /* @conditional-compile-remove(teams-meeting-conference) */\n onToggleTeamsMeetingConferenceModal?: () => void;\n /* @conditional-compile-remove(teams-meeting-conference) */\n teamsMeetingConferenceModalPresent?: boolean;\n}\n\nconst inferCommonCallControlOptions = (\n mobileView: boolean,\n commonCallControlOptions?: boolean | CallWithChatControlOptions\n): CallWithChatControlOptions | false => {\n if (commonCallControlOptions === false) {\n return false;\n }\n\n const options =\n commonCallControlOptions === true || commonCallControlOptions === undefined ? {} : commonCallControlOptions;\n if (mobileView) {\n // Set to compressed mode when composite is optimized for mobile\n options.displayType = 'compact';\n // Set options to always not show screen share button for mobile\n options.screenShareButton = false;\n }\n return options;\n};\n\n/**\n * @private\n */\nexport const CommonCallControlBar = (props: CommonCallControlBarProps & ContainerRectProps): JSX.Element => {\n const theme = useTheme();\n const rtl = theme.rtl;\n\n const controlBarContainerRef = useRef<HTMLHeadingElement>(null);\n const sidepaneControlsRef = useRef<HTMLHeadingElement>(null);\n const controlBarSizeRef = useRef<HTMLHeadingElement>(null);\n\n const [controlBarButtonsWidth, setControlBarButtonsWidth] = useState(0);\n const [panelsButtonsWidth, setPanelsButtonsWidth] = useState(0);\n const [controlBarContainerWidth, setControlBarContainerWidth] = useState(0);\n\n const [totalButtonsWidth, setTotalButtonsWidth] = useState(0);\n const [isOutOfSpace, setIsOutOfSpace] = useState(false);\n\n const callWithChatStrings = useCallWithChatCompositeStrings();\n const options = inferCommonCallControlOptions(props.mobileView, props.callControls);\n\n const [showCaptionsSettingsModal, setShowCaptionsSettingsModal] = useState(false);\n\n /* @conditional-compile-remove(end-call-options) */\n // If the hangup capability is not present, we default to true\n const isHangUpForEveryoneAllowed =\n useSelector((state) => state.call?.capabilitiesFeature?.capabilities.hangUpForEveryOne.isPresent) ?? true;\n /* @conditional-compile-remove(end-call-options) */\n const isTeams = useSelector(getIsTeamsCall);\n\n const handleResize = useCallback((): void => {\n setControlBarButtonsWidth(controlBarContainerRef.current ? controlBarContainerRef.current.offsetWidth : 0);\n setPanelsButtonsWidth(sidepaneControlsRef.current ? sidepaneControlsRef.current.offsetWidth : 0);\n setControlBarContainerWidth(controlBarSizeRef.current ? controlBarSizeRef.current.offsetWidth : 0);\n }, []);\n\n // on load set inital width\n useEffect(() => {\n setControlBarButtonsWidth(controlBarContainerRef.current ? controlBarContainerRef.current.offsetWidth : 0);\n setPanelsButtonsWidth(sidepaneControlsRef.current ? sidepaneControlsRef.current.offsetWidth : 0);\n setControlBarContainerWidth(controlBarSizeRef.current ? controlBarSizeRef.current.offsetWidth : 0);\n }, []);\n\n // get the current width of control bar buttons and panel control buttons when browser size change\n useEffect(() => {\n window.addEventListener('resize', handleResize);\n return () => window.removeEventListener('resize', handleResize);\n }, [handleResize]);\n\n /* when size change, reset total buttons width and compare with the control bar container width\n if the total width of those buttons exceed container width, do not center the control bar buttons based on parent container width\n Instead let them take up the remaining white space on the left */\n useEffect(() => {\n // white space on the left when control bar buttons are centered based on container width + control bar buttons width + panel control buttons width\n setTotalButtonsWidth(\n (controlBarContainerWidth - controlBarButtonsWidth) / 2 + controlBarButtonsWidth + panelsButtonsWidth\n );\n }, [controlBarButtonsWidth, panelsButtonsWidth, controlBarContainerWidth]);\n\n useEffect(() => {\n setIsOutOfSpace(totalButtonsWidth > controlBarContainerWidth);\n }, [totalButtonsWidth, controlBarContainerWidth]);\n\n const openCaptionsSettingsModal = useCallback((): void => {\n setShowCaptionsSettingsModal(true);\n }, []);\n\n const onDismissCaptionsSettings = useCallback((): void => {\n setShowCaptionsSettingsModal(false);\n }, []);\n\n const peopleButtonStrings = useMemo(\n () => ({\n label: callWithChatStrings.peopleButtonLabel,\n selectedLabel: callWithChatStrings.selectedPeopleButtonLabel,\n tooltipOpenAriaLabel: callWithChatStrings.peopleButtonTooltipOpenAriaLabel,\n tooltipCloseAriaLabel: callWithChatStrings.peopleButtonTooltipCloseAriaLabel,\n tooltipOffContent: callWithChatStrings.peopleButtonTooltipOpen,\n tooltipOnContent: callWithChatStrings.peopleButtonTooltipClose\n }),\n [callWithChatStrings]\n );\n const moreButtonStrings = useMemo(\n () => ({\n label: callWithChatStrings.moreDrawerButtonLabel,\n tooltipContent: callWithChatStrings.moreDrawerButtonTooltip\n }),\n [callWithChatStrings]\n );\n const callStrings = useLocale().strings.call;\n const exitSpotlightButtonStrings = useMemo(\n () => ({\n label: callStrings.exitSpotlightButtonLabel,\n tooltipContent: callStrings.exitSpotlightButtonTooltip\n }),\n [callStrings]\n );\n\n const centerContainerStyles = useMemo(() => {\n const styles: BaseCustomStyles = !props.mobileView ? desktopControlBarStyles : {};\n return mergeStyleSets(styles, {\n root: {\n // Enforce a background color on control bar to ensure it matches the composite background color.\n background: theme.semanticColors.bodyBackground\n }\n });\n }, [props.mobileView, theme.semanticColors.bodyBackground]);\n const screenShareButtonStyles = useMemo(\n () => (!props.mobileView ? getDesktopScreenShareButtonStyles(theme) : undefined),\n [props.mobileView, theme]\n );\n const commonButtonStyles = useMemo(\n () => (!props.mobileView ? getDesktopCommonButtonStyles(theme) : undefined),\n [props.mobileView, theme]\n );\n const endCallButtonStyles = useMemo(\n () => (!props.mobileView ? getDesktopEndCallButtonStyles(theme) : undefined),\n [props.mobileView, theme]\n );\n\n const controlBarWrapperDesktopStyles: IStyle = useMemo(\n // only center control bar buttons based on parent container if there are enough space on the screen and not mobile\n () => (!props.mobileView && !isOutOfSpace ? (rtl ? wrapperDesktopRtlStyles : wrapperDesktopStyles) : {}),\n [props.mobileView, rtl, isOutOfSpace]\n );\n\n // only center control bar buttons based on parent container if there are enough space on the screen and not mobile\n const controlBarDesktopContainerStyles: IStyle = useMemo(\n () => (!props.mobileView && !isOutOfSpace ? { position: 'relative', minHeight: '4.5rem', width: '100%' } : {}),\n [props.mobileView, isOutOfSpace]\n );\n\n const customButtons = useMemo(\n () =>\n generateCustomCallControlBarButton(\n onFetchCustomButtonPropsTrampoline(options !== false ? options : undefined),\n options !== false ? options?.displayType : undefined\n ),\n [options]\n );\n\n const capabilitiesSelector = useSelector(capabilitySelector);\n const callState = useSelector(callStatusSelector);\n const isReactionAllowed =\n callState.callStatus !== 'Connected' ||\n !capabilitiesSelector?.capabilities ||\n capabilitiesSelector.capabilities.useReactions.isPresent;\n\n // when options is false then we want to hide the whole control bar.\n if (options === false) {\n return <></>;\n }\n\n const sideButtonsPresent =\n isEnabled(options.peopleButton) || isEnabled(options.chatButton) || customButtons['secondary'] !== undefined;\n\n const screenShareButtonIsEnabled = isEnabled(options?.screenShareButton);\n\n const microphoneButtonIsEnabled = isEnabled(options?.microphoneButton);\n\n const cameraButtonIsEnabled = isEnabled(options?.cameraButton);\n\n const showExitSpotlightButton = options?.exitSpotlightButton !== false;\n\n const showCaptionsButton =\n props.isCaptionsSupported &&\n /* @conditional-compile-remove(acs-close-captions) */ isEnabled(options.captionsButton);\n\n /* @conditional-compile-remove(teams-meeting-conference) */\n const showTeamsMeetingPhoneCallButton = isEnabled(options?.teamsMeetingPhoneCallButton);\n\n const showDesktopMoreButton =\n isEnabled(options?.moreButton) &&\n (false ||\n /*@conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */ isEnabled(\n options?.holdButton\n ) ||\n showCaptionsButton ||\n props.onUserSetGalleryLayout);\n\n const role = props.callAdapter.getState().call?.role;\n const hideRaiseHandButtonInRoomsCall =\n props.callAdapter.getState().isRoomsCall && role && ['Consumer', 'Unknown'].includes(role);\n const reactionResources = props.callAdapter.getState().reactions;\n\n return (\n <div ref={controlBarSizeRef}>\n <CallAdapterProvider adapter={props.callAdapter}>\n {showCaptionsSettingsModal && (\n <CaptionsSettingsModal\n showCaptionsSettingsModal={showCaptionsSettingsModal}\n onDismissCaptionsSettings={onDismissCaptionsSettings}\n changeCaptionLanguage={props.isCaptionsOn && props.useTeamsCaptions}\n />\n )}\n {\n /* @conditional-compile-remove(teams-meeting-conference) */ props.teamsMeetingConferenceModalPresent && (\n <MeetingConferencePhoneInfoModal\n conferencePhoneInfoList={props.callAdapter.getState().call?.teamsMeetingConference ?? []}\n showModal={props.teamsMeetingConferenceModalPresent}\n onDismissMeetingPhoneInfoSettings={props.onToggleTeamsMeetingConferenceModal}\n />\n )\n }\n </CallAdapterProvider>\n <Stack\n horizontal\n reversed={!props.mobileView && !isOutOfSpace}\n horizontalAlign=\"space-between\"\n className={mergeStyles(\n callControlsContainerStyles,\n controlBarContainerStyles,\n controlBarDesktopContainerStyles\n )}\n >\n <Stack.Item grow className={mergeStyles(controlBarWrapperDesktopStyles)}>\n <CallAdapterProvider adapter={props.callAdapter}>\n <Stack horizontalAlign=\"center\">\n {/*\n HiddenFocusStartPoint is a util component used when we can't ensure the initial element for first\n tab focus is at the top of dom tree. It moves the first-tab focus to the next interact-able element\n immediately after it in the dom tree.\n */}\n <HiddenFocusStartPoint />\n <Stack.Item>\n {/*\n Note: We use the layout=\"horizontal\" instead of dockedBottom because of how we position the\n control bar. The control bar exists in a Stack below the MediaGallery. The MediaGallery is\n set to grow and fill the remaining space not taken up by the ControlBar. If we were to use\n dockedBottom it has position absolute and would therefore float on top of the media gallery,\n occluding some of its content.\n */}\n <div ref={controlBarContainerRef}>\n <ControlBar layout={props.displayVertical ? 'vertical' : 'horizontal'} styles={centerContainerStyles}>\n {microphoneButtonIsEnabled && (\n <Microphone\n displayType={options.displayType}\n styles={commonButtonStyles}\n splitButtonsForDeviceSelection={!props.mobileView}\n /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */\n disabled={props.disableButtonsForHoldScreen || isDisabled(options.microphoneButton)}\n disableTooltip={props.mobileView}\n />\n )}\n {cameraButtonIsEnabled && (\n <Camera\n displayType={options.displayType}\n styles={commonButtonStyles}\n splitButtonsForDeviceSelection={!props.mobileView}\n /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */\n disabled={props.disableButtonsForHoldScreen || isDisabled(options.cameraButton)}\n onClickVideoEffects={props.onClickVideoEffects}\n componentRef={props.cameraButtonRef}\n disableTooltip={props.mobileView}\n />\n )}\n {!props.mobileView &&\n isReactionAllowed &&\n isEnabled(options.reactionButton) &&\n reactionResources && (\n <Reaction\n displayType={options.displayType}\n styles={commonButtonStyles}\n disabled={props.disableButtonsForHoldScreen}\n reactionResource={reactionResources}\n />\n )}\n {!props.mobileView && isEnabled(options.raiseHandButton) && !hideRaiseHandButtonInRoomsCall && (\n <RaiseHand\n displayType={options.displayType}\n styles={commonButtonStyles}\n /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */\n disabled={props.disableButtonsForHoldScreen || isDisabled(options.microphoneButton)}\n />\n )}\n {showDtmfDialerButton(options) && props.onSetDialpadPage !== undefined && (\n <DtmfDialpadButton\n styles={commonButtonStyles}\n displayType={options.displayType}\n onClick={() => {\n if (props.onSetDialpadPage !== undefined) {\n props.onSetDialpadPage();\n }\n }}\n />\n )}\n {showExitSpotlightButton && props.onStopLocalSpotlight && (\n <ExitSpotlightButton\n displayType={options.displayType}\n onClick={props.onStopLocalSpotlight}\n styles={commonButtonStyles}\n strings={exitSpotlightButtonStrings}\n />\n )}\n {screenShareButtonIsEnabled && (\n <ScreenShare\n option={options.screenShareButton}\n displayType={options.displayType}\n styles={screenShareButtonStyles}\n /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */\n disabled={props.disableButtonsForHoldScreen || isDisabled(options.screenShareButton)}\n />\n )}\n {customButtons['primary']\n ?.slice(\n 0,\n props.mobileView\n ? CUSTOM_BUTTON_OPTIONS.MAX_PRIMARY_MOBILE_CUSTOM_BUTTONS\n : CUSTOM_BUTTON_OPTIONS.MAX_PRIMARY_DESKTOP_CUSTOM_BUTTONS\n )\n .map((CustomButton, i) => {\n return (\n <CustomButton\n key={`primary-custom-button-${i}`}\n styles={commonButtonStyles}\n showLabel={options.displayType !== 'compact'}\n disableTooltip={props.mobileView}\n />\n );\n })}\n {props.mobileView && (\n <MoreButton\n data-ui-id=\"common-call-composite-more-button\"\n strings={moreButtonStrings}\n onClick={props.onMoreButtonClicked}\n disabled={props.disableButtonsForLobbyPage}\n disableTooltip={props.mobileView}\n />\n )}\n {!props.mobileView && showDesktopMoreButton && (\n <DesktopMoreButton\n disableButtonsForHoldScreen={props.disableButtonsForHoldScreen}\n styles={commonButtonStyles}\n /*@conditional-compile-remove(PSTN-calls) */\n onClickShowDialpad={props.onClickShowDialpad}\n callControls={props.callControls}\n isCaptionsSupported={showCaptionsButton}\n onCaptionsSettingsClick={openCaptionsSettingsModal}\n onUserSetOverflowGalleryPositionChange={props.onUserSetOverflowGalleryPositionChange}\n onUserSetGalleryLayout={props.onUserSetGalleryLayout}\n userSetGalleryLayout={props.userSetGalleryLayout}\n dtmfDialerPresent={props.dtmfDialerPresent}\n onSetDialpadPage={props.onSetDialpadPage}\n /* @conditional-compile-remove(teams-meeting-conference) */\n teamsMeetingPhoneCallEnable={showTeamsMeetingPhoneCallButton}\n /* @conditional-compile-remove(teams-meeting-conference) */\n onMeetingPhoneInfoClick={props.onToggleTeamsMeetingConferenceModal}\n />\n )}\n <EndCall\n displayType=\"compact\"\n mobileView={props.mobileView}\n styles={endCallButtonStyles}\n /* @conditional-compile-remove(end-call-options) */\n enableEndCallMenu={\n !isBoolean(props.callControls) &&\n !isBoolean(props.callControls?.endCallButton) &&\n !props.mobileView &&\n isHangUpForEveryoneAllowed &&\n !isTeams && // Temporary disable it for Teams call, since capability does not give the right value\n props.callControls?.endCallButton?.hangUpForEveryone === 'endCallOptions' &&\n // Only show the end call menu when the call is connected, user should not be able to end the call for everyone\n // when they are not actively in the call to communicate they will.\n callState.callStatus === 'Connected'\n }\n />\n </ControlBar>\n </div>\n </Stack.Item>\n </Stack>\n </CallAdapterProvider>\n </Stack.Item>\n {!props.mobileView && sideButtonsPresent && (\n <Stack.Item>\n <div ref={sidepaneControlsRef}>\n <Stack horizontal className={!props.mobileView ? mergeStyles(desktopButtonContainerStyle) : undefined}>\n {isEnabled(options?.peopleButton) && (\n <PeopleButton\n checked={props.peopleButtonChecked}\n ariaLabel={\n props.peopleButtonChecked\n ? peopleButtonStrings?.tooltipCloseAriaLabel\n : peopleButtonStrings?.tooltipOpenAriaLabel\n }\n showLabel={options.displayType !== 'compact'}\n onClick={props.onPeopleButtonClicked}\n data-ui-id=\"common-call-composite-people-button\"\n disabled={\n props.disableButtonsForLobbyPage ||\n props.disableButtonsForHoldScreen ||\n isDisabled(options.peopleButton)\n }\n strings={peopleButtonStrings}\n styles={commonButtonStyles}\n componentRef={props.peopleButtonRef}\n />\n )}\n {customButtons['secondary']\n ?.slice(0, CUSTOM_BUTTON_OPTIONS.MAX_SECONDARY_DESKTOP_CUSTOM_BUTTONS)\n .map((CustomButton, i) => {\n return (\n <CustomButton\n key={`secondary-custom-button-${i}`}\n styles={commonButtonStyles}\n showLabel={options.displayType !== 'compact'}\n />\n );\n })}\n </Stack>\n </div>\n </Stack.Item>\n )}\n </Stack>\n </div>\n );\n};\n\nconst desktopButtonContainerStyle: IStyle = {\n padding: '0.75rem',\n columnGap: '0.5rem'\n};\n\nconst desktopControlBarStyles: BaseCustomStyles = {\n root: desktopButtonContainerStyle\n};\n\n{\n /*\n Styling here to ensure the control bar buttons stay in the center of the parent component (control Container) regardless of its siblings\n Need to add 'reversed' to parent container because the styling here reverse the position of the two stack items \n */\n}\nconst wrapperDesktopStyles: IStyle = {\n position: 'absolute',\n left: '50%',\n transform: 'translate(-50%, 0)'\n};\n\nconst wrapperDesktopRtlStyles: IStyle = {\n position: 'absolute',\n right: '50%',\n transform: 'translate(-50%, 0)'\n};\n\n/** @private */\nexport const getDesktopCommonButtonStyles = (theme: ITheme): ControlBarButtonStyles => ({\n root: {\n border: `solid 1px ${theme.palette.neutralQuaternaryAlt}`,\n borderRadius: theme.effects.roundedCorner4,\n minHeight: '2.5rem',\n maxWidth: '12rem' // allot extra space than the regular ControlBarButton. This is to give extra room to have the icon beside the text.\n },\n flexContainer: {\n display: 'flex',\n flexFlow: 'row nowrap'\n },\n textContainer: {\n // Override the default so that label doesn't introduce a new block.\n display: 'inline',\n\n // Ensure width is set to permit child to show ellipsis when there is a label that is too long\n maxWidth: '100%'\n },\n label: {\n fontSize: theme.fonts.medium.fontSize,\n\n // Ensure there is enough space between the icon and text to allow for the unread messages badge in the chat button\n marginLeft: '0.625rem',\n\n // Ensure letters that go above and below the standard text line like 'g', 'y', 'j' are not clipped\n lineHeight: '1.5rem',\n\n // Do not allow very long button texts to ruin the control bar experience, instead ensure long text is truncated and shows ellipsis\n display: 'block',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n overflow: 'hidden'\n },\n splitButtonMenuButton: {\n border: `solid 1px ${theme.palette.neutralQuaternaryAlt}`,\n borderTopRightRadius: theme.effects.roundedCorner4,\n borderBottomRightRadius: theme.effects.roundedCorner4,\n borderTopLeftRadius: '0',\n borderBottomLeftRadius: '0'\n },\n splitButtonMenuButtonChecked: {\n // Default colors the menu half similarly for :hover and when button is checked.\n // To align with how the left-half is styled, override the checked style.\n background: 'none'\n }\n});\n\nconst getDesktopScreenShareButtonStyles = (theme: ITheme): ControlBarButtonStyles => {\n const overrideStyles = {\n border: 'none',\n background: theme.palette.themePrimary,\n color: theme.palette.white,\n '* > svg': { fill: theme.palette.white },\n '@media (forced-colors: active)': {\n border: '1px solid',\n borderColor: theme.palette.black\n }\n };\n const overrides: ControlBarButtonStyles = {\n rootChecked: overrideStyles,\n rootCheckedHovered: overrideStyles\n };\n return concatStyleSets(getDesktopCommonButtonStyles(theme), overrides);\n};\n\nconst getDesktopEndCallButtonStyles = (theme: ITheme): ControlBarButtonStyles => {\n const overrides: ControlBarButtonStyles = {\n root: {\n // Suppress border around the dark-red button.\n border: 'none'\n },\n rootFocused: {\n '@media (forced-colors: active)': {\n background: 'highlight',\n color: 'highlightText',\n borderColor: theme.palette.black,\n borderRadius: 'unset',\n outline: `3px solid ${theme.palette.black}`\n }\n },\n icon: {\n '@media (forced-colors: active)': {\n ':focused': {\n color: theme.palette.white\n }\n }\n }\n };\n return concatStyleSets(getDesktopCommonButtonStyles(theme), overrides);\n};\n\nconst isEnabled = (option: unknown): boolean => option !== false;\n\nconst showDtmfDialerButton = (options: CommonCallControlOptions | CallWithChatControlOptions): boolean => {\n if (options.moreButton === false && options.dtmfDialerButton !== false) {\n return true;\n } else {\n return false;\n }\n};\n"]}
1
+ {"version":3,"file":"CommonCallControlBar.js","sourceRoot":"","sources":["../../../../../../../../react-composites/src/composites/common/ControlBar/CommonCallControlBar.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport React, { useMemo, useRef, useEffect, useState, useCallback } from 'react';\nimport { CallAdapterProvider } from '../../CallComposite/adapter/CallAdapterProvider';\nimport { CallAdapter } from '../../CallComposite';\nimport { PeopleButton } from './PeopleButton';\nimport {\n concatStyleSets,\n IButton,\n IStyle,\n ITheme,\n mergeStyles,\n mergeStyleSets,\n Stack,\n useTheme\n} from '@fluentui/react';\nimport { controlBarContainerStyles } from '../../CallComposite/styles/CallControls.styles';\nimport { callControlsContainerStyles } from '../../CallComposite/styles/CallPage.styles';\nimport { useCallWithChatCompositeStrings } from '../../CallWithChatComposite/hooks/useCallWithChatCompositeStrings';\nimport { BaseCustomStyles, ControlBarButtonStyles } from '@internal/react-components';\nimport { VideoGalleryLayout } from '@internal/react-components';\nimport { ControlBar } from '@internal/react-components';\nimport { Microphone } from '../../CallComposite/components/buttons/Microphone';\nimport { Camera } from '../../CallComposite/components/buttons/Camera';\nimport { ScreenShare } from '../../CallComposite/components/buttons/ScreenShare';\nimport { EndCall } from '../../CallComposite/components/buttons/EndCall';\nimport { MoreButton } from '../MoreButton';\nimport { ContainerRectProps } from '../ContainerRectProps';\nimport {\n CUSTOM_BUTTON_OPTIONS,\n generateCustomCallControlBarButton,\n onFetchCustomButtonPropsTrampoline\n} from './CustomButton';\nimport { DesktopMoreButton } from './DesktopMoreButton';\nimport { isDisabled } from '../../CallComposite/utils';\nimport { HiddenFocusStartPoint } from '../HiddenFocusStartPoint';\nimport { CallWithChatControlOptions } from '../../CallWithChatComposite';\nimport { CommonCallControlOptions } from '../types/CommonCallControlOptions';\nimport { CaptionsSettingsModal } from '../CaptionsSettingsModal';\nimport { RaiseHand } from '../../CallComposite/components/buttons/RaiseHand';\nimport { Reaction } from '../../CallComposite/components/buttons/Reaction';\nimport { useSelector } from '../../CallComposite/hooks/useSelector';\nimport { capabilitySelector } from '../../CallComposite/selectors/capabilitySelector';\nimport { DtmfDialpadButton } from './DtmfDialerButton';\nimport { ExitSpotlightButton } from '../ExitSpotlightButton';\nimport { useLocale } from '../../localization';\n/* @conditional-compile-remove(end-call-options) */\nimport { isBoolean } from '../utils';\n/* @conditional-compile-remove(end-call-options) */\nimport { getIsTeamsCall } from '../../CallComposite/selectors/baseSelectors';\nimport { callStatusSelector } from '../../CallComposite/selectors/callStatusSelector';\n/* @conditional-compile-remove(teams-meeting-conference) */\nimport { MeetingConferencePhoneInfoModal } from '@internal/react-components';\n\n/**\n * @private\n */\nexport interface CommonCallControlBarProps {\n callAdapter: CallAdapter;\n peopleButtonChecked: boolean;\n onPeopleButtonClicked: () => void;\n onMoreButtonClicked?: () => void;\n mobileView: boolean;\n disableButtonsForLobbyPage: boolean;\n callControls?: boolean | CommonCallControlOptions | CallWithChatControlOptions;\n disableButtonsForHoldScreen?: boolean;\n /* @conditional-compile-remove(PSTN-calls) */\n onClickShowDialpad?: () => void;\n onClickVideoEffects?: (showVideoEffects: boolean) => void;\n isCaptionsSupported?: boolean;\n isCaptionsOn?: boolean;\n displayVertical?: boolean;\n onUserSetOverflowGalleryPositionChange?: (position: 'Responsive' | 'horizontalTop') => void;\n onUserSetGalleryLayout?: (layout: VideoGalleryLayout) => void;\n userSetGalleryLayout?: VideoGalleryLayout;\n peopleButtonRef?: React.RefObject<IButton>;\n cameraButtonRef?: React.RefObject<IButton>;\n videoBackgroundPickerRef?: React.RefObject<IButton>;\n onSetDialpadPage?: () => void;\n dtmfDialerPresent?: boolean;\n onStopLocalSpotlight?: () => void;\n useTeamsCaptions?: boolean;\n /* @conditional-compile-remove(teams-meeting-conference) */\n onToggleTeamsMeetingConferenceModal?: () => void;\n /* @conditional-compile-remove(teams-meeting-conference) */\n teamsMeetingConferenceModalPresent?: boolean;\n}\n\nconst inferCommonCallControlOptions = (\n mobileView: boolean,\n commonCallControlOptions?: boolean | CallWithChatControlOptions\n): CallWithChatControlOptions | false => {\n if (commonCallControlOptions === false) {\n return false;\n }\n\n const options =\n commonCallControlOptions === true || commonCallControlOptions === undefined ? {} : commonCallControlOptions;\n if (mobileView) {\n // Set to compressed mode when composite is optimized for mobile\n options.displayType = 'compact';\n // Set options to always not show screen share button for mobile\n options.screenShareButton = false;\n }\n return options;\n};\n\n/**\n * @private\n */\nexport const CommonCallControlBar = (props: CommonCallControlBarProps & ContainerRectProps): JSX.Element => {\n const theme = useTheme();\n const rtl = theme.rtl;\n\n const controlBarContainerRef = useRef<HTMLHeadingElement>(null);\n const sidepaneControlsRef = useRef<HTMLHeadingElement>(null);\n const controlBarSizeRef = useRef<HTMLHeadingElement>(null);\n\n const [controlBarButtonsWidth, setControlBarButtonsWidth] = useState(0);\n const [panelsButtonsWidth, setPanelsButtonsWidth] = useState(0);\n const [controlBarContainerWidth, setControlBarContainerWidth] = useState(0);\n\n const [totalButtonsWidth, setTotalButtonsWidth] = useState(0);\n const [isOutOfSpace, setIsOutOfSpace] = useState(false);\n\n const callWithChatStrings = useCallWithChatCompositeStrings();\n const options = inferCommonCallControlOptions(props.mobileView, props.callControls);\n\n const [showCaptionsSettingsModal, setShowCaptionsSettingsModal] = useState(false);\n\n /* @conditional-compile-remove(end-call-options) */\n // If the hangup capability is not present, we default to true\n const isHangUpForEveryoneAllowed =\n useSelector((state) => state.call?.capabilitiesFeature?.capabilities.hangUpForEveryOne.isPresent) ?? true;\n /* @conditional-compile-remove(end-call-options) */\n const isTeams = useSelector(getIsTeamsCall);\n\n const handleResize = useCallback((): void => {\n setControlBarButtonsWidth(controlBarContainerRef.current ? controlBarContainerRef.current.offsetWidth : 0);\n setPanelsButtonsWidth(sidepaneControlsRef.current ? sidepaneControlsRef.current.offsetWidth : 0);\n setControlBarContainerWidth(controlBarSizeRef.current ? controlBarSizeRef.current.offsetWidth : 0);\n }, []);\n\n // on load set inital width\n useEffect(() => {\n setControlBarButtonsWidth(controlBarContainerRef.current ? controlBarContainerRef.current.offsetWidth : 0);\n setPanelsButtonsWidth(sidepaneControlsRef.current ? sidepaneControlsRef.current.offsetWidth : 0);\n setControlBarContainerWidth(controlBarSizeRef.current ? controlBarSizeRef.current.offsetWidth : 0);\n }, []);\n\n // get the current width of control bar buttons and panel control buttons when browser size change\n useEffect(() => {\n window.addEventListener('resize', handleResize);\n return () => window.removeEventListener('resize', handleResize);\n }, [handleResize]);\n\n /* when size change, reset total buttons width and compare with the control bar container width\n if the total width of those buttons exceed container width, do not center the control bar buttons based on parent container width\n Instead let them take up the remaining white space on the left */\n useEffect(() => {\n // white space on the left when control bar buttons are centered based on container width + control bar buttons width + panel control buttons width\n setTotalButtonsWidth(\n (controlBarContainerWidth - controlBarButtonsWidth) / 2 + controlBarButtonsWidth + panelsButtonsWidth\n );\n }, [controlBarButtonsWidth, panelsButtonsWidth, controlBarContainerWidth]);\n\n useEffect(() => {\n setIsOutOfSpace(totalButtonsWidth > controlBarContainerWidth);\n }, [totalButtonsWidth, controlBarContainerWidth]);\n\n const openCaptionsSettingsModal = useCallback((): void => {\n setShowCaptionsSettingsModal(true);\n }, []);\n\n const onDismissCaptionsSettings = useCallback((): void => {\n setShowCaptionsSettingsModal(false);\n }, []);\n\n const peopleButtonStrings = useMemo(\n () => ({\n label: callWithChatStrings.peopleButtonLabel,\n selectedLabel: callWithChatStrings.selectedPeopleButtonLabel,\n tooltipOpenAriaLabel: callWithChatStrings.peopleButtonTooltipOpenAriaLabel,\n tooltipCloseAriaLabel: callWithChatStrings.peopleButtonTooltipCloseAriaLabel,\n tooltipOffContent: callWithChatStrings.peopleButtonTooltipOpen,\n tooltipOnContent: callWithChatStrings.peopleButtonTooltipClose\n }),\n [callWithChatStrings]\n );\n const moreButtonStrings = useMemo(\n () => ({\n label: callWithChatStrings.moreDrawerButtonLabel,\n tooltipContent: callWithChatStrings.moreDrawerButtonTooltip\n }),\n [callWithChatStrings]\n );\n const callStrings = useLocale().strings.call;\n const exitSpotlightButtonStrings = useMemo(\n () => ({\n label: callStrings.exitSpotlightButtonLabel,\n tooltipContent: callStrings.exitSpotlightButtonTooltip\n }),\n [callStrings]\n );\n\n const centerContainerStyles = useMemo(() => {\n const styles: BaseCustomStyles = !props.mobileView ? desktopControlBarStyles : {};\n return mergeStyleSets(styles, {\n root: {\n // Enforce a background color on control bar to ensure it matches the composite background color.\n background: theme.semanticColors.bodyBackground\n }\n });\n }, [props.mobileView, theme.semanticColors.bodyBackground]);\n const screenShareButtonStyles = useMemo(\n () => (!props.mobileView ? getDesktopScreenShareButtonStyles(theme) : undefined),\n [props.mobileView, theme]\n );\n const commonButtonStyles = useMemo(\n () => (!props.mobileView ? getDesktopCommonButtonStyles(theme) : undefined),\n [props.mobileView, theme]\n );\n const endCallButtonStyles = useMemo(\n () => (!props.mobileView ? getDesktopEndCallButtonStyles(theme) : undefined),\n [props.mobileView, theme]\n );\n\n const controlBarWrapperDesktopStyles: IStyle = useMemo(\n // only center control bar buttons based on parent container if there are enough space on the screen and not mobile\n () => (!props.mobileView && !isOutOfSpace ? (rtl ? wrapperDesktopRtlStyles : wrapperDesktopStyles) : {}),\n [props.mobileView, rtl, isOutOfSpace]\n );\n\n // only center control bar buttons based on parent container if there are enough space on the screen and not mobile\n const controlBarDesktopContainerStyles: IStyle = useMemo(\n () => (!props.mobileView && !isOutOfSpace ? { position: 'relative', minHeight: '4.5rem', width: '100%' } : {}),\n [props.mobileView, isOutOfSpace]\n );\n\n const customButtons = useMemo(\n () =>\n generateCustomCallControlBarButton(\n onFetchCustomButtonPropsTrampoline(options !== false ? options : undefined),\n options !== false ? options?.displayType : undefined\n ),\n [options]\n );\n\n const capabilitiesSelector = useSelector(capabilitySelector);\n const callState = useSelector(callStatusSelector);\n const isReactionAllowed =\n callState.callStatus !== 'Connected' ||\n !capabilitiesSelector?.capabilities ||\n capabilitiesSelector.capabilities.useReactions.isPresent;\n\n // when options is false then we want to hide the whole control bar.\n if (options === false) {\n return <></>;\n }\n\n const sideButtonsPresent =\n isEnabled(options.peopleButton) || isEnabled(options.chatButton) || customButtons['secondary'] !== undefined;\n\n const screenShareButtonIsEnabled = isEnabled(options?.screenShareButton);\n\n const microphoneButtonIsEnabled = isEnabled(options?.microphoneButton);\n\n const cameraButtonIsEnabled = isEnabled(options?.cameraButton);\n\n const showExitSpotlightButton = options?.exitSpotlightButton !== false;\n\n const showCaptionsButton =\n props.isCaptionsSupported &&\n /* @conditional-compile-remove(acs-close-captions) */ isEnabled(options.captionsButton);\n\n /* @conditional-compile-remove(teams-meeting-conference) */\n const showTeamsMeetingPhoneCallButton = isEnabled(options?.teamsMeetingPhoneCallButton);\n\n const showDesktopMoreButton =\n isEnabled(options?.moreButton) &&\n (false ||\n /*@conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */ isEnabled(\n options?.holdButton\n ) ||\n showCaptionsButton ||\n props.onUserSetGalleryLayout);\n\n const role = props.callAdapter.getState().call?.role;\n const hideRaiseHandButtonInRoomsCall =\n props.callAdapter.getState().isRoomsCall && role && ['Consumer', 'Unknown'].includes(role);\n const reactionResources = props.callAdapter.getState().reactions;\n\n return (\n <div ref={controlBarSizeRef}>\n <CallAdapterProvider adapter={props.callAdapter}>\n {showCaptionsSettingsModal && (\n <CaptionsSettingsModal\n showCaptionsSettingsModal={showCaptionsSettingsModal}\n onDismissCaptionsSettings={onDismissCaptionsSettings}\n changeCaptionLanguage={props.isCaptionsOn && props.useTeamsCaptions}\n />\n )}\n {\n /* @conditional-compile-remove(teams-meeting-conference) */ props.teamsMeetingConferenceModalPresent && (\n <MeetingConferencePhoneInfoModal\n conferencePhoneInfoList={props.callAdapter.getState().call?.teamsMeetingConference ?? []}\n showModal={props.teamsMeetingConferenceModalPresent}\n onDismissMeetingPhoneInfoSettings={props.onToggleTeamsMeetingConferenceModal}\n />\n )\n }\n </CallAdapterProvider>\n <Stack\n horizontal\n reversed={!props.mobileView && !isOutOfSpace}\n horizontalAlign=\"space-between\"\n className={mergeStyles(\n callControlsContainerStyles,\n controlBarContainerStyles,\n controlBarDesktopContainerStyles\n )}\n >\n <Stack.Item grow className={mergeStyles(controlBarWrapperDesktopStyles)}>\n <CallAdapterProvider adapter={props.callAdapter}>\n <Stack horizontalAlign=\"center\">\n {/*\n HiddenFocusStartPoint is a util component used when we can't ensure the initial element for first\n tab focus is at the top of dom tree. It moves the first-tab focus to the next interact-able element\n immediately after it in the dom tree.\n */}\n <HiddenFocusStartPoint />\n <Stack.Item>\n {/*\n Note: We use the layout=\"horizontal\" instead of dockedBottom because of how we position the\n control bar. The control bar exists in a Stack below the MediaGallery. The MediaGallery is\n set to grow and fill the remaining space not taken up by the ControlBar. If we were to use\n dockedBottom it has position absolute and would therefore float on top of the media gallery,\n occluding some of its content.\n */}\n <div ref={controlBarContainerRef}>\n <ControlBar layout={props.displayVertical ? 'vertical' : 'horizontal'} styles={centerContainerStyles}>\n {microphoneButtonIsEnabled && (\n <Microphone\n displayType={options.displayType}\n styles={commonButtonStyles}\n splitButtonsForDeviceSelection={!props.mobileView}\n /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */\n disabled={props.disableButtonsForHoldScreen || isDisabled(options.microphoneButton)}\n disableTooltip={props.mobileView}\n />\n )}\n {cameraButtonIsEnabled && (\n <Camera\n displayType={options.displayType}\n styles={commonButtonStyles}\n splitButtonsForDeviceSelection={!props.mobileView}\n /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */\n disabled={props.disableButtonsForHoldScreen || isDisabled(options.cameraButton)}\n onClickVideoEffects={props.onClickVideoEffects}\n componentRef={props.cameraButtonRef}\n disableTooltip={props.mobileView}\n />\n )}\n {!props.mobileView &&\n isReactionAllowed &&\n isEnabled(options.reactionButton) &&\n reactionResources && (\n <Reaction\n displayType={options.displayType}\n styles={commonButtonStyles}\n disabled={props.disableButtonsForHoldScreen}\n reactionResource={reactionResources}\n />\n )}\n {!props.mobileView && isEnabled(options.raiseHandButton) && !hideRaiseHandButtonInRoomsCall && (\n <RaiseHand\n displayType={options.displayType}\n styles={commonButtonStyles}\n /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */\n disabled={props.disableButtonsForHoldScreen || isDisabled(options.microphoneButton)}\n />\n )}\n {showDtmfDialerButton(options) && props.onSetDialpadPage !== undefined && (\n <DtmfDialpadButton\n styles={commonButtonStyles}\n displayType={options.displayType}\n onClick={() => {\n if (props.onSetDialpadPage !== undefined) {\n props.onSetDialpadPage();\n }\n }}\n />\n )}\n {showExitSpotlightButton && props.onStopLocalSpotlight && (\n <ExitSpotlightButton\n displayType={options.displayType}\n onClick={props.onStopLocalSpotlight}\n styles={commonButtonStyles}\n strings={exitSpotlightButtonStrings}\n />\n )}\n {screenShareButtonIsEnabled && (\n <ScreenShare\n option={options.screenShareButton}\n displayType={options.displayType}\n styles={screenShareButtonStyles}\n /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */\n disabled={props.disableButtonsForHoldScreen || isDisabled(options.screenShareButton)}\n />\n )}\n {customButtons['primary']\n ?.slice(\n 0,\n props.mobileView\n ? CUSTOM_BUTTON_OPTIONS.MAX_PRIMARY_MOBILE_CUSTOM_BUTTONS\n : CUSTOM_BUTTON_OPTIONS.MAX_PRIMARY_DESKTOP_CUSTOM_BUTTONS\n )\n .map((CustomButton, i) => {\n return (\n <CustomButton\n key={`primary-custom-button-${i}`}\n styles={commonButtonStyles}\n showLabel={options.displayType !== 'compact'}\n disableTooltip={props.mobileView}\n />\n );\n })}\n {props.mobileView && (\n <MoreButton\n data-ui-id=\"common-call-composite-more-button\"\n strings={moreButtonStrings}\n onClick={props.onMoreButtonClicked}\n disabled={props.disableButtonsForLobbyPage}\n disableTooltip={props.mobileView}\n />\n )}\n {!props.mobileView && showDesktopMoreButton && (\n <DesktopMoreButton\n disableButtonsForHoldScreen={props.disableButtonsForHoldScreen}\n styles={commonButtonStyles}\n /*@conditional-compile-remove(PSTN-calls) */\n onClickShowDialpad={props.onClickShowDialpad}\n callControls={props.callControls}\n isCaptionsSupported={showCaptionsButton}\n onCaptionsSettingsClick={openCaptionsSettingsModal}\n onUserSetOverflowGalleryPositionChange={props.onUserSetOverflowGalleryPositionChange}\n onUserSetGalleryLayout={props.onUserSetGalleryLayout}\n userSetGalleryLayout={props.userSetGalleryLayout}\n dtmfDialerPresent={props.dtmfDialerPresent}\n onSetDialpadPage={props.onSetDialpadPage}\n /* @conditional-compile-remove(teams-meeting-conference) */\n teamsMeetingPhoneCallEnable={showTeamsMeetingPhoneCallButton}\n /* @conditional-compile-remove(teams-meeting-conference) */\n onMeetingPhoneInfoClick={props.onToggleTeamsMeetingConferenceModal}\n />\n )}\n <EndCall\n displayType=\"compact\"\n mobileView={props.mobileView}\n styles={endCallButtonStyles}\n /* @conditional-compile-remove(end-call-options) */\n enableEndCallMenu={\n !isBoolean(props.callControls) &&\n !isBoolean(props.callControls?.endCallButton) &&\n !props.mobileView &&\n isHangUpForEveryoneAllowed &&\n !isTeams && // Temporary disable it for Teams call, since capability does not give the right value\n props.callControls?.endCallButton?.hangUpForEveryone === 'endCallOptions' &&\n // Only show the end call menu when the call is connected, user should not be able to end the call for everyone\n // when they are not actively in the call to communicate they will.\n callState.callStatus === 'Connected'\n }\n disableEndCallModal={\n !isBoolean(props.callControls) &&\n !isBoolean(props.callControls?.endCallButton) &&\n props.callControls?.endCallButton?.disableEndCallModal\n }\n />\n </ControlBar>\n </div>\n </Stack.Item>\n </Stack>\n </CallAdapterProvider>\n </Stack.Item>\n {!props.mobileView && sideButtonsPresent && (\n <Stack.Item>\n <div ref={sidepaneControlsRef}>\n <Stack horizontal className={!props.mobileView ? mergeStyles(desktopButtonContainerStyle) : undefined}>\n {isEnabled(options?.peopleButton) && (\n <PeopleButton\n checked={props.peopleButtonChecked}\n ariaLabel={\n props.peopleButtonChecked\n ? peopleButtonStrings?.tooltipCloseAriaLabel\n : peopleButtonStrings?.tooltipOpenAriaLabel\n }\n showLabel={options.displayType !== 'compact'}\n onClick={props.onPeopleButtonClicked}\n data-ui-id=\"common-call-composite-people-button\"\n disabled={\n props.disableButtonsForLobbyPage ||\n props.disableButtonsForHoldScreen ||\n isDisabled(options.peopleButton)\n }\n strings={peopleButtonStrings}\n styles={commonButtonStyles}\n componentRef={props.peopleButtonRef}\n />\n )}\n {customButtons['secondary']\n ?.slice(0, CUSTOM_BUTTON_OPTIONS.MAX_SECONDARY_DESKTOP_CUSTOM_BUTTONS)\n .map((CustomButton, i) => {\n return (\n <CustomButton\n key={`secondary-custom-button-${i}`}\n styles={commonButtonStyles}\n showLabel={options.displayType !== 'compact'}\n />\n );\n })}\n </Stack>\n </div>\n </Stack.Item>\n )}\n </Stack>\n </div>\n );\n};\n\nconst desktopButtonContainerStyle: IStyle = {\n padding: '0.75rem',\n columnGap: '0.5rem'\n};\n\nconst desktopControlBarStyles: BaseCustomStyles = {\n root: desktopButtonContainerStyle\n};\n\n{\n /*\n Styling here to ensure the control bar buttons stay in the center of the parent component (control Container) regardless of its siblings\n Need to add 'reversed' to parent container because the styling here reverse the position of the two stack items \n */\n}\nconst wrapperDesktopStyles: IStyle = {\n position: 'absolute',\n left: '50%',\n transform: 'translate(-50%, 0)'\n};\n\nconst wrapperDesktopRtlStyles: IStyle = {\n position: 'absolute',\n right: '50%',\n transform: 'translate(-50%, 0)'\n};\n\n/** @private */\nexport const getDesktopCommonButtonStyles = (theme: ITheme): ControlBarButtonStyles => ({\n root: {\n border: `solid 1px ${theme.palette.neutralQuaternaryAlt}`,\n borderRadius: theme.effects.roundedCorner4,\n minHeight: '2.5rem',\n maxWidth: '12rem' // allot extra space than the regular ControlBarButton. This is to give extra room to have the icon beside the text.\n },\n flexContainer: {\n display: 'flex',\n flexFlow: 'row nowrap'\n },\n textContainer: {\n // Override the default so that label doesn't introduce a new block.\n display: 'inline',\n\n // Ensure width is set to permit child to show ellipsis when there is a label that is too long\n maxWidth: '100%'\n },\n label: {\n fontSize: theme.fonts.medium.fontSize,\n\n // Ensure there is enough space between the icon and text to allow for the unread messages badge in the chat button\n marginLeft: '0.625rem',\n\n // Ensure letters that go above and below the standard text line like 'g', 'y', 'j' are not clipped\n lineHeight: '1.5rem',\n\n // Do not allow very long button texts to ruin the control bar experience, instead ensure long text is truncated and shows ellipsis\n display: 'block',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n overflow: 'hidden'\n },\n splitButtonMenuButton: {\n border: `solid 1px ${theme.palette.neutralQuaternaryAlt}`,\n borderTopRightRadius: theme.effects.roundedCorner4,\n borderBottomRightRadius: theme.effects.roundedCorner4,\n borderTopLeftRadius: '0',\n borderBottomLeftRadius: '0'\n },\n splitButtonMenuButtonChecked: {\n // Default colors the menu half similarly for :hover and when button is checked.\n // To align with how the left-half is styled, override the checked style.\n background: 'none'\n }\n});\n\nconst getDesktopScreenShareButtonStyles = (theme: ITheme): ControlBarButtonStyles => {\n const overrideStyles = {\n border: 'none',\n background: theme.palette.themePrimary,\n color: theme.palette.white,\n '* > svg': { fill: theme.palette.white },\n '@media (forced-colors: active)': {\n border: '1px solid',\n borderColor: theme.palette.black\n }\n };\n const overrides: ControlBarButtonStyles = {\n rootChecked: overrideStyles,\n rootCheckedHovered: overrideStyles\n };\n return concatStyleSets(getDesktopCommonButtonStyles(theme), overrides);\n};\n\nconst getDesktopEndCallButtonStyles = (theme: ITheme): ControlBarButtonStyles => {\n const overrides: ControlBarButtonStyles = {\n root: {\n // Suppress border around the dark-red button.\n border: 'none'\n },\n rootFocused: {\n '@media (forced-colors: active)': {\n background: 'highlight',\n color: 'highlightText',\n borderColor: theme.palette.black,\n borderRadius: 'unset',\n outline: `3px solid ${theme.palette.black}`\n }\n },\n icon: {\n '@media (forced-colors: active)': {\n ':focused': {\n color: theme.palette.white\n }\n }\n }\n };\n return concatStyleSets(getDesktopCommonButtonStyles(theme), overrides);\n};\n\nconst isEnabled = (option: unknown): boolean => option !== false;\n\nconst showDtmfDialerButton = (options: CommonCallControlOptions | CallWithChatControlOptions): boolean => {\n if (options.moreButton === false && options.dtmfDialerButton !== false) {\n return true;\n } else {\n return false;\n }\n};\n"]}
@@ -40,7 +40,7 @@ export const ParticipantListWithHeading = (props) => {
40
40
  /* @conditional-compile-remove(total-participant-count) */ totalParticipantCount)),
41
41
  (onClickHeadingMoreButton ||
42
42
  ((headingMoreButtonMenuProps === null || headingMoreButtonMenuProps === void 0 ? void 0 : headingMoreButtonMenuProps.items) && headingMoreButtonMenuProps.items.length > 0)) && (React.createElement(Stack.Item, null,
43
- React.createElement(DefaultButton, { ariaLabel: headingMoreButtonAriaLabel, styles: headingMoreButtonStyles(theme), iconProps: { iconName: 'PeoplePaneMoreButton' }, onClick: onClickHeadingMoreButton ? () => onClickHeadingMoreButton() : undefined, menuProps: props.onClickHeadingMoreButton ? undefined : props.headingMoreButtonMenuProps, onRenderMenuIcon: () => null })))),
43
+ React.createElement(DefaultButton, { "data-ui-id": "people-pane-header-more-button", ariaLabel: headingMoreButtonAriaLabel, styles: headingMoreButtonStyles(theme), iconProps: { iconName: 'PeoplePaneMoreButton' }, onClick: onClickHeadingMoreButton ? () => onClickHeadingMoreButton() : undefined, menuProps: props.onClickHeadingMoreButton ? undefined : props.headingMoreButtonMenuProps, onRenderMenuIcon: () => null })))),
44
44
  React.createElement(FocusZone, { className: participantListContainerStyle, shouldFocusOnMount: true },
45
45
  React.createElement(ParticipantList, Object.assign({}, participantListProps, { pinnedParticipants: pinnedParticipants, styles: props.isMobile ? participantListMobileStyle : participantListStyle, onRenderAvatar: (userId, options) => (React.createElement(React.Fragment, null,
46
46
  React.createElement(AvatarPersona, Object.assign({ "data-ui-id": "chat-composite-participant-custom-avatar", userId: userId }, options, { hidePersonaDetails: !!(options === null || options === void 0 ? void 0 : options.text), dataProvider: onFetchAvatarPersonaData, allowActiveBorder: true })),