@azure/communication-react 1.5.1-alpha-202305260013 → 1.5.1-alpha-202305300013

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 (44) hide show
  1. package/README.md +1 -1
  2. package/dist/communication-react.d.ts +2 -2
  3. package/dist/dist-cjs/communication-react/index.js +187 -45
  4. package/dist/dist-cjs/communication-react/index.js.map +1 -1
  5. package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js +1 -1
  6. package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js.map +1 -1
  7. package/dist/dist-esm/chat-component-bindings/src/messageThreadSelector.js +11 -1
  8. package/dist/dist-esm/chat-component-bindings/src/messageThreadSelector.js.map +1 -1
  9. package/dist/dist-esm/react-components/src/components/DevicesButton.js +9 -0
  10. package/dist/dist-esm/react-components/src/components/DevicesButton.js.map +1 -1
  11. package/dist/dist-esm/react-components/src/components/Drawer/DrawerMenu.d.ts +5 -0
  12. package/dist/dist-esm/react-components/src/components/Drawer/DrawerMenu.js +1 -1
  13. package/dist/dist-esm/react-components/src/components/Drawer/DrawerMenu.js.map +1 -1
  14. package/dist/dist-esm/react-components/src/components/Drawer/DrawerSurface.d.ts +5 -0
  15. package/dist/dist-esm/react-components/src/components/Drawer/DrawerSurface.js +23 -5
  16. package/dist/dist-esm/react-components/src/components/Drawer/DrawerSurface.js.map +1 -1
  17. package/dist/dist-esm/react-components/src/components/InputBoxComponent.js +127 -28
  18. package/dist/dist-esm/react-components/src/components/InputBoxComponent.js.map +1 -1
  19. package/dist/dist-esm/react-components/src/components/styles/VideoTile.styles.js +2 -1
  20. package/dist/dist-esm/react-components/src/components/styles/VideoTile.styles.js.map +1 -1
  21. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/CallAdapter.d.ts +2 -2
  22. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/CallAdapter.js.map +1 -1
  23. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallReadinessModal.js +3 -3
  24. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallReadinessModal.js.map +1 -1
  25. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/SidePane/SidePane.js +5 -3
  26. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/SidePane/SidePane.js.map +1 -1
  27. package/dist/dist-esm/react-composites/src/composites/CallComposite/index.d.ts +1 -1
  28. package/dist/dist-esm/react-composites/src/composites/CallComposite/index.js.map +1 -1
  29. package/dist/dist-esm/react-composites/src/composites/common/AddPeopleDropdown.js +1 -1
  30. package/dist/dist-esm/react-composites/src/composites/common/AddPeopleDropdown.js.map +1 -1
  31. package/dist/dist-esm/react-composites/src/composites/common/CallingDialpad.js +1 -1
  32. package/dist/dist-esm/react-composites/src/composites/common/CallingDialpad.js.map +1 -1
  33. package/dist/dist-esm/react-composites/src/composites/common/Drawer/SpokenLanguageDrawer.styles.js +0 -1
  34. package/dist/dist-esm/react-composites/src/composites/common/Drawer/SpokenLanguageDrawer.styles.js.map +1 -1
  35. package/dist/dist-esm/react-composites/src/composites/common/SendDtmfDialpad.js +1 -1
  36. package/dist/dist-esm/react-composites/src/composites/common/SendDtmfDialpad.js.map +1 -1
  37. package/dist/dist-esm/react-composites/src/composites/common/VideoEffectsPane.js.map +1 -1
  38. package/dist/dist-esm/react-composites/src/composites/common/styles/ParticipantContainer.styles.d.ts +4 -0
  39. package/dist/dist-esm/react-composites/src/composites/common/styles/ParticipantContainer.styles.js +4 -0
  40. package/dist/dist-esm/react-composites/src/composites/common/styles/ParticipantContainer.styles.js.map +1 -1
  41. package/package.json +11 -11
  42. package/CHANGELOG.beta.md +0 -883
  43. package/CHANGELOG.json +0 -11992
  44. package/CHANGELOG.stable.md +0 -373
package/README.md CHANGED
@@ -8,7 +8,7 @@ Read more about Azure Communication Services - UI Library [here](https://azure.g
8
8
 
9
9
  - An Azure account with an active subscription. [Create an account for free](https://azure.microsoft.com/free/?WT.mc_id=A261C142F).
10
10
  - An active Communication Services resource. [Create a Communication Services resource](https://docs.microsoft.com/azure/communication-services/quickstarts/create-communication-resource?tabs=windows&pivots=platform-azp).
11
- - [Node.js (14.19.0 and above)](https://nodejs.org/)
11
+ - [Node.js (16.19.0 and above)](https://nodejs.org/)
12
12
 
13
13
  ## Installing
14
14
 
@@ -7831,7 +7831,7 @@ export declare interface ScreenShareButtonStrings {
7831
7831
  *
7832
7832
  * @beta
7833
7833
  */
7834
- export declare type SelectedVideoBackgroundEffect = VideoBackgroundNoneEffect | VideoBackgroundBlurEffect | VideoBackgroundReplacementEffect;
7834
+ export declare type SelectedVideoBackgroundEffect = VideoBackgroundNoEffect | VideoBackgroundBlurEffect | VideoBackgroundReplacementEffect;
7835
7835
 
7836
7836
  /**
7837
7837
  * An optimized selector that refines {@link ClientState} updates into props for React Components in this library.
@@ -8969,7 +8969,7 @@ export declare interface VideoBackgroundImage {
8969
8969
  *
8970
8970
  * @beta
8971
8971
  */
8972
- export declare interface VideoBackgroundNoneEffect {
8972
+ export declare interface VideoBackgroundNoEffect {
8973
8973
  /**
8974
8974
  * Name of effect to remove video background effect
8975
8975
  */
@@ -165,7 +165,7 @@ const _toCommunicationIdentifier = (id) => {
165
165
  // Copyright (c) Microsoft Corporation.
166
166
  // Licensed under the MIT license.
167
167
  // GENERATED FILE. DO NOT EDIT MANUALLY.
168
- var telemetryVersion = '1.5.1-alpha-202305260013';
168
+ var telemetryVersion = '1.5.1-alpha-202305300013';
169
169
 
170
170
  // Copyright (c) Microsoft Corporation.
171
171
  /**
@@ -6086,9 +6086,17 @@ const InputBoxComponent = (props) => {
6086
6086
  // Index of the previous selection end in the text field
6087
6087
  const [selectionEndValue, setSelectionEndValue] = React.useState(null);
6088
6088
  /* @conditional-compile-remove(mention) */
6089
- // Boolean value to check if onMouseDown event should be handled during select as selection range for onMouseDown event is not updated yet and the selection range for mouse click/taps will be updated in onSelect event if needed.
6089
+ // Boolean value to check if onMouseDown event should be handled during select as selection range
6090
+ // for onMouseDown event is not updated yet and the selection range for mouse click/taps will be
6091
+ // updated in onSelect event if needed.
6090
6092
  const [shouldHandleOnMouseDownDuringSelect, setShouldHandleOnMouseDownDuringSelect] = React.useState(true);
6091
6093
  /* @conditional-compile-remove(mention) */
6094
+ // Point of start of touch/mouse selection
6095
+ const [interactionStartPoint, setInteractionStartPoint] = React.useState();
6096
+ /* @conditional-compile-remove(mention) */
6097
+ // Target selection from mouse movement
6098
+ const [targetSelection, setTargetSelection] = React.useState();
6099
+ /* @conditional-compile-remove(mention) */
6092
6100
  // Caret position in the text field
6093
6101
  const [caretPosition, setCaretPosition] = React.useState(undefined);
6094
6102
  /* @conditional-compile-remove(mention) */
@@ -6257,10 +6265,6 @@ const InputBoxComponent = (props) => {
6257
6265
  /* @conditional-compile-remove(mention) */
6258
6266
  const debouncedQueryUpdate = useDebounce.useDebouncedCallback((query) => __awaiter$w(void 0, void 0, void 0, function* () {
6259
6267
  var _a;
6260
- if (query === undefined) {
6261
- updateMentionSuggestions([]);
6262
- return;
6263
- }
6264
6268
  const suggestions = (_a = (yield (mentionLookupOptions === null || mentionLookupOptions === void 0 ? void 0 : mentionLookupOptions.onQueryUpdated(query)))) !== null && _a !== void 0 ? _a : [];
6265
6269
  if (suggestions.length === 0) {
6266
6270
  setActiveSuggestionIndex(undefined);
@@ -6350,33 +6354,54 @@ const InputBoxComponent = (props) => {
6350
6354
  }, [setSelectionStartValue, setSelectionEndValue]);
6351
6355
  /* @conditional-compile-remove(mention) */
6352
6356
  const handleOnSelect = React.useCallback((event, inputTextValue, tags, shouldHandleOnMouseDownDuringSelect, selectionStartValue, selectionEndValue) => {
6353
- var _a, _b, _c;
6354
- /* @conditional-compile-remove(mention) */
6355
- if (shouldHandleOnMouseDownDuringSelect && event.currentTarget.selectionStart !== null) {
6356
- // on select was triggered by mouse down
6357
- const mentionTag = findMentionTagForSelection(tags, event.currentTarget.selectionStart);
6358
- if (mentionTag !== undefined && mentionTag.plainTextBeginIndex !== undefined) {
6359
- // handle mention click
6360
- if (event.currentTarget.selectionDirection === null) {
6361
- event.currentTarget.setSelectionRange(mentionTag.plainTextBeginIndex, (_a = mentionTag.plainTextEndIndex) !== null && _a !== void 0 ? _a : mentionTag.plainTextBeginIndex);
6357
+ if (shouldHandleOnMouseDownDuringSelect) {
6358
+ if (targetSelection !== undefined) {
6359
+ setSelectionStartValue(targetSelection.start);
6360
+ setSelectionEndValue(targetSelection.end);
6361
+ event.currentTarget.setSelectionRange(targetSelection.start, targetSelection.end);
6362
+ setTargetSelection(undefined);
6363
+ }
6364
+ else if (event.currentTarget.selectionStart !== null) {
6365
+ // on select was triggered by mouse down/up with no movement
6366
+ const mentionTag = findMentionTagForSelection(tags, event.currentTarget.selectionStart);
6367
+ if (mentionTag !== undefined && mentionTag.plainTextBeginIndex !== undefined) {
6368
+ // handle mention click
6369
+ // Get range of word that was clicked on
6370
+ const selectionRange = rangeOfWordInSelection({
6371
+ textInput: inputTextValue,
6372
+ selectionStart: event.currentTarget.selectionStart,
6373
+ selectionEnd: event.currentTarget.selectionEnd,
6374
+ tag: mentionTag
6375
+ });
6376
+ if (event.currentTarget.selectionDirection === null) {
6377
+ event.currentTarget.setSelectionRange(selectionRange.start, selectionRange.end);
6378
+ }
6379
+ else {
6380
+ event.currentTarget.setSelectionRange(selectionRange.start, selectionRange.end, event.currentTarget.selectionDirection);
6381
+ }
6382
+ setSelectionStartValue(selectionRange.start);
6383
+ setSelectionEndValue(selectionRange.end);
6362
6384
  }
6363
6385
  else {
6364
- event.currentTarget.setSelectionRange(mentionTag.plainTextBeginIndex, (_b = mentionTag.plainTextEndIndex) !== null && _b !== void 0 ? _b : mentionTag.plainTextBeginIndex, event.currentTarget.selectionDirection);
6386
+ setSelectionStartValue(event.currentTarget.selectionStart);
6387
+ setSelectionEndValue(event.currentTarget.selectionEnd);
6365
6388
  }
6366
- setSelectionStartValue(mentionTag.plainTextBeginIndex);
6367
- setSelectionEndValue((_c = mentionTag.plainTextEndIndex) !== null && _c !== void 0 ? _c : mentionTag.plainTextBeginIndex);
6368
- }
6369
- else {
6370
- setSelectionStartValue(event.currentTarget.selectionStart);
6371
- setSelectionEndValue(event.currentTarget.selectionEnd);
6372
6389
  }
6373
6390
  }
6374
6391
  else {
6375
6392
  // selection was changed by keyboard
6376
6393
  updateSelectionIndexesWithMentionIfNeeded(event, inputTextValue, selectionStartValue, selectionEndValue, tags);
6377
6394
  }
6378
- // don't set setShouldHandleOnMouseDownDuringSelect(false) here as setSelectionRange could trigger additional calls of onSelect event and they may not be handled correctly (because of setSelectionRange calls or rerender)
6379
- }, [updateSelectionIndexesWithMentionIfNeeded]);
6395
+ // don't set setShouldHandleOnMouseDownDuringSelect(false) here as setSelectionRange
6396
+ // could trigger additional calls of onSelect event and they may not be handled correctly
6397
+ // (because of setSelectionRange calls or rerender)
6398
+ }, [
6399
+ updateSelectionIndexesWithMentionIfNeeded,
6400
+ targetSelection,
6401
+ setTargetSelection,
6402
+ setSelectionStartValue,
6403
+ setSelectionEndValue
6404
+ ]);
6380
6405
  /* @conditional-compile-remove(mention) */
6381
6406
  const handleOnChange = React.useCallback((event, tagsValue, htmlTextValue, inputTextValue, currentTriggerStartIndex, previousSelectionStart, previousSelectionEnd, currentSelectionStart, currentSelectionEnd, updatedValue) => __awaiter$w(void 0, void 0, void 0, function* () {
6382
6407
  var _b;
@@ -6435,7 +6460,7 @@ const InputBoxComponent = (props) => {
6435
6460
  setCurrentTriggerStartIndex(tagIndex);
6436
6461
  }
6437
6462
  if (tagIndex === -1) {
6438
- yield debouncedQueryUpdate(undefined);
6463
+ updateMentionSuggestions([]);
6439
6464
  }
6440
6465
  else {
6441
6466
  // In the middle of a @mention lookup
@@ -6485,11 +6510,43 @@ const InputBoxComponent = (props) => {
6485
6510
  }
6486
6511
  }
6487
6512
  onChange && onChange(event, result);
6488
- }), [onChange, mentionLookupOptions, setCaretIndex, setCaretPosition, debouncedQueryUpdate]);
6513
+ }), [onChange, mentionLookupOptions, setCaretIndex, setCaretPosition, updateMentionSuggestions, debouncedQueryUpdate]);
6489
6514
  const getInputFieldTextValue = () => {
6490
6515
  /* @conditional-compile-remove(mention) */
6491
6516
  return inputTextValue;
6492
6517
  };
6518
+ /* @conditional-compile-remove(mention) */
6519
+ // Adjust the selection range based on a mouse / touch interaction
6520
+ const handleOnMove = React.useCallback((event) => {
6521
+ var _a;
6522
+ let targetStart = event.currentTarget.selectionStart;
6523
+ let targetEnd = event.currentTarget.selectionEnd;
6524
+ // Should we do anything?
6525
+ if (interactionStartPoint !== undefined &&
6526
+ // And did selection change?
6527
+ targetStart !== null &&
6528
+ (targetStart !== (targetSelection === null || targetSelection === void 0 ? void 0 : targetSelection.start) || targetEnd !== (targetSelection === null || targetSelection === void 0 ? void 0 : targetSelection.end))) {
6529
+ const direction = event.clientX > interactionStartPoint.x ? 'forward' : 'backward';
6530
+ const mentionTag = findMentionTagForSelection(tagsValue, direction === 'backward'
6531
+ ? event.currentTarget.selectionStart
6532
+ : (_a = event.currentTarget.selectionEnd) !== null && _a !== void 0 ? _a : event.currentTarget.selectionStart);
6533
+ let updateCurrentTarget = false;
6534
+ if (mentionTag !== undefined && mentionTag.plainTextBeginIndex !== undefined) {
6535
+ targetStart = Math.min(mentionTag.plainTextBeginIndex, targetStart);
6536
+ if (mentionTag.plainTextEndIndex !== undefined && targetEnd !== null) {
6537
+ targetEnd = Math.max(mentionTag.plainTextEndIndex, targetEnd);
6538
+ }
6539
+ updateCurrentTarget = true;
6540
+ setShouldHandleOnMouseDownDuringSelect(false);
6541
+ }
6542
+ // Update selection range
6543
+ setTargetSelection({ start: targetStart, end: targetEnd });
6544
+ if (updateCurrentTarget) {
6545
+ // Only set the control, if the values are updated
6546
+ event.currentTarget.setSelectionRange(targetStart, targetEnd, direction);
6547
+ }
6548
+ }
6549
+ }, [setTargetSelection, targetSelection, setShouldHandleOnMouseDownDuringSelect, interactionStartPoint, tagsValue]);
6493
6550
  return (React__default['default'].createElement(react.Stack, { className: mergedRootStyle },
6494
6551
  React__default['default'].createElement("div", { className: mergedTextContainerStyle },
6495
6552
  /* @conditional-compile-remove(mention) */ mentionSuggestions.length > 0 && (React__default['default'].createElement(_MentionPopover, { suggestions: mentionSuggestions, activeSuggestionIndex: activeSuggestionIndex, target: inputBoxRef, targetPositionOffset: caretPosition, onRenderSuggestionItem: mentionLookupOptions === null || mentionLookupOptions === void 0 ? void 0 : mentionLookupOptions.onRenderSuggestionItem, onSuggestionSelected: onSuggestionSelected, onDismiss: () => {
@@ -6521,8 +6578,9 @@ const InputBoxComponent = (props) => {
6521
6578
  handleOnSelect(e, inputTextValue, tagsValue, shouldHandleOnMouseDownDuringSelect, selectionStartValue, selectionEndValue);
6522
6579
  },
6523
6580
  /* @conditional-compile-remove(mention) */
6524
- onMouseDown: () => {
6525
- // as events order is onMouseDown -> onSelect -> onClick
6581
+ onMouseDown: (e) => {
6582
+ setInteractionStartPoint({ x: e.clientX, y: e.clientY });
6583
+ // as events order is onMouseDown -> onMouseMove -> onMouseUp -> onSelect -> onClick
6526
6584
  // onClick and onMouseDown can't handle clicking on mention event because
6527
6585
  // onMouseDown doesn't have correct selectionRange yet and
6528
6586
  // onClick already has wrong range as it's called after onSelect that updates the selection range
@@ -6530,11 +6588,27 @@ const InputBoxComponent = (props) => {
6530
6588
  setShouldHandleOnMouseDownDuringSelect(true);
6531
6589
  },
6532
6590
  /* @conditional-compile-remove(mention) */
6533
- onTouchStart: () => {
6591
+ onMouseMove: handleOnMove,
6592
+ /* @conditional-compile-remove(mention) */
6593
+ onMouseUp: () => {
6594
+ setInteractionStartPoint(undefined);
6595
+ },
6596
+ /* @conditional-compile-remove(mention) */
6597
+ onTouchStart: (e) => {
6598
+ setInteractionStartPoint({
6599
+ x: e.targetTouches.item(0).clientX,
6600
+ y: e.targetTouches.item(0).clientY
6601
+ });
6534
6602
  // see onMouseDown for more details
6535
6603
  setShouldHandleOnMouseDownDuringSelect(true);
6536
6604
  },
6537
6605
  /* @conditional-compile-remove(mention) */
6606
+ onTouchMove: handleOnMove,
6607
+ /* @conditional-compile-remove(mention) */
6608
+ onTouchEnd: () => {
6609
+ setInteractionStartPoint(undefined);
6610
+ },
6611
+ /* @conditional-compile-remove(mention) */
6538
6612
  onBlur: () => {
6539
6613
  // setup all flags to default values when text field loses focus
6540
6614
  setShouldHandleOnMouseDownDuringSelect(false);
@@ -6620,6 +6694,31 @@ const findMentionTagForSelection = (tags, selection) => {
6620
6694
  return mentionTag;
6621
6695
  };
6622
6696
  /* @conditional-compile-remove(mention) */
6697
+ const rangeOfWordInSelection = ({ textInput, selectionStart, selectionEnd, tag }) => {
6698
+ var _a;
6699
+ if (tag.plainTextBeginIndex === undefined) {
6700
+ return { start: selectionStart, end: selectionEnd === null ? selectionStart : selectionEnd };
6701
+ }
6702
+ // Look at start word index and optionally end word index.
6703
+ // Select combination of the two and return the range.
6704
+ let start = selectionStart;
6705
+ let end = selectionEnd === null ? selectionStart : selectionEnd;
6706
+ const firstWordStartIndex = textInput.lastIndexOf(' ', selectionStart);
6707
+ if (firstWordStartIndex === tag.plainTextBeginIndex) {
6708
+ start = firstWordStartIndex;
6709
+ }
6710
+ else {
6711
+ start = Math.max(firstWordStartIndex + 1, tag.plainTextBeginIndex);
6712
+ }
6713
+ const firstWordEndIndex = textInput.indexOf(' ', selectionStart);
6714
+ end = Math.max(firstWordEndIndex + 1, (_a = tag.plainTextEndIndex) !== null && _a !== void 0 ? _a : firstWordEndIndex + 1);
6715
+ if (selectionEnd !== null && tag.plainTextEndIndex !== undefined) {
6716
+ const lastWordEndIndex = textInput.indexOf(' ', selectionEnd);
6717
+ end = Math.max(lastWordEndIndex > -1 ? lastWordEndIndex : tag.plainTextEndIndex, selectionEnd);
6718
+ }
6719
+ return { start, end };
6720
+ };
6721
+ /* @conditional-compile-remove(mention) */
6623
6722
  /**
6624
6723
  * Find a new the selection index.
6625
6724
  *
@@ -10316,10 +10415,13 @@ const lightDismissContainerStyles = { root: { height: '100%' } };
10316
10415
  * @internal
10317
10416
  */
10318
10417
  const _DrawerSurface = (props) => {
10319
- var _a, _b, _c;
10320
- const rootStyles = react.mergeStyles(drawerSurfaceStyles, (_a = props.styles) === null || _a === void 0 ? void 0 : _a.root);
10418
+ var _a, _b, _c, _d;
10419
+ const rootStyles = props.disableMaxHeight
10420
+ ? react.mergeStyles(drawerSurfaceStyles, (_a = props.styles) === null || _a === void 0 ? void 0 : _a.root)
10421
+ : react.mergeStyles(drawerSurfaceStyles, focusTrapZoneStyles, (_b = props.styles) === null || _b === void 0 ? void 0 : _b.root);
10422
+ const containerStyles = react.mergeStyleSets(drawerContentContainerStyles, (_c = props.styles) === null || _c === void 0 ? void 0 : _c.drawerContentContainer);
10321
10423
  return (React__default['default'].createElement(react.Stack, { className: rootStyles },
10322
- React__default['default'].createElement(DrawerLightDismiss, { styles: (_b = props.styles) === null || _b === void 0 ? void 0 : _b.lightDismissRoot, onDismiss: props.onLightDismiss }),
10424
+ React__default['default'].createElement(DrawerLightDismiss, { styles: (_d = props.styles) === null || _d === void 0 ? void 0 : _d.lightDismissRoot, onDismiss: props.onLightDismiss }),
10323
10425
  React__default['default'].createElement(react.FocusTrapZone, { onKeyDown: (e) => {
10324
10426
  if (e.key === 'Escape' || e.key === 'Esc') {
10325
10427
  props.onLightDismiss && props.onLightDismiss();
@@ -10328,13 +10430,28 @@ const _DrawerSurface = (props) => {
10328
10430
  // Ensure when the focus trap has focus, the light dismiss area can still be clicked with mouse to dismiss.
10329
10431
  // Note: this still correctly captures keyboard focus, this just allows mouse click outside of the focus trap.
10330
10432
  isClickableOutsideFocusTrap: true },
10331
- React__default['default'].createElement(DrawerContentContainer, { styles: (_c = props.styles) === null || _c === void 0 ? void 0 : _c.drawerContentContainer, heading: props.heading }, props.children))));
10433
+ React__default['default'].createElement(DrawerContentContainer, { styles: containerStyles, heading: props.heading }, props.children))));
10332
10434
  };
10333
10435
  const drawerSurfaceStyles = {
10334
10436
  width: '100%',
10335
10437
  height: '100%',
10336
10438
  background: 'rgba(0,0,0,0.4)'
10337
10439
  };
10440
+ const focusTrapZoneStyles = {
10441
+ // Targets FocusTrapZone in drawer.
10442
+ // Setting percentage to Height to transform a container does not work unless the
10443
+ // direct parent container also has a Height set other than 'auto'.
10444
+ '> div:nth-child(2)': {
10445
+ maxHeight: '75%',
10446
+ overflow: 'auto'
10447
+ }
10448
+ };
10449
+ const drawerContentContainerStyles = {
10450
+ root: {
10451
+ // Needed to fill max height from parent, drawerSurfaceStyles
10452
+ height: '100%'
10453
+ }
10454
+ };
10338
10455
 
10339
10456
  // Copyright (c) Microsoft Corporation.
10340
10457
  /**
@@ -10375,7 +10492,7 @@ const _DrawerMenu = (props) => {
10375
10492
  borderTopLeftRadius: borderRadius
10376
10493
  }
10377
10494
  }), [firstItemStyle, borderRadius]);
10378
- return (React__default['default'].createElement(_DrawerSurface, { styles: (_b = props.styles) === null || _b === void 0 ? void 0 : _b.drawerSurfaceStyles, onLightDismiss: props.onLightDismiss, heading: props.heading },
10495
+ return (React__default['default'].createElement(_DrawerSurface, { disableMaxHeight: props.disableMaxHeight, styles: (_b = props.styles) === null || _b === void 0 ? void 0 : _b.drawerSurfaceStyles, onLightDismiss: props.onLightDismiss, heading: props.heading },
10379
10496
  React__default['default'].createElement(react.Stack, { styles: props.styles, role: "menu", "data-ui-id": "drawer-menu" }, menuItemsToRender === null || menuItemsToRender === void 0 ? void 0 :
10380
10497
  menuItemsToRender.slice(0, 1).map((item) => (React__default['default'].createElement(DrawerMenuItem, Object.assign({}, item, { key: '0', styles: modifiedFirstItemStyle, onItemClick: (ev, itemKey) => {
10381
10498
  onItemClick(item, ev, itemKey);
@@ -10734,7 +10851,8 @@ const moreButtonStyles = {
10734
10851
  zIndex: 1,
10735
10852
  color: 'inherit',
10736
10853
  top: '-0.125rem',
10737
- height: '100%'
10854
+ height: '100%',
10855
+ padding: '0rem'
10738
10856
  },
10739
10857
  rootHovered: {
10740
10858
  background: 'none'
@@ -13720,6 +13838,9 @@ const generateDefaultDeviceMenuProps = (props, strings, primaryActionItem, isSel
13720
13838
  key: 'sectionCamera',
13721
13839
  title: strings.cameraMenuTooltip,
13722
13840
  subMenuProps: {
13841
+ calloutProps: {
13842
+ preventDismissOnEvent: _preventDismissOnEvent
13843
+ },
13723
13844
  items: cameras.map((camera) => ({
13724
13845
  key: camera.id,
13725
13846
  text: camera.name,
@@ -13760,6 +13881,9 @@ const generateDefaultDeviceMenuProps = (props, strings, primaryActionItem, isSel
13760
13881
  key: key,
13761
13882
  title: title,
13762
13883
  subMenuProps: {
13884
+ calloutProps: {
13885
+ preventDismissOnEvent: _preventDismissOnEvent
13886
+ },
13763
13887
  items: microphones.map((microphone) => ({
13764
13888
  key: microphone.id,
13765
13889
  text: microphone.name,
@@ -13792,6 +13916,9 @@ const generateDefaultDeviceMenuProps = (props, strings, primaryActionItem, isSel
13792
13916
  {
13793
13917
  key: 'sectionSpeaker',
13794
13918
  subMenuProps: {
13919
+ calloutProps: {
13920
+ preventDismissOnEvent: _preventDismissOnEvent
13921
+ },
13795
13922
  items: speakers.map((speaker) => ({
13796
13923
  key: speaker.id,
13797
13924
  text: speaker.name,
@@ -16847,7 +16974,7 @@ const extractInlineImageFilesMetadata = (attachments) => {
16847
16974
  return attachments.map((attachment) => {
16848
16975
  var _a, _b;
16849
16976
  return ({
16850
- attachmentType: attachment.attachmentType,
16977
+ attachmentType: mapAttachmentType(attachment.attachmentType),
16851
16978
  id: attachment.id,
16852
16979
  name: (_a = attachment.name) !== null && _a !== void 0 ? _a : '',
16853
16980
  extension: (_b = attachment.contentType) !== null && _b !== void 0 ? _b : '',
@@ -16856,6 +16983,16 @@ const extractInlineImageFilesMetadata = (attachments) => {
16856
16983
  });
16857
16984
  });
16858
16985
  };
16986
+ /* @conditional-compile-remove(teams-inline-images) */
16987
+ const mapAttachmentType = (attachmentType) => {
16988
+ if (attachmentType === 'teamsImage' || attachmentType === 'teamsInlineImage') {
16989
+ return 'teamsInlineImage';
16990
+ }
16991
+ else if (attachmentType === 'file') {
16992
+ return 'fileSharing';
16993
+ }
16994
+ return 'unknown';
16995
+ };
16859
16996
  /* @conditional-compile-remove(file-sharing) @conditional-compile-remove(teams-inline-images) */
16860
16997
  const extractFilesMetadata = (message) => {
16861
16998
  var _a, _b;
@@ -20114,6 +20251,10 @@ const scrollableContainerContents = {
20114
20251
  position: 'relative'
20115
20252
  }
20116
20253
  };
20254
+ /**
20255
+ * @private
20256
+ */
20257
+ const containerContextStyles = { root: { position: 'absolute', height: '100%', width: '100%' } };
20117
20258
  /**
20118
20259
  * @private
20119
20260
  */
@@ -21275,7 +21416,7 @@ const SendDtmfDialpad = (props) => {
21275
21416
  const dialpadStyle = React.useMemo(() => themedDialpadStyle$1(isMobile, theme), [theme, isMobile]);
21276
21417
  if (isMobile) {
21277
21418
  return (React__default['default'].createElement(react.Stack, null, showDialpad && (React__default['default'].createElement(react.Stack, { styles: drawerContainerStyles() },
21278
- React__default['default'].createElement(_DrawerSurface, { onLightDismiss: onDismissTriggered },
21419
+ React__default['default'].createElement(_DrawerSurface, { disableMaxHeight: true, onLightDismiss: onDismissTriggered },
21279
21420
  React__default['default'].createElement(react.Stack, { style: { padding: '1rem' } },
21280
21421
  React__default['default'].createElement(Dialpad, Object.assign({ styles: dialpadStyle }, dialpadProps, { showDeleteButton: false, textFieldValue: textFieldValue, onChange: onChange, strings: strings, isMobile: isMobile }))))))));
21281
21422
  }
@@ -22143,7 +22284,6 @@ const callStatusSelector = reselect.createSelector([getCallStatus, getIsScreenSh
22143
22284
  */
22144
22285
  const spokenLanguageDrawerStyles = (theme) => ({
22145
22286
  root: {
22146
- height: _pxToRem(300),
22147
22287
  overflow: 'auto'
22148
22288
  },
22149
22289
  drawerSurfaceStyles: {
@@ -22664,11 +22804,13 @@ const SidePane = (props) => {
22664
22804
  React__default['default'].createElement(react.Stack.Item, { verticalFill: true, grow: true, styles: paneBodyContainer },
22665
22805
  React__default['default'].createElement(react.Stack, { verticalFill: true, styles: scrollableContainer },
22666
22806
  ContentRender && (React__default['default'].createElement(react.Stack.Item, { verticalFill: true, styles: scrollableContainerContents },
22667
- React__default['default'].createElement(ContentRender, null))),
22807
+ React__default['default'].createElement(react.Stack, { styles: containerContextStyles },
22808
+ React__default['default'].createElement(ContentRender, null)))),
22668
22809
  OverrideContentRender && (React__default['default'].createElement(react.Stack.Item, { verticalFill: true, styles: !(overrideSidePane === null || overrideSidePane === void 0 ? void 0 : overrideSidePane.isActive) && (overrideSidePane === null || overrideSidePane === void 0 ? void 0 : overrideSidePane.persistRenderingWhenClosed)
22669
22810
  ? hiddenStyles
22670
22811
  : scrollableContainerContents },
22671
- React__default['default'].createElement(OverrideContentRender, null)))))));
22812
+ React__default['default'].createElement(react.Stack, { styles: containerContextStyles },
22813
+ React__default['default'].createElement(OverrideContentRender, null))))))));
22672
22814
  };
22673
22815
  // eslint-disable-next-line @typescript-eslint/no-empty-function
22674
22816
  const noop = () => { };
@@ -22906,7 +23048,7 @@ const CallingDialpad = (props) => {
22906
23048
  };
22907
23049
  if (isMobile) {
22908
23050
  return (React__default['default'].createElement(react.Stack, { "data-ui-id": "call-with-chat-composite-dialpad" }, showDialpad && (React__default['default'].createElement(react.Stack, { styles: drawerContainerStyles() },
22909
- React__default['default'].createElement(_DrawerSurface, { onLightDismiss: onDismissTriggered },
23051
+ React__default['default'].createElement(_DrawerSurface, { onLightDismiss: onDismissTriggered, disableMaxHeight: true },
22910
23052
  React__default['default'].createElement(react.Stack, { style: { padding: '1rem' } }, dialpadComponent()))))));
22911
23053
  }
22912
23054
  return (React__default['default'].createElement(React__default['default'].Fragment, null, React__default['default'].createElement(react.Modal, { titleAriaId: strings.dialpadModalAriaLabel, isOpen: showDialpad, onDismiss: onDismissTriggered, isBlocking: true, styles: dialpadModalStyle, "data-ui-id": "call-with-chat-composite-dialpad" },
@@ -22991,7 +23133,7 @@ const AddPeopleDropdown = (props) => {
22991
23133
  defaultMenuProps.items.length > 0 && (React__default['default'].createElement(react.Stack.Item, { styles: copyLinkButtonContainerStyles },
22992
23134
  React__default['default'].createElement(react.PrimaryButton, { onClick: setDrawerMenuItemsForAddPeople, styles: copyLinkButtonStylesThemed, onRenderIcon: () => PeoplePaneAddPersonIconTrampoline(), text: strings.peoplePaneAddPeopleButtonLabel, "data-ui-id": "call-add-people-button" }))),
22993
23135
  addPeopleDrawerMenuItems.length > 0 && (React__default['default'].createElement(react.Stack, { styles: drawerContainerStyles(), "data-ui-id": "call-add-people-dropdown" },
22994
- React__default['default'].createElement(_DrawerMenu, { onLightDismiss: () => setAddPeopleDrawerMenuItems([]), items: addPeopleDrawerMenuItems }))),
23136
+ React__default['default'].createElement(_DrawerMenu, { disableMaxHeight: true, onLightDismiss: () => setAddPeopleDrawerMenuItems([]), items: addPeopleDrawerMenuItems }))),
22995
23137
  alternateCallerId && (React__default['default'].createElement(CallingDialpad, { isMobile: true, strings: strings, showDialpad: showDialpad, onDismissDialpad: onDismissDialpad, onAddParticipant: onAddParticipant, alternateCallerId: alternateCallerId }))));
22996
23138
  }
22997
23139
  return (React__default['default'].createElement(React__default['default'].Fragment, null, React__default['default'].createElement(react.Stack, null,
@@ -25036,7 +25178,7 @@ const CallReadinessModal = (props) => {
25036
25178
  }
25037
25179
  };
25038
25180
  if (mobileView && modal !== undefined) {
25039
- return (React__default['default'].createElement(React__default['default'].Fragment, null, isPermissionsModalDismissed && (React__default['default'].createElement(_DrawerSurface, { onLightDismiss: onLightDismissTriggered, styles: drawerContainerStyles(DRAWER_HIGH_Z_BAND) }, modal()))));
25181
+ return (React__default['default'].createElement(React__default['default'].Fragment, null, isPermissionsModalDismissed && (React__default['default'].createElement(_DrawerSurface, { disableMaxHeight: true, onLightDismiss: onLightDismissTriggered, styles: drawerContainerStyles(DRAWER_HIGH_Z_BAND) }, modal()))));
25040
25182
  }
25041
25183
  else if (!mobileView && modal !== undefined) {
25042
25184
  return (React__default['default'].createElement(_ModalClone, { styles: {
@@ -25105,7 +25247,7 @@ const CallReadinessModalFallBack = (props) => {
25105
25247
  };
25106
25248
  if (mobileView) {
25107
25249
  return (React__default['default'].createElement(React__default['default'].Fragment, null,
25108
- (checkPermissionModalShowing || audioState === 'prompt' || videoState === 'prompt') && (React__default['default'].createElement(_DrawerSurface, { onLightDismiss: onLightDismissTriggered, styles: drawerContainerStyles(DRAWER_HIGH_Z_BAND) },
25250
+ (checkPermissionModalShowing || audioState === 'prompt' || videoState === 'prompt') && (React__default['default'].createElement(_DrawerSurface, { disableMaxHeight: true, onLightDismiss: onLightDismissTriggered, styles: drawerContainerStyles(DRAWER_HIGH_Z_BAND) },
25109
25251
  React__default['default'].createElement(CameraAndMicrophoneSitePermissions, { appName: 'app',
25110
25252
  /* @conditional-compile-remove(unsupported-browser) */
25111
25253
  browserHint: isSafari ? 'safari' : 'unset', onTroubleshootingClick: onPermissionsTroubleshootingClick
@@ -25113,7 +25255,7 @@ const CallReadinessModalFallBack = (props) => {
25113
25255
  onPermissionsTroubleshootingClick(permissionsState);
25114
25256
  }
25115
25257
  : undefined, kind: "check" }))),
25116
- isPermissionsModalDismissed && !checkPermissionModalShowing && modal !== undefined && (React__default['default'].createElement(_DrawerSurface, { onLightDismiss: onLightDismissTriggered, styles: drawerContainerStyles(DRAWER_HIGH_Z_BAND) }, modal()))));
25258
+ isPermissionsModalDismissed && !checkPermissionModalShowing && modal !== undefined && (React__default['default'].createElement(_DrawerSurface, { disableMaxHeight: true, onLightDismiss: onLightDismissTriggered, styles: drawerContainerStyles(DRAWER_HIGH_Z_BAND) }, modal()))));
25117
25259
  }
25118
25260
  else {
25119
25261
  return (React__default['default'].createElement(React__default['default'].Fragment, null,