@azure/communication-react 1.11.0-alpha-202312130012 → 1.11.0-alpha-202312150013

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 (100) hide show
  1. package/dist/communication-react.d.ts +200 -1
  2. package/dist/dist-cjs/communication-react/index.js +468 -56
  3. package/dist/dist-cjs/communication-react/index.js.map +1 -1
  4. package/dist/dist-esm/acs-ui-common/src/telemetry.js +2 -2
  5. package/dist/dist-esm/acs-ui-common/src/telemetry.js.map +1 -1
  6. package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js +1 -1
  7. package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js.map +1 -1
  8. package/dist/dist-esm/calling-component-bindings/src/handlers/createCommonHandlers.d.ts +2 -0
  9. package/dist/dist-esm/calling-component-bindings/src/handlers/createCommonHandlers.js +39 -26
  10. package/dist/dist-esm/calling-component-bindings/src/handlers/createCommonHandlers.js.map +1 -1
  11. package/dist/dist-esm/calling-component-bindings/src/participantListSelector.js +0 -1
  12. package/dist/dist-esm/calling-component-bindings/src/participantListSelector.js.map +1 -1
  13. package/dist/dist-esm/calling-component-bindings/src/videoGallerySelector.js.map +1 -1
  14. package/dist/dist-esm/calling-stateful-client/src/Converter.js.map +1 -1
  15. package/dist/dist-esm/calling-stateful-client/src/DeviceManagerDeclarative.d.ts +2 -2
  16. package/dist/dist-esm/calling-stateful-client/src/DeviceManagerDeclarative.js.map +1 -1
  17. package/dist/dist-esm/communication-react/src/index.d.ts +2 -0
  18. package/dist/dist-esm/communication-react/src/index.js.map +1 -1
  19. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageComponentAsMessageBubble.js +4 -1
  20. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageComponentAsMessageBubble.js.map +1 -1
  21. package/dist/dist-esm/react-components/src/components/Survey/StarSurvey/StarSurvey.d.ts +64 -0
  22. package/dist/dist-esm/react-components/src/components/Survey/StarSurvey/StarSurvey.js +54 -0
  23. package/dist/dist-esm/react-components/src/components/Survey/StarSurvey/StarSurvey.js.map +1 -0
  24. package/dist/dist-esm/react-components/src/components/Survey/StarSurvey/StarSurvey.styles.d.ts +14 -0
  25. package/dist/dist-esm/react-components/src/components/Survey/StarSurvey/StarSurvey.styles.js +39 -0
  26. package/dist/dist-esm/react-components/src/components/Survey/StarSurvey/StarSurvey.styles.js.map +1 -0
  27. package/dist/dist-esm/react-components/src/components/Survey/SurveyTypes.d.ts +141 -0
  28. package/dist/dist-esm/react-components/src/components/Survey/SurveyTypes.js +4 -0
  29. package/dist/dist-esm/react-components/src/components/Survey/SurveyTypes.js.map +1 -0
  30. package/dist/dist-esm/react-components/src/components/Survey/TagsSurvey/TagsSurvey.d.ts +59 -0
  31. package/dist/dist-esm/react-components/src/components/Survey/TagsSurvey/TagsSurvey.js +81 -0
  32. package/dist/dist-esm/react-components/src/components/Survey/TagsSurvey/TagsSurvey.js.map +1 -0
  33. package/dist/dist-esm/react-components/src/components/Survey/TagsSurvey/TagsSurvey.styles.d.ts +14 -0
  34. package/dist/dist-esm/react-components/src/components/Survey/TagsSurvey/TagsSurvey.styles.js +30 -0
  35. package/dist/dist-esm/react-components/src/components/Survey/TagsSurvey/TagsSurvey.styles.js.map +1 -0
  36. package/dist/dist-esm/react-components/src/components/index.d.ts +5 -0
  37. package/dist/dist-esm/react-components/src/components/index.js +6 -0
  38. package/dist/dist-esm/react-components/src/components/index.js.map +1 -1
  39. package/dist/dist-esm/react-components/src/components/styles/MessageThread.styles.d.ts +1 -1
  40. package/dist/dist-esm/react-components/src/components/styles/MessageThread.styles.js +13 -9
  41. package/dist/dist-esm/react-components/src/components/styles/MessageThread.styles.js.map +1 -1
  42. package/dist/dist-esm/react-components/src/index.d.ts +2 -0
  43. package/dist/dist-esm/react-components/src/index.js.map +1 -1
  44. package/dist/dist-esm/react-components/src/theming/icons.d.ts +2 -0
  45. package/dist/dist-esm/react-components/src/theming/icons.js +7 -1
  46. package/dist/dist-esm/react-components/src/theming/icons.js.map +1 -1
  47. package/dist/dist-esm/react-components/src/types/SurveyIssues.d.ts +45 -0
  48. package/dist/dist-esm/react-components/src/types/SurveyIssues.js +4 -0
  49. package/dist/dist-esm/react-components/src/types/SurveyIssues.js.map +1 -0
  50. package/dist/dist-esm/react-components/src/types/SurveyIssuesHeadingStrings.d.ts +11 -0
  51. package/dist/dist-esm/react-components/src/types/SurveyIssuesHeadingStrings.js +4 -0
  52. package/dist/dist-esm/react-components/src/types/SurveyIssuesHeadingStrings.js.map +1 -0
  53. package/dist/dist-esm/react-components/src/types/index.d.ts +2 -0
  54. package/dist/dist-esm/react-components/src/types/index.js +2 -0
  55. package/dist/dist-esm/react-components/src/types/index.js.map +1 -1
  56. package/dist/dist-esm/react-composites/src/composites/CallComposite/CallComposite.d.ts +33 -0
  57. package/dist/dist-esm/react-composites/src/composites/CallComposite/CallComposite.js +17 -7
  58. package/dist/dist-esm/react-composites/src/composites/CallComposite/CallComposite.js.map +1 -1
  59. package/dist/dist-esm/react-composites/src/composites/CallComposite/Strings.d.ts +61 -0
  60. package/dist/dist-esm/react-composites/src/composites/CallComposite/Strings.js.map +1 -1
  61. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/AzureCommunicationCallAdapter.d.ts +2 -0
  62. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/AzureCommunicationCallAdapter.js +11 -3
  63. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/AzureCommunicationCallAdapter.js.map +1 -1
  64. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/CallAdapter.d.ts +7 -0
  65. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/CallAdapter.js.map +1 -1
  66. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallControls.js +12 -1
  67. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallControls.js.map +1 -1
  68. package/dist/dist-esm/react-composites/src/composites/CallComposite/hooks/useHandlers.js +4 -0
  69. package/dist/dist-esm/react-composites/src/composites/CallComposite/hooks/useHandlers.js.map +1 -1
  70. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/NoticePage.d.ts +33 -0
  71. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/NoticePage.js +9 -1
  72. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/NoticePage.js.map +1 -1
  73. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatComposite.d.ts +33 -0
  74. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatComposite.js +6 -0
  75. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatComposite.js.map +1 -1
  76. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/AzureCommunicationCallWithChatAdapter.d.ts +2 -0
  77. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/AzureCommunicationCallWithChatAdapter.js +6 -0
  78. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/AzureCommunicationCallWithChatAdapter.js.map +1 -1
  79. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/CallWithChatAdapter.d.ts +7 -0
  80. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/CallWithChatAdapter.js.map +1 -1
  81. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/CallWithChatBackedCallAdapter.d.ts +2 -0
  82. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/CallWithChatBackedCallAdapter.js +6 -0
  83. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/CallWithChatBackedCallAdapter.js.map +1 -1
  84. package/dist/dist-esm/react-composites/src/composites/common/ControlBar/CommonCallControlBar.js +2 -5
  85. package/dist/dist-esm/react-composites/src/composites/common/ControlBar/CommonCallControlBar.js.map +1 -1
  86. package/dist/dist-esm/react-composites/src/composites/common/StarSurvey.d.ts +6 -0
  87. package/dist/dist-esm/react-composites/src/composites/common/StarSurvey.js +29 -0
  88. package/dist/dist-esm/react-composites/src/composites/common/StarSurvey.js.map +1 -0
  89. package/dist/dist-esm/react-composites/src/composites/common/SurveyPane.d.ts +7 -0
  90. package/dist/dist-esm/react-composites/src/composites/common/SurveyPane.js +23 -0
  91. package/dist/dist-esm/react-composites/src/composites/common/SurveyPane.js.map +1 -0
  92. package/dist/dist-esm/react-composites/src/composites/common/SurveyPaneContent.d.ts +10 -0
  93. package/dist/dist-esm/react-composites/src/composites/common/SurveyPaneContent.js +106 -0
  94. package/dist/dist-esm/react-composites/src/composites/common/SurveyPaneContent.js.map +1 -0
  95. package/dist/dist-esm/react-composites/src/composites/common/TagsSurvey.d.ts +8 -0
  96. package/dist/dist-esm/react-composites/src/composites/common/TagsSurvey.js +22 -0
  97. package/dist/dist-esm/react-composites/src/composites/common/TagsSurvey.js.map +1 -0
  98. package/dist/dist-esm/react-composites/src/composites/common/icons.d.ts +2 -0
  99. package/dist/dist-esm/react-composites/src/composites/localization/locales/en-US/strings.json +59 -0
  100. package/package.json +1 -1
@@ -170,7 +170,7 @@ function getDefaultExportFromCjs (x) {
170
170
  // Copyright (c) Microsoft Corporation.
171
171
  // Licensed under the MIT License.
172
172
  // GENERATED FILE. DO NOT EDIT MANUALLY.
173
- var telemetryVersion = '1.11.0-alpha-202312130012';
173
+ var telemetryVersion = '1.11.0-alpha-202312150013';
174
174
 
175
175
 
176
176
  var telemetryVersion$1 = /*@__PURE__*/getDefaultExportFromCjs(telemetryVersion);
@@ -793,38 +793,47 @@ const createDefaultCommonCallingHandlers = memoizeOne((callClient, deviceManager
793
793
  });
794
794
  const onToggleCamera = (options) => __awaiter$L(void 0, void 0, void 0, function* () {
795
795
  const previewOn = _isPreviewOn(callClient.getState().deviceManager);
796
- if (previewOn && call && call.state === 'Connecting') {
797
- // This is to workaround: https://skype.visualstudio.com/SPOOL/_workitems/edit/3030558.
798
- // The root cause of the issue is caused by never transitioning the unparented view to the
799
- // call object when going from configuration page (disconnected call state) to connecting.
800
- //
801
- // Currently the only time the local video stream is moved from unparented view to the call
802
- // object is when we transition from connecting -> call state. If the camera was on,
803
- // inside the MediaGallery we trigger toggleCamera. This triggers onStartLocalVideo which
804
- // destroys the unparentedView and creates a new stream in the call - so all looks well.
805
- //
806
- // However, if someone turns off their camera during the lobbyOrConnecting screen, the
807
- // call.localVideoStreams will be empty (as the stream is currently stored in the unparented
808
- // views and was never transitioned to the call object) and thus we incorrectly try to create
809
- // a new video stream for the call object, instead of only stopping the unparented view.
810
- //
811
- // The correct fix for this is to ensure that callAgent.onStartCall is called with the
812
- // localvideostream as a videoOption. That will mean call.onLocalVideoStreamsUpdated will
813
- // be triggered when the call is in connecting state, which we can then transition the
814
- // local video stream to the stateful call client and get into a clean state.
815
- yield onDisposeLocalStreamView();
816
- return;
817
- }
796
+ // the disposal of the unparented views is to workaround: https://skype.visualstudio.com/SPOOL/_workitems/edit/3030558.
797
+ // The root cause of the issue is caused by never transitioning the unparented view to the
798
+ // call object when going from configuration page (disconnected call state) to connecting.
799
+ //
800
+ // Currently the only time the local video stream is moved from unparented view to the call
801
+ // object is when we transition from connecting -> call state. If the camera was on,
802
+ // inside the MediaGallery we trigger toggleCamera. This triggers onStartLocalVideo which
803
+ // destroys the unparentedView and creates a new stream in the call - so all looks well.
804
+ //
805
+ // However, if someone turns off their camera during the lobbyOrConnecting screen, the
806
+ // call.localVideoStreams will be empty (as the stream is currently stored in the unparented
807
+ // views and was never transitioned to the call object) and thus we incorrectly try to create
808
+ // a new video stream for the call object, instead of only stopping the unparented view.
809
+ //
810
+ // The correct fix for this is to ensure that callAgent.onStartCall is called with the
811
+ // localvideostream as a videoOption. That will mean call.onLocalVideoStreamsUpdated will
812
+ // be triggered when the call is in connecting state, which we can then transition the
813
+ // local video stream to the stateful call client and get into a clean state.
818
814
  if (call && (_isInCall(call.state) || _isInLobbyOrConnecting(call.state))) {
819
815
  const stream = call.localVideoStreams.find((stream) => stream.mediaStreamType === 'Video');
820
- if (stream) {
821
- yield onStopLocalVideo(stream);
816
+ const unparentedViews = callClient.getState().deviceManager.unparentedViews;
817
+ if (stream || unparentedViews.length > 0) {
818
+ unparentedViews &&
819
+ (yield unparentedViews.forEach((view) => view.mediaStreamType === 'Video' && callClient.disposeView(undefined, undefined, view)));
820
+ stream && (yield onStopLocalVideo(stream));
822
821
  }
823
822
  else {
824
823
  yield onStartLocalVideo();
825
824
  }
826
825
  }
827
826
  else {
827
+ /**
828
+ * This will create a unparented view to be used on the configuration page and the connecting screen
829
+ *
830
+ * If the device that the stream will come from is not on from permissions checks, then it will take time
831
+ * to create the stream since device is off. If we are turn the camera on immedietly on the configuration page we see it is
832
+ * fast but that is because the device is already primed to return a stream.
833
+ *
834
+ * On the connecting page the device has already turned off and the connecting window is so small we do not see the resulting
835
+ * unparented view from the code below.
836
+ */
828
837
  const selectedCamera = callClient.getState().deviceManager.selectedCamera;
829
838
  if (selectedCamera) {
830
839
  if (previewOn) {
@@ -891,7 +900,7 @@ const createDefaultCommonCallingHandlers = memoizeOne((callClient, deviceManager
891
900
  }
892
901
  });
893
902
  const onToggleMicrophone = () => __awaiter$L(void 0, void 0, void 0, function* () {
894
- if (!call || !_isInCall(call.state)) {
903
+ if (!call || !(_isInCall(call.state) || _isInLobbyOrConnecting(call.state))) {
895
904
  throw new Error(`Please invoke onToggleMicrophone after call is started`);
896
905
  }
897
906
  return call.isMuted ? yield call.unmute() : yield call.mute();
@@ -1088,6 +1097,8 @@ const createDefaultCommonCallingHandlers = memoizeOne((callClient, deviceManager
1088
1097
  const captionsFeature = call === null || call === void 0 ? void 0 : call.feature(communicationCalling.Features.Captions).captions;
1089
1098
  yield captionsFeature.setCaptionLanguage(language);
1090
1099
  });
1100
+ /* @conditional-compile-remove(end-of-call-survey) */
1101
+ const onSubmitSurvey = (survey) => __awaiter$L(void 0, void 0, void 0, function* () { return yield (call === null || call === void 0 ? void 0 : call.feature(communicationCalling.Features.CallSurvey).submitSurvey(survey, options)); });
1091
1102
  return {
1092
1103
  onHangUp,
1093
1104
  /* @conditional-compile-remove(PSTN-calls) */
@@ -1133,7 +1144,9 @@ const createDefaultCommonCallingHandlers = memoizeOne((callClient, deviceManager
1133
1144
  /* @conditional-compile-remove(close-captions) */
1134
1145
  onSetCaptionLanguage,
1135
1146
  /* @conditional-compile-remove(close-captions) */
1136
- onSetSpokenLanguage
1147
+ onSetSpokenLanguage,
1148
+ /* @conditional-compile-remove(end-of-call-survey) */
1149
+ onSubmitSurvey
1137
1150
  };
1138
1151
  });
1139
1152
 
@@ -6283,7 +6296,11 @@ const DEFAULT_COMPONENT_ICONS = {
6283
6296
  ChangeCaptionLanguageIcon: React.createElement(reactIcons.Translate20Regular, null),
6284
6297
  ContextMenuCameraIcon: React.createElement(reactIcons.Video20Regular, null),
6285
6298
  ContextMenuMicIcon: React.createElement(reactIcons.Mic20Regular, null),
6286
- ContextMenuSpeakerIcon: React.createElement(reactIcons.Speaker220Regular, null)
6299
+ ContextMenuSpeakerIcon: React.createElement(reactIcons.Speaker220Regular, null),
6300
+ /* @conditional-compile-remove(end-of-call-survey) */
6301
+ SurveyStarIcon: React.createElement(reactIcons.Star28Regular, null),
6302
+ /* @conditional-compile-remove(end-of-call-survey) */
6303
+ SurveyStarIconFilled: React.createElement(reactIcons.Star28Filled, null)
6287
6304
  };
6288
6305
 
6289
6306
  // Copyright (c) Microsoft Corporation.
@@ -9012,11 +9029,20 @@ const useChatMessageStyles = reactComponents.makeStyles({
9012
9029
  }, '& msft-mention': {
9013
9030
  color: reactComponents.tokens.colorStatusWarningBackground3,
9014
9031
  fontWeight: reactComponents.tokens.fontWeightSemibold
9015
- }, '& img[src=""]': {
9032
+ }, '& img': {
9033
+ maxWidth: '100% !important', // Add !important to make sure it won't be overridden by style defined in element
9034
+ height: 'auto !important'
9035
+ }, '& video': {
9036
+ maxWidth: '100% !important', // Add !important to make sure it won't be overridden by style defined in element
9037
+ height: 'auto !important'
9038
+ }, '& p': Object.assign({}, reactComponents.shorthands.marginBlock('0.125rem')), '& blockquote': Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ backgroundColor: reactComponents.tokens.colorBrandBackgroundInverted, clear: 'left', minHeight: '2.25rem', width: 'fit-content', marginTop: '7px', marginRight: '0px', marginLeft: '0px', marginBottom: '7px', paddingTop: '7px', paddingRight: '15px', paddingLeft: '15px', paddingBottom: '7px' }, reactComponents.shorthands.border('solid')), reactComponents.shorthands.borderRadius('4px')), reactComponents.shorthands.borderWidth('1px')), reactComponents.shorthands.borderColor(reactComponents.tokens.colorNeutralStroke1Selected)), { borderLeftWidth: '4px' }), '& table': Object.assign(Object.assign({ backgroundColor: reactComponents.tokens.colorBrandBackgroundInverted }, reactComponents.shorthands.borderColor(reactComponents.tokens.colorNeutralStroke1Selected)), { borderCollapse: 'collapse', tableLayout: 'auto', width: '100%', '& tr': Object.assign(Object.assign({}, reactComponents.shorthands.border('1px', 'solid', `${reactComponents.tokens.colorNeutralStroke1Selected}`)), { '& td': Object.assign(Object.assign({}, reactComponents.shorthands.border('1px', 'solid', `${reactComponents.tokens.colorNeutralStroke1Selected}`)), { wordBreak: 'normal', paddingTop: '0px', paddingRight: '5px' }) }) }) }),
9039
+ bodyWithPlaceholderImage: {
9040
+ '& img[src=""]': {
9016
9041
  display: 'block',
9017
9042
  position: 'relative',
9018
9043
  marginBottom: '5px'
9019
- }, '& img[src=""]:after': {
9044
+ },
9045
+ '& img[src=""]:after': {
9020
9046
  backgroundColor: reactComponents.tokens.colorNeutralBackground1Selected,
9021
9047
  content: `url("data:image/gif;base64,R0lGODlhAQABAAAAACw=")`,
9022
9048
  backgroundSize: 'center',
@@ -9026,13 +9052,8 @@ const useChatMessageStyles = reactComponents.makeStyles({
9026
9052
  top: '0',
9027
9053
  left: '0',
9028
9054
  display: 'block'
9029
- }, '& img': {
9030
- maxWidth: '100% !important', // Add !important to make sure it won't be overridden by style defined in element
9031
- height: 'auto !important'
9032
- }, '& video': {
9033
- maxWidth: '100% !important', // Add !important to make sure it won't be overridden by style defined in element
9034
- height: 'auto !important'
9035
- }, '& p': Object.assign({}, reactComponents.shorthands.marginBlock('0.125rem')), '& blockquote': Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ backgroundColor: reactComponents.tokens.colorBrandBackgroundInverted, clear: 'left', minHeight: '2.25rem', width: 'fit-content', marginTop: '7px', marginRight: '0px', marginLeft: '0px', marginBottom: '7px', paddingTop: '7px', paddingRight: '15px', paddingLeft: '15px', paddingBottom: '7px' }, reactComponents.shorthands.border('solid')), reactComponents.shorthands.borderRadius('4px')), reactComponents.shorthands.borderWidth('1px')), reactComponents.shorthands.borderColor(reactComponents.tokens.colorNeutralStroke1Selected)), { borderLeftWidth: '4px' }), '& table': Object.assign(Object.assign({ backgroundColor: reactComponents.tokens.colorBrandBackgroundInverted }, reactComponents.shorthands.borderColor(reactComponents.tokens.colorNeutralStroke1Selected)), { borderCollapse: 'collapse', tableLayout: 'auto', width: '100%', '& tr': Object.assign(Object.assign({}, reactComponents.shorthands.border('1px', 'solid', `${reactComponents.tokens.colorNeutralStroke1Selected}`)), { '& td': Object.assign(Object.assign({}, reactComponents.shorthands.border('1px', 'solid', `${reactComponents.tokens.colorNeutralStroke1Selected}`)), { wordBreak: 'normal', paddingTop: '0px', paddingRight: '5px' }) }) }) }),
9055
+ }
9056
+ },
9036
9057
  bodyWithoutAvatar: {
9037
9058
  marginTop: '0.125rem'
9038
9059
  },
@@ -10630,7 +10651,10 @@ const MessageBubble = (props) => {
10630
10651
  const chatMessageStyles = useChatMessageStyles();
10631
10652
  const chatItemMessageContainerClassName = reactComponents.mergeClasses(
10632
10653
  // messageContainerStyle used in className and style prop as style prop can't handle CSS selectors
10633
- chatMessageStyles.body, isBlockedMessage
10654
+ chatMessageStyles.body,
10655
+ // disable placeholder functionality for GA releases as it might confuse users
10656
+ /* @conditional-compile-remove(teams-inline-images-and-file-sharing) */
10657
+ chatMessageStyles.bodyWithPlaceholderImage, isBlockedMessage
10634
10658
  ? chatMessageCommonStyles.blocked
10635
10659
  : props.message.status === 'failed'
10636
10660
  ? chatMessageCommonStyles.failed
@@ -17797,6 +17821,197 @@ const sanitizeInput = (input) => {
17797
17821
  return input.replace(/[^\d*#+]/g, '');
17798
17822
  };
17799
17823
 
17824
+ // Copyright (c) Microsoft Corporation.
17825
+ // Licensed under the MIT License.
17826
+ /**
17827
+ * @private
17828
+ */
17829
+ const helperTextStyle$1 = (theme) => react.mergeStyles({
17830
+ fontWeight: 600,
17831
+ fontSize: _pxToRem(14),
17832
+ lineHeight: _pxToRem(20),
17833
+ color: theme.palette.neutralPrimary,
17834
+ paddingTop: _pxToRem(20)
17835
+ });
17836
+ /**
17837
+ * @private
17838
+ */
17839
+ const ratingStyles = (theme) => {
17840
+ return {
17841
+ root: {
17842
+ marginBottom: _pxToRem(24),
17843
+ textAlign: 'center'
17844
+ },
17845
+ ratingStar: {
17846
+ fontSize: _pxToRem(35),
17847
+ margin: _pxToRem(5)
17848
+ },
17849
+ ratingStarFront: {
17850
+ color: theme.palette.themePrimary
17851
+ }
17852
+ };
17853
+ };
17854
+ /**
17855
+ * @private
17856
+ */
17857
+ const titleContainerClassName$1 = react.mergeStyles({
17858
+ paddingBottom: _pxToRem(6)
17859
+ });
17860
+
17861
+ // Copyright (c) Microsoft Corporation.
17862
+ // Licensed under the MIT License.
17863
+ /**
17864
+ * A component to allow users to send numerical ratings regarding call quality
17865
+ *
17866
+ * @internal
17867
+ */
17868
+ const _StarSurvey = (props) => {
17869
+ const { onStarRatingSelected, selectedIcon, unselectedIcon, strings } = props;
17870
+ const [rating, setRating] = React.useState(0);
17871
+ const [helperText, setHelperText] = React.useState(strings === null || strings === void 0 ? void 0 : strings.starSurveyHelperText);
17872
+ const theme = react.useTheme();
17873
+ const onRatingChange = React.useCallback((ev, rating) => {
17874
+ if (rating) {
17875
+ setRating(rating);
17876
+ switch (rating) {
17877
+ case 1:
17878
+ setHelperText(strings === null || strings === void 0 ? void 0 : strings.starSurveyOneStarText);
17879
+ break;
17880
+ case 2:
17881
+ setHelperText(strings === null || strings === void 0 ? void 0 : strings.starSurveyTwoStarText);
17882
+ break;
17883
+ case 3:
17884
+ setHelperText(strings === null || strings === void 0 ? void 0 : strings.starSurveyThreeStarText);
17885
+ break;
17886
+ case 4:
17887
+ setHelperText(strings === null || strings === void 0 ? void 0 : strings.starSurveyFourStarText);
17888
+ break;
17889
+ case 5:
17890
+ setHelperText(strings === null || strings === void 0 ? void 0 : strings.starSurveyFiveStarText);
17891
+ break;
17892
+ }
17893
+ onStarRatingSelected === null || onStarRatingSelected === void 0 ? void 0 : onStarRatingSelected(rating);
17894
+ }
17895
+ }, [
17896
+ strings === null || strings === void 0 ? void 0 : strings.starSurveyOneStarText,
17897
+ strings === null || strings === void 0 ? void 0 : strings.starSurveyTwoStarText,
17898
+ strings === null || strings === void 0 ? void 0 : strings.starSurveyThreeStarText,
17899
+ strings === null || strings === void 0 ? void 0 : strings.starSurveyFourStarText,
17900
+ strings === null || strings === void 0 ? void 0 : strings.starSurveyFiveStarText,
17901
+ onStarRatingSelected
17902
+ ]);
17903
+ return (React.createElement(react.Stack, { verticalAlign: "center" },
17904
+ React.createElement(react.Stack, { className: titleContainerClassName$1 },
17905
+ React.createElement(react.Text, { className: helperTextStyle$1(theme) }, helperText)),
17906
+ React.createElement(react.Rating, { max: 5, size: react.RatingSize.Large, defaultRating: 0, allowZeroStars: true, rating: rating, onChange: onRatingChange, styles: ratingStyles(theme), icon: selectedIcon !== null && selectedIcon !== void 0 ? selectedIcon : 'SurveyStarIconFilled', unselectedIcon: unselectedIcon !== null && unselectedIcon !== void 0 ? unselectedIcon : 'SurveyStarIcon', ariaLabelFormat: strings === null || strings === void 0 ? void 0 : strings.starRatingAriaLabel })));
17907
+ };
17908
+
17909
+ // Copyright (c) Microsoft Corporation.
17910
+ // Licensed under the MIT License.
17911
+ /**
17912
+ * @private
17913
+ */
17914
+ const questionTextStyle = (theme) => react.mergeStyles({
17915
+ fontWeight: 600,
17916
+ fontSize: _pxToRem(14),
17917
+ lineHeight: _pxToRem(20),
17918
+ color: theme.palette.neutralPrimary,
17919
+ paddingTop: _pxToRem(20)
17920
+ });
17921
+ /**
17922
+ * @private
17923
+ */
17924
+ const helperTextStyle = (theme) => react.mergeStyles({
17925
+ fontWeight: 400,
17926
+ fontSize: _pxToRem(12),
17927
+ lineHeight: _pxToRem(16),
17928
+ color: theme.palette.neutralPrimary
17929
+ });
17930
+ /**
17931
+ * @private
17932
+ */
17933
+ const checkboxClassName = react.mergeStyles({
17934
+ padding: _pxToRem(8)
17935
+ });
17936
+
17937
+ // Copyright (c) Microsoft Corporation.
17938
+ // Licensed under the MIT License.
17939
+ /**
17940
+ * A component to allow users to send numerical ratings regarding call quality
17941
+ *
17942
+ * @internal
17943
+ */
17944
+ const _TagsSurvey = (props) => {
17945
+ const { issues, callIssuesToTag, categoryHeadings, onConfirm, strings } = props;
17946
+ const [selectedTags, setSelectedTags] = React.useState({});
17947
+ const tags = React.useMemo(() => {
17948
+ const tags = [];
17949
+ issues.forEach((issue) => {
17950
+ const issueCamelCase = (issue === null || issue === void 0 ? void 0 : issue.charAt(0).toLowerCase()) + (issue === null || issue === void 0 ? void 0 : issue.slice(1));
17951
+ const issueCategory = Object.keys(callIssuesToTag).find((key) => callIssuesToTag[key][issueCamelCase] !== undefined);
17952
+ if (issueCategory) {
17953
+ if (tags[issueCategory]) {
17954
+ tags[issueCategory].push({
17955
+ message: callIssuesToTag[issueCategory][issueCamelCase],
17956
+ issue: issue
17957
+ });
17958
+ }
17959
+ else {
17960
+ tags[issueCategory] = [
17961
+ {
17962
+ message: callIssuesToTag[issueCategory][issueCamelCase],
17963
+ issue: issue
17964
+ }
17965
+ ];
17966
+ }
17967
+ }
17968
+ });
17969
+ return tags;
17970
+ }, [issues, callIssuesToTag]);
17971
+ const onChange = React.useCallback((issue, issueCategory, checked) => {
17972
+ if (checked) {
17973
+ setSelectedTags((prevState) => {
17974
+ if (prevState[issueCategory]) {
17975
+ prevState[issueCategory].issues.push(issue);
17976
+ }
17977
+ else {
17978
+ prevState[issueCategory] = { score: 1, issues: [issue] };
17979
+ }
17980
+ return prevState;
17981
+ });
17982
+ }
17983
+ else {
17984
+ setSelectedTags((prevState) => {
17985
+ if (prevState[issueCategory]) {
17986
+ prevState[issueCategory].issues = prevState[issueCategory].issues.filter(function (value) {
17987
+ return value !== issue;
17988
+ });
17989
+ if (prevState[issueCategory].issues.length === 0) {
17990
+ delete prevState[issueCategory];
17991
+ }
17992
+ }
17993
+ return prevState;
17994
+ });
17995
+ }
17996
+ if (onConfirm) {
17997
+ onConfirm(selectedTags);
17998
+ }
17999
+ }, [onConfirm, selectedTags]);
18000
+ const theme = react.useTheme();
18001
+ return (React.createElement(React.Fragment, null,
18002
+ React.createElement(react.Stack, { verticalAlign: "center" },
18003
+ React.createElement(react.Text, { className: questionTextStyle(theme) }, strings === null || strings === void 0 ? void 0 : strings.tagsSurveyQuestion),
18004
+ React.createElement(react.Text, { className: helperTextStyle(theme) }, strings === null || strings === void 0 ? void 0 : strings.tagsSurveyHelperText)),
18005
+ React.createElement(react.Pivot, null, Object.keys(tags).map((key, i) => {
18006
+ return (React.createElement(react.PivotItem, { key: `key-${i}`, headerText: categoryHeadings[key], headerButtonProps: {
18007
+ 'data-order': i,
18008
+ 'data-title': key
18009
+ }, alwaysRender: true }, tags[key].map((t, i) => {
18010
+ return (React.createElement(react.Checkbox, { className: checkboxClassName, key: `checkBox_${i}`, label: t.message, onChange: (ev, checked) => onChange(t.issue, key, checked !== null && checked !== void 0 ? checked : false) }));
18011
+ })));
18012
+ }))));
18013
+ };
18014
+
17800
18015
  // Copyright (c) Microsoft Corporation.
17801
18016
  // Licensed under the MIT License.
17802
18017
  /**
@@ -19159,7 +19374,6 @@ const convertRemoteParticipantToParticipantListParticipantBeta = (userId, displa
19159
19374
  // Copyright (c) Microsoft Corporation.
19160
19375
  // Licensed under the MIT License.
19161
19376
  const convertRemoteParticipantsToParticipantListParticipants = (remoteParticipants, localUserCanRemoveOthers, isHideAttendeeNamesEnabled, localUserRole) => {
19162
- /* eslint-disable @typescript-eslint/explicit-function-return-type */
19163
19377
  const conversionCallback = (memoizeFn) => {
19164
19378
  return (remoteParticipants
19165
19379
  // Filter out MicrosoftBot participants
@@ -21690,7 +21904,7 @@ const CallCompositeIcon = (props) => (React.createElement(react.FontIcon, Object
21690
21904
  */
21691
21905
  const CallWithChatCompositeIcon = (props) => (React.createElement(react.FontIcon, Object.assign({}, props)));
21692
21906
 
21693
- var call$k={cameraLabel:"Camera",noCamerasLabel:"No cameras found",cameraPermissionDenied:"Your browser is blocking access to your camera",cameraTurnedOff:"Your camera is turned off",chatButtonLabel:"Chat",close:"Close",complianceBannerNowOnlyRecording:"You are now only recording this meeting.",complianceBannerNowOnlyTranscription:"You are now only transcribing this meeting.",complianceBannerRecordingAndTranscriptionSaved:"Recording and transcription are being saved.",complianceBannerRecordingAndTranscriptionStarted:"Recording and transcription have started.",complianceBannerRecordingAndTranscriptionStopped:"Recording and transcription have stopped.",complianceBannerRecordingSaving:"Recording is being saved.",complianceBannerRecordingStarted:"Recording has started.",complianceBannerRecordingStopped:"Recording has stopped.",complianceBannerTranscriptionStarted:"Transcription has started.",complianceBannerTranscriptionConsent:"By joining, you are giving consent for this meeting to be transcribed.",complianceBannerTranscriptionSaving:"Transcription is being saved.",complianceBannerTranscriptionStopped:"Transcription has stopped.",configurationPageTitle:"Start a call",copyInviteLinkButtonLabel:"Copy invite link",copyInviteLinkActionedAriaLabel:"Invite link copied",defaultPlaceHolder:"Select an option",dismissSidePaneButtonLabel:"Close",videoEffectsPaneTitle:"Effects",videoEffectsPaneBackgroundSelectionTitle:"Background",configurationPageVideoEffectsButtonLabel:"Effects",unableToStartVideoEffect:"Unable to apply video effect.",blurBackgroundEffectButtonLabel:"Blur",blurBackgroundTooltip:"Blur Background",removeBackgroundEffectButtonLabel:"None",removeBackgroundTooltip:"Remove Background",cameraOffBackgroundEffectWarningText:"Your camera is off. Turn on camera to see video effect.",failedToJoinCallDueToNoNetworkMoreDetails:"Call was disconnected due to a network issue. Check your connection and join again.",failedToJoinCallDueToNoNetworkTitle:"Call disconnected",failedToJoinTeamsMeetingReasonAccessDeniedMoreDetails:"You were not granted entry in the call. If this was a mistake, re-join the call.",failedToJoinTeamsMeetingReasonAccessDeniedTitle:"Dismissed from lobby",learnMore:"Learn more",leavingCallTitle:"Leaving...",leftCallMoreDetails:"If this was a mistake, re-join the call.",leftCallTitle:"You left the call",lobbyScreenConnectingToCallTitle:"Joining call",lobbyScreenWaitingToBeAdmittedTitle:"Waiting to be admitted",microphonePermissionDenied:"Your browser is blocking access to your microphone",microphoneToggleInLobbyNotAllowed:"Cannot mute or unmute while in lobby.",mutedMessage:"You're muted",networkReconnectMoreDetails:"Looks like something went wrong. We're trying to get back into the call.",networkReconnectTitle:"Hold on",notInvitedToRoomDetails:"You are not able to join this room because you do not have an invite.",notInvitedToRoomTitle:"Not invited to room",peopleButtonLabel:"People",selectedPeopleButtonLabel:"People Button Selected",peoplePaneTitle:"People",peopleButtonTooltipOpen:"Show participants",peopleButtonTooltipClose:"Hide participants",peoplePaneSubTitle:"In this call {numberOfPeople}",privacyPolicy:"Privacy policy",rejoinCallButtonLabel:"Re-join call",removedFromCallMoreDetails:"Another participant removed you from the call.",removedFromCallTitle:"You were removed",removeMenuLabel:"Remove",returnToCallButtonAriaDescription:"Return to Call",returnToCallButtonAriaLabel:"Back",roomNotFoundDetails:"The room ID provided could not be found.",roomNotFoundTitle:"Room not found",roomNotValidDetails:"This room is not valid at this current time.",roomNotValidTitle:"Room not valid",inviteToRoomRemovedDetails:"Your invite to join this room was removed.",inviteToRoomRemovedTitle:"Invite to room removed",soundLabel:"Sound",noMicrophonesLabel:"No microphones found",noSpeakersLabel:"No speakers found",startCallButtonLabel:"Start call",openDialpadButtonLabel:"Dial phone number",peoplePaneAddPeopleButtonLabel:"Add People",dialpadStartCallButtonLabel:"Call",dialpadModalTitle:"Dial Phone Number",dialpadModalAriaLabel:"Dialpad",dialpadCloseModalButtonAriaLabel:"Close dialpad",moreButtonCallingLabel:"More",resumeCallButtonLabel:"Resume",resumingCallButtonLabel:"Resuming...",resumeCallButtonAriaLabel:"Resume call",resumingCallButtonAriaLabel:"Resume call",holdScreenLabel:"You're on hold",openDtmfDialpadLabel:"Show dialpad",dtmfDialpadPlaceholderText:"Enter number",outboundCallingNoticeString:"Calling...",participantJoinedNoticeString:"{displayName} joined",twoParticipantJoinedNoticeString:"{displayName1} and {displayName2} have joined",threeParticipantJoinedNoticeString:"{displayName1}, {displayName2} and {displayName3} have joined",participantLeftNoticeString:"{displayName} left",twoParticipantLeftNoticeString:"{displayName1} and {displayName2} have left",threeParticipantLeftNoticeString:"{displayName1}, {displayName2} and {displayName3} have left",unnamedParticipantString:"unnamed participant",manyUnnamedParticipantsJoined:"unnamed participant and {numOfParticipants} other participants joined",manyUnnamedParticipantsLeft:"unnamed participant and {numOfParticipants} other participants left",manyParticipantsJoined:"{displayName1}, {displayName2}, {displayName3} and {numOfParticipants} other participants joined",manyParticipantsLeft:"{displayName1}, {displayName2}, {displayName3} and {numOfParticipants} other participants left",liveCaptionsLabel:"Live captions",captionsSettingsLabel:"Caption settings",startCaptionsButtonOnLabel:"Turn on captions",startCaptionsButtonOffLabel:"Turn off captions",startCaptionsButtonTooltipOnContent:"Turn off captions",startCaptionsButtonTooltipOffContent:"Turn on captions",captionsSettingsModalTitle:"Captions Settings",captionsSettingsSpokenLanguageDropdownLabel:"Spoken language",captionsSettingsCaptionLanguageDropdownLabel:"Captions language",captionsSettingsSpokenLanguageDropdownInfoText:"Language that everyone on this call is speaking.",captionsSettingsCaptionLanguageDropdownInfoText:"Captions will appear in this langugage.",captionsSettingsConfirmButtonLabel:"Confirm",captionsSettingsCancelButtonLabel:"Cancel",captionsSettingsModalAriaLabel:"Captions Setting Modal",captionsSettingsCloseModalButtonAriaLabel:"Close Captions Setting",captionsBannerMoreButtonCallingLabel:"More",captionsBannerMoreButtonTooltip:"More options",dismissModalAriaLabel:"Local and remote picture and picture, press enter to return to call",callRejectedTitle:"The call could not be completed",callRejectedMoreDetails:"The person you are trying to reach is unavailable. Please try again later.",spokenLanguageStrings:{"ar-ae":"Arabic - U.A.E.","ar-sa":"Arabic - Saudi Arabia","da-dk":"Danish","de-de":"German - Germany","en-au":"English - Australia","en-ca":"English - Canada","en-gb":"English - United Kingdom","en-in":"English - India","en-nz":"English - New Zealand","en-us":"English - United States","es-es":"Spanish - Spain (Modern Sort)","es-mx":"Spanish - Mexico","fi-fi":"Finnish","fr-ca":"French - Canada","fr-fr":"French - France","hi-in":"Hindi","it-it":"Italian - Italy","ja-jp":"Japanese","ko-kr":"Korean","nb-no":"Norwegian (Bokmål)","nl-be":"Dutch - Belgium","nl-nl":"Dutch - Netherlands","pl-pl":"Polish","pt-br":"Portuguese - Brazil","ru-ru":"Russian","sv-se":"Swedish","zh-cn":"Chinese - People's Republic of China","zh-hk":"Chinese - Hong Kong SAR","cs-cz":"Czech","pt-pt":"Portuguese - Portugal","tr-tr":"Turkish","vi-vn":"Vietnamese","th-th":"Thai","he-il":"Hebrew","cy-gb":"Welsh","uk-ua":"Ukrainian","el-gr":"Greek","hu-hu":"Hungarian","ro-ro":"Romanian","sk-sk":"Slovak","zh-tw":"Chinese - Taiwan"},captionLanguageStrings:{ar:"Arabic",da:"Danish",de:"German",en:"English",es:"Spanish",fi:"Finnish","fr-ca":"French - Canada",fr:"French - France",hi:"Hindi",it:"Italian",ja:"Japanese",ko:"Korean",nb:"Norwegian (Bokmål)",nl:"Dutch",pl:"Polish",pt:"Portuguese - Brazil",ru:"Russian",sv:"Swedish","zh-Hans":"Chinese (Simplified)","zh-Hant":"Chinese (Traditional)",cs:"Czech","pt-pt":"Portuguese - Portugal",tr:"Turkish",vi:"Vietnamese",th:"Thai",he:"Hebrew",cy:"Welsh",uk:"Ukrainian",el:"Greek",hu:"Hungarian",ro:"Romanian",sk:"Slovak"},captionsBannerSpinnerText:"Starting captions...",transferPageTransferorText:"Transferring...",transferPageTransferTargetText:"Connecting...",transferPageUnknownTransferorDisplayName:"Unknown",transferPageUnknownTransferTargetDisplayName:"Unknown",transferPageNoticeString:"You are being transferred",participantCouldNotBeReachedTitle:"Target participant is currently not available",participantCouldNotBeReachedMoreDetails:"Please contact participant when they are available",permissionToReachTargetParticipantNotAllowedTitle:"Permission to reach target participant is not allowed",permissionToReachTargetParticipantNotAllowedMoreDetails:"Please check that the target participant is in the same tenant",unableToResolveTenantTitle:"Unable to resolve tenant id for the target participant",unableToResolveTenantMoreDetails:"Please check the participant id is entered correctly",participantIdIsMalformedTitle:"Participant id is not in the correct format",participantIdIsMalformedMoreDetails:"Please check that the participant id is in the correct format",moreButtonGalleryControlLabel:"View",moreButtonGalleryPositionToggleLabel:"Move gallery to top",moreButtonGallerySpeakerLayoutLabel:"Speaker",moreButtonGalleryFloatingLocalLayoutLabel:"Dynamic",moreButtonGalleryDefaultLayoutLabel:"Gallery view",moreButtonGalleryFocusedContentLayoutLabel:"Focus on content",moreButtonLargeGalleryDefaultLayoutLabel:"Large Gallery",capabilityChangedNotification:{turnVideoOn:{lostDueToMeetingOption:"Your camera has been disabled. You can no longer share video.",grantedDueToMeetingOption:"Your camera has been enabled. Turn it on if you'd like to share video."},unmuteMic:{lostDueToMeetingOption:"Your mic has been disabled. You can no longer unmute.",grantedDueToMeetingOption:"Your mic has been enabled. Unmute if you'd like to speak."},shareScreen:{lostDueToRoleChangeToAttendee:"Your role has been changed. Some actions, like sharing content, won't be available to you.",grantedDueToRoleChangeToPresenter:"You're a presenter. You can share content and facilitate the meeting."}}};var chat$k={chatListHeader:"In this chat",uploadFile:"Upload File"};var callWithChat$k={chatButtonLabel:"Chat",chatButtonNewMessageNotificationLabel:"New Message",chatButtonTooltipClosedWithMessageCount:"Show chat ({unreadMessagesCount} unread)",chatButtonTooltipClose:"Hide chat",chatButtonTooltipOpen:"Show chat",chatPaneTitle:"Chat",copyInviteLinkButtonLabel:"Copy invite link",copyInviteLinkActionedAriaLabel:"Invite link copied",dismissSidePaneButtonLabel:"Close",moreDrawerAudioDeviceMenuTitle:"Audio Device",moreDrawerButtonLabel:"More options",moreDrawerButtonTooltip:"More options",moreDrawerMicrophoneMenuTitle:"Microphone",moreDrawerSpeakerMenuTitle:"Speaker",moreDrawerCaptionsMenuTitle:"Live captions",moreDrawerSpokenLanguageMenuTitle:"Spoken language",moreDrawerCaptionLanguageMenuTitle:"Caption language",moreDrawerGalleryOptionsMenuTitle:"Gallery options",peopleButtonLabel:"People",selectedPeopleButtonLabel:"People Button Selected",peopleButtonTooltipOpen:"Show participants",peopleButtonTooltipClose:"Hide participants",peoplePaneSubTitle:"In this call",peoplePaneTitle:"People",pictureInPictureTileAriaLabel:"Video Feeds. Click to return to call screen.",removeMenuLabel:"Remove",openDialpadButtonLabel:"Dial phone number",returnToCallButtonAriaDescription:"Return to Call",returnToCallButtonAriaLabel:"Back",peoplePaneAddPeopleButtonLabel:"Add People",dialpadStartCallButtonLabel:"Call",dialpadModalTitle:"Dial Phone Number",dialpadModalAriaLabel:"Dialpad",dialpadCloseModalButtonAriaLabel:"Close dialpad",openDtmfDialpadLabel:"Show dialpad",dtmfDialpadPlaceholderText:"Enter number"};var en_US = {call:call$k,chat:chat$k,callWithChat:callWithChat$k};
21907
+ var call$k={cameraLabel:"Camera",noCamerasLabel:"No cameras found",cameraPermissionDenied:"Your browser is blocking access to your camera",cameraTurnedOff:"Your camera is turned off",chatButtonLabel:"Chat",close:"Close",complianceBannerNowOnlyRecording:"You are now only recording this meeting.",complianceBannerNowOnlyTranscription:"You are now only transcribing this meeting.",complianceBannerRecordingAndTranscriptionSaved:"Recording and transcription are being saved.",complianceBannerRecordingAndTranscriptionStarted:"Recording and transcription have started.",complianceBannerRecordingAndTranscriptionStopped:"Recording and transcription have stopped.",complianceBannerRecordingSaving:"Recording is being saved.",complianceBannerRecordingStarted:"Recording has started.",complianceBannerRecordingStopped:"Recording has stopped.",complianceBannerTranscriptionStarted:"Transcription has started.",complianceBannerTranscriptionConsent:"By joining, you are giving consent for this meeting to be transcribed.",complianceBannerTranscriptionSaving:"Transcription is being saved.",complianceBannerTranscriptionStopped:"Transcription has stopped.",configurationPageTitle:"Start a call",copyInviteLinkButtonLabel:"Copy invite link",copyInviteLinkActionedAriaLabel:"Invite link copied",defaultPlaceHolder:"Select an option",dismissSidePaneButtonLabel:"Close",videoEffectsPaneTitle:"Effects",videoEffectsPaneBackgroundSelectionTitle:"Background",configurationPageVideoEffectsButtonLabel:"Effects",unableToStartVideoEffect:"Unable to apply video effect.",blurBackgroundEffectButtonLabel:"Blur",blurBackgroundTooltip:"Blur Background",removeBackgroundEffectButtonLabel:"None",removeBackgroundTooltip:"Remove Background",cameraOffBackgroundEffectWarningText:"Your camera is off. Turn on camera to see video effect.",failedToJoinCallDueToNoNetworkMoreDetails:"Call was disconnected due to a network issue. Check your connection and join again.",failedToJoinCallDueToNoNetworkTitle:"Call disconnected",failedToJoinTeamsMeetingReasonAccessDeniedMoreDetails:"You were not granted entry in the call. If this was a mistake, re-join the call.",failedToJoinTeamsMeetingReasonAccessDeniedTitle:"Dismissed from lobby",learnMore:"Learn more",leavingCallTitle:"Leaving...",leftCallMoreDetails:"If this was a mistake, re-join the call.",leftCallTitle:"You left the call",lobbyScreenConnectingToCallTitle:"Joining call",lobbyScreenWaitingToBeAdmittedTitle:"Waiting to be admitted",microphonePermissionDenied:"Your browser is blocking access to your microphone",microphoneToggleInLobbyNotAllowed:"Cannot mute or unmute while in lobby.",mutedMessage:"You're muted",networkReconnectMoreDetails:"Looks like something went wrong. We're trying to get back into the call.",networkReconnectTitle:"Hold on",notInvitedToRoomDetails:"You are not able to join this room because you do not have an invite.",notInvitedToRoomTitle:"Not invited to room",peopleButtonLabel:"People",selectedPeopleButtonLabel:"People Button Selected",peoplePaneTitle:"People",peopleButtonTooltipOpen:"Show participants",peopleButtonTooltipClose:"Hide participants",peoplePaneSubTitle:"In this call {numberOfPeople}",privacyPolicy:"Privacy policy",rejoinCallButtonLabel:"Re-join call",removedFromCallMoreDetails:"Another participant removed you from the call.",removedFromCallTitle:"You were removed",removeMenuLabel:"Remove",returnToCallButtonAriaDescription:"Return to Call",returnToCallButtonAriaLabel:"Back",roomNotFoundDetails:"The room ID provided could not be found.",roomNotFoundTitle:"Room not found",roomNotValidDetails:"This room is not valid at this current time.",roomNotValidTitle:"Room not valid",inviteToRoomRemovedDetails:"Your invite to join this room was removed.",inviteToRoomRemovedTitle:"Invite to room removed",soundLabel:"Sound",noMicrophonesLabel:"No microphones found",noSpeakersLabel:"No speakers found",startCallButtonLabel:"Start call",openDialpadButtonLabel:"Dial phone number",peoplePaneAddPeopleButtonLabel:"Add People",dialpadStartCallButtonLabel:"Call",dialpadModalTitle:"Dial Phone Number",dialpadModalAriaLabel:"Dialpad",dialpadCloseModalButtonAriaLabel:"Close dialpad",moreButtonCallingLabel:"More",resumeCallButtonLabel:"Resume",resumingCallButtonLabel:"Resuming...",resumeCallButtonAriaLabel:"Resume call",resumingCallButtonAriaLabel:"Resume call",holdScreenLabel:"You're on hold",openDtmfDialpadLabel:"Show dialpad",dtmfDialpadPlaceholderText:"Enter number",outboundCallingNoticeString:"Calling...",participantJoinedNoticeString:"{displayName} joined",twoParticipantJoinedNoticeString:"{displayName1} and {displayName2} have joined",threeParticipantJoinedNoticeString:"{displayName1}, {displayName2} and {displayName3} have joined",participantLeftNoticeString:"{displayName} left",twoParticipantLeftNoticeString:"{displayName1} and {displayName2} have left",threeParticipantLeftNoticeString:"{displayName1}, {displayName2} and {displayName3} have left",unnamedParticipantString:"unnamed participant",manyUnnamedParticipantsJoined:"unnamed participant and {numOfParticipants} other participants joined",manyUnnamedParticipantsLeft:"unnamed participant and {numOfParticipants} other participants left",manyParticipantsJoined:"{displayName1}, {displayName2}, {displayName3} and {numOfParticipants} other participants joined",manyParticipantsLeft:"{displayName1}, {displayName2}, {displayName3} and {numOfParticipants} other participants left",liveCaptionsLabel:"Live captions",captionsSettingsLabel:"Caption settings",startCaptionsButtonOnLabel:"Turn on captions",startCaptionsButtonOffLabel:"Turn off captions",startCaptionsButtonTooltipOnContent:"Turn off captions",startCaptionsButtonTooltipOffContent:"Turn on captions",captionsSettingsModalTitle:"Captions Settings",captionsSettingsSpokenLanguageDropdownLabel:"Spoken language",captionsSettingsCaptionLanguageDropdownLabel:"Captions language",captionsSettingsSpokenLanguageDropdownInfoText:"Language that everyone on this call is speaking.",captionsSettingsCaptionLanguageDropdownInfoText:"Captions will appear in this langugage.",captionsSettingsConfirmButtonLabel:"Confirm",captionsSettingsCancelButtonLabel:"Cancel",captionsSettingsModalAriaLabel:"Captions Setting Modal",captionsSettingsCloseModalButtonAriaLabel:"Close Captions Setting",captionsBannerMoreButtonCallingLabel:"More",captionsBannerMoreButtonTooltip:"More options",dismissModalAriaLabel:"Local and remote picture and picture, press enter to return to call",callRejectedTitle:"The call could not be completed",callRejectedMoreDetails:"The person you are trying to reach is unavailable. Please try again later.",spokenLanguageStrings:{"ar-ae":"Arabic - U.A.E.","ar-sa":"Arabic - Saudi Arabia","da-dk":"Danish","de-de":"German - Germany","en-au":"English - Australia","en-ca":"English - Canada","en-gb":"English - United Kingdom","en-in":"English - India","en-nz":"English - New Zealand","en-us":"English - United States","es-es":"Spanish - Spain (Modern Sort)","es-mx":"Spanish - Mexico","fi-fi":"Finnish","fr-ca":"French - Canada","fr-fr":"French - France","hi-in":"Hindi","it-it":"Italian - Italy","ja-jp":"Japanese","ko-kr":"Korean","nb-no":"Norwegian (Bokmål)","nl-be":"Dutch - Belgium","nl-nl":"Dutch - Netherlands","pl-pl":"Polish","pt-br":"Portuguese - Brazil","ru-ru":"Russian","sv-se":"Swedish","zh-cn":"Chinese - People's Republic of China","zh-hk":"Chinese - Hong Kong SAR","cs-cz":"Czech","pt-pt":"Portuguese - Portugal","tr-tr":"Turkish","vi-vn":"Vietnamese","th-th":"Thai","he-il":"Hebrew","cy-gb":"Welsh","uk-ua":"Ukrainian","el-gr":"Greek","hu-hu":"Hungarian","ro-ro":"Romanian","sk-sk":"Slovak","zh-tw":"Chinese - Taiwan"},captionLanguageStrings:{ar:"Arabic",da:"Danish",de:"German",en:"English",es:"Spanish",fi:"Finnish","fr-ca":"French - Canada",fr:"French - France",hi:"Hindi",it:"Italian",ja:"Japanese",ko:"Korean",nb:"Norwegian (Bokmål)",nl:"Dutch",pl:"Polish",pt:"Portuguese - Brazil",ru:"Russian",sv:"Swedish","zh-Hans":"Chinese (Simplified)","zh-Hant":"Chinese (Traditional)",cs:"Czech","pt-pt":"Portuguese - Portugal",tr:"Turkish",vi:"Vietnamese",th:"Thai",he:"Hebrew",cy:"Welsh",uk:"Ukrainian",el:"Greek",hu:"Hungarian",ro:"Romanian",sk:"Slovak"},captionsBannerSpinnerText:"Starting captions...",transferPageTransferorText:"Transferring...",transferPageTransferTargetText:"Connecting...",transferPageUnknownTransferorDisplayName:"Unknown",transferPageUnknownTransferTargetDisplayName:"Unknown",transferPageNoticeString:"You are being transferred",participantCouldNotBeReachedTitle:"Target participant is currently not available",participantCouldNotBeReachedMoreDetails:"Please contact participant when they are available",permissionToReachTargetParticipantNotAllowedTitle:"Permission to reach target participant is not allowed",permissionToReachTargetParticipantNotAllowedMoreDetails:"Please check that the target participant is in the same tenant",unableToResolveTenantTitle:"Unable to resolve tenant id for the target participant",unableToResolveTenantMoreDetails:"Please check the participant id is entered correctly",participantIdIsMalformedTitle:"Participant id is not in the correct format",participantIdIsMalformedMoreDetails:"Please check that the participant id is in the correct format",moreButtonGalleryControlLabel:"View",moreButtonGalleryPositionToggleLabel:"Move gallery to top",moreButtonGallerySpeakerLayoutLabel:"Speaker",moreButtonGalleryFloatingLocalLayoutLabel:"Dynamic",moreButtonGalleryDefaultLayoutLabel:"Gallery view",moreButtonGalleryFocusedContentLayoutLabel:"Focus on content",moreButtonLargeGalleryDefaultLayoutLabel:"Large Gallery",capabilityChangedNotification:{turnVideoOn:{lostDueToMeetingOption:"Your camera has been disabled. You can no longer share video.",grantedDueToMeetingOption:"Your camera has been enabled. Turn it on if you'd like to share video."},unmuteMic:{lostDueToMeetingOption:"Your mic has been disabled. You can no longer unmute.",grantedDueToMeetingOption:"Your mic has been enabled. Unmute if you'd like to speak."},shareScreen:{lostDueToRoleChangeToAttendee:"Your role has been changed. Some actions, like sharing content, won't be available to you.",grantedDueToRoleChangeToPresenter:"You're a presenter. You can share content and facilitate the meeting."}},surveyQuestion:"How was your call today?",starSurveyHelperText:"How was the quality of the call?",starSurveyOneStarText:"The quality was bad.",starSurveyTwoStarText:"The quality was poor.",starSurveyThreeStarText:"The quality was good.",starSurveyFourStarText:"The quality was great.",starSurveyFiveStarText:"The quality was excellent.",surveyConfirmButtonLabel:"Send Feedback",starRatingAriaLabel:"Select {0} of {1} stars",surveyCancelButtonAriaLabel:"Cancel",tagsSurveyQuestion:"What could have been better?",tagsSurveyHelperText:"Check any issues you experienced",surveyTextboxDefaultText:"Other,please specify",surveyIssues:{overallRating:{callCannotJoin:"I could not join call",callCannotInvite:"I could not invite others into the call",hadToRejoin:"I had to rejoin the call",callEndedUnexpectedly:"Call ended for me unexpectedly",otherIssues:"I was having other issues with the call"},audioRating:{noLocalAudio:"The other side could not hear any sound",noRemoteAudio:"I could not hear any sound",echo:"I heard echos on the call",audioNoise:"I heard noise on the call",lowVolume:"Volume was low",audioStoppedUnexpectedly:"Audio stopped unexpectedly",distortedSpeech:"Audio was distorted",audioInterruption:"Audio was interrupted",otherIssues:"I was having other audio issues in this call"},videoRating:{noVideoReceived:"I could not see any video",noVideoSent:"Others could not see me",lowQuality:"Video quality was low",freezes:"Video frozen",stoppedUnexpectedly:"Video stopped unexpectedly",darkVideoReceived:"I can only see dark screens when others turn on their camera",audioVideoOutOfSync:"Audio and Video was out of sync",otherIssues:"I was having other video issues in this call"},screenshareRating:{noContentLocal:"Other people could not see my screenshare",noContentRemote:"I could not see other people's screenshare",cannotPresent:"I could not present my screen",lowQuality:"Screen share quality was low",freezes:"Screen share frozen",stoppedUnexpectedly:"Screen share stopped unexpectedly",largeDelay:"Screen share has a large delay",otherIssues:"I was having other screen share issues in this call"}},SurveyIssuesHeadingStrings:{overallRating:"Overall",audioRating:"Audio",videoRating:"Video",screenshareRating:"Presenting"}};var chat$k={chatListHeader:"In this chat",uploadFile:"Upload File"};var callWithChat$k={chatButtonLabel:"Chat",chatButtonNewMessageNotificationLabel:"New Message",chatButtonTooltipClosedWithMessageCount:"Show chat ({unreadMessagesCount} unread)",chatButtonTooltipClose:"Hide chat",chatButtonTooltipOpen:"Show chat",chatPaneTitle:"Chat",copyInviteLinkButtonLabel:"Copy invite link",copyInviteLinkActionedAriaLabel:"Invite link copied",dismissSidePaneButtonLabel:"Close",moreDrawerAudioDeviceMenuTitle:"Audio Device",moreDrawerButtonLabel:"More options",moreDrawerButtonTooltip:"More options",moreDrawerMicrophoneMenuTitle:"Microphone",moreDrawerSpeakerMenuTitle:"Speaker",moreDrawerCaptionsMenuTitle:"Live captions",moreDrawerSpokenLanguageMenuTitle:"Spoken language",moreDrawerCaptionLanguageMenuTitle:"Caption language",moreDrawerGalleryOptionsMenuTitle:"Gallery options",peopleButtonLabel:"People",selectedPeopleButtonLabel:"People Button Selected",peopleButtonTooltipOpen:"Show participants",peopleButtonTooltipClose:"Hide participants",peoplePaneSubTitle:"In this call",peoplePaneTitle:"People",pictureInPictureTileAriaLabel:"Video Feeds. Click to return to call screen.",removeMenuLabel:"Remove",openDialpadButtonLabel:"Dial phone number",returnToCallButtonAriaDescription:"Return to Call",returnToCallButtonAriaLabel:"Back",peoplePaneAddPeopleButtonLabel:"Add People",dialpadStartCallButtonLabel:"Call",dialpadModalTitle:"Dial Phone Number",dialpadModalAriaLabel:"Dialpad",dialpadCloseModalButtonAriaLabel:"Close dialpad",openDtmfDialpadLabel:"Show dialpad",dtmfDialpadPlaceholderText:"Enter number"};var en_US = {call:call$k,chat:chat$k,callWithChat:callWithChat$k};
21694
21908
 
21695
21909
  // Copyright (c) Microsoft Corporation.
21696
21910
  // Licensed under the MIT License.
@@ -24082,6 +24296,10 @@ const createCompositeHandlers = memoizeOne((adapter) => ({
24082
24296
  /* @conditional-compile-remove(close-captions) */
24083
24297
  onSetCaptionLanguage: (language) => __awaiter$g(void 0, void 0, void 0, function* () {
24084
24298
  yield adapter.setCaptionLanguage(language);
24299
+ }),
24300
+ /* @conditional-compile-remove(end-of-call-survey) */
24301
+ onSubmitSurvey: (survey) => __awaiter$g(void 0, void 0, void 0, function* () {
24302
+ return yield adapter.submitSurvey(survey);
24085
24303
  })
24086
24304
  }));
24087
24305
 
@@ -25023,12 +25241,23 @@ const onFetchCustomButtonPropsTrampoline = (options) => {
25023
25241
  // Licensed under the MIT License.
25024
25242
  // Enforce a background color on control bar to ensure it matches the composite background color.
25025
25243
  const controlBarStyles = react.memoizeFunction((background) => ({ root: { background: background } }));
25244
+ const inferCallControlOptions = (mobileView, callControlOptions) => {
25245
+ if (callControlOptions === false) {
25246
+ return {};
25247
+ }
25248
+ const options = callControlOptions === true || callControlOptions === undefined ? {} : callControlOptions;
25249
+ if (mobileView) {
25250
+ // Set options to always not show screen share button for mobile
25251
+ options.screenShareButton = false;
25252
+ }
25253
+ return options;
25254
+ };
25026
25255
  /**
25027
25256
  * @private
25028
25257
  */
25029
25258
  const CallControls = (props) => {
25030
25259
  var _a, _b;
25031
- const options = React.useMemo(() => (typeof props.options === 'boolean' ? {} : props.options), [props.options]);
25260
+ const options = React.useMemo(() => inferCallControlOptions(!!props.isMobile, props.options), [props.isMobile, props.options]);
25032
25261
  /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(rooms) */
25033
25262
  const adapter = useAdapter();
25034
25263
  /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */ /* @conditional-compile-remove(close-captions) */ /* @conditional-compile-remove(raise-hand) */
@@ -25675,11 +25904,8 @@ const inferCommonCallControlOptions = (mobileView, commonCallControlOptions) =>
25675
25904
  if (mobileView) {
25676
25905
  // Set to compressed mode when composite is optimized for mobile
25677
25906
  options.displayType = 'compact';
25678
- // Do not show screen share button when composite is optimized for mobile unless the developer
25679
- // has explicitly opted in.
25680
- if (options.screenShareButton !== true) {
25681
- options.screenShareButton = false;
25682
- }
25907
+ // Set options to always not show screen share button for mobile
25908
+ options.screenShareButton = false;
25683
25909
  }
25684
25910
  return options;
25685
25911
  };
@@ -29891,6 +30117,152 @@ const moreDetailsStyles = {
29891
30117
  fontSize: '1rem'
29892
30118
  };
29893
30119
 
30120
+ // Copyright (c) Microsoft Corporation.
30121
+ // Licensed under the MIT License.
30122
+ /** @private */
30123
+ const StarSurvey = (
30124
+ /* @conditional-compile-remove(end-of-call-survey) */ props) => {
30125
+ /* @conditional-compile-remove(end-of-call-survey) */
30126
+ const { onStarRatingSelected } = props;
30127
+ /* @conditional-compile-remove(end-of-call-survey) */
30128
+ const strings = useLocale().strings.call;
30129
+ /* @conditional-compile-remove(end-of-call-survey) */
30130
+ const StarSurveyStrings = {
30131
+ starSurveyHelperText: strings.starSurveyHelperText,
30132
+ starSurveyOneStarText: strings.starSurveyOneStarText,
30133
+ starSurveyTwoStarText: strings.starSurveyTwoStarText,
30134
+ starSurveyThreeStarText: strings.starSurveyThreeStarText,
30135
+ starSurveyFourStarText: strings.starSurveyFourStarText,
30136
+ starSurveyFiveStarText: strings.starSurveyFiveStarText,
30137
+ starRatingAriaLabel: strings.starRatingAriaLabel
30138
+ };
30139
+ /* @conditional-compile-remove(end-of-call-survey) */
30140
+ return React.createElement(_StarSurvey, { strings: StarSurveyStrings, onStarRatingSelected: onStarRatingSelected });
30141
+ };
30142
+
30143
+ // Copyright (c) Microsoft Corporation.
30144
+ // Licensed under the MIT License.
30145
+ /** @private */
30146
+ const TagsSurvey = (
30147
+ /* @conditional-compile-remove(end-of-call-survey) */ props) => {
30148
+ /* @conditional-compile-remove(end-of-call-survey) */
30149
+ const strings = useLocale().strings.call;
30150
+ /* @conditional-compile-remove(end-of-call-survey) */
30151
+ const tagsSurveyStrings = {
30152
+ tagsSurveyQuestion: strings.tagsSurveyQuestion,
30153
+ tagsSurveyHelperText: strings.tagsSurveyHelperText
30154
+ };
30155
+ /* @conditional-compile-remove(end-of-call-survey) */
30156
+ return (React.createElement(_TagsSurvey, { callIssuesToTag: strings.surveyIssues, categoryHeadings: strings.SurveyIssuesHeadingStrings, issues: props.issues, onConfirm: props.onConfirm, strings: tagsSurveyStrings }));
30157
+ };
30158
+
30159
+ // Copyright (c) Microsoft Corporation.
30160
+ // Licensed under the MIT License.
30161
+ /**
30162
+ * @private
30163
+ */
30164
+ const SurveyPaneContent = (
30165
+ /* @conditional-compile-remove(end-of-call-survey) */ props) => {
30166
+ /* @conditional-compile-remove(end-of-call-survey) */
30167
+ const [showTagsSurvey, setShowTagsSurvey] = React.useState(false);
30168
+ /* @conditional-compile-remove(end-of-call-survey) */
30169
+ const [ratings, setRatings] = React.useState(0);
30170
+ /* @conditional-compile-remove(end-of-call-survey) */
30171
+ const [issuesSelected, setIssuesSelected] = React.useState();
30172
+ /* @conditional-compile-remove(end-of-call-survey) */
30173
+ const [showSubmitFeedbackButton, setShowSubmitFeedbackButton] = React.useState(false);
30174
+ /* @conditional-compile-remove(end-of-call-survey) */
30175
+ const strings = useLocale().strings.call;
30176
+ /* @conditional-compile-remove(end-of-call-survey) */
30177
+ const onStarRatingSelected = (ratings) => {
30178
+ if (ratings <= 3) {
30179
+ setShowTagsSurvey(true);
30180
+ }
30181
+ else {
30182
+ setShowSubmitFeedbackButton(true);
30183
+ }
30184
+ setRatings(ratings);
30185
+ };
30186
+ /* @conditional-compile-remove(end-of-call-survey) */
30187
+ const onIssuesSelected = (selectedTags) => {
30188
+ setIssuesSelected(selectedTags);
30189
+ setShowSubmitFeedbackButton(true);
30190
+ };
30191
+ /* @conditional-compile-remove(end-of-call-survey) */
30192
+ const issues = [
30193
+ 'NoLocalAudio',
30194
+ 'NoRemoteAudio',
30195
+ 'Echo',
30196
+ 'AudioNoise',
30197
+ 'LowVolume',
30198
+ 'AudioStoppedUnexpectedly',
30199
+ 'DistortedSpeech',
30200
+ 'AudioInterruption',
30201
+ 'OtherIssues',
30202
+ 'NoContentLocal',
30203
+ 'NoContentRemote',
30204
+ 'CannotPresent',
30205
+ 'LowQuality',
30206
+ 'Freezes',
30207
+ 'StoppedUnexpectedly',
30208
+ 'LargeDelay',
30209
+ 'NoVideoReceived',
30210
+ 'NoVideoSent',
30211
+ 'LowQuality',
30212
+ 'Freezes',
30213
+ 'StoppedUnexpectedly',
30214
+ 'DarkVideoReceived',
30215
+ 'AudioVideoOutOfSync',
30216
+ 'CallCannotJoin',
30217
+ 'CallCannotInvite',
30218
+ 'HadToRejoin',
30219
+ 'CallEndedUnexpectedly'
30220
+ ];
30221
+ /* @conditional-compile-remove(end-of-call-survey) */
30222
+ return (React.createElement(react.Stack, { verticalAlign: "space-between" },
30223
+ React.createElement(react.Stack, null,
30224
+ React.createElement(StarSurvey, { onStarRatingSelected: onStarRatingSelected }),
30225
+ showTagsSurvey && React.createElement(TagsSurvey, { issues: issues, onConfirm: onIssuesSelected })),
30226
+ showSubmitFeedbackButton && (React.createElement(react.Stack, { style: { borderTop: 'solid', borderTopColor: 'lightgrey' }, horizontalAlign: "end" },
30227
+ React.createElement(react.PrimaryButton, { style: { marginTop: '2rem' }, onClick: () => {
30228
+ const surveyResults = { overallRating: { score: ratings } };
30229
+ if (issuesSelected === null || issuesSelected === void 0 ? void 0 : issuesSelected.overallRating) {
30230
+ surveyResults.overallRating = { score: ratings, issues: issuesSelected.overallRating.issues };
30231
+ }
30232
+ if (issuesSelected === null || issuesSelected === void 0 ? void 0 : issuesSelected.audioRating) {
30233
+ surveyResults.audioRating = { score: ratings, issues: issuesSelected.audioRating.issues };
30234
+ }
30235
+ if (issuesSelected === null || issuesSelected === void 0 ? void 0 : issuesSelected.screenshareRating) {
30236
+ surveyResults.screenshareRating = { score: ratings, issues: issuesSelected.screenshareRating.issues };
30237
+ }
30238
+ if (issuesSelected === null || issuesSelected === void 0 ? void 0 : issuesSelected.videoRating) {
30239
+ surveyResults.videoRating = { score: ratings, issues: issuesSelected.videoRating.issues };
30240
+ }
30241
+ if (props.onSubmitSurvey) {
30242
+ props
30243
+ .onSubmitSurvey(surveyResults)
30244
+ .then(() => console.log('survey submitted successfully', surveyResults))
30245
+ .catch((e) => console.log('error when submitting survey: ' + e));
30246
+ }
30247
+ if (props.onDismissSidePane) {
30248
+ props.onDismissSidePane();
30249
+ }
30250
+ } }, strings.surveyConfirmButtonLabel)))));
30251
+ };
30252
+
30253
+ // Copyright (c) Microsoft Corporation.
30254
+ // Licensed under the MIT License.
30255
+ /** @private */
30256
+ const SurveyPane = (props) => {
30257
+ /* @conditional-compile-remove(end-of-call-survey) */
30258
+ const strings = useLocale().strings.call;
30259
+ /* @conditional-compile-remove(end-of-call-survey) */
30260
+ const [isOpen, setIsOpen] = React.useState(true);
30261
+ /* @conditional-compile-remove(end-of-call-survey) */
30262
+ return (React.createElement(react.Panel, { headerText: strings.surveyQuestion, isOpen: isOpen, onDismiss: () => setIsOpen(false), closeButtonAriaLabel: strings.surveyCancelButtonAriaLabel, type: react.PanelType.custom, customWidth: "32rem" },
30263
+ React.createElement(SurveyPaneContent, { onSubmitSurvey: props.onSubmitSurvey, onDismissSidePane: () => setIsOpen(false) })));
30264
+ };
30265
+
29894
30266
  // Copyright (c) Microsoft Corporation.
29895
30267
  // Licensed under the MIT License.
29896
30268
  /**
@@ -29899,14 +30271,18 @@ const moreDetailsStyles = {
29899
30271
  * @private
29900
30272
  */
29901
30273
  function NoticePage(props) {
30274
+ var _a;
29902
30275
  const adapter = useAdapter();
30276
+ /* @conditional-compile-remove(end-of-call-survey) */
30277
+ const handlers = useHandlers();
29903
30278
  return (React.createElement(react.Stack, { className: react.mergeStyles(props.pageStyle), verticalFill: true, verticalAlign: "center", horizontalAlign: "center", "data-ui-id": props.dataUiId, "aria-atomic": true },
29904
30279
  React.createElement(react.Stack, { className: react.mergeStyles(containerStyle), tokens: containerItemGap },
29905
30280
  props.iconName && React.createElement(CallCompositeIcon, { iconName: props.iconName }),
29906
30281
  React.createElement(react.Text, { className: react.mergeStyles(titleStyles), "aria-live": "assertive" }, props.title),
29907
30282
  React.createElement(react.Text, { className: react.mergeStyles(moreDetailsStyles), "aria-live": "assertive" }, props.moreDetails),
29908
30283
  !props.disableStartCallButton && (React.createElement(react.Stack, { styles: rejoinCallButtonContainerStyles },
29909
- React.createElement(StartCallButton, { onClick: () => adapter.joinCall(), disabled: false, rejoinCall: true, autoFocus: true }))))));
30284
+ React.createElement(StartCallButton, { onClick: () => adapter.joinCall(), disabled: false, rejoinCall: true, autoFocus: true })))),
30285
+ /* @conditional-compile-remove(end-of-call-survey) */ !((_a = props.surveyOptions) === null || _a === void 0 ? void 0 : _a.hideSurvey) && (React.createElement(SurveyPane, Object.assign({}, handlers)))));
29910
30286
  }
29911
30287
 
29912
30288
  // Copyright (c) Microsoft Corporation.
@@ -30583,7 +30959,7 @@ const isShowing = (overrideSidePane) => {
30583
30959
  return !!(overrideSidePane === null || overrideSidePane === void 0 ? void 0 : overrideSidePane.isActive);
30584
30960
  };
30585
30961
  const MainScreen = (props) => {
30586
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
30962
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
30587
30963
  const adapter = useAdapter();
30588
30964
  const { camerasCount, microphonesCount } = useSelector$1(deviceCountSelector);
30589
30965
  const hasCameras = camerasCount > 0;
@@ -30671,20 +31047,30 @@ const MainScreen = (props) => {
30671
31047
  backgroundImage: (_k = (_j = props.options) === null || _j === void 0 ? void 0 : _j.branding) === null || _k === void 0 ? void 0 : _k.backgroundImage }));
30672
31048
  break;
30673
31049
  case 'accessDeniedTeamsMeeting':
30674
- pageElement = (React.createElement(NoticePage, { iconName: "NoticePageAccessDeniedTeamsMeeting", title: locale.strings.call.failedToJoinTeamsMeetingReasonAccessDeniedTitle, moreDetails: locale.strings.call.failedToJoinTeamsMeetingReasonAccessDeniedMoreDetails, dataUiId: 'access-denied-teams-meeting-page' }));
31050
+ pageElement = (React.createElement(NoticePage, { iconName: "NoticePageAccessDeniedTeamsMeeting", title: locale.strings.call.failedToJoinTeamsMeetingReasonAccessDeniedTitle, moreDetails: locale.strings.call.failedToJoinTeamsMeetingReasonAccessDeniedMoreDetails, dataUiId: 'access-denied-teams-meeting-page',
31051
+ /* @conditional-compile-remove(end-of-call-survey) */
31052
+ surveyOptions: { hideSurvey: true } }));
30675
31053
  break;
30676
31054
  case 'removedFromCall':
30677
- pageElement = (React.createElement(NoticePage, { iconName: "NoticePageRemovedFromCall", title: locale.strings.call.removedFromCallTitle, moreDetails: locale.strings.call.removedFromCallMoreDetails, dataUiId: 'removed-from-call-page' }));
31055
+ pageElement = (React.createElement(NoticePage, { iconName: "NoticePageRemovedFromCall", title: locale.strings.call.removedFromCallTitle, moreDetails: locale.strings.call.removedFromCallMoreDetails, dataUiId: 'removed-from-call-page',
31056
+ /* @conditional-compile-remove(end-of-call-survey) */
31057
+ surveyOptions: { hideSurvey: true } }));
30678
31058
  break;
30679
31059
  case 'joinCallFailedDueToNoNetwork':
30680
- pageElement = (React.createElement(NoticePage, { iconName: "NoticePageJoinCallFailedDueToNoNetwork", title: locale.strings.call.failedToJoinCallDueToNoNetworkTitle, moreDetails: locale.strings.call.failedToJoinCallDueToNoNetworkMoreDetails, dataUiId: 'join-call-failed-due-to-no-network-page' }));
31060
+ pageElement = (React.createElement(NoticePage, { iconName: "NoticePageJoinCallFailedDueToNoNetwork", title: locale.strings.call.failedToJoinCallDueToNoNetworkTitle, moreDetails: locale.strings.call.failedToJoinCallDueToNoNetworkMoreDetails, dataUiId: 'join-call-failed-due-to-no-network-page',
31061
+ /* @conditional-compile-remove(end-of-call-survey) */
31062
+ surveyOptions: { hideSurvey: true } }));
30681
31063
  break;
30682
31064
  case 'leaving':
30683
- pageElement = (React.createElement(NoticePage, { title: (_l = locale.strings.call.leavingCallTitle) !== null && _l !== void 0 ? _l : 'Leaving...', dataUiId: 'leaving-page', pageStyle: leavePageStyle, disableStartCallButton: true }));
31065
+ pageElement = (React.createElement(NoticePage, { title: (_l = locale.strings.call.leavingCallTitle) !== null && _l !== void 0 ? _l : 'Leaving...', dataUiId: 'leaving-page', pageStyle: leavePageStyle, disableStartCallButton: true,
31066
+ /* @conditional-compile-remove(end-of-call-survey) */
31067
+ surveyOptions: { hideSurvey: true } }));
30684
31068
  break;
30685
31069
  case 'leftCall': {
30686
31070
  const { title, moreDetails, disableStartCallButton, iconName } = getEndedCallPageProps(locale, endedCall);
30687
- pageElement = (React.createElement(NoticePage, { iconName: iconName, title: title, moreDetails: moreDetails, dataUiId: 'left-call-page', disableStartCallButton: disableStartCallButton }));
31071
+ pageElement = (React.createElement(NoticePage, { iconName: iconName, title: title, moreDetails: moreDetails, dataUiId: 'left-call-page', disableStartCallButton: disableStartCallButton,
31072
+ /* @conditional-compile-remove(end-of-call-survey) */
31073
+ surveyOptions: (_m = props.options) === null || _m === void 0 ? void 0 : _m.surveyOptions }));
30688
31074
  break;
30689
31075
  }
30690
31076
  case 'lobby':
@@ -30724,7 +31110,7 @@ const MainScreen = (props) => {
30724
31110
  case 'unsupportedEnvironment':
30725
31111
  pageElement = (React.createElement(React.Fragment, null,
30726
31112
  /* @conditional-compile-remove(unsupported-browser) */
30727
- React.createElement(UnsupportedBrowserPage, { onTroubleshootingClick: (_m = props.options) === null || _m === void 0 ? void 0 : _m.onEnvironmentInfoTroubleshootingClick, environmentInfo: adapter.getState().environmentInfo })));
31113
+ React.createElement(UnsupportedBrowserPage, { onTroubleshootingClick: (_o = props.options) === null || _o === void 0 ? void 0 : _o.onEnvironmentInfoTroubleshootingClick, environmentInfo: adapter.getState().environmentInfo })));
30728
31114
  break;
30729
31115
  }
30730
31116
  if (!pageElement) {
@@ -31378,6 +31764,8 @@ class AzureCommunicationCallAdapter {
31378
31764
  this.stopVideoBackgroundEffects.bind(this);
31379
31765
  /* @conditional-compile-remove(video-background-effects) */
31380
31766
  this.updateBackgroundPickerImages.bind(this);
31767
+ /* @conditional-compile-remove(end-of-call-survey) */
31768
+ this.submitSurvey.bind(this);
31381
31769
  }
31382
31770
  dispose() {
31383
31771
  this.resetDiagnosticsForwarder();
@@ -31622,9 +32010,9 @@ class AzureCommunicationCallAdapter {
31622
32010
  unmute() {
31623
32011
  return __awaiter$5(this, void 0, void 0, function* () {
31624
32012
  return yield this.asyncTeeErrorToEventEmitter(() => __awaiter$5(this, void 0, void 0, function* () {
31625
- var _a, _b;
32013
+ var _a, _b, _c;
31626
32014
  this.context.setIsLocalMicrophoneEnabled(true);
31627
- if (_isInCall((_a = this.call) === null || _a === void 0 ? void 0 : _a.state) && ((_b = this.call) === null || _b === void 0 ? void 0 : _b.isMuted)) {
32015
+ if ((_isInCall((_a = this.call) === null || _a === void 0 ? void 0 : _a.state) || _isInLobbyOrConnecting((_b = this.call) === null || _b === void 0 ? void 0 : _b.state)) && ((_c = this.call) === null || _c === void 0 ? void 0 : _c.isMuted)) {
31628
32016
  yield this.handlers.onToggleMicrophone();
31629
32017
  }
31630
32018
  }));
@@ -31816,6 +32204,12 @@ class AzureCommunicationCallAdapter {
31816
32204
  this.handlers.onSetSpokenLanguage(language);
31817
32205
  });
31818
32206
  }
32207
+ /* @conditional-compile-remove(end-of-call-survey) */
32208
+ submitSurvey(survey) {
32209
+ return __awaiter$5(this, void 0, void 0, function* () {
32210
+ return this.handlers.onSubmitSurvey(survey);
32211
+ });
32212
+ }
31819
32213
  getState() {
31820
32214
  return this.context.getState();
31821
32215
  }
@@ -32529,6 +32923,12 @@ class CallWithChatBackedCallAdapter {
32529
32923
  updateSelectedVideoBackgroundEffect(selectedVideoBackground) {
32530
32924
  return this.callWithChatAdapter.updateSelectedVideoBackgroundEffect(selectedVideoBackground);
32531
32925
  }
32926
+ /* @conditional-compile-remove(end-of-call-survey) */
32927
+ submitSurvey(survey) {
32928
+ return __awaiter$4(this, void 0, void 0, function* () {
32929
+ return this.callWithChatAdapter.submitSurvey(survey);
32930
+ });
32931
+ }
32532
32932
  }
32533
32933
  function callAdapterStateFromCallWithChatAdapterState(callWithChatAdapterState) {
32534
32934
  return {
@@ -32818,6 +33218,8 @@ const validNewChatMessage = (message) => !!message.senderDisplayName && (message
32818
33218
  // Licensed under the MIT License.
32819
33219
  const CallWithChatScreen = (props) => {
32820
33220
  const { callWithChatAdapter, fluentTheme, formFactor = 'desktop' } = props;
33221
+ /* @conditional-compile-remove(end-of-call-survey) */
33222
+ const { surveyOptions } = props;
32821
33223
  const mobileView = formFactor === 'mobile';
32822
33224
  if (!callWithChatAdapter) {
32823
33225
  throw new Error('CallWithChatAdapter is undefined');
@@ -32934,6 +33336,8 @@ const CallWithChatScreen = (props) => {
32934
33336
  galleryOptions: props.galleryOptions,
32935
33337
  /* @conditional-compile-remove(click-to-call) */
32936
33338
  localVideoTile: props.localVideoTile,
33339
+ /* @conditional-compile-remove(end-of-call-survey) */
33340
+ surveyOptions: surveyOptions,
32937
33341
  /* @conditional-compile-remove(custom-branding) */
32938
33342
  branding: {
32939
33343
  logo: props.logo,
@@ -32959,6 +33363,8 @@ const CallWithChatScreen = (props) => {
32959
33363
  props.localVideoTile,
32960
33364
  /* @conditional-compile-remove(pinned-participants) */
32961
33365
  props.remoteVideoTileMenuOptions,
33366
+ /* @conditional-compile-remove(end-of-call-survey) */
33367
+ surveyOptions,
32962
33368
  /* @conditional-compile-remove(custom-branding) */
32963
33369
  props.logo,
32964
33370
  /* @conditional-compile-remove(custom-branding) */
@@ -33613,6 +34019,12 @@ class AzureCommunicationCallWithChatAdapter {
33613
34019
  updateSelectedVideoBackgroundEffect(selectedVideoBackground) {
33614
34020
  return this.callAdapter.updateSelectedVideoBackgroundEffect(selectedVideoBackground);
33615
34021
  }
34022
+ /* @conditional-compile-remove(end-of-call-survey) */
34023
+ submitSurvey(survey) {
34024
+ return __awaiter$2(this, void 0, void 0, function* () {
34025
+ return this.callAdapter.submitSurvey(survey);
34026
+ });
34027
+ }
33616
34028
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
33617
34029
  on(event, listener) {
33618
34030
  switch (event) {