@azure/communication-react 1.11.0-alpha-202312120013 → 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 (102) hide show
  1. package/dist/communication-react.d.ts +200 -1
  2. package/dist/dist-cjs/communication-react/index.js +488 -62
  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/chat-component-bindings/src/messageThreadSelector.js +20 -6
  18. package/dist/dist-esm/chat-component-bindings/src/messageThreadSelector.js.map +1 -1
  19. package/dist/dist-esm/communication-react/src/index.d.ts +2 -0
  20. package/dist/dist-esm/communication-react/src/index.js.map +1 -1
  21. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageComponentAsMessageBubble.js +4 -1
  22. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageComponentAsMessageBubble.js.map +1 -1
  23. package/dist/dist-esm/react-components/src/components/Survey/StarSurvey/StarSurvey.d.ts +64 -0
  24. package/dist/dist-esm/react-components/src/components/Survey/StarSurvey/StarSurvey.js +54 -0
  25. package/dist/dist-esm/react-components/src/components/Survey/StarSurvey/StarSurvey.js.map +1 -0
  26. package/dist/dist-esm/react-components/src/components/Survey/StarSurvey/StarSurvey.styles.d.ts +14 -0
  27. package/dist/dist-esm/react-components/src/components/Survey/StarSurvey/StarSurvey.styles.js +39 -0
  28. package/dist/dist-esm/react-components/src/components/Survey/StarSurvey/StarSurvey.styles.js.map +1 -0
  29. package/dist/dist-esm/react-components/src/components/Survey/SurveyTypes.d.ts +141 -0
  30. package/dist/dist-esm/react-components/src/components/Survey/SurveyTypes.js +4 -0
  31. package/dist/dist-esm/react-components/src/components/Survey/SurveyTypes.js.map +1 -0
  32. package/dist/dist-esm/react-components/src/components/Survey/TagsSurvey/TagsSurvey.d.ts +59 -0
  33. package/dist/dist-esm/react-components/src/components/Survey/TagsSurvey/TagsSurvey.js +81 -0
  34. package/dist/dist-esm/react-components/src/components/Survey/TagsSurvey/TagsSurvey.js.map +1 -0
  35. package/dist/dist-esm/react-components/src/components/Survey/TagsSurvey/TagsSurvey.styles.d.ts +14 -0
  36. package/dist/dist-esm/react-components/src/components/Survey/TagsSurvey/TagsSurvey.styles.js +30 -0
  37. package/dist/dist-esm/react-components/src/components/Survey/TagsSurvey/TagsSurvey.styles.js.map +1 -0
  38. package/dist/dist-esm/react-components/src/components/index.d.ts +5 -0
  39. package/dist/dist-esm/react-components/src/components/index.js +6 -0
  40. package/dist/dist-esm/react-components/src/components/index.js.map +1 -1
  41. package/dist/dist-esm/react-components/src/components/styles/MessageThread.styles.d.ts +1 -1
  42. package/dist/dist-esm/react-components/src/components/styles/MessageThread.styles.js +13 -9
  43. package/dist/dist-esm/react-components/src/components/styles/MessageThread.styles.js.map +1 -1
  44. package/dist/dist-esm/react-components/src/index.d.ts +2 -0
  45. package/dist/dist-esm/react-components/src/index.js.map +1 -1
  46. package/dist/dist-esm/react-components/src/theming/icons.d.ts +2 -0
  47. package/dist/dist-esm/react-components/src/theming/icons.js +7 -1
  48. package/dist/dist-esm/react-components/src/theming/icons.js.map +1 -1
  49. package/dist/dist-esm/react-components/src/types/SurveyIssues.d.ts +45 -0
  50. package/dist/dist-esm/react-components/src/types/SurveyIssues.js +4 -0
  51. package/dist/dist-esm/react-components/src/types/SurveyIssues.js.map +1 -0
  52. package/dist/dist-esm/react-components/src/types/SurveyIssuesHeadingStrings.d.ts +11 -0
  53. package/dist/dist-esm/react-components/src/types/SurveyIssuesHeadingStrings.js +4 -0
  54. package/dist/dist-esm/react-components/src/types/SurveyIssuesHeadingStrings.js.map +1 -0
  55. package/dist/dist-esm/react-components/src/types/index.d.ts +2 -0
  56. package/dist/dist-esm/react-components/src/types/index.js +2 -0
  57. package/dist/dist-esm/react-components/src/types/index.js.map +1 -1
  58. package/dist/dist-esm/react-composites/src/composites/CallComposite/CallComposite.d.ts +33 -0
  59. package/dist/dist-esm/react-composites/src/composites/CallComposite/CallComposite.js +17 -7
  60. package/dist/dist-esm/react-composites/src/composites/CallComposite/CallComposite.js.map +1 -1
  61. package/dist/dist-esm/react-composites/src/composites/CallComposite/Strings.d.ts +61 -0
  62. package/dist/dist-esm/react-composites/src/composites/CallComposite/Strings.js.map +1 -1
  63. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/AzureCommunicationCallAdapter.d.ts +2 -0
  64. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/AzureCommunicationCallAdapter.js +11 -3
  65. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/AzureCommunicationCallAdapter.js.map +1 -1
  66. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/CallAdapter.d.ts +7 -0
  67. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/CallAdapter.js.map +1 -1
  68. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallControls.js +12 -1
  69. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallControls.js.map +1 -1
  70. package/dist/dist-esm/react-composites/src/composites/CallComposite/hooks/useHandlers.js +4 -0
  71. package/dist/dist-esm/react-composites/src/composites/CallComposite/hooks/useHandlers.js.map +1 -1
  72. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/NoticePage.d.ts +33 -0
  73. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/NoticePage.js +9 -1
  74. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/NoticePage.js.map +1 -1
  75. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatComposite.d.ts +33 -0
  76. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatComposite.js +6 -0
  77. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatComposite.js.map +1 -1
  78. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/AzureCommunicationCallWithChatAdapter.d.ts +2 -0
  79. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/AzureCommunicationCallWithChatAdapter.js +6 -0
  80. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/AzureCommunicationCallWithChatAdapter.js.map +1 -1
  81. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/CallWithChatAdapter.d.ts +7 -0
  82. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/CallWithChatAdapter.js.map +1 -1
  83. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/CallWithChatBackedCallAdapter.d.ts +2 -0
  84. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/CallWithChatBackedCallAdapter.js +6 -0
  85. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/CallWithChatBackedCallAdapter.js.map +1 -1
  86. package/dist/dist-esm/react-composites/src/composites/common/ControlBar/CommonCallControlBar.js +2 -5
  87. package/dist/dist-esm/react-composites/src/composites/common/ControlBar/CommonCallControlBar.js.map +1 -1
  88. package/dist/dist-esm/react-composites/src/composites/common/StarSurvey.d.ts +6 -0
  89. package/dist/dist-esm/react-composites/src/composites/common/StarSurvey.js +29 -0
  90. package/dist/dist-esm/react-composites/src/composites/common/StarSurvey.js.map +1 -0
  91. package/dist/dist-esm/react-composites/src/composites/common/SurveyPane.d.ts +7 -0
  92. package/dist/dist-esm/react-composites/src/composites/common/SurveyPane.js +23 -0
  93. package/dist/dist-esm/react-composites/src/composites/common/SurveyPane.js.map +1 -0
  94. package/dist/dist-esm/react-composites/src/composites/common/SurveyPaneContent.d.ts +10 -0
  95. package/dist/dist-esm/react-composites/src/composites/common/SurveyPaneContent.js +106 -0
  96. package/dist/dist-esm/react-composites/src/composites/common/SurveyPaneContent.js.map +1 -0
  97. package/dist/dist-esm/react-composites/src/composites/common/TagsSurvey.d.ts +8 -0
  98. package/dist/dist-esm/react-composites/src/composites/common/TagsSurvey.js +22 -0
  99. package/dist/dist-esm/react-composites/src/composites/common/TagsSurvey.js.map +1 -0
  100. package/dist/dist-esm/react-composites/src/composites/common/icons.d.ts +2 -0
  101. package/dist/dist-esm/react-composites/src/composites/localization/locales/en-US/strings.json +59 -0
  102. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"CallAdapter.js","sourceRoot":"","sources":["../../../../../../../../react-composites/src/composites/CallComposite/adapter/CallAdapter.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AA6DlC;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAwB;IACjD,0BAA0B;IAC1B,8BAA8B;IAC9B,UAAU;IACV,iBAAiB;IACjB,sDAAsD,CAAC,wBAAwB;CAChF,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { CallState, DeviceManagerState } from '@internal/calling-stateful-client';\n/* @conditional-compile-remove(close-captions) */\nimport { CaptionsInfo } from '@internal/calling-stateful-client';\n/* @conditional-compile-remove(video-background-effects) */\nimport type { BackgroundBlurConfig, BackgroundReplacementConfig } from '@azure/communication-calling';\n/* @conditional-compile-remove(capabilities) */\nimport type { CapabilitiesChangeInfo } from '@azure/communication-calling';\n/* @conditional-compile-remove(teams-identity-support) */\nimport { TeamsCall } from '@azure/communication-calling';\n/* @conditional-compile-remove(call-transfer) */\nimport { TransferRequestedEventArgs } from '@azure/communication-calling';\n/* @conditional-compile-remove(close-captions) */\nimport { StartCaptionsOptions } from '@azure/communication-calling';\n/* @conditional-compile-remove(unsupported-browser) */\nimport { EnvironmentInfo } from '@azure/communication-calling';\nimport type {\n AudioDeviceInfo,\n VideoDeviceInfo,\n Call,\n PermissionConstraints,\n RemoteParticipant,\n StartCallOptions,\n MediaDiagnosticChangedEventArgs,\n NetworkDiagnosticChangedEventArgs,\n PropertyChangedEvent\n} from '@azure/communication-calling';\nimport { CreateVideoStreamViewResult, VideoStreamOptions } from '@internal/react-components';\nimport type { CommunicationIdentifierKind } from '@azure/communication-common';\n/* @conditional-compile-remove(PSTN-calls) */\nimport { AddPhoneNumberOptions, DtmfTone } from '@azure/communication-calling';\n\n/* @conditional-compile-remove(PSTN-calls) */\nimport type {\n CommunicationIdentifier,\n CommunicationUserIdentifier,\n PhoneNumberIdentifier\n} from '@azure/communication-common';\nimport type { AdapterState, Disposable, AdapterError, AdapterErrors } from '../../common/adapters';\n/* @conditional-compile-remove(video-background-effects) */\nimport { VideoBackgroundEffectsDependency } from '@internal/calling-component-bindings';\n\n/**\n * Major UI screens shown in the {@link CallComposite}.\n *\n * @public\n */\nexport type CallCompositePage =\n | 'accessDeniedTeamsMeeting'\n | 'call'\n | 'configuration'\n | /* @conditional-compile-remove(PSTN-calls) */ 'hold'\n | 'joinCallFailedDueToNoNetwork'\n | 'leftCall'\n | 'leaving'\n | 'lobby'\n | 'removedFromCall'\n | /* @conditional-compile-remove(unsupported-browser) */ 'unsupportedEnvironment'\n | /* @conditional-compile-remove(call-transfer) */ 'transferring';\n\n/**\n * Subset of CallCompositePages that represent an end call state.\n * @private\n */\nexport const END_CALL_PAGES: CallCompositePage[] = [\n 'accessDeniedTeamsMeeting',\n 'joinCallFailedDueToNoNetwork',\n 'leftCall',\n 'removedFromCall',\n /* @conditional-compile-remove(unsupported-browser) */ 'unsupportedEnvironment'\n];\n\n/**\n * {@link CommonCallAdapter} state for pure UI purposes.\n *\n * @public\n */\nexport type CallAdapterUiState = {\n isLocalPreviewMicrophoneEnabled: boolean;\n page: CallCompositePage;\n /* @conditional-compile-remove(unsupported-browser) */\n unsupportedBrowserVersionsAllowed?: boolean;\n};\n\n/**\n * {@link CommonCallAdapter} state inferred from Azure Communication Services backend.\n *\n * @public\n */\nexport type CallAdapterClientState = {\n userId: CommunicationIdentifierKind;\n displayName?: string;\n call?: CallState;\n /* @conditional-compile-remove(calling-sounds) */\n /**\n * State to track who the original call went out to. will be undefined the call is not a outbound\n * modality. This includes, groupCalls, Rooms calls, and Teams InteropMeetings.\n */\n targetCallees?: CommunicationIdentifier[];\n devices: DeviceManagerState;\n endedCall?: CallState;\n isTeamsCall: boolean;\n /* @conditional-compile-remove(rooms) */\n /**\n * State to track whether the call is a rooms call.\n */\n isRoomsCall: boolean;\n /**\n * Latest error encountered for each operation performed via the adapter.\n */\n latestErrors: AdapterErrors;\n /* @conditional-compile-remove(PSTN-calls) */\n /**\n * Azure communications Phone number to make PSTN calls with.\n */\n alternateCallerId?: string;\n /* @conditional-compile-remove(unsupported-browser) */\n /**\n * Environment information about system the adapter is made on\n */\n environmentInfo?: EnvironmentInfo;\n /**\n * State to track whether the local participant's camera is on. To be used when creating a custom\n * control bar with the CallComposite.\n */\n cameraStatus?: 'On' | 'Off';\n /* @conditional-compile-remove(video-background-effects) */\n /**\n * Default set of background images for background replacement effect.\n */\n videoBackgroundImages?: VideoBackgroundImage[];\n /* @conditional-compile-remove(video-background-effects) */\n /**\n * Dependency to be injected for video background effect.\n */\n onResolveVideoEffectDependency?: () => Promise<VideoBackgroundEffectsDependency>;\n /* @conditional-compile-remove(video-background-effects) */\n /**\n * State to track the selected video background effect.\n */\n selectedVideoBackgroundEffect?: VideoBackgroundEffect;\n /* @conditional-compile-remove(call-transfer) */\n /**\n * Call from transfer request accepted by local user\n */\n acceptedTransferCallState?: CallState;\n /* @conditional-compile-remove(hide-attendee-name) */\n /**\n * Hide attendee names in teams meeting\n */\n hideAttendeeNames?: boolean;\n /* @conditional-compile-remove(calling-sounds) */\n /**\n * State to track the sounds to be used in the call.\n */\n sounds?: CallingSounds;\n};\n\n/**\n * {@link CommonCallAdapter} state.\n *\n * @public\n */\nexport type CallAdapterState = CallAdapterUiState & CallAdapterClientState;\n\n/**\n * Callback for {@link CallAdapterSubscribers} 'participantsJoined' event.\n *\n * @public\n */\nexport type ParticipantsJoinedListener = (event: { joined: RemoteParticipant[] }) => void;\n\n/**\n * Callback for {@link CallAdapterSubscribers} 'participantsLeft' event.\n *\n * @public\n */\nexport type ParticipantsLeftListener = (event: { removed: RemoteParticipant[] }) => void;\n\n/**\n * Callback for {@link CallAdapterSubscribers} 'isMuted' event.\n *\n * @public\n */\nexport type IsMutedChangedListener = (event: { identifier: CommunicationIdentifierKind; isMuted: boolean }) => void;\n\n/**\n * Callback for {@link CallAdapterSubscribers} 'callIdChanged' event.\n *\n * @public\n */\nexport type CallIdChangedListener = (event: { callId: string }) => void;\n\n/**\n * Callback for {@link CallAdapterSubscribers} 'isLocalScreenSharingActiveChanged' event.\n *\n * @public\n */\nexport type IsLocalScreenSharingActiveChangedListener = (event: { isScreenSharingOn: boolean }) => void;\n\n/**\n * Callback for {@link CallAdapterSubscribers} 'isSpeakingChanged' event.\n *\n * @public\n */\nexport type IsSpeakingChangedListener = (event: {\n identifier: CommunicationIdentifierKind;\n isSpeaking: boolean;\n}) => void;\n\n/**\n * Callback for {@link CallAdapterSubscribers} 'displayNameChanged' event.\n *\n * @public\n */\nexport type DisplayNameChangedListener = (event: {\n participantId: CommunicationIdentifierKind;\n displayName: string;\n}) => void;\n\n/**\n * Payload for {@link CallEndedListener} containing details on the ended call.\n *\n * @public\n */\nexport type CallAdapterCallEndedEvent = { callId: string };\n\n/**\n * Callback for {@link CallAdapterSubscribers} 'callEnded' event.\n *\n * @public\n */\nexport type CallEndedListener = (event: CallAdapterCallEndedEvent) => void;\n\n/**\n * Payload for {@link DiagnosticChangedEventListner} where there is a change in a media diagnostic.\n *\n * @public\n */\nexport type MediaDiagnosticChangedEvent = MediaDiagnosticChangedEventArgs & {\n type: 'media';\n};\n\n/**\n * Payload for {@link DiagnosticChangedEventListner} where there is a change in a network diagnostic.\n *\n * @public\n */\nexport type NetworkDiagnosticChangedEvent = NetworkDiagnosticChangedEventArgs & {\n type: 'network';\n};\n\n/**\n * Callback for {@link CallAdapterSubscribers} 'diagnosticChanged' event.\n *\n * @public\n */\nexport type DiagnosticChangedEventListner = (\n event: MediaDiagnosticChangedEvent | NetworkDiagnosticChangedEvent\n) => void;\n\n/* @conditional-compile-remove(video-background-effects) */\n/**\n * Contains the attibutes of a background image like url, name etc.\n *\n * @public\n */\nexport interface VideoBackgroundImage {\n /**\n * key for unique identification of the custom background\n */\n key: string;\n /**\n * URL of the uploaded background image.\n */\n url: string;\n /**\n * Image name to be displayed.\n */\n tooltipText?: string;\n}\n\n/**\n * @beta\n * Type for representing a custom sound to use for a calling event\n */\nexport type SoundEffect = {\n /**\n * Path to sound effect\n */\n url: string;\n};\n\n/**\n * @beta\n * Type for representing a set of sounds to use for different calling events\n */\nexport type CallingSounds = {\n /**\n * Sound to be played when the call ends\n */\n callEnded?: SoundEffect;\n /**\n * Sound to be played when the call is ringing\n */\n callRinging?: SoundEffect;\n /**\n * Sound to be played when the call is rejected by the user being callede\n */\n callBusy?: SoundEffect;\n};\n\n/**\n * Options for setting microphone and camera state when joining a call\n * true = turn on the device when joining call\n * false = turn off the device when joining call\n * 'keep'/undefined = retain devices' precall state\n *\n * @public\n */\nexport interface JoinCallOptions {\n /**\n * microphone state when joining call\n * true: turn on\n * false: turn off\n * 'keep': maintain precall state\n */\n microphoneOn?: boolean | 'keep';\n /**\n * camera state when joining call\n * true: turn on\n * false: turn off\n * 'keep': maintain precall state\n */\n cameraOn?: boolean | 'keep';\n}\n\n/* @conditional-compile-remove(close-captions) */\n/**\n * Callback for {@link CallAdapterSubscribers} 'captionsReceived' event.\n *\n * @public\n */\nexport type CaptionsReceivedListener = (event: { captionsInfo: CaptionsInfo }) => void;\n\n/* @conditional-compile-remove(close-captions) */\n/**\n * Callback for {@link CallAdapterSubscribers} 'isCaptionsActiveChanged' event.\n *\n * @public\n */\nexport type IsCaptionsActiveChangedListener = (event: { isActive: boolean }) => void;\n\n/* @conditional-compile-remove(close-captions) */\n/**\n * Callback for {@link CallAdapterSubscribers} 'isCaptionLanguageChanged' event.\n *\n * @public\n */\nexport type IsCaptionLanguageChangedListener = (event: { activeCaptionLanguage: string }) => void;\n\n/* @conditional-compile-remove(close-captions) */\n/**\n * Callback for {@link CallAdapterSubscribers} 'isSpokenLanguageChanged' event.\n *\n * @public\n */\nexport type IsSpokenLanguageChangedListener = (event: { activeSpokenLanguage: string }) => void;\n\n/* @conditional-compile-remove(call-transfer) */\n/**\n * Callback for {@link CallAdapterSubscribers} 'transferRequested' event.\n *\n * @beta\n */\nexport type TransferRequestedListener = (event: TransferRequestedEventArgs) => void;\n\n/* @conditional-compile-remove(capabilities) */\n/**\n * Callback for {@link CallAdapterSubscribers} 'capabilitiesChanged' event.\n *\n * @public\n */\nexport type CapabilitiesChangedListener = (data: CapabilitiesChangeInfo) => void;\n\n/* @conditional-compile-remove(video-background-effects) */\n/**\n * Contains the attibutes of a selected video background effect\n *\n * @public\n */\nexport type VideoBackgroundEffect =\n | VideoBackgroundNoEffect\n | VideoBackgroundBlurEffect\n | VideoBackgroundReplacementEffect;\n\n/**\n * Contains the attibutes to remove video background effect\n *\n * @public\n */\nexport interface VideoBackgroundNoEffect {\n /**\n * Name of effect to remove video background effect\n */\n effectName: 'none';\n}\n\n/* @conditional-compile-remove(video-background-effects) */\n/**\n * Contains the attibutes of the blur video background effect\n *\n * @public\n */\nexport interface VideoBackgroundBlurEffect extends BackgroundBlurConfig {\n /**\n * Name of effect to blur video background effect\n */\n effectName: 'blur';\n}\n\n/* @conditional-compile-remove(video-background-effects) */\n/**\n * Contains the attibutes of a selected replacement video background effect\n *\n * @public\n */\nexport interface VideoBackgroundReplacementEffect extends BackgroundReplacementConfig {\n /**\n * Name of effect to replace video background effect\n */\n effectName: 'replacement';\n /**\n * key for unique identification of the custom background\n */\n key?: string;\n}\n\n/**\n * Functionality for managing the current call.\n *\n * @public\n */\nexport interface CallAdapterCallOperations {\n /**\n * Leave the call\n *\n * @param forEveryone - Whether to remove all participants when leaving\n *\n * @public\n */\n leaveCall(forEveryone?: boolean): Promise<void>;\n /**\n * Start the camera\n * This method will start rendering a local camera view when the call is not active\n *\n * @param options - Options to control how video streams are rendered {@link @azure/communication-calling#VideoStreamOptions }\n *\n * @public\n */\n startCamera(options?: VideoStreamOptions): Promise<void>;\n /**\n * Stop the camera\n * This method will stop rendering a local camera view when the call is not active\n *\n * @public\n */\n stopCamera(): Promise<void>;\n /**\n * Mute the current user during the call or disable microphone locally\n *\n * @public\n */\n mute(): Promise<void>;\n /**\n * Unmute the current user during the call or enable microphone locally\n *\n * @public\n */\n unmute(): Promise<void>;\n /**\n * Start sharing the screen during a call.\n *\n * @public\n */\n startScreenShare(): Promise<void>;\n /* @conditional-compile-remove(raise-hand) */\n /**\n * Raise hand for current user\n *\n * @public\n */\n raiseHand(): Promise<void>;\n /* @conditional-compile-remove(raise-hand) */\n /**\n * lower hand for current user\n *\n * @public\n */\n lowerHand(): Promise<void>;\n /**\n * Stop sharing the screen\n *\n * @public\n */\n stopScreenShare(): Promise<void>;\n /**\n * Remove a participant from the call.\n *\n * @param userId - Id of the participant to be removed\n *\n * @public\n */\n removeParticipant(userId: string): Promise<void>;\n /* @conditional-compile-remove(PSTN-calls) */\n /**\n * Remove a participant from the call.\n * @param participant - {@link @azure/communication-common#CommunicationIdentifier} of the participant to be removed\n * @beta\n */\n removeParticipant(participant: CommunicationIdentifier): Promise<void>;\n /**\n * Create the html view for a stream.\n *\n * @remarks\n * This method is implemented for composite\n *\n * @param remoteUserId - Id of the participant to render, leave it undefined to create the local camera view\n * @param options - Options to control how video streams are rendered {@link @azure/communication-calling#VideoStreamOptions }\n *\n * @public\n */\n createStreamView(remoteUserId?: string, options?: VideoStreamOptions): Promise<void | CreateVideoStreamViewResult>;\n /**\n * Dispose the html view for a stream.\n *\n * @remarks\n * This method is implemented for composite\n *\n * @deprecated Use {@link disposeRemoteVideoStreamView}, {@link disposeLocalVideoStreamView} and {@link disposeRemoteVideoStreamView} instead.\n *\n * @param remoteUserId - Id of the participant to render, leave it undefined to dispose the local camera view\n * @param options - Options to control how video streams are rendered {@link @azure/communication-calling#VideoStreamOptions }\n *\n * @public\n */\n disposeStreamView(remoteUserId?: string, options?: VideoStreamOptions): Promise<void>;\n /**\n * Dispose the html view for a screen share stream\n *\n * @remarks\n * this method is implemented for composite\n *\n * @param remoteUserId - Id of the participant to dispose the screen share stream view for.\n *\n * @public\n */\n disposeScreenShareStreamView(remoteUserId: string): Promise<void>;\n /**\n * Dispose the html view for a remote video stream\n *\n * @param remoteUserId - Id of the participant to dispose\n *\n * @public\n */\n disposeRemoteVideoStreamView(remoteUserId: string): Promise<void>;\n /**\n * Dispose the html view for a local video stream\n *\n * @public\n */\n disposeLocalVideoStreamView(): Promise<void>;\n /* @conditional-compile-remove(PSTN-calls) */\n /**\n * Holds the call.\n *\n * @beta\n */\n holdCall(): Promise<void>;\n /* @conditional-compile-remove(PSTN-calls) */\n /**\n * Resumes the call from a `LocalHold` state.\n *\n * @beta\n */\n resumeCall(): Promise<void>;\n /* @conditional-compile-remove(PSTN-calls) */\n /**\n * Add a participant to the call.\n *\n * @beta\n */\n addParticipant(participant: PhoneNumberIdentifier, options?: AddPhoneNumberOptions): Promise<void>;\n /* @conditional-compile-remove(PSTN-calls) */\n addParticipant(participant: CommunicationUserIdentifier): Promise<void>;\n /* @conditional-compile-remove(PSTN-calls) */\n /**\n * send dtmf tone to another participant in a 1:1 PSTN call\n *\n * @beta\n */\n sendDtmfTone(dtmfTone: DtmfTone): Promise<void>;\n /* @conditional-compile-remove(unsupported-browser) */\n /**\n * Continues into a call when the browser version is not supported.\n */\n allowUnsupportedBrowserVersion(): void;\n /* @conditional-compile-remove(close-captions) */\n /**\n * Function to Start captions\n * @param options - options for start captions\n */\n startCaptions(options?: StartCaptionsOptions): Promise<void>;\n /* @conditional-compile-remove(close-captions) */\n /**\n * Function to set caption language\n * @param language - language set for caption\n */\n setCaptionLanguage(language: string): Promise<void>;\n /* @conditional-compile-remove(close-captions) */\n /**\n * Function to set spoken language\n * @param language - spoken language\n */\n setSpokenLanguage(language: string): Promise<void>;\n /* @conditional-compile-remove(close-captions) */\n /**\n * Funtion to stop captions\n */\n stopCaptions(): Promise<void>;\n /* @conditional-compile-remove(video-background-effects) */\n /**\n * Start the video background effect.\n *\n * @public\n */\n startVideoBackgroundEffect(videoBackgroundEffect: VideoBackgroundEffect): Promise<void>;\n /* @conditional-compile-remove(video-background-effects) */\n /**\n * Stop the video background effect.\n *\n * @public\n */\n stopVideoBackgroundEffects(): Promise<void>;\n /* @conditional-compile-remove(video-background-effects) */\n /**\n * Override the background picker images for background replacement effect.\n *\n * @param backgroundImages - Array of custom background images.\n *\n * @public\n */\n updateBackgroundPickerImages(backgroundImages: VideoBackgroundImage[]): void;\n /* @conditional-compile-remove(video-background-effects) */\n /**\n * Update the selected video background effect.\n *\n * @public\n */\n updateSelectedVideoBackgroundEffect(selectedVideoBackground: VideoBackgroundEffect): void;\n}\n\n/**\n * Functionality for managing devices within a call.\n *\n * @public\n */\nexport interface CallAdapterDeviceManagement {\n /**\n * Ask for permissions of devices.\n *\n * @remarks\n * Browser permission window will pop up if permissions are not granted yet\n *\n * @param constrain - Define constraints for accessing local devices {@link @azure/communication-calling#PermissionConstraints }\n *\n * @public\n */\n askDevicePermission(constrain: PermissionConstraints): Promise<void>;\n /**\n * Query for available camera devices.\n *\n * @remarks\n * This method should be called after askDevicePermission()\n *\n * @return An array of video device information entities {@link @azure/communication-calling#VideoDeviceInfo }\n *\n * @public\n */\n queryCameras(): Promise<VideoDeviceInfo[]>;\n /**\n * Query for available microphone devices.\n *\n * @remarks\n * This method should be called after askDevicePermission()\n *\n * @return An array of audio device information entities {@link @azure/communication-calling#AudioDeviceInfo }\n *\n * @public\n */\n queryMicrophones(): Promise<AudioDeviceInfo[]>;\n /**\n * Query for available microphone devices.\n *\n * @remarks\n * This method should be called after askDevicePermission()\n *\n * @return An array of audio device information entities {@link @azure/communication-calling#AudioDeviceInfo }\n *\n * @public\n */\n querySpeakers(): Promise<AudioDeviceInfo[]>;\n /**\n * Set the camera to use in the call.\n *\n * @param sourceInfo - Camera device to choose, pick one returned by {@link CallAdapterDeviceManagement#queryCameras }\n * @param options - Options to control how the camera stream is rendered {@link @azure/communication-calling#VideoStreamOptions }\n *\n * @public\n */\n setCamera(sourceInfo: VideoDeviceInfo, options?: VideoStreamOptions): Promise<void>;\n /**\n * Set the microphone to use in the call.\n *\n * @param sourceInfo - Microphone device to choose, pick one returned by {@link CallAdapterDeviceManagement#queryMicrophones }\n *\n * @public\n */\n setMicrophone(sourceInfo: AudioDeviceInfo): Promise<void>;\n /**\n * Set the speaker to use in the call.\n *\n * @param sourceInfo - Speaker device to choose, pick one returned by {@link CallAdapterDeviceManagement#querySpeakers }\n *\n * @public\n */\n setSpeaker(sourceInfo: AudioDeviceInfo): Promise<void>;\n}\n\n/**\n * Call composite events that can be subscribed to.\n *\n * @public\n */\nexport interface CallAdapterSubscribers {\n /**\n * Subscribe function for 'participantsJoined' event.\n */\n on(event: 'participantsJoined', listener: ParticipantsJoinedListener): void;\n /**\n * Subscribe function for 'participantsLeft' event.\n */\n on(event: 'participantsLeft', listener: ParticipantsLeftListener): void;\n /**\n * Subscribe function for 'isMutedChanged' event.\n *\n * @remarks\n * The event will be triggered whenever current user or remote user mute state changed\n *\n */\n on(event: 'isMutedChanged', listener: IsMutedChangedListener): void;\n /**\n * Subscribe function for 'callIdChanged' event.\n *\n * @remarks\n * The event will be triggered when callId of current user changed.\n *\n */\n on(event: 'callIdChanged', listener: CallIdChangedListener): void;\n /**\n * Subscribe function for 'isLocalScreenSharingActiveChanged' event.\n */\n on(event: 'isLocalScreenSharingActiveChanged', listener: IsLocalScreenSharingActiveChangedListener): void;\n /**\n * Subscribe function for 'displayNameChanged' event.\n */\n on(event: 'displayNameChanged', listener: DisplayNameChangedListener): void;\n /**\n * Subscribe function for 'isSpeakingChanged' event.\n */\n on(event: 'isSpeakingChanged', listener: IsSpeakingChangedListener): void;\n /**\n * Subscribe function for 'callEnded' event.\n */\n on(event: 'callEnded', listener: CallEndedListener): void;\n /**\n * Subscribe function for 'diagnosticChanged' event.\n *\n * This event fires whenever there is a change in user facing diagnostics about the ongoing call.\n */\n on(event: 'diagnosticChanged', listener: DiagnosticChangedEventListner): void;\n /**\n * Subscribe function for 'selectedMicrophoneChanged' event.\n *\n * This event fires whenever the user selects a new microphone device.\n */\n on(event: 'selectedMicrophoneChanged', listener: PropertyChangedEvent): void;\n /**\n * Subscribe function for 'selectedSpeakerChanged' event.\n *\n * This event fires whenever the user selects a new speaker device.\n */\n on(event: 'selectedSpeakerChanged', listener: PropertyChangedEvent): void;\n /**\n * Subscribe function for 'error' event.\n */\n on(event: 'error', listener: (e: AdapterError) => void): void;\n /* @conditional-compile-remove(close-captions) */\n /**\n * Subscribe function for 'captionsReceived' event.\n */\n on(event: 'captionsReceived', listener: CaptionsReceivedListener): void;\n /* @conditional-compile-remove(close-captions) */\n /**\n * Subscribe function for 'isCaptionsActiveChanged' event.\n */\n on(event: 'isCaptionsActiveChanged', listener: IsCaptionsActiveChangedListener): void;\n /* @conditional-compile-remove(close-captions) */\n /**\n * Subscribe function for 'isCaptionLanguageChanged' event.\n */\n on(event: 'isCaptionLanguageChanged', listener: IsCaptionLanguageChangedListener): void;\n /* @conditional-compile-remove(close-captions) */\n /**\n * Subscribe function for 'isSpokenLanguageChanged' event.\n */\n on(event: 'isSpokenLanguageChanged', listener: IsSpokenLanguageChangedListener): void;\n\n /* @conditional-compile-remove(call-transfer) */\n /**\n * Subscribe function for 'transferRequested' event.\n */\n on(event: 'transferRequested', listener: TransferRequestedListener): void;\n /* @conditional-compile-remove(capabilities) */\n /**\n * Subscribe function for 'capabilitiesChanged' event.\n */\n on(event: 'capabilitiesChanged', listener: CapabilitiesChangedListener): void;\n /* @conditional-compile-remove(rooms) */\n /**\n * Subscribe function for 'roleChanged' event.\n */\n on(event: 'roleChanged', listener: PropertyChangedEvent): void;\n\n /**\n * Unsubscribe function for 'participantsJoined' event.\n */\n off(event: 'participantsJoined', listener: ParticipantsJoinedListener): void;\n /**\n * Unsubscribe function for 'participantsLeft' event.\n */\n off(event: 'participantsLeft', listener: ParticipantsLeftListener): void;\n /**\n * Unsubscribe function for 'isMutedChanged' event.\n */\n off(event: 'isMutedChanged', listener: IsMutedChangedListener): void;\n /**\n * Unsubscribe function for 'callIdChanged' event.\n */\n off(event: 'callIdChanged', listener: CallIdChangedListener): void;\n /**\n * Unsubscribe function for 'isLocalScreenSharingActiveChanged' event.\n */\n off(event: 'isLocalScreenSharingActiveChanged', listener: IsLocalScreenSharingActiveChangedListener): void;\n /**\n * Unsubscribe function for 'displayNameChanged' event.\n */\n off(event: 'displayNameChanged', listener: DisplayNameChangedListener): void;\n /**\n * Unsubscribe function for 'isSpeakingChanged' event.\n */\n off(event: 'isSpeakingChanged', listener: IsSpeakingChangedListener): void;\n /**\n * Unsubscribe function for 'callEnded' event.\n */\n off(event: 'callEnded', listener: CallEndedListener): void;\n /**\n * Unsubscribe function for 'diagnosticChanged' event.\n */\n off(event: 'diagnosticChanged', listener: DiagnosticChangedEventListner): void;\n /**\n * Unsubscribe function for 'selectedMicrophoneChanged' event.\n */\n off(event: 'selectedMicrophoneChanged', listener: PropertyChangedEvent): void;\n /**\n * Unsubscribe function for 'selectedSpeakerChanged' event.\n */\n off(event: 'selectedSpeakerChanged', listener: PropertyChangedEvent): void;\n /**\n * Unsubscribe function for 'error' event.\n */\n off(event: 'error', listener: (e: AdapterError) => void): void;\n /* @conditional-compile-remove(close-captions) */\n /**\n * Unsubscribe function for 'captionsReceived' event.\n */\n off(event: 'captionsReceived', listener: CaptionsReceivedListener): void;\n /* @conditional-compile-remove(close-captions) */\n /**\n * Unsubscribe function for 'isCaptionsActiveChanged' event.\n */\n off(event: 'isCaptionsActiveChanged', listener: IsCaptionsActiveChangedListener): void;\n /* @conditional-compile-remove(close-captions) */\n /**\n * Unsubscribe function for 'isCaptionLanguageChanged' event.\n */\n off(event: 'isCaptionLanguageChanged', listener: IsCaptionLanguageChangedListener): void;\n /* @conditional-compile-remove(close-captions) */\n /**\n * Unsubscribe function for 'isSpokenLanguageChanged' event.\n */\n off(event: 'isSpokenLanguageChanged', listener: IsSpokenLanguageChangedListener): void;\n /* @conditional-compile-remove(call-transfer) */\n /**\n * Unsubscribe function for 'transferRequested' event.\n */\n off(event: 'transferRequested', listener: TransferRequestedListener): void;\n /* @conditional-compile-remove(capabilities) */\n /**\n * Unsubscribe function for 'capabilitiesChanged' event.\n */\n off(event: 'capabilitiesChanged', listener: CapabilitiesChangedListener): void;\n /* @conditional-compile-remove(rooms) */\n /**\n * Unsubscribe function for 'roleChanged' event.\n */\n off(event: 'roleChanged', listener: PropertyChangedEvent): void;\n}\n\n// This type remains for non-breaking change reason\n/**\n * Functionality for managing the current call or start a new call\n * @deprecated CallAdapter interface will be flatten, consider using CallAdapter directly\n * @public\n */\nexport interface CallAdapterCallManagement extends CallAdapterCallOperations {\n /**\n * Join the call with microphone initially on/off.\n * @deprecated Use joinCall(options?:JoinCallOptions) instead.\n * @param microphoneOn - Whether microphone is initially enabled\n *\n * @public\n */\n joinCall(microphoneOn?: boolean): Call | undefined;\n\n /**\n * Join the call with options bag to set microphone/camera initial state when joining call\n * true = turn on the device when joining call\n * false = turn off the device when joining call\n * 'keep'/undefined = retain devices' precall state\n *\n * @param options - param to set microphone/camera initially on/off/use precall state.\n *\n * @public\n */\n joinCall(options?: JoinCallOptions): Call | undefined;\n /**\n * Start the call.\n *\n * @param participants - An array of participant ids to join\n *\n * @public\n */\n startCall(participants: string[], options?: StartCallOptions): Call | undefined;\n /* @conditional-compile-remove(PSTN-calls) */\n /**\n * Start the call.\n * @param participants - An array of {@link @azure/communication-common#CommunicationIdentifier} to be called\n * @beta\n */\n startCall(participants: CommunicationIdentifier[], options?: StartCallOptions): Call | undefined;\n}\n\n// TODO: Flatten the adapter structure\n/**\n * {@link CallComposite} Adapter interface.\n *\n * @public\n */\nexport interface CommonCallAdapter\n extends AdapterState<CallAdapterState>,\n Disposable,\n CallAdapterCallOperations,\n CallAdapterDeviceManagement,\n CallAdapterSubscribers {\n /**\n * Join the call with microphone initially on/off.\n * @deprecated Use joinCall(options?:JoinCallOptions) instead.\n * @param microphoneOn - Whether microphone is initially enabled\n *\n * @public\n */\n joinCall(microphoneOn?: boolean): void;\n /**\n * Join the call with options bag to set microphone/camera initial state when joining call\n * true = turn on the device when joining call\n * false = turn off the device when joining call\n * 'keep'/undefined = retain devices' precall state\n *\n * @param options - param to set microphone/camera initially on/off/use precall state.\n *\n * @public\n */\n joinCall(options?: JoinCallOptions): void;\n /**\n * Start the call.\n *\n * @param participants - An array of participant ids to join\n *\n * @public\n */\n startCall(participants: string[], options?: StartCallOptions): void;\n /* @conditional-compile-remove(PSTN-calls) */\n /**\n * Start the call.\n * @param participants - An array of {@link @azure/communication-common#CommunicationIdentifier} to be called\n * @beta\n */\n startCall(participants: CommunicationIdentifier[], options?: StartCallOptions): void;\n}\n\n/**\n * An Adapter interface specific for Azure Communication identity which extends {@link CommonCallAdapter}.\n *\n * @public\n */\nexport interface CallAdapter extends CommonCallAdapter {\n /**\n * Join the call with microphone initially on/off.\n * @deprecated Use joinCall(options?:JoinCallOptions) instead.\n * @param microphoneOn - Whether microphone is initially enabled\n *\n * @public\n */\n joinCall(microphoneOn?: boolean): Call | undefined;\n\n /**\n * Join the call with options bag to set microphone/camera initial state when joining call\n * true = turn on the device when joining call\n * false = turn off the device when joining call\n * 'keep'/undefined = retain devices' precall state\n *\n * @param options - param to set microphone/camera initially on/off/use precall state.\n *\n * @public\n */\n joinCall(options?: JoinCallOptions): Call | undefined;\n /**\n * Start the call.\n *\n * @param participants - An array of participant ids to join\n *\n * @public\n */\n startCall(participants: string[], options?: StartCallOptions): Call | undefined;\n /* @conditional-compile-remove(PSTN-calls) */\n /**\n * Start the call.\n * @param participants - An array of {@link @azure/communication-common#CommunicationIdentifier} to be called\n * @beta\n */\n startCall(participants: CommunicationIdentifier[], options?: StartCallOptions): Call | undefined;\n}\n\n/* @conditional-compile-remove(teams-identity-support) */\n/**\n * An Adapter interface specific for Teams identity which extends {@link CommonCallAdapter}.\n *\n * @beta\n */\nexport interface TeamsCallAdapter extends CommonCallAdapter {\n /**\n * Join the call with microphone initially on/off.\n * @deprecated Use joinCall(options?:JoinCallOptions) instead.\n * @param microphoneOn - Whether microphone is initially enabled\n *\n * @beta\n */\n joinCall(microphoneOn?: boolean): TeamsCall | undefined;\n /**\n * Join the call with options bag to set microphone/camera initial state when joining call\n * true = turn on the device when joining call\n * false = turn off the device when joining call\n * 'keep'/undefined = retain devices' precall state\n *\n * @param options - param to set microphone/camera initially on/off.\n *\n * @public\n */\n joinCall(options?: JoinCallOptions): TeamsCall | undefined;\n /**\n * Start the call.\n *\n * @param participants - An array of participant ids to join\n *\n * @beta\n */\n startCall(participants: string[], options?: StartCallOptions): TeamsCall | undefined;\n /* @conditional-compile-remove(PSTN-calls) */\n /**\n * Start the call.\n * @param participants - An array of {@link @azure/communication-common#CommunicationIdentifier} to be called\n * @beta\n */\n startCall(participants: CommunicationIdentifier[], options?: StartCallOptions): TeamsCall | undefined;\n}\n"]}
1
+ {"version":3,"file":"CallAdapter.js","sourceRoot":"","sources":["../../../../../../../../react-composites/src/composites/CallComposite/adapter/CallAdapter.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AA+DlC;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAwB;IACjD,0BAA0B;IAC1B,8BAA8B;IAC9B,UAAU;IACV,iBAAiB;IACjB,sDAAsD,CAAC,wBAAwB;CAChF,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { CallState, DeviceManagerState } from '@internal/calling-stateful-client';\n/* @conditional-compile-remove(close-captions) */\nimport { CaptionsInfo } from '@internal/calling-stateful-client';\n/* @conditional-compile-remove(video-background-effects) */\nimport type { BackgroundBlurConfig, BackgroundReplacementConfig } from '@azure/communication-calling';\n/* @conditional-compile-remove(capabilities) */\nimport type { CapabilitiesChangeInfo } from '@azure/communication-calling';\n/* @conditional-compile-remove(teams-identity-support) */\nimport { TeamsCall } from '@azure/communication-calling';\n/* @conditional-compile-remove(call-transfer) */\nimport { TransferRequestedEventArgs } from '@azure/communication-calling';\n/* @conditional-compile-remove(close-captions) */\nimport { StartCaptionsOptions } from '@azure/communication-calling';\n/* @conditional-compile-remove(unsupported-browser) */\nimport { EnvironmentInfo } from '@azure/communication-calling';\nimport type {\n AudioDeviceInfo,\n VideoDeviceInfo,\n Call,\n PermissionConstraints,\n RemoteParticipant,\n StartCallOptions,\n MediaDiagnosticChangedEventArgs,\n NetworkDiagnosticChangedEventArgs,\n PropertyChangedEvent\n} from '@azure/communication-calling';\nimport { CreateVideoStreamViewResult, VideoStreamOptions } from '@internal/react-components';\nimport type { CommunicationIdentifierKind } from '@azure/communication-common';\n/* @conditional-compile-remove(PSTN-calls) */\nimport { AddPhoneNumberOptions, DtmfTone } from '@azure/communication-calling';\n\n/* @conditional-compile-remove(PSTN-calls) */\nimport type {\n CommunicationIdentifier,\n CommunicationUserIdentifier,\n PhoneNumberIdentifier\n} from '@azure/communication-common';\nimport type { AdapterState, Disposable, AdapterError, AdapterErrors } from '../../common/adapters';\n/* @conditional-compile-remove(video-background-effects) */\nimport { VideoBackgroundEffectsDependency } from '@internal/calling-component-bindings';\n/* @conditional-compile-remove(end-of-call-survey) */\nimport { CallSurvey, CallSurveyResponse } from '@azure/communication-calling';\n\n/**\n * Major UI screens shown in the {@link CallComposite}.\n *\n * @public\n */\nexport type CallCompositePage =\n | 'accessDeniedTeamsMeeting'\n | 'call'\n | 'configuration'\n | /* @conditional-compile-remove(PSTN-calls) */ 'hold'\n | 'joinCallFailedDueToNoNetwork'\n | 'leftCall'\n | 'leaving'\n | 'lobby'\n | 'removedFromCall'\n | /* @conditional-compile-remove(unsupported-browser) */ 'unsupportedEnvironment'\n | /* @conditional-compile-remove(call-transfer) */ 'transferring';\n\n/**\n * Subset of CallCompositePages that represent an end call state.\n * @private\n */\nexport const END_CALL_PAGES: CallCompositePage[] = [\n 'accessDeniedTeamsMeeting',\n 'joinCallFailedDueToNoNetwork',\n 'leftCall',\n 'removedFromCall',\n /* @conditional-compile-remove(unsupported-browser) */ 'unsupportedEnvironment'\n];\n\n/**\n * {@link CommonCallAdapter} state for pure UI purposes.\n *\n * @public\n */\nexport type CallAdapterUiState = {\n isLocalPreviewMicrophoneEnabled: boolean;\n page: CallCompositePage;\n /* @conditional-compile-remove(unsupported-browser) */\n unsupportedBrowserVersionsAllowed?: boolean;\n};\n\n/**\n * {@link CommonCallAdapter} state inferred from Azure Communication Services backend.\n *\n * @public\n */\nexport type CallAdapterClientState = {\n userId: CommunicationIdentifierKind;\n displayName?: string;\n call?: CallState;\n /* @conditional-compile-remove(calling-sounds) */\n /**\n * State to track who the original call went out to. will be undefined the call is not a outbound\n * modality. This includes, groupCalls, Rooms calls, and Teams InteropMeetings.\n */\n targetCallees?: CommunicationIdentifier[];\n devices: DeviceManagerState;\n endedCall?: CallState;\n isTeamsCall: boolean;\n /* @conditional-compile-remove(rooms) */\n /**\n * State to track whether the call is a rooms call.\n */\n isRoomsCall: boolean;\n /**\n * Latest error encountered for each operation performed via the adapter.\n */\n latestErrors: AdapterErrors;\n /* @conditional-compile-remove(PSTN-calls) */\n /**\n * Azure communications Phone number to make PSTN calls with.\n */\n alternateCallerId?: string;\n /* @conditional-compile-remove(unsupported-browser) */\n /**\n * Environment information about system the adapter is made on\n */\n environmentInfo?: EnvironmentInfo;\n /**\n * State to track whether the local participant's camera is on. To be used when creating a custom\n * control bar with the CallComposite.\n */\n cameraStatus?: 'On' | 'Off';\n /* @conditional-compile-remove(video-background-effects) */\n /**\n * Default set of background images for background replacement effect.\n */\n videoBackgroundImages?: VideoBackgroundImage[];\n /* @conditional-compile-remove(video-background-effects) */\n /**\n * Dependency to be injected for video background effect.\n */\n onResolveVideoEffectDependency?: () => Promise<VideoBackgroundEffectsDependency>;\n /* @conditional-compile-remove(video-background-effects) */\n /**\n * State to track the selected video background effect.\n */\n selectedVideoBackgroundEffect?: VideoBackgroundEffect;\n /* @conditional-compile-remove(call-transfer) */\n /**\n * Call from transfer request accepted by local user\n */\n acceptedTransferCallState?: CallState;\n /* @conditional-compile-remove(hide-attendee-name) */\n /**\n * Hide attendee names in teams meeting\n */\n hideAttendeeNames?: boolean;\n /* @conditional-compile-remove(calling-sounds) */\n /**\n * State to track the sounds to be used in the call.\n */\n sounds?: CallingSounds;\n};\n\n/**\n * {@link CommonCallAdapter} state.\n *\n * @public\n */\nexport type CallAdapterState = CallAdapterUiState & CallAdapterClientState;\n\n/**\n * Callback for {@link CallAdapterSubscribers} 'participantsJoined' event.\n *\n * @public\n */\nexport type ParticipantsJoinedListener = (event: { joined: RemoteParticipant[] }) => void;\n\n/**\n * Callback for {@link CallAdapterSubscribers} 'participantsLeft' event.\n *\n * @public\n */\nexport type ParticipantsLeftListener = (event: { removed: RemoteParticipant[] }) => void;\n\n/**\n * Callback for {@link CallAdapterSubscribers} 'isMuted' event.\n *\n * @public\n */\nexport type IsMutedChangedListener = (event: { identifier: CommunicationIdentifierKind; isMuted: boolean }) => void;\n\n/**\n * Callback for {@link CallAdapterSubscribers} 'callIdChanged' event.\n *\n * @public\n */\nexport type CallIdChangedListener = (event: { callId: string }) => void;\n\n/**\n * Callback for {@link CallAdapterSubscribers} 'isLocalScreenSharingActiveChanged' event.\n *\n * @public\n */\nexport type IsLocalScreenSharingActiveChangedListener = (event: { isScreenSharingOn: boolean }) => void;\n\n/**\n * Callback for {@link CallAdapterSubscribers} 'isSpeakingChanged' event.\n *\n * @public\n */\nexport type IsSpeakingChangedListener = (event: {\n identifier: CommunicationIdentifierKind;\n isSpeaking: boolean;\n}) => void;\n\n/**\n * Callback for {@link CallAdapterSubscribers} 'displayNameChanged' event.\n *\n * @public\n */\nexport type DisplayNameChangedListener = (event: {\n participantId: CommunicationIdentifierKind;\n displayName: string;\n}) => void;\n\n/**\n * Payload for {@link CallEndedListener} containing details on the ended call.\n *\n * @public\n */\nexport type CallAdapterCallEndedEvent = { callId: string };\n\n/**\n * Callback for {@link CallAdapterSubscribers} 'callEnded' event.\n *\n * @public\n */\nexport type CallEndedListener = (event: CallAdapterCallEndedEvent) => void;\n\n/**\n * Payload for {@link DiagnosticChangedEventListner} where there is a change in a media diagnostic.\n *\n * @public\n */\nexport type MediaDiagnosticChangedEvent = MediaDiagnosticChangedEventArgs & {\n type: 'media';\n};\n\n/**\n * Payload for {@link DiagnosticChangedEventListner} where there is a change in a network diagnostic.\n *\n * @public\n */\nexport type NetworkDiagnosticChangedEvent = NetworkDiagnosticChangedEventArgs & {\n type: 'network';\n};\n\n/**\n * Callback for {@link CallAdapterSubscribers} 'diagnosticChanged' event.\n *\n * @public\n */\nexport type DiagnosticChangedEventListner = (\n event: MediaDiagnosticChangedEvent | NetworkDiagnosticChangedEvent\n) => void;\n\n/* @conditional-compile-remove(video-background-effects) */\n/**\n * Contains the attibutes of a background image like url, name etc.\n *\n * @public\n */\nexport interface VideoBackgroundImage {\n /**\n * key for unique identification of the custom background\n */\n key: string;\n /**\n * URL of the uploaded background image.\n */\n url: string;\n /**\n * Image name to be displayed.\n */\n tooltipText?: string;\n}\n\n/**\n * @beta\n * Type for representing a custom sound to use for a calling event\n */\nexport type SoundEffect = {\n /**\n * Path to sound effect\n */\n url: string;\n};\n\n/**\n * @beta\n * Type for representing a set of sounds to use for different calling events\n */\nexport type CallingSounds = {\n /**\n * Sound to be played when the call ends\n */\n callEnded?: SoundEffect;\n /**\n * Sound to be played when the call is ringing\n */\n callRinging?: SoundEffect;\n /**\n * Sound to be played when the call is rejected by the user being callede\n */\n callBusy?: SoundEffect;\n};\n\n/**\n * Options for setting microphone and camera state when joining a call\n * true = turn on the device when joining call\n * false = turn off the device when joining call\n * 'keep'/undefined = retain devices' precall state\n *\n * @public\n */\nexport interface JoinCallOptions {\n /**\n * microphone state when joining call\n * true: turn on\n * false: turn off\n * 'keep': maintain precall state\n */\n microphoneOn?: boolean | 'keep';\n /**\n * camera state when joining call\n * true: turn on\n * false: turn off\n * 'keep': maintain precall state\n */\n cameraOn?: boolean | 'keep';\n}\n\n/* @conditional-compile-remove(close-captions) */\n/**\n * Callback for {@link CallAdapterSubscribers} 'captionsReceived' event.\n *\n * @public\n */\nexport type CaptionsReceivedListener = (event: { captionsInfo: CaptionsInfo }) => void;\n\n/* @conditional-compile-remove(close-captions) */\n/**\n * Callback for {@link CallAdapterSubscribers} 'isCaptionsActiveChanged' event.\n *\n * @public\n */\nexport type IsCaptionsActiveChangedListener = (event: { isActive: boolean }) => void;\n\n/* @conditional-compile-remove(close-captions) */\n/**\n * Callback for {@link CallAdapterSubscribers} 'isCaptionLanguageChanged' event.\n *\n * @public\n */\nexport type IsCaptionLanguageChangedListener = (event: { activeCaptionLanguage: string }) => void;\n\n/* @conditional-compile-remove(close-captions) */\n/**\n * Callback for {@link CallAdapterSubscribers} 'isSpokenLanguageChanged' event.\n *\n * @public\n */\nexport type IsSpokenLanguageChangedListener = (event: { activeSpokenLanguage: string }) => void;\n\n/* @conditional-compile-remove(call-transfer) */\n/**\n * Callback for {@link CallAdapterSubscribers} 'transferRequested' event.\n *\n * @beta\n */\nexport type TransferRequestedListener = (event: TransferRequestedEventArgs) => void;\n\n/* @conditional-compile-remove(capabilities) */\n/**\n * Callback for {@link CallAdapterSubscribers} 'capabilitiesChanged' event.\n *\n * @public\n */\nexport type CapabilitiesChangedListener = (data: CapabilitiesChangeInfo) => void;\n\n/* @conditional-compile-remove(video-background-effects) */\n/**\n * Contains the attibutes of a selected video background effect\n *\n * @public\n */\nexport type VideoBackgroundEffect =\n | VideoBackgroundNoEffect\n | VideoBackgroundBlurEffect\n | VideoBackgroundReplacementEffect;\n\n/**\n * Contains the attibutes to remove video background effect\n *\n * @public\n */\nexport interface VideoBackgroundNoEffect {\n /**\n * Name of effect to remove video background effect\n */\n effectName: 'none';\n}\n\n/* @conditional-compile-remove(video-background-effects) */\n/**\n * Contains the attibutes of the blur video background effect\n *\n * @public\n */\nexport interface VideoBackgroundBlurEffect extends BackgroundBlurConfig {\n /**\n * Name of effect to blur video background effect\n */\n effectName: 'blur';\n}\n\n/* @conditional-compile-remove(video-background-effects) */\n/**\n * Contains the attibutes of a selected replacement video background effect\n *\n * @public\n */\nexport interface VideoBackgroundReplacementEffect extends BackgroundReplacementConfig {\n /**\n * Name of effect to replace video background effect\n */\n effectName: 'replacement';\n /**\n * key for unique identification of the custom background\n */\n key?: string;\n}\n\n/**\n * Functionality for managing the current call.\n *\n * @public\n */\nexport interface CallAdapterCallOperations {\n /**\n * Leave the call\n *\n * @param forEveryone - Whether to remove all participants when leaving\n *\n * @public\n */\n leaveCall(forEveryone?: boolean): Promise<void>;\n /**\n * Start the camera\n * This method will start rendering a local camera view when the call is not active\n *\n * @param options - Options to control how video streams are rendered {@link @azure/communication-calling#VideoStreamOptions }\n *\n * @public\n */\n startCamera(options?: VideoStreamOptions): Promise<void>;\n /**\n * Stop the camera\n * This method will stop rendering a local camera view when the call is not active\n *\n * @public\n */\n stopCamera(): Promise<void>;\n /**\n * Mute the current user during the call or disable microphone locally\n *\n * @public\n */\n mute(): Promise<void>;\n /**\n * Unmute the current user during the call or enable microphone locally\n *\n * @public\n */\n unmute(): Promise<void>;\n /**\n * Start sharing the screen during a call.\n *\n * @public\n */\n startScreenShare(): Promise<void>;\n /* @conditional-compile-remove(raise-hand) */\n /**\n * Raise hand for current user\n *\n * @public\n */\n raiseHand(): Promise<void>;\n /* @conditional-compile-remove(raise-hand) */\n /**\n * lower hand for current user\n *\n * @public\n */\n lowerHand(): Promise<void>;\n /**\n * Stop sharing the screen\n *\n * @public\n */\n stopScreenShare(): Promise<void>;\n /**\n * Remove a participant from the call.\n *\n * @param userId - Id of the participant to be removed\n *\n * @public\n */\n removeParticipant(userId: string): Promise<void>;\n /* @conditional-compile-remove(PSTN-calls) */\n /**\n * Remove a participant from the call.\n * @param participant - {@link @azure/communication-common#CommunicationIdentifier} of the participant to be removed\n * @beta\n */\n removeParticipant(participant: CommunicationIdentifier): Promise<void>;\n /**\n * Create the html view for a stream.\n *\n * @remarks\n * This method is implemented for composite\n *\n * @param remoteUserId - Id of the participant to render, leave it undefined to create the local camera view\n * @param options - Options to control how video streams are rendered {@link @azure/communication-calling#VideoStreamOptions }\n *\n * @public\n */\n createStreamView(remoteUserId?: string, options?: VideoStreamOptions): Promise<void | CreateVideoStreamViewResult>;\n /**\n * Dispose the html view for a stream.\n *\n * @remarks\n * This method is implemented for composite\n *\n * @deprecated Use {@link disposeRemoteVideoStreamView}, {@link disposeLocalVideoStreamView} and {@link disposeRemoteVideoStreamView} instead.\n *\n * @param remoteUserId - Id of the participant to render, leave it undefined to dispose the local camera view\n * @param options - Options to control how video streams are rendered {@link @azure/communication-calling#VideoStreamOptions }\n *\n * @public\n */\n disposeStreamView(remoteUserId?: string, options?: VideoStreamOptions): Promise<void>;\n /**\n * Dispose the html view for a screen share stream\n *\n * @remarks\n * this method is implemented for composite\n *\n * @param remoteUserId - Id of the participant to dispose the screen share stream view for.\n *\n * @public\n */\n disposeScreenShareStreamView(remoteUserId: string): Promise<void>;\n /**\n * Dispose the html view for a remote video stream\n *\n * @param remoteUserId - Id of the participant to dispose\n *\n * @public\n */\n disposeRemoteVideoStreamView(remoteUserId: string): Promise<void>;\n /**\n * Dispose the html view for a local video stream\n *\n * @public\n */\n disposeLocalVideoStreamView(): Promise<void>;\n /* @conditional-compile-remove(PSTN-calls) */\n /**\n * Holds the call.\n *\n * @beta\n */\n holdCall(): Promise<void>;\n /* @conditional-compile-remove(PSTN-calls) */\n /**\n * Resumes the call from a `LocalHold` state.\n *\n * @beta\n */\n resumeCall(): Promise<void>;\n /* @conditional-compile-remove(PSTN-calls) */\n /**\n * Add a participant to the call.\n *\n * @beta\n */\n addParticipant(participant: PhoneNumberIdentifier, options?: AddPhoneNumberOptions): Promise<void>;\n /* @conditional-compile-remove(PSTN-calls) */\n addParticipant(participant: CommunicationUserIdentifier): Promise<void>;\n /* @conditional-compile-remove(PSTN-calls) */\n /**\n * send dtmf tone to another participant in a 1:1 PSTN call\n *\n * @beta\n */\n sendDtmfTone(dtmfTone: DtmfTone): Promise<void>;\n /* @conditional-compile-remove(unsupported-browser) */\n /**\n * Continues into a call when the browser version is not supported.\n */\n allowUnsupportedBrowserVersion(): void;\n /* @conditional-compile-remove(close-captions) */\n /**\n * Function to Start captions\n * @param options - options for start captions\n */\n startCaptions(options?: StartCaptionsOptions): Promise<void>;\n /* @conditional-compile-remove(close-captions) */\n /**\n * Function to set caption language\n * @param language - language set for caption\n */\n setCaptionLanguage(language: string): Promise<void>;\n /* @conditional-compile-remove(close-captions) */\n /**\n * Function to set spoken language\n * @param language - spoken language\n */\n setSpokenLanguage(language: string): Promise<void>;\n /* @conditional-compile-remove(close-captions) */\n /**\n * Funtion to stop captions\n */\n stopCaptions(): Promise<void>;\n /* @conditional-compile-remove(video-background-effects) */\n /**\n * Start the video background effect.\n *\n * @public\n */\n startVideoBackgroundEffect(videoBackgroundEffect: VideoBackgroundEffect): Promise<void>;\n /* @conditional-compile-remove(video-background-effects) */\n /**\n * Stop the video background effect.\n *\n * @public\n */\n stopVideoBackgroundEffects(): Promise<void>;\n /* @conditional-compile-remove(video-background-effects) */\n /**\n * Override the background picker images for background replacement effect.\n *\n * @param backgroundImages - Array of custom background images.\n *\n * @public\n */\n updateBackgroundPickerImages(backgroundImages: VideoBackgroundImage[]): void;\n /* @conditional-compile-remove(video-background-effects) */\n /**\n * Update the selected video background effect.\n *\n * @public\n */\n updateSelectedVideoBackgroundEffect(selectedVideoBackground: VideoBackgroundEffect): void;\n /* @conditional-compile-remove(end-of-call-survey) */\n /**\n * Send the end of call survey result\n *\n * @beta\n */\n submitSurvey(survey: CallSurvey): Promise<CallSurveyResponse | undefined>;\n}\n\n/**\n * Functionality for managing devices within a call.\n *\n * @public\n */\nexport interface CallAdapterDeviceManagement {\n /**\n * Ask for permissions of devices.\n *\n * @remarks\n * Browser permission window will pop up if permissions are not granted yet\n *\n * @param constrain - Define constraints for accessing local devices {@link @azure/communication-calling#PermissionConstraints }\n *\n * @public\n */\n askDevicePermission(constrain: PermissionConstraints): Promise<void>;\n /**\n * Query for available camera devices.\n *\n * @remarks\n * This method should be called after askDevicePermission()\n *\n * @return An array of video device information entities {@link @azure/communication-calling#VideoDeviceInfo }\n *\n * @public\n */\n queryCameras(): Promise<VideoDeviceInfo[]>;\n /**\n * Query for available microphone devices.\n *\n * @remarks\n * This method should be called after askDevicePermission()\n *\n * @return An array of audio device information entities {@link @azure/communication-calling#AudioDeviceInfo }\n *\n * @public\n */\n queryMicrophones(): Promise<AudioDeviceInfo[]>;\n /**\n * Query for available microphone devices.\n *\n * @remarks\n * This method should be called after askDevicePermission()\n *\n * @return An array of audio device information entities {@link @azure/communication-calling#AudioDeviceInfo }\n *\n * @public\n */\n querySpeakers(): Promise<AudioDeviceInfo[]>;\n /**\n * Set the camera to use in the call.\n *\n * @param sourceInfo - Camera device to choose, pick one returned by {@link CallAdapterDeviceManagement#queryCameras }\n * @param options - Options to control how the camera stream is rendered {@link @azure/communication-calling#VideoStreamOptions }\n *\n * @public\n */\n setCamera(sourceInfo: VideoDeviceInfo, options?: VideoStreamOptions): Promise<void>;\n /**\n * Set the microphone to use in the call.\n *\n * @param sourceInfo - Microphone device to choose, pick one returned by {@link CallAdapterDeviceManagement#queryMicrophones }\n *\n * @public\n */\n setMicrophone(sourceInfo: AudioDeviceInfo): Promise<void>;\n /**\n * Set the speaker to use in the call.\n *\n * @param sourceInfo - Speaker device to choose, pick one returned by {@link CallAdapterDeviceManagement#querySpeakers }\n *\n * @public\n */\n setSpeaker(sourceInfo: AudioDeviceInfo): Promise<void>;\n}\n\n/**\n * Call composite events that can be subscribed to.\n *\n * @public\n */\nexport interface CallAdapterSubscribers {\n /**\n * Subscribe function for 'participantsJoined' event.\n */\n on(event: 'participantsJoined', listener: ParticipantsJoinedListener): void;\n /**\n * Subscribe function for 'participantsLeft' event.\n */\n on(event: 'participantsLeft', listener: ParticipantsLeftListener): void;\n /**\n * Subscribe function for 'isMutedChanged' event.\n *\n * @remarks\n * The event will be triggered whenever current user or remote user mute state changed\n *\n */\n on(event: 'isMutedChanged', listener: IsMutedChangedListener): void;\n /**\n * Subscribe function for 'callIdChanged' event.\n *\n * @remarks\n * The event will be triggered when callId of current user changed.\n *\n */\n on(event: 'callIdChanged', listener: CallIdChangedListener): void;\n /**\n * Subscribe function for 'isLocalScreenSharingActiveChanged' event.\n */\n on(event: 'isLocalScreenSharingActiveChanged', listener: IsLocalScreenSharingActiveChangedListener): void;\n /**\n * Subscribe function for 'displayNameChanged' event.\n */\n on(event: 'displayNameChanged', listener: DisplayNameChangedListener): void;\n /**\n * Subscribe function for 'isSpeakingChanged' event.\n */\n on(event: 'isSpeakingChanged', listener: IsSpeakingChangedListener): void;\n /**\n * Subscribe function for 'callEnded' event.\n */\n on(event: 'callEnded', listener: CallEndedListener): void;\n /**\n * Subscribe function for 'diagnosticChanged' event.\n *\n * This event fires whenever there is a change in user facing diagnostics about the ongoing call.\n */\n on(event: 'diagnosticChanged', listener: DiagnosticChangedEventListner): void;\n /**\n * Subscribe function for 'selectedMicrophoneChanged' event.\n *\n * This event fires whenever the user selects a new microphone device.\n */\n on(event: 'selectedMicrophoneChanged', listener: PropertyChangedEvent): void;\n /**\n * Subscribe function for 'selectedSpeakerChanged' event.\n *\n * This event fires whenever the user selects a new speaker device.\n */\n on(event: 'selectedSpeakerChanged', listener: PropertyChangedEvent): void;\n /**\n * Subscribe function for 'error' event.\n */\n on(event: 'error', listener: (e: AdapterError) => void): void;\n /* @conditional-compile-remove(close-captions) */\n /**\n * Subscribe function for 'captionsReceived' event.\n */\n on(event: 'captionsReceived', listener: CaptionsReceivedListener): void;\n /* @conditional-compile-remove(close-captions) */\n /**\n * Subscribe function for 'isCaptionsActiveChanged' event.\n */\n on(event: 'isCaptionsActiveChanged', listener: IsCaptionsActiveChangedListener): void;\n /* @conditional-compile-remove(close-captions) */\n /**\n * Subscribe function for 'isCaptionLanguageChanged' event.\n */\n on(event: 'isCaptionLanguageChanged', listener: IsCaptionLanguageChangedListener): void;\n /* @conditional-compile-remove(close-captions) */\n /**\n * Subscribe function for 'isSpokenLanguageChanged' event.\n */\n on(event: 'isSpokenLanguageChanged', listener: IsSpokenLanguageChangedListener): void;\n\n /* @conditional-compile-remove(call-transfer) */\n /**\n * Subscribe function for 'transferRequested' event.\n */\n on(event: 'transferRequested', listener: TransferRequestedListener): void;\n /* @conditional-compile-remove(capabilities) */\n /**\n * Subscribe function for 'capabilitiesChanged' event.\n */\n on(event: 'capabilitiesChanged', listener: CapabilitiesChangedListener): void;\n /* @conditional-compile-remove(rooms) */\n /**\n * Subscribe function for 'roleChanged' event.\n */\n on(event: 'roleChanged', listener: PropertyChangedEvent): void;\n\n /**\n * Unsubscribe function for 'participantsJoined' event.\n */\n off(event: 'participantsJoined', listener: ParticipantsJoinedListener): void;\n /**\n * Unsubscribe function for 'participantsLeft' event.\n */\n off(event: 'participantsLeft', listener: ParticipantsLeftListener): void;\n /**\n * Unsubscribe function for 'isMutedChanged' event.\n */\n off(event: 'isMutedChanged', listener: IsMutedChangedListener): void;\n /**\n * Unsubscribe function for 'callIdChanged' event.\n */\n off(event: 'callIdChanged', listener: CallIdChangedListener): void;\n /**\n * Unsubscribe function for 'isLocalScreenSharingActiveChanged' event.\n */\n off(event: 'isLocalScreenSharingActiveChanged', listener: IsLocalScreenSharingActiveChangedListener): void;\n /**\n * Unsubscribe function for 'displayNameChanged' event.\n */\n off(event: 'displayNameChanged', listener: DisplayNameChangedListener): void;\n /**\n * Unsubscribe function for 'isSpeakingChanged' event.\n */\n off(event: 'isSpeakingChanged', listener: IsSpeakingChangedListener): void;\n /**\n * Unsubscribe function for 'callEnded' event.\n */\n off(event: 'callEnded', listener: CallEndedListener): void;\n /**\n * Unsubscribe function for 'diagnosticChanged' event.\n */\n off(event: 'diagnosticChanged', listener: DiagnosticChangedEventListner): void;\n /**\n * Unsubscribe function for 'selectedMicrophoneChanged' event.\n */\n off(event: 'selectedMicrophoneChanged', listener: PropertyChangedEvent): void;\n /**\n * Unsubscribe function for 'selectedSpeakerChanged' event.\n */\n off(event: 'selectedSpeakerChanged', listener: PropertyChangedEvent): void;\n /**\n * Unsubscribe function for 'error' event.\n */\n off(event: 'error', listener: (e: AdapterError) => void): void;\n /* @conditional-compile-remove(close-captions) */\n /**\n * Unsubscribe function for 'captionsReceived' event.\n */\n off(event: 'captionsReceived', listener: CaptionsReceivedListener): void;\n /* @conditional-compile-remove(close-captions) */\n /**\n * Unsubscribe function for 'isCaptionsActiveChanged' event.\n */\n off(event: 'isCaptionsActiveChanged', listener: IsCaptionsActiveChangedListener): void;\n /* @conditional-compile-remove(close-captions) */\n /**\n * Unsubscribe function for 'isCaptionLanguageChanged' event.\n */\n off(event: 'isCaptionLanguageChanged', listener: IsCaptionLanguageChangedListener): void;\n /* @conditional-compile-remove(close-captions) */\n /**\n * Unsubscribe function for 'isSpokenLanguageChanged' event.\n */\n off(event: 'isSpokenLanguageChanged', listener: IsSpokenLanguageChangedListener): void;\n /* @conditional-compile-remove(call-transfer) */\n /**\n * Unsubscribe function for 'transferRequested' event.\n */\n off(event: 'transferRequested', listener: TransferRequestedListener): void;\n /* @conditional-compile-remove(capabilities) */\n /**\n * Unsubscribe function for 'capabilitiesChanged' event.\n */\n off(event: 'capabilitiesChanged', listener: CapabilitiesChangedListener): void;\n /* @conditional-compile-remove(rooms) */\n /**\n * Unsubscribe function for 'roleChanged' event.\n */\n off(event: 'roleChanged', listener: PropertyChangedEvent): void;\n}\n\n// This type remains for non-breaking change reason\n/**\n * Functionality for managing the current call or start a new call\n * @deprecated CallAdapter interface will be flatten, consider using CallAdapter directly\n * @public\n */\nexport interface CallAdapterCallManagement extends CallAdapterCallOperations {\n /**\n * Join the call with microphone initially on/off.\n * @deprecated Use joinCall(options?:JoinCallOptions) instead.\n * @param microphoneOn - Whether microphone is initially enabled\n *\n * @public\n */\n joinCall(microphoneOn?: boolean): Call | undefined;\n\n /**\n * Join the call with options bag to set microphone/camera initial state when joining call\n * true = turn on the device when joining call\n * false = turn off the device when joining call\n * 'keep'/undefined = retain devices' precall state\n *\n * @param options - param to set microphone/camera initially on/off/use precall state.\n *\n * @public\n */\n joinCall(options?: JoinCallOptions): Call | undefined;\n /**\n * Start the call.\n *\n * @param participants - An array of participant ids to join\n *\n * @public\n */\n startCall(participants: string[], options?: StartCallOptions): Call | undefined;\n /* @conditional-compile-remove(PSTN-calls) */\n /**\n * Start the call.\n * @param participants - An array of {@link @azure/communication-common#CommunicationIdentifier} to be called\n * @beta\n */\n startCall(participants: CommunicationIdentifier[], options?: StartCallOptions): Call | undefined;\n}\n\n// TODO: Flatten the adapter structure\n/**\n * {@link CallComposite} Adapter interface.\n *\n * @public\n */\nexport interface CommonCallAdapter\n extends AdapterState<CallAdapterState>,\n Disposable,\n CallAdapterCallOperations,\n CallAdapterDeviceManagement,\n CallAdapterSubscribers {\n /**\n * Join the call with microphone initially on/off.\n * @deprecated Use joinCall(options?:JoinCallOptions) instead.\n * @param microphoneOn - Whether microphone is initially enabled\n *\n * @public\n */\n joinCall(microphoneOn?: boolean): void;\n /**\n * Join the call with options bag to set microphone/camera initial state when joining call\n * true = turn on the device when joining call\n * false = turn off the device when joining call\n * 'keep'/undefined = retain devices' precall state\n *\n * @param options - param to set microphone/camera initially on/off/use precall state.\n *\n * @public\n */\n joinCall(options?: JoinCallOptions): void;\n /**\n * Start the call.\n *\n * @param participants - An array of participant ids to join\n *\n * @public\n */\n startCall(participants: string[], options?: StartCallOptions): void;\n /* @conditional-compile-remove(PSTN-calls) */\n /**\n * Start the call.\n * @param participants - An array of {@link @azure/communication-common#CommunicationIdentifier} to be called\n * @beta\n */\n startCall(participants: CommunicationIdentifier[], options?: StartCallOptions): void;\n}\n\n/**\n * An Adapter interface specific for Azure Communication identity which extends {@link CommonCallAdapter}.\n *\n * @public\n */\nexport interface CallAdapter extends CommonCallAdapter {\n /**\n * Join the call with microphone initially on/off.\n * @deprecated Use joinCall(options?:JoinCallOptions) instead.\n * @param microphoneOn - Whether microphone is initially enabled\n *\n * @public\n */\n joinCall(microphoneOn?: boolean): Call | undefined;\n\n /**\n * Join the call with options bag to set microphone/camera initial state when joining call\n * true = turn on the device when joining call\n * false = turn off the device when joining call\n * 'keep'/undefined = retain devices' precall state\n *\n * @param options - param to set microphone/camera initially on/off/use precall state.\n *\n * @public\n */\n joinCall(options?: JoinCallOptions): Call | undefined;\n /**\n * Start the call.\n *\n * @param participants - An array of participant ids to join\n *\n * @public\n */\n startCall(participants: string[], options?: StartCallOptions): Call | undefined;\n /* @conditional-compile-remove(PSTN-calls) */\n /**\n * Start the call.\n * @param participants - An array of {@link @azure/communication-common#CommunicationIdentifier} to be called\n * @beta\n */\n startCall(participants: CommunicationIdentifier[], options?: StartCallOptions): Call | undefined;\n}\n\n/* @conditional-compile-remove(teams-identity-support) */\n/**\n * An Adapter interface specific for Teams identity which extends {@link CommonCallAdapter}.\n *\n * @beta\n */\nexport interface TeamsCallAdapter extends CommonCallAdapter {\n /**\n * Join the call with microphone initially on/off.\n * @deprecated Use joinCall(options?:JoinCallOptions) instead.\n * @param microphoneOn - Whether microphone is initially enabled\n *\n * @beta\n */\n joinCall(microphoneOn?: boolean): TeamsCall | undefined;\n /**\n * Join the call with options bag to set microphone/camera initial state when joining call\n * true = turn on the device when joining call\n * false = turn off the device when joining call\n * 'keep'/undefined = retain devices' precall state\n *\n * @param options - param to set microphone/camera initially on/off.\n *\n * @public\n */\n joinCall(options?: JoinCallOptions): TeamsCall | undefined;\n /**\n * Start the call.\n *\n * @param participants - An array of participant ids to join\n *\n * @beta\n */\n startCall(participants: string[], options?: StartCallOptions): TeamsCall | undefined;\n /* @conditional-compile-remove(PSTN-calls) */\n /**\n * Start the call.\n * @param participants - An array of {@link @azure/communication-common#CommunicationIdentifier} to be called\n * @beta\n */\n startCall(participants: CommunicationIdentifier[], options?: StartCallOptions): TeamsCall | undefined;\n}\n"]}
@@ -37,12 +37,23 @@ import { _generateDefaultDeviceMenuProps } from "../../../../../react-components
37
37
  import { CUSTOM_BUTTON_OPTIONS, generateCustomCallControlBarButton, generateCustomCallDesktopOverflowButtons, onFetchCustomButtonPropsTrampoline } from '../../common/ControlBar/CustomButton';
38
38
  // Enforce a background color on control bar to ensure it matches the composite background color.
39
39
  const controlBarStyles = memoizeFunction((background) => ({ root: { background: background } }));
40
+ const inferCallControlOptions = (mobileView, callControlOptions) => {
41
+ if (callControlOptions === false) {
42
+ return {};
43
+ }
44
+ const options = callControlOptions === true || callControlOptions === undefined ? {} : callControlOptions;
45
+ if (mobileView) {
46
+ // Set options to always not show screen share button for mobile
47
+ options.screenShareButton = false;
48
+ }
49
+ return options;
50
+ };
40
51
  /**
41
52
  * @private
42
53
  */
43
54
  export const CallControls = (props) => {
44
55
  var _a, _b;
45
- const options = useMemo(() => (typeof props.options === 'boolean' ? {} : props.options), [props.options]);
56
+ const options = useMemo(() => inferCallControlOptions(!!props.isMobile, props.options), [props.isMobile, props.options]);
46
57
  /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(rooms) */
47
58
  const adapter = useAdapter();
48
59
  /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */ /* @conditional-compile-remove(close-captions) */ /* @conditional-compile-remove(raise-hand) */
@@ -1 +1 @@
1
- {"version":3,"file":"CallControls.js","sourceRoot":"","sources":["../../../../../../../../react-composites/src/composites/CallComposite/components/CallControls.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { memoizeFunction, Stack, useTheme } from '@fluentui/react';\n/* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */ /* @conditional-compile-remove(close-captions) */ /* @conditional-compile-remove(raise-hand) */\nimport { IContextualMenuItem } from '@fluentui/react';\n/* @conditional-compile-remove(PSTN-calls) */\nimport { useState } from 'react';\nimport { _isInLobbyOrConnecting } from '@internal/calling-component-bindings';\nimport { ControlBar, DevicesButton, ParticipantMenuItemsCallback } from '@internal/react-components';\n/* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */\nimport { HoldButton } from '@internal/react-components';\nimport React, { useMemo } from 'react';\nimport { CallControlOptions } from '../types/CallControlOptions';\nimport { Camera } from './buttons/Camera';\nimport { Devices } from './buttons/Devices';\nimport { EndCall } from './buttons/EndCall';\nimport { Microphone } from './buttons/Microphone';\nimport { Participants } from './buttons/Participants';\nimport { ScreenShare } from './buttons/ScreenShare';\nimport { ContainerRectProps } from '../../common/ContainerRectProps';\n/* @conditional-compile-remove(one-to-n-calling) @conditional-compile-remove(PSTN-calls) */\nimport { People } from './buttons/People';\n/* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */ /* @conditional-compile-remove(close-captions) */ /* @conditional-compile-remove(raise-hand) */\nimport { useLocale } from '../../localization';\n/* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */ /* @conditional-compile-remove(close-captions) */ /* @conditional-compile-remove(raise-hand) */\nimport { MoreButton } from '../../common/MoreButton';\n/* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */ /* @conditional-compile-remove(raise-hand) */\nimport { usePropsFor } from '../hooks/usePropsFor';\n/* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */ /* @conditional-compile-remove(close-captions) */ /* @conditional-compile-remove(raise-hand) */\nimport { buttonFlyoutIncreasedSizeStyles } from '../styles/Buttons.styles';\n/* @conditional-compile-remove(PSTN-calls) */\nimport { SendDtmfDialpad } from '../../common/SendDtmfDialpad';\n/* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(rooms) */\nimport { useAdapter } from '../adapter/CallAdapterProvider';\nimport { isDisabled } from '../utils';\nimport { callControlsContainerStyles } from '../styles/CallPage.styles';\nimport { CommonCallAdapter } from '../adapter';\n/* @conditional-compile-remove(raise-hand) */\nimport { RaiseHand } from './buttons/RaiseHand';\n/* @conditional-compile-remove(raise-hand) */\nimport { RaiseHandButton, RaiseHandButtonProps } from '@internal/react-components';\nimport { _generateDefaultDeviceMenuProps } from '@internal/react-components';\nimport {\n CUSTOM_BUTTON_OPTIONS,\n generateCustomCallControlBarButton,\n generateCustomCallDesktopOverflowButtons,\n onFetchCustomButtonPropsTrampoline\n} from '../../common/ControlBar/CustomButton';\n/**\n * @private\n */\nexport type CallControlsProps = {\n /* @conditional-compile-remove(one-to-n-calling) @conditional-compile-remove(PSTN-calls) */\n peopleButtonChecked?: boolean;\n onPeopleButtonClicked?: () => void;\n callInvitationURL?: string;\n onFetchParticipantMenuItems?: ParticipantMenuItemsCallback;\n options?: boolean | CallControlOptions;\n /**\n * Option to increase the height of the button flyout menu items from 36px to 48px.\n * Recommended for mobile devices.\n */\n increaseFlyoutItemSize?: boolean;\n isMobile?: boolean;\n displayVertical?: boolean;\n};\n\n// Enforce a background color on control bar to ensure it matches the composite background color.\nconst controlBarStyles = memoizeFunction((background: string) => ({ root: { background: background } }));\n\n/**\n * @private\n */\nexport const CallControls = (props: CallControlsProps & ContainerRectProps): JSX.Element => {\n const options = useMemo(() => (typeof props.options === 'boolean' ? {} : props.options), [props.options]);\n /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(rooms) */\n const adapter = useAdapter();\n\n /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */ /* @conditional-compile-remove(close-captions) */ /* @conditional-compile-remove(raise-hand) */\n const localeStrings = useLocale();\n\n /* @conditional-compile-remove(one-to-n-calling) @conditional-compile-remove(PSTN-calls) */\n const peopleButtonStrings = useMemo(\n () => ({\n label: localeStrings.strings.call.peopleButtonLabel,\n tooltipOffContent: localeStrings.strings.call.peopleButtonTooltipOpen,\n tooltipOnContent: localeStrings.strings.call.peopleButtonTooltipClose\n }),\n [localeStrings]\n );\n\n /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */ /* @conditional-compile-remove(close-captions) */ /* @conditional-compile-remove(raise-hand) */\n const moreButtonStrings = useMemo(\n () => ({\n label: localeStrings.strings.call.moreButtonCallingLabel,\n tooltipOffContent: localeStrings.strings.callWithChat.moreDrawerButtonTooltip\n }),\n [localeStrings]\n );\n\n /* @conditional-compile-remove(PSTN-calls) */\n const dialpadStrings = useMemo(\n () => ({\n dialpadModalAriaLabel: localeStrings.strings.call.dialpadModalAriaLabel,\n dialpadCloseModalButtonAriaLabel: localeStrings.strings.call.dialpadCloseModalButtonAriaLabel,\n placeholderText: localeStrings.strings.call.dtmfDialpadPlaceholderText\n }),\n [localeStrings]\n );\n\n /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */\n const holdButtonProps = usePropsFor(HoldButton);\n\n /* @conditional-compile-remove(raise-hand) */\n const raiseHandButtonProps = usePropsFor(RaiseHandButton) as RaiseHandButtonProps;\n\n /* @conditional-compile-remove(PSTN-calls) */\n const alternateCallerId = useAdapter().getState().alternateCallerId;\n\n const devicesButtonProps = usePropsFor(DevicesButton);\n\n let numberOfButtons = 0;\n\n const screenShareButtonIsEnabled = isEnabled(options?.screenShareButton);\n if (screenShareButtonIsEnabled) {\n numberOfButtons++;\n }\n\n const microphoneButtonIsEnabled = isEnabled(options?.microphoneButton);\n if (microphoneButtonIsEnabled) {\n numberOfButtons++;\n }\n\n const cameraButtonIsEnabled = isEnabled(options?.cameraButton);\n if (cameraButtonIsEnabled) {\n numberOfButtons++;\n }\n\n if (isEnabled(options?.endCallButton)) {\n numberOfButtons++;\n }\n\n const showParticipantsButtonInControlBar =\n isEnabled(options?.participantsButton) &&\n /* @conditional-compile-remove(one-to-n-calling) */ /* @conditional-compile-remove(PSTN-calls) */\n !props.isMobile;\n if (showParticipantsButtonInControlBar) {\n numberOfButtons++;\n }\n\n const moreButtonContextualMenuItems = (): IContextualMenuItem[] => {\n const items: IContextualMenuItem[] = [];\n\n if (props.isMobile && props.onPeopleButtonClicked && isEnabled(options?.participantsButton)) {\n items.push({\n key: 'peopleButtonKey',\n text: localeStrings.component.strings.participantsButton.label,\n onClick: () => {\n if (props.onPeopleButtonClicked) {\n props.onPeopleButtonClicked();\n }\n },\n iconProps: { iconName: 'ControlButtonParticipantsContextualMenuItem', styles: { root: { lineHeight: 0 } } },\n itemProps: {\n styles: buttonFlyoutIncreasedSizeStyles\n },\n disabled: isDisabled(options?.participantsButton),\n ['data-ui-id']: 'call-composite-more-menu-people-button'\n });\n }\n\n /* @conditional-compile-remove(one-to-n-calling) */ /* @conditional-compile-remove(PSTN-calls) */\n if (!isRoomsCallTrampoline(adapter)) {\n items.push({\n key: 'holdButtonKey',\n text: localeStrings.component.strings.holdButton.tooltipOffContent,\n onClick: () => {\n holdButtonProps.onToggleHold();\n },\n iconProps: { iconName: 'HoldCallContextualMenuItem', styles: { root: { lineHeight: 0 } } },\n itemProps: {\n styles: buttonFlyoutIncreasedSizeStyles\n },\n disabled: isDisabled(options?.holdButton),\n ['data-ui-id']: 'hold-button'\n });\n }\n\n /* @conditional-compile-remove(PSTN-calls) */\n // dtmf tone sending only works for 1:1 PSTN call\n if (alternateCallerId) {\n items.push({\n key: 'showDialpadKey',\n text: localeStrings.strings.call.openDtmfDialpadLabel,\n onClick: () => {\n setShowDialpad(true);\n },\n iconProps: { iconName: 'PeoplePaneOpenDialpad', styles: { root: { lineHeight: 0 } } },\n itemProps: {\n styles: buttonFlyoutIncreasedSizeStyles\n }\n });\n }\n return items;\n };\n\n const customDrawerButtons = useMemo(\n () =>\n generateCustomCallDesktopOverflowButtons(\n onFetchCustomButtonPropsTrampoline(typeof options === 'object' ? options : undefined),\n typeof options === 'object' ? options.displayType : undefined\n ),\n [options]\n );\n\n const moreButtonMenuItems = moreButtonContextualMenuItems();\n let showMoreButton = isEnabled(options?.moreButton) && moreButtonMenuItems.length > 0;\n if (showMoreButton) {\n numberOfButtons++;\n }\n\n const customButtons = useMemo(\n () => generateCustomCallControlBarButton(onFetchCustomButtonPropsTrampoline(options), options?.displayType),\n [options]\n );\n\n numberOfButtons += React.Children.count(customButtons['primary']) + React.Children.count(customButtons['secondary']);\n\n let showDevicesButtonInControlBar = isEnabled(options?.devicesButton);\n if (showDevicesButtonInControlBar && (props.isMobile ? numberOfButtons < 5 : true)) {\n numberOfButtons++;\n } else {\n showDevicesButtonInControlBar = false;\n\n showMoreButton = isEnabled(options?.moreButton);\n }\n\n /* @conditional-compile-remove(raise-hand) */\n const raiseHandButtonIsEnabled = isEnabled(options?.raiseHandButton);\n /* @conditional-compile-remove(raise-hand) */\n let showRaiseHandButtonInControlBar = raiseHandButtonIsEnabled;\n /* @conditional-compile-remove(rooms) */\n const role = adapter.getState().call?.role;\n /* @conditional-compile-remove(rooms) */\n const hideRaiseHandButtonInRoomsCall =\n adapter.getState().isRoomsCall && role && ['Consumer', 'Unknown'].includes(role);\n /* @conditional-compile-remove(raise-hand) */\n if (showRaiseHandButtonInControlBar && (props.isMobile ? numberOfButtons < 5 : true)) {\n numberOfButtons++;\n } else {\n // If more button is not present but enabled then replace previous button (devices button) with more button\n if (!showMoreButton && isEnabled(options?.moreButton)) {\n showMoreButton = true;\n showDevicesButtonInControlBar = false;\n }\n\n showRaiseHandButtonInControlBar = false;\n }\n\n if (!showDevicesButtonInControlBar) {\n const devicesButtonMenu = _generateDefaultDeviceMenuProps(\n devicesButtonProps,\n localeStrings.component.strings.devicesButton\n );\n moreButtonMenuItems.push({\n key: 'devicesButtonKey',\n text: localeStrings.component.strings.devicesButton.label,\n iconProps: { iconName: 'ControlButtonOptions', styles: { root: { lineHeight: 0 } } },\n subMenuProps: devicesButtonMenu,\n ['data-ui-id']: 'call-composite-more-menu-devices-button'\n });\n }\n\n /* @conditional-compile-remove(raise-hand) */\n if (!showRaiseHandButtonInControlBar && /* @conditional-compile-remove(rooms) */ !hideRaiseHandButtonInRoomsCall) {\n moreButtonMenuItems.push({\n key: 'raiseHandButtonKey',\n text: raiseHandButtonProps.checked\n ? localeStrings.component.strings.raiseHandButton.onLabel\n : localeStrings.component.strings.raiseHandButton.offLabel,\n onClick: () => {\n if (raiseHandButtonProps.onToggleRaiseHand) {\n raiseHandButtonProps.onToggleRaiseHand();\n }\n },\n iconProps: { iconName: 'RaiseHandContextualMenuItem', styles: { root: { lineHeight: 0 } } },\n itemProps: {\n styles: buttonFlyoutIncreasedSizeStyles\n },\n disabled: isDisabled(options?.raiseHandButton),\n ['data-ui-id']: 'call-composite-more-menu-raise-hand-button'\n });\n }\n\n // Custom Buttons in More Button Menu should always be the last items pushed into the moreButtonMenuItems array\n if (customDrawerButtons['primary']) {\n customDrawerButtons['primary']\n .slice(\n props.isMobile\n ? CUSTOM_BUTTON_OPTIONS.MAX_PRIMARY_MOBILE_CUSTOM_BUTTONS\n : CUSTOM_BUTTON_OPTIONS.MAX_PRIMARY_DESKTOP_CUSTOM_BUTTONS\n )\n .forEach((element) => {\n moreButtonMenuItems.push({\n itemProps: {\n styles: buttonFlyoutIncreasedSizeStyles\n },\n ...element\n });\n });\n }\n if (customDrawerButtons['secondary']) {\n customDrawerButtons['secondary'].forEach((element) => {\n moreButtonMenuItems.push({\n itemProps: {\n styles: buttonFlyoutIncreasedSizeStyles\n },\n ...element\n });\n });\n }\n if (customDrawerButtons['overflow']) {\n customDrawerButtons['overflow'].forEach((element) => {\n moreButtonMenuItems.push({\n itemProps: {\n styles: buttonFlyoutIncreasedSizeStyles\n },\n ...element\n });\n });\n }\n\n /* @conditional-compile-remove(PSTN-calls) */\n const [showDialpad, setShowDialpad] = useState(false);\n\n const theme = useTheme();\n\n // when props.options is false then we want to hide the whole control bar.\n if (props.options === false) {\n return <></>;\n }\n\n /* @conditional-compile-remove(PSTN-calls) */\n const onDismissDialpad = (): void => {\n setShowDialpad(false);\n };\n\n return (\n <Stack horizontalAlign=\"center\" className={callControlsContainerStyles}>\n {\n /* @conditional-compile-remove(PSTN-calls) */\n <SendDtmfDialpad\n isMobile={!!props.isMobile}\n strings={dialpadStrings}\n showDialpad={showDialpad}\n onDismissDialpad={onDismissDialpad}\n />\n }\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 <ControlBar\n layout={props.displayVertical ? 'vertical' : 'horizontal'}\n styles={controlBarStyles(theme.semanticColors.bodyBackground)}\n >\n {microphoneButtonIsEnabled && (\n <Microphone displayType={options?.displayType} disabled={isDisabled(options?.microphoneButton)} />\n )}\n {cameraButtonIsEnabled && (\n <Camera displayType={options?.displayType} disabled={isDisabled(options?.cameraButton)} />\n )}\n {\n /* @conditional-compile-remove(raise-hand) */ showRaiseHandButtonInControlBar &&\n /* @conditional-compile-remove(rooms) */ !hideRaiseHandButtonInRoomsCall && (\n <RaiseHand displayType={options?.displayType} />\n )\n }\n {screenShareButtonIsEnabled && (\n <ScreenShare\n option={options?.screenShareButton}\n displayType={options?.displayType}\n disabled={isDisabled(options?.screenShareButton)}\n />\n )}\n {showParticipantsButtonInControlBar && (\n <Participants\n option={options?.participantsButton}\n callInvitationURL={props.callInvitationURL}\n onFetchParticipantMenuItems={props.onFetchParticipantMenuItems}\n displayType={options?.displayType}\n increaseFlyoutItemSize={props.increaseFlyoutItemSize}\n isMobile={props.isMobile}\n disabled={isDisabled(options?.participantsButton)}\n />\n ) && (\n /* @conditional-compile-remove(one-to-n-calling) */ /* @conditional-compile-remove(PSTN-calls) */\n <People\n checked={props.peopleButtonChecked}\n ariaLabel={peopleButtonStrings?.label}\n showLabel={options?.displayType !== 'compact'}\n onClick={props.onPeopleButtonClicked}\n data-ui-id=\"call-composite-people-button\"\n strings={peopleButtonStrings}\n disabled={isDisabled(options?.participantsButton)}\n disableTooltip={props.isMobile}\n />\n )}\n {showDevicesButtonInControlBar && (\n <Devices\n displayType={options?.displayType}\n increaseFlyoutItemSize={props.increaseFlyoutItemSize}\n disabled={isDisabled(options?.devicesButton)}\n />\n )}\n {customButtons['primary']\n ?.slice(\n 0,\n props.isMobile\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.isMobile}\n />\n );\n })}\n {\n /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */ /* @conditional-compile-remove(close-captions) */ /* @conditional-compile-remove(raise-hand) */\n showMoreButton && (\n <MoreButton\n disableTooltip={props.isMobile}\n data-ui-id=\"common-call-composite-more-button\"\n strings={moreButtonStrings}\n menuIconProps={{ hidden: true }}\n menuProps={{ items: moreButtonMenuItems }}\n showLabel={options?.displayType !== 'compact'}\n />\n )\n }\n {isEnabled(options?.endCallButton) && <EndCall displayType={options?.displayType} />}\n </ControlBar>\n </Stack.Item>\n </Stack>\n );\n};\n\nconst isEnabled = (option: unknown): boolean => option !== false;\n\n/** @private */\nexport const isRoomsCallTrampoline = (adapter: CommonCallAdapter): boolean => {\n /* @conditional-compile-remove(rooms) */\n return adapter.getState().isRoomsCall;\n\n return false;\n};\n"]}
1
+ {"version":3,"file":"CallControls.js","sourceRoot":"","sources":["../../../../../../../../react-composites/src/composites/CallComposite/components/CallControls.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { memoizeFunction, Stack, useTheme } from '@fluentui/react';\n/* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */ /* @conditional-compile-remove(close-captions) */ /* @conditional-compile-remove(raise-hand) */\nimport { IContextualMenuItem } from '@fluentui/react';\n/* @conditional-compile-remove(PSTN-calls) */\nimport { useState } from 'react';\nimport { _isInLobbyOrConnecting } from '@internal/calling-component-bindings';\nimport { ControlBar, DevicesButton, ParticipantMenuItemsCallback } from '@internal/react-components';\n/* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */\nimport { HoldButton } from '@internal/react-components';\nimport React, { useMemo } from 'react';\nimport { CallControlOptions } from '../types/CallControlOptions';\nimport { Camera } from './buttons/Camera';\nimport { Devices } from './buttons/Devices';\nimport { EndCall } from './buttons/EndCall';\nimport { Microphone } from './buttons/Microphone';\nimport { Participants } from './buttons/Participants';\nimport { ScreenShare } from './buttons/ScreenShare';\nimport { ContainerRectProps } from '../../common/ContainerRectProps';\n/* @conditional-compile-remove(one-to-n-calling) @conditional-compile-remove(PSTN-calls) */\nimport { People } from './buttons/People';\n/* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */ /* @conditional-compile-remove(close-captions) */ /* @conditional-compile-remove(raise-hand) */\nimport { useLocale } from '../../localization';\n/* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */ /* @conditional-compile-remove(close-captions) */ /* @conditional-compile-remove(raise-hand) */\nimport { MoreButton } from '../../common/MoreButton';\n/* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */ /* @conditional-compile-remove(raise-hand) */\nimport { usePropsFor } from '../hooks/usePropsFor';\n/* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */ /* @conditional-compile-remove(close-captions) */ /* @conditional-compile-remove(raise-hand) */\nimport { buttonFlyoutIncreasedSizeStyles } from '../styles/Buttons.styles';\n/* @conditional-compile-remove(PSTN-calls) */\nimport { SendDtmfDialpad } from '../../common/SendDtmfDialpad';\n/* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(rooms) */\nimport { useAdapter } from '../adapter/CallAdapterProvider';\nimport { isDisabled } from '../utils';\nimport { callControlsContainerStyles } from '../styles/CallPage.styles';\nimport { CommonCallAdapter } from '../adapter';\n/* @conditional-compile-remove(raise-hand) */\nimport { RaiseHand } from './buttons/RaiseHand';\n/* @conditional-compile-remove(raise-hand) */\nimport { RaiseHandButton, RaiseHandButtonProps } from '@internal/react-components';\nimport { _generateDefaultDeviceMenuProps } from '@internal/react-components';\nimport {\n CUSTOM_BUTTON_OPTIONS,\n generateCustomCallControlBarButton,\n generateCustomCallDesktopOverflowButtons,\n onFetchCustomButtonPropsTrampoline\n} from '../../common/ControlBar/CustomButton';\n/**\n * @private\n */\nexport type CallControlsProps = {\n /* @conditional-compile-remove(one-to-n-calling) @conditional-compile-remove(PSTN-calls) */\n peopleButtonChecked?: boolean;\n onPeopleButtonClicked?: () => void;\n callInvitationURL?: string;\n onFetchParticipantMenuItems?: ParticipantMenuItemsCallback;\n options?: boolean | CallControlOptions;\n /**\n * Option to increase the height of the button flyout menu items from 36px to 48px.\n * Recommended for mobile devices.\n */\n increaseFlyoutItemSize?: boolean;\n isMobile?: boolean;\n displayVertical?: boolean;\n};\n\n// Enforce a background color on control bar to ensure it matches the composite background color.\nconst controlBarStyles = memoizeFunction((background: string) => ({ root: { background: background } }));\n\nconst inferCallControlOptions = (\n mobileView: boolean,\n callControlOptions?: boolean | CallControlOptions\n): CallControlOptions => {\n if (callControlOptions === false) {\n return {};\n }\n\n const options = callControlOptions === true || callControlOptions === undefined ? {} : callControlOptions;\n if (mobileView) {\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 CallControls = (props: CallControlsProps & ContainerRectProps): JSX.Element => {\n const options: CallControlOptions = useMemo(\n () => inferCallControlOptions(!!props.isMobile, props.options),\n [props.isMobile, props.options]\n );\n\n /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(rooms) */\n const adapter = useAdapter();\n\n /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */ /* @conditional-compile-remove(close-captions) */ /* @conditional-compile-remove(raise-hand) */\n const localeStrings = useLocale();\n\n /* @conditional-compile-remove(one-to-n-calling) @conditional-compile-remove(PSTN-calls) */\n const peopleButtonStrings = useMemo(\n () => ({\n label: localeStrings.strings.call.peopleButtonLabel,\n tooltipOffContent: localeStrings.strings.call.peopleButtonTooltipOpen,\n tooltipOnContent: localeStrings.strings.call.peopleButtonTooltipClose\n }),\n [localeStrings]\n );\n\n /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */ /* @conditional-compile-remove(close-captions) */ /* @conditional-compile-remove(raise-hand) */\n const moreButtonStrings = useMemo(\n () => ({\n label: localeStrings.strings.call.moreButtonCallingLabel,\n tooltipOffContent: localeStrings.strings.callWithChat.moreDrawerButtonTooltip\n }),\n [localeStrings]\n );\n\n /* @conditional-compile-remove(PSTN-calls) */\n const dialpadStrings = useMemo(\n () => ({\n dialpadModalAriaLabel: localeStrings.strings.call.dialpadModalAriaLabel,\n dialpadCloseModalButtonAriaLabel: localeStrings.strings.call.dialpadCloseModalButtonAriaLabel,\n placeholderText: localeStrings.strings.call.dtmfDialpadPlaceholderText\n }),\n [localeStrings]\n );\n\n /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */\n const holdButtonProps = usePropsFor(HoldButton);\n\n /* @conditional-compile-remove(raise-hand) */\n const raiseHandButtonProps = usePropsFor(RaiseHandButton) as RaiseHandButtonProps;\n\n /* @conditional-compile-remove(PSTN-calls) */\n const alternateCallerId = useAdapter().getState().alternateCallerId;\n\n const devicesButtonProps = usePropsFor(DevicesButton);\n\n let numberOfButtons = 0;\n\n const screenShareButtonIsEnabled = isEnabled(options?.screenShareButton);\n if (screenShareButtonIsEnabled) {\n numberOfButtons++;\n }\n\n const microphoneButtonIsEnabled = isEnabled(options?.microphoneButton);\n if (microphoneButtonIsEnabled) {\n numberOfButtons++;\n }\n\n const cameraButtonIsEnabled = isEnabled(options?.cameraButton);\n if (cameraButtonIsEnabled) {\n numberOfButtons++;\n }\n\n if (isEnabled(options?.endCallButton)) {\n numberOfButtons++;\n }\n\n const showParticipantsButtonInControlBar =\n isEnabled(options?.participantsButton) &&\n /* @conditional-compile-remove(one-to-n-calling) */ /* @conditional-compile-remove(PSTN-calls) */\n !props.isMobile;\n if (showParticipantsButtonInControlBar) {\n numberOfButtons++;\n }\n\n const moreButtonContextualMenuItems = (): IContextualMenuItem[] => {\n const items: IContextualMenuItem[] = [];\n\n if (props.isMobile && props.onPeopleButtonClicked && isEnabled(options?.participantsButton)) {\n items.push({\n key: 'peopleButtonKey',\n text: localeStrings.component.strings.participantsButton.label,\n onClick: () => {\n if (props.onPeopleButtonClicked) {\n props.onPeopleButtonClicked();\n }\n },\n iconProps: { iconName: 'ControlButtonParticipantsContextualMenuItem', styles: { root: { lineHeight: 0 } } },\n itemProps: {\n styles: buttonFlyoutIncreasedSizeStyles\n },\n disabled: isDisabled(options?.participantsButton),\n ['data-ui-id']: 'call-composite-more-menu-people-button'\n });\n }\n\n /* @conditional-compile-remove(one-to-n-calling) */ /* @conditional-compile-remove(PSTN-calls) */\n if (!isRoomsCallTrampoline(adapter)) {\n items.push({\n key: 'holdButtonKey',\n text: localeStrings.component.strings.holdButton.tooltipOffContent,\n onClick: () => {\n holdButtonProps.onToggleHold();\n },\n iconProps: { iconName: 'HoldCallContextualMenuItem', styles: { root: { lineHeight: 0 } } },\n itemProps: {\n styles: buttonFlyoutIncreasedSizeStyles\n },\n disabled: isDisabled(options?.holdButton),\n ['data-ui-id']: 'hold-button'\n });\n }\n\n /* @conditional-compile-remove(PSTN-calls) */\n // dtmf tone sending only works for 1:1 PSTN call\n if (alternateCallerId) {\n items.push({\n key: 'showDialpadKey',\n text: localeStrings.strings.call.openDtmfDialpadLabel,\n onClick: () => {\n setShowDialpad(true);\n },\n iconProps: { iconName: 'PeoplePaneOpenDialpad', styles: { root: { lineHeight: 0 } } },\n itemProps: {\n styles: buttonFlyoutIncreasedSizeStyles\n }\n });\n }\n return items;\n };\n\n const customDrawerButtons = useMemo(\n () =>\n generateCustomCallDesktopOverflowButtons(\n onFetchCustomButtonPropsTrampoline(typeof options === 'object' ? options : undefined),\n typeof options === 'object' ? options.displayType : undefined\n ),\n [options]\n );\n\n const moreButtonMenuItems = moreButtonContextualMenuItems();\n let showMoreButton = isEnabled(options?.moreButton) && moreButtonMenuItems.length > 0;\n if (showMoreButton) {\n numberOfButtons++;\n }\n\n const customButtons = useMemo(\n () => generateCustomCallControlBarButton(onFetchCustomButtonPropsTrampoline(options), options?.displayType),\n [options]\n );\n\n numberOfButtons += React.Children.count(customButtons['primary']) + React.Children.count(customButtons['secondary']);\n\n let showDevicesButtonInControlBar = isEnabled(options?.devicesButton);\n if (showDevicesButtonInControlBar && (props.isMobile ? numberOfButtons < 5 : true)) {\n numberOfButtons++;\n } else {\n showDevicesButtonInControlBar = false;\n\n showMoreButton = isEnabled(options?.moreButton);\n }\n\n /* @conditional-compile-remove(raise-hand) */\n const raiseHandButtonIsEnabled = isEnabled(options?.raiseHandButton);\n /* @conditional-compile-remove(raise-hand) */\n let showRaiseHandButtonInControlBar = raiseHandButtonIsEnabled;\n /* @conditional-compile-remove(rooms) */\n const role = adapter.getState().call?.role;\n /* @conditional-compile-remove(rooms) */\n const hideRaiseHandButtonInRoomsCall =\n adapter.getState().isRoomsCall && role && ['Consumer', 'Unknown'].includes(role);\n /* @conditional-compile-remove(raise-hand) */\n if (showRaiseHandButtonInControlBar && (props.isMobile ? numberOfButtons < 5 : true)) {\n numberOfButtons++;\n } else {\n // If more button is not present but enabled then replace previous button (devices button) with more button\n if (!showMoreButton && isEnabled(options?.moreButton)) {\n showMoreButton = true;\n showDevicesButtonInControlBar = false;\n }\n\n showRaiseHandButtonInControlBar = false;\n }\n\n if (!showDevicesButtonInControlBar) {\n const devicesButtonMenu = _generateDefaultDeviceMenuProps(\n devicesButtonProps,\n localeStrings.component.strings.devicesButton\n );\n moreButtonMenuItems.push({\n key: 'devicesButtonKey',\n text: localeStrings.component.strings.devicesButton.label,\n iconProps: { iconName: 'ControlButtonOptions', styles: { root: { lineHeight: 0 } } },\n subMenuProps: devicesButtonMenu,\n ['data-ui-id']: 'call-composite-more-menu-devices-button'\n });\n }\n\n /* @conditional-compile-remove(raise-hand) */\n if (!showRaiseHandButtonInControlBar && /* @conditional-compile-remove(rooms) */ !hideRaiseHandButtonInRoomsCall) {\n moreButtonMenuItems.push({\n key: 'raiseHandButtonKey',\n text: raiseHandButtonProps.checked\n ? localeStrings.component.strings.raiseHandButton.onLabel\n : localeStrings.component.strings.raiseHandButton.offLabel,\n onClick: () => {\n if (raiseHandButtonProps.onToggleRaiseHand) {\n raiseHandButtonProps.onToggleRaiseHand();\n }\n },\n iconProps: { iconName: 'RaiseHandContextualMenuItem', styles: { root: { lineHeight: 0 } } },\n itemProps: {\n styles: buttonFlyoutIncreasedSizeStyles\n },\n disabled: isDisabled(options?.raiseHandButton),\n ['data-ui-id']: 'call-composite-more-menu-raise-hand-button'\n });\n }\n\n // Custom Buttons in More Button Menu should always be the last items pushed into the moreButtonMenuItems array\n if (customDrawerButtons['primary']) {\n customDrawerButtons['primary']\n .slice(\n props.isMobile\n ? CUSTOM_BUTTON_OPTIONS.MAX_PRIMARY_MOBILE_CUSTOM_BUTTONS\n : CUSTOM_BUTTON_OPTIONS.MAX_PRIMARY_DESKTOP_CUSTOM_BUTTONS\n )\n .forEach((element) => {\n moreButtonMenuItems.push({\n itemProps: {\n styles: buttonFlyoutIncreasedSizeStyles\n },\n ...element\n });\n });\n }\n if (customDrawerButtons['secondary']) {\n customDrawerButtons['secondary'].forEach((element) => {\n moreButtonMenuItems.push({\n itemProps: {\n styles: buttonFlyoutIncreasedSizeStyles\n },\n ...element\n });\n });\n }\n if (customDrawerButtons['overflow']) {\n customDrawerButtons['overflow'].forEach((element) => {\n moreButtonMenuItems.push({\n itemProps: {\n styles: buttonFlyoutIncreasedSizeStyles\n },\n ...element\n });\n });\n }\n\n /* @conditional-compile-remove(PSTN-calls) */\n const [showDialpad, setShowDialpad] = useState(false);\n\n const theme = useTheme();\n\n // when props.options is false then we want to hide the whole control bar.\n if (props.options === false) {\n return <></>;\n }\n\n /* @conditional-compile-remove(PSTN-calls) */\n const onDismissDialpad = (): void => {\n setShowDialpad(false);\n };\n\n return (\n <Stack horizontalAlign=\"center\" className={callControlsContainerStyles}>\n {\n /* @conditional-compile-remove(PSTN-calls) */\n <SendDtmfDialpad\n isMobile={!!props.isMobile}\n strings={dialpadStrings}\n showDialpad={showDialpad}\n onDismissDialpad={onDismissDialpad}\n />\n }\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 <ControlBar\n layout={props.displayVertical ? 'vertical' : 'horizontal'}\n styles={controlBarStyles(theme.semanticColors.bodyBackground)}\n >\n {microphoneButtonIsEnabled && (\n <Microphone displayType={options?.displayType} disabled={isDisabled(options?.microphoneButton)} />\n )}\n {cameraButtonIsEnabled && (\n <Camera displayType={options?.displayType} disabled={isDisabled(options?.cameraButton)} />\n )}\n {\n /* @conditional-compile-remove(raise-hand) */ showRaiseHandButtonInControlBar &&\n /* @conditional-compile-remove(rooms) */ !hideRaiseHandButtonInRoomsCall && (\n <RaiseHand displayType={options?.displayType} />\n )\n }\n {screenShareButtonIsEnabled && (\n <ScreenShare\n option={options?.screenShareButton}\n displayType={options?.displayType}\n disabled={isDisabled(options?.screenShareButton)}\n />\n )}\n {showParticipantsButtonInControlBar && (\n <Participants\n option={options?.participantsButton}\n callInvitationURL={props.callInvitationURL}\n onFetchParticipantMenuItems={props.onFetchParticipantMenuItems}\n displayType={options?.displayType}\n increaseFlyoutItemSize={props.increaseFlyoutItemSize}\n isMobile={props.isMobile}\n disabled={isDisabled(options?.participantsButton)}\n />\n ) && (\n /* @conditional-compile-remove(one-to-n-calling) */ /* @conditional-compile-remove(PSTN-calls) */\n <People\n checked={props.peopleButtonChecked}\n ariaLabel={peopleButtonStrings?.label}\n showLabel={options?.displayType !== 'compact'}\n onClick={props.onPeopleButtonClicked}\n data-ui-id=\"call-composite-people-button\"\n strings={peopleButtonStrings}\n disabled={isDisabled(options?.participantsButton)}\n disableTooltip={props.isMobile}\n />\n )}\n {showDevicesButtonInControlBar && (\n <Devices\n displayType={options?.displayType}\n increaseFlyoutItemSize={props.increaseFlyoutItemSize}\n disabled={isDisabled(options?.devicesButton)}\n />\n )}\n {customButtons['primary']\n ?.slice(\n 0,\n props.isMobile\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.isMobile}\n />\n );\n })}\n {\n /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */ /* @conditional-compile-remove(close-captions) */ /* @conditional-compile-remove(raise-hand) */\n showMoreButton && (\n <MoreButton\n disableTooltip={props.isMobile}\n data-ui-id=\"common-call-composite-more-button\"\n strings={moreButtonStrings}\n menuIconProps={{ hidden: true }}\n menuProps={{ items: moreButtonMenuItems }}\n showLabel={options?.displayType !== 'compact'}\n />\n )\n }\n {isEnabled(options?.endCallButton) && <EndCall displayType={options?.displayType} />}\n </ControlBar>\n </Stack.Item>\n </Stack>\n );\n};\n\nconst isEnabled = (option: unknown): boolean => option !== false;\n\n/** @private */\nexport const isRoomsCallTrampoline = (adapter: CommonCallAdapter): boolean => {\n /* @conditional-compile-remove(rooms) */\n return adapter.getState().isRoomsCall;\n\n return false;\n};\n"]}
@@ -145,6 +145,10 @@ const createCompositeHandlers = memoizeOne((adapter) => ({
145
145
  /* @conditional-compile-remove(close-captions) */
146
146
  onSetCaptionLanguage: (language) => __awaiter(void 0, void 0, void 0, function* () {
147
147
  yield adapter.setCaptionLanguage(language);
148
+ }),
149
+ /* @conditional-compile-remove(end-of-call-survey) */
150
+ onSubmitSurvey: (survey) => __awaiter(void 0, void 0, void 0, function* () {
151
+ return yield adapter.submitSurvey(survey);
148
152
  })
149
153
  }));
150
154
  //# sourceMappingURL=useHandlers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useHandlers.js","sourceRoot":"","sources":["../../../../../../../../react-composites/src/composites/CallComposite/hooks/useHandlers.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { CommonCallingHandlers } from '@internal/calling-component-bindings';\nimport { CommonProperties, toFlatCommunicationIdentifier } from '@internal/acs-ui-common';\nimport { ReactElement } from 'react';\nimport memoizeOne from 'memoize-one';\nimport { CommonCallAdapter } from '..';\n/* @conditional-compile-remove(video-background-effects) */\nimport { VideoBackgroundBlurEffect, VideoBackgroundReplacementEffect } from '..';\nimport { useAdapter } from '../adapter/CallAdapterProvider';\nimport { isCameraOn } from '../utils';\n/* @conditional-compile-remove(PSTN-calls) */\nimport { DtmfTone } from '@azure/communication-calling';\n/* @conditional-compile-remove(video-background-effects) */\nimport type { BackgroundReplacementConfig, BackgroundBlurConfig } from '@azure/communication-calling';\n\n/**\n * @private\n */\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/explicit-function-return-type\nexport const useHandlers = <PropsT>(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _component: (props: PropsT) => ReactElement | null\n): Pick<CommonCallingHandlers, CommonProperties<CommonCallingHandlers, PropsT>> => {\n return createCompositeHandlers(useAdapter());\n};\n\nconst createCompositeHandlers = memoizeOne(\n (adapter: CommonCallAdapter): CommonCallingHandlers => ({\n onCreateLocalStreamView: async (options) => {\n return await adapter.createStreamView(undefined, options);\n },\n onCreateRemoteStreamView: async (userId, options) => {\n return await adapter.createStreamView(userId, options);\n },\n onHangUp: async (forEveryone?: boolean) => {\n await adapter.leaveCall(forEveryone);\n },\n /* @conditional-compile-remove(PSTN-calls) */\n onToggleHold: async () => {\n return adapter.getState().call?.state === 'LocalHold' ? await adapter.resumeCall() : await adapter.holdCall();\n },\n /* @conditional-compile-remove(PSTN-calls) */\n onAddParticipant: async (participant, options?) => {\n return await adapter.addParticipant(participant, options);\n },\n /* @conditional-compile-remove(PSTN-calls) */\n onSendDtmfTone: async (dtmfTone: DtmfTone) => {\n await adapter.sendDtmfTone(dtmfTone);\n },\n onRemoveParticipant: async (userId) => {\n await adapter.removeParticipant(userId);\n },\n /* @conditional-compile-remove(raise-hand) */\n onRaiseHand: async () => {\n await adapter.raiseHand();\n },\n /* @conditional-compile-remove(raise-hand) */\n onLowerHand: async () => {\n await adapter.lowerHand();\n },\n /* @conditional-compile-remove(raise-hand) */\n onToggleRaiseHand: async () => {\n adapter.getState().call?.raiseHand.localParticipantRaisedHand\n ? await adapter.lowerHand()\n : await adapter.raiseHand();\n },\n onSelectCamera: async (deviceInfo, options) => {\n await adapter.setCamera(deviceInfo, options);\n },\n onSelectMicrophone: async (deviceInfo) => {\n await adapter.setMicrophone(deviceInfo);\n },\n onSelectSpeaker: async (deviceInfo) => {\n await adapter.setSpeaker(deviceInfo);\n },\n onStartCall: (participants, options?) => {\n const rawIds = participants.map((participant) => toFlatCommunicationIdentifier(participant));\n return adapter.startCall(rawIds, options);\n },\n onStartScreenShare: async () => {\n await adapter.startScreenShare();\n },\n onStopScreenShare: async () => {\n await adapter.stopScreenShare();\n },\n onToggleCamera: async (options) => {\n isCameraOn(adapter.getState()) ? await adapter.stopCamera() : await adapter.startCamera(options);\n },\n onToggleMicrophone: async () => {\n return adapter.getState().call?.isMuted ? await adapter.unmute() : await adapter.mute();\n },\n onToggleScreenShare: async () => {\n return adapter.getState().call?.isScreenSharingOn\n ? await adapter.stopScreenShare()\n : await adapter.startScreenShare();\n },\n onStartLocalVideo: async () => {\n if (adapter.getState().call) {\n return adapter.startCamera();\n }\n },\n onDisposeLocalStreamView: async () => {\n return adapter.disposeLocalVideoStreamView();\n },\n onDisposeRemoteStreamView: async (userId) => {\n return adapter.disposeStreamView(userId);\n },\n onDisposeRemoteScreenShareStreamView: async (userId) => {\n return adapter.disposeScreenShareStreamView(userId);\n },\n onDisposeRemoteVideoStreamView: async (userId) => {\n return adapter.disposeRemoteVideoStreamView(userId);\n },\n /* @conditional-compile-remove(call-readiness) */\n askDevicePermission: async (constrain) => {\n return adapter.askDevicePermission(constrain);\n },\n /* @conditional-compile-remove(video-background-effects) */\n onRemoveVideoBackgroundEffects: async () => {\n return await adapter.stopVideoBackgroundEffects();\n },\n /* @conditional-compile-remove(video-background-effects) */\n onBlurVideoBackground: async (backgroundBlurConfig?: BackgroundBlurConfig) => {\n const blurConfig: VideoBackgroundBlurEffect = {\n effectName: 'blur',\n ...backgroundBlurConfig\n };\n return await adapter.startVideoBackgroundEffect(blurConfig);\n },\n /* @conditional-compile-remove(video-background-effects) */\n onReplaceVideoBackground: async (backgroundReplacementConfig: BackgroundReplacementConfig) => {\n const replacementConfig: VideoBackgroundReplacementEffect = {\n effectName: 'replacement',\n ...backgroundReplacementConfig\n };\n return await adapter.startVideoBackgroundEffect(replacementConfig);\n },\n /* @conditional-compile-remove(close-captions) */\n onStartCaptions: async (options) => {\n await adapter.startCaptions(options);\n },\n /* @conditional-compile-remove(close-captions) */\n onStopCaptions: async () => {\n await adapter.stopCaptions();\n },\n /* @conditional-compile-remove(close-captions) */\n onSetSpokenLanguage: async (language) => {\n await adapter.setSpokenLanguage(language);\n },\n /* @conditional-compile-remove(close-captions) */\n onSetCaptionLanguage: async (language) => {\n await adapter.setCaptionLanguage(language);\n }\n })\n);\n"]}
1
+ {"version":3,"file":"useHandlers.js","sourceRoot":"","sources":["../../../../../../../../react-composites/src/composites/CallComposite/hooks/useHandlers.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { CommonCallingHandlers } from '@internal/calling-component-bindings';\nimport { CommonProperties, toFlatCommunicationIdentifier } from '@internal/acs-ui-common';\nimport { ReactElement } from 'react';\nimport memoizeOne from 'memoize-one';\nimport { CommonCallAdapter } from '..';\n/* @conditional-compile-remove(video-background-effects) */\nimport { VideoBackgroundBlurEffect, VideoBackgroundReplacementEffect } from '..';\nimport { useAdapter } from '../adapter/CallAdapterProvider';\nimport { isCameraOn } from '../utils';\n/* @conditional-compile-remove(PSTN-calls) */\nimport { DtmfTone } from '@azure/communication-calling';\n/* @conditional-compile-remove(video-background-effects) */\nimport type { BackgroundReplacementConfig, BackgroundBlurConfig } from '@azure/communication-calling';\n/* @conditional-compile-remove(end-of-call-survey) */\nimport { CallSurvey, CallSurveyResponse } from '@azure/communication-calling';\n\n/**\n * @private\n */\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/explicit-function-return-type\nexport const useHandlers = <PropsT>(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _component: (props: PropsT) => ReactElement | null\n): Pick<CommonCallingHandlers, CommonProperties<CommonCallingHandlers, PropsT>> => {\n return createCompositeHandlers(useAdapter());\n};\n\nconst createCompositeHandlers = memoizeOne(\n (adapter: CommonCallAdapter): CommonCallingHandlers => ({\n onCreateLocalStreamView: async (options) => {\n return await adapter.createStreamView(undefined, options);\n },\n onCreateRemoteStreamView: async (userId, options) => {\n return await adapter.createStreamView(userId, options);\n },\n onHangUp: async (forEveryone?: boolean) => {\n await adapter.leaveCall(forEveryone);\n },\n /* @conditional-compile-remove(PSTN-calls) */\n onToggleHold: async () => {\n return adapter.getState().call?.state === 'LocalHold' ? await adapter.resumeCall() : await adapter.holdCall();\n },\n /* @conditional-compile-remove(PSTN-calls) */\n onAddParticipant: async (participant, options?) => {\n return await adapter.addParticipant(participant, options);\n },\n /* @conditional-compile-remove(PSTN-calls) */\n onSendDtmfTone: async (dtmfTone: DtmfTone) => {\n await adapter.sendDtmfTone(dtmfTone);\n },\n onRemoveParticipant: async (userId) => {\n await adapter.removeParticipant(userId);\n },\n /* @conditional-compile-remove(raise-hand) */\n onRaiseHand: async () => {\n await adapter.raiseHand();\n },\n /* @conditional-compile-remove(raise-hand) */\n onLowerHand: async () => {\n await adapter.lowerHand();\n },\n /* @conditional-compile-remove(raise-hand) */\n onToggleRaiseHand: async () => {\n adapter.getState().call?.raiseHand.localParticipantRaisedHand\n ? await adapter.lowerHand()\n : await adapter.raiseHand();\n },\n onSelectCamera: async (deviceInfo, options) => {\n await adapter.setCamera(deviceInfo, options);\n },\n onSelectMicrophone: async (deviceInfo) => {\n await adapter.setMicrophone(deviceInfo);\n },\n onSelectSpeaker: async (deviceInfo) => {\n await adapter.setSpeaker(deviceInfo);\n },\n onStartCall: (participants, options?) => {\n const rawIds = participants.map((participant) => toFlatCommunicationIdentifier(participant));\n return adapter.startCall(rawIds, options);\n },\n onStartScreenShare: async () => {\n await adapter.startScreenShare();\n },\n onStopScreenShare: async () => {\n await adapter.stopScreenShare();\n },\n onToggleCamera: async (options) => {\n isCameraOn(adapter.getState()) ? await adapter.stopCamera() : await adapter.startCamera(options);\n },\n onToggleMicrophone: async () => {\n return adapter.getState().call?.isMuted ? await adapter.unmute() : await adapter.mute();\n },\n onToggleScreenShare: async () => {\n return adapter.getState().call?.isScreenSharingOn\n ? await adapter.stopScreenShare()\n : await adapter.startScreenShare();\n },\n onStartLocalVideo: async () => {\n if (adapter.getState().call) {\n return adapter.startCamera();\n }\n },\n onDisposeLocalStreamView: async () => {\n return adapter.disposeLocalVideoStreamView();\n },\n onDisposeRemoteStreamView: async (userId) => {\n return adapter.disposeStreamView(userId);\n },\n onDisposeRemoteScreenShareStreamView: async (userId) => {\n return adapter.disposeScreenShareStreamView(userId);\n },\n onDisposeRemoteVideoStreamView: async (userId) => {\n return adapter.disposeRemoteVideoStreamView(userId);\n },\n /* @conditional-compile-remove(call-readiness) */\n askDevicePermission: async (constrain) => {\n return adapter.askDevicePermission(constrain);\n },\n /* @conditional-compile-remove(video-background-effects) */\n onRemoveVideoBackgroundEffects: async () => {\n return await adapter.stopVideoBackgroundEffects();\n },\n /* @conditional-compile-remove(video-background-effects) */\n onBlurVideoBackground: async (backgroundBlurConfig?: BackgroundBlurConfig) => {\n const blurConfig: VideoBackgroundBlurEffect = {\n effectName: 'blur',\n ...backgroundBlurConfig\n };\n return await adapter.startVideoBackgroundEffect(blurConfig);\n },\n /* @conditional-compile-remove(video-background-effects) */\n onReplaceVideoBackground: async (backgroundReplacementConfig: BackgroundReplacementConfig) => {\n const replacementConfig: VideoBackgroundReplacementEffect = {\n effectName: 'replacement',\n ...backgroundReplacementConfig\n };\n return await adapter.startVideoBackgroundEffect(replacementConfig);\n },\n /* @conditional-compile-remove(close-captions) */\n onStartCaptions: async (options) => {\n await adapter.startCaptions(options);\n },\n /* @conditional-compile-remove(close-captions) */\n onStopCaptions: async () => {\n await adapter.stopCaptions();\n },\n /* @conditional-compile-remove(close-captions) */\n onSetSpokenLanguage: async (language) => {\n await adapter.setSpokenLanguage(language);\n },\n /* @conditional-compile-remove(close-captions) */\n onSetCaptionLanguage: async (language) => {\n await adapter.setCaptionLanguage(language);\n },\n /* @conditional-compile-remove(end-of-call-survey) */\n onSubmitSurvey: async (survey: CallSurvey): Promise<CallSurveyResponse | undefined> => {\n return await adapter.submitSurvey(survey);\n }\n })\n);\n"]}
@@ -1,6 +1,7 @@
1
1
  /// <reference types="react" />
2
2
  import { IStyle } from '@fluentui/react';
3
3
  import { CallCompositeIcons } from '../../common/icons';
4
+ import { CallSurvey } from '@azure/communication-calling';
4
5
  /**
5
6
  * @private
6
7
  */
@@ -11,6 +12,38 @@ export interface NoticePageProps {
11
12
  dataUiId: string;
12
13
  disableStartCallButton?: boolean;
13
14
  pageStyle?: IStyle;
15
+ /**
16
+ * Options for end of call survey
17
+ */
18
+ surveyOptions?: {
19
+ /**
20
+ * Hide call survey at the end of a call.
21
+ * @defaultValue false
22
+ */
23
+ hideSurvey?: boolean;
24
+ /**
25
+ * Optional callback to handle survey data including free form text response
26
+ * Note that free form text response survey option is only going to be enabled when this callback is provided
27
+ * User will need to handle all free form text response on their own
28
+ */
29
+ onSurveySubmitted?: (callId: string, surveyId: string,
30
+ /**
31
+ * This is the survey results containing star survey data and API tag survey data.
32
+ * This part of the result will always be send to calling sdk
33
+ * This callback provides user with the ability to gain access to survey data
34
+ */
35
+ submittedSurvey: CallSurvey,
36
+ /**
37
+ * This is the survey results containing free form text
38
+ * This part of the result will not be handled by composites
39
+ * User will need to collect and handle this information 100% on their own
40
+ * Free form text survey is not going to show in the UI if onSurveySubmitted is not populated
41
+ */
42
+ improvementSuggestions: {
43
+ category: 'audio' | 'video' | 'screenshare';
44
+ suggestion: string;
45
+ }[]) => Promise<void>;
46
+ };
14
47
  }
15
48
  /**
16
49
  * Generic page with a title and more details text for serving up a notice to the user.
@@ -6,19 +6,27 @@ import { containerStyle, moreDetailsStyles, containerItemGap, titleStyles, rejoi
6
6
  import { useAdapter } from '../adapter/CallAdapterProvider';
7
7
  import { StartCallButton } from '../components/StartCallButton';
8
8
  import { CallCompositeIcon } from '../../common/icons';
9
+ /* @conditional-compile-remove(end-of-call-survey) */
10
+ import { useHandlers } from '../hooks/useHandlers';
11
+ /* @conditional-compile-remove(end-of-call-survey) */
12
+ import { SurveyPane } from '../../common/SurveyPane';
9
13
  /**
10
14
  * Generic page with a title and more details text for serving up a notice to the user.
11
15
  *
12
16
  * @private
13
17
  */
14
18
  export function NoticePage(props) {
19
+ var _a;
15
20
  const adapter = useAdapter();
21
+ /* @conditional-compile-remove(end-of-call-survey) */
22
+ const handlers = useHandlers(SurveyPane);
16
23
  return (React.createElement(Stack, { className: mergeStyles(props.pageStyle), verticalFill: true, verticalAlign: "center", horizontalAlign: "center", "data-ui-id": props.dataUiId, "aria-atomic": true },
17
24
  React.createElement(Stack, { className: mergeStyles(containerStyle), tokens: containerItemGap },
18
25
  props.iconName && React.createElement(CallCompositeIcon, { iconName: props.iconName }),
19
26
  React.createElement(Text, { className: mergeStyles(titleStyles), "aria-live": "assertive" }, props.title),
20
27
  React.createElement(Text, { className: mergeStyles(moreDetailsStyles), "aria-live": "assertive" }, props.moreDetails),
21
28
  !props.disableStartCallButton && (React.createElement(Stack, { styles: rejoinCallButtonContainerStyles },
22
- React.createElement(StartCallButton, { onClick: () => adapter.joinCall(), disabled: false, rejoinCall: true, autoFocus: true }))))));
29
+ React.createElement(StartCallButton, { onClick: () => adapter.joinCall(), disabled: false, rejoinCall: true, autoFocus: true })))),
30
+ /* @conditional-compile-remove(end-of-call-survey) */ !((_a = props.surveyOptions) === null || _a === void 0 ? void 0 : _a.hideSurvey) && (React.createElement(SurveyPane, Object.assign({}, handlers)))));
23
31
  }
24
32
  //# sourceMappingURL=NoticePage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"NoticePage.js","sourceRoot":"","sources":["../../../../../../../../react-composites/src/composites/CallComposite/pages/NoticePage.tsx"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAU,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,gBAAgB,EAChB,WAAW,EACX,+BAA+B,EAChC,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAsB,MAAM,oBAAoB,CAAC;AAc3E;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,KAAsB;IAC/C,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,OAAO,CACL,oBAAC,KAAK,IACJ,SAAS,EAAE,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,EACvC,YAAY,QACZ,aAAa,EAAC,QAAQ,EACtB,eAAe,EAAC,QAAQ,gBACZ,KAAK,CAAC,QAAQ;QAG1B,oBAAC,KAAK,IAAC,SAAS,EAAE,WAAW,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,gBAAgB;YACpE,KAAK,CAAC,QAAQ,IAAI,oBAAC,iBAAiB,IAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,GAAI;YAClE,oBAAC,IAAI,IAAC,SAAS,EAAE,WAAW,CAAC,WAAW,CAAC,eAAY,WAAW,IAC7D,KAAK,CAAC,KAAK,CACP;YACP,oBAAC,IAAI,IAAC,SAAS,EAAE,WAAW,CAAC,iBAAiB,CAAC,eAAY,WAAW,IACnE,KAAK,CAAC,WAAW,CACb;YACN,CAAC,KAAK,CAAC,sBAAsB,IAAI,CAChC,oBAAC,KAAK,IAAC,MAAM,EAAE,+BAA+B;gBAC5C,oBAAC,eAAe,IAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,SAAG,CAC7F,CACT,CACK,CACF,CACT,CAAC;AACJ,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport React from 'react';\nimport { IStyle, mergeStyles, Stack, Text } from '@fluentui/react';\nimport {\n containerStyle,\n moreDetailsStyles,\n containerItemGap,\n titleStyles,\n rejoinCallButtonContainerStyles\n} from '../styles/NoticePage.styles';\nimport { useAdapter } from '../adapter/CallAdapterProvider';\nimport { StartCallButton } from '../components/StartCallButton';\nimport { CallCompositeIcon, CallCompositeIcons } from '../../common/icons';\n\n/**\n * @private\n */\nexport interface NoticePageProps {\n iconName?: keyof CallCompositeIcons;\n title: string;\n moreDetails?: string;\n dataUiId: string;\n disableStartCallButton?: boolean;\n pageStyle?: IStyle;\n}\n\n/**\n * Generic page with a title and more details text for serving up a notice to the user.\n *\n * @private\n */\nexport function NoticePage(props: NoticePageProps): JSX.Element {\n const adapter = useAdapter();\n return (\n <Stack\n className={mergeStyles(props.pageStyle)}\n verticalFill\n verticalAlign=\"center\"\n horizontalAlign=\"center\"\n data-ui-id={props.dataUiId}\n aria-atomic\n >\n <Stack className={mergeStyles(containerStyle)} tokens={containerItemGap}>\n {props.iconName && <CallCompositeIcon iconName={props.iconName} />}\n <Text className={mergeStyles(titleStyles)} aria-live=\"assertive\">\n {props.title}\n </Text>\n <Text className={mergeStyles(moreDetailsStyles)} aria-live=\"assertive\">\n {props.moreDetails}\n </Text>\n {!props.disableStartCallButton && (\n <Stack styles={rejoinCallButtonContainerStyles}>\n <StartCallButton onClick={() => adapter.joinCall()} disabled={false} rejoinCall={true} autoFocus />\n </Stack>\n )}\n </Stack>\n </Stack>\n );\n}\n"]}
1
+ {"version":3,"file":"NoticePage.js","sourceRoot":"","sources":["../../../../../../../../react-composites/src/composites/CallComposite/pages/NoticePage.tsx"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAU,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,gBAAgB,EAChB,WAAW,EACX,+BAA+B,EAChC,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAsB,MAAM,oBAAoB,CAAC;AAG3E,qDAAqD;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,qDAAqD;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAkDrD;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,KAAsB;;IAC/C,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAE7B,qDAAqD;IACrD,MAAM,QAAQ,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;IAEzC,OAAO,CACL,oBAAC,KAAK,IACJ,SAAS,EAAE,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,EACvC,YAAY,QACZ,aAAa,EAAC,QAAQ,EACtB,eAAe,EAAC,QAAQ,gBACZ,KAAK,CAAC,QAAQ;QAG1B,oBAAC,KAAK,IAAC,SAAS,EAAE,WAAW,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,gBAAgB;YACpE,KAAK,CAAC,QAAQ,IAAI,oBAAC,iBAAiB,IAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,GAAI;YAClE,oBAAC,IAAI,IAAC,SAAS,EAAE,WAAW,CAAC,WAAW,CAAC,eAAY,WAAW,IAC7D,KAAK,CAAC,KAAK,CACP;YACP,oBAAC,IAAI,IAAC,SAAS,EAAE,WAAW,CAAC,iBAAiB,CAAC,eAAY,WAAW,IACnE,KAAK,CAAC,WAAW,CACb;YACN,CAAC,KAAK,CAAC,sBAAsB,IAAI,CAChC,oBAAC,KAAK,IAAC,MAAM,EAAE,+BAA+B;gBAC5C,oBAAC,eAAe,IAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,SAAG,CAC7F,CACT,CACK;QAEN,qDAAqD,CAAC,CAAC,CAAA,MAAA,KAAK,CAAC,aAAa,0CAAE,UAAU,CAAA,IAAI,CACxF,oBAAC,UAAU,oBAAK,QAAQ,EAAI,CAC7B,CAEG,CACT,CAAC;AACJ,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport React from 'react';\nimport { IStyle, mergeStyles, Stack, Text } from '@fluentui/react';\nimport {\n containerStyle,\n moreDetailsStyles,\n containerItemGap,\n titleStyles,\n rejoinCallButtonContainerStyles\n} from '../styles/NoticePage.styles';\nimport { useAdapter } from '../adapter/CallAdapterProvider';\nimport { StartCallButton } from '../components/StartCallButton';\nimport { CallCompositeIcon, CallCompositeIcons } from '../../common/icons';\n/* @conditional-compile-remove(end-of-call-survey) */\nimport { CallSurvey } from '@azure/communication-calling';\n/* @conditional-compile-remove(end-of-call-survey) */\nimport { useHandlers } from '../hooks/useHandlers';\n/* @conditional-compile-remove(end-of-call-survey) */\nimport { SurveyPane } from '../../common/SurveyPane';\n\n/**\n * @private\n */\nexport interface NoticePageProps {\n iconName?: keyof CallCompositeIcons;\n title: string;\n moreDetails?: string;\n dataUiId: string;\n disableStartCallButton?: boolean;\n pageStyle?: IStyle;\n /* @conditional-compile-remove(end-of-call-survey) */\n /**\n * Options for end of call survey\n */\n surveyOptions?: {\n /**\n * Hide call survey at the end of a call.\n * @defaultValue false\n */\n hideSurvey?: boolean;\n /**\n * Optional callback to handle survey data including free form text response\n * Note that free form text response survey option is only going to be enabled when this callback is provided\n * User will need to handle all free form text response on their own\n */\n onSurveySubmitted?: (\n callId: string,\n surveyId: string,\n /**\n * This is the survey results containing star survey data and API tag survey data.\n * This part of the result will always be send to calling sdk\n * This callback provides user with the ability to gain access to survey data\n */\n submittedSurvey: CallSurvey,\n /**\n * This is the survey results containing free form text\n * This part of the result will not be handled by composites\n * User will need to collect and handle this information 100% on their own\n * Free form text survey is not going to show in the UI if onSurveySubmitted is not populated\n */\n improvementSuggestions: {\n category: 'audio' | 'video' | 'screenshare';\n suggestion: string;\n }[]\n ) => Promise<void>;\n };\n}\n\n/**\n * Generic page with a title and more details text for serving up a notice to the user.\n *\n * @private\n */\nexport function NoticePage(props: NoticePageProps): JSX.Element {\n const adapter = useAdapter();\n\n /* @conditional-compile-remove(end-of-call-survey) */\n const handlers = useHandlers(SurveyPane);\n\n return (\n <Stack\n className={mergeStyles(props.pageStyle)}\n verticalFill\n verticalAlign=\"center\"\n horizontalAlign=\"center\"\n data-ui-id={props.dataUiId}\n aria-atomic\n >\n <Stack className={mergeStyles(containerStyle)} tokens={containerItemGap}>\n {props.iconName && <CallCompositeIcon iconName={props.iconName} />}\n <Text className={mergeStyles(titleStyles)} aria-live=\"assertive\">\n {props.title}\n </Text>\n <Text className={mergeStyles(moreDetailsStyles)} aria-live=\"assertive\">\n {props.moreDetails}\n </Text>\n {!props.disableStartCallButton && (\n <Stack styles={rejoinCallButtonContainerStyles}>\n <StartCallButton onClick={() => adapter.joinCall()} disabled={false} rejoinCall={true} autoFocus />\n </Stack>\n )}\n </Stack>\n {\n /* @conditional-compile-remove(end-of-call-survey) */ !props.surveyOptions?.hideSurvey && (\n <SurveyPane {...handlers} />\n )\n }\n </Stack>\n );\n}\n"]}
@@ -1,5 +1,6 @@
1
1
  /// <reference types="react" />
2
2
  import { PartialTheme, Theme } from '@fluentui/react';
3
+ import { CallSurvey } from '@azure/communication-calling';
3
4
  import { CallWithChatAdapter } from './adapter/CallWithChatAdapter';
4
5
  import { BaseCompositeProps } from '../common/BaseComposite';
5
6
  import { CallWithChatCompositeIcons } from '../common/icons';
@@ -137,6 +138,38 @@ export type CallWithChatCompositeOptions = {
137
138
  */
138
139
  layout?: VideoGalleryLayout;
139
140
  };
141
+ /**
142
+ * Options for end of call survey
143
+ */
144
+ surveyOptions?: {
145
+ /**
146
+ * Hide call survey at the end of a call.
147
+ * @defaultValue false
148
+ */
149
+ hideSurvey?: boolean;
150
+ /**
151
+ * Optional callback to handle survey data including free form text response
152
+ * Note that free form text response survey option is only going to be enabled when this callback is provided
153
+ * User will need to handle all free form text response on their own
154
+ */
155
+ onSurveySubmitted?: (callId: string, surveyId: string,
156
+ /**
157
+ * This is the survey results containing star survey data and API tag survey data.
158
+ * This part of the result will always be send to calling sdk
159
+ * This callback provides user with the ability to gain access to survey data
160
+ */
161
+ submittedSurvey: CallSurvey,
162
+ /**
163
+ * This is the survey results containing free form text
164
+ * This part of the result will not be handled by composites
165
+ * User will need to collect and handle this information 100% on their own
166
+ * Free form text survey is not going to show in the UI if onSurveySubmitted is not populated
167
+ */
168
+ improvementSuggestions: {
169
+ category: 'audio' | 'video' | 'screenshare';
170
+ suggestion: string;
171
+ }[]) => Promise<void>;
172
+ };
140
173
  /**
141
174
  * Options for setting additional customizations related to personalized branding.
142
175
  */