@azure/communication-react 1.18.0-alpha-202407191547 → 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 +15 -23
 - package/dist/dist-cjs/communication-react/{ChatMessageComponentAsRichTextEditBox-ChK7xe6Z.js → ChatMessageComponentAsRichTextEditBox-CmXCpkwp.js} +5 -33
 - package/dist/dist-cjs/communication-react/ChatMessageComponentAsRichTextEditBox-CmXCpkwp.js.map +1 -0
 - package/dist/dist-cjs/communication-react/{RichTextSendBoxWrapper-BLCHZv_g.js → RichTextSendBoxWrapper-DI4k0qyf.js} +2 -2
 - package/dist/dist-cjs/communication-react/{RichTextSendBoxWrapper-BLCHZv_g.js.map → RichTextSendBoxWrapper-DI4k0qyf.js.map} +1 -1
 - package/dist/dist-cjs/communication-react/{index-BWVQuckY.js → index-BSczaURy.js} +184 -249
 - 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/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/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/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/MyMessageComponents/ChatMessageComponentAsRichTextEditBox.js +4 -35
 - 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.js +1 -6
 - package/dist/dist-esm/react-components/src/components/ChatMessage/MyMessageComponents/ChatMyMessageComponent.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/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/RichTextSendBox.js +14 -21
 - package/dist/dist-esm/react-components/src/components/RichTextEditor/RichTextSendBox.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 -0
 - package/dist/dist-esm/react-components/src/components/styles/RichTextEditor.styles.js.map +1 -1
 - package/dist/dist-esm/react-components/src/components/utils/SendBoxUtils.d.ts +2 -6
 - package/dist/dist-esm/react-components/src/components/utils/SendBoxUtils.js +12 -57
 - 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 +1 -1
 - 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/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/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 +7 -7
 - package/dist/dist-cjs/communication-react/ChatMessageComponentAsRichTextEditBox-ChK7xe6Z.js.map +0 -1
 - package/dist/dist-cjs/communication-react/index-BWVQuckY.js.map +0 -1
 
| 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            {"version":3,"file":"AttachmentCard.js","sourceRoot":"","sources":["../../../../../../../react-components/src/components/Attachment/AttachmentCard.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { Icon, TooltipHost } from '@fluentui/react';\nimport {\n  Card,\n  CardHeader,\n  Text,\n  Menu,\n  MenuTrigger,\n  ToolbarButton,\n  MenuPopover,\n  MenuItem,\n  MenuList,\n  Toolbar,\n  CardFooter,\n  ProgressBar,\n  mergeClasses\n} from '@fluentui/react-components';\nimport { getFileTypeIconProps } from '@fluentui/react-file-type-icons';\nimport React from 'react';\nimport { _pxToRem } from '@internal/acs-ui-common';\nimport { Announcer } from '../Announcer';\nimport { useEffect, useState, useMemo } from 'react';\nimport { _AttachmentUploadCardsStrings } from './AttachmentUploadCards';\nimport { useLocaleAttachmentCardStringsTrampoline } from '../utils/common';\nimport { AttachmentMenuAction } from '../../types/Attachment';\nimport { AttachmentMetadata, AttachmentMetadataInProgress } from '@internal/acs-ui-common';\nimport {\n  useAttachmentCardStyles,\n  ATTACHMENT_CARD_MIN_PROGRESS,\n  titleTooltipContainerStyle\n} from '../styles/AttachmentCard.styles';\n\n/**\n * @internal\n * AttachmentCard Component Props.\n */\nexport interface _AttachmentCardProps {\n  /**\n   * Attachment details including name, extension, url, etc.\n   */\n  attachment: AttachmentMetadata | AttachmentMetadataInProgress;\n  /**\n   * An array of menu actions to be displayed in the attachment card.\n   */\n  menuActions: AttachmentMenuAction[];\n  /**\n   * Optional aria label strings for attachment upload cards\n   */\n  strings?: _AttachmentUploadCardsStrings;\n  /**\n   * Optional callback that runs if menu bar action onclick throws.\n   */\n  onActionHandlerFailed?: (errMsg: string) => void;\n  /**\n   * Optional flag to enable self resizing of the attachment card.\n   */\n  selfResizing?: boolean;\n}\n\n/**\n * @internal\n * A component for displaying an attachment card with attachment icon and progress bar.\n *\n * `_AttachmentCard` internally uses the `Card` component from `@fluentui/react-components`. You can checkout the details about these components [here](https://react.fluentui.dev/?path=/docs/components-card).\n */\nexport const _AttachmentCard = (props: _AttachmentCardProps): JSX.Element => {\n  const { attachment, menuActions, onActionHandlerFailed, selfResizing } = props;\n  const attachmentCardStyles = useAttachmentCardStyles();\n\n  const progress = useMemo(() => {\n    return 'progress' in attachment ? attachment.progress : undefined;\n  }, [attachment]);\n\n  const isUploadInProgress = useMemo(() => {\n    return progress !== undefined && progress >= 0 && progress < 1;\n  }, [progress]);\n\n  const [announcerString, setAnnouncerString] = useState<string | undefined>(undefined);\n  const localeStrings = useLocaleAttachmentCardStringsTrampoline();\n  const uploadStartedString = props.strings?.uploading ?? localeStrings.uploading;\n  const uploadCompletedString = props.strings?.uploadCompleted ?? localeStrings.uploadCompleted;\n\n  useEffect(() => {\n    if (isUploadInProgress) {\n      setAnnouncerString(`${uploadStartedString} ${attachment.name}`);\n    } else if (progress === 1) {\n      setAnnouncerString(`${attachment.name} ${uploadCompletedString}`);\n    } else {\n      setAnnouncerString(undefined);\n    }\n  }, [progress, isUploadInProgress, attachment.name, uploadStartedString, uploadCompletedString]);\n\n  const extension = useMemo((): string => {\n    const re = /(?:\\.([^.]+))?$/;\n    const match = re.exec(attachment.name);\n    return match && match[1] ? match[1] : '';\n  }, [attachment]);\n  return (\n    <div data-is-focusable={true}>\n      <Announcer announcementString={announcerString} ariaLive={'polite'} />\n      <Card\n        className={mergeClasses(\n          attachmentCardStyles.root,\n          selfResizing ? attachmentCardStyles.dynamicWidth : attachmentCardStyles.staticWidth\n        )}\n        size=\"small\"\n        role=\"listitem\"\n        appearance=\"filled-alternative\"\n        aria-label={attachment.name}\n        data-testid={'attachment-card'}\n      >\n        <CardHeader\n          className={attachmentCardStyles.content}\n          image={{\n            className: attachmentCardStyles.fileIcon,\n            children: (\n              <Icon\n                data-ui-id={'attachmenttype-icon'}\n                iconName={\n                  getFileTypeIconProps({\n                    extension: extension,\n                    size: 24,\n                    imageFileType: 'svg'\n                  }).iconName\n                }\n              />\n            )\n          }}\n          header={{\n            id: 'attachment-' + attachment.id,\n            children: (\n              <TooltipHost\n                content={attachment.name}\n                calloutProps={{\n                  gapSpace: 0,\n                  target: '#attachment-' + attachment.id\n                }}\n                hostClassName={titleTooltipContainerStyle}\n              >\n                <Text className={attachmentCardStyles.title} aria-label={attachment.name}>\n                  {attachment.name}\n                </Text>\n              </TooltipHost>\n            )\n          }}\n          action={{\n            className: attachmentCardStyles.actions,\n            children: MappedMenuItems(\n              menuActions,\n              {\n                ...attachment,\n                url: attachment.url ?? ''\n              },\n              onActionHandlerFailed\n            )\n          }}\n        />\n      </Card>\n      {isUploadInProgress ? (\n        <CardFooter>\n          <ProgressBar\n            thickness=\"medium\"\n            value={Math.max(progress ?? 0, ATTACHMENT_CARD_MIN_PROGRESS)}\n            shape=\"rounded\"\n          />\n        </CardFooter>\n      ) : (\n        <> </>\n      )}\n    </div>\n  );\n};\n\nconst MappedMenuItems = (\n  menuActions: AttachmentMenuAction[],\n  attachment: AttachmentMetadata,\n  handleOnClickError?: (errMsg: string) => void\n): JSX.Element => {\n  const localeStrings = useLocaleAttachmentCardStringsTrampoline();\n\n  if (menuActions.length === 0) {\n    return <></>;\n  }\n  return menuActions.length === 1 ? (\n    <TooltipHost content={menuActions[0].name}>\n      <ToolbarButton\n        aria-label={menuActions[0].name}\n        role=\"button\"\n        icon={menuActions[0].icon}\n        onClick={() => {\n          try {\n            menuActions[0].onClick(attachment);\n          } catch (e) {\n            handleOnClickError?.((e as Error).message);\n          }\n        }}\n      />\n    </TooltipHost>\n  ) : (\n    <Toolbar>\n      <Menu>\n        <TooltipHost content={localeStrings.attachmentMoreMenu}>\n          <MenuTrigger>\n            <ToolbarButton\n              aria-label={localeStrings.attachmentMoreMenu}\n              role=\"button\"\n              icon={<Icon iconName=\"AttachmentMoreMenu\" />}\n            />\n          </MenuTrigger>\n        </TooltipHost>\n        <MenuPopover>\n          <MenuList>\n            {menuActions.map((menuItem, index) => (\n              <MenuItem\n                aria-label={menuItem.name}\n                key={index}\n                icon={menuItem.icon}\n                onClick={async () => {\n                  try {\n                    await menuItem.onClick(attachment);\n                  } catch (e) {\n                    handleOnClickError?.((e as Error).message);\n                  }\n                }}\n              >\n                {menuItem.name}\n              </MenuItem>\n            ))}\n          </MenuList>\n        </MenuPopover>\n      </Menu>\n    </Toolbar>\n  );\n};\n"]}
         
     | 
| 
      
 1 
     | 
    
         
            +
            {"version":3,"file":"AttachmentCard.js","sourceRoot":"","sources":["../../../../../../../react-components/src/components/Attachment/AttachmentCard.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { Icon, TooltipHost } from '@fluentui/react';\nimport {\n  Card,\n  CardHeader,\n  Text,\n  Menu,\n  MenuTrigger,\n  ToolbarButton,\n  MenuPopover,\n  MenuItem,\n  MenuList,\n  Toolbar,\n  CardFooter,\n  ProgressBar,\n  mergeClasses\n} from '@fluentui/react-components';\nimport { getFileTypeIconProps } from '@fluentui/react-file-type-icons';\nimport React from 'react';\nimport { _pxToRem } from '@internal/acs-ui-common';\nimport { Announcer } from '../Announcer';\nimport { useEffect, useState, useMemo } from 'react';\nimport { _AttachmentUploadCardsStrings } from './AttachmentUploadCards';\nimport { useLocaleAttachmentCardStringsTrampoline } from '../utils/common';\nimport { AttachmentMenuAction } from '../../types/Attachment';\nimport { AttachmentMetadata, AttachmentMetadataInProgress } from '@internal/acs-ui-common';\nimport {\n  useAttachmentCardStyles,\n  attachmentNameContainerClassName,\n  ATTACHMENT_CARD_MIN_PROGRESS\n} from '../styles/AttachmentCard.styles';\n\n/**\n * @internal\n * AttachmentCard Component Props.\n */\nexport interface _AttachmentCardProps {\n  /**\n   * Attachment details including name, extension, url, etc.\n   */\n  attachment: AttachmentMetadata | AttachmentMetadataInProgress;\n  /**\n   * An array of menu actions to be displayed in the attachment card.\n   */\n  menuActions: AttachmentMenuAction[];\n  /**\n   * Optional aria label strings for attachment upload cards\n   */\n  strings?: _AttachmentUploadCardsStrings;\n  /**\n   * Optional callback that runs if menu bar action onclick throws.\n   */\n  onActionHandlerFailed?: (errMsg: string) => void;\n  /**\n   * Optional flag to enable self resizing of the attachment card.\n   */\n  selfResizing?: boolean;\n}\n\n/**\n * @internal\n * A component for displaying an attachment card with attachment icon and progress bar.\n *\n * `_AttachmentCard` internally uses the `Card` component from `@fluentui/react-components`. You can checkout the details about these components [here](https://react.fluentui.dev/?path=/docs/components-card).\n */\nexport const _AttachmentCard = (props: _AttachmentCardProps): JSX.Element => {\n  const { attachment, menuActions, onActionHandlerFailed, selfResizing } = props;\n  const attachmentCardStyles = useAttachmentCardStyles();\n\n  const progress = useMemo(() => {\n    return 'progress' in attachment ? attachment.progress : undefined;\n  }, [attachment]);\n\n  const isUploadInProgress = useMemo(() => {\n    return progress !== undefined && progress >= 0 && progress < 1;\n  }, [progress]);\n\n  const [announcerString, setAnnouncerString] = useState<string | undefined>(undefined);\n  const localeStrings = useLocaleAttachmentCardStringsTrampoline();\n  const uploadStartedString = props.strings?.uploading ?? localeStrings.uploading;\n  const uploadCompletedString = props.strings?.uploadCompleted ?? localeStrings.uploadCompleted;\n\n  useEffect(() => {\n    if (isUploadInProgress) {\n      setAnnouncerString(`${uploadStartedString} ${attachment.name}`);\n    } else if (progress === 1) {\n      setAnnouncerString(`${attachment.name} ${uploadCompletedString}`);\n    } else {\n      setAnnouncerString(undefined);\n    }\n  }, [progress, isUploadInProgress, attachment.name, uploadStartedString, uploadCompletedString]);\n\n  const extension = useMemo((): string => {\n    const re = /(?:\\.([^.]+))?$/;\n    const match = re.exec(attachment.name);\n    return match && match[1] ? match[1] : '';\n  }, [attachment]);\n  return (\n    <div data-is-focusable={true}>\n      <Announcer announcementString={announcerString} ariaLive={'polite'} />\n      <Card\n        className={mergeClasses(\n          attachmentCardStyles.root,\n          selfResizing ? attachmentCardStyles.dynamicWidth : attachmentCardStyles.staticWidth\n        )}\n        size=\"small\"\n        role=\"listitem\"\n        appearance=\"filled-alternative\"\n        aria-label={attachment.name}\n        data-testid={'attachment-card'}\n      >\n        <CardHeader\n          className={attachmentCardStyles.content}\n          image={\n            <div className={attachmentCardStyles.fileIcon}>\n              <Icon\n                data-ui-id={'attachmenttype-icon'}\n                iconName={\n                  getFileTypeIconProps({\n                    extension: extension,\n                    size: 24,\n                    imageFileType: 'svg'\n                  }).iconName\n                }\n              />\n            </div>\n          }\n          header={\n            <div className={attachmentNameContainerClassName} id={'attachment-' + attachment.id}>\n              <TooltipHost\n                content={attachment.name}\n                calloutProps={{\n                  gapSpace: 0,\n                  target: '#attachment-' + attachment.id\n                }}\n              >\n                <div className={attachmentCardStyles.fileNameLabel}>\n                  <Text className={attachmentCardStyles.title} aria-label={attachment.name}>\n                    {attachment.name}\n                  </Text>\n                </div>\n              </TooltipHost>\n            </div>\n          }\n          action={\n            <div className={attachmentCardStyles.focusState}>\n              {MappedMenuItems(\n                menuActions,\n                {\n                  ...attachment,\n                  url: attachment.url ?? ''\n                },\n                onActionHandlerFailed\n              )}\n            </div>\n          }\n        />\n      </Card>\n      {isUploadInProgress ? (\n        <CardFooter>\n          <ProgressBar\n            thickness=\"medium\"\n            value={Math.max(progress ?? 0, ATTACHMENT_CARD_MIN_PROGRESS)}\n            shape=\"rounded\"\n          />\n        </CardFooter>\n      ) : (\n        <> </>\n      )}\n    </div>\n  );\n};\n\nconst MappedMenuItems = (\n  menuActions: AttachmentMenuAction[],\n  attachment: AttachmentMetadata,\n  handleOnClickError?: (errMsg: string) => void\n): JSX.Element => {\n  const localeStrings = useLocaleAttachmentCardStringsTrampoline();\n\n  if (menuActions.length === 0) {\n    return <></>;\n  }\n  return menuActions.length === 1 ? (\n    <TooltipHost content={menuActions[0].name}>\n      <ToolbarButton\n        aria-label={menuActions[0].name}\n        role=\"button\"\n        icon={menuActions[0].icon}\n        onClick={() => {\n          try {\n            menuActions[0].onClick(attachment);\n          } catch (e) {\n            handleOnClickError?.((e as Error).message);\n          }\n        }}\n      />\n    </TooltipHost>\n  ) : (\n    <Toolbar>\n      <Menu>\n        <TooltipHost content={localeStrings.attachmentMoreMenu}>\n          <MenuTrigger>\n            <ToolbarButton\n              aria-label={localeStrings.attachmentMoreMenu}\n              role=\"button\"\n              icon={<Icon iconName=\"AttachmentMoreMenu\" />}\n            />\n          </MenuTrigger>\n        </TooltipHost>\n        <MenuPopover>\n          <MenuList>\n            {menuActions.map((menuItem, index) => (\n              <MenuItem\n                aria-label={menuItem.name}\n                key={index}\n                icon={menuItem.icon}\n                onClick={async () => {\n                  try {\n                    await menuItem.onClick(attachment);\n                  } catch (e) {\n                    handleOnClickError?.((e as Error).message);\n                  }\n                }}\n              >\n                {menuItem.name}\n              </MenuItem>\n            ))}\n          </MenuList>\n        </MenuPopover>\n      </Menu>\n    </Toolbar>\n  );\n};\n"]}
         
     | 
| 
         @@ -15,7 +15,7 @@ import { _AttachmentUploadCards } from '../../Attachment/AttachmentUploadCards'; 
     | 
|
| 
       15 
15 
     | 
    
         
             
            import { useChatMessageRichTextEditContainerStyles } from '../../styles/ChatMessageComponent.styles';
         
     | 
| 
       16 
16 
     | 
    
         
             
            import { MAXIMUM_LENGTH_OF_MESSAGE } from '../../utils/SendBoxUtils';
         
     | 
| 
       17 
17 
     | 
    
         
             
            /* @conditional-compile-remove(rich-text-editor-image-upload) */
         
     | 
| 
       18 
     | 
    
         
            -
            import { cancelInlineImageUpload, hasIncompleteAttachmentUploads, insertImagesToContentString, isAttachmentUploadCompleted 
     | 
| 
      
 18 
     | 
    
         
            +
            import { cancelInlineImageUpload, hasIncompleteAttachmentUploads, insertImagesToContentString, isAttachmentUploadCompleted } from '../../utils/SendBoxUtils';
         
     | 
| 
       19 
19 
     | 
    
         
             
            import { getMessageState, onRenderCancelIcon, onRenderSubmitIcon } from '../../utils/ChatMessageComponentAsEditBoxUtils';
         
     | 
| 
       20 
20 
     | 
    
         
             
            /* @conditional-compile-remove(file-sharing-acs) */
         
     | 
| 
       21 
21 
     | 
    
         
             
            import { attachmentMetadataReducer, getMessageWithAttachmentMetadata, doesMessageContainMultipleAttachments } from '../../utils/ChatMessageComponentAsEditBoxUtils';
         
     | 
| 
         @@ -27,8 +27,6 @@ import { useLocale } from '../../../localization'; 
     | 
|
| 
       27 
27 
     | 
    
         
             
            import { FluentV9ThemeProvider } from '../../../theming/FluentV9ThemeProvider';
         
     | 
| 
       28 
28 
     | 
    
         
             
            /* @conditional-compile-remove(file-sharing-acs) */
         
     | 
| 
       29 
29 
     | 
    
         
             
            import { attachmentUploadCardsStyles } from '../../styles/SendBox.styles';
         
     | 
| 
       30 
     | 
    
         
            -
            /* @conditional-compile-remove(rich-text-editor-image-upload) */
         
     | 
| 
       31 
     | 
    
         
            -
            import { BROKEN_IMAGE_SVG_DATA } from '../../styles/Common.style';
         
     | 
| 
       32 
30 
     | 
    
         
             
            /**
         
     | 
| 
       33 
31 
     | 
    
         
             
             * @private
         
     | 
| 
       34 
32 
     | 
    
         
             
             */
         
     | 
| 
         @@ -43,31 +41,7 @@ export const ChatMessageComponentAsRichTextEditBox = (props) => { 
     | 
|
| 
       43 
41 
     | 
    
         
             
                imageUploadsInProgress, 
         
     | 
| 
       44 
42 
     | 
    
         
             
                /* @conditional-compile-remove(rich-text-editor-image-upload) */
         
     | 
| 
       45 
43 
     | 
    
         
             
                onCancelInlineImageUpload } = props;
         
     | 
| 
       46 
     | 
    
         
            -
                const  
     | 
| 
       47 
     | 
    
         
            -
                    /* @conditional-compile-remove(rich-text-editor-image-upload) */
         
     | 
| 
       48 
     | 
    
         
            -
                    const content = message.content;
         
     | 
| 
       49 
     | 
    
         
            -
                    /* @conditional-compile-remove(rich-text-editor-image-upload) */
         
     | 
| 
       50 
     | 
    
         
            -
                    const document = new DOMParser().parseFromString(content !== null && content !== void 0 ? content : '', 'text/html');
         
     | 
| 
       51 
     | 
    
         
            -
                    // The broken image element is a div element with all the attributes of the original image element.
         
     | 
| 
       52 
     | 
    
         
            -
                    // We need to convert it to a img element so the Rooster knows how to render it.
         
     | 
| 
       53 
     | 
    
         
            -
                    // And we need to copy over all the attributes such as id, width, etc.
         
     | 
| 
       54 
     | 
    
         
            -
                    // which is needed for sending the message with the images correctly.
         
     | 
| 
       55 
     | 
    
         
            -
                    /* @conditional-compile-remove(rich-text-editor-image-upload) */
         
     | 
| 
       56 
     | 
    
         
            -
                    document.querySelectorAll('.broken-image-wrapper').forEach((brokenImage) => {
         
     | 
| 
       57 
     | 
    
         
            -
                        var _a;
         
     | 
| 
       58 
     | 
    
         
            -
                        const imageElement = document.createElement('img');
         
     | 
| 
       59 
     | 
    
         
            -
                        const attributes = brokenImage.attributes;
         
     | 
| 
       60 
     | 
    
         
            -
                        for (const attribute of attributes) {
         
     | 
| 
       61 
     | 
    
         
            -
                            imageElement.setAttribute(attribute.name, attribute.value);
         
     | 
| 
       62 
     | 
    
         
            -
                        }
         
     | 
| 
       63 
     | 
    
         
            -
                        imageElement.src = BROKEN_IMAGE_SVG_DATA;
         
     | 
| 
       64 
     | 
    
         
            -
                        (_a = brokenImage.parentElement) === null || _a === void 0 ? void 0 : _a.replaceChild(imageElement, brokenImage);
         
     | 
| 
       65 
     | 
    
         
            -
                    });
         
     | 
| 
       66 
     | 
    
         
            -
                    /* @conditional-compile-remove(rich-text-editor-image-upload) */
         
     | 
| 
       67 
     | 
    
         
            -
                    return document.body.innerHTML;
         
     | 
| 
       68 
     | 
    
         
            -
                    return message.content;
         
     | 
| 
       69 
     | 
    
         
            -
                }, [message]);
         
     | 
| 
       70 
     | 
    
         
            -
                const [textValue, setTextValue] = useState(initialContent || '');
         
     | 
| 
      
 44 
     | 
    
         
            +
                const [textValue, setTextValue] = useState(message.content || '');
         
     | 
| 
       71 
45 
     | 
    
         
             
                /* @conditional-compile-remove(file-sharing-acs) */
         
     | 
| 
       72 
46 
     | 
    
         
             
                const [attachmentMetadata, handleAttachmentAction] = useReducer(attachmentMetadataReducer, (_a = getMessageWithAttachmentMetadata(message)) !== null && _a !== void 0 ? _a : []);
         
     | 
| 
       73 
47 
     | 
    
         
             
                /* @conditional-compile-remove(rich-text-editor-image-upload) */
         
     | 
| 
         @@ -121,13 +95,8 @@ export const ChatMessageComponentAsRichTextEditBox = (props) => { 
     | 
|
| 
       121 
95 
     | 
    
         
             
                    }
         
     | 
| 
       122 
96 
     | 
    
         
             
                    let content = textValue;
         
     | 
| 
       123 
97 
     | 
    
         
             
                    /* @conditional-compile-remove(rich-text-editor-image-upload) */
         
     | 
| 
       124 
     | 
    
         
            -
                    content = removeBrokenImageContent(content);
         
     | 
| 
       125 
     | 
    
         
            -
                    /* @conditional-compile-remove(rich-text-editor-image-upload) */
         
     | 
| 
       126 
98 
     | 
    
         
             
                    if (isAttachmentUploadCompleted(imageUploadsInProgress)) {
         
     | 
| 
       127 
     | 
    
         
            -
                        insertImagesToContentString(textValue, imageUploadsInProgress 
     | 
| 
       128 
     | 
    
         
            -
                            onSubmit(content, /* @conditional-compile-remove(file-sharing-acs) */ attachmentMetadata || []);
         
     | 
| 
       129 
     | 
    
         
            -
                        });
         
     | 
| 
       130 
     | 
    
         
            -
                        return;
         
     | 
| 
      
 99 
     | 
    
         
            +
                        content = insertImagesToContentString(textValue, imageUploadsInProgress);
         
     | 
| 
       131 
100 
     | 
    
         
             
                    }
         
     | 
| 
       132 
101 
     | 
    
         
             
                    // it's very important to pass an empty attachment here
         
     | 
| 
       133 
102 
     | 
    
         
             
                    // so when user removes all attachments, UI can reflect it instantly
         
     | 
| 
         @@ -199,7 +168,7 @@ export const ChatMessageComponentAsRichTextEditBox = (props) => { 
     | 
|
| 
       199 
168 
     | 
    
         
             
                    return (React.createElement(Stack, { className: mergeStyles(editBoxWidthStyles) },
         
     | 
| 
       200 
169 
     | 
    
         
             
                        React.createElement(RichTextSendBoxErrors, { textTooLongMessage: textTooLongMessage, systemMessage: message.failureReason, 
         
     | 
| 
       201 
170 
     | 
    
         
             
                            /* @conditional-compile-remove(rich-text-editor-image-upload) */ attachmentUploadsPendingError: attachmentUploadsPendingError }),
         
     | 
| 
       202 
     | 
    
         
            -
                        React.createElement(RichTextInputBoxComponent, { placeholderText: strings.editBoxPlaceholderText, onChange: onChangeHandler, editorComponentRef: editTextFieldRef, initialContent:  
     | 
| 
      
 171 
     | 
    
         
            +
                        React.createElement(RichTextInputBoxComponent, { placeholderText: strings.editBoxPlaceholderText, onChange: onChangeHandler, editorComponentRef: editTextFieldRef, initialContent: message.content, strings: richTextLocaleStrings, disabled: false, actionComponents: actionButtons, richTextEditorStyleProps: editBoxRichTextEditorStyle, isHorizontalLayoutDisabled: true, 
         
     | 
| 
       203 
172 
     | 
    
         
             
                            /* @conditional-compile-remove(file-sharing-acs) */
         
     | 
| 
       204 
173 
     | 
    
         
             
                            onRenderAttachmentUploads: onRenderAttachmentUploads, 
         
     | 
| 
       205 
174 
     | 
    
         
             
                            /* @conditional-compile-remove(rich-text-editor-image-upload) */
         
     | 
| 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            {"version":3,"file":"ChatMessageComponentAsRichTextEditBox.js","sourceRoot":"","sources":["../../../../../../../../react-components/src/components/ChatMessage/MyMessageComponents/ChatMessageComponentAsRichTextEditBox.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { mergeStyles, Stack } from '@fluentui/react';\nimport { ChatMyMessage } from '@fluentui-contrib/react-chat';\nimport { mergeClasses } from '@fluentui/react-components';\nimport { _formatString } from '@internal/acs-ui-common';\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport { AttachmentMetadataInProgress } from '@internal/acs-ui-common';\nimport { useTheme } from '../../../theming';\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\n/* @conditional-compile-remove(file-sharing-acs) */\nimport { useReducer } from 'react';\nimport { editBoxWidthStyles, richTextEditBoxActionButtonIcon } from '../../styles/EditBox.styles';\nimport { InputBoxButton } from '../../InputBoxButton';\nimport { MessageThreadStrings } from '../../MessageThread';\nimport { useChatMyMessageStyles } from '../../styles/MessageThread.styles';\nimport { ChatMessage } from '../../../types';\nimport { _AttachmentUploadCards } from '../../Attachment/AttachmentUploadCards';\n/* @conditional-compile-remove(file-sharing-acs) */\nimport { AttachmentMetadata } from '@internal/acs-ui-common';\nimport { useChatMessageRichTextEditContainerStyles } from '../../styles/ChatMessageComponent.styles';\nimport { MAXIMUM_LENGTH_OF_MESSAGE } from '../../utils/SendBoxUtils';\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport {\n  cancelInlineImageUpload,\n  hasIncompleteAttachmentUploads,\n  insertImagesToContentString,\n  isAttachmentUploadCompleted,\n  removeBrokenImageContent\n} from '../../utils/SendBoxUtils';\nimport {\n  getMessageState,\n  onRenderCancelIcon,\n  onRenderSubmitIcon\n} from '../../utils/ChatMessageComponentAsEditBoxUtils';\n/* @conditional-compile-remove(file-sharing-acs) */\nimport {\n  attachmentMetadataReducer,\n  getMessageWithAttachmentMetadata,\n  doesMessageContainMultipleAttachments\n} from '../../utils/ChatMessageComponentAsEditBoxUtils';\nimport { RichTextEditorComponentRef } from '../../RichTextEditor/RichTextEditor';\nimport { RichTextInputBoxComponent } from '../../RichTextEditor/RichTextInputBoxComponent';\nimport { editBoxRichTextEditorStyle, richTextActionButtonsStyle } from '../../styles/RichTextEditor.styles';\nimport { RichTextSendBoxErrors } from '../../RichTextEditor/RichTextSendBoxErrors';\nimport { useLocale } from '../../../localization';\n/* @conditional-compile-remove(file-sharing-acs) */\nimport { FluentV9ThemeProvider } from '../../../theming/FluentV9ThemeProvider';\n/* @conditional-compile-remove(file-sharing-acs) */\nimport { attachmentUploadCardsStyles } from '../../styles/SendBox.styles';\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport { SendBoxErrorBarError } from '../../SendBoxErrorBar';\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport { BROKEN_IMAGE_SVG_DATA } from '../../styles/Common.style';\n\n/** @private */\nexport type ChatMessageComponentAsRichTextEditBoxProps = {\n  onCancel?: (messageId: string) => void;\n  onSubmit: (\n    text: string,\n    /* @conditional-compile-remove(file-sharing-acs) */\n    attachmentMetadata?: AttachmentMetadata[]\n  ) => void;\n  message: ChatMessage;\n  strings: MessageThreadStrings;\n  /* @conditional-compile-remove(rich-text-editor-image-upload) */\n  onPaste?: (event: { content: DocumentFragment }) => void;\n  /* @conditional-compile-remove(rich-text-editor-image-upload) */\n  onCancelInlineImageUpload?: (imageId: string) => void;\n  /* @conditional-compile-remove(rich-text-editor-image-upload) */\n  onUploadInlineImage?: (imageUrl: string, imageFileName: string) => void;\n  /* @conditional-compile-remove(rich-text-editor-image-upload) */\n  imageUploadsInProgress?: AttachmentMetadataInProgress[];\n};\n\n/**\n * @private\n */\nexport const ChatMessageComponentAsRichTextEditBox = (\n  props: ChatMessageComponentAsRichTextEditBoxProps\n): JSX.Element => {\n  const {\n    onCancel,\n    onSubmit,\n    strings,\n    message,\n    /* @conditional-compile-remove(rich-text-editor-image-upload) */\n    onPaste,\n    /* @conditional-compile-remove(rich-text-editor-image-upload) */\n    onUploadInlineImage,\n    /* @conditional-compile-remove(rich-text-editor-image-upload) */\n    imageUploadsInProgress,\n    /* @conditional-compile-remove(rich-text-editor-image-upload) */\n    onCancelInlineImageUpload\n  } = props;\n\n  const initialContent = useMemo(() => {\n    /* @conditional-compile-remove(rich-text-editor-image-upload) */\n    const content = message.content;\n    /* @conditional-compile-remove(rich-text-editor-image-upload) */\n    const document = new DOMParser().parseFromString(content ?? '', 'text/html');\n    // The broken image element is a div element with all the attributes of the original image element.\n    // We need to convert it to a img element so the Rooster knows how to render it.\n    // And we need to copy over all the attributes such as id, width, etc.\n    // which is needed for sending the message with the images correctly.\n    /* @conditional-compile-remove(rich-text-editor-image-upload) */\n    document.querySelectorAll('.broken-image-wrapper').forEach((brokenImage) => {\n      const imageElement = document.createElement('img');\n      const attributes = brokenImage.attributes;\n      for (const attribute of attributes) {\n        imageElement.setAttribute(attribute.name, attribute.value);\n      }\n\n      imageElement.src = BROKEN_IMAGE_SVG_DATA;\n      brokenImage.parentElement?.replaceChild(imageElement, brokenImage);\n    });\n    /* @conditional-compile-remove(rich-text-editor-image-upload) */\n    return document.body.innerHTML;\n    return message.content;\n  }, [message]);\n\n  const [textValue, setTextValue] = useState<string>(initialContent || '');\n\n  /* @conditional-compile-remove(file-sharing-acs) */\n  const [attachmentMetadata, handleAttachmentAction] = useReducer(\n    attachmentMetadataReducer,\n    getMessageWithAttachmentMetadata(message) ?? []\n  );\n\n  /* @conditional-compile-remove(rich-text-editor-image-upload) */\n  const [attachmentUploadsPendingError, setAttachmentUploadsPendingError] = useState<SendBoxErrorBarError | undefined>(\n    undefined\n  );\n  const editTextFieldRef = React.useRef<RichTextEditorComponentRef>(null);\n  const theme = useTheme();\n  const messageState = useMemo(() => {\n    return getMessageState(textValue, /* @conditional-compile-remove(file-sharing-acs) */ attachmentMetadata ?? []);\n  }, [/* @conditional-compile-remove(file-sharing-acs) */ attachmentMetadata, textValue]);\n\n  const submitEnabled = messageState === 'OK';\n\n  const editContainerStyles = useChatMessageRichTextEditContainerStyles();\n  const chatMyMessageStyles = useChatMyMessageStyles();\n  const locale = useLocale().strings;\n\n  const setText = useCallback((newValue?: string): void => {\n    setTextValue(newValue ?? '');\n  }, []);\n\n  useEffect(() => {\n    editTextFieldRef.current?.focus();\n  }, []);\n\n  const textTooLongMessage = useMemo(() => {\n    return messageState === 'too long'\n      ? _formatString(strings.editBoxTextLimit, { limitNumber: `${MAXIMUM_LENGTH_OF_MESSAGE}` })\n      : undefined;\n  }, [messageState, strings.editBoxTextLimit]);\n\n  const iconClassName = useCallback(\n    (isHover: boolean) => {\n      const color = isHover ? theme.palette.accent : theme.palette.neutralSecondary;\n      return mergeStyles(richTextEditBoxActionButtonIcon, { color });\n    },\n    [theme.palette.accent, theme.palette.neutralSecondary]\n  );\n\n  const onRenderThemedCancelIcon = useCallback(\n    (isHover: boolean) => {\n      return onRenderCancelIcon(iconClassName(isHover));\n    },\n    [iconClassName]\n  );\n\n  const onRenderThemedSubmitIcon = useCallback(\n    (isHover: boolean) => {\n      return onRenderSubmitIcon(iconClassName(isHover));\n    },\n    [iconClassName]\n  );\n\n  /* @conditional-compile-remove(file-sharing-acs) */\n  const hasMultipleAttachments = useMemo(() => {\n    return doesMessageContainMultipleAttachments(message);\n  }, [message]);\n\n  const onSubmitHandler = useCallback((): void => {\n    if (!submitEnabled) {\n      return;\n    }\n    // Don't send message until all attachments have been uploaded successfully\n    /* @conditional-compile-remove(rich-text-editor-image-upload) */\n    setAttachmentUploadsPendingError(undefined);\n\n    /* @conditional-compile-remove(rich-text-editor-image-upload) */\n    if (hasIncompleteAttachmentUploads(imageUploadsInProgress)) {\n      setAttachmentUploadsPendingError({ message: strings.attachmentUploadsPendingError, timestamp: Date.now() });\n      return;\n    }\n\n    let content = textValue;\n    /* @conditional-compile-remove(rich-text-editor-image-upload) */\n    content = removeBrokenImageContent(content);\n    /* @conditional-compile-remove(rich-text-editor-image-upload) */\n    if (isAttachmentUploadCompleted(imageUploadsInProgress)) {\n      insertImagesToContentString(textValue, imageUploadsInProgress, (content) => {\n        onSubmit(content, /* @conditional-compile-remove(file-sharing-acs) */ attachmentMetadata || []);\n      });\n      return;\n    }\n    // it's very important to pass an empty attachment here\n    // so when user removes all attachments, UI can reflect it instantly\n    // if you set it to undefined, the attachments pre-edited would still be there\n    // until edit message event is received\n    onSubmit(content, /* @conditional-compile-remove(file-sharing-acs) */ attachmentMetadata || []);\n  }, [\n    submitEnabled,\n    /* @conditional-compile-remove(rich-text-editor-image-upload) */\n    imageUploadsInProgress,\n    textValue,\n    /* @conditional-compile-remove(rich-text-editor-image-upload) */\n    strings.attachmentUploadsPendingError,\n    onSubmit,\n    /* @conditional-compile-remove(file-sharing-acs) */\n    attachmentMetadata\n  ]);\n\n  const actionButtons = useMemo(() => {\n    return (\n      <Stack horizontal>\n        <InputBoxButton\n          className={richTextActionButtonsStyle}\n          ariaLabel={strings.editBoxCancelButton}\n          tooltipContent={strings.editBoxCancelButton}\n          onRenderIcon={onRenderThemedCancelIcon}\n          onClick={() => {\n            onCancel && onCancel(message.messageId);\n          }}\n          id={'dismissIconWrapper'}\n          data-testId={strings.editBoxCancelButton}\n        />\n        <InputBoxButton\n          className={richTextActionButtonsStyle}\n          ariaLabel={strings.editBoxSubmitButton}\n          tooltipContent={strings.editBoxSubmitButton}\n          onRenderIcon={onRenderThemedSubmitIcon}\n          onClick={(e) => {\n            onSubmitHandler();\n            e.stopPropagation();\n          }}\n          id={'submitIconWrapper'}\n          data-testId={strings.editBoxSubmitButton}\n        />\n      </Stack>\n    );\n  }, [\n    message.messageId,\n    onCancel,\n    onRenderThemedCancelIcon,\n    onRenderThemedSubmitIcon,\n    strings.editBoxCancelButton,\n    strings.editBoxSubmitButton,\n    onSubmitHandler\n  ]);\n  const richTextLocaleStrings = useMemo(() => {\n    /* @conditional-compile-remove(rich-text-editor) */\n    return { ...locale.richTextSendBox, ...strings };\n    return locale.sendBox;\n  }, [\n    /* @conditional-compile-remove(rich-text-editor) */ locale.richTextSendBox,\n    /* @conditional-compile-remove(rich-text-editor) */ strings,\n    locale.sendBox\n  ]);\n\n  /* @conditional-compile-remove(file-sharing-acs) */\n  const onCancelAttachmentUpload = useCallback((attachmentId: string) => {\n    // edit box only capable of removing attachments\n    // we need to expand attachment actions\n    // if we want to support more actions e.g. add\n    handleAttachmentAction({ type: 'remove', id: attachmentId });\n  }, []);\n\n  /* @conditional-compile-remove(file-sharing-acs) */\n  const onRenderAttachmentUploads = useCallback(() => {\n    return (\n      <Stack className={attachmentUploadCardsStyles}>\n        <FluentV9ThemeProvider v8Theme={theme}>\n          <_AttachmentUploadCards\n            attachments={attachmentMetadata}\n            onCancelAttachmentUpload={onCancelAttachmentUpload}\n          />\n        </FluentV9ThemeProvider>\n      </Stack>\n    );\n  }, [attachmentMetadata, onCancelAttachmentUpload, theme]);\n\n  const onChangeHandler = useCallback(\n    (\n      content: string | undefined,\n      /* @conditional-compile-remove(rich-text-editor-image-upload) */ imageSrcArray?: Array<string>\n    ) => {\n      /* @conditional-compile-remove(rich-text-editor-image-upload) */\n      cancelInlineImageUpload(imageSrcArray, imageUploadsInProgress, onCancelInlineImageUpload);\n      setText(content);\n    },\n    [\n      setText,\n      /* @conditional-compile-remove(rich-text-editor-image-upload) */ imageUploadsInProgress,\n      /* @conditional-compile-remove(rich-text-editor-image-upload) */ onCancelInlineImageUpload\n    ]\n  );\n\n  const getContent = (): JSX.Element => {\n    return (\n      <Stack className={mergeStyles(editBoxWidthStyles)}>\n        <RichTextSendBoxErrors\n          textTooLongMessage={textTooLongMessage}\n          systemMessage={message.failureReason}\n          /* @conditional-compile-remove(rich-text-editor-image-upload) */ attachmentUploadsPendingError={\n            attachmentUploadsPendingError\n          }\n        />\n        <RichTextInputBoxComponent\n          placeholderText={strings.editBoxPlaceholderText}\n          onChange={onChangeHandler}\n          editorComponentRef={editTextFieldRef}\n          initialContent={initialContent}\n          strings={richTextLocaleStrings}\n          disabled={false}\n          actionComponents={actionButtons}\n          richTextEditorStyleProps={editBoxRichTextEditorStyle}\n          isHorizontalLayoutDisabled={true}\n          /* @conditional-compile-remove(file-sharing-acs) */\n          onRenderAttachmentUploads={onRenderAttachmentUploads}\n          /* @conditional-compile-remove(rich-text-editor-image-upload) */\n          onPaste={onPaste}\n          /* @conditional-compile-remove(rich-text-editor-image-upload) */\n          onUploadInlineImage={onUploadInlineImage}\n        />\n      </Stack>\n    );\n  };\n\n  const attached = message.attached === true ? 'center' : message.attached === 'bottom' ? 'bottom' : 'top';\n  return (\n    <ChatMyMessage\n      attached={attached}\n      root={{\n        className: mergeClasses(\n          chatMyMessageStyles.root,\n          /* @conditional-compile-remove(file-sharing-acs) */\n          hasMultipleAttachments ? chatMyMessageStyles.multipleAttachmentsInEditing : undefined\n        )\n      }}\n      body={{\n        className: mergeClasses(\n          editContainerStyles.body,\n          attached !== 'top' ? editContainerStyles.bodyAttached : undefined\n        )\n      }}\n    >\n      {getContent()}\n    </ChatMyMessage>\n  );\n};\n\nexport default ChatMessageComponentAsRichTextEditBox;\n"]}
         
     | 
| 
      
 1 
     | 
    
         
            +
            {"version":3,"file":"ChatMessageComponentAsRichTextEditBox.js","sourceRoot":"","sources":["../../../../../../../../react-components/src/components/ChatMessage/MyMessageComponents/ChatMessageComponentAsRichTextEditBox.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { mergeStyles, Stack } from '@fluentui/react';\nimport { ChatMyMessage } from '@fluentui-contrib/react-chat';\nimport { mergeClasses } from '@fluentui/react-components';\nimport { _formatString } from '@internal/acs-ui-common';\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport { AttachmentMetadataInProgress } from '@internal/acs-ui-common';\nimport { useTheme } from '../../../theming';\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\n/* @conditional-compile-remove(file-sharing-acs) */\nimport { useReducer } from 'react';\nimport { editBoxWidthStyles, richTextEditBoxActionButtonIcon } from '../../styles/EditBox.styles';\nimport { InputBoxButton } from '../../InputBoxButton';\nimport { MessageThreadStrings } from '../../MessageThread';\nimport { useChatMyMessageStyles } from '../../styles/MessageThread.styles';\nimport { ChatMessage } from '../../../types';\nimport { _AttachmentUploadCards } from '../../Attachment/AttachmentUploadCards';\n/* @conditional-compile-remove(file-sharing-acs) */\nimport { AttachmentMetadata } from '@internal/acs-ui-common';\nimport { useChatMessageRichTextEditContainerStyles } from '../../styles/ChatMessageComponent.styles';\nimport { MAXIMUM_LENGTH_OF_MESSAGE } from '../../utils/SendBoxUtils';\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport {\n  cancelInlineImageUpload,\n  hasIncompleteAttachmentUploads,\n  insertImagesToContentString,\n  isAttachmentUploadCompleted\n} from '../../utils/SendBoxUtils';\nimport {\n  getMessageState,\n  onRenderCancelIcon,\n  onRenderSubmitIcon\n} from '../../utils/ChatMessageComponentAsEditBoxUtils';\n/* @conditional-compile-remove(file-sharing-acs) */\nimport {\n  attachmentMetadataReducer,\n  getMessageWithAttachmentMetadata,\n  doesMessageContainMultipleAttachments\n} from '../../utils/ChatMessageComponentAsEditBoxUtils';\nimport { RichTextEditorComponentRef } from '../../RichTextEditor/RichTextEditor';\nimport { RichTextInputBoxComponent } from '../../RichTextEditor/RichTextInputBoxComponent';\nimport { editBoxRichTextEditorStyle, richTextActionButtonsStyle } from '../../styles/RichTextEditor.styles';\nimport { RichTextSendBoxErrors } from '../../RichTextEditor/RichTextSendBoxErrors';\nimport { useLocale } from '../../../localization';\n/* @conditional-compile-remove(file-sharing-acs) */\nimport { FluentV9ThemeProvider } from '../../../theming/FluentV9ThemeProvider';\n/* @conditional-compile-remove(file-sharing-acs) */\nimport { attachmentUploadCardsStyles } from '../../styles/SendBox.styles';\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport { SendBoxErrorBarError } from '../../SendBoxErrorBar';\n\n/** @private */\nexport type ChatMessageComponentAsRichTextEditBoxProps = {\n  onCancel?: (messageId: string) => void;\n  onSubmit: (\n    text: string,\n    /* @conditional-compile-remove(file-sharing-acs) */\n    attachmentMetadata?: AttachmentMetadata[]\n  ) => void;\n  message: ChatMessage;\n  strings: MessageThreadStrings;\n  /* @conditional-compile-remove(rich-text-editor-image-upload) */\n  onPaste?: (event: { content: DocumentFragment }) => void;\n  /* @conditional-compile-remove(rich-text-editor-image-upload) */\n  onCancelInlineImageUpload?: (imageId: string) => void;\n  /* @conditional-compile-remove(rich-text-editor-image-upload) */\n  onUploadInlineImage?: (imageUrl: string, imageFileName: string) => void;\n  /* @conditional-compile-remove(rich-text-editor-image-upload) */\n  imageUploadsInProgress?: AttachmentMetadataInProgress[];\n};\n\n/**\n * @private\n */\nexport const ChatMessageComponentAsRichTextEditBox = (\n  props: ChatMessageComponentAsRichTextEditBoxProps\n): JSX.Element => {\n  const {\n    onCancel,\n    onSubmit,\n    strings,\n    message,\n    /* @conditional-compile-remove(rich-text-editor-image-upload) */\n    onPaste,\n    /* @conditional-compile-remove(rich-text-editor-image-upload) */\n    onUploadInlineImage,\n    /* @conditional-compile-remove(rich-text-editor-image-upload) */\n    imageUploadsInProgress,\n    /* @conditional-compile-remove(rich-text-editor-image-upload) */\n    onCancelInlineImageUpload\n  } = props;\n\n  const [textValue, setTextValue] = useState<string>(message.content || '');\n  /* @conditional-compile-remove(file-sharing-acs) */\n  const [attachmentMetadata, handleAttachmentAction] = useReducer(\n    attachmentMetadataReducer,\n    getMessageWithAttachmentMetadata(message) ?? []\n  );\n\n  /* @conditional-compile-remove(rich-text-editor-image-upload) */\n  const [attachmentUploadsPendingError, setAttachmentUploadsPendingError] = useState<SendBoxErrorBarError | undefined>(\n    undefined\n  );\n  const editTextFieldRef = React.useRef<RichTextEditorComponentRef>(null);\n  const theme = useTheme();\n  const messageState = useMemo(() => {\n    return getMessageState(textValue, /* @conditional-compile-remove(file-sharing-acs) */ attachmentMetadata ?? []);\n  }, [/* @conditional-compile-remove(file-sharing-acs) */ attachmentMetadata, textValue]);\n\n  const submitEnabled = messageState === 'OK';\n\n  const editContainerStyles = useChatMessageRichTextEditContainerStyles();\n  const chatMyMessageStyles = useChatMyMessageStyles();\n  const locale = useLocale().strings;\n\n  const setText = useCallback((newValue?: string): void => {\n    setTextValue(newValue ?? '');\n  }, []);\n\n  useEffect(() => {\n    editTextFieldRef.current?.focus();\n  }, []);\n\n  const textTooLongMessage = useMemo(() => {\n    return messageState === 'too long'\n      ? _formatString(strings.editBoxTextLimit, { limitNumber: `${MAXIMUM_LENGTH_OF_MESSAGE}` })\n      : undefined;\n  }, [messageState, strings.editBoxTextLimit]);\n\n  const iconClassName = useCallback(\n    (isHover: boolean) => {\n      const color = isHover ? theme.palette.accent : theme.palette.neutralSecondary;\n      return mergeStyles(richTextEditBoxActionButtonIcon, { color });\n    },\n    [theme.palette.accent, theme.palette.neutralSecondary]\n  );\n\n  const onRenderThemedCancelIcon = useCallback(\n    (isHover: boolean) => {\n      return onRenderCancelIcon(iconClassName(isHover));\n    },\n    [iconClassName]\n  );\n\n  const onRenderThemedSubmitIcon = useCallback(\n    (isHover: boolean) => {\n      return onRenderSubmitIcon(iconClassName(isHover));\n    },\n    [iconClassName]\n  );\n\n  /* @conditional-compile-remove(file-sharing-acs) */\n  const hasMultipleAttachments = useMemo(() => {\n    return doesMessageContainMultipleAttachments(message);\n  }, [message]);\n\n  const onSubmitHandler = useCallback((): void => {\n    if (!submitEnabled) {\n      return;\n    }\n    // Don't send message until all attachments have been uploaded successfully\n    /* @conditional-compile-remove(rich-text-editor-image-upload) */\n    setAttachmentUploadsPendingError(undefined);\n\n    /* @conditional-compile-remove(rich-text-editor-image-upload) */\n    if (hasIncompleteAttachmentUploads(imageUploadsInProgress)) {\n      setAttachmentUploadsPendingError({ message: strings.attachmentUploadsPendingError, timestamp: Date.now() });\n      return;\n    }\n\n    let content = textValue;\n    /* @conditional-compile-remove(rich-text-editor-image-upload) */\n    if (isAttachmentUploadCompleted(imageUploadsInProgress)) {\n      content = insertImagesToContentString(textValue, imageUploadsInProgress);\n    }\n    // it's very important to pass an empty attachment here\n    // so when user removes all attachments, UI can reflect it instantly\n    // if you set it to undefined, the attachments pre-edited would still be there\n    // until edit message event is received\n    onSubmit(content, /* @conditional-compile-remove(file-sharing-acs) */ attachmentMetadata || []);\n  }, [\n    submitEnabled,\n    /* @conditional-compile-remove(rich-text-editor-image-upload) */\n    imageUploadsInProgress,\n    textValue,\n    /* @conditional-compile-remove(rich-text-editor-image-upload) */\n    strings.attachmentUploadsPendingError,\n    onSubmit,\n    /* @conditional-compile-remove(file-sharing-acs) */\n    attachmentMetadata\n  ]);\n\n  const actionButtons = useMemo(() => {\n    return (\n      <Stack horizontal>\n        <InputBoxButton\n          className={richTextActionButtonsStyle}\n          ariaLabel={strings.editBoxCancelButton}\n          tooltipContent={strings.editBoxCancelButton}\n          onRenderIcon={onRenderThemedCancelIcon}\n          onClick={() => {\n            onCancel && onCancel(message.messageId);\n          }}\n          id={'dismissIconWrapper'}\n          data-testId={strings.editBoxCancelButton}\n        />\n        <InputBoxButton\n          className={richTextActionButtonsStyle}\n          ariaLabel={strings.editBoxSubmitButton}\n          tooltipContent={strings.editBoxSubmitButton}\n          onRenderIcon={onRenderThemedSubmitIcon}\n          onClick={(e) => {\n            onSubmitHandler();\n            e.stopPropagation();\n          }}\n          id={'submitIconWrapper'}\n          data-testId={strings.editBoxSubmitButton}\n        />\n      </Stack>\n    );\n  }, [\n    message.messageId,\n    onCancel,\n    onRenderThemedCancelIcon,\n    onRenderThemedSubmitIcon,\n    strings.editBoxCancelButton,\n    strings.editBoxSubmitButton,\n    onSubmitHandler\n  ]);\n  const richTextLocaleStrings = useMemo(() => {\n    /* @conditional-compile-remove(rich-text-editor) */\n    return { ...locale.richTextSendBox, ...strings };\n    return locale.sendBox;\n  }, [\n    /* @conditional-compile-remove(rich-text-editor) */ locale.richTextSendBox,\n    /* @conditional-compile-remove(rich-text-editor) */ strings,\n    locale.sendBox\n  ]);\n\n  /* @conditional-compile-remove(file-sharing-acs) */\n  const onCancelAttachmentUpload = useCallback((attachmentId: string) => {\n    // edit box only capable of removing attachments\n    // we need to expand attachment actions\n    // if we want to support more actions e.g. add\n    handleAttachmentAction({ type: 'remove', id: attachmentId });\n  }, []);\n\n  /* @conditional-compile-remove(file-sharing-acs) */\n  const onRenderAttachmentUploads = useCallback(() => {\n    return (\n      <Stack className={attachmentUploadCardsStyles}>\n        <FluentV9ThemeProvider v8Theme={theme}>\n          <_AttachmentUploadCards\n            attachments={attachmentMetadata}\n            onCancelAttachmentUpload={onCancelAttachmentUpload}\n          />\n        </FluentV9ThemeProvider>\n      </Stack>\n    );\n  }, [attachmentMetadata, onCancelAttachmentUpload, theme]);\n\n  const onChangeHandler = useCallback(\n    (\n      content: string | undefined,\n      /* @conditional-compile-remove(rich-text-editor-image-upload) */ imageSrcArray?: Array<string>\n    ) => {\n      /* @conditional-compile-remove(rich-text-editor-image-upload) */\n      cancelInlineImageUpload(imageSrcArray, imageUploadsInProgress, onCancelInlineImageUpload);\n      setText(content);\n    },\n    [\n      setText,\n      /* @conditional-compile-remove(rich-text-editor-image-upload) */ imageUploadsInProgress,\n      /* @conditional-compile-remove(rich-text-editor-image-upload) */ onCancelInlineImageUpload\n    ]\n  );\n\n  const getContent = (): JSX.Element => {\n    return (\n      <Stack className={mergeStyles(editBoxWidthStyles)}>\n        <RichTextSendBoxErrors\n          textTooLongMessage={textTooLongMessage}\n          systemMessage={message.failureReason}\n          /* @conditional-compile-remove(rich-text-editor-image-upload) */ attachmentUploadsPendingError={\n            attachmentUploadsPendingError\n          }\n        />\n        <RichTextInputBoxComponent\n          placeholderText={strings.editBoxPlaceholderText}\n          onChange={onChangeHandler}\n          editorComponentRef={editTextFieldRef}\n          initialContent={message.content}\n          strings={richTextLocaleStrings}\n          disabled={false}\n          actionComponents={actionButtons}\n          richTextEditorStyleProps={editBoxRichTextEditorStyle}\n          isHorizontalLayoutDisabled={true}\n          /* @conditional-compile-remove(file-sharing-acs) */\n          onRenderAttachmentUploads={onRenderAttachmentUploads}\n          /* @conditional-compile-remove(rich-text-editor-image-upload) */\n          onPaste={onPaste}\n          /* @conditional-compile-remove(rich-text-editor-image-upload) */\n          onUploadInlineImage={onUploadInlineImage}\n        />\n      </Stack>\n    );\n  };\n\n  const attached = message.attached === true ? 'center' : message.attached === 'bottom' ? 'bottom' : 'top';\n  return (\n    <ChatMyMessage\n      attached={attached}\n      root={{\n        className: mergeClasses(\n          chatMyMessageStyles.root,\n          /* @conditional-compile-remove(file-sharing-acs) */\n          hasMultipleAttachments ? chatMyMessageStyles.multipleAttachmentsInEditing : undefined\n        )\n      }}\n      body={{\n        className: mergeClasses(\n          editContainerStyles.body,\n          attached !== 'top' ? editContainerStyles.bodyAttached : undefined\n        )\n      }}\n    >\n      {getContent()}\n    </ChatMyMessage>\n  );\n};\n\nexport default ChatMessageComponentAsRichTextEditBox;\n"]}
         
     | 
| 
         @@ -12,8 +12,6 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge 
     | 
|
| 
       12 
12 
     | 
    
         
             
            import React, { useCallback, useState } from 'react';
         
     | 
| 
       13 
13 
     | 
    
         
             
            import { ChatMyMessageComponentAsMessageBubble } from './ChatMyMessageComponentAsMessageBubble';
         
     | 
| 
       14 
14 
     | 
    
         
             
            import { ChatMessageComponentAsEditBoxPicker } from './ChatMessageComponentAsEditBoxPicker';
         
     | 
| 
       15 
     | 
    
         
            -
            /* @conditional-compile-remove(rich-text-editor-image-upload) */
         
     | 
| 
       16 
     | 
    
         
            -
            import { removeBrokenImageContent } from '../../utils/SendBoxUtils';
         
     | 
| 
       17 
15 
     | 
    
         
             
            /**
         
     | 
| 
       18 
16 
     | 
    
         
             
             * @private
         
     | 
| 
       19 
17 
     | 
    
         
             
             */
         
     | 
| 
         @@ -35,11 +33,8 @@ export const ChatMyMessageComponent = (props) => { 
     | 
|
| 
       35 
33 
     | 
    
         
             
                }, [onDeleteMessage, message.messageId, message.messageType, clientMessageId]);
         
     | 
| 
       36 
34 
     | 
    
         
             
                const onResendClick = useCallback(() => {
         
     | 
| 
       37 
35 
     | 
    
         
             
                    onDeleteMessage && clientMessageId && onDeleteMessage(clientMessageId);
         
     | 
| 
       38 
     | 
    
         
            -
                    let newContent = content !== null && content !== void 0 ? content : '';
         
     | 
| 
       39 
     | 
    
         
            -
                    /* @conditional-compile-remove(rich-text-editor-image-upload) */
         
     | 
| 
       40 
     | 
    
         
            -
                    newContent = removeBrokenImageContent(newContent);
         
     | 
| 
       41 
36 
     | 
    
         
             
                    onSendMessage &&
         
     | 
| 
       42 
     | 
    
         
            -
                        onSendMessage( 
     | 
| 
      
 37 
     | 
    
         
            +
                        onSendMessage(content !== undefined ? content : '', 
         
     | 
| 
       43 
38 
     | 
    
         
             
                        /* @conditional-compile-remove(file-sharing-acs) */
         
     | 
| 
       44 
39 
     | 
    
         
             
                        /* @conditional-compile-remove(rich-text-editor-image-upload) */
         
     | 
| 
       45 
40 
     | 
    
         
             
                        {
         
     | 
| 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            {"version":3,"file":"ChatMyMessageComponent.js","sourceRoot":"","sources":["../../../../../../../../react-components/src/components/ChatMessage/MyMessageComponents/ChatMyMessageComponent.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { _formatString } from '@internal/acs-ui-common';\nimport React, { useCallback, useState } from 'react';\nimport { MessageThreadStrings, UpdateMessageCallback } from '../../MessageThread';\n/* @conditional-compile-remove(rich-text-editor) */\nimport { RichTextEditorOptions } from '../../MessageThread';\nimport { ChatMessage, ComponentSlotStyle, OnRenderAvatarCallback } from '../../../types';\n/* @conditional-compile-remove(data-loss-prevention) */\nimport { BlockedMessage } from '../../../types';\n/* @conditional-compile-remove(file-sharing-teams-interop) @conditional-compile-remove(file-sharing-acs) */\nimport { AttachmentMenuAction } from '../../../types/Attachment';\n/* @conditional-compile-remove(file-sharing-teams-interop) @conditional-compile-remove(file-sharing-acs) */\nimport { AttachmentMetadata } from '@internal/acs-ui-common';\n/* @conditional-compile-remove(file-sharing-acs) */\nimport { MessageOptions } from '@internal/acs-ui-common';\n/* @conditional-compile-remove(mention) */\nimport { MentionOptions } from '../../MentionPopover';\nimport { InlineImageOptions } from '../ChatMessageContent';\nimport { ChatMyMessageComponentAsMessageBubble } from './ChatMyMessageComponentAsMessageBubble';\nimport { ChatMessageComponentAsEditBoxPicker } from './ChatMessageComponentAsEditBoxPicker';\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport { removeBrokenImageContent } from '../../utils/SendBoxUtils';\n\ntype ChatMyMessageComponentProps = {\n  message: ChatMessage | /* @conditional-compile-remove(data-loss-prevention) */ BlockedMessage;\n  userId: string;\n  messageContainerStyle?: ComponentSlotStyle;\n  showDate?: boolean;\n  disableEditing?: boolean;\n  onUpdateMessage?: UpdateMessageCallback;\n  onCancelEditMessage?: (messageId: string) => void;\n  /**\n   * Callback to delete a message. Also called before resending a message that failed to send.\n   * @param messageId ID of the message to delete\n   */\n  onDeleteMessage?: (messageId: string) => Promise<void>;\n  /**\n   * Callback to send a message\n   * @param content The message content to send\n   */\n  onSendMessage?: (\n    content: string,\n    /* @conditional-compile-remove(file-sharing-acs) */\n    options?: MessageOptions\n  ) => Promise<void>;\n  strings: MessageThreadStrings;\n  messageStatus?: string;\n  /**\n   * Optional text to display when the message status is 'failed'.\n   */\n  failureReason?: string;\n  /**\n   * Whether the status indicator for each message is displayed or not.\n   */\n  showMessageStatus?: boolean;\n  /**\n   * Whether to overlap avatar and message when the view is width constrained.\n   */\n  shouldOverlapAvatarAndMessage: boolean;\n  remoteParticipantsCount?: number;\n  onActionButtonClick: (\n    message: ChatMessage,\n    setMessageReadBy: (readBy: { id: string; displayName: string }[]) => void\n  ) => void;\n  /**\n   * Optional callback to override render of the avatar.\n   *\n   * @param userId - user Id\n   */\n  onRenderAvatar?: OnRenderAvatarCallback;\n  /* @conditional-compile-remove(date-time-customization) */\n  /**\n   * Optional function to provide customized date format.\n   * @beta\n   */\n  onDisplayDateTimeString?: (messageDate: Date) => string;\n  /* @conditional-compile-remove(mention) */\n  /**\n   * Optional props needed to lookup suggestions and display mentions in the mention scenario.\n   * @beta\n   */\n  mentionOptions?: MentionOptions;\n  /**\n   * Optional callback called when an inline image is clicked.\n   * @beta\n   */\n  inlineImageOptions?: InlineImageOptions;\n  /* @conditional-compile-remove(file-sharing-teams-interop) @conditional-compile-remove(file-sharing-acs) */\n  /**\n   * Optional callback to render message attachments in the message component.\n   * @beta\n   */\n  onRenderAttachmentDownloads?: (message: ChatMessage) => JSX.Element;\n  /* @conditional-compile-remove(file-sharing-teams-interop) @conditional-compile-remove(file-sharing-acs) */\n  /**\n   * Optional callback to define custom actions for attachments.\n   * @beta\n   */\n  actionsForAttachment?: (attachment: AttachmentMetadata, message?: ChatMessage) => AttachmentMenuAction[];\n  /* @conditional-compile-remove(rich-text-editor) */\n  /**\n   * Optional flag to enable rich text editor.\n   * @beta\n   */\n  richTextEditorOptions?: RichTextEditorOptions;\n};\n\n/**\n * @private\n */\nexport const ChatMyMessageComponent = (props: ChatMyMessageComponentProps): JSX.Element => {\n  const { onDeleteMessage, onSendMessage, message } = props;\n  const [isEditing, setIsEditing] = useState(false);\n\n  const onEditClick = useCallback(() => setIsEditing(true), [setIsEditing]);\n\n  const clientMessageId = 'clientMessageId' in message ? message.clientMessageId : undefined;\n  const content = 'content' in message ? message.content : undefined;\n  const onRemoveClick = useCallback(() => {\n    if (onDeleteMessage && message.messageId) {\n      onDeleteMessage(message.messageId);\n    }\n    // when fail to send, message does not have message id, delete message using clientMessageId\n    else if (onDeleteMessage && message.messageType === 'chat' && clientMessageId) {\n      onDeleteMessage(clientMessageId);\n    }\n  }, [onDeleteMessage, message.messageId, message.messageType, clientMessageId]);\n\n  const onResendClick = useCallback(() => {\n    onDeleteMessage && clientMessageId && onDeleteMessage(clientMessageId);\n    let newContent = content ?? '';\n    /* @conditional-compile-remove(rich-text-editor-image-upload) */\n    newContent = removeBrokenImageContent(newContent);\n    onSendMessage &&\n      onSendMessage(\n        newContent,\n        /* @conditional-compile-remove(file-sharing-acs) */\n        /* @conditional-compile-remove(rich-text-editor-image-upload) */\n        {\n          /* @conditional-compile-remove(file-sharing-acs) */ attachments:\n            `attachments` in message ? message.attachments : undefined,\n          type: props.richTextEditorOptions ? 'html' : 'text'\n        }\n      );\n  }, [\n    message,\n    onDeleteMessage,\n    clientMessageId,\n    onSendMessage,\n    content,\n    /* @conditional-compile-remove(rich-text-editor-image-upload) */ props.richTextEditorOptions\n  ]);\n\n  const onSubmitHandler = useCallback(\n    // due to a bug in babel, we can't use arrow function here\n    // affecting conditional-compile-remove(attachment-upload)\n    async function (\n      text: string,\n      /* @conditional-compile-remove(file-sharing-acs) */\n      attachments?: AttachmentMetadata[] | undefined\n    ) {\n      /* @conditional-compile-remove(file-sharing-acs) */\n      if (`attachments` in message && attachments) {\n        message.attachments = attachments;\n      }\n      props.onUpdateMessage &&\n        message.messageId &&\n        (await props.onUpdateMessage(\n          message.messageId,\n          text,\n          /* @conditional-compile-remove(file-sharing-acs) */\n          { attachments: attachments }\n        ));\n      setIsEditing(false);\n    },\n    [message, props]\n  );\n  if (isEditing && message.messageType === 'chat') {\n    return (\n      <ChatMessageComponentAsEditBoxPicker\n        message={message}\n        strings={props.strings}\n        onSubmit={onSubmitHandler}\n        onCancel={(messageId) => {\n          props.onCancelEditMessage && props.onCancelEditMessage(messageId);\n          setIsEditing(false);\n        }}\n        /* @conditional-compile-remove(mention) */\n        mentionLookupOptions={props.mentionOptions?.lookupOptions}\n        /* @conditional-compile-remove(rich-text-editor) */\n        richTextEditorOptions={props.richTextEditorOptions}\n      />\n    );\n  } else {\n    return (\n      <ChatMyMessageComponentAsMessageBubble\n        {...props}\n        onRemoveClick={onRemoveClick}\n        onEditClick={onEditClick}\n        onResendClick={onResendClick}\n        onRenderAvatar={props.onRenderAvatar}\n        /* @conditional-compile-remove(date-time-customization) */\n        onDisplayDateTimeString={props.onDisplayDateTimeString}\n        strings={props.strings}\n        inlineImageOptions={props.inlineImageOptions}\n        /* @conditional-compile-remove(mention) */\n        mentionDisplayOptions={props.mentionOptions?.displayOptions}\n      />\n    );\n  }\n};\n"]}
         
     | 
| 
      
 1 
     | 
    
         
            +
            {"version":3,"file":"ChatMyMessageComponent.js","sourceRoot":"","sources":["../../../../../../../../react-components/src/components/ChatMessage/MyMessageComponents/ChatMyMessageComponent.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { _formatString } from '@internal/acs-ui-common';\nimport React, { useCallback, useState } from 'react';\nimport { MessageThreadStrings, UpdateMessageCallback } from '../../MessageThread';\n/* @conditional-compile-remove(rich-text-editor) */\nimport { RichTextEditorOptions } from '../../MessageThread';\nimport { ChatMessage, ComponentSlotStyle, OnRenderAvatarCallback } from '../../../types';\n/* @conditional-compile-remove(data-loss-prevention) */\nimport { BlockedMessage } from '../../../types';\n/* @conditional-compile-remove(file-sharing-teams-interop) @conditional-compile-remove(file-sharing-acs) */\nimport { AttachmentMenuAction } from '../../../types/Attachment';\n/* @conditional-compile-remove(file-sharing-teams-interop) @conditional-compile-remove(file-sharing-acs) */\nimport { AttachmentMetadata } from '@internal/acs-ui-common';\n/* @conditional-compile-remove(file-sharing-acs) */\nimport { MessageOptions } from '@internal/acs-ui-common';\n/* @conditional-compile-remove(mention) */\nimport { MentionOptions } from '../../MentionPopover';\nimport { InlineImageOptions } from '../ChatMessageContent';\nimport { ChatMyMessageComponentAsMessageBubble } from './ChatMyMessageComponentAsMessageBubble';\nimport { ChatMessageComponentAsEditBoxPicker } from './ChatMessageComponentAsEditBoxPicker';\n\ntype ChatMyMessageComponentProps = {\n  message: ChatMessage | /* @conditional-compile-remove(data-loss-prevention) */ BlockedMessage;\n  userId: string;\n  messageContainerStyle?: ComponentSlotStyle;\n  showDate?: boolean;\n  disableEditing?: boolean;\n  onUpdateMessage?: UpdateMessageCallback;\n  onCancelEditMessage?: (messageId: string) => void;\n  /**\n   * Callback to delete a message. Also called before resending a message that failed to send.\n   * @param messageId ID of the message to delete\n   */\n  onDeleteMessage?: (messageId: string) => Promise<void>;\n  /**\n   * Callback to send a message\n   * @param content The message content to send\n   */\n  onSendMessage?: (\n    content: string,\n    /* @conditional-compile-remove(file-sharing-acs) */\n    options?: MessageOptions\n  ) => Promise<void>;\n  strings: MessageThreadStrings;\n  messageStatus?: string;\n  /**\n   * Optional text to display when the message status is 'failed'.\n   */\n  failureReason?: string;\n  /**\n   * Whether the status indicator for each message is displayed or not.\n   */\n  showMessageStatus?: boolean;\n  /**\n   * Whether to overlap avatar and message when the view is width constrained.\n   */\n  shouldOverlapAvatarAndMessage: boolean;\n  remoteParticipantsCount?: number;\n  onActionButtonClick: (\n    message: ChatMessage,\n    setMessageReadBy: (readBy: { id: string; displayName: string }[]) => void\n  ) => void;\n  /**\n   * Optional callback to override render of the avatar.\n   *\n   * @param userId - user Id\n   */\n  onRenderAvatar?: OnRenderAvatarCallback;\n  /* @conditional-compile-remove(date-time-customization) */\n  /**\n   * Optional function to provide customized date format.\n   * @beta\n   */\n  onDisplayDateTimeString?: (messageDate: Date) => string;\n  /* @conditional-compile-remove(mention) */\n  /**\n   * Optional props needed to lookup suggestions and display mentions in the mention scenario.\n   * @beta\n   */\n  mentionOptions?: MentionOptions;\n  /**\n   * Optional callback called when an inline image is clicked.\n   * @beta\n   */\n  inlineImageOptions?: InlineImageOptions;\n  /* @conditional-compile-remove(file-sharing-teams-interop) @conditional-compile-remove(file-sharing-acs) */\n  /**\n   * Optional callback to render message attachments in the message component.\n   * @beta\n   */\n  onRenderAttachmentDownloads?: (message: ChatMessage) => JSX.Element;\n  /* @conditional-compile-remove(file-sharing-teams-interop) @conditional-compile-remove(file-sharing-acs) */\n  /**\n   * Optional callback to define custom actions for attachments.\n   * @beta\n   */\n  actionsForAttachment?: (attachment: AttachmentMetadata, message?: ChatMessage) => AttachmentMenuAction[];\n  /* @conditional-compile-remove(rich-text-editor) */\n  /**\n   * Optional flag to enable rich text editor.\n   * @beta\n   */\n  richTextEditorOptions?: RichTextEditorOptions;\n};\n\n/**\n * @private\n */\nexport const ChatMyMessageComponent = (props: ChatMyMessageComponentProps): JSX.Element => {\n  const { onDeleteMessage, onSendMessage, message } = props;\n  const [isEditing, setIsEditing] = useState(false);\n\n  const onEditClick = useCallback(() => setIsEditing(true), [setIsEditing]);\n\n  const clientMessageId = 'clientMessageId' in message ? message.clientMessageId : undefined;\n  const content = 'content' in message ? message.content : undefined;\n  const onRemoveClick = useCallback(() => {\n    if (onDeleteMessage && message.messageId) {\n      onDeleteMessage(message.messageId);\n    }\n    // when fail to send, message does not have message id, delete message using clientMessageId\n    else if (onDeleteMessage && message.messageType === 'chat' && clientMessageId) {\n      onDeleteMessage(clientMessageId);\n    }\n  }, [onDeleteMessage, message.messageId, message.messageType, clientMessageId]);\n\n  const onResendClick = useCallback(() => {\n    onDeleteMessage && clientMessageId && onDeleteMessage(clientMessageId);\n    onSendMessage &&\n      onSendMessage(\n        content !== undefined ? content : '',\n        /* @conditional-compile-remove(file-sharing-acs) */\n        /* @conditional-compile-remove(rich-text-editor-image-upload) */\n        {\n          /* @conditional-compile-remove(file-sharing-acs) */ attachments:\n            `attachments` in message ? message.attachments : undefined,\n          type: props.richTextEditorOptions ? 'html' : 'text'\n        }\n      );\n  }, [\n    message,\n    onDeleteMessage,\n    clientMessageId,\n    onSendMessage,\n    content,\n    /* @conditional-compile-remove(rich-text-editor-image-upload) */ props.richTextEditorOptions\n  ]);\n\n  const onSubmitHandler = useCallback(\n    // due to a bug in babel, we can't use arrow function here\n    // affecting conditional-compile-remove(attachment-upload)\n    async function (\n      text: string,\n      /* @conditional-compile-remove(file-sharing-acs) */\n      attachments?: AttachmentMetadata[] | undefined\n    ) {\n      /* @conditional-compile-remove(file-sharing-acs) */\n      if (`attachments` in message && attachments) {\n        message.attachments = attachments;\n      }\n      props.onUpdateMessage &&\n        message.messageId &&\n        (await props.onUpdateMessage(\n          message.messageId,\n          text,\n          /* @conditional-compile-remove(file-sharing-acs) */\n          { attachments: attachments }\n        ));\n      setIsEditing(false);\n    },\n    [message, props]\n  );\n  if (isEditing && message.messageType === 'chat') {\n    return (\n      <ChatMessageComponentAsEditBoxPicker\n        message={message}\n        strings={props.strings}\n        onSubmit={onSubmitHandler}\n        onCancel={(messageId) => {\n          props.onCancelEditMessage && props.onCancelEditMessage(messageId);\n          setIsEditing(false);\n        }}\n        /* @conditional-compile-remove(mention) */\n        mentionLookupOptions={props.mentionOptions?.lookupOptions}\n        /* @conditional-compile-remove(rich-text-editor) */\n        richTextEditorOptions={props.richTextEditorOptions}\n      />\n    );\n  } else {\n    return (\n      <ChatMyMessageComponentAsMessageBubble\n        {...props}\n        onRemoveClick={onRemoveClick}\n        onEditClick={onEditClick}\n        onResendClick={onResendClick}\n        onRenderAvatar={props.onRenderAvatar}\n        /* @conditional-compile-remove(date-time-customization) */\n        onDisplayDateTimeString={props.onDisplayDateTimeString}\n        strings={props.strings}\n        inlineImageOptions={props.inlineImageOptions}\n        /* @conditional-compile-remove(mention) */\n        mentionDisplayOptions={props.mentionOptions?.displayOptions}\n      />\n    );\n  }\n};\n"]}
         
     | 
| 
         @@ -7,35 +7,35 @@ export interface MeetingConferencePhoneInfoModalStrings { 
     | 
|
| 
       7 
7 
     | 
    
         
             
                /**
         
     | 
| 
       8 
8 
     | 
    
         
             
                 * Header for the phone info modal
         
     | 
| 
       9 
9 
     | 
    
         
             
                 */
         
     | 
| 
       10 
     | 
    
         
            -
                meetingConferencePhoneInfoModalTitle 
     | 
| 
      
 10 
     | 
    
         
            +
                meetingConferencePhoneInfoModalTitle?: string;
         
     | 
| 
       11 
11 
     | 
    
         
             
                /**
         
     | 
| 
       12 
12 
     | 
    
         
             
                 * Phone number instruction
         
     | 
| 
       13 
13 
     | 
    
         
             
                 */
         
     | 
| 
       14 
     | 
    
         
            -
                meetingConferencePhoneInfoModalDialIn 
     | 
| 
      
 14 
     | 
    
         
            +
                meetingConferencePhoneInfoModalDialIn?: string;
         
     | 
| 
       15 
15 
     | 
    
         
             
                /**
         
     | 
| 
       16 
16 
     | 
    
         
             
                 * Meeting ID instruction
         
     | 
| 
       17 
17 
     | 
    
         
             
                 */
         
     | 
| 
       18 
     | 
    
         
            -
                meetingConferencePhoneInfoModalMeetingId 
     | 
| 
      
 18 
     | 
    
         
            +
                meetingConferencePhoneInfoModalMeetingId?: string;
         
     | 
| 
       19 
19 
     | 
    
         
             
                /**
         
     | 
| 
       20 
20 
     | 
    
         
             
                 * Wait for phone connection
         
     | 
| 
       21 
21 
     | 
    
         
             
                 */
         
     | 
| 
       22 
     | 
    
         
            -
                meetingConferencePhoneInfoModalWait 
     | 
| 
      
 22 
     | 
    
         
            +
                meetingConferencePhoneInfoModalWait?: string;
         
     | 
| 
       23 
23 
     | 
    
         
             
                /**
         
     | 
| 
       24 
24 
     | 
    
         
             
                 * Toll Free Phone Label
         
     | 
| 
       25 
25 
     | 
    
         
             
                 */
         
     | 
| 
       26 
     | 
    
         
            -
                meetingConferencePhoneInfoModalTollFree 
     | 
| 
      
 26 
     | 
    
         
            +
                meetingConferencePhoneInfoModalTollFree?: string;
         
     | 
| 
       27 
27 
     | 
    
         
             
                /**
         
     | 
| 
       28 
28 
     | 
    
         
             
                 * Toll Phone Label
         
     | 
| 
       29 
29 
     | 
    
         
             
                 */
         
     | 
| 
       30 
     | 
    
         
            -
                meetingConferencePhoneInfoModalToll 
     | 
| 
      
 30 
     | 
    
         
            +
                meetingConferencePhoneInfoModalToll?: string;
         
     | 
| 
       31 
31 
     | 
    
         
             
                /**
         
     | 
| 
       32 
32 
     | 
    
         
             
                 * Toll Phone Label without geo data
         
     | 
| 
       33 
33 
     | 
    
         
             
                 */
         
     | 
| 
       34 
     | 
    
         
            -
                meetingConferencePhoneInfoModalTollGeoData 
     | 
| 
      
 34 
     | 
    
         
            +
                meetingConferencePhoneInfoModalTollGeoData?: string;
         
     | 
| 
       35 
35 
     | 
    
         
             
                /**
         
     | 
| 
       36 
36 
     | 
    
         
             
                 * No phone number available message
         
     | 
| 
       37 
37 
     | 
    
         
             
                 */
         
     | 
| 
       38 
     | 
    
         
            -
                meetingConferencePhoneInfoModalNoPhoneAvailable 
     | 
| 
      
 38 
     | 
    
         
            +
                meetingConferencePhoneInfoModalNoPhoneAvailable?: string;
         
     | 
| 
       39 
39 
     | 
    
         
             
            }
         
     | 
| 
       40 
40 
     | 
    
         
             
            /**
         
     | 
| 
       41 
41 
     | 
    
         
             
             * @public
         
     | 
| 
         @@ -22,7 +22,7 @@ import { _pxToRem } from "../../../acs-ui-common/src"; 
     | 
|
| 
       22 
22 
     | 
    
         
             
            export const MeetingConferencePhoneInfoModal = (props) => {
         
     | 
| 
       23 
23 
     | 
    
         
             
                const { conferencePhoneInfoList, showModal, onDismissMeetingPhoneInfoSettings } = props;
         
     | 
| 
       24 
24 
     | 
    
         
             
                const theme = useTheme();
         
     | 
| 
       25 
     | 
    
         
            -
                const strings = useLocale().strings. 
     | 
| 
      
 25 
     | 
    
         
            +
                const strings = useLocale().strings.MeetingConferencePhoneInfo;
         
     | 
| 
       26 
26 
     | 
    
         
             
                const onDismiss = useCallback(() => {
         
     | 
| 
       27 
27 
     | 
    
         
             
                    if (onDismissMeetingPhoneInfoSettings) {
         
     | 
| 
       28 
28 
     | 
    
         
             
                        onDismissMeetingPhoneInfoSettings();
         
     | 
| 
         @@ -43,7 +43,7 @@ export const MeetingConferencePhoneInfoModal = (props) => { 
     | 
|
| 
       43 
43 
     | 
    
         
             
                                        React.createElement(Stack, { className: infoConnectionLinkStyle(theme) }),
         
     | 
| 
       44 
44 
     | 
    
         
             
                                        React.createElement(Stack.Item, { className: phoneInfoIcon(theme) },
         
     | 
| 
       45 
45 
     | 
    
         
             
                                            React.createElement(Stack, { verticalAlign: "center", horizontalAlign: "center" },
         
     | 
| 
       46 
     | 
    
         
            -
                                                React.createElement(Icon, { iconName: " 
     | 
| 
      
 46 
     | 
    
         
            +
                                                React.createElement(Icon, { iconName: "PhoneNumberButton", className: phoneInfoIconStyle(theme) }))),
         
     | 
| 
       47 
47 
     | 
    
         
             
                                        React.createElement(Stack.Item, null,
         
     | 
| 
       48 
48 
     | 
    
         
             
                                            React.createElement(Text, { className: stepTextStyle }, strings === null || strings === void 0 ? void 0 : strings.meetingConferencePhoneInfoModalDialIn)))),
         
     | 
| 
       49 
49 
     | 
    
         
             
                                React.createElement(Stack.Item, { className: phoneInfoStep }, conferencePhoneInfoList.map((phoneNumber, index) => (React.createElement(Stack.Item, { key: index },
         
     | 
| 
         @@ -63,14 +63,14 @@ export const MeetingConferencePhoneInfoModal = (props) => { 
     | 
|
| 
       63 
63 
     | 
    
         
             
                                        React.createElement(Stack, { className: infoConnectionLinkStyle(theme) }),
         
     | 
| 
       64 
64 
     | 
    
         
             
                                        React.createElement(Stack.Item, { className: phoneInfoIcon(theme) },
         
     | 
| 
       65 
65 
     | 
    
         
             
                                            React.createElement(Stack, { verticalAlign: "center", horizontalAlign: "center" },
         
     | 
| 
       66 
     | 
    
         
            -
                                                React.createElement(Icon, { iconName: " 
     | 
| 
      
 66 
     | 
    
         
            +
                                                React.createElement(Icon, { iconName: "DtmfDialpadButton", className: phoneInfoIconStyle(theme) }))),
         
     | 
| 
       67 
67 
     | 
    
         
             
                                        React.createElement(Stack.Item, null,
         
     | 
| 
       68 
68 
     | 
    
         
             
                                            React.createElement(Text, { className: stepTextStyle }, strings === null || strings === void 0 ? void 0 : strings.meetingConferencePhoneInfoModalMeetingId)))),
         
     | 
| 
       69 
69 
     | 
    
         
             
                                React.createElement(Text, { className: phoneInfoTextStyle }, formatMeetingId(conferencePhoneInfoList[0].conferenceId))),
         
     | 
| 
       70 
70 
     | 
    
         
             
                            React.createElement(Stack, { horizontal: true, horizontalAlign: "space-between", verticalAlign: "center" },
         
     | 
| 
       71 
71 
     | 
    
         
             
                                React.createElement(Stack, { horizontal: true },
         
     | 
| 
       72 
72 
     | 
    
         
             
                                    React.createElement(Stack.Item, { className: phoneInfoIcon(theme), style: { marginLeft: _pxToRem(2) } },
         
     | 
| 
       73 
     | 
    
         
            -
                                        React.createElement(Icon, { iconName: " 
     | 
| 
      
 73 
     | 
    
         
            +
                                        React.createElement(Icon, { iconName: "PhoneInfoWait", className: phoneInfoIconStyle(theme) })),
         
     | 
| 
       74 
74 
     | 
    
         
             
                                    React.createElement(Stack.Item, null,
         
     | 
| 
       75 
75 
     | 
    
         
             
                                        React.createElement(Text, { className: stepTextStyle }, strings === null || strings === void 0 ? void 0 : strings.meetingConferencePhoneInfoModalWait)))))))));
         
     | 
| 
       76 
76 
     | 
    
         
             
            };
         
     | 
| 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            {"version":3,"file":"MeetingConferencePhoneInfo.js","sourceRoot":"","sources":["../../../../../../react-components/src/components/MeetingConferencePhoneInfo.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/* @conditional-compile-remove(teams-meeting-conference) */\nimport React, { useCallback } from 'react';\n/* @conditional-compile-remove(teams-meeting-conference) */\nimport { useMemo } from 'react';\n/* @conditional-compile-remove(teams-meeting-conference) */\nimport { IModalStyles, Modal, Stack, useTheme, Text, IconButton, Icon } from '@fluentui/react';\n\n/* @conditional-compile-remove(teams-meeting-conference) */\nimport {\n  themedPhoneInfoModalStyle,\n  titleClassName,\n  titleContainerClassName,\n  phoneInfoTextStyle,\n  phoneInfoIcon,\n  phoneInfoInctructionLine,\n  phoneInfoStep,\n  stepTextStyle,\n  infoConnectionLinkStyle,\n  phoneInfoIconStyle\n} from './styles/TeamsMeetingConferenceInfo';\n/* @conditional-compile-remove(teams-meeting-conference) */\nimport { _preventDismissOnEvent } from '@internal/acs-ui-common';\n/* @conditional-compile-remove(teams-meeting-conference) */\nimport { useLocale } from '../localization';\n/* @conditional-compile-remove(teams-meeting-conference) */\nimport { isPossiblePhoneNumber, parsePhoneNumber } from 'libphonenumber-js';\n/* @conditional-compile-remove(teams-meeting-conference) */\nimport { _pxToRem } from '@internal/acs-ui-common';\n\n/* @conditional-compile-remove(teams-meeting-conference) */\n/**\n * strings for phone info modal\n * @public\n */\nexport interface MeetingConferencePhoneInfoModalStrings {\n  /**\n   * Header for the phone info modal\n   */\n  meetingConferencePhoneInfoModalTitle: string;\n  /**\n   * Phone number instruction\n   */\n  meetingConferencePhoneInfoModalDialIn: string;\n  /**\n   * Meeting ID instruction\n   */\n  meetingConferencePhoneInfoModalMeetingId: string;\n  /**\n   * Wait for phone connection\n   */\n  meetingConferencePhoneInfoModalWait: string;\n  /**\n   * Toll Free Phone Label\n   */\n  meetingConferencePhoneInfoModalTollFree: string;\n  /**\n   * Toll Phone Label\n   */\n  meetingConferencePhoneInfoModalToll: string;\n  /**\n   * Toll Phone Label without geo data\n   */\n  meetingConferencePhoneInfoModalTollGeoData: string;\n  /**\n   * No phone number available message\n   */\n  meetingConferencePhoneInfoModalNoPhoneAvailable: string;\n}\n\n/* @conditional-compile-remove(teams-meeting-conference) */\n/**\n * @public\n * MeetingConferencePhoneInfoModal Component Props.\n */\nexport interface MeetingConferencePhoneInfoModalProps {\n  conferencePhoneInfoList: ConferencePhoneInfo[];\n  showModal?: boolean;\n  onDismissMeetingPhoneInfoSettings?: () => void;\n}\n\n/* @conditional-compile-remove(teams-meeting-conference) */\n/**\n * @public\n * a component for setting spoken languages\n */\nexport const MeetingConferencePhoneInfoModal = (props: MeetingConferencePhoneInfoModalProps): JSX.Element => {\n  const { conferencePhoneInfoList, showModal, onDismissMeetingPhoneInfoSettings } = props;\n\n  const theme = useTheme();\n  const strings = useLocale().strings.meetingConferencePhoneInfo;\n\n  const onDismiss = useCallback((): void => {\n    if (onDismissMeetingPhoneInfoSettings) {\n      onDismissMeetingPhoneInfoSettings();\n    }\n  }, [onDismissMeetingPhoneInfoSettings]);\n\n  const PhoneInfoModalStyle: Partial<IModalStyles> = useMemo(() => themedPhoneInfoModalStyle(theme), [theme]);\n\n  return (\n    <>\n      <Modal\n        titleAriaId={strings?.meetingConferencePhoneInfoModalTitle}\n        isOpen={showModal}\n        onDismiss={onDismiss}\n        isBlocking={true}\n        styles={PhoneInfoModalStyle}\n      >\n        <Stack horizontal horizontalAlign=\"space-between\" verticalAlign=\"center\" className={titleContainerClassName}>\n          <Text className={titleClassName}>{strings?.meetingConferencePhoneInfoModalTitle}</Text>\n          <IconButton\n            iconProps={{ iconName: 'Cancel' }}\n            ariaLabel={strings?.meetingConferencePhoneInfoModalTitle}\n            onClick={onDismiss}\n            style={{ color: theme.palette.black }}\n          />\n        </Stack>\n        {conferencePhoneInfoList.length === 0 && (\n          <Stack horizontal>\n            <Text className={stepTextStyle}>{strings?.meetingConferencePhoneInfoModalNoPhoneAvailable}</Text>\n          </Stack>\n        )}\n        {conferencePhoneInfoList.length > 0 && (\n          <Stack>\n            <Stack horizontal horizontalAlign=\"space-between\" className={phoneInfoInctructionLine}>\n              <Stack.Item style={{ display: 'flex' }}>\n                <Stack horizontal className={phoneInfoStep}>\n                  <Stack className={infoConnectionLinkStyle(theme)}></Stack>\n                  <Stack.Item className={phoneInfoIcon(theme)}>\n                    <Stack verticalAlign=\"center\" horizontalAlign=\"center\">\n                      <Icon iconName=\"JoinByPhoneDialStepIcon\" className={phoneInfoIconStyle(theme)} />\n                    </Stack>\n                  </Stack.Item>\n                  <Stack.Item>\n                    <Text className={stepTextStyle}>{strings?.meetingConferencePhoneInfoModalDialIn}</Text>\n                  </Stack.Item>\n                </Stack>\n              </Stack.Item>\n              <Stack.Item className={phoneInfoStep}>\n                {conferencePhoneInfoList.map((phoneNumber, index) => (\n                  <Stack.Item key={index}>\n                    <Text className={phoneInfoTextStyle}>\n                      {formatPhoneNumber(phoneNumber.phoneNumber)}{' '}\n                      {phoneNumber.isTollFree\n                        ? strings.meetingConferencePhoneInfoModalTollFree\n                        : strings.meetingConferencePhoneInfoModalToll}\n                    </Text>\n                    <br />\n                    <Text className={phoneInfoTextStyle}> {formatPhoneNumberInfo(phoneNumber, strings)}</Text>\n                  </Stack.Item>\n                ))}\n              </Stack.Item>\n            </Stack>\n            <Stack\n              horizontal\n              horizontalAlign=\"space-between\"\n              verticalAlign=\"center\"\n              className={phoneInfoInctructionLine}\n            >\n              <Stack.Item style={{ display: 'flex' }}>\n                <Stack horizontal>\n                  <Stack className={infoConnectionLinkStyle(theme)}></Stack>\n                  <Stack.Item className={phoneInfoIcon(theme)}>\n                    <Stack verticalAlign=\"center\" horizontalAlign=\"center\">\n                      <Icon iconName=\"JoinByPhoneConferenceIdIcon\" className={phoneInfoIconStyle(theme)} />\n                    </Stack>\n                  </Stack.Item>\n                  <Stack.Item>\n                    <Text className={stepTextStyle}>{strings?.meetingConferencePhoneInfoModalMeetingId}</Text>\n                  </Stack.Item>\n                </Stack>\n              </Stack.Item>\n              <Text className={phoneInfoTextStyle}>{formatMeetingId(conferencePhoneInfoList[0].conferenceId)}</Text>\n            </Stack>\n            <Stack horizontal horizontalAlign=\"space-between\" verticalAlign=\"center\">\n              <Stack horizontal>\n                <Stack.Item className={phoneInfoIcon(theme)} style={{ marginLeft: _pxToRem(2) }}>\n                  <Icon iconName=\"JoinByPhoneWaitToBeAdmittedIcon\" className={phoneInfoIconStyle(theme)} />\n                </Stack.Item>\n                <Stack.Item>\n                  <Text className={stepTextStyle}>{strings?.meetingConferencePhoneInfoModalWait}</Text>\n                </Stack.Item>\n              </Stack>\n            </Stack>\n          </Stack>\n        )}\n      </Modal>\n    </>\n  );\n};\n\n/* @conditional-compile-remove(teams-meeting-conference) */\n/**\n * @internal\n * format phone number\n */\nexport const formatPhoneNumber = (phoneNumber: string): string => {\n  if (!phoneNumber) {\n    return '';\n  }\n  let enchantedPhoneNumber = phoneNumber;\n  if (!phoneNumber.startsWith('+')) {\n    enchantedPhoneNumber = `+${phoneNumber}`;\n  }\n  if (isPossiblePhoneNumber(enchantedPhoneNumber)) {\n    return parsePhoneNumber(enchantedPhoneNumber)?.formatInternational() || enchantedPhoneNumber;\n  }\n  return phoneNumber;\n};\n\n/* @conditional-compile-remove(teams-meeting-conference) */\n/**\n * @internal\n * format phone number link\n */\nexport const formatPhoneNumberLink = (phoneNumber: ConferencePhoneInfo): string => {\n  return `tel:+${phoneNumber.phoneNumber},,${phoneNumber.conferenceId}#`;\n};\n\n/* @conditional-compile-remove(teams-meeting-conference) */\n/**\n * @internal\n * format phone number\n */\nexport const formatPhoneNumberInfo = (\n  phoneNumber: ConferencePhoneInfo,\n  strings: MeetingConferencePhoneInfoModalStrings | undefined\n): string => {\n  const templateText =\n    phoneNumber.country && phoneNumber.city ? strings?.meetingConferencePhoneInfoModalTollGeoData : '';\n  return (\n    templateText\n      ?.replace('{phoneNumber}', formatPhoneNumber(phoneNumber.phoneNumber))\n      .replace('{country}', phoneNumber.country || '')\n      .replace('{city}', phoneNumber.city || '')\n      .trim() || ''\n  );\n};\n\n/* @conditional-compile-remove(teams-meeting-conference) */\n/**\n * @internal\n * format meeting id\n */\nexport const formatMeetingId = (meetingId?: string): string => {\n  if (!meetingId) {\n    return '';\n  }\n  if (meetingId?.length !== 9) {\n    return meetingId;\n  }\n\n  return [meetingId.slice(0, 3), meetingId.slice(3, 6), meetingId.slice(6, 9)].join(' ') + '#';\n};\n\n/* @conditional-compile-remove(teams-meeting-conference) */\n/**\n * @public\n * Information for conference phone info\n */\nexport interface ConferencePhoneInfo {\n  phoneNumber: string;\n  conferenceId: string;\n  isTollFree: boolean;\n  country?: string;\n  city?: string;\n}\n"]}
         
     | 
| 
      
 1 
     | 
    
         
            +
            {"version":3,"file":"MeetingConferencePhoneInfo.js","sourceRoot":"","sources":["../../../../../../react-components/src/components/MeetingConferencePhoneInfo.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/* @conditional-compile-remove(teams-meeting-conference) */\nimport React, { useCallback } from 'react';\n/* @conditional-compile-remove(teams-meeting-conference) */\nimport { useMemo } from 'react';\n/* @conditional-compile-remove(teams-meeting-conference) */\nimport { IModalStyles, Modal, Stack, useTheme, Text, IconButton, Icon } from '@fluentui/react';\n\n/* @conditional-compile-remove(teams-meeting-conference) */\nimport {\n  themedPhoneInfoModalStyle,\n  titleClassName,\n  titleContainerClassName,\n  phoneInfoTextStyle,\n  phoneInfoIcon,\n  phoneInfoInctructionLine,\n  phoneInfoStep,\n  stepTextStyle,\n  infoConnectionLinkStyle,\n  phoneInfoIconStyle\n} from './styles/TeamsMeetingConferenceInfo';\n/* @conditional-compile-remove(teams-meeting-conference) */\nimport { _preventDismissOnEvent } from '@internal/acs-ui-common';\n/* @conditional-compile-remove(teams-meeting-conference) */\nimport { useLocale } from '../localization';\n/* @conditional-compile-remove(teams-meeting-conference) */\nimport { isPossiblePhoneNumber, parsePhoneNumber } from 'libphonenumber-js';\n/* @conditional-compile-remove(teams-meeting-conference) */\nimport { _pxToRem } from '@internal/acs-ui-common';\n\n/* @conditional-compile-remove(teams-meeting-conference) */\n/**\n * strings for phone info modal\n * @public\n */\nexport interface MeetingConferencePhoneInfoModalStrings {\n  /**\n   * Header for the phone info modal\n   */\n  meetingConferencePhoneInfoModalTitle?: string;\n  /**\n   * Phone number instruction\n   */\n  meetingConferencePhoneInfoModalDialIn?: string;\n  /**\n   * Meeting ID instruction\n   */\n  meetingConferencePhoneInfoModalMeetingId?: string;\n  /**\n   * Wait for phone connection\n   */\n  meetingConferencePhoneInfoModalWait?: string;\n  /**\n   * Toll Free Phone Label\n   */\n  meetingConferencePhoneInfoModalTollFree?: string;\n  /**\n   * Toll Phone Label\n   */\n  meetingConferencePhoneInfoModalToll?: string;\n  /**\n   * Toll Phone Label without geo data\n   */\n  meetingConferencePhoneInfoModalTollGeoData?: string;\n  /**\n   * No phone number available message\n   */\n  meetingConferencePhoneInfoModalNoPhoneAvailable?: string;\n}\n\n/* @conditional-compile-remove(teams-meeting-conference) */\n/**\n * @public\n * MeetingConferencePhoneInfoModal Component Props.\n */\nexport interface MeetingConferencePhoneInfoModalProps {\n  conferencePhoneInfoList: ConferencePhoneInfo[];\n  showModal?: boolean;\n  onDismissMeetingPhoneInfoSettings?: () => void;\n}\n\n/* @conditional-compile-remove(teams-meeting-conference) */\n/**\n * @public\n * a component for setting spoken languages\n */\nexport const MeetingConferencePhoneInfoModal = (props: MeetingConferencePhoneInfoModalProps): JSX.Element => {\n  const { conferencePhoneInfoList, showModal, onDismissMeetingPhoneInfoSettings } = props;\n\n  const theme = useTheme();\n  const strings = useLocale().strings.MeetingConferencePhoneInfo;\n\n  const onDismiss = useCallback((): void => {\n    if (onDismissMeetingPhoneInfoSettings) {\n      onDismissMeetingPhoneInfoSettings();\n    }\n  }, [onDismissMeetingPhoneInfoSettings]);\n\n  const PhoneInfoModalStyle: Partial<IModalStyles> = useMemo(() => themedPhoneInfoModalStyle(theme), [theme]);\n\n  return (\n    <>\n      <Modal\n        titleAriaId={strings?.meetingConferencePhoneInfoModalTitle}\n        isOpen={showModal}\n        onDismiss={onDismiss}\n        isBlocking={true}\n        styles={PhoneInfoModalStyle}\n      >\n        <Stack horizontal horizontalAlign=\"space-between\" verticalAlign=\"center\" className={titleContainerClassName}>\n          <Text className={titleClassName}>{strings?.meetingConferencePhoneInfoModalTitle}</Text>\n          <IconButton\n            iconProps={{ iconName: 'Cancel' }}\n            ariaLabel={strings?.meetingConferencePhoneInfoModalTitle}\n            onClick={onDismiss}\n            style={{ color: theme.palette.black }}\n          />\n        </Stack>\n        {conferencePhoneInfoList.length === 0 && (\n          <Stack horizontal>\n            <Text className={stepTextStyle}>{strings?.meetingConferencePhoneInfoModalNoPhoneAvailable}</Text>\n          </Stack>\n        )}\n        {conferencePhoneInfoList.length > 0 && (\n          <Stack>\n            <Stack horizontal horizontalAlign=\"space-between\" className={phoneInfoInctructionLine}>\n              <Stack.Item style={{ display: 'flex' }}>\n                <Stack horizontal className={phoneInfoStep}>\n                  <Stack className={infoConnectionLinkStyle(theme)}></Stack>\n                  <Stack.Item className={phoneInfoIcon(theme)}>\n                    <Stack verticalAlign=\"center\" horizontalAlign=\"center\">\n                      <Icon iconName=\"PhoneNumberButton\" className={phoneInfoIconStyle(theme)} />\n                    </Stack>\n                  </Stack.Item>\n                  <Stack.Item>\n                    <Text className={stepTextStyle}>{strings?.meetingConferencePhoneInfoModalDialIn}</Text>\n                  </Stack.Item>\n                </Stack>\n              </Stack.Item>\n              <Stack.Item className={phoneInfoStep}>\n                {conferencePhoneInfoList.map((phoneNumber, index) => (\n                  <Stack.Item key={index}>\n                    <Text className={phoneInfoTextStyle}>\n                      {formatPhoneNumber(phoneNumber.phoneNumber)}{' '}\n                      {phoneNumber.isTollFree\n                        ? strings.meetingConferencePhoneInfoModalTollFree\n                        : strings.meetingConferencePhoneInfoModalToll}\n                    </Text>\n                    <br />\n                    <Text className={phoneInfoTextStyle}> {formatPhoneNumberInfo(phoneNumber, strings)}</Text>\n                  </Stack.Item>\n                ))}\n              </Stack.Item>\n            </Stack>\n            <Stack\n              horizontal\n              horizontalAlign=\"space-between\"\n              verticalAlign=\"center\"\n              className={phoneInfoInctructionLine}\n            >\n              <Stack.Item style={{ display: 'flex' }}>\n                <Stack horizontal>\n                  <Stack className={infoConnectionLinkStyle(theme)}></Stack>\n                  <Stack.Item className={phoneInfoIcon(theme)}>\n                    <Stack verticalAlign=\"center\" horizontalAlign=\"center\">\n                      <Icon iconName=\"DtmfDialpadButton\" className={phoneInfoIconStyle(theme)} />\n                    </Stack>\n                  </Stack.Item>\n                  <Stack.Item>\n                    <Text className={stepTextStyle}>{strings?.meetingConferencePhoneInfoModalMeetingId}</Text>\n                  </Stack.Item>\n                </Stack>\n              </Stack.Item>\n              <Text className={phoneInfoTextStyle}>{formatMeetingId(conferencePhoneInfoList[0].conferenceId)}</Text>\n            </Stack>\n            <Stack horizontal horizontalAlign=\"space-between\" verticalAlign=\"center\">\n              <Stack horizontal>\n                <Stack.Item className={phoneInfoIcon(theme)} style={{ marginLeft: _pxToRem(2) }}>\n                  <Icon iconName=\"PhoneInfoWait\" className={phoneInfoIconStyle(theme)} />\n                </Stack.Item>\n                <Stack.Item>\n                  <Text className={stepTextStyle}>{strings?.meetingConferencePhoneInfoModalWait}</Text>\n                </Stack.Item>\n              </Stack>\n            </Stack>\n          </Stack>\n        )}\n      </Modal>\n    </>\n  );\n};\n\n/* @conditional-compile-remove(teams-meeting-conference) */\n/**\n * @internal\n * format phone number\n */\nexport const formatPhoneNumber = (phoneNumber: string): string => {\n  if (!phoneNumber) {\n    return '';\n  }\n  let enchantedPhoneNumber = phoneNumber;\n  if (!phoneNumber.startsWith('+')) {\n    enchantedPhoneNumber = `+${phoneNumber}`;\n  }\n  if (isPossiblePhoneNumber(enchantedPhoneNumber)) {\n    return parsePhoneNumber(enchantedPhoneNumber)?.formatInternational() || enchantedPhoneNumber;\n  }\n  return phoneNumber;\n};\n\n/* @conditional-compile-remove(teams-meeting-conference) */\n/**\n * @internal\n * format phone number link\n */\nexport const formatPhoneNumberLink = (phoneNumber: ConferencePhoneInfo): string => {\n  return `tel:+${phoneNumber.phoneNumber},,${phoneNumber.conferenceId}#`;\n};\n\n/* @conditional-compile-remove(teams-meeting-conference) */\n/**\n * @internal\n * format phone number\n */\nexport const formatPhoneNumberInfo = (\n  phoneNumber: ConferencePhoneInfo,\n  strings: MeetingConferencePhoneInfoModalStrings | undefined\n): string => {\n  const templateText =\n    phoneNumber.country && phoneNumber.city ? strings?.meetingConferencePhoneInfoModalTollGeoData : '';\n  return (\n    templateText\n      ?.replace('{phoneNumber}', formatPhoneNumber(phoneNumber.phoneNumber))\n      .replace('{country}', phoneNumber.country || '')\n      .replace('{city}', phoneNumber.city || '')\n      .trim() || ''\n  );\n};\n\n/* @conditional-compile-remove(teams-meeting-conference) */\n/**\n * @internal\n * format meeting id\n */\nexport const formatMeetingId = (meetingId?: string): string => {\n  if (!meetingId) {\n    return '';\n  }\n  if (meetingId?.length !== 9) {\n    return meetingId;\n  }\n\n  return [meetingId.slice(0, 3), meetingId.slice(3, 6), meetingId.slice(6, 9)].join(' ') + '#';\n};\n\n/* @conditional-compile-remove(teams-meeting-conference) */\n/**\n * @public\n * Information for conference phone info\n */\nexport interface ConferencePhoneInfo {\n  phoneNumber: string;\n  conferenceId: string;\n  isTollFree: boolean;\n  country?: string;\n  city?: string;\n}\n"]}
         
     | 
    
        package/dist/dist-esm/react-components/src/components/RichTextEditor/Plugins/CopyPastePlugin.js
    CHANGED
    
    | 
         @@ -57,6 +57,7 @@ export const handleInlineImage = (event, onUploadInlineImage) => { 
     | 
|
| 
       57 
57 
     | 
    
         
             
                        onUploadInlineImage(imageUrl, fileName);
         
     | 
| 
       58 
58 
     | 
    
         
             
                        image.src = imageUrl;
         
     | 
| 
       59 
59 
     | 
    
         
             
                        image.alt = image.alt || 'image';
         
     | 
| 
      
 60 
     | 
    
         
            +
                        image.style.width = '119px'; // TODO: find a way to get the original width and height of the image
         
     | 
| 
       60 
61 
     | 
    
         
             
                    });
         
     | 
| 
       61 
62 
     | 
    
         
             
                }
         
     | 
| 
       62 
63 
     | 
    
         
             
            };
         
     | 
    
        package/dist/dist-esm/react-components/src/components/RichTextEditor/Plugins/CopyPastePlugin.js.map
    CHANGED
    
    | 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            {"version":3,"file":"CopyPastePlugin.js","sourceRoot":"","sources":["../../../../../../../../react-components/src/components/RichTextEditor/Plugins/CopyPastePlugin.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,yBAAyB,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAC7F,gEAAgE;AAChE,OAAO,EAAE,aAAa,EAAE,yCAAgC;AAExD;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,eAAe;IAApC;QACU,WAAM,GAAmB,IAAI,CAAC;IA0BxC,CAAC;IAnBC,OAAO;QACL,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAED,UAAU,CAAC,MAAe;QACxB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,OAAO,KAAU,CAAC;IAElB,aAAa,CAAC,KAAkB;QAC9B,sBAAsB,CAAC,KAAK,EAAE,gEAAgE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7G,gEAAgE;QAChE,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACnD,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,CAAC;YACtD,kEAAkE;YAClE,+BAA+B,CAAC,KAAK,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,KAAkB;AAClB,gEAAgE,CAAC,OAEvD,EACJ,EAAE;IACR,IAAI,KAAK,CAAC,SAAS,KAAK,eAAe,CAAC,WAAW,IAAI,KAAK,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;QACpF,gEAAgE;QAChE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAG,EAAE,OAAO,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;QACvC,gEAAgE;QAChE,OAAO;IACT,CAAC;AACH,CAAC,CAAC;AAEF,gEAAgE;AAChE;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,KAAkB,EAClB,mBAA+D,EACzD,EAAE;IACR,IAAI,KAAK,CAAC,SAAS,KAAK,eAAe,CAAC,WAAW,IAAI,KAAK,CAAC,SAAS,KAAK,QAAQ,IAAI,mBAAmB,EAAE,CAAC;QAC3G,KAAK,CAAC,QAAQ,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YACvD,MAAM,cAAc,GAAG,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC;YACjD,MAAM,QAAQ,GAAG,CAAA,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,IAAI,MAAI,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA,IAAI,WAAW,CAAC;YAC/F,2FAA2F;YAC3F,IAAI,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC;YACzB,IAAI,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;gBACxC,MAAM,SAAS,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC3C,QAAQ,GAAG,GAAG,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;YAC5C,CAAC;YAED,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAExC,KAAK,CAAC,GAAG,GAAG,QAAQ,CAAC;YACrB,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,OAAO,CAAC; 
     | 
| 
      
 1 
     | 
    
         
            +
            {"version":3,"file":"CopyPastePlugin.js","sourceRoot":"","sources":["../../../../../../../../react-components/src/components/RichTextEditor/Plugins/CopyPastePlugin.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nimport type { PluginEvent, EditorPlugin, IEditor } from 'roosterjs-content-model-types';\nimport { ContentChangedEventSource, PluginEventType } from '../../utils/RichTextEditorUtils';\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\nimport { _base64ToBlob } from '@internal/acs-ui-common';\n\n/**\n * CopyPastePlugin is a plugin for handling copy and paste events in the editor.\n */\nexport default class CopyPastePlugin implements EditorPlugin {\n  private editor: IEditor | null = null;\n  // don't set value in constructor to be able to update it without plugin recreation\n  /* @conditional-compile-remove(rich-text-editor-image-upload) */\n  onPaste?: (event: { content: DocumentFragment }) => void;\n  /* @conditional-compile-remove(rich-text-editor-image-upload) */\n  onUploadInlineImage?: (imageUrl: string, imageFileName: string) => void;\n\n  getName(): string {\n    return 'CopyPastePlugin';\n  }\n\n  initialize(editor: IEditor): void {\n    this.editor = editor;\n  }\n\n  dispose(): void {}\n\n  onPluginEvent(event: PluginEvent): void {\n    handleBeforePasteEvent(event, /* @conditional-compile-remove(rich-text-editor-image-upload) */ this.onPaste);\n    /* @conditional-compile-remove(rich-text-editor-image-upload) */\n    handleInlineImage(event, this.onUploadInlineImage);\n    if (this.editor !== null && !this.editor.isDisposed()) {\n      // scroll the editor to the correct position after pasting content\n      scrollToBottomAfterContentPaste(event);\n    }\n  }\n}\n\n/**\n * @internal\n * Exported only for unit testing\n */\nexport const handleBeforePasteEvent = (\n  event: PluginEvent,\n  /* @conditional-compile-remove(rich-text-editor-image-upload) */ onPaste?: (event: {\n    content: DocumentFragment;\n  }) => void\n): void => {\n  if (event.eventType === PluginEventType.BeforePaste && event.pasteType === 'normal') {\n    /* @conditional-compile-remove(rich-text-editor-image-upload) */\n    onPaste?.({ content: event.fragment });\n    /* @conditional-compile-remove(rich-text-editor-image-upload) */\n    return;\n  }\n};\n\n/* @conditional-compile-remove(rich-text-editor-image-upload) */\n/**\n * @internal\n * Exported only for unit testing\n */\nexport const handleInlineImage = (\n  event: PluginEvent,\n  onUploadInlineImage?: (image: string, fileName: string) => void\n): void => {\n  if (event.eventType === PluginEventType.BeforePaste && event.pasteType === 'normal' && onUploadInlineImage) {\n    event.fragment.querySelectorAll('img').forEach((image) => {\n      const clipboardImage = event.clipboardData.image;\n      const fileName = clipboardImage?.name || clipboardImage?.type.replace('/', '.') || 'image.png';\n      // If the image src is an external url, call the onUploadInlineImage callback with the url.\n      let imageUrl = image.src;\n      if (image.src.startsWith('data:image/')) {\n        const blobImage = _base64ToBlob(image.src);\n        imageUrl = URL.createObjectURL(blobImage);\n      }\n\n      onUploadInlineImage(imageUrl, fileName);\n\n      image.src = imageUrl;\n      image.alt = image.alt || 'image';\n      image.style.width = '119px'; // TODO: find a way to get the original width and height of the image\n    });\n  }\n};\n\n/**\n * Update the scroll position of the editor after pasting content to ensure the content is visible.\n * @param event - The plugin event.\n */\nexport const scrollToBottomAfterContentPaste = (event: PluginEvent): void => {\n  if (event.eventType === PluginEventType.ContentChanged && event.source === ContentChangedEventSource.Paste) {\n    // Get the current selection in the document\n    const selection = document.getSelection();\n\n    // Check if a selection exists and it has at least one range\n    if (!selection || selection.rangeCount <= 0) {\n      // If no selection or range, exit the function\n      return;\n    }\n\n    // Get the first range of the selection\n    // A user can normally only select one range at a time, so the rangeCount will usually be 1\n    const range = selection.getRangeAt(0);\n\n    // If the common ancestor container of the range is the document itself,\n    // it might mean that the editable element is getting removed from the DOM\n    // In such cases, especially in Safari, trying to modify the range might throw a HierarchyRequest error\n    if (range.commonAncestorContainer === document) {\n      return;\n    }\n\n    // Create a temporary span element to use as an anchor for scrolling\n    // We can't use the anchor node directly because if it's a Text node, calling scrollIntoView() on it will throw an error\n    const tempElement = document.createElement('span');\n    // Collapse the range to its end point\n    // This means the start and end points of the range will be the same, and it will not contain any content\n    range.collapse(false);\n    // Insert the temporary element at the cursor's position at the end of the range\n    range.insertNode(tempElement);\n\n    // Scroll the temporary element into view\n    // the element will be aligned at the center of the scroll container, otherwise, text and images may be positioned incorrectly\n    tempElement.scrollIntoView({\n      block: 'center'\n    });\n    tempElement.remove();\n  }\n};\n"]}
         
     |