@azure/communication-react 1.18.0-alpha-202406110013 → 1.18.0-alpha-202406120015

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 (57) hide show
  1. package/dist/communication-react.d.ts +43 -17
  2. package/dist/dist-cjs/communication-react/{ChatMessageComponentAsRichTextEditBox-D2h2ZRSt.js → ChatMessageComponentAsRichTextEditBox-DseIP_bT.js} +2 -2
  3. package/dist/dist-cjs/communication-react/{ChatMessageComponentAsRichTextEditBox-D2h2ZRSt.js.map → ChatMessageComponentAsRichTextEditBox-DseIP_bT.js.map} +1 -1
  4. package/dist/dist-cjs/communication-react/{RichTextSendBoxWrapper-B4juIBoJ.js → RichTextSendBoxWrapper-C_4OMmY6.js} +2 -2
  5. package/dist/dist-cjs/communication-react/{RichTextSendBoxWrapper-B4juIBoJ.js.map → RichTextSendBoxWrapper-C_4OMmY6.js.map} +1 -1
  6. package/dist/dist-cjs/communication-react/{index-CJjvV64L.js → index-Dlqkspdp.js} +144 -50
  7. package/dist/dist-cjs/communication-react/index-Dlqkspdp.js.map +1 -0
  8. package/dist/dist-cjs/communication-react/index.js +1 -1
  9. package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js +1 -1
  10. package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js.map +1 -1
  11. package/dist/dist-esm/chat-component-bindings/src/messageThreadSelector.js +5 -4
  12. package/dist/dist-esm/chat-component-bindings/src/messageThreadSelector.js.map +1 -1
  13. package/dist/dist-esm/chat-stateful-client/src/ChatClientState.d.ts +1 -0
  14. package/dist/dist-esm/chat-stateful-client/src/ChatClientState.js.map +1 -1
  15. package/dist/dist-esm/chat-stateful-client/src/EventSubscriber.js +3 -1
  16. package/dist/dist-esm/chat-stateful-client/src/EventSubscriber.js.map +1 -1
  17. package/dist/dist-esm/chat-stateful-client/src/convertChatMessage.js +1 -7
  18. package/dist/dist-esm/chat-stateful-client/src/convertChatMessage.js.map +1 -1
  19. package/dist/dist-esm/chat-stateful-client/src/types/ChatMessageWithStatus.d.ts +0 -1
  20. package/dist/dist-esm/chat-stateful-client/src/types/ChatMessageWithStatus.js.map +1 -1
  21. package/dist/dist-esm/react-components/src/components/ParticipantList.d.ts +2 -0
  22. package/dist/dist-esm/react-components/src/components/ParticipantList.js +5 -4
  23. package/dist/dist-esm/react-components/src/components/ParticipantList.js.map +1 -1
  24. package/dist/dist-esm/react-components/src/components/styles/ChatMessageComponent.styles.js +2 -1
  25. package/dist/dist-esm/react-components/src/components/styles/ChatMessageComponent.styles.js.map +1 -1
  26. package/dist/dist-esm/react-components/src/theming/icons.d.ts +1 -0
  27. package/dist/dist-esm/react-components/src/theming/icons.js +2 -1
  28. package/dist/dist-esm/react-components/src/theming/icons.js.map +1 -1
  29. package/dist/dist-esm/react-composites/src/composites/CallComposite/Strings.d.ts +23 -0
  30. package/dist/dist-esm/react-composites/src/composites/CallComposite/Strings.js.map +1 -1
  31. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallArrangement.d.ts +7 -0
  32. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallArrangement.js +28 -1
  33. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/CallArrangement.js.map +1 -1
  34. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/SidePane/usePeoplePane.d.ts +4 -0
  35. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/SidePane/usePeoplePane.js +52 -5
  36. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/SidePane/usePeoplePane.js.map +1 -1
  37. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/CallPage.js +1 -1
  38. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/CallPage.js.map +1 -1
  39. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatComposite.d.ts +4 -3
  40. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatComposite.js +4 -5
  41. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/CallWithChatComposite.js.map +1 -1
  42. package/dist/dist-esm/react-composites/src/composites/ChatComposite/ChatComposite.d.ts +4 -3
  43. package/dist/dist-esm/react-composites/src/composites/ChatComposite/ChatComposite.js.map +1 -1
  44. package/dist/dist-esm/react-composites/src/composites/ChatComposite/ChatScreen.js +26 -5
  45. package/dist/dist-esm/react-composites/src/composites/ChatComposite/ChatScreen.js.map +1 -1
  46. package/dist/dist-esm/react-composites/src/composites/common/ParticipantContainer.d.ts +1 -0
  47. package/dist/dist-esm/react-composites/src/composites/common/ParticipantContainer.js +2 -2
  48. package/dist/dist-esm/react-composites/src/composites/common/ParticipantContainer.js.map +1 -1
  49. package/dist/dist-esm/react-composites/src/composites/common/PeoplePaneContent.d.ts +1 -0
  50. package/dist/dist-esm/react-composites/src/composites/common/PeoplePaneContent.js +1 -1
  51. package/dist/dist-esm/react-composites/src/composites/common/PeoplePaneContent.js.map +1 -1
  52. package/dist/dist-esm/react-composites/src/composites/common/SendBoxPicker.js +3 -3
  53. package/dist/dist-esm/react-composites/src/composites/common/SendBoxPicker.js.map +1 -1
  54. package/dist/dist-esm/react-composites/src/composites/common/icons.d.ts +8 -12
  55. package/dist/dist-esm/react-composites/src/composites/localization/locales/en-US/strings.json +6 -1
  56. package/package.json +2 -2
  57. package/dist/dist-cjs/communication-react/index-CJjvV64L.js.map +0 -1
@@ -70,12 +70,12 @@ export const ChatScreen = (props) => {
70
70
  /* @conditional-compile-remove(rich-text-editor-composite-support) */
71
71
  useEffect(() => {
72
72
  // if rich text editor is enabled, the rich text editor component should be loaded early for good UX
73
- if ((options === null || options === void 0 ? void 0 : options.richTextEditorOptions) !== undefined) {
73
+ if (options === null || options === void 0 ? void 0 : options.richTextEditor) {
74
74
  // this line is needed to load the Rooster JS dependencies early in the lifecycle
75
75
  // when the rich text editor is enabled
76
76
  loadRichTextSendBox();
77
77
  }
78
- }, [options === null || options === void 0 ? void 0 : options.richTextEditorOptions]);
78
+ }, [options === null || options === void 0 ? void 0 : options.richTextEditor]);
79
79
  const messageThreadProps = usePropsFor(MessageThread);
80
80
  const typingIndicatorProps = usePropsFor(TypingIndicator);
81
81
  const headerProps = useAdaptedSelector(getHeaderProps);
@@ -299,6 +299,27 @@ export const ChatScreen = (props) => {
299
299
  handleUploadAction({ type: AttachmentUploadActionType.Remove, id });
300
300
  (_b = (_a = attachmentOptions === null || attachmentOptions === void 0 ? void 0 : attachmentOptions.uploadOptions) === null || _a === void 0 ? void 0 : _a.handleAttachmentRemoval) === null || _b === void 0 ? void 0 : _b.call(_a, id);
301
301
  }, [attachmentOptions === null || attachmentOptions === void 0 ? void 0 : attachmentOptions.uploadOptions]);
302
+ /* @conditional-compile-remove(rich-text-editor-image-upload) */
303
+ const removeImageTags = useCallback((event) => {
304
+ event.content.querySelectorAll('img').forEach((image) => {
305
+ // If the image is the only child of its parent, remove all the parents of this img element.
306
+ let parentNode = image.parentElement;
307
+ let currentNode = image;
308
+ while ((parentNode === null || parentNode === void 0 ? void 0 : parentNode.childNodes.length) === 1) {
309
+ currentNode = parentNode;
310
+ parentNode = parentNode.parentElement;
311
+ }
312
+ currentNode === null || currentNode === void 0 ? void 0 : currentNode.remove();
313
+ });
314
+ }, []);
315
+ /* @conditional-compile-remove(rich-text-editor-composite-support) */
316
+ const richTextEditorOptions = useMemo(() => {
317
+ return (options === null || options === void 0 ? void 0 : options.richTextEditor)
318
+ ? {
319
+ /* @conditional-compile-remove(rich-text-editor-image-upload) */ onPaste: removeImageTags
320
+ }
321
+ : undefined;
322
+ }, [options === null || options === void 0 ? void 0 : options.richTextEditor, removeImageTags]);
302
323
  return (React.createElement(Stack, { className: chatContainer, grow: true },
303
324
  (options === null || options === void 0 ? void 0 : options.topic) !== false && React.createElement(ChatHeader, Object.assign({}, headerProps)),
304
325
  React.createElement(Stack, { className: chatArea, tokens: participantListContainerPadding, horizontal: true, grow: true },
@@ -311,8 +332,8 @@ export const ChatScreen = (props) => {
311
332
  React.createElement(MessageThread, Object.assign({}, messageThreadProps, { onRenderAvatar: onRenderAvatarCallback, onRenderMessage: onRenderMessage,
312
333
  /* @conditional-compile-remove(file-sharing-acs) */
313
334
  onRenderAttachmentDownloads: onRenderAttachmentDownloads, inlineImageOptions: inlineImageOptions, numberOfChatMessagesToReload: defaultNumberOfChatMessagesToReload, styles: messageThreadStyles,
314
- /* @conditional-compile-remove(rich-text-editor-composite-support) @conditional-compile-remove(rich-text-editor) */
315
- richTextEditorOptions: options === null || options === void 0 ? void 0 : options.richTextEditorOptions })),
335
+ /* @conditional-compile-remove(rich-text-editor-composite-support) */
336
+ richTextEditorOptions: richTextEditorOptions })),
316
337
  React.createElement(Stack, { className: mergeStyles(sendboxContainerStyles) },
317
338
  React.createElement("div", { className: mergeStyles(typingIndicatorContainerStyles) }, onRenderTypingIndicator ? (onRenderTypingIndicator(typingIndicatorProps.typingUsers)) : (React.createElement(TypingIndicator, Object.assign({}, typingIndicatorProps, { styles: typingIndicatorStyles })))),
318
339
  React.createElement(Stack, { horizontal: formFactor === 'mobile' },
@@ -323,7 +344,7 @@ export const ChatScreen = (props) => {
323
344
  React.createElement(Stack, { grow: true },
324
345
  React.createElement(SendBoxPicker, { styles: sendBoxStyles, autoFocus: options === null || options === void 0 ? void 0 : options.autoFocus,
325
346
  /* @conditional-compile-remove(rich-text-editor-composite-support) */
326
- richTextEditorOptions: options === null || options === void 0 ? void 0 : options.richTextEditorOptions,
347
+ richTextEditorOptions: richTextEditorOptions,
327
348
  /* @conditional-compile-remove(file-sharing-acs) */
328
349
  attachments: attachments,
329
350
  /* @conditional-compile-remove(file-sharing-acs) */
@@ -1 +1 @@
1
- {"version":3,"file":"ChatScreen.js","sourceRoot":"","sources":["../../../../../../../react-composites/src/composites/ChatComposite/ChatScreen.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { isIOS } from '@fluentui/react';\nimport { mergeStyles, Stack } from '@fluentui/react';\nimport { PersonaSize } from '@fluentui/react';\nimport {\n CommunicationParticipant,\n ErrorBar,\n MessageProps,\n MessageRenderer,\n MessageThread,\n MessageThreadStyles,\n ParticipantMenuItemsCallback,\n SendBoxStylesProps,\n TypingIndicator,\n TypingIndicatorStylesProps,\n useTheme\n} from '@internal/react-components';\n/* @conditional-compile-remove(file-sharing-acs) */\nimport { ChatMessage } from '@internal/react-components';\nimport React, { useCallback, useEffect, useMemo } from 'react';\n/* @conditional-compile-remove(file-sharing-acs) */\nimport { useReducer } from 'react';\nimport { useState } from 'react';\nimport { AvatarPersona, AvatarPersonaDataCallback, AvatarPersonaProps } from '../common/AvatarPersona';\nimport { useAdapter } from './adapter/ChatAdapterProvider';\nimport { ChatCompositeOptions } from './ChatComposite';\nimport { ChatHeader, getHeaderProps } from './ChatHeader';\n/* @conditional-compile-remove(file-sharing-acs) */\nimport { AttachmentUploadButtonWrapper as AttachmentUploadButton } from './file-sharing';\nimport { useAdaptedSelector } from './hooks/useAdaptedSelector';\nimport { usePropsFor } from './hooks/usePropsFor';\n\nimport {\n chatArea,\n chatContainer,\n chatWrapper,\n messageThreadChatCompositeStyles,\n sendboxContainerStyles,\n typingIndicatorContainerStyles\n} from './styles/Chat.styles';\nimport { participantListContainerPadding } from '../common/styles/ParticipantContainer.styles';\n/* @conditional-compile-remove(chat-composite-participant-pane) */\nimport { ChatScreenPeoplePane } from './ChatScreenPeoplePane';\nimport { toFlatCommunicationIdentifier } from '@internal/acs-ui-common';\n/* @conditional-compile-remove(file-sharing-acs) */\nimport { AttachmentDownloadErrorBar } from './AttachmentDownloadErrorBar';\nimport { _AttachmentDownloadCards } from '@internal/react-components';\nimport { ImageOverlay } from '@internal/react-components';\nimport { InlineImage } from '@internal/react-components';\nimport { ResourceFetchResult } from '@internal/chat-stateful-client';\n/* @conditional-compile-remove(file-sharing-acs) */\nimport { AttachmentOptions } from '@internal/react-components';\n/* @conditional-compile-remove(file-sharing-acs) */\nimport { nanoid } from 'nanoid';\n/* @conditional-compile-remove(file-sharing-acs) */\nimport { AttachmentUploadActionType, AttachmentUpload, AttachmentUploadReducer } from './file-sharing/AttachmentUpload';\n/* @conditional-compile-remove(file-sharing-acs) */\nimport { MessageOptions } from '@internal/acs-ui-common';\nimport { SendBoxPicker } from '../common/SendBoxPicker';\n/* @conditional-compile-remove(rich-text-editor-composite-support) */\nimport { loadRichTextSendBox } from '../common/SendBoxPicker';\n\n/**\n * @private\n */\nexport type ChatScreenProps = {\n options?: ChatCompositeOptions;\n onFetchAvatarPersonaData?: AvatarPersonaDataCallback;\n onRenderMessage?: (messageProps: MessageProps, defaultOnRender?: MessageRenderer) => JSX.Element;\n onRenderTypingIndicator?: (typingUsers: CommunicationParticipant[]) => JSX.Element;\n onFetchParticipantMenuItems?: ParticipantMenuItemsCallback;\n styles?: ChatScreenStyles;\n /* @conditional-compile-remove(file-sharing-acs) */\n attachmentOptions?: AttachmentOptions;\n formFactor?: 'desktop' | 'mobile';\n};\n\n/**\n * @private\n */\nexport type ChatScreenStyles = {\n messageThread?: MessageThreadStyles;\n sendBox?: SendBoxStylesProps;\n typingIndicator?: TypingIndicatorStylesProps;\n};\n\n/**\n * @private\n */\ninterface OverlayImageItem {\n imageSrc: string;\n title: string;\n titleIcon: JSX.Element;\n attachmentId: string;\n messageId: string;\n imageUrl: string;\n}\n\n/**\n * @private\n */\nexport const ChatScreen = (props: ChatScreenProps): JSX.Element => {\n const {\n onFetchAvatarPersonaData,\n onRenderMessage,\n onRenderTypingIndicator,\n options,\n styles,\n /* @conditional-compile-remove(file-sharing-acs) */\n attachmentOptions,\n formFactor\n } = props;\n\n const defaultNumberOfChatMessagesToReload = 5;\n /* @conditional-compile-remove(file-sharing-acs) */\n const [downloadErrorMessage, setDownloadErrorMessage] = React.useState('');\n const [overlayImageItem, setOverlayImageItem] = useState<OverlayImageItem>();\n const [isImageOverlayOpen, setIsImageOverlayOpen] = useState<boolean>(false);\n /* @conditional-compile-remove(file-sharing-acs) */\n const [uploads, handleUploadAction] = useReducer(AttachmentUploadReducer, []);\n\n const adapter = useAdapter();\n const theme = useTheme();\n\n useEffect(() => {\n // Initial data should be always fetched by the composite(or external caller) instead of the adapter\n const fetchData: () => Promise<void> = async () => {\n // Fetch initial data for adapter\n await adapter.fetchInitialData();\n // Fetch initial set of messages. Without fetching messages here, if the Composite's adapter is changed the message thread does not load new messages.\n await adapter.loadPreviousChatMessages(defaultNumberOfChatMessagesToReload);\n };\n fetchData();\n }, [adapter]);\n\n /* @conditional-compile-remove(rich-text-editor-composite-support) */\n useEffect(() => {\n // if rich text editor is enabled, the rich text editor component should be loaded early for good UX\n if (options?.richTextEditorOptions !== undefined) {\n // this line is needed to load the Rooster JS dependencies early in the lifecycle\n // when the rich text editor is enabled\n loadRichTextSendBox();\n }\n }, [options?.richTextEditorOptions]);\n\n const messageThreadProps = usePropsFor(MessageThread);\n const typingIndicatorProps = usePropsFor(TypingIndicator);\n const headerProps = useAdaptedSelector(getHeaderProps);\n const errorBarProps = usePropsFor(ErrorBar);\n\n useEffect(() => {\n if (overlayImageItem === undefined) {\n return;\n }\n const message = adapter.getState().thread.chatMessages[overlayImageItem.messageId];\n if (message === undefined) {\n return;\n }\n const resourceCache = message.resourceCache;\n if (overlayImageItem.imageSrc === '' && resourceCache && resourceCache[overlayImageItem.imageUrl]) {\n const fullSizeImageSrc = getResourceSourceUrl(resourceCache[overlayImageItem.imageUrl]);\n if (fullSizeImageSrc === undefined || fullSizeImageSrc === '' || overlayImageItem.imageSrc === fullSizeImageSrc) {\n return;\n }\n setOverlayImageItem({\n ...overlayImageItem,\n imageSrc: fullSizeImageSrc\n });\n }\n // Disable eslint because we are using the overlayImageItem in this effect but don't want to have it as a dependency, as it will cause an infinite loop.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [messageThreadProps.messages]);\n\n const getResourceSourceUrl = (result: ResourceFetchResult): string => {\n let src = '';\n if (result.error || !result.sourceUrl) {\n src = 'blob://';\n } else {\n src = result.sourceUrl;\n }\n\n return src;\n };\n\n const onRenderAvatarCallback = useCallback(\n (userId?: string, defaultOptions?: AvatarPersonaProps) => {\n return (\n <AvatarPersona\n userId={userId}\n hidePersonaDetails={true}\n {...defaultOptions}\n dataProvider={onFetchAvatarPersonaData}\n />\n );\n },\n [onFetchAvatarPersonaData]\n );\n\n const messageThreadStyles = useMemo(() => {\n return Object.assign(\n {},\n messageThreadChatCompositeStyles(theme.semanticColors.bodyBackground),\n styles?.messageThread\n );\n }, [styles?.messageThread, theme.semanticColors.bodyBackground]);\n\n const typingIndicatorStyles = useMemo(() => {\n return Object.assign({}, styles?.typingIndicator);\n }, [styles?.typingIndicator]);\n\n const sendBoxStyles = useMemo(() => {\n return Object.assign({}, styles?.sendBox);\n }, [styles?.sendBox]);\n\n const userId = toFlatCommunicationIdentifier(adapter.getState().userId);\n\n /* @conditional-compile-remove(file-sharing-acs) */\n const attachmentUploadButtonOnChange = useCallback(\n (files: FileList | null): void => {\n if (!files) {\n return;\n }\n\n // Get files, change to tasks, store locally and pass back to Contoso\n const newUploads = Array.from(files).map((file): AttachmentUpload => {\n const taskId = nanoid();\n return {\n file,\n taskId,\n metadata: {\n id: taskId,\n name: file.name,\n progress: 0\n },\n notifyUploadProgressChanged: (value: number) => {\n handleUploadAction({ type: AttachmentUploadActionType.Progress, taskId, progress: value });\n },\n notifyUploadCompleted: (id: string, url: string) => {\n handleUploadAction({ type: AttachmentUploadActionType.Completed, taskId, id, url });\n },\n notifyUploadFailed: (message: string) => {\n handleUploadAction({ type: AttachmentUploadActionType.Failed, taskId, message });\n // remove the failed upload task when error banner is auto dismissed after 10 seconds\n // so the banner won't be shown again on UI re-rendering.\n setTimeout(() => {\n handleUploadAction({ type: AttachmentUploadActionType.Remove, id: taskId });\n }, 10 * 1000);\n }\n };\n });\n\n handleUploadAction({ type: AttachmentUploadActionType.Set, newUploads });\n attachmentOptions?.uploadOptions?.handleAttachmentSelection(newUploads);\n },\n [attachmentOptions?.uploadOptions]\n );\n\n /* @conditional-compile-remove(file-sharing-acs) */\n const onRenderAttachmentDownloads = useCallback(\n (message: ChatMessage) =>\n message?.attachments?.length ?? 0 > 0 ? (\n <_AttachmentDownloadCards\n attachments={message.attachments}\n message={message}\n actionsForAttachment={attachmentOptions?.downloadOptions?.actionsForAttachment}\n onActionHandlerFailed={(errorMessage: string) => {\n setDownloadErrorMessage(errorMessage);\n }}\n />\n ) : (\n <></>\n ),\n [attachmentOptions?.downloadOptions?.actionsForAttachment]\n );\n\n const onInlineImageClicked = useCallback(\n (attachmentId: string, messageId: string) => {\n const message = adapter.getState().thread.chatMessages[messageId];\n const inlinedImages = message.content?.attachments?.filter((attachment) => {\n return attachment.attachmentType === 'image' && attachment.id === attachmentId;\n });\n\n if (!inlinedImages || inlinedImages.length <= 0) {\n return;\n }\n\n const attachment = inlinedImages[0];\n\n const resourceCache = message.resourceCache;\n let imageSrc = '';\n\n if (attachment.url) {\n if (resourceCache && resourceCache[attachment.url]) {\n imageSrc = getResourceSourceUrl(resourceCache[attachment.url]);\n } else {\n adapter.downloadResourceToCache({\n threadId: adapter.getState().thread.threadId,\n messageId: messageId,\n resourceUrl: attachment.url\n });\n }\n }\n\n const titleIconRenderOptions = {\n text: message.senderDisplayName,\n size: PersonaSize.size32,\n showOverflowTooltip: false,\n imageAlt: message.senderDisplayName\n };\n\n const messageSenderId = message.sender !== undefined ? toFlatCommunicationIdentifier(message.sender) : userId;\n const titleIcon = onRenderAvatarCallback && onRenderAvatarCallback(messageSenderId, titleIconRenderOptions);\n const overlayImage: OverlayImageItem = {\n title: message.senderDisplayName || '',\n titleIcon: titleIcon,\n attachmentId: attachment.id,\n imageSrc: imageSrc,\n messageId: messageId,\n imageUrl: attachment.url || ''\n };\n\n setIsImageOverlayOpen(true);\n setOverlayImageItem(overlayImage);\n },\n [adapter, onRenderAvatarCallback, userId]\n );\n\n const onRenderInlineImage = useCallback(\n (inlineImage: InlineImage, defaultOnRender: (inlineImage: InlineImage) => JSX.Element): JSX.Element => {\n const message = adapter.getState().thread.chatMessages[inlineImage.messageId];\n const attachment = message?.content?.attachments?.find(\n (attachment) => attachment.id === inlineImage.imageAttributes.id\n );\n\n if (attachment === undefined) {\n return defaultOnRender(inlineImage);\n }\n\n let pointerEvents: 'none' | 'auto' = inlineImage.imageAttributes.src === '' ? 'none' : 'auto';\n const resourceCache = message.resourceCache;\n if (\n resourceCache &&\n attachment.previewUrl &&\n resourceCache[attachment.previewUrl] &&\n resourceCache[attachment.previewUrl].error\n ) {\n pointerEvents = 'none';\n }\n\n return (\n <span\n key={inlineImage.imageAttributes.id}\n onClick={() => onInlineImageClicked(inlineImage.imageAttributes.id || '', inlineImage.messageId)}\n tabIndex={0}\n role=\"button\"\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n onInlineImageClicked(inlineImage.imageAttributes.id || '', inlineImage.messageId);\n }\n }}\n style={{ cursor: 'pointer', pointerEvents }}\n >\n {defaultOnRender(inlineImage)}\n </span>\n );\n },\n [adapter, onInlineImageClicked]\n );\n\n const inlineImageOptions = useMemo(() => {\n return { onRenderInlineImage: onRenderInlineImage };\n }, [onRenderInlineImage]);\n\n const onDownloadButtonClicked = useCallback(\n (imageSrc: string): void => {\n if (imageSrc === '') {\n return;\n }\n if (isIOS()) {\n window.open(imageSrc, '_blank');\n } else {\n // Create a new anchor element\n const a = document.createElement('a');\n // Set the href and download attributes for the anchor element\n a.href = imageSrc;\n a.download = overlayImageItem?.attachmentId || '';\n a.rel = 'noopener noreferrer';\n a.target = '_blank';\n\n // Programmatically click the anchor element to trigger the download\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n }\n },\n [overlayImageItem?.attachmentId]\n );\n\n /* @conditional-compile-remove(file-sharing-acs) */\n const AttachmentButton = useCallback(() => {\n if (!attachmentOptions?.uploadOptions?.handleAttachmentSelection) {\n return null;\n }\n return (\n <AttachmentUploadButton\n supportedMediaTypes={attachmentOptions?.uploadOptions?.supportedMediaTypes}\n disableMultipleUploads={attachmentOptions?.uploadOptions?.disableMultipleUploads}\n onChange={attachmentUploadButtonOnChange}\n />\n );\n return <></>;\n }, [\n attachmentOptions?.uploadOptions?.handleAttachmentSelection,\n attachmentOptions?.uploadOptions?.supportedMediaTypes,\n attachmentOptions?.uploadOptions?.disableMultipleUploads,\n attachmentUploadButtonOnChange\n ]);\n\n /* @conditional-compile-remove(file-sharing-acs) */\n const attachments = useMemo(() => {\n return uploads?.map((v) => v.metadata);\n }, [uploads]);\n\n const onSendMessageHandler = useCallback(\n async function (\n content: string,\n /* @conditional-compile-remove(file-sharing-acs) */ /* @conditional-compile-remove(rich-text-editor-composite-support) */ options?: MessageOptions\n ) {\n /* @conditional-compile-remove(file-sharing-acs) */\n const attachments = options?.attachments ?? [];\n /* @conditional-compile-remove(file-sharing-acs) */\n handleUploadAction({ type: AttachmentUploadActionType.Clear });\n /* @conditional-compile-remove(file-sharing-acs) */\n await adapter.sendMessage(content, {\n attachments: attachments,\n /* @conditional-compile-remove(rich-text-editor-composite-support) */\n type: options?.type\n });\n /* @conditional-compile-remove(file-sharing-acs) */\n return;\n await adapter.sendMessage(content, {\n /* @conditional-compile-remove(rich-text-editor-composite-support) */\n type: options?.type\n });\n },\n [adapter]\n );\n\n /* @conditional-compile-remove(file-sharing-acs) */\n const onCancelUploadHandler = useCallback(\n (id: string) => {\n handleUploadAction({ type: AttachmentUploadActionType.Remove, id });\n attachmentOptions?.uploadOptions?.handleAttachmentRemoval?.(id);\n },\n [attachmentOptions?.uploadOptions]\n );\n return (\n <Stack className={chatContainer} grow>\n {options?.topic !== false && <ChatHeader {...headerProps} />}\n <Stack className={chatArea} tokens={participantListContainerPadding} horizontal grow>\n <Stack className={chatWrapper} grow>\n {options?.errorBar !== false && <ErrorBar {...errorBarProps} />}\n {\n /* @conditional-compile-remove(file-sharing-acs) */\n <AttachmentDownloadErrorBar\n onDismissDownloadErrorMessage={useCallback(() => {\n setDownloadErrorMessage('');\n }, [])}\n attachmentDownloadErrorMessage={downloadErrorMessage || ''}\n />\n }\n <MessageThread\n {...messageThreadProps}\n onRenderAvatar={onRenderAvatarCallback}\n onRenderMessage={onRenderMessage}\n /* @conditional-compile-remove(file-sharing-acs) */\n onRenderAttachmentDownloads={onRenderAttachmentDownloads}\n inlineImageOptions={inlineImageOptions}\n numberOfChatMessagesToReload={defaultNumberOfChatMessagesToReload}\n styles={messageThreadStyles}\n /* @conditional-compile-remove(rich-text-editor-composite-support) @conditional-compile-remove(rich-text-editor) */\n richTextEditorOptions={options?.richTextEditorOptions}\n />\n <Stack className={mergeStyles(sendboxContainerStyles)}>\n <div className={mergeStyles(typingIndicatorContainerStyles)}>\n {onRenderTypingIndicator ? (\n onRenderTypingIndicator(typingIndicatorProps.typingUsers)\n ) : (\n <TypingIndicator {...typingIndicatorProps} styles={typingIndicatorStyles} />\n )}\n </div>\n <Stack horizontal={formFactor === 'mobile'}>\n {formFactor === 'mobile' && (\n /* @conditional-compile-remove(file-sharing-acs) */\n <Stack verticalAlign=\"center\">\n <AttachmentButton />\n </Stack>\n )}\n <Stack grow>\n <SendBoxPicker\n styles={sendBoxStyles}\n autoFocus={options?.autoFocus}\n /* @conditional-compile-remove(rich-text-editor-composite-support) */\n richTextEditorOptions={options?.richTextEditorOptions}\n /* @conditional-compile-remove(file-sharing-acs) */\n attachments={attachments}\n /* @conditional-compile-remove(file-sharing-acs) */\n onCancelAttachmentUpload={onCancelUploadHandler}\n // we need to overwrite onSendMessage for SendBox because we need to clear attachment state\n // when submit button is clicked\n onSendMessage={onSendMessageHandler}\n />\n </Stack>\n {formFactor !== 'mobile' && (\n /* @conditional-compile-remove(file-sharing-acs) */\n <AttachmentButton />\n )}\n </Stack>\n </Stack>\n </Stack>\n {\n /* @conditional-compile-remove(chat-composite-participant-pane) */\n options?.participantPane === true && (\n <ChatScreenPeoplePane\n onFetchAvatarPersonaData={onFetchAvatarPersonaData}\n onFetchParticipantMenuItems={props.onFetchParticipantMenuItems}\n isMobile={formFactor === 'mobile'}\n />\n )\n }\n </Stack>\n {overlayImageItem && (\n <ImageOverlay\n {...overlayImageItem}\n isOpen={isImageOverlayOpen}\n onDismiss={() => {\n setOverlayImageItem(undefined);\n setIsImageOverlayOpen(false);\n adapter.removeResourceFromCache({\n threadId: adapter.getState().thread.threadId,\n messageId: overlayImageItem.messageId,\n resourceUrl: overlayImageItem.imageUrl\n });\n }}\n onDownloadButtonClicked={onDownloadButtonClicked}\n />\n )}\n </Stack>\n );\n};\n"]}
1
+ {"version":3,"file":"ChatScreen.js","sourceRoot":"","sources":["../../../../../../../react-composites/src/composites/ChatComposite/ChatScreen.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { isIOS } from '@fluentui/react';\nimport { mergeStyles, Stack } from '@fluentui/react';\nimport { PersonaSize } from '@fluentui/react';\nimport {\n CommunicationParticipant,\n ErrorBar,\n MessageProps,\n MessageRenderer,\n MessageThread,\n MessageThreadStyles,\n ParticipantMenuItemsCallback,\n SendBoxStylesProps,\n TypingIndicator,\n TypingIndicatorStylesProps,\n useTheme\n} from '@internal/react-components';\n/* @conditional-compile-remove(file-sharing-acs) */\nimport { ChatMessage } from '@internal/react-components';\nimport React, { useCallback, useEffect, useMemo } from 'react';\n/* @conditional-compile-remove(file-sharing-acs) */\nimport { useReducer } from 'react';\nimport { useState } from 'react';\nimport { AvatarPersona, AvatarPersonaDataCallback, AvatarPersonaProps } from '../common/AvatarPersona';\nimport { useAdapter } from './adapter/ChatAdapterProvider';\nimport { ChatCompositeOptions } from './ChatComposite';\nimport { ChatHeader, getHeaderProps } from './ChatHeader';\n/* @conditional-compile-remove(file-sharing-acs) */\nimport { AttachmentUploadButtonWrapper as AttachmentUploadButton } from './file-sharing';\nimport { useAdaptedSelector } from './hooks/useAdaptedSelector';\nimport { usePropsFor } from './hooks/usePropsFor';\n\nimport {\n chatArea,\n chatContainer,\n chatWrapper,\n messageThreadChatCompositeStyles,\n sendboxContainerStyles,\n typingIndicatorContainerStyles\n} from './styles/Chat.styles';\nimport { participantListContainerPadding } from '../common/styles/ParticipantContainer.styles';\n/* @conditional-compile-remove(chat-composite-participant-pane) */\nimport { ChatScreenPeoplePane } from './ChatScreenPeoplePane';\nimport { toFlatCommunicationIdentifier } from '@internal/acs-ui-common';\n/* @conditional-compile-remove(file-sharing-acs) */\nimport { AttachmentDownloadErrorBar } from './AttachmentDownloadErrorBar';\nimport { _AttachmentDownloadCards } from '@internal/react-components';\nimport { ImageOverlay } from '@internal/react-components';\nimport { InlineImage } from '@internal/react-components';\nimport { ResourceFetchResult } from '@internal/chat-stateful-client';\n/* @conditional-compile-remove(file-sharing-acs) */\nimport { AttachmentOptions } from '@internal/react-components';\n/* @conditional-compile-remove(file-sharing-acs) */\nimport { nanoid } from 'nanoid';\n/* @conditional-compile-remove(file-sharing-acs) */\nimport { AttachmentUploadActionType, AttachmentUpload, AttachmentUploadReducer } from './file-sharing/AttachmentUpload';\n/* @conditional-compile-remove(file-sharing-acs) */\nimport { MessageOptions } from '@internal/acs-ui-common';\nimport { SendBoxPicker } from '../common/SendBoxPicker';\n/* @conditional-compile-remove(rich-text-editor-composite-support) */\nimport { loadRichTextSendBox } from '../common/SendBoxPicker';\n\n/**\n * @private\n */\nexport type ChatScreenProps = {\n options?: ChatCompositeOptions;\n onFetchAvatarPersonaData?: AvatarPersonaDataCallback;\n onRenderMessage?: (messageProps: MessageProps, defaultOnRender?: MessageRenderer) => JSX.Element;\n onRenderTypingIndicator?: (typingUsers: CommunicationParticipant[]) => JSX.Element;\n onFetchParticipantMenuItems?: ParticipantMenuItemsCallback;\n styles?: ChatScreenStyles;\n /* @conditional-compile-remove(file-sharing-acs) */\n attachmentOptions?: AttachmentOptions;\n formFactor?: 'desktop' | 'mobile';\n};\n\n/**\n * @private\n */\nexport type ChatScreenStyles = {\n messageThread?: MessageThreadStyles;\n sendBox?: SendBoxStylesProps;\n typingIndicator?: TypingIndicatorStylesProps;\n};\n\n/**\n * @private\n */\ninterface OverlayImageItem {\n imageSrc: string;\n title: string;\n titleIcon: JSX.Element;\n attachmentId: string;\n messageId: string;\n imageUrl: string;\n}\n\n/**\n * @private\n */\nexport const ChatScreen = (props: ChatScreenProps): JSX.Element => {\n const {\n onFetchAvatarPersonaData,\n onRenderMessage,\n onRenderTypingIndicator,\n options,\n styles,\n /* @conditional-compile-remove(file-sharing-acs) */\n attachmentOptions,\n formFactor\n } = props;\n\n const defaultNumberOfChatMessagesToReload = 5;\n /* @conditional-compile-remove(file-sharing-acs) */\n const [downloadErrorMessage, setDownloadErrorMessage] = React.useState('');\n const [overlayImageItem, setOverlayImageItem] = useState<OverlayImageItem>();\n const [isImageOverlayOpen, setIsImageOverlayOpen] = useState<boolean>(false);\n /* @conditional-compile-remove(file-sharing-acs) */\n const [uploads, handleUploadAction] = useReducer(AttachmentUploadReducer, []);\n\n const adapter = useAdapter();\n const theme = useTheme();\n\n useEffect(() => {\n // Initial data should be always fetched by the composite(or external caller) instead of the adapter\n const fetchData: () => Promise<void> = async () => {\n // Fetch initial data for adapter\n await adapter.fetchInitialData();\n // Fetch initial set of messages. Without fetching messages here, if the Composite's adapter is changed the message thread does not load new messages.\n await adapter.loadPreviousChatMessages(defaultNumberOfChatMessagesToReload);\n };\n fetchData();\n }, [adapter]);\n\n /* @conditional-compile-remove(rich-text-editor-composite-support) */\n useEffect(() => {\n // if rich text editor is enabled, the rich text editor component should be loaded early for good UX\n if (options?.richTextEditor) {\n // this line is needed to load the Rooster JS dependencies early in the lifecycle\n // when the rich text editor is enabled\n loadRichTextSendBox();\n }\n }, [options?.richTextEditor]);\n\n const messageThreadProps = usePropsFor(MessageThread);\n const typingIndicatorProps = usePropsFor(TypingIndicator);\n const headerProps = useAdaptedSelector(getHeaderProps);\n const errorBarProps = usePropsFor(ErrorBar);\n\n useEffect(() => {\n if (overlayImageItem === undefined) {\n return;\n }\n const message = adapter.getState().thread.chatMessages[overlayImageItem.messageId];\n if (message === undefined) {\n return;\n }\n const resourceCache = message.resourceCache;\n if (overlayImageItem.imageSrc === '' && resourceCache && resourceCache[overlayImageItem.imageUrl]) {\n const fullSizeImageSrc = getResourceSourceUrl(resourceCache[overlayImageItem.imageUrl]);\n if (fullSizeImageSrc === undefined || fullSizeImageSrc === '' || overlayImageItem.imageSrc === fullSizeImageSrc) {\n return;\n }\n setOverlayImageItem({\n ...overlayImageItem,\n imageSrc: fullSizeImageSrc\n });\n }\n // Disable eslint because we are using the overlayImageItem in this effect but don't want to have it as a dependency, as it will cause an infinite loop.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [messageThreadProps.messages]);\n\n const getResourceSourceUrl = (result: ResourceFetchResult): string => {\n let src = '';\n if (result.error || !result.sourceUrl) {\n src = 'blob://';\n } else {\n src = result.sourceUrl;\n }\n\n return src;\n };\n\n const onRenderAvatarCallback = useCallback(\n (userId?: string, defaultOptions?: AvatarPersonaProps) => {\n return (\n <AvatarPersona\n userId={userId}\n hidePersonaDetails={true}\n {...defaultOptions}\n dataProvider={onFetchAvatarPersonaData}\n />\n );\n },\n [onFetchAvatarPersonaData]\n );\n\n const messageThreadStyles = useMemo(() => {\n return Object.assign(\n {},\n messageThreadChatCompositeStyles(theme.semanticColors.bodyBackground),\n styles?.messageThread\n );\n }, [styles?.messageThread, theme.semanticColors.bodyBackground]);\n\n const typingIndicatorStyles = useMemo(() => {\n return Object.assign({}, styles?.typingIndicator);\n }, [styles?.typingIndicator]);\n\n const sendBoxStyles = useMemo(() => {\n return Object.assign({}, styles?.sendBox);\n }, [styles?.sendBox]);\n\n const userId = toFlatCommunicationIdentifier(adapter.getState().userId);\n\n /* @conditional-compile-remove(file-sharing-acs) */\n const attachmentUploadButtonOnChange = useCallback(\n (files: FileList | null): void => {\n if (!files) {\n return;\n }\n\n // Get files, change to tasks, store locally and pass back to Contoso\n const newUploads = Array.from(files).map((file): AttachmentUpload => {\n const taskId = nanoid();\n return {\n file,\n taskId,\n metadata: {\n id: taskId,\n name: file.name,\n progress: 0\n },\n notifyUploadProgressChanged: (value: number) => {\n handleUploadAction({ type: AttachmentUploadActionType.Progress, taskId, progress: value });\n },\n notifyUploadCompleted: (id: string, url: string) => {\n handleUploadAction({ type: AttachmentUploadActionType.Completed, taskId, id, url });\n },\n notifyUploadFailed: (message: string) => {\n handleUploadAction({ type: AttachmentUploadActionType.Failed, taskId, message });\n // remove the failed upload task when error banner is auto dismissed after 10 seconds\n // so the banner won't be shown again on UI re-rendering.\n setTimeout(() => {\n handleUploadAction({ type: AttachmentUploadActionType.Remove, id: taskId });\n }, 10 * 1000);\n }\n };\n });\n\n handleUploadAction({ type: AttachmentUploadActionType.Set, newUploads });\n attachmentOptions?.uploadOptions?.handleAttachmentSelection(newUploads);\n },\n [attachmentOptions?.uploadOptions]\n );\n\n /* @conditional-compile-remove(file-sharing-acs) */\n const onRenderAttachmentDownloads = useCallback(\n (message: ChatMessage) =>\n message?.attachments?.length ?? 0 > 0 ? (\n <_AttachmentDownloadCards\n attachments={message.attachments}\n message={message}\n actionsForAttachment={attachmentOptions?.downloadOptions?.actionsForAttachment}\n onActionHandlerFailed={(errorMessage: string) => {\n setDownloadErrorMessage(errorMessage);\n }}\n />\n ) : (\n <></>\n ),\n [attachmentOptions?.downloadOptions?.actionsForAttachment]\n );\n\n const onInlineImageClicked = useCallback(\n (attachmentId: string, messageId: string) => {\n const message = adapter.getState().thread.chatMessages[messageId];\n const inlinedImages = message.content?.attachments?.filter((attachment) => {\n return attachment.attachmentType === 'image' && attachment.id === attachmentId;\n });\n\n if (!inlinedImages || inlinedImages.length <= 0) {\n return;\n }\n\n const attachment = inlinedImages[0];\n\n const resourceCache = message.resourceCache;\n let imageSrc = '';\n\n if (attachment.url) {\n if (resourceCache && resourceCache[attachment.url]) {\n imageSrc = getResourceSourceUrl(resourceCache[attachment.url]);\n } else {\n adapter.downloadResourceToCache({\n threadId: adapter.getState().thread.threadId,\n messageId: messageId,\n resourceUrl: attachment.url\n });\n }\n }\n\n const titleIconRenderOptions = {\n text: message.senderDisplayName,\n size: PersonaSize.size32,\n showOverflowTooltip: false,\n imageAlt: message.senderDisplayName\n };\n\n const messageSenderId = message.sender !== undefined ? toFlatCommunicationIdentifier(message.sender) : userId;\n const titleIcon = onRenderAvatarCallback && onRenderAvatarCallback(messageSenderId, titleIconRenderOptions);\n const overlayImage: OverlayImageItem = {\n title: message.senderDisplayName || '',\n titleIcon: titleIcon,\n attachmentId: attachment.id,\n imageSrc: imageSrc,\n messageId: messageId,\n imageUrl: attachment.url || ''\n };\n\n setIsImageOverlayOpen(true);\n setOverlayImageItem(overlayImage);\n },\n [adapter, onRenderAvatarCallback, userId]\n );\n\n const onRenderInlineImage = useCallback(\n (inlineImage: InlineImage, defaultOnRender: (inlineImage: InlineImage) => JSX.Element): JSX.Element => {\n const message = adapter.getState().thread.chatMessages[inlineImage.messageId];\n const attachment = message?.content?.attachments?.find(\n (attachment) => attachment.id === inlineImage.imageAttributes.id\n );\n\n if (attachment === undefined) {\n return defaultOnRender(inlineImage);\n }\n\n let pointerEvents: 'none' | 'auto' = inlineImage.imageAttributes.src === '' ? 'none' : 'auto';\n const resourceCache = message.resourceCache;\n if (\n resourceCache &&\n attachment.previewUrl &&\n resourceCache[attachment.previewUrl] &&\n resourceCache[attachment.previewUrl].error\n ) {\n pointerEvents = 'none';\n }\n\n return (\n <span\n key={inlineImage.imageAttributes.id}\n onClick={() => onInlineImageClicked(inlineImage.imageAttributes.id || '', inlineImage.messageId)}\n tabIndex={0}\n role=\"button\"\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n onInlineImageClicked(inlineImage.imageAttributes.id || '', inlineImage.messageId);\n }\n }}\n style={{ cursor: 'pointer', pointerEvents }}\n >\n {defaultOnRender(inlineImage)}\n </span>\n );\n },\n [adapter, onInlineImageClicked]\n );\n\n const inlineImageOptions = useMemo(() => {\n return { onRenderInlineImage: onRenderInlineImage };\n }, [onRenderInlineImage]);\n\n const onDownloadButtonClicked = useCallback(\n (imageSrc: string): void => {\n if (imageSrc === '') {\n return;\n }\n if (isIOS()) {\n window.open(imageSrc, '_blank');\n } else {\n // Create a new anchor element\n const a = document.createElement('a');\n // Set the href and download attributes for the anchor element\n a.href = imageSrc;\n a.download = overlayImageItem?.attachmentId || '';\n a.rel = 'noopener noreferrer';\n a.target = '_blank';\n\n // Programmatically click the anchor element to trigger the download\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n }\n },\n [overlayImageItem?.attachmentId]\n );\n\n /* @conditional-compile-remove(file-sharing-acs) */\n const AttachmentButton = useCallback(() => {\n if (!attachmentOptions?.uploadOptions?.handleAttachmentSelection) {\n return null;\n }\n return (\n <AttachmentUploadButton\n supportedMediaTypes={attachmentOptions?.uploadOptions?.supportedMediaTypes}\n disableMultipleUploads={attachmentOptions?.uploadOptions?.disableMultipleUploads}\n onChange={attachmentUploadButtonOnChange}\n />\n );\n return <></>;\n }, [\n attachmentOptions?.uploadOptions?.handleAttachmentSelection,\n attachmentOptions?.uploadOptions?.supportedMediaTypes,\n attachmentOptions?.uploadOptions?.disableMultipleUploads,\n attachmentUploadButtonOnChange\n ]);\n\n /* @conditional-compile-remove(file-sharing-acs) */\n const attachments = useMemo(() => {\n return uploads?.map((v) => v.metadata);\n }, [uploads]);\n\n const onSendMessageHandler = useCallback(\n async function (\n content: string,\n /* @conditional-compile-remove(file-sharing-acs) */ /* @conditional-compile-remove(rich-text-editor-composite-support) */ options?: MessageOptions\n ) {\n /* @conditional-compile-remove(file-sharing-acs) */\n const attachments = options?.attachments ?? [];\n /* @conditional-compile-remove(file-sharing-acs) */\n handleUploadAction({ type: AttachmentUploadActionType.Clear });\n /* @conditional-compile-remove(file-sharing-acs) */\n await adapter.sendMessage(content, {\n attachments: attachments,\n /* @conditional-compile-remove(rich-text-editor-composite-support) */\n type: options?.type\n });\n /* @conditional-compile-remove(file-sharing-acs) */\n return;\n await adapter.sendMessage(content, {\n /* @conditional-compile-remove(rich-text-editor-composite-support) */\n type: options?.type\n });\n },\n [adapter]\n );\n\n /* @conditional-compile-remove(file-sharing-acs) */\n const onCancelUploadHandler = useCallback(\n (id: string) => {\n handleUploadAction({ type: AttachmentUploadActionType.Remove, id });\n attachmentOptions?.uploadOptions?.handleAttachmentRemoval?.(id);\n },\n [attachmentOptions?.uploadOptions]\n );\n\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n const removeImageTags = useCallback((event: { content: DocumentFragment }) => {\n event.content.querySelectorAll('img').forEach((image) => {\n // If the image is the only child of its parent, remove all the parents of this img element.\n let parentNode: HTMLElement | null = image.parentElement;\n let currentNode: HTMLElement = image;\n while (parentNode?.childNodes.length === 1) {\n currentNode = parentNode;\n parentNode = parentNode.parentElement;\n }\n currentNode?.remove();\n });\n }, []);\n\n /* @conditional-compile-remove(rich-text-editor-composite-support) */\n const richTextEditorOptions = useMemo(() => {\n return options?.richTextEditor\n ? {\n /* @conditional-compile-remove(rich-text-editor-image-upload) */ onPaste: removeImageTags\n }\n : undefined;\n }, [options?.richTextEditor, removeImageTags]);\n\n return (\n <Stack className={chatContainer} grow>\n {options?.topic !== false && <ChatHeader {...headerProps} />}\n <Stack className={chatArea} tokens={participantListContainerPadding} horizontal grow>\n <Stack className={chatWrapper} grow>\n {options?.errorBar !== false && <ErrorBar {...errorBarProps} />}\n {\n /* @conditional-compile-remove(file-sharing-acs) */\n <AttachmentDownloadErrorBar\n onDismissDownloadErrorMessage={useCallback(() => {\n setDownloadErrorMessage('');\n }, [])}\n attachmentDownloadErrorMessage={downloadErrorMessage || ''}\n />\n }\n <MessageThread\n {...messageThreadProps}\n onRenderAvatar={onRenderAvatarCallback}\n onRenderMessage={onRenderMessage}\n /* @conditional-compile-remove(file-sharing-acs) */\n onRenderAttachmentDownloads={onRenderAttachmentDownloads}\n inlineImageOptions={inlineImageOptions}\n numberOfChatMessagesToReload={defaultNumberOfChatMessagesToReload}\n styles={messageThreadStyles}\n /* @conditional-compile-remove(rich-text-editor-composite-support) */\n richTextEditorOptions={richTextEditorOptions}\n />\n <Stack className={mergeStyles(sendboxContainerStyles)}>\n <div className={mergeStyles(typingIndicatorContainerStyles)}>\n {onRenderTypingIndicator ? (\n onRenderTypingIndicator(typingIndicatorProps.typingUsers)\n ) : (\n <TypingIndicator {...typingIndicatorProps} styles={typingIndicatorStyles} />\n )}\n </div>\n <Stack horizontal={formFactor === 'mobile'}>\n {formFactor === 'mobile' && (\n /* @conditional-compile-remove(file-sharing-acs) */\n <Stack verticalAlign=\"center\">\n <AttachmentButton />\n </Stack>\n )}\n <Stack grow>\n <SendBoxPicker\n styles={sendBoxStyles}\n autoFocus={options?.autoFocus}\n /* @conditional-compile-remove(rich-text-editor-composite-support) */\n richTextEditorOptions={richTextEditorOptions}\n /* @conditional-compile-remove(file-sharing-acs) */\n attachments={attachments}\n /* @conditional-compile-remove(file-sharing-acs) */\n onCancelAttachmentUpload={onCancelUploadHandler}\n // we need to overwrite onSendMessage for SendBox because we need to clear attachment state\n // when submit button is clicked\n onSendMessage={onSendMessageHandler}\n />\n </Stack>\n {formFactor !== 'mobile' && (\n /* @conditional-compile-remove(file-sharing-acs) */\n <AttachmentButton />\n )}\n </Stack>\n </Stack>\n </Stack>\n {\n /* @conditional-compile-remove(chat-composite-participant-pane) */\n options?.participantPane === true && (\n <ChatScreenPeoplePane\n onFetchAvatarPersonaData={onFetchAvatarPersonaData}\n onFetchParticipantMenuItems={props.onFetchParticipantMenuItems}\n isMobile={formFactor === 'mobile'}\n />\n )\n }\n </Stack>\n {overlayImageItem && (\n <ImageOverlay\n {...overlayImageItem}\n isOpen={isImageOverlayOpen}\n onDismiss={() => {\n setOverlayImageItem(undefined);\n setIsImageOverlayOpen(false);\n adapter.removeResourceFromCache({\n threadId: adapter.getState().thread.threadId,\n messageId: overlayImageItem.messageId,\n resourceUrl: overlayImageItem.imageUrl\n });\n }}\n onDownloadButtonClicked={onDownloadButtonClicked}\n />\n )}\n </Stack>\n );\n};\n"]}
@@ -25,6 +25,7 @@ export declare const ParticipantListWithHeading: (props: {
25
25
  headingMoreButtonAriaLabel?: string;
26
26
  onClickHeadingMoreButton?: () => void;
27
27
  headingMoreButtonMenuProps?: IContextualMenuProps;
28
+ pinnedParticipants?: string[];
28
29
  }) => JSX.Element;
29
30
  export {};
30
31
  //# sourceMappingURL=ParticipantContainer.d.ts.map
@@ -21,7 +21,7 @@ export const ParticipantContainer = (props) => {
21
21
  * @private
22
22
  */
23
23
  export const ParticipantListWithHeading = (props) => {
24
- const { onFetchAvatarPersonaData, onFetchParticipantMenuItems, title, participantListProps, headingMoreButtonAriaLabel, onClickHeadingMoreButton, headingMoreButtonMenuProps } = props;
24
+ const { onFetchAvatarPersonaData, onFetchParticipantMenuItems, title, participantListProps, headingMoreButtonAriaLabel, onClickHeadingMoreButton, headingMoreButtonMenuProps, pinnedParticipants } = props;
25
25
  const subheadingUniqueId = useId();
26
26
  const theme = useTheme();
27
27
  /* @conditional-compile-remove(total-participant-count) */
@@ -41,7 +41,7 @@ export const ParticipantListWithHeading = (props) => {
41
41
  ((headingMoreButtonMenuProps === null || headingMoreButtonMenuProps === void 0 ? void 0 : headingMoreButtonMenuProps.items) && headingMoreButtonMenuProps.items.length > 0)) && (React.createElement(Stack.Item, null,
42
42
  React.createElement(DefaultButton, { ariaLabel: headingMoreButtonAriaLabel, styles: headingMoreButtonStyles(theme), iconProps: { iconName: 'PeoplePaneMoreButton' }, onClick: onClickHeadingMoreButton ? () => onClickHeadingMoreButton() : undefined, menuProps: props.onClickHeadingMoreButton ? undefined : props.headingMoreButtonMenuProps, onRenderMenuIcon: () => null })))),
43
43
  React.createElement(FocusZone, { className: participantListContainerStyle, shouldFocusOnMount: true },
44
- React.createElement(ParticipantList, Object.assign({}, participantListProps, { styles: props.isMobile ? participantListMobileStyle : participantListStyle, onRenderAvatar: (userId, options) => (React.createElement(React.Fragment, null,
44
+ React.createElement(ParticipantList, Object.assign({}, participantListProps, { pinnedParticipants: pinnedParticipants, styles: props.isMobile ? participantListMobileStyle : participantListStyle, onRenderAvatar: (userId, options) => (React.createElement(React.Fragment, null,
45
45
  React.createElement(AvatarPersona, Object.assign({ "data-ui-id": "chat-composite-participant-custom-avatar", userId: userId }, options, { hidePersonaDetails: !!(options === null || options === void 0 ? void 0 : options.text), dataProvider: onFetchAvatarPersonaData, allowActiveBorder: true })),
46
46
  (options === null || options === void 0 ? void 0 : options.text) && (React.createElement(Text, { nowrap: true, styles: displayNameStyles }, options === null || options === void 0 ? void 0 : options.text)))), onFetchParticipantMenuItems: onFetchParticipantMenuItems, showParticipantOverflowTooltip: !props.isMobile, participantAriaLabelledBy: subheadingUniqueId })))));
47
47
  };
@@ -1 +1 @@
1
- {"version":3,"file":"ParticipantContainer.js","sourceRoot":"","sources":["../../../../../../../react-composites/src/composites/common/ParticipantContainer.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport React, { useMemo } from 'react';\nimport {\n participantListContainerStyle,\n participantListMobileStyle,\n participantListStack,\n participantListStyle,\n participantListWrapper,\n displayNameStyles,\n headingMoreButtonStyles\n} from './styles/ParticipantContainer.styles';\nimport { ParticipantList, ParticipantListProps, ParticipantMenuItemsCallback } from '@internal/react-components';\nimport { FocusZone, Stack, Text, useTheme } from '@fluentui/react';\nimport { DefaultButton, IContextualMenuProps } from '@fluentui/react';\nimport { AvatarPersona, AvatarPersonaDataCallback } from './AvatarPersona';\nimport { useId } from '@fluentui/react-hooks';\nimport { _formatString } from '@internal/acs-ui-common';\n\ntype ParticipantContainerProps = {\n onFetchParticipantMenuItems?: ParticipantMenuItemsCallback;\n onFetchAvatarPersonaData?: AvatarPersonaDataCallback;\n participantListProps: ParticipantListProps;\n title?: string;\n isMobile?: boolean;\n};\n\n/**\n * @private\n */\nexport const ParticipantContainer = (props: ParticipantContainerProps): JSX.Element => {\n const theme = useTheme();\n const participantListWrapperClassName = useMemo(() => participantListWrapper(theme), [theme]);\n return (\n <Stack className={participantListWrapperClassName}>\n <ParticipantListWithHeading {...props} />\n </Stack>\n );\n};\n\n/**\n * @private\n */\nexport const ParticipantListWithHeading = (props: {\n participantListProps: ParticipantListProps;\n title?: string;\n isMobile?: boolean;\n onFetchAvatarPersonaData?: AvatarPersonaDataCallback;\n onFetchParticipantMenuItems?: ParticipantMenuItemsCallback;\n headingMoreButtonAriaLabel?: string;\n onClickHeadingMoreButton?: () => void;\n headingMoreButtonMenuProps?: IContextualMenuProps;\n}): JSX.Element => {\n const {\n onFetchAvatarPersonaData,\n onFetchParticipantMenuItems,\n title,\n participantListProps,\n headingMoreButtonAriaLabel,\n onClickHeadingMoreButton,\n headingMoreButtonMenuProps\n } = props;\n const subheadingUniqueId = useId();\n const theme = useTheme();\n /* @conditional-compile-remove(total-participant-count) */\n const totalParticipantCount = participantListProps.totalParticipantCount;\n const subheadingStyleThemed = useMemo(\n () => ({\n root: {\n color: theme.palette.neutralSecondary,\n margin: props.isMobile ? '0.5rem 1rem' : '0.5rem',\n fontSize: theme.fonts.smallPlus.fontSize\n }\n }),\n [theme.palette.neutralSecondary, theme.fonts.smallPlus.fontSize, props.isMobile]\n );\n\n return (\n <Stack className={participantListStack}>\n <Stack horizontal horizontalAlign=\"space-between\" verticalAlign=\"center\">\n <Stack.Item grow styles={subheadingStyleThemed} aria-label={title} id={subheadingUniqueId}>\n {paneTitleTrampoline(\n title ?? '',\n /* @conditional-compile-remove(total-participant-count) */ totalParticipantCount\n )}\n </Stack.Item>\n {(onClickHeadingMoreButton ||\n (headingMoreButtonMenuProps?.items && headingMoreButtonMenuProps.items.length > 0)) && (\n <Stack.Item>\n <DefaultButton\n ariaLabel={headingMoreButtonAriaLabel}\n styles={headingMoreButtonStyles(theme)}\n iconProps={{ iconName: 'PeoplePaneMoreButton' }}\n onClick={onClickHeadingMoreButton ? () => onClickHeadingMoreButton() : undefined}\n menuProps={props.onClickHeadingMoreButton ? undefined : props.headingMoreButtonMenuProps}\n onRenderMenuIcon={() => null}\n />\n </Stack.Item>\n )}\n </Stack>\n <FocusZone className={participantListContainerStyle} shouldFocusOnMount={true}>\n <ParticipantList\n {...participantListProps}\n styles={props.isMobile ? participantListMobileStyle : participantListStyle}\n onRenderAvatar={(userId, options) => (\n <>\n <AvatarPersona\n data-ui-id=\"chat-composite-participant-custom-avatar\"\n userId={userId}\n {...options}\n {...{ hidePersonaDetails: !!options?.text }}\n dataProvider={onFetchAvatarPersonaData}\n allowActiveBorder={true}\n />\n {options?.text && (\n <Text nowrap={true} styles={displayNameStyles}>\n {options?.text}\n </Text>\n )}\n </>\n )}\n onFetchParticipantMenuItems={onFetchParticipantMenuItems}\n showParticipantOverflowTooltip={!props.isMobile}\n participantAriaLabelledBy={subheadingUniqueId}\n />\n </FocusZone>\n </Stack>\n );\n};\n\nconst paneTitleTrampoline = (paneTitle: string, totalParticipantCount?: number): string => {\n const participantCountString = totalParticipantCount\n ? { numberOfPeople: `(${totalParticipantCount})` }\n : { numberOfPeople: ' ' };\n return _formatString(paneTitle, participantCountString);\n};\n"]}
1
+ {"version":3,"file":"ParticipantContainer.js","sourceRoot":"","sources":["../../../../../../../react-composites/src/composites/common/ParticipantContainer.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport React, { useMemo } from 'react';\nimport {\n participantListContainerStyle,\n participantListMobileStyle,\n participantListStack,\n participantListStyle,\n participantListWrapper,\n displayNameStyles,\n headingMoreButtonStyles\n} from './styles/ParticipantContainer.styles';\nimport { ParticipantList, ParticipantListProps, ParticipantMenuItemsCallback } from '@internal/react-components';\nimport { FocusZone, Stack, Text, useTheme } from '@fluentui/react';\nimport { DefaultButton, IContextualMenuProps } from '@fluentui/react';\nimport { AvatarPersona, AvatarPersonaDataCallback } from './AvatarPersona';\nimport { useId } from '@fluentui/react-hooks';\nimport { _formatString } from '@internal/acs-ui-common';\n\ntype ParticipantContainerProps = {\n onFetchParticipantMenuItems?: ParticipantMenuItemsCallback;\n onFetchAvatarPersonaData?: AvatarPersonaDataCallback;\n participantListProps: ParticipantListProps;\n title?: string;\n isMobile?: boolean;\n};\n\n/**\n * @private\n */\nexport const ParticipantContainer = (props: ParticipantContainerProps): JSX.Element => {\n const theme = useTheme();\n const participantListWrapperClassName = useMemo(() => participantListWrapper(theme), [theme]);\n return (\n <Stack className={participantListWrapperClassName}>\n <ParticipantListWithHeading {...props} />\n </Stack>\n );\n};\n\n/**\n * @private\n */\nexport const ParticipantListWithHeading = (props: {\n participantListProps: ParticipantListProps;\n title?: string;\n isMobile?: boolean;\n onFetchAvatarPersonaData?: AvatarPersonaDataCallback;\n onFetchParticipantMenuItems?: ParticipantMenuItemsCallback;\n headingMoreButtonAriaLabel?: string;\n onClickHeadingMoreButton?: () => void;\n headingMoreButtonMenuProps?: IContextualMenuProps;\n pinnedParticipants?: string[];\n}): JSX.Element => {\n const {\n onFetchAvatarPersonaData,\n onFetchParticipantMenuItems,\n title,\n participantListProps,\n headingMoreButtonAriaLabel,\n onClickHeadingMoreButton,\n headingMoreButtonMenuProps,\n pinnedParticipants\n } = props;\n const subheadingUniqueId = useId();\n const theme = useTheme();\n /* @conditional-compile-remove(total-participant-count) */\n const totalParticipantCount = participantListProps.totalParticipantCount;\n const subheadingStyleThemed = useMemo(\n () => ({\n root: {\n color: theme.palette.neutralSecondary,\n margin: props.isMobile ? '0.5rem 1rem' : '0.5rem',\n fontSize: theme.fonts.smallPlus.fontSize\n }\n }),\n [theme.palette.neutralSecondary, theme.fonts.smallPlus.fontSize, props.isMobile]\n );\n\n return (\n <Stack className={participantListStack}>\n <Stack horizontal horizontalAlign=\"space-between\" verticalAlign=\"center\">\n <Stack.Item grow styles={subheadingStyleThemed} aria-label={title} id={subheadingUniqueId}>\n {paneTitleTrampoline(\n title ?? '',\n /* @conditional-compile-remove(total-participant-count) */ totalParticipantCount\n )}\n </Stack.Item>\n {(onClickHeadingMoreButton ||\n (headingMoreButtonMenuProps?.items && headingMoreButtonMenuProps.items.length > 0)) && (\n <Stack.Item>\n <DefaultButton\n ariaLabel={headingMoreButtonAriaLabel}\n styles={headingMoreButtonStyles(theme)}\n iconProps={{ iconName: 'PeoplePaneMoreButton' }}\n onClick={onClickHeadingMoreButton ? () => onClickHeadingMoreButton() : undefined}\n menuProps={props.onClickHeadingMoreButton ? undefined : props.headingMoreButtonMenuProps}\n onRenderMenuIcon={() => null}\n />\n </Stack.Item>\n )}\n </Stack>\n <FocusZone className={participantListContainerStyle} shouldFocusOnMount={true}>\n <ParticipantList\n {...participantListProps}\n pinnedParticipants={pinnedParticipants}\n styles={props.isMobile ? participantListMobileStyle : participantListStyle}\n onRenderAvatar={(userId, options) => (\n <>\n <AvatarPersona\n data-ui-id=\"chat-composite-participant-custom-avatar\"\n userId={userId}\n {...options}\n {...{ hidePersonaDetails: !!options?.text }}\n dataProvider={onFetchAvatarPersonaData}\n allowActiveBorder={true}\n />\n {options?.text && (\n <Text nowrap={true} styles={displayNameStyles}>\n {options?.text}\n </Text>\n )}\n </>\n )}\n onFetchParticipantMenuItems={onFetchParticipantMenuItems}\n showParticipantOverflowTooltip={!props.isMobile}\n participantAriaLabelledBy={subheadingUniqueId}\n />\n </FocusZone>\n </Stack>\n );\n};\n\nconst paneTitleTrampoline = (paneTitle: string, totalParticipantCount?: number): string => {\n const participantCountString = totalParticipantCount\n ? { numberOfPeople: `(${totalParticipantCount})` }\n : { numberOfPeople: ' ' };\n return _formatString(paneTitle, participantCountString);\n};\n"]}
@@ -13,5 +13,6 @@ export declare const PeoplePaneContent: (props: {
13
13
  setParticipantActioned?: (userId: string) => void;
14
14
  mobileView?: boolean;
15
15
  participantListHeadingMoreButtonProps?: IContextualMenuProps;
16
+ pinnedParticipants?: string[];
16
17
  }) => JSX.Element;
17
18
  //# sourceMappingURL=PeoplePaneContent.d.ts.map
@@ -78,7 +78,7 @@ export const PeoplePaneContent = (props) => {
78
78
  // We want the drawer menu items to appear when participants in ParticipantList are clicked
79
79
  onParticipantClick: props.mobileView ? setDrawerMenuItemsForParticipant : undefined });
80
80
  }, [participantListDefaultProps, props.mobileView, setDrawerMenuItemsForParticipant, removeParticipantFromCall]);
81
- const participantList = (React.createElement(ParticipantListWithHeading, { isMobile: props.mobileView, participantListProps: participantListProps, onFetchAvatarPersonaData: props.onFetchAvatarPersonaData, onFetchParticipantMenuItems: props.mobileView ? undefined : onFetchParticipantMenuItems, title: strings.peoplePaneSubTitle, headingMoreButtonAriaLabel: localeStrings.strings.call.peoplePaneMoreButtonAriaLabel, onClickHeadingMoreButton: props.mobileView ? setDrawerMenuItemsForParticipantListHeadingMoreButton : undefined, headingMoreButtonMenuProps: props.participantListHeadingMoreButtonProps }));
81
+ const participantList = (React.createElement(ParticipantListWithHeading, { isMobile: props.mobileView, participantListProps: participantListProps, onFetchAvatarPersonaData: props.onFetchAvatarPersonaData, onFetchParticipantMenuItems: props.mobileView ? undefined : onFetchParticipantMenuItems, title: strings.peoplePaneSubTitle, headingMoreButtonAriaLabel: localeStrings.strings.call.peoplePaneMoreButtonAriaLabel, onClickHeadingMoreButton: props.mobileView ? setDrawerMenuItemsForParticipantListHeadingMoreButton : undefined, headingMoreButtonMenuProps: props.participantListHeadingMoreButtonProps, pinnedParticipants: props.pinnedParticipants }));
82
82
  if (props.mobileView) {
83
83
  return (React.createElement(Stack, { verticalFill: true, styles: peoplePaneContainerStyle, tokens: peoplePaneContainerTokens, "data-ui-id": "people-pane-content" },
84
84
  React.createElement(Stack.Item, { grow: true, styles: participantListContainerStyles }, participantList),
@@ -1 +1 @@
1
- {"version":3,"file":"PeoplePaneContent.js","sourceRoot":"","sources":["../../../../../../../react-composites/src/composites/common/PeoplePaneContent.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { IContextualMenuItem, IContextualMenuProps, Stack } from '@fluentui/react';\nimport {\n ParticipantList,\n ParticipantListParticipant,\n ParticipantListProps,\n ParticipantMenuItemsCallback,\n _DrawerMenuItemProps\n} from '@internal/react-components';\nimport React, { useCallback, useMemo } from 'react';\nimport { CallWithChatCompositeStrings } from '../CallWithChatComposite';\nimport { usePropsFor } from '../CallComposite/hooks/usePropsFor';\nimport { AvatarPersonaDataCallback } from '../common/AvatarPersona';\nimport { ParticipantListWithHeading } from '../common/ParticipantContainer';\nimport { peoplePaneContainerTokens } from '../common/styles/ParticipantContainer.styles';\nimport { participantListContainerStyles, peoplePaneContainerStyle } from './styles/PeoplePaneContent.styles';\nimport { convertContextualMenuItemToDrawerMenuItem } from './ConvertContextualMenuItemToDrawerMenuItem';\nimport { CommonCallAdapter } from '../CallComposite';\n/* @conditional-compile-remove(one-to-n-calling) @conditional-compile-remove(PSTN-calls) */\nimport { CallCompositeStrings } from '../CallComposite';\nimport { AddPeopleButton } from './AddPeopleButton';\n/* @conditional-compile-remove(PSTN-calls) */\nimport { PhoneNumberIdentifier } from '@azure/communication-common';\n/* @conditional-compile-remove(PSTN-calls) */\nimport { AddPhoneNumberOptions } from '@azure/communication-calling';\nimport { useAdapter } from '../CallComposite/adapter/CallAdapterProvider';\nimport { useLocale } from '../localization';\n\n/**\n * @private\n */\nexport const PeoplePaneContent = (props: {\n inviteLink?: string;\n onFetchAvatarPersonaData?: AvatarPersonaDataCallback;\n onFetchParticipantMenuItems?: ParticipantMenuItemsCallback;\n setDrawerMenuItems: (drawerMenuItems: _DrawerMenuItemProps[]) => void;\n setParticipantActioned?: (userId: string) => void;\n mobileView?: boolean;\n participantListHeadingMoreButtonProps?: IContextualMenuProps;\n}): JSX.Element => {\n const {\n inviteLink,\n onFetchParticipantMenuItems,\n setDrawerMenuItems,\n setParticipantActioned,\n participantListHeadingMoreButtonProps\n } = props;\n const adapter = useAdapter();\n const localeStrings = useLocale();\n\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n const getStrings = () => {\n /* @conditional-compile-remove(one-to-n-calling) @conditional-compile-remove(PSTN-calls) */\n return localeStrings.strings.call;\n\n return localeStrings.strings.callWithChat;\n };\n const strings = getStrings();\n\n const removeParticipantFromCall = useCallback(\n async (participantId: string): Promise<void> => {\n await adapter.removeParticipant(participantId);\n },\n [adapter]\n );\n\n /* @conditional-compile-remove(PSTN-calls) */\n const addParticipantToCall = useCallback(\n async (participant: PhoneNumberIdentifier, options?: AddPhoneNumberOptions): Promise<void> => {\n await adapter.addParticipant(participant, options);\n },\n [adapter]\n );\n\n /* @conditional-compile-remove(PSTN-calls) */\n const alternateCallerId = adapter.getState().alternateCallerId;\n\n const participantListDefaultProps = usePropsFor(ParticipantList);\n const removeButtonAllowed = canRemoveParticipants(adapter);\n const setDrawerMenuItemsForParticipant: (participant?: ParticipantListParticipant) => void = useMemo(() => {\n return (participant?: ParticipantListParticipant) => {\n if (participant) {\n setParticipantActioned?.(participant.userId);\n let contextualMenuItems: IContextualMenuItem[] = createDefaultContextualMenuItems(\n participant,\n strings,\n removeButtonAllowed && participant.isRemovable ? participantListDefaultProps.onRemoveParticipant : undefined,\n participantListDefaultProps.myUserId\n );\n if (onFetchParticipantMenuItems) {\n contextualMenuItems = onFetchParticipantMenuItems(\n participant.userId,\n participantListDefaultProps.myUserId,\n contextualMenuItems\n );\n }\n const drawerMenuItems = contextualMenuItems.map((contextualMenu: IContextualMenuItem) =>\n convertContextualMenuItemToDrawerMenuItem(contextualMenu, () => setDrawerMenuItems([]))\n );\n setDrawerMenuItems(drawerMenuItems);\n }\n };\n }, [\n strings,\n participantListDefaultProps.onRemoveParticipant,\n participantListDefaultProps.myUserId,\n removeButtonAllowed,\n onFetchParticipantMenuItems,\n setDrawerMenuItems,\n setParticipantActioned\n ]);\n\n const setDrawerMenuItemsForParticipantListHeadingMoreButton = useMemo(() => {\n const drawerMenuItems = participantListHeadingMoreButtonProps?.items.map((contextualMenu: IContextualMenuItem) =>\n convertContextualMenuItemToDrawerMenuItem(contextualMenu, () => setDrawerMenuItems([]))\n );\n return drawerMenuItems && drawerMenuItems.length > 0 ? () => setDrawerMenuItems(drawerMenuItems) : undefined;\n }, [participantListHeadingMoreButtonProps?.items, setDrawerMenuItems]);\n\n const participantListProps: ParticipantListProps = useMemo(() => {\n const onRemoveAParticipant = async (participantId: string): Promise<void> =>\n removeParticipantFromCall(participantId);\n return {\n ...participantListDefaultProps,\n // Passing undefined callback for mobile to avoid context menus for participants in ParticipantList are clicked\n onRemoveParticipant: props.mobileView ? undefined : onRemoveAParticipant,\n // We want the drawer menu items to appear when participants in ParticipantList are clicked\n onParticipantClick: props.mobileView ? setDrawerMenuItemsForParticipant : undefined\n };\n }, [participantListDefaultProps, props.mobileView, setDrawerMenuItemsForParticipant, removeParticipantFromCall]);\n\n const participantList = (\n <ParticipantListWithHeading\n isMobile={props.mobileView}\n participantListProps={participantListProps}\n onFetchAvatarPersonaData={props.onFetchAvatarPersonaData}\n onFetchParticipantMenuItems={props.mobileView ? undefined : onFetchParticipantMenuItems}\n title={strings.peoplePaneSubTitle}\n headingMoreButtonAriaLabel={localeStrings.strings.call.peoplePaneMoreButtonAriaLabel}\n onClickHeadingMoreButton={props.mobileView ? setDrawerMenuItemsForParticipantListHeadingMoreButton : undefined}\n headingMoreButtonMenuProps={props.participantListHeadingMoreButtonProps}\n />\n );\n\n if (props.mobileView) {\n return (\n <Stack\n verticalFill\n styles={peoplePaneContainerStyle}\n tokens={peoplePaneContainerTokens}\n data-ui-id=\"people-pane-content\"\n >\n <Stack.Item grow styles={participantListContainerStyles}>\n {participantList}\n </Stack.Item>\n\n <AddPeopleButton\n inviteLink={inviteLink}\n mobileView={props.mobileView}\n participantList={participantList}\n strings={strings}\n /* @conditional-compile-remove(PSTN-calls) */\n onAddParticipant={addParticipantToCall}\n /* @conditional-compile-remove(PSTN-calls) */\n alternateCallerId={alternateCallerId}\n />\n </Stack>\n );\n }\n\n return (\n <AddPeopleButton\n inviteLink={inviteLink}\n mobileView={props.mobileView}\n participantList={participantList}\n strings={strings}\n /* @conditional-compile-remove(PSTN-calls) */\n onAddParticipant={addParticipantToCall}\n /* @conditional-compile-remove(PSTN-calls) */\n alternateCallerId={alternateCallerId}\n />\n );\n};\n\n/**\n * Create default contextual menu items for particant\n * @param participant - participant to create contextual menu items for\n * @param strings - localized strings for menu item text\n * @param onRemoveParticipant - callback to remove participant\n * @param localParticipantUserId - Local participant user id\n * @returns - IContextualMenuItem[]\n */\nconst createDefaultContextualMenuItems = (\n participant: ParticipantListParticipant,\n strings:\n | CallWithChatCompositeStrings\n | /* @conditional-compile-remove(one-to-n-calling) @conditional-compile-remove(PSTN-calls) */ CallCompositeStrings,\n onRemoveParticipant?: (userId: string) => Promise<void>,\n localParticipantUserId?: string\n): IContextualMenuItem[] => {\n const menuItems: IContextualMenuItem[] = [];\n if (onRemoveParticipant && participant?.userId !== localParticipantUserId) {\n menuItems.push({\n key: 'remove',\n text: strings.removeMenuLabel,\n onClick: () => {\n if (participant?.userId) {\n onRemoveParticipant?.(participant?.userId);\n }\n },\n iconProps: {\n iconName: 'ContextMenuRemoveParticipant',\n styles: { root: { lineHeight: 0 } }\n },\n 'data-ui-id': 'participant-list-remove-participant-button'\n });\n }\n return menuItems;\n};\n\nconst canRemoveParticipants = (adapter: CommonCallAdapter): boolean => {\n // TODO: We should be using the removeParticipant capability here but there is an SDK bug for Rooms where a\n // Presenter's removeParticipant capability is {isPresent: false, reason: 'CapabilityNotApplicableForTheCallType'}.\n // But a Presenter in Rooms should be able to remove participants according to the following documentation\n // https://learn.microsoft.com/en-us/azure/communication-services/concepts/rooms/room-concept#predefined-participant-roles-and-permissions\n const role = adapter.getState().call?.role;\n const canRemove = role === 'Presenter' || role === 'Unknown' || role === undefined;\n return canRemove;\n};\n"]}
1
+ {"version":3,"file":"PeoplePaneContent.js","sourceRoot":"","sources":["../../../../../../../react-composites/src/composites/common/PeoplePaneContent.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { IContextualMenuItem, IContextualMenuProps, Stack } from '@fluentui/react';\nimport {\n ParticipantList,\n ParticipantListParticipant,\n ParticipantListProps,\n ParticipantMenuItemsCallback,\n _DrawerMenuItemProps\n} from '@internal/react-components';\nimport React, { useCallback, useMemo } from 'react';\nimport { CallWithChatCompositeStrings } from '../CallWithChatComposite';\nimport { usePropsFor } from '../CallComposite/hooks/usePropsFor';\nimport { AvatarPersonaDataCallback } from '../common/AvatarPersona';\nimport { ParticipantListWithHeading } from '../common/ParticipantContainer';\nimport { peoplePaneContainerTokens } from '../common/styles/ParticipantContainer.styles';\nimport { participantListContainerStyles, peoplePaneContainerStyle } from './styles/PeoplePaneContent.styles';\nimport { convertContextualMenuItemToDrawerMenuItem } from './ConvertContextualMenuItemToDrawerMenuItem';\nimport { CommonCallAdapter } from '../CallComposite';\n/* @conditional-compile-remove(one-to-n-calling) @conditional-compile-remove(PSTN-calls) */\nimport { CallCompositeStrings } from '../CallComposite';\nimport { AddPeopleButton } from './AddPeopleButton';\n/* @conditional-compile-remove(PSTN-calls) */\nimport { PhoneNumberIdentifier } from '@azure/communication-common';\n/* @conditional-compile-remove(PSTN-calls) */\nimport { AddPhoneNumberOptions } from '@azure/communication-calling';\nimport { useAdapter } from '../CallComposite/adapter/CallAdapterProvider';\nimport { useLocale } from '../localization';\n\n/**\n * @private\n */\nexport const PeoplePaneContent = (props: {\n inviteLink?: string;\n onFetchAvatarPersonaData?: AvatarPersonaDataCallback;\n onFetchParticipantMenuItems?: ParticipantMenuItemsCallback;\n setDrawerMenuItems: (drawerMenuItems: _DrawerMenuItemProps[]) => void;\n setParticipantActioned?: (userId: string) => void;\n mobileView?: boolean;\n participantListHeadingMoreButtonProps?: IContextualMenuProps;\n pinnedParticipants?: string[];\n}): JSX.Element => {\n const {\n inviteLink,\n onFetchParticipantMenuItems,\n setDrawerMenuItems,\n setParticipantActioned,\n participantListHeadingMoreButtonProps\n } = props;\n const adapter = useAdapter();\n const localeStrings = useLocale();\n\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n const getStrings = () => {\n /* @conditional-compile-remove(one-to-n-calling) @conditional-compile-remove(PSTN-calls) */\n return localeStrings.strings.call;\n\n return localeStrings.strings.callWithChat;\n };\n const strings = getStrings();\n\n const removeParticipantFromCall = useCallback(\n async (participantId: string): Promise<void> => {\n await adapter.removeParticipant(participantId);\n },\n [adapter]\n );\n\n /* @conditional-compile-remove(PSTN-calls) */\n const addParticipantToCall = useCallback(\n async (participant: PhoneNumberIdentifier, options?: AddPhoneNumberOptions): Promise<void> => {\n await adapter.addParticipant(participant, options);\n },\n [adapter]\n );\n\n /* @conditional-compile-remove(PSTN-calls) */\n const alternateCallerId = adapter.getState().alternateCallerId;\n\n const participantListDefaultProps = usePropsFor(ParticipantList);\n const removeButtonAllowed = canRemoveParticipants(adapter);\n const setDrawerMenuItemsForParticipant: (participant?: ParticipantListParticipant) => void = useMemo(() => {\n return (participant?: ParticipantListParticipant) => {\n if (participant) {\n setParticipantActioned?.(participant.userId);\n let contextualMenuItems: IContextualMenuItem[] = createDefaultContextualMenuItems(\n participant,\n strings,\n removeButtonAllowed && participant.isRemovable ? participantListDefaultProps.onRemoveParticipant : undefined,\n participantListDefaultProps.myUserId\n );\n if (onFetchParticipantMenuItems) {\n contextualMenuItems = onFetchParticipantMenuItems(\n participant.userId,\n participantListDefaultProps.myUserId,\n contextualMenuItems\n );\n }\n const drawerMenuItems = contextualMenuItems.map((contextualMenu: IContextualMenuItem) =>\n convertContextualMenuItemToDrawerMenuItem(contextualMenu, () => setDrawerMenuItems([]))\n );\n setDrawerMenuItems(drawerMenuItems);\n }\n };\n }, [\n strings,\n participantListDefaultProps.onRemoveParticipant,\n participantListDefaultProps.myUserId,\n removeButtonAllowed,\n onFetchParticipantMenuItems,\n setDrawerMenuItems,\n setParticipantActioned\n ]);\n\n const setDrawerMenuItemsForParticipantListHeadingMoreButton = useMemo(() => {\n const drawerMenuItems = participantListHeadingMoreButtonProps?.items.map((contextualMenu: IContextualMenuItem) =>\n convertContextualMenuItemToDrawerMenuItem(contextualMenu, () => setDrawerMenuItems([]))\n );\n return drawerMenuItems && drawerMenuItems.length > 0 ? () => setDrawerMenuItems(drawerMenuItems) : undefined;\n }, [participantListHeadingMoreButtonProps?.items, setDrawerMenuItems]);\n\n const participantListProps: ParticipantListProps = useMemo(() => {\n const onRemoveAParticipant = async (participantId: string): Promise<void> =>\n removeParticipantFromCall(participantId);\n return {\n ...participantListDefaultProps,\n // Passing undefined callback for mobile to avoid context menus for participants in ParticipantList are clicked\n onRemoveParticipant: props.mobileView ? undefined : onRemoveAParticipant,\n // We want the drawer menu items to appear when participants in ParticipantList are clicked\n onParticipantClick: props.mobileView ? setDrawerMenuItemsForParticipant : undefined\n };\n }, [participantListDefaultProps, props.mobileView, setDrawerMenuItemsForParticipant, removeParticipantFromCall]);\n\n const participantList = (\n <ParticipantListWithHeading\n isMobile={props.mobileView}\n participantListProps={participantListProps}\n onFetchAvatarPersonaData={props.onFetchAvatarPersonaData}\n onFetchParticipantMenuItems={props.mobileView ? undefined : onFetchParticipantMenuItems}\n title={strings.peoplePaneSubTitle}\n headingMoreButtonAriaLabel={localeStrings.strings.call.peoplePaneMoreButtonAriaLabel}\n onClickHeadingMoreButton={props.mobileView ? setDrawerMenuItemsForParticipantListHeadingMoreButton : undefined}\n headingMoreButtonMenuProps={props.participantListHeadingMoreButtonProps}\n pinnedParticipants={props.pinnedParticipants}\n />\n );\n\n if (props.mobileView) {\n return (\n <Stack\n verticalFill\n styles={peoplePaneContainerStyle}\n tokens={peoplePaneContainerTokens}\n data-ui-id=\"people-pane-content\"\n >\n <Stack.Item grow styles={participantListContainerStyles}>\n {participantList}\n </Stack.Item>\n\n <AddPeopleButton\n inviteLink={inviteLink}\n mobileView={props.mobileView}\n participantList={participantList}\n strings={strings}\n /* @conditional-compile-remove(PSTN-calls) */\n onAddParticipant={addParticipantToCall}\n /* @conditional-compile-remove(PSTN-calls) */\n alternateCallerId={alternateCallerId}\n />\n </Stack>\n );\n }\n\n return (\n <AddPeopleButton\n inviteLink={inviteLink}\n mobileView={props.mobileView}\n participantList={participantList}\n strings={strings}\n /* @conditional-compile-remove(PSTN-calls) */\n onAddParticipant={addParticipantToCall}\n /* @conditional-compile-remove(PSTN-calls) */\n alternateCallerId={alternateCallerId}\n />\n );\n};\n\n/**\n * Create default contextual menu items for particant\n * @param participant - participant to create contextual menu items for\n * @param strings - localized strings for menu item text\n * @param onRemoveParticipant - callback to remove participant\n * @param localParticipantUserId - Local participant user id\n * @returns - IContextualMenuItem[]\n */\nconst createDefaultContextualMenuItems = (\n participant: ParticipantListParticipant,\n strings:\n | CallWithChatCompositeStrings\n | /* @conditional-compile-remove(one-to-n-calling) @conditional-compile-remove(PSTN-calls) */ CallCompositeStrings,\n onRemoveParticipant?: (userId: string) => Promise<void>,\n localParticipantUserId?: string\n): IContextualMenuItem[] => {\n const menuItems: IContextualMenuItem[] = [];\n if (onRemoveParticipant && participant?.userId !== localParticipantUserId) {\n menuItems.push({\n key: 'remove',\n text: strings.removeMenuLabel,\n onClick: () => {\n if (participant?.userId) {\n onRemoveParticipant?.(participant?.userId);\n }\n },\n iconProps: {\n iconName: 'ContextMenuRemoveParticipant',\n styles: { root: { lineHeight: 0 } }\n },\n 'data-ui-id': 'participant-list-remove-participant-button'\n });\n }\n return menuItems;\n};\n\nconst canRemoveParticipants = (adapter: CommonCallAdapter): boolean => {\n // TODO: We should be using the removeParticipant capability here but there is an SDK bug for Rooms where a\n // Presenter's removeParticipant capability is {isPresent: false, reason: 'CapabilityNotApplicableForTheCallType'}.\n // But a Presenter in Rooms should be able to remove participants according to the following documentation\n // https://learn.microsoft.com/en-us/azure/communication-services/concepts/rooms/room-concept#predefined-participant-roles-and-permissions\n const role = adapter.getState().call?.role;\n const canRemove = role === 'Presenter' || role === 'Unknown' || role === undefined;\n return canRemove;\n};\n"]}
@@ -25,15 +25,15 @@ export const loadRichTextSendBox = () => import('./RichTextSendBoxWrapper').then
25
25
  */
26
26
  export const SendBoxPicker = (props) => {
27
27
  const {
28
- /* @conditional-compile-remove(rich-text-editor-composite-support) @conditional-compile-remove(rich-text-editor) */
28
+ /* @conditional-compile-remove(rich-text-editor-composite-support) */
29
29
  richTextEditorOptions } = props;
30
30
  const sendBoxProps = usePropsFor(SendBox);
31
- /* @conditional-compile-remove(rich-text-editor-composite-support) @conditional-compile-remove(rich-text-editor) */
31
+ /* @conditional-compile-remove(rich-text-editor-composite-support) */
32
32
  const isRichTextEditorEnabled = useMemo(() => {
33
33
  return richTextEditorOptions !== undefined;
34
34
  }, [richTextEditorOptions]);
35
35
  const sendBox = useMemo(() => React.createElement(SendBox, Object.assign({}, sendBoxProps, props)), [props, sendBoxProps]);
36
- /* @conditional-compile-remove(rich-text-editor-composite-support) @conditional-compile-remove(rich-text-editor) */
36
+ /* @conditional-compile-remove(rich-text-editor-composite-support) */
37
37
  if (isRichTextEditorEnabled) {
38
38
  return (React.createElement(_ErrorBoundary, { fallback: sendBox },
39
39
  React.createElement(Suspense, { fallback: sendBox },
@@ -1 +1 @@
1
- {"version":3,"file":"SendBoxPicker.js","sourceRoot":"","sources":["../../../../../../../react-composites/src/composites/common/SendBoxPicker.tsx"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EAAE,OAAO,EAAsB,yCAAmC;AAGzE,OAAO,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AACjE,qEAAqE;AACrE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,qEAAqE;AACrE,OAAO,EAAE,cAAc,EAAwB,yCAAmC;AAIlF,qEAAqE;AACrE;;GAEG;AACH,MAAM,sBAAsB,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAC7C,MAAM,CAAC,0BAA0B,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,sBAAsB,EAAE,CAAC,CAAC,CAClG,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAEhC,EAAE,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,sBAAsB,EAAE,CAAC,CAAC,CAAC;AAoBxG;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,KAAyB,EAAe,EAAE;IACtE,MAAM;IACJ,mHAAmH;IACnH,qBAAqB,EACtB,GAAG,KAAK,CAAC;IAEV,MAAM,YAAY,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IAE1C,mHAAmH;IACnH,MAAM,uBAAuB,GAAG,OAAO,CAAC,GAAG,EAAE;QAC3C,OAAO,qBAAqB,KAAK,SAAS,CAAC;IAC7C,CAAC,EAAE,CAAC,qBAAqB,CAAC,CAAC,CAAC;IAE5B,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,oBAAC,OAAO,oBAAK,YAAY,EAAM,KAAK,EAAI,EAAE,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC;IAE/F,mHAAmH;IACnH,IAAI,uBAAuB,EAAE,CAAC;QAC5B,OAAO,CACL,oBAAC,cAAc,IAAC,QAAQ,EAAE,OAAO;YAC/B,oBAAC,QAAQ,IAAC,QAAQ,EAAE,OAAO;gBACzB,oBAAC,sBAAsB,oBAAK,KAAK,EAAI,CAC5B,CACI,CAClB,CAAC;IACJ,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport React, { useMemo } from 'react';\nimport { SendBox, SendBoxStylesProps } from '@internal/react-components';\n/* @conditional-compile-remove(rich-text-editor-composite-support) @conditional-compile-remove(rich-text-editor) */\nimport { RichTextEditorOptions } from '@internal/react-components';\nimport { usePropsFor } from '../ChatComposite/hooks/usePropsFor';\n/* @conditional-compile-remove(rich-text-editor-composite-support) */\nimport { Suspense } from 'react';\n/* @conditional-compile-remove(rich-text-editor-composite-support) */\nimport { _ErrorBoundary, RichTextSendBoxProps } from '@internal/react-components';\n/* @conditional-compile-remove(file-sharing-acs) */\nimport { AttachmentMetadataInProgress, MessageOptions } from '@internal/acs-ui-common';\n\n/* @conditional-compile-remove(rich-text-editor-composite-support) */\n/**\n * Wrapper for RichTextSendBox component to allow us to use usePropsFor with richTextSendBox with lazy loading\n */\nconst RichTextSendBoxWrapper = React.lazy(() =>\n import('./RichTextSendBoxWrapper').then((module) => ({ default: module.RichTextSendBoxWrapper }))\n);\n\n/**\n * @private\n * Use this function to load RoosterJS dependencies early in the lifecycle.\n * It should be the same import as used for lazy loading.\n *\n/* @conditional-compile-remove(rich-text-editor-composite-support)\n */\nexport const loadRichTextSendBox = (): Promise<{\n default: React.ComponentType<RichTextSendBoxProps>;\n}> => import('./RichTextSendBoxWrapper').then((module) => ({ default: module.RichTextSendBoxWrapper }));\n\n/**\n * @private\n */\nexport type SendBoxPickerProps = {\n styles?: SendBoxStylesProps;\n autoFocus?: 'sendBoxTextField';\n onSendMessage: (\n content: string,\n /* @conditional-compile-remove(file-sharing-acs) */ options?: MessageOptions\n ) => Promise<void>;\n /* @conditional-compile-remove(rich-text-editor-composite-support) @conditional-compile-remove(rich-text-editor) */\n richTextEditorOptions?: RichTextEditorOptions;\n /* @conditional-compile-remove(file-sharing-acs) */\n attachments?: AttachmentMetadataInProgress[];\n /* @conditional-compile-remove(file-sharing-acs) */\n onCancelAttachmentUpload?: (attachmentId: string) => void;\n};\n\n/**\n * @private\n */\nexport const SendBoxPicker = (props: SendBoxPickerProps): JSX.Element => {\n const {\n /* @conditional-compile-remove(rich-text-editor-composite-support) @conditional-compile-remove(rich-text-editor) */\n richTextEditorOptions\n } = props;\n\n const sendBoxProps = usePropsFor(SendBox);\n\n /* @conditional-compile-remove(rich-text-editor-composite-support) @conditional-compile-remove(rich-text-editor) */\n const isRichTextEditorEnabled = useMemo(() => {\n return richTextEditorOptions !== undefined;\n }, [richTextEditorOptions]);\n\n const sendBox = useMemo(() => <SendBox {...sendBoxProps} {...props} />, [props, sendBoxProps]);\n\n /* @conditional-compile-remove(rich-text-editor-composite-support) @conditional-compile-remove(rich-text-editor) */\n if (isRichTextEditorEnabled) {\n return (\n <_ErrorBoundary fallback={sendBox}>\n <Suspense fallback={sendBox}>\n <RichTextSendBoxWrapper {...props} />\n </Suspense>\n </_ErrorBoundary>\n );\n }\n return sendBox;\n};\n"]}
1
+ {"version":3,"file":"SendBoxPicker.js","sourceRoot":"","sources":["../../../../../../../react-composites/src/composites/common/SendBoxPicker.tsx"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EAAE,OAAO,EAAsB,yCAAmC;AAGzE,OAAO,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AACjE,qEAAqE;AACrE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,qEAAqE;AACrE,OAAO,EAAE,cAAc,EAAwB,yCAAmC;AAIlF,qEAAqE;AACrE;;GAEG;AACH,MAAM,sBAAsB,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAC7C,MAAM,CAAC,0BAA0B,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,sBAAsB,EAAE,CAAC,CAAC,CAClG,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAEhC,EAAE,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,sBAAsB,EAAE,CAAC,CAAC,CAAC;AAoBxG;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,KAAyB,EAAe,EAAE;IACtE,MAAM;IACJ,qEAAqE;IACrE,qBAAqB,EACtB,GAAG,KAAK,CAAC;IAEV,MAAM,YAAY,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IAE1C,qEAAqE;IACrE,MAAM,uBAAuB,GAAG,OAAO,CAAC,GAAG,EAAE;QAC3C,OAAO,qBAAqB,KAAK,SAAS,CAAC;IAC7C,CAAC,EAAE,CAAC,qBAAqB,CAAC,CAAC,CAAC;IAE5B,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,oBAAC,OAAO,oBAAK,YAAY,EAAM,KAAK,EAAI,EAAE,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC;IAE/F,qEAAqE;IACrE,IAAI,uBAAuB,EAAE,CAAC;QAC5B,OAAO,CACL,oBAAC,cAAc,IAAC,QAAQ,EAAE,OAAO;YAC/B,oBAAC,QAAQ,IAAC,QAAQ,EAAE,OAAO;gBACzB,oBAAC,sBAAsB,oBAAK,KAAK,EAAI,CAC5B,CACI,CAClB,CAAC;IACJ,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport React, { useMemo } from 'react';\nimport { SendBox, SendBoxStylesProps } from '@internal/react-components';\n/* @conditional-compile-remove(rich-text-editor-composite-support) */\nimport { RichTextEditorOptions } from '@internal/react-components';\nimport { usePropsFor } from '../ChatComposite/hooks/usePropsFor';\n/* @conditional-compile-remove(rich-text-editor-composite-support) */\nimport { Suspense } from 'react';\n/* @conditional-compile-remove(rich-text-editor-composite-support) */\nimport { _ErrorBoundary, RichTextSendBoxProps } from '@internal/react-components';\n/* @conditional-compile-remove(file-sharing-acs) */\nimport { AttachmentMetadataInProgress, MessageOptions } from '@internal/acs-ui-common';\n\n/* @conditional-compile-remove(rich-text-editor-composite-support) */\n/**\n * Wrapper for RichTextSendBox component to allow us to use usePropsFor with richTextSendBox with lazy loading\n */\nconst RichTextSendBoxWrapper = React.lazy(() =>\n import('./RichTextSendBoxWrapper').then((module) => ({ default: module.RichTextSendBoxWrapper }))\n);\n\n/**\n * @private\n * Use this function to load RoosterJS dependencies early in the lifecycle.\n * It should be the same import as used for lazy loading.\n *\n/* @conditional-compile-remove(rich-text-editor-composite-support)\n */\nexport const loadRichTextSendBox = (): Promise<{\n default: React.ComponentType<RichTextSendBoxProps>;\n}> => import('./RichTextSendBoxWrapper').then((module) => ({ default: module.RichTextSendBoxWrapper }));\n\n/**\n * @private\n */\nexport type SendBoxPickerProps = {\n styles?: SendBoxStylesProps;\n autoFocus?: 'sendBoxTextField';\n onSendMessage: (\n content: string,\n /* @conditional-compile-remove(file-sharing-acs) */ options?: MessageOptions\n ) => Promise<void>;\n /* @conditional-compile-remove(rich-text-editor-composite-support) */\n richTextEditorOptions?: RichTextEditorOptions;\n /* @conditional-compile-remove(file-sharing-acs) */\n attachments?: AttachmentMetadataInProgress[];\n /* @conditional-compile-remove(file-sharing-acs) */\n onCancelAttachmentUpload?: (attachmentId: string) => void;\n};\n\n/**\n * @private\n */\nexport const SendBoxPicker = (props: SendBoxPickerProps): JSX.Element => {\n const {\n /* @conditional-compile-remove(rich-text-editor-composite-support) */\n richTextEditorOptions\n } = props;\n\n const sendBoxProps = usePropsFor(SendBox);\n\n /* @conditional-compile-remove(rich-text-editor-composite-support) */\n const isRichTextEditorEnabled = useMemo(() => {\n return richTextEditorOptions !== undefined;\n }, [richTextEditorOptions]);\n\n const sendBox = useMemo(() => <SendBox {...sendBoxProps} {...props} />, [props, sendBoxProps]);\n\n /* @conditional-compile-remove(rich-text-editor-composite-support) */\n if (isRichTextEditorEnabled) {\n return (\n <_ErrorBoundary fallback={sendBox}>\n <Suspense fallback={sendBox}>\n <RichTextSendBoxWrapper {...props} />\n </Suspense>\n </_ErrorBoundary>\n );\n }\n return sendBox;\n};\n"]}
@@ -117,11 +117,6 @@ export declare const DEFAULT_COMPOSITE_ICONS: {
117
117
  OpenAttachment: React.JSX.Element;
118
118
  AttachmentMoreMenu: React.JSX.Element;
119
119
  DataLossPreventionProhibited: React.JSX.Element;
120
- /**
121
- * Icons that can be overridden for {@link CallWithChatComposite}.
122
- *
123
- * @public
124
- */
125
120
  ErrorBarCallVideoRecoveredBySystem: React.JSX.Element;
126
121
  ErrorBarCallVideoStoppedBySystem: React.JSX.Element;
127
122
  MessageResend: React.JSX.Element;
@@ -138,6 +133,7 @@ export declare const DEFAULT_COMPOSITE_ICONS: {
138
133
  UnsupportedEnvironmentWarning: React.JSX.Element;
139
134
  BrowserPermissionDeniedError: React.JSX.Element;
140
135
  VideoTilePinned: React.JSX.Element;
136
+ ParticipantItemPinned: React.JSX.Element;
141
137
  VideoTileMoreOptions: React.JSX.Element;
142
138
  VideoTileScaleFit: React.JSX.Element;
143
139
  VideoTileScaleFill: React.JSX.Element;
@@ -159,6 +155,13 @@ export declare const DEFAULT_COMPOSITE_ICONS: {
159
155
  ContextMenuCameraIcon: React.JSX.Element;
160
156
  ContextMenuMicIcon: React.JSX.Element;
161
157
  ContextMenuSpeakerIcon: React.JSX.Element;
158
+ /**
159
+ * Icon wrapper to use when including customizable icons inside the CallWithChatComposite.
160
+ * This wrapper ensures the icon name is being type-checked helping ensure no typos
161
+ * and ensure that icon is customizable through the composite API.
162
+ *
163
+ * @private
164
+ */
162
165
  ContextMenuRemoveParticipant: React.JSX.Element;
163
166
  SurveyStarIcon: React.JSX.Element;
164
167
  SurveyStarIconFilled: React.JSX.Element;
@@ -166,13 +169,6 @@ export declare const DEFAULT_COMPOSITE_ICONS: {
166
169
  StopSpotlightContextualMenuItem: React.JSX.Element;
167
170
  VideoTileSpotlighted: React.JSX.Element;
168
171
  RichTextBoldButtonIcon: React.JSX.Element;
169
- /**
170
- * Icons that can be overridden in one of the composites exported by this library.
171
- *
172
- * See {@link ChatCompositeIcons}, {@link CallCompositeIcons} and {@link CallWithChatCompositeIcons} for more targeted types.
173
- *
174
- * @public
175
- */
176
172
  RichTextItalicButtonIcon: React.JSX.Element;
177
173
  RichTextUnderlineButtonIcon: React.JSX.Element;
178
174
  RichTextBulletListButtonIcon: React.JSX.Element;
@@ -337,7 +337,12 @@
337
337
  "leaveConfirmDialogContent": "Are you sure you want to leave the call?",
338
338
  "endCallConfirmDialogTitle": "End the call?",
339
339
  "endCallConfirmDialogContent": "You'll end the call for everyone.",
340
- "invalidMeetingIdentifier": "Invalid meeting ID or passcode"
340
+ "invalidMeetingIdentifier": "Invalid meeting ID or passcode",
341
+ "pinParticipantMenuLabel": "Pin for me",
342
+ "pinParticipantLimitReachedMenuLabel": "Pin (limit reached)",
343
+ "unpinParticipantMenuLabel": "Unpin",
344
+ "pinParticipantMenuItemAriaLabel": "Pin",
345
+ "unpinParticipantMenuItemAriaLabel": "Unpin"
341
346
  },
342
347
  "chat": {
343
348
  "chatListHeader": "In this chat",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@azure/communication-react",
3
- "version": "1.18.0-alpha-202406110013",
3
+ "version": "1.18.0-alpha-202406120015",
4
4
  "sideEffects": false,
5
5
  "description": "React library for building modern communication user experiences utilizing Azure Communication Services",
6
6
  "keywords": [
@@ -57,7 +57,7 @@
57
57
  "peerDependencies": {
58
58
  "@azure/communication-calling": "1.26.1-beta.1",
59
59
  "@azure/communication-calling-effects": "1.0.1",
60
- "@azure/communication-chat": "1.6.0-beta.1",
60
+ "@azure/communication-chat": "1.6.0-beta.2",
61
61
  "@types/react": ">=16.8.0 <19.0.0",
62
62
  "@types/react-dom": ">=16.8.0 <19.0.0",
63
63
  "react": ">=16.8.0 <19.0.0",