@azure/communication-react 1.2.3-alpha-202205100013.0 → 1.2.3-alpha-202205130015.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (129) hide show
  1. package/dist/communication-react.d.ts +16 -5
  2. package/dist/dist-cjs/communication-react/index.js +343 -286
  3. package/dist/dist-cjs/communication-react/index.js.map +1 -1
  4. package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js +1 -1
  5. package/dist/dist-esm/chat-component-bindings/src/handlers/createHandlers.d.ts +4 -1
  6. package/dist/dist-esm/chat-component-bindings/src/handlers/createHandlers.d.ts.map +1 -1
  7. package/dist/dist-esm/chat-component-bindings/src/handlers/createHandlers.js +4 -2
  8. package/dist/dist-esm/chat-component-bindings/src/handlers/createHandlers.js.map +1 -1
  9. package/dist/dist-esm/chat-stateful-client/src/StatefulChatClient.d.ts +2 -1
  10. package/dist/dist-esm/chat-stateful-client/src/StatefulChatClient.d.ts.map +1 -1
  11. package/dist/dist-esm/chat-stateful-client/src/StatefulChatClient.js +3 -2
  12. package/dist/dist-esm/chat-stateful-client/src/StatefulChatClient.js.map +1 -1
  13. package/dist/dist-esm/chat-stateful-client/src/index.d.ts +1 -1
  14. package/dist/dist-esm/chat-stateful-client/src/index.d.ts.map +1 -1
  15. package/dist/dist-esm/chat-stateful-client/src/index.js +1 -1
  16. package/dist/dist-esm/chat-stateful-client/src/index.js.map +1 -1
  17. package/dist/dist-esm/communication-react/src/index.d.ts +4 -3
  18. package/dist/dist-esm/communication-react/src/index.d.ts.map +1 -1
  19. package/dist/dist-esm/communication-react/src/index.js +2 -2
  20. package/dist/dist-esm/communication-react/src/index.js.map +1 -1
  21. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageComponent.d.ts +4 -2
  22. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageComponent.d.ts.map +1 -1
  23. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageComponent.js +2 -2
  24. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageComponent.js.map +1 -1
  25. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageComponentAsEditBox.d.ts +4 -1
  26. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageComponentAsEditBox.d.ts.map +1 -1
  27. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageComponentAsEditBox.js +24 -15
  28. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageComponentAsEditBox.js.map +1 -1
  29. package/dist/dist-esm/react-components/src/components/ComplianceBanner/ComplianceBanner.d.ts +41 -0
  30. package/dist/dist-esm/react-components/src/components/ComplianceBanner/ComplianceBanner.d.ts.map +1 -0
  31. package/dist/dist-esm/{react-composites/src/composites/CallComposite/components → react-components/src/components/ComplianceBanner}/ComplianceBanner.js +52 -48
  32. package/dist/dist-esm/react-components/src/components/ComplianceBanner/ComplianceBanner.js.map +1 -0
  33. package/dist/dist-esm/react-components/src/components/ComplianceBanner/Utils.d.ts +20 -0
  34. package/dist/dist-esm/react-components/src/components/ComplianceBanner/Utils.d.ts.map +1 -0
  35. package/dist/dist-esm/react-components/src/components/ComplianceBanner/Utils.js +42 -0
  36. package/dist/dist-esm/react-components/src/components/ComplianceBanner/Utils.js.map +1 -0
  37. package/dist/dist-esm/react-components/src/components/ComplianceBanner/index.d.ts +3 -0
  38. package/dist/dist-esm/react-components/src/components/ComplianceBanner/index.d.ts.map +1 -0
  39. package/dist/dist-esm/react-components/src/components/ComplianceBanner/index.js +4 -0
  40. package/dist/dist-esm/react-components/src/components/ComplianceBanner/index.js.map +1 -0
  41. package/dist/dist-esm/react-components/src/components/Dialpad/Dialpad.d.ts +50 -0
  42. package/dist/dist-esm/react-components/src/components/Dialpad/Dialpad.d.ts.map +1 -0
  43. package/dist/dist-esm/react-components/src/components/Dialpad/Dialpad.js +72 -0
  44. package/dist/dist-esm/react-components/src/components/Dialpad/Dialpad.js.map +1 -0
  45. package/dist/dist-esm/react-components/src/components/InputBoxComponent.d.ts.map +1 -1
  46. package/dist/dist-esm/react-components/src/components/InputBoxComponent.js +1 -2
  47. package/dist/dist-esm/react-components/src/components/InputBoxComponent.js.map +1 -1
  48. package/dist/dist-esm/react-components/src/components/LocalVideoTile.d.ts +29 -0
  49. package/dist/dist-esm/react-components/src/components/LocalVideoTile.d.ts.map +1 -0
  50. package/dist/dist-esm/react-components/src/components/LocalVideoTile.js +66 -0
  51. package/dist/dist-esm/react-components/src/components/LocalVideoTile.js.map +1 -0
  52. package/dist/dist-esm/react-components/src/components/MessageThread.d.ts +10 -4
  53. package/dist/dist-esm/react-components/src/components/MessageThread.d.ts.map +1 -1
  54. package/dist/dist-esm/react-components/src/components/MessageThread.js.map +1 -1
  55. package/dist/dist-esm/react-components/src/components/RemoteVideoTile.d.ts +2 -0
  56. package/dist/dist-esm/react-components/src/components/RemoteVideoTile.d.ts.map +1 -1
  57. package/dist/dist-esm/react-components/src/components/RemoteVideoTile.js +2 -0
  58. package/dist/dist-esm/react-components/src/components/RemoteVideoTile.js.map +1 -1
  59. package/dist/dist-esm/react-components/src/components/SendBox.d.ts.map +1 -1
  60. package/dist/dist-esm/react-components/src/components/SendBox.js +0 -2
  61. package/dist/dist-esm/react-components/src/components/SendBox.js.map +1 -1
  62. package/dist/dist-esm/react-components/src/components/VideoGallery.d.ts.map +1 -1
  63. package/dist/dist-esm/react-components/src/components/VideoGallery.js +18 -40
  64. package/dist/dist-esm/react-components/src/components/VideoGallery.js.map +1 -1
  65. package/dist/dist-esm/react-components/src/components/index.d.ts +5 -1
  66. package/dist/dist-esm/react-components/src/components/index.d.ts.map +1 -1
  67. package/dist/dist-esm/react-components/src/components/index.js +2 -0
  68. package/dist/dist-esm/react-components/src/components/index.js.map +1 -1
  69. package/dist/dist-esm/react-components/src/components/styles/ChatMessageComponent.styles.d.ts.map +1 -1
  70. package/dist/dist-esm/react-components/src/components/styles/ChatMessageComponent.styles.js +1 -2
  71. package/dist/dist-esm/react-components/src/components/styles/ChatMessageComponent.styles.js.map +1 -1
  72. package/dist/dist-esm/react-components/src/components/styles/Dialpad.styles.d.ts +22 -0
  73. package/dist/dist-esm/react-components/src/components/styles/Dialpad.styles.d.ts.map +1 -0
  74. package/dist/dist-esm/react-components/src/components/styles/Dialpad.styles.js +74 -0
  75. package/dist/dist-esm/react-components/src/components/styles/Dialpad.styles.js.map +1 -0
  76. package/dist/dist-esm/react-components/src/components/styles/InputBoxComponent.style.d.ts +1 -1
  77. package/dist/dist-esm/react-components/src/components/styles/InputBoxComponent.style.d.ts.map +1 -1
  78. package/dist/dist-esm/react-components/src/components/styles/InputBoxComponent.style.js +20 -25
  79. package/dist/dist-esm/react-components/src/components/styles/InputBoxComponent.style.js.map +1 -1
  80. package/dist/dist-esm/react-components/src/components/styles/SendBox.styles.d.ts +0 -1
  81. package/dist/dist-esm/react-components/src/components/styles/SendBox.styles.d.ts.map +1 -1
  82. package/dist/dist-esm/react-components/src/components/styles/SendBox.styles.js +3 -3
  83. package/dist/dist-esm/react-components/src/components/styles/SendBox.styles.js.map +1 -1
  84. package/dist/dist-esm/react-components/src/components/utils/formatPhoneNumber.d.ts +5 -0
  85. package/dist/dist-esm/react-components/src/components/utils/formatPhoneNumber.d.ts.map +1 -0
  86. package/dist/dist-esm/react-components/src/components/utils/formatPhoneNumber.js +44 -0
  87. package/dist/dist-esm/react-components/src/components/utils/formatPhoneNumber.js.map +1 -0
  88. package/dist/dist-esm/react-components/src/localization/LocalizationProvider.d.ts.map +1 -1
  89. package/dist/dist-esm/react-components/src/localization/LocalizationProvider.js.map +1 -1
  90. package/dist/dist-esm/react-components/src/theming/themes.d.ts.map +1 -1
  91. package/dist/dist-esm/react-components/src/theming/themes.js +6 -0
  92. package/dist/dist-esm/react-components/src/theming/themes.js.map +1 -1
  93. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallArrangement.d.ts +2 -3
  94. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallArrangement.d.ts.map +1 -1
  95. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallArrangement.js +2 -3
  96. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallArrangement.js.map +1 -1
  97. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/CallPage.d.ts.map +1 -1
  98. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/CallPage.js +3 -1
  99. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/CallPage.js.map +1 -1
  100. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/LobbyPage.js +1 -1
  101. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/LobbyPage.js.map +1 -1
  102. package/dist/dist-esm/react-composites/src/composites/CallComposite/utils/Utils.d.ts +0 -19
  103. package/dist/dist-esm/react-composites/src/composites/CallComposite/utils/Utils.d.ts.map +1 -1
  104. package/dist/dist-esm/react-composites/src/composites/CallComposite/utils/Utils.js +0 -39
  105. package/dist/dist-esm/react-composites/src/composites/CallComposite/utils/Utils.js.map +1 -1
  106. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatComposite.js +1 -1
  107. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatComposite.js.map +1 -1
  108. package/dist/dist-esm/react-composites/src/composites/ChatComposite/adapter/AzureCommunicationChatAdapter.d.ts +3 -1
  109. package/dist/dist-esm/react-composites/src/composites/ChatComposite/adapter/AzureCommunicationChatAdapter.d.ts.map +1 -1
  110. package/dist/dist-esm/react-composites/src/composites/ChatComposite/adapter/AzureCommunicationChatAdapter.js +9 -14
  111. package/dist/dist-esm/react-composites/src/composites/ChatComposite/adapter/AzureCommunicationChatAdapter.js.map +1 -1
  112. package/dist/dist-esm/react-composites/src/composites/ChatComposite/adapter/ChatAdapter.d.ts +4 -1
  113. package/dist/dist-esm/react-composites/src/composites/ChatComposite/adapter/ChatAdapter.d.ts.map +1 -1
  114. package/dist/dist-esm/react-composites/src/composites/localization/index.d.ts +7 -0
  115. package/dist/dist-esm/react-composites/src/composites/localization/index.d.ts.map +1 -1
  116. package/dist/dist-esm/react-composites/src/composites/localization/index.js +8 -0
  117. package/dist/dist-esm/react-composites/src/composites/localization/index.js.map +1 -1
  118. package/dist/dist-esm/react-composites/src/index-public.d.ts +2 -0
  119. package/dist/dist-esm/react-composites/src/index-public.d.ts.map +1 -0
  120. package/dist/dist-esm/react-composites/src/index-public.js +8 -0
  121. package/dist/dist-esm/react-composites/src/index-public.js.map +1 -0
  122. package/package.json +7 -7
  123. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/ComplianceBanner.d.ts +0 -13
  124. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/ComplianceBanner.d.ts.map +0 -1
  125. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/ComplianceBanner.js.map +0 -1
  126. package/dist/dist-esm/react-composites/src/index.d.ts +0 -2
  127. package/dist/dist-esm/react-composites/src/index.d.ts.map +0 -1
  128. package/dist/dist-esm/react-composites/src/index.js +0 -4
  129. package/dist/dist-esm/react-composites/src/index.js.map +0 -1
@@ -191,7 +191,7 @@ const fromFlatCommunicationIdentifier = (id) => {
191
191
  // Copyright (c) Microsoft Corporation.
192
192
  // Licensed under the MIT license.
193
193
  // GENERATED FILE. DO NOT EDIT MANUALLY.
194
- var telemetryVersion = '1.2.3-alpha-202205100013.0';
194
+ var telemetryVersion = '1.2.3-alpha-202205130015.0';
195
195
 
196
196
  // Copyright (c) Microsoft Corporation.
197
197
  /**
@@ -1539,9 +1539,9 @@ const defaultSendBoxActiveBorderThicknessREM = 0.125;
1539
1539
  * @private
1540
1540
  */
1541
1541
  const borderAndBoxShadowStyle = (props) => {
1542
- const { theme, errorColor, hasErrorMessage, disabled } = props;
1543
- const borderColor = hasErrorMessage ? errorColor : theme.palette.neutralSecondary;
1544
- const borderColorActive = hasErrorMessage ? errorColor : theme.palette.themePrimary;
1542
+ const { theme, hasErrorMessage, disabled } = props;
1543
+ const borderColor = hasErrorMessage ? theme.semanticColors.errorText : theme.palette.neutralSecondary;
1544
+ const borderColorActive = hasErrorMessage ? theme.semanticColors.errorText : theme.palette.themePrimary;
1545
1545
  const borderThickness = disabled ? 0 : defaultSendBoxInactiveBorderThicknessREM;
1546
1546
  const borderActiveThickness = disabled ? 0 : defaultSendBoxActiveBorderThicknessREM;
1547
1547
  return {
@@ -1594,6 +1594,9 @@ const lightTheme = {
1594
1594
  callRedDark: '#8b2c3d',
1595
1595
  callRedDarker: '#772a38',
1596
1596
  iconWhite: '#ffffff'
1597
+ },
1598
+ semanticColors: {
1599
+ errorText: '#a80000'
1597
1600
  }
1598
1601
  };
1599
1602
  /**
@@ -1631,6 +1634,9 @@ const darkTheme = {
1631
1634
  callRedDark: '#a42e43',
1632
1635
  callRedDarker: '#8b2c3d',
1633
1636
  iconWhite: '#ffffff'
1637
+ },
1638
+ semanticColors: {
1639
+ errorText: '#f1707b'
1634
1640
  }
1635
1641
  };
1636
1642
 
@@ -1822,31 +1828,26 @@ const textContainerStyle = {
1822
1828
  /**
1823
1829
  * @private
1824
1830
  */
1825
- const textFieldStyle = (errorColor) => {
1826
- return {
1827
- root: {
1828
- width: '100%',
1829
- minHeight: '0',
1830
- fontSize: '8.25rem'
1831
- },
1832
- wrapper: {},
1833
- fieldGroup: {
1834
- outline: 'none',
1835
- border: 'none',
1836
- height: 'auto',
1837
- minHeight: '0',
1838
- /**
1839
- * Removing fieldGroup border to make sure no border is rendered around the text area in sendbox.
1840
- */
1841
- ':after': { border: 'none' }
1842
- },
1843
- field: {
1844
- borderRadius: '0.25rem'
1845
- },
1846
- errorMessage: {
1847
- color: errorColor
1848
- }
1849
- };
1831
+ const textFieldStyle = {
1832
+ root: {
1833
+ width: '100%',
1834
+ minHeight: '0',
1835
+ fontSize: '8.25rem'
1836
+ },
1837
+ wrapper: {},
1838
+ fieldGroup: {
1839
+ outline: 'none',
1840
+ border: 'none',
1841
+ height: 'auto',
1842
+ minHeight: '0',
1843
+ /**
1844
+ * Removing fieldGroup border to make sure no border is rendered around the text area in sendbox.
1845
+ */
1846
+ ':after': { border: 'none' }
1847
+ },
1848
+ field: {
1849
+ borderRadius: '0.25rem'
1850
+ }
1850
1851
  };
1851
1852
  /**
1852
1853
  * @private
@@ -1919,11 +1920,10 @@ const getPerceptualBrightnessOfHexColor = (hexColor) => {
1919
1920
  */
1920
1921
  const InputBoxComponent = (props) => {
1921
1922
  const { styles, id, 'data-ui-id': dataUiId, textValue, onChange, textFieldRef, placeholderText, onKeyDown, onEnterKeyDown, supportNewline, inputClassName, errorMessage, disabled, children } = props;
1922
- const theme = useTheme();
1923
1923
  const mergedRootStyle = react.mergeStyles(inputBoxWrapperStyle, styles === null || styles === void 0 ? void 0 : styles.root);
1924
1924
  const mergedTextFiledStyle = react.mergeStyles(inputBoxStyle, inputClassName, props.inlineChildren ? {} : inputBoxNewLineSpaceAffordance);
1925
1925
  const mergedTextContainerStyle = react.mergeStyles(textContainerStyle, styles === null || styles === void 0 ? void 0 : styles.textFieldContainer);
1926
- const mergedTextFieldStyle = react.concatStyleSets(textFieldStyle(isDarkThemed(theme) ? '#f1707b' : '#a80000'), {
1926
+ const mergedTextFieldStyle = react.concatStyleSets(textFieldStyle, {
1927
1927
  fieldGroup: styles === null || styles === void 0 ? void 0 : styles.textField,
1928
1928
  errorMessage: styles === null || styles === void 0 ? void 0 : styles.systemMessage
1929
1929
  });
@@ -2233,7 +2233,6 @@ const SendBox = (props) => {
2233
2233
  React__default['default'].createElement(SendBoxErrors, Object.assign({}, sendBoxErrorsProps)),
2234
2234
  React__default['default'].createElement(react.Stack, { className: react.mergeStyles(borderAndBoxShadowStyle({
2235
2235
  theme,
2236
- errorColor: isDarkThemed(theme) ? '#f1707b' : '#a80000',
2237
2236
  hasErrorMessage: !!errorMessage,
2238
2237
  disabled: !!disabled
2239
2238
  })) },
@@ -2581,9 +2580,10 @@ const onRenderSubmitIcon = (color) => {
2581
2580
  const ChatMessageComponentAsEditBox = (props) => {
2582
2581
  const { onCancel, onSubmit, strings, message } = props;
2583
2582
  const [textValue, setTextValue] = React.useState(message.content || '');
2583
+ const [attachedFilesMetadata, setAttachedFilesMetadata] = React__default['default'].useState(getMessageAttachedFilesMetadata(message));
2584
2584
  const editTextFieldRef = React__default['default'].useRef(null);
2585
2585
  const theme = useTheme();
2586
- const messageState = getMessageState(textValue);
2586
+ const messageState = getMessageState(textValue, attachedFilesMetadata !== null && attachedFilesMetadata !== void 0 ? attachedFilesMetadata : []);
2587
2587
  const submitEnabled = messageState === 'OK';
2588
2588
  React.useEffect(() => {
2589
2589
  var _a;
@@ -2600,38 +2600,47 @@ const ChatMessageComponentAsEditBox = (props) => {
2600
2600
  const editBoxStyles = React.useMemo(() => {
2601
2601
  return react.concatStyleSets(editBoxStyleSet, { textField: { borderColor: theme.palette.themePrimary } });
2602
2602
  }, [theme.palette.themePrimary]);
2603
- /* @conditional-compile-remove(file-sharing) */
2604
2603
  const onRenderFileUploads = React.useCallback(() => {
2605
- var _a;
2606
- return (React__default['default'].createElement("div", { style: { margin: '0.25rem' } },
2607
- React__default['default'].createElement(_FileUploadCards, { activeFileUploads: (_a = message.attachedFilesMetadata) === null || _a === void 0 ? void 0 : _a.map((file) => ({
2604
+ return ((attachedFilesMetadata === null || attachedFilesMetadata === void 0 ? void 0 : attachedFilesMetadata.length) && (React__default['default'].createElement("div", { style: { margin: '0.25rem' } },
2605
+ React__default['default'].createElement(_FileUploadCards, { activeFileUploads: attachedFilesMetadata === null || attachedFilesMetadata === void 0 ? void 0 : attachedFilesMetadata.map((file) => ({
2608
2606
  id: file.name,
2609
2607
  filename: file.name,
2610
2608
  progress: 1
2611
- })) })));
2612
- }, [message.attachedFilesMetadata]);
2609
+ })), onCancelFileUpload: (fileId) => {
2610
+ setAttachedFilesMetadata(attachedFilesMetadata === null || attachedFilesMetadata === void 0 ? void 0 : attachedFilesMetadata.filter((file) => file.name !== fileId));
2611
+ } }))));
2612
+ }, [attachedFilesMetadata]);
2613
2613
  return (React__default['default'].createElement(react.Stack, { className: react.mergeStyles(borderAndBoxShadowStyle({
2614
2614
  theme,
2615
- errorColor: isDarkThemed(theme) ? '#f1707b' : '#a80000',
2616
2615
  hasErrorMessage: false,
2617
2616
  disabled: false
2618
2617
  })) },
2619
2618
  React__default['default'].createElement(InputBoxComponent, { inlineChildren: props.inlineEditButtons, id: 'editbox', textFieldRef: editTextFieldRef, inputClassName: editBoxStyle(props.inlineEditButtons), placeholderText: strings.editBoxPlaceholderText, textValue: textValue, onChange: setText, onEnterKeyDown: () => {
2620
- submitEnabled && onSubmit(textValue);
2619
+ submitEnabled &&
2620
+ onSubmit(textValue, message.metadata, {
2621
+ attachedFilesMetadata
2622
+ });
2621
2623
  }, supportNewline: false, maxLength: MAXIMUM_LENGTH_OF_MESSAGE, errorMessage: textTooLongMessage, styles: editBoxStyles },
2622
2624
  React__default['default'].createElement(InputBoxButton, { className: editingButtonStyle, ariaLabel: strings.editBoxCancelButton, tooltipContent: strings.editBoxCancelButton, onRenderIcon: onRenderThemedCancelIcon, onClick: () => {
2623
2625
  onCancel && onCancel();
2624
2626
  }, id: 'dismissIconWrapper' }),
2625
2627
  React__default['default'].createElement(InputBoxButton, { className: editingButtonStyle, ariaLabel: strings.editBoxSubmitButton, tooltipContent: strings.editBoxSubmitButton, onRenderIcon: onRenderThemedSubmitIcon, onClick: (e) => {
2626
- submitEnabled && onSubmit(textValue);
2628
+ submitEnabled &&
2629
+ onSubmit(textValue, message.metadata, {
2630
+ attachedFilesMetadata
2631
+ });
2627
2632
  e.stopPropagation();
2628
2633
  }, id: 'submitIconWrapper' })),
2629
- /* @conditional-compile-remove(file-sharing) */
2630
2634
  onRenderFileUploads()));
2631
2635
  };
2632
2636
  const isMessageTooLong = (messageText) => messageText.length > MAXIMUM_LENGTH_OF_MESSAGE;
2633
- const isMessageEmpty = (messageText) => messageText.trim().length === 0;
2634
- const getMessageState = (messageText) => isMessageEmpty(messageText) ? 'too short' : isMessageTooLong(messageText) ? 'too long' : 'OK';
2637
+ const isMessageEmpty = (messageText, attachedFilesMetadata) => messageText.trim().length === 0 && attachedFilesMetadata.length === 0;
2638
+ const getMessageState = (messageText, attachedFilesMetadata) => isMessageEmpty(messageText, attachedFilesMetadata) ? 'too short' : isMessageTooLong(messageText) ? 'too long' : 'OK';
2639
+ // @TODO: Remove when file-sharing feature becomes stable.
2640
+ const getMessageAttachedFilesMetadata = (message) => {
2641
+ /* @conditional-compile-remove(file-sharing) */
2642
+ return message.attachedFilesMetadata;
2643
+ };
2635
2644
 
2636
2645
  // Copyright (c) Microsoft Corporation.
2637
2646
  const MINIMUM_TOUCH_TARGET_HEIGHT_REM$1 = 3;
@@ -2679,7 +2688,7 @@ const chatMessageEditedTagStyle = (theme) => react.mergeStyles({ fontWeight: rea
2679
2688
  /**
2680
2689
  * @private
2681
2690
  */
2682
- const chatMessageFailedTagStyle = (theme) => react.mergeStyles({ fontWeight: react.FontWeights.light, color: isDarkThemed(theme) ? '#f1707b' : '#a80000' });
2691
+ const chatMessageFailedTagStyle = (theme) => react.mergeStyles({ fontWeight: react.FontWeights.light, color: theme.semanticColors.errorText });
2683
2692
  /**
2684
2693
  * @private
2685
2694
  */
@@ -3220,10 +3229,10 @@ const ChatMessageComponent = (props) => {
3220
3229
  return React__default['default'].createElement(React__default['default'].Fragment, null);
3221
3230
  }
3222
3231
  else if (isEditing) {
3223
- return (React__default['default'].createElement(ChatMessageComponentAsEditBox, { message: message, inlineEditButtons: props.inlineAcceptRejectEditButtons, strings: props.strings, onSubmit: (text) => __awaiter$o(void 0, void 0, void 0, function* () {
3232
+ return (React__default['default'].createElement(ChatMessageComponentAsEditBox, { message: message, inlineEditButtons: props.inlineAcceptRejectEditButtons, strings: props.strings, onSubmit: (text, metadata, options) => __awaiter$o(void 0, void 0, void 0, function* () {
3224
3233
  props.onUpdateMessage &&
3225
3234
  props.message.messageId &&
3226
- (yield props.onUpdateMessage(props.message.messageId, text));
3235
+ (yield props.onUpdateMessage(props.message.messageId, text, metadata, options));
3227
3236
  setIsEditing(false);
3228
3237
  }), onCancel: () => {
3229
3238
  setIsEditing(false);
@@ -4329,6 +4338,8 @@ const VideoTile = (props) => {
4329
4338
  * A memoized version of VideoTile for rendering remote participants. React.memo is used for a performance
4330
4339
  * boost by memoizing the same rendered component to avoid rerendering a VideoTile when its position in the
4331
4340
  * array changes causing a rerender in the parent component. https://reactjs.org/docs/react-api.html#reactmemo
4341
+ *
4342
+ * @private
4332
4343
  */
4333
4344
  const RemoteVideoTile = React__default['default'].memo((props) => {
4334
4345
  const { isAvailable, isMuted, isSpeaking, isScreenSharingOn, onCreateRemoteStreamView, onDisposeRemoteStreamView, remoteVideoViewOptions, renderElement, userId, displayName, onRenderAvatar, showMuteIndicator } = props;
@@ -4805,25 +4816,6 @@ const LoadingSpinner = (props) => {
4805
4816
  React__default['default'].createElement(react.Spinner, { label: props.loadingMessage, size: react.SpinnerSize.xSmall, "aria-live": 'assertive' })));
4806
4817
  };
4807
4818
 
4808
- // Copyright (c) Microsoft Corporation.
4809
- /**
4810
- * local video tile camera cycle button - for use on mobile screens only.
4811
- * @internal
4812
- */
4813
- const LocalVideoCameraCycleButton = (props) => {
4814
- const { cameras, selectedCamera, onSelectCamera, label, ariaDescription } = props;
4815
- const theme = react.useTheme();
4816
- return (React__default['default'].createElement(react.IconButton, { "data-ui-id": 'local-camera-switcher-button', styles: localVideoCameraCycleButtonStyles(theme), iconProps: { iconName: 'LocalCameraSwitch' }, ariaLabel: label, ariaDescription: ariaDescription, "aria-live": 'polite', onClick: () => {
4817
- if (cameras && cameras.length > 1 && selectedCamera !== undefined) {
4818
- const index = cameras.findIndex((camera) => selectedCamera.id === camera.id);
4819
- const newCamera = cameras[(index + 1) % cameras.length];
4820
- if (onSelectCamera !== undefined) {
4821
- onSelectCamera(newCamera);
4822
- }
4823
- }
4824
- } }));
4825
- };
4826
-
4827
4819
  // Copyright (c) Microsoft Corporation.
4828
4820
  const animationDuration = react.AnimationVariables.durationValue2;
4829
4821
  const ZERO = { x: 0, y: 0 };
@@ -5496,6 +5488,84 @@ const _ModalClone = react.styled(ModalBase, getStyles, undefined, {
5496
5488
  });
5497
5489
  _ModalClone.displayName = 'Modal';
5498
5490
 
5491
+ // Copyright (c) Microsoft Corporation.
5492
+ /**
5493
+ * local video tile camera cycle button - for use on mobile screens only.
5494
+ * @internal
5495
+ */
5496
+ const LocalVideoCameraCycleButton = (props) => {
5497
+ const { cameras, selectedCamera, onSelectCamera, label, ariaDescription } = props;
5498
+ const theme = react.useTheme();
5499
+ return (React__default['default'].createElement(react.IconButton, { "data-ui-id": 'local-camera-switcher-button', styles: localVideoCameraCycleButtonStyles(theme), iconProps: { iconName: 'LocalCameraSwitch' }, ariaLabel: label, ariaDescription: ariaDescription, "aria-live": 'polite', onClick: () => {
5500
+ if (cameras && cameras.length > 1 && selectedCamera !== undefined) {
5501
+ const index = cameras.findIndex((camera) => selectedCamera.id === camera.id);
5502
+ const newCamera = cameras[(index + 1) % cameras.length];
5503
+ if (onSelectCamera !== undefined) {
5504
+ onSelectCamera(newCamera);
5505
+ }
5506
+ }
5507
+ } }));
5508
+ };
5509
+
5510
+ // Copyright (c) Microsoft Corporation.
5511
+ /**
5512
+ * A memoized version of VideoTile for rendering local participant.
5513
+ *
5514
+ * @private
5515
+ */
5516
+ const LocalVideoTile = React__default['default'].memo((props) => {
5517
+ const { isAvailable, isMuted, onCreateLocalStreamView, onDisposeLocalStreamView, localVideoViewOptions, renderElement, userId, showLabel, displayName, initialsName, onRenderAvatar, showMuteIndicator, styles, showCameraSwitcherInLocalPreview, localVideoCameraCycleButtonProps, localVideoCameraSwitcherLabel, localVideoSelectedDescription } = props;
5518
+ React.useEffect(() => {
5519
+ if (isAvailable && !renderElement) {
5520
+ onCreateLocalStreamView === null || onCreateLocalStreamView === void 0 ? void 0 : onCreateLocalStreamView(localVideoViewOptions);
5521
+ }
5522
+ // Always clean up element to make tile up to date and be able to dispose correctly
5523
+ return () => {
5524
+ if (renderElement) {
5525
+ onDisposeLocalStreamView === null || onDisposeLocalStreamView === void 0 ? void 0 : onDisposeLocalStreamView();
5526
+ }
5527
+ };
5528
+ }, [isAvailable, onCreateLocalStreamView, onDisposeLocalStreamView, localVideoViewOptions, renderElement]);
5529
+ // The execution order for above useEffect is onCreateRemoteStreamView =>(async time gap) RenderElement generated => element disposed => onDisposeRemoteStreamView
5530
+ // Element disposed could happen during async time gap, which still cause leaks for unused renderElement.
5531
+ // Need to do an entire cleanup when remoteTile gets disposed and make sure element gets correctly disposed
5532
+ React.useEffect(() => {
5533
+ return () => {
5534
+ onDisposeLocalStreamView === null || onDisposeLocalStreamView === void 0 ? void 0 : onDisposeLocalStreamView();
5535
+ };
5536
+ }, [onDisposeLocalStreamView]);
5537
+ const renderVideoStreamElement = React.useMemo(() => {
5538
+ // Checking if renderElement is well defined or not as calling SDK has a number of video streams limitation which
5539
+ // implies that, after their threshold, all streams have no child (blank video)
5540
+ if (!renderElement || !renderElement.childElementCount) {
5541
+ // Returning `undefined` results in the placeholder with avatar being shown
5542
+ return undefined;
5543
+ }
5544
+ return (React__default['default'].createElement(React__default['default'].Fragment, null,
5545
+ React__default['default'].createElement(FloatingLocalCameraCycleButton, { showCameraSwitcherInLocalPreview: showCameraSwitcherInLocalPreview !== null && showCameraSwitcherInLocalPreview !== void 0 ? showCameraSwitcherInLocalPreview : false, localVideoCameraCycleButtonProps: localVideoCameraCycleButtonProps, localVideoCameraSwitcherLabel: localVideoCameraSwitcherLabel, localVideoSelectedDescription: localVideoSelectedDescription }),
5546
+ React__default['default'].createElement(StreamMedia, { videoStreamElement: renderElement })));
5547
+ }, [
5548
+ localVideoCameraCycleButtonProps,
5549
+ localVideoCameraSwitcherLabel,
5550
+ localVideoSelectedDescription,
5551
+ renderElement,
5552
+ showCameraSwitcherInLocalPreview
5553
+ ]);
5554
+ return (React__default['default'].createElement(VideoTile, { key: userId, userId: userId, renderElement: renderVideoStreamElement, showLabel: showLabel, displayName: displayName, initialsName: initialsName, styles: styles, onRenderPlaceholder: onRenderAvatar, isMuted: isMuted, showMuteIndicator: showMuteIndicator }));
5555
+ });
5556
+ const FloatingLocalCameraCycleButton = (props) => {
5557
+ const { showCameraSwitcherInLocalPreview, localVideoCameraCycleButtonProps, localVideoCameraSwitcherLabel, localVideoSelectedDescription } = props;
5558
+ const ariaDescription = (localVideoCameraCycleButtonProps === null || localVideoCameraCycleButtonProps === void 0 ? void 0 : localVideoCameraCycleButtonProps.selectedCamera) &&
5559
+ localVideoSelectedDescription &&
5560
+ _formatString(localVideoSelectedDescription, {
5561
+ cameraName: localVideoCameraCycleButtonProps.selectedCamera.name
5562
+ });
5563
+ return (React__default['default'].createElement(react.Stack, { horizontalAlign: "end" }, showCameraSwitcherInLocalPreview &&
5564
+ (localVideoCameraCycleButtonProps === null || localVideoCameraCycleButtonProps === void 0 ? void 0 : localVideoCameraCycleButtonProps.cameras) !== undefined &&
5565
+ (localVideoCameraCycleButtonProps === null || localVideoCameraCycleButtonProps === void 0 ? void 0 : localVideoCameraCycleButtonProps.selectedCamera) !== undefined &&
5566
+ (localVideoCameraCycleButtonProps === null || localVideoCameraCycleButtonProps === void 0 ? void 0 : localVideoCameraCycleButtonProps.onSelectCamera) !== undefined && (React__default['default'].createElement(LocalVideoCameraCycleButton, { cameras: localVideoCameraCycleButtonProps.cameras, selectedCamera: localVideoCameraCycleButtonProps.selectedCamera, onSelectCamera: localVideoCameraCycleButtonProps.onSelectCamera, label: localVideoCameraSwitcherLabel, ariaDescription: ariaDescription }))));
5567
+ };
5568
+
5499
5569
  // Copyright (c) Microsoft Corporation.
5500
5570
  // Currently the Calling JS SDK supports up to 4 remote video streams
5501
5571
  const DEFAULT_MAX_REMOTE_VIDEO_STREAMS = 4;
@@ -5520,7 +5590,7 @@ const modalMaxDragPosition = { x: localVideoTileOuterPaddingPX, y: localVideoTil
5520
5590
  */
5521
5591
  const VideoGallery = (props) => {
5522
5592
  var _a, _b, _c;
5523
- const { localParticipant, remoteParticipants = [], localVideoViewOptions, remoteVideoViewOptions, dominantSpeakers, onRenderLocalVideoTile, onRenderRemoteVideoTile, onCreateLocalStreamView, onCreateRemoteStreamView, onDisposeRemoteStreamView, styles, layout, onRenderAvatar, showMuteIndicator, maxRemoteVideoStreams = DEFAULT_MAX_REMOTE_VIDEO_STREAMS, showCameraSwitcherInLocalPreview, localVideoCameraCycleButtonProps } = props;
5593
+ const { localParticipant, remoteParticipants = [], localVideoViewOptions, remoteVideoViewOptions, dominantSpeakers, onRenderLocalVideoTile, onRenderRemoteVideoTile, onCreateLocalStreamView, onDisposeLocalStreamView, onCreateRemoteStreamView, onDisposeRemoteStreamView, styles, layout, onRenderAvatar, showMuteIndicator, maxRemoteVideoStreams = DEFAULT_MAX_REMOTE_VIDEO_STREAMS, showCameraSwitcherInLocalPreview, localVideoCameraCycleButtonProps } = props;
5524
5594
  const ids = useIdentifiers();
5525
5595
  const theme = useTheme();
5526
5596
  const localeStrings = useLocale$1().strings.videoGallery;
@@ -5559,56 +5629,37 @@ const VideoGallery = (props) => {
5559
5629
  lastVisibleParticipants: visibleAudioParticipants.current,
5560
5630
  maxDominantSpeakers: MAX_AUDIO_DOMINANT_SPEAKERS
5561
5631
  });
5562
- const LocalCameraCycleButton = React.useCallback(() => {
5563
- const ariaDescription = (localVideoCameraCycleButtonProps === null || localVideoCameraCycleButtonProps === void 0 ? void 0 : localVideoCameraCycleButtonProps.selectedCamera) &&
5564
- _formatString(strings.localVideoSelectedDescription, {
5565
- cameraName: localVideoCameraCycleButtonProps.selectedCamera.name
5566
- });
5567
- return (React__default['default'].createElement(react.Stack, { horizontalAlign: "end" }, showCameraSwitcherInLocalPreview &&
5568
- (localVideoCameraCycleButtonProps === null || localVideoCameraCycleButtonProps === void 0 ? void 0 : localVideoCameraCycleButtonProps.cameras) !== undefined &&
5569
- (localVideoCameraCycleButtonProps === null || localVideoCameraCycleButtonProps === void 0 ? void 0 : localVideoCameraCycleButtonProps.selectedCamera) !== undefined &&
5570
- (localVideoCameraCycleButtonProps === null || localVideoCameraCycleButtonProps === void 0 ? void 0 : localVideoCameraCycleButtonProps.onSelectCamera) !== undefined && (React__default['default'].createElement(LocalVideoCameraCycleButton, { cameras: localVideoCameraCycleButtonProps.cameras, selectedCamera: localVideoCameraCycleButtonProps.selectedCamera, onSelectCamera: localVideoCameraCycleButtonProps.onSelectCamera, label: strings.localVideoCameraSwitcherLabel, ariaDescription: ariaDescription }))));
5571
- }, [
5572
- localVideoCameraCycleButtonProps === null || localVideoCameraCycleButtonProps === void 0 ? void 0 : localVideoCameraCycleButtonProps.cameras,
5573
- localVideoCameraCycleButtonProps === null || localVideoCameraCycleButtonProps === void 0 ? void 0 : localVideoCameraCycleButtonProps.onSelectCamera,
5574
- localVideoCameraCycleButtonProps === null || localVideoCameraCycleButtonProps === void 0 ? void 0 : localVideoCameraCycleButtonProps.selectedCamera,
5575
- showCameraSwitcherInLocalPreview,
5576
- strings.localVideoCameraSwitcherLabel,
5577
- strings.localVideoSelectedDescription
5578
- ]);
5579
5632
  /**
5580
5633
  * Utility function for memoized rendering of LocalParticipant.
5581
5634
  */
5582
5635
  const localVideoTile = React.useMemo(() => {
5583
- const localVideoStream = localParticipant === null || localParticipant === void 0 ? void 0 : localParticipant.videoStream;
5636
+ var _a, _b;
5584
5637
  if (onRenderLocalVideoTile) {
5585
5638
  return onRenderLocalVideoTile(localParticipant);
5586
5639
  }
5587
- const localVideoTileStyles = shouldFloatLocalVideo ? floatingLocalVideoTileStyle : {};
5588
- const localVideoTileStylesThemed = react.concatStyleSets(localVideoTileStyles, {
5640
+ const localVideoTileStyles = react.concatStyleSets(shouldFloatLocalVideo ? floatingLocalVideoTileStyle : {}, {
5589
5641
  root: { borderRadius: theme.effects.roundedCorner4 }
5590
5642
  }, styles === null || styles === void 0 ? void 0 : styles.localVideo);
5591
- if (localVideoStream && !localVideoStream.renderElement) {
5592
- onCreateLocalStreamView && onCreateLocalStreamView(localVideoViewOptions);
5593
- }
5594
5643
  return (React__default['default'].createElement(react.Stack, { tabIndex: 0, "aria-label": strings.localVideoMovementLabel, role: 'dialog' },
5595
- React__default['default'].createElement(VideoTile, { key: localParticipant.userId, userId: localParticipant.userId, renderElement: (localVideoStream === null || localVideoStream === void 0 ? void 0 : localVideoStream.renderElement) ? (React__default['default'].createElement(React__default['default'].Fragment, null,
5596
- React__default['default'].createElement(LocalCameraCycleButton, null),
5597
- React__default['default'].createElement(StreamMedia, { videoStreamElement: localVideoStream.renderElement }))) : undefined, showLabel: !(shouldFloatLocalVideo && isNarrow), displayName: isNarrow ? '' : strings.localVideoLabel, initialsName: localParticipant.displayName, styles: localVideoTileStylesThemed, onRenderPlaceholder: onRenderAvatar, isMuted: localParticipant.isMuted, showMuteIndicator: showMuteIndicator })));
5644
+ React__default['default'].createElement(LocalVideoTile, { userId: localParticipant.userId, onCreateLocalStreamView: onCreateLocalStreamView, onDisposeLocalStreamView: onDisposeLocalStreamView, isAvailable: (_a = localParticipant === null || localParticipant === void 0 ? void 0 : localParticipant.videoStream) === null || _a === void 0 ? void 0 : _a.isAvailable, isMuted: localParticipant.isMuted, renderElement: (_b = localParticipant === null || localParticipant === void 0 ? void 0 : localParticipant.videoStream) === null || _b === void 0 ? void 0 : _b.renderElement, displayName: isNarrow ? '' : strings.localVideoLabel, initialsName: localParticipant.displayName, localVideoViewOptions: localVideoViewOptions, onRenderAvatar: onRenderAvatar, showLabel: !(shouldFloatLocalVideo && isNarrow), showMuteIndicator: showMuteIndicator, showCameraSwitcherInLocalPreview: showCameraSwitcherInLocalPreview, localVideoCameraCycleButtonProps: localVideoCameraCycleButtonProps, localVideoCameraSwitcherLabel: strings.localVideoCameraSwitcherLabel, localVideoSelectedDescription: strings.localVideoSelectedDescription, styles: localVideoTileStyles })));
5598
5645
  }, [
5599
- localParticipant,
5600
5646
  isNarrow,
5647
+ localParticipant,
5648
+ localVideoCameraCycleButtonProps,
5649
+ localVideoViewOptions,
5601
5650
  onCreateLocalStreamView,
5651
+ onDisposeLocalStreamView,
5652
+ onRenderAvatar,
5602
5653
  onRenderLocalVideoTile,
5603
- theme.effects.roundedCorner4,
5604
- styles === null || styles === void 0 ? void 0 : styles.localVideo,
5605
- strings.localVideoMovementLabel,
5606
- strings.localVideoLabel,
5607
- LocalCameraCycleButton,
5654
+ shouldFloatLocalVideo,
5655
+ showCameraSwitcherInLocalPreview,
5608
5656
  showMuteIndicator,
5609
- localVideoViewOptions,
5610
- onRenderAvatar,
5611
- shouldFloatLocalVideo
5657
+ strings.localVideoCameraSwitcherLabel,
5658
+ strings.localVideoLabel,
5659
+ strings.localVideoMovementLabel,
5660
+ strings.localVideoSelectedDescription,
5661
+ styles === null || styles === void 0 ? void 0 : styles.localVideo,
5662
+ theme.effects.roundedCorner4
5612
5663
  ]);
5613
5664
  const defaultOnRenderVideoTile = React.useCallback((participant, isVideoParticipant) => {
5614
5665
  const remoteVideoStream = participant.videoStream;
@@ -6715,6 +6766,175 @@ const _DrawerMenu = (props) => {
6715
6766
  } })))))));
6716
6767
  };
6717
6768
 
6769
+ // Copyright (c) Microsoft Corporation.
6770
+ // Licensed under the MIT license.
6771
+ /**
6772
+ * Return different conditions based on the current and previous state of recording and transcribing
6773
+ *
6774
+ * @param callRecordState - The current call record state: on, off, stopped
6775
+ * @param callTranscribeState - The current call transcribe state: on, off, stopped
6776
+ *
6777
+ * @remarks - The stopped state means: previously on but currently off
6778
+ *
6779
+ * @private
6780
+ */
6781
+ const computeVariant = (callRecordState, callTranscribeState) => {
6782
+ if (callRecordState === 'on' && callTranscribeState === 'on') {
6783
+ return 'RECORDING_AND_TRANSCRIPTION_STARTED';
6784
+ }
6785
+ else if (callRecordState === 'on' && callTranscribeState === 'off') {
6786
+ return 'RECORDING_STARTED';
6787
+ }
6788
+ else if (callRecordState === 'off' && callTranscribeState === 'on') {
6789
+ return 'TRANSCRIPTION_STARTED';
6790
+ }
6791
+ else if (callRecordState === 'on' && callTranscribeState === 'stopped') {
6792
+ return 'TRANSCRIPTION_STOPPED_STILL_RECORDING';
6793
+ }
6794
+ else if (callRecordState === 'stopped' && callTranscribeState === 'on') {
6795
+ return 'RECORDING_STOPPED_STILL_TRANSCRIBING';
6796
+ }
6797
+ else if (callRecordState === 'off' && callTranscribeState === 'stopped') {
6798
+ return 'TRANSCRIPTION_STOPPED';
6799
+ }
6800
+ else if (callRecordState === 'stopped' && callTranscribeState === 'off') {
6801
+ return 'RECORDING_STOPPED';
6802
+ }
6803
+ else if (callRecordState === 'stopped' && callTranscribeState === 'stopped') {
6804
+ return 'RECORDING_AND_TRANSCRIPTION_STOPPED';
6805
+ }
6806
+ else {
6807
+ return 'NO_STATE';
6808
+ }
6809
+ };
6810
+
6811
+ // Copyright (c) Microsoft Corporation.
6812
+ /**
6813
+ * A component that displays banners to notify the user when call recording and
6814
+ * transcription is enabled or disabled in a call.
6815
+ *
6816
+ * This component implements a state machine that tracks the changes to call
6817
+ * recording and transcription state and shows the corresponding message.
6818
+ *
6819
+ * @internal
6820
+ */
6821
+ const _ComplianceBanner = (props) => {
6822
+ //set variant when incoming state is different from current state
6823
+ //when variant change, return message bar
6824
+ //when message bar is dismissed,set variant to default nostate and if current state is stopped, set to off
6825
+ const [variant, setVariant] = React.useState('NO_STATE');
6826
+ const cachedProps = React.useRef({
6827
+ latestBooleanState: {
6828
+ callTranscribeState: false,
6829
+ callRecordState: false
6830
+ },
6831
+ latestStringState: {
6832
+ callTranscribeState: 'off',
6833
+ callRecordState: 'off'
6834
+ }
6835
+ });
6836
+ // Only update cached props and variant if there is _some_ change in the latest props.
6837
+ // This ensures that state machine is only updated if there is an actual change in the props.
6838
+ if (props.callRecordState !== cachedProps.current.latestBooleanState.callRecordState ||
6839
+ props.callTranscribeState !== cachedProps.current.latestBooleanState.callTranscribeState) {
6840
+ cachedProps.current = {
6841
+ latestBooleanState: props,
6842
+ latestStringState: {
6843
+ callRecordState: determineStates(cachedProps.current.latestStringState.callRecordState, props.callRecordState),
6844
+ callTranscribeState: determineStates(cachedProps.current.latestStringState.callTranscribeState, props.callTranscribeState)
6845
+ }
6846
+ };
6847
+ setVariant(computeVariant(cachedProps.current.latestStringState.callRecordState, cachedProps.current.latestStringState.callTranscribeState));
6848
+ // when both states are stopped, after displaying message "RECORDING_AND_TRANSCRIPTION_STOPPED", change both states to off (going back to the default state)
6849
+ if (cachedProps.current.latestStringState.callRecordState === 'stopped' &&
6850
+ cachedProps.current.latestStringState.callTranscribeState === 'stopped') {
6851
+ cachedProps.current.latestStringState.callRecordState = 'off';
6852
+ cachedProps.current.latestStringState.callTranscribeState = 'off';
6853
+ }
6854
+ }
6855
+ return variant === 'NO_STATE' ? (React__default['default'].createElement(React__default['default'].Fragment, null)) : (React__default['default'].createElement(react.MessageBar, { messageBarType: react.MessageBarType.warning, onDismiss: () => {
6856
+ // when closing the banner, change variant to nostate and change stopped state to off state.
6857
+ // Reason: on banner close, going back to the default state
6858
+ setVariant('NO_STATE');
6859
+ if (cachedProps.current.latestStringState.callRecordState === 'stopped') {
6860
+ cachedProps.current.latestStringState.callRecordState = 'off';
6861
+ }
6862
+ if (cachedProps.current.latestStringState.callTranscribeState === 'stopped') {
6863
+ cachedProps.current.latestStringState.callTranscribeState = 'off';
6864
+ }
6865
+ }, dismissButtonAriaLabel: props.strings.close },
6866
+ React__default['default'].createElement(BannerMessage, { variant: variant, strings: props.strings })));
6867
+ };
6868
+ function determineStates(previous, current) {
6869
+ // if current state is on, then return on
6870
+ if (current) {
6871
+ return 'on';
6872
+ }
6873
+ // if current state is off
6874
+ else {
6875
+ // if previous state is on and current state is off, return stopped (on -> off)
6876
+ if (previous === 'on') {
6877
+ return 'stopped';
6878
+ }
6879
+ // otherwise remain previous state unchanged
6880
+ else {
6881
+ return previous;
6882
+ }
6883
+ }
6884
+ }
6885
+ function BannerMessage(props) {
6886
+ const { variant, strings } = props;
6887
+ switch (variant) {
6888
+ case 'TRANSCRIPTION_STOPPED_STILL_RECORDING':
6889
+ return (React__default['default'].createElement(React__default['default'].Fragment, null,
6890
+ React__default['default'].createElement("b", null, strings.complianceBannerTranscriptionStopped),
6891
+ ` ${strings.complianceBannerNowOnlyRecording}`,
6892
+ React__default['default'].createElement(PrivacyPolicy, { linkText: strings.privacyPolicy })));
6893
+ case 'RECORDING_STOPPED_STILL_TRANSCRIBING':
6894
+ return (React__default['default'].createElement(React__default['default'].Fragment, null,
6895
+ React__default['default'].createElement("b", null, strings.complianceBannerRecordingStopped),
6896
+ ` ${strings.complianceBannerNowOnlyTranscription}`,
6897
+ React__default['default'].createElement(PrivacyPolicy, { linkText: strings.privacyPolicy })));
6898
+ case 'RECORDING_AND_TRANSCRIPTION_STOPPED':
6899
+ return (React__default['default'].createElement(React__default['default'].Fragment, null,
6900
+ React__default['default'].createElement("b", null, strings.complianceBannerRecordingAndTranscriptionSaved),
6901
+ ` ${strings.complianceBannerRecordingAndTranscriptionStopped}`,
6902
+ React__default['default'].createElement(LearnMore, { linkText: strings.learnMore })));
6903
+ case 'RECORDING_AND_TRANSCRIPTION_STARTED':
6904
+ return (React__default['default'].createElement(React__default['default'].Fragment, null,
6905
+ React__default['default'].createElement("b", null, strings.complianceBannerRecordingAndTranscriptionStarted),
6906
+ ` ${strings.complianceBannerTranscriptionConsent}`,
6907
+ React__default['default'].createElement(PrivacyPolicy, { linkText: strings.privacyPolicy })));
6908
+ case 'TRANSCRIPTION_STARTED':
6909
+ return (React__default['default'].createElement(React__default['default'].Fragment, null,
6910
+ React__default['default'].createElement("b", null, strings.complianceBannerTranscriptionStarted),
6911
+ ` ${strings.complianceBannerTranscriptionConsent}`,
6912
+ React__default['default'].createElement(PrivacyPolicy, { linkText: strings.privacyPolicy })));
6913
+ case 'RECORDING_STOPPED':
6914
+ return (React__default['default'].createElement(React__default['default'].Fragment, null,
6915
+ React__default['default'].createElement("b", null, strings.complianceBannerRecordingSaving),
6916
+ ` ${strings.complianceBannerRecordingStopped}`,
6917
+ React__default['default'].createElement(LearnMore, { linkText: strings.learnMore })));
6918
+ case 'RECORDING_STARTED':
6919
+ return (React__default['default'].createElement(React__default['default'].Fragment, null,
6920
+ React__default['default'].createElement("b", null, strings.complianceBannerRecordingStarted),
6921
+ ` ${strings.complianceBannerTranscriptionConsent}`,
6922
+ React__default['default'].createElement(PrivacyPolicy, { linkText: strings.privacyPolicy })));
6923
+ case 'TRANSCRIPTION_STOPPED':
6924
+ return (React__default['default'].createElement(React__default['default'].Fragment, null,
6925
+ React__default['default'].createElement("b", null, strings.complianceBannerTranscriptionSaving),
6926
+ ` ${strings.complianceBannerTranscriptionStopped}`,
6927
+ React__default['default'].createElement(LearnMore, { linkText: strings.learnMore })));
6928
+ }
6929
+ return React__default['default'].createElement(React__default['default'].Fragment, null);
6930
+ }
6931
+ function PrivacyPolicy(props) {
6932
+ return (React__default['default'].createElement(react.Link, { href: "https://privacy.microsoft.com/privacystatement#mainnoticetoendusersmodule", target: "_blank", underline: true }, props.linkText));
6933
+ }
6934
+ function LearnMore(props) {
6935
+ return (React__default['default'].createElement(react.Link, { href: "https://support.microsoft.com/office/record-a-meeting-in-teams-34dfbe7f-b07d-4a27-b4c6-de62f1348c24", target: "_blank", underline: true }, props.linkText));
6936
+ }
6937
+
6718
6938
  // Copyright (c) Microsoft Corporation.
6719
6939
  // Licensed under the MIT license.
6720
6940
  /**
@@ -7124,8 +7344,10 @@ const createDefaultChatHandlers = memoizeOne__default['default']((chatClient, ch
7124
7344
  };
7125
7345
  yield chatThreadClient.sendMessage(sendMessageRequest, options);
7126
7346
  }),
7127
- onUpdateMessage: (messageId, content, metadata) => __awaiter$k(void 0, void 0, void 0, function* () {
7128
- yield chatThreadClient.updateMessage(messageId, { content, metadata });
7347
+ onUpdateMessage: (messageId, content, metadata, options) => __awaiter$k(void 0, void 0, void 0, function* () {
7348
+ const updatedMetadata = metadata ? Object.assign({}, metadata) : {};
7349
+ updatedMetadata['fileSharingMetadata'] = JSON.stringify((options === null || options === void 0 ? void 0 : options.attachedFilesMetadata) || []);
7350
+ yield chatThreadClient.updateMessage(messageId, { content, metadata: updatedMetadata });
7129
7351
  }),
7130
7352
  onDeleteMessage: (messageId) => __awaiter$k(void 0, void 0, void 0, function* () {
7131
7353
  yield chatThreadClient.deleteMessage(messageId);
@@ -10878,14 +11100,15 @@ const proxyChatClient = {
10878
11100
  const createStatefulChatClient = (args, options) => {
10879
11101
  chatStatefulLogger.info(`Creating chat stateful client using library version: ${_getApplicationId()}`);
10880
11102
  const tweakedOptions = Object.assign(Object.assign({}, options), { chatClientOptions: Object.assign(Object.assign({}, options === null || options === void 0 ? void 0 : options.chatClientOptions), { userAgentOptions: { userAgentPrefix: _getApplicationId() } }) });
10881
- return createStatefulChatClientWithDeps(new communicationChat.ChatClient(args.endpoint, args.credential, tweakedOptions.chatClientOptions), args, tweakedOptions);
11103
+ return _createStatefulChatClientWithDeps(new communicationChat.ChatClient(args.endpoint, args.credential, tweakedOptions.chatClientOptions), args, tweakedOptions);
10882
11104
  };
10883
11105
  /**
10884
11106
  * Internal implementation of {@link createStatefulChatClient} for dependency injection.
10885
11107
  *
10886
11108
  * Used by tests. Should not be exported out of this package.
11109
+ * @internal
10887
11110
  */
10888
- const createStatefulChatClientWithDeps = (chatClient, args, options) => {
11111
+ const _createStatefulChatClientWithDeps = (chatClient, args, options) => {
10889
11112
  const context = new ChatContext$1(options === null || options === void 0 ? void 0 : options.maxStateChangeListeners);
10890
11113
  let eventSubscriber;
10891
11114
  context.updateChatConfig(communicationCommon.getIdentifierKind(args.userId), args.displayName);
@@ -11361,17 +11584,13 @@ class AzureCommunicationChatAdapter {
11361
11584
  this.unsubscribeAllEvents();
11362
11585
  }
11363
11586
  fetchInitialData() {
11364
- var e_1, _a;
11365
11587
  return __awaiter$9(this, void 0, void 0, function* () {
11366
- try {
11588
+ // If get properties fails we dont want to try to get the participants after.
11589
+ yield this.asyncTeeErrorToEventEmitter(() => __awaiter$9(this, void 0, void 0, function* () {
11590
+ var e_1, _a;
11367
11591
  yield this.chatThreadClient.getProperties();
11368
- }
11369
- catch (e) {
11370
- console.log(e);
11371
- }
11372
- // Fetch all participants who joined before the local user.
11373
- try {
11374
11592
  try {
11593
+ // Fetch all participants who joined before the local user.
11375
11594
  for (var _b = __asyncValues(this.chatThreadClient.listParticipants().byPage({
11376
11595
  // Fetch 100 participants per page by default.
11377
11596
  maxPageSize: 100
@@ -11388,10 +11607,7 @@ class AzureCommunicationChatAdapter {
11388
11607
  }
11389
11608
  finally { if (e_1) throw e_1.error; }
11390
11609
  }
11391
- }
11392
- catch (e) {
11393
- console.log(e);
11394
- }
11610
+ }));
11395
11611
  });
11396
11612
  }
11397
11613
  getState() {
@@ -11454,10 +11670,11 @@ class AzureCommunicationChatAdapter {
11454
11670
  }));
11455
11671
  });
11456
11672
  }
11457
- updateMessage(messageId, content, metadata) {
11673
+ updateMessage(messageId, content, metadata, options) {
11458
11674
  return __awaiter$9(this, void 0, void 0, function* () {
11459
11675
  return yield this.asyncTeeErrorToEventEmitter(() => __awaiter$9(this, void 0, void 0, function* () {
11460
- return yield this.handlers.onUpdateMessage(messageId, content, metadata);
11676
+ /* @conditional-compile-remove(file-sharing) */
11677
+ return yield this.handlers.onUpdateMessage(messageId, content, metadata, options);
11461
11678
  }));
11462
11679
  });
11463
11680
  }
@@ -12751,45 +12968,6 @@ const getCallCompositePage = (call, previousCall) => {
12751
12968
  // No call state - show starting page (configuration)
12752
12969
  return 'configuration';
12753
12970
  };
12754
- /**
12755
- * Return different conditions based on the current and previous state of recording and transcribing
12756
- *
12757
- * @param callRecordState - The current call record state: on, off, stopped
12758
- * @param callTranscribeState - The current call transcribe state: on, off, stopped
12759
- *
12760
- * @remarks - The stopped state means: previously on but currently off
12761
- *
12762
- * @private
12763
- */
12764
- const computeVariant = (callRecordState, callTranscribeState) => {
12765
- if (callRecordState === 'on' && callTranscribeState === 'on') {
12766
- return 'RECORDING_AND_TRANSCRIPTION_STARTED';
12767
- }
12768
- else if (callRecordState === 'on' && callTranscribeState === 'off') {
12769
- return 'RECORDING_STARTED';
12770
- }
12771
- else if (callRecordState === 'off' && callTranscribeState === 'on') {
12772
- return 'TRANSCRIPTION_STARTED';
12773
- }
12774
- else if (callRecordState === 'on' && callTranscribeState === 'stopped') {
12775
- return 'TRANSCRIPTION_STOPPED_STILL_RECORDING';
12776
- }
12777
- else if (callRecordState === 'stopped' && callTranscribeState === 'on') {
12778
- return 'RECORDING_STOPPED_STILL_TRANSCRIBING';
12779
- }
12780
- else if (callRecordState === 'off' && callTranscribeState === 'stopped') {
12781
- return 'TRANSCRIPTION_STOPPED';
12782
- }
12783
- else if (callRecordState === 'stopped' && callTranscribeState === 'off') {
12784
- return 'RECORDING_STOPPED';
12785
- }
12786
- else if (callRecordState === 'stopped' && callTranscribeState === 'stopped') {
12787
- return 'RECORDING_AND_TRANSCRIPTION_STOPPED';
12788
- }
12789
- else {
12790
- return 'NO_STATE';
12791
- }
12792
- };
12793
12971
 
12794
12972
  // Copyright (c) Microsoft Corporation.
12795
12973
  // Licensed under the MIT license.
@@ -13198,128 +13376,6 @@ const onFetchCustomButtonPropsTrampoline = (options) => {
13198
13376
  return response;
13199
13377
  };
13200
13378
 
13201
- // Copyright (c) Microsoft Corporation.
13202
- /**
13203
- * @private
13204
- */
13205
- const ComplianceBanner = (props) => {
13206
- function determineStates(previous, current) {
13207
- // if current state is on, then return on
13208
- if (current) {
13209
- return 'on';
13210
- }
13211
- // if current state is off
13212
- else {
13213
- // if previous state is on and current state is off, return stopped (on -> off)
13214
- if (previous === 'on') {
13215
- return 'stopped';
13216
- }
13217
- // otherwise remain previous state unchanged
13218
- else {
13219
- return previous;
13220
- }
13221
- }
13222
- }
13223
- //set variant when incoming state is different from current state
13224
- //when variant change, return message bar
13225
- //when message bar is dismissed,set variant to default nostate and if current state is stopped, set to off
13226
- const strings = useLocale().strings;
13227
- const [variant, setVariant] = React.useState('NO_STATE');
13228
- const cachedProps = React.useRef({
13229
- latestBooleanState: {
13230
- callTranscribeState: false,
13231
- callRecordState: false
13232
- },
13233
- latestStringState: {
13234
- callTranscribeState: 'off',
13235
- callRecordState: 'off'
13236
- }
13237
- });
13238
- // Only update cached props and variant if there is _some_ change in the latest props.
13239
- // This ensures that state machine is only updated if there is an actual change in the props.
13240
- if (props.callRecordState !== cachedProps.current.latestBooleanState.callRecordState ||
13241
- props.callTranscribeState !== cachedProps.current.latestBooleanState.callTranscribeState) {
13242
- cachedProps.current = {
13243
- latestBooleanState: props,
13244
- latestStringState: {
13245
- callRecordState: determineStates(cachedProps.current.latestStringState.callRecordState, props.callRecordState),
13246
- callTranscribeState: determineStates(cachedProps.current.latestStringState.callTranscribeState, props.callTranscribeState)
13247
- }
13248
- };
13249
- setVariant(computeVariant(cachedProps.current.latestStringState.callRecordState, cachedProps.current.latestStringState.callTranscribeState));
13250
- // when both states are stopped, after displaying message "RECORDING_AND_TRANSCRIPTION_STOPPED", change both states to off (going back to the default state)
13251
- if (cachedProps.current.latestStringState.callRecordState === 'stopped' &&
13252
- cachedProps.current.latestStringState.callTranscribeState === 'stopped') {
13253
- cachedProps.current.latestStringState.callRecordState = 'off';
13254
- cachedProps.current.latestStringState.callTranscribeState = 'off';
13255
- }
13256
- }
13257
- return variant === 'NO_STATE' ? (React__default['default'].createElement(React__default['default'].Fragment, null)) : (React__default['default'].createElement(react.MessageBar, { messageBarType: react.MessageBarType.warning, onDismiss: () => {
13258
- // when closing the banner, change variant to nostate and change stopped state to off state.
13259
- // Reason: on banner close, going back to the default state
13260
- setVariant('NO_STATE');
13261
- if (cachedProps.current.latestStringState.callRecordState === 'stopped') {
13262
- cachedProps.current.latestStringState.callRecordState = 'off';
13263
- }
13264
- if (cachedProps.current.latestStringState.callTranscribeState === 'stopped') {
13265
- cachedProps.current.latestStringState.callTranscribeState = 'off';
13266
- }
13267
- }, dismissButtonAriaLabel: strings.call.close },
13268
- React__default['default'].createElement(BannerMessage, { variant: variant, strings: strings })));
13269
- };
13270
- function BannerMessage(props) {
13271
- const { variant, strings } = props;
13272
- switch (variant) {
13273
- case 'TRANSCRIPTION_STOPPED_STILL_RECORDING':
13274
- return (React__default['default'].createElement(React__default['default'].Fragment, null,
13275
- React__default['default'].createElement("b", null, strings.call.complianceBannerTranscriptionStopped),
13276
- ` ${strings.call.complianceBannerNowOnlyRecording}`,
13277
- React__default['default'].createElement(PrivacyPolicy, { linkText: strings.call.privacyPolicy })));
13278
- case 'RECORDING_STOPPED_STILL_TRANSCRIBING':
13279
- return (React__default['default'].createElement(React__default['default'].Fragment, null,
13280
- React__default['default'].createElement("b", null, strings.call.complianceBannerRecordingStopped),
13281
- ` ${strings.call.complianceBannerNowOnlyTranscription}`,
13282
- React__default['default'].createElement(PrivacyPolicy, { linkText: strings.call.privacyPolicy })));
13283
- case 'RECORDING_AND_TRANSCRIPTION_STOPPED':
13284
- return (React__default['default'].createElement(React__default['default'].Fragment, null,
13285
- React__default['default'].createElement("b", null, strings.call.complianceBannerRecordingAndTranscriptionSaved),
13286
- ` ${strings.call.complianceBannerRecordingAndTranscriptionStopped}`,
13287
- React__default['default'].createElement(LearnMore, { linkText: strings.call.learnMore })));
13288
- case 'RECORDING_AND_TRANSCRIPTION_STARTED':
13289
- return (React__default['default'].createElement(React__default['default'].Fragment, null,
13290
- React__default['default'].createElement("b", null, strings.call.complianceBannerRecordingAndTranscriptionStarted),
13291
- ` ${strings.call.complianceBannerTranscriptionConsent}`,
13292
- React__default['default'].createElement(PrivacyPolicy, { linkText: strings.call.privacyPolicy })));
13293
- case 'TRANSCRIPTION_STARTED':
13294
- return (React__default['default'].createElement(React__default['default'].Fragment, null,
13295
- React__default['default'].createElement("b", null, strings.call.complianceBannerTranscriptionStarted),
13296
- ` ${strings.call.complianceBannerTranscriptionConsent}`,
13297
- React__default['default'].createElement(PrivacyPolicy, { linkText: strings.call.privacyPolicy })));
13298
- case 'RECORDING_STOPPED':
13299
- return (React__default['default'].createElement(React__default['default'].Fragment, null,
13300
- React__default['default'].createElement("b", null, strings.call.complianceBannerRecordingSaving),
13301
- ` ${strings.call.complianceBannerRecordingStopped}`,
13302
- React__default['default'].createElement(LearnMore, { linkText: strings.call.learnMore })));
13303
- case 'RECORDING_STARTED':
13304
- return (React__default['default'].createElement(React__default['default'].Fragment, null,
13305
- React__default['default'].createElement("b", null, strings.call.complianceBannerRecordingStarted),
13306
- ` ${strings.call.complianceBannerTranscriptionConsent}`,
13307
- React__default['default'].createElement(PrivacyPolicy, { linkText: strings.call.privacyPolicy })));
13308
- case 'TRANSCRIPTION_STOPPED':
13309
- return (React__default['default'].createElement(React__default['default'].Fragment, null,
13310
- React__default['default'].createElement("b", null, strings.call.complianceBannerTranscriptionSaving),
13311
- ` ${strings.call.complianceBannerTranscriptionStopped}`,
13312
- React__default['default'].createElement(LearnMore, { linkText: strings.call.learnMore })));
13313
- }
13314
- return React__default['default'].createElement(React__default['default'].Fragment, null);
13315
- }
13316
- function PrivacyPolicy(props) {
13317
- return (React__default['default'].createElement(react.Link, { href: "https://privacy.microsoft.com/privacystatement#mainnoticetoendusersmodule", target: "_blank", underline: true }, props.linkText));
13318
- }
13319
- function LearnMore(props) {
13320
- return (React__default['default'].createElement(react.Link, { href: "https://support.microsoft.com/office/record-a-meeting-in-teams-34dfbe7f-b07d-4a27-b4c6-de62f1348c24", target: "_blank", underline: true }, props.linkText));
13321
- }
13322
-
13323
13379
  // Copyright (c) Microsoft Corporation.
13324
13380
  // Licensed under the MIT license.
13325
13381
  /** @private */
@@ -13455,7 +13511,7 @@ const CallArrangement = (props) => {
13455
13511
  React__default['default'].createElement(react.Stack, { verticalFill: true, horizontalAlign: "stretch", className: containerClassName, "data-ui-id": props.dataUiId },
13456
13512
  React__default['default'].createElement(react.Stack.Item, { styles: notificationsContainerStyles },
13457
13513
  React__default['default'].createElement(react.Stack, { styles: bannerNotificationStyles },
13458
- React__default['default'].createElement(ComplianceBanner, Object.assign({}, props.complianceBannerProps))),
13514
+ React__default['default'].createElement(_ComplianceBanner, Object.assign({}, props.complianceBannerProps))),
13459
13515
  props.errorBarProps !== false && (React__default['default'].createElement(react.Stack, { styles: bannerNotificationStyles },
13460
13516
  React__default['default'].createElement(ErrorBar, Object.assign({}, props.errorBarProps)))),
13461
13517
  !!props.mutedNotificationProps && React__default['default'].createElement(MutedNotification, Object.assign({}, props.mutedNotificationProps))),
@@ -13783,9 +13839,10 @@ const CallPage = (props) => {
13783
13839
  const errorBarProps = usePropsFor$1(ErrorBar);
13784
13840
  const mutedNotificationProps = useSelector$1(mutedNotificationSelector);
13785
13841
  const networkReconnectTileProps = useSelector$1(networkReconnectTileSelector);
13842
+ const strings = useLocale().strings.call;
13786
13843
  // Reduce the controls shown when mobile view is enabled.
13787
13844
  const callControlOptions = mobileView ? reduceCallControlsForMobile(options === null || options === void 0 ? void 0 : options.callControls) : options === null || options === void 0 ? void 0 : options.callControls;
13788
- return (React__default['default'].createElement(CallArrangement, { complianceBannerProps: Object.assign({}, complianceBannerProps), errorBarProps: (options === null || options === void 0 ? void 0 : options.errorBar) !== false && Object.assign({}, errorBarProps), mutedNotificationProps: mutedNotificationProps, callControlProps: {
13845
+ return (React__default['default'].createElement(CallArrangement, { complianceBannerProps: Object.assign(Object.assign({}, complianceBannerProps), { strings }), errorBarProps: (options === null || options === void 0 ? void 0 : options.errorBar) !== false && Object.assign({}, errorBarProps), mutedNotificationProps: mutedNotificationProps, callControlProps: {
13789
13846
  callInvitationURL: callInvitationURL,
13790
13847
  onFetchParticipantMenuItems: onFetchParticipantMenuItems,
13791
13848
  options: callControlOptions,
@@ -14339,7 +14396,7 @@ const LobbyPage = (props) => {
14339
14396
  ? reduceCallControlsForMobile((_a = props.options) === null || _a === void 0 ? void 0 : _a.callControls)
14340
14397
  : (_b = props.options) === null || _b === void 0 ? void 0 : _b.callControls;
14341
14398
  callControlOptions = disableLobbyPageControls(callControlOptions);
14342
- return (React__default['default'].createElement(CallArrangement, { complianceBannerProps: {}, errorBarProps: ((_c = props.options) === null || _c === void 0 ? void 0 : _c.errorBar) !== false && Object.assign({}, errorBarProps), callControlProps: {
14399
+ return (React__default['default'].createElement(CallArrangement, { complianceBannerProps: { strings }, errorBarProps: ((_c = props.options) === null || _c === void 0 ? void 0 : _c.errorBar) !== false && Object.assign({}, errorBarProps), callControlProps: {
14343
14400
  options: callControlOptions,
14344
14401
  increaseFlyoutItemSize: props.mobileView
14345
14402
  }, mobileView: props.mobileView, onRenderGalleryContent: () => React__default['default'].createElement(LobbyTile, Object.assign({}, lobbyProps, { overlayProps: overlayProps(strings, inLobby) })), dataUiId: 'lobby-page' }));
@@ -16313,7 +16370,7 @@ const CallWithChatScreen = (props) => {
16313
16370
  setActivePane('none');
16314
16371
  }, [setActivePane]);
16315
16372
  /** Constant setting of id for the parent stack of the composite */
16316
- const compositeParentDivId = 'callWithChatCompositeParentDiv-internal';
16373
+ const compositeParentDivId = reactHooks.useId('callWithChatCompositeParentDiv-internal');
16317
16374
  const toggleChat = React.useCallback(() => {
16318
16375
  if (activePane === 'chat') {
16319
16376
  setActivePane('none');