@azure/communication-react 1.14.1-alpha-202403261958 → 1.14.1-alpha-202403280012

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 (168) hide show
  1. package/dist/communication-react.d.ts +70 -3
  2. package/dist/dist-cjs/communication-react/{RichTextSendBoxWrapper-BRqOsupu.js → RichTextSendBoxWrapper-D3ER8Kz9.js} +9 -6
  3. package/dist/dist-cjs/communication-react/{RichTextSendBoxWrapper-BRqOsupu.js.map → RichTextSendBoxWrapper-D3ER8Kz9.js.map} +1 -1
  4. package/dist/dist-cjs/communication-react/{index-Ba2HAv_Y.js → index-BI61bnOi.js} +1401 -761
  5. package/dist/dist-cjs/communication-react/index-BI61bnOi.js.map +1 -0
  6. package/dist/dist-cjs/communication-react/index.js +6 -3
  7. package/dist/dist-cjs/communication-react/index.js.map +1 -1
  8. package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js +1 -1
  9. package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js.map +1 -1
  10. package/dist/dist-esm/calling-stateful-client/src/CallClientState.d.ts +5 -0
  11. package/dist/dist-esm/calling-stateful-client/src/CallClientState.js.map +1 -1
  12. package/dist/dist-esm/calling-stateful-client/src/CallContext.js +2 -0
  13. package/dist/dist-esm/calling-stateful-client/src/CallContext.js.map +1 -1
  14. package/dist/dist-esm/calling-stateful-client/src/Converter.js +6 -2
  15. package/dist/dist-esm/calling-stateful-client/src/Converter.js.map +1 -1
  16. package/dist/dist-esm/chat-component-bindings/src/handlers/createHandlers.js.map +1 -1
  17. package/dist/dist-esm/chat-component-bindings/src/messageThreadSelector.js +6 -6
  18. package/dist/dist-esm/chat-component-bindings/src/messageThreadSelector.js.map +1 -1
  19. package/dist/dist-esm/communication-react/src/index.js.map +1 -1
  20. package/dist/dist-esm/react-components/src/components/AttachmentCard.d.ts +3 -1
  21. package/dist/dist-esm/react-components/src/components/AttachmentCard.js +75 -59
  22. package/dist/dist-esm/react-components/src/components/AttachmentCard.js.map +1 -1
  23. package/dist/dist-esm/react-components/src/components/AttachmentDownloadCards.d.ts +1 -1
  24. package/dist/dist-esm/react-components/src/components/AttachmentDownloadCards.js +11 -10
  25. package/dist/dist-esm/react-components/src/components/AttachmentDownloadCards.js.map +1 -1
  26. package/dist/dist-esm/react-components/src/components/AttachmentUploadCards.js +2 -12
  27. package/dist/dist-esm/react-components/src/components/AttachmentUploadCards.js.map +1 -1
  28. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageComponentAsEditBox.js +8 -8
  29. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageComponentAsEditBox.js.map +1 -1
  30. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageComponentAsRichTextEditBox.js +5 -5
  31. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageComponentAsRichTextEditBox.js.map +1 -1
  32. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageComponentWrapper.js.map +1 -1
  33. package/dist/dist-esm/react-components/src/components/ChatMessage/MessageComponents/ChatMessageComponentAsMessageBubble.js +6 -6
  34. package/dist/dist-esm/react-components/src/components/ChatMessage/MessageComponents/ChatMessageComponentAsMessageBubble.js.map +1 -1
  35. package/dist/dist-esm/react-components/src/components/ChatMessage/MessageComponents/FluentChatMessageComponent.js +10 -8
  36. package/dist/dist-esm/react-components/src/components/ChatMessage/MessageComponents/FluentChatMessageComponent.js.map +1 -1
  37. package/dist/dist-esm/react-components/src/components/ChatMessage/MyMessageComponents/ChatMyMessageComponentAsMessageBubble.js +6 -6
  38. package/dist/dist-esm/react-components/src/components/ChatMessage/MyMessageComponents/ChatMyMessageComponentAsMessageBubble.js.map +1 -1
  39. package/dist/dist-esm/react-components/src/components/ChatMessage/MyMessageComponents/FluentChatMyMessageComponent.js +10 -8
  40. package/dist/dist-esm/react-components/src/components/ChatMessage/MyMessageComponents/FluentChatMyMessageComponent.js.map +1 -1
  41. package/dist/dist-esm/react-components/src/components/Dialpad/Dialpad.d.ts +4 -0
  42. package/dist/dist-esm/react-components/src/components/Dialpad/Dialpad.js +2 -2
  43. package/dist/dist-esm/react-components/src/components/Dialpad/Dialpad.js.map +1 -1
  44. package/dist/dist-esm/react-components/src/components/MessageStatusIcon.js +1 -1
  45. package/dist/dist-esm/react-components/src/components/MessageStatusIcon.js.map +1 -1
  46. package/dist/dist-esm/react-components/src/components/MessageThread.js +14 -13
  47. package/dist/dist-esm/react-components/src/components/MessageThread.js.map +1 -1
  48. package/dist/dist-esm/react-components/src/components/RichTextEditor/Buttons/RichTextRibbonButtons.d.ts +7 -0
  49. package/dist/dist-esm/react-components/src/components/RichTextEditor/{RichTextRibbonButtons.js → Buttons/RichTextRibbonButtons.js} +16 -20
  50. package/dist/dist-esm/react-components/src/components/RichTextEditor/Buttons/RichTextRibbonButtons.js.map +1 -0
  51. package/dist/dist-esm/react-components/src/components/RichTextEditor/Buttons/Table/RichTextInsertTableButton.d.ts +7 -0
  52. package/dist/dist-esm/react-components/src/components/RichTextEditor/Buttons/Table/RichTextInsertTableButton.js +56 -0
  53. package/dist/dist-esm/react-components/src/components/RichTextEditor/Buttons/Table/RichTextInsertTableButton.js.map +1 -0
  54. package/dist/dist-esm/react-components/src/components/RichTextEditor/Buttons/Table/RichTextInsertTablePane.d.ts +16 -0
  55. package/dist/dist-esm/react-components/src/components/RichTextEditor/Buttons/Table/RichTextInsertTablePane.js +62 -0
  56. package/dist/dist-esm/react-components/src/components/RichTextEditor/Buttons/Table/RichTextInsertTablePane.js.map +1 -0
  57. package/dist/dist-esm/react-components/src/components/RichTextEditor/Buttons/Table/RichTextTableContextMenu.d.ts +8 -0
  58. package/dist/dist-esm/react-components/src/components/RichTextEditor/Buttons/Table/RichTextTableContextMenu.js +57 -0
  59. package/dist/dist-esm/react-components/src/components/RichTextEditor/Buttons/Table/RichTextTableContextMenu.js.map +1 -0
  60. package/dist/dist-esm/react-components/src/components/RichTextEditor/Buttons/Table/insertTableAction.d.ts +9 -0
  61. package/dist/dist-esm/react-components/src/components/RichTextEditor/Buttons/Table/insertTableAction.js +34 -0
  62. package/dist/dist-esm/react-components/src/components/RichTextEditor/Buttons/Table/insertTableAction.js.map +1 -0
  63. package/dist/dist-esm/react-components/src/components/RichTextEditor/RichTextEditor.js +23 -11
  64. package/dist/dist-esm/react-components/src/components/RichTextEditor/RichTextEditor.js.map +1 -1
  65. package/dist/dist-esm/react-components/src/components/RichTextEditor/RichTextInputBoxComponent.js +7 -6
  66. package/dist/dist-esm/react-components/src/components/RichTextEditor/RichTextInputBoxComponent.js.map +1 -1
  67. package/dist/dist-esm/react-components/src/components/RichTextEditor/RichTextSendBox.d.ts +44 -0
  68. package/dist/dist-esm/react-components/src/components/RichTextEditor/RichTextSendBox.js +40 -30
  69. package/dist/dist-esm/react-components/src/components/RichTextEditor/RichTextSendBox.js.map +1 -1
  70. package/dist/dist-esm/react-components/src/components/RichTextEditor/RichTextSendBoxErrors.js +6 -6
  71. package/dist/dist-esm/react-components/src/components/RichTextEditor/RichTextSendBoxErrors.js.map +1 -1
  72. package/dist/dist-esm/react-components/src/components/SendBox.js +33 -23
  73. package/dist/dist-esm/react-components/src/components/SendBox.js.map +1 -1
  74. package/dist/dist-esm/react-components/src/components/VideoGallery/DefaultLayout.js +2 -2
  75. package/dist/dist-esm/react-components/src/components/VideoGallery/DefaultLayout.js.map +1 -1
  76. package/dist/dist-esm/react-components/src/components/VideoGallery/LargeGalleryLayout.js +5 -3
  77. package/dist/dist-esm/react-components/src/components/VideoGallery/LargeGalleryLayout.js.map +1 -1
  78. package/dist/dist-esm/react-components/src/components/index.js.map +1 -1
  79. package/dist/dist-esm/react-components/src/components/styles/AttachmentCard.styles.d.ts +9 -0
  80. package/dist/dist-esm/react-components/src/components/styles/AttachmentCard.styles.js +27 -0
  81. package/dist/dist-esm/react-components/src/components/styles/AttachmentCard.styles.js.map +1 -0
  82. package/dist/dist-esm/react-components/src/components/styles/RichTextEditor.styles.d.ts +25 -1
  83. package/dist/dist-esm/react-components/src/components/styles/RichTextEditor.styles.js +132 -2
  84. package/dist/dist-esm/react-components/src/components/styles/RichTextEditor.styles.js.map +1 -1
  85. package/dist/dist-esm/react-components/src/components/styles/SendBox.styles.js +3 -2
  86. package/dist/dist-esm/react-components/src/components/styles/SendBox.styles.js.map +1 -1
  87. package/dist/dist-esm/react-components/src/components/utils/ChatMessageComponentAsEditBoxUtils.js +6 -5
  88. package/dist/dist-esm/react-components/src/components/utils/ChatMessageComponentAsEditBoxUtils.js.map +1 -1
  89. package/dist/dist-esm/react-components/src/components/utils/ChatMessageComponentUtils.js +10 -10
  90. package/dist/dist-esm/react-components/src/components/utils/ChatMessageComponentUtils.js.map +1 -1
  91. package/dist/dist-esm/react-components/src/components/utils/RichTextEditorStringsUtils.d.ts +15 -0
  92. package/dist/dist-esm/react-components/src/components/utils/RichTextEditorStringsUtils.js +39 -0
  93. package/dist/dist-esm/react-components/src/components/utils/RichTextEditorStringsUtils.js.map +1 -0
  94. package/dist/dist-esm/react-components/src/components/utils/RichTextTableUtils.d.ts +22 -0
  95. package/dist/dist-esm/react-components/src/components/utils/RichTextTableUtils.js +29 -0
  96. package/dist/dist-esm/react-components/src/components/utils/RichTextTableUtils.js.map +1 -0
  97. package/dist/dist-esm/react-components/src/components/utils/SendBoxUtils.js +2 -2
  98. package/dist/dist-esm/react-components/src/components/utils/SendBoxUtils.js.map +1 -1
  99. package/dist/dist-esm/react-components/src/components/utils/common.js +2 -2
  100. package/dist/dist-esm/react-components/src/components/utils/common.js.map +1 -1
  101. package/dist/dist-esm/react-components/src/localization/locales/en-US/strings.json +12 -1
  102. package/dist/dist-esm/react-components/src/theming/FluentV9ThemeProvider.js +1 -1
  103. package/dist/dist-esm/react-components/src/theming/FluentV9ThemeProvider.js.map +1 -1
  104. package/dist/dist-esm/react-components/src/theming/icons.d.ts +4 -0
  105. package/dist/dist-esm/react-components/src/theming/icons.js +13 -5
  106. package/dist/dist-esm/react-components/src/theming/icons.js.map +1 -1
  107. package/dist/dist-esm/react-components/src/types/Attachment.d.ts +9 -0
  108. package/dist/dist-esm/react-components/src/types/Attachment.js.map +1 -1
  109. package/dist/dist-esm/react-components/src/types/ChatMessage.js.map +1 -1
  110. package/dist/dist-esm/react-composites/src/composites/CallComposite/CallComposite.js +2 -1
  111. package/dist/dist-esm/react-composites/src/composites/CallComposite/CallComposite.js.map +1 -1
  112. package/dist/dist-esm/react-composites/src/composites/CallComposite/Strings.d.ts +4 -0
  113. package/dist/dist-esm/react-composites/src/composites/CallComposite/Strings.js.map +1 -1
  114. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/AzureCommunicationCallAdapter.d.ts +2 -1
  115. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/AzureCommunicationCallAdapter.js +22 -4
  116. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/AzureCommunicationCallAdapter.js.map +1 -1
  117. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/CallPage.d.ts +1 -0
  118. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/CallPage.js +2 -2
  119. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/CallPage.js.map +1 -1
  120. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/DtmfDialpadPage.d.ts +1 -0
  121. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/DtmfDialpadPage.js +2 -2
  122. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/DtmfDialpadPage.js.map +1 -1
  123. package/dist/dist-esm/react-composites/src/composites/CallComposite/utils/Utils.js +13 -1
  124. package/dist/dist-esm/react-composites/src/composites/CallComposite/utils/Utils.js.map +1 -1
  125. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatComposite.js +3 -3
  126. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatComposite.js.map +1 -1
  127. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/AzureCommunicationCallWithChatAdapter.d.ts +53 -3
  128. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/AzureCommunicationCallWithChatAdapter.js +210 -71
  129. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/AzureCommunicationCallWithChatAdapter.js.map +1 -1
  130. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/CallWithChatAdapter.js.map +1 -1
  131. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/CallWithChatBackedChatAdapter.js +8 -8
  132. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/CallWithChatBackedChatAdapter.js.map +1 -1
  133. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/state/CallWithChatAdapterState.d.ts +2 -2
  134. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/state/CallWithChatAdapterState.js +6 -7
  135. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/state/CallWithChatAdapterState.js.map +1 -1
  136. package/dist/dist-esm/react-composites/src/composites/ChatComposite/ChatComposite.js +4 -4
  137. package/dist/dist-esm/react-composites/src/composites/ChatComposite/ChatComposite.js.map +1 -1
  138. package/dist/dist-esm/react-composites/src/composites/ChatComposite/ChatScreen.js +8 -8
  139. package/dist/dist-esm/react-composites/src/composites/ChatComposite/ChatScreen.js.map +1 -1
  140. package/dist/dist-esm/react-composites/src/composites/ChatComposite/Strings.js.map +1 -1
  141. package/dist/dist-esm/react-composites/src/composites/ChatComposite/adapter/AzureCommunicationChatAdapter.d.ts +6 -0
  142. package/dist/dist-esm/react-composites/src/composites/ChatComposite/adapter/AzureCommunicationChatAdapter.js +44 -22
  143. package/dist/dist-esm/react-composites/src/composites/ChatComposite/adapter/AzureCommunicationChatAdapter.js.map +1 -1
  144. package/dist/dist-esm/react-composites/src/composites/ChatComposite/adapter/AzureCommunicationFileUploadAdapter.js +6 -6
  145. package/dist/dist-esm/react-composites/src/composites/ChatComposite/adapter/AzureCommunicationFileUploadAdapter.js.map +1 -1
  146. package/dist/dist-esm/react-composites/src/composites/ChatComposite/adapter/ChatAdapter.js.map +1 -1
  147. package/dist/dist-esm/react-composites/src/composites/ChatComposite/adapter/ChatAdapterProvider.js +1 -1
  148. package/dist/dist-esm/react-composites/src/composites/ChatComposite/adapter/ChatAdapterProvider.js.map +1 -1
  149. package/dist/dist-esm/react-composites/src/composites/ChatComposite/file-sharing/FileUploadButton.js +4 -4
  150. package/dist/dist-esm/react-composites/src/composites/ChatComposite/file-sharing/FileUploadButton.js.map +1 -1
  151. package/dist/dist-esm/react-composites/src/composites/ChatComposite/hooks/useHandlers.js +3 -3
  152. package/dist/dist-esm/react-composites/src/composites/ChatComposite/hooks/useHandlers.js.map +1 -1
  153. package/dist/dist-esm/react-composites/src/composites/ChatComposite/index.js.map +1 -1
  154. package/dist/dist-esm/react-composites/src/composites/ChatComposite/selectors/baseSelectors.js +1 -1
  155. package/dist/dist-esm/react-composites/src/composites/ChatComposite/selectors/baseSelectors.js.map +1 -1
  156. package/dist/dist-esm/react-composites/src/composites/common/SendBox.js +8 -8
  157. package/dist/dist-esm/react-composites/src/composites/common/SendBox.js.map +1 -1
  158. package/dist/dist-esm/react-composites/src/composites/common/icons.d.ts +4 -0
  159. package/dist/dist-esm/react-composites/src/composites/common/icons.js +2 -2
  160. package/dist/dist-esm/react-composites/src/composites/common/icons.js.map +1 -1
  161. package/dist/dist-esm/react-composites/src/composites/localization/locales/en-US/strings.json +2 -1
  162. package/package.json +2 -1
  163. package/dist/dist-cjs/communication-react/index-Ba2HAv_Y.js.map +0 -1
  164. package/dist/dist-esm/react-components/src/components/RichTextEditor/RichTextRibbonButtons.d.ts +0 -12
  165. package/dist/dist-esm/react-components/src/components/RichTextEditor/RichTextRibbonButtons.js.map +0 -1
  166. package/dist/dist-esm/react-components/src/components/styles/IconButton.styles.d.ts +0 -5
  167. package/dist/dist-esm/react-components/src/components/styles/IconButton.styles.js +0 -17
  168. package/dist/dist-esm/react-components/src/components/styles/IconButton.styles.js.map +0 -1
@@ -14,12 +14,15 @@ var textareaCaretTs = require('textarea-caret-ts');
14
14
  var reactComponents = require('@fluentui/react-components');
15
15
  var useDebounce = require('use-debounce');
16
16
  var reactFileTypeIcons = require('@fluentui/react-file-type-icons');
17
+ var react$1 = require('@griffel/react');
17
18
  var roosterjsEditorPlugins = require('roosterjs-editor-plugins');
18
19
  var roosterjsEditorCore = require('roosterjs-editor-core');
19
20
  var roosterjsReact = require('roosterjs-react');
21
+ var roosterjsEditorDom = require('roosterjs-editor-dom');
22
+ var roosterjsEditorTypesCompatible = require('roosterjs-editor-types-compatible');
23
+ var roosterjsEditorApi = require('roosterjs-editor-api');
20
24
  var reactChat = require('@fluentui-contrib/react-chat');
21
25
  var uuid = require('uuid');
22
- var react$1 = require('@griffel/react');
23
26
  var parse = require('html-react-parser');
24
27
  var Linkify = require('react-linkify');
25
28
  var DOMPurify = require('dompurify');
@@ -173,7 +176,7 @@ function getDefaultExportFromCjs (x) {
173
176
  // Copyright (c) Microsoft Corporation.
174
177
  // Licensed under the MIT License.
175
178
  // GENERATED FILE. DO NOT EDIT MANUALLY.
176
- var telemetryVersion = '1.14.1-alpha-202403261958';
179
+ var telemetryVersion = '1.14.1-alpha-202403280012';
177
180
 
178
181
 
179
182
  var telemetryVersion$1 = /*@__PURE__*/getDefaultExportFromCjs(telemetryVersion);
@@ -1841,7 +1844,9 @@ function convertSdkCallToDeclarativeCall(call) {
1841
1844
  },
1842
1845
  /* @conditional-compile-remove(hide-attendee-name) */
1843
1846
  // TODO: Replace this once the SDK supports hide attendee name
1844
- hideAttendeeNames: false
1847
+ hideAttendeeNames: false,
1848
+ /* @conditional-compile-remove(meeting-id) */
1849
+ info: _isACSCall(call) ? call.info : _isTeamsCall(call) ? call.info : undefined
1845
1850
  };
1846
1851
  }
1847
1852
  /**
@@ -2024,6 +2029,8 @@ let CallContext$2 = class CallContext {
2024
2029
  existingCall.captionsFeature.currentSpokenLanguage = call.captionsFeature.currentSpokenLanguage;
2025
2030
  /* @conditional-compile-remove(close-captions) */
2026
2031
  existingCall.captionsFeature.currentCaptionLanguage = call.captionsFeature.currentCaptionLanguage;
2032
+ /* @conditional-compile-remove(meeting-id) */
2033
+ existingCall.info = call.info;
2027
2034
  }
2028
2035
  else {
2029
2036
  draft.calls[latestCallId] = call;
@@ -5624,7 +5631,7 @@ const typingIndicatorStringStyle = react.mergeStyles({
5624
5631
  wordBreak: 'break-word'
5625
5632
  });
5626
5633
 
5627
- var participantItem$k={isMeText:"(you)",menuTitle:"More Options",removeButtonLabel:"Remove",sharingIconLabel:"Sharing",mutedIconLabel:"Muted",displayNamePlaceholder:"Unnamed participant",participantStateRinging:"Calling...",participantStateHold:"On hold",attendeeRole:"Attendee"};var ParticipantList$l={overflowParticipantCount:"+{overflowCount} more"};var typingIndicator$k={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$k={placeholderText:"Enter a message",textTooLong:"Your message length is over the maximum limit.",sendButtonAriaLabel:"Send message",attachmentUploadsPendingError:"Uploading... Please wait.",removeAttachment:"Remove file",uploading:"Uploading",uploadCompleted:"Upload completed"};var richTextSendBox$k={placeholderText:"Enter a message",textTooLong:"Your message length is over the maximum limit.",sendButtonAriaLabel:"Send message",attachmentUploadsPendingError:"Uploading... Please wait.",removeAttachment:"Remove file",uploading:"Uploading",uploadCompleted:"Upload completed",boldTooltip:"Bold",italicTooltip:"Italic",underlineTooltip:"Underline",bulletListTooltip:"Bulleted list",numberListTooltip:"Numbered list",increaseIndentTooltip:"Increase indent",decreaseIndentTooltip:"Decrease indent",richTextFormatButtonTooltip:"Format"};var mentionPopover$k={mentionPopoverHeader:"Suggestions"};var imageOverlay$k={downloadButtonLabel:"Download",dismissButtonAriaLabel:"Close"};var messageStatusIndicator$k={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$k={label:"Leave",tooltipContent:"Leave call"};var cameraButton$k={onLabel:"Camera",offLabel:"Camera",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",onSplitButtonPrimaryActionCamera:"Turn off camera",offSplitButtonPrimaryActionCamera:"Turn on camera",cameraPrimaryActionSplitButtonTitle:"Use camera",videoEffectsMenuItemTitle:"Effects"};var microphoneButton$k={onLabel:"Mic",offLabel:"Mic",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",offSplitButtonMicrophonePrimaryAction:"Unmute microphone",onSplitButtonMicrophonePrimaryAction:"Mute microphone",microphonePrimaryActionSplitButtonTitle:"Use microphone"};var devicesButton$k={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$k={label:"People",tooltipContent:"Show participants",menuHeader:"In this call",participantsListButtonLabel:"{numParticipants} people",muteAllButtonLabel:"Mute all",copyInviteLinkButtonLabel:"Copy invite link",copyInviteLinkActionedAriaLabel:"Invite link copied"};var screenShareButton$k={onLabel:"Stop presenting",offLabel:"Present",tooltipDisabledContent:"Presenting is disabled",tooltipOnContent:"Presenting your screen",tooltipOffContent:"Present your screen"};var raiseHandButton$k={offLabel:"Raise",onLabel:"Lower",tooltipDisabledContent:"Raise Hand action is disabled",tooltipOnContent:"Lower Hand",tooltipOffContent:"Raise Hand"};var reactionButton$k={label:"React",ariaLabel:"React Button, Send a reaction",tooltipDisabledContent:"Reaction action is disabled",tooltipContent:"Send a reaction",likeReactionTooltipContent:"Like",heartReactionTooltipContent:"Love",laughReactionTooltipContent:"Laugh",applauseReactionTooltipContent:"Applause",surprisedReactionTooltipContent:"Surprised"};var messageThread$k={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:"Done",messageReadCount:"Read by {messageReadByCount} of {remoteParticipantsCount}",actionMenuMoreOptions:"More Options",downloadAttachment:"Download file",blockedWarningText:"This message was deleted due to organizational policy.",blockedWarningLinkText:"Details",attachmentCardGroupMessage:"The message has {attachmentCount} attachment",messageDeletedAnnouncementAriaLabel:"The message is deleted"};var errorBar$k={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:"There was an issue starting screen share.",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.",callMicrophoneAccessDeniedSafari:"Unable to access microphone. Refresh the page to allow permissions, or check this browser’s settings and verify permissions are enabled for this website.",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.",callCameraAccessDeniedSafari:"Unable to access camera. Refresh the page to allow permissions, or check this browser’s settings and verify permissions are enabled for this website.",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.",cameraFrozenForRemoteParticipants:"Users in the call are having issues seeing your video. Please check your devices and network.",unableToStartVideoEffect:"Unable to apply video effect.",startSpotlightWhileMaxParticipantsAreSpotlighted:"Cannot start spotlight on participant(s) because the maximum number of participants are already spotlighted."};var videoGallery$k={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",fitRemoteParticipantToFrame:"Fit to frame",fillRemoteParticipantFrame:"Fill frame",pinParticipantForMe:"Pin for me",pinParticipantForMeLimitReached:"Pin (limit reached)",unpinParticipantForMe:"Unpin",pinParticipantMenuItemAriaLabel:"Pin {participantName}",unpinParticipantMenuItemAriaLabel:"Unpin {participantName}",pinnedParticipantAnnouncementAriaLabel:"Pinned {participantName}",unpinnedParticipantAnnouncementAriaLabel:"Unpinned {participantName}",startSpotlightVideoTileMenuLabel:"Spotlight for everyone",addSpotlightVideoTileMenuLabel:"Add spotlight",spotlightLimitReachedMenuTitle:"Spotlight limit reached",stopSpotlightVideoTileMenuLabel:"Stop spotlighting",stopSpotlightOnSelfVideoTileMenuLabel:"Exit spotlight",attendeeRole:"Attendee"};var dialpad$k={placeholderText:"Enter phone number",deleteButtonAriaLabel:"Delete"};var holdButton$k={onLabel:"Resume",offLabel:"Hold",tooltipOnContent:"Resume call",tooltipOffContent:"Hold call"};var videoTile$k={participantStateRinging:"Calling...",participantStateHold:"On hold"};var CameraAndMicrophoneSitePermissionsRequest$k={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 CameraSitePermissionsRequest$k={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 MicrophoneSitePermissionsRequest$k={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 CameraAndMicrophoneSitePermissionsCheck$k={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 CameraSitePermissionsCheck$k={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 MicrophoneSitePermissionsCheck$k={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 CameraAndMicrophoneSitePermissionsDenied$k={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 CameraAndMicrophoneSitePermissionsDeniedSafari$k={primaryText:"Unable to access camera and microphone",secondaryText:"Refresh the page to allow permissions, or check this browser’s settings and verify permissions are enabled for this website.",primaryButtonText:"Continue without camera and microphone",linkText:"Need help? Get troubleshooting help"};var CameraSitePermissionsDenied$k={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 MicrophoneSitePermissionsDenied$k={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 CameraSitePermissionsDeniedSafari$k={primaryText:"Unable to access camera",secondaryText:"Refresh the page to allow permissions, or check this browser’s settings and verify permissions are enabled for this website.",primaryButtonText:"Continue without camera",linkText:"Need help? Get troubleshooting help"};var MicrophoneSitePermissionsDeniedSafari$k={primaryText:"Unable to access microphone",secondaryText:"Refresh the page to allow permissions, or check this browser’s settings and verify permissions are enabled for this website.",primaryButtonText:"Continue without microphone",linkText:"Need help? Get troubleshooting help"};var UnsupportedBrowser$l={primaryText:"Browser not supported",secondaryText:"Please join this call using a compatible browser.",moreHelpLinkText:"See compatibility requirements"};var UnsupportedBrowserVersion$l={primaryText:"Browser update needed",secondaryText:"To ensure the best call possible, please update your browser and then try joining the call again.",moreHelpLinkText:"See compatibility requirements",continueAnywayButtonText:"Start call without updating"};var UnsupportedOperatingSystem$l={primaryText:"Operating system not supported",secondaryText:"Please join this call using a device with a compatible operating system.",moreHelpLinkText:"See compatibility requirements"};var BrowserPermissionDenied$k={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$k={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 verticalGallery$k={leftNavButtonAriaLabel:"previous page",rightNavButtonAriaLabel:"next page"};var en_US$1 = {participantItem:participantItem$k,ParticipantList:ParticipantList$l,typingIndicator:typingIndicator$k,sendBox:sendBox$k,richTextSendBox:richTextSendBox$k,mentionPopover:mentionPopover$k,imageOverlay:imageOverlay$k,messageStatusIndicator:messageStatusIndicator$k,endCallButton:endCallButton$k,cameraButton:cameraButton$k,microphoneButton:microphoneButton$k,devicesButton:devicesButton$k,participantsButton:participantsButton$k,screenShareButton:screenShareButton$k,raiseHandButton:raiseHandButton$k,reactionButton:reactionButton$k,messageThread:messageThread$k,errorBar:errorBar$k,videoGallery:videoGallery$k,dialpad:dialpad$k,holdButton:holdButton$k,videoTile:videoTile$k,CameraAndMicrophoneSitePermissionsRequest:CameraAndMicrophoneSitePermissionsRequest$k,CameraSitePermissionsRequest:CameraSitePermissionsRequest$k,MicrophoneSitePermissionsRequest:MicrophoneSitePermissionsRequest$k,CameraAndMicrophoneSitePermissionsCheck:CameraAndMicrophoneSitePermissionsCheck$k,CameraSitePermissionsCheck:CameraSitePermissionsCheck$k,MicrophoneSitePermissionsCheck:MicrophoneSitePermissionsCheck$k,CameraAndMicrophoneSitePermissionsDenied:CameraAndMicrophoneSitePermissionsDenied$k,CameraAndMicrophoneSitePermissionsDeniedSafari:CameraAndMicrophoneSitePermissionsDeniedSafari$k,CameraSitePermissionsDenied:CameraSitePermissionsDenied$k,MicrophoneSitePermissionsDenied:MicrophoneSitePermissionsDenied$k,CameraSitePermissionsDeniedSafari:CameraSitePermissionsDeniedSafari$k,MicrophoneSitePermissionsDeniedSafari:MicrophoneSitePermissionsDeniedSafari$k,UnsupportedBrowser:UnsupportedBrowser$l,UnsupportedBrowserVersion:UnsupportedBrowserVersion$l,UnsupportedOperatingSystem:UnsupportedOperatingSystem$l,BrowserPermissionDenied:BrowserPermissionDenied$k,BrowserPermissionDeniedIOS:BrowserPermissionDeniedIOS$k,verticalGallery:verticalGallery$k};
5634
+ var participantItem$k={isMeText:"(you)",menuTitle:"More Options",removeButtonLabel:"Remove",sharingIconLabel:"Sharing",mutedIconLabel:"Muted",displayNamePlaceholder:"Unnamed participant",participantStateRinging:"Calling...",participantStateHold:"On hold",attendeeRole:"Attendee"};var ParticipantList$l={overflowParticipantCount:"+{overflowCount} more"};var typingIndicator$k={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$k={placeholderText:"Enter a message",textTooLong:"Your message length is over the maximum limit.",sendButtonAriaLabel:"Send message",attachmentUploadsPendingError:"Uploading... Please wait.",removeAttachment:"Remove file",uploading:"Uploading",uploadCompleted:"Upload completed"};var richTextSendBox$k={placeholderText:"Enter a message",textTooLong:"Your message length is over the maximum limit.",sendButtonAriaLabel:"Send message",attachmentUploadsPendingError:"Uploading... Please wait.",removeAttachment:"Remove file",uploading:"Uploading",uploadCompleted:"Upload completed",boldTooltip:"Bold",italicTooltip:"Italic",underlineTooltip:"Underline",bulletListTooltip:"Bulleted list",numberListTooltip:"Numbered list",increaseIndentTooltip:"Increase indent",decreaseIndentTooltip:"Decrease indent",insertTableTooltip:"Insert table",richTextFormatButtonTooltip:"Format",insertRowOrColumnMenu:"Insert",insertTableMenuTitle:"Insert {column} x {row} table",insertRowAboveMenu:"Insert above",insertRowBelowMenu:"Insert below",insertColumnLeftMenu:"Insert left",insertColumnRightMenu:"Insert right",deleteRowOrColumnMenu:"Delete",deleteColumnMenu:"Delete column",deleteRowMenu:"Delete row",deleteTableMenu:"Delete table"};var mentionPopover$k={mentionPopoverHeader:"Suggestions"};var imageOverlay$k={downloadButtonLabel:"Download",dismissButtonAriaLabel:"Close"};var messageStatusIndicator$k={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$k={label:"Leave",tooltipContent:"Leave call"};var cameraButton$k={onLabel:"Camera",offLabel:"Camera",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",onSplitButtonPrimaryActionCamera:"Turn off camera",offSplitButtonPrimaryActionCamera:"Turn on camera",cameraPrimaryActionSplitButtonTitle:"Use camera",videoEffectsMenuItemTitle:"Effects"};var microphoneButton$k={onLabel:"Mic",offLabel:"Mic",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",offSplitButtonMicrophonePrimaryAction:"Unmute microphone",onSplitButtonMicrophonePrimaryAction:"Mute microphone",microphonePrimaryActionSplitButtonTitle:"Use microphone"};var devicesButton$k={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$k={label:"People",tooltipContent:"Show participants",menuHeader:"In this call",participantsListButtonLabel:"{numParticipants} people",muteAllButtonLabel:"Mute all",copyInviteLinkButtonLabel:"Copy invite link",copyInviteLinkActionedAriaLabel:"Invite link copied"};var screenShareButton$k={onLabel:"Stop presenting",offLabel:"Present",tooltipDisabledContent:"Presenting is disabled",tooltipOnContent:"Presenting your screen",tooltipOffContent:"Present your screen"};var raiseHandButton$k={offLabel:"Raise",onLabel:"Lower",tooltipDisabledContent:"Raise Hand action is disabled",tooltipOnContent:"Lower Hand",tooltipOffContent:"Raise Hand"};var reactionButton$k={label:"React",ariaLabel:"React Button, Send a reaction",tooltipDisabledContent:"Reaction action is disabled",tooltipContent:"Send a reaction",likeReactionTooltipContent:"Like",heartReactionTooltipContent:"Love",laughReactionTooltipContent:"Laugh",applauseReactionTooltipContent:"Applause",surprisedReactionTooltipContent:"Surprised"};var messageThread$k={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:"Done",messageReadCount:"Read by {messageReadByCount} of {remoteParticipantsCount}",actionMenuMoreOptions:"More Options",downloadAttachment:"Download file",blockedWarningText:"This message was deleted due to organizational policy.",blockedWarningLinkText:"Details",attachmentCardGroupMessage:"The message has {attachmentCount} attachment",messageDeletedAnnouncementAriaLabel:"The message is deleted"};var errorBar$k={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:"There was an issue starting screen share.",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.",callMicrophoneAccessDeniedSafari:"Unable to access microphone. Refresh the page to allow permissions, or check this browser’s settings and verify permissions are enabled for this website.",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.",callCameraAccessDeniedSafari:"Unable to access camera. Refresh the page to allow permissions, or check this browser’s settings and verify permissions are enabled for this website.",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.",cameraFrozenForRemoteParticipants:"Users in the call are having issues seeing your video. Please check your devices and network.",unableToStartVideoEffect:"Unable to apply video effect.",startSpotlightWhileMaxParticipantsAreSpotlighted:"Cannot start spotlight on participant(s) because the maximum number of participants are already spotlighted."};var videoGallery$k={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",fitRemoteParticipantToFrame:"Fit to frame",fillRemoteParticipantFrame:"Fill frame",pinParticipantForMe:"Pin for me",pinParticipantForMeLimitReached:"Pin (limit reached)",unpinParticipantForMe:"Unpin",pinParticipantMenuItemAriaLabel:"Pin {participantName}",unpinParticipantMenuItemAriaLabel:"Unpin {participantName}",pinnedParticipantAnnouncementAriaLabel:"Pinned {participantName}",unpinnedParticipantAnnouncementAriaLabel:"Unpinned {participantName}",startSpotlightVideoTileMenuLabel:"Spotlight for everyone",addSpotlightVideoTileMenuLabel:"Add spotlight",spotlightLimitReachedMenuTitle:"Spotlight limit reached",stopSpotlightVideoTileMenuLabel:"Stop spotlighting",stopSpotlightOnSelfVideoTileMenuLabel:"Exit spotlight",attendeeRole:"Attendee"};var dialpad$k={placeholderText:"Enter phone number",deleteButtonAriaLabel:"Delete"};var holdButton$k={onLabel:"Resume",offLabel:"Hold",tooltipOnContent:"Resume call",tooltipOffContent:"Hold call"};var videoTile$k={participantStateRinging:"Calling...",participantStateHold:"On hold"};var CameraAndMicrophoneSitePermissionsRequest$k={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 CameraSitePermissionsRequest$k={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 MicrophoneSitePermissionsRequest$k={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 CameraAndMicrophoneSitePermissionsCheck$k={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 CameraSitePermissionsCheck$k={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 MicrophoneSitePermissionsCheck$k={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 CameraAndMicrophoneSitePermissionsDenied$k={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 CameraAndMicrophoneSitePermissionsDeniedSafari$k={primaryText:"Unable to access camera and microphone",secondaryText:"Refresh the page to allow permissions, or check this browser’s settings and verify permissions are enabled for this website.",primaryButtonText:"Continue without camera and microphone",linkText:"Need help? Get troubleshooting help"};var CameraSitePermissionsDenied$k={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 MicrophoneSitePermissionsDenied$k={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 CameraSitePermissionsDeniedSafari$k={primaryText:"Unable to access camera",secondaryText:"Refresh the page to allow permissions, or check this browser’s settings and verify permissions are enabled for this website.",primaryButtonText:"Continue without camera",linkText:"Need help? Get troubleshooting help"};var MicrophoneSitePermissionsDeniedSafari$k={primaryText:"Unable to access microphone",secondaryText:"Refresh the page to allow permissions, or check this browser’s settings and verify permissions are enabled for this website.",primaryButtonText:"Continue without microphone",linkText:"Need help? Get troubleshooting help"};var UnsupportedBrowser$l={primaryText:"Browser not supported",secondaryText:"Please join this call using a compatible browser.",moreHelpLinkText:"See compatibility requirements"};var UnsupportedBrowserVersion$l={primaryText:"Browser update needed",secondaryText:"To ensure the best call possible, please update your browser and then try joining the call again.",moreHelpLinkText:"See compatibility requirements",continueAnywayButtonText:"Start call without updating"};var UnsupportedOperatingSystem$l={primaryText:"Operating system not supported",secondaryText:"Please join this call using a device with a compatible operating system.",moreHelpLinkText:"See compatibility requirements"};var BrowserPermissionDenied$k={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$k={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 verticalGallery$k={leftNavButtonAriaLabel:"previous page",rightNavButtonAriaLabel:"next page"};var en_US$1 = {participantItem:participantItem$k,ParticipantList:ParticipantList$l,typingIndicator:typingIndicator$k,sendBox:sendBox$k,richTextSendBox:richTextSendBox$k,mentionPopover:mentionPopover$k,imageOverlay:imageOverlay$k,messageStatusIndicator:messageStatusIndicator$k,endCallButton:endCallButton$k,cameraButton:cameraButton$k,microphoneButton:microphoneButton$k,devicesButton:devicesButton$k,participantsButton:participantsButton$k,screenShareButton:screenShareButton$k,raiseHandButton:raiseHandButton$k,reactionButton:reactionButton$k,messageThread:messageThread$k,errorBar:errorBar$k,videoGallery:videoGallery$k,dialpad:dialpad$k,holdButton:holdButton$k,videoTile:videoTile$k,CameraAndMicrophoneSitePermissionsRequest:CameraAndMicrophoneSitePermissionsRequest$k,CameraSitePermissionsRequest:CameraSitePermissionsRequest$k,MicrophoneSitePermissionsRequest:MicrophoneSitePermissionsRequest$k,CameraAndMicrophoneSitePermissionsCheck:CameraAndMicrophoneSitePermissionsCheck$k,CameraSitePermissionsCheck:CameraSitePermissionsCheck$k,MicrophoneSitePermissionsCheck:MicrophoneSitePermissionsCheck$k,CameraAndMicrophoneSitePermissionsDenied:CameraAndMicrophoneSitePermissionsDenied$k,CameraAndMicrophoneSitePermissionsDeniedSafari:CameraAndMicrophoneSitePermissionsDeniedSafari$k,CameraSitePermissionsDenied:CameraSitePermissionsDenied$k,MicrophoneSitePermissionsDenied:MicrophoneSitePermissionsDenied$k,CameraSitePermissionsDeniedSafari:CameraSitePermissionsDeniedSafari$k,MicrophoneSitePermissionsDeniedSafari:MicrophoneSitePermissionsDeniedSafari$k,UnsupportedBrowser:UnsupportedBrowser$l,UnsupportedBrowserVersion:UnsupportedBrowserVersion$l,UnsupportedOperatingSystem:UnsupportedOperatingSystem$l,BrowserPermissionDenied:BrowserPermissionDenied$k,BrowserPermissionDeniedIOS:BrowserPermissionDeniedIOS$k,verticalGallery:verticalGallery$k};
5628
5635
 
5629
5636
  // Copyright (c) Microsoft Corporation.
5630
5637
  // Licensed under the MIT License.
@@ -6354,8 +6361,9 @@ const sendButtonStyle = react.mergeStyles({
6354
6361
  */
6355
6362
  const sendIconStyle = (props) => {
6356
6363
  const { theme, hasText, disabled = false,
6357
- /* @conditional-compile-remove(file-sharing) */ hasFile, hasErrorMessage, customSendIconStyle, defaultTextColor = theme.palette.neutralTertiary } = props;
6358
- const hasNoContent = !hasText && /* @conditional-compile-remove(file-sharing) */ !hasFile;
6364
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */ hasFile, hasErrorMessage, customSendIconStyle, defaultTextColor = theme.palette.neutralTertiary } = props;
6365
+ const hasNoContent = !hasText &&
6366
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */ !hasFile;
6359
6367
  return react.mergeStyles(editorTextBoxButtonStyle, {
6360
6368
  color: disabled || hasErrorMessage || hasNoContent ? defaultTextColor : theme.palette.themePrimary
6361
6369
  }, customSendIconStyle);
@@ -6699,9 +6707,9 @@ const DEFAULT_COMPONENT_ICONS = {
6699
6707
  LowerHandContextualMenuItem: React.createElement(reactIcons.HandRightOff20Regular, null),
6700
6708
  /* @conditional-compile-remove(reaction) */
6701
6709
  ReactionButtonIcon: React.createElement(reactIcons.Emoji20Regular, null),
6702
- /* @conditional-compile-remove(file-sharing) */
6710
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
6703
6711
  CancelFileUpload: React.createElement(reactIcons.Dismiss16Regular, null),
6704
- /* @conditional-compile-remove(file-sharing) */
6712
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
6705
6713
  DownloadFile: React.createElement(reactIcons.ArrowDownload16Regular, null),
6706
6714
  /* @conditional-compile-remove(data-loss-prevention) */
6707
6715
  DataLossPreventionProhibited: React.createElement(DataLossPreventionProhibited16Regular, null),
@@ -6819,7 +6827,15 @@ const DEFAULT_COMPONENT_ICONS = {
6819
6827
  /* @conditional-compile-remove(rich-text-editor) */
6820
6828
  RichTextEditorButtonIcon: React.createElement(reactIcons.TextEditStyle20Regular, null),
6821
6829
  /* @conditional-compile-remove(rich-text-editor) */
6822
- RichTextEditorButtonIconFilled: React.createElement(reactIcons.TextEditStyle20Filled, null)
6830
+ RichTextEditorButtonIconFilled: React.createElement(reactIcons.TextEditStyle20Filled, null),
6831
+ /* @conditional-compile-remove(rich-text-editor) */
6832
+ RichTextInsertTableRegularIcon: React.createElement(reactIcons.Table20Regular, null),
6833
+ /* @conditional-compile-remove(rich-text-editor) */
6834
+ RichTextInsertTableFilledIcon: React.createElement(reactIcons.Table20Filled, null),
6835
+ /* @conditional-compile-remove(rich-text-editor) */
6836
+ RichTextTableInsertMenuIcon: React.createElement(reactIcons.TableAdd20Regular, null),
6837
+ /* @conditional-compile-remove(rich-text-editor) */
6838
+ RichTextTableDeleteMenuIcon: React.createElement(reactIcons.TableDismiss20Regular, null)
6823
6839
  };
6824
6840
 
6825
6841
  // Copyright (c) Microsoft Corporation.
@@ -8749,26 +8765,83 @@ const SendBoxErrors = (props) => {
8749
8765
 
8750
8766
  // Copyright (c) Microsoft Corporation.
8751
8767
  // Licensed under the MIT License.
8752
- /* @conditional-compile-remove(file-sharing) */
8768
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
8753
8769
  /**
8754
8770
  * Conditionally modify locale strings passed to the attachment card
8755
8771
  * @returns file upload card strings
8756
8772
  */
8757
8773
  const useLocaleAttachmentCardStringsTrampoline = () => {
8758
- /* @conditional-compile-remove(file-sharing) */
8774
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
8759
8775
  return useLocale$1().strings.sendBox;
8760
8776
  };
8761
8777
 
8778
+ // Copyright (c) Microsoft Corporation.
8779
+ // Licensed under the MIT License.
8780
+ /**
8781
+ * @private
8782
+ */
8783
+ const useAttachmentCardStyles = reactComponents.makeStyles({
8784
+ root: {
8785
+ width: '12rem',
8786
+ minWidth: '75%'
8787
+ }
8788
+ });
8789
+ /**
8790
+ * @private
8791
+ */
8792
+ const fileNameContainerClassName = react.mergeStyles({
8793
+ marginTop: _pxToRem(5),
8794
+ width: '5.75rem',
8795
+ overflow: 'hidden',
8796
+ textOverflow: 'ellipsis',
8797
+ span: {
8798
+ whiteSpace: 'nowrap'
8799
+ }
8800
+ });
8801
+
8762
8802
  // Copyright (c) Microsoft Corporation.
8763
8803
  // Licensed under the MIT License.
8764
8804
  /**
8765
8805
  * @internal
8766
- * A component for displaying a attachment card with attachment icon and progress bar.
8806
+ * A component for displaying an attachment card with attachment icon and progress bar.
8807
+ *
8808
+ * `_AttachmentCard` internally uses the `Card` component from `@fluentui/react-components`. You can checkout the details about these components [here](https://react.fluentui.dev/?path=/docs/components-card).
8767
8809
  */
8768
8810
  const _AttachmentCard = (props) => {
8769
8811
  var _a, _b, _c, _d;
8770
- const { attachmentName, attachmentExtension, progress, actionIcon } = props;
8771
- const theme = react.useTheme();
8812
+ const { attachmentName, attachmentExtension, progress, actionIcon, actionHandler } = props;
8813
+ const attachmentCardStyles = useAttachmentCardStyles();
8814
+ // default/placeholder before actual code implemented
8815
+ const menuActions = React.useMemo(() => {
8816
+ return [
8817
+ {
8818
+ name: actionIcon && (actionIcon === null || actionIcon === void 0 ? void 0 : actionIcon.props.ariaLabel),
8819
+ icon: actionIcon !== null && actionIcon !== void 0 ? actionIcon : React.createElement(React.Fragment, null),
8820
+ onClick: (attachment) => {
8821
+ if (attachment) {
8822
+ actionHandler === null || actionHandler === void 0 ? void 0 : actionHandler();
8823
+ }
8824
+ }
8825
+ }
8826
+ ];
8827
+ }, [actionIcon, actionHandler]);
8828
+ // placeholder before refactoring the props
8829
+ const attachment = React.useMemo(() => {
8830
+ return {
8831
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
8832
+ id: 'attachmentId',
8833
+ extension: attachmentExtension,
8834
+ name: attachmentName,
8835
+ url: 'https://localhost' // placeholder not used
8836
+ };
8837
+ }, [attachmentExtension, attachmentName]);
8838
+ // placeholder before refactoring the props
8839
+ const onDownloadErrorMessage = React.useCallback((errorMessage) => {
8840
+ console.log(errorMessage);
8841
+ }, []);
8842
+ const isUploadComplete = React.useMemo(() => {
8843
+ return progress !== undefined && progress > 0 && progress < 1;
8844
+ }, [progress]);
8772
8845
  const [announcerString, setAnnouncerString] = React.useState(undefined);
8773
8846
  const localeStrings = useLocaleAttachmentCardStringsTrampoline();
8774
8847
  const uploadStartedString = (_b = (_a = props.strings) === null || _a === void 0 ? void 0 : _a.uploading) !== null && _b !== void 0 ? _b : localeStrings.uploading;
@@ -8785,61 +8858,42 @@ const _AttachmentCard = (props) => {
8785
8858
  setAnnouncerString(undefined);
8786
8859
  }
8787
8860
  }, [progress, showProgressIndicator, attachmentName, uploadStartedString, uploadCompletedString]);
8788
- const progressBarThicknessPx = 4;
8789
- const containerClassName = react.mergeStyles({
8790
- width: '12rem',
8791
- background: theme.palette.neutralLighter,
8792
- borderRadius: theme.effects.roundedCorner4,
8793
- border: `${_pxToRem(1)} solid ${theme.palette.neutralQuaternary}`,
8794
- cursor: 'pointer'
8795
- });
8796
- const attachmentInfoWrapperClassName = react.mergeStyles({
8797
- padding: _pxToRem(12),
8798
- // To make space for the progress indicator.
8799
- paddingBottom: showProgressIndicator ? _pxToRem(12 - progressBarThicknessPx * 2) : _pxToRem(12)
8800
- });
8801
- const attachmentNameContainerClassName = react.mergeStyles({
8802
- paddingLeft: _pxToRem(4),
8803
- minWidth: '75%',
8804
- maxWidth: '75%'
8805
- });
8806
- const attachmentNameTextClassName = react.mergeStyles({
8807
- overflow: 'hidden',
8808
- textOverflow: 'ellipsis',
8809
- lineHeight: 'normal',
8810
- whiteSpace: 'nowrap',
8811
- paddingRight: _pxToRem(4)
8812
- });
8813
- const actionIconClassName = react.mergeStyles({
8814
- cursor: 'pointer'
8815
- });
8816
- const progressIndicatorStyles = {
8817
- itemProgress: {
8818
- padding: `${_pxToRem(progressBarThicknessPx - 1)} 0`, // item progress height won't apply without an explicit padding
8819
- // To make the progress indicator border curve along the bottom of attachment card.
8820
- borderRadius: `0 0 ${theme.effects.roundedCorner4} ${theme.effects.roundedCorner4}`
8821
- },
8822
- progressBar: {
8823
- height: _pxToRem(progressBarThicknessPx)
8824
- }
8825
- };
8826
8861
  return (React.createElement("div", { "data-is-focusable": true },
8827
8862
  React.createElement(Announcer$1, { announcementString: announcerString, ariaLive: 'polite' }),
8828
- React.createElement(react.Stack, { className: containerClassName, onClick: () => {
8829
- var _a;
8830
- (_a = props.actionHandler) === null || _a === void 0 ? void 0 : _a.call(props);
8831
- } },
8832
- React.createElement(react.Stack, { horizontal: true, horizontalAlign: "space-between", verticalAlign: "center", className: attachmentInfoWrapperClassName },
8833
- React.createElement(react.Stack, null,
8834
- React.createElement(react.Icon, { "data-ui-id": 'filetype-icon', iconName: reactFileTypeIcons.getFileTypeIconProps({
8835
- extension: attachmentExtension,
8836
- size: 24,
8837
- imageFileType: 'svg'
8838
- }).iconName })),
8839
- React.createElement(react.Stack, { className: attachmentNameContainerClassName },
8840
- React.createElement(react.Text, { className: attachmentNameTextClassName }, attachmentName)),
8841
- React.createElement(react.Stack, { verticalAlign: "center", className: actionIconClassName }, actionIcon && actionIcon)),
8842
- showProgressIndicator && React.createElement(react.ProgressIndicator, { percentComplete: progress, styles: progressIndicatorStyles }))));
8863
+ React.createElement(reactComponents.Card, { className: attachmentCardStyles.root, size: "small", role: "listitem" },
8864
+ React.createElement(reactComponents.CardHeader, { image: React.createElement(react.Icon, { "data-ui-id": 'filetype-icon', iconName: reactFileTypeIcons.getFileTypeIconProps({
8865
+ extension: attachmentExtension,
8866
+ size: 24,
8867
+ imageFileType: 'svg'
8868
+ }).iconName }), header: React.createElement("div", { className: fileNameContainerClassName },
8869
+ React.createElement(reactComponents.Text, { title: attachmentName }, attachmentName)), action: getMenuItems(menuActions, attachment, onDownloadErrorMessage) })),
8870
+ isUploadComplete ? (React.createElement(reactComponents.CardFooter, null,
8871
+ React.createElement(reactComponents.ProgressBar, { thickness: "medium", value: progress, shape: "rounded" }))) : (React.createElement(React.Fragment, null, " "))));
8872
+ };
8873
+ const getMenuItems = (menuActions, attachment, handleOnClickError) => {
8874
+ if (menuActions.length === 0) {
8875
+ return React.createElement(React.Fragment, null);
8876
+ }
8877
+ return menuActions.length === 1 ? (React.createElement(reactComponents.ToolbarButton, { "aria-label": menuActions[0].name, icon: menuActions[0].icon, onClick: () => {
8878
+ try {
8879
+ menuActions[0].onClick(attachment);
8880
+ }
8881
+ catch (e) {
8882
+ handleOnClickError === null || handleOnClickError === void 0 ? void 0 : handleOnClickError(e.message);
8883
+ }
8884
+ } })) : (React.createElement(reactComponents.Toolbar, null,
8885
+ React.createElement(reactComponents.Menu, null,
8886
+ React.createElement(reactComponents.MenuTrigger, null,
8887
+ React.createElement(reactComponents.ToolbarButton, { "aria-label": "More", icon: React.createElement(reactIcons.MoreHorizontal24Filled, null) })),
8888
+ React.createElement(reactComponents.MenuPopover, null,
8889
+ React.createElement(reactComponents.MenuList, null, menuActions.map((menuItem, index) => (React.createElement(reactComponents.MenuItem, { key: index, icon: menuItem.icon, onClick: () => {
8890
+ try {
8891
+ menuItem.onClick(attachment);
8892
+ }
8893
+ catch (e) {
8894
+ handleOnClickError === null || handleOnClickError === void 0 ? void 0 : handleOnClickError(e.message);
8895
+ }
8896
+ } }, menuItem.name))))))));
8843
8897
  };
8844
8898
 
8845
8899
  // Copyright (c) Microsoft Corporation.
@@ -8876,42 +8930,19 @@ const _AttachmentCardGroup = (props) => {
8876
8930
 
8877
8931
  // Copyright (c) Microsoft Corporation.
8878
8932
  // Licensed under the MIT License.
8879
- /**
8880
- * @private
8881
- */
8882
- const iconButtonClassName = react.mergeStyles({
8883
- color: 'unset',
8884
- width: '1rem',
8885
- height: '1rem',
8886
- background: 'transparent',
8887
- ':hover': {
8888
- color: 'unset',
8889
- background: 'transparent'
8890
- }
8891
- });
8892
-
8893
- // Copyright (c) Microsoft Corporation.
8894
- // Licensed under the MIT License.
8895
- const actionIconStyle$1 = { height: '1rem' };
8933
+ const actionIconStyle = { height: '1rem' };
8896
8934
  /**
8897
8935
  * @internal
8898
8936
  */
8899
8937
  const _AttachmentUploadCards = (props) => {
8900
- var _a;
8901
8938
  const attachments = props.activeFileUploads;
8902
- const localeStrings = useLocaleAttachmentCardStringsTrampoline();
8903
- const removeAttachmentButtonString = React.useMemo(() => () => {
8904
- var _a, _b;
8905
- return (_b = (_a = props.strings) === null || _a === void 0 ? void 0 : _a.removeAttachment) !== null && _b !== void 0 ? _b : localeStrings.removeAttachment;
8906
- }, [(_a = props.strings) === null || _a === void 0 ? void 0 : _a.removeAttachment, localeStrings.removeAttachment]);
8907
8939
  if (!attachments || attachments.length === 0) {
8908
8940
  return React.createElement(React.Fragment, null);
8909
8941
  }
8910
8942
  return (React.createElement(_AttachmentCardGroup, null, attachments &&
8911
8943
  attachments
8912
8944
  .filter((attachment) => !attachment.error)
8913
- .map((attachment) => (React.createElement(_AttachmentCard, { attachmentName: attachment.filename, progress: attachment.progress, key: attachment.id, attachmentExtension: extension(attachment.filename), actionIcon: React.createElement(react.IconButton, { className: iconButtonClassName, ariaLabel: removeAttachmentButtonString() },
8914
- React.createElement(react.Icon, { iconName: "CancelFileUpload", style: actionIconStyle$1 })), actionHandler: () => {
8945
+ .map((attachment) => (React.createElement(_AttachmentCard, { attachmentName: attachment.filename, progress: attachment.progress, key: attachment.id, attachmentExtension: extension(attachment.filename), actionIcon: React.createElement(react.Icon, { iconName: "CancelFileUpload", className: react.mergeStyles(actionIconStyle) }), actionHandler: () => {
8915
8946
  props.onCancelFileUpload && props.onCancelFileUpload(attachment.id);
8916
8947
  }, strings: props.strings })))));
8917
8948
  };
@@ -8923,7 +8954,7 @@ const _AttachmentUploadCards = (props) => {
8923
8954
  */
8924
8955
  const MAXIMUM_LENGTH_OF_MESSAGE = 8000;
8925
8956
  const EMPTY_MESSAGE_REGEX = /^\s*$/;
8926
- /* @conditional-compile-remove(file-sharing) */
8957
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
8927
8958
  /**
8928
8959
  * @private
8929
8960
  */
@@ -8933,7 +8964,7 @@ const hasIncompleteFileUploads = (activeFileUploads) => {
8933
8964
  .filter((attachmentUpload) => !attachmentUpload.error)
8934
8965
  .every((attachmentUpload) => attachmentUpload.uploadComplete));
8935
8966
  };
8936
- /* @conditional-compile-remove(file-sharing) */
8967
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
8937
8968
  /**
8938
8969
  * @private
8939
8970
  */
@@ -8958,6 +8989,363 @@ const sanitizeText = (message) => {
8958
8989
  }
8959
8990
  };
8960
8991
 
8992
+ // Copyright (c) Microsoft Corporation.
8993
+ // Licensed under the MIT License.
8994
+ // These color records are required for createV9Theme
8995
+ // For more info, check https://react.fluentui.dev/iframe.html?viewMode=docs&id=concepts-migration-from-v8-components-theme-migration--page#compatible-themes
8996
+ /**
8997
+ * @private
8998
+ */
8999
+ const grey = {
9000
+ '0': '#000000',
9001
+ '2': '#050505',
9002
+ '4': '#0a0a0a',
9003
+ '6': '#0f0f0f',
9004
+ '8': '#141414',
9005
+ '10': '#1a1a1a',
9006
+ '12': '#1f1f1f',
9007
+ '14': '#242424',
9008
+ '16': '#292929',
9009
+ '18': '#2e2e2e',
9010
+ '20': '#333333',
9011
+ '22': '#383838',
9012
+ '24': '#3d3d3d',
9013
+ '26': '#424242',
9014
+ '28': '#474747',
9015
+ '30': '#4d4d4d',
9016
+ '32': '#525252',
9017
+ '34': '#575757',
9018
+ '36': '#5c5c5c',
9019
+ '38': '#616161',
9020
+ '40': '#666666',
9021
+ '42': '#6b6b6b',
9022
+ '44': '#707070',
9023
+ '46': '#757575',
9024
+ '48': '#7a7a7a',
9025
+ '50': '#808080',
9026
+ '52': '#858585',
9027
+ '54': '#8a8a8a',
9028
+ '56': '#8f8f8f',
9029
+ '58': '#949494',
9030
+ '60': '#999999',
9031
+ '62': '#9e9e9e',
9032
+ '64': '#a3a3a3',
9033
+ '66': '#a8a8a8',
9034
+ '68': '#adadad',
9035
+ '70': '#b3b3b3',
9036
+ '72': '#b8b8b8',
9037
+ '74': '#bdbdbd',
9038
+ '76': '#c2c2c2',
9039
+ '78': '#c7c7c7',
9040
+ '80': '#cccccc',
9041
+ '82': '#d1d1d1',
9042
+ '84': '#d6d6d6',
9043
+ '86': '#dbdbdb',
9044
+ '88': '#e0e0e0',
9045
+ '90': '#e6e6e6',
9046
+ '92': '#ebebeb',
9047
+ '94': '#f0f0f0',
9048
+ '96': '#f5f5f5',
9049
+ '98': '#fafafa',
9050
+ '100': '#ffffff'
9051
+ };
9052
+ /**
9053
+ * @private
9054
+ */
9055
+ const whiteAlpha = {
9056
+ '5': 'rgba(255, 255, 255, 0.05)',
9057
+ '10': 'rgba(255, 255, 255, 0.1)',
9058
+ '20': 'rgba(255, 255, 255, 0.2)',
9059
+ '30': 'rgba(255, 255, 255, 0.3)',
9060
+ '40': 'rgba(255, 255, 255, 0.4)',
9061
+ '50': 'rgba(255, 255, 255, 0.5)',
9062
+ '60': 'rgba(255, 255, 255, 0.6)',
9063
+ '70': 'rgba(255, 255, 255, 0.7)',
9064
+ '80': 'rgba(255, 255, 255, 0.8)',
9065
+ '90': 'rgba(255, 255, 255, 0.9)'
9066
+ };
9067
+ /**
9068
+ * @private
9069
+ */
9070
+ const blackAlpha = {
9071
+ '5': 'rgba(0, 0, 0, 0.05)',
9072
+ '10': 'rgba(0, 0, 0, 0.1)',
9073
+ '20': 'rgba(0, 0, 0, 0.2)',
9074
+ '30': 'rgba(0, 0, 0, 0.3)',
9075
+ '40': 'rgba(0, 0, 0, 0.4)',
9076
+ '50': 'rgba(0, 0, 0, 0.5)',
9077
+ '60': 'rgba(0, 0, 0, 0.6)',
9078
+ '70': 'rgba(0, 0, 0, 0.7)',
9079
+ '80': 'rgba(0, 0, 0, 0.8)',
9080
+ '90': 'rgba(0, 0, 0, 0.9)'
9081
+ };
9082
+ /**
9083
+ * @private
9084
+ */
9085
+ const grey10Alpha = {
9086
+ '5': 'rgba(26, 26, 26, 0.05)',
9087
+ '10': 'rgba(26, 26, 26, 0.1)',
9088
+ '20': 'rgba(26, 26, 26, 0.2)',
9089
+ '30': 'rgba(26, 26, 26, 0.3)',
9090
+ '40': 'rgba(26, 26, 26, 0.4)',
9091
+ '50': 'rgba(26, 26, 26, 0.5)',
9092
+ '60': 'rgba(26, 26, 26, 0.6)',
9093
+ '70': 'rgba(26, 26, 26, 0.7)',
9094
+ '80': 'rgba(26, 26, 26, 0.8)',
9095
+ '90': 'rgba(26, 26, 26, 0.9)'
9096
+ };
9097
+ /**
9098
+ * @private
9099
+ */
9100
+ const grey12Alpha = {
9101
+ '5': 'rgba(31, 31, 31, 0.05)',
9102
+ '10': 'rgba(31, 31, 31, 0.1)',
9103
+ '20': 'rgba(31, 31, 31, 0.2)',
9104
+ '30': 'rgba(31, 31, 31, 0.3)',
9105
+ '40': 'rgba(31, 31, 31, 0.4)',
9106
+ '50': 'rgba(31, 31, 31, 0.5)',
9107
+ '60': 'rgba(31, 31, 31, 0.6)',
9108
+ '70': 'rgba(31, 31, 31, 0.7)',
9109
+ '80': 'rgba(31, 31, 31, 0.8)',
9110
+ '90': 'rgba(31, 31, 31, 0.9)'
9111
+ };
9112
+
9113
+ // Copyright (c) Microsoft Corporation.
9114
+ // Licensed under the MIT License.
9115
+ // These mappings are required for createV9Theme
9116
+ // For more info, check https://react.fluentui.dev/iframe.html?viewMode=docs&id=concepts-migration-from-v8-components-theme-migration--page#compatible-themes
9117
+ /**
9118
+ * Creates v9 color tokens from a v8 palette.
9119
+ */
9120
+ const mapAliasColors = (palette, inverted) => {
9121
+ return {
9122
+ colorNeutralForeground1: palette.neutralPrimary,
9123
+ colorNeutralForeground1Hover: palette.neutralPrimary,
9124
+ colorNeutralForeground1Pressed: palette.neutralPrimary,
9125
+ colorNeutralForeground1Selected: palette.neutralPrimary,
9126
+ colorNeutralForeground2: palette.neutralSecondary,
9127
+ colorNeutralForeground2Hover: palette.neutralPrimary,
9128
+ colorNeutralForeground2Pressed: palette.neutralPrimary,
9129
+ colorNeutralForeground2Selected: palette.neutralPrimary,
9130
+ colorNeutralForeground2BrandHover: palette.themePrimary,
9131
+ colorNeutralForeground2BrandPressed: palette.themeDarkAlt,
9132
+ colorNeutralForeground2BrandSelected: palette.themePrimary,
9133
+ colorNeutralForeground3: palette.neutralTertiary,
9134
+ colorNeutralForeground3Hover: palette.neutralSecondary,
9135
+ colorNeutralForeground3Pressed: palette.neutralSecondary,
9136
+ colorNeutralForeground3Selected: palette.neutralSecondary,
9137
+ colorNeutralForeground3BrandHover: palette.themePrimary,
9138
+ colorNeutralForeground3BrandPressed: palette.themeDarkAlt,
9139
+ colorNeutralForeground3BrandSelected: palette.themePrimary,
9140
+ colorNeutralForeground4: palette.neutralQuaternary,
9141
+ colorNeutralForegroundDisabled: palette.neutralTertiaryAlt,
9142
+ colorNeutralForegroundInvertedDisabled: whiteAlpha[40],
9143
+ colorBrandForegroundLink: palette.themeDarkAlt,
9144
+ colorBrandForegroundLinkHover: palette.themeDark,
9145
+ colorBrandForegroundLinkPressed: palette.themeDarker,
9146
+ colorBrandForegroundLinkSelected: palette.themeDarkAlt,
9147
+ colorNeutralForeground2Link: palette.neutralSecondary,
9148
+ colorNeutralForeground2LinkHover: palette.neutralPrimary,
9149
+ colorNeutralForeground2LinkPressed: palette.neutralPrimary,
9150
+ colorNeutralForeground2LinkSelected: palette.neutralPrimary,
9151
+ colorCompoundBrandForeground1: palette.themePrimary,
9152
+ colorCompoundBrandForeground1Hover: palette.themeDarkAlt,
9153
+ colorCompoundBrandForeground1Pressed: palette.themeDark,
9154
+ colorBrandForeground1: palette.themePrimary,
9155
+ colorBrandForeground2: palette.themeDarkAlt,
9156
+ colorBrandForeground2Hover: palette.themeDarkAlt,
9157
+ colorBrandForeground2Pressed: palette.themeDarkAlt,
9158
+ colorNeutralForeground1Static: palette.neutralPrimary,
9159
+ colorNeutralForegroundInverted: palette.white,
9160
+ colorNeutralForegroundInvertedHover: palette.white,
9161
+ colorNeutralForegroundInvertedPressed: palette.white,
9162
+ colorNeutralForegroundInvertedSelected: palette.white,
9163
+ colorNeutralForegroundOnBrand: palette.white,
9164
+ colorNeutralForegroundStaticInverted: palette.white,
9165
+ colorNeutralForegroundInvertedLink: palette.white,
9166
+ colorNeutralForegroundInvertedLinkHover: palette.white,
9167
+ colorNeutralForegroundInvertedLinkPressed: palette.white,
9168
+ colorNeutralForegroundInvertedLinkSelected: palette.white,
9169
+ colorNeutralForegroundInverted2: palette.white,
9170
+ colorBrandForegroundInverted: palette.themeSecondary,
9171
+ colorBrandForegroundInvertedHover: palette.themeTertiary,
9172
+ colorBrandForegroundInvertedPressed: palette.themeSecondary,
9173
+ colorBrandForegroundOnLight: palette.themePrimary,
9174
+ colorBrandForegroundOnLightHover: palette.themeDarkAlt,
9175
+ colorBrandForegroundOnLightPressed: palette.themeDark,
9176
+ colorBrandForegroundOnLightSelected: palette.themeDark,
9177
+ colorNeutralBackground1: palette.white,
9178
+ colorNeutralBackground1Hover: palette.neutralLighter,
9179
+ colorNeutralBackground1Pressed: palette.neutralQuaternaryAlt,
9180
+ colorNeutralBackground1Selected: palette.neutralLight,
9181
+ colorNeutralBackground2: palette.neutralLighterAlt,
9182
+ colorNeutralBackground2Hover: palette.neutralLighter,
9183
+ colorNeutralBackground2Pressed: palette.neutralQuaternaryAlt,
9184
+ colorNeutralBackground2Selected: palette.neutralLight,
9185
+ colorNeutralBackground3: palette.neutralLighter,
9186
+ colorNeutralBackground3Hover: palette.neutralLight,
9187
+ colorNeutralBackground3Pressed: palette.neutralQuaternary,
9188
+ colorNeutralBackground3Selected: palette.neutralQuaternaryAlt,
9189
+ colorNeutralBackground4: palette.neutralLighter,
9190
+ colorNeutralBackground4Hover: palette.neutralLighterAlt,
9191
+ colorNeutralBackground4Pressed: palette.neutralLighter,
9192
+ colorNeutralBackground4Selected: palette.white,
9193
+ colorNeutralBackground5: palette.neutralLight,
9194
+ colorNeutralBackground5Hover: palette.neutralLighter,
9195
+ colorNeutralBackground5Pressed: palette.neutralLighter,
9196
+ colorNeutralBackground5Selected: palette.neutralLighterAlt,
9197
+ colorNeutralBackground6: palette.neutralLight,
9198
+ colorNeutralBackgroundStatic: grey[20],
9199
+ colorNeutralBackgroundInverted: palette.neutralSecondary,
9200
+ colorNeutralBackgroundAlpha: inverted ? grey10Alpha[50] : whiteAlpha[50],
9201
+ colorNeutralBackgroundAlpha2: inverted ? grey12Alpha[70] : whiteAlpha[80],
9202
+ colorSubtleBackground: 'transparent',
9203
+ colorSubtleBackgroundHover: palette.neutralLighter,
9204
+ colorSubtleBackgroundPressed: palette.neutralQuaternaryAlt,
9205
+ colorSubtleBackgroundSelected: palette.neutralLight,
9206
+ colorSubtleBackgroundLightAlphaHover: inverted ? whiteAlpha[10] : whiteAlpha[80],
9207
+ colorSubtleBackgroundLightAlphaPressed: inverted ? whiteAlpha[5] : whiteAlpha[50],
9208
+ colorSubtleBackgroundLightAlphaSelected: 'transparent',
9209
+ colorSubtleBackgroundInverted: 'transparent',
9210
+ colorSubtleBackgroundInvertedHover: blackAlpha[10],
9211
+ colorSubtleBackgroundInvertedPressed: blackAlpha[30],
9212
+ colorSubtleBackgroundInvertedSelected: blackAlpha[20],
9213
+ colorTransparentBackground: 'transparent',
9214
+ colorTransparentBackgroundHover: 'transparent',
9215
+ colorTransparentBackgroundPressed: 'transparent',
9216
+ colorTransparentBackgroundSelected: 'transparent',
9217
+ colorNeutralBackgroundDisabled: palette.neutralLighter,
9218
+ colorNeutralBackgroundInvertedDisabled: whiteAlpha[10],
9219
+ colorNeutralStencil1: palette.neutralLight,
9220
+ colorNeutralStencil2: palette.neutralLighterAlt,
9221
+ colorNeutralStencil1Alpha: inverted ? whiteAlpha[10] : blackAlpha[10],
9222
+ colorNeutralStencil2Alpha: inverted ? whiteAlpha[5] : blackAlpha[5],
9223
+ colorBackgroundOverlay: blackAlpha[40],
9224
+ colorScrollbarOverlay: blackAlpha[50],
9225
+ colorBrandBackground: palette.themePrimary,
9226
+ colorBrandBackgroundHover: palette.themeDarkAlt,
9227
+ colorBrandBackgroundPressed: palette.themeDarker,
9228
+ colorBrandBackgroundSelected: palette.themeDark,
9229
+ colorCompoundBrandBackground: palette.themePrimary,
9230
+ colorCompoundBrandBackgroundHover: palette.themeDarkAlt,
9231
+ colorCompoundBrandBackgroundPressed: palette.themeDark,
9232
+ colorBrandBackgroundStatic: palette.themePrimary,
9233
+ colorBrandBackground2: palette.themeLighterAlt,
9234
+ colorBrandBackground2Hover: palette.themeLighterAlt,
9235
+ colorBrandBackground2Pressed: palette.themeLighterAlt,
9236
+ colorBrandBackground3Static: palette.themeDark,
9237
+ colorBrandBackground4Static: palette.themeDarker,
9238
+ colorBrandBackgroundInverted: palette.white,
9239
+ colorBrandBackgroundInvertedHover: palette.themeLighterAlt,
9240
+ colorBrandBackgroundInvertedPressed: palette.themeLight,
9241
+ colorBrandBackgroundInvertedSelected: palette.themeLighter,
9242
+ colorNeutralCardBackground: inverted ? grey[20] : grey[98],
9243
+ colorNeutralCardBackgroundHover: inverted ? grey[24] : palette.white,
9244
+ colorNeutralCardBackgroundPressed: inverted ? grey[18] : grey[96],
9245
+ colorNeutralCardBackgroundSelected: inverted ? grey[22] : grey[92],
9246
+ colorNeutralCardBackgroundDisabled: inverted ? grey[8] : grey[94],
9247
+ colorNeutralStrokeAccessible: palette.neutralSecondary,
9248
+ colorNeutralStrokeAccessibleHover: palette.neutralSecondary,
9249
+ colorNeutralStrokeAccessiblePressed: palette.neutralSecondary,
9250
+ colorNeutralStrokeAccessibleSelected: palette.themePrimary,
9251
+ colorNeutralStroke1: palette.neutralQuaternary,
9252
+ colorNeutralStroke1Hover: palette.neutralTertiaryAlt,
9253
+ colorNeutralStroke1Pressed: palette.neutralTertiaryAlt,
9254
+ colorNeutralStroke1Selected: palette.neutralTertiaryAlt,
9255
+ colorNeutralStroke2: palette.neutralQuaternaryAlt,
9256
+ colorNeutralStroke3: palette.neutralLighter,
9257
+ colorNeutralStrokeSubtle: palette.neutralQuaternaryAlt,
9258
+ colorNeutralStrokeOnBrand: palette.white,
9259
+ colorNeutralStrokeOnBrand2: palette.white,
9260
+ colorNeutralStrokeOnBrand2Hover: palette.white,
9261
+ colorNeutralStrokeOnBrand2Pressed: palette.white,
9262
+ colorNeutralStrokeOnBrand2Selected: palette.white,
9263
+ colorBrandStroke1: palette.themePrimary,
9264
+ colorBrandStroke2: palette.themeLight,
9265
+ colorBrandStroke2Hover: palette.themeLight,
9266
+ colorBrandStroke2Pressed: palette.themeLight,
9267
+ colorBrandStroke2Contrast: palette.themeLight,
9268
+ colorCompoundBrandStroke: palette.themePrimary,
9269
+ colorCompoundBrandStrokeHover: palette.themeDarkAlt,
9270
+ colorCompoundBrandStrokePressed: palette.themeDark,
9271
+ colorNeutralStrokeDisabled: palette.neutralQuaternaryAlt,
9272
+ colorNeutralStrokeInvertedDisabled: whiteAlpha[40],
9273
+ colorTransparentStroke: 'transparent',
9274
+ colorTransparentStrokeInteractive: 'transparent',
9275
+ colorTransparentStrokeDisabled: 'transparent',
9276
+ colorNeutralStrokeAlpha: inverted ? whiteAlpha[10] : blackAlpha[5],
9277
+ colorNeutralStrokeAlpha2: whiteAlpha[20],
9278
+ colorStrokeFocus1: palette.white,
9279
+ colorStrokeFocus2: palette.black,
9280
+ colorNeutralShadowAmbient: 'rgba(0,0,0,0.12)',
9281
+ colorNeutralShadowKey: 'rgba(0,0,0,0.14)',
9282
+ colorNeutralShadowAmbientLighter: 'rgba(0,0,0,0.06)',
9283
+ colorNeutralShadowKeyLighter: 'rgba(0,0,0,0.07)',
9284
+ colorNeutralShadowAmbientDarker: 'rgba(0,0,0,0.20)',
9285
+ colorNeutralShadowKeyDarker: 'rgba(0,0,0,0.24)',
9286
+ colorBrandShadowAmbient: 'rgba(0,0,0,0.30)',
9287
+ colorBrandShadowKey: 'rgba(0,0,0,0.25)'
9288
+ };
9289
+ };
9290
+ /**
9291
+ * Creates v9 shadow tokens from v8 effects.
9292
+ */
9293
+ const mapShadowTokens = (effects) => {
9294
+ return {
9295
+ shadow4: effects.elevation4,
9296
+ shadow8: effects.elevation8,
9297
+ shadow16: effects.elevation16,
9298
+ shadow64: effects.elevation64
9299
+ };
9300
+ };
9301
+ /**
9302
+ * Creates v9 border radius tokens from v8 effects
9303
+ */
9304
+ const mapBorderRadiusTokens = (effects) => {
9305
+ return {
9306
+ borderRadiusSmall: effects.roundedCorner2,
9307
+ borderRadiusMedium: effects.roundedCorner4,
9308
+ borderRadiusLarge: effects.roundedCorner6
9309
+ };
9310
+ };
9311
+ /**
9312
+ * Creates a v9 theme from a v8 theme and base v9 theme.
9313
+ * FluentUI webLightTheme is used in case if no baseThemeV9 is provided.
9314
+ *
9315
+ * @private
9316
+ */
9317
+ const createV9Theme = (themeV8, baseThemeV9) => {
9318
+ const baseTheme = baseThemeV9 !== null && baseThemeV9 !== void 0 ? baseThemeV9 : reactComponents.webLightTheme;
9319
+ return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, baseTheme), mapAliasColors(themeV8.palette, themeV8.isInverted)), mapShadowTokens(themeV8.effects)), mapBorderRadiusTokens(themeV8.effects)), { colorBrandBackground2: themeV8.palette.themeLight, colorBrandBackground2Hover: themeV8.palette.themeLight, colorBrandBackground2Pressed: themeV8.palette.themeLight, colorStatusWarningBackground3: '#D83B01', errorText: themeV8.semanticColors.errorText, colorNeutralStroke1Selected: themeV8.palette.neutralQuaternary, colorNeutralForeground2: themeV8.palette.neutralSecondary, colorBrandForegroundLink: themeV8.palette.themePrimary, colorBrandForegroundLinkHover: themeV8.palette.themeDarker, colorNeutralBackground1Selected: themeV8.palette.neutralQuaternaryAlt,
9320
+ // Fix for an issue with black borders for iOS that are added with 'after' selector
9321
+ colorStrokeFocus2: 'transparent' });
9322
+ };
9323
+
9324
+ // Copyright (c) Microsoft Corporation.
9325
+ // Licensed under the MIT License.
9326
+ /**
9327
+ * @private
9328
+ */
9329
+ const useFluentV9Wrapper = reactComponents.makeStyles({
9330
+ body: Object.assign(Object.assign(Object.assign(Object.assign({ height: '100%' }, reactComponents.shorthands.margin(0)), reactComponents.shorthands.overflow('hidden')), reactComponents.shorthands.padding(0)), { width: '100%' })
9331
+ });
9332
+ /**
9333
+ * @private
9334
+ */
9335
+ const FluentV9ThemeProvider = (props) => {
9336
+ const { v8Theme, children } = props;
9337
+ const v9Theme = createV9Theme(v8Theme);
9338
+ const dir = v8Theme.rtl ? 'rtl' : 'ltr';
9339
+ return (
9340
+ // TextDirectionProvider is needed to fix issue with direction value update in FluentProvider
9341
+ React.createElement(react$1.TextDirectionProvider, { dir: dir },
9342
+ React.createElement(FluentProviderWithStylesOverrides, { theme: v9Theme, dir: dir }, children)));
9343
+ };
9344
+ const FluentProviderWithStylesOverrides = (props) => {
9345
+ const classes = useFluentV9Wrapper();
9346
+ return React.createElement(reactComponents.FluentProvider, Object.assign({}, props, { className: classes.body, applyStylesToPortals: false }));
9347
+ };
9348
+
8961
9349
  // Copyright (c) Microsoft Corporation.
8962
9350
  // Licensed under the MIT License.
8963
9351
  /**
@@ -8972,7 +9360,7 @@ const SendBox$1 = (props) => {
8972
9360
  const { disabled, systemMessage, supportNewline, onSendMessage, onTyping, onRenderIcon, onRenderSystemMessage, styles, autoFocus,
8973
9361
  /* @conditional-compile-remove(mention) */
8974
9362
  mentionLookupOptions,
8975
- /* @conditional-compile-remove(file-sharing) */
9363
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
8976
9364
  activeFileUploads } = props;
8977
9365
  const theme = useTheme();
8978
9366
  const localeStrings = useLocale$1().strings.sendBox;
@@ -8981,7 +9369,7 @@ const SendBox$1 = (props) => {
8981
9369
  const [textValue, setTextValue] = React.useState('');
8982
9370
  const [textValueOverflow, setTextValueOverflow] = React.useState(false);
8983
9371
  const sendTextFieldRef = React.useRef(null);
8984
- /* @conditional-compile-remove(file-sharing) */
9372
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
8985
9373
  const [attachmentUploadsPendingError, setAttachmentUploadsPendingError] = React.useState(undefined);
8986
9374
  const sendMessageOnClick = () => {
8987
9375
  var _a;
@@ -8990,9 +9378,9 @@ const SendBox$1 = (props) => {
8990
9378
  return;
8991
9379
  }
8992
9380
  // Don't send message until all files have been uploaded successfully
8993
- /* @conditional-compile-remove(file-sharing) */
9381
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
8994
9382
  setAttachmentUploadsPendingError(undefined);
8995
- /* @conditional-compile-remove(file-sharing) */
9383
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
8996
9384
  if (hasIncompleteFileUploads(activeFileUploads)) {
8997
9385
  setAttachmentUploadsPendingError({ message: strings.attachmentUploadsPendingError, timestamp: Date.now() });
8998
9386
  return;
@@ -9001,7 +9389,7 @@ const SendBox$1 = (props) => {
9001
9389
  // we don't want to send empty messages including spaces, newlines, tabs
9002
9390
  // Message can be empty if there is a valid attachment upload
9003
9391
  if (sanitizeText(message).length > 0 ||
9004
- /* @conditional-compile-remove(file-sharing) */ hasCompletedFileUploads(activeFileUploads)) {
9392
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */ hasCompletedFileUploads(activeFileUploads)) {
9005
9393
  onSendMessage && onSendMessage(message);
9006
9394
  setTextValue('');
9007
9395
  }
@@ -9021,25 +9409,25 @@ const SendBox$1 = (props) => {
9021
9409
  const mergedSendIconStyle = React.useMemo(() => sendIconStyle({
9022
9410
  theme,
9023
9411
  hasText: !!textValue,
9024
- /* @conditional-compile-remove(file-sharing) */ hasFile: hasCompletedFileUploads(activeFileUploads),
9412
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */ hasFile: hasCompletedFileUploads(activeFileUploads),
9025
9413
  hasErrorMessage: !!errorMessage,
9026
9414
  customSendIconStyle: styles === null || styles === void 0 ? void 0 : styles.sendMessageIcon
9027
9415
  }), [
9028
9416
  theme,
9029
9417
  textValue,
9030
- /* @conditional-compile-remove(file-sharing) */ activeFileUploads,
9418
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */ activeFileUploads,
9031
9419
  errorMessage,
9032
9420
  styles === null || styles === void 0 ? void 0 : styles.sendMessageIcon
9033
9421
  ]);
9034
9422
  const onRenderSendIcon = React.useCallback((isHover) => onRenderIcon ? (onRenderIcon(isHover)) : (React.createElement(react.Icon, { iconName: isHover && textValue ? 'SendBoxSendHovered' : 'SendBoxSend', className: mergedSendIconStyle })), [mergedSendIconStyle, onRenderIcon, textValue]);
9035
9423
  // Ensure that errors are cleared when there are no files in sendBox
9036
- /* @conditional-compile-remove(file-sharing) */
9424
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
9037
9425
  React.useEffect(() => {
9038
9426
  if (!(activeFileUploads === null || activeFileUploads === void 0 ? void 0 : activeFileUploads.filter((upload) => !upload.error).length)) {
9039
9427
  setAttachmentUploadsPendingError(undefined);
9040
9428
  }
9041
9429
  }, [activeFileUploads]);
9042
- /* @conditional-compile-remove(file-sharing) */
9430
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
9043
9431
  const sendBoxErrorsProps = React.useMemo(() => {
9044
9432
  var _a;
9045
9433
  return {
@@ -9047,22 +9435,30 @@ const SendBox$1 = (props) => {
9047
9435
  attachmentUploadError: (_a = activeFileUploads === null || activeFileUploads === void 0 ? void 0 : activeFileUploads.filter((attachmentUpload) => attachmentUpload.error).pop()) === null || _a === void 0 ? void 0 : _a.error
9048
9436
  };
9049
9437
  }, [activeFileUploads, attachmentUploadsPendingError]);
9050
- /* @conditional-compile-remove(file-sharing) */
9438
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
9051
9439
  const onRenderFileUploads = React.useCallback(() => {
9052
9440
  var _a, _b, _c, _d, _e, _f;
9053
9441
  if (!(activeFileUploads === null || activeFileUploads === void 0 ? void 0 : activeFileUploads.filter((upload) => !upload.error).length)) {
9054
9442
  return null;
9055
9443
  }
9056
9444
  return props.onRenderFileUploads ? (props.onRenderFileUploads()) : (React.createElement(react.Stack, { className: attachmentUploadCardsStyles },
9057
- React.createElement(_AttachmentUploadCards, { activeFileUploads: activeFileUploads, onCancelFileUpload: props.onCancelFileUpload, strings: {
9058
- removeAttachment: (_b = (_a = props.strings) === null || _a === void 0 ? void 0 : _a.removeAttachment) !== null && _b !== void 0 ? _b : localeStrings.removeAttachment,
9059
- uploading: (_d = (_c = props.strings) === null || _c === void 0 ? void 0 : _c.uploading) !== null && _d !== void 0 ? _d : localeStrings.uploading,
9060
- uploadCompleted: (_f = (_e = props.strings) === null || _e === void 0 ? void 0 : _e.uploadCompleted) !== null && _f !== void 0 ? _f : localeStrings.uploadCompleted
9061
- } })));
9062
- }, [activeFileUploads, props, localeStrings]);
9445
+ React.createElement(FluentV9ThemeProvider, { v8Theme: theme },
9446
+ React.createElement(_AttachmentUploadCards, { activeFileUploads: activeFileUploads, onCancelFileUpload: props.onCancelFileUpload, strings: {
9447
+ removeAttachment: (_b = (_a = props.strings) === null || _a === void 0 ? void 0 : _a.removeAttachment) !== null && _b !== void 0 ? _b : localeStrings.removeAttachment,
9448
+ uploading: (_d = (_c = props.strings) === null || _c === void 0 ? void 0 : _c.uploading) !== null && _d !== void 0 ? _d : localeStrings.uploading,
9449
+ uploadCompleted: (_f = (_e = props.strings) === null || _e === void 0 ? void 0 : _e.uploadCompleted) !== null && _f !== void 0 ? _f : localeStrings.uploadCompleted
9450
+ } }))));
9451
+ }, [
9452
+ activeFileUploads,
9453
+ props,
9454
+ theme,
9455
+ localeStrings.removeAttachment,
9456
+ localeStrings.uploading,
9457
+ localeStrings.uploadCompleted
9458
+ ]);
9063
9459
  return (React.createElement(react.Stack, { className: react.mergeStyles(sendBoxWrapperStyles, { overflow: 'visible' } // This is needed for the mention popup to be visible
9064
- ) }, /* @conditional-compile-remove(file-sharing) */
9065
- React.createElement(SendBoxErrors, Object.assign({}, sendBoxErrorsProps)),
9460
+ ) },
9461
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */ React.createElement(SendBoxErrors, Object.assign({}, sendBoxErrorsProps)),
9066
9462
  React.createElement(react.Stack, { className: borderAndBoxShadowStyle({
9067
9463
  theme,
9068
9464
  hasErrorMessage: !!errorMessage,
@@ -9084,7 +9480,7 @@ const SendBox$1 = (props) => {
9084
9480
  }
9085
9481
  e.stopPropagation();
9086
9482
  }, id: 'sendIconWrapper', className: mergedSendButtonStyle, ariaLabel: localeStrings.sendButtonAriaLabel, tooltipContent: localeStrings.sendButtonAriaLabel })),
9087
- /* @conditional-compile-remove(file-sharing) */
9483
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
9088
9484
  onRenderFileUploads())));
9089
9485
  };
9090
9486
 
@@ -9344,7 +9740,26 @@ const richTextEditorWrapperStyle = (theme, addTopOffset) => {
9344
9740
  paddingInlineEnd: `0.75rem`,
9345
9741
  lineHeight: '1.25rem',
9346
9742
  maxWidth: '100%',
9347
- color: theme.palette.neutralPrimary
9743
+ color: theme.palette.neutralPrimary,
9744
+ '& table': {
9745
+ background: 'transparent',
9746
+ borderCollapse: 'collapse',
9747
+ width: '100%',
9748
+ borderSpacing: '0',
9749
+ // don't shrink/expand cells during the input to the table
9750
+ tableLayout: 'fixed',
9751
+ '& tr': {
9752
+ background: 'transparent',
9753
+ border: `1px solid ${theme.palette.neutralLight}`,
9754
+ '& td': {
9755
+ background: 'transparent',
9756
+ border: `1px solid ${theme.palette.neutralLight}`,
9757
+ wordBreak: 'normal',
9758
+ padding: '0.125rem 0.25rem',
9759
+ verticalAlign: 'top'
9760
+ }
9761
+ }
9762
+ }
9348
9763
  });
9349
9764
  };
9350
9765
  /**
@@ -9395,6 +9810,15 @@ const ribbonOverflowButtonRootStyles = (theme) => {
9395
9810
  color: theme.palette.neutralPrimary
9396
9811
  }
9397
9812
  }
9813
+ },
9814
+ '.ribbon-table-button-regular-icon': {
9815
+ display: 'inline-block',
9816
+ margin: '-0.25rem 0.25rem 0 0.25rem',
9817
+ width: '1.25rem',
9818
+ height: '1.25rem'
9819
+ },
9820
+ '.ribbon-table-button-filled-icon': {
9821
+ display: 'none'
9398
9822
  }
9399
9823
  }
9400
9824
  };
@@ -9430,13 +9854,67 @@ const ribbonButtonStyle = (theme) => {
9430
9854
  rootExpandedHovered: ribbonButtonRootStyles(theme)
9431
9855
  };
9432
9856
  };
9857
+ const rootRibbonTableButtonStyle = (theme) => {
9858
+ // merge IStyles props
9859
+ return Object.assign({ minWidth: 'auto' }, ribbonTableButtonRootStyles(theme, false));
9860
+ };
9861
+ /**
9862
+ * @private
9863
+ */
9864
+ const ribbonTableButtonStyle = (theme) => {
9865
+ return {
9866
+ icon: { height: 'auto' },
9867
+ menuIcon: { height: 'auto' },
9868
+ root: rootRibbonTableButtonStyle(theme),
9869
+ rootChecked: ribbonTableButtonRootStyles(theme, true),
9870
+ rootHovered: ribbonTableButtonRootStyles(theme, true),
9871
+ rootCheckedHovered: ribbonTableButtonRootStyles(theme, true),
9872
+ rootCheckedPressed: ribbonTableButtonRootStyles(theme, true),
9873
+ rootPressed: ribbonTableButtonRootStyles(theme, true),
9874
+ rootExpanded: ribbonTableButtonRootStyles(theme, true),
9875
+ rootExpandedHovered: ribbonTableButtonRootStyles(theme, true)
9876
+ };
9877
+ };
9878
+ const ribbonTableButtonRootStyles = (theme, isSelected) => {
9879
+ return {
9880
+ backgroundColor: 'transparent',
9881
+ selectors: {
9882
+ '.ribbon-table-button-regular-icon': {
9883
+ width: '1.25rem',
9884
+ height: '1.25rem',
9885
+ marginTop: '-0.25rem',
9886
+ color: theme.palette.neutralPrimary,
9887
+ display: isSelected ? 'none' : 'inline-block'
9888
+ },
9889
+ '.ribbon-table-button-filled-icon': {
9890
+ width: '1.25rem',
9891
+ height: '1.25rem',
9892
+ marginTop: '-0.25rem',
9893
+ color: theme.palette.themePrimary,
9894
+ display: isSelected ? 'inline-block' : 'none'
9895
+ }
9896
+ }
9897
+ };
9898
+ };
9433
9899
  /**
9434
9900
  * @private
9435
9901
  */
9436
9902
  const ribbonDividerStyle = (theme) => {
9437
9903
  return {
9438
9904
  icon: { color: theme.palette.neutralQuaternaryAlt, margin: '0 -0.5rem', height: 'auto' },
9439
- root: { margin: '0', padding: '0', minWidth: 'auto' }
9905
+ root: { margin: '0', padding: '0', minWidth: 'auto' },
9906
+ rootHovered: {
9907
+ backgroundColor: 'transparent',
9908
+ selectors: {
9909
+ // Icon's color doesn't work here because of the specificity
9910
+ '.ms-Button-icon': {
9911
+ color: theme.palette.neutralQuaternaryAlt
9912
+ },
9913
+ '.ms-Button-menuIcon': {
9914
+ color: theme.palette.neutralQuaternaryAlt
9915
+ }
9916
+ }
9917
+ }
9440
9918
  };
9441
9919
  };
9442
9920
  /**
@@ -9463,18 +9941,241 @@ const sendBoxRichTextEditorStyle = (isExpanded) => {
9463
9941
  maxHeight: '5rem'
9464
9942
  };
9465
9943
  };
9944
+ /**
9945
+ * @private
9946
+ */
9947
+ const insertTableMenuCellButtonStyles = (theme) => {
9948
+ return {
9949
+ width: '1rem',
9950
+ height: '1rem',
9951
+ border: `solid 0.0625rem ${theme.palette.neutralTertiaryAlt}`,
9952
+ display: 'inline-block',
9953
+ cursor: 'pointer',
9954
+ background: 'transparent'
9955
+ };
9956
+ };
9957
+ /**
9958
+ * @private
9959
+ */
9960
+ const insertTableMenuCellButtonSelectedStyles = (theme) => {
9961
+ return {
9962
+ background: theme.palette.themePrimary
9963
+ };
9964
+ };
9965
+ /**
9966
+ * @private
9967
+ */
9968
+ const insertTableMenuTablePane = react.mergeStyles({
9969
+ padding: '0.5rem 0.625rem 0.75rem 0.625rem',
9970
+ boxSizing: 'content-box',
9971
+ minWidth: 'auto'
9972
+ });
9973
+ /**
9974
+ * @private
9975
+ */
9976
+ const insertTableMenuFocusZone = (theme) => {
9977
+ return react.mergeStyles({
9978
+ lineHeight: '12px',
9979
+ width: '5rem',
9980
+ border: `solid 0.0625rem ${theme.palette.neutralTertiaryAlt}`
9981
+ });
9982
+ };
9983
+ /**
9984
+ * @private
9985
+ */
9986
+ const insertTableMenuTitleStyles = react.mergeStyles({
9987
+ width: '100%',
9988
+ height: '1rem',
9989
+ fontSize: '0.75rem',
9990
+ marginBottom: '0.5rem'
9991
+ });
9992
+
9993
+ // Copyright (c) Microsoft Corporation.
9994
+ // Licensed under the MIT License.
9995
+ // This file uses RoosterJS React package implementation with updates to change table's size and remove styles
9996
+ /**
9997
+ * Insert table into editor at current selection
9998
+ * @param editor The editor instance
9999
+ * @param columns Number of columns in table
10000
+ * @param rows Number of rows in table
10001
+ */
10002
+ const insertTable = (editor, columns, rows) => {
10003
+ const document = editor.getDocument();
10004
+ const table = document.createElement('table');
10005
+ for (let i = 0; i < rows; i++) {
10006
+ const tr = document.createElement('tr');
10007
+ table.appendChild(tr);
10008
+ for (let j = 0; j < columns; j++) {
10009
+ const td = document.createElement('td');
10010
+ tr.appendChild(td);
10011
+ td.appendChild(document.createElement('br'));
10012
+ }
10013
+ }
10014
+ editor.focus();
10015
+ editor.addUndoSnapshot(() => {
10016
+ const vTable = new roosterjsEditorDom.VTable(table);
10017
+ vTable.writeBack();
10018
+ editor.insertNode(table);
10019
+ editor.runAsync((editor) => editor.select(new roosterjsEditorDom.Position(table, roosterjsEditorTypesCompatible.CompatiblePositionType.Begin).normalize()));
10020
+ }, roosterjsEditorTypesCompatible.CompatibleChangeSource.Format, undefined /* canUndoByBackspace */, {
10021
+ formatApiName: 'insertTable'
10022
+ });
10023
+ };
9466
10024
 
9467
10025
  // Copyright (c) Microsoft Corporation.
9468
10026
  // Licensed under the MIT License.
9469
- const dividerRibbonButton = (theme) => {
10027
+ /**
10028
+ * @private
10029
+ *
10030
+ * String to be replaces by actual values of row and column.
10031
+ */
10032
+ const ColumnRowReplaceString = '{column} x {row}';
10033
+ /**
10034
+ * @private
10035
+ *
10036
+ * Function to create key pair for the selected table size.
10037
+ */
10038
+ function createKey(row, column) {
10039
+ return `${row},${column}`;
10040
+ }
10041
+ /**
10042
+ * @private
10043
+ *
10044
+ * Function to parse key to the selected table size valules.
10045
+ */
10046
+ function parseKey(key) {
10047
+ const [row, column] = key.split(',');
10048
+ return {
10049
+ row: parseInt(row),
10050
+ column: parseInt(column)
10051
+ };
10052
+ }
10053
+
10054
+ // Copyright (c) Microsoft Corporation.
10055
+ // Licensed under the MIT License.
10056
+ // This file uses RoosterJS React package implementation with updates to UI components and styles.
10057
+ const RowColumnInitialValue = 0;
10058
+ /**
10059
+ * @private
10060
+ * Component for the insert table pane
10061
+ */
10062
+ const RichTextInsertTablePane = (props) => {
10063
+ const { item, onClick, theme, maxColumnsNumber, maxRowsNumber } = props;
10064
+ const [column, setColumn] = React.useState(RowColumnInitialValue);
10065
+ const [row, setRow] = React.useState(RowColumnInitialValue);
10066
+ const updateSize = React.useCallback((target) => {
10067
+ if (target !== undefined && target.dataset.column !== undefined && target.dataset.row !== undefined) {
10068
+ const column = parseInt(target.dataset.column);
10069
+ const row = parseInt(target.dataset.row);
10070
+ if (column >= RowColumnInitialValue &&
10071
+ column < maxColumnsNumber &&
10072
+ row >= RowColumnInitialValue &&
10073
+ row < maxRowsNumber) {
10074
+ setColumn(column);
10075
+ setRow(row);
10076
+ }
10077
+ }
10078
+ }, [maxColumnsNumber, maxRowsNumber]);
10079
+ const onMouseEnter = React.useCallback((e) => {
10080
+ updateSize(e.target);
10081
+ }, [updateSize]);
10082
+ const onClickButton = React.useCallback((e) => {
10083
+ onClick(e, Object.assign(Object.assign({}, item), { key: createKey(formatRowColumnText(row), formatRowColumnText(column)) }));
10084
+ }, [row, column, onClick, item]);
10085
+ const items = React.useMemo(() => {
10086
+ var _a;
10087
+ const items = [];
10088
+ for (let i = 0; i < maxRowsNumber; i++) {
10089
+ for (let j = 0; j < maxColumnsNumber; j++) {
10090
+ const key = `cell_${i}_${j}`;
10091
+ const isSelected = j <= column && i <= row;
10092
+ items.push(React.createElement("button", { className: react.mergeStyles(insertTableMenuCellButtonStyles(theme), isSelected ? insertTableMenuCellButtonSelectedStyles(theme) : undefined), onClick: onClickButton, key: key, id: key, "data-column": j, "data-row": i, "data-is-focusable": true, onMouseEnter: onMouseEnter, "aria-label": formatText((_a = item.text) !== null && _a !== void 0 ? _a : '', i, j) }));
10093
+ }
10094
+ }
10095
+ return items;
10096
+ }, [maxRowsNumber, maxColumnsNumber, column, row, theme, onClickButton, onMouseEnter, item.text]);
10097
+ const text = React.useMemo(() => {
10098
+ var _a;
10099
+ return formatText((_a = item.text) !== null && _a !== void 0 ? _a : '', formatRowColumnText(row), formatRowColumnText(column));
10100
+ }, [column, item.text, row]);
10101
+ return (React.createElement("div", null,
10102
+ React.createElement("div", { className: insertTableMenuTitleStyles }, text),
10103
+ React.createElement(react.FocusZone, { defaultTabbableElement: `cell_${RowColumnInitialValue}_${RowColumnInitialValue}`, direction: react.FocusZoneDirection.bidirectional, onActiveElementChanged: updateSize, className: insertTableMenuFocusZone(theme) }, items)));
10104
+ };
10105
+ const formatText = (text, row, column) => {
10106
+ return text.replace(`${ColumnRowReplaceString}`, `${column.toString()} x ${row.toString()}`);
10107
+ };
10108
+ const formatRowColumnText = (value) => {
10109
+ return value + 1;
10110
+ };
10111
+
10112
+ // Copyright (c) Microsoft Corporation.
10113
+ // Licensed under the MIT License.
10114
+ // This file uses RoosterJS React package implementation with updates to UI components and styles.
10115
+ /**
10116
+ * "Insert table" button for the RoosterJS ribbon
10117
+ */
10118
+ const insertTableButton = (theme, maxRowsNumber, maxColumnsNumber) => {
9470
10119
  return {
9471
- key: 'Divider',
10120
+ key: 'buttonNameInsertTable',
10121
+ unlocalizedText: 'Insert table',
10122
+ // Icon will be set in onRenderIcon callback
10123
+ iconName: '',
10124
+ onClick: (editor, key) => {
10125
+ const { row, column } = parseKey(key);
10126
+ insertTable(editor, column, row);
10127
+ },
10128
+ dropDownMenu: {
10129
+ items: {
10130
+ // the key of the item is also used as a key for localization
10131
+ insertTablePane: `Insert ${ColumnRowReplaceString} table`
10132
+ },
10133
+ itemRender: (item, onClick) => {
10134
+ return (React.createElement(RichTextInsertTablePane, { item: item, onClick: onClick, theme: theme, maxColumnsNumber: maxColumnsNumber, maxRowsNumber: maxRowsNumber }));
10135
+ },
10136
+ commandBarSubMenuProperties: {
10137
+ className: insertTableMenuTablePane
10138
+ }
10139
+ },
10140
+ commandBarProperties: {
10141
+ // hide the chevron icon
10142
+ menuIconProps: {
10143
+ hidden: true
10144
+ },
10145
+ onRenderIcon: (item) => {
10146
+ console.log('onRenderIcon', item);
10147
+ return React.createElement(TableIcon, null);
10148
+ },
10149
+ buttonStyles: ribbonTableButtonStyle(theme),
10150
+ canCheck: false
10151
+ }
10152
+ };
10153
+ };
10154
+ const TableIcon = () => {
10155
+ return (
10156
+ // update the visibility of the Table Icon with css classes that are triggered by command bar's state
10157
+ React.createElement(react.Stack, null,
10158
+ React.createElement(react.Icon, { iconName: "RichTextInsertTableFilledIcon", className: 'ribbon-table-button-filled-icon' }),
10159
+ React.createElement(react.Icon, { iconName: "RichTextInsertTableRegularIcon", className: 'ribbon-table-button-regular-icon' })));
10160
+ };
10161
+
10162
+ // Copyright (c) Microsoft Corporation.
10163
+ // Licensed under the MIT License.
10164
+ const MaxRowsNumber = 5;
10165
+ const MaxColumnsNumber = 5;
10166
+ const dividerRibbonButton = (theme, key) => {
10167
+ return {
10168
+ key: key,
9472
10169
  iconName: 'RichTextDividerIcon',
9473
10170
  unlocalizedText: '',
9474
10171
  onClick: () => { },
9475
10172
  isDisabled: () => true,
9476
10173
  commandBarProperties: {
9477
- buttonStyles: ribbonDividerStyle(theme)
10174
+ // show the item correctly for the overflow menu
10175
+ itemType: react.ContextualMenuItemType.Divider,
10176
+ buttonStyles: ribbonDividerStyle(theme),
10177
+ // this is still needed to remove checkmark icon space even though it is a divider
10178
+ canCheck: false
9478
10179
  }
9479
10180
  };
9480
10181
  };
@@ -9521,11 +10222,13 @@ const ribbonButtons = (theme) => {
9521
10222
  boldButton(theme),
9522
10223
  italicButton(theme),
9523
10224
  underlineButton(theme),
9524
- dividerRibbonButton(theme),
10225
+ dividerRibbonButton(theme, 'RichTextRibbonTextFormatDivider'),
9525
10226
  bulletListButton(theme),
9526
10227
  numberListButton(theme),
9527
10228
  indentIncreaseButton(theme),
9528
- indentDecreaseButton(theme)
10229
+ indentDecreaseButton(theme),
10230
+ dividerRibbonButton(theme, 'RichTextRibbonTableDivider'),
10231
+ insertTableButton(theme, MaxRowsNumber, MaxColumnsNumber)
9529
10232
  ].forEach((item) => {
9530
10233
  if (item !== undefined) {
9531
10234
  buttons.push(item);
@@ -9533,8 +10236,13 @@ const ribbonButtons = (theme) => {
9533
10236
  });
9534
10237
  return buttons;
9535
10238
  };
10239
+
10240
+ // Copyright (c) Microsoft Corporation.
10241
+ // Licensed under the MIT License.
9536
10242
  /**
9537
10243
  * @private
10244
+ *
10245
+ * Strings for the ribbon buttons where key should match `key` prop if any or the name of the item.
9538
10246
  */
9539
10247
  const ribbonButtonsStrings = (strings) => {
9540
10248
  return {
@@ -9544,10 +10252,83 @@ const ribbonButtonsStrings = (strings) => {
9544
10252
  buttonNameBulletedList: strings.bulletListTooltip,
9545
10253
  buttonNameNumberedList: strings.numberListTooltip,
9546
10254
  buttonNameIncreaseIndent: strings.increaseIndentTooltip,
9547
- buttonNameDecreaseIndent: strings.decreaseIndentTooltip
10255
+ buttonNameDecreaseIndent: strings.decreaseIndentTooltip,
10256
+ buttonNameInsertTable: strings.insertTableTooltip,
10257
+ insertTablePane: strings.insertTableMenuTitle
10258
+ };
10259
+ };
10260
+ /**
10261
+ * @private
10262
+ *
10263
+ * Strings for the table context menu where key should match `key` prop if any or the name of the item.
10264
+ */
10265
+ const tableContextMenuStrings = (strings) => {
10266
+ return {
10267
+ menuNameTableInsert: strings.insertRowOrColumnMenu,
10268
+ menuNameTableInsertAbove: strings.insertRowAboveMenu,
10269
+ menuNameTableInsertBelow: strings.insertRowBelowMenu,
10270
+ menuNameTableInsertLeft: strings.insertColumnLeftMenu,
10271
+ menuNameTableInsertRight: strings.insertColumnRightMenu,
10272
+ menuNameTableDelete: strings.deleteRowOrColumnMenu,
10273
+ menuNameTableDeleteColumn: strings.deleteColumnMenu,
10274
+ menuNameTableDeleteRow: strings.deleteRowMenu,
10275
+ menuNameTableDeleteTable: strings.deleteTableMenu
9548
10276
  };
9549
10277
  };
9550
10278
 
10279
+ // Copyright (c) Microsoft Corporation.
10280
+ // Licensed under the MIT License.
10281
+ const onClick = (key, editor) => {
10282
+ editor.focus();
10283
+ const operation = TableEditOperationMap[key];
10284
+ if (typeof operation === 'number') {
10285
+ roosterjsEditorApi.editTable(editor, operation);
10286
+ }
10287
+ };
10288
+ const TableEditOperationMap = {
10289
+ menuNameTableInsertAbove: roosterjsEditorTypesCompatible.CompatibleTableOperation.InsertAbove,
10290
+ menuNameTableInsertBelow: roosterjsEditorTypesCompatible.CompatibleTableOperation.InsertBelow,
10291
+ menuNameTableInsertLeft: roosterjsEditorTypesCompatible.CompatibleTableOperation.InsertLeft,
10292
+ menuNameTableInsertRight: roosterjsEditorTypesCompatible.CompatibleTableOperation.InsertRight,
10293
+ menuNameTableDeleteTable: roosterjsEditorTypesCompatible.CompatibleTableOperation.DeleteTable,
10294
+ menuNameTableDeleteColumn: roosterjsEditorTypesCompatible.CompatibleTableOperation.DeleteColumn,
10295
+ menuNameTableDeleteRow: roosterjsEditorTypesCompatible.CompatibleTableOperation.DeleteRow
10296
+ };
10297
+ const tableEditInsertMenuItem = {
10298
+ key: 'menuNameTableInsert',
10299
+ unlocalizedText: 'Insert123',
10300
+ subItems: {
10301
+ menuNameTableInsertAbove: 'Insert above121312 ',
10302
+ menuNameTableInsertBelow: 'Insert below',
10303
+ menuNameTableInsertLeft: 'Insert left123 ',
10304
+ menuNameTableInsertRight: 'Insert right'
10305
+ },
10306
+ onClick
10307
+ };
10308
+ const tableEditDeleteMenuItem = {
10309
+ key: 'menuNameTableDelete',
10310
+ unlocalizedText: 'Delete',
10311
+ subItems: {
10312
+ menuNameTableDeleteColumn: 'Delete column',
10313
+ menuNameTableDeleteRow: 'Delete row',
10314
+ menuNameTableDeleteTable: 'Delete table'
10315
+ },
10316
+ onClick
10317
+ };
10318
+ const tableActions = [tableEditInsertMenuItem, tableEditDeleteMenuItem];
10319
+ /**
10320
+ * Create a new instance of ContextMenuProvider to support table editing functionalities in context menu
10321
+ * @returns A new ContextMenuProvider
10322
+ */
10323
+ const createTableEditMenuProvider = (strings) => {
10324
+ return roosterjsReact.createContextMenuProvider('tableEdit', tableActions, tableContextMenuStrings(strings !== null && strings !== void 0 ? strings : {}), (editor, node) => !!getEditingTable(editor, node));
10325
+ };
10326
+ const getEditingTable = (editor, node) => {
10327
+ const td = editor.getElementAtCursor('TD,TH', node);
10328
+ const table = td && editor.getElementAtCursor('table', td);
10329
+ return (table === null || table === void 0 ? void 0 : table.isContentEditable) ? { table, td } : null;
10330
+ };
10331
+
9551
10332
  // Copyright (c) Microsoft Corporation.
9552
10333
  // Licensed under the MIT License.
9553
10334
  /**
@@ -9578,13 +10359,12 @@ const RichTextEditor = React.forwardRef((props, ref) => {
9578
10359
  }, []);
9579
10360
  const editorCreator = React.useCallback((div, options) => {
9580
10361
  editor.current = new roosterjsEditorCore.Editor(div, options);
9581
- // Remove default values for background color and color
9582
- // setBackgroundColor and setTextColor can't be used here as they cause the editor to be focused
9583
- // color will be set in richTextEditorWrapperStyle instead of inline styles
9584
- div.style.backgroundColor = '';
9585
- div.style.color = '';
9586
10362
  return editor.current;
9587
- }, []);
10363
+ },
10364
+ // trigger force editor reset when strings are changed to update context menu strings
10365
+ // see RosterJS documentation for 'editorCreator' for more details
10366
+ // eslint-disable-next-line react-hooks/exhaustive-deps
10367
+ [strings]);
9588
10368
  const placeholderPlugin = React.useMemo(() => {
9589
10369
  return new roosterjsEditorPlugins.Watermark('');
9590
10370
  }, []);
@@ -9594,12 +10374,15 @@ const RichTextEditor = React.forwardRef((props, ref) => {
9594
10374
  }
9595
10375
  }, [placeholderPlugin, placeholderText]);
9596
10376
  const plugins = React.useMemo(() => {
10377
+ // contextPlugin and tableEditMenuProvider allow to show insert/delete menu for the table
10378
+ const contextPlugin = roosterjsReact.createContextMenuPlugin();
10379
+ const tableEditMenuProvider = createTableEditMenuProvider(strings);
9597
10380
  const contentEdit = new roosterjsEditorPlugins.ContentEdit();
9598
10381
  const updateContentPlugin = roosterjsReact.createUpdateContentPlugin(roosterjsReact.UpdateMode.OnContentChangedEvent | roosterjsReact.UpdateMode.OnUserInput, (content) => {
9599
10382
  onChange && onChange(content);
9600
10383
  });
9601
- return [contentEdit, placeholderPlugin, updateContentPlugin, ribbonPlugin];
9602
- }, [onChange, placeholderPlugin, ribbonPlugin]);
10384
+ return [contentEdit, placeholderPlugin, updateContentPlugin, ribbonPlugin, contextPlugin, tableEditMenuProvider];
10385
+ }, [onChange, placeholderPlugin, ribbonPlugin, strings]);
9603
10386
  const ribbon = React.useMemo(() => {
9604
10387
  const buttons = ribbonButtons(theme);
9605
10388
  return (React.createElement(roosterjsReact.Ribbon, { styles: ribbonStyle, buttons: buttons, plugin: ribbonPlugin, overflowButtonProps: {
@@ -9611,10 +10394,18 @@ const RichTextEditor = React.forwardRef((props, ref) => {
9611
10394
  }
9612
10395
  }, strings: ribbonButtonsStrings(strings), "data-testid": 'rich-text-editor-ribbon' }));
9613
10396
  }, [strings, ribbonPlugin, theme]);
10397
+ const defaultFormat = React.useMemo(() => {
10398
+ // without setting any styles, text input is not handled properly for tables (when insert or paste one in the editor)
10399
+ // because of https://github.com/microsoft/roosterjs/blob/14dbb947e3ae94580109cbd05e48ceb05327c4dc/packages/roosterjs-editor-core/lib/corePlugins/TypeInContainerPlugin.ts#L75
10400
+ // this issue is fixed for content model package
10401
+ return {
10402
+ backgroundColor: 'transparent'
10403
+ };
10404
+ }, []);
9614
10405
  return (React.createElement("div", { "data-testid": 'rich-text-editor-wrapper' },
9615
10406
  showRichTextEditorFormatting && ribbon,
9616
10407
  React.createElement("div", { className: richTextEditorWrapperStyle(theme, !showRichTextEditorFormatting) },
9617
- React.createElement(roosterjsReact.Rooster, { initialContent: initialContent, inDarkMode: isDarkThemed(theme), plugins: plugins, className: richTextEditorStyle(props.styles), editorCreator: editorCreator,
10408
+ React.createElement(roosterjsReact.Rooster, { defaultFormat: defaultFormat, initialContent: initialContent, inDarkMode: isDarkThemed(theme), plugins: plugins, className: richTextEditorStyle(props.styles), editorCreator: editorCreator,
9618
10409
  // TODO: confirm the color during inline images implementation
9619
10410
  imageSelectionBorderColor: 'blue',
9620
10411
  // doNotAdjustEditorColor is used to fix the default background color for Rooster component
@@ -9662,9 +10453,9 @@ const richTextBorderBoxStyle = (props) => {
9662
10453
  */
9663
10454
  const RichTextInputBoxComponent = (props) => {
9664
10455
  const { placeholderText, initialContent, onChange, onEnterKeyDown, editorComponentRef, disabled, strings, actionComponents,
9665
- /* @conditional-compile-remove(file-sharing) */
10456
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
9666
10457
  onRenderFileUploads,
9667
- /* @conditional-compile-remove(file-sharing) */
10458
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
9668
10459
  hasFiles, richTextEditorStyleProps, isHorizontalLayoutDisabled = false } = props;
9669
10460
  const theme = useTheme();
9670
10461
  const [showRichTextEditorFormatting, setShowRichTextEditorFormatting] = React.useState(false);
@@ -9703,11 +10494,11 @@ const RichTextInputBoxComponent = (props) => {
9703
10494
  const useHorizontalLayout = React.useMemo(() => {
9704
10495
  return (!isHorizontalLayoutDisabled &&
9705
10496
  !showRichTextEditorFormatting &&
9706
- /* @conditional-compile-remove(file-sharing) */ !hasFiles);
10497
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */ !hasFiles);
9707
10498
  }, [
9708
10499
  isHorizontalLayoutDisabled,
9709
10500
  showRichTextEditorFormatting,
9710
- /* @conditional-compile-remove(file-sharing) */ hasFiles
10501
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */ hasFiles
9711
10502
  ]);
9712
10503
  return (React.createElement("div", { className: richTextBorderBoxStyle({
9713
10504
  theme: theme,
@@ -9716,8 +10507,9 @@ const RichTextInputBoxComponent = (props) => {
9716
10507
  React.createElement(react.Stack, { grow: true, horizontal: useHorizontalLayout, horizontalAlign: useHorizontalLayout ? 'end' : 'space-between', className: inputBoxContentStackStyle, wrap: useHorizontalLayout },
9717
10508
  React.createElement(react.Stack, { grow: true, className: inputBoxRichTextStackStyle },
9718
10509
  React.createElement(react.Stack.Item, { className: inputBoxRichTextStackItemStyle },
9719
- React.createElement(RichTextEditor, { initialContent: initialContent, placeholderText: placeholderText, onChange: onChange, onKeyDown: onKeyDown, ref: editorComponentRef, strings: strings, showRichTextEditorFormatting: showRichTextEditorFormatting, styles: richTextEditorStyle })), /* @conditional-compile-remove(file-sharing) */
9720
- onRenderFileUploads && onRenderFileUploads()),
10510
+ React.createElement(RichTextEditor, { initialContent: initialContent, placeholderText: placeholderText, onChange: onChange, onKeyDown: onKeyDown, ref: editorComponentRef, strings: strings, showRichTextEditorFormatting: showRichTextEditorFormatting, styles: richTextEditorStyle })),
10511
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */ onRenderFileUploads &&
10512
+ onRenderFileUploads()),
9721
10513
  actionButtons)));
9722
10514
  };
9723
10515
 
@@ -9728,9 +10520,9 @@ const RichTextInputBoxComponent = (props) => {
9728
10520
  */
9729
10521
  const RichTextSendBoxErrors = (props) => {
9730
10522
  const {
9731
- /* @conditional-compile-remove(file-sharing) */
10523
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
9732
10524
  attachmentUploadError,
9733
- /* @conditional-compile-remove(file-sharing) */
10525
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
9734
10526
  attachmentUploadsPendingError, systemMessage, textTooLongMessage } = props;
9735
10527
  const [sendBoxError, setSendBoxError] = React.useState(undefined);
9736
10528
  React.useEffect(() => {
@@ -9755,11 +10547,11 @@ const RichTextSendBoxErrors = (props) => {
9755
10547
  if (prev) {
9756
10548
  errors.push(prev);
9757
10549
  }
9758
- /* @conditional-compile-remove(file-sharing) */
10550
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
9759
10551
  if (attachmentUploadsPendingError) {
9760
10552
  errors.push(attachmentUploadsPendingError);
9761
10553
  }
9762
- /* @conditional-compile-remove(file-sharing) */
10554
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
9763
10555
  if (attachmentUploadError) {
9764
10556
  errors.push(attachmentUploadError);
9765
10557
  }
@@ -9771,8 +10563,8 @@ const RichTextSendBoxErrors = (props) => {
9771
10563
  return sortedErrors[0];
9772
10564
  });
9773
10565
  }, [
9774
- /* @conditional-compile-remove(file-sharing) */ attachmentUploadError,
9775
- /* @conditional-compile-remove(file-sharing) */ attachmentUploadsPendingError
10566
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */ attachmentUploadError,
10567
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */ attachmentUploadsPendingError
9776
10568
  ]);
9777
10569
  const onDismiss = React.useCallback(() => {
9778
10570
  if (systemMessage && !isMessageEmpty$1(systemMessage)) {
@@ -9796,9 +10588,9 @@ const isMessageEmpty$1 = (message) => {
9796
10588
  */
9797
10589
  const RichTextSendBox = (props) => {
9798
10590
  const { disabled = false, systemMessage, onSendMessage,
9799
- /* @conditional-compile-remove(file-sharing) */
10591
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
9800
10592
  activeFileUploads,
9801
- /* @conditional-compile-remove(file-sharing) */
10593
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
9802
10594
  onCancelFileUpload } = props;
9803
10595
  const theme = useTheme();
9804
10596
  const locale = useLocale$1();
@@ -9811,7 +10603,7 @@ const RichTextSendBox = (props) => {
9811
10603
  }, [localeStrings, props.strings]);
9812
10604
  const [contentValue, setContentValue] = React.useState('');
9813
10605
  const [contentValueOverflow, setContentValueOverflow] = React.useState(false);
9814
- /* @conditional-compile-remove(file-sharing) */
10606
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
9815
10607
  const [attachmentUploadsPendingError, setFileUploadsPendingError] = React.useState(undefined);
9816
10608
  const editorComponentRef = React.useRef(null);
9817
10609
  const contentTooLongMessage = React.useMemo(() => (contentValueOverflow ? strings.textTooLong : undefined), [contentValueOverflow, strings.textTooLong]);
@@ -9828,9 +10620,9 @@ const RichTextSendBox = (props) => {
9828
10620
  return;
9829
10621
  }
9830
10622
  // Don't send message until all files have been uploaded successfully
9831
- /* @conditional-compile-remove(file-sharing) */
10623
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
9832
10624
  setFileUploadsPendingError(undefined);
9833
- /* @conditional-compile-remove(file-sharing) */
10625
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
9834
10626
  if (hasIncompleteFileUploads(activeFileUploads)) {
9835
10627
  setFileUploadsPendingError({ message: strings.attachmentUploadsPendingError, timestamp: Date.now() });
9836
10628
  return;
@@ -9839,7 +10631,7 @@ const RichTextSendBox = (props) => {
9839
10631
  // we don't want to send empty messages including spaces, newlines, tabs
9840
10632
  // Message can be empty if there is a valid file upload
9841
10633
  if (sanitizeText(message).length > 0 ||
9842
- /* @conditional-compile-remove(file-sharing) */ hasCompletedFileUploads(activeFileUploads)) {
10634
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */ hasCompletedFileUploads(activeFileUploads)) {
9843
10635
  onSendMessage(message);
9844
10636
  setContentValue('');
9845
10637
  (_a = editorComponentRef.current) === null || _a === void 0 ? void 0 : _a.setEmptyContent();
@@ -9850,29 +10642,29 @@ const RichTextSendBox = (props) => {
9850
10642
  contentValueOverflow,
9851
10643
  disabled,
9852
10644
  onSendMessage,
9853
- /* @conditional-compile-remove(file-sharing) */ activeFileUploads,
9854
- /* @conditional-compile-remove(file-sharing) */ strings.attachmentUploadsPendingError
10645
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */ activeFileUploads,
10646
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */ strings.attachmentUploadsPendingError
9855
10647
  ]);
9856
10648
  const hasErrorMessage = React.useMemo(() => {
9857
10649
  var _a;
9858
10650
  return (!!systemMessage ||
9859
10651
  !!contentTooLongMessage ||
9860
- /* @conditional-compile-remove(file-sharing) */
10652
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
9861
10653
  !!attachmentUploadsPendingError ||
9862
- /* @conditional-compile-remove(file-sharing) */
10654
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
9863
10655
  !!((_a = activeFileUploads === null || activeFileUploads === void 0 ? void 0 : activeFileUploads.filter((attachmentUpload) => attachmentUpload.error).pop()) === null || _a === void 0 ? void 0 : _a.error));
9864
10656
  }, [
9865
- /* @conditional-compile-remove(file-sharing) */
10657
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
9866
10658
  activeFileUploads,
9867
10659
  contentTooLongMessage,
9868
- /* @conditional-compile-remove(file-sharing) */
10660
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
9869
10661
  attachmentUploadsPendingError,
9870
10662
  systemMessage
9871
10663
  ]);
9872
10664
  const onRenderSendIcon = React.useCallback((isHover) => (React.createElement(react.Icon, { iconName: isHover && contentValue ? 'SendBoxSendHovered' : 'SendBoxSend', className: sendIconStyle({
9873
10665
  theme,
9874
10666
  hasText: !!contentValue,
9875
- /* @conditional-compile-remove(file-sharing) */
10667
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
9876
10668
  hasFile: false,
9877
10669
  hasErrorMessage: hasErrorMessage,
9878
10670
  defaultTextColor: theme.palette.neutralSecondary,
@@ -9881,46 +10673,54 @@ const RichTextSendBox = (props) => {
9881
10673
  const sendBoxErrorsProps = React.useMemo(() => {
9882
10674
  var _a;
9883
10675
  return {
9884
- /* @conditional-compile-remove(file-sharing) */
10676
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
9885
10677
  attachmentUploadsPendingError: attachmentUploadsPendingError,
9886
- /* @conditional-compile-remove(file-sharing) */
10678
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
9887
10679
  attachmentUploadError: (_a = activeFileUploads === null || activeFileUploads === void 0 ? void 0 : activeFileUploads.filter((attachmentUpload) => attachmentUpload.error).pop()) === null || _a === void 0 ? void 0 : _a.error,
9888
10680
  systemMessage: systemMessage,
9889
10681
  textTooLongMessage: contentTooLongMessage
9890
10682
  };
9891
10683
  }, [
9892
- /* @conditional-compile-remove(file-sharing) */
10684
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
9893
10685
  activeFileUploads,
9894
10686
  contentTooLongMessage,
9895
- /* @conditional-compile-remove(file-sharing) */
10687
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
9896
10688
  attachmentUploadsPendingError,
9897
10689
  systemMessage
9898
10690
  ]);
9899
- /* @conditional-compile-remove(file-sharing) */
10691
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
9900
10692
  const onRenderFileUploads = React.useCallback(() => {
9901
10693
  return (React.createElement(react.Stack, { className: attachmentUploadCardsStyles },
9902
- React.createElement(_AttachmentUploadCards, { activeFileUploads: activeFileUploads, onCancelFileUpload: onCancelFileUpload, strings: {
9903
- removeAttachment: strings.removeAttachment,
9904
- uploading: strings.uploading,
9905
- uploadCompleted: strings.uploadCompleted
9906
- } })));
9907
- }, [activeFileUploads, onCancelFileUpload, strings.removeAttachment, strings.uploadCompleted, strings.uploading]);
10694
+ React.createElement(FluentV9ThemeProvider, { v8Theme: theme },
10695
+ React.createElement(_AttachmentUploadCards, { activeFileUploads: activeFileUploads, onCancelFileUpload: onCancelFileUpload, strings: {
10696
+ removeAttachment: strings.removeAttachment,
10697
+ uploading: strings.uploading,
10698
+ uploadCompleted: strings.uploadCompleted
10699
+ } }))));
10700
+ }, [
10701
+ activeFileUploads,
10702
+ onCancelFileUpload,
10703
+ strings.removeAttachment,
10704
+ strings.uploadCompleted,
10705
+ strings.uploading,
10706
+ theme
10707
+ ]);
9908
10708
  const sendButton = React.useMemo(() => {
9909
10709
  return (React.createElement(InputBoxButton, { onRenderIcon: onRenderSendIcon, onClick: (e) => {
9910
10710
  sendMessageOnClick();
9911
10711
  e.stopPropagation(); // Prevents the click from bubbling up and triggering a focus event on the chat.
9912
10712
  }, className: richTextActionButtonsStyle, ariaLabel: localeStrings.sendButtonAriaLabel, tooltipContent: localeStrings.sendButtonAriaLabel }));
9913
10713
  }, [localeStrings.sendButtonAriaLabel, onRenderSendIcon, sendMessageOnClick]);
9914
- /* @conditional-compile-remove(file-sharing) */
10714
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
9915
10715
  const hasFileUploads = React.useMemo(() => {
9916
10716
  return hasCompletedFileUploads(activeFileUploads) || hasIncompleteFileUploads(activeFileUploads);
9917
10717
  }, [activeFileUploads]);
9918
10718
  return (React.createElement(react.Stack, null,
9919
10719
  React.createElement(RichTextSendBoxErrors, Object.assign({}, sendBoxErrorsProps)),
9920
10720
  React.createElement(RichTextInputBoxComponent, { placeholderText: strings.placeholderText, onChange: setContent, onEnterKeyDown: sendMessageOnClick, editorComponentRef: editorComponentRef, strings: strings, disabled: disabled, actionComponents: sendButton, richTextEditorStyleProps: sendBoxRichTextEditorStyle,
9921
- /* @conditional-compile-remove(file-sharing) */
10721
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
9922
10722
  onRenderFileUploads: onRenderFileUploads,
9923
- /* @conditional-compile-remove(file-sharing) */
10723
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
9924
10724
  hasFiles: hasFileUploads })));
9925
10725
  };
9926
10726
 
@@ -10410,23 +11210,24 @@ const onRenderSubmitIcon = (className) => {
10410
11210
  return React.createElement(react.Icon, { iconName: 'EditBoxSubmit', className: className });
10411
11211
  };
10412
11212
  function isMessageEmpty(messageText,
10413
- /* @conditional-compile-remove(file-sharing) */
11213
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
10414
11214
  attachmentMetadata) {
10415
- /* @conditional-compile-remove(file-sharing) */
11215
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
10416
11216
  return messageText.trim().length === 0 && (attachmentMetadata === null || attachmentMetadata === void 0 ? void 0 : attachmentMetadata.length) === 0;
10417
11217
  }
10418
11218
  /**
10419
11219
  * @private
10420
11220
  */
10421
11221
  function getMessageState(messageText,
10422
- /* @conditional-compile-remove(file-sharing) */ attachmentMetadata) {
10423
- return isMessageEmpty(messageText, /* @conditional-compile-remove(file-sharing) */ attachmentMetadata)
11222
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */ attachmentMetadata) {
11223
+ return isMessageEmpty(messageText,
11224
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */ attachmentMetadata)
10424
11225
  ? 'too short'
10425
11226
  : isMessageTooLong(messageText.length)
10426
11227
  ? 'too long'
10427
11228
  : 'OK';
10428
11229
  }
10429
- /* @conditional-compile-remove(file-sharing) */
11230
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
10430
11231
  /**
10431
11232
  * @private
10432
11233
  * @TODO: Remove when file-sharing feature becomes stable.
@@ -10489,7 +11290,7 @@ const LiveMessage = (props) => (React.createElement(AnnouncerContext.Consumer, n
10489
11290
  const MessageStatusIcon = (props) => {
10490
11291
  const { shouldAnnounce, iconName, iconClassName, ariaLabel } = props;
10491
11292
  return (React.createElement(React.Fragment, null,
10492
- ariaLabel && React.createElement(LiveMessage, { message: ariaLabel, ariaLive: "polite" }),
11293
+ ariaLabel && shouldAnnounce && React.createElement(LiveMessage, { message: ariaLabel, ariaLive: "polite" }),
10493
11294
  React.createElement("div", {
10494
11295
  // make icon accessible
10495
11296
  tabIndex: 0 },
@@ -10677,363 +11478,6 @@ var getParticipantsWhoHaveReadMessage = (message, readReceiptsBySenderId) => {
10677
11478
  .map(([id, readReceipt]) => ({ id, displayName: readReceipt.displayName })));
10678
11479
  };
10679
11480
 
10680
- // Copyright (c) Microsoft Corporation.
10681
- // Licensed under the MIT License.
10682
- // These color records are required for createV9Theme
10683
- // For more info, check https://react.fluentui.dev/iframe.html?viewMode=docs&id=concepts-migration-from-v8-components-theme-migration--page#compatible-themes
10684
- /**
10685
- * @private
10686
- */
10687
- const grey = {
10688
- '0': '#000000',
10689
- '2': '#050505',
10690
- '4': '#0a0a0a',
10691
- '6': '#0f0f0f',
10692
- '8': '#141414',
10693
- '10': '#1a1a1a',
10694
- '12': '#1f1f1f',
10695
- '14': '#242424',
10696
- '16': '#292929',
10697
- '18': '#2e2e2e',
10698
- '20': '#333333',
10699
- '22': '#383838',
10700
- '24': '#3d3d3d',
10701
- '26': '#424242',
10702
- '28': '#474747',
10703
- '30': '#4d4d4d',
10704
- '32': '#525252',
10705
- '34': '#575757',
10706
- '36': '#5c5c5c',
10707
- '38': '#616161',
10708
- '40': '#666666',
10709
- '42': '#6b6b6b',
10710
- '44': '#707070',
10711
- '46': '#757575',
10712
- '48': '#7a7a7a',
10713
- '50': '#808080',
10714
- '52': '#858585',
10715
- '54': '#8a8a8a',
10716
- '56': '#8f8f8f',
10717
- '58': '#949494',
10718
- '60': '#999999',
10719
- '62': '#9e9e9e',
10720
- '64': '#a3a3a3',
10721
- '66': '#a8a8a8',
10722
- '68': '#adadad',
10723
- '70': '#b3b3b3',
10724
- '72': '#b8b8b8',
10725
- '74': '#bdbdbd',
10726
- '76': '#c2c2c2',
10727
- '78': '#c7c7c7',
10728
- '80': '#cccccc',
10729
- '82': '#d1d1d1',
10730
- '84': '#d6d6d6',
10731
- '86': '#dbdbdb',
10732
- '88': '#e0e0e0',
10733
- '90': '#e6e6e6',
10734
- '92': '#ebebeb',
10735
- '94': '#f0f0f0',
10736
- '96': '#f5f5f5',
10737
- '98': '#fafafa',
10738
- '100': '#ffffff'
10739
- };
10740
- /**
10741
- * @private
10742
- */
10743
- const whiteAlpha = {
10744
- '5': 'rgba(255, 255, 255, 0.05)',
10745
- '10': 'rgba(255, 255, 255, 0.1)',
10746
- '20': 'rgba(255, 255, 255, 0.2)',
10747
- '30': 'rgba(255, 255, 255, 0.3)',
10748
- '40': 'rgba(255, 255, 255, 0.4)',
10749
- '50': 'rgba(255, 255, 255, 0.5)',
10750
- '60': 'rgba(255, 255, 255, 0.6)',
10751
- '70': 'rgba(255, 255, 255, 0.7)',
10752
- '80': 'rgba(255, 255, 255, 0.8)',
10753
- '90': 'rgba(255, 255, 255, 0.9)'
10754
- };
10755
- /**
10756
- * @private
10757
- */
10758
- const blackAlpha = {
10759
- '5': 'rgba(0, 0, 0, 0.05)',
10760
- '10': 'rgba(0, 0, 0, 0.1)',
10761
- '20': 'rgba(0, 0, 0, 0.2)',
10762
- '30': 'rgba(0, 0, 0, 0.3)',
10763
- '40': 'rgba(0, 0, 0, 0.4)',
10764
- '50': 'rgba(0, 0, 0, 0.5)',
10765
- '60': 'rgba(0, 0, 0, 0.6)',
10766
- '70': 'rgba(0, 0, 0, 0.7)',
10767
- '80': 'rgba(0, 0, 0, 0.8)',
10768
- '90': 'rgba(0, 0, 0, 0.9)'
10769
- };
10770
- /**
10771
- * @private
10772
- */
10773
- const grey10Alpha = {
10774
- '5': 'rgba(26, 26, 26, 0.05)',
10775
- '10': 'rgba(26, 26, 26, 0.1)',
10776
- '20': 'rgba(26, 26, 26, 0.2)',
10777
- '30': 'rgba(26, 26, 26, 0.3)',
10778
- '40': 'rgba(26, 26, 26, 0.4)',
10779
- '50': 'rgba(26, 26, 26, 0.5)',
10780
- '60': 'rgba(26, 26, 26, 0.6)',
10781
- '70': 'rgba(26, 26, 26, 0.7)',
10782
- '80': 'rgba(26, 26, 26, 0.8)',
10783
- '90': 'rgba(26, 26, 26, 0.9)'
10784
- };
10785
- /**
10786
- * @private
10787
- */
10788
- const grey12Alpha = {
10789
- '5': 'rgba(31, 31, 31, 0.05)',
10790
- '10': 'rgba(31, 31, 31, 0.1)',
10791
- '20': 'rgba(31, 31, 31, 0.2)',
10792
- '30': 'rgba(31, 31, 31, 0.3)',
10793
- '40': 'rgba(31, 31, 31, 0.4)',
10794
- '50': 'rgba(31, 31, 31, 0.5)',
10795
- '60': 'rgba(31, 31, 31, 0.6)',
10796
- '70': 'rgba(31, 31, 31, 0.7)',
10797
- '80': 'rgba(31, 31, 31, 0.8)',
10798
- '90': 'rgba(31, 31, 31, 0.9)'
10799
- };
10800
-
10801
- // Copyright (c) Microsoft Corporation.
10802
- // Licensed under the MIT License.
10803
- // These mappings are required for createV9Theme
10804
- // For more info, check https://react.fluentui.dev/iframe.html?viewMode=docs&id=concepts-migration-from-v8-components-theme-migration--page#compatible-themes
10805
- /**
10806
- * Creates v9 color tokens from a v8 palette.
10807
- */
10808
- const mapAliasColors = (palette, inverted) => {
10809
- return {
10810
- colorNeutralForeground1: palette.neutralPrimary,
10811
- colorNeutralForeground1Hover: palette.neutralPrimary,
10812
- colorNeutralForeground1Pressed: palette.neutralPrimary,
10813
- colorNeutralForeground1Selected: palette.neutralPrimary,
10814
- colorNeutralForeground2: palette.neutralSecondary,
10815
- colorNeutralForeground2Hover: palette.neutralPrimary,
10816
- colorNeutralForeground2Pressed: palette.neutralPrimary,
10817
- colorNeutralForeground2Selected: palette.neutralPrimary,
10818
- colorNeutralForeground2BrandHover: palette.themePrimary,
10819
- colorNeutralForeground2BrandPressed: palette.themeDarkAlt,
10820
- colorNeutralForeground2BrandSelected: palette.themePrimary,
10821
- colorNeutralForeground3: palette.neutralTertiary,
10822
- colorNeutralForeground3Hover: palette.neutralSecondary,
10823
- colorNeutralForeground3Pressed: palette.neutralSecondary,
10824
- colorNeutralForeground3Selected: palette.neutralSecondary,
10825
- colorNeutralForeground3BrandHover: palette.themePrimary,
10826
- colorNeutralForeground3BrandPressed: palette.themeDarkAlt,
10827
- colorNeutralForeground3BrandSelected: palette.themePrimary,
10828
- colorNeutralForeground4: palette.neutralQuaternary,
10829
- colorNeutralForegroundDisabled: palette.neutralTertiaryAlt,
10830
- colorNeutralForegroundInvertedDisabled: whiteAlpha[40],
10831
- colorBrandForegroundLink: palette.themeDarkAlt,
10832
- colorBrandForegroundLinkHover: palette.themeDark,
10833
- colorBrandForegroundLinkPressed: palette.themeDarker,
10834
- colorBrandForegroundLinkSelected: palette.themeDarkAlt,
10835
- colorNeutralForeground2Link: palette.neutralSecondary,
10836
- colorNeutralForeground2LinkHover: palette.neutralPrimary,
10837
- colorNeutralForeground2LinkPressed: palette.neutralPrimary,
10838
- colorNeutralForeground2LinkSelected: palette.neutralPrimary,
10839
- colorCompoundBrandForeground1: palette.themePrimary,
10840
- colorCompoundBrandForeground1Hover: palette.themeDarkAlt,
10841
- colorCompoundBrandForeground1Pressed: palette.themeDark,
10842
- colorBrandForeground1: palette.themePrimary,
10843
- colorBrandForeground2: palette.themeDarkAlt,
10844
- colorBrandForeground2Hover: palette.themeDarkAlt,
10845
- colorBrandForeground2Pressed: palette.themeDarkAlt,
10846
- colorNeutralForeground1Static: palette.neutralPrimary,
10847
- colorNeutralForegroundInverted: palette.white,
10848
- colorNeutralForegroundInvertedHover: palette.white,
10849
- colorNeutralForegroundInvertedPressed: palette.white,
10850
- colorNeutralForegroundInvertedSelected: palette.white,
10851
- colorNeutralForegroundOnBrand: palette.white,
10852
- colorNeutralForegroundStaticInverted: palette.white,
10853
- colorNeutralForegroundInvertedLink: palette.white,
10854
- colorNeutralForegroundInvertedLinkHover: palette.white,
10855
- colorNeutralForegroundInvertedLinkPressed: palette.white,
10856
- colorNeutralForegroundInvertedLinkSelected: palette.white,
10857
- colorNeutralForegroundInverted2: palette.white,
10858
- colorBrandForegroundInverted: palette.themeSecondary,
10859
- colorBrandForegroundInvertedHover: palette.themeTertiary,
10860
- colorBrandForegroundInvertedPressed: palette.themeSecondary,
10861
- colorBrandForegroundOnLight: palette.themePrimary,
10862
- colorBrandForegroundOnLightHover: palette.themeDarkAlt,
10863
- colorBrandForegroundOnLightPressed: palette.themeDark,
10864
- colorBrandForegroundOnLightSelected: palette.themeDark,
10865
- colorNeutralBackground1: palette.white,
10866
- colorNeutralBackground1Hover: palette.neutralLighter,
10867
- colorNeutralBackground1Pressed: palette.neutralQuaternaryAlt,
10868
- colorNeutralBackground1Selected: palette.neutralLight,
10869
- colorNeutralBackground2: palette.neutralLighterAlt,
10870
- colorNeutralBackground2Hover: palette.neutralLighter,
10871
- colorNeutralBackground2Pressed: palette.neutralQuaternaryAlt,
10872
- colorNeutralBackground2Selected: palette.neutralLight,
10873
- colorNeutralBackground3: palette.neutralLighter,
10874
- colorNeutralBackground3Hover: palette.neutralLight,
10875
- colorNeutralBackground3Pressed: palette.neutralQuaternary,
10876
- colorNeutralBackground3Selected: palette.neutralQuaternaryAlt,
10877
- colorNeutralBackground4: palette.neutralLighter,
10878
- colorNeutralBackground4Hover: palette.neutralLighterAlt,
10879
- colorNeutralBackground4Pressed: palette.neutralLighter,
10880
- colorNeutralBackground4Selected: palette.white,
10881
- colorNeutralBackground5: palette.neutralLight,
10882
- colorNeutralBackground5Hover: palette.neutralLighter,
10883
- colorNeutralBackground5Pressed: palette.neutralLighter,
10884
- colorNeutralBackground5Selected: palette.neutralLighterAlt,
10885
- colorNeutralBackground6: palette.neutralLight,
10886
- colorNeutralBackgroundStatic: grey[20],
10887
- colorNeutralBackgroundInverted: palette.neutralSecondary,
10888
- colorNeutralBackgroundAlpha: inverted ? grey10Alpha[50] : whiteAlpha[50],
10889
- colorNeutralBackgroundAlpha2: inverted ? grey12Alpha[70] : whiteAlpha[80],
10890
- colorSubtleBackground: 'transparent',
10891
- colorSubtleBackgroundHover: palette.neutralLighter,
10892
- colorSubtleBackgroundPressed: palette.neutralQuaternaryAlt,
10893
- colorSubtleBackgroundSelected: palette.neutralLight,
10894
- colorSubtleBackgroundLightAlphaHover: inverted ? whiteAlpha[10] : whiteAlpha[80],
10895
- colorSubtleBackgroundLightAlphaPressed: inverted ? whiteAlpha[5] : whiteAlpha[50],
10896
- colorSubtleBackgroundLightAlphaSelected: 'transparent',
10897
- colorSubtleBackgroundInverted: 'transparent',
10898
- colorSubtleBackgroundInvertedHover: blackAlpha[10],
10899
- colorSubtleBackgroundInvertedPressed: blackAlpha[30],
10900
- colorSubtleBackgroundInvertedSelected: blackAlpha[20],
10901
- colorTransparentBackground: 'transparent',
10902
- colorTransparentBackgroundHover: 'transparent',
10903
- colorTransparentBackgroundPressed: 'transparent',
10904
- colorTransparentBackgroundSelected: 'transparent',
10905
- colorNeutralBackgroundDisabled: palette.neutralLighter,
10906
- colorNeutralBackgroundInvertedDisabled: whiteAlpha[10],
10907
- colorNeutralStencil1: palette.neutralLight,
10908
- colorNeutralStencil2: palette.neutralLighterAlt,
10909
- colorNeutralStencil1Alpha: inverted ? whiteAlpha[10] : blackAlpha[10],
10910
- colorNeutralStencil2Alpha: inverted ? whiteAlpha[5] : blackAlpha[5],
10911
- colorBackgroundOverlay: blackAlpha[40],
10912
- colorScrollbarOverlay: blackAlpha[50],
10913
- colorBrandBackground: palette.themePrimary,
10914
- colorBrandBackgroundHover: palette.themeDarkAlt,
10915
- colorBrandBackgroundPressed: palette.themeDarker,
10916
- colorBrandBackgroundSelected: palette.themeDark,
10917
- colorCompoundBrandBackground: palette.themePrimary,
10918
- colorCompoundBrandBackgroundHover: palette.themeDarkAlt,
10919
- colorCompoundBrandBackgroundPressed: palette.themeDark,
10920
- colorBrandBackgroundStatic: palette.themePrimary,
10921
- colorBrandBackground2: palette.themeLighterAlt,
10922
- colorBrandBackground2Hover: palette.themeLighterAlt,
10923
- colorBrandBackground2Pressed: palette.themeLighterAlt,
10924
- colorBrandBackground3Static: palette.themeDark,
10925
- colorBrandBackground4Static: palette.themeDarker,
10926
- colorBrandBackgroundInverted: palette.white,
10927
- colorBrandBackgroundInvertedHover: palette.themeLighterAlt,
10928
- colorBrandBackgroundInvertedPressed: palette.themeLight,
10929
- colorBrandBackgroundInvertedSelected: palette.themeLighter,
10930
- colorNeutralCardBackground: inverted ? grey[20] : grey[98],
10931
- colorNeutralCardBackgroundHover: inverted ? grey[24] : palette.white,
10932
- colorNeutralCardBackgroundPressed: inverted ? grey[18] : grey[96],
10933
- colorNeutralCardBackgroundSelected: inverted ? grey[22] : grey[92],
10934
- colorNeutralCardBackgroundDisabled: inverted ? grey[8] : grey[94],
10935
- colorNeutralStrokeAccessible: palette.neutralSecondary,
10936
- colorNeutralStrokeAccessibleHover: palette.neutralSecondary,
10937
- colorNeutralStrokeAccessiblePressed: palette.neutralSecondary,
10938
- colorNeutralStrokeAccessibleSelected: palette.themePrimary,
10939
- colorNeutralStroke1: palette.neutralQuaternary,
10940
- colorNeutralStroke1Hover: palette.neutralTertiaryAlt,
10941
- colorNeutralStroke1Pressed: palette.neutralTertiaryAlt,
10942
- colorNeutralStroke1Selected: palette.neutralTertiaryAlt,
10943
- colorNeutralStroke2: palette.neutralQuaternaryAlt,
10944
- colorNeutralStroke3: palette.neutralLighter,
10945
- colorNeutralStrokeSubtle: palette.neutralQuaternaryAlt,
10946
- colorNeutralStrokeOnBrand: palette.white,
10947
- colorNeutralStrokeOnBrand2: palette.white,
10948
- colorNeutralStrokeOnBrand2Hover: palette.white,
10949
- colorNeutralStrokeOnBrand2Pressed: palette.white,
10950
- colorNeutralStrokeOnBrand2Selected: palette.white,
10951
- colorBrandStroke1: palette.themePrimary,
10952
- colorBrandStroke2: palette.themeLight,
10953
- colorBrandStroke2Hover: palette.themeLight,
10954
- colorBrandStroke2Pressed: palette.themeLight,
10955
- colorBrandStroke2Contrast: palette.themeLight,
10956
- colorCompoundBrandStroke: palette.themePrimary,
10957
- colorCompoundBrandStrokeHover: palette.themeDarkAlt,
10958
- colorCompoundBrandStrokePressed: palette.themeDark,
10959
- colorNeutralStrokeDisabled: palette.neutralQuaternaryAlt,
10960
- colorNeutralStrokeInvertedDisabled: whiteAlpha[40],
10961
- colorTransparentStroke: 'transparent',
10962
- colorTransparentStrokeInteractive: 'transparent',
10963
- colorTransparentStrokeDisabled: 'transparent',
10964
- colorNeutralStrokeAlpha: inverted ? whiteAlpha[10] : blackAlpha[5],
10965
- colorNeutralStrokeAlpha2: whiteAlpha[20],
10966
- colorStrokeFocus1: palette.white,
10967
- colorStrokeFocus2: palette.black,
10968
- colorNeutralShadowAmbient: 'rgba(0,0,0,0.12)',
10969
- colorNeutralShadowKey: 'rgba(0,0,0,0.14)',
10970
- colorNeutralShadowAmbientLighter: 'rgba(0,0,0,0.06)',
10971
- colorNeutralShadowKeyLighter: 'rgba(0,0,0,0.07)',
10972
- colorNeutralShadowAmbientDarker: 'rgba(0,0,0,0.20)',
10973
- colorNeutralShadowKeyDarker: 'rgba(0,0,0,0.24)',
10974
- colorBrandShadowAmbient: 'rgba(0,0,0,0.30)',
10975
- colorBrandShadowKey: 'rgba(0,0,0,0.25)'
10976
- };
10977
- };
10978
- /**
10979
- * Creates v9 shadow tokens from v8 effects.
10980
- */
10981
- const mapShadowTokens = (effects) => {
10982
- return {
10983
- shadow4: effects.elevation4,
10984
- shadow8: effects.elevation8,
10985
- shadow16: effects.elevation16,
10986
- shadow64: effects.elevation64
10987
- };
10988
- };
10989
- /**
10990
- * Creates v9 border radius tokens from v8 effects
10991
- */
10992
- const mapBorderRadiusTokens = (effects) => {
10993
- return {
10994
- borderRadiusSmall: effects.roundedCorner2,
10995
- borderRadiusMedium: effects.roundedCorner4,
10996
- borderRadiusLarge: effects.roundedCorner6
10997
- };
10998
- };
10999
- /**
11000
- * Creates a v9 theme from a v8 theme and base v9 theme.
11001
- * FluentUI webLightTheme is used in case if no baseThemeV9 is provided.
11002
- *
11003
- * @private
11004
- */
11005
- const createV9Theme = (themeV8, baseThemeV9) => {
11006
- const baseTheme = baseThemeV9 !== null && baseThemeV9 !== void 0 ? baseThemeV9 : reactComponents.webLightTheme;
11007
- return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, baseTheme), mapAliasColors(themeV8.palette, themeV8.isInverted)), mapShadowTokens(themeV8.effects)), mapBorderRadiusTokens(themeV8.effects)), { colorBrandBackground2: themeV8.palette.themeLight, colorBrandBackground2Hover: themeV8.palette.themeLight, colorBrandBackground2Pressed: themeV8.palette.themeLight, colorStatusWarningBackground3: '#D83B01', errorText: themeV8.semanticColors.errorText, colorNeutralStroke1Selected: themeV8.palette.neutralQuaternary, colorNeutralForeground2: themeV8.palette.neutralSecondary, colorBrandForegroundLink: themeV8.palette.themePrimary, colorBrandForegroundLinkHover: themeV8.palette.themeDarker, colorNeutralBackground1Selected: themeV8.palette.neutralQuaternaryAlt,
11008
- // Fix for an issue with black borders for iOS that are added with 'after' selector
11009
- colorStrokeFocus2: 'transparent' });
11010
- };
11011
-
11012
- // Copyright (c) Microsoft Corporation.
11013
- // Licensed under the MIT License.
11014
- /**
11015
- * @private
11016
- */
11017
- const useFluentV9Wrapper = reactComponents.makeStyles({
11018
- body: Object.assign(Object.assign(Object.assign(Object.assign({ height: '100%' }, reactComponents.shorthands.margin(0)), reactComponents.shorthands.overflow('hidden')), reactComponents.shorthands.padding(0)), { width: '100%' })
11019
- });
11020
- /**
11021
- * @private
11022
- */
11023
- const FluentV9ThemeProvider = (props) => {
11024
- const { v8Theme, children } = props;
11025
- const v9Theme = createV9Theme(v8Theme);
11026
- const dir = v8Theme.rtl ? 'rtl' : 'ltr';
11027
- return (
11028
- // TextDirectionProvider is needed to fix issue with direction value update in FluentProvider
11029
- React.createElement(react$1.TextDirectionProvider, { dir: dir },
11030
- React.createElement(FluentProviderWithStylesOverrides, { theme: v9Theme, dir: dir }, children)));
11031
- };
11032
- const FluentProviderWithStylesOverrides = (props) => {
11033
- const classes = useFluentV9Wrapper();
11034
- return React.createElement(reactComponents.FluentProvider, Object.assign({}, props, { className: classes.body }));
11035
- };
11036
-
11037
11481
  // Copyright (c) Microsoft Corporation.
11038
11482
  // Licensed under the MIT License.
11039
11483
  /// Adapted from: https://github.com/AlmeroSteyn/react-aria-live/blob/master/src/modules/MessageBlock.js
@@ -11218,12 +11662,12 @@ const ChatMessageComponentAsEditBox = (props) => {
11218
11662
  /* @conditional-compile-remove(mention) */
11219
11663
  const { mentionLookupOptions } = props;
11220
11664
  const [textValue, setTextValue] = React.useState(message.content || '');
11221
- /* @conditional-compile-remove(file-sharing) */
11665
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
11222
11666
  const [attachmentMetadata, setAttachedFilesMetadata] = React.useState(getMessageAttachedFilesMetadata(message));
11223
11667
  const editTextFieldRef = React.useRef(null);
11224
11668
  const theme = useTheme();
11225
11669
  const messageState = getMessageState(textValue,
11226
- /* @conditional-compile-remove(file-sharing) */ attachmentMetadata !== null && attachmentMetadata !== void 0 ? attachmentMetadata : []);
11670
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */ attachmentMetadata !== null && attachmentMetadata !== void 0 ? attachmentMetadata : []);
11227
11671
  const submitEnabled = messageState === 'OK';
11228
11672
  const editContainerStyles = useChatMessageEditContainerStyles();
11229
11673
  const chatMyMessageStyles = useChatMyMessageStyles();
@@ -11250,7 +11694,7 @@ const ChatMessageComponentAsEditBox = (props) => {
11250
11694
  const editBoxStyles = React.useMemo(() => {
11251
11695
  return react.concatStyleSets(editBoxStyleSet, { textField: { borderColor: theme.palette.themePrimary } });
11252
11696
  }, [theme.palette.themePrimary]);
11253
- /* @conditional-compile-remove(file-sharing) */
11697
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
11254
11698
  const onRenderFileUploads = React.useCallback(() => {
11255
11699
  return (!!attachmentMetadata &&
11256
11700
  attachmentMetadata.length > 0 && (React.createElement("div", { style: { margin: '0.25rem' } },
@@ -11271,7 +11715,7 @@ const ChatMessageComponentAsEditBox = (props) => {
11271
11715
  }, onEnterKeyDown: () => {
11272
11716
  submitEnabled &&
11273
11717
  onSubmit(textValue, message.metadata,
11274
- /* @conditional-compile-remove(file-sharing) */ {
11718
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */ {
11275
11719
  attachmentMetadata
11276
11720
  });
11277
11721
  }, supportNewline: false, maxLength: MAXIMUM_LENGTH_OF_MESSAGE, errorMessage: textTooLongMessage, styles: editBoxStyles,
@@ -11288,12 +11732,12 @@ const ChatMessageComponentAsEditBox = (props) => {
11288
11732
  React.createElement(InputBoxButton, { className: editingButtonStyle, ariaLabel: strings.editBoxSubmitButton, tooltipContent: strings.editBoxSubmitButton, onRenderIcon: onRenderThemedSubmitIcon, onClick: (e) => {
11289
11733
  submitEnabled &&
11290
11734
  onSubmit(textValue, message.metadata,
11291
- /* @conditional-compile-remove(file-sharing) */ {
11735
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */ {
11292
11736
  attachmentMetadata
11293
11737
  });
11294
11738
  e.stopPropagation();
11295
- }, id: 'submitIconWrapper' }))), /* @conditional-compile-remove(file-sharing) */
11296
- onRenderFileUploads()));
11739
+ }, id: 'submitIconWrapper' }))),
11740
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */ onRenderFileUploads()));
11297
11741
  };
11298
11742
  const attached = message.attached === true ? 'center' : message.attached === 'bottom' ? 'bottom' : 'top';
11299
11743
  return (React.createElement(reactChat.ChatMyMessage, { attached: attached, root: {
@@ -11649,7 +12093,6 @@ var __awaiter$C = (window && window.__awaiter) || function (thisArg, _arguments,
11649
12093
  const attachmentDownloadCardsStyle = {
11650
12094
  marginTop: '0.25rem'
11651
12095
  };
11652
- const actionIconStyle = { height: '1rem' };
11653
12096
  /**
11654
12097
  * @internal
11655
12098
  */
@@ -11664,13 +12107,13 @@ const _AttachmentDownloadCards = (props) => {
11664
12107
  }, [(_a = props.strings) === null || _a === void 0 ? void 0 : _a.downloadAttachment, localeStrings.downloadAttachment]);
11665
12108
  const isShowDownloadIcon = React.useCallback((attachment) => {
11666
12109
  var _a;
11667
- /* @conditional-compile-remove(file-sharing) */
12110
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
11668
12111
  return ((_a = attachment.payload) === null || _a === void 0 ? void 0 : _a.teamsFileAttachment) !== 'true';
11669
12112
  }, []);
11670
12113
  const attachmentCardGroupDescription = React.useMemo(() => () => {
11671
12114
  var _a, _b, _c;
11672
12115
  const fileGroupLocaleString = (_b = (_a = props.strings) === null || _a === void 0 ? void 0 : _a.attachmentCardGroupMessage) !== null && _b !== void 0 ? _b : localeStrings.attachmentCardGroupMessage;
11673
- /* @conditional-compile-remove(file-sharing) */
12116
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
11674
12117
  return _formatString(fileGroupLocaleString, {
11675
12118
  attachmentCount: `${(_c = fileMetadata === null || fileMetadata === void 0 ? void 0 : fileMetadata.length) !== null && _c !== void 0 ? _c : 0}`
11676
12119
  });
@@ -11702,18 +12145,17 @@ const _AttachmentDownloadCards = (props) => {
11702
12145
  return (React.createElement("div", { style: attachmentDownloadCardsStyle, "data-ui-id": "file-download-card-group" },
11703
12146
  React.createElement(_AttachmentCardGroup, { ariaLabel: attachmentCardGroupDescription() }, fileMetadata &&
11704
12147
  fileMetadata.map((attachment) => (React.createElement(react.TooltipHost, { content: downloadAttachmentButtonString(), key: attachment.name },
11705
- React.createElement(_AttachmentCard, { attachmentName: attachment.name, key: attachment.name, attachmentExtension: attachment.extension, actionIcon: showSpinner ? (React.createElement(react.Spinner, { size: react.SpinnerSize.medium, "aria-live": 'polite', role: 'status' })) : isShowDownloadIcon(attachment) ? (React.createElement(react.IconButton, { className: iconButtonClassName, ariaLabel: downloadAttachmentButtonString() },
11706
- React.createElement(DownloadIconTrampoline, null))) : undefined, actionHandler: () => fileDownloadHandler(userId, attachment) })))))));
12148
+ React.createElement(_AttachmentCard, { attachmentName: attachment.name, key: attachment.name, attachmentExtension: attachment.extension, actionIcon: showSpinner ? (React.createElement(react.Spinner, { size: react.SpinnerSize.medium, "aria-live": 'polite', role: 'status' })) : isShowDownloadIcon(attachment) ? (React.createElement(DownloadIconTrampoline, null)) : (React.createElement(reactIcons.Open20Regular, null)), actionHandler: () => fileDownloadHandler(userId, attachment) })))))));
11707
12149
  };
11708
12150
  /**
11709
12151
  * @private
11710
12152
  */
11711
12153
  const DownloadIconTrampoline = () => {
11712
- // @conditional-compile-remove(file-sharing)
11713
- return React.createElement(react.Icon, { "data-ui-id": "file-download-card-download-icon", iconName: "DownloadFile", style: actionIconStyle });
12154
+ // @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload)
12155
+ return React.createElement(reactIcons.ArrowDownload20Regular, { "data-ui-id": 'file-download-card-download-icon' });
11714
12156
  };
11715
12157
  const useLocaleStringsTrampoline = () => {
11716
- /* @conditional-compile-remove(file-sharing) */
12158
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
11717
12159
  return useLocale$1().strings.messageThread;
11718
12160
  };
11719
12161
 
@@ -11810,11 +12252,11 @@ const getFluentUIAttachedValue = (messageAttachedStatus) => {
11810
12252
  * Get the message bubble content for the message.
11811
12253
  */
11812
12254
  function getMessageBubbleContent(message, strings, userId, inlineImageOptions,
11813
- /* @conditional-compile-remove(file-sharing) */
12255
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
11814
12256
  onRenderFileDownloads,
11815
12257
  /* @conditional-compile-remove(mention) */
11816
12258
  mentionDisplayOptions,
11817
- /* @conditional-compile-remove(file-sharing) */
12259
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
11818
12260
  fileDownloadHandler) {
11819
12261
  /* @conditional-compile-remove(data-loss-prevention) */
11820
12262
  if (message.messageType === 'blocked') {
@@ -11825,25 +12267,25 @@ fileDownloadHandler) {
11825
12267
  React.createElement(ChatMessageContent, { message: message, strings: strings,
11826
12268
  /* @conditional-compile-remove(mention) */
11827
12269
  mentionDisplayOptions: mentionDisplayOptions, inlineImageOptions: inlineImageOptions }),
11828
- /* @conditional-compile-remove(file-sharing) */ onRenderFileDownloads
12270
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */ onRenderFileDownloads
11829
12271
  ? onRenderFileDownloads(userId, message)
11830
12272
  : defaultOnRenderFileDownloads(userId, message, strings,
11831
- /* @conditional-compile-remove(file-sharing) */ fileDownloadHandler)));
12273
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */ fileDownloadHandler)));
11832
12274
  }
11833
12275
  /**
11834
12276
  * Default component for rendering file downloads.
11835
12277
  */
11836
- /* @conditional-compile-remove(file-sharing) */
12278
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
11837
12279
  const defaultOnRenderFileDownloads = (userId, message, strings,
11838
- /* @conditional-compile-remove(file-sharing) */
12280
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
11839
12281
  fileDownloadHandler) => {
11840
- /* @conditional-compile-remove(file-sharing) */
12282
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
11841
12283
  return (React.createElement(_AttachmentDownloadCards, { userId: userId,
11842
- /* @conditional-compile-remove(file-sharing) */
12284
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
11843
12285
  fileMetadata: message.files || [],
11844
- /* @conditional-compile-remove(file-sharing) */
12286
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
11845
12287
  downloadHandler: fileDownloadHandler,
11846
- /* @conditional-compile-remove(file-sharing) */
12288
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
11847
12289
  strings: {
11848
12290
  downloadAttachment: strings.downloadAttachment,
11849
12291
  attachmentCardGroupMessage: strings.attachmentCardGroupMessage
@@ -11887,9 +12329,9 @@ const MessageBubble$1 = (props) => {
11887
12329
  const theme = useTheme();
11888
12330
  const locale = useLocale$1();
11889
12331
  const { userId, message, onRemoveClick, onResendClick, disableEditing, showDate, messageContainerStyle, strings, onEditClick, remoteParticipantsCount = 0, onRenderAvatar, showMessageStatus, messageStatus,
11890
- /* @conditional-compile-remove(file-sharing) */
12332
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
11891
12333
  fileDownloadHandler, inlineImageOptions,
11892
- /* @conditional-compile-remove(file-sharing) */
12334
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
11893
12335
  onRenderFileDownloads,
11894
12336
  /* @conditional-compile-remove(mention) */
11895
12337
  mentionDisplayOptions, onDisplayDateTimeString } = props;
@@ -11945,18 +12387,18 @@ const MessageBubble$1 = (props) => {
11945
12387
  }, [message, messageStatus, strings.editedTag, strings.failToSendTag, theme]);
11946
12388
  const getContent = React.useCallback(() => {
11947
12389
  return getMessageBubbleContent(message, strings, userId, inlineImageOptions,
11948
- /* @conditional-compile-remove(file-sharing) */
12390
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
11949
12391
  onRenderFileDownloads,
11950
12392
  /* @conditional-compile-remove(mention) */
11951
12393
  mentionDisplayOptions,
11952
- /* @conditional-compile-remove(file-sharing) */
12394
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
11953
12395
  fileDownloadHandler);
11954
12396
  }, [
11955
- /* @conditional-compile-remove(file-sharing) */ fileDownloadHandler,
12397
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */ fileDownloadHandler,
11956
12398
  inlineImageOptions,
11957
12399
  /* @conditional-compile-remove(mention) */ mentionDisplayOptions,
11958
12400
  message,
11959
- /* @conditional-compile-remove(file-sharing) */ onRenderFileDownloads,
12401
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */ onRenderFileDownloads,
11960
12402
  strings,
11961
12403
  userId
11962
12404
  ]);
@@ -12095,30 +12537,32 @@ const FluentChatMyMessageComponent = (props) => {
12095
12537
  onDisplayDateTimeString, inlineImageOptions,
12096
12538
  /* @conditional-compile-remove(mention) */
12097
12539
  mentionOptions,
12098
- /* @conditional-compile-remove(file-sharing) */
12540
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
12099
12541
  fileDownloadHandler, userId,
12100
- /* @conditional-compile-remove(file-sharing) */
12542
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
12101
12543
  onRenderFileDownloads, defaultStatusRenderer, statusToRender } = props;
12102
12544
  const chatMessageRenderStyles = useChatMessageRenderStyles();
12103
12545
  const onRenderFileDownloadsMemo = React.useMemo(() => {
12104
- /* @conditional-compile-remove(file-sharing) */
12546
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
12105
12547
  return onRenderFileDownloads;
12106
- }, [/* @conditional-compile-remove(file-sharing) */ onRenderFileDownloads]);
12548
+ }, [
12549
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */ onRenderFileDownloads
12550
+ ]);
12107
12551
  // To rerender the defaultChatMessageRenderer if app running across days(every new day chat time stamp
12108
12552
  // needs to be regenerated), the dependency on "new Date().toDateString()"" is added.
12109
12553
  const defaultChatMessageRenderer = React.useCallback((messageProps) => {
12110
12554
  if (messageProps.message.messageType === 'chat' ||
12111
12555
  /* @conditional-compile-remove(data-loss-prevention) */ messageProps.message.messageType === 'blocked') {
12112
12556
  return (React.createElement(ChatMyMessageComponent, Object.assign({}, messageProps, {
12113
- /* @conditional-compile-remove(file-sharing) */
12557
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
12114
12558
  onRenderFileDownloads: onRenderFileDownloadsMemo,
12115
- /* @conditional-compile-remove(file-sharing) */
12559
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
12116
12560
  strings: messageProps.strings, message: messageProps.message, userId: userId, remoteParticipantsCount: participantCount ? participantCount - 1 : 0, shouldOverlapAvatarAndMessage: shouldOverlapAvatarAndMessage, onRenderAvatar: onRenderAvatar, showMessageStatus: showMessageStatus, messageStatus: messageProps.message.status, onActionButtonClick: onActionButtonClick,
12117
12561
  /* @conditional-compile-remove(date-time-customization) */
12118
12562
  onDisplayDateTimeString: onDisplayDateTimeString, inlineImageOptions: inlineImageOptions,
12119
12563
  /* @conditional-compile-remove(mention) */
12120
12564
  mentionOptions: mentionOptions,
12121
- /* @conditional-compile-remove(file-sharing) */
12565
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
12122
12566
  fileDownloadHandler: fileDownloadHandler })));
12123
12567
  }
12124
12568
  return React.createElement(React.Fragment, null);
@@ -12135,7 +12579,7 @@ const FluentChatMyMessageComponent = (props) => {
12135
12579
  inlineImageOptions,
12136
12580
  /* @conditional-compile-remove(mention) */
12137
12581
  mentionOptions,
12138
- /* @conditional-compile-remove(file-sharing) */
12582
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
12139
12583
  fileDownloadHandler,
12140
12584
  // eslint-disable-next-line react-hooks/exhaustive-deps
12141
12585
  new Date().toDateString()
@@ -12201,9 +12645,9 @@ const MessageBubble = (props) => {
12201
12645
  const theme = useTheme();
12202
12646
  const locale = useLocale$1();
12203
12647
  const { userId, message, showDate, messageContainerStyle, strings,
12204
- /* @conditional-compile-remove(file-sharing) */
12648
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
12205
12649
  fileDownloadHandler, inlineImageOptions, shouldOverlapAvatarAndMessage,
12206
- /* @conditional-compile-remove(file-sharing) */
12650
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
12207
12651
  onRenderFileDownloads,
12208
12652
  /* @conditional-compile-remove(mention) */
12209
12653
  mentionDisplayOptions, onDisplayDateTimeString } = props;
@@ -12221,18 +12665,18 @@ const MessageBubble = (props) => {
12221
12665
  }, [strings.editedTag, theme, message]);
12222
12666
  const getContent = React.useCallback(() => {
12223
12667
  return getMessageBubbleContent(message, strings, userId, inlineImageOptions,
12224
- /* @conditional-compile-remove(file-sharing) */
12668
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
12225
12669
  onRenderFileDownloads,
12226
12670
  /* @conditional-compile-remove(mention) */
12227
12671
  mentionDisplayOptions,
12228
- /* @conditional-compile-remove(file-sharing) */
12672
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
12229
12673
  fileDownloadHandler);
12230
12674
  }, [
12231
- /* @conditional-compile-remove(file-sharing) */ fileDownloadHandler,
12675
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */ fileDownloadHandler,
12232
12676
  inlineImageOptions,
12233
12677
  /* @conditional-compile-remove(mention) */ mentionDisplayOptions,
12234
12678
  message,
12235
- /* @conditional-compile-remove(file-sharing) */ onRenderFileDownloads,
12679
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */ onRenderFileDownloads,
12236
12680
  strings,
12237
12681
  userId
12238
12682
  ]);
@@ -12282,30 +12726,32 @@ const FluentChatMessageComponent = (props) => {
12282
12726
  const { message, styles, shouldOverlapAvatarAndMessage, onRenderMessage, onRenderAvatar,
12283
12727
  /* @conditional-compile-remove(date-time-customization) */
12284
12728
  onDisplayDateTimeString, inlineImageOptions,
12285
- /* @conditional-compile-remove(file-sharing) */
12729
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
12286
12730
  fileDownloadHandler, userId,
12287
- /* @conditional-compile-remove(file-sharing) */
12731
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
12288
12732
  onRenderFileDownloads,
12289
12733
  /* @conditional-compile-remove(mention) */
12290
12734
  mentionOptions } = props;
12291
12735
  const chatMessageRenderStyles = useChatMessageRenderStyles();
12292
12736
  const onRenderFileDownloadsMemo = React.useMemo(() => {
12293
- /* @conditional-compile-remove(file-sharing) */
12737
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
12294
12738
  return onRenderFileDownloads;
12295
- }, [/* @conditional-compile-remove(file-sharing) */ onRenderFileDownloads]);
12739
+ }, [
12740
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */ onRenderFileDownloads
12741
+ ]);
12296
12742
  // To rerender the defaultChatMessageRenderer if app running across days(every new day chat time stamp
12297
12743
  // needs to be regenerated), the dependency on "new Date().toDateString()"" is added.
12298
12744
  const defaultChatMessageRenderer = React.useCallback((messageProps) => {
12299
12745
  if (messageProps.message.messageType === 'chat' ||
12300
12746
  /* @conditional-compile-remove(data-loss-prevention) */ messageProps.message.messageType === 'blocked') {
12301
12747
  return (React.createElement(ChatMessageComponentAsMessageBubble, Object.assign({}, messageProps, {
12302
- /* @conditional-compile-remove(file-sharing) */
12748
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
12303
12749
  onRenderFileDownloads: onRenderFileDownloadsMemo,
12304
- /* @conditional-compile-remove(file-sharing) */
12750
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
12305
12751
  strings: messageProps.strings, message: messageProps.message, userId: userId, shouldOverlapAvatarAndMessage: shouldOverlapAvatarAndMessage,
12306
12752
  /* @conditional-compile-remove(date-time-customization) */
12307
12753
  onDisplayDateTimeString: onDisplayDateTimeString, inlineImageOptions: inlineImageOptions,
12308
- /* @conditional-compile-remove(file-sharing) */
12754
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
12309
12755
  fileDownloadHandler: fileDownloadHandler,
12310
12756
  /* @conditional-compile-remove(mention) */
12311
12757
  mentionDisplayOptions: mentionOptions === null || mentionOptions === void 0 ? void 0 : mentionOptions.displayOptions })));
@@ -12318,7 +12764,7 @@ const FluentChatMessageComponent = (props) => {
12318
12764
  /* @conditional-compile-remove(date-time-customization) */
12319
12765
  onDisplayDateTimeString,
12320
12766
  inlineImageOptions,
12321
- /* @conditional-compile-remove(file-sharing) */
12767
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
12322
12768
  fileDownloadHandler,
12323
12769
  /* @conditional-compile-remove(mention) */
12324
12770
  mentionOptions,
@@ -12592,7 +13038,7 @@ const MessageThreadWrapper = (props) => {
12592
13038
  onDisplayDateTimeString,
12593
13039
  /* @conditional-compile-remove(mention) */
12594
13040
  mentionOptions, inlineImageOptions,
12595
- /* @conditional-compile-remove(file-sharing) */
13041
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
12596
13042
  onRenderFileDownloads } = props;
12597
13043
  // We need this state to wait for one tick and scroll to bottom after messages have been initialized.
12598
13044
  // Otherwise chatScrollDivRef.current.clientHeight is wrong if we scroll to bottom before messages are initialized.
@@ -12920,22 +13366,23 @@ const MessageThreadWrapper = (props) => {
12920
13366
  existsNewChatMessage && !disableJumpToNewMessageButton && (React.createElement("div", { className: react.mergeStyles(newMessageButtonContainerStyle, styles === null || styles === void 0 ? void 0 : styles.newMessageButtonContainer) }, onRenderJumpToNewMessageButton ? (onRenderJumpToNewMessageButton({ text: strings.newMessagesIndicator, onClick: scrollToBottom })) : (React.createElement(DefaultJumpToNewMessageButton, { text: strings.newMessagesIndicator, onClick: scrollToBottom })))),
12921
13367
  React.createElement(LiveAnnouncer, null,
12922
13368
  React.createElement(FluentV9ThemeProvider, { v8Theme: theme },
12923
- latestDeletedMessageId && (React.createElement(Announcer$1, { key: latestDeletedMessageId, announcementString: deletedMessageAriaLabel, ariaLive: 'assertive' })),
12924
13369
  React.createElement(reactChat.Chat
12925
13370
  // styles?.chatContainer used in className and style prop as style prop can't handle CSS selectors
12926
13371
  , {
12927
13372
  // styles?.chatContainer used in className and style prop as style prop can't handle CSS selectors
12928
- className: reactComponents.mergeClasses(classes.root, react.mergeStyles(styles === null || styles === void 0 ? void 0 : styles.chatContainer)), ref: chatScrollDivRef, style: Object.assign({}, createStyleFromV8Style(styles === null || styles === void 0 ? void 0 : styles.chatContainer)) }, messagesToDisplay.map((message) => {
12929
- return (React.createElement(MemoChatMessageComponentWrapper, Object.assign({}, message, { userId: userId, key: message.key, styles: styles, shouldOverlapAvatarAndMessage: isNarrow, strings: strings, onRenderAvatar: onRenderAvatar, onRenderMessage: onRenderMessage, onRenderMessageStatus: onRenderMessageStatus, defaultStatusRenderer: defaultStatusRenderer, onActionButtonClick: onActionButtonClickMemo, readCount: readCountForHoveredIndicator, participantCount: participantCount,
12930
- /* @conditional-compile-remove(file-sharing) */
12931
- fileDownloadHandler: props.fileDownloadHandler, inlineImageOptions: inlineImageOptions,
12932
- /* @conditional-compile-remove(date-time-customization) */
12933
- onDisplayDateTimeString: onDisplayDateTimeString,
12934
- /* @conditional-compile-remove(mention) */
12935
- mentionOptions: mentionOptions,
12936
- /* @conditional-compile-remove(file-sharing) */
12937
- onRenderFileDownloads: onRenderFileDownloads })));
12938
- }))))));
13373
+ className: reactComponents.mergeClasses(classes.root, react.mergeStyles(styles === null || styles === void 0 ? void 0 : styles.chatContainer)), ref: chatScrollDivRef, style: Object.assign({}, createStyleFromV8Style(styles === null || styles === void 0 ? void 0 : styles.chatContainer)) },
13374
+ latestDeletedMessageId && (React.createElement(Announcer$1, { key: latestDeletedMessageId, announcementString: deletedMessageAriaLabel, ariaLive: 'polite' })),
13375
+ messagesToDisplay.map((message) => {
13376
+ return (React.createElement(MemoChatMessageComponentWrapper, Object.assign({}, message, { userId: userId, key: message.key, styles: styles, shouldOverlapAvatarAndMessage: isNarrow, strings: strings, onRenderAvatar: onRenderAvatar, onRenderMessage: onRenderMessage, onRenderMessageStatus: onRenderMessageStatus, defaultStatusRenderer: defaultStatusRenderer, onActionButtonClick: onActionButtonClickMemo, readCount: readCountForHoveredIndicator, participantCount: participantCount,
13377
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
13378
+ fileDownloadHandler: props.fileDownloadHandler, inlineImageOptions: inlineImageOptions,
13379
+ /* @conditional-compile-remove(date-time-customization) */
13380
+ onDisplayDateTimeString: onDisplayDateTimeString,
13381
+ /* @conditional-compile-remove(mention) */
13382
+ mentionOptions: mentionOptions,
13383
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
13384
+ onRenderFileDownloads: onRenderFileDownloads })));
13385
+ }))))));
12939
13386
  };
12940
13387
  const MemoChatMessageComponentWrapper = React.memo((obj) => {
12941
13388
  return React.createElement(ChatMessageComponentWrapper, Object.assign({}, obj));
@@ -16751,7 +17198,7 @@ const OverflowGallery = (props) => {
16751
17198
  */
16752
17199
  const DefaultLayout = (props) => {
16753
17200
  const { remoteParticipants = [], localParticipant, dominantSpeakers, localVideoComponent, screenShareComponent, onRenderRemoteParticipant, styles, maxRemoteVideoStreams, parentWidth, parentHeight, pinnedParticipantUserIds = [], overflowGalleryPosition = 'horizontalBottom',
16754
- /* @conditional-compile-remove(spotlight) */ spotlightedParticipantUserIds } = props;
17201
+ /* @conditional-compile-remove(spotlight) */ spotlightedParticipantUserIds = [] } = props;
16755
17202
  const isNarrow = parentWidth ? isNarrowWidth(parentWidth) : false;
16756
17203
  const isShort = parentHeight ? isShortHeight(parentHeight) : false;
16757
17204
  // This is for tracking the number of children in the first page of overflow gallery.
@@ -16793,7 +17240,7 @@ const DefaultLayout = (props) => {
16793
17240
  : (_b = p.videoStream) === null || _b === void 0 ? void 0 : _b.isAvailable);
16794
17241
  });
16795
17242
  if (localVideoComponent) {
16796
- if (screenShareComponent) {
17243
+ if (screenShareComponent || /* @conditional-compile-remove(spotlight) */ spotlightedParticipantUserIds.length > 0) {
16797
17244
  overflowGalleryTiles = [localVideoComponent].concat(overflowGalleryTiles);
16798
17245
  }
16799
17246
  else {
@@ -17827,7 +18274,8 @@ const LARGE_GALLERY_PARTICIPANT_CAP = 48;
17827
18274
  * @private
17828
18275
  */
17829
18276
  const LargeGalleryLayout = (props) => {
17830
- const { remoteParticipants = [], localParticipant, dominantSpeakers, localVideoComponent, screenShareComponent, onRenderRemoteParticipant, styles, maxRemoteVideoStreams, parentWidth, parentHeight, pinnedParticipantUserIds = [], overflowGalleryPosition = 'horizontalBottom' } = props;
18277
+ const { remoteParticipants = [], localParticipant, dominantSpeakers, localVideoComponent, screenShareComponent, onRenderRemoteParticipant, styles, maxRemoteVideoStreams, parentWidth, parentHeight, pinnedParticipantUserIds = [], overflowGalleryPosition = 'horizontalBottom',
18278
+ /* @conditional-compile-remove(spotlight) */ spotlightedParticipantUserIds = [] } = props;
17831
18279
  const isNarrow = parentWidth ? isNarrowWidth(parentWidth) : false;
17832
18280
  const isShort = parentHeight ? isShortHeight(parentHeight) : false;
17833
18281
  const maxStreamsTrampoline = () => {
@@ -17849,7 +18297,8 @@ const LargeGalleryLayout = (props) => {
17849
18297
  ? childrenPerPage.current - ((pinnedParticipantUserIds.length + 1) % childrenPerPage.current)
17850
18298
  : childrenPerPage.current,
17851
18299
  pinnedParticipantUserIds,
17852
- /* @conditional-compile-remove(large-gallery) */ layout: 'largeGallery'
18300
+ /* @conditional-compile-remove(large-gallery) */ layout: 'largeGallery',
18301
+ /* @conditional-compile-remove(spotlight) */ spotlightedParticipantUserIds
17853
18302
  });
17854
18303
  let activeVideoStreams = 0;
17855
18304
  let gridTiles = gridParticipants.map((p) => {
@@ -17873,7 +18322,7 @@ const LargeGalleryLayout = (props) => {
17873
18322
  : (_b = p.videoStream) === null || _b === void 0 ? void 0 : _b.isAvailable);
17874
18323
  });
17875
18324
  if (localVideoComponent) {
17876
- if (screenShareComponent) {
18325
+ if (screenShareComponent || /* @conditional-compile-remove(spotlight) */ spotlightedParticipantUserIds.length > 0) {
17877
18326
  overflowGalleryTiles = [localVideoComponent].concat(overflowGalleryTiles);
17878
18327
  }
17879
18328
  else {
@@ -20129,8 +20578,8 @@ const DialpadButton = (props) => {
20129
20578
  const DialpadContainer = (props) => {
20130
20579
  var _a, _b;
20131
20580
  const theme = react.useTheme();
20132
- const { onSendDtmfTone, onClickDialpadButton, textFieldValue, onChange, showDeleteButton = true, longPressTrigger = 'mouseAndTouch', disableDtmfPlayback, dialpadMode = 'dialer' } = props;
20133
- const dtmfToneAudioContext = React.useRef(new AudioContext());
20581
+ const { onSendDtmfTone, onClickDialpadButton, textFieldValue, onChange, showDeleteButton = true, longPressTrigger = 'mouseAndTouch', disableDtmfPlayback, dialpadMode = 'dialer', dtmfAudioContext } = props;
20582
+ const dtmfToneAudioContext = React.useRef(dtmfAudioContext ? dtmfAudioContext : new AudioContext());
20134
20583
  const [plainTextValue, setPlainTextValue] = React.useState(textFieldValue !== null && textFieldValue !== void 0 ? textFieldValue : '');
20135
20584
  const plainTextValuePreviousRenderValue = React.useRef(plainTextValue);
20136
20585
  React.useEffect(() => {
@@ -22786,7 +23235,7 @@ const memoizedAllConvertChatMessage = memoizeFnAll((_key, chatMessage, userId, i
22786
23235
  return convertToUiSystemMessage(chatMessage);
22787
23236
  }
22788
23237
  });
22789
- /* @conditional-compile-remove(file-sharing) */
23238
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
22790
23239
  const extractAttachedFilesMetadata = (metadata) => {
22791
23240
  const fileMetadata = metadata.fileSharingMetadata;
22792
23241
  if (!fileMetadata) {
@@ -22800,7 +23249,7 @@ const extractAttachedFilesMetadata = (metadata) => {
22800
23249
  return [];
22801
23250
  }
22802
23251
  };
22803
- /* @conditional-compile-remove(file-sharing) */
23252
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
22804
23253
  const extractTeamsAttachmentsMetadata = (attachments) => {
22805
23254
  const files = [];
22806
23255
  attachments.forEach((attachment) => {
@@ -22837,7 +23286,7 @@ const convertToUiBlockedMessage = (message, userId, isSeen, isLargeGroup) => {
22837
23286
  link: DEFAULT_DATA_LOSS_PREVENTION_POLICY_URL
22838
23287
  };
22839
23288
  };
22840
- /* @conditional-compile-remove(file-sharing) */
23289
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
22841
23290
  const extractAttachmentUrl = (attachment) => {
22842
23291
  return attachment.previewUrl ? attachment.previewUrl : attachment.url || '';
22843
23292
  };
@@ -22910,7 +23359,7 @@ const extractAttachmentContentTypeFromName = (name) => {
22910
23359
  const contentType = name.substring(indexOfLastDot + 1);
22911
23360
  return contentType;
22912
23361
  };
22913
- /* @conditional-compile-remove(file-sharing) */
23362
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
22914
23363
  const extractAttachmentsMetadata = (message) => {
22915
23364
  var _a, _b;
22916
23365
  let files = [];
@@ -22925,7 +23374,7 @@ const extractAttachmentsMetadata = (message) => {
22925
23374
  };
22926
23375
  const convertToUiChatMessage = (message, userId, isSeen, isLargeGroup) => {
22927
23376
  const messageSenderId = message.sender !== undefined ? toFlatCommunicationIdentifier(message.sender) : userId;
22928
- /* @conditional-compile-remove(file-sharing) */
23377
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
22929
23378
  const { files } = extractAttachmentsMetadata(message);
22930
23379
  return {
22931
23380
  messageType: 'chat',
@@ -22941,7 +23390,7 @@ const convertToUiChatMessage = (message, userId, isSeen, isLargeGroup) => {
22941
23390
  deletedOn: message.deletedOn,
22942
23391
  mine: messageSenderId === userId,
22943
23392
  metadata: message.metadata,
22944
- /* @conditional-compile-remove(file-sharing) */
23393
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
22945
23394
  files
22946
23395
  };
22947
23396
  };
@@ -24683,7 +25132,7 @@ const COMPOSITE_ONLY_ICONS = {
24683
25132
  NoticePageRoomNotValid: React.createElement(reactIcons.Info20Filled, null),
24684
25133
  NoticePageCallRejected: React.createElement(reactIcons.Info20Filled, null),
24685
25134
  NoticePageCallTimeout: React.createElement(reactIcons.Info20Filled, null),
24686
- /* @conditional-compile-remove(file-sharing) */
25135
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
24687
25136
  SendBoxAttachFile: React.createElement(reactIcons.Attach20Regular, null),
24688
25137
  /* @conditional-compile-remove(PSTN-calls) */
24689
25138
  PeoplePaneAddPerson: React.createElement(reactIcons.PersonAdd20Regular, null),
@@ -24739,7 +25188,7 @@ const CallCompositeIcon = (props) => (React.createElement(react.FontIcon, Object
24739
25188
  */
24740
25189
  const CallWithChatCompositeIcon = (props) => (React.createElement(react.FontIcon, Object.assign({}, props)));
24741
25190
 
24742
- var call$k={cameraLabel:"Camera",noCamerasLabel:"No cameras found",cameraPermissionDenied:"Your browser is blocking access to your camera",cameraTurnedOff:"Your camera is turned off",chatButtonLabel:"Chat",close:"Close",complianceBannerNowOnlyRecording:"You are now only recording this meeting.",complianceBannerNowOnlyTranscription:"You are now only transcribing this meeting.",complianceBannerRecordingAndTranscriptionSaved:"Recording and transcription are being saved.",complianceBannerRecordingAndTranscriptionStarted:"Recording and transcription have started.",complianceBannerRecordingAndTranscriptionStopped:"Recording and transcription have stopped.",complianceBannerRecordingSaving:"Recording is being saved.",complianceBannerRecordingStarted:"Recording has started.",complianceBannerRecordingStopped:"Recording has stopped.",complianceBannerTranscriptionStarted:"Transcription has started.",complianceBannerTranscriptionConsent:"By joining, you are giving consent for this meeting to be transcribed.",complianceBannerTranscriptionSaving:"Transcription is being saved.",complianceBannerTranscriptionStopped:"Transcription has stopped.",configurationPageTitle:"Start a call",copyInviteLinkButtonLabel:"Copy invite link",copyInviteLinkActionedAriaLabel:"Invite link copied",defaultPlaceHolder:"Select an option",dismissSidePaneButtonLabel:"Close",videoEffectsPaneTitle:"Effects",videoEffectsPaneBackgroundSelectionTitle:"Background",configurationPageVideoEffectsButtonLabel:"Effects",unableToStartVideoEffect:"Unable to apply video effect.",blurBackgroundEffectButtonLabel:"Blur",blurBackgroundTooltip:"Blur Background",removeBackgroundEffectButtonLabel:"None",removeBackgroundTooltip:"Remove Background",cameraOffBackgroundEffectWarningText:"Your camera is off. Turn on camera to see video effect.",failedToJoinCallDueToNoNetworkMoreDetails:"Call was disconnected due to a network issue. Check your connection and join again.",failedToJoinCallDueToNoNetworkTitle:"Call disconnected",failedToJoinTeamsMeetingReasonAccessDeniedMoreDetails:"You were not granted entry in the call. If this was a mistake, re-join the call.",failedToJoinTeamsMeetingReasonAccessDeniedTitle:"Dismissed from lobby",learnMore:"Learn more",leavingCallTitle:"Leaving...",leftCallMoreDetails:"If this was a mistake, re-join the call.",leftCallTitle:"You left the call",lobbyScreenConnectingToCallTitle:"Joining call",lobbyScreenWaitingToBeAdmittedTitle:"Waiting to be admitted",microphonePermissionDenied:"Your browser is blocking access to your microphone",microphoneToggleInLobbyNotAllowed:"Cannot mute or unmute while in lobby.",mutedMessage:"You're muted",networkReconnectMoreDetails:"Looks like something went wrong. We're trying to get back into the call.",networkReconnectTitle:"Hold on",notInvitedToRoomDetails:"You are not able to join this room because you do not have an invite.",notInvitedToRoomTitle:"Not invited to room",peopleButtonLabel:"People",selectedPeopleButtonLabel:"People Button Selected",peoplePaneTitle:"People",peoplePaneMoreButtonAriaLabel:"More",peopleButtonTooltipOpen:"Show participants",peopleButtonTooltipClose:"Hide participants",peoplePaneSubTitle:"In this call {numberOfPeople}",privacyPolicy:"Privacy policy",rejoinCallButtonLabel:"Re-join call",removedFromCallMoreDetails:"Another participant removed you from the call.",removedFromCallTitle:"You were removed",removeMenuLabel:"Remove",startSpotlightMenuLabel:"Spotlight for everyone",addSpotlightMenuLabel:"Add spotlight",stopSpotlightMenuLabel:"Stop spotlighting",stopSpotlightOnSelfMenuLabel:"Exit spotlight",spotlightLimitReachedMenuTitle:"Spotlight limit reached",stopAllSpotlightMenuLabel:"Stop all spotlights",returnToCallButtonAriaDescription:"Return to Call",returnToCallButtonAriaLabel:"Back",roomNotFoundDetails:"The room ID provided could not be found.",roomNotFoundTitle:"Room not found",roomNotValidDetails:"This room is not valid at this current time.",roomNotValidTitle:"Room not valid",inviteToRoomRemovedDetails:"Your invite to join this room was removed.",inviteToRoomRemovedTitle:"Invite to room removed",soundLabel:"Sound",noMicrophonesLabel:"No microphones found",noSpeakersLabel:"No speakers found",startCallButtonLabel:"Start call",openDialpadButtonLabel:"Dial phone number",peoplePaneAddPeopleButtonLabel:"Add People",dialpadStartCallButtonLabel:"Call",dialpadModalTitle:"Dial Phone Number",dialpadModalAriaLabel:"Dialpad",dialpadCloseModalButtonAriaLabel:"Close dialpad",moreButtonCallingLabel:"More",resumeCallButtonLabel:"Resume",resumingCallButtonLabel:"Resuming...",resumeCallButtonAriaLabel:"Resume call",resumingCallButtonAriaLabel:"Resume call",holdScreenLabel:"You're on hold",openDtmfDialpadLabel:"Show dialpad",dtmfDialpadPlaceholderText:"Enter number",outboundCallingNoticeString:"Calling...",participantJoinedNoticeString:"{displayName} joined",twoParticipantJoinedNoticeString:"{displayName1} and {displayName2} have joined",threeParticipantJoinedNoticeString:"{displayName1}, {displayName2} and {displayName3} have joined",participantLeftNoticeString:"{displayName} left",twoParticipantLeftNoticeString:"{displayName1} and {displayName2} have left",threeParticipantLeftNoticeString:"{displayName1}, {displayName2} and {displayName3} have left",unnamedParticipantString:"unnamed participant",manyUnnamedParticipantsJoined:"unnamed participant and {numOfParticipants} other participants joined",manyUnnamedParticipantsLeft:"unnamed participant and {numOfParticipants} other participants left",manyParticipantsJoined:"{displayName1}, {displayName2}, {displayName3} and {numOfParticipants} other participants joined",manyParticipantsLeft:"{displayName1}, {displayName2}, {displayName3} and {numOfParticipants} other participants left",liveCaptionsLabel:"Live captions",captionsSettingsLabel:"Caption settings",startCaptionsButtonOnLabel:"Turn on captions",startCaptionsButtonOffLabel:"Turn off captions",startCaptionsButtonTooltipOnContent:"Turn off captions",startCaptionsButtonTooltipOffContent:"Turn on captions",captionsSettingsModalTitle:"Captions Settings",captionsSettingsSpokenLanguageDropdownLabel:"Spoken language",captionsSettingsCaptionLanguageDropdownLabel:"Captions language",captionsSettingsSpokenLanguageDropdownInfoText:"Language that everyone on this call is speaking.",captionsSettingsCaptionLanguageDropdownInfoText:"Captions will appear in this langugage.",captionsSettingsConfirmButtonLabel:"Confirm",captionsSettingsCancelButtonLabel:"Cancel",captionsSettingsModalAriaLabel:"Captions Setting Modal",captionsSettingsCloseModalButtonAriaLabel:"Close Captions Setting",captionsBannerMoreButtonCallingLabel:"More",captionsBannerMoreButtonTooltip:"More options",dismissModalAriaLabel:"Local and remote picture and picture, press enter to return to call",callRejectedTitle:"The call could not be completed",callRejectedMoreDetails:"The person you are trying to reach is unavailable. Please try again later.",callTimeoutTitle:"The call could not be completed",callTimeoutDetails:"The person you are trying to reach is unavailable. Please try again later.",callTimeoutBotTitle:"The call could not be completed",callTimeoutBotDetails:"The service that you are trying to reach is unavailable. Please try again later.",dtmfDialerButtonLabel:"Dialpad",dtmfDialerButtonTooltipOn:"Show dialpad",dtmfDialerButtonTooltipOff:"Hide dialpad",dtmfDialerMoreButtonLabelOn:"Show dialpad",dtmfDialerMoreButtonLabelOff:"Hide dialpad",spokenLanguageStrings:{"ar-ae":"Arabic - U.A.E.","ar-sa":"Arabic - Saudi Arabia","da-dk":"Danish","de-de":"German - Germany","en-au":"English - Australia","en-ca":"English - Canada","en-gb":"English - United Kingdom","en-in":"English - India","en-nz":"English - New Zealand","en-us":"English - United States","es-es":"Spanish - Spain (Modern Sort)","es-mx":"Spanish - Mexico","fi-fi":"Finnish","fr-ca":"French - Canada","fr-fr":"French - France","hi-in":"Hindi","it-it":"Italian - Italy","ja-jp":"Japanese","ko-kr":"Korean","nb-no":"Norwegian (Bokmål)","nl-be":"Dutch - Belgium","nl-nl":"Dutch - Netherlands","pl-pl":"Polish","pt-br":"Portuguese - Brazil","ru-ru":"Russian","sv-se":"Swedish","zh-cn":"Chinese - People's Republic of China","zh-hk":"Chinese - Hong Kong SAR","cs-cz":"Czech","pt-pt":"Portuguese - Portugal","tr-tr":"Turkish","vi-vn":"Vietnamese","th-th":"Thai","he-il":"Hebrew","cy-gb":"Welsh","uk-ua":"Ukrainian","el-gr":"Greek","hu-hu":"Hungarian","ro-ro":"Romanian","sk-sk":"Slovak","zh-tw":"Chinese - Taiwan"},captionLanguageStrings:{ar:"Arabic",da:"Danish",de:"German",en:"English",es:"Spanish",fi:"Finnish","fr-ca":"French - Canada",fr:"French - France",hi:"Hindi",it:"Italian",ja:"Japanese",ko:"Korean",nb:"Norwegian (Bokmål)",nl:"Dutch",pl:"Polish",pt:"Portuguese - Brazil",ru:"Russian",sv:"Swedish","zh-Hans":"Chinese (Simplified)","zh-Hant":"Chinese (Traditional)",cs:"Czech","pt-pt":"Portuguese - Portugal",tr:"Turkish",vi:"Vietnamese",th:"Thai",he:"Hebrew",cy:"Welsh",uk:"Ukrainian",el:"Greek",hu:"Hungarian",ro:"Romanian",sk:"Slovak"},captionsBannerSpinnerText:"Starting captions...",transferPageTransferorText:"Transferring...",transferPageTransferTargetText:"Connecting...",transferPageUnknownTransferorDisplayName:"Unknown",transferPageUnknownTransferTargetDisplayName:"Unknown",transferPageNoticeString:"You are being transferred",participantCouldNotBeReachedTitle:"Target participant is currently not available",participantCouldNotBeReachedMoreDetails:"Please contact participant when they are available",permissionToReachTargetParticipantNotAllowedTitle:"Permission to reach target participant is not allowed",permissionToReachTargetParticipantNotAllowedMoreDetails:"Please check that the target participant is in the same tenant",unableToResolveTenantTitle:"Unable to resolve tenant id for the target participant",unableToResolveTenantMoreDetails:"Please check the participant id is entered correctly",participantIdIsMalformedTitle:"Participant id is not in the correct format",participantIdIsMalformedMoreDetails:"Please check that the participant id is in the correct format",moreButtonGalleryControlLabel:"View",moreButtonGalleryPositionToggleLabel:"Move gallery to top",moreButtonGallerySpeakerLayoutLabel:"Speaker",moreButtonGalleryFloatingLocalLayoutLabel:"Dynamic",moreButtonGalleryDefaultLayoutLabel:"Gallery view",moreButtonGalleryFocusedContentLayoutLabel:"Focus on content",moreButtonLargeGalleryDefaultLayoutLabel:"Large Gallery",capabilityChangedNotification:{turnVideoOn:{lostDueToMeetingOption:"Your camera has been disabled. You can no longer share video.",grantedDueToMeetingOption:"Your camera has been enabled. Turn it on if you'd like to share video."},unmuteMic:{lostDueToMeetingOption:"Your mic has been disabled. You can no longer unmute.",grantedDueToMeetingOption:"Your mic has been enabled. Unmute if you'd like to speak."},shareScreen:{lostDueToRoleChangeToAttendee:"Your role has been changed. Some actions, like sharing content, won't be available to you.",grantedDueToRoleChangeToPresenter:"You're a presenter. You can share content and facilitate the meeting."}},surveyTitle:"Help us improve",starSurveyHelperText:"How was the quality of the call?",starSurveyOneStarText:"The quality was bad.",starSurveyTwoStarText:"The quality was poor.",starSurveyThreeStarText:"The quality was good.",starSurveyFourStarText:"The quality was great.",starSurveyFiveStarText:"The quality was excellent.",surveyConfirmButtonLabel:"Send Feedback",starRatingAriaLabel:"Select {0} of {1} stars",surveySkipButtonLabel:"Skip",tagsSurveyQuestion:"What could have been better?",tagsSurveyTextFieldDefaultText:"Other, please specify",tagsSurveyHelperText:"Check any issues you experienced",surveyTextboxDefaultText:"Other, please specify",endOfSurveyText:"Thank you for your feedback!",surveyIssues:{overallRating:{callCannotJoin:"I could not join call",callCannotInvite:"I could not invite others into the call",hadToRejoin:"I had to rejoin the call",callEndedUnexpectedly:"Call ended for me unexpectedly",otherIssues:"I was having other issues with the call"},audioRating:{noLocalAudio:"The other side could not hear any sound",noRemoteAudio:"I could not hear any sound",echo:"I heard echos on the call",audioNoise:"I heard noise on the call",lowVolume:"Volume was low",audioStoppedUnexpectedly:"Audio stopped unexpectedly",distortedSpeech:"Audio was distorted",audioInterruption:"Audio was interrupted",otherIssues:"I was having other audio issues in this call"},videoRating:{noVideoReceived:"I could not see any video",noVideoSent:"Others could not see me",lowQuality:"Video quality was low",freezes:"Video frozen",stoppedUnexpectedly:"Video stopped unexpectedly",darkVideoReceived:"I can only see dark screens when others turn on their camera",audioVideoOutOfSync:"Audio and Video was out of sync",otherIssues:"I was having other video issues in this call"},screenshareRating:{noContentLocal:"Other people could not see my screenshare",noContentRemote:"I could not see other people's screenshare",cannotPresent:"I could not present my screen",lowQuality:"Screen share quality was low",freezes:"Screen share frozen",stoppedUnexpectedly:"Screen share stopped unexpectedly",largeDelay:"Screen share has a large delay",otherIssues:"I was having other screen share issues in this call"}},SurveyIssuesHeadingStrings:{overallRating:"Overall",audioRating:"Audio",videoRating:"Video",screenshareRating:"Presenting"},spotlightPrompt:{startSpotlightHeading:"Spotlight for everyone?",startSpotlightText:"You'll highlight this video for everyone in the meeting.",startSpotlightOnSelfText:"You'll highlight your video for everyone in the meeting.",startSpotlightConfirmButtonLabel:"Spotlight for everyone",startSpotlightCancelButtonLabel:"Cancel",stopSpotlightHeading:"Stop spotlighting this video?",stopSpotlightOnSelfHeading:"Exit spotlight?",stopAllSpotlightHeading:"Stop spotlighting all videos?",stopSpotlightText:"This video will no longer be highlighted for everyone in the meeting.",stopSpotlightOnSelfText:"Your video will no longer be highlighted for everyone in the meeting.",stopAllSpotlightText:"The videos will no longer be highlighted for everyone in the meeting.",stopSpotlightConfirmButtonLabel:"Stop spotlighting",stopSpotlightOnSelfConfirmButtonLabel:"Exit spotlight",stopSpotlightCancelButtonLabel:"Cancel"},exitSpotlightButtonLabel:"Exit spotlight",exitSpotlightButtonTooltip:"Exit spotlight"};var chat$k={chatListHeader:"In this chat",uploadFile:"Upload File"};var callWithChat$k={chatButtonLabel:"Chat",chatButtonNewMessageNotificationLabel:"New Message",chatButtonTooltipClosedWithMessageCount:"Show chat ({unreadMessagesCount} unread)",chatButtonTooltipClose:"Hide chat",chatButtonTooltipOpen:"Show chat",chatPaneTitle:"Chat",copyInviteLinkButtonLabel:"Copy invite link",copyInviteLinkActionedAriaLabel:"Invite link copied",dismissSidePaneButtonLabel:"Close",moreDrawerAudioDeviceMenuTitle:"Audio Device",moreDrawerButtonLabel:"More options",moreDrawerButtonTooltip:"More options",moreDrawerMicrophoneMenuTitle:"Microphone",moreDrawerSpeakerMenuTitle:"Speaker",moreDrawerCaptionsMenuTitle:"Live captions",moreDrawerSpokenLanguageMenuTitle:"Spoken language",moreDrawerCaptionLanguageMenuTitle:"Caption language",moreDrawerGalleryOptionsMenuTitle:"Gallery options",peopleButtonLabel:"People",selectedPeopleButtonLabel:"People Button Selected",peopleButtonTooltipOpen:"Show participants",peopleButtonTooltipClose:"Hide participants",peoplePaneSubTitle:"In this call",peoplePaneTitle:"People",pictureInPictureTileAriaLabel:"Video Feeds. Click to return to call screen.",removeMenuLabel:"Remove",openDialpadButtonLabel:"Dial phone number",returnToCallButtonAriaDescription:"Return to Call",returnToCallButtonAriaLabel:"Back",peoplePaneAddPeopleButtonLabel:"Add People",dialpadStartCallButtonLabel:"Call",dialpadModalTitle:"Dial Phone Number",dialpadModalAriaLabel:"Dialpad",dialpadCloseModalButtonAriaLabel:"Close dialpad",openDtmfDialpadLabel:"Show dialpad",dtmfDialpadPlaceholderText:"Enter number"};var en_US = {call:call$k,chat:chat$k,callWithChat:callWithChat$k};
25191
+ var call$k={cameraLabel:"Camera",noCamerasLabel:"No cameras found",cameraPermissionDenied:"Your browser is blocking access to your camera",cameraTurnedOff:"Your camera is turned off",chatButtonLabel:"Chat",close:"Close",complianceBannerNowOnlyRecording:"You are now only recording this meeting.",complianceBannerNowOnlyTranscription:"You are now only transcribing this meeting.",complianceBannerRecordingAndTranscriptionSaved:"Recording and transcription are being saved.",complianceBannerRecordingAndTranscriptionStarted:"Recording and transcription have started.",complianceBannerRecordingAndTranscriptionStopped:"Recording and transcription have stopped.",complianceBannerRecordingSaving:"Recording is being saved.",complianceBannerRecordingStarted:"Recording has started.",complianceBannerRecordingStopped:"Recording has stopped.",complianceBannerTranscriptionStarted:"Transcription has started.",complianceBannerTranscriptionConsent:"By joining, you are giving consent for this meeting to be transcribed.",complianceBannerTranscriptionSaving:"Transcription is being saved.",complianceBannerTranscriptionStopped:"Transcription has stopped.",configurationPageTitle:"Start a call",copyInviteLinkButtonLabel:"Copy invite link",copyInviteLinkActionedAriaLabel:"Invite link copied",defaultPlaceHolder:"Select an option",dismissSidePaneButtonLabel:"Close",videoEffectsPaneTitle:"Effects",videoEffectsPaneBackgroundSelectionTitle:"Background",configurationPageVideoEffectsButtonLabel:"Effects",unableToStartVideoEffect:"Unable to apply video effect.",blurBackgroundEffectButtonLabel:"Blur",blurBackgroundTooltip:"Blur Background",removeBackgroundEffectButtonLabel:"None",removeBackgroundTooltip:"Remove Background",cameraOffBackgroundEffectWarningText:"Your camera is off. Turn on camera to see video effect.",failedToJoinCallDueToNoNetworkMoreDetails:"Call was disconnected due to a network issue. Check your connection and join again.",failedToJoinCallDueToNoNetworkTitle:"Call disconnected",failedToJoinTeamsMeetingReasonAccessDeniedMoreDetails:"You were not granted entry in the call. If this was a mistake, re-join the call.",failedToJoinTeamsMeetingReasonAccessDeniedTitle:"Dismissed from lobby",learnMore:"Learn more",leavingCallTitle:"Leaving...",leftCallMoreDetails:"If this was a mistake, re-join the call.",leftCallTitle:"You left the call",lobbyScreenConnectingToCallTitle:"Joining call",lobbyScreenWaitingToBeAdmittedTitle:"Waiting to be admitted",microphonePermissionDenied:"Your browser is blocking access to your microphone",microphoneToggleInLobbyNotAllowed:"Cannot mute or unmute while in lobby.",mutedMessage:"You're muted",networkReconnectMoreDetails:"Looks like something went wrong. We're trying to get back into the call.",networkReconnectTitle:"Hold on",notInvitedToRoomDetails:"You are not able to join this room because you do not have an invite.",notInvitedToRoomTitle:"Not invited to room",peopleButtonLabel:"People",selectedPeopleButtonLabel:"People Button Selected",peoplePaneTitle:"People",peoplePaneMoreButtonAriaLabel:"More",peopleButtonTooltipOpen:"Show participants",peopleButtonTooltipClose:"Hide participants",peoplePaneSubTitle:"In this call {numberOfPeople}",privacyPolicy:"Privacy policy",rejoinCallButtonLabel:"Re-join call",removedFromCallMoreDetails:"Another participant removed you from the call.",removedFromCallTitle:"You were removed",removeMenuLabel:"Remove",startSpotlightMenuLabel:"Spotlight for everyone",addSpotlightMenuLabel:"Add spotlight",stopSpotlightMenuLabel:"Stop spotlighting",stopSpotlightOnSelfMenuLabel:"Exit spotlight",spotlightLimitReachedMenuTitle:"Spotlight limit reached",stopAllSpotlightMenuLabel:"Stop all spotlights",returnToCallButtonAriaDescription:"Return to Call",returnToCallButtonAriaLabel:"Back",roomNotFoundDetails:"The room ID provided could not be found.",roomNotFoundTitle:"Room not found",roomNotValidDetails:"This room is not valid at this current time.",roomNotValidTitle:"Room not valid",inviteToRoomRemovedDetails:"Your invite to join this room was removed.",inviteToRoomRemovedTitle:"Invite to room removed",soundLabel:"Sound",noMicrophonesLabel:"No microphones found",noSpeakersLabel:"No speakers found",startCallButtonLabel:"Start call",openDialpadButtonLabel:"Dial phone number",peoplePaneAddPeopleButtonLabel:"Add People",dialpadStartCallButtonLabel:"Call",dialpadModalTitle:"Dial Phone Number",dialpadModalAriaLabel:"Dialpad",dialpadCloseModalButtonAriaLabel:"Close dialpad",moreButtonCallingLabel:"More",resumeCallButtonLabel:"Resume",resumingCallButtonLabel:"Resuming...",resumeCallButtonAriaLabel:"Resume call",resumingCallButtonAriaLabel:"Resume call",holdScreenLabel:"You're on hold",openDtmfDialpadLabel:"Show dialpad",dtmfDialpadPlaceholderText:"Enter number",outboundCallingNoticeString:"Calling...",participantJoinedNoticeString:"{displayName} joined",twoParticipantJoinedNoticeString:"{displayName1} and {displayName2} have joined",threeParticipantJoinedNoticeString:"{displayName1}, {displayName2} and {displayName3} have joined",participantLeftNoticeString:"{displayName} left",twoParticipantLeftNoticeString:"{displayName1} and {displayName2} have left",threeParticipantLeftNoticeString:"{displayName1}, {displayName2} and {displayName3} have left",unnamedParticipantString:"unnamed participant",manyUnnamedParticipantsJoined:"unnamed participant and {numOfParticipants} other participants joined",manyUnnamedParticipantsLeft:"unnamed participant and {numOfParticipants} other participants left",manyParticipantsJoined:"{displayName1}, {displayName2}, {displayName3} and {numOfParticipants} other participants joined",manyParticipantsLeft:"{displayName1}, {displayName2}, {displayName3} and {numOfParticipants} other participants left",liveCaptionsLabel:"Live captions",captionsSettingsLabel:"Caption settings",startCaptionsButtonOnLabel:"Turn on captions",startCaptionsButtonOffLabel:"Turn off captions",startCaptionsButtonTooltipOnContent:"Turn off captions",startCaptionsButtonTooltipOffContent:"Turn on captions",captionsSettingsModalTitle:"Captions Settings",captionsSettingsSpokenLanguageDropdownLabel:"Spoken language",captionsSettingsCaptionLanguageDropdownLabel:"Captions language",captionsSettingsSpokenLanguageDropdownInfoText:"Language that everyone on this call is speaking.",captionsSettingsCaptionLanguageDropdownInfoText:"Captions will appear in this langugage.",captionsSettingsConfirmButtonLabel:"Confirm",captionsSettingsCancelButtonLabel:"Cancel",captionsSettingsModalAriaLabel:"Captions Setting Modal",captionsSettingsCloseModalButtonAriaLabel:"Close Captions Setting",captionsBannerMoreButtonCallingLabel:"More",captionsBannerMoreButtonTooltip:"More options",dismissModalAriaLabel:"Local and remote picture and picture, press enter to return to call",callRejectedTitle:"The call could not be completed",callRejectedMoreDetails:"The person you are trying to reach is unavailable. Please try again later.",callTimeoutTitle:"The call could not be completed",callTimeoutDetails:"The person you are trying to reach is unavailable. Please try again later.",callTimeoutBotTitle:"The call could not be completed",callTimeoutBotDetails:"The service that you are trying to reach is unavailable. Please try again later.",dtmfDialerButtonLabel:"Dialpad",dtmfDialerButtonTooltipOn:"Show dialpad",dtmfDialerButtonTooltipOff:"Hide dialpad",dtmfDialerMoreButtonLabelOn:"Show dialpad",dtmfDialerMoreButtonLabelOff:"Hide dialpad",spokenLanguageStrings:{"ar-ae":"Arabic - U.A.E.","ar-sa":"Arabic - Saudi Arabia","da-dk":"Danish","de-de":"German - Germany","en-au":"English - Australia","en-ca":"English - Canada","en-gb":"English - United Kingdom","en-in":"English - India","en-nz":"English - New Zealand","en-us":"English - United States","es-es":"Spanish - Spain (Modern Sort)","es-mx":"Spanish - Mexico","fi-fi":"Finnish","fr-ca":"French - Canada","fr-fr":"French - France","hi-in":"Hindi","it-it":"Italian - Italy","ja-jp":"Japanese","ko-kr":"Korean","nb-no":"Norwegian (Bokmål)","nl-be":"Dutch - Belgium","nl-nl":"Dutch - Netherlands","pl-pl":"Polish","pt-br":"Portuguese - Brazil","ru-ru":"Russian","sv-se":"Swedish","zh-cn":"Chinese - People's Republic of China","zh-hk":"Chinese - Hong Kong SAR","cs-cz":"Czech","pt-pt":"Portuguese - Portugal","tr-tr":"Turkish","vi-vn":"Vietnamese","th-th":"Thai","he-il":"Hebrew","cy-gb":"Welsh","uk-ua":"Ukrainian","el-gr":"Greek","hu-hu":"Hungarian","ro-ro":"Romanian","sk-sk":"Slovak","zh-tw":"Chinese - Taiwan"},captionLanguageStrings:{ar:"Arabic",da:"Danish",de:"German",en:"English",es:"Spanish",fi:"Finnish","fr-ca":"French - Canada",fr:"French - France",hi:"Hindi",it:"Italian",ja:"Japanese",ko:"Korean",nb:"Norwegian (Bokmål)",nl:"Dutch",pl:"Polish",pt:"Portuguese - Brazil",ru:"Russian",sv:"Swedish","zh-Hans":"Chinese (Simplified)","zh-Hant":"Chinese (Traditional)",cs:"Czech","pt-pt":"Portuguese - Portugal",tr:"Turkish",vi:"Vietnamese",th:"Thai",he:"Hebrew",cy:"Welsh",uk:"Ukrainian",el:"Greek",hu:"Hungarian",ro:"Romanian",sk:"Slovak"},captionsBannerSpinnerText:"Starting captions...",transferPageTransferorText:"Transferring...",transferPageTransferTargetText:"Connecting...",transferPageUnknownTransferorDisplayName:"Unknown",transferPageUnknownTransferTargetDisplayName:"Unknown",transferPageNoticeString:"You are being transferred",participantCouldNotBeReachedTitle:"Target participant is currently not available",participantCouldNotBeReachedMoreDetails:"Please contact participant when they are available",permissionToReachTargetParticipantNotAllowedTitle:"Permission to reach target participant is not allowed",permissionToReachTargetParticipantNotAllowedMoreDetails:"Please check that the target participant is in the same tenant",unableToResolveTenantTitle:"Unable to resolve tenant id for the target participant",unableToResolveTenantMoreDetails:"Please check the participant id is entered correctly",participantIdIsMalformedTitle:"Participant id is not in the correct format",participantIdIsMalformedMoreDetails:"Please check that the participant id is in the correct format",moreButtonGalleryControlLabel:"View",moreButtonGalleryPositionToggleLabel:"Move gallery to top",moreButtonGallerySpeakerLayoutLabel:"Speaker",moreButtonGalleryFloatingLocalLayoutLabel:"Dynamic",moreButtonGalleryDefaultLayoutLabel:"Gallery view",moreButtonGalleryFocusedContentLayoutLabel:"Focus on content",moreButtonLargeGalleryDefaultLayoutLabel:"Large Gallery",capabilityChangedNotification:{turnVideoOn:{lostDueToMeetingOption:"Your camera has been disabled. You can no longer share video.",grantedDueToMeetingOption:"Your camera has been enabled. Turn it on if you'd like to share video."},unmuteMic:{lostDueToMeetingOption:"Your mic has been disabled. You can no longer unmute.",grantedDueToMeetingOption:"Your mic has been enabled. Unmute if you'd like to speak."},shareScreen:{lostDueToRoleChangeToAttendee:"Your role has been changed. Some actions, like sharing content, won't be available to you.",grantedDueToRoleChangeToPresenter:"You're a presenter. You can share content and facilitate the meeting."}},surveyTitle:"Help us improve",starSurveyHelperText:"How was the quality of the call?",starSurveyOneStarText:"The quality was bad.",starSurveyTwoStarText:"The quality was poor.",starSurveyThreeStarText:"The quality was good.",starSurveyFourStarText:"The quality was great.",starSurveyFiveStarText:"The quality was excellent.",surveyConfirmButtonLabel:"Send Feedback",starRatingAriaLabel:"Select {0} of {1} stars",surveySkipButtonLabel:"Skip",tagsSurveyQuestion:"What could have been better?",tagsSurveyTextFieldDefaultText:"Other, please specify",tagsSurveyHelperText:"Check any issues you experienced",surveyTextboxDefaultText:"Other, please specify",endOfSurveyText:"Thank you for your feedback!",surveyIssues:{overallRating:{callCannotJoin:"I could not join call",callCannotInvite:"I could not invite others into the call",hadToRejoin:"I had to rejoin the call",callEndedUnexpectedly:"Call ended for me unexpectedly",otherIssues:"I was having other issues with the call"},audioRating:{noLocalAudio:"The other side could not hear any sound",noRemoteAudio:"I could not hear any sound",echo:"I heard echos on the call",audioNoise:"I heard noise on the call",lowVolume:"Volume was low",audioStoppedUnexpectedly:"Audio stopped unexpectedly",distortedSpeech:"Audio was distorted",audioInterruption:"Audio was interrupted",otherIssues:"I was having other audio issues in this call"},videoRating:{noVideoReceived:"I could not see any video",noVideoSent:"Others could not see me",lowQuality:"Video quality was low",freezes:"Video frozen",stoppedUnexpectedly:"Video stopped unexpectedly",darkVideoReceived:"I can only see dark screens when others turn on their camera",audioVideoOutOfSync:"Audio and Video was out of sync",otherIssues:"I was having other video issues in this call"},screenshareRating:{noContentLocal:"Other people could not see my screenshare",noContentRemote:"I could not see other people's screenshare",cannotPresent:"I could not present my screen",lowQuality:"Screen share quality was low",freezes:"Screen share frozen",stoppedUnexpectedly:"Screen share stopped unexpectedly",largeDelay:"Screen share has a large delay",otherIssues:"I was having other screen share issues in this call"}},SurveyIssuesHeadingStrings:{overallRating:"Overall",audioRating:"Audio",videoRating:"Video",screenshareRating:"Presenting"},spotlightPrompt:{startSpotlightHeading:"Spotlight for everyone?",startSpotlightText:"You'll highlight this video for everyone in the meeting.",startSpotlightOnSelfText:"You'll highlight your video for everyone in the meeting.",startSpotlightConfirmButtonLabel:"Spotlight for everyone",startSpotlightCancelButtonLabel:"Cancel",stopSpotlightHeading:"Stop spotlighting this video?",stopSpotlightOnSelfHeading:"Exit spotlight?",stopAllSpotlightHeading:"Stop spotlighting all videos?",stopSpotlightText:"This video will no longer be highlighted for everyone in the meeting.",stopSpotlightOnSelfText:"Your video will no longer be highlighted for everyone in the meeting.",stopAllSpotlightText:"The videos will no longer be highlighted for everyone in the meeting.",stopSpotlightConfirmButtonLabel:"Stop spotlighting",stopSpotlightOnSelfConfirmButtonLabel:"Exit spotlight",stopSpotlightCancelButtonLabel:"Cancel"},exitSpotlightButtonLabel:"Exit spotlight",exitSpotlightButtonTooltip:"Exit spotlight",invalidMeetingIdentifier:"Invalid meeting ID or passcode"};var chat$k={chatListHeader:"In this chat",uploadFile:"Upload File"};var callWithChat$k={chatButtonLabel:"Chat",chatButtonNewMessageNotificationLabel:"New Message",chatButtonTooltipClosedWithMessageCount:"Show chat ({unreadMessagesCount} unread)",chatButtonTooltipClose:"Hide chat",chatButtonTooltipOpen:"Show chat",chatPaneTitle:"Chat",copyInviteLinkButtonLabel:"Copy invite link",copyInviteLinkActionedAriaLabel:"Invite link copied",dismissSidePaneButtonLabel:"Close",moreDrawerAudioDeviceMenuTitle:"Audio Device",moreDrawerButtonLabel:"More options",moreDrawerButtonTooltip:"More options",moreDrawerMicrophoneMenuTitle:"Microphone",moreDrawerSpeakerMenuTitle:"Speaker",moreDrawerCaptionsMenuTitle:"Live captions",moreDrawerSpokenLanguageMenuTitle:"Spoken language",moreDrawerCaptionLanguageMenuTitle:"Caption language",moreDrawerGalleryOptionsMenuTitle:"Gallery options",peopleButtonLabel:"People",selectedPeopleButtonLabel:"People Button Selected",peopleButtonTooltipOpen:"Show participants",peopleButtonTooltipClose:"Hide participants",peoplePaneSubTitle:"In this call",peoplePaneTitle:"People",pictureInPictureTileAriaLabel:"Video Feeds. Click to return to call screen.",removeMenuLabel:"Remove",openDialpadButtonLabel:"Dial phone number",returnToCallButtonAriaDescription:"Return to Call",returnToCallButtonAriaLabel:"Back",peoplePaneAddPeopleButtonLabel:"Add People",dialpadStartCallButtonLabel:"Call",dialpadModalTitle:"Dial Phone Number",dialpadModalAriaLabel:"Dialpad",dialpadCloseModalButtonAriaLabel:"Close dialpad",openDtmfDialpadLabel:"Show dialpad",dtmfDialpadPlaceholderText:"Enter number"};var en_US = {call:call$k,chat:chat$k,callWithChat:callWithChat$k};
24743
25192
 
24744
25193
  // Copyright (c) Microsoft Corporation.
24745
25194
  // Licensed under the MIT License.
@@ -24818,7 +25267,7 @@ const FileUploadButton = (props) => {
24818
25267
  } })));
24819
25268
  };
24820
25269
  const SendBoxAttachFileIconTrampoline = () => {
24821
- // @conditional-compile-remove(file-sharing)
25270
+ // @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload)
24822
25271
  return React.createElement(ChatCompositeIcon, { iconName: "SendBoxAttachFile" });
24823
25272
  };
24824
25273
  /**
@@ -24831,19 +25280,19 @@ const FileUploadButtonWrapper = (
24831
25280
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
24832
25281
  props) => {
24833
25282
  return (React.createElement(React.Fragment, null,
24834
- /* @conditional-compile-remove(file-sharing) */
25283
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
24835
25284
  React.createElement(FileUploadButton, Object.assign({}, props))));
24836
25285
  };
24837
25286
  const uploadFileButtonStringTrampoline = () => {
24838
- //@conditional-compile-remove(file-sharing)
25287
+ //@conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload)
24839
25288
  //eslint-disable-next-line react-hooks/rules-of-hooks
24840
25289
  return useLocale().strings.chat.uploadFile;
24841
25290
  };
24842
25291
 
24843
25292
  // Copyright (c) Microsoft Corporation.
24844
25293
  // Licensed under the MIT License.
24845
- /* @conditional-compile-remove(file-sharing) */
24846
- /* @conditional-compile-remove(file-sharing) */
25294
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
25295
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
24847
25296
  /**
24848
25297
  * @internal
24849
25298
  */
@@ -24883,7 +25332,7 @@ class FileUploadContext {
24883
25332
  }));
24884
25333
  }
24885
25334
  }
24886
- /* @conditional-compile-remove(file-sharing) */
25335
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
24887
25336
  /**
24888
25337
  * @internal
24889
25338
  */
@@ -24961,7 +25410,7 @@ class AzureCommunicationFileUploadAdapter {
24961
25410
  fileUpload === null || fileUpload === void 0 ? void 0 : fileUpload.off('uploadFail', this.updateFileUploadErrorMessage.bind(this));
24962
25411
  }
24963
25412
  }
24964
- /* @conditional-compile-remove(file-sharing) */
25413
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
24965
25414
  /**
24966
25415
  * @param fileUploadUiState {@link FileUploadsUiState}
24967
25416
  * @private
@@ -24981,7 +25430,7 @@ const convertFileUploadsUiStateToMessageMetadata = (fileUploads) => {
24981
25430
  }
24982
25431
  return undefined;
24983
25432
  };
24984
- /* @conditional-compile-remove(file-sharing) */
25433
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
24985
25434
  /**
24986
25435
  * @private
24987
25436
  */
@@ -25061,7 +25510,7 @@ class ChatContext {
25061
25510
  thread,
25062
25511
  latestErrors: clientState.latestErrors
25063
25512
  };
25064
- /* @conditional-compile-remove(file-sharing) */
25513
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
25065
25514
  updatedState = Object.assign(Object.assign({}, updatedState), { fileUploads: this.state.fileUploads });
25066
25515
  this.setState(updatedState);
25067
25516
  }
@@ -25076,7 +25525,7 @@ class AzureCommunicationChatAdapter {
25076
25525
  this.chatClient = chatClient;
25077
25526
  this.chatThreadClient = chatThreadClient;
25078
25527
  this.context = new ChatContext(chatClient.getState(), chatThreadClient.threadId);
25079
- /* @conditional-compile-remove(file-sharing) */
25528
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
25080
25529
  this.fileUploadAdapter = new AzureCommunicationFileUploadAdapter(this.context);
25081
25530
  const onStateChange = (clientState) => {
25082
25531
  // unsubscribe when the instance gets disposed
@@ -25106,19 +25555,19 @@ class AzureCommunicationChatAdapter {
25106
25555
  this.loadPreviousChatMessages = this.loadPreviousChatMessages.bind(this);
25107
25556
  this.on = this.on.bind(this);
25108
25557
  this.off = this.off.bind(this);
25109
- /* @conditional-compile-remove(file-sharing) */
25558
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
25110
25559
  this.registerActiveFileUploads = this.registerActiveFileUploads.bind(this);
25111
- /* @conditional-compile-remove(file-sharing) */
25560
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
25112
25561
  this.registerCompletedFileUploads = this.registerCompletedFileUploads.bind(this);
25113
- /* @conditional-compile-remove(file-sharing) */
25562
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
25114
25563
  this.clearFileUploads = this.clearFileUploads.bind(this);
25115
- /* @conditional-compile-remove(file-sharing) */
25564
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
25116
25565
  this.cancelFileUpload = this.cancelFileUpload.bind(this);
25117
- /* @conditional-compile-remove(file-sharing) */
25566
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
25118
25567
  this.updateFileUploadProgress = this.updateFileUploadProgress.bind(this);
25119
- /* @conditional-compile-remove(file-sharing) */
25568
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
25120
25569
  this.updateFileUploadErrorMessage = this.updateFileUploadErrorMessage.bind(this);
25121
- /* @conditional-compile-remove(file-sharing) */
25570
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
25122
25571
  this.updateFileUploadMetadata = this.updateFileUploadMetadata.bind(this);
25123
25572
  this.downloadResourceToCache = this.downloadResourceToCache.bind(this);
25124
25573
  this.removeResourceFromCache = this.removeResourceFromCache.bind(this);
@@ -25168,9 +25617,9 @@ class AzureCommunicationChatAdapter {
25168
25617
  sendMessage(content_1) {
25169
25618
  return __awaiter$n(this, arguments, void 0, function* (content, options = {}) {
25170
25619
  yield this.asyncTeeErrorToEventEmitter(() => __awaiter$n(this, void 0, void 0, function* () {
25171
- /* @conditional-compile-remove(file-sharing) */
25620
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
25172
25621
  options.metadata = Object.assign(Object.assign({}, options.metadata), convertFileUploadsUiStateToMessageMetadata(this.context.getState().fileUploads));
25173
- /* @conditional-compile-remove(file-sharing) */
25622
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
25174
25623
  /**
25175
25624
  * All the current uploads need to be clear from the state before a message has been sent.
25176
25625
  * This ensures the following behavior:
@@ -25221,9 +25670,9 @@ class AzureCommunicationChatAdapter {
25221
25670
  updateMessage(messageId, content, metadata, options) {
25222
25671
  return __awaiter$n(this, void 0, void 0, function* () {
25223
25672
  return yield this.asyncTeeErrorToEventEmitter(() => __awaiter$n(this, void 0, void 0, function* () {
25224
- /* @conditional-compile-remove(file-sharing) */
25673
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
25225
25674
  const updatedOptions = { attachmentMetadata: options === null || options === void 0 ? void 0 : options.attachmentMetadata, metadata: metadata };
25226
- /* @conditional-compile-remove(file-sharing) */
25675
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
25227
25676
  return yield this.handlers.onUpdateMessage(messageId, content, updatedOptions);
25228
25677
  }));
25229
25678
  });
@@ -25235,31 +25684,31 @@ class AzureCommunicationChatAdapter {
25235
25684
  }));
25236
25685
  });
25237
25686
  }
25238
- /* @conditional-compile-remove(file-sharing) */
25687
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
25239
25688
  registerActiveFileUploads(files) {
25240
25689
  return this.fileUploadAdapter.registerActiveFileUploads(files);
25241
25690
  }
25242
- /* @conditional-compile-remove(file-sharing) */
25691
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
25243
25692
  registerCompletedFileUploads(metadata) {
25244
25693
  return this.fileUploadAdapter.registerCompletedFileUploads(metadata);
25245
25694
  }
25246
- /* @conditional-compile-remove(file-sharing) */
25695
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
25247
25696
  clearFileUploads() {
25248
25697
  this.fileUploadAdapter.clearFileUploads();
25249
25698
  }
25250
- /* @conditional-compile-remove(file-sharing) */
25699
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
25251
25700
  cancelFileUpload(id) {
25252
25701
  this.fileUploadAdapter.cancelFileUpload(id);
25253
25702
  }
25254
- /* @conditional-compile-remove(file-sharing) */
25703
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
25255
25704
  updateFileUploadProgress(id, progress) {
25256
25705
  this.fileUploadAdapter.updateFileUploadProgress(id, progress);
25257
25706
  }
25258
- /* @conditional-compile-remove(file-sharing) */
25707
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
25259
25708
  updateFileUploadErrorMessage(id, errorMessage) {
25260
25709
  this.fileUploadAdapter.updateFileUploadErrorMessage(id, errorMessage);
25261
25710
  }
25262
- /* @conditional-compile-remove(file-sharing) */
25711
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
25263
25712
  updateFileUploadMetadata(id, metadata) {
25264
25713
  this.fileUploadAdapter.updateFileUploadMetadata(id, metadata);
25265
25714
  }
@@ -25416,6 +25865,28 @@ const _createAzureCommunicationChatAdapterInner = (endpoint_1, userId_1, display
25416
25865
  const adapter = yield createAzureCommunicationChatAdapterFromClient(chatClient, chatThreadClient);
25417
25866
  return adapter;
25418
25867
  });
25868
+ /**
25869
+ * This inner function to create ChatAdapterPromise in case when threadID is not avaialble.
25870
+ * ThreadId is a promise to allow for lazy initialization of the adapter.
25871
+ * @internal
25872
+ */
25873
+ const _createLazyAzureCommunicationChatAdapterInner = (endpoint_2, userId_2, displayName_2, credential_2, threadId_2, ...args_2) => __awaiter$n(void 0, [endpoint_2, userId_2, displayName_2, credential_2, threadId_2, ...args_2], void 0, function* (endpoint, userId, displayName, credential, threadId, telemetryImplementationHint = 'Chat') {
25874
+ if (!_isValidIdentifier(userId)) {
25875
+ throw new Error('Provided userId is invalid. Please provide valid identifier object.');
25876
+ }
25877
+ const chatClient = _createStatefulChatClientInner({
25878
+ userId,
25879
+ displayName,
25880
+ endpoint,
25881
+ credential
25882
+ }, undefined, telemetryImplementationHint);
25883
+ return threadId.then((threadId) => __awaiter$n(void 0, void 0, void 0, function* () {
25884
+ const chatThreadClient = yield chatClient.getChatThreadClient(threadId);
25885
+ yield chatClient.startRealtimeNotifications();
25886
+ const adapter = yield createAzureCommunicationChatAdapterFromClient(chatClient, chatThreadClient);
25887
+ return adapter;
25888
+ }));
25889
+ });
25419
25890
  /**
25420
25891
  * A custom React hook to simplify the creation of {@link ChatAdapter}.
25421
25892
  *
@@ -25922,13 +26393,13 @@ const createCompositeHandlers$1 = memoizeOne((adapter) => ({
25922
26393
  onRemoveParticipant: adapter.removeParticipant,
25923
26394
  updateThreadTopicName: adapter.setTopic,
25924
26395
  onUpdateMessage: (messageId, content,
25925
- /* @conditional-compile-remove(file-sharing) */
26396
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
25926
26397
  options) => {
25927
26398
  const metadata = options === null || options === void 0 ? void 0 : options.metadata;
25928
- /* @conditional-compile-remove(file-sharing) */
26399
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
25929
26400
  const updatedOptions = (options === null || options === void 0 ? void 0 : options.attachmentMetadata) ? Object.assign({}, options.attachmentMetadata) : {};
25930
26401
  return adapter.updateMessage(messageId, content, metadata,
25931
- /* @conditional-compile-remove(file-sharing) */ updatedOptions);
26402
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */ updatedOptions);
25932
26403
  },
25933
26404
  onDeleteMessage: adapter.deleteMessage
25934
26405
  }));
@@ -26198,7 +26669,7 @@ const FileDownloadErrorBar = (props) => {
26198
26669
  * @private
26199
26670
  */
26200
26671
  const getFileUploads = (state) => {
26201
- /* @conditional-compile-remove(file-sharing) */
26672
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
26202
26673
  return state === null || state === void 0 ? void 0 : state.fileUploads;
26203
26674
  };
26204
26675
 
@@ -26225,30 +26696,30 @@ const useSelector$2 = (selector, selectorProps) => {
26225
26696
  // Copyright (c) Microsoft Corporation.
26226
26697
  // Licensed under the MIT License.
26227
26698
  /* @conditional-compile-remove(rich-text-editor) */
26228
- const RichTextSendBoxWrapper = React.lazy(() => Promise.resolve().then(function () { return require('./RichTextSendBoxWrapper-BRqOsupu.js'); }).then((module) => ({ default: module.RichTextSendBoxWrapper })));
26699
+ const RichTextSendBoxWrapper = React.lazy(() => Promise.resolve().then(function () { return require('./RichTextSendBoxWrapper-D3ER8Kz9.js'); }).then((module) => ({ default: module.RichTextSendBoxWrapper })));
26229
26700
  /**
26230
26701
  * @private
26231
26702
  */
26232
26703
  const SendBox = (props) => {
26233
26704
  const { options, styles,
26234
- /* @conditional-compile-remove(file-sharing) */
26705
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
26235
26706
  adapter } = props;
26236
26707
  const sendBoxProps = usePropsFor$2(SendBox$1);
26237
- /* @conditional-compile-remove(file-sharing) */
26708
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
26238
26709
  const activeFileUploads = useSelector$2(fileUploadsSelector).files;
26239
26710
  const sendBoxStyles = React.useMemo(() => {
26240
26711
  return Object.assign({}, styles);
26241
26712
  }, [styles]);
26242
26713
  const simpleSendBox = React.useMemo(() => (React.createElement(SendBox$1, Object.assign({}, sendBoxProps, { autoFocus: options === null || options === void 0 ? void 0 : options.autoFocus, styles: sendBoxStyles,
26243
- /* @conditional-compile-remove(file-sharing) */
26714
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
26244
26715
  activeFileUploads: activeFileUploads,
26245
- /* @conditional-compile-remove(file-sharing) */
26716
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
26246
26717
  onCancelFileUpload: adapter.cancelFileUpload }))), [
26247
26718
  sendBoxProps,
26248
26719
  options,
26249
26720
  sendBoxStyles,
26250
- /* @conditional-compile-remove(file-sharing) */ activeFileUploads,
26251
- /* @conditional-compile-remove(file-sharing) */ adapter
26721
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */ activeFileUploads,
26722
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */ adapter
26252
26723
  ]);
26253
26724
  // /* @conditional-compile-remove(rich-text-editor) */
26254
26725
  if ((options === null || options === void 0 ? void 0 : options.richTextEditor) === true) {
@@ -26275,7 +26746,7 @@ var __awaiter$l = (window && window.__awaiter) || function (thisArg, _arguments,
26275
26746
  const ChatScreen = (props) => {
26276
26747
  const { onFetchAvatarPersonaData, onRenderMessage, onRenderTypingIndicator, options, styles, fileSharing, formFactor } = props;
26277
26748
  const defaultNumberOfChatMessagesToReload = 5;
26278
- /* @conditional-compile-remove(file-sharing) */
26749
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
26279
26750
  const [downloadErrorMessage, setDownloadErrorMessage] = React.useState('');
26280
26751
  const [overlayImageItem, setOverlayImageItem] = React.useState();
26281
26752
  const [isImageOverlayOpen, setIsImageOverlayOpen] = React.useState(false);
@@ -26338,12 +26809,12 @@ const ChatScreen = (props) => {
26338
26809
  if (!files) {
26339
26810
  return;
26340
26811
  }
26341
- /* @conditional-compile-remove(file-sharing) */
26812
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
26342
26813
  const fileUploads = adapter.registerActiveFileUploads(Array.from(files));
26343
- /* @conditional-compile-remove(file-sharing) */
26814
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
26344
26815
  fileSharing === null || fileSharing === void 0 ? void 0 : fileSharing.uploadHandler(userId, fileUploads);
26345
26816
  }, [adapter, fileSharing, userId]);
26346
- /* @conditional-compile-remove(file-sharing) */
26817
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
26347
26818
  const onRenderFileDownloads = React.useCallback((userId, message) => (React.createElement(_AttachmentDownloadCards, { userId: userId, fileMetadata: message.files || [], downloadHandler: fileSharing === null || fileSharing === void 0 ? void 0 : fileSharing.downloadHandler, onDownloadErrorMessage: (errorMessage) => {
26348
26819
  setDownloadErrorMessage(errorMessage);
26349
26820
  } })), [fileSharing === null || fileSharing === void 0 ? void 0 : fileSharing.downloadHandler]);
@@ -26445,12 +26916,12 @@ const ChatScreen = (props) => {
26445
26916
  React.createElement(react.Stack, { className: chatArea, tokens: participantListContainerPadding, horizontal: true, grow: true },
26446
26917
  React.createElement(react.Stack, { className: chatWrapper, grow: true },
26447
26918
  (options === null || options === void 0 ? void 0 : options.errorBar) !== false && React.createElement(ErrorBar, Object.assign({}, errorBarProps)),
26448
- /* @conditional-compile-remove(file-sharing) */
26919
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
26449
26920
  React.createElement(FileDownloadErrorBar, { onDismissDownloadErrorMessage: React.useCallback(() => {
26450
26921
  setDownloadErrorMessage('');
26451
26922
  }, []), fileDownloadErrorMessage: downloadErrorMessage || '' }),
26452
26923
  React.createElement(MessageThread, Object.assign({}, messageThreadProps, { onRenderAvatar: onRenderAvatarCallback, onRenderMessage: onRenderMessage,
26453
- /* @conditional-compile-remove(file-sharing) */
26924
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
26454
26925
  onRenderFileDownloads: onRenderFileDownloads, inlineImageOptions: inlineImageOptions, numberOfChatMessagesToReload: defaultNumberOfChatMessagesToReload, styles: messageThreadStyles })),
26455
26926
  React.createElement(react.Stack, { className: react.mergeStyles(sendboxContainerStyles) },
26456
26927
  React.createElement("div", { className: react.mergeStyles(typingIndicatorContainerStyles) }, onRenderTypingIndicator ? (onRenderTypingIndicator(typingIndicatorProps.typingUsers)) : (React.createElement(TypingIndicator, Object.assign({}, typingIndicatorProps, { styles: typingIndicatorStyles })))),
@@ -26459,7 +26930,7 @@ const ChatScreen = (props) => {
26459
26930
  React.createElement(AttachFileButton, null))),
26460
26931
  React.createElement(react.Stack, { grow: true },
26461
26932
  React.createElement(SendBox, { options: options, styles: styles === null || styles === void 0 ? void 0 : styles.sendBox,
26462
- /* @conditional-compile-remove(file-sharing) */
26933
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
26463
26934
  adapter: adapter })),
26464
26935
  formFactor !== 'mobile' && React.createElement(AttachFileButton, null)))),
26465
26936
  /* @conditional-compile-remove(chat-composite-participant-pane) */
@@ -26486,17 +26957,17 @@ const ChatScreen = (props) => {
26486
26957
  */
26487
26958
  const ChatComposite = (props) => {
26488
26959
  const { adapter, options, onFetchAvatarPersonaData, onRenderTypingIndicator, onRenderMessage, onFetchParticipantMenuItems } = props;
26489
- /* @conditional-compile-remove(file-sharing) */
26960
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
26490
26961
  const formFactor = props['formFactor'] || 'desktop';
26491
26962
  return (React.createElement("div", { className: chatScreenContainerStyle },
26492
26963
  React.createElement(BaseProvider, Object.assign({}, props),
26493
26964
  React.createElement(ChatAdapterProvider, { adapter: adapter },
26494
26965
  React.createElement(ChatScreen
26495
- /* @conditional-compile-remove(file-sharing) */
26966
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
26496
26967
  , {
26497
- /* @conditional-compile-remove(file-sharing) */
26968
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
26498
26969
  formFactor: formFactor, options: options, onFetchAvatarPersonaData: onFetchAvatarPersonaData, onRenderTypingIndicator: onRenderTypingIndicator, onRenderMessage: onRenderMessage, onFetchParticipantMenuItems: onFetchParticipantMenuItems,
26499
- /* @conditional-compile-remove(file-sharing) */
26970
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
26500
26971
  fileSharing: options === null || options === void 0 ? void 0 : options.fileSharing })))));
26501
26972
  };
26502
26973
 
@@ -26678,6 +27149,8 @@ const ACCESS_DENIED_TEAMS_MEETING_SUB_CODE = 5854;
26678
27149
  const REMOTE_PSTN_USER_HUNG_UP = 560000;
26679
27150
  const REMOVED_FROM_CALL_SUB_CODES = [5000, 5300, REMOTE_PSTN_USER_HUNG_UP];
26680
27151
  const CALL_REJECTED_CODE$1 = 603;
27152
+ /* @conditional-compile-remove(meeting-id) */
27153
+ const INVALID_MEETING_IDENTIFIER = 5751;
26681
27154
  /** @private */
26682
27155
  const ROOM_NOT_FOUND_SUB_CODE = 5732;
26683
27156
  /** @private */
@@ -26769,7 +27242,7 @@ const getCallEndReason = (call) => {
26769
27242
  * @private
26770
27243
  */
26771
27244
  const getEndedCallPageProps = (locale, endedCall) => {
26772
- var _a, _b, _c, _d, _e;
27245
+ var _a, _b, _c, _d, _e, _f;
26773
27246
  let title = locale.strings.call.leftCallTitle;
26774
27247
  let moreDetails = locale.strings.call.leftCallMoreDetails;
26775
27248
  let disableStartCallButton = false;
@@ -26865,6 +27338,16 @@ const getEndedCallPageProps = (locale, endedCall) => {
26865
27338
  }
26866
27339
  break;
26867
27340
  }
27341
+ /* @conditional-compile-remove(meeting-id) */
27342
+ switch ((_f = endedCall === null || endedCall === void 0 ? void 0 : endedCall.callEndReason) === null || _f === void 0 ? void 0 : _f.subCode) {
27343
+ case INVALID_MEETING_IDENTIFIER:
27344
+ if (locale.strings.call.callRejectedTitle) {
27345
+ title = locale.strings.call.callRejectedTitle;
27346
+ moreDetails = locale.strings.call.invalidMeetingIdentifier;
27347
+ disableStartCallButton = true;
27348
+ }
27349
+ break;
27350
+ }
26868
27351
  return { title, moreDetails, disableStartCallButton, iconName };
26869
27352
  };
26870
27353
  /**
@@ -32221,7 +32704,7 @@ const DtmfDialpadPageContent = (props) => {
32221
32704
  React.createElement(react.Text, { style: { margin: 'auto' } }, calleeName && calleeName !== 'Unnamed participant' ? calleeName === null || calleeName === void 0 ? void 0 : calleeName.toString() : ''),
32222
32705
  React.createElement(Dialpad, { onSendDtmfTone: (tone) => __awaiter$c(void 0, void 0, void 0, function* () {
32223
32706
  yield adapter.sendDtmfTone(tone);
32224
- }), longPressTrigger: props.mobileView ? 'touch' : 'mouseAndTouch', dialpadMode: 'dtmf' }))));
32707
+ }), longPressTrigger: props.mobileView ? 'touch' : 'mouseAndTouch', dialpadMode: 'dtmf', dtmfAudioContext: props.compositeAudioContext }))));
32225
32708
  };
32226
32709
  const DtmfDialerContentTimer = () => {
32227
32710
  const [time, setTime] = React.useState(0);
@@ -32246,7 +32729,7 @@ const DtmfDialerContentTimer = () => {
32246
32729
  */
32247
32730
  const DtmfDialpadPage = (props) => {
32248
32731
  const adapter = useAdapter();
32249
- return React.createElement(DtmfDialpadPageContent, { adapter: adapter, mobileView: props.mobileView });
32732
+ return React.createElement(DtmfDialpadPageContent, Object.assign({ adapter: adapter }, props, { mobileView: props.mobileView }));
32250
32733
  };
32251
32734
 
32252
32735
  // Copyright (c) Microsoft Corporation.
@@ -32292,7 +32775,7 @@ const buttonTextStyles = { label: { fontSize: '0.875rem' } };
32292
32775
  */
32293
32776
  const CallPage = (props) => {
32294
32777
  var _a;
32295
- const { callInvitationURL, onFetchAvatarPersonaData, onFetchParticipantMenuItems, options, mobileView, galleryLayout = 'floatingLocalVideo', onUserSetGalleryLayoutChange, userSetOverflowGalleryPosition = 'Responsive', onSetUserSetOverflowGalleryPosition, onCloseChatPane, pinnedParticipants, setPinnedParticipants } = props;
32778
+ const { callInvitationURL, onFetchAvatarPersonaData, onFetchParticipantMenuItems, options, mobileView, galleryLayout = 'floatingLocalVideo', onUserSetGalleryLayoutChange, userSetOverflowGalleryPosition = 'Responsive', onSetUserSetOverflowGalleryPosition, onCloseChatPane, pinnedParticipants, setPinnedParticipants, compositeAudioContext } = props;
32296
32779
  // To use useProps to get these states, we need to create another file wrapping Call,
32297
32780
  // It seems unnecessary in this case, so we get the updated states using this approach.
32298
32781
  const { callStatus } = useSelector$1(callStatusSelector);
@@ -32319,7 +32802,7 @@ const CallPage = (props) => {
32319
32802
  if (dtmfDialerPresent) {
32320
32803
  return (React.createElement(DtmfDialpadPage, { mobileView: props.mobileView, modalLayerHostId: props.modalLayerHostId, options: props.options, updateSidePaneRenderer: props.updateSidePaneRenderer, mobileChatTabHeader: props.mobileChatTabHeader, latestErrors: props.latestErrors, onDismissError: props.onDismissError,
32321
32804
  /* @conditional-compile-remove(capabilities) */
32322
- capabilitiesChangedNotificationBarProps: props.capabilitiesChangedNotificationBarProps, onSetDialpadPage: () => setDtmfDialerPresent(!dtmfDialerPresent), dtmfDialerPresent: dtmfDialerPresent }));
32805
+ capabilitiesChangedNotificationBarProps: props.capabilitiesChangedNotificationBarProps, onSetDialpadPage: () => setDtmfDialerPresent(!dtmfDialerPresent), dtmfDialerPresent: dtmfDialerPresent, compositeAudioContext: compositeAudioContext }));
32323
32806
  }
32324
32807
  else {
32325
32808
  return (React.createElement(MediaGallery, Object.assign({ isMobile: mobileView }, mediaGalleryProps, mediaGalleryHandlers, { onFetchAvatarPersonaData: onFetchAvatarPersonaData, remoteVideoTileMenuOptions: options === null || options === void 0 ? void 0 : options.remoteVideoTileMenuOptions, drawerMenuHostId: drawerMenuHostId, localVideoTileOptions: options === null || options === void 0 ? void 0 : options.localVideoTile, userSetOverflowGalleryPosition: userSetOverflowGalleryPosition, userSetGalleryLayout: galleryLayout, pinnedParticipants: pinnedParticipants, setPinnedParticipants: setPinnedParticipants,
@@ -34648,6 +35131,7 @@ const MainScreen = (props) => {
34648
35131
  adapter.off('callEnded', closeSidePane);
34649
35132
  };
34650
35133
  }, [adapter]);
35134
+ const compositeAudioContext = React.useRef(new AudioContext());
34651
35135
  /* @conditional-compile-remove(capabilities) */
34652
35136
  const capabilitiesChangedInfoAndRole = useSelector$1(capabilitiesChangedInfoAndRoleSelector);
34653
35137
  /* @conditional-compile-remove(capabilities) */
@@ -34737,7 +35221,7 @@ const MainScreen = (props) => {
34737
35221
  case 'call':
34738
35222
  pageElement = (React.createElement(CallPage, { callInvitationURL: callInvitationUrl, onFetchAvatarPersonaData: onFetchAvatarPersonaData, onFetchParticipantMenuItems: onFetchParticipantMenuItems, mobileView: props.mobileView, modalLayerHostId: props.modalLayerHostId, options: props.options, updateSidePaneRenderer: setSidePaneRenderer, mobileChatTabHeader: props.mobileChatTabHeader, onCloseChatPane: props.onCloseChatPane, latestErrors: latestErrors, onDismissError: onDismissError, galleryLayout: userSetGalleryLayout, onUserSetGalleryLayoutChange: setUserSetGalleryLayout, onSetUserSetOverflowGalleryPosition: setUserSetOverflowGalleryPosition, userSetOverflowGalleryPosition: userSetOverflowGalleryPosition,
34739
35223
  /* @conditional-compile-remove(capabilities) */
34740
- capabilitiesChangedNotificationBarProps: capabilitiesChangedNotificationBarProps, pinnedParticipants: pinnedParticipants, setPinnedParticipants: setPinnedParticipants }));
35224
+ capabilitiesChangedNotificationBarProps: capabilitiesChangedNotificationBarProps, pinnedParticipants: pinnedParticipants, setPinnedParticipants: setPinnedParticipants, compositeAudioContext: compositeAudioContext.current }));
34741
35225
  break;
34742
35226
  /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */
34743
35227
  case 'hold':
@@ -35233,7 +35717,9 @@ class AzureCommunicationCallAdapter {
35233
35717
  ? locatorOrTargetCalless
35234
35718
  : undefined;
35235
35719
  this.deviceManager = deviceManager;
35236
- const isTeamsMeeting = this.locator ? 'meetingLink' in this.locator : false;
35720
+ const isTeamsMeeting = this.locator
35721
+ ? 'meetingLink' in this.locator || /* @conditional-compile-remove(meeting-id) */ 'meetingId' in this.locator
35722
+ : false;
35237
35723
  const isRoomsCall = this.locator ? 'roomId' in this.locator : false;
35238
35724
  this.onResolveVideoBackgroundEffectsDependency = (_a = options === null || options === void 0 ? void 0 : options.videoBackgroundOptions) === null || _a === void 0 ? void 0 : _a.onResolveDependency;
35239
35725
  this.context = new CallContext(callClient.getState(), isTeamsMeeting, isRoomsCall, options, this.targetCallees);
@@ -35464,18 +35950,34 @@ class AzureCommunicationCallAdapter {
35464
35950
  }
35465
35951
  _joinCall(audioOptions, videoOptions) {
35466
35952
  const isTeamsMeeting = this.locator ? 'meetingLink' in this.locator : false;
35953
+ /* @conditional-compile-remove(meeting-id) */
35954
+ const isTeamsMeetingId = this.locator ? 'meetingId' in this.locator : false;
35467
35955
  const isRoomsCall = this.locator ? 'roomId' in this.locator : false;
35468
35956
  /* @conditional-compile-remove(teams-identity-support) */
35469
35957
  if (_isTeamsCallAgent(this.callAgent)) {
35470
- if (!isTeamsMeeting) {
35471
- throw new Error('Locator not supported by TeamsCallAgent');
35958
+ if (isTeamsMeeting) {
35959
+ return this.callAgent.join(this.locator, {
35960
+ audioOptions,
35961
+ videoOptions
35962
+ });
35963
+ }
35964
+ /* @conditional-compile-remove(meeting-id) */
35965
+ if (isTeamsMeetingId) {
35966
+ return this.callAgent.join(this.locator, {
35967
+ audioOptions,
35968
+ videoOptions
35969
+ });
35472
35970
  }
35971
+ throw new Error('Locator not supported by TeamsCallAgent');
35972
+ }
35973
+ if (isTeamsMeeting) {
35473
35974
  return this.callAgent.join(this.locator, {
35474
35975
  audioOptions,
35475
35976
  videoOptions
35476
35977
  });
35477
35978
  }
35478
- if (isTeamsMeeting) {
35979
+ /* @conditional-compile-remove(meeting-id) */
35980
+ if (isTeamsMeetingId) {
35479
35981
  return this.callAgent.join(this.locator, {
35480
35982
  audioOptions,
35481
35983
  videoOptions
@@ -36718,31 +37220,31 @@ class CallWithChatBackedChatAdapter {
36718
37220
  this.setTopic = (topicName) => __awaiter$3(this, void 0, void 0, function* () {
36719
37221
  throw new Error(`Chat Topics are not supported in CallWithChatComposite.`);
36720
37222
  });
36721
- /* @conditional-compile-remove(file-sharing) */
37223
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
36722
37224
  this.registerActiveFileUploads = (files) => {
36723
37225
  return this.callWithChatAdapter.registerActiveFileUploads(files);
36724
37226
  };
36725
- /* @conditional-compile-remove(file-sharing) */
37227
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
36726
37228
  this.registerCompletedFileUploads = (metadata) => {
36727
37229
  return this.callWithChatAdapter.registerCompletedFileUploads(metadata);
36728
37230
  };
36729
- /* @conditional-compile-remove(file-sharing) */
37231
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
36730
37232
  this.clearFileUploads = () => {
36731
37233
  this.callWithChatAdapter.clearFileUploads();
36732
37234
  };
36733
- /* @conditional-compile-remove(file-sharing) */
37235
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
36734
37236
  this.cancelFileUpload = (id) => {
36735
37237
  this.callWithChatAdapter.cancelFileUpload(id);
36736
37238
  };
36737
- /* @conditional-compile-remove(file-sharing) */
37239
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
36738
37240
  this.updateFileUploadProgress = (id, progress) => {
36739
37241
  this.callWithChatAdapter.updateFileUploadProgress(id, progress);
36740
37242
  };
36741
- /* @conditional-compile-remove(file-sharing) */
37243
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
36742
37244
  this.updateFileUploadErrorMessage = (id, errorMessage) => {
36743
37245
  this.callWithChatAdapter.updateFileUploadErrorMessage(id, errorMessage);
36744
37246
  };
36745
- /* @conditional-compile-remove(file-sharing) */
37247
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
36746
37248
  this.updateFileUploadMetadata = (id, metadata) => {
36747
37249
  this.callWithChatAdapter.updateFileUploadMetadata(id, metadata);
36748
37250
  };
@@ -36766,7 +37268,7 @@ function chatAdapterStateFromCallWithChatAdapterState(callWithChatAdapterState)
36766
37268
  displayName: callWithChatAdapterState.displayName || '',
36767
37269
  thread: callWithChatAdapterState.chat,
36768
37270
  latestErrors: callWithChatAdapterState.latestChatErrors,
36769
- /* @conditional-compile-remove(file-sharing) */
37271
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
36770
37272
  fileUploads: callWithChatAdapterState.fileUploads
36771
37273
  };
36772
37274
  }
@@ -37079,11 +37581,11 @@ const CallWithChatScreen = (props) => {
37079
37581
  topic: false,
37080
37582
  /* @conditional-compile-remove(chat-composite-participant-pane) */
37081
37583
  participantPane: false,
37082
- /* @conditional-compile-remove(file-sharing) */
37584
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
37083
37585
  fileSharing: props.fileSharing
37084
37586
  }, onFetchAvatarPersonaData: props.onFetchAvatarPersonaData })), [
37085
37587
  chatAdapter,
37086
- /* @conditional-compile-remove(file-sharing) */ props.fileSharing,
37588
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */ props.fileSharing,
37087
37589
  props.onFetchAvatarPersonaData,
37088
37590
  theme
37089
37591
  ]);
@@ -37133,7 +37635,7 @@ const CallWithChatComposite = (props) => {
37133
37635
  React.createElement(CallWithChatScreen, Object.assign({}, props, {
37134
37636
  /* @conditional-compile-remove(call-readiness) */
37135
37637
  deviceChecks: options === null || options === void 0 ? void 0 : options.deviceChecks, callWithChatAdapter: adapter, formFactor: formFactor, callControls: options === null || options === void 0 ? void 0 : options.callControls, joinInvitationURL: joinInvitationURL, fluentTheme: fluentTheme, remoteVideoTileMenuOptions: options === null || options === void 0 ? void 0 : options.remoteVideoTileMenuOptions,
37136
- /* @conditional-compile-remove(file-sharing) */
37638
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
37137
37639
  fileSharing: options === null || options === void 0 ? void 0 : options.fileSharing, localVideoTile: options === null || options === void 0 ? void 0 : options.localVideoTile, galleryOptions: options === null || options === void 0 ? void 0 : options.galleryOptions,
37138
37640
  /* @conditional-compile-remove(custom-branding) */
37139
37641
  logo: (_a = options === null || options === void 0 ? void 0 : options.branding) === null || _a === void 0 ? void 0 : _a.logo,
@@ -37172,12 +37674,11 @@ const isOnHoldTrampoline = (page) => {
37172
37674
  /**
37173
37675
  * @private
37174
37676
  */
37175
- function callWithChatAdapterStateFromBackingStates(callAdapter, chatAdapter) {
37677
+ function callWithChatAdapterStateFromBackingStates(callAdapter) {
37176
37678
  const callAdapterState = callAdapter.getState();
37177
- const chatAdapterState = chatAdapter.getState();
37178
37679
  return {
37179
37680
  call: callAdapterState.call,
37180
- chat: chatAdapterState.thread,
37681
+ chat: undefined,
37181
37682
  userId: callAdapterState.userId,
37182
37683
  page: callAdapterState.page,
37183
37684
  displayName: callAdapterState.displayName,
@@ -37185,9 +37686,9 @@ function callWithChatAdapterStateFromBackingStates(callAdapter, chatAdapter) {
37185
37686
  isLocalPreviewMicrophoneEnabled: callAdapterState.isLocalPreviewMicrophoneEnabled,
37186
37687
  isTeamsCall: callAdapterState.isTeamsCall,
37187
37688
  latestCallErrors: callAdapterState.latestErrors,
37188
- latestChatErrors: chatAdapterState.latestErrors,
37189
- /* @conditional-compile-remove(file-sharing) */
37190
- fileUploads: chatAdapterState.fileUploads,
37689
+ latestChatErrors: {},
37690
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
37691
+ fileUploads: {},
37191
37692
  /* @conditional-compile-remove(PSTN-calls) */
37192
37693
  alternateCallerId: callAdapterState.alternateCallerId,
37193
37694
  /* @conditional-compile-remove(unsupported-browser) */
@@ -37207,7 +37708,7 @@ function callWithChatAdapterStateFromBackingStates(callAdapter, chatAdapter) {
37207
37708
  */
37208
37709
  function mergeChatAdapterStateIntoCallWithChatAdapterState(existingCallWithChatAdapterState, chatAdapterState) {
37209
37710
  return Object.assign(Object.assign({}, existingCallWithChatAdapterState), { chat: chatAdapterState.thread, latestChatErrors: chatAdapterState.latestErrors,
37210
- /* @conditional-compile-remove(file-sharing) */
37711
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
37211
37712
  fileUploads: chatAdapterState.fileUploads });
37212
37713
  }
37213
37714
  /**
@@ -37287,44 +37788,61 @@ class CallWithChatContext {
37287
37788
  * Created for easy use with the {@link CallWithChatComposite}.
37288
37789
  */
37289
37790
  class AzureCommunicationCallWithChatAdapter {
37290
- constructor(callAdapter, chatAdapter) {
37291
- /* @conditional-compile-remove(file-sharing) */
37791
+ constructor(callAdapter, chatAdapterPromise) {
37792
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
37292
37793
  this.registerActiveFileUploads = (files) => {
37293
- return this.chatAdapter.registerActiveFileUploads(files);
37794
+ var _a, _b;
37795
+ return (_b = (_a = this.chatAdapter) === null || _a === void 0 ? void 0 : _a.registerActiveFileUploads(files)) !== null && _b !== void 0 ? _b : [];
37294
37796
  };
37295
- /* @conditional-compile-remove(file-sharing) */
37797
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
37296
37798
  this.registerCompletedFileUploads = (metadata) => {
37297
- return this.chatAdapter.registerCompletedFileUploads(metadata);
37799
+ var _a, _b;
37800
+ return (_b = (_a = this.chatAdapter) === null || _a === void 0 ? void 0 : _a.registerCompletedFileUploads(metadata)) !== null && _b !== void 0 ? _b : [];
37298
37801
  };
37299
- /* @conditional-compile-remove(file-sharing) */
37802
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
37300
37803
  this.clearFileUploads = () => {
37301
- this.chatAdapter.clearFileUploads();
37804
+ this.chatAdapterPromise.then((adapter) => {
37805
+ adapter.clearFileUploads();
37806
+ });
37302
37807
  };
37303
- /* @conditional-compile-remove(file-sharing) */
37808
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
37304
37809
  this.cancelFileUpload = (id) => {
37305
- this.chatAdapter.cancelFileUpload(id);
37810
+ this.chatAdapterPromise.then((adapter) => {
37811
+ adapter.cancelFileUpload(id);
37812
+ });
37306
37813
  };
37307
- /* @conditional-compile-remove(file-sharing) */
37814
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
37308
37815
  this.updateFileUploadProgress = (id, progress) => {
37309
- this.chatAdapter.updateFileUploadProgress(id, progress);
37816
+ this.chatAdapterPromise.then((adapter) => {
37817
+ adapter.updateFileUploadProgress(id, progress);
37818
+ });
37310
37819
  };
37311
- /* @conditional-compile-remove(file-sharing) */
37820
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
37312
37821
  this.updateFileUploadErrorMessage = (id, errorMessage) => {
37313
- this.chatAdapter.updateFileUploadErrorMessage(id, errorMessage);
37822
+ this.chatAdapterPromise.then((adapter) => {
37823
+ adapter.updateFileUploadErrorMessage(id, errorMessage);
37824
+ });
37314
37825
  };
37315
- /* @conditional-compile-remove(file-sharing) */
37826
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
37316
37827
  this.updateFileUploadMetadata = (id, metadata) => {
37317
- this.chatAdapter.updateFileUploadMetadata(id, metadata);
37828
+ this.chatAdapterPromise.then((adapter) => {
37829
+ adapter.updateFileUploadMetadata(id, metadata);
37830
+ });
37318
37831
  };
37319
37832
  this.bindPublicMethods();
37320
37833
  this.callAdapter = callAdapter;
37321
- this.chatAdapter = chatAdapter;
37322
- this.context = new CallWithChatContext(callWithChatAdapterStateFromBackingStates(callAdapter, chatAdapter));
37834
+ this.context = new CallWithChatContext(callWithChatAdapterStateFromBackingStates(callAdapter));
37323
37835
  const onChatStateChange = (newChatAdapterState) => {
37324
37836
  this.context.updateClientStateWithChatState(newChatAdapterState);
37325
37837
  };
37326
- this.chatAdapter.onStateChange(onChatStateChange);
37327
37838
  this.onChatStateChange = onChatStateChange;
37839
+ this.chatAdapterPromise = chatAdapterPromise;
37840
+ this.chatAdapterPromise.then((chatAdapter) => {
37841
+ chatAdapter.onStateChange(this.onChatStateChange);
37842
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
37843
+ this.chatAdapter = chatAdapter;
37844
+ this.context.updateClientStateWithChatState(chatAdapter.getState());
37845
+ });
37328
37846
  const onCallStateChange = (newCallAdapterState) => {
37329
37847
  this.context.updateClientStateWithCallState(newCallAdapterState);
37330
37848
  };
@@ -37369,19 +37887,19 @@ class AzureCommunicationCallWithChatAdapter {
37369
37887
  this.deleteMessage.bind(this);
37370
37888
  this.on.bind(this);
37371
37889
  this.off.bind(this);
37372
- /* @conditional-compile-remove(file-sharing) */
37890
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
37373
37891
  this.registerActiveFileUploads = this.registerActiveFileUploads.bind(this);
37374
- /* @conditional-compile-remove(file-sharing) */
37892
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
37375
37893
  this.registerCompletedFileUploads = this.registerCompletedFileUploads.bind(this);
37376
- /* @conditional-compile-remove(file-sharing) */
37894
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
37377
37895
  this.clearFileUploads = this.clearFileUploads.bind(this);
37378
- /* @conditional-compile-remove(file-sharing) */
37896
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
37379
37897
  this.cancelFileUpload = this.cancelFileUpload.bind(this);
37380
- /* @conditional-compile-remove(file-sharing) */
37898
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
37381
37899
  this.updateFileUploadProgress = this.updateFileUploadProgress.bind(this);
37382
- /* @conditional-compile-remove(file-sharing) */
37900
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
37383
37901
  this.updateFileUploadErrorMessage = this.updateFileUploadErrorMessage.bind(this);
37384
- /* @conditional-compile-remove(file-sharing) */
37902
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */
37385
37903
  this.updateFileUploadMetadata = this.updateFileUploadMetadata.bind(this);
37386
37904
  this.downloadResourceToCache = this.downloadResourceToCache.bind(this);
37387
37905
  this.removeResourceFromCache = this.removeResourceFromCache.bind(this);
@@ -37452,10 +37970,16 @@ class AzureCommunicationCallWithChatAdapter {
37452
37970
  }
37453
37971
  /** Dispose of the current CallWithChatAdapter. */
37454
37972
  dispose() {
37455
- this.chatAdapter.offStateChange(this.onChatStateChange);
37456
- this.callAdapter.offStateChange(this.onCallStateChange);
37457
- this.chatAdapter.dispose();
37458
- this.callAdapter.dispose();
37973
+ return __awaiter$2(this, void 0, void 0, function* () {
37974
+ this.chatAdapterPromise.then((adapter) => {
37975
+ adapter.offStateChange(this.onChatStateChange);
37976
+ });
37977
+ this.callAdapter.offStateChange(this.onCallStateChange);
37978
+ yield this.chatAdapterPromise.then((adapter) => {
37979
+ adapter.dispose();
37980
+ });
37981
+ this.callAdapter.dispose();
37982
+ });
37459
37983
  }
37460
37984
  /** Remove a participant from the Call only. */
37461
37985
  removeParticipant(userId) {
@@ -37593,53 +38117,71 @@ class AzureCommunicationCallWithChatAdapter {
37593
38117
  /** Fetch initial Call and Chat data such as chat messages. */
37594
38118
  fetchInitialData() {
37595
38119
  return __awaiter$2(this, void 0, void 0, function* () {
37596
- yield this.chatAdapter.fetchInitialData();
38120
+ return yield this.chatAdapterPromise.then((adapter) => {
38121
+ return adapter.fetchInitialData();
38122
+ });
37597
38123
  });
37598
38124
  }
37599
38125
  /** Send a chat message. */
37600
38126
  sendMessage(content) {
37601
38127
  return __awaiter$2(this, void 0, void 0, function* () {
37602
- yield this.chatAdapter.sendMessage(content);
38128
+ return yield this.chatAdapterPromise.then((adapter) => {
38129
+ return adapter.sendMessage(content);
38130
+ });
37603
38131
  });
37604
38132
  }
37605
38133
  /** Send a chat read receipt. */
37606
38134
  sendReadReceipt(chatMessageId) {
37607
38135
  return __awaiter$2(this, void 0, void 0, function* () {
37608
- yield this.chatAdapter.sendReadReceipt(chatMessageId);
38136
+ return yield this.chatAdapterPromise.then((adapter) => {
38137
+ return adapter.sendReadReceipt(chatMessageId);
38138
+ });
37609
38139
  });
37610
38140
  }
37611
38141
  /** Send an isTyping indicator. */
37612
38142
  sendTypingIndicator() {
37613
38143
  return __awaiter$2(this, void 0, void 0, function* () {
37614
- yield this.chatAdapter.sendTypingIndicator();
38144
+ return yield this.chatAdapterPromise.then((adapter) => {
38145
+ return adapter.sendTypingIndicator();
38146
+ });
37615
38147
  });
37616
38148
  }
37617
38149
  /** Load previous Chat messages. */
37618
38150
  loadPreviousChatMessages(messagesToLoad) {
37619
38151
  return __awaiter$2(this, void 0, void 0, function* () {
37620
- return yield this.chatAdapter.loadPreviousChatMessages(messagesToLoad);
38152
+ return yield this.chatAdapterPromise.then((adapter) => {
38153
+ return adapter.loadPreviousChatMessages(messagesToLoad);
38154
+ });
37621
38155
  });
37622
38156
  }
37623
38157
  /** Update an existing message. */
37624
38158
  updateMessage(messageId, content, metadata, options) {
37625
38159
  return __awaiter$2(this, void 0, void 0, function* () {
37626
- return yield this.chatAdapter.updateMessage(messageId, content, metadata,
37627
- /* @conditional-compile-remove(file-sharing) */ options);
38160
+ return this.chatAdapterPromise.then((adapter) => {
38161
+ return adapter.updateMessage(messageId, content, metadata,
38162
+ /* @conditional-compile-remove(attachment-download) @conditional-compile-remove(attachment-upload) */ options);
38163
+ });
37628
38164
  });
37629
38165
  }
37630
38166
  /** Delete an existing message. */
37631
38167
  deleteMessage(messageId) {
37632
38168
  return __awaiter$2(this, void 0, void 0, function* () {
37633
- return yield this.chatAdapter.deleteMessage(messageId);
38169
+ return yield this.chatAdapterPromise.then((adapter) => {
38170
+ return adapter.deleteMessage(messageId);
38171
+ });
37634
38172
  });
37635
38173
  }
37636
38174
  downloadResourceToCache(resourceDetails) {
37637
38175
  return __awaiter$2(this, void 0, void 0, function* () {
37638
- this.chatAdapter.downloadResourceToCache(resourceDetails);
38176
+ this.chatAdapterPromise.then((adapter) => {
38177
+ adapter.downloadResourceToCache(resourceDetails);
38178
+ });
37639
38179
  });
37640
38180
  }
37641
38181
  removeResourceFromCache(resourceDetails) {
37642
- this.chatAdapter.removeResourceFromCache(resourceDetails);
38182
+ this.chatAdapterPromise.then((adapter) => {
38183
+ adapter.removeResourceFromCache(resourceDetails);
38184
+ });
37643
38185
  }
37644
38186
  /* @conditional-compile-remove(PSTN-calls) */
37645
38187
  holdCall() {
@@ -37787,31 +38329,47 @@ class AzureCommunicationCallWithChatAdapter {
37787
38329
  this.callAdapter.on('isSpokenLanguageChanged', listener);
37788
38330
  break;
37789
38331
  case 'messageReceived':
37790
- this.chatAdapter.on('messageReceived', listener);
38332
+ this.chatAdapterPromise.then((adapter) => {
38333
+ adapter.on('messageReceived', listener);
38334
+ });
37791
38335
  break;
37792
38336
  case 'messageEdited':
37793
- this.chatAdapter.on('messageEdited', listener);
38337
+ this.chatAdapterPromise.then((adapter) => {
38338
+ adapter.on('messageEdited', listener);
38339
+ });
37794
38340
  break;
37795
38341
  case 'messageDeleted':
37796
- this.chatAdapter.on('messageDeleted', listener);
38342
+ this.chatAdapterPromise.then((adapter) => {
38343
+ adapter.on('messageDeleted', listener);
38344
+ });
37797
38345
  break;
37798
38346
  case 'messageSent':
37799
- this.chatAdapter.on('messageSent', listener);
38347
+ this.chatAdapterPromise.then((adapter) => {
38348
+ adapter.on('messageSent', listener);
38349
+ });
37800
38350
  break;
37801
38351
  case 'messageRead':
37802
- this.chatAdapter.on('messageRead', listener);
38352
+ this.chatAdapterPromise.then((adapter) => {
38353
+ adapter.on('messageRead', listener);
38354
+ });
37803
38355
  break;
37804
38356
  case 'chatParticipantsAdded':
37805
- this.chatAdapter.on('participantsAdded', listener);
38357
+ this.chatAdapterPromise.then((adapter) => {
38358
+ adapter.on('participantsAdded', listener);
38359
+ });
37806
38360
  break;
37807
38361
  case 'chatParticipantsRemoved':
37808
- this.chatAdapter.on('participantsRemoved', listener);
38362
+ this.chatAdapterPromise.then((adapter) => {
38363
+ adapter.on('participantsRemoved', listener);
38364
+ });
37809
38365
  break;
37810
38366
  case 'callError':
37811
38367
  this.callAdapter.on('error', listener);
37812
38368
  break;
37813
38369
  case 'chatError':
37814
- this.chatAdapter.on('error', listener);
38370
+ this.chatAdapterPromise.then((adapter) => {
38371
+ adapter.on('error', listener);
38372
+ });
37815
38373
  break;
37816
38374
  default:
37817
38375
  throw `Unknown AzureCommunicationCallWithChatAdapter Event: ${event}`;
@@ -37867,37 +38425,113 @@ class AzureCommunicationCallWithChatAdapter {
37867
38425
  this.callAdapter.off('isSpokenLanguageChanged', listener);
37868
38426
  break;
37869
38427
  case 'messageReceived':
37870
- this.chatAdapter.off('messageReceived', listener);
38428
+ this.chatAdapterPromise.then((adapter) => {
38429
+ adapter.off('messageReceived', listener);
38430
+ });
37871
38431
  break;
37872
38432
  case 'messageEdited':
37873
- this.chatAdapter.off('messageEdited', listener);
38433
+ this.chatAdapterPromise.then((adapter) => {
38434
+ adapter.off('messageEdited', listener);
38435
+ });
37874
38436
  break;
37875
38437
  case 'messageDeleted':
37876
- this.chatAdapter.off('messageDeleted', listener);
38438
+ this.chatAdapterPromise.then((adapter) => {
38439
+ adapter.off('messageDeleted', listener);
38440
+ });
37877
38441
  break;
37878
38442
  case 'messageSent':
37879
- this.chatAdapter.off('messageSent', listener);
38443
+ this.chatAdapterPromise.then((adapter) => {
38444
+ adapter.off('messageSent', listener);
38445
+ });
37880
38446
  break;
37881
38447
  case 'messageRead':
37882
- this.chatAdapter.off('messageRead', listener);
38448
+ this.chatAdapterPromise.then((adapter) => {
38449
+ adapter.off('messageRead', listener);
38450
+ });
37883
38451
  break;
37884
38452
  case 'chatParticipantsAdded':
37885
- this.chatAdapter.off('participantsAdded', listener);
38453
+ this.chatAdapterPromise.then((adapter) => {
38454
+ adapter.off('participantsAdded', listener);
38455
+ });
37886
38456
  break;
37887
38457
  case 'chatParticipantsRemoved':
37888
- this.chatAdapter.off('participantsRemoved', listener);
38458
+ this.chatAdapterPromise.then((adapter) => {
38459
+ adapter.off('participantsRemoved', listener);
38460
+ });
37889
38461
  break;
37890
38462
  case 'callError':
37891
38463
  this.callAdapter.off('error', listener);
37892
38464
  break;
37893
38465
  case 'chatError':
37894
- this.chatAdapter.off('error', listener);
38466
+ this.chatAdapterPromise.then((adapter) => {
38467
+ adapter.off('error', listener);
38468
+ });
37895
38469
  break;
37896
38470
  default:
37897
38471
  throw `Unknown AzureCommunicationCallWithChatAdapter Event: ${event}`;
37898
38472
  }
37899
38473
  }
37900
38474
  }
38475
+ /**
38476
+ * Arguments for use in {@link createAzureCommunicationCallWithChatAdapter} to join a Group Call with an associated Chat thread.
38477
+ * @public
38478
+ */
38479
+ class CallAndChatProvider {
38480
+ constructor(locator) {
38481
+ this.locator = locator;
38482
+ }
38483
+ getChatThread() {
38484
+ return __awaiter$2(this, void 0, void 0, function* () {
38485
+ return this.locator.chatThreadId;
38486
+ });
38487
+ }
38488
+ }
38489
+ /**
38490
+ * Arguments for use in {@link createAzureCommunicationCallWithChatAdapter} to join a Teams meeting with an associated Chat thread.
38491
+ *
38492
+ * @public
38493
+ */
38494
+ class TeamsMeetingLinkProvider {
38495
+ constructor(locator) {
38496
+ this.locator = locator;
38497
+ }
38498
+ getChatThread() {
38499
+ return __awaiter$2(this, void 0, void 0, function* () {
38500
+ return getChatThreadFromTeamsLink(this.locator.meetingLink);
38501
+ });
38502
+ }
38503
+ }
38504
+ /** @conditional-compile-remove(meeting-id) */
38505
+ /**
38506
+ * Arguments for use in {@link createAzureCommunicationCallWithChatAdapter} to join a Teams meeting using meeting id.
38507
+ *
38508
+ * @public
38509
+ */
38510
+ class TeamsMeetingIdProvider {
38511
+ constructor(locator, callAdapter) {
38512
+ this.locator = locator;
38513
+ this.callAdapter = callAdapter;
38514
+ }
38515
+ /**
38516
+ * Wait call to be connected to get thread ID.
38517
+ * @returns the chat thread ID for the given meeting ID.
38518
+ */
38519
+ getChatThread() {
38520
+ return __awaiter$2(this, void 0, void 0, function* () {
38521
+ return new Promise((resolve) => {
38522
+ const stateChangeListener = (state) => {
38523
+ var _a, _b, _c;
38524
+ if (((_a = state.call) === null || _a === void 0 ? void 0 : _a.state) === 'Connected' && ((_b = state.call.info) === null || _b === void 0 ? void 0 : _b.threadId)) {
38525
+ resolve((_c = state.call.info) === null || _c === void 0 ? void 0 : _c.threadId);
38526
+ }
38527
+ };
38528
+ this.callAdapter.then((adapter) => {
38529
+ adapter.onStateChange(stateChangeListener);
38530
+ });
38531
+ });
38532
+ });
38533
+ }
38534
+ }
37901
38535
  /**
37902
38536
  * Create a CallWithChatAdapter backed by Azure Communication services
37903
38537
  * to plug into the {@link CallWithChatComposite}.
@@ -37906,8 +38540,8 @@ class AzureCommunicationCallWithChatAdapter {
37906
38540
  */
37907
38541
  const createAzureCommunicationCallWithChatAdapter = (_a) => __awaiter$2(void 0, [_a], void 0, function* ({ userId, displayName, credential, endpoint, locator,
37908
38542
  /* @conditional-compile-remove(PSTN-calls) */ alternateCallerId, callAdapterOptions }) {
37909
- const callAdapterLocator = isTeamsMeetingLinkLocator(locator) ? locator : locator.callLocator;
37910
- const createCallAdapterPromise = _createAzureCommunicationCallAdapterInner({
38543
+ const callAdapterLocator = isTeamsMeetingLocator(locator) ? locator : locator.callLocator;
38544
+ const callAdapter = _createAzureCommunicationCallAdapterInner({
37911
38545
  userId,
37912
38546
  displayName,
37913
38547
  credential,
@@ -37916,12 +38550,9 @@ const createAzureCommunicationCallWithChatAdapter = (_a) => __awaiter$2(void 0,
37916
38550
  options: callAdapterOptions,
37917
38551
  telemetryImplementationHint: 'CallWithChat'
37918
38552
  });
37919
- const threadId = isTeamsMeetingLinkLocator(locator)
37920
- ? getChatThreadFromTeamsLink(locator.meetingLink)
37921
- : locator.chatThreadId;
37922
- const createChatAdapterPromise = _createAzureCommunicationChatAdapterInner(endpoint, userId, displayName, credential, threadId, 'CallWithChat');
37923
- const [callAdapter, chatAdapter] = yield Promise.all([createCallAdapterPromise, createChatAdapterPromise]);
37924
- return new AzureCommunicationCallWithChatAdapter(callAdapter, chatAdapter);
38553
+ const chatThreadAdapter = _createChatThreadAdapterInner(locator, callAdapter);
38554
+ const chatAdapter = _createLazyAzureCommunicationChatAdapterInner(endpoint, userId, displayName, credential, chatThreadAdapter.getChatThread(), 'CallWithChat');
38555
+ return new AzureCommunicationCallWithChatAdapter(yield callAdapter, chatAdapter);
37925
38556
  });
37926
38557
  /**
37927
38558
  * A custom React hook to simplify the creation of {@link CallWithChatAdapter}.
@@ -38049,13 +38680,22 @@ beforeDispose) => {
38049
38680
  * @public
38050
38681
  */
38051
38682
  const createAzureCommunicationCallWithChatAdapterFromClients = (_b) => __awaiter$2(void 0, [_b], void 0, function* ({ callClient, callAgent, callLocator, chatClient, chatThreadClient, callAdapterOptions }) {
38052
- const createCallAdapterPromise = createAzureCommunicationCallAdapterFromClient(callClient, callAgent, callLocator, callAdapterOptions);
38053
- const createChatAdapterPromise = createAzureCommunicationChatAdapterFromClient(chatClient, chatThreadClient);
38054
- const [callAdapter, chatAdapter] = yield Promise.all([createCallAdapterPromise, createChatAdapterPromise]);
38055
- return new AzureCommunicationCallWithChatAdapter(callAdapter, chatAdapter);
38683
+ const callAdapter = yield createAzureCommunicationCallAdapterFromClient(callClient, callAgent, callLocator, callAdapterOptions);
38684
+ const chatAdapterPromise = createAzureCommunicationChatAdapterFromClient(chatClient, chatThreadClient);
38685
+ return new AzureCommunicationCallWithChatAdapter(callAdapter, chatAdapterPromise);
38056
38686
  });
38057
- const isTeamsMeetingLinkLocator = (locator) => {
38058
- return 'meetingLink' in locator;
38687
+ const isTeamsMeetingLocator = (locator) => {
38688
+ return 'meetingLink' in locator || 'meetingId' in locator;
38689
+ };
38690
+ const _createChatThreadAdapterInner = (locator, adapter) => {
38691
+ if ('meetingLink' in locator) {
38692
+ return new TeamsMeetingLinkProvider(locator);
38693
+ }
38694
+ /** @conditional-compile-remove(meeting-id) */
38695
+ if ('meetingId' in locator) {
38696
+ return new TeamsMeetingIdProvider(locator, adapter);
38697
+ }
38698
+ return new CallAndChatProvider(locator);
38059
38699
  };
38060
38700
 
38061
38701
  var call$j={cameraLabel:"Camera",noCamerasLabel:"No cameras found",cameraPermissionDenied:"Your browser is blocking access to your camera",cameraTurnedOff:"Your camera is turned off",chatButtonLabel:"Chat",close:"Close",complianceBannerNowOnlyRecording:"You are now only recording this meeting.",complianceBannerNowOnlyTranscription:"You are now only transcribing this meeting.",complianceBannerRecordingAndTranscriptionSaved:"Recording and transcription are being saved.",complianceBannerRecordingAndTranscriptionStarted:"Recording and transcription have started.",complianceBannerRecordingAndTranscriptionStopped:"Recording and transcription have stopped.",complianceBannerRecordingSaving:"Recording is being saved.",complianceBannerRecordingStarted:"Recording has started.",complianceBannerRecordingStopped:"Recording has stopped.",complianceBannerTranscriptionStarted:"Transcription has started.",complianceBannerTranscriptionConsent:"By joining, you are giving consent for this meeting to be transcribed.",complianceBannerTranscriptionSaving:"Transcription is being saved.",complianceBannerTranscriptionStopped:"Transcription has stopped.",configurationPageTitle:"Start a call",copyInviteLinkButtonLabel:"Copy invite link",copyInviteLinkActionedAriaLabel:"Invite link copied",defaultPlaceHolder:"Select an option",dismissSidePaneButtonLabel:"Close",videoEffectsPaneTitle:"Effects",videoEffectsPaneBackgroundSelectionTitle:"Background",configurationPageVideoEffectsButtonLabel:"Effects",unableToStartVideoEffect:"Unable to apply video effect.",blurBackgroundEffectButtonLabel:"Blur",blurBackgroundTooltip:"Blur Background",removeBackgroundEffectButtonLabel:"None",removeBackgroundTooltip:"Remove Background",cameraOffBackgroundEffectWarningText:"Your camera is off. Turn on camera to see video effect.",failedToJoinCallDueToNoNetworkMoreDetails:"Call was disconnected due to a network issue. Check your connection and join again.",failedToJoinCallDueToNoNetworkTitle:"Call disconnected",failedToJoinTeamsMeetingReasonAccessDeniedMoreDetails:"You were not granted entry in the call. If this was a mistake, re-join the call.",failedToJoinTeamsMeetingReasonAccessDeniedTitle:"Dismissed from lobby",learnMore:"Learn more",leavingCallTitle:"Leaving...",leftCallMoreDetails:"If this was a mistake, re-join the call.",leftCallTitle:"You left the call",lobbyScreenConnectingToCallTitle:"Joining call",lobbyScreenWaitingToBeAdmittedTitle:"Waiting to be admitted",microphonePermissionDenied:"Your browser is blocking access to your microphone",microphoneToggleInLobbyNotAllowed:"Cannot mute or unmute while in lobby.",mutedMessage:"You're muted",networkReconnectMoreDetails:"Looks like something went wrong. We're trying to get back into the call.",networkReconnectTitle:"Hold on",notInvitedToRoomDetails:"You are not able to join this room because you do not have an invite.",notInvitedToRoomTitle:"Not invited to room",peopleButtonLabel:"People",selectedPeopleButtonLabel:"People Button Selected",peoplePaneTitle:"People",peoplePaneMoreButtonAriaLabel:"More",peopleButtonTooltipOpen:"Show participants",peopleButtonTooltipClose:"Hide participants",peoplePaneSubTitle:"In this call {numberOfPeople}",privacyPolicy:"Privacy policy",rejoinCallButtonLabel:"Re-join call",removedFromCallMoreDetails:"Another participant removed you from the call.",removedFromCallTitle:"You were removed",removeMenuLabel:"Remove",startSpotlightMenuLabel:"Spotlight for everyone",addSpotlightMenuLabel:"Add spotlight",stopSpotlightMenuLabel:"Stop spotlighting",stopSpotlightOnSelfMenuLabel:"Exit spotlight",spotlightLimitReachedMenuTitle:"Spotlight limit reached",stopAllSpotlightMenuLabel:"Stop all spotlights",returnToCallButtonAriaDescription:"Return to Call",returnToCallButtonAriaLabel:"Back",roomNotFoundDetails:"The room ID provided could not be found.",roomNotFoundTitle:"Room not found",roomNotValidDetails:"This room is not valid at this current time.",roomNotValidTitle:"Room not valid",inviteToRoomRemovedDetails:"Your invite to join this room was removed.",inviteToRoomRemovedTitle:"Invite to room removed",soundLabel:"Sound",noMicrophonesLabel:"No microphones found",noSpeakersLabel:"No speakers found",startCallButtonLabel:"Start call",openDialpadButtonLabel:"Dial phone number",peoplePaneAddPeopleButtonLabel:"Add People",dialpadStartCallButtonLabel:"Call",dialpadModalTitle:"Dial Phone Number",dialpadModalAriaLabel:"Dialpad",dialpadCloseModalButtonAriaLabel:"Close dialpad",moreButtonCallingLabel:"More",resumeCallButtonLabel:"Resume",resumingCallButtonLabel:"Resuming...",resumeCallButtonAriaLabel:"Resume call",resumingCallButtonAriaLabel:"Resume call",holdScreenLabel:"You're on hold",openDtmfDialpadLabel:"Show dialpad",dtmfDialpadPlaceholderText:"Enter number",outboundCallingNoticeString:"Calling...",participantJoinedNoticeString:"{displayName} joined",twoParticipantJoinedNoticeString:"{displayName1} and {displayName2} have joined",threeParticipantJoinedNoticeString:"{displayName1}, {displayName2} and {displayName3} have joined",participantLeftNoticeString:"{displayName} left",twoParticipantLeftNoticeString:"{displayName1} and {displayName2} have left",threeParticipantLeftNoticeString:"{displayName1}, {displayName2} and {displayName3} have left",unnamedParticipantString:"unnamed participant",manyUnnamedParticipantsJoined:"unnamed participant and {numOfParticipants} other participants joined",manyUnnamedParticipantsLeft:"unnamed participant and {numOfParticipants} other participants left",manyParticipantsJoined:"{displayName1}, {displayName2}, {displayName3} and {numOfParticipants} other participants joined",manyParticipantsLeft:"{displayName1}, {displayName2}, {displayName3} and {numOfParticipants} other participants left",liveCaptionsLabel:"Live captions",captionsSettingsLabel:"Caption settings",startCaptionsButtonOnLabel:"Turn on captions",startCaptionsButtonOffLabel:"Turn off captions",startCaptionsButtonTooltipOnContent:"Turn off captions",startCaptionsButtonTooltipOffContent:"Turn on captions",captionsSettingsModalTitle:"Captions Settings",captionsSettingsSpokenLanguageDropdownLabel:"Spoken language",captionsSettingsCaptionLanguageDropdownLabel:"Captions language",captionsSettingsSpokenLanguageDropdownInfoText:"Language that everyone on this call is speaking.",captionsSettingsCaptionLanguageDropdownInfoText:"Captions will appear in this langugage.",captionsSettingsConfirmButtonLabel:"Confirm",captionsSettingsCancelButtonLabel:"Cancel",captionsSettingsModalAriaLabel:"Captions Setting Modal",captionsSettingsCloseModalButtonAriaLabel:"Close Captions Setting",captionsBannerMoreButtonCallingLabel:"More",captionsBannerMoreButtonTooltip:"More options",dismissModalAriaLabel:"Local and remote picture and picture, press enter to return to call",callRejectedTitle:"The call could not be completed",callRejectedMoreDetails:"The person you are trying to reach is unavailable. Please try again later.",callTimeoutTitle:"The call could not be completed",callTimeoutDetails:"The person you are trying to reach is unavailable. Please try again later.",callTimeoutBotTitle:"The call could not be completed",callTimeoutBotDetails:"The service that you are trying to reach is unavailable. Please try again later.",dtmfDialerButtonLabel:"Dialpad",dtmfDialerButtonTooltipOn:"Show dialpad",dtmfDialerButtonTooltipOff:"Hide dialpad",dtmfDialerMoreButtonLabelOn:"Show dialpad",dtmfDialerMoreButtonLabelOff:"Hide dialpad",spokenLanguageStrings:{"ar-ae":"Arabic - U.A.E.","ar-sa":"Arabic - Saudi Arabia","da-dk":"Danish","de-de":"German - Germany","en-au":"English - Australia","en-ca":"English - Canada","en-gb":"English - United Kingdom","en-in":"English - India","en-nz":"English - New Zealand","en-us":"English - United States","es-es":"Spanish - Spain (Modern Sort)","es-mx":"Spanish - Mexico","fi-fi":"Finnish","fr-ca":"French - Canada","fr-fr":"French - France","hi-in":"Hindi","it-it":"Italian - Italy","ja-jp":"Japanese","ko-kr":"Korean","nb-no":"Norwegian (Bokmål)","nl-be":"Dutch - Belgium","nl-nl":"Dutch - Netherlands","pl-pl":"Polish","pt-br":"Portuguese - Brazil","ru-ru":"Russian","sv-se":"Swedish","zh-cn":"Chinese - People's Republic of China","zh-hk":"Chinese - Hong Kong SAR","cs-cz":"Czech","pt-pt":"Portuguese - Portugal","tr-tr":"Turkish","vi-vn":"Vietnamese","th-th":"Thai","he-il":"Hebrew","cy-gb":"Welsh","uk-ua":"Ukrainian","el-gr":"Greek","hu-hu":"Hungarian","ro-ro":"Romanian","sk-sk":"Slovak","zh-tw":"Chinese - Taiwan"},captionLanguageStrings:{ar:"Arabic",da:"Danish",de:"German",en:"English",es:"Spanish",fi:"Finnish","fr-ca":"French - Canada",fr:"French - France",hi:"Hindi",it:"Italian",ja:"Japanese",ko:"Korean",nb:"Norwegian (Bokmål)",nl:"Dutch",pl:"Polish",pt:"Portuguese - Brazil",ru:"Russian",sv:"Swedish","zh-Hans":"Chinese (Simplified)","zh-Hant":"Chinese (Traditional)",cs:"Czech","pt-pt":"Portuguese - Portugal",tr:"Turkish",vi:"Vietnamese",th:"Thai",he:"Hebrew",cy:"Welsh",uk:"Ukrainian",el:"Greek",hu:"Hungarian",ro:"Romanian",sk:"Slovak"},captionsBannerSpinnerText:"Starting captions...",transferPageTransferorText:"Transferring...",transferPageTransferTargetText:"Connecting...",transferPageUnknownTransferorDisplayName:"Unknown",transferPageUnknownTransferTargetDisplayName:"Unknown",transferPageNoticeString:"You are being transferred",participantCouldNotBeReachedTitle:"Target participant is currently not available",participantCouldNotBeReachedMoreDetails:"Please contact participant when they are available",permissionToReachTargetParticipantNotAllowedTitle:"Permission to reach target participant is not allowed",permissionToReachTargetParticipantNotAllowedMoreDetails:"Please check that the target participant is in the same tenant",unableToResolveTenantTitle:"Unable to resolve tenant id for the target participant",unableToResolveTenantMoreDetails:"Please check the participant id is entered correctly",participantIdIsMalformedTitle:"Participant id is not in the correct format",participantIdIsMalformedMoreDetails:"Please check that the participant id is in the correct format",moreButtonGalleryControlLabel:"View",moreButtonGalleryPositionToggleLabel:"Move gallery to top",moreButtonGallerySpeakerLayoutLabel:"Speaker",moreButtonGalleryFloatingLocalLayoutLabel:"Dynamic",moreButtonGalleryDefaultLayoutLabel:"Gallery view",moreButtonGalleryFocusedContentLayoutLabel:"Focus on content",moreButtonLargeGalleryDefaultLayoutLabel:"Large Gallery",capabilityChangedNotification:{turnVideoOn:{lostDueToMeetingOption:"Your camera has been disabled. You can no longer share video.",grantedDueToMeetingOption:"Your camera has been enabled. Turn it on if you'd like to share video."},unmuteMic:{lostDueToMeetingOption:"Your mic has been disabled. You can no longer unmute.",grantedDueToMeetingOption:"Your mic has been enabled. Unmute if you'd like to speak."},shareScreen:{lostDueToRoleChangeToAttendee:"Your role has been changed. Some actions, like sharing content, won't be available to you.",grantedDueToRoleChangeToPresenter:"You're a presenter. You can share content and facilitate the meeting."}},surveyTitle:"Help us improve",starSurveyHelperText:"How was the quality of the call?",starSurveyOneStarText:"The quality was bad.",starSurveyTwoStarText:"The quality was poor.",starSurveyThreeStarText:"The quality was good.",starSurveyFourStarText:"The quality was great.",starSurveyFiveStarText:"The quality was excellent.",surveyConfirmButtonLabel:"Send Feedback",starRatingAriaLabel:"Select {0} of {1} stars",surveySkipButtonLabel:"Skip",tagsSurveyQuestion:"What could have been better?",tagsSurveyTextFieldDefaultText:"Other, please specify",tagsSurveyHelperText:"Check any issues you experienced",surveyTextboxDefaultText:"Other, please specify",endOfSurveyText:"Thank you for your feedback!",surveyIssues:{overallRating:{callCannotJoin:"I could not join call",callCannotInvite:"I could not invite others into the call",hadToRejoin:"I had to rejoin the call",callEndedUnexpectedly:"Call ended for me unexpectedly",otherIssues:"I was having other issues with the call"},audioRating:{noLocalAudio:"The other side could not hear any sound",noRemoteAudio:"I could not hear any sound",echo:"I heard echos on the call",audioNoise:"I heard noise on the call",lowVolume:"Volume was low",audioStoppedUnexpectedly:"Audio stopped unexpectedly",distortedSpeech:"Audio was distorted",audioInterruption:"Audio was interrupted",otherIssues:"I was having other audio issues in this call"},videoRating:{noVideoReceived:"I could not see any video",noVideoSent:"Others could not see me",lowQuality:"Video quality was low",freezes:"Video frozen",stoppedUnexpectedly:"Video stopped unexpectedly",darkVideoReceived:"I can only see dark screens when others turn on their camera",audioVideoOutOfSync:"Audio and Video was out of sync",otherIssues:"I was having other video issues in this call"},screenshareRating:{noContentLocal:"Other people could not see my screenshare",noContentRemote:"I could not see other people's screenshare",cannotPresent:"I could not present my screen",lowQuality:"Screen share quality was low",freezes:"Screen share frozen",stoppedUnexpectedly:"Screen share stopped unexpectedly",largeDelay:"Screen share has a large delay",otherIssues:"I was having other screen share issues in this call"}},SurveyIssuesHeadingStrings:{overallRating:"Overall",audioRating:"Audio",videoRating:"Video",screenshareRating:"Presenting"},spotlightPrompt:{startSpotlightHeading:"Spotlight for everyone?",startSpotlightText:"You'll highlight this video for everyone in the meeting.",startSpotlightOnSelfText:"You'll highlight your video for everyone in the meeting.",startSpotlightConfirmButtonLabel:"Spotlight for everyone",startSpotlightCancelButtonLabel:"Cancel",stopSpotlightHeading:"Stop spotlighting this video?",stopSpotlightOnSelfHeading:"Exit spotlight?",stopAllSpotlightHeading:"Stop spotlighting all videos?",stopSpotlightText:"This video will no longer be highlighted for everyone in the meeting.",stopSpotlightOnSelfText:"Your video will no longer be highlighted for everyone in the meeting.",stopAllSpotlightText:"The videos will no longer be highlighted for everyone in the meeting.",stopSpotlightConfirmButtonLabel:"Stop spotlighting",stopSpotlightOnSelfConfirmButtonLabel:"Exit spotlight",stopSpotlightCancelButtonLabel:"Cancel"},exitSpotlightButtonLabel:"Exit spotlight",exitSpotlightButtonTooltip:"Exit spotlight"};var chat$j={chatListHeader:"In this chat",uploadFile:"Upload File"};var callWithChat$j={chatButtonLabel:"Chat",chatButtonNewMessageNotificationLabel:"New Message",chatButtonTooltipClosedWithMessageCount:"Show chat ({unreadMessagesCount} unread)",chatButtonTooltipClose:"Hide chat",chatButtonTooltipOpen:"Show chat",chatPaneTitle:"Chat",copyInviteLinkButtonLabel:"Copy invite link",copyInviteLinkActionedAriaLabel:"Invite link copied",dismissSidePaneButtonLabel:"Close",moreDrawerAudioDeviceMenuTitle:"Audio Device",moreDrawerButtonLabel:"More options",moreDrawerButtonTooltip:"More options",moreDrawerMicrophoneMenuTitle:"Microphone",moreDrawerSpeakerMenuTitle:"Speaker",moreDrawerCaptionsMenuTitle:"Live captions",moreDrawerSpokenLanguageMenuTitle:"Spoken language",moreDrawerCaptionLanguageMenuTitle:"Caption language",moreDrawerGalleryOptionsMenuTitle:"Gallery options",peopleButtonLabel:"People",selectedPeopleButtonLabel:"People Button Selected",peopleButtonTooltipOpen:"Show participants",peopleButtonTooltipClose:"Hide participants",peoplePaneSubTitle:"In this call",peoplePaneTitle:"People",pictureInPictureTileAriaLabel:"Video Feeds. Click to return to call screen.",removeMenuLabel:"Remove",openDialpadButtonLabel:"Dial phone number",returnToCallButtonAriaDescription:"Return to Call",returnToCallButtonAriaLabel:"Back",peoplePaneAddPeopleButtonLabel:"Add People",dialpadStartCallButtonLabel:"Call",dialpadModalTitle:"Dial Phone Number",dialpadModalAriaLabel:"Dialpad",dialpadCloseModalButtonAriaLabel:"Close dialpad",openDtmfDialpadLabel:"Show dialpad",dtmfDialpadPlaceholderText:"Enter number"};var en_GB = {call:call$j,chat:chat$j,callWithChat:callWithChat$j};
@@ -38611,4 +39251,4 @@ exports.useTeamsCall = useTeamsCall;
38611
39251
  exports.useTeamsCallAdapter = useTeamsCallAdapter;
38612
39252
  exports.useTeamsCallAgent = useTeamsCallAgent;
38613
39253
  exports.useTheme = useTheme;
38614
- //# sourceMappingURL=index-Ba2HAv_Y.js.map
39254
+ //# sourceMappingURL=index-BI61bnOi.js.map