@azure/communication-react 1.4.2-alpha-202211290015.0 → 1.4.2-alpha-202212010027.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/dist/communication-react.d.ts +52 -24
  2. package/dist/dist-cjs/communication-react/index.js +117 -80
  3. package/dist/dist-cjs/communication-react/index.js.map +1 -1
  4. package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js +1 -1
  5. package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js.map +1 -1
  6. package/dist/dist-esm/calling-stateful-client/src/Logger.d.ts +1 -0
  7. package/dist/dist-esm/calling-stateful-client/src/Logger.js +1 -0
  8. package/dist/dist-esm/calling-stateful-client/src/Logger.js.map +1 -1
  9. package/dist/dist-esm/calling-stateful-client/src/StreamUtils.js +33 -10
  10. package/dist/dist-esm/calling-stateful-client/src/StreamUtils.js.map +1 -1
  11. package/dist/dist-esm/communication-react/src/index.d.ts +2 -1
  12. package/dist/dist-esm/communication-react/src/index.js +2 -0
  13. package/dist/dist-esm/communication-react/src/index.js.map +1 -1
  14. package/dist/dist-esm/react-components/src/components/UnsupportedBrowser.d.ts +5 -5
  15. package/dist/dist-esm/react-components/src/components/UnsupportedBrowser.js +4 -23
  16. package/dist/dist-esm/react-components/src/components/UnsupportedBrowser.js.map +1 -1
  17. package/dist/dist-esm/react-components/src/components/UnsupportedBrowserVersion.d.ts +33 -0
  18. package/dist/dist-esm/react-components/src/components/UnsupportedBrowserVersion.js +15 -0
  19. package/dist/dist-esm/react-components/src/components/UnsupportedBrowserVersion.js.map +1 -0
  20. package/dist/dist-esm/react-components/src/components/UnsupportedEnvironment.d.ts +30 -0
  21. package/dist/dist-esm/react-components/src/components/UnsupportedEnvironment.js +29 -0
  22. package/dist/dist-esm/react-components/src/components/UnsupportedEnvironment.js.map +1 -0
  23. package/dist/dist-esm/react-components/src/components/VideoTile.d.ts +8 -16
  24. package/dist/dist-esm/react-components/src/components/VideoTile.js +21 -13
  25. package/dist/dist-esm/react-components/src/components/VideoTile.js.map +1 -1
  26. package/dist/dist-esm/react-components/src/components/index.d.ts +2 -0
  27. package/dist/dist-esm/react-components/src/components/index.js +1 -1
  28. package/dist/dist-esm/react-components/src/components/index.js.map +1 -1
  29. package/dist/dist-esm/react-components/src/components/styles/{UnsupportedBrowser.styles.d.ts → UnsupportedEnvironment.styles.d.ts} +1 -1
  30. package/dist/dist-esm/react-components/src/components/styles/{UnsupportedBrowser.styles.js → UnsupportedEnvironment.styles.js} +3 -2
  31. package/dist/dist-esm/react-components/src/components/styles/UnsupportedEnvironment.styles.js.map +1 -0
  32. package/dist/dist-esm/react-components/src/components/styles/VideoTile.styles.d.ts +1 -1
  33. package/dist/dist-esm/react-components/src/components/styles/VideoTile.styles.js +11 -26
  34. package/dist/dist-esm/react-components/src/components/styles/VideoTile.styles.js.map +1 -1
  35. package/dist/dist-esm/react-components/src/components/utils.d.ts +1 -6
  36. package/dist/dist-esm/react-components/src/components/utils.js +0 -16
  37. package/dist/dist-esm/react-components/src/components/utils.js.map +1 -1
  38. package/dist/dist-esm/react-components/src/index.d.ts +0 -1
  39. package/dist/dist-esm/react-components/src/index.js.map +1 -1
  40. package/dist/dist-esm/react-components/src/localization/LocalizationProvider.d.ts +3 -0
  41. package/dist/dist-esm/react-components/src/localization/LocalizationProvider.js.map +1 -1
  42. package/dist/dist-esm/react-components/src/localization/locales/en-US/strings.json +6 -1
  43. package/dist/dist-esm/react-components/src/theming/icons.d.ts +2 -1
  44. package/dist/dist-esm/react-components/src/theming/icons.js +5 -3
  45. package/dist/dist-esm/react-components/src/theming/icons.js.map +1 -1
  46. package/dist/dist-esm/react-composites/src/composites/CallComposite/CallComposite.js +1 -1
  47. package/dist/dist-esm/react-composites/src/composites/CallComposite/CallComposite.js.map +1 -1
  48. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/AzureCommunicationCallAdapter.js +0 -1
  49. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/AzureCommunicationCallAdapter.js.map +1 -1
  50. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/UnsupportedBrowser.d.ts +2 -0
  51. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/UnsupportedBrowser.js +12 -7
  52. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/UnsupportedBrowser.js.map +1 -1
  53. package/dist/dist-esm/react-composites/src/composites/CallComposite/utils/Utils.js +6 -1
  54. package/dist/dist-esm/react-composites/src/composites/CallComposite/utils/Utils.js.map +1 -1
  55. package/dist/dist-esm/react-composites/src/composites/common/icons.d.ts +2 -1
  56. package/package.json +8 -8
  57. package/dist/dist-esm/react-components/src/components/styles/UnsupportedBrowser.styles.js.map +0 -1
@@ -50,10 +50,10 @@ import { IButtonProps } from '@fluentui/react';
50
50
  import { IButtonStyles } from '@fluentui/react';
51
51
  import { IContextualMenuItem } from '@fluentui/react';
52
52
  import { IContextualMenuItemStyles } from '@fluentui/react';
53
+ import { IContextualMenuProps } from '@fluentui/react';
53
54
  import { IContextualMenuStyles } from '@fluentui/react';
54
55
  import { IDropdownOption } from '@fluentui/react';
55
56
  import { IDropdownStyles } from '@fluentui/react';
56
- import { IIconProps } from '@fluentui/react';
57
57
  import { ILinkStyles } from '@fluentui/react';
58
58
  import { IMessageBarProps } from '@fluentui/react';
59
59
  import { IncomingCall } from '@azure/communication-calling';
@@ -3814,6 +3814,8 @@ export declare interface ComponentStrings {
3814
3814
  MicrophoneDomainPermissionsDenied: DomainPermissionsStrings;
3815
3815
  /** Strings for unsupported browser UI */
3816
3816
  UnsupportedBrowser: UnsupportedBrowserStrings;
3817
+ /** Strings for unsupported browser version UI */
3818
+ UnsupportedBrowserVersion: UnsupportedBrowserVersionStrings;
3817
3819
  /** Strings for BrowserPemissionDenied */
3818
3820
  BrowserPermissionDenied: BrowserPermissionDeniedStrings;
3819
3821
  /** Strings for BrowserPemissionDeniedIOS */
@@ -4550,9 +4552,10 @@ export declare const DEFAULT_COMPONENT_ICONS: {
4550
4552
  DomainPermissionMic: JSX.Element;
4551
4553
  DomainPermissionCameraDenied: JSX.Element;
4552
4554
  DomainPermissionMicDenied: JSX.Element;
4553
- UnsupportedBrowserWarning: JSX.Element;
4555
+ UnsupportedEnvironmentWarning: JSX.Element;
4554
4556
  BrowserPermissionDeniedError: JSX.Element;
4555
4557
  VideoTilePinned: JSX.Element;
4558
+ VideoTileMoreOptions: JSX.Element;
4556
4559
  };
4557
4560
 
4558
4561
  /**
@@ -4646,9 +4649,10 @@ export declare const DEFAULT_COMPOSITE_ICONS: {
4646
4649
  DomainPermissionMic: JSX.Element;
4647
4650
  DomainPermissionCameraDenied: JSX.Element;
4648
4651
  DomainPermissionMicDenied: JSX.Element;
4649
- UnsupportedBrowserWarning: JSX.Element;
4652
+ UnsupportedEnvironmentWarning: JSX.Element;
4650
4653
  BrowserPermissionDeniedError: JSX.Element;
4651
4654
  VideoTilePinned: JSX.Element;
4655
+ VideoTileMoreOptions: JSX.Element;
4652
4656
  };
4653
4657
 
4654
4658
  /**
@@ -7839,19 +7843,19 @@ export declare interface TypingIndicatorStylesProps extends BaseCustomStyles {
7839
7843
  }
7840
7844
 
7841
7845
  /**
7842
- * UI to display to the user that the browser they are using is not supported by calling application.
7846
+ * UI to display to the user that the browser they are using is not supported by Azure Communications Calling service.
7843
7847
  *
7844
7848
  * @beta
7845
7849
  */
7846
7850
  export declare const UnsupportedBrowser: (props: UnsupportedBrowserProps) => JSX.Element;
7847
7851
 
7848
7852
  /**
7849
- * props for UnsupportedBrowser UI
7853
+ * props for {@link UnsupportedBrowser} UI
7850
7854
  *
7851
7855
  * @beta
7852
7856
  */
7853
7857
  export declare interface UnsupportedBrowserProps {
7854
- /** Handler to perform a action when the help link is actioned */
7858
+ /** Handler to perform an action when the help link is actioned */
7855
7859
  onTroubleshootingClick?: () => void;
7856
7860
  /** String overrides for the component */
7857
7861
  strings: UnsupportedBrowserStrings;
@@ -7867,8 +7871,42 @@ export declare interface UnsupportedBrowserStrings {
7867
7871
  primaryText: string;
7868
7872
  /** String for the secondary text */
7869
7873
  secondaryText: string;
7870
- /** String for the help link */
7871
- moreHelpLink: string;
7874
+ /** String to display in the text for the help link */
7875
+ moreHelpText: string;
7876
+ }
7877
+
7878
+ /**
7879
+ * UI to display to the user that the browser version they are using is out of date
7880
+ * and not supported by Azure Communications Calling service.
7881
+ *
7882
+ * @beta
7883
+ */
7884
+ export declare const UnsupportedBrowserVersion: (props: UnsupportedBrowserVersionProps) => JSX.Element;
7885
+
7886
+ /**
7887
+ * props for {@link UnsupportedBrowserVersion} UI
7888
+ *
7889
+ * @beta
7890
+ */
7891
+ export declare interface UnsupportedBrowserVersionProps {
7892
+ /** Handler to perform an action when the help link is actioned */
7893
+ onTroubleshootingClick?: () => void;
7894
+ /** String overrides for the component */
7895
+ strings: UnsupportedBrowserVersionStrings;
7896
+ }
7897
+
7898
+ /**
7899
+ * Strings for UnsupportedBrowser component
7900
+ *
7901
+ * @beta
7902
+ */
7903
+ export declare interface UnsupportedBrowserVersionStrings {
7904
+ /** String for the primary text */
7905
+ primaryText: string;
7906
+ /** String for the secondary text */
7907
+ secondaryText: string;
7908
+ /** String to display in the text for the help link */
7909
+ moreHelpText: string;
7872
7910
  }
7873
7911
 
7874
7912
  /**
@@ -8295,18 +8333,6 @@ export declare interface VideoStreamRendererViewState {
8295
8333
  */
8296
8334
  export declare const VideoTile: (props: VideoTileProps) => JSX.Element;
8297
8335
 
8298
- /**
8299
- * @beta
8300
- * MenuItems to be diplayed in video tile in the contextual/drawer menu
8301
- */
8302
- export declare type VideoTileMenuItems = Array<{
8303
- key: string;
8304
- ariaLabel?: string;
8305
- text: string;
8306
- onClick: () => void;
8307
- iconProps: IIconProps;
8308
- }>;
8309
-
8310
8336
  /**
8311
8337
  * Props for {@link VideoTile}.
8312
8338
  *
@@ -8345,10 +8371,6 @@ export declare interface VideoTileProps {
8345
8371
  * Whether the video is muted or not.
8346
8372
  */
8347
8373
  isMuted?: boolean;
8348
- /**
8349
- * Display custom menu items in the VideoTile's contextual menu.
8350
- */
8351
- menuItems?: VideoTileMenuItems;
8352
8374
  /**
8353
8375
  * If true, the video tile will show the pin icon.
8354
8376
  */
@@ -8387,6 +8409,12 @@ export declare interface VideoTileProps {
8387
8409
  */
8388
8410
  participantState?: ParticipantState;
8389
8411
  strings?: VideoTileStrings;
8412
+ /**
8413
+ * Display custom menu items in the VideoTile's contextual menu.
8414
+ * Uses Fluent UI ContextualMenu.
8415
+ * An ellipses icon will be displayed to open the contextual menu if this prop is defined.
8416
+ */
8417
+ contextualMenu?: IContextualMenuProps;
8390
8418
  /**
8391
8419
  * Callback triggered by video tile on touch and hold.
8392
8420
  */
@@ -202,7 +202,7 @@ const _toCommunicationIdentifier = (id) => {
202
202
  // Copyright (c) Microsoft Corporation.
203
203
  // Licensed under the MIT license.
204
204
  // GENERATED FILE. DO NOT EDIT MANUALLY.
205
- var telemetryVersion = '1.4.2-alpha-202211290015.0';
205
+ var telemetryVersion = '1.4.2-alpha-202212010027.0';
206
206
 
207
207
  // Copyright (c) Microsoft Corporation.
208
208
  /**
@@ -1141,6 +1141,7 @@ var EventNames;
1141
1141
  EventNames["CREATE_STREAM_INVALID_PARAMS"] = "CREATE_STREAM_INVALID_PARAMS";
1142
1142
  EventNames["DISPOSE_STREAM_INVALID_PARAMS"] = "DISPOSE_LOCAL_STREAM_INVALID_PARAMS";
1143
1143
  EventNames["LOCAL_STREAM_ALREADY_RENDERED"] = "LOCAL_STREAM_ALREADY_RENDERED";
1144
+ EventNames["LOCAL_STREAM_ALREADY_DISPOSED"] = "LOCAL_STREAM_ALREADY_DISPOSED";
1144
1145
  EventNames["LOCAL_STREAM_STOPPING"] = "LOCAL_STREAM_STOPPING";
1145
1146
  EventNames["LOCAL_CREATED_STREAM_STOPPING"] = "LOCAL_CREATED_STREAM_STOPPING";
1146
1147
  EventNames["LOCAL_STREAM_RENDERING"] = "LOCAL_STREAM_RENDERING";
@@ -2146,13 +2147,15 @@ function createViewLocalVideo(context, internalContext, callId, options) {
2146
2147
  });
2147
2148
  return;
2148
2149
  }
2150
+ // "Stopping" only happens if the stream was in "rendering" but `disposeView` was called.
2151
+ // Now that `createView` has been re-called, we can flip the state back to "rendering".
2149
2152
  if (renderInfo.status === 'Stopping') {
2150
2153
  _logEvent(callingStatefulLogger, {
2151
2154
  name: EventNames.LOCAL_STREAM_STOPPING,
2152
2155
  level: 'warning',
2153
- message: 'LocalVideoStream is in the middle of stopping.'
2156
+ message: 'LocalVideoStream was marked as stopping by dispose view. Resetting state to "Rendering".'
2154
2157
  });
2155
- console.warn('LocalVideoStream is in the middle of stopping');
2158
+ internalContext.setLocalRenderInfo(callId, renderInfo.stream, 'Rendering', renderInfo.renderer);
2156
2159
  return;
2157
2160
  }
2158
2161
  const renderer = new communicationCalling.VideoStreamRenderer(renderInfo.stream);
@@ -2363,21 +2366,42 @@ function disposeViewLocalVideo(context, internalContext, callId) {
2363
2366
  });
2364
2367
  return;
2365
2368
  }
2366
- // Sets the status and also renderer. I think we need to always set renderer to undefined since in all status when
2367
- // cleaned up should have renderer as undefined. If the status is 'Rendered' and renderer is not defined it should
2368
- // be cleaned up below so we can set it to undefined here.
2369
- if (renderInfo.status === 'Rendering') {
2369
+ // Nothing to dispose of or clean up -- we can safely exit early here.
2370
+ if (renderInfo.status === 'NotRendered') {
2371
+ _logEvent(callingStatefulLogger, {
2372
+ name: EventNames.LOCAL_STREAM_ALREADY_DISPOSED,
2373
+ level: 'info',
2374
+ message: 'LocalVideoStream is already disposed.'
2375
+ });
2376
+ return;
2377
+ }
2378
+ // Status is already marked as "stopping" so we can exit early here. This is because stopping only occurs
2379
+ // when the stream is being created in createView but hasn't been completed being created yet. The createView
2380
+ // method will see the "stopping" status and perform the cleanup
2381
+ if (renderInfo.status === 'Stopping') {
2370
2382
  _logEvent(callingStatefulLogger, {
2371
2383
  name: EventNames.LOCAL_STREAM_STOPPING,
2372
2384
  level: 'info',
2373
- message: 'Local stream is still rendering. Changing status to stopping.',
2385
+ message: 'Local stream is already stopping.',
2374
2386
  data: streamLogInfo
2375
2387
  });
2376
- internalContext.setLocalRenderInfo(callId, renderInfo.stream, 'Stopping', undefined);
2388
+ return;
2377
2389
  }
2378
- else {
2379
- internalContext.setLocalRenderInfo(callId, renderInfo.stream, 'NotRendered', undefined);
2390
+ // If the stream is in the middle of being rendered (i.e. has state "Rendering"), we need the status as
2391
+ // "stopping" without performing any cleanup. This will tell the `createView` method that it should stop
2392
+ // rendering and clean up the state once the view has finished being created.
2393
+ if (renderInfo.status === 'Rendering') {
2394
+ _logEvent(callingStatefulLogger, {
2395
+ name: EventNames.REMOTE_STREAM_STOPPING,
2396
+ level: 'info',
2397
+ message: 'Remote stream is still rendering. Changing status to stopping.',
2398
+ data: streamLogInfo
2399
+ });
2400
+ internalContext.setLocalRenderInfo(callId, renderInfo.stream, 'Stopping', renderInfo.renderer);
2401
+ return;
2380
2402
  }
2403
+ // Else the state must be in the "Rendered" state, so we can dispose the renderer and clean up the state.
2404
+ internalContext.setLocalRenderInfo(callId, renderInfo.stream, 'NotRendered', undefined);
2381
2405
  if (renderInfo.renderer) {
2382
2406
  _logEvent(callingStatefulLogger, {
2383
2407
  name: EventNames.DISPOSING_LOCAL_RENDERER,
@@ -3916,7 +3940,7 @@ const typingIndicatorStringStyle = react.mergeStyles({
3916
3940
  wordBreak: 'break-word'
3917
3941
  });
3918
3942
 
3919
- var participantItem$d={isMeText:"(you)",menuTitle:"More Options",removeButtonLabel:"Remove",sharingIconLabel:"Sharing",mutedIconLabel:"Muted",displayNamePlaceholder:"Unnamed participant",participantStateConnecting:"Calling...",participantStateRinging:"Calling...",participantStateHold:"On hold"};var typingIndicator$d={singleUser:"{user} is typing ...",multipleUsers:"{users} are typing ...",multipleUsersAbbreviateOne:"{users} and 1 other are typing ...",multipleUsersAbbreviateMany:"{users} and {numOthers} others are typing ...",delimiter:", "};var sendBox$d={placeholderText:"Enter a message",textTooLong:"Your message length is over the maximum limit.",sendButtonAriaLabel:"Send message",fileUploadsPendingError:"Uploading... Please wait.",removeFile:"Remove file",uploading:"Uploading",uploadCompleted:"Upload completed"};var messageStatusIndicator$d={deliveredAriaLabel:"Message sent",deliveredTooltipText:"Sent",seenAriaLabel:"Message seen by others",seenTooltipText:"Seen",readByTooltipText:"Read by {messageThreadReadCount} of {remoteParticipantsCount}",sendingAriaLabel:"Message sending",sendingTooltipText:"Sending",failedToSendAriaLabel:"Message failed to send",failedToSendTooltipText:"Failed to send"};var endCallButton$d={label:"Leave",tooltipContent:"Leave call"};var cameraButton$d={onLabel:"Turn off",offLabel:"Turn on",tooltipDisabledContent:"Camera is disabled",tooltipOnContent:"Turn off camera",tooltipOffContent:"Turn on camera",tooltipVideoLoadingContent:"Video is loading",cameraMenuTitle:"Camera",cameraMenuTooltip:"Choose camera",cameraButtonSplitRoleDescription:"Split button",onSplitButtonAriaLabel:"Turn off camera and camera options",offSplitButtonAriaLabel:"Turn on camera and camera options",cameraActionTurnedOnAnnouncement:"Your camera has been turned on",cameraActionTurnedOffAnnouncement:"Your camera has been turned off"};var microphoneButton$d={onLabel:"Mute",offLabel:"Unmute",tooltipDisabledContent:"Microphone is disabled",tooltipOnContent:"Mute microphone",tooltipOffContent:"Unmute microphone",microphoneMenuTitle:"Microphone",microphoneMenuTooltip:"Choose microphone",speakerMenuTitle:"Speaker",speakerMenuTooltip:"Choose speaker",microphoneButtonSplitRoleDescription:"Split button",onSplitButtonAriaLabel:"Mute microphone and audio options",offSplitButtonAriaLabel:"Unmute microphone and audio options",microphoneActionTurnedOnAnnouncement:"Your microphone has been turned on",microphoneActionTurnedOffAnnouncement:"Your microphone has been turned off"};var devicesButton$d={label:"Devices",tooltipContent:"Manage devices",cameraMenuTitle:"Camera",cameraMenuTooltip:"Choose camera",audioDeviceMenuTitle:"Audio Device",audioDeviceMenuTooltip:"Choose audio device",microphoneMenuTitle:"Microphone",microphoneMenuTooltip:"Choose microphone",speakerMenuTitle:"Speaker",speakerMenuTooltip:"Choose speaker"};var participantsButton$d={label:"People",tooltipContent:"Show participants",menuHeader:"In this call",participantsListButtonLabel:"{numParticipants} people",muteAllButtonLabel:"Mute all",copyInviteLinkButtonLabel:"Copy invite link"};var screenShareButton$d={onLabel:"Stop presenting",offLabel:"Present",tooltipDisabledContent:"Presenting is disabled",tooltipOnContent:"Presenting your screen",tooltipOffContent:"Present your screen"};var messageThread$d={yesterday:"Yesterday",sunday:"Sunday",monday:"Monday",tuesday:"Tuesday",wednesday:"Wednesday",thursday:"Thursday",friday:"Friday",saturday:"Saturday",participantJoined:"joined the chat.",participantLeft:"left the chat.",editMessage:"Edit",removeMessage:"Delete",resendMessage:"Try sending again",failToSendTag:"Failed to send",editedTag:"Edited",liveAuthorIntro:"{author} says",messageContentAriaText:"{author} said {message}",messageContentMineAriaText:"You said {message}",editBoxTextLimit:"Your message is over the limit of {limitNumber} characters",editBoxPlaceholderText:"Edit your message",newMessagesIndicator:"New messages",noDisplayNameSub:"No name",editBoxCancelButton:"Cancel",editBoxSubmitButton:"Submit",messageReadCount:"Read by {messageReadByCount} of {remoteParticipantsCount}",actionMenuMoreOptions:"More Options",downloadFile:"Download file"};var errorBar$d={unableToReachChatService:"You are offline",accessDenied:"Unable to access chat services - please check the user credentials provided",userNotInChatThread:"You are no longer in this chat thread",sendMessageNotInChatThread:"Failed to send message because you are no longer in this chat thread",sendMessageGeneric:"Failed to send message",callingNetworkFailure:"Troubling connecting call - you seem to be offline",startVideoGeneric:"Failed to start video",stopVideoGeneric:"Failed to stop video",muteGeneric:"Failed to mute microphone",unmuteGeneric:"Failed to unmute microphone",speakingWhileMuted:"Your microphone is muted",startScreenShareGeneric:"Failed to start screen sharing",stopScreenShareGeneric:"Failed to stop screen sharing",callNetworkQualityLow:"Network quality is low.",callNoSpeakerFound:"No speakers or headphones found. Connect an audio device to hear the call.",callNoMicrophoneFound:"No microphones found. Connect an audio input device.",callMicrophoneAccessDenied:"Unable to access microphone. Click the lock in the address bar to grant permission to this webpage.",callMicrophoneMutedBySystem:"You are muted by your system.",callMicrophoneUnmutedBySystem:"Your microphone recovered and you were unmuted by your system.",callMacOsMicrophoneAccessDenied:"Unable to access microphone. Grant microphone permission in your macOS privacy settings.",callLocalVideoFreeze:"Network bandwidth is poor. Your video may appear paused for others on the call.",callCameraAccessDenied:"Unable to access camera. Click the lock in the address bar to grant permission to this webpage.",callCameraAlreadyInUse:"Unable to access camera. It may already be in use by another application.",callVideoStoppedBySystem:"Your video has been stopped by your system.",callVideoRecoveredBySystem:"Your video has resumed.",callMacOsCameraAccessDenied:"MacOS is blocking access to your camera. Update your privacy settings to allow this browser to access your camera.",callMacOsScreenShareAccessDenied:"MacOS is blocking screen sharing. Update your privacy settings to allow this browser to record your screen.",dismissButtonAriaLabel:"Close",failedToJoinCallGeneric:"Failed to join call.",failedToJoinCallInvalidMeetingLink:"Unable to join Meeting. Invalid Link."};var videoGallery$d={screenIsBeingSharedMessage:"You are sharing your screen",screenShareLoadingMessage:"Loading {participant}'s screen",localVideoLabel:"You",localVideoCameraSwitcherLabel:"Switch camera",localVideoMovementLabel:"Movable Local Video Tile",localVideoSelectedDescription:"{cameraName} selected",displayNamePlaceholder:"Unnamed participant"};var dialpad$d={placeholderText:"Enter phone number",deleteButtonAriaLabel:"Delete"};var holdButton$d={onLabel:"Resume",offLabel:"Hold",tooltipOnContent:"Resume call",tooltipOffContent:"Hold call"};var videoTile$d={participantStateConnecting:"Calling...",participantStateRinging:"Calling...",participantStateHold:"On hold"};var CameraAndMicrophoneDomainPermissionsRequest={primaryText:"Allow {appName} to use your camera and microphone",secondaryText:"This is so participants can see and hear you.",linkText:"Need help? Get troubleshooting help",primaryButtonText:"Continue without camera and microphone",ariaLabel:"Allow camera and microphone access"};var CameraDomainPermissionsRequest={primaryText:"Allow {appName} to use your camera",secondaryText:"This is so participants can see you.",linkText:"Need help? Get troubleshooting help",primaryButtonText:"Continue without camera",ariaLabel:"Allow camera access"};var MicrophoneDomainPermissionsRequest={primaryText:"Allow {appName} to use your microphone",secondaryText:"This is so participants can hear you.",linkText:"Need help? Get troubleshooting help",primaryButtonText:"Continue without microphone",ariaLabel:"Allow microphone access"};var CameraAndMicrophoneDomainPermissionsCheck={primaryText:"Checking for camera and microphone access",secondaryText:"Allow access if prompted. This is so participants can see and hear you.",linkText:"Need help? Get troubleshooting help",primaryButtonText:"Continue without camera and microphone",ariaLabel:"Checking for camera and microphone access. Allow access if prompted."};var CameraDomainPermissionsCheck={primaryText:"Checking for camera access",secondaryText:"Allow access if prompted. This is so participants can see you.",linkText:"Need help? Get troubleshooting help",primaryButtonText:"Continue without camera",ariaLabel:"Checking for camera access. Allow access if prompted."};var MicrophoneDomainPermissionsCheck={primaryText:"Checking for microphone access",secondaryText:"Allow access if prompted. This is so participants can hear you.",linkText:"Need help? Get troubleshooting help",primaryButtonText:"Continue without microphone",ariaLabel:"Checking for microphone access. Allow access if prompted."};var CameraAndMicrophoneDomainPermissionsDenied={primaryText:"Unable to access camera and microphone",secondaryText:"Click the lock icon in the address bar to grant microphone permissions to this webpage. A page refresh may be required.",primaryButtonText:"Continue without camera and microphone",linkText:"Need help? Get troubleshooting help"};var CameraDomainPermissionsDenied={primaryText:"Unable to access camera",secondaryText:"Click the lock icon in the address bar to grant camera permissions to this webpage. A page refresh may be required.",primaryButtonText:"Continue without camera",linkText:"Need help? Get troubleshooting help"};var MicrophoneDomainPermissionsDenied={primaryText:"Unable to access microphone",secondaryText:"Click the lock icon in the address bar to grant microphone permissions to this webpage. A page refresh may be required.",primaryButtonText:"Continue without microphone",linkText:"Need help? Get troubleshooting help"};var UnsupportedBrowser$e={primaryText:"Browser not supported",secondaryText:"Please join this call using a compatible browser.",moreHelpLink:"More help"};var BrowserPermissionDenied$d={primaryText:"Can't use your camera or microphone",secondaryText:"Your browser might not have access to your camera or microphone. To fix this, open System Preferences.",primaryButtonText:"Try again",linkText:"Need help? Get troubleshooting help"};var BrowserPermissionDeniedIOS$d={primaryText:"Allow microphone access to continue",secondaryText:"So other participants can hear you.",primaryButtonText:"Try again",imageAltText:"Microphone and camera device permission location for iOS",linkText:"Need help? Get troubleshooting help",step1Text:"Go to the Settings app",step2Text:"Scroll down to settings for this browser",step3Text:"Turn on Microphone (Camera optional)",step4Text:"Try joining the call again",step1DigitText:"1",step2DigitText:"2",step3DigitText:"3",step4DigitText:"4"};var en_US$1 = {participantItem:participantItem$d,typingIndicator:typingIndicator$d,sendBox:sendBox$d,messageStatusIndicator:messageStatusIndicator$d,endCallButton:endCallButton$d,cameraButton:cameraButton$d,microphoneButton:microphoneButton$d,devicesButton:devicesButton$d,participantsButton:participantsButton$d,screenShareButton:screenShareButton$d,messageThread:messageThread$d,errorBar:errorBar$d,videoGallery:videoGallery$d,dialpad:dialpad$d,holdButton:holdButton$d,videoTile:videoTile$d,CameraAndMicrophoneDomainPermissionsRequest:CameraAndMicrophoneDomainPermissionsRequest,CameraDomainPermissionsRequest:CameraDomainPermissionsRequest,MicrophoneDomainPermissionsRequest:MicrophoneDomainPermissionsRequest,CameraAndMicrophoneDomainPermissionsCheck:CameraAndMicrophoneDomainPermissionsCheck,CameraDomainPermissionsCheck:CameraDomainPermissionsCheck,MicrophoneDomainPermissionsCheck:MicrophoneDomainPermissionsCheck,CameraAndMicrophoneDomainPermissionsDenied:CameraAndMicrophoneDomainPermissionsDenied,CameraDomainPermissionsDenied:CameraDomainPermissionsDenied,MicrophoneDomainPermissionsDenied:MicrophoneDomainPermissionsDenied,UnsupportedBrowser:UnsupportedBrowser$e,BrowserPermissionDenied:BrowserPermissionDenied$d,BrowserPermissionDeniedIOS:BrowserPermissionDeniedIOS$d};
3943
+ var participantItem$d={isMeText:"(you)",menuTitle:"More Options",removeButtonLabel:"Remove",sharingIconLabel:"Sharing",mutedIconLabel:"Muted",displayNamePlaceholder:"Unnamed participant",participantStateConnecting:"Calling...",participantStateRinging:"Calling...",participantStateHold:"On hold"};var typingIndicator$d={singleUser:"{user} is typing ...",multipleUsers:"{users} are typing ...",multipleUsersAbbreviateOne:"{users} and 1 other are typing ...",multipleUsersAbbreviateMany:"{users} and {numOthers} others are typing ...",delimiter:", "};var sendBox$d={placeholderText:"Enter a message",textTooLong:"Your message length is over the maximum limit.",sendButtonAriaLabel:"Send message",fileUploadsPendingError:"Uploading... Please wait.",removeFile:"Remove file",uploading:"Uploading",uploadCompleted:"Upload completed"};var messageStatusIndicator$d={deliveredAriaLabel:"Message sent",deliveredTooltipText:"Sent",seenAriaLabel:"Message seen by others",seenTooltipText:"Seen",readByTooltipText:"Read by {messageThreadReadCount} of {remoteParticipantsCount}",sendingAriaLabel:"Message sending",sendingTooltipText:"Sending",failedToSendAriaLabel:"Message failed to send",failedToSendTooltipText:"Failed to send"};var endCallButton$d={label:"Leave",tooltipContent:"Leave call"};var cameraButton$d={onLabel:"Turn off",offLabel:"Turn on",tooltipDisabledContent:"Camera is disabled",tooltipOnContent:"Turn off camera",tooltipOffContent:"Turn on camera",tooltipVideoLoadingContent:"Video is loading",cameraMenuTitle:"Camera",cameraMenuTooltip:"Choose camera",cameraButtonSplitRoleDescription:"Split button",onSplitButtonAriaLabel:"Turn off camera and camera options",offSplitButtonAriaLabel:"Turn on camera and camera options",cameraActionTurnedOnAnnouncement:"Your camera has been turned on",cameraActionTurnedOffAnnouncement:"Your camera has been turned off"};var microphoneButton$d={onLabel:"Mute",offLabel:"Unmute",tooltipDisabledContent:"Microphone is disabled",tooltipOnContent:"Mute microphone",tooltipOffContent:"Unmute microphone",microphoneMenuTitle:"Microphone",microphoneMenuTooltip:"Choose microphone",speakerMenuTitle:"Speaker",speakerMenuTooltip:"Choose speaker",microphoneButtonSplitRoleDescription:"Split button",onSplitButtonAriaLabel:"Mute microphone and audio options",offSplitButtonAriaLabel:"Unmute microphone and audio options",microphoneActionTurnedOnAnnouncement:"Your microphone has been turned on",microphoneActionTurnedOffAnnouncement:"Your microphone has been turned off"};var devicesButton$d={label:"Devices",tooltipContent:"Manage devices",cameraMenuTitle:"Camera",cameraMenuTooltip:"Choose camera",audioDeviceMenuTitle:"Audio Device",audioDeviceMenuTooltip:"Choose audio device",microphoneMenuTitle:"Microphone",microphoneMenuTooltip:"Choose microphone",speakerMenuTitle:"Speaker",speakerMenuTooltip:"Choose speaker"};var participantsButton$d={label:"People",tooltipContent:"Show participants",menuHeader:"In this call",participantsListButtonLabel:"{numParticipants} people",muteAllButtonLabel:"Mute all",copyInviteLinkButtonLabel:"Copy invite link"};var screenShareButton$d={onLabel:"Stop presenting",offLabel:"Present",tooltipDisabledContent:"Presenting is disabled",tooltipOnContent:"Presenting your screen",tooltipOffContent:"Present your screen"};var messageThread$d={yesterday:"Yesterday",sunday:"Sunday",monday:"Monday",tuesday:"Tuesday",wednesday:"Wednesday",thursday:"Thursday",friday:"Friday",saturday:"Saturday",participantJoined:"joined the chat.",participantLeft:"left the chat.",editMessage:"Edit",removeMessage:"Delete",resendMessage:"Try sending again",failToSendTag:"Failed to send",editedTag:"Edited",liveAuthorIntro:"{author} says",messageContentAriaText:"{author} said {message}",messageContentMineAriaText:"You said {message}",editBoxTextLimit:"Your message is over the limit of {limitNumber} characters",editBoxPlaceholderText:"Edit your message",newMessagesIndicator:"New messages",noDisplayNameSub:"No name",editBoxCancelButton:"Cancel",editBoxSubmitButton:"Submit",messageReadCount:"Read by {messageReadByCount} of {remoteParticipantsCount}",actionMenuMoreOptions:"More Options",downloadFile:"Download file"};var errorBar$d={unableToReachChatService:"You are offline",accessDenied:"Unable to access chat services - please check the user credentials provided",userNotInChatThread:"You are no longer in this chat thread",sendMessageNotInChatThread:"Failed to send message because you are no longer in this chat thread",sendMessageGeneric:"Failed to send message",callingNetworkFailure:"Troubling connecting call - you seem to be offline",startVideoGeneric:"Failed to start video",stopVideoGeneric:"Failed to stop video",muteGeneric:"Failed to mute microphone",unmuteGeneric:"Failed to unmute microphone",speakingWhileMuted:"Your microphone is muted",startScreenShareGeneric:"Failed to start screen sharing",stopScreenShareGeneric:"Failed to stop screen sharing",callNetworkQualityLow:"Network quality is low.",callNoSpeakerFound:"No speakers or headphones found. Connect an audio device to hear the call.",callNoMicrophoneFound:"No microphones found. Connect an audio input device.",callMicrophoneAccessDenied:"Unable to access microphone. Click the lock in the address bar to grant permission to this webpage.",callMicrophoneMutedBySystem:"You are muted by your system.",callMicrophoneUnmutedBySystem:"Your microphone recovered and you were unmuted by your system.",callMacOsMicrophoneAccessDenied:"Unable to access microphone. Grant microphone permission in your macOS privacy settings.",callLocalVideoFreeze:"Network bandwidth is poor. Your video may appear paused for others on the call.",callCameraAccessDenied:"Unable to access camera. Click the lock in the address bar to grant permission to this webpage.",callCameraAlreadyInUse:"Unable to access camera. It may already be in use by another application.",callVideoStoppedBySystem:"Your video has been stopped by your system.",callVideoRecoveredBySystem:"Your video has resumed.",callMacOsCameraAccessDenied:"MacOS is blocking access to your camera. Update your privacy settings to allow this browser to access your camera.",callMacOsScreenShareAccessDenied:"MacOS is blocking screen sharing. Update your privacy settings to allow this browser to record your screen.",dismissButtonAriaLabel:"Close",failedToJoinCallGeneric:"Failed to join call.",failedToJoinCallInvalidMeetingLink:"Unable to join Meeting. Invalid Link."};var videoGallery$d={screenIsBeingSharedMessage:"You are sharing your screen",screenShareLoadingMessage:"Loading {participant}'s screen",localVideoLabel:"You",localVideoCameraSwitcherLabel:"Switch camera",localVideoMovementLabel:"Movable Local Video Tile",localVideoSelectedDescription:"{cameraName} selected",displayNamePlaceholder:"Unnamed participant"};var dialpad$d={placeholderText:"Enter phone number",deleteButtonAriaLabel:"Delete"};var holdButton$d={onLabel:"Resume",offLabel:"Hold",tooltipOnContent:"Resume call",tooltipOffContent:"Hold call"};var videoTile$d={participantStateConnecting:"Calling...",participantStateRinging:"Calling...",participantStateHold:"On hold"};var CameraAndMicrophoneDomainPermissionsRequest={primaryText:"Allow {appName} to use your camera and microphone",secondaryText:"This is so participants can see and hear you.",linkText:"Need help? Get troubleshooting help",primaryButtonText:"Continue without camera and microphone",ariaLabel:"Allow camera and microphone access"};var CameraDomainPermissionsRequest={primaryText:"Allow {appName} to use your camera",secondaryText:"This is so participants can see you.",linkText:"Need help? Get troubleshooting help",primaryButtonText:"Continue without camera",ariaLabel:"Allow camera access"};var MicrophoneDomainPermissionsRequest={primaryText:"Allow {appName} to use your microphone",secondaryText:"This is so participants can hear you.",linkText:"Need help? Get troubleshooting help",primaryButtonText:"Continue without microphone",ariaLabel:"Allow microphone access"};var CameraAndMicrophoneDomainPermissionsCheck={primaryText:"Checking for camera and microphone access",secondaryText:"Allow access if prompted. This is so participants can see and hear you.",linkText:"Need help? Get troubleshooting help",primaryButtonText:"Continue without camera and microphone",ariaLabel:"Checking for camera and microphone access. Allow access if prompted."};var CameraDomainPermissionsCheck={primaryText:"Checking for camera access",secondaryText:"Allow access if prompted. This is so participants can see you.",linkText:"Need help? Get troubleshooting help",primaryButtonText:"Continue without camera",ariaLabel:"Checking for camera access. Allow access if prompted."};var MicrophoneDomainPermissionsCheck={primaryText:"Checking for microphone access",secondaryText:"Allow access if prompted. This is so participants can hear you.",linkText:"Need help? Get troubleshooting help",primaryButtonText:"Continue without microphone",ariaLabel:"Checking for microphone access. Allow access if prompted."};var CameraAndMicrophoneDomainPermissionsDenied={primaryText:"Unable to access camera and microphone",secondaryText:"Click the lock icon in the address bar to grant microphone permissions to this webpage. A page refresh may be required.",primaryButtonText:"Continue without camera and microphone",linkText:"Need help? Get troubleshooting help"};var CameraDomainPermissionsDenied={primaryText:"Unable to access camera",secondaryText:"Click the lock icon in the address bar to grant camera permissions to this webpage. A page refresh may be required.",primaryButtonText:"Continue without camera",linkText:"Need help? Get troubleshooting help"};var MicrophoneDomainPermissionsDenied={primaryText:"Unable to access microphone",secondaryText:"Click the lock icon in the address bar to grant microphone permissions to this webpage. A page refresh may be required.",primaryButtonText:"Continue without microphone",linkText:"Need help? Get troubleshooting help"};var UnsupportedBrowser$e={primaryText:"Browser not supported",secondaryText:"Please join this call using a compatible browser.",moreHelpText:"More help"};var UnsupportedBrowserVersion$1={primaryText:"Browser version not supported",secondaryText:"Please update your browser and then try joining the call again.",moreHelpText:"See compatibility requirements"};var BrowserPermissionDenied$d={primaryText:"Can't use your camera or microphone",secondaryText:"Your browser might not have access to your camera or microphone. To fix this, open System Preferences.",primaryButtonText:"Try again",linkText:"Need help? Get troubleshooting help"};var BrowserPermissionDeniedIOS$d={primaryText:"Allow microphone access to continue",secondaryText:"So other participants can hear you.",primaryButtonText:"Try again",imageAltText:"Microphone and camera device permission location for iOS",linkText:"Need help? Get troubleshooting help",step1Text:"Go to the Settings app",step2Text:"Scroll down to settings for this browser",step3Text:"Turn on Microphone (Camera optional)",step4Text:"Try joining the call again",step1DigitText:"1",step2DigitText:"2",step3DigitText:"3",step4DigitText:"4"};var en_US$1 = {participantItem:participantItem$d,typingIndicator:typingIndicator$d,sendBox:sendBox$d,messageStatusIndicator:messageStatusIndicator$d,endCallButton:endCallButton$d,cameraButton:cameraButton$d,microphoneButton:microphoneButton$d,devicesButton:devicesButton$d,participantsButton:participantsButton$d,screenShareButton:screenShareButton$d,messageThread:messageThread$d,errorBar:errorBar$d,videoGallery:videoGallery$d,dialpad:dialpad$d,holdButton:holdButton$d,videoTile:videoTile$d,CameraAndMicrophoneDomainPermissionsRequest:CameraAndMicrophoneDomainPermissionsRequest,CameraDomainPermissionsRequest:CameraDomainPermissionsRequest,MicrophoneDomainPermissionsRequest:MicrophoneDomainPermissionsRequest,CameraAndMicrophoneDomainPermissionsCheck:CameraAndMicrophoneDomainPermissionsCheck,CameraDomainPermissionsCheck:CameraDomainPermissionsCheck,MicrophoneDomainPermissionsCheck:MicrophoneDomainPermissionsCheck,CameraAndMicrophoneDomainPermissionsDenied:CameraAndMicrophoneDomainPermissionsDenied,CameraDomainPermissionsDenied:CameraDomainPermissionsDenied,MicrophoneDomainPermissionsDenied:MicrophoneDomainPermissionsDenied,UnsupportedBrowser:UnsupportedBrowser$e,UnsupportedBrowserVersion:UnsupportedBrowserVersion$1,BrowserPermissionDenied:BrowserPermissionDenied$d,BrowserPermissionDeniedIOS:BrowserPermissionDeniedIOS$d};
3920
3944
 
3921
3945
  var participantItem$c={isMeText:"(you)",menuTitle:"More Options",removeButtonLabel:"Remove",sharingIconLabel:"Sharing",mutedIconLabel:"Muted",displayNamePlaceholder:"Unnamed participant",participantStateConnecting:"Calling...",participantStateRinging:"Calling...",participantStateHold:"On hold"};var typingIndicator$c={singleUser:"{user} is typing ...",multipleUsers:"{users} are typing ...",multipleUsersAbbreviateOne:"{users} and 1 other are typing ...",multipleUsersAbbreviateMany:"{users} and {numOthers} others are typing ...",delimiter:", "};var sendBox$c={placeholderText:"Enter a message",textTooLong:"Your message length is over the maximum limit.",sendButtonAriaLabel:"Send message",fileUploadsPendingError:"Uploading... Please wait.",removeFile:"Remove file",uploading:"Uploading",uploadCompleted:"Upload completed"};var messageStatusIndicator$c={deliveredAriaLabel:"Message sent",deliveredTooltipText:"Sent",seenAriaLabel:"Message seen by others",seenTooltipText:"Seen",readByTooltipText:"Read by {messageThreadReadCount} of {remoteParticipantsCount}",sendingAriaLabel:"Message sending",sendingTooltipText:"Sending",failedToSendAriaLabel:"Message failed to send",failedToSendTooltipText:"Failed to send"};var endCallButton$c={label:"Leave",tooltipContent:"Leave call"};var cameraButton$c={onLabel:"Turn off",offLabel:"Turn on",tooltipDisabledContent:"Camera is disabled",tooltipOnContent:"Turn off camera",tooltipOffContent:"Turn on camera",tooltipVideoLoadingContent:"Video is loading",cameraMenuTitle:"Camera",cameraMenuTooltip:"Choose camera",cameraButtonSplitRoleDescription:"Split button",onSplitButtonAriaLabel:"Turn off camera and camera options",offSplitButtonAriaLabel:"Turn on camera and camera options",cameraActionTurnedOnAnnouncement:"Your camera has been turned on",cameraActionTurnedOffAnnouncement:"Your camera has been turned off"};var microphoneButton$c={onLabel:"Mute",offLabel:"Unmute",tooltipDisabledContent:"Microphone is disabled",tooltipOnContent:"Mute microphone",tooltipOffContent:"Unmute microphone",microphoneMenuTitle:"Microphone",microphoneMenuTooltip:"Choose microphone",speakerMenuTitle:"Speaker",speakerMenuTooltip:"Choose speaker",microphoneButtonSplitRoleDescription:"Split button",onSplitButtonAriaLabel:"Mute microphone and audio options",offSplitButtonAriaLabel:"Unmute microphone and audio options",microphoneActionTurnedOnAnnouncement:"Your microphone has been turned on",microphoneActionTurnedOffAnnouncement:"Your microphone has been turned off"};var devicesButton$c={label:"Devices",tooltipContent:"Manage devices",cameraMenuTitle:"Camera",cameraMenuTooltip:"Choose camera",audioDeviceMenuTitle:"Audio Device",audioDeviceMenuTooltip:"Choose audio device",microphoneMenuTitle:"Microphone",microphoneMenuTooltip:"Choose microphone",speakerMenuTitle:"Speaker",speakerMenuTooltip:"Choose speaker"};var participantsButton$c={label:"People",tooltipContent:"Show participants",menuHeader:"In this call",participantsListButtonLabel:"{numParticipants} people",muteAllButtonLabel:"Mute all",copyInviteLinkButtonLabel:"Copy invite link"};var screenShareButton$c={onLabel:"Stop presenting",offLabel:"Present",tooltipDisabledContent:"Presenting is disabled",tooltipOnContent:"Presenting your screen",tooltipOffContent:"Present your screen"};var messageThread$c={yesterday:"Yesterday",sunday:"Sunday",monday:"Monday",tuesday:"Tuesday",wednesday:"Wednesday",thursday:"Thursday",friday:"Friday",saturday:"Saturday",participantJoined:"joined the chat.",participantLeft:"left the chat.",editMessage:"Edit",removeMessage:"Delete",resendMessage:"Try sending again",failToSendTag:"Failed to send",editedTag:"Edited",liveAuthorIntro:"{author} says",messageContentAriaText:"{author} said {message}",messageContentMineAriaText:"You said {message}",editBoxTextLimit:"Your message is over the limit of {limitNumber} characters",editBoxPlaceholderText:"Edit your message",newMessagesIndicator:"New messages",noDisplayNameSub:"No name",editBoxCancelButton:"Cancel",editBoxSubmitButton:"Submit",messageReadCount:"Read by {messageReadByCount} of {remoteParticipantsCount}",actionMenuMoreOptions:"More Options",downloadFile:"Download file"};var errorBar$c={unableToReachChatService:"You are offline",accessDenied:"Unable to access chat services - please check the user credentials provided",userNotInChatThread:"You are no longer in this chat thread",sendMessageNotInChatThread:"Failed to send message because you are no longer in this chat thread",sendMessageGeneric:"Failed to send message",callingNetworkFailure:"Troubling connecting call - you seem to be offline",startVideoGeneric:"Failed to start video",stopVideoGeneric:"Failed to stop video",muteGeneric:"Failed to mute microphone",unmuteGeneric:"Failed to unmute microphone",speakingWhileMuted:"Your microphone is muted",startScreenShareGeneric:"Failed to start screen sharing",stopScreenShareGeneric:"Failed to stop screen sharing",callNetworkQualityLow:"Network quality is low.",callNoSpeakerFound:"No speakers or headphones found. Connect an audio device to hear the call.",callNoMicrophoneFound:"No microphones found. Connect an audio input device.",callMicrophoneAccessDenied:"Unable to access microphone. Click the lock in the address bar to grant permission to this webpage.",callMicrophoneMutedBySystem:"You are muted by your system.",callMicrophoneUnmutedBySystem:"Your microphone recovered and you were unmuted by your system.",callMacOsMicrophoneAccessDenied:"Unable to access microphone. Grant microphone permission in your macOS privacy settings.",callLocalVideoFreeze:"Network bandwidth is poor. Your video may appear paused for others on the call.",callCameraAccessDenied:"Unable to access camera. Click the lock in the address bar to grant permission to this webpage.",callCameraAlreadyInUse:"Unable to access camera. It may already be in use by another application.",callVideoStoppedBySystem:"Your video has been stopped by your system.",callVideoRecoveredBySystem:"Your video has resumed.",callMacOsCameraAccessDenied:"MacOS is blocking access to your camera. Update your privacy settings to allow this browser to access your camera.",callMacOsScreenShareAccessDenied:"MacOS is blocking screen sharing. Update your privacy settings to allow this browser to record your screen.",dismissButtonAriaLabel:"Close",failedToJoinCallGeneric:"Failed to join call.",failedToJoinCallInvalidMeetingLink:"Unable to join Meeting. Invalid Link."};var videoGallery$c={screenIsBeingSharedMessage:"You are sharing your screen",screenShareLoadingMessage:"Loading {participant}'s screen",localVideoLabel:"You",localVideoCameraSwitcherLabel:"Switch camera",localVideoMovementLabel:"Movable Local Video Tile",localVideoSelectedDescription:"{cameraName} selected",displayNamePlaceholder:"Unnamed participant"};var dialpad$c={placeholderText:"Enter phone number",deleteButtonAriaLabel:"Delete"};var holdButton$c={onLabel:"Resume",offLabel:"Hold",tooltipOnContent:"Resume call",tooltipOffContent:"Hold call"};var videoTile$c={participantStateConnecting:"Calling...",participantStateRinging:"Calling...",participantStateHold:"On hold"};var DomainPermissions$c={primaryText:"Allow {appName} to use your camera and microphone",secondaryText:"This is so participants can see and hear you.",linkText:"Need help? Get troubleshooting help",primaryButtonText:"Allow Access"};var UnsupportedBrowser$d={primaryText:"Browser not supported",secondaryText:"Please join this call using a compatible browser.",moreHelpLink:"More help"};var BrowserPermissionDenied$c={primaryText:"Can't use your camera or microphone",secondaryText:"Your browser might not have access to your camera or microphone. To fix this, open System Preferences.",primaryButtonText:"Try again",linkText:"Need help? Get troubleshooting help"};var BrowserPermissionDeniedIOS$c={primaryText:"Allow microphone access to continue",secondaryText:"So other participants can hear you.",primaryButtonText:"Try again",imageAltText:"Microphone and camera device permission location for iOS",linkText:"Need help? Get troubleshooting help",step1Text:"Go to the Settings app",step2Text:"Scroll down to settings for this browser",step3Text:"Turn on Microphone (Camera optional)",step4Text:"Try joining the call again",step1DigitText:"1",step2DigitText:"2",step3DigitText:"3",step4DigitText:"4"};var en_GB$1 = {participantItem:participantItem$c,typingIndicator:typingIndicator$c,sendBox:sendBox$c,messageStatusIndicator:messageStatusIndicator$c,endCallButton:endCallButton$c,cameraButton:cameraButton$c,microphoneButton:microphoneButton$c,devicesButton:devicesButton$c,participantsButton:participantsButton$c,screenShareButton:screenShareButton$c,messageThread:messageThread$c,errorBar:errorBar$c,videoGallery:videoGallery$c,dialpad:dialpad$c,holdButton:holdButton$c,videoTile:videoTile$c,DomainPermissions:DomainPermissions$c,UnsupportedBrowser:UnsupportedBrowser$d,BrowserPermissionDenied:BrowserPermissionDenied$c,BrowserPermissionDeniedIOS:BrowserPermissionDeniedIOS$c};
3922
3946
 
@@ -4382,22 +4406,6 @@ const messageBarType = (errorType) => {
4382
4406
  return react.MessageBarType.error;
4383
4407
  }
4384
4408
  };
4385
- /**
4386
- * @private
4387
- */
4388
- const mapMenuItemsToContextualMenuItems = (menuItems) => {
4389
- const contextualMenuItems = [];
4390
- menuItems.map((item) => {
4391
- contextualMenuItems.push({
4392
- key: item.key,
4393
- text: item.text,
4394
- ariaLabel: item.ariaLabel,
4395
- onClick: item.onClick,
4396
- iconProps: item.iconProps
4397
- });
4398
- });
4399
- return contextualMenuItems;
4400
- };
4401
4409
  /**
4402
4410
  * @private
4403
4411
  * @param errorType
@@ -4968,7 +4976,7 @@ const DomainPermissionsCameraDenied20Filled = () => {
4968
4976
  const DomainPermissionSparkle20Filled = () => (React__default['default'].createElement("div", { className: react.mergeStyles({ transform: 'scale(2)' }) },
4969
4977
  React__default['default'].createElement(reactIcons.Sparkle20Filled, null)));
4970
4978
  /* @conditional-compile-remove(unsupported-browser) */
4971
- const UnsupportedBrowserWarning = () => {
4979
+ const UnsupportedEnvironmentWarning = () => {
4972
4980
  const theme = useTheme();
4973
4981
  return (React__default['default'].createElement(react.Stack, { horizontalAlign: 'center', styles: {
4974
4982
  root: {
@@ -5067,11 +5075,13 @@ const DEFAULT_COMPONENT_ICONS = {
5067
5075
  /* @conditional-compile-remove(call-readiness) */
5068
5076
  DomainPermissionMicDenied: React__default['default'].createElement(DomainPermissionsMicDenied20Filled, null),
5069
5077
  /* @conditional-compile-remove(unsupported-browser) */
5070
- UnsupportedBrowserWarning: React__default['default'].createElement(UnsupportedBrowserWarning, null),
5078
+ UnsupportedEnvironmentWarning: React__default['default'].createElement(UnsupportedEnvironmentWarning, null),
5071
5079
  /* @conditional-compile-remove(call-readiness) */
5072
5080
  BrowserPermissionDeniedError: React__default['default'].createElement(BrowserPermissionDenied20Filled, null),
5073
5081
  /* @conditional-compile-remove(pinned-participants) */
5074
- VideoTilePinned: React__default['default'].createElement(reactIcons.Pin16Filled, null)
5082
+ VideoTilePinned: React__default['default'].createElement(reactIcons.Pin16Filled, null),
5083
+ /* @conditional-compile-remove(pinned-participants) */
5084
+ VideoTileMoreOptions: React__default['default'].createElement(reactIcons.MoreHorizontal20Filled, null)
5075
5085
  };
5076
5086
 
5077
5087
  // Copyright (c) Microsoft Corporation.
@@ -8001,36 +8011,21 @@ const participantStateStringStyles = (theme) => {
8001
8011
  /**
8002
8012
  * @private
8003
8013
  */
8004
- const menuButtonStyles = {
8014
+ const moreButtonStyles = {
8005
8015
  root: {
8006
- background: 'none',
8007
- border: 'none',
8008
- borderRadius: 0,
8009
- minHeight: '0.125rem',
8010
- minWidth: '2rem',
8011
- width: '100%',
8012
- maxWidth: '3rem',
8013
- svg: {
8014
- verticalAlign: 'text-top'
8015
- }
8016
+ // To ensure that the button is clickable when there is a floating video tile
8017
+ zIndex: 1,
8018
+ color: 'inherit',
8019
+ height: '100%'
8016
8020
  },
8017
- splitButtonMenuButton: {
8018
- border: 'none'
8021
+ rootHovered: {
8022
+ background: 'none'
8019
8023
  },
8020
- flexContainer: {
8021
- flexFlow: 'column',
8022
- display: 'contents'
8024
+ rootPressed: {
8025
+ background: 'none'
8023
8026
  },
8024
- label: {
8025
- fontSize: '0.625rem',
8026
- fontWeight: '400',
8027
- lineHeight: '1rem',
8028
- cursor: 'pointer',
8029
- display: 'block',
8030
- margin: '0rem 0.25rem',
8031
- overflow: 'hidden',
8032
- textOverflow: 'ellipsis',
8033
- whiteSpace: 'nowrap'
8027
+ rootExpanded: {
8028
+ background: 'none'
8034
8029
  }
8035
8030
  };
8036
8031
 
@@ -8141,16 +8136,24 @@ const DefaultPlaceholder = (props) => {
8141
8136
  React__default['default'].createElement(react.Stack, { styles: defaultPersonaStyles },
8142
8137
  React__default['default'].createElement(react.Persona, { coinSize: coinSize, hidePersonaDetails: hidePersonaDetails, text: text !== null && text !== void 0 ? text : '', initialsTextColor: "white", "aria-label": noVideoAvailableAriaLabel !== null && noVideoAvailableAriaLabel !== void 0 ? noVideoAvailableAriaLabel : '', showOverflowTooltip: false }))));
8143
8138
  };
8144
- /* @conditional-compile-remove(pinned-participants) */
8145
- const menuIcon = () => React__default['default'].createElement(reactIcons.MoreHorizontal20Filled, { primaryFill: "currentColor" });
8146
8139
  const defaultPersonaStyles = { root: { margin: 'auto', maxHeight: '100%' } };
8147
8140
  /* @conditional-compile-remove(pinned-participants) */
8141
+ const videoTileMoreIconProps = { iconName: 'VideoTileMoreOptions' };
8142
+ /* @conditional-compile-remove(pinned-participants) */
8143
+ const videoTileMoreMenuIconProps = { iconName: undefined, style: { display: 'none' } };
8144
+ /* @conditional-compile-remove(pinned-participants) */
8145
+ const videoTileMoreMenuProps = {
8146
+ directionalHint: react.DirectionalHint.topLeftEdge,
8147
+ isBeakVisible: false,
8148
+ styles: { container: { maxWidth: '8rem' } }
8149
+ };
8150
+ /* @conditional-compile-remove(pinned-participants) */
8148
8151
  const VideoTileMoreOptionsButton = (props) => {
8149
- const { menuItems, menuStyles } = props;
8150
- if (!menuItems || menuItems.length === 0) {
8152
+ const { contextualMenu } = props;
8153
+ if (!contextualMenu) {
8151
8154
  return React__default['default'].createElement(React__default['default'].Fragment, null);
8152
8155
  }
8153
- return (React__default['default'].createElement(react.DefaultButton, { styles: react.concatStyleSets(menuButtonStyles, menuStyles !== null && menuStyles !== void 0 ? menuStyles : {}), onRenderIcon: menuIcon, menuIconProps: { hidden: true }, menuProps: { items: mapMenuItemsToContextualMenuItems(menuItems), directionalHint: react.DirectionalHint.topRightEdge } }));
8156
+ return (React__default['default'].createElement(react.IconButton, { styles: moreButtonStyles, iconProps: videoTileMoreIconProps, menuIconProps: videoTileMoreMenuIconProps, menuProps: Object.assign(Object.assign({}, videoTileMoreMenuProps), contextualMenu) }));
8154
8157
  };
8155
8158
  /**
8156
8159
  * A component to render the video stream for a single call participant.
@@ -8162,9 +8165,9 @@ const VideoTileMoreOptionsButton = (props) => {
8162
8165
  const VideoTile = (props) => {
8163
8166
  const { children, displayName, initialsName, isMirrored, isMuted,
8164
8167
  /* @conditional-compile-remove(pinned-participants) */
8165
- isPinned, onRenderPlaceholder, renderElement, showLabel = true, showMuteIndicator = true, styles, userId, noVideoAvailableAriaLabel, isSpeaking,
8168
+ isPinned, onRenderPlaceholder, renderElement, showLabel = true, showMuteIndicator = true, styles, userId, noVideoAvailableAriaLabel, isSpeaking, personaMinSize = DEFAULT_PERSONA_MIN_SIZE_PX, personaMaxSize = DEFAULT_PERSONA_MAX_SIZE_PX,
8166
8169
  /* @conditional-compile-remove(pinned-participants) */
8167
- menuItems, personaMinSize = DEFAULT_PERSONA_MIN_SIZE_PX, personaMaxSize = DEFAULT_PERSONA_MAX_SIZE_PX } = props;
8170
+ contextualMenu } = props;
8168
8171
  const [personaSize, setPersonaSize] = React.useState(100);
8169
8172
  const videoTileRef = React.useRef(null);
8170
8173
  const locale = useLocale$1();
@@ -8238,7 +8241,7 @@ const VideoTile = (props) => {
8238
8241
  showMuteIndicator && isMuted && (React__default['default'].createElement(react.Stack, { className: react.mergeStyles(iconContainerStyle) },
8239
8242
  React__default['default'].createElement(react.Icon, { iconName: "VideoTileMicOff" }))),
8240
8243
  /* @conditional-compile-remove(pinned-participants) */
8241
- React__default['default'].createElement(VideoTileMoreOptionsButton, { menuItems: menuItems, menuStyles: props.styles }),
8244
+ React__default['default'].createElement(VideoTileMoreOptionsButton, { contextualMenu: contextualMenu }),
8242
8245
  /* @conditional-compile-remove(pinned-participants) */
8243
8246
  isPinned && (React__default['default'].createElement(react.Stack, { className: react.mergeStyles(iconContainerStyle) },
8244
8247
  React__default['default'].createElement(react.Icon, { iconName: "VideoTilePinned", className: react.mergeStyles(pinIconStyle) })))))),
@@ -11465,7 +11468,8 @@ const secondaryTextStyles = {
11465
11468
  root: {
11466
11469
  margin: 'auto',
11467
11470
  fontWeight: 400,
11468
- paddingBottom: '0.5rem'
11471
+ paddingBottom: '0.5rem',
11472
+ textAlign: 'center'
11469
11473
  }
11470
11474
  };
11471
11475
  /**
@@ -11497,26 +11501,47 @@ const iconStyles$1 = {
11497
11501
 
11498
11502
  // Copyright (c) Microsoft Corporation.
11499
11503
  /* @conditional-compile-remove(unsupported-browser) */
11500
- const UnsupportedBrowserContainer = (props) => {
11504
+ const UnsupportedEnvironmentContainer = (props) => {
11501
11505
  const { onTroubleshootingClick, strings } = props;
11502
11506
  return (React__default['default'].createElement(react.Stack, { styles: containerStyles$2 },
11503
- React__default['default'].createElement(react.Icon, { styles: iconStyles$1, iconName: "UnsupportedBrowserWarning", "data-ui-id": "unsupportedBrowserIcon" }),
11507
+ React__default['default'].createElement(react.Icon, { styles: iconStyles$1, iconName: "UnsupportedEnvironmentWarning", "data-ui-id": "unsupported-environment-icon" }),
11504
11508
  React__default['default'].createElement(react.Text, { styles: mainTextStyles }, strings.primaryText),
11505
11509
  React__default['default'].createElement(react.Text, { styles: secondaryTextStyles }, strings.secondaryText),
11506
11510
  onTroubleshootingClick && (React__default['default'].createElement(react.Link, { styles: linkTextStyles, onClick: () => {
11507
11511
  onTroubleshootingClick();
11508
- }, "data-ui-id": "unsupportedBrowserLink" }, strings.moreHelpLink))));
11512
+ }, "data-ui-id": "unsupported-environment-link" }, strings.moreHelpText))));
11509
11513
  };
11510
11514
  /**
11511
11515
  * UI to display to the user that the browser they are using is not supported by calling application.
11512
11516
  *
11517
+ * @private
11518
+ */
11519
+ const UnsupportedEnvironment = (props) => {
11520
+ /* @conditional-compile-remove(unsupported-browser) */
11521
+ return React__default['default'].createElement(UnsupportedEnvironmentContainer, Object.assign({}, props));
11522
+ };
11523
+
11524
+ // Copyright (c) Microsoft Corporation.
11525
+ /**
11526
+ * UI to display to the user that the browser they are using is not supported by Azure Communications Calling service.
11527
+ *
11513
11528
  * @beta
11514
11529
  */
11515
11530
  const UnsupportedBrowser = (props) => {
11516
- /* @conditional-compile-remove(unsupported-browser) */
11517
- const strings = useLocale$1().strings.UnsupportedBrowser;
11518
- /* @conditional-compile-remove(unsupported-browser) */
11519
- return React__default['default'].createElement(UnsupportedBrowserContainer, Object.assign({}, props, { strings: strings }));
11531
+ const { onTroubleshootingClick, strings } = props;
11532
+ return React__default['default'].createElement(UnsupportedEnvironment, { onTroubleshootingClick: onTroubleshootingClick, strings: strings });
11533
+ };
11534
+
11535
+ // Copyright (c) Microsoft Corporation.
11536
+ /**
11537
+ * UI to display to the user that the browser version they are using is out of date
11538
+ * and not supported by Azure Communications Calling service.
11539
+ *
11540
+ * @beta
11541
+ */
11542
+ const UnsupportedBrowserVersion = (props) => {
11543
+ const { onTroubleshootingClick, strings } = props;
11544
+ return React__default['default'].createElement(UnsupportedEnvironment, { onTroubleshootingClick: onTroubleshootingClick, strings: strings });
11520
11545
  };
11521
11546
 
11522
11547
  // Copyright (c) Microsoft Corporation.
@@ -15776,7 +15801,7 @@ const getCallEndReason = (call) => {
15776
15801
  */
15777
15802
  const getCallCompositePage = (call, previousCall, environmentInfo, features) => {
15778
15803
  /* @conditional-compile-remove(unsupported-browser) */
15779
- if ((features === null || features === void 0 ? void 0 : features.unsupportedEnvironment) && (environmentInfo === null || environmentInfo === void 0 ? void 0 : environmentInfo.isSupportedBrowser) === false) {
15804
+ if (isUnsupportedEnvironment(features, environmentInfo)) {
15780
15805
  return 'unsupportedEnvironment';
15781
15806
  }
15782
15807
  if (call) {
@@ -15910,6 +15935,11 @@ const getDevicePermissionState = (setVideoState, setAudioState) => {
15910
15935
  setAudioState('unsupported');
15911
15936
  });
15912
15937
  };
15938
+ /* @conditional-compile-remove(unsupported-browser) */
15939
+ const isUnsupportedEnvironment = (features, environmentInfo) => {
15940
+ return !!((features === null || features === void 0 ? void 0 : features.unsupportedEnvironment) &&
15941
+ ((environmentInfo === null || environmentInfo === void 0 ? void 0 : environmentInfo.isSupportedBrowser) === false || (environmentInfo === null || environmentInfo === void 0 ? void 0 : environmentInfo.isSupportedBrowserVersion) === false));
15942
+ };
15913
15943
 
15914
15944
  // Copyright (c) Microsoft Corporation.
15915
15945
  // Licensed under the MIT license.
@@ -19342,16 +19372,23 @@ const HoldPage = (props) => {
19342
19372
  */
19343
19373
  const UnsupportedBrowserPage = (props) => {
19344
19374
  /* @conditional-compile-remove(unsupported-browser) */
19345
- const { onTroubleshootingClick } = props;
19375
+ const { onTroubleshootingClick, environmentInfo } = props;
19346
19376
  /* @conditional-compile-remove(unsupported-browser) */
19347
19377
  const locale = useLocale();
19348
19378
  /* @conditional-compile-remove(unsupported-browser) */
19349
19379
  const unsupportedBrowserStrings = locale.component.strings.UnsupportedBrowser;
19350
19380
  /* @conditional-compile-remove(unsupported-browser) */
19351
- return (React__default['default'].createElement(react.Stack, { styles: containerStyles },
19352
- React__default['default'].createElement(UnsupportedBrowser, { onTroubleshootingClick: onTroubleshootingClick, strings: unsupportedBrowserStrings })));
19381
+ const unsupportedBrowserVersionStrings = locale.component.strings.UnsupportedBrowserVersion;
19382
+ let pageElement = React__default['default'].createElement(React__default['default'].Fragment, null);
19383
+ /* @conditional-compile-remove(unsupported-browser) */
19384
+ if (!(environmentInfo === null || environmentInfo === void 0 ? void 0 : environmentInfo.isSupportedBrowser)) {
19385
+ pageElement = (React__default['default'].createElement(UnsupportedBrowser, { onTroubleshootingClick: onTroubleshootingClick, strings: unsupportedBrowserStrings }));
19386
+ }
19387
+ else if (!(environmentInfo === null || environmentInfo === void 0 ? void 0 : environmentInfo.isSupportedBrowserVersion)) {
19388
+ pageElement = (React__default['default'].createElement(UnsupportedBrowserVersion, { onTroubleshootingClick: onTroubleshootingClick, strings: unsupportedBrowserVersionStrings }));
19389
+ }
19390
+ return React__default['default'].createElement(react.Stack, { styles: containerStyles }, pageElement);
19353
19391
  };
19354
- /* @conditional-compile-remove(unsupported-browser) */
19355
19392
  const containerStyles = {
19356
19393
  root: {
19357
19394
  margin: 'auto',
@@ -19435,7 +19472,7 @@ const MainScreen = (props) => {
19435
19472
  case 'unsupportedEnvironment':
19436
19473
  pageElement = (React__default['default'].createElement(React__default['default'].Fragment, null,
19437
19474
  /* @conditional-compile-remove(unsupported-browser) */
19438
- React__default['default'].createElement(UnsupportedBrowserPage, { onTroubleshootingClick: (_e = props.options) === null || _e === void 0 ? void 0 : _e.onEnvironmentInfoTroubleshootingClick })));
19475
+ React__default['default'].createElement(UnsupportedBrowserPage, { onTroubleshootingClick: (_e = props.options) === null || _e === void 0 ? void 0 : _e.onEnvironmentInfoTroubleshootingClick, environmentInfo: adapter.getState().environmentInfo })));
19439
19476
  break;
19440
19477
  }
19441
19478
  if (!pageElement) {
@@ -19713,7 +19750,6 @@ class AzureCommunicationCallAdapter {
19713
19750
  isMuted: (_a = this.call) === null || _a === void 0 ? void 0 : _a.isMuted
19714
19751
  });
19715
19752
  };
19716
- console.log(options);
19717
19753
  this.bindPublicMethods();
19718
19754
  this.callClient = callClient;
19719
19755
  this.callAgent = callAgent;
@@ -22391,6 +22427,7 @@ exports.SendBox = SendBox;
22391
22427
  exports.StreamMedia = StreamMedia;
22392
22428
  exports.TypingIndicator = TypingIndicator;
22393
22429
  exports.UnsupportedBrowser = UnsupportedBrowser;
22430
+ exports.UnsupportedBrowserVersion = UnsupportedBrowserVersion;
22394
22431
  exports.VideoGallery = VideoGallery;
22395
22432
  exports.VideoTile = VideoTile;
22396
22433
  exports._DevicePermissionDropdown = _DevicePermissionDropdown;