@azure/communication-react 1.18.0-alpha-202407191547 → 1.18.0-alpha-202407200014
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 +71 -18
 - package/dist/dist-cjs/communication-react/{ChatMessageComponentAsRichTextEditBox-ChK7xe6Z.js → ChatMessageComponentAsRichTextEditBox-D4ctXnw1.js} +27 -6
 - package/dist/dist-cjs/communication-react/ChatMessageComponentAsRichTextEditBox-D4ctXnw1.js.map +1 -0
 - package/dist/dist-cjs/communication-react/{RichTextSendBoxWrapper-BLCHZv_g.js → RichTextSendBoxWrapper-F6eqVXer.js} +2 -2
 - package/dist/dist-cjs/communication-react/{RichTextSendBoxWrapper-BLCHZv_g.js.map → RichTextSendBoxWrapper-F6eqVXer.js.map} +1 -1
 - package/dist/dist-cjs/communication-react/{index-BWVQuckY.js → index-BJO_NOTU.js} +589 -302
 - package/dist/dist-cjs/communication-react/index-BJO_NOTU.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-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 +15 -7
 - package/dist/dist-esm/calling-stateful-client/src/CallAgentDeclarativeCommon.js.map +1 -1
 - package/dist/dist-esm/calling-stateful-client/src/IncomingCallDeclarative.d.ts +2 -8
 - package/dist/dist-esm/calling-stateful-client/src/IncomingCallDeclarative.js.map +1 -1
 - package/dist/dist-esm/calling-stateful-client/src/TeamsCallAgentDeclarative.d.ts +14 -2
 - package/dist/dist-esm/calling-stateful-client/src/TeamsCallAgentDeclarative.js.map +1 -1
 - package/dist/dist-esm/calling-stateful-client/src/TeamsIncomingCallDeclarative.d.ts +17 -0
 - package/dist/dist-esm/calling-stateful-client/src/TeamsIncomingCallDeclarative.js +49 -0
 - package/dist/dist-esm/calling-stateful-client/src/TeamsIncomingCallDeclarative.js.map +1 -0
 - package/dist/dist-esm/calling-stateful-client/src/TypeGuards.d.ts +9 -1
 - package/dist/dist-esm/calling-stateful-client/src/TypeGuards.js +16 -0
 - 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/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/ChatMessage/ChatMessageComponentWrapper.d.ts +8 -2
 - 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 +6 -4
 - package/dist/dist-esm/react-components/src/components/ChatMessage/MyMessageComponents/ChatMessageComponentAsEditBoxPicker.js +2 -12
 - 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 +25 -4
 - 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 +8 -6
 - package/dist/dist-esm/react-components/src/components/ChatMessage/MyMessageComponents/ChatMyMessageComponent.js +12 -3
 - 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 +27 -3
 - package/dist/dist-esm/react-components/src/components/ChatMessage/MyMessageComponents/FluentChatMyMessageComponent.js.map +1 -1
 - package/dist/dist-esm/react-components/src/components/MessageThread.d.ts +9 -15
 - package/dist/dist-esm/react-components/src/components/MessageThread.js +10 -1
 - package/dist/dist-esm/react-components/src/components/MessageThread.js.map +1 -1
 - package/dist/dist-esm/react-components/src/components/RichTextEditor/RichTextEditor.js +28 -22
 - 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 +49 -0
 - package/dist/dist-esm/react-components/src/components/RichTextEditor/RichTextSendBox.js +16 -4
 - 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 +20 -2
 - 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 +2 -1
 - package/dist/dist-esm/react-components/src/components/index.js.map +1 -1
 - package/dist/dist-esm/react-components/src/components/styles/RichTextEditor.styles.js +3 -0
 - 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 +1 -5
 - package/dist/dist-esm/react-components/src/components/utils/RichTextEditorUtils.js +0 -21
 - 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 +9 -1
 - package/dist/dist-esm/react-components/src/components/utils/SendBoxUtils.js +10 -2
 - package/dist/dist-esm/react-components/src/components/utils/SendBoxUtils.js.map +1 -1
 - package/dist/dist-esm/react-components/src/localization/locales/en-US/strings.json +8 -2
 - package/dist/dist-esm/react-composites/src/composites/ChatComposite/ChatScreen.js +66 -31
 - package/dist/dist-esm/react-composites/src/composites/ChatComposite/ChatScreen.js.map +1 -1
 - package/dist/dist-esm/react-composites/src/composites/ChatComposite/ImageUpload/ImageUploadReducer.d.ts +49 -0
 - package/dist/dist-esm/react-composites/src/composites/ChatComposite/ImageUpload/ImageUploadReducer.js +48 -0
 - package/dist/dist-esm/react-composites/src/composites/ChatComposite/ImageUpload/ImageUploadReducer.js.map +1 -0
 - package/dist/dist-esm/react-composites/src/composites/ChatComposite/ImageUpload/ImageUploadUtils.d.ts +33 -1
 - package/dist/dist-esm/react-composites/src/composites/ChatComposite/ImageUpload/ImageUploadUtils.js +198 -6
 - package/dist/dist-esm/react-composites/src/composites/ChatComposite/ImageUpload/ImageUploadUtils.js.map +1 -1
 - 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/SendBoxPicker.d.ts +2 -5
 - 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 +4 -0
 - package/dist/dist-esm/react-composites/src/composites/common/constants.js +4 -0
 - package/dist/dist-esm/react-composites/src/composites/common/constants.js.map +1 -1
 - package/package.json +9 -9
 - package/dist/dist-cjs/communication-react/ChatMessageComponentAsRichTextEditBox-ChK7xe6Z.js.map +0 -1
 - package/dist/dist-cjs/communication-react/index-BWVQuckY.js.map +0 -1
 - package/dist/dist-esm/react-composites/src/composites/ChatComposite/ImageUpload/useImageUpload.d.ts +0 -12
 - package/dist/dist-esm/react-composites/src/composites/ChatComposite/ImageUpload/useImageUpload.js +0 -115
 - package/dist/dist-esm/react-composites/src/composites/ChatComposite/ImageUpload/useImageUpload.js.map +0 -1
 
    
        package/dist/dist-esm/react-composites/src/composites/ChatComposite/ImageUpload/ImageUploadUtils.js
    CHANGED
    
    | 
         @@ -10,6 +10,14 @@ 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) */
         
     | 
| 
       13 
21 
     | 
    
         
             
            const fetchBlobData = (resource, options) => __awaiter(void 0, void 0, void 0, function* () {
         
     | 
| 
       14 
22 
     | 
    
         
             
                // default timeout is 30 seconds
         
     | 
| 
       15 
23 
     | 
    
         
             
                const { timeout = 30000, abortController } = options;
         
     | 
| 
         @@ -25,18 +33,22 @@ const fetchBlobData = (resource, options) => __awaiter(void 0, void 0, void 0, f 
     | 
|
| 
       25 
33 
     | 
    
         
             
             * @private
         
     | 
| 
       26 
34 
     | 
    
         
             
             */
         
     | 
| 
       27 
35 
     | 
    
         
             
            export const getInlineImageData = (image) => __awaiter(void 0, void 0, void 0, function* () {
         
     | 
| 
       28 
     | 
    
         
            -
                const blobImage = undefined;
         
     | 
| 
       29 
36 
     | 
    
         
             
                if (image.startsWith('blob') || image.startsWith('http')) {
         
     | 
| 
       30 
     | 
    
         
            -
                     
     | 
| 
       31 
     | 
    
         
            -
             
     | 
| 
       32 
     | 
    
         
            -
             
     | 
| 
      
 37 
     | 
    
         
            +
                    try {
         
     | 
| 
      
 38 
     | 
    
         
            +
                        const res = yield fetchBlobData(image, { abortController: new AbortController() });
         
     | 
| 
      
 39 
     | 
    
         
            +
                        const blobImage = yield res.blob();
         
     | 
| 
      
 40 
     | 
    
         
            +
                        return blobImage;
         
     | 
| 
      
 41 
     | 
    
         
            +
                    }
         
     | 
| 
      
 42 
     | 
    
         
            +
                    catch (error) {
         
     | 
| 
      
 43 
     | 
    
         
            +
                        console.error('Error fetching image data', error);
         
     | 
| 
      
 44 
     | 
    
         
            +
                        return;
         
     | 
| 
      
 45 
     | 
    
         
            +
                    }
         
     | 
| 
       33 
46 
     | 
    
         
             
                }
         
     | 
| 
       34 
     | 
    
         
            -
                return 
     | 
| 
      
 47 
     | 
    
         
            +
                return;
         
     | 
| 
       35 
48 
     | 
    
         
             
            });
         
     | 
| 
       36 
49 
     | 
    
         
             
            /* @conditional-compile-remove(rich-text-editor-image-upload) */
         
     | 
| 
       37 
50 
     | 
    
         
             
            /**
         
     | 
| 
       38 
51 
     | 
    
         
             
             * @internal
         
     | 
| 
       39 
     | 
    
         
            -
             * Exported only for unit testing
         
     | 
| 
       40 
52 
     | 
    
         
             
             */
         
     | 
| 
       41 
53 
     | 
    
         
             
            export const removeImageTags = (event) => {
         
     | 
| 
       42 
54 
     | 
    
         
             
                event.content.querySelectorAll('img').forEach((image) => {
         
     | 
| 
         @@ -50,4 +62,184 @@ export const removeImageTags = (event) => { 
     | 
|
| 
       50 
62 
     | 
    
         
             
                    currentNode === null || currentNode === void 0 ? void 0 : currentNode.remove();
         
     | 
| 
       51 
63 
     | 
    
         
             
                });
         
     | 
| 
       52 
64 
     | 
    
         
             
            };
         
     | 
| 
      
 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 
     | 
    
         
            +
            };
         
     | 
| 
       53 
245 
     | 
    
         
             
            //# sourceMappingURL=ImageUploadUtils.js.map
         
     | 
| 
         @@ -1 +1 @@ 
     | 
|
| 
       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"]}
         
     | 
| 
      
 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"]}
         
     | 
| 
         @@ -20,7 +20,7 @@ export declare enum AttachmentUploadActionType { 
     | 
|
| 
       20 
20 
     | 
    
         
             
            /**
         
     | 
| 
       21 
21 
     | 
    
         
             
             * @private
         
     | 
| 
       22 
22 
     | 
    
         
             
             */
         
     | 
| 
       23 
     | 
    
         
            -
            interface Action {
         
     | 
| 
      
 23 
     | 
    
         
            +
            export interface Action {
         
     | 
| 
       24 
24 
     | 
    
         
             
                type: AttachmentUploadActionType;
         
     | 
| 
       25 
25 
     | 
    
         
             
            }
         
     | 
| 
       26 
26 
     | 
    
         
             
            /**
         
     | 
| 
         @@ -33,7 +33,7 @@ interface SetAction extends Action { 
     | 
|
| 
       33 
33 
     | 
    
         
             
            /**
         
     | 
| 
       34 
34 
     | 
    
         
             
             * @private
         
     | 
| 
       35 
35 
     | 
    
         
             
             */
         
     | 
| 
       36 
     | 
    
         
            -
            interface ProgressAction extends Action {
         
     | 
| 
      
 36 
     | 
    
         
            +
            export interface ProgressAction extends Action {
         
     | 
| 
       37 
37 
     | 
    
         
             
                type: AttachmentUploadActionType.Progress;
         
     | 
| 
       38 
38 
     | 
    
         
             
                taskId: string;
         
     | 
| 
       39 
39 
     | 
    
         
             
                progress: number;
         
     | 
| 
         @@ -41,7 +41,7 @@ interface ProgressAction extends Action { 
     | 
|
| 
       41 
41 
     | 
    
         
             
            /**
         
     | 
| 
       42 
42 
     | 
    
         
             
             * @private
         
     | 
| 
       43 
43 
     | 
    
         
             
             */
         
     | 
| 
       44 
     | 
    
         
            -
            interface CompleteAction extends Action {
         
     | 
| 
      
 44 
     | 
    
         
            +
            export interface CompleteAction extends Action {
         
     | 
| 
       45 
45 
     | 
    
         
             
                type: AttachmentUploadActionType.Completed;
         
     | 
| 
       46 
46 
     | 
    
         
             
                taskId: string;
         
     | 
| 
       47 
47 
     | 
    
         
             
                id: string;
         
     | 
| 
         @@ -50,7 +50,7 @@ interface CompleteAction extends Action { 
     | 
|
| 
       50 
50 
     | 
    
         
             
            /**
         
     | 
| 
       51 
51 
     | 
    
         
             
             * @private
         
     | 
| 
       52 
52 
     | 
    
         
             
             */
         
     | 
| 
       53 
     | 
    
         
            -
            interface FailedAction extends Action {
         
     | 
| 
      
 53 
     | 
    
         
            +
            export interface FailedAction extends Action {
         
     | 
| 
       54 
54 
     | 
    
         
             
                type: AttachmentUploadActionType.Failed;
         
     | 
| 
       55 
55 
     | 
    
         
             
                taskId: string;
         
     | 
| 
       56 
56 
     | 
    
         
             
                message: string;
         
     | 
| 
         @@ -58,20 +58,20 @@ interface FailedAction extends Action { 
     | 
|
| 
       58 
58 
     | 
    
         
             
            /**
         
     | 
| 
       59 
59 
     | 
    
         
             
             * @private
         
     | 
| 
       60 
60 
     | 
    
         
             
             */
         
     | 
| 
       61 
     | 
    
         
            -
            interface RemoveAction extends Action {
         
     | 
| 
      
 61 
     | 
    
         
            +
            export interface RemoveAction extends Action {
         
     | 
| 
       62 
62 
     | 
    
         
             
                type: AttachmentUploadActionType.Remove;
         
     | 
| 
       63 
63 
     | 
    
         
             
                id: string;
         
     | 
| 
       64 
64 
     | 
    
         
             
            }
         
     | 
| 
       65 
65 
     | 
    
         
             
            /**
         
     | 
| 
       66 
66 
     | 
    
         
             
             * @private
         
     | 
| 
       67 
67 
     | 
    
         
             
             */
         
     | 
| 
       68 
     | 
    
         
            -
            interface ClearAction extends Action {
         
     | 
| 
      
 68 
     | 
    
         
            +
            export interface ClearAction extends Action {
         
     | 
| 
       69 
69 
     | 
    
         
             
                type: AttachmentUploadActionType.Clear;
         
     | 
| 
       70 
70 
     | 
    
         
             
            }
         
     | 
| 
       71 
71 
     | 
    
         
             
            /**
         
     | 
| 
       72 
72 
     | 
    
         
             
             * @private
         
     | 
| 
       73 
73 
     | 
    
         
             
             */
         
     | 
| 
       74 
     | 
    
         
            -
             
     | 
| 
      
 74 
     | 
    
         
            +
            type Actions = SetAction | ProgressAction | CompleteAction | FailedAction | RemoveAction | ClearAction;
         
     | 
| 
       75 
75 
     | 
    
         
             
            /**
         
     | 
| 
       76 
76 
     | 
    
         
             
             * @internal
         
     | 
| 
       77 
77 
     | 
    
         
             
             */
         
     | 
| 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            {"version":3,"file":"AttachmentUpload.js","sourceRoot":"","sources":["../../../../../../../../react-composites/src/composites/ChatComposite/file-sharing/AttachmentUpload.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAelC;;GAEG;AACH,MAAM,CAAN,IAAY,0BAOX;AAPD,WAAY,0BAA0B;IACpC,yCAAW,CAAA;IACX,mDAAqB,CAAA;IACrB,qDAAuB,CAAA;IACvB,+CAAiB,CAAA;IACjB,+CAAiB,CAAA;IACjB,6CAAe,CAAA;AACjB,CAAC,EAPW,0BAA0B,KAA1B,0BAA0B,QAOrC;AAyED,mDAAmD;AACnD;;GAEG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,KAAyB,EAAE,MAAe,EAAsB,EAAE;IACxG,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,0BAA0B,CAAC,GAAG;YACjC,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAE1E,KAAK,0BAA0B,CAAC,SAAS;YACvC,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACrB,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM;gBACxB,CAAC,iCAAM,CAAC,KAAE,QAAQ,kCAAO,CAAC,CAAC,QAAQ,KAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,QAAQ,EAAE,CAAC,OAChF,CAAC,CAAC,CAAC,CACN,CAAC;QAEJ,KAAK,0BAA0B,CAAC,MAAM;YACpC,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACrB,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM;gBACxB,CAAC,iCACM,CAAC,KACJ,QAAQ,kCACH,CAAC,CAAC,QAAQ,KACb,KAAK,EAAE;4BACL,OAAO,EAAE,MAAM,CAAC,OAAO;yBACxB,OAGP,CAAC,CAAC,CAAC,CACN,CAAC;QAEJ,KAAK,0BAA0B,CAAC,MAAM;YACpC,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,CAAC,CAAC;QAE3F,KAAK,0BAA0B,CAAC,QAAQ;YACtC,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACrB,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC,iCAAM,CAAC,KAAE,QAAQ,kCAAO,CAAC,CAAC,QAAQ,KAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,OAAK,CAAC,CAAC,CAAC,CAClG,CAAC;QAEJ,KAAK,0BAA0B,CAAC,KAAK;YACnC,OAAO,EAAE,CAAC;QACZ;YACE,OAAO,KAAK,CAAC;IACjB,CAAC;AACH,CAAC,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/* @conditional-compile-remove(file-sharing-acs) */\nimport { AttachmentUploadTask, AttachmentSelectionHandler, AttachmentActionHandler } from '@internal/react-components';\n/* @conditional-compile-remove(file-sharing-acs) */\nimport { AttachmentMetadata, AttachmentMetadataInProgress, AttachmentProgressError } from '@internal/acs-ui-common';\n\n/* @conditional-compile-remove(file-sharing-acs) */\n/**\n * @internal\n */\nexport interface AttachmentUpload extends AttachmentUploadTask {\n  metadata: AttachmentMetadataInProgress;\n}\n\n/**\n * @private\n */\nexport enum AttachmentUploadActionType {\n  Set = 'set',\n  Progress = 'progress',\n  Completed = 'completed',\n  Failed = 'failed',\n  Remove = 'remove',\n  Clear = 'clear'\n}\n\n/* @conditional-compile-remove(file-sharing-acs) */\n/**\n * @private\n */\ 
     | 
| 
      
 1 
     | 
    
         
            +
            {"version":3,"file":"AttachmentUpload.js","sourceRoot":"","sources":["../../../../../../../../react-composites/src/composites/ChatComposite/file-sharing/AttachmentUpload.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAelC;;GAEG;AACH,MAAM,CAAN,IAAY,0BAOX;AAPD,WAAY,0BAA0B;IACpC,yCAAW,CAAA;IACX,mDAAqB,CAAA;IACrB,qDAAuB,CAAA;IACvB,+CAAiB,CAAA;IACjB,+CAAiB,CAAA;IACjB,6CAAe,CAAA;AACjB,CAAC,EAPW,0BAA0B,KAA1B,0BAA0B,QAOrC;AAyED,mDAAmD;AACnD;;GAEG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,KAAyB,EAAE,MAAe,EAAsB,EAAE;IACxG,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,0BAA0B,CAAC,GAAG;YACjC,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAE1E,KAAK,0BAA0B,CAAC,SAAS;YACvC,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACrB,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM;gBACxB,CAAC,iCAAM,CAAC,KAAE,QAAQ,kCAAO,CAAC,CAAC,QAAQ,KAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,QAAQ,EAAE,CAAC,OAChF,CAAC,CAAC,CAAC,CACN,CAAC;QAEJ,KAAK,0BAA0B,CAAC,MAAM;YACpC,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACrB,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM;gBACxB,CAAC,iCACM,CAAC,KACJ,QAAQ,kCACH,CAAC,CAAC,QAAQ,KACb,KAAK,EAAE;4BACL,OAAO,EAAE,MAAM,CAAC,OAAO;yBACxB,OAGP,CAAC,CAAC,CAAC,CACN,CAAC;QAEJ,KAAK,0BAA0B,CAAC,MAAM;YACpC,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,CAAC,CAAC;QAE3F,KAAK,0BAA0B,CAAC,QAAQ;YACtC,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACrB,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC,iCAAM,CAAC,KAAE,QAAQ,kCAAO,CAAC,CAAC,QAAQ,KAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,OAAK,CAAC,CAAC,CAAC,CAClG,CAAC;QAEJ,KAAK,0BAA0B,CAAC,KAAK;YACnC,OAAO,EAAE,CAAC;QACZ;YACE,OAAO,KAAK,CAAC;IACjB,CAAC;AACH,CAAC,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/* @conditional-compile-remove(file-sharing-acs) */\nimport { AttachmentUploadTask, AttachmentSelectionHandler, AttachmentActionHandler } from '@internal/react-components';\n/* @conditional-compile-remove(file-sharing-acs) */\nimport { AttachmentMetadata, AttachmentMetadataInProgress, AttachmentProgressError } from '@internal/acs-ui-common';\n\n/* @conditional-compile-remove(file-sharing-acs) */\n/**\n * @internal\n */\nexport interface AttachmentUpload extends AttachmentUploadTask {\n  metadata: AttachmentMetadataInProgress;\n}\n\n/**\n * @private\n */\nexport enum AttachmentUploadActionType {\n  Set = 'set',\n  Progress = 'progress',\n  Completed = 'completed',\n  Failed = 'failed',\n  Remove = 'remove',\n  Clear = 'clear'\n}\n\n/* @conditional-compile-remove(file-sharing-acs) */\n/**\n * @private\n */\nexport interface Action {\n  type: AttachmentUploadActionType;\n}\n\n/* @conditional-compile-remove(file-sharing-acs) */\n/**\n * @private\n */\ninterface SetAction extends Action {\n  type: AttachmentUploadActionType.Set;\n  newUploads: AttachmentUpload[];\n}\n\n/* @conditional-compile-remove(file-sharing-acs) */\n/**\n * @private\n */\nexport interface ProgressAction extends Action {\n  type: AttachmentUploadActionType.Progress;\n  taskId: string;\n  progress: number;\n}\n\n/* @conditional-compile-remove(file-sharing-acs) */\n/**\n * @private\n */\nexport interface CompleteAction extends Action {\n  type: AttachmentUploadActionType.Completed;\n  taskId: string;\n  id: string;\n  url: string;\n}\n\n/* @conditional-compile-remove(file-sharing-acs) */\n/**\n * @private\n */\nexport interface FailedAction extends Action {\n  type: AttachmentUploadActionType.Failed;\n  taskId: string;\n  message: string;\n}\n\n/* @conditional-compile-remove(file-sharing-acs) */\n/**\n * @private\n */\nexport interface RemoveAction extends Action {\n  type: AttachmentUploadActionType.Remove;\n  id: string;\n}\n\n/* @conditional-compile-remove(file-sharing-acs) */\n/**\n * @private\n */\nexport interface ClearAction extends Action {\n  type: AttachmentUploadActionType.Clear;\n}\n\n/* @conditional-compile-remove(file-sharing-acs) */\n/**\n * @private\n */\ntype Actions = SetAction | ProgressAction | CompleteAction | FailedAction | RemoveAction | ClearAction;\n\n/* @conditional-compile-remove(file-sharing-acs) */\n/**\n * @internal\n */\nexport const AttachmentUploadReducer = (state: AttachmentUpload[], action: Actions): AttachmentUpload[] => {\n  switch (action.type) {\n    case AttachmentUploadActionType.Set:\n      return state.filter((v) => !v.metadata.error).concat(action.newUploads);\n\n    case AttachmentUploadActionType.Completed:\n      return state.map((v) =>\n        v.taskId === action.taskId\n          ? { ...v, metadata: { ...v.metadata, id: action.id, url: action.url, progress: 1 } }\n          : v\n      );\n\n    case AttachmentUploadActionType.Failed:\n      return state.map((v) =>\n        v.taskId === action.taskId\n          ? {\n              ...v,\n              metadata: {\n                ...v.metadata,\n                error: {\n                  message: action.message\n                }\n              }\n            }\n          : v\n      );\n\n    case AttachmentUploadActionType.Remove:\n      return state.filter((v) => !v.metadata.error).filter((v) => v.metadata.id !== action.id);\n\n    case AttachmentUploadActionType.Progress:\n      return state.map((v) =>\n        v.taskId === action.taskId ? { ...v, metadata: { ...v.metadata, progress: action.progress } } : v\n      );\n\n    case AttachmentUploadActionType.Clear:\n      return [];\n    default:\n      return state;\n  }\n};\n\n/* @conditional-compile-remove(file-sharing-acs) */\nexport type {\n  AttachmentMetadata,\n  AttachmentSelectionHandler,\n  AttachmentActionHandler,\n  AttachmentUploadTask,\n  AttachmentProgressError\n};\n"]}
         
     | 
| 
         @@ -1,6 +1,6 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            import React from 'react';
         
     | 
| 
       2 
2 
     | 
    
         
             
            import { SendBoxStylesProps } from "../../../../react-components/src";
         
     | 
| 
       3 
     | 
    
         
            -
            import {  
     | 
| 
      
 3 
     | 
    
         
            +
            import { RichTextSendBoxOptions } from "../../../../react-components/src";
         
     | 
| 
       4 
4 
     | 
    
         
             
            import { RichTextSendBoxProps } from "../../../../react-components/src";
         
     | 
| 
       5 
5 
     | 
    
         
             
            import { AttachmentMetadataInProgress, MessageOptions } from "../../../../acs-ui-common/src";
         
     | 
| 
       6 
6 
     | 
    
         
             
            /**
         
     | 
| 
         @@ -20,12 +20,9 @@ export type SendBoxPickerProps = { 
     | 
|
| 
       20 
20 
     | 
    
         
             
                styles?: SendBoxStylesProps;
         
     | 
| 
       21 
21 
     | 
    
         
             
                autoFocus?: 'sendBoxTextField';
         
     | 
| 
       22 
22 
     | 
    
         
             
                onSendMessage: (content: string, options?: MessageOptions) => Promise<void>;
         
     | 
| 
       23 
     | 
    
         
            -
                richTextEditorOptions?:  
     | 
| 
      
 23 
     | 
    
         
            +
                richTextEditorOptions?: RichTextSendBoxOptions;
         
     | 
| 
       24 
24 
     | 
    
         
             
                attachments?: AttachmentMetadataInProgress[];
         
     | 
| 
       25 
25 
     | 
    
         
             
                onCancelAttachmentUpload?: (attachmentId: string) => void;
         
     | 
| 
       26 
     | 
    
         
            -
                onUploadInlineImage?: (imageUrl: string, imageFileName: string) => void;
         
     | 
| 
       27 
     | 
    
         
            -
                imageUploadsInProgress?: AttachmentMetadataInProgress[];
         
     | 
| 
       28 
     | 
    
         
            -
                onCancelInlineImageUpload?: (imageId: string) => void;
         
     | 
| 
       29 
26 
     | 
    
         
             
            };
         
     | 
| 
       30 
27 
     | 
    
         
             
            /**
         
     | 
| 
       31 
28 
     | 
    
         
             
             * @private
         
     | 
| 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            {"version":3,"file":"SendBoxPicker.js","sourceRoot":"","sources":["../../../../../../../react-composites/src/composites/common/SendBoxPicker.tsx"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EAAE,OAAO,EAAsB,yCAAmC;AAGzE,OAAO,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AACjE,qEAAqE;AACrE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,qEAAqE;AACrE,OAAO,EAAE,cAAc,EAAwB,yCAAmC;AAIlF,qEAAqE;AACrE;;GAEG;AACH,MAAM,sBAAsB,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAC7C,MAAM,CAAC,0BAA0B,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,sBAAsB,EAAE,CAAC,CAAC,CAClG,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAEhC,EAAE,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,sBAAsB,EAAE,CAAC,CAAC,CAAC; 
     | 
| 
      
 1 
     | 
    
         
            +
            {"version":3,"file":"SendBoxPicker.js","sourceRoot":"","sources":["../../../../../../../react-composites/src/composites/common/SendBoxPicker.tsx"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EAAE,OAAO,EAAsB,yCAAmC;AAGzE,OAAO,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AACjE,qEAAqE;AACrE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,qEAAqE;AACrE,OAAO,EAAE,cAAc,EAAwB,yCAAmC;AAIlF,qEAAqE;AACrE;;GAEG;AACH,MAAM,sBAAsB,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAC7C,MAAM,CAAC,0BAA0B,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,sBAAsB,EAAE,CAAC,CAAC,CAClG,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAEhC,EAAE,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,sBAAsB,EAAE,CAAC,CAAC,CAAC;AAoBxG;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,KAAyB,EAAe,EAAE;IACtE,qEAAqE;IACrE,MAAM,EAAE,qBAAqB,EAAE,GAAG,KAAK,CAAC;IACxC,gEAAgE;IAChE,MAAM,EAAE,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,yBAAyB,EAAE,GACvF,qBAAqB,IAAI,EAAE,CAAC;IAE9B,MAAM,YAAY,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IAE1C,qEAAqE;IACrE,MAAM,uBAAuB,GAAG,OAAO,CAAC,GAAG,EAAE;QAC3C,OAAO,qBAAqB,KAAK,SAAS,CAAC;IAC7C,CAAC,EAAE,CAAC,qBAAqB,CAAC,CAAC,CAAC;IAE5B,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,oBAAC,OAAO,oBAAK,YAAY,EAAM,KAAK,EAAI,EAAE,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC;IAE/F,qEAAqE;IACrE,IAAI,uBAAuB,EAAE,CAAC;QAC5B,OAAO,CACL,oBAAC,cAAc,IAAC,QAAQ,EAAE,OAAO;YAC/B,oBAAC,QAAQ,IAAC,QAAQ,EAAE,OAAO;gBACzB,oBAAC,sBAAsB,oBACjB,KAAK,IACT,OAAO,EAAE,OAAO,EAChB,mBAAmB,EAAE,mBAAmB,EACxC,sBAAsB,EAAE,sBAAsB,EAC9C,yBAAyB,EAAE,yBAAyB,IACpD,CACO,CACI,CAClB,CAAC;IACJ,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport React, { useMemo } from 'react';\nimport { SendBox, SendBoxStylesProps } from '@internal/react-components';\n/* @conditional-compile-remove(rich-text-editor-composite-support) */\nimport { RichTextSendBoxOptions } from '@internal/react-components';\nimport { usePropsFor } from '../ChatComposite/hooks/usePropsFor';\n/* @conditional-compile-remove(rich-text-editor-composite-support) */\nimport { Suspense } from 'react';\n/* @conditional-compile-remove(rich-text-editor-composite-support) */\nimport { _ErrorBoundary, RichTextSendBoxProps } from '@internal/react-components';\n/* @conditional-compile-remove(file-sharing-acs) */\nimport { AttachmentMetadataInProgress, MessageOptions } from '@internal/acs-ui-common';\n\n/* @conditional-compile-remove(rich-text-editor-composite-support) */\n/**\n * Wrapper for RichTextSendBox component to allow us to use usePropsFor with richTextSendBox with lazy loading\n */\nconst RichTextSendBoxWrapper = React.lazy(() =>\n  import('./RichTextSendBoxWrapper').then((module) => ({ default: module.RichTextSendBoxWrapper }))\n);\n\n/**\n * @private\n * Use this function to load RoosterJS dependencies early in the lifecycle.\n * It should be the same import as used for lazy loading.\n *\n/* @conditional-compile-remove(rich-text-editor-composite-support)\n */\nexport const loadRichTextSendBox = (): Promise<{\n  default: React.ComponentType<RichTextSendBoxProps>;\n}> => import('./RichTextSendBoxWrapper').then((module) => ({ default: module.RichTextSendBoxWrapper }));\n\n/**\n * @private\n */\nexport type SendBoxPickerProps = {\n  styles?: SendBoxStylesProps;\n  autoFocus?: 'sendBoxTextField';\n  onSendMessage: (\n    content: string,\n    /* @conditional-compile-remove(file-sharing-acs) */ options?: MessageOptions\n  ) => Promise<void>;\n  /* @conditional-compile-remove(rich-text-editor-composite-support) */\n  richTextEditorOptions?: RichTextSendBoxOptions;\n  /* @conditional-compile-remove(file-sharing-acs) */\n  attachments?: AttachmentMetadataInProgress[];\n  /* @conditional-compile-remove(file-sharing-acs) */\n  onCancelAttachmentUpload?: (attachmentId: string) => void;\n};\n\n/**\n * @private\n */\nexport const SendBoxPicker = (props: SendBoxPickerProps): JSX.Element => {\n  /* @conditional-compile-remove(rich-text-editor-composite-support) */\n  const { richTextEditorOptions } = props;\n  /* @conditional-compile-remove(rich-text-editor-image-upload) */\n  const { onPaste, onUploadInlineImage, imageUploadsInProgress, onCancelInlineImageUpload } =\n    richTextEditorOptions || {};\n\n  const sendBoxProps = usePropsFor(SendBox);\n\n  /* @conditional-compile-remove(rich-text-editor-composite-support) */\n  const isRichTextEditorEnabled = useMemo(() => {\n    return richTextEditorOptions !== undefined;\n  }, [richTextEditorOptions]);\n\n  const sendBox = useMemo(() => <SendBox {...sendBoxProps} {...props} />, [props, sendBoxProps]);\n\n  /* @conditional-compile-remove(rich-text-editor-composite-support) */\n  if (isRichTextEditorEnabled) {\n    return (\n      <_ErrorBoundary fallback={sendBox}>\n        <Suspense fallback={sendBox}>\n          <RichTextSendBoxWrapper\n            {...props}\n            onPaste={onPaste}\n            onUploadInlineImage={onUploadInlineImage}\n            imageUploadsInProgress={imageUploadsInProgress}\n            onCancelInlineImageUpload={onCancelInlineImageUpload}\n          />\n        </Suspense>\n      </_ErrorBoundary>\n    );\n  }\n  return sendBox;\n};\n"]}
         
     | 
| 
         @@ -12,4 +12,8 @@ export declare const TEAMS_LIMITATION_LEARN_MORE = "https://learn.microsoft.com/ 
     | 
|
| 
       12 
12 
     | 
    
         
             
             * Changing this value will require updating the API documentation.
         
     | 
| 
       13 
13 
     | 
    
         
             
             */
         
     | 
| 
       14 
14 
     | 
    
         
             
            export declare const CHAT_CONTAINER_MIN_WIDTH_REM = 17.5;
         
     | 
| 
      
 15 
     | 
    
         
            +
            /**
         
     | 
| 
      
 16 
     | 
    
         
            +
             * @private
         
     | 
| 
      
 17 
     | 
    
         
            +
             */
         
     | 
| 
      
 18 
     | 
    
         
            +
            export declare const SEND_BOX_UPLOADS_KEY_VALUE = "send-box";
         
     | 
| 
       15 
19 
     | 
    
         
             
            //# sourceMappingURL=constants.d.ts.map
         
     | 
| 
         @@ -14,4 +14,8 @@ export const TEAMS_LIMITATION_LEARN_MORE = 'https://learn.microsoft.com/en-us/az 
     | 
|
| 
       14 
14 
     | 
    
         
             
             * Changing this value will require updating the API documentation.
         
     | 
| 
       15 
15 
     | 
    
         
             
             */
         
     | 
| 
       16 
16 
     | 
    
         
             
            export const CHAT_CONTAINER_MIN_WIDTH_REM = 17.5;
         
     | 
| 
      
 17 
     | 
    
         
            +
            /**
         
     | 
| 
      
 18 
     | 
    
         
            +
             * @private
         
     | 
| 
      
 19 
     | 
    
         
            +
             */
         
     | 
| 
      
 20 
     | 
    
         
            +
            export const SEND_BOX_UPLOADS_KEY_VALUE = 'send-box';
         
     | 
| 
       17 
21 
     | 
    
         
             
            //# sourceMappingURL=constants.js.map
         
     | 
| 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../../../../react-composites/src/composites/common/constants.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC;;GAEG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC;AAE/E;;GAEG;AACH,MAAM,CAAC,MAAM,2BAA2B,GACtC,yHAAyH,CAAC;AAE5H;;;;GAIG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,IAAI,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * @private\n */\nexport const UNSUPPORTED_CHAT_THREAD_TYPE = ['@thread.tacv2', '@thread.skype'];\n\n/**\n * @private\n */\nexport const TEAMS_LIMITATION_LEARN_MORE =\n  'https://learn.microsoft.com/en-us/azure/communication-services/concepts/join-teams-meeting#limitations-and-known-issues';\n\n/**\n * @remarks\n * This value is publicly documented in the ChatComposite API documentation.\n * Changing this value will require updating the API documentation.\n */\nexport const CHAT_CONTAINER_MIN_WIDTH_REM = 17.5;\n"]}
         
     | 
| 
      
 1 
     | 
    
         
            +
            {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../../../../react-composites/src/composites/common/constants.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC;;GAEG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC;AAE/E;;GAEG;AACH,MAAM,CAAC,MAAM,2BAA2B,GACtC,yHAAyH,CAAC;AAE5H;;;;GAIG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,IAAI,CAAC;AAEjD;;GAEG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,UAAU,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * @private\n */\nexport const UNSUPPORTED_CHAT_THREAD_TYPE = ['@thread.tacv2', '@thread.skype'];\n\n/**\n * @private\n */\nexport const TEAMS_LIMITATION_LEARN_MORE =\n  'https://learn.microsoft.com/en-us/azure/communication-services/concepts/join-teams-meeting#limitations-and-known-issues';\n\n/**\n * @remarks\n * This value is publicly documented in the ChatComposite API documentation.\n * Changing this value will require updating the API documentation.\n */\nexport const CHAT_CONTAINER_MIN_WIDTH_REM = 17.5;\n\n/**\n * @private\n */\nexport const SEND_BOX_UPLOADS_KEY_VALUE = 'send-box';\n"]}
         
     | 
    
        package/package.json
    CHANGED
    
    | 
         @@ -1,6 +1,6 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            {
         
     | 
| 
       2 
2 
     | 
    
         
             
              "name": "@azure/communication-react",
         
     | 
| 
       3 
     | 
    
         
            -
              "version": "1.18.0-alpha- 
     | 
| 
      
 3 
     | 
    
         
            +
              "version": "1.18.0-alpha-202407200014",
         
     | 
| 
       4 
4 
     | 
    
         
             
              "sideEffects": false,
         
     | 
| 
       5 
5 
     | 
    
         
             
              "description": "React library for building modern communication user experiences utilizing Azure Communication Services",
         
     | 
| 
       6 
6 
     | 
    
         
             
              "keywords": [
         
     | 
| 
         @@ -27,7 +27,7 @@ 
     | 
|
| 
       27 
27 
     | 
    
         
             
                "@azure/core-paging": "^1.5.0",
         
     | 
| 
       28 
28 
     | 
    
         
             
                "@azure/logger": "^1.0.4",
         
     | 
| 
       29 
29 
     | 
    
         
             
                "@fluentui/react-components": "^9.54.5",
         
     | 
| 
       30 
     | 
    
         
            -
                "@fluentui/react": "^8.119. 
     | 
| 
      
 30 
     | 
    
         
            +
                "@fluentui/react": "^8.119.2",
         
     | 
| 
       31 
31 
     | 
    
         
             
                "@fluentui/react-file-type-icons": "8.11.18",
         
     | 
| 
       32 
32 
     | 
    
         
             
                "@fluentui/react-hooks": "^8.8.10",
         
     | 
| 
       33 
33 
     | 
    
         
             
                "@fluentui/react-icons": "^2.0.249",
         
     | 
| 
         @@ -35,9 +35,9 @@ 
     | 
|
| 
       35 
35 
     | 
    
         
             
                "@fluentui-contrib/react-chat": "0.1.10",
         
     | 
| 
       36 
36 
     | 
    
         
             
                "@griffel/react": "^1.5.24",
         
     | 
| 
       37 
37 
     | 
    
         
             
                "copy-to-clipboard": "^3.3.1",
         
     | 
| 
       38 
     | 
    
         
            -
                "dompurify": "^3.1. 
     | 
| 
      
 38 
     | 
    
         
            +
                "dompurify": "^3.1.6",
         
     | 
| 
       39 
39 
     | 
    
         
             
                "events": "^3.3.0",
         
     | 
| 
       40 
     | 
    
         
            -
                "html-react-parser": "^5.1. 
     | 
| 
      
 40 
     | 
    
         
            +
                "html-react-parser": "^5.1.12",
         
     | 
| 
       41 
41 
     | 
    
         
             
                "immer": "10.1.1",
         
     | 
| 
       42 
42 
     | 
    
         
             
                "libphonenumber-js": "^1.11.4",
         
     | 
| 
       43 
43 
     | 
    
         
             
                "memoize-one": "^5.2.1",
         
     | 
| 
         @@ -45,11 +45,11 @@ 
     | 
|
| 
       45 
45 
     | 
    
         
             
                "react-linkify": "^1.0.0-alpha",
         
     | 
| 
       46 
46 
     | 
    
         
             
                "react-use-draggable-scroll": "^0.4.7",
         
     | 
| 
       47 
47 
     | 
    
         
             
                "reselect": "^4.0.0",
         
     | 
| 
       48 
     | 
    
         
            -
                "roosterjs-content-model-api": "^9. 
     | 
| 
       49 
     | 
    
         
            -
                "roosterjs-content-model-core": "^9. 
     | 
| 
       50 
     | 
    
         
            -
                "roosterjs-content-model-dom": "^9. 
     | 
| 
       51 
     | 
    
         
            -
                "roosterjs-content-model-plugins": "^9. 
     | 
| 
       52 
     | 
    
         
            -
                "roosterjs-content-model-types": "^9. 
     | 
| 
      
 48 
     | 
    
         
            +
                "roosterjs-content-model-api": "^9.8.1",
         
     | 
| 
      
 49 
     | 
    
         
            +
                "roosterjs-content-model-core": "^9.8.1",
         
     | 
| 
      
 50 
     | 
    
         
            +
                "roosterjs-content-model-dom": "^9.8.1",
         
     | 
| 
      
 51 
     | 
    
         
            +
                "roosterjs-content-model-plugins": "^9.8.1",
         
     | 
| 
      
 52 
     | 
    
         
            +
                "roosterjs-content-model-types": "^9.8.1",
         
     | 
| 
       53 
53 
     | 
    
         
             
                "textarea-caret-ts": "^4.1.1",
         
     | 
| 
       54 
54 
     | 
    
         
             
                "use-debounce": "^10.0.1",
         
     | 
| 
       55 
55 
     | 
    
         
             
                "uuid": "^9.0.0"
         
     | 
    
        package/dist/dist-cjs/communication-react/ChatMessageComponentAsRichTextEditBox-ChK7xe6Z.js.map
    DELETED
    
    | 
         @@ -1 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            {"version":3,"file":"ChatMessageComponentAsRichTextEditBox-ChK7xe6Z.js","sources":["../../../../react-components/src/components/ChatMessage/MyMessageComponents/ChatMessageComponentAsRichTextEditBox.tsx"],"sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { mergeStyles, Stack } from '@fluentui/react';\nimport { ChatMyMessage } from '@fluentui-contrib/react-chat';\nimport { mergeClasses } from '@fluentui/react-components';\nimport { _formatString } from '@internal/acs-ui-common';\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport { AttachmentMetadataInProgress } from '@internal/acs-ui-common';\nimport { useTheme } from '../../../theming';\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\n/* @conditional-compile-remove(file-sharing-acs) */\nimport { useReducer } from 'react';\nimport { editBoxWidthStyles, richTextEditBoxActionButtonIcon } from '../../styles/EditBox.styles';\nimport { InputBoxButton } from '../../InputBoxButton';\nimport { MessageThreadStrings } from '../../MessageThread';\nimport { useChatMyMessageStyles } from '../../styles/MessageThread.styles';\nimport { ChatMessage } from '../../../types';\nimport { _AttachmentUploadCards } from '../../Attachment/AttachmentUploadCards';\n/* @conditional-compile-remove(file-sharing-acs) */\nimport { AttachmentMetadata } from '@internal/acs-ui-common';\nimport { useChatMessageRichTextEditContainerStyles } from '../../styles/ChatMessageComponent.styles';\nimport { MAXIMUM_LENGTH_OF_MESSAGE } from '../../utils/SendBoxUtils';\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport {\n  cancelInlineImageUpload,\n  hasIncompleteAttachmentUploads,\n  insertImagesToContentString,\n  isAttachmentUploadCompleted,\n  removeBrokenImageContent\n} from '../../utils/SendBoxUtils';\nimport {\n  getMessageState,\n  onRenderCancelIcon,\n  onRenderSubmitIcon\n} from '../../utils/ChatMessageComponentAsEditBoxUtils';\n/* @conditional-compile-remove(file-sharing-acs) */\nimport {\n  attachmentMetadataReducer,\n  getMessageWithAttachmentMetadata,\n  doesMessageContainMultipleAttachments\n} from '../../utils/ChatMessageComponentAsEditBoxUtils';\nimport { RichTextEditorComponentRef } from '../../RichTextEditor/RichTextEditor';\nimport { RichTextInputBoxComponent } from '../../RichTextEditor/RichTextInputBoxComponent';\nimport { editBoxRichTextEditorStyle, richTextActionButtonsStyle } from '../../styles/RichTextEditor.styles';\nimport { RichTextSendBoxErrors } from '../../RichTextEditor/RichTextSendBoxErrors';\nimport { useLocale } from '../../../localization';\n/* @conditional-compile-remove(file-sharing-acs) */\nimport { FluentV9ThemeProvider } from '../../../theming/FluentV9ThemeProvider';\n/* @conditional-compile-remove(file-sharing-acs) */\nimport { attachmentUploadCardsStyles } from '../../styles/SendBox.styles';\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport { SendBoxErrorBarError } from '../../SendBoxErrorBar';\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport { BROKEN_IMAGE_SVG_DATA } from '../../styles/Common.style';\n\n/** @private */\nexport type ChatMessageComponentAsRichTextEditBoxProps = {\n  onCancel?: (messageId: string) => void;\n  onSubmit: (\n    text: string,\n    /* @conditional-compile-remove(file-sharing-acs) */\n    attachmentMetadata?: AttachmentMetadata[]\n  ) => void;\n  message: ChatMessage;\n  strings: MessageThreadStrings;\n  /* @conditional-compile-remove(rich-text-editor-image-upload) */\n  onPaste?: (event: { content: DocumentFragment }) => void;\n  /* @conditional-compile-remove(rich-text-editor-image-upload) */\n  onCancelInlineImageUpload?: (imageId: string) => void;\n  /* @conditional-compile-remove(rich-text-editor-image-upload) */\n  onUploadInlineImage?: (imageUrl: string, imageFileName: string) => void;\n  /* @conditional-compile-remove(rich-text-editor-image-upload) */\n  imageUploadsInProgress?: AttachmentMetadataInProgress[];\n};\n\n/**\n * @private\n */\nexport const ChatMessageComponentAsRichTextEditBox = (\n  props: ChatMessageComponentAsRichTextEditBoxProps\n): JSX.Element => {\n  const {\n    onCancel,\n    onSubmit,\n    strings,\n    message,\n    /* @conditional-compile-remove(rich-text-editor-image-upload) */\n    onPaste,\n    /* @conditional-compile-remove(rich-text-editor-image-upload) */\n    onUploadInlineImage,\n    /* @conditional-compile-remove(rich-text-editor-image-upload) */\n    imageUploadsInProgress,\n    /* @conditional-compile-remove(rich-text-editor-image-upload) */\n    onCancelInlineImageUpload\n  } = props;\n\n  const initialContent = useMemo(() => {\n    /* @conditional-compile-remove(rich-text-editor-image-upload) */\n    const content = message.content;\n    /* @conditional-compile-remove(rich-text-editor-image-upload) */\n    const document = new DOMParser().parseFromString(content ?? '', 'text/html');\n    // The broken image element is a div element with all the attributes of the original image element.\n    // We need to convert it to a img element so the Rooster knows how to render it.\n    // And we need to copy over all the attributes such as id, width, etc.\n    // which is needed for sending the message with the images correctly.\n    /* @conditional-compile-remove(rich-text-editor-image-upload) */\n    document.querySelectorAll('.broken-image-wrapper').forEach((brokenImage) => {\n      const imageElement = document.createElement('img');\n      const attributes = brokenImage.attributes;\n      for (const attribute of attributes) {\n        imageElement.setAttribute(attribute.name, attribute.value);\n      }\n\n      imageElement.src = BROKEN_IMAGE_SVG_DATA;\n      brokenImage.parentElement?.replaceChild(imageElement, brokenImage);\n    });\n    /* @conditional-compile-remove(rich-text-editor-image-upload) */\n    return document.body.innerHTML;\n    return message.content;\n  }, [message]);\n\n  const [textValue, setTextValue] = useState<string>(initialContent || '');\n\n  /* @conditional-compile-remove(file-sharing-acs) */\n  const [attachmentMetadata, handleAttachmentAction] = useReducer(\n    attachmentMetadataReducer,\n    getMessageWithAttachmentMetadata(message) ?? []\n  );\n\n  /* @conditional-compile-remove(rich-text-editor-image-upload) */\n  const [attachmentUploadsPendingError, setAttachmentUploadsPendingError] = useState<SendBoxErrorBarError | undefined>(\n    undefined\n  );\n  const editTextFieldRef = React.useRef<RichTextEditorComponentRef>(null);\n  const theme = useTheme();\n  const messageState = useMemo(() => {\n    return getMessageState(textValue, /* @conditional-compile-remove(file-sharing-acs) */ attachmentMetadata ?? []);\n  }, [/* @conditional-compile-remove(file-sharing-acs) */ attachmentMetadata, textValue]);\n\n  const submitEnabled = messageState === 'OK';\n\n  const editContainerStyles = useChatMessageRichTextEditContainerStyles();\n  const chatMyMessageStyles = useChatMyMessageStyles();\n  const locale = useLocale().strings;\n\n  const setText = useCallback((newValue?: string): void => {\n    setTextValue(newValue ?? '');\n  }, []);\n\n  useEffect(() => {\n    editTextFieldRef.current?.focus();\n  }, []);\n\n  const textTooLongMessage = useMemo(() => {\n    return messageState === 'too long'\n      ? _formatString(strings.editBoxTextLimit, { limitNumber: `${MAXIMUM_LENGTH_OF_MESSAGE}` })\n      : undefined;\n  }, [messageState, strings.editBoxTextLimit]);\n\n  const iconClassName = useCallback(\n    (isHover: boolean) => {\n      const color = isHover ? theme.palette.accent : theme.palette.neutralSecondary;\n      return mergeStyles(richTextEditBoxActionButtonIcon, { color });\n    },\n    [theme.palette.accent, theme.palette.neutralSecondary]\n  );\n\n  const onRenderThemedCancelIcon = useCallback(\n    (isHover: boolean) => {\n      return onRenderCancelIcon(iconClassName(isHover));\n    },\n    [iconClassName]\n  );\n\n  const onRenderThemedSubmitIcon = useCallback(\n    (isHover: boolean) => {\n      return onRenderSubmitIcon(iconClassName(isHover));\n    },\n    [iconClassName]\n  );\n\n  /* @conditional-compile-remove(file-sharing-acs) */\n  const hasMultipleAttachments = useMemo(() => {\n    return doesMessageContainMultipleAttachments(message);\n  }, [message]);\n\n  const onSubmitHandler = useCallback((): void => {\n    if (!submitEnabled) {\n      return;\n    }\n    // Don't send message until all attachments have been uploaded successfully\n    /* @conditional-compile-remove(rich-text-editor-image-upload) */\n    setAttachmentUploadsPendingError(undefined);\n\n    /* @conditional-compile-remove(rich-text-editor-image-upload) */\n    if (hasIncompleteAttachmentUploads(imageUploadsInProgress)) {\n      setAttachmentUploadsPendingError({ message: strings.attachmentUploadsPendingError, timestamp: Date.now() });\n      return;\n    }\n\n    let content = textValue;\n    /* @conditional-compile-remove(rich-text-editor-image-upload) */\n    content = removeBrokenImageContent(content);\n    /* @conditional-compile-remove(rich-text-editor-image-upload) */\n    if (isAttachmentUploadCompleted(imageUploadsInProgress)) {\n      insertImagesToContentString(textValue, imageUploadsInProgress, (content) => {\n        onSubmit(content, /* @conditional-compile-remove(file-sharing-acs) */ attachmentMetadata || []);\n      });\n      return;\n    }\n    // it's very important to pass an empty attachment here\n    // so when user removes all attachments, UI can reflect it instantly\n    // if you set it to undefined, the attachments pre-edited would still be there\n    // until edit message event is received\n    onSubmit(content, /* @conditional-compile-remove(file-sharing-acs) */ attachmentMetadata || []);\n  }, [\n    submitEnabled,\n    /* @conditional-compile-remove(rich-text-editor-image-upload) */\n    imageUploadsInProgress,\n    textValue,\n    /* @conditional-compile-remove(rich-text-editor-image-upload) */\n    strings.attachmentUploadsPendingError,\n    onSubmit,\n    /* @conditional-compile-remove(file-sharing-acs) */\n    attachmentMetadata\n  ]);\n\n  const actionButtons = useMemo(() => {\n    return (\n      <Stack horizontal>\n        <InputBoxButton\n          className={richTextActionButtonsStyle}\n          ariaLabel={strings.editBoxCancelButton}\n          tooltipContent={strings.editBoxCancelButton}\n          onRenderIcon={onRenderThemedCancelIcon}\n          onClick={() => {\n            onCancel && onCancel(message.messageId);\n          }}\n          id={'dismissIconWrapper'}\n          data-testId={strings.editBoxCancelButton}\n        />\n        <InputBoxButton\n          className={richTextActionButtonsStyle}\n          ariaLabel={strings.editBoxSubmitButton}\n          tooltipContent={strings.editBoxSubmitButton}\n          onRenderIcon={onRenderThemedSubmitIcon}\n          onClick={(e) => {\n            onSubmitHandler();\n            e.stopPropagation();\n          }}\n          id={'submitIconWrapper'}\n          data-testId={strings.editBoxSubmitButton}\n        />\n      </Stack>\n    );\n  }, [\n    message.messageId,\n    onCancel,\n    onRenderThemedCancelIcon,\n    onRenderThemedSubmitIcon,\n    strings.editBoxCancelButton,\n    strings.editBoxSubmitButton,\n    onSubmitHandler\n  ]);\n  const richTextLocaleStrings = useMemo(() => {\n    /* @conditional-compile-remove(rich-text-editor) */\n    return { ...locale.richTextSendBox, ...strings };\n    return locale.sendBox;\n  }, [\n    /* @conditional-compile-remove(rich-text-editor) */ locale.richTextSendBox,\n    /* @conditional-compile-remove(rich-text-editor) */ strings,\n    locale.sendBox\n  ]);\n\n  /* @conditional-compile-remove(file-sharing-acs) */\n  const onCancelAttachmentUpload = useCallback((attachmentId: string) => {\n    // edit box only capable of removing attachments\n    // we need to expand attachment actions\n    // if we want to support more actions e.g. add\n    handleAttachmentAction({ type: 'remove', id: attachmentId });\n  }, []);\n\n  /* @conditional-compile-remove(file-sharing-acs) */\n  const onRenderAttachmentUploads = useCallback(() => {\n    return (\n      <Stack className={attachmentUploadCardsStyles}>\n        <FluentV9ThemeProvider v8Theme={theme}>\n          <_AttachmentUploadCards\n            attachments={attachmentMetadata}\n            onCancelAttachmentUpload={onCancelAttachmentUpload}\n          />\n        </FluentV9ThemeProvider>\n      </Stack>\n    );\n  }, [attachmentMetadata, onCancelAttachmentUpload, theme]);\n\n  const onChangeHandler = useCallback(\n    (\n      content: string | undefined,\n      /* @conditional-compile-remove(rich-text-editor-image-upload) */ imageSrcArray?: Array<string>\n    ) => {\n      /* @conditional-compile-remove(rich-text-editor-image-upload) */\n      cancelInlineImageUpload(imageSrcArray, imageUploadsInProgress, onCancelInlineImageUpload);\n      setText(content);\n    },\n    [\n      setText,\n      /* @conditional-compile-remove(rich-text-editor-image-upload) */ imageUploadsInProgress,\n      /* @conditional-compile-remove(rich-text-editor-image-upload) */ onCancelInlineImageUpload\n    ]\n  );\n\n  const getContent = (): JSX.Element => {\n    return (\n      <Stack className={mergeStyles(editBoxWidthStyles)}>\n        <RichTextSendBoxErrors\n          textTooLongMessage={textTooLongMessage}\n          systemMessage={message.failureReason}\n          /* @conditional-compile-remove(rich-text-editor-image-upload) */ attachmentUploadsPendingError={\n            attachmentUploadsPendingError\n          }\n        />\n        <RichTextInputBoxComponent\n          placeholderText={strings.editBoxPlaceholderText}\n          onChange={onChangeHandler}\n          editorComponentRef={editTextFieldRef}\n          initialContent={initialContent}\n          strings={richTextLocaleStrings}\n          disabled={false}\n          actionComponents={actionButtons}\n          richTextEditorStyleProps={editBoxRichTextEditorStyle}\n          isHorizontalLayoutDisabled={true}\n          /* @conditional-compile-remove(file-sharing-acs) */\n          onRenderAttachmentUploads={onRenderAttachmentUploads}\n          /* @conditional-compile-remove(rich-text-editor-image-upload) */\n          onPaste={onPaste}\n          /* @conditional-compile-remove(rich-text-editor-image-upload) */\n          onUploadInlineImage={onUploadInlineImage}\n        />\n      </Stack>\n    );\n  };\n\n  const attached = message.attached === true ? 'center' : message.attached === 'bottom' ? 'bottom' : 'top';\n  return (\n    <ChatMyMessage\n      attached={attached}\n      root={{\n        className: mergeClasses(\n          chatMyMessageStyles.root,\n          /* @conditional-compile-remove(file-sharing-acs) */\n          hasMultipleAttachments ? chatMyMessageStyles.multipleAttachmentsInEditing : undefined\n        )\n      }}\n      body={{\n        className: mergeClasses(\n          editContainerStyles.body,\n          attached !== 'top' ? editContainerStyles.bodyAttached : undefined\n        )\n      }}\n    >\n      {getContent()}\n    </ChatMyMessage>\n  );\n};\n\nexport default ChatMessageComponentAsRichTextEditBox;\n"],"names":["useMemo","BROKEN_IMAGE_SVG_DATA","useState","useReducer","attachmentMetadataReducer","getMessageWithAttachmentMetadata","useTheme","getMessageState","useChatMessageRichTextEditContainerStyles","useChatMyMessageStyles","useLocale","useCallback","useEffect","_formatString","MAXIMUM_LENGTH_OF_MESSAGE","mergeStyles","richTextEditBoxActionButtonIcon","onRenderCancelIcon","onRenderSubmitIcon","doesMessageContainMultipleAttachments","hasIncompleteAttachmentUploads","removeBrokenImageContent","isAttachmentUploadCompleted","insertImagesToContentString","Stack","InputBoxButton","richTextActionButtonsStyle","attachmentUploadCardsStyles","FluentV9ThemeProvider","_AttachmentUploadCards","cancelInlineImageUpload","editBoxWidthStyles","RichTextSendBoxErrors","RichTextInputBoxComponent","editBoxRichTextEditorStyle","ChatMyMessage","mergeClasses"],"mappings":"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"}
         
     |