@azure/communication-react 1.5.1-alpha-202306060014 → 1.5.1-alpha-202306080014

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 (37) hide show
  1. package/dist/communication-react.d.ts +17 -1
  2. package/dist/dist-cjs/communication-react/index.js +1627 -1506
  3. package/dist/dist-cjs/communication-react/index.js.map +1 -1
  4. package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js +1 -1
  5. package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js.map +1 -1
  6. package/dist/dist-esm/react-components/src/components/InputBoxComponent.js +38 -1375
  7. package/dist/dist-esm/react-components/src/components/InputBoxComponent.js.map +1 -1
  8. package/dist/dist-esm/react-components/src/components/TextFieldWithMention/TextFieldWithMention.d.ts +41 -0
  9. package/dist/dist-esm/react-components/src/components/TextFieldWithMention/TextFieldWithMention.js +554 -0
  10. package/dist/dist-esm/react-components/src/components/TextFieldWithMention/TextFieldWithMention.js.map +1 -0
  11. package/dist/dist-esm/react-components/src/components/TextFieldWithMention/mentionTagUtils.d.ts +167 -0
  12. package/dist/dist-esm/react-components/src/components/TextFieldWithMention/mentionTagUtils.js +780 -0
  13. package/dist/dist-esm/react-components/src/components/TextFieldWithMention/mentionTagUtils.js.map +1 -0
  14. package/dist/dist-esm/react-composites/src/composites/CallComposite/CallComposite.js +6 -0
  15. package/dist/dist-esm/react-composites/src/composites/CallComposite/CallComposite.js.map +1 -1
  16. package/dist/dist-esm/react-composites/src/composites/CallComposite/Strings.d.ts +16 -0
  17. package/dist/dist-esm/react-composites/src/composites/CallComposite/Strings.js.map +1 -1
  18. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/AzureCommunicationCallAdapter.js +8 -7
  19. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/AzureCommunicationCallAdapter.js.map +1 -1
  20. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/CallAdapter.d.ts +1 -1
  21. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/CallAdapter.js.map +1 -1
  22. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/MediaGallery.js +4 -3
  23. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/MediaGallery.js.map +1 -1
  24. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/TransferPage.d.ts +14 -0
  25. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/TransferPage.js +101 -0
  26. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/TransferPage.js.map +1 -0
  27. package/dist/dist-esm/react-composites/src/composites/CallComposite/selectors/baseSelectors.d.ts +4 -0
  28. package/dist/dist-esm/react-composites/src/composites/CallComposite/selectors/baseSelectors.js +5 -0
  29. package/dist/dist-esm/react-composites/src/composites/CallComposite/selectors/baseSelectors.js.map +1 -1
  30. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/TransferPage.styles.d.ts +26 -0
  31. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/TransferPage.styles.js +47 -0
  32. package/dist/dist-esm/react-composites/src/composites/CallComposite/styles/TransferPage.styles.js.map +1 -0
  33. package/dist/dist-esm/react-composites/src/composites/CallComposite/utils/Utils.d.ts +2 -2
  34. package/dist/dist-esm/react-composites/src/composites/CallComposite/utils/Utils.js +5 -1
  35. package/dist/dist-esm/react-composites/src/composites/CallComposite/utils/Utils.js.map +1 -1
  36. package/dist/dist-esm/react-composites/src/composites/localization/locales/en-US/strings.json +5 -1
  37. package/package.json +8 -8
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mentionTagUtils.js","sourceRoot":"","sources":["../../../../../../../react-components/src/components/TextFieldWithMention/mentionTagUtils.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { ComponentStrings } from '../../localization';\nimport { Mention } from '../MentionPopover';\n\nconst MSFT_MENTION_TAG = 'msft-mention';\n\n/**\n * Props for finding a valid index in range.\n *\n * @private\n */\ntype ValidatedIndexRangeProps = {\n min: number;\n max: number;\n currentValue?: number;\n};\n\n/**\n * Get validated value for index between min and max values. If currentValue is not defined, -1 will be used instead.\n *\n * @private\n * @param props - Props for finding a valid index in range.\n * @returns Valid index in the range.\n */\nexport const getValidatedIndexInRange = (props: ValidatedIndexRangeProps): number => {\n const { min, max, currentValue } = props;\n let updatedValue = currentValue ?? -1;\n updatedValue = Math.max(min, updatedValue);\n updatedValue = Math.min(updatedValue, max);\n return updatedValue;\n};\n\n/**\n * Find mention tag for selection if exists.\n *\n * @private\n * @param tags - Existing list of tags.\n * @param selection - Selection index.\n * @returns Mention tag if exists, otherwise undefined.\n */\nexport const findMentionTagForSelection = (tags: TagData[], selection: number): TagData | undefined => {\n let mentionTag: TagData | undefined = undefined;\n tags.every((tag) => {\n const closingTagInfo = getTagClosingTagInfo(tag);\n if (tag.plainTextBeginIndex !== undefined && tag.plainTextBeginIndex > selection) {\n // no need to check further as the selection is before the tag\n return false;\n } else if (\n tag.plainTextBeginIndex !== undefined &&\n tag.plainTextBeginIndex <= selection &&\n selection <= closingTagInfo.plainTextEndIndex\n ) {\n // no need to check if tag doesn't contain selection\n if (tag.subTags !== undefined && tag.subTags.length !== 0) {\n const selectedTag = findMentionTagForSelection(tag.subTags, selection);\n if (selectedTag !== undefined) {\n mentionTag = selectedTag;\n return false;\n }\n } else if (tag.tagType === MSFT_MENTION_TAG) {\n mentionTag = tag;\n return false;\n }\n }\n return true;\n });\n return mentionTag;\n};\n\n/**\n * Get the indices of the word for the selection.\n * @private\n *\n */\nexport const rangeOfWordInSelection = ({\n textInput,\n selectionStart,\n selectionEnd,\n tag\n}: {\n textInput: string;\n selectionStart: number;\n selectionEnd?: number;\n tag: TagData;\n}): { start: number; end: number } => {\n if (tag.plainTextBeginIndex === undefined) {\n return { start: selectionStart, end: selectionEnd === undefined ? selectionStart : selectionEnd };\n }\n\n // Look at start word index and optionally end word index.\n // Select combination of the two and return the range.\n let start = selectionStart;\n let end = selectionEnd === undefined ? selectionStart : selectionEnd;\n const firstWordStartIndex = textInput.lastIndexOf(' ', selectionStart);\n if (firstWordStartIndex === tag.plainTextBeginIndex) {\n start = firstWordStartIndex;\n } else {\n start = Math.max(firstWordStartIndex + 1, tag.plainTextBeginIndex);\n }\n\n const firstWordEndIndex = textInput.indexOf(' ', selectionStart);\n end = Math.max(firstWordEndIndex + 1, tag.plainTextEndIndex ?? firstWordEndIndex + 1);\n\n if (selectionEnd !== undefined && tag.plainTextEndIndex !== undefined) {\n const lastWordEndIndex = textInput.indexOf(' ', selectionEnd);\n end = Math.max(lastWordEndIndex > -1 ? lastWordEndIndex : tag.plainTextEndIndex, selectionEnd);\n }\n return { start, end };\n};\n\n/**\n * Props for finding new selection index for mention\n *\n * @private\n */\ntype NewSelectionIndexForMentionProps = {\n tag: TagData;\n textValue: string;\n currentSelectionIndex: number;\n previousSelectionIndex: number;\n};\n\n/**\n * Find a new the selection index.\n *\n * @private\n * @param props - Props for finding new selection index for mention.\n * @returns New selection index if it is inside of a mention tag, otherwise the current selection.\n */\nexport const findNewSelectionIndexForMention = (props: NewSelectionIndexForMentionProps): number => {\n const { tag, textValue, currentSelectionIndex, previousSelectionIndex } = props;\n // check if this is a mention tag and selection should be updated\n if (\n tag.tagType !== MSFT_MENTION_TAG ||\n tag.plainTextBeginIndex === undefined ||\n currentSelectionIndex === previousSelectionIndex ||\n tag.plainTextEndIndex === undefined\n ) {\n return currentSelectionIndex;\n }\n let spaceIndex = 0;\n if (currentSelectionIndex <= previousSelectionIndex) {\n // the cursor is moved to the left, find the last index before the cursor\n spaceIndex = textValue.lastIndexOf(' ', currentSelectionIndex ?? 0);\n if (spaceIndex === -1) {\n // no space before the selection, use the beginning of the tag\n spaceIndex = tag.plainTextBeginIndex;\n }\n } else {\n // the cursor is moved to the right, find the fist index after the cursor\n spaceIndex = textValue.indexOf(' ', currentSelectionIndex ?? 0);\n if (spaceIndex === -1) {\n // no space after the selection, use the end of the tag\n spaceIndex = tag.plainTextEndIndex ?? tag.plainTextBeginIndex;\n }\n }\n spaceIndex = Math.max(tag.plainTextBeginIndex, spaceIndex);\n spaceIndex = Math.min(tag.plainTextEndIndex, spaceIndex);\n return spaceIndex;\n};\n\n/**\n * Props for mention update HTML function\n *\n * @private\n */\ntype MentionTagUpdateProps = {\n htmlText: string;\n oldPlainText: string;\n lastProcessedHTMLIndex: number;\n processedChange: string;\n change: string;\n tag: TagData;\n closeTagIdx: number;\n closeTagLength: number;\n plainTextEndIndex: number;\n startIndex: number;\n oldPlainTextEndIndex: number;\n mentionTagLength: number;\n};\n\n/**\n * Result for mention update HTML function\n *\n * @private\n */\ntype MentionTagUpdateResult = {\n result: string;\n updatedChange: string;\n htmlIndex: number;\n plainTextSelectionEndIndex?: number;\n};\n\n/**\n * Handle mention tag edit and by word deleting\n *\n * @private\n * @param props - Props for mention update HTML function.\n * @returns Updated texts and indexes.\n */\nconst handleMentionTagUpdate = (props: MentionTagUpdateProps): MentionTagUpdateResult => {\n const {\n htmlText,\n oldPlainText,\n change,\n tag,\n closeTagIdx,\n closeTagLength,\n plainTextEndIndex,\n startIndex,\n oldPlainTextEndIndex,\n mentionTagLength\n } = props;\n let processedChange = props.processedChange;\n let lastProcessedHTMLIndex = props.lastProcessedHTMLIndex;\n if (tag.tagType !== MSFT_MENTION_TAG || tag.plainTextBeginIndex === undefined) {\n // not a mention tag\n return {\n result: '',\n updatedChange: processedChange,\n htmlIndex: lastProcessedHTMLIndex,\n plainTextSelectionEndIndex: undefined\n };\n }\n let result = '';\n let plainTextSelectionEndIndex: number | undefined;\n let rangeStart: number;\n let rangeEnd: number;\n // check if space symbol is handled in case if string looks like '<1 2 3>'\n let isSpaceLengthHandled = false;\n rangeStart = oldPlainText.lastIndexOf(' ', startIndex);\n if (rangeStart !== -1 && rangeStart !== undefined && rangeStart > tag.plainTextBeginIndex) {\n isSpaceLengthHandled = true;\n }\n rangeEnd = oldPlainText.indexOf(' ', oldPlainTextEndIndex);\n if (rangeEnd === -1 || rangeEnd === undefined) {\n // check if space symbol is not found\n rangeEnd = plainTextEndIndex;\n } else if (!isSpaceLengthHandled) {\n // +1 to include the space symbol\n rangeEnd += 1;\n }\n isSpaceLengthHandled = true;\n\n if (rangeStart === -1 || rangeStart === undefined || rangeStart < tag.plainTextBeginIndex) {\n // rangeStart should be at least equal to tag.plainTextBeginIndex\n rangeStart = tag.plainTextBeginIndex;\n }\n if (rangeEnd > plainTextEndIndex) {\n // rangeEnd should be at most equal to plainTextEndIndex\n rangeEnd = plainTextEndIndex;\n }\n if (rangeStart === tag.plainTextBeginIndex && rangeEnd === plainTextEndIndex) {\n // the whole tag should be removed\n result += htmlText.substring(lastProcessedHTMLIndex, tag.openTagIndex) + processedChange;\n plainTextSelectionEndIndex = tag.plainTextBeginIndex + processedChange.length;\n processedChange = '';\n lastProcessedHTMLIndex = closeTagIdx + closeTagLength;\n } else {\n // only part of the tag should be removed\n let startChangeDiff = 0;\n let endChangeDiff = 0;\n // need to check only rangeStart > tag.plainTextBeginIndex as when rangeStart === tag.plainTextBeginIndex startChangeDiff = 0 and mentionTagLength shouldn't be subtracted\n if (rangeStart > tag.plainTextBeginIndex) {\n startChangeDiff = rangeStart - tag.plainTextBeginIndex - mentionTagLength;\n }\n endChangeDiff = rangeEnd - tag.plainTextBeginIndex - mentionTagLength;\n result += htmlText.substring(lastProcessedHTMLIndex, tag.openTagIndex + tag.openTagBody.length + startChangeDiff);\n\n if (startIndex < tag.plainTextBeginIndex) {\n // if the change is before the tag, the selection should start from startIndex (rangeStart will be equal to tag.plainTextBeginIndex)\n plainTextSelectionEndIndex = startIndex + change.length;\n } else {\n // if the change is inside the tag, the selection should start with rangeStart\n plainTextSelectionEndIndex = rangeStart + processedChange.length;\n }\n lastProcessedHTMLIndex = tag.openTagIndex + tag.openTagBody.length + endChangeDiff;\n // processed change should not be changed as it should be added after the tag\n }\n return { result, updatedChange: processedChange, htmlIndex: lastProcessedHTMLIndex, plainTextSelectionEndIndex };\n};\n\n/**\n * Closing tag information\n *\n * @private\n */\ntype ClosingTagInfoResult = {\n plainTextEndIndex: number;\n closeTagIdx: number;\n closeTagLength: number;\n};\n\n/**\n * Get closing tag information if exists otherwise return information as for self closing tag\n *\n * @private\n * @param tag - Tag data.\n * @returns Closing tag information for the provided tag.\n */\nconst getTagClosingTagInfo = (tag: TagData): ClosingTagInfoResult => {\n let plainTextEndIndex = 0;\n let closeTagIdx = 0;\n let closeTagLength = 0;\n if (tag.plainTextEndIndex !== undefined && tag.closingTagIndex !== undefined) {\n // close tag exists\n plainTextEndIndex = tag.plainTextEndIndex;\n closeTagIdx = tag.closingTagIndex;\n // tag.tagType.length + </>\n closeTagLength = tag.tagType.length + 3;\n } else if (tag.plainTextBeginIndex !== undefined) {\n // no close tag\n plainTextEndIndex = tag.plainTextBeginIndex;\n closeTagIdx = tag.openTagIndex + tag.openTagBody.length;\n closeTagLength = 0;\n }\n return { plainTextEndIndex, closeTagIdx, closeTagLength };\n};\n\n/**\n * Props for update HTML function\n *\n * @private\n */\ntype UpdateHTMLProps = {\n htmlText: string;\n oldPlainText: string;\n newPlainText: string;\n tags: TagData[];\n startIndex: number;\n oldPlainTextEndIndex: number;\n change: string;\n mentionTrigger: string;\n};\n\n/**\n * Go through the text and update it with the changed text\n *\n * @private\n * @param props - Props for update HTML function.\n * @returns Updated HTML and selection index if the selection index should be set.\n */\nexport const updateHTML = (props: UpdateHTMLProps): { updatedHTML: string; updatedSelectionIndex?: number } => {\n const { htmlText, oldPlainText, newPlainText, tags, startIndex, oldPlainTextEndIndex, change, mentionTrigger } =\n props;\n if (tags.length === 0 || (startIndex === 0 && oldPlainTextEndIndex === oldPlainText.length - 1)) {\n // no tags added yet or the whole text is changed\n return { updatedHTML: newPlainText, updatedSelectionIndex: undefined };\n }\n let result = '';\n let lastProcessedHTMLIndex = 0;\n // the value can be updated with empty string when the change covers more than 1 place (tag + before or after the tag)\n // in this case change won't be added as part of the tag\n // e.g.: change is before and partially in tag => change will be added before the tag and outdated text in the tag will be removed\n // e.g.: change is after and partially in tag => change will be added after the tag and outdated text in the tag will be removed\n // e.g.: change is on the beginning of the tag => change will be added before the tag\n // e.g.: change is on the end of the tag => change will be added to the tag if it's not mention and after the tag if it's mention\n let processedChange = change;\n // end tag plain text index of the last processed tag\n let lastProcessedPlainTextTagEndIndex = 0;\n // as some tags/text can be removed fully, selection should be updated correctly\n let changeNewEndIndex: number | undefined;\n\n for (let i = 0; i < tags.length; i++) {\n const tag = tags[i];\n if (tag.plainTextBeginIndex === undefined) {\n continue;\n }\n // all plain text indexes includes trigger length for the mention that shouldn't be included in\n // htmlText.substring because html strings don't include the trigger\n // mentionTagLength will be set only for mention tag, otherwise should be 0\n let mentionTagLength = 0;\n let isMentionTag = false;\n if (tag.tagType === MSFT_MENTION_TAG) {\n mentionTagLength = mentionTrigger.length;\n isMentionTag = true;\n }\n if (startIndex <= tag.plainTextBeginIndex) {\n // change start is before the open tag\n // Math.max(lastProcessedPlainTextTagEndIndex, startIndex) is used as startIndex may not be in [[previous tag].plainTextEndIndex - tag.plainTextBeginIndex] range\n const startChangeDiff = tag.plainTextBeginIndex - Math.max(lastProcessedPlainTextTagEndIndex, startIndex);\n result += htmlText.substring(lastProcessedHTMLIndex, tag.openTagIndex - startChangeDiff) + processedChange;\n processedChange = '';\n if (oldPlainTextEndIndex <= tag.plainTextBeginIndex) {\n // the whole change is before tag start\n // mentionTag length can be ignored here as the change is before the tag\n const endChangeDiff = tag.plainTextBeginIndex - oldPlainTextEndIndex;\n lastProcessedHTMLIndex = tag.openTagIndex - endChangeDiff;\n // the change is handled; exit\n break;\n } else {\n // change continues in the tag\n lastProcessedHTMLIndex = tag.openTagIndex;\n // proceed to the next check\n }\n }\n const closingTagInfo = getTagClosingTagInfo(tag);\n if (startIndex <= closingTagInfo.plainTextEndIndex) {\n // change started before the end tag\n if (startIndex <= tag.plainTextBeginIndex && oldPlainTextEndIndex === closingTagInfo.plainTextEndIndex) {\n // the change is a tag or starts before the tag\n // tag should be removed, no matter if there are sub-tags\n result += htmlText.substring(lastProcessedHTMLIndex, tag.openTagIndex) + processedChange;\n processedChange = '';\n lastProcessedHTMLIndex = closingTagInfo.closeTagIdx + closingTagInfo.closeTagLength;\n // the change is handled; exit\n break;\n } else if (startIndex >= tag.plainTextBeginIndex && oldPlainTextEndIndex <= closingTagInfo.plainTextEndIndex) {\n // the change is between the tag\n if (isMentionTag) {\n if (change !== '') {\n if (startIndex !== tag.plainTextBeginIndex && startIndex !== closingTagInfo.plainTextEndIndex) {\n // mention tag should be deleted when user tries to edit it in the middle\n result += htmlText.substring(lastProcessedHTMLIndex, tag.openTagIndex) + processedChange;\n changeNewEndIndex = tag.plainTextBeginIndex + processedChange.length;\n lastProcessedHTMLIndex = closingTagInfo.closeTagIdx + closingTagInfo.closeTagLength;\n } else if (startIndex === tag.plainTextBeginIndex) {\n // non empty change at the beginning of the mention tag to be added before the mention tag\n result += htmlText.substring(lastProcessedHTMLIndex, tag.openTagIndex) + processedChange;\n changeNewEndIndex = tag.plainTextBeginIndex + processedChange.length;\n lastProcessedHTMLIndex = tag.openTagIndex;\n } else if (startIndex === closingTagInfo.plainTextEndIndex) {\n // non empty change at the end of the mention tag to be added after the mention tag\n result +=\n htmlText.substring(lastProcessedHTMLIndex, closingTagInfo.closeTagIdx + closingTagInfo.closeTagLength) +\n processedChange;\n changeNewEndIndex = closingTagInfo.plainTextEndIndex + processedChange.length;\n lastProcessedHTMLIndex = closingTagInfo.closeTagIdx + closingTagInfo.closeTagLength;\n }\n processedChange = '';\n } else {\n const updateMentionTagResult = handleMentionTagUpdate({\n htmlText,\n oldPlainText,\n lastProcessedHTMLIndex,\n processedChange,\n change,\n tag,\n closeTagIdx: closingTagInfo.closeTagIdx,\n closeTagLength: closingTagInfo.closeTagLength,\n plainTextEndIndex: closingTagInfo.plainTextEndIndex,\n startIndex,\n oldPlainTextEndIndex,\n mentionTagLength\n });\n result += updateMentionTagResult.result;\n changeNewEndIndex = updateMentionTagResult.plainTextSelectionEndIndex;\n processedChange = updateMentionTagResult.updatedChange;\n lastProcessedHTMLIndex = updateMentionTagResult.htmlIndex;\n }\n } else if (tag.subTags !== undefined && tag.subTags.length !== 0 && tag.content !== undefined) {\n // with subtags\n const stringBefore = htmlText.substring(lastProcessedHTMLIndex, tag.openTagIndex + tag.openTagBody.length);\n lastProcessedHTMLIndex = closingTagInfo.closeTagIdx;\n const updatedContent = updateHTML({\n htmlText: tag.content,\n oldPlainText,\n newPlainText,\n tags: tag.subTags,\n startIndex,\n oldPlainTextEndIndex,\n change: processedChange,\n mentionTrigger\n });\n result += stringBefore + updatedContent.updatedHTML;\n changeNewEndIndex = updatedContent.updatedSelectionIndex;\n } else {\n // no subtags\n const startChangeDiff = startIndex - tag.plainTextBeginIndex;\n result +=\n htmlText.substring(lastProcessedHTMLIndex, tag.openTagIndex + tag.openTagBody.length + startChangeDiff) +\n processedChange;\n processedChange = '';\n if (oldPlainTextEndIndex < closingTagInfo.plainTextEndIndex) {\n const endChangeDiff = oldPlainTextEndIndex - tag.plainTextBeginIndex;\n lastProcessedHTMLIndex = tag.openTagIndex + tag.openTagBody.length + endChangeDiff;\n } else if (oldPlainTextEndIndex === closingTagInfo.plainTextEndIndex) {\n lastProcessedHTMLIndex = closingTagInfo.closeTagIdx;\n }\n }\n // the change is handled; exit\n break;\n } else if (startIndex > tag.plainTextBeginIndex && oldPlainTextEndIndex > closingTagInfo.plainTextEndIndex) {\n // the change started in the tag but finishes somewhere further\n const startChangeDiff = startIndex - tag.plainTextBeginIndex - mentionTagLength;\n if (isMentionTag) {\n const updateMentionTagResult = handleMentionTagUpdate({\n htmlText,\n oldPlainText,\n lastProcessedHTMLIndex,\n processedChange: '',\n change,\n tag,\n closeTagIdx: closingTagInfo.closeTagIdx,\n closeTagLength: closingTagInfo.closeTagLength,\n plainTextEndIndex: closingTagInfo.plainTextEndIndex,\n startIndex,\n oldPlainTextEndIndex,\n mentionTagLength\n });\n result += updateMentionTagResult.result;\n lastProcessedHTMLIndex = updateMentionTagResult.htmlIndex;\n // no need to handle plainTextSelectionEndIndex as the change will be added later\n } else if (tag.subTags !== undefined && tag.subTags.length !== 0 && tag.content !== undefined) {\n // with subtags\n const stringBefore = htmlText.substring(lastProcessedHTMLIndex, tag.openTagIndex + tag.openTagBody.length);\n lastProcessedHTMLIndex = closingTagInfo.closeTagIdx;\n const updatedContent = updateHTML({\n htmlText: tag.content,\n oldPlainText,\n newPlainText,\n tags: tag.subTags,\n startIndex,\n oldPlainTextEndIndex,\n change: '', // the part of the tag should be just deleted without processedChange update and change will be added after this tag\n mentionTrigger\n });\n result += stringBefore + updatedContent.updatedHTML;\n } else {\n // no subtags\n result += htmlText.substring(\n lastProcessedHTMLIndex,\n tag.openTagIndex + tag.openTagBody.length + startChangeDiff\n );\n lastProcessedHTMLIndex = closingTagInfo.closeTagIdx;\n }\n // proceed with the next calculations\n } else if (startIndex < tag.plainTextBeginIndex && oldPlainTextEndIndex > closingTagInfo.plainTextEndIndex) {\n // the change starts before the tag and finishes after it\n // tag should be removed, no matter if there are subtags\n // no need to save anything between lastProcessedHTMLIndex and closeTagIdx + closeTagLength\n lastProcessedHTMLIndex = closingTagInfo.closeTagIdx + closingTagInfo.closeTagLength;\n // proceed with the next calculations\n } else if (startIndex === tag.plainTextBeginIndex && oldPlainTextEndIndex > closingTagInfo.plainTextEndIndex) {\n // the change starts in the tag and finishes after it\n // tag should be removed, no matter if there are subtags\n result += htmlText.substring(lastProcessedHTMLIndex, tag.openTagIndex);\n // processedChange shouldn't be updated as it will be added after the tag\n lastProcessedHTMLIndex = closingTagInfo.closeTagIdx + closingTagInfo.closeTagLength;\n // proceed with the next calculations\n } else if (startIndex < tag.plainTextBeginIndex && oldPlainTextEndIndex < closingTagInfo.plainTextEndIndex) {\n // the change starts before the tag and ends in a tag\n if (isMentionTag) {\n // mention tag\n const updateMentionTagResult = handleMentionTagUpdate({\n htmlText,\n oldPlainText,\n lastProcessedHTMLIndex,\n processedChange: '', // the part of mention should be just deleted without processedChange update\n change,\n tag,\n closeTagIdx: closingTagInfo.closeTagIdx,\n closeTagLength: closingTagInfo.closeTagLength,\n plainTextEndIndex: closingTagInfo.plainTextEndIndex,\n startIndex,\n oldPlainTextEndIndex,\n mentionTagLength\n });\n changeNewEndIndex = updateMentionTagResult.plainTextSelectionEndIndex;\n result += updateMentionTagResult.result;\n lastProcessedHTMLIndex = updateMentionTagResult.htmlIndex;\n } else if (tag.subTags !== undefined && tag.subTags.length !== 0 && tag.content !== undefined) {\n // with subtags\n const stringBefore = htmlText.substring(lastProcessedHTMLIndex, tag.openTagIndex + tag.openTagBody.length);\n lastProcessedHTMLIndex = closingTagInfo.closeTagIdx;\n const updatedContent = updateHTML({\n htmlText: tag.content,\n oldPlainText,\n newPlainText,\n tags: tag.subTags,\n startIndex,\n oldPlainTextEndIndex,\n change: processedChange, // processedChange should be equal '' and the part of the tag should be deleted as the change was handled before this tag\n mentionTrigger\n });\n processedChange = '';\n result += stringBefore + updatedContent.updatedHTML;\n } else {\n // no subtags\n result +=\n htmlText.substring(lastProcessedHTMLIndex, tag.openTagIndex + tag.openTagBody.length) + processedChange;\n processedChange = '';\n // oldPlainTextEndIndex already includes mentionTag length\n const endChangeDiff = closingTagInfo.plainTextEndIndex - oldPlainTextEndIndex;\n // as change may be before the end of the tag, we need to add the rest of the tag\n lastProcessedHTMLIndex = closingTagInfo.closeTagIdx - endChangeDiff;\n }\n // the change is handled; exit\n break;\n }\n lastProcessedPlainTextTagEndIndex = closingTagInfo.plainTextEndIndex;\n }\n\n if (i === tags.length - 1 && oldPlainTextEndIndex >= closingTagInfo.plainTextEndIndex) {\n // the last tag should handle the end of the change if needed\n // oldPlainTextEndIndex already includes mentionTag length\n const endChangeDiff = oldPlainTextEndIndex - closingTagInfo.plainTextEndIndex;\n if (startIndex >= closingTagInfo.plainTextEndIndex) {\n const startChangeDiff = startIndex - closingTagInfo.plainTextEndIndex;\n result +=\n htmlText.substring(\n lastProcessedHTMLIndex,\n closingTagInfo.closeTagIdx + closingTagInfo.closeTagLength + startChangeDiff\n ) + processedChange;\n } else {\n result +=\n htmlText.substring(lastProcessedHTMLIndex, closingTagInfo.closeTagIdx + closingTagInfo.closeTagLength) +\n processedChange;\n }\n processedChange = '';\n lastProcessedHTMLIndex = closingTagInfo.closeTagIdx + closingTagInfo.closeTagLength + endChangeDiff;\n // the change is handled; exit\n // break is not required here as this is the last element but added for consistency\n break;\n }\n }\n if (lastProcessedHTMLIndex < htmlText.length) {\n // add the rest of the html string\n result += htmlText.substring(lastProcessedHTMLIndex);\n }\n return { updatedHTML: result, updatedSelectionIndex: changeNewEndIndex };\n};\n\n/**\n * Props for finding strings diff indexes\n *\n * @private\n */\ntype DiffIndexesProps = {\n // the old text\n oldText: string;\n // the new text\n newText: string;\n // the start of previous selection, should be a valid position in the input field\n previousSelectionStart: number;\n // the end of previous selection, should be a valid position in the input field\n previousSelectionEnd: number;\n // the start of current selection, should be a valid position in the input field\n currentSelectionStart: number;\n // the end of current selection, should be a valid position in the input field\n currentSelectionEnd: number;\n};\n\n/**\n * Result of finding strings diff indexes function\n *\n * @private\n */\ntype DiffIndexesResult = {\n changeStart: number;\n oldChangeEnd: number;\n newChangeEnd: number;\n};\n\n/**\n * Given the oldText and newText, find the start index, old end index and new end index for the changes\n *\n * @private\n * @param props - Props for finding stings diff indexes function.\n * @returns Indexes for change start and ends in new and old texts. The old and new end indexes are exclusive.\n */\nexport const findStringsDiffIndexes = (props: DiffIndexesProps): DiffIndexesResult => {\n const { oldText, newText, previousSelectionStart, previousSelectionEnd, currentSelectionStart, currentSelectionEnd } =\n props;\n const newTextLength = newText.length;\n const oldTextLength = oldText.length;\n // let changeStart = 0;\n let newChangeEnd = newTextLength;\n let oldChangeEnd = oldTextLength;\n const previousSelectionStartValue = previousSelectionStart > -1 ? previousSelectionStart : oldTextLength;\n const previousSelectionEndValue = previousSelectionEnd > -1 ? previousSelectionEnd : oldTextLength;\n const currentSelectionStartValue = currentSelectionStart > -1 ? currentSelectionStart : newTextLength;\n const currentSelectionEndValue = currentSelectionEnd > -1 ? currentSelectionEnd : newTextLength;\n const changeStart = Math.min(\n previousSelectionStartValue,\n previousSelectionEndValue,\n currentSelectionStartValue,\n currentSelectionEndValue,\n newTextLength,\n oldTextLength\n );\n\n if (oldTextLength < newTextLength) {\n //insert or replacement\n if (oldTextLength === changeStart) {\n // when change was at the end of string\n // change is found\n newChangeEnd = newTextLength;\n oldChangeEnd = oldTextLength;\n } else {\n for (let i = 1; i < newTextLength && oldTextLength - i >= changeStart; i++) {\n newChangeEnd = newTextLength - i - 1;\n oldChangeEnd = oldTextLength - i - 1;\n\n if (newText[newChangeEnd] !== oldText[oldChangeEnd]) {\n // change is found\n break;\n }\n }\n // make indexes exclusive\n newChangeEnd += 1;\n oldChangeEnd += 1;\n }\n } else if (oldTextLength > newTextLength) {\n //deletion or replacement\n if (newTextLength === changeStart) {\n // when change was at the end of string\n // change is found\n newChangeEnd = newTextLength;\n oldChangeEnd = oldTextLength;\n } else {\n for (let i = 1; i < oldTextLength && newTextLength - i >= changeStart; i++) {\n newChangeEnd = newTextLength - i - 1;\n oldChangeEnd = oldTextLength - i - 1;\n if (newText[newChangeEnd] !== oldText[oldChangeEnd]) {\n // change is found\n break;\n }\n }\n // make indexes exclusive\n newChangeEnd += 1;\n oldChangeEnd += 1;\n }\n } else {\n // replacement\n for (let i = 1; i < oldTextLength && oldTextLength - i >= changeStart; i++) {\n newChangeEnd = newTextLength - i - 1;\n oldChangeEnd = oldTextLength - i - 1;\n\n if (newText[newChangeEnd] !== oldText[oldChangeEnd]) {\n // change is found\n break;\n }\n }\n // make indexes exclusive if they aren't equal to the length of the string\n if (newChangeEnd !== newText.length) {\n newChangeEnd += 1;\n }\n if (oldChangeEnd !== oldText.length) {\n oldChangeEnd += 1;\n }\n }\n return { changeStart, oldChangeEnd, newChangeEnd };\n};\n\n/**\n * Get the html string for the mention suggestion.\n *\n * @private\n * @param suggestion - The mention suggestion.\n * @param localeStrings - The locale strings.\n * @returns The html string for the mention suggestion.\n */\nexport const htmlStringForMentionSuggestion = (suggestion: Mention, localeStrings: ComponentStrings): string => {\n const idHTML = ' id=\"' + suggestion.id + '\"';\n const displayTextHTML = ' displayText=\"' + suggestion.displayText + '\"';\n const displayText = getDisplayNameForMentionSuggestion(suggestion, localeStrings);\n return '<' + MSFT_MENTION_TAG + idHTML + displayTextHTML + '>' + displayText + '</' + MSFT_MENTION_TAG + '>';\n};\n\n/**\n * Get display name for the mention suggestion.\n *\n * @private\n *\n * @param suggestion - The mention suggestion.\n * @param localeStrings - The locale strings.\n * @returns The display name for the mention suggestion or display name placeholder if display name is empty.\n */\nexport const getDisplayNameForMentionSuggestion = (suggestion: Mention, localeStrings: ComponentStrings): string => {\n const displayNamePlaceholder = localeStrings.participantItem.displayNamePlaceholder;\n return suggestion.displayText !== '' ? suggestion.displayText : displayNamePlaceholder ?? '';\n};\n\n/**\n * Tag data for a HTML tag in the string\n *\n * @private\n */\nexport type TagData = {\n tagType: string; // The type of tag (e.g. msft-mention)\n openTagIndex: number; // Start of the tag relative to the parent content\n openTagBody: string; // Complete open tag body\n content?: string; // All content between the open and close tags\n closingTagIndex?: number; // Start of the close tag relative to the parent content\n subTags?: TagData[]; // Any child tags\n plainTextBeginIndex?: number; // Absolute index of the open tag start should be in plain text\n plainTextEndIndex?: number; // Absolute index of the close tag start should be in plain text\n};\n\ntype HtmlTagType = 'open' | 'close' | 'self-closing';\n\ntype HtmlTag = {\n content: string;\n startIdx: number;\n type: HtmlTagType;\n};\n\n/**\n * Parse the text and return the tags and the plain text in one go\n * @private\n * @param text - The text to parse for HTML tags\n * @param trigger The trigger to show for the mention tag in plain text\n *\n * @returns An array of tags and the plain text representation\n */\nexport const textToTagParser = (text: string, trigger: string): { tags: TagData[]; plainText: string } => {\n const tags: TagData[] = []; // Tags passed back to the caller\n const tagParseStack: TagData[] = []; // Local stack to use while parsing\n\n let plainTextRepresentation = '';\n\n let parseIndex = 0;\n while (parseIndex < text.length) {\n const foundHtmlTag = findNextHtmlTag(text, parseIndex);\n\n if (!foundHtmlTag) {\n if (parseIndex !== 0) {\n // Add the remaining text to the plain text representation\n plainTextRepresentation += text.substring(parseIndex);\n } else {\n plainTextRepresentation = text;\n }\n break;\n }\n\n if (foundHtmlTag.type === 'open' || foundHtmlTag.type === 'self-closing') {\n const nextTag = parseOpenTag(foundHtmlTag.content, foundHtmlTag.startIdx);\n // Add the plain text between the last tag and this one found\n plainTextRepresentation += text.substring(parseIndex, foundHtmlTag.startIdx);\n nextTag.plainTextBeginIndex = plainTextRepresentation.length;\n\n if (foundHtmlTag.type === 'open') {\n tagParseStack.push(nextTag);\n } else {\n nextTag.content = '';\n nextTag.plainTextBeginIndex = plainTextRepresentation.length;\n nextTag.plainTextEndIndex = plainTextRepresentation.length;\n addTag(nextTag, tagParseStack, tags);\n }\n }\n\n if (foundHtmlTag.type === 'close') {\n const currentOpenTag = tagParseStack.pop();\n const closeTagType = foundHtmlTag.content.substring(2, foundHtmlTag.content.length - 1).toLowerCase();\n\n if (currentOpenTag && currentOpenTag.tagType === closeTagType) {\n // Tag startIdx is absolute to the text. This is updated later to be relative to the parent tag\n currentOpenTag.content = text.substring(\n currentOpenTag.openTagIndex + currentOpenTag.openTagBody.length,\n foundHtmlTag.startIdx\n );\n\n // Insert the plain text pieces for the sub tags\n if (currentOpenTag.tagType === MSFT_MENTION_TAG) {\n plainTextRepresentation =\n plainTextRepresentation.slice(0, currentOpenTag.plainTextBeginIndex) +\n trigger +\n plainTextRepresentation.slice(currentOpenTag.plainTextBeginIndex);\n }\n\n if (!currentOpenTag.subTags) {\n plainTextRepresentation += currentOpenTag.content;\n } else if (currentOpenTag.subTags.length > 0) {\n // Add text after the last tag\n const lastSubTag = currentOpenTag.subTags[currentOpenTag.subTags.length - 1];\n const startOfRemainingText =\n (lastSubTag.closingTagIndex ?? lastSubTag.openTagIndex) + lastSubTag.tagType.length + 3;\n const trailingText = currentOpenTag.content.substring(startOfRemainingText);\n plainTextRepresentation += trailingText;\n }\n\n currentOpenTag.plainTextEndIndex = plainTextRepresentation.length;\n addTag(currentOpenTag, tagParseStack, tags);\n } else {\n throw new Error(\n 'Unexpected close tag found. Got \"' +\n closeTagType +\n '\" but expected \"' +\n tagParseStack[tagParseStack.length - 1]?.tagType +\n '\"'\n );\n }\n }\n\n // Update parsing index; move past the end of the close tag\n parseIndex = foundHtmlTag.startIdx + foundHtmlTag.content.length;\n } // While parseIndex < text.length loop\n\n return { tags, plainText: plainTextRepresentation };\n};\n\nconst parseOpenTag = (tag: string, startIdx: number): TagData => {\n const tagType = tag\n .substring(1, tag.length - 1)\n .split(' ')[0]\n .toLowerCase()\n .replace('/', '');\n return {\n tagType,\n openTagIndex: startIdx,\n openTagBody: tag\n };\n};\n\nconst findNextHtmlTag = (text: string, startIndex: number): HtmlTag | undefined => {\n const tagStartIndex = text.indexOf('<', startIndex);\n if (tagStartIndex === -1) {\n // No more tags\n return undefined;\n }\n const tagEndIndex = text.indexOf('>', tagStartIndex);\n if (tagEndIndex === -1) {\n // No close tag\n return undefined;\n }\n const tag = text.substring(tagStartIndex, tagEndIndex + 1);\n let type: HtmlTagType = 'open';\n if (tag[1] === '/') {\n type = 'close';\n } else if (tag[tag.length - 2] === '/') {\n type = 'self-closing';\n }\n return {\n content: tag,\n startIdx: tagStartIndex,\n type\n };\n};\n\nconst addTag = (tag: TagData, parseStack: TagData[], tags: TagData[]): void => {\n // Add as sub-tag to the parent stack tag, if there is one\n const parentTag = parseStack[parseStack.length - 1];\n\n if (parentTag) {\n // Adjust the open tag index to be relative to the parent tag\n const parentContentStartIdx = parentTag.openTagIndex + parentTag.openTagBody.length;\n const relativeIdx = tag.openTagIndex - parentContentStartIdx;\n tag.openTagIndex = relativeIdx;\n }\n\n if (!tag.closingTagIndex) {\n // If the tag is self-closing, the close tag is the same as the open tag\n if (tag.openTagBody[tag.openTagBody.length - 2] === '/') {\n tag.closingTagIndex = tag.openTagIndex;\n } else {\n // Otherwise, the close tag index is the open tag index + the open tag body + the content length\n tag.closingTagIndex = tag.openTagIndex + tag.openTagBody.length + (tag.content ?? []).length;\n }\n }\n\n // Put the tag where it belongs\n if (!parentTag) {\n tags.push(tag);\n } else {\n if (!parentTag.subTags) {\n parentTag.subTags = [tag];\n } else {\n parentTag.subTags.push(tag);\n }\n }\n};\n"]}
@@ -21,6 +21,8 @@ import { getPage } from './selectors/baseSelectors';
21
21
  /* @conditional-compile-remove(rooms) */
22
22
  import { getRole } from './selectors/baseSelectors';
23
23
  import { LobbyPage } from './pages/LobbyPage';
24
+ /* @conditional-compile-remove(call-transfer) */
25
+ import { TransferPage } from './pages/TransferPage';
24
26
  import { mainScreenContainerStyleDesktop, mainScreenContainerStyleMobile } from './styles/CallComposite.styles';
25
27
  /* @conditional-compile-remove(rooms) */
26
28
  import { _PermissionsProvider, _getPermissions } from "../../../../react-components/src";
@@ -98,6 +100,10 @@ const MainScreen = (props) => {
98
100
  case 'lobby':
99
101
  pageElement = (React.createElement(LobbyPage, { mobileView: props.mobileView, modalLayerHostId: props.modalLayerHostId, options: props.options, updateSidePaneRenderer: setSidePaneRenderer, mobileChatTabHeader: props.mobileChatTabHeader }));
100
102
  break;
103
+ /* @conditional-compile-remove(call-transfer) */
104
+ case 'transferring':
105
+ pageElement = (React.createElement(TransferPage, { mobileView: props.mobileView, modalLayerHostId: props.modalLayerHostId, options: props.options, updateSidePaneRenderer: setSidePaneRenderer, mobileChatTabHeader: props.mobileChatTabHeader, onRenderAvatar: onRenderAvatar, onFetchAvatarPersonaData: onFetchAvatarPersonaData }));
106
+ break;
101
107
  case 'call':
102
108
  pageElement = (React.createElement(CallPage, { onRenderAvatar: onRenderAvatar, callInvitationURL: callInvitationUrl, onFetchAvatarPersonaData: onFetchAvatarPersonaData, onFetchParticipantMenuItems: onFetchParticipantMenuItems, mobileView: props.mobileView, modalLayerHostId: props.modalLayerHostId, options: props.options, updateSidePaneRenderer: setSidePaneRenderer, mobileChatTabHeader: props.mobileChatTabHeader }));
103
109
  break;
@@ -1 +1 @@
1
- {"version":3,"file":"CallComposite.js","sourceRoot":"","sources":["../../../../../../../react-composites/src/composites/CallComposite/CallComposite.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { _isInCall } from '@internal/calling-component-bindings';\nimport { OnRenderAvatarCallback, ParticipantMenuItemsCallback } from '@internal/react-components';\nimport React, { useEffect, useMemo, useRef } from 'react';\nimport { AvatarPersonaDataCallback } from '../common/AvatarPersona';\nimport { BaseProvider, BaseCompositeProps } from '../common/BaseComposite';\nimport { CallCompositeIcons } from '../common/icons';\nimport { useLocale } from '../localization';\nimport { CommonCallAdapter } from './adapter/CallAdapter';\nimport { CallAdapterProvider, useAdapter } from './adapter/CallAdapterProvider';\nimport { CallPage } from './pages/CallPage';\nimport { ConfigurationPage } from './pages/ConfigurationPage';\nimport { NoticePage } from './pages/NoticePage';\nimport { useSelector } from './hooks/useSelector';\nimport { getPage } from './selectors/baseSelectors';\n/* @conditional-compile-remove(rooms) */\nimport { getRole } from './selectors/baseSelectors';\nimport { LobbyPage } from './pages/LobbyPage';\nimport { mainScreenContainerStyleDesktop, mainScreenContainerStyleMobile } from './styles/CallComposite.styles';\nimport { CallControlOptions } from './types/CallControlOptions';\n\n/* @conditional-compile-remove(rooms) */\nimport { _PermissionsProvider, Role, _getPermissions } from '@internal/react-components';\n/* @conditional-compile-remove(one-to-n-calling) @conditional-compile-remove(PSTN-calls) */\nimport { LayerHost, mergeStyles } from '@fluentui/react';\n/* @conditional-compile-remove(one-to-n-calling) @conditional-compile-remove(PSTN-calls) */\nimport { modalLayerHostStyle } from '../common/styles/ModalLocalAndRemotePIP.styles';\nimport { useId } from '@fluentui/react-hooks';\n/* @conditional-compile-remove(one-to-n-calling) */ /* @conditional-compile-remove(PSTN-calls) */\nimport { HoldPage } from './pages/HoldPage';\n/* @conditional-compile-remove(unsupported-browser) */\nimport { UnsupportedBrowserPage } from './pages/UnsupportedBrowser';\nimport { PermissionConstraints } from '@azure/communication-calling';\nimport { MobileChatSidePaneTabHeaderProps } from '../common/TabHeader';\nimport { InjectedSidePaneProps, SidePaneProvider, SidePaneRenderer } from './components/SidePane/SidePaneProvider';\n\n/**\n * Props for {@link CallComposite}.\n *\n * @public\n */\nexport interface CallCompositeProps extends BaseCompositeProps<CallCompositeIcons> {\n /**\n * An adapter provides logic and data to the composite.\n * Composite can also be controlled using the adapter.\n */\n adapter: CommonCallAdapter;\n /**\n * Optimizes the composite form factor for either desktop or mobile.\n * @remarks `mobile` is currently only optimized for Portrait mode on mobile devices and does not support landscape.\n * @defaultValue 'desktop'\n */\n formFactor?: 'desktop' | 'mobile';\n /**\n * URL to invite new participants to the current call. If this is supplied, a button appears in the Participants\n * Button flyout menu.\n */\n callInvitationUrl?: string;\n /**\n * Flags to enable/disable or customize UI elements of the {@link CallComposite}.\n */\n options?: CallCompositeOptions;\n}\n\n/* @conditional-compile-remove(call-readiness) */\n/**\n * Device Checks.\n * Choose whether or not to block starting a call depending on camera and microphone permission options.\n *\n * @beta\n */\nexport interface DeviceCheckOptions {\n /**\n * Camera Permission prompts for your call.\n * 'required' - requires the permission to be allowed before permitting the user join the call.\n * 'optional' - permission can be disallowed and the user is still permitted to join the call.\n * 'doNotPrompt' - permission is not required and the user is not prompted to allow the permission.\n */\n camera: 'required' | 'optional' | 'doNotPrompt';\n /**\n * Microphone permission prompts for your call.\n * 'required' - requires the permission to be allowed before permitting the user join the call.\n * 'optional' - permission can be disallowed and the user is still permitted to join the call.\n * 'doNotPrompt' - permission is not required and the user is not prompted to allow the permission.\n */\n microphone: 'required' | 'optional' | 'doNotPrompt';\n}\n\n/* @conditional-compile-remove(pinned-participants) */\n/**\n * Menu options for remote video tiles in {@link VideoGallery}.\n *\n * @beta\n */\nexport interface RemoteVideoTileMenuOptions {\n /**\n * If set to true, remote video tiles in the VideoGallery will not have menu options\n *\n * @defaultValue false\n */\n isHidden?: boolean;\n}\n\n/* @conditional-compile-remove(click-to-call) */\n/**\n * Options for the local video tile in the Call composite.\n *\n * @beta\n */\nexport interface LocalVideoTileOptions {\n /**\n * Position of the local video tile. If unset will render the local tile in the floating local position.\n *\n * @defaultValue 'floating'\n * @remarks 'grid' - local video tile will be rendered in the grid view of the videoGallery.\n * 'floating' - local video tile will be rendered in the floating position and will observe overflow gallery\n * local video tile rules and be docked in the bottom corner.\n * 'hidden' - local video tile will not be rendered.\n * This does not affect the Configuration screen or the side pane Picture in Picture in Picture view.\n */\n position?: 'grid' | 'floating' | 'hidden';\n}\n/**\n * Optional features of the {@link CallComposite}.\n *\n * @public\n */\nexport type CallCompositeOptions = {\n /**\n * Surface Azure Communication Services backend errors in the UI with {@link @azure/communication-react#ErrorBar}.\n * Hide or show the error bar.\n * @defaultValue true\n */\n errorBar?: boolean;\n /**\n * Hide or Customize the control bar element.\n * Can be customized by providing an object of type {@link @azure/communication-react#CallControlOptions}.\n * @defaultValue true\n */\n callControls?: boolean | CallControlOptions;\n /* @conditional-compile-remove(call-readiness) */\n /**\n * Device permissions check options for your call.\n * Here you can choose what device permissions you prompt the user for,\n * as well as what device permissions must be accepted before starting a call.\n */\n deviceChecks?: DeviceCheckOptions;\n /* @conditional-compile-remove(call-readiness) */\n /**\n * Callback you may provide to supply users with further steps to troubleshoot why they have been\n * unable to grant your site the required permissions for the call.\n *\n * @example\n * ```ts\n * onPermissionsTroubleshootingClick: () =>\n * window.open('https://contoso.com/permissions-troubleshooting', '_blank');\n * ```\n *\n * @remarks\n * if this is not supplied, the composite will not show a 'further troubleshooting' link.\n */\n onPermissionsTroubleshootingClick?: (permissionsState: {\n camera: PermissionState;\n microphone: PermissionState;\n }) => void;\n /* @conditional-compile-remove(call-readiness) */\n /**\n * Callback you may provide to supply users with further steps to troubleshoot why they have been\n * having network issues when connecting to the call.\n *\n * @example\n * ```ts\n * onNetworkingTroubleShootingClick?: () =>\n * window.open('https://contoso.com/network-troubleshooting', '_blank');\n * ```\n *\n * @remarks\n * if this is not supplied, the composite will not show a 'network troubleshooting' link.\n */\n onNetworkingTroubleShootingClick?: () => void;\n /* @conditional-compile-remove(unsupported-browser) */\n /**\n * Callback you may provide to supply users with a provided page to showcase supported browsers by ACS.\n *\n * @example\n * ```ts\n * onBrowserTroubleShootingClick?: () =>\n * window.open('https://contoso.com/browser-troubleshooting', '_blank');\n * ```\n *\n * @remarks\n * if this is not supplied, the composite will not show a unsupported browser page.\n */\n onEnvironmentInfoTroubleshootingClick?: () => void;\n /* @conditional-compile-remove(pinned-participants) */\n /**\n * Remote participant video tile menu options\n */\n remoteVideoTileMenu?: RemoteVideoTileMenuOptions;\n /* @conditional-compile-remove(click-to-call) */\n /**\n * Options for controlling the local video tile.\n */\n localVideoTileOptions?: LocalVideoTileOptions;\n};\n\ntype MainScreenProps = {\n mobileView: boolean;\n modalLayerHostId: string;\n onRenderAvatar?: OnRenderAvatarCallback;\n callInvitationUrl?: string;\n onFetchAvatarPersonaData?: AvatarPersonaDataCallback;\n onFetchParticipantMenuItems?: ParticipantMenuItemsCallback;\n options?: CallCompositeOptions;\n /* @conditional-compile-remove(rooms) */\n roleHint?: Role;\n overrideSidePane?: InjectedSidePaneProps;\n onSidePaneIdChange?: (sidePaneId: string | undefined) => void;\n mobileChatTabHeader?: MobileChatSidePaneTabHeaderProps;\n};\n\nconst isShowing = (overrideSidePane?: InjectedSidePaneProps): boolean => {\n return !!overrideSidePane?.isActive;\n};\n\nconst MainScreen = (props: MainScreenProps): JSX.Element => {\n const { callInvitationUrl, onRenderAvatar, onFetchAvatarPersonaData, onFetchParticipantMenuItems } = props;\n const page = useSelector(getPage);\n\n const [sidePaneRenderer, setSidePaneRenderer] = React.useState<SidePaneRenderer | undefined>();\n const [injectedSidePaneProps, setInjectedSidePaneProps] = React.useState<InjectedSidePaneProps>();\n\n const overridePropsRef = useRef<InjectedSidePaneProps | undefined>(props.overrideSidePane);\n useEffect(() => {\n setInjectedSidePaneProps(props.overrideSidePane);\n // When the injected side pane is opened, clear the previous side pane active state.\n // this ensures when the injected side pane is \"closed\", the previous side pane is not \"re-opened\".\n if (!isShowing(overridePropsRef.current) && isShowing(props.overrideSidePane)) {\n setSidePaneRenderer(undefined);\n }\n overridePropsRef.current = props.overrideSidePane;\n }, [props.overrideSidePane]);\n\n const onSidePaneIdChange = props.onSidePaneIdChange;\n useEffect(() => {\n onSidePaneIdChange?.(sidePaneRenderer?.id);\n }, [sidePaneRenderer?.id, onSidePaneIdChange]);\n\n const adapter = useAdapter();\n const locale = useLocale();\n\n /* @conditional-compile-remove(rooms) */\n const role = useSelector(getRole);\n\n let pageElement: JSX.Element | undefined;\n /* @conditional-compile-remove(rooms) */\n switch (page) {\n case 'roomNotFound':\n pageElement = (\n <NoticePage\n iconName=\"NoticePageInvalidRoom\"\n title={locale.strings.call.roomNotFoundTitle}\n moreDetails={locale.strings.call.roomNotFoundDetails}\n dataUiId={'room-not-found-page'}\n />\n );\n break;\n case 'deniedPermissionToRoom':\n pageElement = (\n <NoticePage\n iconName=\"NoticePageInvalidRoom\"\n title={locale.strings.call.deniedPermissionToRoomTitle}\n moreDetails={locale.strings.call.deniedPermissionToRoomDetails}\n dataUiId={'not-invited-to-room-page'}\n />\n );\n break;\n }\n switch (page) {\n case 'configuration':\n pageElement = (\n <ConfigurationPage\n mobileView={props.mobileView}\n startCallHandler={(): void => {\n adapter.joinCall();\n }}\n updateSidePaneRenderer={setSidePaneRenderer}\n modalLayerHostId={props.modalLayerHostId}\n /* @conditional-compile-remove(call-readiness) */\n deviceChecks={props.options?.deviceChecks}\n /* @conditional-compile-remove(call-readiness) */\n onPermissionsTroubleshootingClick={props.options?.onPermissionsTroubleshootingClick}\n /* @conditional-compile-remove(call-readiness) */\n onNetworkingTroubleShootingClick={props.options?.onNetworkingTroubleShootingClick}\n />\n );\n break;\n case 'accessDeniedTeamsMeeting':\n pageElement = (\n <NoticePage\n iconName=\"NoticePageAccessDeniedTeamsMeeting\"\n title={locale.strings.call.failedToJoinTeamsMeetingReasonAccessDeniedTitle}\n moreDetails={locale.strings.call.failedToJoinTeamsMeetingReasonAccessDeniedMoreDetails}\n dataUiId={'access-denied-teams-meeting-page'}\n />\n );\n break;\n case 'removedFromCall':\n pageElement = (\n <NoticePage\n iconName=\"NoticePageRemovedFromCall\"\n title={locale.strings.call.removedFromCallTitle}\n moreDetails={locale.strings.call.removedFromCallMoreDetails}\n dataUiId={'removed-from-call-page'}\n />\n );\n break;\n case 'joinCallFailedDueToNoNetwork':\n pageElement = (\n <NoticePage\n iconName=\"NoticePageJoinCallFailedDueToNoNetwork\"\n title={locale.strings.call.failedToJoinCallDueToNoNetworkTitle}\n moreDetails={locale.strings.call.failedToJoinCallDueToNoNetworkMoreDetails}\n dataUiId={'join-call-failed-due-to-no-network-page'}\n />\n );\n break;\n case 'leftCall':\n pageElement = (\n <NoticePage\n iconName=\"NoticePageLeftCall\"\n title={locale.strings.call.leftCallTitle}\n moreDetails={locale.strings.call.leftCallMoreDetails}\n dataUiId={'left-call-page'}\n />\n );\n break;\n case 'lobby':\n pageElement = (\n <LobbyPage\n mobileView={props.mobileView}\n modalLayerHostId={props.modalLayerHostId}\n options={props.options}\n updateSidePaneRenderer={setSidePaneRenderer}\n mobileChatTabHeader={props.mobileChatTabHeader}\n />\n );\n break;\n case 'call':\n pageElement = (\n <CallPage\n onRenderAvatar={onRenderAvatar}\n callInvitationURL={callInvitationUrl}\n onFetchAvatarPersonaData={onFetchAvatarPersonaData}\n onFetchParticipantMenuItems={onFetchParticipantMenuItems}\n mobileView={props.mobileView}\n modalLayerHostId={props.modalLayerHostId}\n options={props.options}\n updateSidePaneRenderer={setSidePaneRenderer}\n mobileChatTabHeader={props.mobileChatTabHeader}\n />\n );\n break;\n /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */\n case 'hold':\n pageElement = (\n <>\n {\n <HoldPage\n mobileView={props.mobileView}\n modalLayerHostId={props.modalLayerHostId}\n options={props.options}\n updateSidePaneRenderer={setSidePaneRenderer}\n mobileChatTabHeader={props.mobileChatTabHeader}\n />\n }\n </>\n );\n break;\n }\n\n /* @conditional-compile-remove(unsupported-browser) */\n switch (page) {\n case 'unsupportedEnvironment':\n pageElement = (\n <>\n {\n /* @conditional-compile-remove(unsupported-browser) */\n <UnsupportedBrowserPage\n onTroubleshootingClick={props.options?.onEnvironmentInfoTroubleshootingClick}\n environmentInfo={adapter.getState().environmentInfo}\n />\n }\n </>\n );\n break;\n }\n\n if (!pageElement) {\n throw new Error('Invalid call composite page');\n }\n\n /* @conditional-compile-remove(rooms) */\n const permissions = _getPermissions(role === 'Unknown' || role === undefined ? props.roleHint : role);\n\n // default retElement for stable version\n let retElement = pageElement;\n /* @conditional-compile-remove(rooms) */\n retElement = <_PermissionsProvider permissions={permissions}>{pageElement}</_PermissionsProvider>;\n\n return (\n <SidePaneProvider sidePaneRenderer={sidePaneRenderer} overrideSidePane={injectedSidePaneProps}>\n {retElement}\n </SidePaneProvider>\n );\n};\n\n/**\n * A customizable UI composite for calling experience.\n *\n * @remarks Call composite min width/height are as follow:\n * - mobile: 17.5rem x 21rem (280px x 336px, with default rem at 16px)\n * - desktop: 30rem x 22rem (480px x 352px, with default rem at 16px)\n *\n * @public\n */\nexport const CallComposite = (props: CallCompositeProps): JSX.Element => <CallCompositeInner {...props} />;\n\n/**\n * @private\n */\nexport interface InternalCallCompositeProps {\n overrideSidePane?: InjectedSidePaneProps;\n onSidePaneIdChange?: (sidePaneId: string | undefined) => void;\n\n // legacy property to avoid breaking change\n mobileChatTabHeader?: MobileChatSidePaneTabHeaderProps;\n}\n\n/** @private */\nexport const CallCompositeInner = (props: CallCompositeProps & InternalCallCompositeProps): JSX.Element => {\n const {\n adapter,\n callInvitationUrl,\n onFetchAvatarPersonaData,\n onFetchParticipantMenuItems,\n options,\n formFactor = 'desktop'\n } = props;\n\n /* @conditional-compile-remove(rooms) */\n const roleHint = adapter.getState().roleHint;\n\n useEffect(() => {\n (async () => {\n const constrain = getQueryOptions({\n /* @conditional-compile-remove(rooms) */ role: roleHint\n });\n await adapter.askDevicePermission(constrain);\n adapter.queryCameras();\n adapter.queryMicrophones();\n adapter.querySpeakers();\n })();\n }, [adapter, /* @conditional-compile-remove(rooms) */ roleHint]);\n\n const mobileView = formFactor === 'mobile';\n\n const modalLayerHostId = useId('modalLayerhost');\n\n const mainScreenContainerClassName = useMemo(() => {\n return mobileView ? mainScreenContainerStyleMobile : mainScreenContainerStyleDesktop;\n }, [mobileView]);\n\n return (\n <div className={mainScreenContainerClassName}>\n <BaseProvider {...props}>\n <CallAdapterProvider adapter={adapter}>\n <MainScreen\n callInvitationUrl={callInvitationUrl}\n onFetchAvatarPersonaData={onFetchAvatarPersonaData}\n onFetchParticipantMenuItems={onFetchParticipantMenuItems}\n mobileView={mobileView}\n modalLayerHostId={modalLayerHostId}\n options={options}\n /* @conditional-compile-remove(rooms) */\n roleHint={roleHint}\n onSidePaneIdChange={props.onSidePaneIdChange}\n overrideSidePane={props.overrideSidePane}\n mobileChatTabHeader={props.mobileChatTabHeader}\n />\n {\n // This layer host is for ModalLocalAndRemotePIP in SidePane. This LayerHost cannot be inside the SidePane\n // because when the SidePane is hidden, ie. style property display is 'none', it takes up no space. This causes problems when dragging\n // the Modal because the draggable bounds thinks it has no space and will always return to its initial position after dragging.\n // Additionally, this layer host cannot be in the Call Arrangement as it needs to be rendered before useMinMaxDragPosition() in\n // common/utils useRef is called.\n // Warning: this is fragile and works because the call arrangement page is only rendered after the call has connected and thus this\n // LayerHost will be guaranteed to have rendered (and subsequently mounted in the DOM). This ensures the DOM element will be available\n // before the call to `document.getElementById(modalLayerHostId)` is made.\n /* @conditional-compile-remove(one-to-n-calling) @conditional-compile-remove(PSTN-calls) @conditional-compile-remove(call-readiness) */\n <LayerHost id={modalLayerHostId} className={mergeStyles(modalLayerHostStyle)} />\n }\n </CallAdapterProvider>\n </BaseProvider>\n </div>\n );\n};\n\nconst getQueryOptions = (options: { /* @conditional-compile-remove(rooms) */ role?: Role }): PermissionConstraints => {\n /* @conditional-compile-remove(rooms) */\n if (options.role === 'Consumer') {\n return {\n video: false,\n audio: true\n };\n }\n return { video: true, audio: true };\n};\n\"../../../../calling-component-bindings/src\"\"../../../../react-components/src\""]}
1
+ {"version":3,"file":"CallComposite.js","sourceRoot":"","sources":["../../../../../../../react-composites/src/composites/CallComposite/CallComposite.tsx"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;;;;;;;;;;AAIlC,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAE1D,OAAO,EAAE,YAAY,EAAsB,MAAM,yBAAyB,CAAC;AAE3E,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAChF,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACpD,wCAAwC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,gDAAgD;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,+BAA+B,EAAE,8BAA8B,EAAE,MAAM,+BAA+B,CAAC;AAGhH,wCAAwC;AACxC,OAAO,EAAE,oBAAoB,EAAQ,eAAe,EAAE,yCAAmC;AACzF,2FAA2F;AAC3F,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACzD,2FAA2F;AAC3F,OAAO,EAAE,mBAAmB,EAAE,MAAM,gDAAgD,CAAC;AACrF,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,mDAAmD,CAAC,6CAA6C;AACjG,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,sDAAsD;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAGpE,OAAO,EAAyB,gBAAgB,EAAoB,MAAM,wCAAwC,CAAC;AA2LnH,MAAM,SAAS,GAAG,CAAC,gBAAwC,EAAW,EAAE;IACtE,OAAO,CAAC,CAAC,CAAA,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,QAAQ,CAAA,CAAC;AACtC,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,KAAsB,EAAe,EAAE;;IACzD,MAAM,EAAE,iBAAiB,EAAE,cAAc,EAAE,wBAAwB,EAAE,2BAA2B,EAAE,GAAG,KAAK,CAAC;IAC3G,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IAElC,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAgC,CAAC;IAC/F,MAAM,CAAC,qBAAqB,EAAE,wBAAwB,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAyB,CAAC;IAElG,MAAM,gBAAgB,GAAG,MAAM,CAAoC,KAAK,CAAC,gBAAgB,CAAC,CAAC;IAC3F,SAAS,CAAC,GAAG,EAAE;QACb,wBAAwB,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;QACjD,oFAAoF;QACpF,mGAAmG;QACnG,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE;YAC7E,mBAAmB,CAAC,SAAS,CAAC,CAAC;SAChC;QACD,gBAAgB,CAAC,OAAO,GAAG,KAAK,CAAC,gBAAgB,CAAC;IACpD,CAAC,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAE7B,MAAM,kBAAkB,GAAG,KAAK,CAAC,kBAAkB,CAAC;IACpD,SAAS,CAAC,GAAG,EAAE;QACb,kBAAkB,aAAlB,kBAAkB,uBAAlB,kBAAkB,CAAG,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,EAAE,CAAC,CAAC;IAC7C,CAAC,EAAE,CAAC,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,EAAE,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAE/C,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAE3B,wCAAwC;IACxC,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IAElC,IAAI,WAAoC,CAAC;IACzC,wCAAwC;IACxC,QAAQ,IAAI,EAAE;QACZ,KAAK,cAAc;YACjB,WAAW,GAAG,CACZ,oBAAC,UAAU,IACT,QAAQ,EAAC,uBAAuB,EAChC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAC5C,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,mBAAmB,EACpD,QAAQ,EAAE,qBAAqB,GAC/B,CACH,CAAC;YACF,MAAM;QACR,KAAK,wBAAwB;YAC3B,WAAW,GAAG,CACZ,oBAAC,UAAU,IACT,QAAQ,EAAC,uBAAuB,EAChC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,2BAA2B,EACtD,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,6BAA6B,EAC9D,QAAQ,EAAE,0BAA0B,GACpC,CACH,CAAC;YACF,MAAM;KACT;IACD,QAAQ,IAAI,EAAE;QACZ,KAAK,eAAe;YAClB,WAAW,GAAG,CACZ,oBAAC,iBAAiB,IAChB,UAAU,EAAE,KAAK,CAAC,UAAU,EAC5B,gBAAgB,EAAE,GAAS,EAAE;oBAC3B,OAAO,CAAC,QAAQ,EAAE,CAAC;gBACrB,CAAC,EACD,sBAAsB,EAAE,mBAAmB,EAC3C,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;gBACxC,iDAAiD;gBACjD,YAAY,EAAE,MAAA,KAAK,CAAC,OAAO,0CAAE,YAAY;gBACzC,iDAAiD;gBACjD,iCAAiC,EAAE,MAAA,KAAK,CAAC,OAAO,0CAAE,iCAAiC;gBACnF,iDAAiD;gBACjD,gCAAgC,EAAE,MAAA,KAAK,CAAC,OAAO,0CAAE,gCAAgC,GACjF,CACH,CAAC;YACF,MAAM;QACR,KAAK,0BAA0B;YAC7B,WAAW,GAAG,CACZ,oBAAC,UAAU,IACT,QAAQ,EAAC,oCAAoC,EAC7C,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,+CAA+C,EAC1E,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,qDAAqD,EACtF,QAAQ,EAAE,kCAAkC,GAC5C,CACH,CAAC;YACF,MAAM;QACR,KAAK,iBAAiB;YACpB,WAAW,GAAG,CACZ,oBAAC,UAAU,IACT,QAAQ,EAAC,2BAA2B,EACpC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,oBAAoB,EAC/C,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,0BAA0B,EAC3D,QAAQ,EAAE,wBAAwB,GAClC,CACH,CAAC;YACF,MAAM;QACR,KAAK,8BAA8B;YACjC,WAAW,GAAG,CACZ,oBAAC,UAAU,IACT,QAAQ,EAAC,wCAAwC,EACjD,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,mCAAmC,EAC9D,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,yCAAyC,EAC1E,QAAQ,EAAE,yCAAyC,GACnD,CACH,CAAC;YACF,MAAM;QACR,KAAK,UAAU;YACb,WAAW,GAAG,CACZ,oBAAC,UAAU,IACT,QAAQ,EAAC,oBAAoB,EAC7B,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,EACxC,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,mBAAmB,EACpD,QAAQ,EAAE,gBAAgB,GAC1B,CACH,CAAC;YACF,MAAM;QACR,KAAK,OAAO;YACV,WAAW,GAAG,CACZ,oBAAC,SAAS,IACR,UAAU,EAAE,KAAK,CAAC,UAAU,EAC5B,gBAAgB,EAAE,KAAK,CAAC,gBAAgB,EACxC,OAAO,EAAE,KAAK,CAAC,OAAO,EACtB,sBAAsB,EAAE,mBAAmB,EAC3C,mBAAmB,EAAE,KAAK,CAAC,mBAAmB,GAC9C,CACH,CAAC;YACF,MAAM;QACR,gDAAgD;QAChD,KAAK,cAAc;YACjB,WAAW,GAAG,CACZ,oBAAC,YAAY,IACX,UAAU,EAAE,KAAK,CAAC,UAAU,EAC5B,gBAAgB,EAAE,KAAK,CAAC,gBAAgB,EACxC,OAAO,EAAE,KAAK,CAAC,OAAO,EACtB,sBAAsB,EAAE,mBAAmB,EAC3C,mBAAmB,EAAE,KAAK,CAAC,mBAAmB,EAC9C,cAAc,EAAE,cAAc,EAC9B,wBAAwB,EAAE,wBAAwB,GAClD,CACH,CAAC;YACF,MAAM;QACR,KAAK,MAAM;YACT,WAAW,GAAG,CACZ,oBAAC,QAAQ,IACP,cAAc,EAAE,cAAc,EAC9B,iBAAiB,EAAE,iBAAiB,EACpC,wBAAwB,EAAE,wBAAwB,EAClD,2BAA2B,EAAE,2BAA2B,EACxD,UAAU,EAAE,KAAK,CAAC,UAAU,EAC5B,gBAAgB,EAAE,KAAK,CAAC,gBAAgB,EACxC,OAAO,EAAE,KAAK,CAAC,OAAO,EACtB,sBAAsB,EAAE,mBAAmB,EAC3C,mBAAmB,EAAE,KAAK,CAAC,mBAAmB,GAC9C,CACH,CAAC;YACF,MAAM;QACR,6CAA6C,CAAC,mDAAmD;QACjG,KAAK,MAAM;YACT,WAAW,GAAG,CACZ,0CAEI,oBAAC,QAAQ,IACP,UAAU,EAAE,KAAK,CAAC,UAAU,EAC5B,gBAAgB,EAAE,KAAK,CAAC,gBAAgB,EACxC,OAAO,EAAE,KAAK,CAAC,OAAO,EACtB,sBAAsB,EAAE,mBAAmB,EAC3C,mBAAmB,EAAE,KAAK,CAAC,mBAAmB,GAC9C,CAEH,CACJ,CAAC;YACF,MAAM;KACT;IAED,sDAAsD;IACtD,QAAQ,IAAI,EAAE;QACZ,KAAK,wBAAwB;YAC3B,WAAW,GAAG,CACZ;YAEI,sDAAsD;YACtD,oBAAC,sBAAsB,IACrB,sBAAsB,EAAE,MAAA,KAAK,CAAC,OAAO,0CAAE,qCAAqC,EAC5E,eAAe,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,eAAe,GACnD,CAEH,CACJ,CAAC;YACF,MAAM;KACT;IAED,IAAI,CAAC,WAAW,EAAE;QAChB,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;KAChD;IAED,wCAAwC;IACxC,MAAM,WAAW,GAAG,eAAe,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAEtG,wCAAwC;IACxC,IAAI,UAAU,GAAG,WAAW,CAAC;IAC7B,wCAAwC;IACxC,UAAU,GAAG,oBAAC,oBAAoB,IAAC,WAAW,EAAE,WAAW,IAAG,WAAW,CAAwB,CAAC;IAElG,OAAO,CACL,oBAAC,gBAAgB,IAAC,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,qBAAqB,IAC1F,UAAU,CACM,CACpB,CAAC;AACJ,CAAC,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,KAAyB,EAAe,EAAE,CAAC,oBAAC,kBAAkB,oBAAK,KAAK,EAAI,CAAC;AAa3G,eAAe;AACf,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,KAAsD,EAAe,EAAE;IACxG,MAAM,EACJ,OAAO,EACP,iBAAiB,EACjB,wBAAwB,EACxB,2BAA2B,EAC3B,OAAO,EACP,UAAU,GAAG,SAAS,EACvB,GAAG,KAAK,CAAC;IAEV,wCAAwC;IACxC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC;IAE7C,SAAS,CAAC,GAAG,EAAE;QACb,CAAC,GAAS,EAAE;YACV,MAAM,SAAS,GAAG,eAAe,CAAC;gBAChC,wCAAwC,CAAC,IAAI,EAAE,QAAQ;aACxD,CAAC,CAAC;YACH,MAAM,OAAO,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;YAC7C,OAAO,CAAC,YAAY,EAAE,CAAC;YACvB,OAAO,CAAC,gBAAgB,EAAE,CAAC;YAC3B,OAAO,CAAC,aAAa,EAAE,CAAC;QAC1B,CAAC,CAAA,CAAC,EAAE,CAAC;IACP,CAAC,EAAE,CAAC,OAAO,EAAE,wCAAwC,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEjE,MAAM,UAAU,GAAG,UAAU,KAAK,QAAQ,CAAC;IAE3C,MAAM,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,CAAC,CAAC;IAEjD,MAAM,4BAA4B,GAAG,OAAO,CAAC,GAAG,EAAE;QAChD,OAAO,UAAU,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAC,+BAA+B,CAAC;IACvF,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;IAEjB,OAAO,CACL,6BAAK,SAAS,EAAE,4BAA4B;QAC1C,oBAAC,YAAY,oBAAK,KAAK;YACrB,oBAAC,mBAAmB,IAAC,OAAO,EAAE,OAAO;gBACnC,oBAAC,UAAU,IACT,iBAAiB,EAAE,iBAAiB,EACpC,wBAAwB,EAAE,wBAAwB,EAClD,2BAA2B,EAAE,2BAA2B,EACxD,UAAU,EAAE,UAAU,EACtB,gBAAgB,EAAE,gBAAgB,EAClC,OAAO,EAAE,OAAO;oBAChB,wCAAwC;oBACxC,QAAQ,EAAE,QAAQ,EAClB,kBAAkB,EAAE,KAAK,CAAC,kBAAkB,EAC5C,gBAAgB,EAAE,KAAK,CAAC,gBAAgB,EACxC,mBAAmB,EAAE,KAAK,CAAC,mBAAmB,GAC9C;gBAEA,0GAA0G;gBAC1G,sIAAsI;gBACtI,+HAA+H;gBAC/H,+HAA+H;gBAC/H,iCAAiC;gBACjC,mIAAmI;gBACnI,sIAAsI;gBACtI,0EAA0E;gBAC1E,uIAAuI;gBACvI,oBAAC,SAAS,IAAC,EAAE,EAAE,gBAAgB,EAAE,SAAS,EAAE,WAAW,CAAC,mBAAmB,CAAC,GAAI,CAE9D,CACT,CACX,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,OAAiE,EAAyB,EAAE;IACnH,wCAAwC;IACxC,IAAI,OAAO,CAAC,IAAI,KAAK,UAAU,EAAE;QAC/B,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,IAAI;SACZ,CAAC;KACH;IACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACtC,CAAC,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { _isInCall } from '@internal/calling-component-bindings';\nimport { OnRenderAvatarCallback, ParticipantMenuItemsCallback } from '@internal/react-components';\nimport React, { useEffect, useMemo, useRef } from 'react';\nimport { AvatarPersonaDataCallback } from '../common/AvatarPersona';\nimport { BaseProvider, BaseCompositeProps } from '../common/BaseComposite';\nimport { CallCompositeIcons } from '../common/icons';\nimport { useLocale } from '../localization';\nimport { CommonCallAdapter } from './adapter/CallAdapter';\nimport { CallAdapterProvider, useAdapter } from './adapter/CallAdapterProvider';\nimport { CallPage } from './pages/CallPage';\nimport { ConfigurationPage } from './pages/ConfigurationPage';\nimport { NoticePage } from './pages/NoticePage';\nimport { useSelector } from './hooks/useSelector';\nimport { getPage } from './selectors/baseSelectors';\n/* @conditional-compile-remove(rooms) */\nimport { getRole } from './selectors/baseSelectors';\nimport { LobbyPage } from './pages/LobbyPage';\n/* @conditional-compile-remove(call-transfer) */\nimport { TransferPage } from './pages/TransferPage';\nimport { mainScreenContainerStyleDesktop, mainScreenContainerStyleMobile } from './styles/CallComposite.styles';\nimport { CallControlOptions } from './types/CallControlOptions';\n\n/* @conditional-compile-remove(rooms) */\nimport { _PermissionsProvider, Role, _getPermissions } from '@internal/react-components';\n/* @conditional-compile-remove(one-to-n-calling) @conditional-compile-remove(PSTN-calls) */\nimport { LayerHost, mergeStyles } from '@fluentui/react';\n/* @conditional-compile-remove(one-to-n-calling) @conditional-compile-remove(PSTN-calls) */\nimport { modalLayerHostStyle } from '../common/styles/ModalLocalAndRemotePIP.styles';\nimport { useId } from '@fluentui/react-hooks';\n/* @conditional-compile-remove(one-to-n-calling) */ /* @conditional-compile-remove(PSTN-calls) */\nimport { HoldPage } from './pages/HoldPage';\n/* @conditional-compile-remove(unsupported-browser) */\nimport { UnsupportedBrowserPage } from './pages/UnsupportedBrowser';\nimport { PermissionConstraints } from '@azure/communication-calling';\nimport { MobileChatSidePaneTabHeaderProps } from '../common/TabHeader';\nimport { InjectedSidePaneProps, SidePaneProvider, SidePaneRenderer } from './components/SidePane/SidePaneProvider';\n\n/**\n * Props for {@link CallComposite}.\n *\n * @public\n */\nexport interface CallCompositeProps extends BaseCompositeProps<CallCompositeIcons> {\n /**\n * An adapter provides logic and data to the composite.\n * Composite can also be controlled using the adapter.\n */\n adapter: CommonCallAdapter;\n /**\n * Optimizes the composite form factor for either desktop or mobile.\n * @remarks `mobile` is currently only optimized for Portrait mode on mobile devices and does not support landscape.\n * @defaultValue 'desktop'\n */\n formFactor?: 'desktop' | 'mobile';\n /**\n * URL to invite new participants to the current call. If this is supplied, a button appears in the Participants\n * Button flyout menu.\n */\n callInvitationUrl?: string;\n /**\n * Flags to enable/disable or customize UI elements of the {@link CallComposite}.\n */\n options?: CallCompositeOptions;\n}\n\n/* @conditional-compile-remove(call-readiness) */\n/**\n * Device Checks.\n * Choose whether or not to block starting a call depending on camera and microphone permission options.\n *\n * @beta\n */\nexport interface DeviceCheckOptions {\n /**\n * Camera Permission prompts for your call.\n * 'required' - requires the permission to be allowed before permitting the user join the call.\n * 'optional' - permission can be disallowed and the user is still permitted to join the call.\n * 'doNotPrompt' - permission is not required and the user is not prompted to allow the permission.\n */\n camera: 'required' | 'optional' | 'doNotPrompt';\n /**\n * Microphone permission prompts for your call.\n * 'required' - requires the permission to be allowed before permitting the user join the call.\n * 'optional' - permission can be disallowed and the user is still permitted to join the call.\n * 'doNotPrompt' - permission is not required and the user is not prompted to allow the permission.\n */\n microphone: 'required' | 'optional' | 'doNotPrompt';\n}\n\n/* @conditional-compile-remove(pinned-participants) */\n/**\n * Menu options for remote video tiles in {@link VideoGallery}.\n *\n * @beta\n */\nexport interface RemoteVideoTileMenuOptions {\n /**\n * If set to true, remote video tiles in the VideoGallery will not have menu options\n *\n * @defaultValue false\n */\n isHidden?: boolean;\n}\n\n/* @conditional-compile-remove(click-to-call) */\n/**\n * Options for the local video tile in the Call composite.\n *\n * @beta\n */\nexport interface LocalVideoTileOptions {\n /**\n * Position of the local video tile. If unset will render the local tile in the floating local position.\n *\n * @defaultValue 'floating'\n * @remarks 'grid' - local video tile will be rendered in the grid view of the videoGallery.\n * 'floating' - local video tile will be rendered in the floating position and will observe overflow gallery\n * local video tile rules and be docked in the bottom corner.\n * 'hidden' - local video tile will not be rendered.\n * This does not affect the Configuration screen or the side pane Picture in Picture in Picture view.\n */\n position?: 'grid' | 'floating' | 'hidden';\n}\n/**\n * Optional features of the {@link CallComposite}.\n *\n * @public\n */\nexport type CallCompositeOptions = {\n /**\n * Surface Azure Communication Services backend errors in the UI with {@link @azure/communication-react#ErrorBar}.\n * Hide or show the error bar.\n * @defaultValue true\n */\n errorBar?: boolean;\n /**\n * Hide or Customize the control bar element.\n * Can be customized by providing an object of type {@link @azure/communication-react#CallControlOptions}.\n * @defaultValue true\n */\n callControls?: boolean | CallControlOptions;\n /* @conditional-compile-remove(call-readiness) */\n /**\n * Device permissions check options for your call.\n * Here you can choose what device permissions you prompt the user for,\n * as well as what device permissions must be accepted before starting a call.\n */\n deviceChecks?: DeviceCheckOptions;\n /* @conditional-compile-remove(call-readiness) */\n /**\n * Callback you may provide to supply users with further steps to troubleshoot why they have been\n * unable to grant your site the required permissions for the call.\n *\n * @example\n * ```ts\n * onPermissionsTroubleshootingClick: () =>\n * window.open('https://contoso.com/permissions-troubleshooting', '_blank');\n * ```\n *\n * @remarks\n * if this is not supplied, the composite will not show a 'further troubleshooting' link.\n */\n onPermissionsTroubleshootingClick?: (permissionsState: {\n camera: PermissionState;\n microphone: PermissionState;\n }) => void;\n /* @conditional-compile-remove(call-readiness) */\n /**\n * Callback you may provide to supply users with further steps to troubleshoot why they have been\n * having network issues when connecting to the call.\n *\n * @example\n * ```ts\n * onNetworkingTroubleShootingClick?: () =>\n * window.open('https://contoso.com/network-troubleshooting', '_blank');\n * ```\n *\n * @remarks\n * if this is not supplied, the composite will not show a 'network troubleshooting' link.\n */\n onNetworkingTroubleShootingClick?: () => void;\n /* @conditional-compile-remove(unsupported-browser) */\n /**\n * Callback you may provide to supply users with a provided page to showcase supported browsers by ACS.\n *\n * @example\n * ```ts\n * onBrowserTroubleShootingClick?: () =>\n * window.open('https://contoso.com/browser-troubleshooting', '_blank');\n * ```\n *\n * @remarks\n * if this is not supplied, the composite will not show a unsupported browser page.\n */\n onEnvironmentInfoTroubleshootingClick?: () => void;\n /* @conditional-compile-remove(pinned-participants) */\n /**\n * Remote participant video tile menu options\n */\n remoteVideoTileMenu?: RemoteVideoTileMenuOptions;\n /* @conditional-compile-remove(click-to-call) */\n /**\n * Options for controlling the local video tile.\n */\n localVideoTileOptions?: LocalVideoTileOptions;\n};\n\ntype MainScreenProps = {\n mobileView: boolean;\n modalLayerHostId: string;\n onRenderAvatar?: OnRenderAvatarCallback;\n callInvitationUrl?: string;\n onFetchAvatarPersonaData?: AvatarPersonaDataCallback;\n onFetchParticipantMenuItems?: ParticipantMenuItemsCallback;\n options?: CallCompositeOptions;\n /* @conditional-compile-remove(rooms) */\n roleHint?: Role;\n overrideSidePane?: InjectedSidePaneProps;\n onSidePaneIdChange?: (sidePaneId: string | undefined) => void;\n mobileChatTabHeader?: MobileChatSidePaneTabHeaderProps;\n};\n\nconst isShowing = (overrideSidePane?: InjectedSidePaneProps): boolean => {\n return !!overrideSidePane?.isActive;\n};\n\nconst MainScreen = (props: MainScreenProps): JSX.Element => {\n const { callInvitationUrl, onRenderAvatar, onFetchAvatarPersonaData, onFetchParticipantMenuItems } = props;\n const page = useSelector(getPage);\n\n const [sidePaneRenderer, setSidePaneRenderer] = React.useState<SidePaneRenderer | undefined>();\n const [injectedSidePaneProps, setInjectedSidePaneProps] = React.useState<InjectedSidePaneProps>();\n\n const overridePropsRef = useRef<InjectedSidePaneProps | undefined>(props.overrideSidePane);\n useEffect(() => {\n setInjectedSidePaneProps(props.overrideSidePane);\n // When the injected side pane is opened, clear the previous side pane active state.\n // this ensures when the injected side pane is \"closed\", the previous side pane is not \"re-opened\".\n if (!isShowing(overridePropsRef.current) && isShowing(props.overrideSidePane)) {\n setSidePaneRenderer(undefined);\n }\n overridePropsRef.current = props.overrideSidePane;\n }, [props.overrideSidePane]);\n\n const onSidePaneIdChange = props.onSidePaneIdChange;\n useEffect(() => {\n onSidePaneIdChange?.(sidePaneRenderer?.id);\n }, [sidePaneRenderer?.id, onSidePaneIdChange]);\n\n const adapter = useAdapter();\n const locale = useLocale();\n\n /* @conditional-compile-remove(rooms) */\n const role = useSelector(getRole);\n\n let pageElement: JSX.Element | undefined;\n /* @conditional-compile-remove(rooms) */\n switch (page) {\n case 'roomNotFound':\n pageElement = (\n <NoticePage\n iconName=\"NoticePageInvalidRoom\"\n title={locale.strings.call.roomNotFoundTitle}\n moreDetails={locale.strings.call.roomNotFoundDetails}\n dataUiId={'room-not-found-page'}\n />\n );\n break;\n case 'deniedPermissionToRoom':\n pageElement = (\n <NoticePage\n iconName=\"NoticePageInvalidRoom\"\n title={locale.strings.call.deniedPermissionToRoomTitle}\n moreDetails={locale.strings.call.deniedPermissionToRoomDetails}\n dataUiId={'not-invited-to-room-page'}\n />\n );\n break;\n }\n switch (page) {\n case 'configuration':\n pageElement = (\n <ConfigurationPage\n mobileView={props.mobileView}\n startCallHandler={(): void => {\n adapter.joinCall();\n }}\n updateSidePaneRenderer={setSidePaneRenderer}\n modalLayerHostId={props.modalLayerHostId}\n /* @conditional-compile-remove(call-readiness) */\n deviceChecks={props.options?.deviceChecks}\n /* @conditional-compile-remove(call-readiness) */\n onPermissionsTroubleshootingClick={props.options?.onPermissionsTroubleshootingClick}\n /* @conditional-compile-remove(call-readiness) */\n onNetworkingTroubleShootingClick={props.options?.onNetworkingTroubleShootingClick}\n />\n );\n break;\n case 'accessDeniedTeamsMeeting':\n pageElement = (\n <NoticePage\n iconName=\"NoticePageAccessDeniedTeamsMeeting\"\n title={locale.strings.call.failedToJoinTeamsMeetingReasonAccessDeniedTitle}\n moreDetails={locale.strings.call.failedToJoinTeamsMeetingReasonAccessDeniedMoreDetails}\n dataUiId={'access-denied-teams-meeting-page'}\n />\n );\n break;\n case 'removedFromCall':\n pageElement = (\n <NoticePage\n iconName=\"NoticePageRemovedFromCall\"\n title={locale.strings.call.removedFromCallTitle}\n moreDetails={locale.strings.call.removedFromCallMoreDetails}\n dataUiId={'removed-from-call-page'}\n />\n );\n break;\n case 'joinCallFailedDueToNoNetwork':\n pageElement = (\n <NoticePage\n iconName=\"NoticePageJoinCallFailedDueToNoNetwork\"\n title={locale.strings.call.failedToJoinCallDueToNoNetworkTitle}\n moreDetails={locale.strings.call.failedToJoinCallDueToNoNetworkMoreDetails}\n dataUiId={'join-call-failed-due-to-no-network-page'}\n />\n );\n break;\n case 'leftCall':\n pageElement = (\n <NoticePage\n iconName=\"NoticePageLeftCall\"\n title={locale.strings.call.leftCallTitle}\n moreDetails={locale.strings.call.leftCallMoreDetails}\n dataUiId={'left-call-page'}\n />\n );\n break;\n case 'lobby':\n pageElement = (\n <LobbyPage\n mobileView={props.mobileView}\n modalLayerHostId={props.modalLayerHostId}\n options={props.options}\n updateSidePaneRenderer={setSidePaneRenderer}\n mobileChatTabHeader={props.mobileChatTabHeader}\n />\n );\n break;\n /* @conditional-compile-remove(call-transfer) */\n case 'transferring':\n pageElement = (\n <TransferPage\n mobileView={props.mobileView}\n modalLayerHostId={props.modalLayerHostId}\n options={props.options}\n updateSidePaneRenderer={setSidePaneRenderer}\n mobileChatTabHeader={props.mobileChatTabHeader}\n onRenderAvatar={onRenderAvatar}\n onFetchAvatarPersonaData={onFetchAvatarPersonaData}\n />\n );\n break;\n case 'call':\n pageElement = (\n <CallPage\n onRenderAvatar={onRenderAvatar}\n callInvitationURL={callInvitationUrl}\n onFetchAvatarPersonaData={onFetchAvatarPersonaData}\n onFetchParticipantMenuItems={onFetchParticipantMenuItems}\n mobileView={props.mobileView}\n modalLayerHostId={props.modalLayerHostId}\n options={props.options}\n updateSidePaneRenderer={setSidePaneRenderer}\n mobileChatTabHeader={props.mobileChatTabHeader}\n />\n );\n break;\n /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */\n case 'hold':\n pageElement = (\n <>\n {\n <HoldPage\n mobileView={props.mobileView}\n modalLayerHostId={props.modalLayerHostId}\n options={props.options}\n updateSidePaneRenderer={setSidePaneRenderer}\n mobileChatTabHeader={props.mobileChatTabHeader}\n />\n }\n </>\n );\n break;\n }\n\n /* @conditional-compile-remove(unsupported-browser) */\n switch (page) {\n case 'unsupportedEnvironment':\n pageElement = (\n <>\n {\n /* @conditional-compile-remove(unsupported-browser) */\n <UnsupportedBrowserPage\n onTroubleshootingClick={props.options?.onEnvironmentInfoTroubleshootingClick}\n environmentInfo={adapter.getState().environmentInfo}\n />\n }\n </>\n );\n break;\n }\n\n if (!pageElement) {\n throw new Error('Invalid call composite page');\n }\n\n /* @conditional-compile-remove(rooms) */\n const permissions = _getPermissions(role === 'Unknown' || role === undefined ? props.roleHint : role);\n\n // default retElement for stable version\n let retElement = pageElement;\n /* @conditional-compile-remove(rooms) */\n retElement = <_PermissionsProvider permissions={permissions}>{pageElement}</_PermissionsProvider>;\n\n return (\n <SidePaneProvider sidePaneRenderer={sidePaneRenderer} overrideSidePane={injectedSidePaneProps}>\n {retElement}\n </SidePaneProvider>\n );\n};\n\n/**\n * A customizable UI composite for calling experience.\n *\n * @remarks Call composite min width/height are as follow:\n * - mobile: 17.5rem x 21rem (280px x 336px, with default rem at 16px)\n * - desktop: 30rem x 22rem (480px x 352px, with default rem at 16px)\n *\n * @public\n */\nexport const CallComposite = (props: CallCompositeProps): JSX.Element => <CallCompositeInner {...props} />;\n\n/**\n * @private\n */\nexport interface InternalCallCompositeProps {\n overrideSidePane?: InjectedSidePaneProps;\n onSidePaneIdChange?: (sidePaneId: string | undefined) => void;\n\n // legacy property to avoid breaking change\n mobileChatTabHeader?: MobileChatSidePaneTabHeaderProps;\n}\n\n/** @private */\nexport const CallCompositeInner = (props: CallCompositeProps & InternalCallCompositeProps): JSX.Element => {\n const {\n adapter,\n callInvitationUrl,\n onFetchAvatarPersonaData,\n onFetchParticipantMenuItems,\n options,\n formFactor = 'desktop'\n } = props;\n\n /* @conditional-compile-remove(rooms) */\n const roleHint = adapter.getState().roleHint;\n\n useEffect(() => {\n (async () => {\n const constrain = getQueryOptions({\n /* @conditional-compile-remove(rooms) */ role: roleHint\n });\n await adapter.askDevicePermission(constrain);\n adapter.queryCameras();\n adapter.queryMicrophones();\n adapter.querySpeakers();\n })();\n }, [adapter, /* @conditional-compile-remove(rooms) */ roleHint]);\n\n const mobileView = formFactor === 'mobile';\n\n const modalLayerHostId = useId('modalLayerhost');\n\n const mainScreenContainerClassName = useMemo(() => {\n return mobileView ? mainScreenContainerStyleMobile : mainScreenContainerStyleDesktop;\n }, [mobileView]);\n\n return (\n <div className={mainScreenContainerClassName}>\n <BaseProvider {...props}>\n <CallAdapterProvider adapter={adapter}>\n <MainScreen\n callInvitationUrl={callInvitationUrl}\n onFetchAvatarPersonaData={onFetchAvatarPersonaData}\n onFetchParticipantMenuItems={onFetchParticipantMenuItems}\n mobileView={mobileView}\n modalLayerHostId={modalLayerHostId}\n options={options}\n /* @conditional-compile-remove(rooms) */\n roleHint={roleHint}\n onSidePaneIdChange={props.onSidePaneIdChange}\n overrideSidePane={props.overrideSidePane}\n mobileChatTabHeader={props.mobileChatTabHeader}\n />\n {\n // This layer host is for ModalLocalAndRemotePIP in SidePane. This LayerHost cannot be inside the SidePane\n // because when the SidePane is hidden, ie. style property display is 'none', it takes up no space. This causes problems when dragging\n // the Modal because the draggable bounds thinks it has no space and will always return to its initial position after dragging.\n // Additionally, this layer host cannot be in the Call Arrangement as it needs to be rendered before useMinMaxDragPosition() in\n // common/utils useRef is called.\n // Warning: this is fragile and works because the call arrangement page is only rendered after the call has connected and thus this\n // LayerHost will be guaranteed to have rendered (and subsequently mounted in the DOM). This ensures the DOM element will be available\n // before the call to `document.getElementById(modalLayerHostId)` is made.\n /* @conditional-compile-remove(one-to-n-calling) @conditional-compile-remove(PSTN-calls) @conditional-compile-remove(call-readiness) */\n <LayerHost id={modalLayerHostId} className={mergeStyles(modalLayerHostStyle)} />\n }\n </CallAdapterProvider>\n </BaseProvider>\n </div>\n );\n};\n\nconst getQueryOptions = (options: { /* @conditional-compile-remove(rooms) */ role?: Role }): PermissionConstraints => {\n /* @conditional-compile-remove(rooms) */\n if (options.role === 'Consumer') {\n return {\n video: false,\n audio: true\n };\n }\n return { video: true, audio: true };\n};\n\"../../../../calling-component-bindings/src\"\"../../../../react-components/src\""]}
@@ -455,5 +455,21 @@ export interface CallCompositeStrings {
455
455
  * captions banner loading spinner label
456
456
  */
457
457
  captionsBannerSpinnerText?: string;
458
+ /**
459
+ * transfer page text when showing the transferor who initiated the transfer
460
+ */
461
+ transferPageTransferorText: string;
462
+ /**
463
+ * transfer page text when showing the transfer target
464
+ */
465
+ transferPageTransferTargetText: string;
466
+ /**
467
+ * transfer page display name for unknown participant
468
+ */
469
+ transferPageUnknownTransferorDisplayName: string;
470
+ /**
471
+ * transfer page display name for unknown participant
472
+ */
473
+ transferPageUnknownTransferTargetDisplayName: string;
458
474
  }
459
475
  //# sourceMappingURL=Strings.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Strings.js","sourceRoot":"","sources":["../../../../../../../react-composites/src/composites/CallComposite/Strings.tsx"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\n/* @conditional-compile-remove(close-captions) */\nimport { CaptionsAvailableLanguageStrings } from '@internal/react-components';\n\n/**\n * Strings used by the {@link CallComposite} directly.\n *\n * This strings are in addition to those used by the components from the component library.\n *\n * @public\n */\nexport interface CallCompositeStrings {\n /**\n * Title of configuration page.\n */\n configurationPageTitle: string;\n /**\n * Optional 1-2 lines on the call details used on the configuration page.\n */\n configurationPageCallDetails?: string;\n /**\n * Text in button to start call in configuration page.\n */\n startCallButtonLabel: string;\n /**\n * Text in button to rejoin an ended call.\n */\n rejoinCallButtonLabel: string;\n /**\n * Placeholder text for local device settings dropdowns.\n */\n defaultPlaceHolder: string;\n /**\n * Label for camera dropdown.\n */\n cameraLabel: string;\n /**\n * Label for when there are no cameras present on configuration screen.\n */\n noCamerasLabel: string;\n /**\n * Label for sound dropdown.\n */\n soundLabel: string;\n /**\n * Label for when no microphones were found on the configuration screen\n */\n noMicrophonesLabel: string;\n /**\n * Label for when no speakers were found on the configuration screen.\n */\n noSpeakersLabel: string;\n /**\n * Error shown when camera access is blocked by the browser.\n */\n cameraPermissionDenied: string;\n /**\n * Error shown when the camera is turned off.\n */\n cameraTurnedOff: string;\n /**\n * Error shown when microphone access is blocked by the browser.\n */\n microphonePermissionDenied: string;\n /**\n * Title text of the page shown to the user when joining a Teams meeting fails because meeting owner denied access.\n */\n failedToJoinTeamsMeetingReasonAccessDeniedTitle: string;\n /**\n * More details text of the page shown to the user when joining a Teams meeting fails because meeting owner denied access.\n */\n failedToJoinTeamsMeetingReasonAccessDeniedMoreDetails?: string;\n /**\n * Title text of the page shown to the user when joining a call fails due to a network problem.\n */\n failedToJoinCallDueToNoNetworkTitle: string;\n /**\n * More details text of the page shown to the user when joining a call fails due to a network problem.\n */\n failedToJoinCallDueToNoNetworkMoreDetails?: string;\n /**\n * Title text of the page shown to the user when they leave a call in the call composite.\n */\n leftCallTitle: string;\n /**\n * More details text of the page shown to the user when they leave a call in the call composite.\n */\n leftCallMoreDetails?: string;\n /**\n * Title text of the page shown to the user when they are removed from a call in the call composite.\n */\n removedFromCallTitle: string;\n /**\n * More details text of the page shown to the user when they are removed from a call in the call composite.\n */\n removedFromCallMoreDetails?: string;\n /**\n * Text shown to the user on the lobby screen when connecting to a call.\n */\n lobbyScreenConnectingToCallTitle: string;\n /**\n * Optional addition details shown to the user on the lobby screen when connection to a call.\n */\n lobbyScreenConnectingToCallMoreDetails?: string;\n /**\n * Text shown to the user on the lobby screen when waiting to be admitted to a call.\n */\n lobbyScreenWaitingToBeAdmittedTitle: string;\n /**\n * Optional additional details shown to the user on the lobby screen when waiting to be admitted to a call.\n */\n lobbyScreenWaitingToBeAdmittedMoreDetails?: string;\n /**\n * Message shown to the user when they are speaking while muted.\n */\n mutedMessage: string;\n /**\n * Text for link to MS privacy policy in Compliance Banner.\n */\n privacyPolicy: string;\n /**\n * Text for link to learn more about a specific subject.\n */\n learnMore: string;\n /**\n * Message to let user know the meeting is only being recorded (no transcription) in ComplianceBanner.\n */\n complianceBannerNowOnlyRecording: string;\n /**\n * Message to let user know the meeting is only being transcripted (no recording) in ComplianceBanner.\n */\n complianceBannerNowOnlyTranscription: string;\n /**\n * Message to let user know recording and transcription of the meeting are saved in ComplianceBanner.\n */\n complianceBannerRecordingAndTranscriptionSaved: string;\n /**\n * Message to let user know recording and transcription of the meeting have started in ComplianceBanner.\n */\n complianceBannerRecordingAndTranscriptionStarted: string;\n /**\n * Message to let user know recording and transcription of the meeting have stopped in ComplianceBanner.\n */\n complianceBannerRecordingAndTranscriptionStopped: string;\n /**\n * Message to let user know recording of the meeting is being saved in ComplianceBanner.\n */\n complianceBannerRecordingSaving: string;\n /**\n * Message to let user know recording of the meeting has started in ComplianceBanner.\n */\n complianceBannerRecordingStarted: string;\n /**\n * Message to let user know recording of the meeting has stopped in ComplianceBanner.\n */\n complianceBannerRecordingStopped: string;\n /**\n * Message to let user know they are giving consent to meeting being transcripted in ComplianceBanner.\n */\n complianceBannerTranscriptionConsent: string;\n /**\n * Message to let user know transcription of the meeting is being saved in ComplianceBanner.\n */\n complianceBannerTranscriptionSaving: string;\n /**\n * Message to let user know transcription of the meeting has started in ComplianceBanner.\n */\n complianceBannerTranscriptionStarted: string;\n /**\n * Message to let user know the transcription of the meeting has stopped in ComplianceBanner.\n */\n complianceBannerTranscriptionStopped: string;\n /**\n * Text for close button.\n */\n close: string;\n /**\n * Title text of the page shown to the user when there is intermittent network failure during a call.\n */\n networkReconnectTitle: string;\n /**\n * More details text of the page shown to the user when there is intermittent network failure during a call.\n */\n networkReconnectMoreDetails: string;\n /**\n * Tooltip text used to inform a user that toggling microphone in lobby is not supported.\n */\n microphoneToggleInLobbyNotAllowed: string;\n /* @conditional-compile-remove(one-to-n-calling) @conditional-compile-remove(PSTN-calls) */\n /**\n * Side pane People section Title.\n */\n peoplePaneTitle: string;\n /* @conditional-compile-remove(one-to-n-calling) @conditional-compile-remove(PSTN-calls) */\n /**\n * Aria label string for return to call back button\n */\n returnToCallButtonAriaLabel?: string;\n /* @conditional-compile-remove(one-to-n-calling) @conditional-compile-remove(PSTN-calls) */\n /**\n * Aria Description string for return to call button\n */\n returnToCallButtonAriaDescription?: string;\n /* @conditional-compile-remove(one-to-n-calling) @conditional-compile-remove(PSTN-calls) */\n /**\n * control bar People button label\n */\n peopleButtonLabel: string;\n /* @conditional-compile-remove(one-to-n-calling) @conditional-compile-remove(PSTN-calls) */\n /**\n * control bar Chat button label.\n */\n chatButtonLabel: string;\n /* @conditional-compile-remove(one-to-n-calling) @conditional-compile-remove(PSTN-calls) */\n /**\n * Label for SidePaneHeader dismiss button\n */\n dismissSidePaneButtonLabel?: string;\n /* @conditional-compile-remove(one-to-n-calling) @conditional-compile-remove(PSTN-calls) */\n /**\n * Side pane People section subheader.\n */\n peoplePaneSubTitle: string;\n /* @conditional-compile-remove(one-to-n-calling) @conditional-compile-remove(PSTN-calls) */\n /**\n * Label for button to copy invite link\n */\n copyInviteLinkButtonLabel: string;\n /* @conditional-compile-remove(PSTN-calls) */\n /**\n * Label for button to open dialpad\n */\n openDialpadButtonLabel: string;\n /* @conditional-compile-remove(one-to-n-calling) @conditional-compile-remove(PSTN-calls) */\n /**\n * Label for menu item to remove participant\n */\n removeMenuLabel: string;\n /* @conditional-compile-remove(PSTN-calls) */\n /**\n * Label for add people dropdown\n */\n peoplePaneAddPeopleButtonLabel: string;\n /* @conditional-compile-remove(PSTN-calls) */\n /**\n * Label for button to start a call\n */\n dialpadStartCallButtonLabel: string;\n /* @conditional-compile-remove(PSTN-calls) */\n /**\n * Title for dialpad Modal\n */\n dialpadModalTitle: string;\n /* @conditional-compile-remove(PSTN-calls) */\n /**\n * Aria Label for dialpad Modal\n */\n dialpadModalAriaLabel: string;\n /* @conditional-compile-remove(PSTN-calls) */\n /**\n * Aria Label for dialpad Modal close button\n */\n dialpadCloseModalButtonAriaLabel: string;\n /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */ /* @conditional-compile-remove(close-captions) */\n /**\n * label for more button in the Calling composite\n */\n moreButtonCallingLabel: string;\n /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */\n /**\n * Label for the resume call button on the hold pane\n */\n resumeCallButtonLabel: string;\n /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */\n /**\n * Label for the resume call button on the hold pane when call is resuming\n */\n resumingCallButtonLabel: string;\n /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */\n /**\n * Aria label for the resume call button on the hold pane\n */\n resumeCallButtonAriaLabel: string;\n /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */\n /**\n * Aria label for the resume call button on the hold pane when call is resuming\n */\n resumingCallButtonAriaLabel: string;\n /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */\n /**\n * Label for the hold pane\n */\n holdScreenLabel: string;\n /* @conditional-compile-remove(PSTN-calls) */\n /**\n * Placeholder text for dtmf dialpad\n */\n dtmfDialpadPlaceholderText: string;\n /* @conditional-compile-remove(PSTN-calls) */\n /**\n * Label for the button to open dtmf dialpad\n */\n openDtmfDialpadLabel: string;\n /**\n * aria label for when the invite link has been actioned\n */\n copyInviteLinkActionedAriaLabel: string;\n /* @conditional-compile-remove(rooms) */\n /**\n * Title text of the page shown to the user when the user attempts to join a room that cannot be found.\n */\n roomNotFoundTitle: string;\n /* @conditional-compile-remove(rooms) */\n /**\n * More details text of the page shown to the user when the user attempts to join a room that cannot be found.\n */\n roomNotFoundDetails?: string;\n /* @conditional-compile-remove(video-background-effects) */\n /**\n * Video Effects pane title.\n */\n videoEffectsPaneTitle: string;\n /* @conditional-compile-remove(video-background-effects) */\n /**\n * Video Effects pane sub section title for choosing background.\n */\n videoEffectsPaneBackgroundSelectionTitle: string;\n /* @conditional-compile-remove(video-background-effects) */\n /**\n * Label for the button to open effects\n */\n configurationPageVideoEffectsButtonLabel?: string;\n /* @conditional-compile-remove(video-background-effects) */\n /**\n * Error message for video effect failure\n */\n unableToStartVideoEffect?: string;\n /* @conditional-compile-remove(video-background-effects) */\n /**\n * Label for the blur video background effect item\n */\n blurBackgroundEffectButtonLabel?: string;\n /* @conditional-compile-remove(video-background-effects) */\n /**\n * Tooltip text for the blur video background effect item\n */\n blurBackgroundTooltip?: string;\n /* @conditional-compile-remove(video-background-effects) */\n /**\n * Label for the remove video background effect item\n */\n removeBackgroundEffectButtonLabel?: string;\n /* @conditional-compile-remove(video-background-effects) */\n /**\n * Tooltip text for the blur video background effect item\n */\n removeBackgroundTooltip?: string;\n /* @conditional-compile-remove(video-background-effects) */\n /**\n * Text to show when warning the user the camera is off and inform the user to turn the camera on to see the selected video background effect.\n */\n cameraOffBackgroundEffectWarningText?: string;\n /* @conditional-compile-remove(rooms) */\n /**\n * Title text of the page shown to the user when the user attempts to join a room to which they are not invited.\n */\n deniedPermissionToRoomTitle: string;\n /* @conditional-compile-remove(rooms) */\n /**\n * More details text of the page shown to the user when the user attempts to join a room to which they are not invited.\n */\n deniedPermissionToRoomDetails?: string;\n /* @conditional-compile-remove(one-to-n-calling) @conditional-compile-remove(PSTN-calls) */\n /**\n * Control bar People button ToolTipContent\n */\n peopleButtonTooltipOpen: string;\n /* @conditional-compile-remove(one-to-n-calling) @conditional-compile-remove(PSTN-calls) */\n /**\n * Control bar People button ToolTipContent\n */\n peopleButtonTooltipClose: string;\n /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */\n /**\n * Label disaplayed on the lobby screen during a 1:1 outbound call.\n */\n outboundCallingNoticeString: string;\n /**\n * Notice to be announced by narrator when a participant joins a call\n */\n participantJoinedNoticeString: string;\n /**\n * Notice to be announced by narrator when a participant joins a call\n */\n twoParticipantJoinedNoticeString: string;\n /**\n * Notice to be announced by narrator when a participant joins a call\n */\n threeParticipantJoinedNoticeString: string;\n /**\n * Notice to be announced by narrator when a participant leaves a call\n */\n participantLeftNoticeString: string;\n /**\n * Notice to be announced by narrator when 2 participants leave a call\n */\n twoParticipantLeftNoticeString: string;\n /**\n * Notice to be announced by narrator when 3 participants leave a call\n */\n threeParticipantLeftNoticeString: string;\n /**\n * string to be used to announce a change in participant if they have no displayName\n */\n unnamedParticipantString: string;\n /**\n * string to be used to announce when more than 3 participants have joined at the same time.\n */\n manyParticipantsJoined: string;\n /**\n * string to be used to announce when more than 3 participants have left at the same time.\n */\n manyParticipantsLeft: string;\n /**\n * string to be used to announce when multiple unnamed participants have joined at the same time.\n */\n manyUnnamedParticipantsJoined: string;\n /**\n * string to be used to announce when multiple unnamed participants have left at the same time.\n */\n manyUnnamedParticipantsLeft: string;\n /* @conditional-compile-remove(close-captions) */\n /**\n * string to be used to open live captions contextual menu\n */\n liveCaptionsLabel?: string;\n /* @conditional-compile-remove(close-captions) */\n /**\n * label for opening captions setting modal\n */\n captionsSettingsLabel?: string;\n /* @conditional-compile-remove(close-captions) */\n /**\n * string to be used to start captions\n */\n startCaptionsButtonOnLabel?: string;\n /* @conditional-compile-remove(close-captions) */\n /**\n * string to be used to stop captions\n */\n startCaptionsButtonOffLabel?: string;\n /* @conditional-compile-remove(close-captions) */\n /**\n * tooltip string to be used to show captions is on\n */\n startCaptionsButtonTooltipOnContent?: string;\n /* @conditional-compile-remove(close-captions) */\n /**\n *tooltip string to be used to show captions is off\n */\n startCaptionsButtonTooltipOffContent?: string;\n /* @conditional-compile-remove(close-captions) */\n /**\n * captions setting modal title\n */\n captionsSettingsModalTitle?: string;\n /* @conditional-compile-remove(close-captions) */\n /**\n * label for dropdown inside captions setting modal\n */\n captionsSettingsDropdownLabel?: string;\n /* @conditional-compile-remove(close-captions) */\n /**\n * text under captions setting dropdown indicating what the dropdown is for\n */\n captionsSettingsDropdownInfoText?: string;\n /* @conditional-compile-remove(close-captions) */\n /**\n * confirm button label in captions setting modal\n */\n captionsSettingsConfirmButtonLabel?: string;\n /* @conditional-compile-remove(close-captions) */\n /**\n * cancel button label in captions setting modal\n */\n captionsSettingsCancelButtonLabel?: string;\n /* @conditional-compile-remove(close-captions) */\n /**\n * arial label for captions setting modal\n */\n captionsSettingsModalAriaLabel?: string;\n /* @conditional-compile-remove(close-captions) */\n /**\n * arial label for captions setting modal close button\n */\n captionsSettingsCloseModalButtonAriaLabel?: string;\n /* @conditional-compile-remove(close-captions) */\n /**\n * label for more button inside captions banner\n */\n captionsBannerMoreButtonCallingLabel?: string;\n /* @conditional-compile-remove(close-captions) */\n /**\n * arial label for more button inside captions banner\n */\n captionsBannerMoreButtonTooltip?: string;\n /* @conditional-compile-remove(close-captions) */\n /**\n * list of key value pairs that pairs language code to language names\n */\n captionsAvailableLanguageStrings?: CaptionsAvailableLanguageStrings;\n /* @conditional-compile-remove(close-captions) */\n /**\n * captions banner loading spinner label\n */\n captionsBannerSpinnerText?: string;\n}\n\"../../../../react-components/src\""]}
1
+ {"version":3,"file":"Strings.js","sourceRoot":"","sources":["../../../../../../../react-composites/src/composites/CallComposite/Strings.tsx"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\n/* @conditional-compile-remove(close-captions) */\nimport { CaptionsAvailableLanguageStrings } from '@internal/react-components';\n\n/**\n * Strings used by the {@link CallComposite} directly.\n *\n * This strings are in addition to those used by the components from the component library.\n *\n * @public\n */\nexport interface CallCompositeStrings {\n /**\n * Title of configuration page.\n */\n configurationPageTitle: string;\n /**\n * Optional 1-2 lines on the call details used on the configuration page.\n */\n configurationPageCallDetails?: string;\n /**\n * Text in button to start call in configuration page.\n */\n startCallButtonLabel: string;\n /**\n * Text in button to rejoin an ended call.\n */\n rejoinCallButtonLabel: string;\n /**\n * Placeholder text for local device settings dropdowns.\n */\n defaultPlaceHolder: string;\n /**\n * Label for camera dropdown.\n */\n cameraLabel: string;\n /**\n * Label for when there are no cameras present on configuration screen.\n */\n noCamerasLabel: string;\n /**\n * Label for sound dropdown.\n */\n soundLabel: string;\n /**\n * Label for when no microphones were found on the configuration screen\n */\n noMicrophonesLabel: string;\n /**\n * Label for when no speakers were found on the configuration screen.\n */\n noSpeakersLabel: string;\n /**\n * Error shown when camera access is blocked by the browser.\n */\n cameraPermissionDenied: string;\n /**\n * Error shown when the camera is turned off.\n */\n cameraTurnedOff: string;\n /**\n * Error shown when microphone access is blocked by the browser.\n */\n microphonePermissionDenied: string;\n /**\n * Title text of the page shown to the user when joining a Teams meeting fails because meeting owner denied access.\n */\n failedToJoinTeamsMeetingReasonAccessDeniedTitle: string;\n /**\n * More details text of the page shown to the user when joining a Teams meeting fails because meeting owner denied access.\n */\n failedToJoinTeamsMeetingReasonAccessDeniedMoreDetails?: string;\n /**\n * Title text of the page shown to the user when joining a call fails due to a network problem.\n */\n failedToJoinCallDueToNoNetworkTitle: string;\n /**\n * More details text of the page shown to the user when joining a call fails due to a network problem.\n */\n failedToJoinCallDueToNoNetworkMoreDetails?: string;\n /**\n * Title text of the page shown to the user when they leave a call in the call composite.\n */\n leftCallTitle: string;\n /**\n * More details text of the page shown to the user when they leave a call in the call composite.\n */\n leftCallMoreDetails?: string;\n /**\n * Title text of the page shown to the user when they are removed from a call in the call composite.\n */\n removedFromCallTitle: string;\n /**\n * More details text of the page shown to the user when they are removed from a call in the call composite.\n */\n removedFromCallMoreDetails?: string;\n /**\n * Text shown to the user on the lobby screen when connecting to a call.\n */\n lobbyScreenConnectingToCallTitle: string;\n /**\n * Optional addition details shown to the user on the lobby screen when connection to a call.\n */\n lobbyScreenConnectingToCallMoreDetails?: string;\n /**\n * Text shown to the user on the lobby screen when waiting to be admitted to a call.\n */\n lobbyScreenWaitingToBeAdmittedTitle: string;\n /**\n * Optional additional details shown to the user on the lobby screen when waiting to be admitted to a call.\n */\n lobbyScreenWaitingToBeAdmittedMoreDetails?: string;\n /**\n * Message shown to the user when they are speaking while muted.\n */\n mutedMessage: string;\n /**\n * Text for link to MS privacy policy in Compliance Banner.\n */\n privacyPolicy: string;\n /**\n * Text for link to learn more about a specific subject.\n */\n learnMore: string;\n /**\n * Message to let user know the meeting is only being recorded (no transcription) in ComplianceBanner.\n */\n complianceBannerNowOnlyRecording: string;\n /**\n * Message to let user know the meeting is only being transcripted (no recording) in ComplianceBanner.\n */\n complianceBannerNowOnlyTranscription: string;\n /**\n * Message to let user know recording and transcription of the meeting are saved in ComplianceBanner.\n */\n complianceBannerRecordingAndTranscriptionSaved: string;\n /**\n * Message to let user know recording and transcription of the meeting have started in ComplianceBanner.\n */\n complianceBannerRecordingAndTranscriptionStarted: string;\n /**\n * Message to let user know recording and transcription of the meeting have stopped in ComplianceBanner.\n */\n complianceBannerRecordingAndTranscriptionStopped: string;\n /**\n * Message to let user know recording of the meeting is being saved in ComplianceBanner.\n */\n complianceBannerRecordingSaving: string;\n /**\n * Message to let user know recording of the meeting has started in ComplianceBanner.\n */\n complianceBannerRecordingStarted: string;\n /**\n * Message to let user know recording of the meeting has stopped in ComplianceBanner.\n */\n complianceBannerRecordingStopped: string;\n /**\n * Message to let user know they are giving consent to meeting being transcripted in ComplianceBanner.\n */\n complianceBannerTranscriptionConsent: string;\n /**\n * Message to let user know transcription of the meeting is being saved in ComplianceBanner.\n */\n complianceBannerTranscriptionSaving: string;\n /**\n * Message to let user know transcription of the meeting has started in ComplianceBanner.\n */\n complianceBannerTranscriptionStarted: string;\n /**\n * Message to let user know the transcription of the meeting has stopped in ComplianceBanner.\n */\n complianceBannerTranscriptionStopped: string;\n /**\n * Text for close button.\n */\n close: string;\n /**\n * Title text of the page shown to the user when there is intermittent network failure during a call.\n */\n networkReconnectTitle: string;\n /**\n * More details text of the page shown to the user when there is intermittent network failure during a call.\n */\n networkReconnectMoreDetails: string;\n /**\n * Tooltip text used to inform a user that toggling microphone in lobby is not supported.\n */\n microphoneToggleInLobbyNotAllowed: string;\n /* @conditional-compile-remove(one-to-n-calling) @conditional-compile-remove(PSTN-calls) */\n /**\n * Side pane People section Title.\n */\n peoplePaneTitle: string;\n /* @conditional-compile-remove(one-to-n-calling) @conditional-compile-remove(PSTN-calls) */\n /**\n * Aria label string for return to call back button\n */\n returnToCallButtonAriaLabel?: string;\n /* @conditional-compile-remove(one-to-n-calling) @conditional-compile-remove(PSTN-calls) */\n /**\n * Aria Description string for return to call button\n */\n returnToCallButtonAriaDescription?: string;\n /* @conditional-compile-remove(one-to-n-calling) @conditional-compile-remove(PSTN-calls) */\n /**\n * control bar People button label\n */\n peopleButtonLabel: string;\n /* @conditional-compile-remove(one-to-n-calling) @conditional-compile-remove(PSTN-calls) */\n /**\n * control bar Chat button label.\n */\n chatButtonLabel: string;\n /* @conditional-compile-remove(one-to-n-calling) @conditional-compile-remove(PSTN-calls) */\n /**\n * Label for SidePaneHeader dismiss button\n */\n dismissSidePaneButtonLabel?: string;\n /* @conditional-compile-remove(one-to-n-calling) @conditional-compile-remove(PSTN-calls) */\n /**\n * Side pane People section subheader.\n */\n peoplePaneSubTitle: string;\n /* @conditional-compile-remove(one-to-n-calling) @conditional-compile-remove(PSTN-calls) */\n /**\n * Label for button to copy invite link\n */\n copyInviteLinkButtonLabel: string;\n /* @conditional-compile-remove(PSTN-calls) */\n /**\n * Label for button to open dialpad\n */\n openDialpadButtonLabel: string;\n /* @conditional-compile-remove(one-to-n-calling) @conditional-compile-remove(PSTN-calls) */\n /**\n * Label for menu item to remove participant\n */\n removeMenuLabel: string;\n /* @conditional-compile-remove(PSTN-calls) */\n /**\n * Label for add people dropdown\n */\n peoplePaneAddPeopleButtonLabel: string;\n /* @conditional-compile-remove(PSTN-calls) */\n /**\n * Label for button to start a call\n */\n dialpadStartCallButtonLabel: string;\n /* @conditional-compile-remove(PSTN-calls) */\n /**\n * Title for dialpad Modal\n */\n dialpadModalTitle: string;\n /* @conditional-compile-remove(PSTN-calls) */\n /**\n * Aria Label for dialpad Modal\n */\n dialpadModalAriaLabel: string;\n /* @conditional-compile-remove(PSTN-calls) */\n /**\n * Aria Label for dialpad Modal close button\n */\n dialpadCloseModalButtonAriaLabel: string;\n /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */ /* @conditional-compile-remove(close-captions) */\n /**\n * label for more button in the Calling composite\n */\n moreButtonCallingLabel: string;\n /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */\n /**\n * Label for the resume call button on the hold pane\n */\n resumeCallButtonLabel: string;\n /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */\n /**\n * Label for the resume call button on the hold pane when call is resuming\n */\n resumingCallButtonLabel: string;\n /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */\n /**\n * Aria label for the resume call button on the hold pane\n */\n resumeCallButtonAriaLabel: string;\n /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */\n /**\n * Aria label for the resume call button on the hold pane when call is resuming\n */\n resumingCallButtonAriaLabel: string;\n /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */\n /**\n * Label for the hold pane\n */\n holdScreenLabel: string;\n /* @conditional-compile-remove(PSTN-calls) */\n /**\n * Placeholder text for dtmf dialpad\n */\n dtmfDialpadPlaceholderText: string;\n /* @conditional-compile-remove(PSTN-calls) */\n /**\n * Label for the button to open dtmf dialpad\n */\n openDtmfDialpadLabel: string;\n /**\n * aria label for when the invite link has been actioned\n */\n copyInviteLinkActionedAriaLabel: string;\n /* @conditional-compile-remove(rooms) */\n /**\n * Title text of the page shown to the user when the user attempts to join a room that cannot be found.\n */\n roomNotFoundTitle: string;\n /* @conditional-compile-remove(rooms) */\n /**\n * More details text of the page shown to the user when the user attempts to join a room that cannot be found.\n */\n roomNotFoundDetails?: string;\n /* @conditional-compile-remove(video-background-effects) */\n /**\n * Video Effects pane title.\n */\n videoEffectsPaneTitle: string;\n /* @conditional-compile-remove(video-background-effects) */\n /**\n * Video Effects pane sub section title for choosing background.\n */\n videoEffectsPaneBackgroundSelectionTitle: string;\n /* @conditional-compile-remove(video-background-effects) */\n /**\n * Label for the button to open effects\n */\n configurationPageVideoEffectsButtonLabel?: string;\n /* @conditional-compile-remove(video-background-effects) */\n /**\n * Error message for video effect failure\n */\n unableToStartVideoEffect?: string;\n /* @conditional-compile-remove(video-background-effects) */\n /**\n * Label for the blur video background effect item\n */\n blurBackgroundEffectButtonLabel?: string;\n /* @conditional-compile-remove(video-background-effects) */\n /**\n * Tooltip text for the blur video background effect item\n */\n blurBackgroundTooltip?: string;\n /* @conditional-compile-remove(video-background-effects) */\n /**\n * Label for the remove video background effect item\n */\n removeBackgroundEffectButtonLabel?: string;\n /* @conditional-compile-remove(video-background-effects) */\n /**\n * Tooltip text for the blur video background effect item\n */\n removeBackgroundTooltip?: string;\n /* @conditional-compile-remove(video-background-effects) */\n /**\n * Text to show when warning the user the camera is off and inform the user to turn the camera on to see the selected video background effect.\n */\n cameraOffBackgroundEffectWarningText?: string;\n /* @conditional-compile-remove(rooms) */\n /**\n * Title text of the page shown to the user when the user attempts to join a room to which they are not invited.\n */\n deniedPermissionToRoomTitle: string;\n /* @conditional-compile-remove(rooms) */\n /**\n * More details text of the page shown to the user when the user attempts to join a room to which they are not invited.\n */\n deniedPermissionToRoomDetails?: string;\n /* @conditional-compile-remove(one-to-n-calling) @conditional-compile-remove(PSTN-calls) */\n /**\n * Control bar People button ToolTipContent\n */\n peopleButtonTooltipOpen: string;\n /* @conditional-compile-remove(one-to-n-calling) @conditional-compile-remove(PSTN-calls) */\n /**\n * Control bar People button ToolTipContent\n */\n peopleButtonTooltipClose: string;\n /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */\n /**\n * Label disaplayed on the lobby screen during a 1:1 outbound call.\n */\n outboundCallingNoticeString: string;\n /**\n * Notice to be announced by narrator when a participant joins a call\n */\n participantJoinedNoticeString: string;\n /**\n * Notice to be announced by narrator when a participant joins a call\n */\n twoParticipantJoinedNoticeString: string;\n /**\n * Notice to be announced by narrator when a participant joins a call\n */\n threeParticipantJoinedNoticeString: string;\n /**\n * Notice to be announced by narrator when a participant leaves a call\n */\n participantLeftNoticeString: string;\n /**\n * Notice to be announced by narrator when 2 participants leave a call\n */\n twoParticipantLeftNoticeString: string;\n /**\n * Notice to be announced by narrator when 3 participants leave a call\n */\n threeParticipantLeftNoticeString: string;\n /**\n * string to be used to announce a change in participant if they have no displayName\n */\n unnamedParticipantString: string;\n /**\n * string to be used to announce when more than 3 participants have joined at the same time.\n */\n manyParticipantsJoined: string;\n /**\n * string to be used to announce when more than 3 participants have left at the same time.\n */\n manyParticipantsLeft: string;\n /**\n * string to be used to announce when multiple unnamed participants have joined at the same time.\n */\n manyUnnamedParticipantsJoined: string;\n /**\n * string to be used to announce when multiple unnamed participants have left at the same time.\n */\n manyUnnamedParticipantsLeft: string;\n /* @conditional-compile-remove(close-captions) */\n /**\n * string to be used to open live captions contextual menu\n */\n liveCaptionsLabel?: string;\n /* @conditional-compile-remove(close-captions) */\n /**\n * label for opening captions setting modal\n */\n captionsSettingsLabel?: string;\n /* @conditional-compile-remove(close-captions) */\n /**\n * string to be used to start captions\n */\n startCaptionsButtonOnLabel?: string;\n /* @conditional-compile-remove(close-captions) */\n /**\n * string to be used to stop captions\n */\n startCaptionsButtonOffLabel?: string;\n /* @conditional-compile-remove(close-captions) */\n /**\n * tooltip string to be used to show captions is on\n */\n startCaptionsButtonTooltipOnContent?: string;\n /* @conditional-compile-remove(close-captions) */\n /**\n *tooltip string to be used to show captions is off\n */\n startCaptionsButtonTooltipOffContent?: string;\n /* @conditional-compile-remove(close-captions) */\n /**\n * captions setting modal title\n */\n captionsSettingsModalTitle?: string;\n /* @conditional-compile-remove(close-captions) */\n /**\n * label for dropdown inside captions setting modal\n */\n captionsSettingsDropdownLabel?: string;\n /* @conditional-compile-remove(close-captions) */\n /**\n * text under captions setting dropdown indicating what the dropdown is for\n */\n captionsSettingsDropdownInfoText?: string;\n /* @conditional-compile-remove(close-captions) */\n /**\n * confirm button label in captions setting modal\n */\n captionsSettingsConfirmButtonLabel?: string;\n /* @conditional-compile-remove(close-captions) */\n /**\n * cancel button label in captions setting modal\n */\n captionsSettingsCancelButtonLabel?: string;\n /* @conditional-compile-remove(close-captions) */\n /**\n * arial label for captions setting modal\n */\n captionsSettingsModalAriaLabel?: string;\n /* @conditional-compile-remove(close-captions) */\n /**\n * arial label for captions setting modal close button\n */\n captionsSettingsCloseModalButtonAriaLabel?: string;\n /* @conditional-compile-remove(close-captions) */\n /**\n * label for more button inside captions banner\n */\n captionsBannerMoreButtonCallingLabel?: string;\n /* @conditional-compile-remove(close-captions) */\n /**\n * arial label for more button inside captions banner\n */\n captionsBannerMoreButtonTooltip?: string;\n /* @conditional-compile-remove(close-captions) */\n /**\n * list of key value pairs that pairs language code to language names\n */\n captionsAvailableLanguageStrings?: CaptionsAvailableLanguageStrings;\n /* @conditional-compile-remove(close-captions) */\n /**\n * captions banner loading spinner label\n */\n captionsBannerSpinnerText?: string;\n /* @conditional-compile-remove(call-transfer) */\n /**\n * transfer page text when showing the transferor who initiated the transfer\n */\n transferPageTransferorText: string;\n /* @conditional-compile-remove(call-transfer) */\n /**\n * transfer page text when showing the transfer target\n */\n transferPageTransferTargetText: string;\n /* @conditional-compile-remove(call-transfer) */\n /**\n * transfer page display name for unknown participant\n */\n transferPageUnknownTransferorDisplayName: string;\n /* @conditional-compile-remove(call-transfer) */\n /**\n * transfer page display name for unknown participant\n */\n transferPageUnknownTransferTargetDisplayName: string;\n}\n\"../../../../react-components/src\""]}
@@ -100,8 +100,15 @@ class CallContext {
100
100
  environmentInfo: this.state.environmentInfo,
101
101
  unsupportedBrowserVersionOptedIn: this.state.unsupportedBrowserVersionsAllowed
102
102
  };
103
+ /* @conditional-compile-remove(call-transfer) */
104
+ const latestAcceptedTransfer = (call === null || call === void 0 ? void 0 : call.transferFeature.acceptedTransfers)
105
+ ? findLatestAcceptedTransfer(call.transferFeature.acceptedTransfers)
106
+ : undefined;
107
+ /* @conditional-compile-remove(call-transfer) */
108
+ const transferCall = latestAcceptedTransfer ? clientState.calls[latestAcceptedTransfer.callId] : undefined;
103
109
  const newPage = getCallCompositePage(call, latestEndedCall,
104
- /* @conditional-compile-remove(unsupported-browser) */ environmentInfo);
110
+ /* @conditional-compile-remove(unsupported-browser) */ environmentInfo,
111
+ /* @conditional-compile-remove(call-transfer) */ transferCall);
105
112
  if (!IsCallEndedPage(oldPage) && IsCallEndedPage(newPage)) {
106
113
  this.emitter.emit('callEnded', { callId: this.callId });
107
114
  // Reset the callId to undefined as the call has ended.
@@ -109,12 +116,6 @@ class CallContext {
109
116
  // Make sure that the call is set to undefined in the state.
110
117
  call = undefined;
111
118
  }
112
- /* @conditional-compile-remove(call-transfer) */
113
- const latestAcceptedTransfer = (call === null || call === void 0 ? void 0 : call.transferFeature.acceptedTransfers)
114
- ? findLatestAcceptedTransfer(call.transferFeature.acceptedTransfers)
115
- : undefined;
116
- /* @conditional-compile-remove(call-transfer) */
117
- const transferCall = latestAcceptedTransfer ? clientState.calls[latestAcceptedTransfer.callId] : undefined;
118
119
  if (this.state.page) {
119
120
  this.setState(Object.assign(Object.assign({}, this.state), { userId: clientState.userId, displayName: (_a = clientState.callAgent) === null || _a === void 0 ? void 0 : _a.displayName, call, page: newPage, endedCall: latestEndedCall, devices: clientState.deviceManager, latestErrors: clientState.latestErrors, cameraStatus: (call === null || call === void 0 ? void 0 : call.localVideoStreams.find((s) => s.mediaStreamType === 'Video')) ||
120
121
  clientState.deviceManager.unparentedViews.find((s) => s.mediaStreamType === 'Video')