@azure/communication-react 1.18.0-alpha-202407200014 → 1.18.0-alpha-202407262302
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.
- package/dist/communication-react.d.ts +33 -94
 - package/dist/dist-cjs/communication-react/{ChatMessageComponentAsRichTextEditBox-D4ctXnw1.js → ChatMessageComponentAsRichTextEditBox-CmXCpkwp.js} +9 -58
 - package/dist/dist-cjs/communication-react/ChatMessageComponentAsRichTextEditBox-CmXCpkwp.js.map +1 -0
 - package/dist/dist-cjs/communication-react/{RichTextSendBoxWrapper-F6eqVXer.js → RichTextSendBoxWrapper-DI4k0qyf.js} +2 -2
 - package/dist/dist-cjs/communication-react/{RichTextSendBoxWrapper-F6eqVXer.js.map → RichTextSendBoxWrapper-DI4k0qyf.js.map} +1 -1
 - package/dist/dist-cjs/communication-react/{index-BJO_NOTU.js → index-BSczaURy.js} +479 -831
 - package/dist/dist-cjs/communication-react/index-BSczaURy.js.map +1 -0
 - package/dist/dist-cjs/communication-react/index.js +1 -1
 - package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js +1 -1
 - package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js.map +1 -1
 - package/dist/dist-esm/calling-component-bindings/src/baseSelectors.d.ts +1 -1
 - package/dist/dist-esm/calling-component-bindings/src/baseSelectors.js +3 -3
 - package/dist/dist-esm/calling-component-bindings/src/baseSelectors.js.map +1 -1
 - package/dist/dist-esm/calling-component-bindings/src/notificationStackSelector.js +2 -2
 - package/dist/dist-esm/calling-component-bindings/src/notificationStackSelector.js.map +1 -1
 - package/dist/dist-esm/calling-stateful-client/src/CallAgentDeclarative.d.ts +3 -3
 - package/dist/dist-esm/calling-stateful-client/src/CallAgentDeclarative.js.map +1 -1
 - package/dist/dist-esm/calling-stateful-client/src/CallAgentDeclarativeCommon.d.ts +1 -1
 - package/dist/dist-esm/calling-stateful-client/src/CallAgentDeclarativeCommon.js +7 -15
 - package/dist/dist-esm/calling-stateful-client/src/CallAgentDeclarativeCommon.js.map +1 -1
 - package/dist/dist-esm/calling-stateful-client/src/CallClientState.d.ts +1 -3
 - package/dist/dist-esm/calling-stateful-client/src/CallClientState.js.map +1 -1
 - package/dist/dist-esm/calling-stateful-client/src/CallContext.js +2 -2
 - package/dist/dist-esm/calling-stateful-client/src/CallContext.js.map +1 -1
 - package/dist/dist-esm/calling-stateful-client/src/Converter.js +1 -1
 - package/dist/dist-esm/calling-stateful-client/src/Converter.js.map +1 -1
 - package/dist/dist-esm/calling-stateful-client/src/IncomingCallDeclarative.d.ts +8 -2
 - package/dist/dist-esm/calling-stateful-client/src/IncomingCallDeclarative.js.map +1 -1
 - package/dist/dist-esm/calling-stateful-client/src/TeamsCallAgentDeclarative.d.ts +2 -14
 - package/dist/dist-esm/calling-stateful-client/src/TeamsCallAgentDeclarative.js.map +1 -1
 - package/dist/dist-esm/calling-stateful-client/src/TypeGuards.d.ts +1 -9
 - package/dist/dist-esm/calling-stateful-client/src/TypeGuards.js +0 -16
 - package/dist/dist-esm/calling-stateful-client/src/TypeGuards.js.map +1 -1
 - package/dist/dist-esm/calling-stateful-client/src/index-public.d.ts +1 -1
 - package/dist/dist-esm/calling-stateful-client/src/index-public.js.map +1 -1
 - package/dist/dist-esm/chat-stateful-client/src/ChatClientState.d.ts +3 -5
 - package/dist/dist-esm/chat-stateful-client/src/ChatClientState.js.map +1 -1
 - package/dist/dist-esm/communication-react/src/index.d.ts +1 -1
 - package/dist/dist-esm/communication-react/src/index.js.map +1 -1
 - package/dist/dist-esm/react-components/src/components/Attachment/AttachmentCard.js +8 -14
 - package/dist/dist-esm/react-components/src/components/Attachment/AttachmentCard.js.map +1 -1
 - package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageComponentWrapper.d.ts +2 -8
 - package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageComponentWrapper.js.map +1 -1
 - package/dist/dist-esm/react-components/src/components/ChatMessage/MyMessageComponents/ChatMessageComponentAsEditBoxPicker.d.ts +4 -6
 - package/dist/dist-esm/react-components/src/components/ChatMessage/MyMessageComponents/ChatMessageComponentAsEditBoxPicker.js +12 -2
 - package/dist/dist-esm/react-components/src/components/ChatMessage/MyMessageComponents/ChatMessageComponentAsEditBoxPicker.js.map +1 -1
 - package/dist/dist-esm/react-components/src/components/ChatMessage/MyMessageComponents/ChatMessageComponentAsRichTextEditBox.d.ts +2 -2
 - package/dist/dist-esm/react-components/src/components/ChatMessage/MyMessageComponents/ChatMessageComponentAsRichTextEditBox.js +8 -60
 - package/dist/dist-esm/react-components/src/components/ChatMessage/MyMessageComponents/ChatMessageComponentAsRichTextEditBox.js.map +1 -1
 - package/dist/dist-esm/react-components/src/components/ChatMessage/MyMessageComponents/ChatMyMessageComponent.d.ts +6 -8
 - package/dist/dist-esm/react-components/src/components/ChatMessage/MyMessageComponents/ChatMyMessageComponent.js +4 -18
 - package/dist/dist-esm/react-components/src/components/ChatMessage/MyMessageComponents/ChatMyMessageComponent.js.map +1 -1
 - package/dist/dist-esm/react-components/src/components/ChatMessage/MyMessageComponents/FluentChatMyMessageComponent.js +3 -27
 - package/dist/dist-esm/react-components/src/components/ChatMessage/MyMessageComponents/FluentChatMyMessageComponent.js.map +1 -1
 - package/dist/dist-esm/react-components/src/components/MeetingConferencePhoneInfo.d.ts +8 -8
 - package/dist/dist-esm/react-components/src/components/MeetingConferencePhoneInfo.js +4 -4
 - package/dist/dist-esm/react-components/src/components/MeetingConferencePhoneInfo.js.map +1 -1
 - package/dist/dist-esm/react-components/src/components/MessageThread.d.ts +15 -9
 - package/dist/dist-esm/react-components/src/components/MessageThread.js +1 -10
 - package/dist/dist-esm/react-components/src/components/MessageThread.js.map +1 -1
 - package/dist/dist-esm/react-components/src/components/RichTextEditor/Plugins/CopyPastePlugin.js +1 -0
 - package/dist/dist-esm/react-components/src/components/RichTextEditor/Plugins/CopyPastePlugin.js.map +1 -1
 - package/dist/dist-esm/react-components/src/components/RichTextEditor/RichTextEditor.js +22 -28
 - package/dist/dist-esm/react-components/src/components/RichTextEditor/RichTextEditor.js.map +1 -1
 - package/dist/dist-esm/react-components/src/components/RichTextEditor/RichTextSendBox.d.ts +0 -49
 - package/dist/dist-esm/react-components/src/components/RichTextEditor/RichTextSendBox.js +18 -37
 - package/dist/dist-esm/react-components/src/components/RichTextEditor/RichTextSendBox.js.map +1 -1
 - package/dist/dist-esm/react-components/src/components/RichTextEditor/Toolbar/RichTextToolbar.js +2 -20
 - package/dist/dist-esm/react-components/src/components/RichTextEditor/Toolbar/RichTextToolbar.js.map +1 -1
 - package/dist/dist-esm/react-components/src/components/index.d.ts +1 -2
 - package/dist/dist-esm/react-components/src/components/index.js.map +1 -1
 - package/dist/dist-esm/react-components/src/components/styles/AttachmentCard.styles.d.ts +2 -2
 - package/dist/dist-esm/react-components/src/components/styles/AttachmentCard.styles.js +17 -15
 - package/dist/dist-esm/react-components/src/components/styles/AttachmentCard.styles.js.map +1 -1
 - package/dist/dist-esm/react-components/src/components/styles/Common.style.d.ts +1 -1
 - package/dist/dist-esm/react-components/src/components/styles/Common.style.js +1 -2
 - package/dist/dist-esm/react-components/src/components/styles/Common.style.js.map +1 -1
 - package/dist/dist-esm/react-components/src/components/styles/MessageThread.styles.js +2 -5
 - package/dist/dist-esm/react-components/src/components/styles/MessageThread.styles.js.map +1 -1
 - package/dist/dist-esm/react-components/src/components/styles/RichTextEditor.styles.js +3 -3
 - package/dist/dist-esm/react-components/src/components/styles/RichTextEditor.styles.js.map +1 -1
 - package/dist/dist-esm/react-components/src/components/utils/RichTextEditorUtils.d.ts +5 -1
 - package/dist/dist-esm/react-components/src/components/utils/RichTextEditorUtils.js +21 -0
 - package/dist/dist-esm/react-components/src/components/utils/RichTextEditorUtils.js.map +1 -1
 - package/dist/dist-esm/react-components/src/components/utils/SendBoxUtils.d.ts +3 -15
 - package/dist/dist-esm/react-components/src/components/utils/SendBoxUtils.js +14 -67
 - package/dist/dist-esm/react-components/src/components/utils/SendBoxUtils.js.map +1 -1
 - package/dist/dist-esm/react-components/src/localization/LocalizationProvider.d.ts +1 -1
 - package/dist/dist-esm/react-components/src/localization/LocalizationProvider.js.map +1 -1
 - package/dist/dist-esm/react-components/src/localization/locales/ar-SA/strings.json +64 -102
 - package/dist/dist-esm/react-components/src/localization/locales/cs-CZ/strings.json +62 -100
 - package/dist/dist-esm/react-components/src/localization/locales/de-DE/strings.json +62 -100
 - package/dist/dist-esm/react-components/src/localization/locales/en-GB/strings.json +62 -100
 - package/dist/dist-esm/react-components/src/localization/locales/en-US/strings.json +3 -9
 - package/dist/dist-esm/react-components/src/localization/locales/es-ES/strings.json +62 -100
 - package/dist/dist-esm/react-components/src/localization/locales/fi-FI/strings.json +62 -100
 - package/dist/dist-esm/react-components/src/localization/locales/fr-FR/strings.json +65 -103
 - package/dist/dist-esm/react-components/src/localization/locales/he-IL/strings.json +62 -100
 - package/dist/dist-esm/react-components/src/localization/locales/it-IT/strings.json +62 -100
 - package/dist/dist-esm/react-components/src/localization/locales/ja-JP/strings.json +64 -102
 - package/dist/dist-esm/react-components/src/localization/locales/ko-KR/strings.json +69 -107
 - package/dist/dist-esm/react-components/src/localization/locales/nb-NO/strings.json +62 -100
 - package/dist/dist-esm/react-components/src/localization/locales/nl-NL/strings.json +68 -106
 - package/dist/dist-esm/react-components/src/localization/locales/pl-PL/strings.json +67 -105
 - package/dist/dist-esm/react-components/src/localization/locales/pt-BR/strings.json +65 -103
 - package/dist/dist-esm/react-components/src/localization/locales/ru-RU/strings.json +63 -101
 - package/dist/dist-esm/react-components/src/localization/locales/sv-SE/strings.json +62 -100
 - package/dist/dist-esm/react-components/src/localization/locales/tr-TR/strings.json +63 -101
 - package/dist/dist-esm/react-components/src/localization/locales/zh-CN/strings.json +64 -102
 - package/dist/dist-esm/react-components/src/localization/locales/zh-TW/strings.json +63 -101
 - package/dist/dist-esm/react-composites/src/composites/CallComposite/components/NetworkReconnectTile.js +4 -4
 - package/dist/dist-esm/react-composites/src/composites/CallComposite/components/NetworkReconnectTile.js.map +1 -1
 - package/dist/dist-esm/react-composites/src/composites/CallComposite/components/SidePane/useMeetingPhoneInfo.js +1 -1
 - package/dist/dist-esm/react-composites/src/composites/CallComposite/components/SidePane/useMeetingPhoneInfo.js.map +1 -1
 - package/dist/dist-esm/react-composites/src/composites/CallComposite/selectors/baseSelectors.js +1 -1
 - package/dist/dist-esm/react-composites/src/composites/CallComposite/selectors/baseSelectors.js.map +1 -1
 - package/dist/dist-esm/react-composites/src/composites/ChatComposite/ChatScreen.js +31 -66
 - package/dist/dist-esm/react-composites/src/composites/ChatComposite/ChatScreen.js.map +1 -1
 - package/dist/dist-esm/react-composites/src/composites/ChatComposite/ImageUpload/ImageUploadUtils.d.ts +1 -33
 - package/dist/dist-esm/react-composites/src/composites/ChatComposite/ImageUpload/ImageUploadUtils.js +6 -198
 - package/dist/dist-esm/react-composites/src/composites/ChatComposite/ImageUpload/ImageUploadUtils.js.map +1 -1
 - package/dist/dist-esm/react-composites/src/composites/ChatComposite/ImageUpload/useImageUpload.d.ts +12 -0
 - package/dist/dist-esm/react-composites/src/composites/ChatComposite/ImageUpload/useImageUpload.js +115 -0
 - package/dist/dist-esm/react-composites/src/composites/ChatComposite/ImageUpload/useImageUpload.js.map +1 -0
 - package/dist/dist-esm/react-composites/src/composites/ChatComposite/file-sharing/AttachmentUpload.d.ts +7 -7
 - package/dist/dist-esm/react-composites/src/composites/ChatComposite/file-sharing/AttachmentUpload.js.map +1 -1
 - package/dist/dist-esm/react-composites/src/composites/common/ControlBar/CommonCallControlBar.js +10 -10
 - package/dist/dist-esm/react-composites/src/composites/common/ControlBar/CommonCallControlBar.js.map +1 -1
 - package/dist/dist-esm/react-composites/src/composites/common/MeetingPhoneInfoPaneContent.js +4 -4
 - package/dist/dist-esm/react-composites/src/composites/common/MeetingPhoneInfoPaneContent.js.map +1 -1
 - package/dist/dist-esm/react-composites/src/composites/common/SendBoxPicker.d.ts +5 -2
 - package/dist/dist-esm/react-composites/src/composites/common/SendBoxPicker.js.map +1 -1
 - package/dist/dist-esm/react-composites/src/composites/common/constants.d.ts +0 -4
 - package/dist/dist-esm/react-composites/src/composites/common/constants.js +0 -4
 - package/dist/dist-esm/react-composites/src/composites/common/constants.js.map +1 -1
 - package/dist/dist-esm/react-composites/src/composites/common/icons.d.ts +2 -6
 - package/dist/dist-esm/react-composites/src/composites/common/icons.js +1 -5
 - package/dist/dist-esm/react-composites/src/composites/common/icons.js.map +1 -1
 - package/dist/dist-esm/react-composites/src/composites/localization/locales/ar-SA/strings.json +5 -10
 - package/dist/dist-esm/react-composites/src/composites/localization/locales/cs-CZ/strings.json +1 -6
 - package/dist/dist-esm/react-composites/src/composites/localization/locales/de-DE/strings.json +1 -6
 - package/dist/dist-esm/react-composites/src/composites/localization/locales/en-GB/strings.json +1 -6
 - package/dist/dist-esm/react-composites/src/composites/localization/locales/es-ES/strings.json +1 -6
 - package/dist/dist-esm/react-composites/src/composites/localization/locales/fi-FI/strings.json +5 -10
 - package/dist/dist-esm/react-composites/src/composites/localization/locales/fr-FR/strings.json +5 -10
 - package/dist/dist-esm/react-composites/src/composites/localization/locales/he-IL/strings.json +5 -10
 - package/dist/dist-esm/react-composites/src/composites/localization/locales/it-IT/strings.json +5 -10
 - package/dist/dist-esm/react-composites/src/composites/localization/locales/ja-JP/strings.json +1 -6
 - package/dist/dist-esm/react-composites/src/composites/localization/locales/ko-KR/strings.json +5 -10
 - package/dist/dist-esm/react-composites/src/composites/localization/locales/nb-NO/strings.json +1 -6
 - package/dist/dist-esm/react-composites/src/composites/localization/locales/nl-NL/strings.json +1 -6
 - package/dist/dist-esm/react-composites/src/composites/localization/locales/pl-PL/strings.json +1 -6
 - package/dist/dist-esm/react-composites/src/composites/localization/locales/pt-BR/strings.json +5 -10
 - package/dist/dist-esm/react-composites/src/composites/localization/locales/ru-RU/strings.json +1 -6
 - package/dist/dist-esm/react-composites/src/composites/localization/locales/sv-SE/strings.json +5 -10
 - package/dist/dist-esm/react-composites/src/composites/localization/locales/tr-TR/strings.json +1 -6
 - package/dist/dist-esm/react-composites/src/composites/localization/locales/zh-CN/strings.json +5 -10
 - package/dist/dist-esm/react-composites/src/composites/localization/locales/zh-TW/strings.json +5 -10
 - package/package.json +14 -14
 - package/dist/dist-cjs/communication-react/ChatMessageComponentAsRichTextEditBox-D4ctXnw1.js.map +0 -1
 - package/dist/dist-cjs/communication-react/index-BJO_NOTU.js.map +0 -1
 - package/dist/dist-esm/calling-stateful-client/src/TeamsIncomingCallDeclarative.d.ts +0 -17
 - package/dist/dist-esm/calling-stateful-client/src/TeamsIncomingCallDeclarative.js +0 -49
 - package/dist/dist-esm/calling-stateful-client/src/TeamsIncomingCallDeclarative.js.map +0 -1
 - package/dist/dist-esm/react-composites/src/composites/ChatComposite/ImageUpload/ImageUploadReducer.d.ts +0 -49
 - package/dist/dist-esm/react-composites/src/composites/ChatComposite/ImageUpload/ImageUploadReducer.js +0 -48
 - package/dist/dist-esm/react-composites/src/composites/ChatComposite/ImageUpload/ImageUploadReducer.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\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 [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    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            );\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  ]);\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(imageUrl, imageFileName, adapter, handleSendBoxInlineImageUploadAction);\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    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(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 { useImageUpload } from './ImageUpload/useImageUpload';\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport { removeImageTags } 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\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 [inlineImageUploads, handleInlineImageUploadAction, onUploadInlineImage, onCancelInlineImageUploadHandler] =\n    useImageUpload();\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\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  /* @conditional-compile-remove(rich-text-editor-image-upload) */\n  const imageUploadsInProgress = useMemo(() => {\n    return inlineImageUploads?.map((v) => v.metadata);\n  }, [inlineImageUploads]);\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      handleInlineImageUploadAction({ type: AttachmentUploadActionType.Clear });\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) */ handleInlineImageUploadAction]\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      handleInlineImageUploadAction({ type: AttachmentUploadActionType.Clear });\n    },\n    [/* @conditional-compile-remove(rich-text-editor-image-upload) */ handleInlineImageUploadAction, messageThreadProps]\n  );\n\n  /* @conditional-compile-remove(rich-text-editor-image-upload) */\n  const onCancelEditMessageHandler = useCallback(() => {\n    handleInlineImageUploadAction({ type: AttachmentUploadActionType.Clear });\n  }, [handleInlineImageUploadAction]);\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    const onPasteCallback = isACSChat || textOnlyChat ? removeImageTags : undefined;\n    return options?.richTextEditor\n      ? {\n          /* @conditional-compile-remove(rich-text-editor-image-upload) */ onPaste: onPasteCallback,\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: onCancelInlineImageUploadHandler\n        }\n      : undefined;\n  }, [\n    /* @conditional-compile-remove(rich-text-editor-image-upload) */\n    imageUploadsInProgress,\n    /* @conditional-compile-remove(rich-text-editor-image-upload) */\n    onCancelInlineImageUploadHandler,\n    /* @conditional-compile-remove(rich-text-editor-image-upload) */\n    onUploadInlineImage,\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  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={richTextEditorOptions}\n          />\n          <Stack className={mergeStyles(sendboxContainerStyles)}>\n            <div className={mergeStyles(typingIndicatorContainerStyles)}>\n              {onRenderTypingIndicator ? (\n                onRenderTypingIndicator(typingIndicatorProps.typingUsers)\n              ) : (\n                <TypingIndicator {...typingIndicatorProps} styles={typingIndicatorStyles} />\n              )}\n            </div>\n            <Stack horizontal={formFactor === 'mobile'}>\n              {formFactor === 'mobile' && (\n                /* @conditional-compile-remove(file-sharing-acs) */\n                <Stack verticalAlign=\"center\">{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={richTextEditorOptions}\n                  /* @conditional-compile-remove(file-sharing-acs) */\n                  attachments={attachments}\n                  /* @conditional-compile-remove(file-sharing-acs) */\n                  onCancelAttachmentUpload={onCancelUploadHandler}\n                  // we need to overwrite onSendMessage for SendBox because we need to clear attachment state\n                  // when submit button is clicked\n                  onSendMessage={onSendMessageHandler}\n                />\n              </Stack>\n              {formFactor !== 'mobile' &&\n                /* @conditional-compile-remove(file-sharing-acs) */\n                attachmentButton}\n            </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,44 +1,12 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            import { AttachmentMetadataInProgress } from "../../../../../acs-ui-common/src";
         
     | 
| 
       2 
     | 
    
         
            -
            import { AttachmentUpload } from '../file-sharing/AttachmentUpload';
         
     | 
| 
       3 
     | 
    
         
            -
            import { ChatAdapter } from '../adapter/ChatAdapter';
         
     | 
| 
       4 
     | 
    
         
            -
            import { Dispatch } from 'react';
         
     | 
| 
       5 
     | 
    
         
            -
            import { ImageActions } from './ImageUploadReducer';
         
     | 
| 
       6 
1 
     | 
    
         
             
            /**
         
     | 
| 
       7 
2 
     | 
    
         
             
             * @private
         
     | 
| 
       8 
3 
     | 
    
         
             
             */
         
     | 
| 
       9 
4 
     | 
    
         
             
            export declare const getInlineImageData: (image: string) => Promise<Blob | undefined>;
         
     | 
| 
       10 
5 
     | 
    
         
             
            /**
         
     | 
| 
       11 
6 
     | 
    
         
             
             * @internal
         
     | 
| 
      
 7 
     | 
    
         
            +
             * Exported only for unit testing
         
     | 
| 
       12 
8 
     | 
    
         
             
             */
         
     | 
| 
       13 
9 
     | 
    
         
             
            export declare const removeImageTags: (event: {
         
     | 
| 
       14 
10 
     | 
    
         
             
                content: DocumentFragment;
         
     | 
| 
       15 
11 
     | 
    
         
             
            }) => void;
         
     | 
| 
       16 
     | 
    
         
            -
            /**
         
     | 
| 
       17 
     | 
    
         
            -
             * @internal
         
     | 
| 
       18 
     | 
    
         
            -
             */
         
     | 
| 
       19 
     | 
    
         
            -
            export declare const getEditBoxMessagesImageUploadsInProgress: (editBoxInlineImageUploads: Record<string, AttachmentUpload[]> | undefined) => Record<string, AttachmentMetadataInProgress[]> | undefined;
         
     | 
| 
       20 
     | 
    
         
            -
            /**
         
     | 
| 
       21 
     | 
    
         
            -
             * @internal
         
     | 
| 
       22 
     | 
    
         
            -
             */
         
     | 
| 
       23 
     | 
    
         
            -
            export declare const getSendBoxImageUploadsInProgress: (sendBoxInlineImageUploads: Record<string, AttachmentUpload[]> | undefined) => AttachmentMetadataInProgress[] | undefined;
         
     | 
| 
       24 
     | 
    
         
            -
            /**
         
     | 
| 
       25 
     | 
    
         
            -
             * @internal
         
     | 
| 
       26 
     | 
    
         
            -
             */
         
     | 
| 
       27 
     | 
    
         
            -
            export declare const onUploadInlineImageForEditBox: (image: string, fileName: string, messageId: string, adapter: ChatAdapter, handleEditBoxInlineImageUploadAction: Dispatch<ImageActions>) => Promise<void>;
         
     | 
| 
       28 
     | 
    
         
            -
            /**
         
     | 
| 
       29 
     | 
    
         
            -
             * @internal
         
     | 
| 
       30 
     | 
    
         
            -
             */
         
     | 
| 
       31 
     | 
    
         
            -
            export declare const onUploadInlineImageForSendBox: (image: string, fileName: string, adapter: ChatAdapter, handleSendBoxInlineImageUploadAction: Dispatch<ImageActions>) => Promise<void>;
         
     | 
| 
       32 
     | 
    
         
            -
            /**
         
     | 
| 
       33 
     | 
    
         
            -
             * @internal
         
     | 
| 
       34 
     | 
    
         
            -
             */
         
     | 
| 
       35 
     | 
    
         
            -
            export declare const cancelInlineImageUpload: (imageId: string, imageUpload: AttachmentUpload | undefined, messageId: string, inlineImageUploadActionHandler: Dispatch<ImageActions>, adapter: ChatAdapter) => void;
         
     | 
| 
       36 
     | 
    
         
            -
            /**
         
     | 
| 
       37 
     | 
    
         
            -
             * @internal
         
     | 
| 
       38 
     | 
    
         
            -
             */
         
     | 
| 
       39 
     | 
    
         
            -
            export declare const onCancelInlineImageUploadHandlerForEditBox: (imageId: string, messageId: string, editBoxInlineImageUploads: Record<string, AttachmentUpload[]> | undefined, adapter: ChatAdapter, handleEditBoxInlineImageUploadAction: Dispatch<ImageActions>) => void;
         
     | 
| 
       40 
     | 
    
         
            -
            /**
         
     | 
| 
       41 
     | 
    
         
            -
             * @internal
         
     | 
| 
       42 
     | 
    
         
            -
             */
         
     | 
| 
       43 
     | 
    
         
            -
            export declare const onCancelInlineImageUploadHandlerForSendBox: (imageId: string, sendBoxInlineImageUploads: Record<string, AttachmentUpload[]> | undefined, adapter: ChatAdapter, handleSendBoxInlineImageUploadAction: Dispatch<ImageActions>) => void;
         
     | 
| 
       44 
12 
     | 
    
         
             
            //# sourceMappingURL=ImageUploadUtils.d.ts.map
         
     | 
    
        package/dist/dist-esm/react-composites/src/composites/ChatComposite/ImageUpload/ImageUploadUtils.js
    CHANGED
    
    | 
         @@ -10,14 +10,6 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge 
     | 
|
| 
       10 
10 
     | 
    
         
             
                });
         
     | 
| 
       11 
11 
     | 
    
         
             
            };
         
     | 
| 
       12 
12 
     | 
    
         
             
            /* @conditional-compile-remove(rich-text-editor-image-upload) */
         
     | 
| 
       13 
     | 
    
         
            -
            import { AttachmentUploadActionType } from '../file-sharing/AttachmentUpload';
         
     | 
| 
       14 
     | 
    
         
            -
            /* @conditional-compile-remove(rich-text-editor-image-upload) */
         
     | 
| 
       15 
     | 
    
         
            -
            import { SEND_BOX_UPLOADS_KEY_VALUE } from '../../common/constants';
         
     | 
| 
       16 
     | 
    
         
            -
            /* @conditional-compile-remove(rich-text-editor-image-upload) */
         
     | 
| 
       17 
     | 
    
         
            -
            import { nanoid } from 'nanoid';
         
     | 
| 
       18 
     | 
    
         
            -
            /* @conditional-compile-remove(rich-text-editor-image-upload) */
         
     | 
| 
       19 
     | 
    
         
            -
            const MAX_INLINE_IMAGE_UPLOAD_SIZE_MB = 20;
         
     | 
| 
       20 
     | 
    
         
            -
            /* @conditional-compile-remove(rich-text-editor-image-upload) */
         
     | 
| 
       21 
13 
     | 
    
         
             
            const fetchBlobData = (resource, options) => __awaiter(void 0, void 0, void 0, function* () {
         
     | 
| 
       22 
14 
     | 
    
         
             
                // default timeout is 30 seconds
         
     | 
| 
       23 
15 
     | 
    
         
             
                const { timeout = 30000, abortController } = options;
         
     | 
| 
         @@ -33,22 +25,18 @@ const fetchBlobData = (resource, options) => __awaiter(void 0, void 0, void 0, f 
     | 
|
| 
       33 
25 
     | 
    
         
             
             * @private
         
     | 
| 
       34 
26 
     | 
    
         
             
             */
         
     | 
| 
       35 
27 
     | 
    
         
             
            export const getInlineImageData = (image) => __awaiter(void 0, void 0, void 0, function* () {
         
     | 
| 
      
 28 
     | 
    
         
            +
                const blobImage = undefined;
         
     | 
| 
       36 
29 
     | 
    
         
             
                if (image.startsWith('blob') || image.startsWith('http')) {
         
     | 
| 
       37 
     | 
    
         
            -
                     
     | 
| 
       38 
     | 
    
         
            -
             
     | 
| 
       39 
     | 
    
         
            -
             
     | 
| 
       40 
     | 
    
         
            -
                        return blobImage;
         
     | 
| 
       41 
     | 
    
         
            -
                    }
         
     | 
| 
       42 
     | 
    
         
            -
                    catch (error) {
         
     | 
| 
       43 
     | 
    
         
            -
                        console.error('Error fetching image data', error);
         
     | 
| 
       44 
     | 
    
         
            -
                        return;
         
     | 
| 
       45 
     | 
    
         
            -
                    }
         
     | 
| 
      
 30 
     | 
    
         
            +
                    const res = yield fetchBlobData(image, { abortController: new AbortController() });
         
     | 
| 
      
 31 
     | 
    
         
            +
                    const blobImage = yield res.blob();
         
     | 
| 
      
 32 
     | 
    
         
            +
                    return blobImage;
         
     | 
| 
       46 
33 
     | 
    
         
             
                }
         
     | 
| 
       47 
     | 
    
         
            -
                return;
         
     | 
| 
      
 34 
     | 
    
         
            +
                return blobImage;
         
     | 
| 
       48 
35 
     | 
    
         
             
            });
         
     | 
| 
       49 
36 
     | 
    
         
             
            /* @conditional-compile-remove(rich-text-editor-image-upload) */
         
     | 
| 
       50 
37 
     | 
    
         
             
            /**
         
     | 
| 
       51 
38 
     | 
    
         
             
             * @internal
         
     | 
| 
      
 39 
     | 
    
         
            +
             * Exported only for unit testing
         
     | 
| 
       52 
40 
     | 
    
         
             
             */
         
     | 
| 
       53 
41 
     | 
    
         
             
            export const removeImageTags = (event) => {
         
     | 
| 
       54 
42 
     | 
    
         
             
                event.content.querySelectorAll('img').forEach((image) => {
         
     | 
| 
         @@ -62,184 +50,4 @@ export const removeImageTags = (event) => { 
     | 
|
| 
       62 
50 
     | 
    
         
             
                    currentNode === null || currentNode === void 0 ? void 0 : currentNode.remove();
         
     | 
| 
       63 
51 
     | 
    
         
             
                });
         
     | 
| 
       64 
52 
     | 
    
         
             
            };
         
     | 
| 
       65 
     | 
    
         
            -
            /* @conditional-compile-remove(rich-text-editor-image-upload) */
         
     | 
| 
       66 
     | 
    
         
            -
            /**
         
     | 
| 
       67 
     | 
    
         
            -
             * @internal
         
     | 
| 
       68 
     | 
    
         
            -
             */
         
     | 
| 
       69 
     | 
    
         
            -
            export const getEditBoxMessagesImageUploadsInProgress = (editBoxInlineImageUploads) => {
         
     | 
| 
       70 
     | 
    
         
            -
                if (!editBoxInlineImageUploads) {
         
     | 
| 
       71 
     | 
    
         
            -
                    return;
         
     | 
| 
       72 
     | 
    
         
            -
                }
         
     | 
| 
       73 
     | 
    
         
            -
                const messageIds = Object.keys(editBoxInlineImageUploads || {});
         
     | 
| 
       74 
     | 
    
         
            -
                const messagesImageUploadsInProgress = {};
         
     | 
| 
       75 
     | 
    
         
            -
                messageIds.map((messageId) => {
         
     | 
| 
       76 
     | 
    
         
            -
                    const messageUploads = editBoxInlineImageUploads[messageId].map((upload) => {
         
     | 
| 
       77 
     | 
    
         
            -
                        return upload.metadata;
         
     | 
| 
       78 
     | 
    
         
            -
                    });
         
     | 
| 
       79 
     | 
    
         
            -
                    messagesImageUploadsInProgress[messageId] = messageUploads;
         
     | 
| 
       80 
     | 
    
         
            -
                });
         
     | 
| 
       81 
     | 
    
         
            -
                return messagesImageUploadsInProgress;
         
     | 
| 
       82 
     | 
    
         
            -
            };
         
     | 
| 
       83 
     | 
    
         
            -
            /* @conditional-compile-remove(rich-text-editor-image-upload) */
         
     | 
| 
       84 
     | 
    
         
            -
            /**
         
     | 
| 
       85 
     | 
    
         
            -
             * @internal
         
     | 
| 
       86 
     | 
    
         
            -
             */
         
     | 
| 
       87 
     | 
    
         
            -
            export const getSendBoxImageUploadsInProgress = (sendBoxInlineImageUploads) => {
         
     | 
| 
       88 
     | 
    
         
            -
                var _a;
         
     | 
| 
       89 
     | 
    
         
            -
                if (!sendBoxInlineImageUploads) {
         
     | 
| 
       90 
     | 
    
         
            -
                    return;
         
     | 
| 
       91 
     | 
    
         
            -
                }
         
     | 
| 
       92 
     | 
    
         
            -
                return (_a = sendBoxInlineImageUploads[SEND_BOX_UPLOADS_KEY_VALUE]) === null || _a === void 0 ? void 0 : _a.map((upload) => upload.metadata);
         
     | 
| 
       93 
     | 
    
         
            -
            };
         
     | 
| 
       94 
     | 
    
         
            -
            /* @conditional-compile-remove(rich-text-editor-image-upload) */
         
     | 
| 
       95 
     | 
    
         
            -
            const inlineImageUploadHandler = (uploadTasks, adapter) => __awaiter(void 0, void 0, void 0, function* () {
         
     | 
| 
       96 
     | 
    
         
            -
                var _a, _b, _c, _d, _e;
         
     | 
| 
       97 
     | 
    
         
            -
                for (const task of uploadTasks) {
         
     | 
| 
       98 
     | 
    
         
            -
                    const uploadTask = task;
         
     | 
| 
       99 
     | 
    
         
            -
                    const image = uploadTask.image;
         
     | 
| 
       100 
     | 
    
         
            -
                    if (!image) {
         
     | 
| 
       101 
     | 
    
         
            -
                        uploadTask.notifyUploadFailed(`Image data for "${(_a = task.metadata) === null || _a === void 0 ? void 0 : _a.name}" is not provided.`);
         
     | 
| 
       102 
     | 
    
         
            -
                        continue;
         
     | 
| 
       103 
     | 
    
         
            -
                    }
         
     | 
| 
       104 
     | 
    
         
            -
                    if (image && image.size > MAX_INLINE_IMAGE_UPLOAD_SIZE_MB * 1024 * 1024) {
         
     | 
| 
       105 
     | 
    
         
            -
                        uploadTask.notifyUploadFailed(`"${(_b = task.metadata) === null || _b === void 0 ? void 0 : _b.name}" is too big. Select a file under ${MAX_INLINE_IMAGE_UPLOAD_SIZE_MB}MB.`);
         
     | 
| 
       106 
     | 
    
         
            -
                        continue;
         
     | 
| 
       107 
     | 
    
         
            -
                    }
         
     | 
| 
       108 
     | 
    
         
            -
                    const SUPPORTED_FILES = ['jpg', 'jpeg', 'png', 'gif', 'heic', 'webp'];
         
     | 
| 
       109 
     | 
    
         
            -
                    const imageExtension = (_d = (_c = task.metadata) === null || _c === void 0 ? void 0 : _c.name.split('.').pop()) !== null && _d !== void 0 ? _d : '';
         
     | 
| 
       110 
     | 
    
         
            -
                    if (!SUPPORTED_FILES.includes(imageExtension)) {
         
     | 
| 
       111 
     | 
    
         
            -
                        uploadTask.notifyUploadFailed(`Uploading ".${imageExtension}" image is not allowed.`);
         
     | 
| 
       112 
     | 
    
         
            -
                        continue;
         
     | 
| 
       113 
     | 
    
         
            -
                    }
         
     | 
| 
       114 
     | 
    
         
            -
                    try {
         
     | 
| 
       115 
     | 
    
         
            -
                        const response = yield adapter.uploadImage(image, (_e = task.metadata) === null || _e === void 0 ? void 0 : _e.name);
         
     | 
| 
       116 
     | 
    
         
            -
                        uploadTask.notifyUploadCompleted(response.id, task.metadata.url || '');
         
     | 
| 
       117 
     | 
    
         
            -
                    }
         
     | 
| 
       118 
     | 
    
         
            -
                    catch (error) {
         
     | 
| 
       119 
     | 
    
         
            -
                        console.error(error);
         
     | 
| 
       120 
     | 
    
         
            -
                        uploadTask.notifyUploadFailed('Unable to upload inline image. Please try again later.');
         
     | 
| 
       121 
     | 
    
         
            -
                    }
         
     | 
| 
       122 
     | 
    
         
            -
                }
         
     | 
| 
       123 
     | 
    
         
            -
            });
         
     | 
| 
       124 
     | 
    
         
            -
            /* @conditional-compile-remove(rich-text-editor-image-upload) */
         
     | 
| 
       125 
     | 
    
         
            -
            const generateUploadTask = (image, fileName, messageId, inlineImageUploadActionHandler) => __awaiter(void 0, void 0, void 0, function* () {
         
     | 
| 
       126 
     | 
    
         
            -
                const imageData = yield getInlineImageData(image);
         
     | 
| 
       127 
     | 
    
         
            -
                if (!imageData) {
         
     | 
| 
       128 
     | 
    
         
            -
                    return;
         
     | 
| 
       129 
     | 
    
         
            -
                }
         
     | 
| 
       130 
     | 
    
         
            -
                const taskId = nanoid();
         
     | 
| 
       131 
     | 
    
         
            -
                const uploadTask = {
         
     | 
| 
       132 
     | 
    
         
            -
                    image: imageData,
         
     | 
| 
       133 
     | 
    
         
            -
                    taskId,
         
     | 
| 
       134 
     | 
    
         
            -
                    metadata: {
         
     | 
| 
       135 
     | 
    
         
            -
                        id: taskId,
         
     | 
| 
       136 
     | 
    
         
            -
                        name: fileName,
         
     | 
| 
       137 
     | 
    
         
            -
                        url: image,
         
     | 
| 
       138 
     | 
    
         
            -
                        progress: 0
         
     | 
| 
       139 
     | 
    
         
            -
                    },
         
     | 
| 
       140 
     | 
    
         
            -
                    notifyUploadProgressChanged: (value) => {
         
     | 
| 
       141 
     | 
    
         
            -
                        inlineImageUploadActionHandler({
         
     | 
| 
       142 
     | 
    
         
            -
                            type: AttachmentUploadActionType.Progress,
         
     | 
| 
       143 
     | 
    
         
            -
                            taskId,
         
     | 
| 
       144 
     | 
    
         
            -
                            progress: value,
         
     | 
| 
       145 
     | 
    
         
            -
                            messageId
         
     | 
| 
       146 
     | 
    
         
            -
                        });
         
     | 
| 
       147 
     | 
    
         
            -
                    },
         
     | 
| 
       148 
     | 
    
         
            -
                    notifyUploadCompleted: (id, url) => {
         
     | 
| 
       149 
     | 
    
         
            -
                        inlineImageUploadActionHandler({
         
     | 
| 
       150 
     | 
    
         
            -
                            type: AttachmentUploadActionType.Completed,
         
     | 
| 
       151 
     | 
    
         
            -
                            taskId,
         
     | 
| 
       152 
     | 
    
         
            -
                            id,
         
     | 
| 
       153 
     | 
    
         
            -
                            url,
         
     | 
| 
       154 
     | 
    
         
            -
                            messageId
         
     | 
| 
       155 
     | 
    
         
            -
                        });
         
     | 
| 
       156 
     | 
    
         
            -
                    },
         
     | 
| 
       157 
     | 
    
         
            -
                    notifyUploadFailed: (message) => {
         
     | 
| 
       158 
     | 
    
         
            -
                        inlineImageUploadActionHandler({ type: AttachmentUploadActionType.Failed, taskId, message, messageId });
         
     | 
| 
       159 
     | 
    
         
            -
                        // remove the failed upload task when error banner is auto dismissed after 10 seconds
         
     | 
| 
       160 
     | 
    
         
            -
                        // so the banner won't be shown again on UI re-rendering.
         
     | 
| 
       161 
     | 
    
         
            -
                        setTimeout(() => {
         
     | 
| 
       162 
     | 
    
         
            -
                            inlineImageUploadActionHandler({ type: AttachmentUploadActionType.Remove, id: taskId, messageId });
         
     | 
| 
       163 
     | 
    
         
            -
                        }, 10 * 1000);
         
     | 
| 
       164 
     | 
    
         
            -
                    }
         
     | 
| 
       165 
     | 
    
         
            -
                };
         
     | 
| 
       166 
     | 
    
         
            -
                return uploadTask;
         
     | 
| 
       167 
     | 
    
         
            -
            });
         
     | 
| 
       168 
     | 
    
         
            -
            /* @conditional-compile-remove(rich-text-editor-image-upload) */
         
     | 
| 
       169 
     | 
    
         
            -
            /**
         
     | 
| 
       170 
     | 
    
         
            -
             * @internal
         
     | 
| 
       171 
     | 
    
         
            -
             */
         
     | 
| 
       172 
     | 
    
         
            -
            export const onUploadInlineImageForEditBox = (image, fileName, messageId, adapter, handleEditBoxInlineImageUploadAction) => __awaiter(void 0, void 0, void 0, function* () {
         
     | 
| 
       173 
     | 
    
         
            -
                const uploadTask = yield generateUploadTask(image, fileName, messageId, handleEditBoxInlineImageUploadAction);
         
     | 
| 
       174 
     | 
    
         
            -
                if (!uploadTask) {
         
     | 
| 
       175 
     | 
    
         
            -
                    return;
         
     | 
| 
       176 
     | 
    
         
            -
                }
         
     | 
| 
       177 
     | 
    
         
            -
                handleEditBoxInlineImageUploadAction({
         
     | 
| 
       178 
     | 
    
         
            -
                    type: AttachmentUploadActionType.Set,
         
     | 
| 
       179 
     | 
    
         
            -
                    newUploads: [uploadTask],
         
     | 
| 
       180 
     | 
    
         
            -
                    messageId
         
     | 
| 
       181 
     | 
    
         
            -
                });
         
     | 
| 
       182 
     | 
    
         
            -
                inlineImageUploadHandler([uploadTask], adapter);
         
     | 
| 
       183 
     | 
    
         
            -
            });
         
     | 
| 
       184 
     | 
    
         
            -
            /* @conditional-compile-remove(rich-text-editor-image-upload) */
         
     | 
| 
       185 
     | 
    
         
            -
            /**
         
     | 
| 
       186 
     | 
    
         
            -
             * @internal
         
     | 
| 
       187 
     | 
    
         
            -
             */
         
     | 
| 
       188 
     | 
    
         
            -
            export const onUploadInlineImageForSendBox = (image, fileName, adapter, handleSendBoxInlineImageUploadAction) => __awaiter(void 0, void 0, void 0, function* () {
         
     | 
| 
       189 
     | 
    
         
            -
                const uploadTask = yield generateUploadTask(image, fileName, SEND_BOX_UPLOADS_KEY_VALUE, handleSendBoxInlineImageUploadAction);
         
     | 
| 
       190 
     | 
    
         
            -
                if (!uploadTask) {
         
     | 
| 
       191 
     | 
    
         
            -
                    return;
         
     | 
| 
       192 
     | 
    
         
            -
                }
         
     | 
| 
       193 
     | 
    
         
            -
                handleSendBoxInlineImageUploadAction({
         
     | 
| 
       194 
     | 
    
         
            -
                    type: AttachmentUploadActionType.Set,
         
     | 
| 
       195 
     | 
    
         
            -
                    newUploads: [uploadTask],
         
     | 
| 
       196 
     | 
    
         
            -
                    messageId: SEND_BOX_UPLOADS_KEY_VALUE
         
     | 
| 
       197 
     | 
    
         
            -
                });
         
     | 
| 
       198 
     | 
    
         
            -
                inlineImageUploadHandler([uploadTask], adapter);
         
     | 
| 
       199 
     | 
    
         
            -
            });
         
     | 
| 
       200 
     | 
    
         
            -
            /* @conditional-compile-remove(rich-text-editor-image-upload) */
         
     | 
| 
       201 
     | 
    
         
            -
            /**
         
     | 
| 
       202 
     | 
    
         
            -
             * @internal
         
     | 
| 
       203 
     | 
    
         
            -
             */
         
     | 
| 
       204 
     | 
    
         
            -
            export const cancelInlineImageUpload = (imageId, imageUpload, messageId, inlineImageUploadActionHandler, adapter) => {
         
     | 
| 
       205 
     | 
    
         
            -
                if (!imageUpload || !(imageUpload === null || imageUpload === void 0 ? void 0 : imageUpload.metadata.id)) {
         
     | 
| 
       206 
     | 
    
         
            -
                    return;
         
     | 
| 
       207 
     | 
    
         
            -
                }
         
     | 
| 
       208 
     | 
    
         
            -
                inlineImageUploadActionHandler({
         
     | 
| 
       209 
     | 
    
         
            -
                    type: AttachmentUploadActionType.Remove,
         
     | 
| 
       210 
     | 
    
         
            -
                    id: imageUpload === null || imageUpload === void 0 ? void 0 : imageUpload.metadata.id,
         
     | 
| 
       211 
     | 
    
         
            -
                    messageId
         
     | 
| 
       212 
     | 
    
         
            -
                });
         
     | 
| 
       213 
     | 
    
         
            -
                // TODO: remove local blob
         
     | 
| 
       214 
     | 
    
         
            -
                if ((imageUpload === null || imageUpload === void 0 ? void 0 : imageUpload.metadata.progress) === 1) {
         
     | 
| 
       215 
     | 
    
         
            -
                    try {
         
     | 
| 
       216 
     | 
    
         
            -
                        adapter.deleteImage(imageId);
         
     | 
| 
       217 
     | 
    
         
            -
                    }
         
     | 
| 
       218 
     | 
    
         
            -
                    catch (error) {
         
     | 
| 
       219 
     | 
    
         
            -
                        console.error(error);
         
     | 
| 
       220 
     | 
    
         
            -
                    }
         
     | 
| 
       221 
     | 
    
         
            -
                }
         
     | 
| 
       222 
     | 
    
         
            -
            };
         
     | 
| 
       223 
     | 
    
         
            -
            /* @conditional-compile-remove(rich-text-editor-image-upload) */
         
     | 
| 
       224 
     | 
    
         
            -
            /**
         
     | 
| 
       225 
     | 
    
         
            -
             * @internal
         
     | 
| 
       226 
     | 
    
         
            -
             */
         
     | 
| 
       227 
     | 
    
         
            -
            export const onCancelInlineImageUploadHandlerForEditBox = (imageId, messageId, editBoxInlineImageUploads, adapter, handleEditBoxInlineImageUploadAction) => {
         
     | 
| 
       228 
     | 
    
         
            -
                if (!editBoxInlineImageUploads) {
         
     | 
| 
       229 
     | 
    
         
            -
                    return;
         
     | 
| 
       230 
     | 
    
         
            -
                }
         
     | 
| 
       231 
     | 
    
         
            -
                const imageUpload = editBoxInlineImageUploads[messageId].find((upload) => upload.metadata.id === imageId);
         
     | 
| 
       232 
     | 
    
         
            -
                cancelInlineImageUpload(imageId, imageUpload, messageId, handleEditBoxInlineImageUploadAction, adapter);
         
     | 
| 
       233 
     | 
    
         
            -
            };
         
     | 
| 
       234 
     | 
    
         
            -
            /* @conditional-compile-remove(rich-text-editor-image-upload) */
         
     | 
| 
       235 
     | 
    
         
            -
            /**
         
     | 
| 
       236 
     | 
    
         
            -
             * @internal
         
     | 
| 
       237 
     | 
    
         
            -
             */
         
     | 
| 
       238 
     | 
    
         
            -
            export const onCancelInlineImageUploadHandlerForSendBox = (imageId, sendBoxInlineImageUploads, adapter, handleSendBoxInlineImageUploadAction) => {
         
     | 
| 
       239 
     | 
    
         
            -
                if (!sendBoxInlineImageUploads) {
         
     | 
| 
       240 
     | 
    
         
            -
                    return;
         
     | 
| 
       241 
     | 
    
         
            -
                }
         
     | 
| 
       242 
     | 
    
         
            -
                const imageUpload = sendBoxInlineImageUploads[SEND_BOX_UPLOADS_KEY_VALUE].find((upload) => upload.metadata.id === imageId);
         
     | 
| 
       243 
     | 
    
         
            -
                cancelInlineImageUpload(imageId, imageUpload, SEND_BOX_UPLOADS_KEY_VALUE, handleSendBoxInlineImageUploadAction, adapter);
         
     | 
| 
       244 
     | 
    
         
            -
            };
         
     | 
| 
       245 
53 
     | 
    
         
             
            //# sourceMappingURL=ImageUploadUtils.js.map
         
     | 
| 
         @@ -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\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 (uploadTasks: AttachmentUpload[], adapter: ChatAdapter): 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(`Image data for \"${task.metadata?.name}\" is not provided.`);\n      continue;\n    }\n    if (image && image.size > MAX_INLINE_IMAGE_UPLOAD_SIZE_MB * 1024 * 1024) {\n      uploadTask.notifyUploadFailed(\n        `\"${task.metadata?.name}\" is too big. Select a file under ${MAX_INLINE_IMAGE_UPLOAD_SIZE_MB}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(`Uploading \".${imageExtension}\" image is not allowed.`);\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('Unable to upload inline image. Please try again later.');\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): 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);\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): 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);\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":"AAAA,uCAAuC;AACvC,kCAAkC;;;;;;;;;;AAElC,gEAAgE;AAChE,MAAM,aAAa,GAAG,CACpB,QAAgC,EAChC,OAAkF,EAC/D,EAAE;IACrB,gCAAgC;IAChC,MAAM,EAAE,OAAO,GAAG,KAAK,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC;IAErD,MAAM,EAAE,GAAG,UAAU,CAAC,GAAG,EAAE;QACzB,eAAe,CAAC,KAAK,EAAE,CAAC;IAC1B,CAAC,EAAE,OAAO,CAAC,CAAC;IAEZ,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,QAAQ,kCAChC,OAAO,KACV,MAAM,EAAE,eAAe,CAAC,MAAM,IAC9B,CAAC;IACH,YAAY,CAAC,EAAE,CAAC,CAAC;IACjB,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAA,CAAC;AAEF,gEAAgE;AAChE;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAO,KAAa,EAA6B,EAAE;IACnF,MAAM,SAAS,GAAqB,SAAS,CAAC;IAC9C,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACzD,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE,EAAE,eAAe,EAAE,IAAI,eAAe,EAAE,EAAE,CAAC,CAAC;QACnF,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QACnC,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC,CAAA,CAAC;AAEF,gEAAgE;AAChE;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,KAAoC,EAAQ,EAAE;IAC5E,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;QACtD,4FAA4F;QAC5F,IAAI,UAAU,GAAuB,KAAK,CAAC,aAAa,CAAC;QACzD,IAAI,WAAW,GAAgB,KAAK,CAAC;QACrC,OAAO,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,UAAU,CAAC,MAAM,MAAK,CAAC,EAAE,CAAC;YAC3C,WAAW,GAAG,UAAU,CAAC;YACzB,UAAU,GAAG,UAAU,CAAC,aAAa,CAAC;QACxC,CAAC;QACD,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,MAAM,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\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  const blobImage: Blob | undefined = undefined;\n  if (image.startsWith('blob') || image.startsWith('http')) {\n    const res = await fetchBlobData(image, { abortController: new AbortController() });\n    const blobImage = await res.blob();\n    return blobImage;\n  }\n  return blobImage;\n};\n\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\n/**\n * @internal\n * Exported only for unit testing\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"]}
         
     | 
    
        package/dist/dist-esm/react-composites/src/composites/ChatComposite/ImageUpload/useImageUpload.d.ts
    ADDED
    
    | 
         @@ -0,0 +1,12 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            import { Dispatch } from 'react';
         
     | 
| 
      
 2 
     | 
    
         
            +
            import { AttachmentUpload, Actions } from '../file-sharing/AttachmentUpload';
         
     | 
| 
      
 3 
     | 
    
         
            +
            /**
         
     | 
| 
      
 4 
     | 
    
         
            +
             * @private
         
     | 
| 
      
 5 
     | 
    
         
            +
             */
         
     | 
| 
      
 6 
     | 
    
         
            +
            export declare const useImageUpload: () => [
         
     | 
| 
      
 7 
     | 
    
         
            +
                AttachmentUpload[],
         
     | 
| 
      
 8 
     | 
    
         
            +
                Dispatch<Actions>,
         
     | 
| 
      
 9 
     | 
    
         
            +
                onUploadInlineImage: (image: string, fileName: string) => Promise<void>,
         
     | 
| 
      
 10 
     | 
    
         
            +
                onCancelInlineImageUploadHandler: (imageId: string) => void
         
     | 
| 
      
 11 
     | 
    
         
            +
            ];
         
     | 
| 
      
 12 
     | 
    
         
            +
            //# sourceMappingURL=useImageUpload.d.ts.map
         
     |