@azure/communication-react 1.19.0-alpha-202407250014 → 1.19.0-alpha-202407270014

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 (150) hide show
  1. package/dist/communication-react.d.ts +203 -23
  2. package/dist/dist-cjs/communication-react/{ChatMessageComponentAsRichTextEditBox-D4Pf_JpT.js → ChatMessageComponentAsRichTextEditBox-BueeC-ud.js} +14 -15
  3. package/dist/dist-cjs/communication-react/ChatMessageComponentAsRichTextEditBox-BueeC-ud.js.map +1 -0
  4. package/dist/dist-cjs/communication-react/{RichTextSendBoxWrapper-BNwd6bE2.js → RichTextSendBoxWrapper-Br441vhG.js} +2 -3
  5. package/dist/dist-cjs/communication-react/{RichTextSendBoxWrapper-BNwd6bE2.js.map → RichTextSendBoxWrapper-Br441vhG.js.map} +1 -1
  6. package/dist/dist-cjs/communication-react/{index-DdAkrosV.js → index-DznlW8XT.js} +411 -246
  7. package/dist/dist-cjs/communication-react/index-DznlW8XT.js.map +1 -0
  8. package/dist/dist-cjs/communication-react/index.js +2 -2
  9. package/dist/dist-esm/acs-ui-common/src/index.d.ts +1 -0
  10. package/dist/dist-esm/acs-ui-common/src/index.js +2 -0
  11. package/dist/dist-esm/acs-ui-common/src/index.js.map +1 -1
  12. package/dist/dist-esm/acs-ui-common/src/removeImageTags.d.ts +7 -0
  13. package/dist/dist-esm/acs-ui-common/src/removeImageTags.js +18 -0
  14. package/dist/dist-esm/acs-ui-common/src/removeImageTags.js.map +1 -0
  15. package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js +1 -1
  16. package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js.map +1 -1
  17. package/dist/dist-esm/calling-component-bindings/src/baseSelectors.d.ts +14 -1
  18. package/dist/dist-esm/calling-component-bindings/src/baseSelectors.js +16 -0
  19. package/dist/dist-esm/calling-component-bindings/src/baseSelectors.js.map +1 -1
  20. package/dist/dist-esm/calling-component-bindings/src/handlers/createHandlers.d.ts +2 -0
  21. package/dist/dist-esm/calling-component-bindings/src/handlers/createHandlers.js +17 -0
  22. package/dist/dist-esm/calling-component-bindings/src/handlers/createHandlers.js.map +1 -1
  23. package/dist/dist-esm/calling-component-bindings/src/handlers/createTeamsCallHandlers.d.ts +2 -0
  24. package/dist/dist-esm/calling-component-bindings/src/handlers/createTeamsCallHandlers.js +17 -0
  25. package/dist/dist-esm/calling-component-bindings/src/handlers/createTeamsCallHandlers.js.map +1 -1
  26. package/dist/dist-esm/calling-component-bindings/src/hooks/usePropsFor.d.ts +3 -1
  27. package/dist/dist-esm/calling-component-bindings/src/hooks/usePropsFor.js +13 -1
  28. package/dist/dist-esm/calling-component-bindings/src/hooks/usePropsFor.js.map +1 -1
  29. package/dist/dist-esm/calling-component-bindings/src/incomingCallStackSelector.d.ts +16 -0
  30. package/dist/dist-esm/calling-component-bindings/src/incomingCallStackSelector.js +33 -0
  31. package/dist/dist-esm/calling-component-bindings/src/incomingCallStackSelector.js.map +1 -0
  32. package/dist/dist-esm/calling-component-bindings/src/index.d.ts +2 -0
  33. package/dist/dist-esm/calling-component-bindings/src/index.js +1 -0
  34. package/dist/dist-esm/calling-component-bindings/src/index.js.map +1 -1
  35. package/dist/dist-esm/calling-component-bindings/src/utils/callUtils.d.ts +6 -1
  36. package/dist/dist-esm/calling-component-bindings/src/utils/callUtils.js +12 -0
  37. package/dist/dist-esm/calling-component-bindings/src/utils/callUtils.js.map +1 -1
  38. package/dist/dist-esm/calling-stateful-client/src/BetaToStableTypes.d.ts +2 -7
  39. package/dist/dist-esm/calling-stateful-client/src/BetaToStableTypes.js.map +1 -1
  40. package/dist/dist-esm/calling-stateful-client/src/CallAgentDeclarativeCommon.d.ts +2 -2
  41. package/dist/dist-esm/calling-stateful-client/src/CallAgentDeclarativeCommon.js +1 -2
  42. package/dist/dist-esm/calling-stateful-client/src/CallAgentDeclarativeCommon.js.map +1 -1
  43. package/dist/dist-esm/calling-stateful-client/src/CallClientState.d.ts +62 -3
  44. package/dist/dist-esm/calling-stateful-client/src/CallClientState.js.map +1 -1
  45. package/dist/dist-esm/calling-stateful-client/src/CallContext.d.ts +2 -1
  46. package/dist/dist-esm/calling-stateful-client/src/CallContext.js +6 -1
  47. package/dist/dist-esm/calling-stateful-client/src/CallContext.js.map +1 -1
  48. package/dist/dist-esm/calling-stateful-client/src/Converter.d.ts +4 -3
  49. package/dist/dist-esm/calling-stateful-client/src/Converter.js +26 -3
  50. package/dist/dist-esm/calling-stateful-client/src/Converter.js.map +1 -1
  51. package/dist/dist-esm/calling-stateful-client/src/DeviceManagerDeclarative.js +3 -1
  52. package/dist/dist-esm/calling-stateful-client/src/DeviceManagerDeclarative.js.map +1 -1
  53. package/dist/dist-esm/calling-stateful-client/src/IncomingCallSubscriber.d.ts +1 -2
  54. package/dist/dist-esm/calling-stateful-client/src/IncomingCallSubscriber.js.map +1 -1
  55. package/dist/dist-esm/calling-stateful-client/src/TypeGuards.d.ts +2 -2
  56. package/dist/dist-esm/calling-stateful-client/src/TypeGuards.js.map +1 -1
  57. package/dist/dist-esm/calling-stateful-client/src/index-public.d.ts +2 -1
  58. package/dist/dist-esm/calling-stateful-client/src/index-public.js.map +1 -1
  59. package/dist/dist-esm/calling-stateful-client/src/index.d.ts +1 -1
  60. package/dist/dist-esm/calling-stateful-client/src/index.js.map +1 -1
  61. package/dist/dist-esm/communication-react/src/index.d.ts +3 -2
  62. package/dist/dist-esm/communication-react/src/index.js +1 -1
  63. package/dist/dist-esm/communication-react/src/index.js.map +1 -1
  64. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageComponentWrapper.d.ts +2 -2
  65. package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageComponentWrapper.js.map +1 -1
  66. package/dist/dist-esm/react-components/src/components/ChatMessage/MyMessageComponents/ChatMessageComponentAsEditBoxPicker.d.ts +2 -2
  67. package/dist/dist-esm/react-components/src/components/ChatMessage/MyMessageComponents/ChatMessageComponentAsEditBoxPicker.js.map +1 -1
  68. package/dist/dist-esm/react-components/src/components/ChatMessage/MyMessageComponents/ChatMessageComponentAsRichTextEditBox.d.ts +2 -2
  69. package/dist/dist-esm/react-components/src/components/ChatMessage/MyMessageComponents/ChatMessageComponentAsRichTextEditBox.js +12 -12
  70. package/dist/dist-esm/react-components/src/components/ChatMessage/MyMessageComponents/ChatMessageComponentAsRichTextEditBox.js.map +1 -1
  71. package/dist/dist-esm/react-components/src/components/ChatMessage/MyMessageComponents/ChatMyMessageComponent.d.ts +2 -2
  72. package/dist/dist-esm/react-components/src/components/ChatMessage/MyMessageComponents/ChatMyMessageComponent.js +2 -2
  73. package/dist/dist-esm/react-components/src/components/ChatMessage/MyMessageComponents/ChatMyMessageComponent.js.map +1 -1
  74. package/dist/dist-esm/react-components/src/components/ChatMessage/MyMessageComponents/FluentChatMyMessageComponent.js +6 -6
  75. package/dist/dist-esm/react-components/src/components/ChatMessage/MyMessageComponents/FluentChatMyMessageComponent.js.map +1 -1
  76. package/dist/dist-esm/react-components/src/components/Dialpad/Dialpad.js +2 -2
  77. package/dist/dist-esm/react-components/src/components/Dialpad/Dialpad.js.map +1 -1
  78. package/dist/dist-esm/react-components/src/components/IncomingCallNotification.d.ts +27 -1
  79. package/dist/dist-esm/react-components/src/components/IncomingCallNotification.js +73 -36
  80. package/dist/dist-esm/react-components/src/components/IncomingCallNotification.js.map +1 -1
  81. package/dist/dist-esm/react-components/src/components/IncomingCallStack.d.ts +76 -0
  82. package/dist/dist-esm/react-components/src/components/IncomingCallStack.js +23 -0
  83. package/dist/dist-esm/react-components/src/components/IncomingCallStack.js.map +1 -0
  84. package/dist/dist-esm/react-components/src/components/MeetingConferencePhoneInfo.d.ts +0 -5
  85. package/dist/dist-esm/react-components/src/components/MeetingConferencePhoneInfo.js +3 -23
  86. package/dist/dist-esm/react-components/src/components/MeetingConferencePhoneInfo.js.map +1 -1
  87. package/dist/dist-esm/react-components/src/components/MessageThread.d.ts +6 -5
  88. package/dist/dist-esm/react-components/src/components/MessageThread.js +3 -3
  89. package/dist/dist-esm/react-components/src/components/MessageThread.js.map +1 -1
  90. package/dist/dist-esm/react-components/src/components/RichTextEditor/Plugins/CopyPastePlugin.d.ts +2 -2
  91. package/dist/dist-esm/react-components/src/components/RichTextEditor/Plugins/CopyPastePlugin.js +15 -5
  92. package/dist/dist-esm/react-components/src/components/RichTextEditor/Plugins/CopyPastePlugin.js.map +1 -1
  93. package/dist/dist-esm/react-components/src/components/RichTextEditor/Plugins/RichTextToolbarPlugin.d.ts +1 -1
  94. package/dist/dist-esm/react-components/src/components/RichTextEditor/Plugins/RichTextToolbarPlugin.js.map +1 -1
  95. package/dist/dist-esm/react-components/src/components/RichTextEditor/RichTextEditor.d.ts +1 -1
  96. package/dist/dist-esm/react-components/src/components/RichTextEditor/RichTextEditor.js +6 -4
  97. package/dist/dist-esm/react-components/src/components/RichTextEditor/RichTextEditor.js.map +1 -1
  98. package/dist/dist-esm/react-components/src/components/RichTextEditor/RichTextInputBoxComponent.d.ts +1 -1
  99. package/dist/dist-esm/react-components/src/components/RichTextEditor/RichTextInputBoxComponent.js +2 -2
  100. package/dist/dist-esm/react-components/src/components/RichTextEditor/RichTextInputBoxComponent.js.map +1 -1
  101. package/dist/dist-esm/react-components/src/components/RichTextEditor/RichTextSendBox.d.ts +13 -11
  102. package/dist/dist-esm/react-components/src/components/RichTextEditor/RichTextSendBox.js +14 -14
  103. package/dist/dist-esm/react-components/src/components/RichTextEditor/RichTextSendBox.js.map +1 -1
  104. package/dist/dist-esm/react-components/src/components/RichTextEditor/Toolbar/RichTextToolbar.js +3 -0
  105. package/dist/dist-esm/react-components/src/components/RichTextEditor/Toolbar/RichTextToolbar.js.map +1 -1
  106. package/dist/dist-esm/react-components/src/components/VideoGallery/useVideoTileContextualMenuProps.js +15 -15
  107. package/dist/dist-esm/react-components/src/components/VideoGallery/useVideoTileContextualMenuProps.js.map +1 -1
  108. package/dist/dist-esm/react-components/src/components/VideoGallery.js +9 -6
  109. package/dist/dist-esm/react-components/src/components/VideoGallery.js.map +1 -1
  110. package/dist/dist-esm/react-components/src/components/index.d.ts +2 -0
  111. package/dist/dist-esm/react-components/src/components/index.js +3 -0
  112. package/dist/dist-esm/react-components/src/components/index.js.map +1 -1
  113. package/dist/dist-esm/react-components/src/components/styles/AttachmentCard.styles.d.ts +1 -1
  114. package/dist/dist-esm/react-components/src/components/styles/MessageThread.styles.d.ts +1 -1
  115. package/dist/dist-esm/react-components/src/components/utils/SendBoxUtils.d.ts +3 -3
  116. package/dist/dist-esm/react-components/src/components/utils/SendBoxUtils.js +14 -11
  117. package/dist/dist-esm/react-components/src/components/utils/SendBoxUtils.js.map +1 -1
  118. package/dist/dist-esm/react-components/src/components/utils/formatPhoneNumber.d.ts +2 -2
  119. package/dist/dist-esm/react-components/src/components/utils/formatPhoneNumber.js +6 -2
  120. package/dist/dist-esm/react-components/src/components/utils/formatPhoneNumber.js.map +1 -1
  121. package/dist/dist-esm/react-components/src/localization/locales/en-US/strings.json +5 -2
  122. package/dist/dist-esm/react-composites/src/composites/CallComposite/Strings.js.map +1 -1
  123. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/AzureCommunicationCallAdapter.d.ts +2 -2
  124. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/AzureCommunicationCallAdapter.js +1 -6
  125. package/dist/dist-esm/react-composites/src/composites/CallComposite/adapter/AzureCommunicationCallAdapter.js.map +1 -1
  126. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/NetworkReconnectTile.js +3 -3
  127. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/NetworkReconnectTile.js.map +1 -1
  128. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/SidePane/SidePane.js +7 -9
  129. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/SidePane/SidePane.js.map +1 -1
  130. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/SidePane/usePeoplePane.js +36 -33
  131. package/dist/dist-esm/react-composites/src/composites/CallComposite/components/SidePane/usePeoplePane.js.map +1 -1
  132. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/CallPage.js +6 -4
  133. package/dist/dist-esm/react-composites/src/composites/CallComposite/pages/CallPage.js.map +1 -1
  134. package/dist/dist-esm/react-composites/src/composites/CallComposite/utils/Utils.js +0 -2
  135. package/dist/dist-esm/react-composites/src/composites/CallComposite/utils/Utils.js.map +1 -1
  136. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/AzureCommunicationCallWithChatAdapter.d.ts +3 -7
  137. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/AzureCommunicationCallWithChatAdapter.js +2 -8
  138. package/dist/dist-esm/react-composites/src/composites/CallWithChatComposite/adapter/AzureCommunicationCallWithChatAdapter.js.map +1 -1
  139. package/dist/dist-esm/react-composites/src/composites/ChatComposite/ChatScreen.js +9 -8
  140. package/dist/dist-esm/react-composites/src/composites/ChatComposite/ChatScreen.js.map +1 -1
  141. package/dist/dist-esm/react-composites/src/composites/ChatComposite/ImageUpload/ImageUploadUtils.d.ts +4 -10
  142. package/dist/dist-esm/react-composites/src/composites/ChatComposite/ImageUpload/ImageUploadUtils.js +7 -23
  143. package/dist/dist-esm/react-composites/src/composites/ChatComposite/ImageUpload/ImageUploadUtils.js.map +1 -1
  144. package/dist/dist-esm/react-composites/src/composites/common/MeetingPhoneInfoPaneContent.js +2 -2
  145. package/dist/dist-esm/react-composites/src/composites/common/MeetingPhoneInfoPaneContent.js.map +1 -1
  146. package/dist/dist-esm/react-composites/src/composites/common/SendBoxPicker.js +3 -3
  147. package/dist/dist-esm/react-composites/src/composites/common/SendBoxPicker.js.map +1 -1
  148. package/package.json +2 -3
  149. package/dist/dist-cjs/communication-react/ChatMessageComponentAsRichTextEditBox-D4Pf_JpT.js.map +0 -1
  150. package/dist/dist-cjs/communication-react/index-DdAkrosV.js.map +0 -1
@@ -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) */\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\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/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport {\n getEditBoxMessagesImageUploadsInProgress,\n getSendBoxImageUploadsInProgress,\n onCancelInlineImageUploadHandlerForEditBox,\n onCancelInlineImageUploadHandlerForSendBox,\n onUploadInlineImageForEditBox,\n onUploadInlineImageForSendBox,\n removeImageTags\n} from './ImageUpload/ImageUploadUtils';\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport type { ChatAdapterState } from './adapter/ChatAdapter';\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport { isMicrosoftTeamsUserIdentifier } from '@azure/communication-common';\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport { SEND_BOX_UPLOADS_KEY_VALUE } from '../common/constants';\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport { ImageUploadReducer } from './ImageUpload/ImageUploadReducer';\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport { useLocale } from '../localization';\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 const adapter = useAdapter();\n const theme = useTheme();\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n const localeStrings = useLocale().strings;\n\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n const [textOnlyChat, setTextOnlyChat] = useState(false);\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n const [isACSChat, setIsACSChat] = useState(false);\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n const [editBoxInlineImageUploads, handleEditBoxInlineImageUploadAction] = useReducer(ImageUploadReducer, undefined);\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n const [sendBoxInlineImageUploads, handleSendBoxInlineImageUploadAction] = useReducer(ImageUploadReducer, undefined);\n\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n useEffect(() => {\n const updateChatState = (newState: ChatAdapterState): void => {\n setTextOnlyChat(newState.thread.properties?.messagingPolicy?.textOnlyChat === true);\n if (newState.thread.properties?.createdBy) {\n setIsACSChat(!isMicrosoftTeamsUserIdentifier(newState.thread.properties?.createdBy));\n }\n };\n // set initial state for textOnlyChat and isACSChat\n updateChatState(adapter.getState());\n\n adapter.onStateChange(updateChatState);\n return () => {\n adapter.offStateChange(updateChatState);\n };\n }, [adapter]);\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 setKeyboardFocusAfterFileSelection = useCallback(() => {\n // look up sendbox by ID for now, we will use `useRef`\n // once attachment button is moved inside of send box component\n // see ADO workitem #3764245\n /* @conditional-compile-remove(rich-text-editor-composite-support) */\n if (props.options?.richTextEditor) {\n const richTextSendBox = document?.querySelector(`[id=\"richTextSendBox\"]`) as HTMLDivElement;\n richTextSendBox?.focus();\n return;\n }\n const sendBox = document?.querySelector(`[id=\"sendbox\"]`) as HTMLTextAreaElement;\n // set send box on focus after file selection per A11y requirement\n sendBox?.focus();\n }, [\n /* @conditional-compile-remove(rich-text-editor-composite-support) */\n props.options?.richTextEditor\n ]);\n\n /* @conditional-compile-remove(file-sharing-acs) */\n const attachmentUploadButtonOnChange = useCallback(\n (files: FileList | null): void => {\n setKeyboardFocusAfterFileSelection();\n\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, setKeyboardFocusAfterFileSelection]\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 = useMemo(() => {\n if (\n !attachmentOptions?.uploadOptions?.handleAttachmentSelection ||\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n textOnlyChat\n ) {\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 /* @conditional-compile-remove(rich-text-editor-image-upload) */\n textOnlyChat\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(rich-text-editor-image-upload) */\n handleSendBoxInlineImageUploadAction({\n type: AttachmentUploadActionType.Clear,\n messageId: SEND_BOX_UPLOADS_KEY_VALUE\n });\n\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, /* @conditional-compile-remove(rich-text-editor-image-upload) */ handleSendBoxInlineImageUploadAction]\n );\n\n const onUpdateMessageHandler = useCallback(\n async (messageId: string, content: string) => {\n await messageThreadProps.onUpdateMessage(messageId, content);\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n handleEditBoxInlineImageUploadAction({ type: AttachmentUploadActionType.Clear, messageId });\n },\n [\n /* @conditional-compile-remove(rich-text-editor-image-upload) */ handleEditBoxInlineImageUploadAction,\n messageThreadProps\n ]\n );\n\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n const onCancelEditMessageHandler = useCallback(\n (messageId: string) => {\n handleEditBoxInlineImageUploadAction({ type: AttachmentUploadActionType.Clear, messageId });\n },\n [handleEditBoxInlineImageUploadAction]\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-composite-support) */\n const richTextEditorOptions = useMemo(() => {\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n const onPasteCallback = isACSChat || textOnlyChat ? removeImageTags : undefined;\n return options?.richTextEditor\n ? {\n /* @conditional-compile-remove(rich-text-editor-image-upload) */ onPaste: onPasteCallback\n }\n : undefined;\n }, [\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n isACSChat,\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n textOnlyChat,\n options?.richTextEditor\n ]);\n\n /* @conditional-compile-remove(rich-text-editor-composite-support) */\n const richTextEditBoxOptions = useMemo(() => {\n return options?.richTextEditor\n ? {\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n ...richTextEditorOptions,\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n onUploadInlineImage: (imageUrl: string, imageFileName: string, messageId: string) => {\n onUploadInlineImageForEditBox(\n imageUrl,\n imageFileName,\n messageId,\n adapter,\n handleEditBoxInlineImageUploadAction,\n localeStrings.chat\n );\n },\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n messagesImageUploadsInProgress: getEditBoxMessagesImageUploadsInProgress(editBoxInlineImageUploads),\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n onCancelInlineImageUpload: (imageId: string, messageId: string) => {\n onCancelInlineImageUploadHandlerForEditBox(\n imageId,\n messageId,\n editBoxInlineImageUploads,\n adapter,\n handleEditBoxInlineImageUploadAction\n );\n }\n }\n : undefined;\n }, [\n options?.richTextEditor,\n /* @conditional-compile-remove(rich-text-editor-image-upload) */ richTextEditorOptions,\n /* @conditional-compile-remove(rich-text-editor-image-upload) */ editBoxInlineImageUploads,\n /* @conditional-compile-remove(rich-text-editor-image-upload) */ adapter,\n /* @conditional-compile-remove(rich-text-editor-image-upload) */ localeStrings.chat\n ]);\n\n /* @conditional-compile-remove(rich-text-editor-composite-support) */\n const richTextSendBoxOptions = useMemo(() => {\n return options?.richTextEditor\n ? {\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n ...richTextEditorOptions,\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n onUploadInlineImage: (imageUrl: string, imageFileName: string) => {\n onUploadInlineImageForSendBox(\n imageUrl,\n imageFileName,\n adapter,\n handleSendBoxInlineImageUploadAction,\n localeStrings.chat\n );\n },\n // onUploadInlineImageForSendBox,\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n imageUploadsInProgress: getSendBoxImageUploadsInProgress(sendBoxInlineImageUploads),\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n onCancelInlineImageUpload: (imageId: string) => {\n onCancelInlineImageUploadHandlerForSendBox(\n imageId,\n sendBoxInlineImageUploads,\n adapter,\n handleSendBoxInlineImageUploadAction\n );\n }\n }\n : undefined;\n }, [\n options?.richTextEditor,\n /* @conditional-compile-remove(rich-text-editor-image-upload) */ richTextEditorOptions,\n /* @conditional-compile-remove(rich-text-editor-image-upload) */ sendBoxInlineImageUploads,\n /* @conditional-compile-remove(rich-text-editor-image-upload) */ localeStrings.chat,\n adapter\n ]);\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 onUpdateMessage={onUpdateMessageHandler}\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n onCancelEditMessage={onCancelEditMessageHandler}\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={richTextEditBoxOptions}\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\">{attachmentButton}</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={richTextSendBoxOptions}\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 </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(rich-text-editor-image-upload) */\nimport { removeImageTags } 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) */\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\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/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport {\n getEditBoxMessagesInlineImages,\n getSendBoxInlineImages,\n onCancelInlineImageUploadHandlerForEditBox,\n onCancelInlineImageUploadHandlerForSendBox,\n onInsertInlineImageForEditBox,\n onInsertInlineImageForSendBox\n} from './ImageUpload/ImageUploadUtils';\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport type { ChatAdapterState } from './adapter/ChatAdapter';\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport { isMicrosoftTeamsUserIdentifier } from '@azure/communication-common';\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport { SEND_BOX_UPLOADS_KEY_VALUE } from '../common/constants';\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport { ImageUploadReducer } from './ImageUpload/ImageUploadReducer';\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport { useLocale } from '../localization';\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 const adapter = useAdapter();\n const theme = useTheme();\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n const localeStrings = useLocale().strings;\n\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n const [textOnlyChat, setTextOnlyChat] = useState(false);\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n const [isACSChat, setIsACSChat] = useState(false);\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n const [editBoxInlineImageUploads, handleEditBoxInlineImageUploadAction] = useReducer(ImageUploadReducer, undefined);\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n const [sendBoxInlineImageUploads, handleSendBoxInlineImageUploadAction] = useReducer(ImageUploadReducer, undefined);\n\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n useEffect(() => {\n const updateChatState = (newState: ChatAdapterState): void => {\n setTextOnlyChat(newState.thread.properties?.messagingPolicy?.textOnlyChat === true);\n if (newState.thread.properties?.createdBy) {\n setIsACSChat(!isMicrosoftTeamsUserIdentifier(newState.thread.properties?.createdBy));\n }\n };\n // set initial state for textOnlyChat and isACSChat\n updateChatState(adapter.getState());\n\n adapter.onStateChange(updateChatState);\n return () => {\n adapter.offStateChange(updateChatState);\n };\n }, [adapter]);\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 setKeyboardFocusAfterFileSelection = useCallback(() => {\n // look up sendbox by ID for now, we will use `useRef`\n // once attachment button is moved inside of send box component\n // see ADO workitem #3764245\n /* @conditional-compile-remove(rich-text-editor-composite-support) */\n if (props.options?.richTextEditor) {\n const richTextSendBox = document?.querySelector(`[id=\"richTextSendBox\"]`) as HTMLDivElement;\n richTextSendBox?.focus();\n return;\n }\n const sendBox = document?.querySelector(`[id=\"sendbox\"]`) as HTMLTextAreaElement;\n // set send box on focus after file selection per A11y requirement\n sendBox?.focus();\n }, [\n /* @conditional-compile-remove(rich-text-editor-composite-support) */\n props.options?.richTextEditor\n ]);\n\n /* @conditional-compile-remove(file-sharing-acs) */\n const attachmentUploadButtonOnChange = useCallback(\n (files: FileList | null): void => {\n setKeyboardFocusAfterFileSelection();\n\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, setKeyboardFocusAfterFileSelection]\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 = useMemo(() => {\n if (\n !attachmentOptions?.uploadOptions?.handleAttachmentSelection ||\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n textOnlyChat\n ) {\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 /* @conditional-compile-remove(rich-text-editor-image-upload) */\n textOnlyChat\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(rich-text-editor-image-upload) */\n handleSendBoxInlineImageUploadAction({\n type: AttachmentUploadActionType.Clear,\n messageId: SEND_BOX_UPLOADS_KEY_VALUE\n });\n\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, /* @conditional-compile-remove(rich-text-editor-image-upload) */ handleSendBoxInlineImageUploadAction]\n );\n\n const onUpdateMessageHandler = useCallback(\n async (messageId: string, content: string) => {\n await messageThreadProps.onUpdateMessage(messageId, content);\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n handleEditBoxInlineImageUploadAction({ type: AttachmentUploadActionType.Clear, messageId });\n },\n [\n /* @conditional-compile-remove(rich-text-editor-image-upload) */ handleEditBoxInlineImageUploadAction,\n messageThreadProps\n ]\n );\n\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n const onCancelEditMessageHandler = useCallback(\n (messageId: string) => {\n handleEditBoxInlineImageUploadAction({ type: AttachmentUploadActionType.Clear, messageId });\n },\n [handleEditBoxInlineImageUploadAction]\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-composite-support) */\n const richTextEditorOptions = useMemo(() => {\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n const onPasteCallback = isACSChat || textOnlyChat ? removeImageTags : undefined;\n return options?.richTextEditor\n ? {\n /* @conditional-compile-remove(rich-text-editor-image-upload) */ onPaste: onPasteCallback\n }\n : undefined;\n }, [\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n isACSChat,\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n textOnlyChat,\n options?.richTextEditor\n ]);\n\n /* @conditional-compile-remove(rich-text-editor-composite-support) */\n const richTextEditBoxOptions = useMemo(() => {\n return options?.richTextEditor\n ? {\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n ...richTextEditorOptions,\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n onInsertInlineImage: (imageUrl: string, imageFileName: string, messageId: string) => {\n onInsertInlineImageForEditBox(\n imageUrl,\n imageFileName,\n messageId,\n adapter,\n handleEditBoxInlineImageUploadAction,\n localeStrings.chat\n );\n },\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n messagesInlineImages: getEditBoxMessagesInlineImages(editBoxInlineImageUploads),\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n onCancelInlineImageUpload: (imageId: string, messageId: string) => {\n onCancelInlineImageUploadHandlerForEditBox(\n imageId,\n messageId,\n editBoxInlineImageUploads,\n adapter,\n handleEditBoxInlineImageUploadAction\n );\n }\n }\n : undefined;\n }, [\n options?.richTextEditor,\n /* @conditional-compile-remove(rich-text-editor-image-upload) */ richTextEditorOptions,\n /* @conditional-compile-remove(rich-text-editor-image-upload) */ editBoxInlineImageUploads,\n /* @conditional-compile-remove(rich-text-editor-image-upload) */ adapter,\n /* @conditional-compile-remove(rich-text-editor-image-upload) */ localeStrings.chat\n ]);\n\n /* @conditional-compile-remove(rich-text-editor-composite-support) */\n const richTextSendBoxOptions = useMemo(() => {\n return options?.richTextEditor\n ? {\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n ...richTextEditorOptions,\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n onInsertInlineImage: (imageUrl: string, imageFileName: string) => {\n onInsertInlineImageForSendBox(\n imageUrl,\n imageFileName,\n adapter,\n handleSendBoxInlineImageUploadAction,\n localeStrings.chat\n );\n },\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n inlineImages: getSendBoxInlineImages(sendBoxInlineImageUploads),\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n onCancelInlineImageUpload: (imageId: string) => {\n onCancelInlineImageUploadHandlerForSendBox(\n imageId,\n sendBoxInlineImageUploads,\n adapter,\n handleSendBoxInlineImageUploadAction\n );\n }\n }\n : undefined;\n }, [\n options?.richTextEditor,\n /* @conditional-compile-remove(rich-text-editor-image-upload) */ richTextEditorOptions,\n /* @conditional-compile-remove(rich-text-editor-image-upload) */ sendBoxInlineImageUploads,\n /* @conditional-compile-remove(rich-text-editor-image-upload) */ localeStrings.chat,\n adapter\n ]);\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 onUpdateMessage={onUpdateMessageHandler}\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n onCancelEditMessage={onCancelEditMessageHandler}\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={richTextEditBoxOptions}\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\">{attachmentButton}</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={richTextSendBoxOptions}\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 </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"]}
@@ -11,25 +11,19 @@ export declare const getInlineImageData: (image: string) => Promise<Blob | undef
11
11
  /**
12
12
  * @internal
13
13
  */
14
- export declare const removeImageTags: (event: {
15
- content: DocumentFragment;
16
- }) => void;
14
+ export declare const getEditBoxMessagesInlineImages: (editBoxInlineImageUploads: Record<string, AttachmentUpload[]> | undefined) => Record<string, AttachmentMetadataInProgress[]> | undefined;
17
15
  /**
18
16
  * @internal
19
17
  */
20
- export declare const getEditBoxMessagesImageUploadsInProgress: (editBoxInlineImageUploads: Record<string, AttachmentUpload[]> | undefined) => Record<string, AttachmentMetadataInProgress[]> | undefined;
18
+ export declare const getSendBoxInlineImages: (sendBoxInlineImageUploads: Record<string, AttachmentUpload[]> | undefined) => AttachmentMetadataInProgress[] | undefined;
21
19
  /**
22
20
  * @internal
23
21
  */
24
- export declare const getSendBoxImageUploadsInProgress: (sendBoxInlineImageUploads: Record<string, AttachmentUpload[]> | undefined) => AttachmentMetadataInProgress[] | undefined;
22
+ export declare const onInsertInlineImageForEditBox: (image: string, fileName: string, messageId: string, adapter: ChatAdapter, handleEditBoxInlineImageUploadAction: Dispatch<ImageActions>, chatCompositeStrings: ChatCompositeStrings) => Promise<void>;
25
23
  /**
26
24
  * @internal
27
25
  */
28
- export declare const onUploadInlineImageForEditBox: (image: string, fileName: string, messageId: string, adapter: ChatAdapter, handleEditBoxInlineImageUploadAction: Dispatch<ImageActions>, chatCompositeStrings: ChatCompositeStrings) => Promise<void>;
29
- /**
30
- * @internal
31
- */
32
- export declare const onUploadInlineImageForSendBox: (image: string, fileName: string, adapter: ChatAdapter, handleSendBoxInlineImageUploadAction: Dispatch<ImageActions>, chatCompositeStrings: ChatCompositeStrings) => Promise<void>;
26
+ export declare const onInsertInlineImageForSendBox: (image: string, fileName: string, adapter: ChatAdapter, handleSendBoxInlineImageUploadAction: Dispatch<ImageActions>, chatCompositeStrings: ChatCompositeStrings) => Promise<void>;
33
27
  /**
34
28
  * @internal
35
29
  */
@@ -50,41 +50,25 @@ export const getInlineImageData = (image) => __awaiter(void 0, void 0, void 0, f
50
50
  /**
51
51
  * @internal
52
52
  */
53
- export const removeImageTags = (event) => {
54
- event.content.querySelectorAll('img').forEach((image) => {
55
- // If the image is the only child of its parent, remove all the parents of this img element.
56
- let parentNode = image.parentElement;
57
- let currentNode = image;
58
- while ((parentNode === null || parentNode === void 0 ? void 0 : parentNode.childNodes.length) === 1) {
59
- currentNode = parentNode;
60
- parentNode = parentNode.parentElement;
61
- }
62
- currentNode === null || currentNode === void 0 ? void 0 : currentNode.remove();
63
- });
64
- };
65
- /* @conditional-compile-remove(rich-text-editor-image-upload) */
66
- /**
67
- * @internal
68
- */
69
- export const getEditBoxMessagesImageUploadsInProgress = (editBoxInlineImageUploads) => {
53
+ export const getEditBoxMessagesInlineImages = (editBoxInlineImageUploads) => {
70
54
  if (!editBoxInlineImageUploads) {
71
55
  return;
72
56
  }
73
57
  const messageIds = Object.keys(editBoxInlineImageUploads || {});
74
- const messagesImageUploadsInProgress = {};
58
+ const messagesInlineImages = {};
75
59
  messageIds.map((messageId) => {
76
60
  const messageUploads = editBoxInlineImageUploads[messageId].map((upload) => {
77
61
  return upload.metadata;
78
62
  });
79
- messagesImageUploadsInProgress[messageId] = messageUploads;
63
+ messagesInlineImages[messageId] = messageUploads;
80
64
  });
81
- return messagesImageUploadsInProgress;
65
+ return messagesInlineImages;
82
66
  };
83
67
  /* @conditional-compile-remove(rich-text-editor-image-upload) */
84
68
  /**
85
69
  * @internal
86
70
  */
87
- export const getSendBoxImageUploadsInProgress = (sendBoxInlineImageUploads) => {
71
+ export const getSendBoxInlineImages = (sendBoxInlineImageUploads) => {
88
72
  var _a;
89
73
  if (!sendBoxInlineImageUploads) {
90
74
  return;
@@ -169,7 +153,7 @@ const generateUploadTask = (image, fileName, messageId, inlineImageUploadActionH
169
153
  /**
170
154
  * @internal
171
155
  */
172
- export const onUploadInlineImageForEditBox = (image, fileName, messageId, adapter, handleEditBoxInlineImageUploadAction, chatCompositeStrings) => __awaiter(void 0, void 0, void 0, function* () {
156
+ export const onInsertInlineImageForEditBox = (image, fileName, messageId, adapter, handleEditBoxInlineImageUploadAction, chatCompositeStrings) => __awaiter(void 0, void 0, void 0, function* () {
173
157
  const uploadTask = yield generateUploadTask(image, fileName, messageId, handleEditBoxInlineImageUploadAction);
174
158
  if (!uploadTask) {
175
159
  return;
@@ -185,7 +169,7 @@ export const onUploadInlineImageForEditBox = (image, fileName, messageId, adapte
185
169
  /**
186
170
  * @internal
187
171
  */
188
- export const onUploadInlineImageForSendBox = (image, fileName, adapter, handleSendBoxInlineImageUploadAction, chatCompositeStrings) => __awaiter(void 0, void 0, void 0, function* () {
172
+ export const onInsertInlineImageForSendBox = (image, fileName, adapter, handleSendBoxInlineImageUploadAction, chatCompositeStrings) => __awaiter(void 0, void 0, void 0, function* () {
189
173
  const uploadTask = yield generateUploadTask(image, fileName, SEND_BOX_UPLOADS_KEY_VALUE, handleSendBoxInlineImageUploadAction);
190
174
  if (!uploadTask) {
191
175
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"ImageUploadUtils.js","sourceRoot":"","sources":["../../../../../../../../react-composites/src/composites/ChatComposite/ImageUpload/ImageUploadUtils.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport { AttachmentMetadataInProgress } from '@internal/acs-ui-common';\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport { AttachmentUpload, AttachmentUploadActionType, AttachmentUploadTask } from '../file-sharing/AttachmentUpload';\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport { SEND_BOX_UPLOADS_KEY_VALUE } from '../../common/constants';\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport { ChatAdapter } from '../adapter/ChatAdapter';\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport { Dispatch } from 'react';\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport { ImageActions } from './ImageUploadReducer';\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport { nanoid } from 'nanoid';\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport { ChatCompositeStrings } from '../Strings';\n\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nconst MAX_INLINE_IMAGE_UPLOAD_SIZE_MB = 20;\n\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nconst fetchBlobData = async (\n resource: string | URL | Request,\n options: { timeout?: number; headers?: Headers; abortController: AbortController }\n): Promise<Response> => {\n // default timeout is 30 seconds\n const { timeout = 30000, abortController } = options;\n\n const id = setTimeout(() => {\n abortController.abort();\n }, timeout);\n\n const response = await fetch(resource, {\n ...options,\n signal: abortController.signal\n });\n clearTimeout(id);\n return response;\n};\n\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\n/**\n * @private\n */\nexport const getInlineImageData = async (image: string): Promise<Blob | undefined> => {\n if (image.startsWith('blob') || image.startsWith('http')) {\n try {\n const res = await fetchBlobData(image, { abortController: new AbortController() });\n const blobImage = await res.blob();\n return blobImage;\n } catch (error) {\n console.error('Error fetching image data', error);\n return;\n }\n }\n return;\n};\n\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\n/**\n * @internal\n */\nexport const removeImageTags = (event: { content: DocumentFragment }): void => {\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-image-upload) */\n/**\n * @internal\n */\nexport const getEditBoxMessagesImageUploadsInProgress = (\n editBoxInlineImageUploads: Record<string, AttachmentUpload[]> | undefined\n): Record<string, AttachmentMetadataInProgress[]> | undefined => {\n if (!editBoxInlineImageUploads) {\n return;\n }\n const messageIds = Object.keys(editBoxInlineImageUploads || {});\n const messagesImageUploadsInProgress: Record<string, AttachmentMetadataInProgress[]> = {};\n messageIds.map((messageId) => {\n const messageUploads = editBoxInlineImageUploads[messageId].map((upload) => {\n return upload.metadata;\n });\n messagesImageUploadsInProgress[messageId] = messageUploads;\n });\n return messagesImageUploadsInProgress;\n};\n\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\n/**\n * @internal\n */\nexport const getSendBoxImageUploadsInProgress = (\n sendBoxInlineImageUploads: Record<string, AttachmentUpload[]> | undefined\n): AttachmentMetadataInProgress[] | undefined => {\n if (!sendBoxInlineImageUploads) {\n return;\n }\n return sendBoxInlineImageUploads[SEND_BOX_UPLOADS_KEY_VALUE]?.map((upload) => upload.metadata);\n};\n\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nconst inlineImageUploadHandler = async (\n uploadTasks: AttachmentUpload[],\n adapter: ChatAdapter,\n strings: ChatCompositeStrings\n): Promise<void> => {\n for (const task of uploadTasks) {\n const uploadTask = task as AttachmentUploadTask;\n const image: Blob | undefined = uploadTask.image;\n if (!image) {\n uploadTask.notifyUploadFailed(strings.uploadImageDataNotProvided);\n continue;\n }\n if (image && image.size > MAX_INLINE_IMAGE_UPLOAD_SIZE_MB * 1024 * 1024) {\n uploadTask.notifyUploadFailed(\n strings.uploadImageIsTooLarge.replace('{maxImageSize}', `${MAX_INLINE_IMAGE_UPLOAD_SIZE_MB}`)\n );\n continue;\n }\n\n const SUPPORTED_FILES: Array<string> = ['jpg', 'jpeg', 'png', 'gif', 'heic', 'webp'];\n const imageExtension = task.metadata?.name.split('.').pop() ?? '';\n if (!SUPPORTED_FILES.includes(imageExtension)) {\n uploadTask.notifyUploadFailed(\n strings.uploadImageExtensionIsNotAllowed.replace('{imageExtension}', imageExtension)\n );\n continue;\n }\n\n try {\n const response = await adapter.uploadImage(image, task.metadata?.name);\n uploadTask.notifyUploadCompleted(response.id, task.metadata.url || '');\n } catch (error) {\n console.error(error);\n uploadTask.notifyUploadFailed(strings.uploadImageFailed);\n }\n }\n};\n\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nconst generateUploadTask = async (\n image: string,\n fileName: string,\n messageId: string,\n inlineImageUploadActionHandler: Dispatch<ImageActions>\n): Promise<AttachmentUpload | undefined> => {\n const imageData = await getInlineImageData(image);\n if (!imageData) {\n return;\n }\n const taskId = nanoid();\n const uploadTask: AttachmentUpload = {\n image: imageData,\n taskId,\n metadata: {\n id: taskId,\n name: fileName,\n url: image,\n progress: 0\n },\n notifyUploadProgressChanged: (value: number) => {\n inlineImageUploadActionHandler({\n type: AttachmentUploadActionType.Progress,\n taskId,\n progress: value,\n messageId\n });\n },\n notifyUploadCompleted: (id: string, url: string) => {\n inlineImageUploadActionHandler({\n type: AttachmentUploadActionType.Completed,\n taskId,\n id,\n url,\n messageId\n });\n },\n notifyUploadFailed: (message: string) => {\n inlineImageUploadActionHandler({ type: AttachmentUploadActionType.Failed, taskId, message, messageId });\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 inlineImageUploadActionHandler({ type: AttachmentUploadActionType.Remove, id: taskId, messageId });\n }, 10 * 1000);\n }\n };\n return uploadTask;\n};\n\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\n/**\n * @internal\n */\nexport const onUploadInlineImageForEditBox = async (\n image: string,\n fileName: string,\n messageId: string,\n adapter: ChatAdapter,\n handleEditBoxInlineImageUploadAction: Dispatch<ImageActions>,\n chatCompositeStrings: ChatCompositeStrings\n): Promise<void> => {\n const uploadTask: AttachmentUpload | undefined = await generateUploadTask(\n image,\n fileName,\n messageId,\n handleEditBoxInlineImageUploadAction\n );\n if (!uploadTask) {\n return;\n }\n\n handleEditBoxInlineImageUploadAction({\n type: AttachmentUploadActionType.Set,\n newUploads: [uploadTask],\n messageId\n });\n inlineImageUploadHandler([uploadTask], adapter, chatCompositeStrings);\n};\n\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\n/**\n * @internal\n */\nexport const onUploadInlineImageForSendBox = async (\n image: string,\n fileName: string,\n adapter: ChatAdapter,\n handleSendBoxInlineImageUploadAction: Dispatch<ImageActions>,\n chatCompositeStrings: ChatCompositeStrings\n): Promise<void> => {\n const uploadTask: AttachmentUpload | undefined = await generateUploadTask(\n image,\n fileName,\n SEND_BOX_UPLOADS_KEY_VALUE,\n handleSendBoxInlineImageUploadAction\n );\n\n if (!uploadTask) {\n return;\n }\n\n handleSendBoxInlineImageUploadAction({\n type: AttachmentUploadActionType.Set,\n newUploads: [uploadTask],\n messageId: SEND_BOX_UPLOADS_KEY_VALUE\n });\n inlineImageUploadHandler([uploadTask], adapter, chatCompositeStrings);\n};\n\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\n/**\n * @internal\n */\nexport const cancelInlineImageUpload = (\n imageId: string,\n imageUpload: AttachmentUpload | undefined,\n messageId: string,\n inlineImageUploadActionHandler: Dispatch<ImageActions>,\n adapter: ChatAdapter\n): void => {\n if (!imageUpload || !imageUpload?.metadata.id) {\n return;\n }\n\n inlineImageUploadActionHandler({\n type: AttachmentUploadActionType.Remove,\n id: imageUpload?.metadata.id,\n messageId\n });\n // TODO: remove local blob\n if (imageUpload?.metadata.progress === 1) {\n try {\n adapter.deleteImage(imageId);\n } catch (error) {\n console.error(error);\n }\n }\n};\n\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\n/**\n * @internal\n */\nexport const onCancelInlineImageUploadHandlerForEditBox = (\n imageId: string,\n messageId: string,\n editBoxInlineImageUploads: Record<string, AttachmentUpload[]> | undefined,\n adapter: ChatAdapter,\n handleEditBoxInlineImageUploadAction: Dispatch<ImageActions>\n): void => {\n if (!editBoxInlineImageUploads) {\n return;\n }\n const imageUpload = editBoxInlineImageUploads[messageId].find((upload) => upload.metadata.id === imageId);\n\n cancelInlineImageUpload(imageId, imageUpload, messageId, handleEditBoxInlineImageUploadAction, adapter);\n};\n\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\n/**\n * @internal\n */\nexport const onCancelInlineImageUploadHandlerForSendBox = (\n imageId: string,\n sendBoxInlineImageUploads: Record<string, AttachmentUpload[]> | undefined,\n adapter: ChatAdapter,\n handleSendBoxInlineImageUploadAction: Dispatch<ImageActions>\n): void => {\n if (!sendBoxInlineImageUploads) {\n return;\n }\n const imageUpload = sendBoxInlineImageUploads[SEND_BOX_UPLOADS_KEY_VALUE].find(\n (upload) => upload.metadata.id === imageId\n );\n\n cancelInlineImageUpload(\n imageId,\n imageUpload,\n SEND_BOX_UPLOADS_KEY_VALUE,\n handleSendBoxInlineImageUploadAction,\n adapter\n );\n};\n"]}
1
+ {"version":3,"file":"ImageUploadUtils.js","sourceRoot":"","sources":["../../../../../../../../react-composites/src/composites/ChatComposite/ImageUpload/ImageUploadUtils.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport { AttachmentMetadataInProgress } from '@internal/acs-ui-common';\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport { AttachmentUpload, AttachmentUploadActionType, AttachmentUploadTask } from '../file-sharing/AttachmentUpload';\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport { SEND_BOX_UPLOADS_KEY_VALUE } from '../../common/constants';\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport { ChatAdapter } from '../adapter/ChatAdapter';\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport { Dispatch } from 'react';\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport { ImageActions } from './ImageUploadReducer';\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport { nanoid } from 'nanoid';\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport { ChatCompositeStrings } from '../Strings';\n\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nconst MAX_INLINE_IMAGE_UPLOAD_SIZE_MB = 20;\n\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nconst fetchBlobData = async (\n resource: string | URL | Request,\n options: { timeout?: number; headers?: Headers; abortController: AbortController }\n): Promise<Response> => {\n // default timeout is 30 seconds\n const { timeout = 30000, abortController } = options;\n\n const id = setTimeout(() => {\n abortController.abort();\n }, timeout);\n\n const response = await fetch(resource, {\n ...options,\n signal: abortController.signal\n });\n clearTimeout(id);\n return response;\n};\n\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\n/**\n * @private\n */\nexport const getInlineImageData = async (image: string): Promise<Blob | undefined> => {\n if (image.startsWith('blob') || image.startsWith('http')) {\n try {\n const res = await fetchBlobData(image, { abortController: new AbortController() });\n const blobImage = await res.blob();\n return blobImage;\n } catch (error) {\n console.error('Error fetching image data', error);\n return;\n }\n }\n return;\n};\n\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\n/**\n * @internal\n */\nexport const getEditBoxMessagesInlineImages = (\n editBoxInlineImageUploads: Record<string, AttachmentUpload[]> | undefined\n): Record<string, AttachmentMetadataInProgress[]> | undefined => {\n if (!editBoxInlineImageUploads) {\n return;\n }\n const messageIds = Object.keys(editBoxInlineImageUploads || {});\n const messagesInlineImages: Record<string, AttachmentMetadataInProgress[]> = {};\n messageIds.map((messageId) => {\n const messageUploads = editBoxInlineImageUploads[messageId].map((upload) => {\n return upload.metadata;\n });\n messagesInlineImages[messageId] = messageUploads;\n });\n return messagesInlineImages;\n};\n\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\n/**\n * @internal\n */\nexport const getSendBoxInlineImages = (\n sendBoxInlineImageUploads: Record<string, AttachmentUpload[]> | undefined\n): AttachmentMetadataInProgress[] | undefined => {\n if (!sendBoxInlineImageUploads) {\n return;\n }\n return sendBoxInlineImageUploads[SEND_BOX_UPLOADS_KEY_VALUE]?.map((upload) => upload.metadata);\n};\n\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nconst inlineImageUploadHandler = async (\n uploadTasks: AttachmentUpload[],\n adapter: ChatAdapter,\n strings: ChatCompositeStrings\n): Promise<void> => {\n for (const task of uploadTasks) {\n const uploadTask = task as AttachmentUploadTask;\n const image: Blob | undefined = uploadTask.image;\n if (!image) {\n uploadTask.notifyUploadFailed(strings.uploadImageDataNotProvided);\n continue;\n }\n if (image && image.size > MAX_INLINE_IMAGE_UPLOAD_SIZE_MB * 1024 * 1024) {\n uploadTask.notifyUploadFailed(\n strings.uploadImageIsTooLarge.replace('{maxImageSize}', `${MAX_INLINE_IMAGE_UPLOAD_SIZE_MB}`)\n );\n continue;\n }\n\n const SUPPORTED_FILES: Array<string> = ['jpg', 'jpeg', 'png', 'gif', 'heic', 'webp'];\n const imageExtension = task.metadata?.name.split('.').pop() ?? '';\n if (!SUPPORTED_FILES.includes(imageExtension)) {\n uploadTask.notifyUploadFailed(\n strings.uploadImageExtensionIsNotAllowed.replace('{imageExtension}', imageExtension)\n );\n continue;\n }\n\n try {\n const response = await adapter.uploadImage(image, task.metadata?.name);\n uploadTask.notifyUploadCompleted(response.id, task.metadata.url || '');\n } catch (error) {\n console.error(error);\n uploadTask.notifyUploadFailed(strings.uploadImageFailed);\n }\n }\n};\n\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nconst generateUploadTask = async (\n image: string,\n fileName: string,\n messageId: string,\n inlineImageUploadActionHandler: Dispatch<ImageActions>\n): Promise<AttachmentUpload | undefined> => {\n const imageData = await getInlineImageData(image);\n if (!imageData) {\n return;\n }\n const taskId = nanoid();\n const uploadTask: AttachmentUpload = {\n image: imageData,\n taskId,\n metadata: {\n id: taskId,\n name: fileName,\n url: image,\n progress: 0\n },\n notifyUploadProgressChanged: (value: number) => {\n inlineImageUploadActionHandler({\n type: AttachmentUploadActionType.Progress,\n taskId,\n progress: value,\n messageId\n });\n },\n notifyUploadCompleted: (id: string, url: string) => {\n inlineImageUploadActionHandler({\n type: AttachmentUploadActionType.Completed,\n taskId,\n id,\n url,\n messageId\n });\n },\n notifyUploadFailed: (message: string) => {\n inlineImageUploadActionHandler({ type: AttachmentUploadActionType.Failed, taskId, message, messageId });\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 inlineImageUploadActionHandler({ type: AttachmentUploadActionType.Remove, id: taskId, messageId });\n }, 10 * 1000);\n }\n };\n return uploadTask;\n};\n\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\n/**\n * @internal\n */\nexport const onInsertInlineImageForEditBox = async (\n image: string,\n fileName: string,\n messageId: string,\n adapter: ChatAdapter,\n handleEditBoxInlineImageUploadAction: Dispatch<ImageActions>,\n chatCompositeStrings: ChatCompositeStrings\n): Promise<void> => {\n const uploadTask: AttachmentUpload | undefined = await generateUploadTask(\n image,\n fileName,\n messageId,\n handleEditBoxInlineImageUploadAction\n );\n if (!uploadTask) {\n return;\n }\n\n handleEditBoxInlineImageUploadAction({\n type: AttachmentUploadActionType.Set,\n newUploads: [uploadTask],\n messageId\n });\n inlineImageUploadHandler([uploadTask], adapter, chatCompositeStrings);\n};\n\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\n/**\n * @internal\n */\nexport const onInsertInlineImageForSendBox = async (\n image: string,\n fileName: string,\n adapter: ChatAdapter,\n handleSendBoxInlineImageUploadAction: Dispatch<ImageActions>,\n chatCompositeStrings: ChatCompositeStrings\n): Promise<void> => {\n const uploadTask: AttachmentUpload | undefined = await generateUploadTask(\n image,\n fileName,\n SEND_BOX_UPLOADS_KEY_VALUE,\n handleSendBoxInlineImageUploadAction\n );\n\n if (!uploadTask) {\n return;\n }\n\n handleSendBoxInlineImageUploadAction({\n type: AttachmentUploadActionType.Set,\n newUploads: [uploadTask],\n messageId: SEND_BOX_UPLOADS_KEY_VALUE\n });\n inlineImageUploadHandler([uploadTask], adapter, chatCompositeStrings);\n};\n\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\n/**\n * @internal\n */\nexport const cancelInlineImageUpload = (\n imageId: string,\n imageUpload: AttachmentUpload | undefined,\n messageId: string,\n inlineImageUploadActionHandler: Dispatch<ImageActions>,\n adapter: ChatAdapter\n): void => {\n if (!imageUpload || !imageUpload?.metadata.id) {\n return;\n }\n\n inlineImageUploadActionHandler({\n type: AttachmentUploadActionType.Remove,\n id: imageUpload?.metadata.id,\n messageId\n });\n // TODO: remove local blob\n if (imageUpload?.metadata.progress === 1) {\n try {\n adapter.deleteImage(imageId);\n } catch (error) {\n console.error(error);\n }\n }\n};\n\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\n/**\n * @internal\n */\nexport const onCancelInlineImageUploadHandlerForEditBox = (\n imageId: string,\n messageId: string,\n editBoxInlineImageUploads: Record<string, AttachmentUpload[]> | undefined,\n adapter: ChatAdapter,\n handleEditBoxInlineImageUploadAction: Dispatch<ImageActions>\n): void => {\n if (!editBoxInlineImageUploads) {\n return;\n }\n const imageUpload = editBoxInlineImageUploads[messageId].find((upload) => upload.metadata.id === imageId);\n\n cancelInlineImageUpload(imageId, imageUpload, messageId, handleEditBoxInlineImageUploadAction, adapter);\n};\n\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\n/**\n * @internal\n */\nexport const onCancelInlineImageUploadHandlerForSendBox = (\n imageId: string,\n sendBoxInlineImageUploads: Record<string, AttachmentUpload[]> | undefined,\n adapter: ChatAdapter,\n handleSendBoxInlineImageUploadAction: Dispatch<ImageActions>\n): void => {\n if (!sendBoxInlineImageUploads) {\n return;\n }\n const imageUpload = sendBoxInlineImageUploads[SEND_BOX_UPLOADS_KEY_VALUE].find(\n (upload) => upload.metadata.id === imageId\n );\n\n cancelInlineImageUpload(\n imageId,\n imageUpload,\n SEND_BOX_UPLOADS_KEY_VALUE,\n handleSendBoxInlineImageUploadAction,\n adapter\n );\n};\n"]}
@@ -6,7 +6,7 @@ import { Stack, Text, useTheme, Icon, Link } from '@fluentui/react';
6
6
  /* @conditional-compile-remove(teams-meeting-conference) */
7
7
  import React from 'react';
8
8
  /* @conditional-compile-remove(teams-meeting-conference) */
9
- import { formatPhoneNumberInfo, formatPhoneNumber, formatPhoneNumberLink } from "../../../../react-components/src";
9
+ import { formatPhoneNumberInfo, _formatPhoneNumber, formatPhoneNumberLink } from "../../../../react-components/src";
10
10
  /* @conditional-compile-remove(teams-meeting-conference) */
11
11
  import { phoneInfoTextStyle, phoneInfoIcon, phoneInfoInstructionLine, phoneInfoStep, phoneInfoIconStyle, phoneInfoLabelStyle, phoneInfoContainerTokens, phoneInfoContainerStyle } from './styles/TeamsMeetingConferenceInfo.style';
12
12
  /* @conditional-compile-remove(teams-meeting-conference) */
@@ -33,7 +33,7 @@ export const MeetingPhoneInfoPaneContent = (props) => {
33
33
  React.createElement(Stack.Item, null,
34
34
  React.createElement(Text, { className: phoneInfoLabelStyle }, localeStrings.meetingConferencePhoneInfoModalDialIn)))),
35
35
  React.createElement(Stack.Item, { className: phoneInfoStep }, conferencePhoneInfoList.map((phoneNumber, index) => (React.createElement(Stack.Item, { key: index },
36
- React.createElement(Link, { className: phoneInfoTextStyle, href: formatPhoneNumberLink(phoneNumber) }, formatPhoneNumber(phoneNumber.phoneNumber)),
36
+ React.createElement(Link, { className: phoneInfoTextStyle, href: formatPhoneNumberLink(phoneNumber) }, _formatPhoneNumber(phoneNumber.phoneNumber, true)),
37
37
  React.createElement(Text, { className: phoneInfoTextStyle },
38
38
  ' ',
39
39
  phoneNumber.isTollFree
@@ -1 +1 @@
1
- {"version":3,"file":"MeetingPhoneInfoPaneContent.js","sourceRoot":"","sources":["../../../../../../../react-composites/src/composites/common/MeetingPhoneInfoPaneContent.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/* @conditional-compile-remove(teams-meeting-conference) */\n// eslint-disable-next-line no-restricted-imports\nimport { Stack, Text, useTheme, Icon, Link } from '@fluentui/react';\n/* @conditional-compile-remove(teams-meeting-conference) */\nimport { _DrawerMenuItemProps } from '@internal/react-components';\n/* @conditional-compile-remove(teams-meeting-conference) */\nimport React from 'react';\n/* @conditional-compile-remove(teams-meeting-conference) */\nimport {\n ConferencePhoneInfo,\n formatPhoneNumberInfo,\n formatPhoneNumber,\n formatPhoneNumberLink\n} from '@internal/react-components';\n/* @conditional-compile-remove(teams-meeting-conference) */\nimport {\n phoneInfoTextStyle,\n phoneInfoIcon,\n phoneInfoInstructionLine,\n phoneInfoStep,\n phoneInfoIconStyle,\n phoneInfoLabelStyle,\n phoneInfoContainerTokens,\n phoneInfoContainerStyle\n} from './styles/TeamsMeetingConferenceInfo.style';\n/* @conditional-compile-remove(teams-meeting-conference) */\nimport { useLocale } from '../localization';\n\n/* @conditional-compile-remove(teams-meeting-conference) */\n/**\n * @private\n */\nexport const MeetingPhoneInfoPaneContent = (props: {\n mobileView?: boolean;\n conferencePhoneInfoList?: ConferencePhoneInfo[];\n}): JSX.Element => {\n const { conferencePhoneInfoList } = props;\n const theme = useTheme();\n const localeStrings = useLocale().component.strings.meetingConferencePhoneInfo;\n\n if (props.mobileView) {\n return (\n <Stack\n verticalFill\n styles={phoneInfoContainerStyle}\n tokens={phoneInfoContainerTokens}\n data-ui-id=\"phone-info-pane-content\"\n >\n {(conferencePhoneInfoList === undefined || conferencePhoneInfoList.length === 0) && (\n <Stack horizontal>\n <Text className={phoneInfoTextStyle}>{localeStrings.meetingConferencePhoneInfoModalNoPhoneAvailable}</Text>\n </Stack>\n )}\n {conferencePhoneInfoList && conferencePhoneInfoList.length > 0 && (\n <Stack>\n <Stack horizontal horizontalAlign=\"space-between\" className={phoneInfoInstructionLine}>\n <Stack.Item>\n <Stack horizontal className={phoneInfoStep}>\n <Stack.Item className={phoneInfoIcon(theme)}>\n <Stack verticalAlign=\"center\" horizontalAlign=\"center\">\n <Icon iconName=\"JoinByPhoneDialStepIcon\" className={phoneInfoIconStyle(theme)} />\n </Stack>\n </Stack.Item>\n <Stack.Item>\n <Text className={phoneInfoLabelStyle}>{localeStrings.meetingConferencePhoneInfoModalDialIn}</Text>\n </Stack.Item>\n </Stack>\n </Stack.Item>\n <Stack.Item className={phoneInfoStep}>\n {conferencePhoneInfoList.map((phoneNumber, index) => (\n <Stack.Item key={index}>\n <Link className={phoneInfoTextStyle} href={formatPhoneNumberLink(phoneNumber)}>\n {formatPhoneNumber(phoneNumber.phoneNumber)}\n </Link>\n <Text className={phoneInfoTextStyle}>\n {' '}\n {phoneNumber.isTollFree\n ? localeStrings.meetingConferencePhoneInfoModalTollFree\n : localeStrings.meetingConferencePhoneInfoModalToll}\n </Text>\n <br />\n <Text className={phoneInfoTextStyle}> {formatPhoneNumberInfo(phoneNumber, localeStrings)}</Text>\n </Stack.Item>\n ))}\n </Stack.Item>\n </Stack>\n <Stack\n horizontal\n horizontalAlign=\"space-between\"\n verticalAlign=\"center\"\n className={phoneInfoInstructionLine}\n >\n <Stack.Item>\n <Stack horizontal>\n <Stack.Item className={phoneInfoIcon(theme)}>\n <Icon iconName=\"JoinByPhoneConferenceIdIcon\" className={phoneInfoIconStyle(theme)} />\n </Stack.Item>\n <Stack.Item>\n <Text className={phoneInfoLabelStyle}>\n {localeStrings.meetingConferencePhoneInfoModalMeetingId}\n </Text>\n </Stack.Item>\n </Stack>\n </Stack.Item>\n <Text className={phoneInfoTextStyle}>{conferencePhoneInfoList[0].conferenceId}#</Text>\n </Stack>\n <Stack\n horizontal\n horizontalAlign=\"space-between\"\n verticalAlign=\"center\"\n className={phoneInfoInstructionLine}\n >\n <Stack horizontal>\n <Stack.Item className={phoneInfoIcon(theme)}>\n <Icon iconName=\"JoinByPhoneWaitToBeAdmittedIcon\" className={phoneInfoIconStyle(theme)} />\n </Stack.Item>\n <Stack.Item>\n <Text className={phoneInfoLabelStyle}>{localeStrings.meetingConferencePhoneInfoModalWait}</Text>\n </Stack.Item>\n </Stack>\n </Stack>\n </Stack>\n )}\n </Stack>\n );\n }\n\n return (\n <Stack\n verticalFill\n styles={phoneInfoContainerStyle}\n tokens={phoneInfoContainerTokens}\n data-ui-id=\"phone-info-pane-content\"\n ></Stack>\n );\n};\n"]}
1
+ {"version":3,"file":"MeetingPhoneInfoPaneContent.js","sourceRoot":"","sources":["../../../../../../../react-composites/src/composites/common/MeetingPhoneInfoPaneContent.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/* @conditional-compile-remove(teams-meeting-conference) */\n// eslint-disable-next-line no-restricted-imports\nimport { Stack, Text, useTheme, Icon, Link } from '@fluentui/react';\n/* @conditional-compile-remove(teams-meeting-conference) */\nimport { _DrawerMenuItemProps } from '@internal/react-components';\n/* @conditional-compile-remove(teams-meeting-conference) */\nimport React from 'react';\n/* @conditional-compile-remove(teams-meeting-conference) */\nimport {\n ConferencePhoneInfo,\n formatPhoneNumberInfo,\n _formatPhoneNumber,\n formatPhoneNumberLink\n} from '@internal/react-components';\n/* @conditional-compile-remove(teams-meeting-conference) */\nimport {\n phoneInfoTextStyle,\n phoneInfoIcon,\n phoneInfoInstructionLine,\n phoneInfoStep,\n phoneInfoIconStyle,\n phoneInfoLabelStyle,\n phoneInfoContainerTokens,\n phoneInfoContainerStyle\n} from './styles/TeamsMeetingConferenceInfo.style';\n/* @conditional-compile-remove(teams-meeting-conference) */\nimport { useLocale } from '../localization';\n\n/* @conditional-compile-remove(teams-meeting-conference) */\n/**\n * @private\n */\nexport const MeetingPhoneInfoPaneContent = (props: {\n mobileView?: boolean;\n conferencePhoneInfoList?: ConferencePhoneInfo[];\n}): JSX.Element => {\n const { conferencePhoneInfoList } = props;\n const theme = useTheme();\n const localeStrings = useLocale().component.strings.meetingConferencePhoneInfo;\n\n if (props.mobileView) {\n return (\n <Stack\n verticalFill\n styles={phoneInfoContainerStyle}\n tokens={phoneInfoContainerTokens}\n data-ui-id=\"phone-info-pane-content\"\n >\n {(conferencePhoneInfoList === undefined || conferencePhoneInfoList.length === 0) && (\n <Stack horizontal>\n <Text className={phoneInfoTextStyle}>{localeStrings.meetingConferencePhoneInfoModalNoPhoneAvailable}</Text>\n </Stack>\n )}\n {conferencePhoneInfoList && conferencePhoneInfoList.length > 0 && (\n <Stack>\n <Stack horizontal horizontalAlign=\"space-between\" className={phoneInfoInstructionLine}>\n <Stack.Item>\n <Stack horizontal className={phoneInfoStep}>\n <Stack.Item className={phoneInfoIcon(theme)}>\n <Stack verticalAlign=\"center\" horizontalAlign=\"center\">\n <Icon iconName=\"JoinByPhoneDialStepIcon\" className={phoneInfoIconStyle(theme)} />\n </Stack>\n </Stack.Item>\n <Stack.Item>\n <Text className={phoneInfoLabelStyle}>{localeStrings.meetingConferencePhoneInfoModalDialIn}</Text>\n </Stack.Item>\n </Stack>\n </Stack.Item>\n <Stack.Item className={phoneInfoStep}>\n {conferencePhoneInfoList.map((phoneNumber, index) => (\n <Stack.Item key={index}>\n <Link className={phoneInfoTextStyle} href={formatPhoneNumberLink(phoneNumber)}>\n {_formatPhoneNumber(phoneNumber.phoneNumber, true)}\n </Link>\n <Text className={phoneInfoTextStyle}>\n {' '}\n {phoneNumber.isTollFree\n ? localeStrings.meetingConferencePhoneInfoModalTollFree\n : localeStrings.meetingConferencePhoneInfoModalToll}\n </Text>\n <br />\n <Text className={phoneInfoTextStyle}> {formatPhoneNumberInfo(phoneNumber, localeStrings)}</Text>\n </Stack.Item>\n ))}\n </Stack.Item>\n </Stack>\n <Stack\n horizontal\n horizontalAlign=\"space-between\"\n verticalAlign=\"center\"\n className={phoneInfoInstructionLine}\n >\n <Stack.Item>\n <Stack horizontal>\n <Stack.Item className={phoneInfoIcon(theme)}>\n <Icon iconName=\"JoinByPhoneConferenceIdIcon\" className={phoneInfoIconStyle(theme)} />\n </Stack.Item>\n <Stack.Item>\n <Text className={phoneInfoLabelStyle}>\n {localeStrings.meetingConferencePhoneInfoModalMeetingId}\n </Text>\n </Stack.Item>\n </Stack>\n </Stack.Item>\n <Text className={phoneInfoTextStyle}>{conferencePhoneInfoList[0].conferenceId}#</Text>\n </Stack>\n <Stack\n horizontal\n horizontalAlign=\"space-between\"\n verticalAlign=\"center\"\n className={phoneInfoInstructionLine}\n >\n <Stack horizontal>\n <Stack.Item className={phoneInfoIcon(theme)}>\n <Icon iconName=\"JoinByPhoneWaitToBeAdmittedIcon\" className={phoneInfoIconStyle(theme)} />\n </Stack.Item>\n <Stack.Item>\n <Text className={phoneInfoLabelStyle}>{localeStrings.meetingConferencePhoneInfoModalWait}</Text>\n </Stack.Item>\n </Stack>\n </Stack>\n </Stack>\n )}\n </Stack>\n );\n }\n\n return (\n <Stack\n verticalFill\n styles={phoneInfoContainerStyle}\n tokens={phoneInfoContainerTokens}\n data-ui-id=\"phone-info-pane-content\"\n ></Stack>\n );\n};\n"]}
@@ -27,7 +27,7 @@ export const SendBoxPicker = (props) => {
27
27
  /* @conditional-compile-remove(rich-text-editor-composite-support) */
28
28
  const { richTextEditorOptions } = props;
29
29
  /* @conditional-compile-remove(rich-text-editor-image-upload) */
30
- const { onPaste, onUploadInlineImage, imageUploadsInProgress, onCancelInlineImageUpload } = richTextEditorOptions || {};
30
+ const { onPaste, onInsertInlineImage, inlineImages, onCancelInlineImageUpload } = richTextEditorOptions || {};
31
31
  const sendBoxProps = usePropsFor(SendBox);
32
32
  /* @conditional-compile-remove(rich-text-editor-composite-support) */
33
33
  const isRichTextEditorEnabled = useMemo(() => {
@@ -42,9 +42,9 @@ export const SendBoxPicker = (props) => {
42
42
  /* @conditional-compile-remove(rich-text-editor-image-upload) */
43
43
  onPaste: onPaste,
44
44
  /* @conditional-compile-remove(rich-text-editor-image-upload) */
45
- onUploadInlineImage: onUploadInlineImage,
45
+ onInsertInlineImage: onInsertInlineImage,
46
46
  /* @conditional-compile-remove(rich-text-editor-image-upload) */
47
- imageUploadsInProgress: imageUploadsInProgress,
47
+ inlineImages: inlineImages,
48
48
  /* @conditional-compile-remove(rich-text-editor-image-upload) */
49
49
  onCancelInlineImageUpload: onCancelInlineImageUpload })))));
50
50
  }
@@ -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,qEAAqE;IACrE,MAAM,EAAE,qBAAqB,EAAE,GAAG,KAAK,CAAC;IACxC,gEAAgE;IAChE,MAAM,EAAE,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,yBAAyB,EAAE,GACvF,qBAAqB,IAAI,EAAE,CAAC;IAE9B,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,oBACjB,KAAK;oBACT,gEAAgE;oBAChE,OAAO,EAAE,OAAO;oBAChB,gEAAgE;oBAChE,mBAAmB,EAAE,mBAAmB;oBACxC,gEAAgE;oBAChE,sBAAsB,EAAE,sBAAsB;oBAC9C,gEAAgE;oBAChE,yBAAyB,EAAE,yBAAyB,IACpD,CACO,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 { RichTextSendBoxOptions } 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?: RichTextSendBoxOptions;\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 /* @conditional-compile-remove(rich-text-editor-composite-support) */\n const { richTextEditorOptions } = props;\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n const { onPaste, onUploadInlineImage, imageUploadsInProgress, onCancelInlineImageUpload } =\n richTextEditorOptions || {};\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\n {...props}\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n onPaste={onPaste}\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n onUploadInlineImage={onUploadInlineImage}\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n imageUploadsInProgress={imageUploadsInProgress}\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n onCancelInlineImageUpload={onCancelInlineImageUpload}\n />\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,qEAAqE;IACrE,MAAM,EAAE,qBAAqB,EAAE,GAAG,KAAK,CAAC;IACxC,gEAAgE;IAChE,MAAM,EAAE,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,yBAAyB,EAAE,GAAG,qBAAqB,IAAI,EAAE,CAAC;IAE9G,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,oBACjB,KAAK;oBACT,gEAAgE;oBAChE,OAAO,EAAE,OAAO;oBAChB,gEAAgE;oBAChE,mBAAmB,EAAE,mBAAmB;oBACxC,gEAAgE;oBAChE,YAAY,EAAE,YAAY;oBAC1B,gEAAgE;oBAChE,yBAAyB,EAAE,yBAAyB,IACpD,CACO,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 { RichTextSendBoxOptions } 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?: RichTextSendBoxOptions;\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 /* @conditional-compile-remove(rich-text-editor-composite-support) */\n const { richTextEditorOptions } = props;\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n const { onPaste, onInsertInlineImage, inlineImages, onCancelInlineImageUpload } = richTextEditorOptions || {};\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\n {...props}\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n onPaste={onPaste}\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n onInsertInlineImage={onInsertInlineImage}\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n inlineImages={inlineImages}\n /* @conditional-compile-remove(rich-text-editor-image-upload) */\n onCancelInlineImageUpload={onCancelInlineImageUpload}\n />\n </Suspense>\n </_ErrorBoundary>\n );\n }\n return sendBox;\n};\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@azure/communication-react",
3
- "version": "1.19.0-alpha-202407250014",
3
+ "version": "1.19.0-alpha-202407270014",
4
4
  "sideEffects": false,
5
5
  "description": "React library for building modern communication user experiences utilizing Azure Communication Services",
6
6
  "keywords": [
@@ -39,7 +39,6 @@
39
39
  "events": "^3.3.0",
40
40
  "html-react-parser": "^5.1.12",
41
41
  "immer": "10.1.1",
42
- "libphonenumber-js": "^1.11.4",
43
42
  "memoize-one": "^5.2.1",
44
43
  "nanoid": "3.3.6",
45
44
  "react-linkify": "^1.0.0-alpha",
@@ -55,7 +54,7 @@
55
54
  "uuid": "^9.0.0"
56
55
  },
57
56
  "peerDependencies": {
58
- "@azure/communication-calling": "1.27.1-beta.2",
57
+ "@azure/communication-calling": "1.28.1-beta.1",
59
58
  "@azure/communication-calling-effects": "1.0.1",
60
59
  "@azure/communication-chat": "1.6.0-beta.3",
61
60
  "@types/react": ">=16.8.0 <19.0.0",