@azure/communication-react 1.20.0-alpha-202410090016 → 1.20.0-alpha-202410100016

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 (62) hide show
  1. package/dist/dist-cjs/communication-react/{ChatMessageComponentAsRichTextEditBox-CJavB0fv.js → ChatMessageComponentAsRichTextEditBox-Dk_okMwX.js} +2 -2
  2. package/dist/dist-cjs/communication-react/{ChatMessageComponentAsRichTextEditBox-CJavB0fv.js.map → ChatMessageComponentAsRichTextEditBox-Dk_okMwX.js.map} +1 -1
  3. package/dist/dist-cjs/communication-react/{RichTextSendBoxWrapper-DopZRsd3.js → RichTextSendBoxWrapper-C36s6eLH.js} +2 -2
  4. package/dist/dist-cjs/communication-react/{RichTextSendBoxWrapper-DopZRsd3.js.map → RichTextSendBoxWrapper-C36s6eLH.js.map} +1 -1
  5. package/dist/dist-cjs/communication-react/{index-X1fv8B3Q.js → index-C548hWR1.js} +177 -127
  6. package/dist/dist-cjs/communication-react/index-C548hWR1.js.map +1 -0
  7. package/dist/dist-cjs/communication-react/index.js +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/react-components/src/components/Attachment/AttachmentCard.js +3 -2
  11. package/dist/dist-esm/react-components/src/components/Attachment/AttachmentCard.js.map +1 -1
  12. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageContent.js +6 -3
  13. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageContent.js.map +1 -1
  14. package/dist/dist-esm/react-components/src/components/Dialpad/Dialpad.js +6 -4
  15. package/dist/dist-esm/react-components/src/components/Dialpad/Dialpad.js.map +1 -1
  16. package/dist/dist-esm/react-components/src/components/GridLayout.js +3 -0
  17. package/dist/dist-esm/react-components/src/components/GridLayout.js.map +1 -1
  18. package/dist/dist-esm/react-components/src/components/HorizontalGallery.js +4 -5
  19. package/dist/dist-esm/react-components/src/components/HorizontalGallery.js.map +1 -1
  20. package/dist/dist-esm/react-components/src/components/LocalVideoCameraButton.js +3 -0
  21. package/dist/dist-esm/react-components/src/components/LocalVideoCameraButton.js.map +1 -1
  22. package/dist/dist-esm/react-components/src/components/MeetingConferencePhoneInfo.js +2 -1
  23. package/dist/dist-esm/react-components/src/components/MeetingConferencePhoneInfo.js.map +1 -1
  24. package/dist/dist-esm/react-components/src/components/MessageThread.js +3 -3
  25. package/dist/dist-esm/react-components/src/components/MessageThread.js.map +1 -1
  26. package/dist/dist-esm/react-components/src/components/ModalClone/ModalClone.js +2 -1
  27. package/dist/dist-esm/react-components/src/components/ModalClone/ModalClone.js.map +1 -1
  28. package/dist/dist-esm/react-components/src/components/ParticipantItem.js +1 -1
  29. package/dist/dist-esm/react-components/src/components/ParticipantItem.js.map +1 -1
  30. package/dist/dist-esm/react-components/src/components/ReactionButton.js +27 -35
  31. package/dist/dist-esm/react-components/src/components/ReactionButton.js.map +1 -1
  32. package/dist/dist-esm/react-components/src/components/RichTextEditor/RichTextEditor.js +9 -3
  33. package/dist/dist-esm/react-components/src/components/RichTextEditor/RichTextEditor.js.map +1 -1
  34. package/dist/dist-esm/react-components/src/components/TextFieldWithMention/TextFieldWithMention.js +1 -1
  35. package/dist/dist-esm/react-components/src/components/TextFieldWithMention/TextFieldWithMention.js.map +1 -1
  36. package/dist/dist-esm/react-components/src/components/TextFieldWithMention/mentionTagUtils.js +10 -11
  37. package/dist/dist-esm/react-components/src/components/TextFieldWithMention/mentionTagUtils.js.map +1 -1
  38. package/dist/dist-esm/react-components/src/components/VerticalGallery.js +2 -1
  39. package/dist/dist-esm/react-components/src/components/VerticalGallery.js.map +1 -1
  40. package/dist/dist-esm/react-components/src/components/VideoEffects/VideoBackgroundEffectsPicker.js +3 -3
  41. package/dist/dist-esm/react-components/src/components/VideoEffects/VideoBackgroundEffectsPicker.js.map +1 -1
  42. package/dist/dist-esm/react-components/src/components/VideoGallery/RemoteContentShareReactionOverlay.js +5 -4
  43. package/dist/dist-esm/react-components/src/components/VideoGallery/RemoteContentShareReactionOverlay.js.map +1 -1
  44. package/dist/dist-esm/react-components/src/components/VideoGallery/utils/videoGalleryLayoutUtils.js +15 -18
  45. package/dist/dist-esm/react-components/src/components/VideoGallery/utils/videoGalleryLayoutUtils.js.map +1 -1
  46. package/dist/dist-esm/react-components/src/components/VideoTile.js +3 -0
  47. package/dist/dist-esm/react-components/src/components/VideoTile.js.map +1 -1
  48. package/dist/dist-esm/react-components/src/components/styles/ReactionButton.styles.d.ts +13 -6
  49. package/dist/dist-esm/react-components/src/components/styles/ReactionButton.styles.js +47 -19
  50. package/dist/dist-esm/react-components/src/components/styles/ReactionButton.styles.js.map +1 -1
  51. package/dist/dist-esm/react-components/src/components/styles/ReactionOverlay.style.d.ts +0 -6
  52. package/dist/dist-esm/react-components/src/components/styles/ReactionOverlay.style.js +6 -41
  53. package/dist/dist-esm/react-components/src/components/styles/ReactionOverlay.style.js.map +1 -1
  54. package/dist/dist-esm/react-components/src/components/utils/RichTextEditorUtils.js +4 -1
  55. package/dist/dist-esm/react-components/src/components/utils/RichTextEditorUtils.js.map +1 -1
  56. package/dist/dist-esm/react-components/src/components/utils/RichTextTableUtils.js +3 -0
  57. package/dist/dist-esm/react-components/src/components/utils/RichTextTableUtils.js.map +1 -1
  58. package/dist/dist-esm/react-components/src/components/utils/responsive.js +6 -0
  59. package/dist/dist-esm/react-components/src/components/utils/responsive.js.map +1 -1
  60. package/dist/dist-esm/react-components/src/gallery/dominantSpeaker.js.map +1 -1
  61. package/package.json +1 -1
  62. package/dist/dist-cjs/communication-react/index-X1fv8B3Q.js.map +0 -1
@@ -188,7 +188,7 @@ function getDefaultExportFromCjs (x) {
188
188
  // Copyright (c) Microsoft Corporation.
189
189
  // Licensed under the MIT License.
190
190
  // GENERATED FILE. DO NOT EDIT MANUALLY.
191
- var telemetryVersion = '1.20.0-alpha-202410090016';
191
+ var telemetryVersion = '1.20.0-alpha-202410100016';
192
192
 
193
193
 
194
194
  var telemetryVersion$1 = /*@__PURE__*/getDefaultExportFromCjs(telemetryVersion);
@@ -7248,6 +7248,9 @@ const GridLayout = (props) => {
7248
7248
  const [currentHeight, setCurrentHeight] = React.useState(0);
7249
7249
  const containerRef = React.useRef(null);
7250
7250
  const observer = React.useRef(new ResizeObserver((entries) => {
7251
+ if (!entries[0]) {
7252
+ return;
7253
+ }
7251
7254
  const { width, height } = entries[0].contentRect;
7252
7255
  setCurrentWidth(width);
7253
7256
  setCurrentHeight(height);
@@ -8254,7 +8257,7 @@ const updateHTML = (props) => {
8254
8257
  let changeNewEndIndex;
8255
8258
  for (let i = 0; i < tags.length; i++) {
8256
8259
  const tag = tags[i];
8257
- if (tag.plainTextBeginIndex === undefined) {
8260
+ if ((tag === null || tag === void 0 ? void 0 : tag.plainTextBeginIndex) === undefined) {
8258
8261
  continue;
8259
8262
  }
8260
8263
  // all plain text indexes includes trigger length for the mention that shouldn't be included in
@@ -8677,7 +8680,7 @@ const getDisplayNameForMentionSuggestion = (suggestion, localeStrings) => {
8677
8680
  * @returns An array of tags and the plain text representation
8678
8681
  */
8679
8682
  const textToTagParser = (text, trigger) => {
8680
- var _a, _b;
8683
+ var _a, _b, _c;
8681
8684
  const tags = []; // Tags passed back to the caller
8682
8685
  const tagParseStack = []; // Local stack to use while parsing
8683
8686
  let plainTextRepresentation = '';
@@ -8723,13 +8726,13 @@ const textToTagParser = (text, trigger) => {
8723
8726
  trigger +
8724
8727
  plainTextRepresentation.slice(currentOpenTag.plainTextBeginIndex);
8725
8728
  }
8729
+ const lastSubTag = (_a = currentOpenTag.subTags) === null || _a === void 0 ? void 0 : _a[currentOpenTag.subTags.length - 1];
8726
8730
  if (!currentOpenTag.subTags) {
8727
8731
  plainTextRepresentation += unEscapeHtmlCharacters(currentOpenTag.content);
8728
8732
  }
8729
- else if (currentOpenTag.subTags.length > 0) {
8733
+ else if (lastSubTag) {
8730
8734
  // Add text after the last tag
8731
- const lastSubTag = currentOpenTag.subTags[currentOpenTag.subTags.length - 1];
8732
- const startOfRemainingText = ((_a = lastSubTag.closingTagIndex) !== null && _a !== void 0 ? _a : lastSubTag.openTagIndex) + lastSubTag.tagType.length + 3;
8735
+ const startOfRemainingText = ((_b = lastSubTag === null || lastSubTag === void 0 ? void 0 : lastSubTag.closingTagIndex) !== null && _b !== void 0 ? _b : lastSubTag.openTagIndex) + lastSubTag.tagType.length + 3;
8733
8736
  const trailingText = currentOpenTag.content.substring(startOfRemainingText);
8734
8737
  plainTextRepresentation += unEscapeHtmlCharacters(trailingText);
8735
8738
  }
@@ -8740,7 +8743,7 @@ const textToTagParser = (text, trigger) => {
8740
8743
  throw new Error('Unexpected close tag found. Got "' +
8741
8744
  closeTagType +
8742
8745
  '" but expected "' +
8743
- ((_b = tagParseStack[tagParseStack.length - 1]) === null || _b === void 0 ? void 0 : _b.tagType) +
8746
+ ((_c = tagParseStack[tagParseStack.length - 1]) === null || _c === void 0 ? void 0 : _c.tagType) +
8744
8747
  '"');
8745
8748
  }
8746
8749
  }
@@ -8750,11 +8753,10 @@ const textToTagParser = (text, trigger) => {
8750
8753
  return { tags, plainText: plainTextRepresentation };
8751
8754
  };
8752
8755
  const parseOpenTag = (tag, startIdx) => {
8753
- const tagType = tag
8754
- .substring(1, tag.length - 1)
8755
- .split(' ')[0]
8756
- .toLowerCase()
8757
- .replace('/', '');
8756
+ var _a;
8757
+ let tagType = tag.substring(1, tag.length - 1);
8758
+ tagType = (_a = tagType.split(' ')[0]) !== null && _a !== void 0 ? _a : tagType;
8759
+ tagType = tagType.toLowerCase().replace('/', '');
8758
8760
  return {
8759
8761
  tagType,
8760
8762
  openTagIndex: startIdx,
@@ -9559,7 +9561,7 @@ const TextFieldWithMention = (props) => {
9559
9561
  return undefined;
9560
9562
  }
9561
9563
  const currentMention = mentionSuggestions[activeSuggestionIndex !== null && activeSuggestionIndex !== void 0 ? activeSuggestionIndex : 0];
9562
- return (currentMention === null || currentMention === void 0 ? void 0 : currentMention.displayText.length) > 0
9564
+ return currentMention && (currentMention === null || currentMention === void 0 ? void 0 : currentMention.displayText.length) > 0
9563
9565
  ? currentMention === null || currentMention === void 0 ? void 0 : currentMention.displayText
9564
9566
  : localeStrings.participantItem.displayNamePlaceholder;
9565
9567
  }, [activeSuggestionIndex, mentionSuggestions, localeStrings.participantItem.displayNamePlaceholder]);
@@ -10047,13 +10049,14 @@ const _AttachmentCard = (props) => {
10047
10049
  };
10048
10050
  const MappedMenuItems = (menuActions, attachment, handleOnClickError) => {
10049
10051
  const localeStrings = useLocaleAttachmentCardStringsTrampoline();
10050
- if (menuActions.length === 0) {
10052
+ if (!menuActions[0]) {
10051
10053
  return React.createElement(React.Fragment, null);
10052
10054
  }
10053
10055
  return menuActions.length === 1 ? (React.createElement(react.TooltipHost, { content: menuActions[0].name },
10054
10056
  React.createElement(reactComponents.ToolbarButton, { "aria-label": menuActions[0].name, role: "button", icon: menuActions[0].icon, onClick: () => {
10057
+ var _a;
10055
10058
  try {
10056
- menuActions[0].onClick(attachment);
10059
+ (_a = menuActions[0]) === null || _a === void 0 ? void 0 : _a.onClick(attachment);
10057
10060
  }
10058
10061
  catch (e) {
10059
10062
  handleOnClickError === null || handleOnClickError === void 0 ? void 0 : handleOnClickError(e.message);
@@ -11517,7 +11520,7 @@ const getPreviousInlineImages = (content) => {
11517
11520
  const getRemovedInlineImages = (content, previousInlineImages) => {
11518
11521
  const document = new DOMParser().parseFromString(content !== null && content !== void 0 ? content : '', 'text/html');
11519
11522
  const currentContentIds = Array.from(document.querySelectorAll('img')).map((img) => img.id);
11520
- previousInlineImages = previousInlineImages === null || previousInlineImages === void 0 ? void 0 : previousInlineImages.filter((img) => !(currentContentIds === null || currentContentIds === void 0 ? void 0 : currentContentIds.includes(img.id)));
11523
+ previousInlineImages = previousInlineImages === null || previousInlineImages === void 0 ? void 0 : previousInlineImages.filter((img) => !!img.id && !(currentContentIds === null || currentContentIds === void 0 ? void 0 : currentContentIds.includes(img.id)));
11521
11524
  const removedInlineImages = [...previousInlineImages];
11522
11525
  return removedInlineImages;
11523
11526
  };
@@ -11593,6 +11596,9 @@ const scrollToBottomRichTextEditor = () => {
11593
11596
  */
11594
11597
  const removeLocalBlobs = (currentLocalBlobMap, removedInlineImages) => {
11595
11598
  removedInlineImages.forEach((image) => {
11599
+ if (!image.id) {
11600
+ return;
11601
+ }
11596
11602
  removeSingleLocalBlob(currentLocalBlobMap, image.id);
11597
11603
  });
11598
11604
  };
@@ -11847,6 +11853,9 @@ function createKey(row, column) {
11847
11853
  */
11848
11854
  function parseKey(key) {
11849
11855
  const [row, column] = key.split(',');
11856
+ if (row === undefined || column === undefined) {
11857
+ throw new Error('Invalid key format');
11858
+ }
11850
11859
  return {
11851
11860
  row: parseInt(row),
11852
11861
  column: parseInt(column)
@@ -12668,7 +12677,12 @@ const RichTextEditor = React.forwardRef((props, ref) => {
12668
12677
  if (onInsertInlineImage) {
12669
12678
  copyPastePlugin.onInsertInlineImage = (imageAttributes) => {
12670
12679
  const { id, src } = imageAttributes;
12671
- setInlineImageLocalBlobs(Object.assign(Object.assign({}, inlineImageLocalBlobs), { [id]: src }));
12680
+ setInlineImageLocalBlobs((prev) => {
12681
+ if (!id || !src) {
12682
+ return prev;
12683
+ }
12684
+ return Object.assign(Object.assign({}, prev), { [id]: src });
12685
+ });
12672
12686
  onInsertInlineImage(imageAttributes);
12673
12687
  };
12674
12688
  }
@@ -12676,7 +12690,7 @@ const RichTextEditor = React.forwardRef((props, ref) => {
12676
12690
  copyPastePlugin.onInsertInlineImage = undefined;
12677
12691
  }
12678
12692
  undoRedoPlugin.onInsertInlineImage = onInsertInlineImage;
12679
- }, [copyPastePlugin, inlineImageLocalBlobs, onInsertInlineImage, undoRedoPlugin]);
12693
+ }, [copyPastePlugin, onInsertInlineImage, undoRedoPlugin]);
12680
12694
  React.useEffect(() => {
12681
12695
  undoRedoPlugin.onUpdateContent = () => {
12682
12696
  onChangeContent(/* @conditional-compile-remove(rich-text-editor-image-upload) */ true);
@@ -12845,8 +12859,9 @@ const createEditorInitialModel = (initialContent, contentModel) => {
12845
12859
  }
12846
12860
  };
12847
12861
  const setSelectionAfterLastSegment = (model, block) => {
12862
+ var _a;
12848
12863
  //selection marker should have the same format as the last segment if any
12849
- const format = block.segments.length > 0 ? block.segments[block.segments.length - 1].format : undefined;
12864
+ const format = block.segments.length > 0 ? (_a = block.segments[block.segments.length - 1]) === null || _a === void 0 ? void 0 : _a.format : undefined;
12850
12865
  const marker = roosterjsContentModelDom.createSelectionMarker(format);
12851
12866
  block.segments.push(marker);
12852
12867
  roosterjsContentModelDom.setSelection(model, marker);
@@ -14089,6 +14104,9 @@ const delay = (delay) => {
14089
14104
  const _useContainerWidth = (containerRef) => {
14090
14105
  const [width, setWidth] = React.useState(undefined);
14091
14106
  const observer = React.useRef(new ResizeObserver((entries) => {
14107
+ if (!entries[0]) {
14108
+ return;
14109
+ }
14092
14110
  const { width } = entries[0].contentRect;
14093
14111
  if (Number.isNaN(width)) {
14094
14112
  setWidth(0);
@@ -14117,6 +14135,9 @@ const _useContainerWidth = (containerRef) => {
14117
14135
  const _useContainerHeight = (containerRef) => {
14118
14136
  const [height, setHeight] = React.useState(undefined);
14119
14137
  const observer = React.useRef(new ResizeObserver((entries) => {
14138
+ if (!entries[0]) {
14139
+ return;
14140
+ }
14120
14141
  const { height } = entries[0].contentRect;
14121
14142
  if (Number.isNaN(height)) {
14122
14143
  setHeight(0);
@@ -14702,7 +14723,7 @@ const processHtmlToReact = (props) => {
14702
14723
  if (domNode instanceof parse.Element && domNode.attribs) {
14703
14724
  // Transform custom rendering of mentions
14704
14725
  /* @conditional-compile-remove(mention) */
14705
- if (domNode.name === 'msft-mention') {
14726
+ if (domNode.name === 'msft-mention' && domNode.attribs.id) {
14706
14727
  const { id } = domNode.attribs;
14707
14728
  const mention = {
14708
14729
  id: id,
@@ -14715,7 +14736,9 @@ const processHtmlToReact = (props) => {
14715
14736
  }
14716
14737
  // Transform inline images
14717
14738
  if (domNode.name && domNode.name === 'img' && domNode.attribs && domNode.attribs.id) {
14718
- domNode.attribs['aria-label'] = domNode.attribs.name;
14739
+ if (domNode.attribs.name) {
14740
+ domNode.attribs['aria-label'] = domNode.attribs.name;
14741
+ }
14719
14742
  const imgProps = parse.attributesToProps(domNode.attribs);
14720
14743
  const inlineImageProps = { messageId: props.message.messageId, imageAttributes: imgProps };
14721
14744
  return ((_c = props.inlineImageOptions) === null || _c === void 0 ? void 0 : _c.onRenderInlineImage)
@@ -14751,7 +14774,8 @@ const decodeEntities = (encodedString) => {
14751
14774
  // Find all matches of HTML entities defined in translate_re and
14752
14775
  // replace them with the corresponding character from the translate object.
14753
14776
  .replace(translate_re, function (match, entity) {
14754
- return translate[entity];
14777
+ var _a;
14778
+ return (_a = translate[entity]) !== null && _a !== void 0 ? _a : match;
14755
14779
  })
14756
14780
  // Find numeric entities (e.g., &#65;)
14757
14781
  // and replace them with the equivalent character using the String.fromCharCode method,
@@ -15316,7 +15340,7 @@ class _ErrorBoundary extends React.Component {
15316
15340
  // Copyright (c) Microsoft Corporation.
15317
15341
  // Licensed under the MIT License.
15318
15342
  /* @conditional-compile-remove(rich-text-editor) */
15319
- const ChatMessageComponentAsRichTextEditBox = React.lazy(() => Promise.resolve().then(function () { return require('./ChatMessageComponentAsRichTextEditBox-CJavB0fv.js'); }));
15343
+ const ChatMessageComponentAsRichTextEditBox = React.lazy(() => Promise.resolve().then(function () { return require('./ChatMessageComponentAsRichTextEditBox-Dk_okMwX.js'); }));
15320
15344
  /**
15321
15345
  * @private
15322
15346
  * Use this function to load RoosterJS dependencies early in the lifecycle.
@@ -15324,7 +15348,7 @@ const ChatMessageComponentAsRichTextEditBox = React.lazy(() => Promise.resolve()
15324
15348
  *
15325
15349
  * @conditional-compile-remove(rich-text-editor)
15326
15350
  */
15327
- const loadChatMessageComponentAsRichTextEditBox = () => Promise.resolve().then(function () { return require('./ChatMessageComponentAsRichTextEditBox-CJavB0fv.js'); });
15351
+ const loadChatMessageComponentAsRichTextEditBox = () => Promise.resolve().then(function () { return require('./ChatMessageComponentAsRichTextEditBox-Dk_okMwX.js'); });
15328
15352
  /**
15329
15353
  * @private
15330
15354
  */
@@ -15863,7 +15887,7 @@ const isMessageSame = (first, second) => {
15863
15887
  const getLatestChatMessage = (messages) => {
15864
15888
  for (let i = messages.length - 1; i >= 0; i--) {
15865
15889
  const message = messages[i];
15866
- if (message.messageType === 'chat' && !!message.createdOn) {
15890
+ if ((message === null || message === void 0 ? void 0 : message.messageType) === 'chat' && !!message.createdOn) {
15867
15891
  return message;
15868
15892
  }
15869
15893
  }
@@ -15948,7 +15972,7 @@ const memoizeAllMessages = memoizeFnAll((message, showMessageDate, showMessageSt
15948
15972
  const getLastChatMessageIdWithStatus = (messages, status) => {
15949
15973
  for (let i = messages.length - 1; i >= 0; i--) {
15950
15974
  const message = messages[i];
15951
- if (message.messageType === 'chat' && message.status === status && message.mine) {
15975
+ if ((message === null || message === void 0 ? void 0 : message.messageType) === 'chat' && message.status === status && message.mine) {
15952
15976
  return message.messageId;
15953
15977
  }
15954
15978
  }
@@ -15957,7 +15981,7 @@ const getLastChatMessageIdWithStatus = (messages, status) => {
15957
15981
  const getLastChatMessageForCurrentUser = (messages) => {
15958
15982
  for (let i = messages.length - 1; i >= 0; i--) {
15959
15983
  const message = messages[i];
15960
- if (message.messageType === 'chat' && message.mine) {
15984
+ if ((message === null || message === void 0 ? void 0 : message.messageType) === 'chat' && message.mine) {
15961
15985
  return message;
15962
15986
  }
15963
15987
  }
@@ -16631,7 +16655,7 @@ const ParticipantItem = (props) => {
16631
16655
  };
16632
16656
  const menuButton = React.useMemo(() => (React.createElement(react.Stack, { horizontal: true, horizontalAlign: "end", className: react.mergeStyles(menuButtonContainerStyle, { color: theme.palette.neutralPrimary }), title: strings.menuTitle, "data-ui-id": ids.participantItemMenuButton },
16633
16657
  React.createElement(react.Icon, { iconName: "ParticipantItemOptionsHovered", className: react.mergeStyles(iconStyles$3, !showMenuIcon ? displayNoneStyle : {}) }))), [theme.palette.neutralPrimary, strings.menuTitle, ids.participantItemMenuButton, showMenuIcon]);
16634
- return (React.createElement("div", { ref: containerRef, role: 'menuitem', "aria-disabled": (menuItems && menuItems.length > 0) || props.onClick ? false : true, "data-is-focusable": true, "data-ui-id": "participant-item", className: react.mergeStyles(participantItemContainerStyle({ clickable: !!menuItems && menuItems.length > 0 }, theme), styles === null || styles === void 0 ? void 0 : styles.root), onMouseEnter: () => setItemHovered(true), onMouseLeave: () => setItemHovered(false), onClick: () => {
16658
+ return (React.createElement("div", { ref: containerRef, role: 'menuitem', "aria-expanded": !me ? !menuHidden : undefined, "aria-disabled": (menuItems && menuItems.length > 0) || props.onClick ? false : true, "data-is-focusable": true, "data-ui-id": "participant-item", className: react.mergeStyles(participantItemContainerStyle({ clickable: !!menuItems && menuItems.length > 0 }, theme), styles === null || styles === void 0 ? void 0 : styles.root), onMouseEnter: () => setItemHovered(true), onMouseLeave: () => setItemHovered(false), onClick: () => {
16635
16659
  if (!participantStateString) {
16636
16660
  setItemHovered(true);
16637
16661
  setMenuHidden(false);
@@ -17325,6 +17349,7 @@ const emojiStyles = (backgroundImage, frameCount) => {
17325
17349
  alignItems: 'center',
17326
17350
  backgroundSize: `2.75rem 133.875rem`,
17327
17351
  transition: 'opacity 2s',
17352
+ minWidth: '2.75rem',
17328
17353
  backgroundColor: 'transparent',
17329
17354
  transform: 'scale(0.6)',
17330
17355
  ':hover': {
@@ -17340,24 +17365,6 @@ const emojiStyles = (backgroundImage, frameCount) => {
17340
17365
  }
17341
17366
  };
17342
17367
  };
17343
- /**
17344
- *
17345
- * @private
17346
- */
17347
- const reactionEmojiMenuStyles = () => {
17348
- return {
17349
- display: 'flex',
17350
- justifyContent: 'center',
17351
- alignItems: 'center',
17352
- flexDirection: 'row',
17353
- width: '13.75rem',
17354
- height: '2.625rem',
17355
- // Ensure that when one emoji is hovered, the other emojis are partially faded out
17356
- ':hover > :not(:hover)': {
17357
- opacity: '0.5'
17358
- }
17359
- };
17360
- };
17361
17368
  /**
17362
17369
  *
17363
17370
  * @private
@@ -17368,7 +17375,7 @@ const reactionToolTipHostStyle = () => {
17368
17375
  display: 'flex',
17369
17376
  flexDirection: 'column',
17370
17377
  height: '100%',
17371
- width: '100%'
17378
+ width: '2.75rem'
17372
17379
  }
17373
17380
  };
17374
17381
  };
@@ -17414,6 +17421,51 @@ const mobileViewEmojiStyles = (backgroundImage, animationPlayState) => {
17414
17421
  transform: `${'scale(0.8)' }`
17415
17422
  };
17416
17423
  };
17424
+ /**
17425
+ * @private
17426
+ */
17427
+ const reactionButtonStyles = (theme) => ({
17428
+ rootChecked: {
17429
+ background: theme.palette.themePrimary,
17430
+ color: theme.palette.white
17431
+ },
17432
+ rootCheckedHovered: {
17433
+ background: theme.palette.themePrimary,
17434
+ color: theme.palette.white
17435
+ },
17436
+ labelChecked: { color: theme.palette.white }
17437
+ });
17438
+ /**
17439
+ * @private
17440
+ */
17441
+ const reactionItemButtonStyles = {
17442
+ root: {
17443
+ border: 'none',
17444
+ height: '2.75rem',
17445
+ width: '2.75rem'
17446
+ }
17447
+ };
17448
+ /**
17449
+ * @private
17450
+ */
17451
+ const reactionButtonCalloutStyles = {
17452
+ container: {},
17453
+ root: {},
17454
+ beak: {},
17455
+ beakCurtain: {},
17456
+ calloutMain: {
17457
+ display: 'flex',
17458
+ justifyContent: 'center',
17459
+ alignItems: 'center',
17460
+ flexDirection: 'row',
17461
+ width: '13.75rem',
17462
+ height: '2.625rem',
17463
+ // Ensure that when one emoji is hovered, the other emojis are partially faded out
17464
+ ':hover > :not(:hover)': {
17465
+ opacity: '0.5'
17466
+ }
17467
+ }
17468
+ };
17417
17469
 
17418
17470
  // Copyright (c) Microsoft Corporation.
17419
17471
  // Licensed under the MIT License.
@@ -18153,6 +18205,9 @@ const VideoTile = (props) => {
18153
18205
  const callingPalette = theme.callingPalette;
18154
18206
  const isVideoRendered = !!renderElement;
18155
18207
  const observer = React.useRef(new ResizeObserver((entries) => {
18208
+ if (!entries[0]) {
18209
+ return;
18210
+ }
18156
18211
  const { width, height } = entries[0].contentRect;
18157
18212
  const personaCalcSize = Math.min(width, height) / 3;
18158
18213
  // we only want to set the persona size if it has changed
@@ -18356,13 +18411,13 @@ const getOrganizedParticipants = (props) => {
18356
18411
  currentParticipants: previousGridParticipants,
18357
18412
  maxDominantSpeakers: maxGridParticipants
18358
18413
  }).slice(0, maxGridParticipants);
18359
- const dominantSpeakerToGrid = layout === 'speaker'
18360
- ? dominantSpeakers && dominantSpeakers[0]
18361
- ? newGridParticipants.filter((p) => p.userId === dominantSpeakers[0])
18362
- : [newGridParticipants[0]]
18363
- : [];
18364
- if (dominantSpeakerToGrid[0]) {
18365
- newGridParticipants = dominantSpeakerToGrid;
18414
+ if (layout === 'speaker') {
18415
+ if (dominantSpeakers === null || dominantSpeakers === void 0 ? void 0 : dominantSpeakers[0]) {
18416
+ newGridParticipants = newGridParticipants.filter((p) => p.userId === dominantSpeakers[0]);
18417
+ }
18418
+ else {
18419
+ newGridParticipants = newGridParticipants.slice(1);
18420
+ }
18366
18421
  }
18367
18422
  const gridParticipantSet = new Set(newGridParticipants.map((p) => p.userId));
18368
18423
  const newOverflowGalleryParticipants = smartDominantSpeakerParticipants({
@@ -18387,21 +18442,18 @@ const getOrganizedParticipants = (props) => {
18387
18442
  */
18388
18443
  const useOrganizedParticipants = (props) => {
18389
18444
  var _a, _b;
18390
- // map remote participants by userId
18391
- const remoteParticipantMap = props.remoteParticipants.reduce((map, remoteParticipant) => {
18392
- map[remoteParticipant.userId] = remoteParticipant;
18393
- return map;
18394
- }, {});
18395
18445
  const spotlightedParticipantUserIds = (_a = props.spotlightedParticipantUserIds) !== null && _a !== void 0 ? _a : [];
18396
18446
  const pinnedParticipantUserIds = (_b = props.pinnedParticipantUserIds) !== null && _b !== void 0 ? _b : [];
18397
- // declare set of focused participant user ids as spotlighted participants user ids followed by
18398
- // pinned participants user ids which is deduplicated while maintaining order
18399
- const focusedParticipantUserIdSet = new Set(spotlightedParticipantUserIds.concat(pinnedParticipantUserIds).filter((p) => remoteParticipantMap[p]));
18400
- // get focused participants from map of remote participants in the order of the user ids
18401
- const focusedParticipants = [...focusedParticipantUserIdSet].map((p) => remoteParticipantMap[p]);
18447
+ // Focussed participants are the participants that are either spotlighted or pinned. Ordered by spotlighted first and then pinned.
18448
+ // A set is used to dedupe participants.
18449
+ const focusedParticipantUserIdSet = new Set(spotlightedParticipantUserIds.concat(pinnedParticipantUserIds));
18450
+ const focusedParticipants = [...focusedParticipantUserIdSet]
18451
+ .map((userId) => props.remoteParticipants.find((p) => p.userId === userId))
18452
+ .filter((p) => p !== undefined);
18453
+ // Unfocused participants are the rest of the participants
18454
+ const unfocusedParticipants = props.remoteParticipants.filter((p) => !focusedParticipantUserIdSet.has(p.userId));
18402
18455
  const currentGridParticipants = React.useRef([]);
18403
18456
  const currentOverflowGalleryParticipants = React.useRef([]);
18404
- const unfocusedParticipants = props.remoteParticipants.filter((p) => !focusedParticipantUserIdSet.has(p.userId));
18405
18457
  const organizedParticipantsArgs = Object.assign(Object.assign({}, props), {
18406
18458
  // if there are focused participants then leave no room in the grid by setting maxGridParticipants to 0
18407
18459
  maxGridParticipants: focusedParticipants.length > 0 || props.isScreenShareActive ? 0 : props.maxGridParticipants, remoteParticipants: unfocusedParticipants, previousGridParticipants: currentGridParticipants.current, previousOverflowParticipants: currentOverflowGalleryParticipants.current });
@@ -18656,13 +18708,11 @@ function scaleStartPos(index) {
18656
18708
  * It is for the ease of testing and implementation.
18657
18709
  * @private
18658
18710
  */
18659
- const ReactionStyleBuckets = [
18660
- {
18661
- sizeScale: 0.9,
18662
- heightMaxScale: 0.7 * 0.95,
18663
- opacityMax: 0.9
18664
- }
18665
- ];
18711
+ const ReactionStyleBucket = {
18712
+ sizeScale: 0.9,
18713
+ heightMaxScale: 0.7 * 0.95,
18714
+ opacityMax: 0.9
18715
+ };
18666
18716
  /**
18667
18717
  * Return a style bucket based on the number of active sprites.
18668
18718
  * For example, the first three reactions should appear at maximum
@@ -18672,8 +18722,7 @@ const ReactionStyleBuckets = [
18672
18722
  function getReactionStyleBucket() {
18673
18723
  // Having dynamic emoji size on rendering animation impacts performance of the animation itself.
18674
18724
  // So we are choosing to use a fixed size for all cases.
18675
- const index = 0;
18676
- return ReactionStyleBuckets[index];
18725
+ return ReactionStyleBucket;
18677
18726
  }
18678
18727
  /**
18679
18728
  * @private
@@ -18793,13 +18842,13 @@ const RemoteContentShareReactionOverlay = React.memo((props) => {
18793
18842
  return visibleReactionPosition.current.findIndex((item) => item === false);
18794
18843
  };
18795
18844
  const updateVisibleReactions = React.useCallback((reaction, userId) => {
18796
- var _a;
18845
+ var _a, _b;
18797
18846
  const combinedKey = getCombinedKey(userId, reaction.reactionType, reaction.receivedOn);
18798
18847
  const alreadyHandled = ((_a = latestReceivedReaction.current[userId]) === null || _a === void 0 ? void 0 : _a.id) === combinedKey;
18799
18848
  if (alreadyHandled) {
18800
18849
  return;
18801
18850
  }
18802
- const activeCount = activeTypeCount.current[reaction.reactionType];
18851
+ const activeCount = (_b = activeTypeCount.current[reaction.reactionType]) !== null && _b !== void 0 ? _b : 0;
18803
18852
  if (activeCount >= MAX_NUMBER_OF_EMOJIS / NUMBER_OF_EMOJI_TYPES) {
18804
18853
  latestReceivedReaction.current[userId] = {
18805
18854
  id: combinedKey,
@@ -18830,8 +18879,9 @@ const RemoteContentShareReactionOverlay = React.memo((props) => {
18830
18879
  visibleReactionPosition.current[index] = false;
18831
18880
  activeTypeCount.current[reactionType] -= 1;
18832
18881
  Object.entries(latestReceivedReaction.current).forEach(([userId, reaction]) => {
18833
- if (reaction.id === id) {
18834
- latestReceivedReaction.current[userId].status = 'completedAnimating';
18882
+ const userLastReaction = latestReceivedReaction.current[userId];
18883
+ if (reaction.id === id && userLastReaction) {
18884
+ userLastReaction.status = 'completedAnimating';
18835
18885
  }
18836
18886
  });
18837
18887
  };
@@ -19249,6 +19299,9 @@ const LocalVideoCameraCycleButton = (props) => {
19249
19299
  if (cameras && cameras.length > 1 && selectedCamera !== undefined) {
19250
19300
  const index = cameras.findIndex((camera) => selectedCamera.id === camera.id);
19251
19301
  const newCamera = cameras[(index + 1) % cameras.length];
19302
+ if (!newCamera) {
19303
+ throw new Error('Camera not found');
19304
+ }
19252
19305
  onChangeCameraClick(newCamera);
19253
19306
  }
19254
19307
  } }));
@@ -19493,12 +19546,11 @@ const HorizontalGallery = (props) => {
19493
19546
  const firstIndexOfCurrentPage = page * childrenPerPage;
19494
19547
  const clippedPage = firstIndexOfCurrentPage < numberOfChildren - 1 ? page : lastPage;
19495
19548
  const childrenOnCurrentPage = React.useMemo(() => {
19496
- if (indexesArray && indexesArray[clippedPage] !== undefined) {
19497
- return indexesArray[clippedPage].map((index) => {
19498
- return React.Children.toArray(children)[index];
19499
- });
19549
+ const indexes = indexesArray === null || indexesArray === void 0 ? void 0 : indexesArray[clippedPage];
19550
+ if (!indexes) {
19551
+ return [];
19500
19552
  }
19501
- return [];
19553
+ return indexes.map((index) => React.Children.toArray(children)[index]);
19502
19554
  }, [indexesArray, clippedPage, children]);
19503
19555
  const showButtons = numberOfChildren > childrenPerPage;
19504
19556
  const disablePreviousButton = page === 0;
@@ -19975,8 +20027,9 @@ const VerticalGallery = (props) => {
19975
20027
  const firstIndexOfCurrentPage = (page - 1) * childrenPerPage;
19976
20028
  const clippedPage = firstIndexOfCurrentPage < numberOfChildren - 1 ? page : lastPage;
19977
20029
  const childrenOnCurrentPage = React.useMemo(() => {
20030
+ var _a;
19978
20031
  if (indexesArray[0] !== undefined) {
19979
- return indexesArray[clippedPage - 1].map((index) => {
20032
+ return (_a = indexesArray[clippedPage - 1]) === null || _a === void 0 ? void 0 : _a.map((index) => {
19980
20033
  return React.Children.toArray(children)[index];
19981
20034
  });
19982
20035
  }
@@ -20759,11 +20812,12 @@ class DraggableZone extends React__namespace.Component {
20759
20812
  * @param touchList The TouchList to look for the stored identifier from dragStart
20760
20813
  */
20761
20814
  _findTouchInTouchList(touchList) {
20815
+ var _a;
20762
20816
  if (this._touchId === undefined) {
20763
20817
  return;
20764
20818
  }
20765
20819
  for (let i = 0; i < touchList.length; i++) {
20766
- if (touchList[i].identifier === this._touchId) {
20820
+ if (((_a = touchList[i]) === null || _a === void 0 ? void 0 : _a.identifier) === this._touchId) {
20767
20821
  return touchList[i];
20768
20822
  }
20769
20823
  }
@@ -22851,41 +22905,34 @@ const ReactionButton = (props) => {
22851
22905
  ]);
22852
22906
  const calloutStyle = { root: { padding: 0 }, calloutMain: { padding: '0.5rem' } };
22853
22907
  const calloutProps = {
22854
- gapSpace: 4,
22855
22908
  styles: calloutStyle,
22856
22909
  backgroundColor: isDarkThemed(theme) ? theme.palette.neutralLighter : ''
22857
22910
  };
22858
- const classname = react.mergeStyles(reactionEmojiMenuStyles());
22859
- const renderEmoji = (item, dismissMenu) => (React.createElement("div", { "data-ui-id": "reaction-sub-menu", className: classname }, emojis.map((emoji, index) => {
22860
- const resourceUrl = emojiResource.get(emoji);
22861
- const frameCount = props.reactionResources !== undefined ? getEmojiFrameCount(emoji, props.reactionResources) : 0;
22862
- const classname = react.mergeStyles(emojiStyles(resourceUrl ? resourceUrl : '', frameCount));
22863
- return (React.createElement(react.TooltipHost, { key: index, "data-ui-id": index, hidden: props.disableTooltip, content: emojiButtonTooltip.get(emoji), styles: reactionToolTipHostStyle(), calloutProps: Object.assign({}, calloutProps) },
22864
- React.createElement("div", { role: "menuitem", key: index, onClick: () => {
22865
- props.onReactionClick(emoji);
22866
- dismissMenu();
22867
- }, className: classname, "aria-label": emojiButtonTooltip.get(emoji) })));
22868
- })));
22869
- const emojiList = [
22870
- { key: 'reactions', itemType: react.ContextualMenuItemType.Normal, onRender: renderEmoji }
22871
- ];
22872
- return (React.createElement(ControlBarButton, Object.assign({}, props, { className: react.mergeStyles(styles, props.styles), menuProps: {
22873
- shouldFocusOnMount: true,
22874
- items: emojiList,
22875
- calloutProps: { preventDismissOnEvent: _preventDismissOnEvent }
22876
- }, onRenderIcon: (_f = props.onRenderIcon) !== null && _f !== void 0 ? _f : onRenderIcon, strings: strings, labelKey: (_g = props.labelKey) !== null && _g !== void 0 ? _g : 'reactionButtonLabel', onRenderMenuIcon: () => React.createElement("div", null), disabled: props.disabled, ariaLabel: strings.ariaLabel })));
22911
+ const reactionButtonCalloutRef = React.useRef(null);
22912
+ const reactionButtonRef = React.useRef(null);
22913
+ const [calloutIsVisible, setCalloutIsVisible] = React.useState(false);
22914
+ return (React.createElement(react.Stack, null,
22915
+ calloutIsVisible && (React.createElement(react.Callout, { "data-ui-id": "reaction-sub-menu", isBeakVisible: false, styles: reactionButtonCalloutStyles, target: reactionButtonCalloutRef.current, onDismiss: () => {
22916
+ var _a;
22917
+ (_a = reactionButtonRef.current) === null || _a === void 0 ? void 0 : _a.focus();
22918
+ setCalloutIsVisible(false);
22919
+ } },
22920
+ React.createElement(react.FocusZone, { shouldFocusOnMount: true, style: { height: '100%' } },
22921
+ React.createElement(react.Stack, { horizontal: true, style: { height: 'inherit' } }, emojis.map((emoji, index) => {
22922
+ const resourceUrl = emojiResource.get(emoji);
22923
+ const frameCount = props.reactionResources !== undefined ? getEmojiFrameCount(emoji, props.reactionResources) : 0;
22924
+ const classname = react.mergeStyles(emojiStyles(resourceUrl ? resourceUrl : '', frameCount));
22925
+ return (React.createElement(react.TooltipHost, { key: index, "data-ui-id": index, hidden: props.disableTooltip, content: emojiButtonTooltip.get(emoji), styles: reactionToolTipHostStyle(), calloutProps: Object.assign({}, calloutProps) },
22926
+ React.createElement(react.DefaultButton, { role: "menuitem", key: index, onClick: () => {
22927
+ var _a;
22928
+ props.onReactionClick(emoji);
22929
+ (_a = reactionButtonRef.current) === null || _a === void 0 ? void 0 : _a.focus();
22930
+ setCalloutIsVisible(false);
22931
+ }, className: classname, styles: reactionItemButtonStyles, "aria-label": emojiButtonTooltip.get(emoji) })));
22932
+ }))))),
22933
+ React.createElement("div", { ref: reactionButtonCalloutRef },
22934
+ React.createElement(ControlBarButton, Object.assign({}, props, { componentRef: reactionButtonRef, className: react.mergeStyles(styles, props.styles), onClick: () => setCalloutIsVisible(!calloutIsVisible), onRenderIcon: (_f = props.onRenderIcon) !== null && _f !== void 0 ? _f : onRenderIcon, strings: strings, split: true, labelKey: (_g = props.labelKey) !== null && _g !== void 0 ? _g : 'reactionButtonLabel', onRenderMenuIcon: () => React.createElement("div", null), disabled: props.disabled, ariaLabel: strings.ariaLabel })))));
22877
22935
  };
22878
- const reactionButtonStyles = (theme) => ({
22879
- rootChecked: {
22880
- background: theme.palette.themePrimary,
22881
- color: react.DefaultPalette.white
22882
- },
22883
- rootCheckedHovered: {
22884
- background: theme.palette.themePrimary,
22885
- color: react.DefaultPalette.white
22886
- },
22887
- labelChecked: { color: react.DefaultPalette.white }
22888
- });
22889
22936
 
22890
22937
  // Copyright (c) Microsoft Corporation.
22891
22938
  // Licensed under the MIT License.
@@ -23308,8 +23355,9 @@ const DialpadContainer = (props) => {
23308
23355
  }, [textFieldValue]);
23309
23356
  const onClickDialpad = (input, index) => {
23310
23357
  setText(plainTextValue + input);
23311
- if (onSendDtmfTone) {
23312
- onSendDtmfTone(DtmfTones[index]);
23358
+ const tone = DtmfTones[index];
23359
+ if (onSendDtmfTone && tone) {
23360
+ onSendDtmfTone(tone);
23313
23361
  }
23314
23362
  if (onClickDialpadButton) {
23315
23363
  onClickDialpadButton(input, index);
@@ -23322,8 +23370,9 @@ const DialpadContainer = (props) => {
23322
23370
  else {
23323
23371
  setText(plainTextValue + input);
23324
23372
  }
23325
- if (onSendDtmfTone) {
23326
- onSendDtmfTone(DtmfTones[index]);
23373
+ const tone = DtmfTones[index];
23374
+ if (onSendDtmfTone && tone) {
23375
+ onSendDtmfTone(tone);
23327
23376
  }
23328
23377
  if (onClickDialpadButton) {
23329
23378
  onClickDialpadButton(input, index);
@@ -24043,7 +24092,7 @@ const _VideoEffectsItem = (props) => {
24043
24092
  * @internal
24044
24093
  */
24045
24094
  const _VideoBackgroundEffectsPicker = (props) => {
24046
- var _a, _b, _c;
24095
+ var _a, _b, _c, _d, _e;
24047
24096
  const [componentControlledSelectedEffectKey, setComponentControlledSelectedEffectKey] = React.useState(props.defaultSelectedEffectKey);
24048
24097
  // Warn the developer if they use the component in an incorrect controlled way.
24049
24098
  reactHooks.useWarnings({
@@ -24065,9 +24114,9 @@ const _VideoBackgroundEffectsPicker = (props) => {
24065
24114
  const itemsPerRow = (_b = props.itemsPerRow) !== null && _b !== void 0 ? _b : 3;
24066
24115
  const optionsByRow = itemsPerRow === 'wrap' ? [convertedOptions] : chunk(convertedOptions, itemsPerRow);
24067
24116
  // If the final row is not full, fill it with hidden items to ensure layout.
24068
- const fillCount = itemsPerRow === 'wrap' ? 0 : itemsPerRow - optionsByRow[optionsByRow.length - 1].length;
24117
+ const fillCount = itemsPerRow === 'wrap' ? 0 : itemsPerRow - ((_d = (_c = optionsByRow[optionsByRow.length - 1]) === null || _c === void 0 ? void 0 : _c.length) !== null && _d !== void 0 ? _d : 0);
24069
24118
  return (React.createElement(react.Stack, { tokens: { childrenGap: '0.5rem' } },
24070
- React.createElement(react.Label, { className: react.mergeStyles((_c = props.styles) === null || _c === void 0 ? void 0 : _c.label) }, props.label),
24119
+ React.createElement(react.Label, { className: react.mergeStyles((_e = props.styles) === null || _e === void 0 ? void 0 : _e.label) }, props.label),
24071
24120
  optionsByRow.map((options, rowIndex) => {
24072
24121
  var _a;
24073
24122
  return (React.createElement(react.Stack, { className: react.mergeStyles((_a = props.styles) === null || _a === void 0 ? void 0 : _a.rowRoot), wrap: props.itemsPerRow === 'wrap', horizontal: true, key: rowIndex, tokens: { childrenGap: '0.5rem' }, "data-ui-id": "video-effects-picker-row" },
@@ -24637,6 +24686,7 @@ const infoConnectionLinkStyle$1 = (theme) => {
24637
24686
  * a component for setting spoken languages
24638
24687
  */
24639
24688
  const MeetingConferencePhoneInfoModal = (props) => {
24689
+ var _a;
24640
24690
  const { conferencePhoneInfoList, showModal, onDismissMeetingPhoneInfoSettings } = props;
24641
24691
  const theme = react.useTheme();
24642
24692
  const strings = useLocale$1().strings.meetingConferencePhoneInfo;
@@ -24683,7 +24733,7 @@ const MeetingConferencePhoneInfoModal = (props) => {
24683
24733
  React.createElement(react.Icon, { iconName: "JoinByPhoneConferenceIdIcon", className: phoneInfoIconStyle$1(theme) }))),
24684
24734
  React.createElement(react.Stack.Item, null,
24685
24735
  React.createElement(react.Text, { className: stepTextStyle }, strings === null || strings === void 0 ? void 0 : strings.meetingConferencePhoneInfoModalMeetingId)))),
24686
- React.createElement(react.Text, { className: phoneInfoTextStyle$1 }, formatMeetingId(conferencePhoneInfoList[0].conferenceId))),
24736
+ React.createElement(react.Text, { className: phoneInfoTextStyle$1 }, formatMeetingId((_a = conferencePhoneInfoList[0]) === null || _a === void 0 ? void 0 : _a.conferenceId))),
24687
24737
  React.createElement(react.Stack, { horizontal: true, horizontalAlign: "space-between", verticalAlign: "center" },
24688
24738
  React.createElement(react.Stack, { horizontal: true },
24689
24739
  React.createElement(react.Stack.Item, { className: phoneInfoIcon$1(theme), style: { marginLeft: _pxToRem(2) } },
@@ -29795,7 +29845,7 @@ const AttachmentDownloadErrorBar = (props) => {
29795
29845
  /**
29796
29846
  * Wrapper for RichTextSendBox component to allow us to use usePropsFor with richTextSendBox with lazy loading
29797
29847
  */
29798
- const RichTextSendBoxWrapper = React.lazy(() => Promise.resolve().then(function () { return require('./RichTextSendBoxWrapper-DopZRsd3.js'); }).then((module) => ({ default: module.RichTextSendBoxWrapper })));
29848
+ const RichTextSendBoxWrapper = React.lazy(() => Promise.resolve().then(function () { return require('./RichTextSendBoxWrapper-C36s6eLH.js'); }).then((module) => ({ default: module.RichTextSendBoxWrapper })));
29799
29849
  /**
29800
29850
  * @private
29801
29851
  * Use this function to load RoosterJS dependencies early in the lifecycle.
@@ -29803,7 +29853,7 @@ const RichTextSendBoxWrapper = React.lazy(() => Promise.resolve().then(function
29803
29853
  *
29804
29854
  /* @conditional-compile-remove(rich-text-editor-composite-support)
29805
29855
  */
29806
- const loadRichTextSendBox = () => Promise.resolve().then(function () { return require('./RichTextSendBoxWrapper-DopZRsd3.js'); }).then((module) => ({ default: module.RichTextSendBoxWrapper }));
29856
+ const loadRichTextSendBox = () => Promise.resolve().then(function () { return require('./RichTextSendBoxWrapper-C36s6eLH.js'); }).then((module) => ({ default: module.RichTextSendBoxWrapper }));
29807
29857
  /**
29808
29858
  * @private
29809
29859
  */
@@ -44358,4 +44408,4 @@ exports.useTeamsCall = useTeamsCall;
44358
44408
  exports.useTeamsCallAdapter = useTeamsCallAdapter;
44359
44409
  exports.useTeamsCallAgent = useTeamsCallAgent;
44360
44410
  exports.useTheme = useTheme;
44361
- //# sourceMappingURL=index-X1fv8B3Q.js.map
44411
+ //# sourceMappingURL=index-C548hWR1.js.map