VaKeR CYBER ARMY
Logo of a company Server : Apache/2.4.41 (Ubuntu)
System : Linux absol.cf 5.4.0-198-generic #218-Ubuntu SMP Fri Sep 27 20:18:53 UTC 2024 x86_64
User : www-data ( 33)
PHP Version : 7.4.33
Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Directory :  /opt/mattermost/client/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : //opt/mattermost/client/11.88c2898b3db4047b1024.js.map
{"version":3,"file":"11.88c2898b3db4047b1024.js","mappings":"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","sources":["webpack://mattermost-webapp/./src/components/file_info_preview/file_info_preview.tsx","webpack://mattermost-webapp/./src/components/file_info_preview/index.ts","webpack://mattermost-webapp/./src/components/archived_preview.tsx","webpack://mattermost-webapp/./src/components/audio_video_preview/audio_video_preview.tsx","webpack://mattermost-webapp/./src/components/audio_video_preview/index.ts","webpack://mattermost-webapp/./src/components/code_preview.tsx","webpack://mattermost-webapp/./src/components/file_preview_modal/file_preview_modal_info/file_preview_modal_info.tsx","webpack://mattermost-webapp/./src/components/file_preview_modal/types.ts","webpack://mattermost-webapp/./src/components/file_preview_modal/file_preview_modal_main_actions/file_preview_modal_main_actions.tsx","webpack://mattermost-webapp/./src/components/file_preview_modal/file_preview_modal_footer/file_preview_modal_footer.tsx","webpack://mattermost-webapp/./src/components/file_preview_modal/file_preview_modal_main_nav/file_preview_modal_main_nav.tsx","webpack://mattermost-webapp/./src/components/file_preview_modal/file_preview_modal_header/file_preview_modal_header.tsx","webpack://mattermost-webapp/./src/components/file_preview_modal/image_preview.tsx","webpack://mattermost-webapp/./src/components/file_preview_modal/popover_bar/popover_bar.tsx","webpack://mattermost-webapp/./src/components/file_preview_modal/popover_bar/index.ts","webpack://mattermost-webapp/./src/components/file_preview_modal/file_preview_modal.tsx"],"sourcesContent":["// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport React from 'react';\nimport {useIntl} from 'react-intl';\n\nimport type {FileInfo} from '@mattermost/types/files';\n\nimport * as Utils from 'utils/utils';\n\ntype Props = {\n    fileInfo: FileInfo;\n    fileUrl: string;\n    canDownloadFiles: boolean;\n};\n\nconst FileInfoPreview = ({\n    fileInfo,\n    fileUrl,\n    canDownloadFiles,\n}: Props) => {\n    const intl = useIntl();\n\n    // non-image files include a section providing details about the file\n    const infoParts = [];\n\n    if (fileInfo.extension !== '') {\n        infoParts.push(\n            intl.formatMessage({id: 'file_info_preview.type', defaultMessage: 'File type '}) +\n        fileInfo.extension.toUpperCase(),\n        );\n    }\n\n    if (fileInfo.size) {\n        infoParts.push(\n            intl.formatMessage({id: 'file_info_preview.size', defaultMessage: 'Size '}) +\n        Utils.fileSizeToString(fileInfo.size),\n        );\n    }\n\n    const infoString = infoParts.join(', ');\n\n    let preview = null;\n    if (canDownloadFiles) {\n        preview = (\n            <a\n                className='file-details__preview'\n                href={fileUrl}\n            >\n                <span className='file-details__preview-helper'/>\n                <img\n                    alt={'file preview'}\n                    src={Utils.getFileIconPath(fileInfo)}\n                />\n            </a>\n        );\n    } else {\n        preview = (\n            <span className='file-details__preview'>\n                <span className='file-details__preview-helper'/>\n                <img\n                    alt={'file preview'}\n                    src={Utils.getFileIconPath(fileInfo)}\n                />\n            </span>\n        );\n    }\n\n    return (\n        <div className='file-details__container'>\n            {preview}\n            <div className='file-details'>\n                <div className='file-details__name'>{fileInfo.name}</div>\n                <div className='file-details__info'>{infoString}</div>\n            </div>\n        </div>\n    );\n};\n\nexport default React.memo(FileInfoPreview);\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {connect} from 'react-redux';\n\nimport {getConfig} from 'mattermost-redux/selectors/entities/general';\n\nimport {canDownloadFiles} from 'utils/file_utils';\n\nimport type {GlobalState} from 'types/store';\n\nimport FileInfoPreview from './file_info_preview';\n\nfunction mapStateToProps(state: GlobalState) {\n    const config = getConfig(state);\n\n    return {\n        canDownloadFiles: canDownloadFiles(config),\n    };\n}\n\nexport default connect(mapStateToProps)(FileInfoPreview);\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport React from 'react';\nimport {useIntl} from 'react-intl';\n\nimport {ArchiveOutlineIcon} from '@mattermost/compass-icons/components';\nimport type {FileInfo} from '@mattermost/types/files';\n\ninterface Props {\n    fileInfo: FileInfo;\n}\n\nexport default function FileInfoPreview(props: Props) {\n    const intl = useIntl();\n\n    const infoString = intl.formatMessage({\n        id: 'workspace_limits.archived_file.archived',\n        defaultMessage: 'This file is archived',\n    });\n\n    const preview = (\n        <span className='file-details__preview file-details__preview--archived'>\n            <ArchiveOutlineIcon\n                size={80}\n                color={'rgba(var(--center-channel-color-rgb), 0.48)'}\n                data-testid='archived-file-icon'\n            />\n        </span>\n    );\n\n    return (\n        <div className='file-details__container'>\n            {preview}\n            <div className='file-details'>\n                <div className='file-details__name'>{props.fileInfo.name}</div>\n                <div className='file-details__info'>{infoString}</div>\n            </div>\n        </div>\n    );\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport React from 'react';\n\nimport type {FileInfo} from '@mattermost/types/files';\n\nimport FileInfoPreview from 'components/file_info_preview';\n\nimport Constants from 'utils/constants';\n\ntype Props = {\n    fileInfo: FileInfo;\n    fileUrl: string;\n    isMobileView: boolean;\n}\n\ntype State = {\n    canPlay: boolean;\n}\n\nexport default class AudioVideoPreview extends React.PureComponent<Props, State> {\n    sourceRef = React.createRef<HTMLSourceElement>();\n    videoRef = React.createRef<HTMLVideoElement>();\n\n    constructor(props: Props) {\n        super(props);\n\n        this.state = {\n            canPlay: true,\n        };\n    }\n\n    componentDidMount() {\n        this.handleFileInfoChanged();\n\n        if (this.sourceRef.current) {\n            this.sourceRef.current.addEventListener('error', this.handleLoadError, {once: true});\n        }\n    }\n\n    componentDidUpdate(prevProps: Props) {\n        if (this.props.fileUrl !== prevProps.fileUrl) {\n            this.handleFileInfoChanged();\n        }\n\n        if (this.sourceRef.current) {\n            this.sourceRef.current.addEventListener('error', this.handleLoadError, {once: true});\n        }\n    }\n\n    handleFileInfoChanged = () => {\n        let video = this.videoRef.current;\n        if (!video) {\n            video = document.createElement('video');\n        }\n\n        this.setState({\n            canPlay: true,\n        });\n    };\n\n    handleLoadError = () => {\n        this.setState({\n            canPlay: false,\n        });\n    };\n\n    stop = () => {\n        if (this.videoRef.current) {\n            const video = this.videoRef.current;\n            video.pause();\n            video.currentTime = 0;\n        }\n    };\n\n    render() {\n        if (!this.state.canPlay) {\n            return (\n                <FileInfoPreview\n                    fileInfo={this.props.fileInfo}\n                    fileUrl={this.props.fileUrl}\n                />\n            );\n        }\n\n        let width = Constants.WEB_VIDEO_WIDTH;\n        let height = Constants.WEB_VIDEO_HEIGHT;\n        if (this.props.isMobileView) {\n            width = Constants.MOBILE_VIDEO_WIDTH;\n            height = Constants.MOBILE_VIDEO_HEIGHT;\n        }\n\n        // add a key to the video to prevent React from using an old video source while a new one is loading\n        return (\n            <video\n                key={this.props.fileInfo.id}\n                ref={this.videoRef}\n                data-setup='{}'\n                controls={true}\n                width={width}\n                height={height}\n            >\n                <source\n                    ref={this.sourceRef}\n                    src={this.props.fileUrl}\n                />\n            </video>\n        );\n    }\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {connect} from 'react-redux';\n\nimport {getIsMobileView} from 'selectors/views/browser';\n\nimport type {GlobalState} from 'types/store';\n\nimport AudioVideoPreview from './audio_video_preview';\n\nfunction mapStateToProps(state: GlobalState) {\n    return {\n        isMobileView: getIsMobileView(state),\n    };\n}\n\nexport default connect(mapStateToProps)(AudioVideoPreview);\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport React from 'react';\n\nimport type {FileInfo} from '@mattermost/types/files';\n\nimport FileInfoPreview from 'components/file_info_preview';\nimport LoadingSpinner from 'components/widgets/loading/loading_spinner';\n\nimport Constants from 'utils/constants';\nimport * as SyntaxHighlighting from 'utils/syntax_highlighting';\n\nimport type {LinkInfo} from './file_preview_modal/types';\n\ntype Props = {\n    fileInfo: FileInfo;\n    fileUrl: string;\n    className: string;\n    getContent?: (code: string) => void;\n};\n\ntype State = {\n    code: string;\n    lang: string;\n    highlighted: string;\n    loading: boolean;\n    success: boolean;\n    prevFileUrl?: string;\n}\n\nexport default class CodePreview extends React.PureComponent<Props, State> {\n    constructor(props: Props) {\n        super(props);\n\n        this.state = {\n            code: '',\n            lang: '',\n            highlighted: '',\n            loading: true,\n            success: true,\n        };\n    }\n\n    componentDidMount() {\n        this.getCode();\n    }\n\n    static getDerivedStateFromProps(props: Props, state: State) {\n        if (props.fileUrl !== state.prevFileUrl) {\n            const usedLanguage = SyntaxHighlighting.getLanguageFromFileExtension(props.fileInfo.extension);\n\n            if (!usedLanguage || props.fileInfo.size > Constants.CODE_PREVIEW_MAX_FILE_SIZE) {\n                return {\n                    code: '',\n                    lang: '',\n                    loading: false,\n                    success: false,\n                    prevFileUrl: props.fileUrl,\n                };\n            }\n\n            return {\n                code: '',\n                lang: usedLanguage,\n                loading: true,\n                prevFileUrl: props.fileUrl,\n            };\n        }\n        return null;\n    }\n\n    componentDidUpdate(prevProps: Props) {\n        if (this.props.fileUrl !== prevProps.fileUrl) {\n            this.getCode();\n        }\n    }\n\n    getCode = async () => {\n        if (!this.state.lang || this.props.fileInfo.size > Constants.CODE_PREVIEW_MAX_FILE_SIZE) {\n            return;\n        }\n        try {\n            const data = await fetch(this.props.fileUrl);\n            const text = await data.text();\n            this.handleReceivedCode(text);\n        } catch (e) {\n            this.handleReceivedError();\n        }\n    };\n\n    handleReceivedCode = async (data: string | Node) => {\n        let code = data as string;\n        const Data = data as Node;\n        if (Data.nodeName === '#document') {\n            code = new XMLSerializer().serializeToString(Data);\n        }\n        this.props.getContent?.(code);\n        this.setState({\n            code,\n            highlighted: await SyntaxHighlighting.highlight(this.state.lang, code),\n            loading: false,\n            success: true,\n        });\n    };\n\n    handleReceivedError = () => {\n        this.setState({loading: false, success: false});\n    };\n\n    static supports(fileInfo: FileInfo | LinkInfo) {\n        return Boolean(SyntaxHighlighting.getLanguageFromFileExtension(fileInfo.extension));\n    }\n\n    render() {\n        if (this.state.loading) {\n            return (\n                <div className='view-image__loading'>\n                    <LoadingSpinner/>\n                </div>\n            );\n        }\n\n        if (!this.state.success) {\n            return (\n                <FileInfoPreview\n                    fileInfo={this.props.fileInfo}\n                    fileUrl={this.props.fileUrl}\n                />\n            );\n        }\n\n        const language = SyntaxHighlighting.getLanguageName(this.state.lang);\n\n        return (\n            <div className='post-code code-preview'>\n                <span className='post-code__language'>\n                    {`${this.props.fileInfo.name} - ${language}`}\n                </span>\n                <div className='hljs'>\n                    <div className='post-code__line-numbers'>\n                        {SyntaxHighlighting.renderLineNumbers(this.state.code)}\n                    </div>\n                    <code dangerouslySetInnerHTML={{__html: this.state.highlighted}}/>\n                </div>\n            </div>\n        );\n    }\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport React, {memo} from 'react';\nimport {FormattedMessage} from 'react-intl';\nimport {useSelector} from 'react-redux';\n\nimport type {Post} from '@mattermost/types/posts';\nimport type {UserProfile} from '@mattermost/types/users';\n\nimport {makeGetChannel} from 'mattermost-redux/selectors/entities/channels';\nimport {\n    getUser as selectUser,\n    makeGetDisplayName,\n} from 'mattermost-redux/selectors/entities/users';\n\nimport Avatar from 'components/widgets/users/avatar/avatar';\n\nimport {imageURLForUser} from 'utils/utils';\n\nimport type {GlobalState} from 'types/store';\n\nimport './file_preview_modal_info.scss';\n\ninterface Props {\n    showFileName: boolean;\n    filename: string;\n    post?: Post;\n}\n\nconst displayNameGetter = makeGetDisplayName();\n\nconst FilePreviewModalInfo: React.FC<Props> = (props: Props) => {\n    const user = useSelector((state: GlobalState) => selectUser(state, props.post?.user_id ?? '')) as UserProfile | undefined;\n    const channel = useSelector((state: GlobalState) => {\n        const getChannel = makeGetChannel();\n        return getChannel(state, props.post?.channel_id ?? '');\n    });\n    const name = useSelector((state: GlobalState) => displayNameGetter(state, props.post?.user_id ?? '', true));\n\n    let info;\n    const channelName = channel ? (\n        <FormattedMessage\n            id='file_preview_modal_info.shared_in'\n            defaultMessage='Shared in ~{name}'\n            values={{\n                name: channel.display_name || channel.name,\n            }}\n        />\n    ) : null;\n    if (props.showFileName) {\n        info = (\n            <>\n                <h5 className='file-preview-modal__file-name'>{props.filename}\n                </h5>\n                <span className='file-preview-modal__file-details'>\n                    <span className='file-preview-modal__file-details-user-name'>{name}</span>\n                    <span className='file-preview-modal__channel'>{channelName}</span>\n                </span>\n            </>\n        );\n    } else {\n        info = (\n            <>\n                <h5 className='file-preview-modal__user-name'>{name}\n                </h5>\n                <span className='file-preview-modal__channel'>{channelName}\n                </span>\n            </>\n        );\n    }\n\n    return (\n        <div className='file-preview-modal__info'>\n            {\n                (props.post && Object.keys(props.post).length > 0) &&\n                <Avatar\n                    size='lg'\n                    url={imageURLForUser(props.post.user_id, user?.last_picture_update)}\n                    className='file-preview-modal__avatar'\n                />\n            }\n\n            <div className='file-preview-modal__info-details'>\n                {info}\n            </div>\n        </div>\n    );\n};\n\nexport default memo(FilePreviewModalInfo);\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {FileInfo} from '@mattermost/types/files';\n\nexport type LinkInfo = {\n    has_preview_image: boolean;\n    link: string;\n    extension: string;\n    name: string;\n}\n\nexport function isFileInfo(info: FileInfo | LinkInfo): info is FileInfo {\n    return Boolean((info as FileInfo).id);\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport React, {memo, useEffect, useState} from 'react';\nimport {useIntl} from 'react-intl';\nimport {useDispatch, useSelector} from 'react-redux';\n\nimport type {FileInfo} from '@mattermost/types/files';\n\nimport {getFilePublicLink} from 'mattermost-redux/actions/files';\nimport {getFilePublicLink as selectFilePublicLink} from 'mattermost-redux/selectors/entities/files';\n\nimport CopyButton from 'components/copy_button';\nimport ExternalLink from 'components/external_link';\nimport WithTooltip from 'components/with_tooltip';\n\nimport {FileTypes} from 'utils/constants';\nimport {copyToClipboard, getFileType} from 'utils/utils';\n\nimport type {GlobalState} from 'types/store';\n\nimport {isFileInfo} from '../types';\nimport type {LinkInfo} from '../types';\n\nimport './file_preview_modal_main_actions.scss';\n\nconst COPIED_TOOLTIP_DURATION = 2000;\n\ninterface Props {\n    showOnlyClose?: boolean;\n    showClose?: boolean;\n    showPublicLink?: boolean;\n    filename: string;\n    fileURL: string;\n    fileInfo: FileInfo | LinkInfo;\n    enablePublicLink: boolean;\n    canDownloadFiles: boolean;\n    canCopyContent: boolean;\n    handleModalClose: () => void;\n    content: string;\n}\n\nconst FilePreviewModalMainActions: React.FC<Props> = (props: Props) => {\n    const intl = useIntl();\n\n    const selectedFilePublicLink = useSelector((state: GlobalState) => selectFilePublicLink(state)?.link);\n    const dispatch = useDispatch();\n    const [publicLinkCopied, setPublicLinkCopied] = useState(false);\n\n    useEffect(() => {\n        if (isFileInfo(props.fileInfo) && props.enablePublicLink) {\n            dispatch(getFilePublicLink(props.fileInfo.id));\n        }\n    }, [props.fileInfo, props.enablePublicLink]);\n\n    useEffect(() => {\n        if (publicLinkCopied) {\n            setTimeout(() => {\n                setPublicLinkCopied(false);\n            }, COPIED_TOOLTIP_DURATION);\n        }\n    }, [publicLinkCopied]);\n\n    const copyPublicLink = () => {\n        copyToClipboard(selectedFilePublicLink ?? '');\n        setPublicLinkCopied(true);\n    };\n\n    const closeMessage = intl.formatMessage({\n        id: 'full_screen_modal.close',\n        defaultMessage: 'Close',\n    });\n    const closeButton = (\n        <WithTooltip\n            title={closeMessage}\n            key='publicLink'\n        >\n            <button\n                className='file-preview-modal-main-actions__action-item'\n                onClick={props.handleModalClose}\n                aria-label={closeMessage}\n            >\n                <i className='icon icon-close'/>\n            </button>\n        </WithTooltip>\n    );\n\n    let publicTooltipMessage;\n    if (publicLinkCopied) {\n        publicTooltipMessage = intl.formatMessage({\n            id: 'file_preview_modal_main_actions.public_link-copied',\n            defaultMessage: 'Public link copied',\n        });\n    } else {\n        publicTooltipMessage = intl.formatMessage({\n            id: 'view_image_popover.publicLink',\n            defaultMessage: 'Get a public link',\n        });\n    }\n    const publicLink = (\n        <WithTooltip\n            key='filePreviewPublicLink'\n            title={publicTooltipMessage}\n        >\n            <a\n                href='#'\n                className='file-preview-modal-main-actions__action-item'\n                onClick={copyPublicLink}\n                aria-label={publicTooltipMessage}\n            >\n                <i className='icon icon-link-variant'/>\n            </a>\n        </WithTooltip>\n    );\n\n    const downloadMessage = intl.formatMessage({\n        id: 'view_image_popover.download',\n        defaultMessage: 'Download',\n    });\n    const download = (\n        <WithTooltip\n            key='download'\n            title={downloadMessage}\n        >\n            <ExternalLink\n                href={props.fileURL}\n                className='file-preview-modal-main-actions__action-item'\n                location='file_preview_modal_main_actions'\n                download={props.filename}\n                aria-label={downloadMessage}\n            >\n                <i className='icon icon-download-outline'/>\n            </ExternalLink>\n        </WithTooltip>\n    );\n\n    const copy = (\n        <CopyButton\n            className='file-preview-modal-main-actions__action-item'\n            isForText={getFileType(props.fileInfo.extension) === FileTypes.TEXT}\n            content={props.content}\n        />\n    );\n    return (\n        <div className='file-preview-modal-main-actions__actions'>\n            {!props.showOnlyClose && props.canCopyContent && copy}\n            {!props.showOnlyClose && props.enablePublicLink && props.showPublicLink && publicLink}\n            {!props.showOnlyClose && props.canDownloadFiles && download}\n            {props.showClose && closeButton}\n        </div>\n    );\n};\n\nFilePreviewModalMainActions.defaultProps = {\n    showOnlyClose: false,\n    showClose: true,\n    showPublicLink: true,\n};\n\nexport default memo(FilePreviewModalMainActions);\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport React, {memo} from 'react';\n\nimport type {FileInfo} from '@mattermost/types/files';\nimport type {Post} from '@mattermost/types/posts';\n\nimport FilePreviewModalInfo from '../file_preview_modal_info/file_preview_modal_info';\nimport FilePreviewModalMainActions from '../file_preview_modal_main_actions/file_preview_modal_main_actions';\nimport type {LinkInfo} from '../types';\n\nimport './file_preview_modal_footer.scss';\n\ninterface Props {\n    fileInfo: FileInfo | LinkInfo;\n    filename: string;\n    post?: Post;\n    fileURL: string;\n    showPublicLink?: boolean;\n    enablePublicLink: boolean;\n    canDownloadFiles: boolean;\n    isExternalFile: boolean;\n    handleModalClose: () => void;\n    canCopyContent: boolean;\n    content: string;\n}\n\nconst FilePreviewModalFooter: React.FC<Props> = ({post, ...actionProps}: Props) => {\n    return (\n        <div className='file-preview-modal-footer'>\n            <FilePreviewModalInfo\n                showFileName={false}\n                post={post}\n                filename={actionProps.filename}\n            />\n            <FilePreviewModalMainActions\n                {...actionProps}\n                showClose={false}\n                showOnlyClose={false}\n            />\n        </div>\n    );\n};\nexport default memo(FilePreviewModalFooter);\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport React, {memo} from 'react';\nimport {FormattedMessage} from 'react-intl';\n\nimport './file_preview_modal_main_nav.scss';\n\nimport WithTooltip from 'components/with_tooltip';\n\ninterface Props {\n    fileIndex: number;\n    totalFiles: number;\n    handlePrev: () => void;\n    handleNext: () => void;\n}\n\nconst FilePreviewModalMainNav: React.FC<Props> = (props: Props) => {\n    const leftArrow = (\n        <WithTooltip\n            key='previewArrowLeft'\n            title={\n                <FormattedMessage\n                    id='generic.close'\n                    defaultMessage='Close'\n                />\n            }\n        >\n            <button\n                id='previewArrowLeft'\n                className='file_preview_modal_main_nav__prev'\n                onClick={props.handlePrev}\n            >\n                <i className='icon icon-chevron-left'/>\n            </button>\n        </WithTooltip>\n    );\n\n    const rightArrow = (\n        <WithTooltip\n            key='publicLink'\n            title={\n                <FormattedMessage\n                    id='generic.next'\n                    defaultMessage='Next'\n                />\n            }\n        >\n            <button\n                id='previewArrowRight'\n                className='file_preview_modal_main_nav__next'\n                onClick={props.handleNext}\n            >\n                <i className='icon icon-chevron-right'/>\n            </button>\n        </WithTooltip>\n    );\n    return (\n        <div className='file_preview_modal_main_nav'>\n            {leftArrow}\n            <span className='modal-bar-file-count'>\n                <FormattedMessage\n                    id='file_preview_modal_main_nav.file'\n                    defaultMessage='{count, number} of {total, number}'\n                    values={{\n                        count: (props.fileIndex + 1),\n                        total: props.totalFiles,\n                    }}\n                />\n            </span>\n            {rightArrow}\n        </div>\n    );\n};\n\nexport default memo(FilePreviewModalMainNav);\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport React, {memo} from 'react';\n\nimport type {FileInfo} from '@mattermost/types/files';\nimport type {Post} from '@mattermost/types/posts';\n\nimport FilePreviewModalInfo from '../file_preview_modal_info/file_preview_modal_info';\nimport FilePreviewModalMainActions from '../file_preview_modal_main_actions/file_preview_modal_main_actions';\nimport FilePreviewModalMainNav from '../file_preview_modal_main_nav/file_preview_modal_main_nav';\nimport type {LinkInfo} from '../types';\n\nimport './file_preview_modal_header.scss';\n\ninterface Props {\n    isMobileView: boolean;\n    fileIndex: number;\n    fileInfo: FileInfo | LinkInfo;\n    totalFiles: number;\n    filename: string;\n    post: Post;\n    fileURL: string;\n    showPublicLink?: boolean;\n    enablePublicLink: boolean;\n    canDownloadFiles: boolean;\n    canCopyContent: boolean;\n    isExternalFile: boolean;\n    handlePrev: () => void;\n    handleNext: () => void;\n    handleModalClose: () => void;\n    content: string;\n}\n\nconst FilePreviewModalHeader: React.FC<Props> = ({post, totalFiles, fileIndex, ...actionProps}: Props) => {\n    let mainActions = (<div/>);\n    if (totalFiles > 1) {\n        mainActions = (\n            <FilePreviewModalMainNav\n                totalFiles={totalFiles}\n                fileIndex={fileIndex}\n                handlePrev={actionProps.handlePrev}\n                handleNext={actionProps.handleNext}\n            />\n        );\n    }\n    const actions = (\n        <FilePreviewModalMainActions\n            {...actionProps}\n            showOnlyClose={actionProps.isMobileView}\n        />);\n    return (\n        <div className='file-preview-modal-header'>\n            {actionProps.isMobileView && actions}\n            {!actionProps.isMobileView &&\n            <FilePreviewModalInfo\n                showFileName={true}\n                post={post}\n                filename={actionProps.filename}\n            />\n            }\n            {mainActions}\n            {!actionProps.isMobileView && actions}\n        </div>\n    );\n};\n\nexport default memo(FilePreviewModalHeader);\n\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport React from 'react';\n\nimport type {FileInfo} from '@mattermost/types/files';\n\nimport {getFilePreviewUrl, getFileDownloadUrl} from 'mattermost-redux/utils/file_utils';\n\nimport {FileTypes} from 'utils/constants';\nimport {getFileType} from 'utils/utils';\n\nimport './image_preview.scss';\n\ninterface Props {\n    fileInfo: FileInfo;\n    canDownloadFiles: boolean;\n}\n\nexport default function ImagePreview({fileInfo, canDownloadFiles}: Props) {\n    const isExternalFile = !fileInfo.id;\n\n    let fileUrl;\n    let previewUrl;\n    if (isExternalFile) {\n        fileUrl = fileInfo.link;\n        previewUrl = fileInfo.link;\n    } else {\n        fileUrl = getFileDownloadUrl(fileInfo.id);\n        previewUrl = fileInfo.has_preview_image ? getFilePreviewUrl(fileInfo.id) : fileUrl;\n    }\n\n    if (!canDownloadFiles) {\n        return <img src={previewUrl}/>;\n    }\n\n    let conditionalSVGStyleAttribute;\n    if (getFileType(fileInfo.extension) === FileTypes.SVG) {\n        conditionalSVGStyleAttribute = {\n            width: fileInfo.width,\n            height: 'auto',\n        };\n    }\n\n    return (\n        <a\n            className='image_preview'\n            href='#'\n        >\n            <img\n                className='image_preview__image'\n                loading='lazy'\n                data-testid='imagePreview'\n                alt={'preview url image'}\n                src={previewUrl}\n                style={conditionalSVGStyleAttribute}\n            />\n        </a>\n    );\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport debounce from 'lodash/debounce';\nimport React from 'react';\nimport {FormattedMessage} from 'react-intl';\n\nimport WithTooltip from 'components/with_tooltip';\n\nimport {ZoomSettings} from 'utils/constants';\n\nexport interface Props {\n    scale?: number;\n    showZoomControls?: boolean;\n    handleZoomIn?: () => void;\n    handleZoomOut?: () => void;\n    handleZoomReset?: () => void;\n}\n\nexport default class PopoverBar extends React.PureComponent<Props> {\n    render() {\n        const zoomControls: React.ReactNode[] = [];\n        let wrappedZoomControls: React.ReactNode = null;\n        if (this.props.showZoomControls) {\n            let zoomResetButton;\n            let zoomOutButton;\n            let zoomInButton;\n\n            if (this.props.scale && this.props.scale > ZoomSettings.MIN_SCALE) {\n                zoomOutButton = (\n                    <span className='modal-zoom-btn'>\n                        <a onClick={this.props.handleZoomOut && debounce(this.props.handleZoomOut, 300, {maxWait: 300})}>\n                            <i className='icon icon-minus'/>\n                        </a>\n                    </span>\n                );\n            } else {\n                zoomOutButton = (\n                    <span className='btn-inactive'>\n                        <i className='icon icon-minus'/>\n                    </span>\n                );\n            }\n            zoomControls.push(\n                <WithTooltip\n                    key='zoomOut'\n                    title={\n                        <FormattedMessage\n                            id='view_image.zoom_out'\n                            defaultMessage='Zoom Out'\n                        />\n                    }\n                >\n                    {zoomOutButton}\n                </WithTooltip>,\n            );\n\n            if (this.props.scale && this.props.scale > ZoomSettings.DEFAULT_SCALE) {\n                zoomResetButton = (\n                    <span className='modal-zoom-btn'>\n                        <a onClick={this.props.handleZoomReset}>\n                            <i className='icon icon-magnify-minus'/>\n                        </a>\n                    </span>\n                );\n            } else if (this.props.scale && this.props.scale < ZoomSettings.DEFAULT_SCALE) {\n                zoomResetButton = (\n                    <span className='modal-zoom-btn'>\n                        <a onClick={this.props.handleZoomReset}>\n                            <i className='icon icon-magnify-plus'/>\n                        </a>\n                    </span>\n                );\n            } else {\n                zoomResetButton = (\n                    <span className='btn-inactive'>\n                        <i className='icon icon-magnify-minus'/>\n                    </span>\n                );\n            }\n            zoomControls.push(\n                <WithTooltip\n                    key='zoomReset'\n                    title={\n                        <FormattedMessage\n                            id='view_image.zoom_reset'\n                            defaultMessage='Reset Zoom'\n                        />\n                    }\n                >\n                    {zoomResetButton}\n                </WithTooltip>,\n            );\n\n            if (this.props.scale && this.props.scale < ZoomSettings.MAX_SCALE) {\n                zoomInButton = (\n                    <span className='modal-zoom-btn'>\n                        <a onClick={this.props.handleZoomIn && debounce(this.props.handleZoomIn, 300, {maxWait: 300})}>\n                            <i className='icon icon-plus'/>\n                        </a>\n                    </span>\n\n                );\n            } else {\n                zoomInButton = (\n                    <span className='btn-inactive'>\n                        <i className='icon icon-plus'/>\n                    </span>\n                );\n            }\n            zoomControls.push(\n                <WithTooltip\n                    key='zoomIn'\n                    title={\n                        <FormattedMessage\n                            id='view_image.zoom_in'\n                            defaultMessage='Zoom In'\n                        />\n                    }\n                >\n                    {zoomInButton}\n                </WithTooltip>,\n            );\n\n            wrappedZoomControls = (\n                <div className='modal-column'>\n                    {zoomControls}\n                </div>\n            );\n        }\n\n        return (\n            <div\n                data-testid='fileCountFooter'\n                className='modal-button-bar file-preview-modal__zoom-bar'\n            >\n                {wrappedZoomControls}\n            </div>\n        );\n    }\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport PopoverBar from './popover_bar';\n\nexport default PopoverBar;\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport classNames from 'classnames';\nimport React from 'react';\nimport {Modal} from 'react-bootstrap';\nimport {FormattedMessage} from 'react-intl';\n\nimport type {FileInfo} from '@mattermost/types/files';\nimport type {Post} from '@mattermost/types/posts';\n\nimport {getFileDownloadUrl, getFilePreviewUrl, getFileUrl} from 'mattermost-redux/utils/file_utils';\n\nimport ArchivedPreview from 'components/archived_preview';\nimport AudioVideoPreview from 'components/audio_video_preview';\nimport CodePreview from 'components/code_preview';\nimport FileInfoPreview from 'components/file_info_preview';\nimport LoadingImagePreview from 'components/loading_image_preview';\nimport type {Props as PDFPreviewComponentProps} from 'components/pdf_preview';\n\nimport Constants, {FileTypes, ZoomSettings} from 'utils/constants';\nimport * as Keyboard from 'utils/keyboard';\nimport * as Utils from 'utils/utils';\n\nimport type {FilePreviewComponent} from 'types/store/plugins';\n\nimport FilePreviewModalFooter from './file_preview_modal_footer/file_preview_modal_footer';\nimport FilePreviewModalHeader from './file_preview_modal_header/file_preview_modal_header';\nimport ImagePreview from './image_preview';\nimport PopoverBar from './popover_bar';\nimport {isFileInfo} from './types';\nimport type {LinkInfo} from './types';\n\nimport './file_preview_modal.scss';\n\nconst PDFPreview = React.lazy<React.ComponentType<PDFPreviewComponentProps>>(() => import('components/pdf_preview'));\n\nconst KeyCodes = Constants.KeyCodes;\n\nexport type Props = {\n    canDownloadFiles: boolean;\n    enablePublicLink: boolean;\n\n    /**\n     * List of FileInfo to view\n     **/\n    fileInfos: Array<FileInfo | LinkInfo>;\n\n    isMobileView: boolean;\n    pluginFilePreviewComponents: FilePreviewComponent[];\n    onExited: () => void;\n\n    /**\n     * The id of the post the files are attached to\n     */\n    postId?: string;\n\n    /**\n     * The post the files are attached to\n     * Either postId or post can be passed to FilePreviewModal\n     */\n    post?: Post;\n\n    /**\n     * The index number of starting image\n     **/\n    startIndex: number;\n}\n\ntype State = {\n    show: boolean;\n    imageIndex: number;\n    imageHeight: number | string;\n    loaded: Record<number, boolean>;\n    prevFileInfosCount: number;\n    progress: Record<number, number>;\n    showCloseBtn: boolean;\n    showZoomControls: boolean;\n    scale: Record<number, number>;\n    content: string;\n}\n\nexport default class FilePreviewModal extends React.PureComponent<Props, State> {\n    static defaultProps = {\n        fileInfos: [],\n        startIndex: 0,\n        pluginFilePreviewComponents: [],\n    };\n\n    constructor(props: Props) {\n        super(props);\n\n        this.state = {\n            show: true,\n            imageIndex: this.props.startIndex,\n            imageHeight: '100%',\n            loaded: Utils.fillRecord(false, this.props.fileInfos.length),\n            prevFileInfosCount: 0,\n            progress: Utils.fillRecord(0, this.props.fileInfos.length),\n            showCloseBtn: false,\n            showZoomControls: false,\n            scale: Utils.fillRecord(ZoomSettings.DEFAULT_SCALE, this.props.fileInfos.length),\n            content: '',\n        };\n    }\n\n    handleNext = () => {\n        let id = this.state.imageIndex + 1;\n        if (id > this.props.fileInfos.length - 1) {\n            id = 0;\n        }\n        this.showImage(id);\n    };\n\n    handlePrev = () => {\n        let id = this.state.imageIndex - 1;\n        if (id < 0) {\n            id = this.props.fileInfos.length - 1;\n        }\n        this.showImage(id);\n    };\n\n    handleKeyPress = (e: KeyboardEvent) => {\n        if (Keyboard.isKeyPressed(e, KeyCodes.RIGHT)) {\n            this.handleNext();\n        } else if (Keyboard.isKeyPressed(e, KeyCodes.LEFT)) {\n            this.handlePrev();\n        }\n    };\n\n    componentDidMount() {\n        document.addEventListener('keyup', this.handleKeyPress);\n\n        this.showImage(this.props.startIndex);\n    }\n\n    componentWillUnmount() {\n        document.removeEventListener('keyup', this.handleKeyPress);\n    }\n\n    static getDerivedStateFromProps(props: Props, state: State) {\n        const updatedState: Partial<State> = {};\n        if (props.fileInfos[state.imageIndex] && props.fileInfos[state.imageIndex].extension === FileTypes.PDF) {\n            updatedState.showZoomControls = true;\n        } else {\n            updatedState.showZoomControls = false;\n        }\n        if (props.fileInfos.length !== state.prevFileInfosCount) {\n            updatedState.loaded = Utils.fillRecord(false, props.fileInfos.length);\n            updatedState.progress = Utils.fillRecord(0, props.fileInfos.length);\n            updatedState.prevFileInfosCount = props.fileInfos.length;\n        }\n        return Object.keys(updatedState).length ? updatedState : null;\n    }\n\n    showImage = (id: number) => {\n        this.setState({imageIndex: id});\n\n        const imageHeight = window.innerHeight - 100;\n        this.setState({imageHeight});\n\n        if (!this.state.loaded[id]) {\n            this.loadImage(id);\n        }\n    };\n\n    loadImage = (index: number) => {\n        const fileInfo = this.props.fileInfos[index];\n        if (isFileInfo(fileInfo) && fileInfo.archived) {\n            this.handleImageLoaded(index);\n            return;\n        }\n        const fileType = Utils.getFileType(fileInfo.extension);\n\n        if (fileType === FileTypes.IMAGE && isFileInfo(fileInfo)) {\n            let previewUrl;\n            if (fileInfo.has_preview_image) {\n                previewUrl = getFilePreviewUrl(fileInfo.id);\n            } else {\n                // some images (eg animated gifs) just show the file itself and not a preview\n                previewUrl = getFileUrl(fileInfo.id);\n            }\n\n            Utils.loadImage(\n                previewUrl,\n                () => this.handleImageLoaded(index),\n                (completedPercentage) => this.handleImageProgress(index, completedPercentage),\n            );\n        } else {\n            // there's nothing to load for non-image files\n            this.handleImageLoaded(index);\n        }\n    };\n\n    handleImageLoaded = (index: number) => {\n        this.setState((prevState) => {\n            return {\n                loaded: {\n                    ...prevState.loaded,\n                    [index]: true,\n                },\n            };\n        });\n    };\n\n    handleImageProgress = (index: number, completedPercentage: number) => {\n        this.setState((prevState) => {\n            return {\n                progress: {\n                    ...prevState.progress,\n                    [index]: completedPercentage,\n                },\n            };\n        });\n    };\n\n    onMouseEnterImage = () => {\n        this.setState({showCloseBtn: true});\n    };\n\n    onMouseLeaveImage = () => {\n        this.setState({showCloseBtn: false});\n    };\n\n    setScale = (index: number, scale: number) => {\n        this.setState((prevState) => {\n            return {\n                scale: {\n                    ...prevState.scale,\n                    [index]: scale,\n                },\n            };\n        });\n    };\n\n    handleZoomIn = () => {\n        let newScale = this.state.scale[this.state.imageIndex];\n        newScale = Math.min(newScale + ZoomSettings.SCALE_DELTA, ZoomSettings.MAX_SCALE);\n        this.setScale(this.state.imageIndex, newScale);\n    };\n\n    handleZoomOut = () => {\n        let newScale = this.state.scale[this.state.imageIndex];\n        newScale = Math.max(newScale - ZoomSettings.SCALE_DELTA, ZoomSettings.MIN_SCALE);\n        this.setScale(this.state.imageIndex, newScale);\n    };\n\n    handleZoomReset = () => {\n        this.setScale(this.state.imageIndex, ZoomSettings.DEFAULT_SCALE);\n    };\n\n    handleModalClose = () => {\n        this.setState({show: false});\n    };\n\n    getContent = (content: string) => {\n        this.setState({content});\n    };\n\n    handleBgClose = (e: React.MouseEvent) => {\n        if (e.currentTarget === e.target) {\n            this.handleModalClose();\n        }\n    };\n\n    render() {\n        if (this.props.fileInfos.length < 1 || this.props.fileInfos.length - 1 < this.state.imageIndex) {\n            return null;\n        }\n\n        const fileInfo = this.props.fileInfos[this.state.imageIndex];\n        const fileType = Utils.getFileType(fileInfo.extension);\n\n        let showPublicLink;\n        let fileName;\n        let fileUrl;\n        let fileDownloadUrl;\n        let isExternalFile;\n        let canCopyContent = false;\n        if (isFileInfo(fileInfo)) {\n            showPublicLink = true;\n            fileName = fileInfo.name;\n            fileUrl = getFileUrl(fileInfo.id);\n            fileDownloadUrl = getFileDownloadUrl(fileInfo.id);\n            isExternalFile = false;\n        } else {\n            showPublicLink = false;\n            fileName = fileInfo.name || fileInfo.link;\n            fileUrl = fileInfo.link;\n            fileDownloadUrl = fileInfo.link;\n            isExternalFile = true;\n        }\n\n        let dialogClassName = 'a11y__modal modal-image file-preview-modal';\n\n        let content;\n        let zoomBar;\n\n        if (isFileInfo(fileInfo) && fileInfo.archived) {\n            content = (\n                <ArchivedPreview\n                    fileInfo={fileInfo}\n                />\n            );\n        }\n\n        if (!isFileInfo(fileInfo) || !fileInfo.archived) {\n            if (this.state.loaded[this.state.imageIndex]) {\n                if (fileType === FileTypes.IMAGE || fileType === FileTypes.SVG) {\n                    content = (\n                        <ImagePreview\n                            fileInfo={fileInfo as FileInfo}\n                            canDownloadFiles={this.props.canDownloadFiles}\n                        />\n                    );\n                } else if (fileType === FileTypes.VIDEO || fileType === FileTypes.AUDIO) {\n                    content = (\n                        <AudioVideoPreview\n                            fileInfo={fileInfo as FileInfo}\n                            fileUrl={fileUrl}\n                        />\n                    );\n                } else if (fileType === FileTypes.PDF) {\n                    content = (\n                        <div\n                            className='file-preview-modal__scrollable'\n                            onClick={this.handleBgClose}\n                        >\n                            <React.Suspense fallback={null}>\n                                <PDFPreview\n                                    fileInfo={fileInfo as FileInfo}\n                                    fileUrl={fileUrl}\n                                    scale={this.state.scale[this.state.imageIndex]}\n                                    handleBgClose={this.handleBgClose}\n                                />\n                            </React.Suspense>\n                        </div>\n                    );\n                    zoomBar = (\n                        <PopoverBar\n                            scale={this.state.scale[this.state.imageIndex]}\n                            showZoomControls={this.state.showZoomControls}\n                            handleZoomIn={this.handleZoomIn}\n                            handleZoomOut={this.handleZoomOut}\n                            handleZoomReset={this.handleZoomReset}\n                        />\n                    );\n                } else if (CodePreview.supports(fileInfo)) {\n                    dialogClassName += ' modal-code';\n                    canCopyContent = true;\n                    content = (\n                        <CodePreview\n                            fileInfo={fileInfo as FileInfo}\n                            fileUrl={fileUrl}\n                            getContent={this.getContent}\n                            className='file-preview-modal__code-preview'\n                        />\n                    );\n                } else {\n                    content = (\n                        <FileInfoPreview\n                            fileInfo={fileInfo as FileInfo}\n                            fileUrl={fileUrl}\n                        />\n                    );\n                }\n            } else {\n                // display a progress indicator when the preview for an image is still loading\n                const progress = Math.floor(this.state.progress[this.state.imageIndex]);\n\n                content = (\n                    <LoadingImagePreview\n                        loading={\n                            <FormattedMessage\n                                id='view_image.loading'\n                                defaultMessage='Loading'\n                            />\n                        }\n                        progress={progress}\n                    />\n                );\n            }\n        }\n\n        if (isFileInfo(fileInfo) && !fileInfo.archived) {\n            for (const preview of this.props.pluginFilePreviewComponents) {\n                if (preview.override(fileInfo, this.props.post)) {\n                    content = (\n                        <preview.component\n                            fileInfo={fileInfo}\n                            post={this.props.post}\n                            onModalDismissed={this.handleModalClose}\n                        />\n                    );\n                    break;\n                }\n            }\n        }\n\n        return (\n            <Modal\n                show={this.state.show}\n                onHide={this.handleModalClose}\n                onExited={this.props.onExited}\n                className='modal-image file-preview-modal'\n                dialogClassName={dialogClassName}\n                animation={true}\n                backdrop={false}\n                role='none'\n                style={{paddingLeft: 0}}\n                aria-labelledby='viewImageModalLabel'\n            >\n                <Modal.Body className='file-preview-modal__body'>\n                    <div\n                        className={'modal-image__wrapper'}\n                        onClick={this.handleModalClose}\n                    >\n                        <div\n                            className='file-preview-modal__main-ctr'\n                            onMouseEnter={this.onMouseEnterImage}\n                            onMouseLeave={this.onMouseLeaveImage}\n                            onClick={(e) => e.stopPropagation()}\n                        >\n                            <Modal.Title\n                                componentClass='div'\n                                id='viewImageModalLabel'\n                                className='file-preview-modal__title'\n                            >\n                                <FilePreviewModalHeader\n                                    isMobileView={this.props.isMobileView}\n                                    post={this.props.post!}\n                                    showPublicLink={showPublicLink}\n                                    fileIndex={this.state.imageIndex}\n                                    totalFiles={this.props.fileInfos?.length}\n                                    filename={fileName}\n                                    fileURL={fileDownloadUrl}\n                                    fileInfo={fileInfo}\n                                    enablePublicLink={this.props.enablePublicLink}\n                                    canDownloadFiles={this.props.canDownloadFiles}\n                                    canCopyContent={canCopyContent}\n                                    isExternalFile={isExternalFile}\n                                    handlePrev={this.handlePrev}\n                                    handleNext={this.handleNext}\n                                    handleModalClose={this.handleModalClose}\n                                    content={this.state.content}\n                                />\n                                {zoomBar}\n                            </Modal.Title>\n                            <div\n                                className={classNames(\n                                    'file-preview-modal__content',\n                                    {\n                                        'file-preview-modal__content-scrollable': (!isFileInfo(fileInfo) || !fileInfo.archived) && this.state.loaded[this.state.imageIndex] && (fileType === FileTypes.PDF),\n                                    },\n                                )}\n                                onClick={this.handleBgClose}\n                            >\n                                {content}\n                            </div>\n                            { this.props.isMobileView &&\n                                <FilePreviewModalFooter\n                                    post={this.props.post}\n                                    showPublicLink={showPublicLink}\n                                    filename={fileName}\n                                    fileURL={fileDownloadUrl}\n                                    fileInfo={fileInfo}\n                                    enablePublicLink={this.props.enablePublicLink}\n                                    canDownloadFiles={this.props.canDownloadFiles}\n                                    canCopyContent={canCopyContent}\n                                    isExternalFile={isExternalFile}\n                                    handleModalClose={this.handleModalClose}\n                                    content={this.state.content}\n                                />\n                            }\n                        </div>\n                    </div>\n                </Modal.Body>\n            </Modal>\n        );\n    }\n}\n"],"names":["FileInfoPreview","_ref","fileInfo","fileUrl","canDownloadFiles","intl","useIntl","infoParts","extension","push","formatMessage","id","defaultMessage","toUpperCase","size","Utils","infoString","join","preview","React","className","href","alt","src","name","propTypes","_pt","isRequired","connect","state","config","getConfig","props","ArchiveOutlineIcon","color","AudioVideoPreview","constructor","super","_defineProperty","video","this","videoRef","current","document","createElement","setState","canPlay","pause","currentTime","componentDidMount","handleFileInfoChanged","sourceRef","addEventListener","handleLoadError","once","componentDidUpdate","prevProps","render","width","Constants","WEB_VIDEO_WIDTH","height","WEB_VIDEO_HEIGHT","isMobileView","MOBILE_VIDEO_WIDTH","MOBILE_VIDEO_HEIGHT","key","ref","controls","getIsMobileView","CodePreview","async","lang","CODE_PREVIEW_MAX_FILE_SIZE","data","fetch","text","handleReceivedCode","e","handleReceivedError","_this$props$getConten","_this$props","code","Data","nodeName","XMLSerializer","serializeToString","getContent","call","highlighted","SyntaxHighlighting","loading","success","getCode","getDerivedStateFromProps","prevFileUrl","usedLanguage","supports","Boolean","LoadingSpinner","language","concat","dangerouslySetInnerHTML","__html","displayNameGetter","makeGetDisplayName","FilePreviewModalInfo","user","useSelector","_props$post$user_id","_props$post","selectUser","post","user_id","channel","_props$post$channel_i","_props$post2","makeGetChannel","getChannel","channel_id","_props$post$user_id2","_props$post3","info","channelName","FormattedMessage","values","display_name","showFileName","filename","Object","keys","length","Avatar","url","imageURLForUser","last_picture_update","memo","isFileInfo","FilePreviewModalMainActions","selectedFilePublicLink","_selectFilePublicLink","selectFilePublicLink","link","dispatch","useDispatch","publicLinkCopied","setPublicLinkCopied","useState","useEffect","enablePublicLink","getFilePublicLink","setTimeout","closeMessage","closeButton","WithTooltip","title","onClick","handleModalClose","publicTooltipMessage","publicLink","copyPublicLink","copyToClipboard","downloadMessage","download","ExternalLink","fileURL","location","copy","CopyButton","isForText","getFileType","FileTypes","TEXT","content","showOnlyClose","canCopyContent","showPublicLink","showClose","defaultProps","FilePreviewModalFooter","actionProps","_objectWithoutProperties","_excluded","assign","isExternalFile","FilePreviewModalMainNav","leftArrow","handlePrev","rightArrow","handleNext","count","fileIndex","total","totalFiles","FilePreviewModalHeader","mainActions","actions","ImagePreview","previewUrl","conditionalSVGStyleAttribute","getFileDownloadUrl","has_preview_image","getFilePreviewUrl","SVG","style","PopoverBar","zoomControls","wrappedZoomControls","showZoomControls","zoomResetButton","zoomOutButton","zoomInButton","scale","ZoomSettings","MIN_SCALE","handleZoomOut","debounce","maxWait","DEFAULT_SCALE","handleZoomReset","MAX_SCALE","handleZoomIn","PDFPreview","KeyCodes","FilePreviewModal","imageIndex","fileInfos","showImage","Keyboard","RIGHT","LEFT","imageHeight","window","innerHeight","loaded","loadImage","index","archived","handleImageLoaded","IMAGE","getFileUrl","completedPercentage","handleImageProgress","prevState","_objectSpread","progress","showCloseBtn","newScale","Math","min","SCALE_DELTA","setScale","max","show","currentTarget","target","startIndex","prevFileInfosCount","handleKeyPress","componentWillUnmount","removeEventListener","updatedState","PDF","_this$props$fileInfos","fileType","fileName","fileDownloadUrl","zoomBar","dialogClassName","ArchivedPreview","VIDEO","AUDIO","handleBgClose","fallback","floor","LoadingImagePreview","pluginFilePreviewComponents","override","component","onModalDismissed","Modal","onHide","onExited","animation","backdrop","role","paddingLeft","Body","onMouseEnter","onMouseEnterImage","onMouseLeave","onMouseLeaveImage","stopPropagation","Title","componentClass","classNames","postId"],"sourceRoot":""}

VaKeR 2022