@azure/communication-react 1.18.0-alpha-202407200014 → 1.18.0-alpha-202407262302
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/communication-react.d.ts +33 -94
 - package/dist/dist-cjs/communication-react/{ChatMessageComponentAsRichTextEditBox-D4ctXnw1.js → ChatMessageComponentAsRichTextEditBox-CmXCpkwp.js} +9 -58
 - package/dist/dist-cjs/communication-react/ChatMessageComponentAsRichTextEditBox-CmXCpkwp.js.map +1 -0
 - package/dist/dist-cjs/communication-react/{RichTextSendBoxWrapper-F6eqVXer.js → RichTextSendBoxWrapper-DI4k0qyf.js} +2 -2
 - package/dist/dist-cjs/communication-react/{RichTextSendBoxWrapper-F6eqVXer.js.map → RichTextSendBoxWrapper-DI4k0qyf.js.map} +1 -1
 - package/dist/dist-cjs/communication-react/{index-BJO_NOTU.js → index-BSczaURy.js} +479 -831
 - package/dist/dist-cjs/communication-react/index-BSczaURy.js.map +1 -0
 - package/dist/dist-cjs/communication-react/index.js +1 -1
 - package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js +1 -1
 - package/dist/dist-esm/acs-ui-common/src/telemetryVersion.js.map +1 -1
 - package/dist/dist-esm/calling-component-bindings/src/baseSelectors.d.ts +1 -1
 - package/dist/dist-esm/calling-component-bindings/src/baseSelectors.js +3 -3
 - package/dist/dist-esm/calling-component-bindings/src/baseSelectors.js.map +1 -1
 - package/dist/dist-esm/calling-component-bindings/src/notificationStackSelector.js +2 -2
 - package/dist/dist-esm/calling-component-bindings/src/notificationStackSelector.js.map +1 -1
 - package/dist/dist-esm/calling-stateful-client/src/CallAgentDeclarative.d.ts +3 -3
 - package/dist/dist-esm/calling-stateful-client/src/CallAgentDeclarative.js.map +1 -1
 - package/dist/dist-esm/calling-stateful-client/src/CallAgentDeclarativeCommon.d.ts +1 -1
 - package/dist/dist-esm/calling-stateful-client/src/CallAgentDeclarativeCommon.js +7 -15
 - package/dist/dist-esm/calling-stateful-client/src/CallAgentDeclarativeCommon.js.map +1 -1
 - package/dist/dist-esm/calling-stateful-client/src/CallClientState.d.ts +1 -3
 - package/dist/dist-esm/calling-stateful-client/src/CallClientState.js.map +1 -1
 - package/dist/dist-esm/calling-stateful-client/src/CallContext.js +2 -2
 - package/dist/dist-esm/calling-stateful-client/src/CallContext.js.map +1 -1
 - package/dist/dist-esm/calling-stateful-client/src/Converter.js +1 -1
 - package/dist/dist-esm/calling-stateful-client/src/Converter.js.map +1 -1
 - package/dist/dist-esm/calling-stateful-client/src/IncomingCallDeclarative.d.ts +8 -2
 - package/dist/dist-esm/calling-stateful-client/src/IncomingCallDeclarative.js.map +1 -1
 - package/dist/dist-esm/calling-stateful-client/src/TeamsCallAgentDeclarative.d.ts +2 -14
 - package/dist/dist-esm/calling-stateful-client/src/TeamsCallAgentDeclarative.js.map +1 -1
 - package/dist/dist-esm/calling-stateful-client/src/TypeGuards.d.ts +1 -9
 - package/dist/dist-esm/calling-stateful-client/src/TypeGuards.js +0 -16
 - package/dist/dist-esm/calling-stateful-client/src/TypeGuards.js.map +1 -1
 - package/dist/dist-esm/calling-stateful-client/src/index-public.d.ts +1 -1
 - package/dist/dist-esm/calling-stateful-client/src/index-public.js.map +1 -1
 - package/dist/dist-esm/chat-stateful-client/src/ChatClientState.d.ts +3 -5
 - package/dist/dist-esm/chat-stateful-client/src/ChatClientState.js.map +1 -1
 - package/dist/dist-esm/communication-react/src/index.d.ts +1 -1
 - package/dist/dist-esm/communication-react/src/index.js.map +1 -1
 - package/dist/dist-esm/react-components/src/components/Attachment/AttachmentCard.js +8 -14
 - package/dist/dist-esm/react-components/src/components/Attachment/AttachmentCard.js.map +1 -1
 - package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageComponentWrapper.d.ts +2 -8
 - package/dist/dist-esm/react-components/src/components/ChatMessage/ChatMessageComponentWrapper.js.map +1 -1
 - package/dist/dist-esm/react-components/src/components/ChatMessage/MyMessageComponents/ChatMessageComponentAsEditBoxPicker.d.ts +4 -6
 - package/dist/dist-esm/react-components/src/components/ChatMessage/MyMessageComponents/ChatMessageComponentAsEditBoxPicker.js +12 -2
 - package/dist/dist-esm/react-components/src/components/ChatMessage/MyMessageComponents/ChatMessageComponentAsEditBoxPicker.js.map +1 -1
 - package/dist/dist-esm/react-components/src/components/ChatMessage/MyMessageComponents/ChatMessageComponentAsRichTextEditBox.d.ts +2 -2
 - package/dist/dist-esm/react-components/src/components/ChatMessage/MyMessageComponents/ChatMessageComponentAsRichTextEditBox.js +8 -60
 - package/dist/dist-esm/react-components/src/components/ChatMessage/MyMessageComponents/ChatMessageComponentAsRichTextEditBox.js.map +1 -1
 - package/dist/dist-esm/react-components/src/components/ChatMessage/MyMessageComponents/ChatMyMessageComponent.d.ts +6 -8
 - package/dist/dist-esm/react-components/src/components/ChatMessage/MyMessageComponents/ChatMyMessageComponent.js +4 -18
 - package/dist/dist-esm/react-components/src/components/ChatMessage/MyMessageComponents/ChatMyMessageComponent.js.map +1 -1
 - package/dist/dist-esm/react-components/src/components/ChatMessage/MyMessageComponents/FluentChatMyMessageComponent.js +3 -27
 - package/dist/dist-esm/react-components/src/components/ChatMessage/MyMessageComponents/FluentChatMyMessageComponent.js.map +1 -1
 - package/dist/dist-esm/react-components/src/components/MeetingConferencePhoneInfo.d.ts +8 -8
 - package/dist/dist-esm/react-components/src/components/MeetingConferencePhoneInfo.js +4 -4
 - package/dist/dist-esm/react-components/src/components/MeetingConferencePhoneInfo.js.map +1 -1
 - package/dist/dist-esm/react-components/src/components/MessageThread.d.ts +15 -9
 - package/dist/dist-esm/react-components/src/components/MessageThread.js +1 -10
 - package/dist/dist-esm/react-components/src/components/MessageThread.js.map +1 -1
 - package/dist/dist-esm/react-components/src/components/RichTextEditor/Plugins/CopyPastePlugin.js +1 -0
 - package/dist/dist-esm/react-components/src/components/RichTextEditor/Plugins/CopyPastePlugin.js.map +1 -1
 - package/dist/dist-esm/react-components/src/components/RichTextEditor/RichTextEditor.js +22 -28
 - package/dist/dist-esm/react-components/src/components/RichTextEditor/RichTextEditor.js.map +1 -1
 - package/dist/dist-esm/react-components/src/components/RichTextEditor/RichTextSendBox.d.ts +0 -49
 - package/dist/dist-esm/react-components/src/components/RichTextEditor/RichTextSendBox.js +18 -37
 - package/dist/dist-esm/react-components/src/components/RichTextEditor/RichTextSendBox.js.map +1 -1
 - package/dist/dist-esm/react-components/src/components/RichTextEditor/Toolbar/RichTextToolbar.js +2 -20
 - package/dist/dist-esm/react-components/src/components/RichTextEditor/Toolbar/RichTextToolbar.js.map +1 -1
 - package/dist/dist-esm/react-components/src/components/index.d.ts +1 -2
 - package/dist/dist-esm/react-components/src/components/index.js.map +1 -1
 - package/dist/dist-esm/react-components/src/components/styles/AttachmentCard.styles.d.ts +2 -2
 - package/dist/dist-esm/react-components/src/components/styles/AttachmentCard.styles.js +17 -15
 - package/dist/dist-esm/react-components/src/components/styles/AttachmentCard.styles.js.map +1 -1
 - package/dist/dist-esm/react-components/src/components/styles/Common.style.d.ts +1 -1
 - package/dist/dist-esm/react-components/src/components/styles/Common.style.js +1 -2
 - package/dist/dist-esm/react-components/src/components/styles/Common.style.js.map +1 -1
 - package/dist/dist-esm/react-components/src/components/styles/MessageThread.styles.js +2 -5
 - package/dist/dist-esm/react-components/src/components/styles/MessageThread.styles.js.map +1 -1
 - package/dist/dist-esm/react-components/src/components/styles/RichTextEditor.styles.js +3 -3
 - package/dist/dist-esm/react-components/src/components/styles/RichTextEditor.styles.js.map +1 -1
 - package/dist/dist-esm/react-components/src/components/utils/RichTextEditorUtils.d.ts +5 -1
 - package/dist/dist-esm/react-components/src/components/utils/RichTextEditorUtils.js +21 -0
 - package/dist/dist-esm/react-components/src/components/utils/RichTextEditorUtils.js.map +1 -1
 - package/dist/dist-esm/react-components/src/components/utils/SendBoxUtils.d.ts +3 -15
 - package/dist/dist-esm/react-components/src/components/utils/SendBoxUtils.js +14 -67
 - package/dist/dist-esm/react-components/src/components/utils/SendBoxUtils.js.map +1 -1
 - package/dist/dist-esm/react-components/src/localization/LocalizationProvider.d.ts +1 -1
 - package/dist/dist-esm/react-components/src/localization/LocalizationProvider.js.map +1 -1
 - package/dist/dist-esm/react-components/src/localization/locales/ar-SA/strings.json +64 -102
 - package/dist/dist-esm/react-components/src/localization/locales/cs-CZ/strings.json +62 -100
 - package/dist/dist-esm/react-components/src/localization/locales/de-DE/strings.json +62 -100
 - package/dist/dist-esm/react-components/src/localization/locales/en-GB/strings.json +62 -100
 - package/dist/dist-esm/react-components/src/localization/locales/en-US/strings.json +3 -9
 - package/dist/dist-esm/react-components/src/localization/locales/es-ES/strings.json +62 -100
 - package/dist/dist-esm/react-components/src/localization/locales/fi-FI/strings.json +62 -100
 - package/dist/dist-esm/react-components/src/localization/locales/fr-FR/strings.json +65 -103
 - package/dist/dist-esm/react-components/src/localization/locales/he-IL/strings.json +62 -100
 - package/dist/dist-esm/react-components/src/localization/locales/it-IT/strings.json +62 -100
 - package/dist/dist-esm/react-components/src/localization/locales/ja-JP/strings.json +64 -102
 - package/dist/dist-esm/react-components/src/localization/locales/ko-KR/strings.json +69 -107
 - package/dist/dist-esm/react-components/src/localization/locales/nb-NO/strings.json +62 -100
 - package/dist/dist-esm/react-components/src/localization/locales/nl-NL/strings.json +68 -106
 - package/dist/dist-esm/react-components/src/localization/locales/pl-PL/strings.json +67 -105
 - package/dist/dist-esm/react-components/src/localization/locales/pt-BR/strings.json +65 -103
 - package/dist/dist-esm/react-components/src/localization/locales/ru-RU/strings.json +63 -101
 - package/dist/dist-esm/react-components/src/localization/locales/sv-SE/strings.json +62 -100
 - package/dist/dist-esm/react-components/src/localization/locales/tr-TR/strings.json +63 -101
 - package/dist/dist-esm/react-components/src/localization/locales/zh-CN/strings.json +64 -102
 - package/dist/dist-esm/react-components/src/localization/locales/zh-TW/strings.json +63 -101
 - package/dist/dist-esm/react-composites/src/composites/CallComposite/components/NetworkReconnectTile.js +4 -4
 - package/dist/dist-esm/react-composites/src/composites/CallComposite/components/NetworkReconnectTile.js.map +1 -1
 - package/dist/dist-esm/react-composites/src/composites/CallComposite/components/SidePane/useMeetingPhoneInfo.js +1 -1
 - package/dist/dist-esm/react-composites/src/composites/CallComposite/components/SidePane/useMeetingPhoneInfo.js.map +1 -1
 - package/dist/dist-esm/react-composites/src/composites/CallComposite/selectors/baseSelectors.js +1 -1
 - package/dist/dist-esm/react-composites/src/composites/CallComposite/selectors/baseSelectors.js.map +1 -1
 - package/dist/dist-esm/react-composites/src/composites/ChatComposite/ChatScreen.js +31 -66
 - package/dist/dist-esm/react-composites/src/composites/ChatComposite/ChatScreen.js.map +1 -1
 - package/dist/dist-esm/react-composites/src/composites/ChatComposite/ImageUpload/ImageUploadUtils.d.ts +1 -33
 - package/dist/dist-esm/react-composites/src/composites/ChatComposite/ImageUpload/ImageUploadUtils.js +6 -198
 - package/dist/dist-esm/react-composites/src/composites/ChatComposite/ImageUpload/ImageUploadUtils.js.map +1 -1
 - package/dist/dist-esm/react-composites/src/composites/ChatComposite/ImageUpload/useImageUpload.d.ts +12 -0
 - package/dist/dist-esm/react-composites/src/composites/ChatComposite/ImageUpload/useImageUpload.js +115 -0
 - package/dist/dist-esm/react-composites/src/composites/ChatComposite/ImageUpload/useImageUpload.js.map +1 -0
 - package/dist/dist-esm/react-composites/src/composites/ChatComposite/file-sharing/AttachmentUpload.d.ts +7 -7
 - package/dist/dist-esm/react-composites/src/composites/ChatComposite/file-sharing/AttachmentUpload.js.map +1 -1
 - package/dist/dist-esm/react-composites/src/composites/common/ControlBar/CommonCallControlBar.js +10 -10
 - package/dist/dist-esm/react-composites/src/composites/common/ControlBar/CommonCallControlBar.js.map +1 -1
 - package/dist/dist-esm/react-composites/src/composites/common/MeetingPhoneInfoPaneContent.js +4 -4
 - package/dist/dist-esm/react-composites/src/composites/common/MeetingPhoneInfoPaneContent.js.map +1 -1
 - package/dist/dist-esm/react-composites/src/composites/common/SendBoxPicker.d.ts +5 -2
 - package/dist/dist-esm/react-composites/src/composites/common/SendBoxPicker.js.map +1 -1
 - package/dist/dist-esm/react-composites/src/composites/common/constants.d.ts +0 -4
 - package/dist/dist-esm/react-composites/src/composites/common/constants.js +0 -4
 - package/dist/dist-esm/react-composites/src/composites/common/constants.js.map +1 -1
 - package/dist/dist-esm/react-composites/src/composites/common/icons.d.ts +2 -6
 - package/dist/dist-esm/react-composites/src/composites/common/icons.js +1 -5
 - package/dist/dist-esm/react-composites/src/composites/common/icons.js.map +1 -1
 - package/dist/dist-esm/react-composites/src/composites/localization/locales/ar-SA/strings.json +5 -10
 - package/dist/dist-esm/react-composites/src/composites/localization/locales/cs-CZ/strings.json +1 -6
 - package/dist/dist-esm/react-composites/src/composites/localization/locales/de-DE/strings.json +1 -6
 - package/dist/dist-esm/react-composites/src/composites/localization/locales/en-GB/strings.json +1 -6
 - package/dist/dist-esm/react-composites/src/composites/localization/locales/es-ES/strings.json +1 -6
 - package/dist/dist-esm/react-composites/src/composites/localization/locales/fi-FI/strings.json +5 -10
 - package/dist/dist-esm/react-composites/src/composites/localization/locales/fr-FR/strings.json +5 -10
 - package/dist/dist-esm/react-composites/src/composites/localization/locales/he-IL/strings.json +5 -10
 - package/dist/dist-esm/react-composites/src/composites/localization/locales/it-IT/strings.json +5 -10
 - package/dist/dist-esm/react-composites/src/composites/localization/locales/ja-JP/strings.json +1 -6
 - package/dist/dist-esm/react-composites/src/composites/localization/locales/ko-KR/strings.json +5 -10
 - package/dist/dist-esm/react-composites/src/composites/localization/locales/nb-NO/strings.json +1 -6
 - package/dist/dist-esm/react-composites/src/composites/localization/locales/nl-NL/strings.json +1 -6
 - package/dist/dist-esm/react-composites/src/composites/localization/locales/pl-PL/strings.json +1 -6
 - package/dist/dist-esm/react-composites/src/composites/localization/locales/pt-BR/strings.json +5 -10
 - package/dist/dist-esm/react-composites/src/composites/localization/locales/ru-RU/strings.json +1 -6
 - package/dist/dist-esm/react-composites/src/composites/localization/locales/sv-SE/strings.json +5 -10
 - package/dist/dist-esm/react-composites/src/composites/localization/locales/tr-TR/strings.json +1 -6
 - package/dist/dist-esm/react-composites/src/composites/localization/locales/zh-CN/strings.json +5 -10
 - package/dist/dist-esm/react-composites/src/composites/localization/locales/zh-TW/strings.json +5 -10
 - package/package.json +14 -14
 - package/dist/dist-cjs/communication-react/ChatMessageComponentAsRichTextEditBox-D4ctXnw1.js.map +0 -1
 - package/dist/dist-cjs/communication-react/index-BJO_NOTU.js.map +0 -1
 - package/dist/dist-esm/calling-stateful-client/src/TeamsIncomingCallDeclarative.d.ts +0 -17
 - package/dist/dist-esm/calling-stateful-client/src/TeamsIncomingCallDeclarative.js +0 -49
 - package/dist/dist-esm/calling-stateful-client/src/TeamsIncomingCallDeclarative.js.map +0 -1
 - package/dist/dist-esm/react-composites/src/composites/ChatComposite/ImageUpload/ImageUploadReducer.d.ts +0 -49
 - package/dist/dist-esm/react-composites/src/composites/ChatComposite/ImageUpload/ImageUploadReducer.js +0 -48
 - package/dist/dist-esm/react-composites/src/composites/ChatComposite/ImageUpload/ImageUploadReducer.js.map +0 -1
 
    
        package/dist/dist-esm/react-composites/src/composites/ChatComposite/ImageUpload/useImageUpload.js
    ADDED
    
    | 
         @@ -0,0 +1,115 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            // Copyright (c) Microsoft Corporation.
         
     | 
| 
      
 2 
     | 
    
         
            +
            // Licensed under the MIT License.
         
     | 
| 
      
 3 
     | 
    
         
            +
            var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
         
     | 
| 
      
 4 
     | 
    
         
            +
                function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
         
     | 
| 
      
 5 
     | 
    
         
            +
                return new (P || (P = Promise))(function (resolve, reject) {
         
     | 
| 
      
 6 
     | 
    
         
            +
                    function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
         
     | 
| 
      
 7 
     | 
    
         
            +
                    function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
         
     | 
| 
      
 8 
     | 
    
         
            +
                    function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
         
     | 
| 
      
 9 
     | 
    
         
            +
                    step((generator = generator.apply(thisArg, _arguments || [])).next());
         
     | 
| 
      
 10 
     | 
    
         
            +
                });
         
     | 
| 
      
 11 
     | 
    
         
            +
            };
         
     | 
| 
      
 12 
     | 
    
         
            +
            /* @conditional-compile-remove(rich-text-editor-image-upload) */
         
     | 
| 
      
 13 
     | 
    
         
            +
            import { useCallback, useReducer } from 'react';
         
     | 
| 
      
 14 
     | 
    
         
            +
            /* @conditional-compile-remove(rich-text-editor-image-upload) */
         
     | 
| 
      
 15 
     | 
    
         
            +
            import { AttachmentUploadActionType, AttachmentUploadReducer } from '../file-sharing/AttachmentUpload';
         
     | 
| 
      
 16 
     | 
    
         
            +
            /* @conditional-compile-remove(rich-text-editor-image-upload) */
         
     | 
| 
      
 17 
     | 
    
         
            +
            import { useAdapter } from '../adapter/ChatAdapterProvider';
         
     | 
| 
      
 18 
     | 
    
         
            +
            /* @conditional-compile-remove(rich-text-editor-image-upload) */
         
     | 
| 
      
 19 
     | 
    
         
            +
            import { nanoid } from 'nanoid';
         
     | 
| 
      
 20 
     | 
    
         
            +
            /* @conditional-compile-remove(rich-text-editor-image-upload) */
         
     | 
| 
      
 21 
     | 
    
         
            +
            import { getInlineImageData } from './ImageUploadUtils';
         
     | 
| 
      
 22 
     | 
    
         
            +
            /* @conditional-compile-remove(rich-text-editor-image-upload) */
         
     | 
| 
      
 23 
     | 
    
         
            +
            /**
         
     | 
| 
      
 24 
     | 
    
         
            +
             * @private
         
     | 
| 
      
 25 
     | 
    
         
            +
             */
         
     | 
| 
      
 26 
     | 
    
         
            +
            export const useImageUpload = () => {
         
     | 
| 
      
 27 
     | 
    
         
            +
                const MAX_INLINE_IMAGE_UPLOAD_SIZE_MB = 20;
         
     | 
| 
      
 28 
     | 
    
         
            +
                const adapter = useAdapter();
         
     | 
| 
      
 29 
     | 
    
         
            +
                const [inlineImageUploads, handleInlineImageUploadAction] = useReducer(AttachmentUploadReducer, []);
         
     | 
| 
      
 30 
     | 
    
         
            +
                const inlineImageUploadHandler = useCallback((uploadTasks) => __awaiter(void 0, void 0, void 0, function* () {
         
     | 
| 
      
 31 
     | 
    
         
            +
                    var _a, _b, _c, _d, _e;
         
     | 
| 
      
 32 
     | 
    
         
            +
                    for (const task of uploadTasks) {
         
     | 
| 
      
 33 
     | 
    
         
            +
                        const uploadTask = task;
         
     | 
| 
      
 34 
     | 
    
         
            +
                        const image = uploadTask.image;
         
     | 
| 
      
 35 
     | 
    
         
            +
                        if (!image) {
         
     | 
| 
      
 36 
     | 
    
         
            +
                            uploadTask.notifyUploadFailed(`Image data for "${(_a = task.metadata) === null || _a === void 0 ? void 0 : _a.name}" is not provided.`);
         
     | 
| 
      
 37 
     | 
    
         
            +
                            continue;
         
     | 
| 
      
 38 
     | 
    
         
            +
                        }
         
     | 
| 
      
 39 
     | 
    
         
            +
                        if (image && image.size > MAX_INLINE_IMAGE_UPLOAD_SIZE_MB * 1024 * 1024) {
         
     | 
| 
      
 40 
     | 
    
         
            +
                            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.`);
         
     | 
| 
      
 41 
     | 
    
         
            +
                            continue;
         
     | 
| 
      
 42 
     | 
    
         
            +
                        }
         
     | 
| 
      
 43 
     | 
    
         
            +
                        const SUPPORTED_FILES = ['jpg', 'jpeg', 'png', 'gif', 'heic', 'webp'];
         
     | 
| 
      
 44 
     | 
    
         
            +
                        const imageExtension = (_d = (_c = task.metadata) === null || _c === void 0 ? void 0 : _c.name.split('.').pop()) !== null && _d !== void 0 ? _d : '';
         
     | 
| 
      
 45 
     | 
    
         
            +
                        if (!SUPPORTED_FILES.includes(imageExtension)) {
         
     | 
| 
      
 46 
     | 
    
         
            +
                            uploadTask.notifyUploadFailed(`Uploading ".${imageExtension}" image is not allowed.`);
         
     | 
| 
      
 47 
     | 
    
         
            +
                            continue;
         
     | 
| 
      
 48 
     | 
    
         
            +
                        }
         
     | 
| 
      
 49 
     | 
    
         
            +
                        try {
         
     | 
| 
      
 50 
     | 
    
         
            +
                            const response = yield adapter.uploadImage(image, (_e = task.metadata) === null || _e === void 0 ? void 0 : _e.name);
         
     | 
| 
      
 51 
     | 
    
         
            +
                            uploadTask.notifyUploadCompleted(response.id, task.metadata.url || '');
         
     | 
| 
      
 52 
     | 
    
         
            +
                        }
         
     | 
| 
      
 53 
     | 
    
         
            +
                        catch (error) {
         
     | 
| 
      
 54 
     | 
    
         
            +
                            console.error(error);
         
     | 
| 
      
 55 
     | 
    
         
            +
                            uploadTask.notifyUploadFailed('Unable to upload inline image. Please try again later.');
         
     | 
| 
      
 56 
     | 
    
         
            +
                        }
         
     | 
| 
      
 57 
     | 
    
         
            +
                    }
         
     | 
| 
      
 58 
     | 
    
         
            +
                }), [adapter]);
         
     | 
| 
      
 59 
     | 
    
         
            +
                const onUploadInlineImage = useCallback((image, fileName) => __awaiter(void 0, void 0, void 0, function* () {
         
     | 
| 
      
 60 
     | 
    
         
            +
                    if (!image) {
         
     | 
| 
      
 61 
     | 
    
         
            +
                        return;
         
     | 
| 
      
 62 
     | 
    
         
            +
                    }
         
     | 
| 
      
 63 
     | 
    
         
            +
                    const imageData = yield getInlineImageData(image);
         
     | 
| 
      
 64 
     | 
    
         
            +
                    if (!imageData) {
         
     | 
| 
      
 65 
     | 
    
         
            +
                        return;
         
     | 
| 
      
 66 
     | 
    
         
            +
                    }
         
     | 
| 
      
 67 
     | 
    
         
            +
                    const taskId = nanoid();
         
     | 
| 
      
 68 
     | 
    
         
            +
                    const uploadTask = {
         
     | 
| 
      
 69 
     | 
    
         
            +
                        image: imageData,
         
     | 
| 
      
 70 
     | 
    
         
            +
                        taskId,
         
     | 
| 
      
 71 
     | 
    
         
            +
                        metadata: {
         
     | 
| 
      
 72 
     | 
    
         
            +
                            id: taskId,
         
     | 
| 
      
 73 
     | 
    
         
            +
                            name: fileName,
         
     | 
| 
      
 74 
     | 
    
         
            +
                            url: image,
         
     | 
| 
      
 75 
     | 
    
         
            +
                            progress: 0
         
     | 
| 
      
 76 
     | 
    
         
            +
                        },
         
     | 
| 
      
 77 
     | 
    
         
            +
                        notifyUploadProgressChanged: (value) => {
         
     | 
| 
      
 78 
     | 
    
         
            +
                            handleInlineImageUploadAction({ type: AttachmentUploadActionType.Progress, taskId, progress: value });
         
     | 
| 
      
 79 
     | 
    
         
            +
                        },
         
     | 
| 
      
 80 
     | 
    
         
            +
                        notifyUploadCompleted: (id, url) => {
         
     | 
| 
      
 81 
     | 
    
         
            +
                            handleInlineImageUploadAction({ type: AttachmentUploadActionType.Completed, taskId, id, url });
         
     | 
| 
      
 82 
     | 
    
         
            +
                        },
         
     | 
| 
      
 83 
     | 
    
         
            +
                        notifyUploadFailed: (message) => {
         
     | 
| 
      
 84 
     | 
    
         
            +
                            handleInlineImageUploadAction({ type: AttachmentUploadActionType.Failed, taskId, message });
         
     | 
| 
      
 85 
     | 
    
         
            +
                            // remove the failed upload task when error banner is auto dismissed after 10 seconds
         
     | 
| 
      
 86 
     | 
    
         
            +
                            // so the banner won't be shown again on UI re-rendering.
         
     | 
| 
      
 87 
     | 
    
         
            +
                            setTimeout(() => {
         
     | 
| 
      
 88 
     | 
    
         
            +
                                handleInlineImageUploadAction({ type: AttachmentUploadActionType.Remove, id: taskId });
         
     | 
| 
      
 89 
     | 
    
         
            +
                            }, 10 * 1000);
         
     | 
| 
      
 90 
     | 
    
         
            +
                        }
         
     | 
| 
      
 91 
     | 
    
         
            +
                    };
         
     | 
| 
      
 92 
     | 
    
         
            +
                    const newUploads = [uploadTask];
         
     | 
| 
      
 93 
     | 
    
         
            +
                    handleInlineImageUploadAction({ type: AttachmentUploadActionType.Set, newUploads });
         
     | 
| 
      
 94 
     | 
    
         
            +
                    inlineImageUploadHandler(newUploads);
         
     | 
| 
      
 95 
     | 
    
         
            +
                }), [inlineImageUploadHandler]);
         
     | 
| 
      
 96 
     | 
    
         
            +
                const onCancelInlineImageUploadHandler = useCallback((imageId) => {
         
     | 
| 
      
 97 
     | 
    
         
            +
                    const imageUpload = inlineImageUploads.find((upload) => upload.metadata.id === imageId);
         
     | 
| 
      
 98 
     | 
    
         
            +
                    const uploadId = imageUpload === null || imageUpload === void 0 ? void 0 : imageUpload.metadata.id;
         
     | 
| 
      
 99 
     | 
    
         
            +
                    if (!uploadId) {
         
     | 
| 
      
 100 
     | 
    
         
            +
                        return;
         
     | 
| 
      
 101 
     | 
    
         
            +
                    }
         
     | 
| 
      
 102 
     | 
    
         
            +
                    handleInlineImageUploadAction({ type: AttachmentUploadActionType.Remove, id: uploadId });
         
     | 
| 
      
 103 
     | 
    
         
            +
                    // TODO: remove local blob
         
     | 
| 
      
 104 
     | 
    
         
            +
                    if ((imageUpload === null || imageUpload === void 0 ? void 0 : imageUpload.metadata.progress) === 1) {
         
     | 
| 
      
 105 
     | 
    
         
            +
                        try {
         
     | 
| 
      
 106 
     | 
    
         
            +
                            adapter.deleteImage(imageId);
         
     | 
| 
      
 107 
     | 
    
         
            +
                        }
         
     | 
| 
      
 108 
     | 
    
         
            +
                        catch (error) {
         
     | 
| 
      
 109 
     | 
    
         
            +
                            console.error(error);
         
     | 
| 
      
 110 
     | 
    
         
            +
                        }
         
     | 
| 
      
 111 
     | 
    
         
            +
                    }
         
     | 
| 
      
 112 
     | 
    
         
            +
                }, [adapter, inlineImageUploads]);
         
     | 
| 
      
 113 
     | 
    
         
            +
                return [inlineImageUploads, handleInlineImageUploadAction, onUploadInlineImage, onCancelInlineImageUploadHandler];
         
     | 
| 
      
 114 
     | 
    
         
            +
            };
         
     | 
| 
      
 115 
     | 
    
         
            +
            //# sourceMappingURL=useImageUpload.js.map
         
     | 
| 
         @@ -0,0 +1 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            {"version":3,"file":"useImageUpload.js","sourceRoot":"","sources":["../../../../../../../../react-composites/src/composites/ChatComposite/ImageUpload/useImageUpload.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 { Dispatch, useCallback, useReducer } from 'react';\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport {\n  AttachmentUpload,\n  AttachmentUploadActionType,\n  AttachmentUploadReducer,\n  AttachmentUploadTask,\n  Actions\n} from '../file-sharing/AttachmentUpload';\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport { useAdapter } from '../adapter/ChatAdapterProvider';\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport { nanoid } from 'nanoid';\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport { getInlineImageData } from './ImageUploadUtils';\n\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\n/**\n * @private\n */\nexport const useImageUpload = (): [\n  AttachmentUpload[],\n  Dispatch<Actions>,\n  onUploadInlineImage: (image: string, fileName: string) => Promise<void>,\n  onCancelInlineImageUploadHandler: (imageId: string) => void\n] => {\n  const MAX_INLINE_IMAGE_UPLOAD_SIZE_MB = 20;\n  const adapter = useAdapter();\n  const [inlineImageUploads, handleInlineImageUploadAction] = useReducer(AttachmentUploadReducer, []);\n\n  const inlineImageUploadHandler = useCallback(\n    async (uploadTasks: AttachmentUpload[]): 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    [adapter]\n  );\n\n  const onUploadInlineImage = useCallback(\n    async (image: string, fileName: string): Promise<void> => {\n      if (!image) {\n        return;\n      }\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          handleInlineImageUploadAction({ type: AttachmentUploadActionType.Progress, taskId, progress: value });\n        },\n        notifyUploadCompleted: (id: string, url: string) => {\n          handleInlineImageUploadAction({ type: AttachmentUploadActionType.Completed, taskId, id, url });\n        },\n        notifyUploadFailed: (message: string) => {\n          handleInlineImageUploadAction({ type: AttachmentUploadActionType.Failed, taskId, message });\n          // remove the failed upload task when error banner is auto dismissed after 10 seconds\n          // so the banner won't be shown again on UI re-rendering.\n          setTimeout(() => {\n            handleInlineImageUploadAction({ type: AttachmentUploadActionType.Remove, id: taskId });\n          }, 10 * 1000);\n        }\n      };\n\n      const newUploads = [uploadTask];\n      handleInlineImageUploadAction({ type: AttachmentUploadActionType.Set, newUploads });\n      inlineImageUploadHandler(newUploads);\n    },\n    [inlineImageUploadHandler]\n  );\n\n  const onCancelInlineImageUploadHandler = useCallback(\n    (imageId: string) => {\n      const imageUpload = inlineImageUploads.find((upload) => upload.metadata.id === imageId);\n      const uploadId = imageUpload?.metadata.id;\n      if (!uploadId) {\n        return;\n      }\n      handleInlineImageUploadAction({ type: AttachmentUploadActionType.Remove, id: uploadId });\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    [adapter, inlineImageUploads]\n  );\n  return [inlineImageUploads, handleInlineImageUploadAction, onUploadInlineImage, onCancelInlineImageUploadHandler];\n};\n"]}
         
     | 
| 
         @@ -20,7 +20,7 @@ export declare enum AttachmentUploadActionType { 
     | 
|
| 
       20 
20 
     | 
    
         
             
            /**
         
     | 
| 
       21 
21 
     | 
    
         
             
             * @private
         
     | 
| 
       22 
22 
     | 
    
         
             
             */
         
     | 
| 
       23 
     | 
    
         
            -
             
     | 
| 
      
 23 
     | 
    
         
            +
            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 
     | 
    
         
            -
             
     | 
| 
      
 36 
     | 
    
         
            +
            interface ProgressAction extends Action {
         
     | 
| 
       37 
37 
     | 
    
         
             
                type: AttachmentUploadActionType.Progress;
         
     | 
| 
       38 
38 
     | 
    
         
             
                taskId: string;
         
     | 
| 
       39 
39 
     | 
    
         
             
                progress: number;
         
     | 
| 
         @@ -41,7 +41,7 @@ export interface ProgressAction extends Action { 
     | 
|
| 
       41 
41 
     | 
    
         
             
            /**
         
     | 
| 
       42 
42 
     | 
    
         
             
             * @private
         
     | 
| 
       43 
43 
     | 
    
         
             
             */
         
     | 
| 
       44 
     | 
    
         
            -
             
     | 
| 
      
 44 
     | 
    
         
            +
            interface CompleteAction extends Action {
         
     | 
| 
       45 
45 
     | 
    
         
             
                type: AttachmentUploadActionType.Completed;
         
     | 
| 
       46 
46 
     | 
    
         
             
                taskId: string;
         
     | 
| 
       47 
47 
     | 
    
         
             
                id: string;
         
     | 
| 
         @@ -50,7 +50,7 @@ export interface CompleteAction extends Action { 
     | 
|
| 
       50 
50 
     | 
    
         
             
            /**
         
     | 
| 
       51 
51 
     | 
    
         
             
             * @private
         
     | 
| 
       52 
52 
     | 
    
         
             
             */
         
     | 
| 
       53 
     | 
    
         
            -
             
     | 
| 
      
 53 
     | 
    
         
            +
            interface FailedAction extends Action {
         
     | 
| 
       54 
54 
     | 
    
         
             
                type: AttachmentUploadActionType.Failed;
         
     | 
| 
       55 
55 
     | 
    
         
             
                taskId: string;
         
     | 
| 
       56 
56 
     | 
    
         
             
                message: string;
         
     | 
| 
         @@ -58,20 +58,20 @@ export interface FailedAction extends Action { 
     | 
|
| 
       58 
58 
     | 
    
         
             
            /**
         
     | 
| 
       59 
59 
     | 
    
         
             
             * @private
         
     | 
| 
       60 
60 
     | 
    
         
             
             */
         
     | 
| 
       61 
     | 
    
         
            -
             
     | 
| 
      
 61 
     | 
    
         
            +
            interface RemoveAction extends Action {
         
     | 
| 
       62 
62 
     | 
    
         
             
                type: AttachmentUploadActionType.Remove;
         
     | 
| 
       63 
63 
     | 
    
         
             
                id: string;
         
     | 
| 
       64 
64 
     | 
    
         
             
            }
         
     | 
| 
       65 
65 
     | 
    
         
             
            /**
         
     | 
| 
       66 
66 
     | 
    
         
             
             * @private
         
     | 
| 
       67 
67 
     | 
    
         
             
             */
         
     | 
| 
       68 
     | 
    
         
            -
             
     | 
| 
      
 68 
     | 
    
         
            +
            interface ClearAction extends Action {
         
     | 
| 
       69 
69 
     | 
    
         
             
                type: AttachmentUploadActionType.Clear;
         
     | 
| 
       70 
70 
     | 
    
         
             
            }
         
     | 
| 
       71 
71 
     | 
    
         
             
            /**
         
     | 
| 
       72 
72 
     | 
    
         
             
             * @private
         
     | 
| 
       73 
73 
     | 
    
         
             
             */
         
     | 
| 
       74 
     | 
    
         
            -
            type Actions = SetAction | ProgressAction | CompleteAction | FailedAction | RemoveAction | ClearAction;
         
     | 
| 
      
 74 
     | 
    
         
            +
            export 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 */\ninterface 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 */\ninterface 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 */\ninterface 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 */\ninterface 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 */\ninterface RemoveAction extends Action {\n  type: AttachmentUploadActionType.Remove;\n  id: string;\n}\n\n/* @conditional-compile-remove(file-sharing-acs) */\n/**\n * @private\n */\ninterface ClearAction extends Action {\n  type: AttachmentUploadActionType.Clear;\n}\n\n/* @conditional-compile-remove(file-sharing-acs) */\n/**\n * @private\n */\nexport type 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"]}
         
     | 
    
        package/dist/dist-esm/react-composites/src/composites/common/ControlBar/CommonCallControlBar.js
    CHANGED
    
    | 
         @@ -49,7 +49,7 @@ const inferCommonCallControlOptions = (mobileView, commonCallControlOptions) => 
     | 
|
| 
       49 
49 
     | 
    
         
             
             * @private
         
     | 
| 
       50 
50 
     | 
    
         
             
             */
         
     | 
| 
       51 
51 
     | 
    
         
             
            export const CommonCallControlBar = (props) => {
         
     | 
| 
       52 
     | 
    
         
            -
                var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m 
     | 
| 
      
 52 
     | 
    
         
            +
                var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
         
     | 
| 
       53 
53 
     | 
    
         
             
                const theme = useTheme();
         
     | 
| 
       54 
54 
     | 
    
         
             
                const rtl = theme.rtl;
         
     | 
| 
       55 
55 
     | 
    
         
             
                const controlBarContainerRef = useRef(null);
         
     | 
| 
         @@ -164,7 +164,7 @@ export const CommonCallControlBar = (props) => { 
     | 
|
| 
       164 
164 
     | 
    
         
             
                return (React.createElement("div", { ref: controlBarSizeRef },
         
     | 
| 
       165 
165 
     | 
    
         
             
                    React.createElement(CallAdapterProvider, { adapter: props.callAdapter },
         
     | 
| 
       166 
166 
     | 
    
         
             
                        showCaptionsSettingsModal && (React.createElement(CaptionsSettingsModal, { showCaptionsSettingsModal: showCaptionsSettingsModal, onDismissCaptionsSettings: onDismissCaptionsSettings, changeCaptionLanguage: props.isCaptionsOn && props.useTeamsCaptions })),
         
     | 
| 
       167 
     | 
    
         
            -
                        /* @conditional-compile-remove(teams-meeting-conference) */ props.teamsMeetingConferenceModalPresent && (React.createElement(MeetingConferencePhoneInfoModal, { conferencePhoneInfoList: ( 
     | 
| 
      
 167 
     | 
    
         
            +
                        /* @conditional-compile-remove(teams-meeting-conference) */ props.teamsMeetingConferenceModalPresent && (React.createElement(MeetingConferencePhoneInfoModal, { conferencePhoneInfoList: (_d = (_c = props.callAdapter.getState().call) === null || _c === void 0 ? void 0 : _c.teamsMeetingConference) !== null && _d !== void 0 ? _d : [], showModal: props.teamsMeetingConferenceModalPresent, onDismissMeetingPhoneInfoSettings: props.onToggleTeamsMeetingConferenceModal }))),
         
     | 
| 
       168 
168 
     | 
    
         
             
                    React.createElement(Stack, { horizontal: true, reversed: !props.mobileView && !isOutOfSpace, horizontalAlign: "space-between", className: mergeStyles(callControlsContainerStyles, controlBarContainerStyles, controlBarDesktopContainerStyles) },
         
     | 
| 
       169 
169 
     | 
    
         
             
                        React.createElement(Stack.Item, { grow: true, className: mergeStyles(controlBarWrapperDesktopStyles) },
         
     | 
| 
       170 
170 
     | 
    
         
             
                            React.createElement(CallAdapterProvider, { adapter: props.callAdapter },
         
     | 
| 
         @@ -194,8 +194,8 @@ export const CommonCallControlBar = (props) => { 
     | 
|
| 
       194 
194 
     | 
    
         
             
                                                showExitSpotlightButton && props.onStopLocalSpotlight && (React.createElement(ExitSpotlightButton, { displayType: options.displayType, onClick: props.onStopLocalSpotlight, styles: commonButtonStyles, strings: exitSpotlightButtonStrings })),
         
     | 
| 
       195 
195 
     | 
    
         
             
                                                screenShareButtonIsEnabled && (React.createElement(ScreenShare, { option: options.screenShareButton, displayType: options.displayType, styles: screenShareButtonStyles, 
         
     | 
| 
       196 
196 
     | 
    
         
             
                                                    /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */
         
     | 
| 
       197 
     | 
    
         
            -
                                                    disabled: props.disableButtonsForHoldScreen || isDisabled(options.screenShareButton) })), ( 
     | 
| 
       198 
     | 
    
         
            -
                                                 
     | 
| 
      
 197 
     | 
    
         
            +
                                                    disabled: props.disableButtonsForHoldScreen || isDisabled(options.screenShareButton) })), (_e = customButtons['primary']) === null || _e === void 0 ? void 0 :
         
     | 
| 
      
 198 
     | 
    
         
            +
                                                _e.slice(0, props.mobileView
         
     | 
| 
       199 
199 
     | 
    
         
             
                                                    ? CUSTOM_BUTTON_OPTIONS.MAX_PRIMARY_MOBILE_CUSTOM_BUTTONS
         
     | 
| 
       200 
200 
     | 
    
         
             
                                                    : CUSTOM_BUTTON_OPTIONS.MAX_PRIMARY_DESKTOP_CUSTOM_BUTTONS).map((CustomButton, i) => {
         
     | 
| 
       201 
201 
     | 
    
         
             
                                                    return (React.createElement(CustomButton, { key: `primary-custom-button-${i}`, styles: commonButtonStyles, showLabel: options.displayType !== 'compact', disableTooltip: props.mobileView }));
         
     | 
| 
         @@ -211,16 +211,16 @@ export const CommonCallControlBar = (props) => { 
     | 
|
| 
       211 
211 
     | 
    
         
             
                                                React.createElement(EndCall, { displayType: "compact", mobileView: props.mobileView, styles: endCallButtonStyles, 
         
     | 
| 
       212 
212 
     | 
    
         
             
                                                    /* @conditional-compile-remove(end-call-options) */
         
     | 
| 
       213 
213 
     | 
    
         
             
                                                    enableEndCallMenu: !isBoolean(props.callControls) &&
         
     | 
| 
       214 
     | 
    
         
            -
                                                        !isBoolean(( 
     | 
| 
      
 214 
     | 
    
         
            +
                                                        !isBoolean((_f = props.callControls) === null || _f === void 0 ? void 0 : _f.endCallButton) &&
         
     | 
| 
       215 
215 
     | 
    
         
             
                                                        !props.mobileView &&
         
     | 
| 
       216 
216 
     | 
    
         
             
                                                        isHangUpForEveryoneAllowed &&
         
     | 
| 
       217 
217 
     | 
    
         
             
                                                        !isTeams && // Temporary disable it for Teams call, since capability does not give the right value
         
     | 
| 
       218 
     | 
    
         
            -
                                                        (( 
     | 
| 
      
 218 
     | 
    
         
            +
                                                        ((_h = (_g = props.callControls) === null || _g === void 0 ? void 0 : _g.endCallButton) === null || _h === void 0 ? void 0 : _h.hangUpForEveryone) === 'endCallOptions' &&
         
     | 
| 
       219 
219 
     | 
    
         
             
                                                        // Only show the end call menu when the call is connected, user should not be able to end the call for everyone
         
     | 
| 
       220 
220 
     | 
    
         
             
                                                        // when they are not actively in the call to communicate they will.
         
     | 
| 
       221 
221 
     | 
    
         
             
                                                        callState.callStatus === 'Connected', disableEndCallModal: !isBoolean(props.callControls) &&
         
     | 
| 
       222 
     | 
    
         
            -
                                                        !isBoolean(( 
     | 
| 
       223 
     | 
    
         
            -
                                                        (( 
     | 
| 
      
 222 
     | 
    
         
            +
                                                        !isBoolean((_j = props.callControls) === null || _j === void 0 ? void 0 : _j.endCallButton) &&
         
     | 
| 
      
 223 
     | 
    
         
            +
                                                        ((_l = (_k = props.callControls) === null || _k === void 0 ? void 0 : _k.endCallButton) === null || _l === void 0 ? void 0 : _l.disableEndCallModal) }))))))),
         
     | 
| 
       224 
224 
     | 
    
         
             
                        !props.mobileView && sideButtonsPresent && (React.createElement(Stack.Item, null,
         
     | 
| 
       225 
225 
     | 
    
         
             
                            React.createElement("div", { ref: sidepaneControlsRef },
         
     | 
| 
       226 
226 
     | 
    
         
             
                                React.createElement(Stack, { horizontal: true, className: !props.mobileView ? mergeStyles(desktopButtonContainerStyle) : undefined },
         
     | 
| 
         @@ -228,8 +228,8 @@ export const CommonCallControlBar = (props) => { 
     | 
|
| 
       228 
228 
     | 
    
         
             
                                            ? peopleButtonStrings === null || peopleButtonStrings === void 0 ? void 0 : peopleButtonStrings.tooltipCloseAriaLabel
         
     | 
| 
       229 
229 
     | 
    
         
             
                                            : peopleButtonStrings === null || peopleButtonStrings === void 0 ? void 0 : peopleButtonStrings.tooltipOpenAriaLabel, showLabel: options.displayType !== 'compact', onClick: props.onPeopleButtonClicked, "data-ui-id": "common-call-composite-people-button", disabled: props.disableButtonsForLobbyPage ||
         
     | 
| 
       230 
230 
     | 
    
         
             
                                            props.disableButtonsForHoldScreen ||
         
     | 
| 
       231 
     | 
    
         
            -
                                            isDisabled(options.peopleButton), strings: peopleButtonStrings, styles: commonButtonStyles, componentRef: props.peopleButtonRef })), ( 
     | 
| 
       232 
     | 
    
         
            -
                                     
     | 
| 
      
 231 
     | 
    
         
            +
                                            isDisabled(options.peopleButton), strings: peopleButtonStrings, styles: commonButtonStyles, componentRef: props.peopleButtonRef })), (_m = customButtons['secondary']) === null || _m === void 0 ? void 0 :
         
     | 
| 
      
 232 
     | 
    
         
            +
                                    _m.slice(0, CUSTOM_BUTTON_OPTIONS.MAX_SECONDARY_DESKTOP_CUSTOM_BUTTONS).map((CustomButton, i) => {
         
     | 
| 
       233 
233 
     | 
    
         
             
                                        return (React.createElement(CustomButton, { key: `secondary-custom-button-${i}`, styles: commonButtonStyles, showLabel: options.displayType !== 'compact' }));
         
     | 
| 
       234 
234 
     | 
    
         
             
                                    }))))))));
         
     | 
| 
       235 
235 
     | 
    
         
             
            };
         
     | 
    
        package/dist/dist-esm/react-composites/src/composites/common/ControlBar/CommonCallControlBar.js.map
    CHANGED
    
    | 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            {"version":3,"file":"CommonCallControlBar.js","sourceRoot":"","sources":["../../../../../../../../react-composites/src/composites/common/ControlBar/CommonCallControlBar.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport React, { useMemo, useRef, useEffect, useState, useCallback } from 'react';\nimport { CallAdapterProvider } from '../../CallComposite/adapter/CallAdapterProvider';\nimport { CallAdapter } from '../../CallComposite';\nimport { PeopleButton } from './PeopleButton';\nimport {\n  concatStyleSets,\n  IButton,\n  IStyle,\n  ITheme,\n  mergeStyles,\n  mergeStyleSets,\n  Stack,\n  useTheme\n} from '@fluentui/react';\nimport { controlBarContainerStyles } from '../../CallComposite/styles/CallControls.styles';\nimport { callControlsContainerStyles } from '../../CallComposite/styles/CallPage.styles';\nimport { useCallWithChatCompositeStrings } from '../../CallWithChatComposite/hooks/useCallWithChatCompositeStrings';\nimport { BaseCustomStyles, ControlBarButtonStyles } from '@internal/react-components';\nimport { VideoGalleryLayout } from '@internal/react-components';\nimport { ControlBar } from '@internal/react-components';\nimport { Microphone } from '../../CallComposite/components/buttons/Microphone';\nimport { Camera } from '../../CallComposite/components/buttons/Camera';\nimport { ScreenShare } from '../../CallComposite/components/buttons/ScreenShare';\nimport { EndCall } from '../../CallComposite/components/buttons/EndCall';\nimport { MoreButton } from '../MoreButton';\nimport { ContainerRectProps } from '../ContainerRectProps';\nimport {\n  CUSTOM_BUTTON_OPTIONS,\n  generateCustomCallControlBarButton,\n  onFetchCustomButtonPropsTrampoline\n} from './CustomButton';\nimport { DesktopMoreButton } from './DesktopMoreButton';\nimport { isDisabled } from '../../CallComposite/utils';\nimport { HiddenFocusStartPoint } from '../HiddenFocusStartPoint';\nimport { CallWithChatControlOptions } from '../../CallWithChatComposite';\nimport { CommonCallControlOptions } from '../types/CommonCallControlOptions';\nimport { CaptionsSettingsModal } from '../CaptionsSettingsModal';\nimport { RaiseHand } from '../../CallComposite/components/buttons/RaiseHand';\nimport { Reaction } from '../../CallComposite/components/buttons/Reaction';\nimport { useSelector } from '../../CallComposite/hooks/useSelector';\nimport { capabilitySelector } from '../../CallComposite/selectors/capabilitySelector';\nimport { DtmfDialpadButton } from './DtmfDialerButton';\nimport { ExitSpotlightButton } from '../ExitSpotlightButton';\nimport { useLocale } from '../../localization';\n/* @conditional-compile-remove(end-call-options) */\nimport { isBoolean } from '../utils';\n/* @conditional-compile-remove(end-call-options) */\nimport { getIsTeamsCall } from '../../CallComposite/selectors/baseSelectors';\nimport { callStatusSelector } from '../../CallComposite/selectors/callStatusSelector';\n/* @conditional-compile-remove(teams-meeting-conference) */\nimport { MeetingConferencePhoneInfoModal } from '@internal/react-components';\n\n/**\n * @private\n */\nexport interface CommonCallControlBarProps {\n  callAdapter: CallAdapter;\n  peopleButtonChecked: boolean;\n  onPeopleButtonClicked: () => void;\n  onMoreButtonClicked?: () => void;\n  mobileView: boolean;\n  disableButtonsForLobbyPage: boolean;\n  callControls?: boolean | CommonCallControlOptions | CallWithChatControlOptions;\n  disableButtonsForHoldScreen?: boolean;\n  /* @conditional-compile-remove(PSTN-calls) */\n  onClickShowDialpad?: () => void;\n  onClickVideoEffects?: (showVideoEffects: boolean) => void;\n  isCaptionsSupported?: boolean;\n  isCaptionsOn?: boolean;\n  displayVertical?: boolean;\n  onUserSetOverflowGalleryPositionChange?: (position: 'Responsive' | 'horizontalTop') => void;\n  onUserSetGalleryLayout?: (layout: VideoGalleryLayout) => void;\n  userSetGalleryLayout?: VideoGalleryLayout;\n  peopleButtonRef?: React.RefObject<IButton>;\n  cameraButtonRef?: React.RefObject<IButton>;\n  videoBackgroundPickerRef?: React.RefObject<IButton>;\n  onSetDialpadPage?: () => void;\n  dtmfDialerPresent?: boolean;\n  onStopLocalSpotlight?: () => void;\n  useTeamsCaptions?: boolean;\n  /* @conditional-compile-remove(teams-meeting-conference) */\n  onToggleTeamsMeetingConferenceModal?: () => void;\n  /* @conditional-compile-remove(teams-meeting-conference) */\n  teamsMeetingConferenceModalPresent?: boolean;\n}\n\nconst inferCommonCallControlOptions = (\n  mobileView: boolean,\n  commonCallControlOptions?: boolean | CallWithChatControlOptions\n): CallWithChatControlOptions | false => {\n  if (commonCallControlOptions === false) {\n    return false;\n  }\n\n  const options =\n    commonCallControlOptions === true || commonCallControlOptions === undefined ? {} : commonCallControlOptions;\n  if (mobileView) {\n    // Set to compressed mode when composite is optimized for mobile\n    options.displayType = 'compact';\n    // Set options to always not show screen share button for mobile\n    options.screenShareButton = false;\n  }\n  return options;\n};\n\n/**\n * @private\n */\nexport const CommonCallControlBar = (props: CommonCallControlBarProps & ContainerRectProps): JSX.Element => {\n  const theme = useTheme();\n  const rtl = theme.rtl;\n\n  const controlBarContainerRef = useRef<HTMLHeadingElement>(null);\n  const sidepaneControlsRef = useRef<HTMLHeadingElement>(null);\n  const controlBarSizeRef = useRef<HTMLHeadingElement>(null);\n\n  const [controlBarButtonsWidth, setControlBarButtonsWidth] = useState(0);\n  const [panelsButtonsWidth, setPanelsButtonsWidth] = useState(0);\n  const [controlBarContainerWidth, setControlBarContainerWidth] = useState(0);\n\n  const [totalButtonsWidth, setTotalButtonsWidth] = useState(0);\n  const [isOutOfSpace, setIsOutOfSpace] = useState(false);\n\n  const callWithChatStrings = useCallWithChatCompositeStrings();\n  const options = inferCommonCallControlOptions(props.mobileView, props.callControls);\n\n  const [showCaptionsSettingsModal, setShowCaptionsSettingsModal] = useState(false);\n\n  /* @conditional-compile-remove(end-call-options) */\n  // If the hangup capability is not present, we default to true\n  const isHangUpForEveryoneAllowed =\n    useSelector((state) => state.call?.capabilitiesFeature?.capabilities.hangUpForEveryOne.isPresent) ?? true;\n  /* @conditional-compile-remove(end-call-options) */\n  const isTeams = useSelector(getIsTeamsCall);\n\n  const handleResize = useCallback((): void => {\n    setControlBarButtonsWidth(controlBarContainerRef.current ? controlBarContainerRef.current.offsetWidth : 0);\n    setPanelsButtonsWidth(sidepaneControlsRef.current ? sidepaneControlsRef.current.offsetWidth : 0);\n    setControlBarContainerWidth(controlBarSizeRef.current ? controlBarSizeRef.current.offsetWidth : 0);\n  }, []);\n\n  // on load set inital width\n  useEffect(() => {\n    setControlBarButtonsWidth(controlBarContainerRef.current ? controlBarContainerRef.current.offsetWidth : 0);\n    setPanelsButtonsWidth(sidepaneControlsRef.current ? sidepaneControlsRef.current.offsetWidth : 0);\n    setControlBarContainerWidth(controlBarSizeRef.current ? controlBarSizeRef.current.offsetWidth : 0);\n  }, []);\n\n  // get the current width of control bar buttons and panel control buttons when browser size change\n  useEffect(() => {\n    window.addEventListener('resize', handleResize);\n    return () => window.removeEventListener('resize', handleResize);\n  }, [handleResize]);\n\n  /* when size change, reset total buttons width and compare with the control bar container width\n  if the total width of those buttons exceed container width, do not center the control bar buttons based on parent container width\n  Instead let them take up the remaining white space on the left */\n  useEffect(() => {\n    // white space on the left when control bar buttons are centered based on container width + control bar buttons width + panel control buttons width\n    setTotalButtonsWidth(\n      (controlBarContainerWidth - controlBarButtonsWidth) / 2 + controlBarButtonsWidth + panelsButtonsWidth\n    );\n  }, [controlBarButtonsWidth, panelsButtonsWidth, controlBarContainerWidth]);\n\n  useEffect(() => {\n    setIsOutOfSpace(totalButtonsWidth > controlBarContainerWidth);\n  }, [totalButtonsWidth, controlBarContainerWidth]);\n\n  const openCaptionsSettingsModal = useCallback((): void => {\n    setShowCaptionsSettingsModal(true);\n  }, []);\n\n  const onDismissCaptionsSettings = useCallback((): void => {\n    setShowCaptionsSettingsModal(false);\n  }, []);\n\n  const peopleButtonStrings = useMemo(\n    () => ({\n      label: callWithChatStrings.peopleButtonLabel,\n      selectedLabel: callWithChatStrings.selectedPeopleButtonLabel,\n      tooltipOpenAriaLabel: callWithChatStrings.peopleButtonTooltipOpenAriaLabel,\n      tooltipCloseAriaLabel: callWithChatStrings.peopleButtonTooltipCloseAriaLabel,\n      tooltipOffContent: callWithChatStrings.peopleButtonTooltipOpen,\n      tooltipOnContent: callWithChatStrings.peopleButtonTooltipClose\n    }),\n    [callWithChatStrings]\n  );\n  const moreButtonStrings = useMemo(\n    () => ({\n      label: callWithChatStrings.moreDrawerButtonLabel,\n      tooltipContent: callWithChatStrings.moreDrawerButtonTooltip\n    }),\n    [callWithChatStrings]\n  );\n  const callStrings = useLocale().strings.call;\n  const exitSpotlightButtonStrings = useMemo(\n    () => ({\n      label: callStrings.exitSpotlightButtonLabel,\n      tooltipContent: callStrings.exitSpotlightButtonTooltip\n    }),\n    [callStrings]\n  );\n\n  const centerContainerStyles = useMemo(() => {\n    const styles: BaseCustomStyles = !props.mobileView ? desktopControlBarStyles : {};\n    return mergeStyleSets(styles, {\n      root: {\n        // Enforce a background color on control bar to ensure it matches the composite background color.\n        background: theme.semanticColors.bodyBackground\n      }\n    });\n  }, [props.mobileView, theme.semanticColors.bodyBackground]);\n  const screenShareButtonStyles = useMemo(\n    () => (!props.mobileView ? getDesktopScreenShareButtonStyles(theme) : undefined),\n    [props.mobileView, theme]\n  );\n  const commonButtonStyles = useMemo(\n    () => (!props.mobileView ? getDesktopCommonButtonStyles(theme) : undefined),\n    [props.mobileView, theme]\n  );\n  const endCallButtonStyles = useMemo(\n    () => (!props.mobileView ? getDesktopEndCallButtonStyles(theme) : undefined),\n    [props.mobileView, theme]\n  );\n\n  const controlBarWrapperDesktopStyles: IStyle = useMemo(\n    // only center control bar buttons based on parent container if there are enough space on the screen and not mobile\n    () => (!props.mobileView && !isOutOfSpace ? (rtl ? wrapperDesktopRtlStyles : wrapperDesktopStyles) : {}),\n    [props.mobileView, rtl, isOutOfSpace]\n  );\n\n  // only center control bar buttons based on parent container if there are enough space on the screen and not mobile\n  const controlBarDesktopContainerStyles: IStyle = useMemo(\n    () => (!props.mobileView && !isOutOfSpace ? { position: 'relative', minHeight: '4.5rem', width: '100%' } : {}),\n    [props.mobileView, isOutOfSpace]\n  );\n\n  const customButtons = useMemo(\n    () =>\n      generateCustomCallControlBarButton(\n        onFetchCustomButtonPropsTrampoline(options !== false ? options : undefined),\n        options !== false ? options?.displayType : undefined\n      ),\n    [options]\n  );\n\n  const capabilitiesSelector = useSelector(capabilitySelector);\n  const callState = useSelector(callStatusSelector);\n  const isReactionAllowed =\n    callState.callStatus !== 'Connected' ||\n    !capabilitiesSelector?.capabilities ||\n    capabilitiesSelector.capabilities.useReactions.isPresent;\n\n  // when options is false then we want to hide the whole control bar.\n  if (options === false) {\n    return <></>;\n  }\n\n  const sideButtonsPresent =\n    isEnabled(options.peopleButton) || isEnabled(options.chatButton) || customButtons['secondary'] !== undefined;\n\n  const screenShareButtonIsEnabled = isEnabled(options?.screenShareButton);\n\n  const microphoneButtonIsEnabled = isEnabled(options?.microphoneButton);\n\n  const cameraButtonIsEnabled = isEnabled(options?.cameraButton);\n\n  const showExitSpotlightButton = options?.exitSpotlightButton !== false;\n\n  const showCaptionsButton =\n    props.isCaptionsSupported &&\n    /* @conditional-compile-remove(acs-close-captions) */ isEnabled(options.captionsButton);\n\n  /* @conditional-compile-remove(teams-meeting-conference) */\n  const showTeamsMeetingPhoneCallButton = isEnabled(options?.teamsMeetingPhoneCallButton);\n\n  const showDesktopMoreButton =\n    isEnabled(options?.moreButton) &&\n    (false ||\n      /*@conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */ isEnabled(\n        options?.holdButton\n      ) ||\n      showCaptionsButton ||\n      props.onUserSetGalleryLayout);\n\n  const role = props.callAdapter.getState().call?.role;\n  const hideRaiseHandButtonInRoomsCall =\n    props.callAdapter.getState().isRoomsCall && role && ['Consumer', 'Unknown'].includes(role);\n  const reactionResources = props.callAdapter.getState().reactions;\n\n  return (\n    <div ref={controlBarSizeRef}>\n      <CallAdapterProvider adapter={props.callAdapter}>\n        {showCaptionsSettingsModal && (\n          <CaptionsSettingsModal\n            showCaptionsSettingsModal={showCaptionsSettingsModal}\n            onDismissCaptionsSettings={onDismissCaptionsSettings}\n            changeCaptionLanguage={props.isCaptionsOn && props.useTeamsCaptions}\n          />\n        )}\n        {\n          /* @conditional-compile-remove(teams-meeting-conference) */ props.teamsMeetingConferenceModalPresent && (\n            <MeetingConferencePhoneInfoModal\n              conferencePhoneInfoList={props.callAdapter.getState().call?.meetingConference?.conferencePhones ?? []}\n              showModal={props.teamsMeetingConferenceModalPresent}\n              onDismissMeetingPhoneInfoSettings={props.onToggleTeamsMeetingConferenceModal}\n            />\n          )\n        }\n      </CallAdapterProvider>\n      <Stack\n        horizontal\n        reversed={!props.mobileView && !isOutOfSpace}\n        horizontalAlign=\"space-between\"\n        className={mergeStyles(\n          callControlsContainerStyles,\n          controlBarContainerStyles,\n          controlBarDesktopContainerStyles\n        )}\n      >\n        <Stack.Item grow className={mergeStyles(controlBarWrapperDesktopStyles)}>\n          <CallAdapterProvider adapter={props.callAdapter}>\n            <Stack horizontalAlign=\"center\">\n              {/*\n              HiddenFocusStartPoint is a util component used when we can't ensure the initial element for first\n              tab focus is at the top of dom tree. It moves the first-tab focus to the next interact-able element\n              immediately after it in the dom tree.\n              */}\n              <HiddenFocusStartPoint />\n              <Stack.Item>\n                {/*\n                  Note: We use the layout=\"horizontal\" instead of dockedBottom because of how we position the\n                  control bar. The control bar exists in a Stack below the MediaGallery. The MediaGallery is\n                  set to grow and fill the remaining space not taken up by the ControlBar. If we were to use\n                  dockedBottom it has position absolute and would therefore float on top of the media gallery,\n                  occluding some of its content.\n                */}\n                <div ref={controlBarContainerRef}>\n                  <ControlBar layout={props.displayVertical ? 'vertical' : 'horizontal'} styles={centerContainerStyles}>\n                    {microphoneButtonIsEnabled && (\n                      <Microphone\n                        displayType={options.displayType}\n                        styles={commonButtonStyles}\n                        splitButtonsForDeviceSelection={!props.mobileView}\n                        /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */\n                        disabled={props.disableButtonsForHoldScreen || isDisabled(options.microphoneButton)}\n                        disableTooltip={props.mobileView}\n                      />\n                    )}\n                    {cameraButtonIsEnabled && (\n                      <Camera\n                        displayType={options.displayType}\n                        styles={commonButtonStyles}\n                        splitButtonsForDeviceSelection={!props.mobileView}\n                        /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */\n                        disabled={props.disableButtonsForHoldScreen || isDisabled(options.cameraButton)}\n                        onClickVideoEffects={props.onClickVideoEffects}\n                        componentRef={props.cameraButtonRef}\n                        disableTooltip={props.mobileView}\n                      />\n                    )}\n                    {!props.mobileView &&\n                      isReactionAllowed &&\n                      isEnabled(options.reactionButton) &&\n                      reactionResources && (\n                        <Reaction\n                          displayType={options.displayType}\n                          styles={commonButtonStyles}\n                          disabled={props.disableButtonsForHoldScreen}\n                          reactionResource={reactionResources}\n                        />\n                      )}\n                    {!props.mobileView && isEnabled(options.raiseHandButton) && !hideRaiseHandButtonInRoomsCall && (\n                      <RaiseHand\n                        displayType={options.displayType}\n                        styles={commonButtonStyles}\n                        /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */\n                        disabled={props.disableButtonsForHoldScreen || isDisabled(options.microphoneButton)}\n                      />\n                    )}\n                    {showDtmfDialerButton(options) && props.onSetDialpadPage !== undefined && (\n                      <DtmfDialpadButton\n                        styles={commonButtonStyles}\n                        displayType={options.displayType}\n                        onClick={() => {\n                          if (props.onSetDialpadPage !== undefined) {\n                            props.onSetDialpadPage();\n                          }\n                        }}\n                      />\n                    )}\n                    {showExitSpotlightButton && props.onStopLocalSpotlight && (\n                      <ExitSpotlightButton\n                        displayType={options.displayType}\n                        onClick={props.onStopLocalSpotlight}\n                        styles={commonButtonStyles}\n                        strings={exitSpotlightButtonStrings}\n                      />\n                    )}\n                    {screenShareButtonIsEnabled && (\n                      <ScreenShare\n                        option={options.screenShareButton}\n                        displayType={options.displayType}\n                        styles={screenShareButtonStyles}\n                        /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */\n                        disabled={props.disableButtonsForHoldScreen || isDisabled(options.screenShareButton)}\n                      />\n                    )}\n                    {customButtons['primary']\n                      ?.slice(\n                        0,\n                        props.mobileView\n                          ? CUSTOM_BUTTON_OPTIONS.MAX_PRIMARY_MOBILE_CUSTOM_BUTTONS\n                          : CUSTOM_BUTTON_OPTIONS.MAX_PRIMARY_DESKTOP_CUSTOM_BUTTONS\n                      )\n                      .map((CustomButton, i) => {\n                        return (\n                          <CustomButton\n                            key={`primary-custom-button-${i}`}\n                            styles={commonButtonStyles}\n                            showLabel={options.displayType !== 'compact'}\n                            disableTooltip={props.mobileView}\n                          />\n                        );\n                      })}\n                    {props.mobileView && (\n                      <MoreButton\n                        data-ui-id=\"common-call-composite-more-button\"\n                        strings={moreButtonStrings}\n                        onClick={props.onMoreButtonClicked}\n                        disabled={props.disableButtonsForLobbyPage}\n                        disableTooltip={props.mobileView}\n                      />\n                    )}\n                    {!props.mobileView && showDesktopMoreButton && (\n                      <DesktopMoreButton\n                        disableButtonsForHoldScreen={props.disableButtonsForHoldScreen}\n                        styles={commonButtonStyles}\n                        /*@conditional-compile-remove(PSTN-calls) */\n                        onClickShowDialpad={props.onClickShowDialpad}\n                        callControls={props.callControls}\n                        isCaptionsSupported={showCaptionsButton}\n                        onCaptionsSettingsClick={openCaptionsSettingsModal}\n                        onUserSetOverflowGalleryPositionChange={props.onUserSetOverflowGalleryPositionChange}\n                        onUserSetGalleryLayout={props.onUserSetGalleryLayout}\n                        userSetGalleryLayout={props.userSetGalleryLayout}\n                        dtmfDialerPresent={props.dtmfDialerPresent}\n                        onSetDialpadPage={props.onSetDialpadPage}\n                        /* @conditional-compile-remove(teams-meeting-conference) */\n                        teamsMeetingPhoneCallEnable={showTeamsMeetingPhoneCallButton}\n                        /* @conditional-compile-remove(teams-meeting-conference) */\n                        onMeetingPhoneInfoClick={props.onToggleTeamsMeetingConferenceModal}\n                      />\n                    )}\n                    <EndCall\n                      displayType=\"compact\"\n                      mobileView={props.mobileView}\n                      styles={endCallButtonStyles}\n                      /* @conditional-compile-remove(end-call-options) */\n                      enableEndCallMenu={\n                        !isBoolean(props.callControls) &&\n                        !isBoolean(props.callControls?.endCallButton) &&\n                        !props.mobileView &&\n                        isHangUpForEveryoneAllowed &&\n                        !isTeams && // Temporary disable it for Teams call, since capability does not give the right value\n                        props.callControls?.endCallButton?.hangUpForEveryone === 'endCallOptions' &&\n                        // Only show the end call menu when the call is connected, user should not be able to end the call for everyone\n                        // when they are not actively in the call to communicate they will.\n                        callState.callStatus === 'Connected'\n                      }\n                      disableEndCallModal={\n                        !isBoolean(props.callControls) &&\n                        !isBoolean(props.callControls?.endCallButton) &&\n                        props.callControls?.endCallButton?.disableEndCallModal\n                      }\n                    />\n                  </ControlBar>\n                </div>\n              </Stack.Item>\n            </Stack>\n          </CallAdapterProvider>\n        </Stack.Item>\n        {!props.mobileView && sideButtonsPresent && (\n          <Stack.Item>\n            <div ref={sidepaneControlsRef}>\n              <Stack horizontal className={!props.mobileView ? mergeStyles(desktopButtonContainerStyle) : undefined}>\n                {isEnabled(options?.peopleButton) && (\n                  <PeopleButton\n                    checked={props.peopleButtonChecked}\n                    ariaLabel={\n                      props.peopleButtonChecked\n                        ? peopleButtonStrings?.tooltipCloseAriaLabel\n                        : peopleButtonStrings?.tooltipOpenAriaLabel\n                    }\n                    showLabel={options.displayType !== 'compact'}\n                    onClick={props.onPeopleButtonClicked}\n                    data-ui-id=\"common-call-composite-people-button\"\n                    disabled={\n                      props.disableButtonsForLobbyPage ||\n                      props.disableButtonsForHoldScreen ||\n                      isDisabled(options.peopleButton)\n                    }\n                    strings={peopleButtonStrings}\n                    styles={commonButtonStyles}\n                    componentRef={props.peopleButtonRef}\n                  />\n                )}\n                {customButtons['secondary']\n                  ?.slice(0, CUSTOM_BUTTON_OPTIONS.MAX_SECONDARY_DESKTOP_CUSTOM_BUTTONS)\n                  .map((CustomButton, i) => {\n                    return (\n                      <CustomButton\n                        key={`secondary-custom-button-${i}`}\n                        styles={commonButtonStyles}\n                        showLabel={options.displayType !== 'compact'}\n                      />\n                    );\n                  })}\n              </Stack>\n            </div>\n          </Stack.Item>\n        )}\n      </Stack>\n    </div>\n  );\n};\n\nconst desktopButtonContainerStyle: IStyle = {\n  padding: '0.75rem',\n  columnGap: '0.5rem'\n};\n\nconst desktopControlBarStyles: BaseCustomStyles = {\n  root: desktopButtonContainerStyle\n};\n\n{\n  /*\n    Styling here to ensure the control bar buttons stay in the center of the parent component (control Container) regardless of its siblings\n    Need to add 'reversed' to parent container because the styling here reverse the position of the two stack items \n  */\n}\nconst wrapperDesktopStyles: IStyle = {\n  position: 'absolute',\n  left: '50%',\n  transform: 'translate(-50%, 0)'\n};\n\nconst wrapperDesktopRtlStyles: IStyle = {\n  position: 'absolute',\n  right: '50%',\n  transform: 'translate(-50%, 0)'\n};\n\n/** @private */\nexport const getDesktopCommonButtonStyles = (theme: ITheme): ControlBarButtonStyles => ({\n  root: {\n    border: `solid 1px ${theme.palette.neutralQuaternaryAlt}`,\n    borderRadius: theme.effects.roundedCorner4,\n    minHeight: '2.5rem',\n    maxWidth: '12rem' // allot extra space than the regular ControlBarButton. This is to give extra room to have the icon beside the text.\n  },\n  flexContainer: {\n    display: 'flex',\n    flexFlow: 'row nowrap'\n  },\n  textContainer: {\n    // Override the default so that label doesn't introduce a new block.\n    display: 'inline',\n\n    // Ensure width is set to permit child to show ellipsis when there is a label that is too long\n    maxWidth: '100%'\n  },\n  label: {\n    fontSize: theme.fonts.medium.fontSize,\n\n    // Ensure there is enough space between the icon and text to allow for the unread messages badge in the chat button\n    marginLeft: '0.625rem',\n\n    // Ensure letters that go above and below the standard text line like 'g', 'y', 'j' are not clipped\n    lineHeight: '1.5rem',\n\n    // Do not allow very long button texts to ruin the control bar experience, instead ensure long text is truncated and shows ellipsis\n    display: 'block',\n    textOverflow: 'ellipsis',\n    whiteSpace: 'nowrap',\n    overflow: 'hidden'\n  },\n  splitButtonMenuButton: {\n    border: `solid 1px ${theme.palette.neutralQuaternaryAlt}`,\n    borderTopRightRadius: theme.effects.roundedCorner4,\n    borderBottomRightRadius: theme.effects.roundedCorner4,\n    borderTopLeftRadius: '0',\n    borderBottomLeftRadius: '0'\n  },\n  splitButtonMenuButtonChecked: {\n    // Default colors the menu half similarly for :hover and when button is checked.\n    // To align with how the left-half is styled, override the checked style.\n    background: 'none'\n  }\n});\n\nconst getDesktopScreenShareButtonStyles = (theme: ITheme): ControlBarButtonStyles => {\n  const overrideStyles = {\n    border: 'none',\n    background: theme.palette.themePrimary,\n    color: theme.palette.white,\n    '* > svg': { fill: theme.palette.white },\n    '@media (forced-colors: active)': {\n      border: '1px solid',\n      borderColor: theme.palette.black\n    }\n  };\n  const overrides: ControlBarButtonStyles = {\n    rootChecked: overrideStyles,\n    rootCheckedHovered: overrideStyles\n  };\n  return concatStyleSets(getDesktopCommonButtonStyles(theme), overrides);\n};\n\nconst getDesktopEndCallButtonStyles = (theme: ITheme): ControlBarButtonStyles => {\n  const overrides: ControlBarButtonStyles = {\n    root: {\n      // Suppress border around the dark-red button.\n      border: 'none'\n    },\n    rootFocused: {\n      '@media (forced-colors: active)': {\n        background: 'highlight',\n        color: 'highlightText',\n        borderColor: theme.palette.black,\n        borderRadius: 'unset',\n        outline: `3px solid ${theme.palette.black}`\n      }\n    },\n    icon: {\n      '@media (forced-colors: active)': {\n        ':focused': {\n          color: theme.palette.white\n        }\n      }\n    }\n  };\n  return concatStyleSets(getDesktopCommonButtonStyles(theme), overrides);\n};\n\nconst isEnabled = (option: unknown): boolean => option !== false;\n\nconst showDtmfDialerButton = (options: CommonCallControlOptions | CallWithChatControlOptions): boolean => {\n  if (options.moreButton === false && options.dtmfDialerButton !== false) {\n    return true;\n  } else {\n    return false;\n  }\n};\n"]}
         
     | 
| 
      
 1 
     | 
    
         
            +
            {"version":3,"file":"CommonCallControlBar.js","sourceRoot":"","sources":["../../../../../../../../react-composites/src/composites/common/ControlBar/CommonCallControlBar.tsx"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACjF,OAAO,EAAE,mBAAmB,EAAE,MAAM,iDAAiD,CAAC;AAEtF,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EACL,eAAe,EAIf,WAAW,EACX,cAAc,EACd,KAAK,EACL,QAAQ,EACT,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,yBAAyB,EAAE,MAAM,gDAAgD,CAAC;AAC3F,OAAO,EAAE,2BAA2B,EAAE,MAAM,4CAA4C,CAAC;AACzF,OAAO,EAAE,+BAA+B,EAAE,MAAM,mEAAmE,CAAC;AAGpH,OAAO,EAAE,UAAU,EAAE,4CAAmC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,mDAAmD,CAAC;AAC/E,OAAO,EAAE,MAAM,EAAE,MAAM,+CAA+C,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,oDAAoD,CAAC;AACjF,OAAO,EAAE,OAAO,EAAE,MAAM,gDAAgD,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,OAAO,EACL,qBAAqB,EACrB,kCAAkC,EAClC,kCAAkC,EACnC,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAGjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,kDAAkD,CAAC;AAC7E,OAAO,EAAE,QAAQ,EAAE,MAAM,iDAAiD,CAAC;AAC3E,OAAO,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kDAAkD,CAAC;AACtF,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,mDAAmD;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,mDAAmD;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,6CAA6C,CAAC;AAC7E,OAAO,EAAE,kBAAkB,EAAE,MAAM,kDAAkD,CAAC;AACtF,2DAA2D;AAC3D,OAAO,EAAE,+BAA+B,EAAE,4CAAmC;AAoC7E,MAAM,6BAA6B,GAAG,CACpC,UAAmB,EACnB,wBAA+D,EAC3B,EAAE;IACtC,IAAI,wBAAwB,KAAK,KAAK,EAAE,CAAC;QACvC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,OAAO,GACX,wBAAwB,KAAK,IAAI,IAAI,wBAAwB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,wBAAwB,CAAC;IAC9G,IAAI,UAAU,EAAE,CAAC;QACf,gEAAgE;QAChE,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;QAChC,gEAAgE;QAChE,OAAO,CAAC,iBAAiB,GAAG,KAAK,CAAC;IACpC,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,KAAqD,EAAe,EAAE;;IACzG,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;IAEtB,MAAM,sBAAsB,GAAG,MAAM,CAAqB,IAAI,CAAC,CAAC;IAChE,MAAM,mBAAmB,GAAG,MAAM,CAAqB,IAAI,CAAC,CAAC;IAC7D,MAAM,iBAAiB,GAAG,MAAM,CAAqB,IAAI,CAAC,CAAC;IAE3D,MAAM,CAAC,sBAAsB,EAAE,yBAAyB,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACxE,MAAM,CAAC,kBAAkB,EAAE,qBAAqB,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAChE,MAAM,CAAC,wBAAwB,EAAE,2BAA2B,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAE5E,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC9D,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAExD,MAAM,mBAAmB,GAAG,+BAA+B,EAAE,CAAC;IAC9D,MAAM,OAAO,GAAG,6BAA6B,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;IAEpF,MAAM,CAAC,yBAAyB,EAAE,4BAA4B,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAElF,mDAAmD;IACnD,8DAA8D;IAC9D,MAAM,0BAA0B,GAC9B,MAAA,WAAW,CAAC,CAAC,KAAK,EAAE,EAAE,eAAC,OAAA,MAAA,MAAA,KAAK,CAAC,IAAI,0CAAE,mBAAmB,0CAAE,YAAY,CAAC,iBAAiB,CAAC,SAAS,CAAA,EAAA,CAAC,mCAAI,IAAI,CAAC;IAC5G,mDAAmD;IACnD,MAAM,OAAO,GAAG,WAAW,CAAC,cAAc,CAAC,CAAC;IAE5C,MAAM,YAAY,GAAG,WAAW,CAAC,GAAS,EAAE;QAC1C,yBAAyB,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,CAAC,sBAAsB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3G,qBAAqB,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjG,2BAA2B,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,iBAAiB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrG,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,2BAA2B;IAC3B,SAAS,CAAC,GAAG,EAAE;QACb,yBAAyB,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,CAAC,sBAAsB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3G,qBAAqB,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjG,2BAA2B,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,iBAAiB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrG,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,kGAAkG;IAClG,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QAChD,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IAClE,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;IAEnB;;qEAEiE;IACjE,SAAS,CAAC,GAAG,EAAE;QACb,mJAAmJ;QACnJ,oBAAoB,CAClB,CAAC,wBAAwB,GAAG,sBAAsB,CAAC,GAAG,CAAC,GAAG,sBAAsB,GAAG,kBAAkB,CACtG,CAAC;IACJ,CAAC,EAAE,CAAC,sBAAsB,EAAE,kBAAkB,EAAE,wBAAwB,CAAC,CAAC,CAAC;IAE3E,SAAS,CAAC,GAAG,EAAE;QACb,eAAe,CAAC,iBAAiB,GAAG,wBAAwB,CAAC,CAAC;IAChE,CAAC,EAAE,CAAC,iBAAiB,EAAE,wBAAwB,CAAC,CAAC,CAAC;IAElD,MAAM,yBAAyB,GAAG,WAAW,CAAC,GAAS,EAAE;QACvD,4BAA4B,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,yBAAyB,GAAG,WAAW,CAAC,GAAS,EAAE;QACvD,4BAA4B,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,mBAAmB,GAAG,OAAO,CACjC,GAAG,EAAE,CAAC,CAAC;QACL,KAAK,EAAE,mBAAmB,CAAC,iBAAiB;QAC5C,aAAa,EAAE,mBAAmB,CAAC,yBAAyB;QAC5D,oBAAoB,EAAE,mBAAmB,CAAC,gCAAgC;QAC1E,qBAAqB,EAAE,mBAAmB,CAAC,iCAAiC;QAC5E,iBAAiB,EAAE,mBAAmB,CAAC,uBAAuB;QAC9D,gBAAgB,EAAE,mBAAmB,CAAC,wBAAwB;KAC/D,CAAC,EACF,CAAC,mBAAmB,CAAC,CACtB,CAAC;IACF,MAAM,iBAAiB,GAAG,OAAO,CAC/B,GAAG,EAAE,CAAC,CAAC;QACL,KAAK,EAAE,mBAAmB,CAAC,qBAAqB;QAChD,cAAc,EAAE,mBAAmB,CAAC,uBAAuB;KAC5D,CAAC,EACF,CAAC,mBAAmB,CAAC,CACtB,CAAC;IACF,MAAM,WAAW,GAAG,SAAS,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IAC7C,MAAM,0BAA0B,GAAG,OAAO,CACxC,GAAG,EAAE,CAAC,CAAC;QACL,KAAK,EAAE,WAAW,CAAC,wBAAwB;QAC3C,cAAc,EAAE,WAAW,CAAC,0BAA0B;KACvD,CAAC,EACF,CAAC,WAAW,CAAC,CACd,CAAC;IAEF,MAAM,qBAAqB,GAAG,OAAO,CAAC,GAAG,EAAE;QACzC,MAAM,MAAM,GAAqB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,EAAE,CAAC;QAClF,OAAO,cAAc,CAAC,MAAM,EAAE;YAC5B,IAAI,EAAE;gBACJ,iGAAiG;gBACjG,UAAU,EAAE,KAAK,CAAC,cAAc,CAAC,cAAc;aAChD;SACF,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC,CAAC;IAC5D,MAAM,uBAAuB,GAAG,OAAO,CACrC,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,iCAAiC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,EAChF,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,CAC1B,CAAC;IACF,MAAM,kBAAkB,GAAG,OAAO,CAChC,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,4BAA4B,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,EAC3E,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,CAC1B,CAAC;IACF,MAAM,mBAAmB,GAAG,OAAO,CACjC,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,6BAA6B,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,EAC5E,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,CAC1B,CAAC;IAEF,MAAM,8BAA8B,GAAW,OAAO;IACpD,mHAAmH;IACnH,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EACxG,CAAC,KAAK,CAAC,UAAU,EAAE,GAAG,EAAE,YAAY,CAAC,CACtC,CAAC;IAEF,mHAAmH;IACnH,MAAM,gCAAgC,GAAW,OAAO,CACtD,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAC9G,CAAC,KAAK,CAAC,UAAU,EAAE,YAAY,CAAC,CACjC,CAAC;IAEF,MAAM,aAAa,GAAG,OAAO,CAC3B,GAAG,EAAE,CACH,kCAAkC,CAChC,kCAAkC,CAAC,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,EAC3E,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,WAAW,CAAC,CAAC,CAAC,SAAS,CACrD,EACH,CAAC,OAAO,CAAC,CACV,CAAC;IAEF,MAAM,oBAAoB,GAAG,WAAW,CAAC,kBAAkB,CAAC,CAAC;IAC7D,MAAM,SAAS,GAAG,WAAW,CAAC,kBAAkB,CAAC,CAAC;IAClD,MAAM,iBAAiB,GACrB,SAAS,CAAC,UAAU,KAAK,WAAW;QACpC,CAAC,CAAA,oBAAoB,aAApB,oBAAoB,uBAApB,oBAAoB,CAAE,YAAY,CAAA;QACnC,oBAAoB,CAAC,YAAY,CAAC,YAAY,CAAC,SAAS,CAAC;IAE3D,oEAAoE;IACpE,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;QACtB,OAAO,yCAAK,CAAC;IACf,CAAC;IAED,MAAM,kBAAkB,GACtB,SAAS,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,aAAa,CAAC,WAAW,CAAC,KAAK,SAAS,CAAC;IAE/G,MAAM,0BAA0B,GAAG,SAAS,CAAC,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,iBAAiB,CAAC,CAAC;IAEzE,MAAM,yBAAyB,GAAG,SAAS,CAAC,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,gBAAgB,CAAC,CAAC;IAEvE,MAAM,qBAAqB,GAAG,SAAS,CAAC,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,YAAY,CAAC,CAAC;IAE/D,MAAM,uBAAuB,GAAG,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,mBAAmB,MAAK,KAAK,CAAC;IAEvE,MAAM,kBAAkB,GACtB,KAAK,CAAC,mBAAmB;QACzB,qDAAqD,CAAC,SAAS,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IAE1F,2DAA2D;IAC3D,MAAM,+BAA+B,GAAG,SAAS,CAAC,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,2BAA2B,CAAC,CAAC;IAExF,MAAM,qBAAqB,GACzB,SAAS,CAAC,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,UAAU,CAAC;QAC9B,CAAC,KAAK;YACJ,4CAA4C,CAAC,mDAAmD,CAAC,SAAS,CACxG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,UAAU,CACpB;YACD,kBAAkB;YAClB,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAElC,MAAM,IAAI,GAAG,MAAA,KAAK,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,IAAI,0CAAE,IAAI,CAAC;IACrD,MAAM,8BAA8B,GAClC,KAAK,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,WAAW,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC7F,MAAM,iBAAiB,GAAG,KAAK,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC;IAEjE,OAAO,CACL,6BAAK,GAAG,EAAE,iBAAiB;QACzB,oBAAC,mBAAmB,IAAC,OAAO,EAAE,KAAK,CAAC,WAAW;YAC5C,yBAAyB,IAAI,CAC5B,oBAAC,qBAAqB,IACpB,yBAAyB,EAAE,yBAAyB,EACpD,yBAAyB,EAAE,yBAAyB,EACpD,qBAAqB,EAAE,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,gBAAgB,GACnE,CACH;YAEC,2DAA2D,CAAC,KAAK,CAAC,kCAAkC,IAAI,CACtG,oBAAC,+BAA+B,IAC9B,uBAAuB,EAAE,MAAA,MAAA,KAAK,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,IAAI,0CAAE,sBAAsB,mCAAI,EAAE,EACxF,SAAS,EAAE,KAAK,CAAC,kCAAkC,EACnD,iCAAiC,EAAE,KAAK,CAAC,mCAAmC,GAC5E,CACH,CAEiB;QACtB,oBAAC,KAAK,IACJ,UAAU,QACV,QAAQ,EAAE,CAAC,KAAK,CAAC,UAAU,IAAI,CAAC,YAAY,EAC5C,eAAe,EAAC,eAAe,EAC/B,SAAS,EAAE,WAAW,CACpB,2BAA2B,EAC3B,yBAAyB,EACzB,gCAAgC,CACjC;YAED,oBAAC,KAAK,CAAC,IAAI,IAAC,IAAI,QAAC,SAAS,EAAE,WAAW,CAAC,8BAA8B,CAAC;gBACrE,oBAAC,mBAAmB,IAAC,OAAO,EAAE,KAAK,CAAC,WAAW;oBAC7C,oBAAC,KAAK,IAAC,eAAe,EAAC,QAAQ;wBAM7B,oBAAC,qBAAqB,OAAG;wBACzB,oBAAC,KAAK,CAAC,IAAI;4BAQT,6BAAK,GAAG,EAAE,sBAAsB;gCAC9B,oBAAC,UAAU,IAAC,MAAM,EAAE,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,EAAE,MAAM,EAAE,qBAAqB;oCACjG,yBAAyB,IAAI,CAC5B,oBAAC,UAAU,IACT,WAAW,EAAE,OAAO,CAAC,WAAW,EAChC,MAAM,EAAE,kBAAkB,EAC1B,8BAA8B,EAAE,CAAC,KAAK,CAAC,UAAU;wCACjD,6CAA6C,CAAC,mDAAmD;wCACjG,QAAQ,EAAE,KAAK,CAAC,2BAA2B,IAAI,UAAU,CAAC,OAAO,CAAC,gBAAgB,CAAC,EACnF,cAAc,EAAE,KAAK,CAAC,UAAU,GAChC,CACH;oCACA,qBAAqB,IAAI,CACxB,oBAAC,MAAM,IACL,WAAW,EAAE,OAAO,CAAC,WAAW,EAChC,MAAM,EAAE,kBAAkB,EAC1B,8BAA8B,EAAE,CAAC,KAAK,CAAC,UAAU;wCACjD,6CAA6C,CAAC,mDAAmD;wCACjG,QAAQ,EAAE,KAAK,CAAC,2BAA2B,IAAI,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC,EAC/E,mBAAmB,EAAE,KAAK,CAAC,mBAAmB,EAC9C,YAAY,EAAE,KAAK,CAAC,eAAe,EACnC,cAAc,EAAE,KAAK,CAAC,UAAU,GAChC,CACH;oCACA,CAAC,KAAK,CAAC,UAAU;wCAChB,iBAAiB;wCACjB,SAAS,CAAC,OAAO,CAAC,cAAc,CAAC;wCACjC,iBAAiB,IAAI,CACnB,oBAAC,QAAQ,IACP,WAAW,EAAE,OAAO,CAAC,WAAW,EAChC,MAAM,EAAE,kBAAkB,EAC1B,QAAQ,EAAE,KAAK,CAAC,2BAA2B,EAC3C,gBAAgB,EAAE,iBAAiB,GACnC,CACH;oCACF,CAAC,KAAK,CAAC,UAAU,IAAI,SAAS,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,8BAA8B,IAAI,CAC7F,oBAAC,SAAS,IACR,WAAW,EAAE,OAAO,CAAC,WAAW,EAChC,MAAM,EAAE,kBAAkB;wCAC1B,6CAA6C,CAAC,mDAAmD;wCACjG,QAAQ,EAAE,KAAK,CAAC,2BAA2B,IAAI,UAAU,CAAC,OAAO,CAAC,gBAAgB,CAAC,GACnF,CACH;oCACA,oBAAoB,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,gBAAgB,KAAK,SAAS,IAAI,CACxE,oBAAC,iBAAiB,IAChB,MAAM,EAAE,kBAAkB,EAC1B,WAAW,EAAE,OAAO,CAAC,WAAW,EAChC,OAAO,EAAE,GAAG,EAAE;4CACZ,IAAI,KAAK,CAAC,gBAAgB,KAAK,SAAS,EAAE,CAAC;gDACzC,KAAK,CAAC,gBAAgB,EAAE,CAAC;4CAC3B,CAAC;wCACH,CAAC,GACD,CACH;oCACA,uBAAuB,IAAI,KAAK,CAAC,oBAAoB,IAAI,CACxD,oBAAC,mBAAmB,IAClB,WAAW,EAAE,OAAO,CAAC,WAAW,EAChC,OAAO,EAAE,KAAK,CAAC,oBAAoB,EACnC,MAAM,EAAE,kBAAkB,EAC1B,OAAO,EAAE,0BAA0B,GACnC,CACH;oCACA,0BAA0B,IAAI,CAC7B,oBAAC,WAAW,IACV,MAAM,EAAE,OAAO,CAAC,iBAAiB,EACjC,WAAW,EAAE,OAAO,CAAC,WAAW,EAChC,MAAM,EAAE,uBAAuB;wCAC/B,6CAA6C,CAAC,mDAAmD;wCACjG,QAAQ,EAAE,KAAK,CAAC,2BAA2B,IAAI,UAAU,CAAC,OAAO,CAAC,iBAAiB,CAAC,GACpF,CACH,EACA,MAAA,aAAa,CAAC,SAAS,CAAC;uCACrB,KAAK,CACL,CAAC,EACD,KAAK,CAAC,UAAU;wCACd,CAAC,CAAC,qBAAqB,CAAC,iCAAiC;wCACzD,CAAC,CAAC,qBAAqB,CAAC,kCAAkC,EAE7D,GAAG,CAAC,CAAC,YAAY,EAAE,CAAC,EAAE,EAAE;wCACvB,OAAO,CACL,oBAAC,YAAY,IACX,GAAG,EAAE,yBAAyB,CAAC,EAAE,EACjC,MAAM,EAAE,kBAAkB,EAC1B,SAAS,EAAE,OAAO,CAAC,WAAW,KAAK,SAAS,EAC5C,cAAc,EAAE,KAAK,CAAC,UAAU,GAChC,CACH,CAAC;oCACJ,CAAC,CAAC;oCACH,KAAK,CAAC,UAAU,IAAI,CACnB,oBAAC,UAAU,kBACE,mCAAmC,EAC9C,OAAO,EAAE,iBAAiB,EAC1B,OAAO,EAAE,KAAK,CAAC,mBAAmB,EAClC,QAAQ,EAAE,KAAK,CAAC,0BAA0B,EAC1C,cAAc,EAAE,KAAK,CAAC,UAAU,GAChC,CACH;oCACA,CAAC,KAAK,CAAC,UAAU,IAAI,qBAAqB,IAAI,CAC7C,oBAAC,iBAAiB,IAChB,2BAA2B,EAAE,KAAK,CAAC,2BAA2B,EAC9D,MAAM,EAAE,kBAAkB;wCAC1B,4CAA4C;wCAC5C,kBAAkB,EAAE,KAAK,CAAC,kBAAkB,EAC5C,YAAY,EAAE,KAAK,CAAC,YAAY,EAChC,mBAAmB,EAAE,kBAAkB,EACvC,uBAAuB,EAAE,yBAAyB,EAClD,sCAAsC,EAAE,KAAK,CAAC,sCAAsC,EACpF,sBAAsB,EAAE,KAAK,CAAC,sBAAsB,EACpD,oBAAoB,EAAE,KAAK,CAAC,oBAAoB,EAChD,iBAAiB,EAAE,KAAK,CAAC,iBAAiB,EAC1C,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;wCACxC,2DAA2D;wCAC3D,2BAA2B,EAAE,+BAA+B;wCAC5D,2DAA2D;wCAC3D,uBAAuB,EAAE,KAAK,CAAC,mCAAmC,GAClE,CACH;oCACD,oBAAC,OAAO,IACN,WAAW,EAAC,SAAS,EACrB,UAAU,EAAE,KAAK,CAAC,UAAU,EAC5B,MAAM,EAAE,mBAAmB;wCAC3B,mDAAmD;wCACnD,iBAAiB,EACf,CAAC,SAAS,CAAC,KAAK,CAAC,YAAY,CAAC;4CAC9B,CAAC,SAAS,CAAC,MAAA,KAAK,CAAC,YAAY,0CAAE,aAAa,CAAC;4CAC7C,CAAC,KAAK,CAAC,UAAU;4CACjB,0BAA0B;4CAC1B,CAAC,OAAO,IAAI,sFAAsF;4CAClG,CAAA,MAAA,MAAA,KAAK,CAAC,YAAY,0CAAE,aAAa,0CAAE,iBAAiB,MAAK,gBAAgB;4CACzE,+GAA+G;4CAC/G,mEAAmE;4CACnE,SAAS,CAAC,UAAU,KAAK,WAAW,EAEtC,mBAAmB,EACjB,CAAC,SAAS,CAAC,KAAK,CAAC,YAAY,CAAC;4CAC9B,CAAC,SAAS,CAAC,MAAA,KAAK,CAAC,YAAY,0CAAE,aAAa,CAAC;6CAC7C,MAAA,MAAA,KAAK,CAAC,YAAY,0CAAE,aAAa,0CAAE,mBAAmB,CAAA,GAExD,CACS,CACT,CACK,CACP,CACY,CACX;YACZ,CAAC,KAAK,CAAC,UAAU,IAAI,kBAAkB,IAAI,CAC1C,oBAAC,KAAK,CAAC,IAAI;gBACT,6BAAK,GAAG,EAAE,mBAAmB;oBAC3B,oBAAC,KAAK,IAAC,UAAU,QAAC,SAAS,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,2BAA2B,CAAC,CAAC,CAAC,CAAC,SAAS;wBAClG,SAAS,CAAC,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,YAAY,CAAC,IAAI,CACnC,oBAAC,YAAY,IACX,OAAO,EAAE,KAAK,CAAC,mBAAmB,EAClC,SAAS,EACP,KAAK,CAAC,mBAAmB;gCACvB,CAAC,CAAC,mBAAmB,aAAnB,mBAAmB,uBAAnB,mBAAmB,CAAE,qBAAqB;gCAC5C,CAAC,CAAC,mBAAmB,aAAnB,mBAAmB,uBAAnB,mBAAmB,CAAE,oBAAoB,EAE/C,SAAS,EAAE,OAAO,CAAC,WAAW,KAAK,SAAS,EAC5C,OAAO,EAAE,KAAK,CAAC,qBAAqB,gBACzB,qCAAqC,EAChD,QAAQ,EACN,KAAK,CAAC,0BAA0B;gCAChC,KAAK,CAAC,2BAA2B;gCACjC,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC,EAElC,OAAO,EAAE,mBAAmB,EAC5B,MAAM,EAAE,kBAAkB,EAC1B,YAAY,EAAE,KAAK,CAAC,eAAe,GACnC,CACH,EACA,MAAA,aAAa,CAAC,WAAW,CAAC;2BACvB,KAAK,CAAC,CAAC,EAAE,qBAAqB,CAAC,oCAAoC,EACpE,GAAG,CAAC,CAAC,YAAY,EAAE,CAAC,EAAE,EAAE;4BACvB,OAAO,CACL,oBAAC,YAAY,IACX,GAAG,EAAE,2BAA2B,CAAC,EAAE,EACnC,MAAM,EAAE,kBAAkB,EAC1B,SAAS,EAAE,OAAO,CAAC,WAAW,KAAK,SAAS,GAC5C,CACH,CAAC;wBACJ,CAAC,CAAC,CACE,CACJ,CACK,CACd,CACK,CACJ,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,2BAA2B,GAAW;IAC1C,OAAO,EAAE,SAAS;IAClB,SAAS,EAAE,QAAQ;CACpB,CAAC;AAEF,MAAM,uBAAuB,GAAqB;IAChD,IAAI,EAAE,2BAA2B;CAClC,CAAC;AAEF,CAAC;IACC;;;MAGE;AACJ,CAAC;AACD,MAAM,oBAAoB,GAAW;IACnC,QAAQ,EAAE,UAAU;IACpB,IAAI,EAAE,KAAK;IACX,SAAS,EAAE,oBAAoB;CAChC,CAAC;AAEF,MAAM,uBAAuB,GAAW;IACtC,QAAQ,EAAE,UAAU;IACpB,KAAK,EAAE,KAAK;IACZ,SAAS,EAAE,oBAAoB;CAChC,CAAC;AAEF,eAAe;AACf,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,KAAa,EAA0B,EAAE,CAAC,CAAC;IACtF,IAAI,EAAE;QACJ,MAAM,EAAE,aAAa,KAAK,CAAC,OAAO,CAAC,oBAAoB,EAAE;QACzD,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,cAAc;QAC1C,SAAS,EAAE,QAAQ;QACnB,QAAQ,EAAE,OAAO,CAAC,oHAAoH;KACvI;IACD,aAAa,EAAE;QACb,OAAO,EAAE,MAAM;QACf,QAAQ,EAAE,YAAY;KACvB;IACD,aAAa,EAAE;QACb,oEAAoE;QACpE,OAAO,EAAE,QAAQ;QAEjB,8FAA8F;QAC9F,QAAQ,EAAE,MAAM;KACjB;IACD,KAAK,EAAE;QACL,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ;QAErC,mHAAmH;QACnH,UAAU,EAAE,UAAU;QAEtB,mGAAmG;QACnG,UAAU,EAAE,QAAQ;QAEpB,mIAAmI;QACnI,OAAO,EAAE,OAAO;QAChB,YAAY,EAAE,UAAU;QACxB,UAAU,EAAE,QAAQ;QACpB,QAAQ,EAAE,QAAQ;KACnB;IACD,qBAAqB,EAAE;QACrB,MAAM,EAAE,aAAa,KAAK,CAAC,OAAO,CAAC,oBAAoB,EAAE;QACzD,oBAAoB,EAAE,KAAK,CAAC,OAAO,CAAC,cAAc;QAClD,uBAAuB,EAAE,KAAK,CAAC,OAAO,CAAC,cAAc;QACrD,mBAAmB,EAAE,GAAG;QACxB,sBAAsB,EAAE,GAAG;KAC5B;IACD,4BAA4B,EAAE;QAC5B,gFAAgF;QAChF,yEAAyE;QACzE,UAAU,EAAE,MAAM;KACnB;CACF,CAAC,CAAC;AAEH,MAAM,iCAAiC,GAAG,CAAC,KAAa,EAA0B,EAAE;IAClF,MAAM,cAAc,GAAG;QACrB,MAAM,EAAE,MAAM;QACd,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,YAAY;QACtC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK;QAC1B,SAAS,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE;QACxC,gCAAgC,EAAE;YAChC,MAAM,EAAE,WAAW;YACnB,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK;SACjC;KACF,CAAC;IACF,MAAM,SAAS,GAA2B;QACxC,WAAW,EAAE,cAAc;QAC3B,kBAAkB,EAAE,cAAc;KACnC,CAAC;IACF,OAAO,eAAe,CAAC,4BAA4B,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC,CAAC;AACzE,CAAC,CAAC;AAEF,MAAM,6BAA6B,GAAG,CAAC,KAAa,EAA0B,EAAE;IAC9E,MAAM,SAAS,GAA2B;QACxC,IAAI,EAAE;YACJ,8CAA8C;YAC9C,MAAM,EAAE,MAAM;SACf;QACD,WAAW,EAAE;YACX,gCAAgC,EAAE;gBAChC,UAAU,EAAE,WAAW;gBACvB,KAAK,EAAE,eAAe;gBACtB,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK;gBAChC,YAAY,EAAE,OAAO;gBACrB,OAAO,EAAE,aAAa,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE;aAC5C;SACF;QACD,IAAI,EAAE;YACJ,gCAAgC,EAAE;gBAChC,UAAU,EAAE;oBACV,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK;iBAC3B;aACF;SACF;KACF,CAAC;IACF,OAAO,eAAe,CAAC,4BAA4B,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC,CAAC;AACzE,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,MAAe,EAAW,EAAE,CAAC,MAAM,KAAK,KAAK,CAAC;AAEjE,MAAM,oBAAoB,GAAG,CAAC,OAA8D,EAAW,EAAE;IACvG,IAAI,OAAO,CAAC,UAAU,KAAK,KAAK,IAAI,OAAO,CAAC,gBAAgB,KAAK,KAAK,EAAE,CAAC;QACvE,OAAO,IAAI,CAAC;IACd,CAAC;SAAM,CAAC;QACN,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport React, { useMemo, useRef, useEffect, useState, useCallback } from 'react';\nimport { CallAdapterProvider } from '../../CallComposite/adapter/CallAdapterProvider';\nimport { CallAdapter } from '../../CallComposite';\nimport { PeopleButton } from './PeopleButton';\nimport {\n  concatStyleSets,\n  IButton,\n  IStyle,\n  ITheme,\n  mergeStyles,\n  mergeStyleSets,\n  Stack,\n  useTheme\n} from '@fluentui/react';\nimport { controlBarContainerStyles } from '../../CallComposite/styles/CallControls.styles';\nimport { callControlsContainerStyles } from '../../CallComposite/styles/CallPage.styles';\nimport { useCallWithChatCompositeStrings } from '../../CallWithChatComposite/hooks/useCallWithChatCompositeStrings';\nimport { BaseCustomStyles, ControlBarButtonStyles } from '@internal/react-components';\nimport { VideoGalleryLayout } from '@internal/react-components';\nimport { ControlBar } from '@internal/react-components';\nimport { Microphone } from '../../CallComposite/components/buttons/Microphone';\nimport { Camera } from '../../CallComposite/components/buttons/Camera';\nimport { ScreenShare } from '../../CallComposite/components/buttons/ScreenShare';\nimport { EndCall } from '../../CallComposite/components/buttons/EndCall';\nimport { MoreButton } from '../MoreButton';\nimport { ContainerRectProps } from '../ContainerRectProps';\nimport {\n  CUSTOM_BUTTON_OPTIONS,\n  generateCustomCallControlBarButton,\n  onFetchCustomButtonPropsTrampoline\n} from './CustomButton';\nimport { DesktopMoreButton } from './DesktopMoreButton';\nimport { isDisabled } from '../../CallComposite/utils';\nimport { HiddenFocusStartPoint } from '../HiddenFocusStartPoint';\nimport { CallWithChatControlOptions } from '../../CallWithChatComposite';\nimport { CommonCallControlOptions } from '../types/CommonCallControlOptions';\nimport { CaptionsSettingsModal } from '../CaptionsSettingsModal';\nimport { RaiseHand } from '../../CallComposite/components/buttons/RaiseHand';\nimport { Reaction } from '../../CallComposite/components/buttons/Reaction';\nimport { useSelector } from '../../CallComposite/hooks/useSelector';\nimport { capabilitySelector } from '../../CallComposite/selectors/capabilitySelector';\nimport { DtmfDialpadButton } from './DtmfDialerButton';\nimport { ExitSpotlightButton } from '../ExitSpotlightButton';\nimport { useLocale } from '../../localization';\n/* @conditional-compile-remove(end-call-options) */\nimport { isBoolean } from '../utils';\n/* @conditional-compile-remove(end-call-options) */\nimport { getIsTeamsCall } from '../../CallComposite/selectors/baseSelectors';\nimport { callStatusSelector } from '../../CallComposite/selectors/callStatusSelector';\n/* @conditional-compile-remove(teams-meeting-conference) */\nimport { MeetingConferencePhoneInfoModal } from '@internal/react-components';\n\n/**\n * @private\n */\nexport interface CommonCallControlBarProps {\n  callAdapter: CallAdapter;\n  peopleButtonChecked: boolean;\n  onPeopleButtonClicked: () => void;\n  onMoreButtonClicked?: () => void;\n  mobileView: boolean;\n  disableButtonsForLobbyPage: boolean;\n  callControls?: boolean | CommonCallControlOptions | CallWithChatControlOptions;\n  disableButtonsForHoldScreen?: boolean;\n  /* @conditional-compile-remove(PSTN-calls) */\n  onClickShowDialpad?: () => void;\n  onClickVideoEffects?: (showVideoEffects: boolean) => void;\n  isCaptionsSupported?: boolean;\n  isCaptionsOn?: boolean;\n  displayVertical?: boolean;\n  onUserSetOverflowGalleryPositionChange?: (position: 'Responsive' | 'horizontalTop') => void;\n  onUserSetGalleryLayout?: (layout: VideoGalleryLayout) => void;\n  userSetGalleryLayout?: VideoGalleryLayout;\n  peopleButtonRef?: React.RefObject<IButton>;\n  cameraButtonRef?: React.RefObject<IButton>;\n  videoBackgroundPickerRef?: React.RefObject<IButton>;\n  onSetDialpadPage?: () => void;\n  dtmfDialerPresent?: boolean;\n  onStopLocalSpotlight?: () => void;\n  useTeamsCaptions?: boolean;\n  /* @conditional-compile-remove(teams-meeting-conference) */\n  onToggleTeamsMeetingConferenceModal?: () => void;\n  /* @conditional-compile-remove(teams-meeting-conference) */\n  teamsMeetingConferenceModalPresent?: boolean;\n}\n\nconst inferCommonCallControlOptions = (\n  mobileView: boolean,\n  commonCallControlOptions?: boolean | CallWithChatControlOptions\n): CallWithChatControlOptions | false => {\n  if (commonCallControlOptions === false) {\n    return false;\n  }\n\n  const options =\n    commonCallControlOptions === true || commonCallControlOptions === undefined ? {} : commonCallControlOptions;\n  if (mobileView) {\n    // Set to compressed mode when composite is optimized for mobile\n    options.displayType = 'compact';\n    // Set options to always not show screen share button for mobile\n    options.screenShareButton = false;\n  }\n  return options;\n};\n\n/**\n * @private\n */\nexport const CommonCallControlBar = (props: CommonCallControlBarProps & ContainerRectProps): JSX.Element => {\n  const theme = useTheme();\n  const rtl = theme.rtl;\n\n  const controlBarContainerRef = useRef<HTMLHeadingElement>(null);\n  const sidepaneControlsRef = useRef<HTMLHeadingElement>(null);\n  const controlBarSizeRef = useRef<HTMLHeadingElement>(null);\n\n  const [controlBarButtonsWidth, setControlBarButtonsWidth] = useState(0);\n  const [panelsButtonsWidth, setPanelsButtonsWidth] = useState(0);\n  const [controlBarContainerWidth, setControlBarContainerWidth] = useState(0);\n\n  const [totalButtonsWidth, setTotalButtonsWidth] = useState(0);\n  const [isOutOfSpace, setIsOutOfSpace] = useState(false);\n\n  const callWithChatStrings = useCallWithChatCompositeStrings();\n  const options = inferCommonCallControlOptions(props.mobileView, props.callControls);\n\n  const [showCaptionsSettingsModal, setShowCaptionsSettingsModal] = useState(false);\n\n  /* @conditional-compile-remove(end-call-options) */\n  // If the hangup capability is not present, we default to true\n  const isHangUpForEveryoneAllowed =\n    useSelector((state) => state.call?.capabilitiesFeature?.capabilities.hangUpForEveryOne.isPresent) ?? true;\n  /* @conditional-compile-remove(end-call-options) */\n  const isTeams = useSelector(getIsTeamsCall);\n\n  const handleResize = useCallback((): void => {\n    setControlBarButtonsWidth(controlBarContainerRef.current ? controlBarContainerRef.current.offsetWidth : 0);\n    setPanelsButtonsWidth(sidepaneControlsRef.current ? sidepaneControlsRef.current.offsetWidth : 0);\n    setControlBarContainerWidth(controlBarSizeRef.current ? controlBarSizeRef.current.offsetWidth : 0);\n  }, []);\n\n  // on load set inital width\n  useEffect(() => {\n    setControlBarButtonsWidth(controlBarContainerRef.current ? controlBarContainerRef.current.offsetWidth : 0);\n    setPanelsButtonsWidth(sidepaneControlsRef.current ? sidepaneControlsRef.current.offsetWidth : 0);\n    setControlBarContainerWidth(controlBarSizeRef.current ? controlBarSizeRef.current.offsetWidth : 0);\n  }, []);\n\n  // get the current width of control bar buttons and panel control buttons when browser size change\n  useEffect(() => {\n    window.addEventListener('resize', handleResize);\n    return () => window.removeEventListener('resize', handleResize);\n  }, [handleResize]);\n\n  /* when size change, reset total buttons width and compare with the control bar container width\n  if the total width of those buttons exceed container width, do not center the control bar buttons based on parent container width\n  Instead let them take up the remaining white space on the left */\n  useEffect(() => {\n    // white space on the left when control bar buttons are centered based on container width + control bar buttons width + panel control buttons width\n    setTotalButtonsWidth(\n      (controlBarContainerWidth - controlBarButtonsWidth) / 2 + controlBarButtonsWidth + panelsButtonsWidth\n    );\n  }, [controlBarButtonsWidth, panelsButtonsWidth, controlBarContainerWidth]);\n\n  useEffect(() => {\n    setIsOutOfSpace(totalButtonsWidth > controlBarContainerWidth);\n  }, [totalButtonsWidth, controlBarContainerWidth]);\n\n  const openCaptionsSettingsModal = useCallback((): void => {\n    setShowCaptionsSettingsModal(true);\n  }, []);\n\n  const onDismissCaptionsSettings = useCallback((): void => {\n    setShowCaptionsSettingsModal(false);\n  }, []);\n\n  const peopleButtonStrings = useMemo(\n    () => ({\n      label: callWithChatStrings.peopleButtonLabel,\n      selectedLabel: callWithChatStrings.selectedPeopleButtonLabel,\n      tooltipOpenAriaLabel: callWithChatStrings.peopleButtonTooltipOpenAriaLabel,\n      tooltipCloseAriaLabel: callWithChatStrings.peopleButtonTooltipCloseAriaLabel,\n      tooltipOffContent: callWithChatStrings.peopleButtonTooltipOpen,\n      tooltipOnContent: callWithChatStrings.peopleButtonTooltipClose\n    }),\n    [callWithChatStrings]\n  );\n  const moreButtonStrings = useMemo(\n    () => ({\n      label: callWithChatStrings.moreDrawerButtonLabel,\n      tooltipContent: callWithChatStrings.moreDrawerButtonTooltip\n    }),\n    [callWithChatStrings]\n  );\n  const callStrings = useLocale().strings.call;\n  const exitSpotlightButtonStrings = useMemo(\n    () => ({\n      label: callStrings.exitSpotlightButtonLabel,\n      tooltipContent: callStrings.exitSpotlightButtonTooltip\n    }),\n    [callStrings]\n  );\n\n  const centerContainerStyles = useMemo(() => {\n    const styles: BaseCustomStyles = !props.mobileView ? desktopControlBarStyles : {};\n    return mergeStyleSets(styles, {\n      root: {\n        // Enforce a background color on control bar to ensure it matches the composite background color.\n        background: theme.semanticColors.bodyBackground\n      }\n    });\n  }, [props.mobileView, theme.semanticColors.bodyBackground]);\n  const screenShareButtonStyles = useMemo(\n    () => (!props.mobileView ? getDesktopScreenShareButtonStyles(theme) : undefined),\n    [props.mobileView, theme]\n  );\n  const commonButtonStyles = useMemo(\n    () => (!props.mobileView ? getDesktopCommonButtonStyles(theme) : undefined),\n    [props.mobileView, theme]\n  );\n  const endCallButtonStyles = useMemo(\n    () => (!props.mobileView ? getDesktopEndCallButtonStyles(theme) : undefined),\n    [props.mobileView, theme]\n  );\n\n  const controlBarWrapperDesktopStyles: IStyle = useMemo(\n    // only center control bar buttons based on parent container if there are enough space on the screen and not mobile\n    () => (!props.mobileView && !isOutOfSpace ? (rtl ? wrapperDesktopRtlStyles : wrapperDesktopStyles) : {}),\n    [props.mobileView, rtl, isOutOfSpace]\n  );\n\n  // only center control bar buttons based on parent container if there are enough space on the screen and not mobile\n  const controlBarDesktopContainerStyles: IStyle = useMemo(\n    () => (!props.mobileView && !isOutOfSpace ? { position: 'relative', minHeight: '4.5rem', width: '100%' } : {}),\n    [props.mobileView, isOutOfSpace]\n  );\n\n  const customButtons = useMemo(\n    () =>\n      generateCustomCallControlBarButton(\n        onFetchCustomButtonPropsTrampoline(options !== false ? options : undefined),\n        options !== false ? options?.displayType : undefined\n      ),\n    [options]\n  );\n\n  const capabilitiesSelector = useSelector(capabilitySelector);\n  const callState = useSelector(callStatusSelector);\n  const isReactionAllowed =\n    callState.callStatus !== 'Connected' ||\n    !capabilitiesSelector?.capabilities ||\n    capabilitiesSelector.capabilities.useReactions.isPresent;\n\n  // when options is false then we want to hide the whole control bar.\n  if (options === false) {\n    return <></>;\n  }\n\n  const sideButtonsPresent =\n    isEnabled(options.peopleButton) || isEnabled(options.chatButton) || customButtons['secondary'] !== undefined;\n\n  const screenShareButtonIsEnabled = isEnabled(options?.screenShareButton);\n\n  const microphoneButtonIsEnabled = isEnabled(options?.microphoneButton);\n\n  const cameraButtonIsEnabled = isEnabled(options?.cameraButton);\n\n  const showExitSpotlightButton = options?.exitSpotlightButton !== false;\n\n  const showCaptionsButton =\n    props.isCaptionsSupported &&\n    /* @conditional-compile-remove(acs-close-captions) */ isEnabled(options.captionsButton);\n\n  /* @conditional-compile-remove(teams-meeting-conference) */\n  const showTeamsMeetingPhoneCallButton = isEnabled(options?.teamsMeetingPhoneCallButton);\n\n  const showDesktopMoreButton =\n    isEnabled(options?.moreButton) &&\n    (false ||\n      /*@conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */ isEnabled(\n        options?.holdButton\n      ) ||\n      showCaptionsButton ||\n      props.onUserSetGalleryLayout);\n\n  const role = props.callAdapter.getState().call?.role;\n  const hideRaiseHandButtonInRoomsCall =\n    props.callAdapter.getState().isRoomsCall && role && ['Consumer', 'Unknown'].includes(role);\n  const reactionResources = props.callAdapter.getState().reactions;\n\n  return (\n    <div ref={controlBarSizeRef}>\n      <CallAdapterProvider adapter={props.callAdapter}>\n        {showCaptionsSettingsModal && (\n          <CaptionsSettingsModal\n            showCaptionsSettingsModal={showCaptionsSettingsModal}\n            onDismissCaptionsSettings={onDismissCaptionsSettings}\n            changeCaptionLanguage={props.isCaptionsOn && props.useTeamsCaptions}\n          />\n        )}\n        {\n          /* @conditional-compile-remove(teams-meeting-conference) */ props.teamsMeetingConferenceModalPresent && (\n            <MeetingConferencePhoneInfoModal\n              conferencePhoneInfoList={props.callAdapter.getState().call?.teamsMeetingConference ?? []}\n              showModal={props.teamsMeetingConferenceModalPresent}\n              onDismissMeetingPhoneInfoSettings={props.onToggleTeamsMeetingConferenceModal}\n            />\n          )\n        }\n      </CallAdapterProvider>\n      <Stack\n        horizontal\n        reversed={!props.mobileView && !isOutOfSpace}\n        horizontalAlign=\"space-between\"\n        className={mergeStyles(\n          callControlsContainerStyles,\n          controlBarContainerStyles,\n          controlBarDesktopContainerStyles\n        )}\n      >\n        <Stack.Item grow className={mergeStyles(controlBarWrapperDesktopStyles)}>\n          <CallAdapterProvider adapter={props.callAdapter}>\n            <Stack horizontalAlign=\"center\">\n              {/*\n              HiddenFocusStartPoint is a util component used when we can't ensure the initial element for first\n              tab focus is at the top of dom tree. It moves the first-tab focus to the next interact-able element\n              immediately after it in the dom tree.\n              */}\n              <HiddenFocusStartPoint />\n              <Stack.Item>\n                {/*\n                  Note: We use the layout=\"horizontal\" instead of dockedBottom because of how we position the\n                  control bar. The control bar exists in a Stack below the MediaGallery. The MediaGallery is\n                  set to grow and fill the remaining space not taken up by the ControlBar. If we were to use\n                  dockedBottom it has position absolute and would therefore float on top of the media gallery,\n                  occluding some of its content.\n                */}\n                <div ref={controlBarContainerRef}>\n                  <ControlBar layout={props.displayVertical ? 'vertical' : 'horizontal'} styles={centerContainerStyles}>\n                    {microphoneButtonIsEnabled && (\n                      <Microphone\n                        displayType={options.displayType}\n                        styles={commonButtonStyles}\n                        splitButtonsForDeviceSelection={!props.mobileView}\n                        /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */\n                        disabled={props.disableButtonsForHoldScreen || isDisabled(options.microphoneButton)}\n                        disableTooltip={props.mobileView}\n                      />\n                    )}\n                    {cameraButtonIsEnabled && (\n                      <Camera\n                        displayType={options.displayType}\n                        styles={commonButtonStyles}\n                        splitButtonsForDeviceSelection={!props.mobileView}\n                        /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */\n                        disabled={props.disableButtonsForHoldScreen || isDisabled(options.cameraButton)}\n                        onClickVideoEffects={props.onClickVideoEffects}\n                        componentRef={props.cameraButtonRef}\n                        disableTooltip={props.mobileView}\n                      />\n                    )}\n                    {!props.mobileView &&\n                      isReactionAllowed &&\n                      isEnabled(options.reactionButton) &&\n                      reactionResources && (\n                        <Reaction\n                          displayType={options.displayType}\n                          styles={commonButtonStyles}\n                          disabled={props.disableButtonsForHoldScreen}\n                          reactionResource={reactionResources}\n                        />\n                      )}\n                    {!props.mobileView && isEnabled(options.raiseHandButton) && !hideRaiseHandButtonInRoomsCall && (\n                      <RaiseHand\n                        displayType={options.displayType}\n                        styles={commonButtonStyles}\n                        /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */\n                        disabled={props.disableButtonsForHoldScreen || isDisabled(options.microphoneButton)}\n                      />\n                    )}\n                    {showDtmfDialerButton(options) && props.onSetDialpadPage !== undefined && (\n                      <DtmfDialpadButton\n                        styles={commonButtonStyles}\n                        displayType={options.displayType}\n                        onClick={() => {\n                          if (props.onSetDialpadPage !== undefined) {\n                            props.onSetDialpadPage();\n                          }\n                        }}\n                      />\n                    )}\n                    {showExitSpotlightButton && props.onStopLocalSpotlight && (\n                      <ExitSpotlightButton\n                        displayType={options.displayType}\n                        onClick={props.onStopLocalSpotlight}\n                        styles={commonButtonStyles}\n                        strings={exitSpotlightButtonStrings}\n                      />\n                    )}\n                    {screenShareButtonIsEnabled && (\n                      <ScreenShare\n                        option={options.screenShareButton}\n                        displayType={options.displayType}\n                        styles={screenShareButtonStyles}\n                        /* @conditional-compile-remove(PSTN-calls) */ /* @conditional-compile-remove(one-to-n-calling) */\n                        disabled={props.disableButtonsForHoldScreen || isDisabled(options.screenShareButton)}\n                      />\n                    )}\n                    {customButtons['primary']\n                      ?.slice(\n                        0,\n                        props.mobileView\n                          ? CUSTOM_BUTTON_OPTIONS.MAX_PRIMARY_MOBILE_CUSTOM_BUTTONS\n                          : CUSTOM_BUTTON_OPTIONS.MAX_PRIMARY_DESKTOP_CUSTOM_BUTTONS\n                      )\n                      .map((CustomButton, i) => {\n                        return (\n                          <CustomButton\n                            key={`primary-custom-button-${i}`}\n                            styles={commonButtonStyles}\n                            showLabel={options.displayType !== 'compact'}\n                            disableTooltip={props.mobileView}\n                          />\n                        );\n                      })}\n                    {props.mobileView && (\n                      <MoreButton\n                        data-ui-id=\"common-call-composite-more-button\"\n                        strings={moreButtonStrings}\n                        onClick={props.onMoreButtonClicked}\n                        disabled={props.disableButtonsForLobbyPage}\n                        disableTooltip={props.mobileView}\n                      />\n                    )}\n                    {!props.mobileView && showDesktopMoreButton && (\n                      <DesktopMoreButton\n                        disableButtonsForHoldScreen={props.disableButtonsForHoldScreen}\n                        styles={commonButtonStyles}\n                        /*@conditional-compile-remove(PSTN-calls) */\n                        onClickShowDialpad={props.onClickShowDialpad}\n                        callControls={props.callControls}\n                        isCaptionsSupported={showCaptionsButton}\n                        onCaptionsSettingsClick={openCaptionsSettingsModal}\n                        onUserSetOverflowGalleryPositionChange={props.onUserSetOverflowGalleryPositionChange}\n                        onUserSetGalleryLayout={props.onUserSetGalleryLayout}\n                        userSetGalleryLayout={props.userSetGalleryLayout}\n                        dtmfDialerPresent={props.dtmfDialerPresent}\n                        onSetDialpadPage={props.onSetDialpadPage}\n                        /* @conditional-compile-remove(teams-meeting-conference) */\n                        teamsMeetingPhoneCallEnable={showTeamsMeetingPhoneCallButton}\n                        /* @conditional-compile-remove(teams-meeting-conference) */\n                        onMeetingPhoneInfoClick={props.onToggleTeamsMeetingConferenceModal}\n                      />\n                    )}\n                    <EndCall\n                      displayType=\"compact\"\n                      mobileView={props.mobileView}\n                      styles={endCallButtonStyles}\n                      /* @conditional-compile-remove(end-call-options) */\n                      enableEndCallMenu={\n                        !isBoolean(props.callControls) &&\n                        !isBoolean(props.callControls?.endCallButton) &&\n                        !props.mobileView &&\n                        isHangUpForEveryoneAllowed &&\n                        !isTeams && // Temporary disable it for Teams call, since capability does not give the right value\n                        props.callControls?.endCallButton?.hangUpForEveryone === 'endCallOptions' &&\n                        // Only show the end call menu when the call is connected, user should not be able to end the call for everyone\n                        // when they are not actively in the call to communicate they will.\n                        callState.callStatus === 'Connected'\n                      }\n                      disableEndCallModal={\n                        !isBoolean(props.callControls) &&\n                        !isBoolean(props.callControls?.endCallButton) &&\n                        props.callControls?.endCallButton?.disableEndCallModal\n                      }\n                    />\n                  </ControlBar>\n                </div>\n              </Stack.Item>\n            </Stack>\n          </CallAdapterProvider>\n        </Stack.Item>\n        {!props.mobileView && sideButtonsPresent && (\n          <Stack.Item>\n            <div ref={sidepaneControlsRef}>\n              <Stack horizontal className={!props.mobileView ? mergeStyles(desktopButtonContainerStyle) : undefined}>\n                {isEnabled(options?.peopleButton) && (\n                  <PeopleButton\n                    checked={props.peopleButtonChecked}\n                    ariaLabel={\n                      props.peopleButtonChecked\n                        ? peopleButtonStrings?.tooltipCloseAriaLabel\n                        : peopleButtonStrings?.tooltipOpenAriaLabel\n                    }\n                    showLabel={options.displayType !== 'compact'}\n                    onClick={props.onPeopleButtonClicked}\n                    data-ui-id=\"common-call-composite-people-button\"\n                    disabled={\n                      props.disableButtonsForLobbyPage ||\n                      props.disableButtonsForHoldScreen ||\n                      isDisabled(options.peopleButton)\n                    }\n                    strings={peopleButtonStrings}\n                    styles={commonButtonStyles}\n                    componentRef={props.peopleButtonRef}\n                  />\n                )}\n                {customButtons['secondary']\n                  ?.slice(0, CUSTOM_BUTTON_OPTIONS.MAX_SECONDARY_DESKTOP_CUSTOM_BUTTONS)\n                  .map((CustomButton, i) => {\n                    return (\n                      <CustomButton\n                        key={`secondary-custom-button-${i}`}\n                        styles={commonButtonStyles}\n                        showLabel={options.displayType !== 'compact'}\n                      />\n                    );\n                  })}\n              </Stack>\n            </div>\n          </Stack.Item>\n        )}\n      </Stack>\n    </div>\n  );\n};\n\nconst desktopButtonContainerStyle: IStyle = {\n  padding: '0.75rem',\n  columnGap: '0.5rem'\n};\n\nconst desktopControlBarStyles: BaseCustomStyles = {\n  root: desktopButtonContainerStyle\n};\n\n{\n  /*\n    Styling here to ensure the control bar buttons stay in the center of the parent component (control Container) regardless of its siblings\n    Need to add 'reversed' to parent container because the styling here reverse the position of the two stack items \n  */\n}\nconst wrapperDesktopStyles: IStyle = {\n  position: 'absolute',\n  left: '50%',\n  transform: 'translate(-50%, 0)'\n};\n\nconst wrapperDesktopRtlStyles: IStyle = {\n  position: 'absolute',\n  right: '50%',\n  transform: 'translate(-50%, 0)'\n};\n\n/** @private */\nexport const getDesktopCommonButtonStyles = (theme: ITheme): ControlBarButtonStyles => ({\n  root: {\n    border: `solid 1px ${theme.palette.neutralQuaternaryAlt}`,\n    borderRadius: theme.effects.roundedCorner4,\n    minHeight: '2.5rem',\n    maxWidth: '12rem' // allot extra space than the regular ControlBarButton. This is to give extra room to have the icon beside the text.\n  },\n  flexContainer: {\n    display: 'flex',\n    flexFlow: 'row nowrap'\n  },\n  textContainer: {\n    // Override the default so that label doesn't introduce a new block.\n    display: 'inline',\n\n    // Ensure width is set to permit child to show ellipsis when there is a label that is too long\n    maxWidth: '100%'\n  },\n  label: {\n    fontSize: theme.fonts.medium.fontSize,\n\n    // Ensure there is enough space between the icon and text to allow for the unread messages badge in the chat button\n    marginLeft: '0.625rem',\n\n    // Ensure letters that go above and below the standard text line like 'g', 'y', 'j' are not clipped\n    lineHeight: '1.5rem',\n\n    // Do not allow very long button texts to ruin the control bar experience, instead ensure long text is truncated and shows ellipsis\n    display: 'block',\n    textOverflow: 'ellipsis',\n    whiteSpace: 'nowrap',\n    overflow: 'hidden'\n  },\n  splitButtonMenuButton: {\n    border: `solid 1px ${theme.palette.neutralQuaternaryAlt}`,\n    borderTopRightRadius: theme.effects.roundedCorner4,\n    borderBottomRightRadius: theme.effects.roundedCorner4,\n    borderTopLeftRadius: '0',\n    borderBottomLeftRadius: '0'\n  },\n  splitButtonMenuButtonChecked: {\n    // Default colors the menu half similarly for :hover and when button is checked.\n    // To align with how the left-half is styled, override the checked style.\n    background: 'none'\n  }\n});\n\nconst getDesktopScreenShareButtonStyles = (theme: ITheme): ControlBarButtonStyles => {\n  const overrideStyles = {\n    border: 'none',\n    background: theme.palette.themePrimary,\n    color: theme.palette.white,\n    '* > svg': { fill: theme.palette.white },\n    '@media (forced-colors: active)': {\n      border: '1px solid',\n      borderColor: theme.palette.black\n    }\n  };\n  const overrides: ControlBarButtonStyles = {\n    rootChecked: overrideStyles,\n    rootCheckedHovered: overrideStyles\n  };\n  return concatStyleSets(getDesktopCommonButtonStyles(theme), overrides);\n};\n\nconst getDesktopEndCallButtonStyles = (theme: ITheme): ControlBarButtonStyles => {\n  const overrides: ControlBarButtonStyles = {\n    root: {\n      // Suppress border around the dark-red button.\n      border: 'none'\n    },\n    rootFocused: {\n      '@media (forced-colors: active)': {\n        background: 'highlight',\n        color: 'highlightText',\n        borderColor: theme.palette.black,\n        borderRadius: 'unset',\n        outline: `3px solid ${theme.palette.black}`\n      }\n    },\n    icon: {\n      '@media (forced-colors: active)': {\n        ':focused': {\n          color: theme.palette.white\n        }\n      }\n    }\n  };\n  return concatStyleSets(getDesktopCommonButtonStyles(theme), overrides);\n};\n\nconst isEnabled = (option: unknown): boolean => option !== false;\n\nconst showDtmfDialerButton = (options: CommonCallControlOptions | CallWithChatControlOptions): boolean => {\n  if (options.moreButton === false && options.dtmfDialerButton !== false) {\n    return true;\n  } else {\n    return false;\n  }\n};\n"]}
         
     | 
| 
         @@ -18,7 +18,7 @@ import { useLocale } from '../localization'; 
     | 
|
| 
       18 
18 
     | 
    
         
             
            export const MeetingPhoneInfoPaneContent = (props) => {
         
     | 
| 
       19 
19 
     | 
    
         
             
                const { conferencePhoneInfoList } = props;
         
     | 
| 
       20 
20 
     | 
    
         
             
                const theme = useTheme();
         
     | 
| 
       21 
     | 
    
         
            -
                const localeStrings = useLocale().component.strings. 
     | 
| 
      
 21 
     | 
    
         
            +
                const localeStrings = useLocale().component.strings.MeetingConferencePhoneInfo;
         
     | 
| 
       22 
22 
     | 
    
         
             
                if (props.mobileView) {
         
     | 
| 
       23 
23 
     | 
    
         
             
                    return (React.createElement(Stack, { verticalFill: true, styles: phoneInfoContainerStyle, tokens: phoneInfoContainerTokens, "data-ui-id": "phone-info-pane-content" },
         
     | 
| 
       24 
24 
     | 
    
         
             
                        (conferencePhoneInfoList === undefined || conferencePhoneInfoList.length === 0) && (React.createElement(Stack, { horizontal: true },
         
     | 
| 
         @@ -29,7 +29,7 @@ export const MeetingPhoneInfoPaneContent = (props) => { 
     | 
|
| 
       29 
29 
     | 
    
         
             
                                    React.createElement(Stack, { horizontal: true, className: phoneInfoStep },
         
     | 
| 
       30 
30 
     | 
    
         
             
                                        React.createElement(Stack.Item, { className: phoneInfoIcon(theme) },
         
     | 
| 
       31 
31 
     | 
    
         
             
                                            React.createElement(Stack, { verticalAlign: "center", horizontalAlign: "center" },
         
     | 
| 
       32 
     | 
    
         
            -
                                                React.createElement(Icon, { iconName: " 
     | 
| 
      
 32 
     | 
    
         
            +
                                                React.createElement(Icon, { iconName: "PhoneNumberButton", className: phoneInfoIconStyle(theme) }))),
         
     | 
| 
       33 
33 
     | 
    
         
             
                                        React.createElement(Stack.Item, null,
         
     | 
| 
       34 
34 
     | 
    
         
             
                                            React.createElement(Text, { className: phoneInfoLabelStyle }, localeStrings.meetingConferencePhoneInfoModalDialIn)))),
         
     | 
| 
       35 
35 
     | 
    
         
             
                                React.createElement(Stack.Item, { className: phoneInfoStep }, conferencePhoneInfoList.map((phoneNumber, index) => (React.createElement(Stack.Item, { key: index },
         
     | 
| 
         @@ -47,7 +47,7 @@ export const MeetingPhoneInfoPaneContent = (props) => { 
     | 
|
| 
       47 
47 
     | 
    
         
             
                                React.createElement(Stack.Item, null,
         
     | 
| 
       48 
48 
     | 
    
         
             
                                    React.createElement(Stack, { horizontal: true },
         
     | 
| 
       49 
49 
     | 
    
         
             
                                        React.createElement(Stack.Item, { className: phoneInfoIcon(theme) },
         
     | 
| 
       50 
     | 
    
         
            -
                                            React.createElement(Icon, { iconName: " 
     | 
| 
      
 50 
     | 
    
         
            +
                                            React.createElement(Icon, { iconName: "DtmfDialpadButton", className: phoneInfoIconStyle(theme) })),
         
     | 
| 
       51 
51 
     | 
    
         
             
                                        React.createElement(Stack.Item, null,
         
     | 
| 
       52 
52 
     | 
    
         
             
                                            React.createElement(Text, { className: phoneInfoLabelStyle }, localeStrings.meetingConferencePhoneInfoModalMeetingId)))),
         
     | 
| 
       53 
53 
     | 
    
         
             
                                React.createElement(Text, { className: phoneInfoTextStyle },
         
     | 
| 
         @@ -56,7 +56,7 @@ export const MeetingPhoneInfoPaneContent = (props) => { 
     | 
|
| 
       56 
56 
     | 
    
         
             
                            React.createElement(Stack, { horizontal: true, horizontalAlign: "space-between", verticalAlign: "center", className: phoneInfoInstructionLine },
         
     | 
| 
       57 
57 
     | 
    
         
             
                                React.createElement(Stack, { horizontal: true },
         
     | 
| 
       58 
58 
     | 
    
         
             
                                    React.createElement(Stack.Item, { className: phoneInfoIcon(theme) },
         
     | 
| 
       59 
     | 
    
         
            -
                                        React.createElement(Icon, { iconName: " 
     | 
| 
      
 59 
     | 
    
         
            +
                                        React.createElement(Icon, { iconName: "PhoneInfoWait", className: phoneInfoIconStyle(theme) })),
         
     | 
| 
       60 
60 
     | 
    
         
             
                                    React.createElement(Stack.Item, null,
         
     | 
| 
       61 
61 
     | 
    
         
             
                                        React.createElement(Text, { className: phoneInfoLabelStyle }, localeStrings.meetingConferencePhoneInfoModalWait))))))));
         
     | 
| 
       62 
62 
     | 
    
         
             
                }
         
     |