![]() 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 : |
{"version":3,"file":"3836.ee86251e41028f68c3b0.js","mappings":"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","sources":["webpack://mattermost-webapp/./src/components/app_bar/new_channel_with_board_tour_tip.tsx","webpack://mattermost-webapp/./src/components/channel_header/components/header_icon_wrapper.tsx","webpack://mattermost-webapp/./src/plugins/call_button/index.ts","webpack://mattermost-webapp/./src/plugins/call_button/call_button.tsx","webpack://mattermost-webapp/./src/components/widgets/icons/plugin_channel_header_icon.tsx","webpack://mattermost-webapp/./src/plugins/channel_header_plug/channel_header_plug.tsx","webpack://mattermost-webapp/./src/plugins/channel_header_plug/index.ts","webpack://mattermost-webapp/./src/components/channel_header/channel_header_text_popover.tsx","webpack://mattermost-webapp/./src/components/channel_header/channel_header_text.tsx","webpack://mattermost-webapp/./src/components/channel_header/channel_header_title_direct.tsx","webpack://mattermost-webapp/./src/components/channel_header/channel_header_title_favorite.tsx","webpack://mattermost-webapp/./src/components/channel_header/channel_header_title_group.tsx","webpack://mattermost-webapp/./src/components/channel_header/channel_header_title.tsx","webpack://mattermost-webapp/./src/components/channel_header/channel_info_button.tsx","webpack://mattermost-webapp/./src/components/channel_header/channel_header.tsx","webpack://mattermost-webapp/./src/components/channel_header/index.ts","webpack://mattermost-webapp/../node_modules/dom-helpers/ownerWindow.js","webpack://mattermost-webapp/../node_modules/dom-helpers/query/height.js","webpack://mattermost-webapp/../node_modules/dom-helpers/util/requestAnimationFrame.js","webpack://mattermost-webapp/../node_modules/react-overlays/lib/Affix.js","webpack://mattermost-webapp/../node_modules/react-overlays/lib/AutoAffix.js","webpack://mattermost-webapp/../node_modules/react-overlays/lib/index.js","webpack://mattermost-webapp/../node_modules/react-overlays/lib/utils/getDocumentHeight.js","webpack://mattermost-webapp/../node_modules/react-overlays/lib/utils/ownerWindow.js"],"sourcesContent":["// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport React, {useCallback, useState} from 'react';\nimport {FormattedMessage} from 'react-intl';\nimport {useDispatch, useSelector} from 'react-redux';\nimport type {Placement} from 'tippy.js';\n\nimport {TourTip, useMeasurePunchouts} from '@mattermost/components';\n\nimport {setNewChannelWithBoardPreference} from 'mattermost-redux/actions/boards';\nimport {Preferences} from 'mattermost-redux/constants';\n\nimport {showNewChannelWithBoardPulsatingDot} from 'selectors/plugins';\n\ntype Props = {\n pulsatingDotPlacement?: Omit<Placement, 'auto'| 'auto-end'>;\n pulsatingDotTranslate?: {x: number; y: number};\n}\n\nconst NewChannelWithBoardTourTip = ({\n pulsatingDotPlacement = 'left',\n pulsatingDotTranslate,\n}: Props): JSX.Element | null => {\n const dispatch = useDispatch();\n const showTip = useSelector(showNewChannelWithBoardPulsatingDot);\n\n const title = (\n <FormattedMessage\n id='newChannelWithBoard.tutorialTip.title'\n defaultMessage='Access linked boards from the App Bar'\n />\n );\n\n const screen = (\n <FormattedMessage\n id='newChannelWithBoard.tutorialTip.description'\n defaultMessage='The board you just created can be quickly accessed by clicking on the Boards icon in the App bar. You can view the boards that are linked to this channel in the right-hand sidebar and open one in full view.'\n />\n );\n\n const [tipOpened, setTipOpened] = useState(showTip);\n\n const handleDismiss = useCallback((e: React.MouseEvent) => {\n e.stopPropagation();\n setTipOpened(false);\n dispatch(setNewChannelWithBoardPreference({[Preferences.NEW_CHANNEL_WITH_BOARD_TOUR_SHOWED]: true}));\n }, []);\n\n const handleOpen = useCallback((e: React.MouseEvent) => {\n e.stopPropagation();\n e.preventDefault();\n\n if (tipOpened) {\n dispatch(setNewChannelWithBoardPreference({[Preferences.NEW_CHANNEL_WITH_BOARD_TOUR_SHOWED]: true}));\n setTipOpened(false);\n } else {\n setTipOpened(true);\n }\n }, []);\n\n const overlayPunchOut = useMeasurePunchouts(['app-bar-icon-focalboard'], [], {y: -2, height: 4, x: 0, width: 0});\n\n if (!showTip) {\n return null;\n }\n\n return (\n <TourTip\n show={true}\n screen={screen}\n title={title}\n overlayPunchOut={overlayPunchOut}\n placement='right-start'\n pulsatingDotPlacement={pulsatingDotPlacement}\n step={1}\n singleTip={true}\n showOptOut={false}\n interactivePunchOut={true}\n handleDismiss={handleDismiss}\n handleOpen={handleOpen}\n handlePrevious={handleDismiss}\n offset={[-30, 5]}\n pulsatingDotTranslate={pulsatingDotTranslate}\n />\n );\n};\n\nexport default NewChannelWithBoardTourTip;\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport React from 'react';\n\nimport NewChannelWithBoardTourTip from 'components/app_bar/new_channel_with_board_tour_tip';\nimport WithTooltip from 'components/with_tooltip';\nimport type {ShortcutDefinition} from 'components/with_tooltip/tooltip_shortcut';\n\nimport {suitePluginIds} from 'utils/constants';\n\ntype Props = {\n\n /**\n * ariaLabelOverride lets you override the aria-label which would otherwise use the tooltip text. This typically\n * shouldn't be needed.\n */\n ariaLabelOverride?: string;\n\n buttonClass?: string;\n buttonId: string;\n children: React.ReactNode;\n onClick: (event: React.MouseEvent<HTMLButtonElement>) => void;\n tooltip: string;\n tooltipShortcut?: ShortcutDefinition;\n isRhsOpen?: boolean;\n pluginId?: string;\n}\n\nconst HeaderIconWrapper = (props: Props) => {\n const {\n ariaLabelOverride,\n buttonClass,\n buttonId,\n children,\n onClick,\n tooltip: tooltipText,\n tooltipShortcut,\n isRhsOpen,\n pluginId,\n } = props;\n\n const boardsEnabled = pluginId === suitePluginIds.focalboard;\n\n const ariaLabelText = ariaLabelOverride ?? tooltipText;\n\n return (\n <>\n <WithTooltip\n title={isRhsOpen ? '' : tooltipText}\n shortcut={tooltipShortcut}\n >\n <button\n id={buttonId}\n aria-label={ariaLabelText}\n className={buttonClass || 'channel-header__icon'}\n onClick={onClick}\n >\n {children}\n </button>\n </WithTooltip>\n {boardsEnabled &&\n <NewChannelWithBoardTourTip\n pulsatingDotPlacement={'start'}\n pulsatingDotTranslate={{x: 0, y: -22}}\n />\n }\n </>\n );\n};\n\nexport default HeaderIconWrapper;\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 {getCurrentChannel, getMyCurrentChannelMembership} from 'mattermost-redux/selectors/entities/channels';\n\nimport type {GlobalState} from 'types/store/index';\n\nimport CallButton from './call_button';\n\nfunction mapStateToProps(state: GlobalState) {\n return {\n currentChannel: getCurrentChannel(state),\n pluginCallComponents: state.plugins.components.CallButton,\n channelMember: getMyCurrentChannelMembership(state),\n sidebarOpen: state.views.rhs.isSidebarOpen,\n };\n}\n\nexport default connect(mapStateToProps)(CallButton);\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport classNames from 'classnames';\nimport React, {useState, useEffect, useRef} from 'react';\nimport type {CSSProperties} from 'react';\nimport {useIntl} from 'react-intl';\n\nimport ChevronDownIcon from '@mattermost/compass-icons/components/chevron-down';\nimport PhoneOutlineIcon from '@mattermost/compass-icons/components/phone-outline';\nimport type {Channel, ChannelMembership} from '@mattermost/types/channels';\n\nimport Menu from 'components/widgets/menu/menu';\nimport MenuWrapper from 'components/widgets/menu/menu_wrapper';\n\nimport {Constants} from 'utils/constants';\n\nimport type {PluginComponent} from 'types/store/plugins';\n\nimport './call_button.scss';\n\ntype Props = {\n currentChannel?: Channel;\n channelMember?: ChannelMembership;\n pluginCallComponents: PluginComponent[];\n sidebarOpen: boolean;\n}\n\nexport default function CallButton({pluginCallComponents, currentChannel, channelMember, sidebarOpen}: Props) {\n const [active, setActive] = useState(false);\n const [clickEnabled, setClickEnabled] = useState(true);\n const prevSidebarOpen = useRef(sidebarOpen);\n const {formatMessage} = useIntl();\n\n useEffect(() => {\n if (prevSidebarOpen.current && !sidebarOpen) {\n setClickEnabled(false);\n setTimeout(() => {\n setClickEnabled(true);\n }, Constants.CHANNEL_HEADER_BUTTON_DISABLE_TIMEOUT);\n }\n prevSidebarOpen.current = sidebarOpen;\n }, [sidebarOpen]);\n\n if (pluginCallComponents.length === 0) {\n return null;\n }\n\n const style = {\n container: {\n marginTop: 16,\n height: 32,\n } as CSSProperties,\n };\n\n if (pluginCallComponents.length === 1) {\n const item = pluginCallComponents[0];\n const clickHandler = () => item.action?.(currentChannel, channelMember);\n\n return (\n <div\n style={style.container}\n className='flex-child'\n onClick={clickEnabled ? clickHandler : undefined}\n onTouchEnd={clickEnabled ? clickHandler : undefined}\n >\n {item.button}\n </div>\n );\n }\n\n const items = pluginCallComponents.map((item) => {\n return (\n <li\n className='MenuItem'\n key={item.id}\n onClick={(e) => {\n e.preventDefault();\n item.action?.(currentChannel, channelMember);\n }}\n >\n {item.dropdownButton}\n </li>\n );\n });\n\n return (\n <div\n style={style.container}\n className='flex-child'\n >\n <MenuWrapper onToggle={(toggle: boolean) => setActive(toggle)}>\n <button className={classNames('style--none call-button dropdown', {active})}>\n <PhoneOutlineIcon\n color='inherit'\n aria-label={formatMessage({id: 'generic_icons.call', defaultMessage: 'Call icon'}).toLowerCase()}\n />\n <span className='call-button-label'>{'Call'}</span>\n <ChevronDownIcon\n color='inherit'\n aria-label={formatMessage({id: 'generic_icons.dropdown', defaultMessage: 'Dropdown Icon'}).toLowerCase()}\n />\n </button>\n <Menu\n id='callOptions'\n ariaLabel={formatMessage({id: 'call_button.menuAriaLabel', defaultMessage: 'Call type selector'})}\n customStyles={{\n top: 'auto',\n left: 'auto',\n right: 0,\n }}\n >\n {items}\n </Menu>\n </MenuWrapper>\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';\nimport {useIntl} from 'react-intl';\n\nexport default function PluginChannelHeaderIcon(props: React.HTMLAttributes<HTMLSpanElement>) {\n const {formatMessage} = useIntl();\n return (\n <span {...props}>\n <svg\n width='16px'\n height='16px'\n viewBox='0 0 18 18'\n version='1.1'\n role='img'\n aria-label={formatMessage({id: 'generic_icons.plugins', defaultMessage: 'Plugins'})}\n >\n <path d='M14.58 9.14399L17.136 6.60599C17.304 6.42599 17.388 6.20999 17.388 5.95799C17.388 5.70599 17.298 5.49599 17.118 5.32799C16.95 5.14799 16.74 5.05799 16.488 5.05799C16.236 5.05799 16.026 5.14799 15.858 5.32799L13.302 7.86599L10.134 4.69799L12.672 2.14199C12.852 1.97399 12.942 1.76399 12.942 1.51199C12.942 1.25999 12.852 1.04999 12.672 0.881987C12.504 0.701987 12.294 0.611987 12.042 0.611987C11.79 0.611987 11.574 0.695987 11.394 0.863987L8.856 3.41999L6.318 0.863987C6.138 0.695987 5.922 0.611987 5.67 0.611987C5.418 0.611987 5.208 0.695987 5.04 0.863987V0.881987C4.86 1.04999 4.77 1.25999 4.77 1.51199C4.77 1.76399 4.86 1.97399 5.04 2.14199L5.67 2.78999L2.808 5.65199C2.016 6.44399 1.458 7.36799 1.134 8.42399C0.81 9.45599 0.744 10.512 0.936 11.592C1.128 12.66 1.56 13.632 2.232 14.508L0.27 16.47C0.09 16.638 0 16.848 0 17.1C0 17.352 0.09 17.562 0.27 17.73C0.45 17.898 0.66 17.982 0.9 17.982C1.152 17.994 1.362 17.91 1.53 17.73L3.492 15.768C4.368 16.44 5.34 16.872 6.408 17.064C7.488 17.256 8.544 17.19 9.576 16.866C10.632 16.542 11.556 15.984 12.348 15.192L15.21 12.33L15.858 12.96C16.026 13.14 16.236 13.23 16.488 13.23C16.74 13.23 16.95 13.14 17.118 12.96H17.136C17.304 12.792 17.388 12.582 17.388 12.33C17.388 12.078 17.304 11.862 17.136 11.682L14.58 9.14399ZM11.088 13.914C10.452 14.55 9.702 14.976 8.838 15.192C8.01 15.408 7.176 15.408 6.336 15.192C5.472 14.976 4.722 14.55 4.086 13.914C3.45 13.278 3.024 12.528 2.808 11.664C2.592 10.824 2.592 9.98999 2.808 9.16199C3.024 8.29799 3.45 7.54799 4.086 6.91199L6.948 4.04999L13.95 11.052L11.088 13.914Z'/>\n </svg>\n </span>\n );\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\n/* eslint-disable react/no-multi-comp */\n\nimport React from 'react';\nimport {Dropdown} from 'react-bootstrap';\nimport {FormattedMessage, injectIntl} from 'react-intl';\nimport type {IntlShape} from 'react-intl';\nimport {RootCloseWrapper} from 'react-overlays';\n\nimport type {AppBinding} from '@mattermost/types/apps';\nimport type {Channel, ChannelMembership} from '@mattermost/types/channels';\n\nimport {AppCallResponseTypes} from 'mattermost-redux/constants/apps';\n\nimport HeaderIconWrapper from 'components/channel_header/components/header_icon_wrapper';\nimport PluginChannelHeaderIcon from 'components/widgets/icons/plugin_channel_header_icon';\nimport WithTooltip from 'components/with_tooltip';\n\nimport {createCallContext} from 'utils/apps';\nimport {Constants} from 'utils/constants';\n\nimport type {HandleBindingClick, OpenAppsModal, PostEphemeralCallResponseForChannel} from 'types/apps';\nimport type {PluginComponent} from 'types/store/plugins';\n\ntype CustomMenuProps = {\n open?: boolean;\n children?: React.ReactNode;\n onClose: () => void;\n rootCloseEvent?: 'click' | 'mousedown';\n bsRole: string;\n}\n\nexport const maxComponentsBeforeDropdown = 15;\n\nclass CustomMenu extends React.PureComponent<CustomMenuProps> {\n handleRootClose = () => {\n this.props.onClose();\n };\n\n render() {\n const {\n open,\n rootCloseEvent,\n children,\n } = this.props;\n\n return (\n <RootCloseWrapper\n disabled={!open}\n onRootClose={this.handleRootClose}\n event={rootCloseEvent}\n >\n <ul\n role='menu'\n className='dropdown-menu channel-header_plugin-dropdown'\n >\n {children}\n </ul>\n </RootCloseWrapper>\n );\n }\n}\n\ntype CustomToggleProps = {\n children?: React.ReactNode;\n dropdownOpen?: boolean;\n onClick?: (e: React.MouseEvent) => void;\n bsRole: string;\n}\n\nclass CustomToggle extends React.PureComponent<CustomToggleProps> {\n handleClick = (e: React.MouseEvent) => {\n if (this.props.onClick) {\n this.props.onClick(e);\n }\n };\n\n render() {\n const {children} = this.props;\n\n let activeClass = '';\n if (this.props.dropdownOpen) {\n activeClass = ' channel-header__icon--active';\n }\n\n return (\n <button\n id='pluginChannelHeaderButtonDropdown'\n className={'channel-header__icon channel-header__icon--wide ' + activeClass}\n type='button'\n onClick={this.handleClick}\n >\n {children}\n </button>\n );\n }\n}\n\ntype ChannelHeaderPlugProps = {\n intl: IntlShape;\n components: PluginComponent[];\n appBindings?: AppBinding[];\n appsEnabled: boolean;\n channel: Channel;\n channelMember?: ChannelMembership;\n sidebarOpen: boolean;\n shouldShowAppBar: boolean;\n actions: {\n handleBindingClick: HandleBindingClick;\n postEphemeralCallResponseForChannel: PostEphemeralCallResponseForChannel;\n openAppsModal: OpenAppsModal;\n };\n}\n\ntype ChannelHeaderPlugState = {\n dropdownOpen: boolean;\n}\n\nclass ChannelHeaderPlug extends React.PureComponent<ChannelHeaderPlugProps, ChannelHeaderPlugState> {\n public static defaultProps: Partial<ChannelHeaderPlugProps> = {\n components: [],\n appBindings: [],\n };\n\n private disableButtonsClosingRHS = false;\n\n constructor(props: ChannelHeaderPlugProps) {\n super(props);\n this.state = {\n dropdownOpen: false,\n };\n }\n\n componentDidUpdate(prevProps: ChannelHeaderPlugProps) {\n if (prevProps.sidebarOpen && !this.props.sidebarOpen) {\n this.disableButtonsClosingRHS = true;\n\n setTimeout(() => {\n this.disableButtonsClosingRHS = false;\n }, Constants.CHANNEL_HEADER_BUTTON_DISABLE_TIMEOUT);\n }\n }\n\n toggleDropdown = (dropdownOpen: boolean) => {\n this.setState({dropdownOpen});\n };\n\n onClose = () => {\n this.toggleDropdown(false);\n };\n\n fireAction = (action: (channel: Channel, channelMember?: ChannelMembership) => void) => {\n if (this.disableButtonsClosingRHS) {\n return;\n }\n\n action(this.props.channel, this.props.channelMember);\n };\n\n fireActionAndClose = (action: (channel: Channel, channelMember?: ChannelMembership) => void) => {\n action(this.props.channel, this.props.channelMember);\n this.onClose();\n };\n\n createComponentButton = (plug: PluginComponent) => {\n // These values are supposed to be strings based on PluginComponent, but some plugins pass non-strings,\n // so do some hacky stuff to try to convert it back to a string. DO NOT USE THIS ELSEWHERE!\n function tooltipToAriaLabelHack(intl: IntlShape, stringOrElement: string | React.ReactElement) {\n if (typeof stringOrElement === 'string') {\n // This is the case that we hope for\n return stringOrElement;\n }\n\n if (stringOrElement.type === FormattedMessage) {\n // This is a FormattedMessage, so extract the props to translate the text manually\n return intl.formatMessage(\n {\n id: stringOrElement.props.id,\n defaultMessage: stringOrElement.props.defaultMessage,\n },\n stringOrElement.props.value,\n );\n }\n\n return '';\n }\n\n let ariaLabel;\n if (plug.tooltipText) {\n ariaLabel = tooltipToAriaLabelHack(this.props.intl, plug.tooltipText);\n } else if (plug.dropdownText) {\n ariaLabel = tooltipToAriaLabelHack(this.props.intl, plug.dropdownText);\n }\n\n return (\n <HeaderIconWrapper\n key={'channelHeaderButton' + plug.id}\n buttonClass='channel-header__icon'\n onClick={() => this.fireAction(plug.action!)}\n buttonId={plug.id + 'ChannelHeaderButton'}\n tooltip={plug.tooltipText ?? plug.dropdownText ?? ''}\n ariaLabelOverride={ariaLabel}\n pluginId={plug.pluginId}\n >\n {plug.icon}\n </HeaderIconWrapper>\n );\n };\n\n onBindingClick = async (binding: AppBinding) => {\n if (this.disableButtonsClosingRHS) {\n return;\n }\n\n const {channel, intl} = this.props;\n\n const context = createCallContext(\n binding.app_id,\n binding.location,\n this.props.channel.id,\n this.props.channel.team_id,\n );\n\n const res = await this.props.actions.handleBindingClick(binding, context, intl);\n\n if (res.error) {\n const errorResponse = res.error;\n const errorMessage = errorResponse.text || intl.formatMessage({\n id: 'apps.error.unknown',\n defaultMessage: 'Unknown error occurred.',\n });\n this.props.actions.postEphemeralCallResponseForChannel(errorResponse, errorMessage, channel.id);\n return;\n }\n\n const callResp = res.data!;\n switch (callResp.type) {\n case AppCallResponseTypes.OK:\n if (callResp.text) {\n this.props.actions.postEphemeralCallResponseForChannel(callResp, callResp.text, channel.id);\n }\n break;\n case AppCallResponseTypes.NAVIGATE:\n break;\n case AppCallResponseTypes.FORM:\n if (callResp.form) {\n this.props.actions.openAppsModal(callResp.form, context);\n }\n break;\n default: {\n const errorMessage = this.props.intl.formatMessage({\n id: 'apps.error.responses.unknown_type',\n defaultMessage: 'App response type not supported. Response type: {type}.',\n }, {\n type: callResp.type,\n });\n this.props.actions.postEphemeralCallResponseForChannel(callResp, errorMessage, channel.id);\n }\n }\n };\n\n createAppBindingButton = (binding: AppBinding) => {\n return (\n <HeaderIconWrapper\n key={`channelHeaderButton_${binding.app_id}_${binding.location}`}\n buttonClass='channel-header__icon style--none'\n onClick={() => this.onBindingClick(binding)}\n buttonId={`${binding.app_id}_${binding.location}`}\n tooltip={binding.label}\n >\n <img\n src={binding.icon}\n width='24'\n height='24'\n />\n </HeaderIconWrapper>\n );\n };\n\n createDropdown = (plugs: PluginComponent[], appBindings: AppBinding[]) => {\n const componentItems = plugs.filter((plug) => plug.action).map((plug) => {\n return (\n <li\n key={'channelHeaderPlug' + plug.id}\n >\n <a\n href='#'\n className='d-flex align-items-center'\n onClick={() => this.fireActionAndClose(plug.action!)}\n >\n <span className='d-flex align-items-center overflow--ellipsis'>{plug.icon}</span>\n <span>{plug.dropdownText}</span>\n </a>\n </li>\n );\n });\n\n let items = componentItems;\n if (this.props.appsEnabled) {\n items = componentItems.concat(appBindings.map((binding) => {\n return (\n <li\n key={'channelHeaderPlug' + binding.app_id + binding.location}\n >\n <a\n href='#'\n className='d-flex align-items-center'\n onClick={() => this.fireActionAndClose(() => this.onBindingClick(binding))}\n >\n <span className='d-flex align-items-center overflow--ellipsis icon'>{(<img src={binding.icon}/>)}</span>\n <span>{binding.label}</span>\n </a>\n </li>\n );\n }));\n }\n\n return (\n <div className='flex-child'>\n <Dropdown\n id='channelHeaderPlugDropdown'\n onToggle={this.toggleDropdown}\n open={this.state.dropdownOpen}\n >\n <CustomToggle\n bsRole='toggle'\n dropdownOpen={this.state.dropdownOpen}\n >\n <WithTooltip\n title={\n <FormattedMessage\n id='generic_icons.plugins'\n defaultMessage='Plugins'\n />\n }\n >\n <>\n <PluginChannelHeaderIcon\n id='pluginChannelHeaderIcon'\n className='icon icon--standard icon__pluginChannelHeader'\n aria-hidden='true'\n />\n <span\n id='pluginCount'\n className='icon__text'\n >\n {items.length}\n </span>\n </>\n </WithTooltip>\n </CustomToggle>\n <CustomMenu\n bsRole='menu'\n open={this.state.dropdownOpen}\n onClose={this.onClose}\n >\n {items}\n </CustomMenu>\n </Dropdown>\n </div>\n );\n };\n\n render() {\n const components = this.props.components || [];\n const appBindings = this.props.appsEnabled ? this.props.appBindings || [] : [];\n if (this.props.shouldShowAppBar || (components.length === 0 && appBindings.length === 0)) {\n return null;\n } else if ((components.length + appBindings.length) <= maxComponentsBeforeDropdown) {\n let componentButtons = components.filter((plug) => plug.icon && plug.action).map(this.createComponentButton);\n if (this.props.appsEnabled) {\n componentButtons = componentButtons.concat(appBindings.map(this.createAppBindingButton));\n }\n return componentButtons;\n }\n\n return this.createDropdown(components, appBindings);\n }\n}\n\nexport default injectIntl(ChannelHeaderPlug);\n/* eslint-enable react/no-multi-comp */\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {connect} from 'react-redux';\nimport {bindActionCreators} from 'redux';\nimport type {Dispatch} from 'redux';\n\nimport {appBarEnabled, appsEnabled, getChannelHeaderAppBindings} from 'mattermost-redux/selectors/entities/apps';\nimport {getTheme} from 'mattermost-redux/selectors/entities/preferences';\n\nimport {handleBindingClick, openAppsModal, postEphemeralCallResponseForChannel} from 'actions/apps';\nimport {getChannelHeaderPluginComponents, shouldShowAppBar} from 'selectors/plugins';\n\nimport type {GlobalState} from 'types/store';\n\nimport ChannelHeaderPlug from './channel_header_plug';\n\nfunction mapStateToProps(state: GlobalState) {\n const apps = appsEnabled(state);\n return {\n components: getChannelHeaderPluginComponents(state),\n appBindings: getChannelHeaderAppBindings(state),\n appsEnabled: apps,\n appBarEnabled: appBarEnabled(state),\n theme: getTheme(state),\n sidebarOpen: state.views.rhs.isSidebarOpen,\n shouldShowAppBar: shouldShowAppBar(state),\n };\n}\n\nfunction mapDispatchToProps(dispatch: Dispatch) {\n return {\n actions: bindActionCreators({\n handleBindingClick,\n postEphemeralCallResponseForChannel,\n openAppsModal,\n }, dispatch),\n };\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(ChannelHeaderPlug);\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport {\n autoUpdate,\n useDismiss,\n safePolygon,\n useFocus,\n useHover,\n useTransitionStyles,\n useInteractions,\n useRole,\n useMergeRefs,\n useFloating,\n FloatingPortal,\n FloatingOverlay,\n useClick,\n offset,\n} from '@floating-ui/react';\nimport React, {useMemo, useRef, useState} from 'react';\nimport type {MouseEvent} from 'react';\nimport {useSelector} from 'react-redux';\n\nimport {getCurrentRelativeTeamUrl} from 'mattermost-redux/selectors/entities/teams';\n\nimport Markdown from 'components/markdown';\n\nimport {OverlaysTimings, OverlayTransitionStyles, RootHtmlPortalId} from 'utils/constants';\nimport type {ChannelNamesMap} from 'utils/text_formatting';\nimport {handleFormattedTextClick} from 'utils/utils';\n\nimport './channel_header_text_popover.scss';\n\nconst TEXT_IN_HEADER_MARKDOWN_OPTIONS = {singleline: true};\nconst TEXT_IN_POPOVER_MARKDOWN_OPTIONS = {singleline: false};\nconst MENTION_MARKDOWN_OPTIONS = {mentionHighlight: false, atMentions: true};\nconst IMAGE_MARKDOWN_OPTIONS = {hideUtilities: true};\n\nconst TRANSITION_STYLE_PROPS = {\n duration: {\n open: OverlaysTimings.FADE_IN_DURATION,\n close: OverlaysTimings.FADE_OUT_DURATION,\n },\n initial: OverlayTransitionStyles.START,\n};\n\nconst PADDING_Y_OF_POPOVER = 6; // padding top & bottom of .channel-header-text-popover in channel_header_text_popover.scss\nconst PADDING_X_OF_POPOVER = 8; // padding right & left of .channel-header-text-popover in channel_header_text_popover.scss\nconst BORDER_WIDTH_OF_POPOVER = 1; // border of .channel-header-text-popover in channel_header_text_popover.scss\n\nconst HEIGHT_OF_HEADER_TEXT = 24; // height of .header-description__text in _headers.scss\nconst SHIFT_UP_OF_POPOVER = -((HEIGHT_OF_HEADER_TEXT + PADDING_Y_OF_POPOVER) - (2 * BORDER_WIDTH_OF_POPOVER));\n\ninterface Props {\n text: string;\n channelMentionsNameMap?: ChannelNamesMap;\n}\nexport function ChannelHeaderTextPopover(props: Props) {\n const currentRelativeTeamUrl = useSelector(getCurrentRelativeTeamUrl);\n\n const rootElementRef = useRef<HTMLDivElement>(null);\n\n const isTextOverflowing = checkIfTextIsOverflowing(rootElementRef?.current, props.text);\n\n const markdownOptions = useMemo(() => {\n const inHeader = {\n ...TEXT_IN_HEADER_MARKDOWN_OPTIONS,\n ...MENTION_MARKDOWN_OPTIONS,\n channelNamesMap: props.channelMentionsNameMap,\n };\n const inPopover = {\n ...TEXT_IN_POPOVER_MARKDOWN_OPTIONS,\n ...MENTION_MARKDOWN_OPTIONS,\n channelNamesMap: props.channelMentionsNameMap,\n };\n\n return {\n inHeader,\n inPopover,\n };\n }, [props.channelMentionsNameMap]);\n\n const [isPopoverOpen, setPopoverOpen] = useState(false);\n\n const {refs: {setReference, setFloating}, floatingStyles, context: floatingContext} = useFloating({\n open: isTextOverflowing ? isPopoverOpen : false,\n onOpenChange: setPopoverOpen,\n whileElementsMounted: autoUpdate,\n middleware: [\n offset(SHIFT_UP_OF_POPOVER),\n ],\n });\n const {isMounted, styles: transitionStyles} = useTransitionStyles(\n floatingContext,\n TRANSITION_STYLE_PROPS,\n );\n\n const hover = useHover(floatingContext, {\n enabled: isTextOverflowing,\n handleClose: safePolygon({\n requireIntent: false,\n blockPointerEvents: true,\n }),\n });\n const focus = useFocus(floatingContext);\n const dismiss = useDismiss(floatingContext);\n const click = useClick(floatingContext);\n const role = useRole(floatingContext, {role: 'tooltip'});\n\n const {getReferenceProps, getFloatingProps} = useInteractions([hover, focus, click, dismiss, role]);\n\n const rootRef = useMergeRefs([rootElementRef, setReference]);\n\n const maxWidthOfPopover = getMaxWidthOfPopover(rootElementRef?.current);\n\n // This action processes clicks on formatted text elements like hashtags, user mentions,\n // channel mentions, etc. while also allowing other elements to function as is such as external links etc\n function handleClick(event: MouseEvent<HTMLDivElement>) {\n handleFormattedTextClick(event, currentRelativeTeamUrl);\n }\n\n return (\n <>\n <div\n ref={rootRef}\n className='header-description__text'\n {...getReferenceProps()}\n >\n <Markdown\n message={props.text}\n options={markdownOptions.inHeader}\n imageProps={IMAGE_MARKDOWN_OPTIONS}\n />\n </div>\n\n {isMounted && (\n <FloatingPortal id={RootHtmlPortalId}>\n <FloatingOverlay\n className='channel-header-text-popover-floating-overlay'\n lockScroll={true}\n >\n {/* eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions */}\n <div\n ref={setFloating}\n className='channel-header-text-popover'\n style={{\n maxWidth: maxWidthOfPopover,\n ...floatingStyles,\n ...transitionStyles,\n }}\n onClick={handleClick}\n {...getFloatingProps()}\n >\n <Markdown\n message={props.text}\n options={markdownOptions.inPopover}\n imageProps={IMAGE_MARKDOWN_OPTIONS}\n />\n </div>\n </FloatingOverlay>\n </FloatingPortal>\n )}\n </>\n );\n}\n\nfunction checkIfTextIsOverflowing(elem: HTMLDivElement | null, text: string): boolean {\n if (!elem) {\n return false;\n }\n\n if (text.match(/\\n{2,}/g)) {\n return true;\n }\n\n if (elem.scrollWidth === elem.clientWidth && elem.scrollHeight === elem.clientHeight) {\n return false;\n }\n\n return elem.scrollWidth > elem.clientWidth || elem.scrollHeight > elem.clientHeight;\n}\n\nfunction getMaxWidthOfPopover(elem: HTMLDivElement | null): string | number {\n if (!elem) {\n return 'inherit';\n }\n\n return (elem.clientWidth) + ((2 * PADDING_X_OF_POPOVER) + (2 * BORDER_WIDTH_OF_POPOVER));\n}\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport React from 'react';\nimport {FormattedMessage} from 'react-intl';\nimport {useDispatch} from 'react-redux';\n\nimport type {Channel} from '@mattermost/types/channels';\nimport type {Team} from '@mattermost/types/teams';\nimport type {UserProfile} from '@mattermost/types/users';\n\nimport {Permissions} from 'mattermost-redux/constants';\n\nimport {openModal} from 'actions/views/modals';\n\nimport EditChannelHeaderModal from 'components/edit_channel_header_modal';\nimport ChannelPermissionGate from 'components/permissions_gates/channel_permission_gate';\n\nimport {\n Constants,\n ModalIdentifiers,\n} from 'utils/constants';\nimport {isChannelNamesMap} from 'utils/text_formatting';\n\nimport {ChannelHeaderTextPopover} from './channel_header_text_popover';\n\ninterface Props {\n teamId: Team['id'];\n channel: Channel;\n dmUser?: UserProfile;\n}\n\nexport default function ChannelHeaderText(props: Props) {\n const isArchivedChannel = props.channel.delete_at !== 0;\n const isDirectChannel = props.channel.type === Constants.DM_CHANNEL;\n const isGroupChannel = props.channel.type === Constants.GM_CHANNEL;\n const isBotDMChannel = isDirectChannel && (props.dmUser?.is_bot ?? false);\n const isPrivateChannel = props.channel.type === Constants.PRIVATE_CHANNEL;\n const headerText = isBotDMChannel ? props.dmUser?.bot_description ?? '' : props.channel?.header ?? '';\n const hasHeaderText = headerText.trim().length > 0;\n\n // If it has a channel then show the channel irrespective of the channel type/state etc\n if (hasHeaderText) {\n return (\n <ChannelHeaderTextPopover\n text={headerText}\n channelMentionsNameMap={\n isChannelNamesMap(props.channel?.props?.channel_mentions) ? props.channel.props.channel_mentions : undefined\n }\n />\n );\n }\n\n // If doesn't have a header text then we need to check based on below\n // conditions if we need to show button to add or not\n\n if (isArchivedChannel) {\n return null;\n }\n\n if (isBotDMChannel) {\n return null;\n }\n\n if (isDirectChannel || isGroupChannel) {\n return <AddChannelHeaderTextButton channel={props.channel}/>;\n }\n\n // should show option to add channel header text for any channel\n // other than a DM or a GM or a Bot DM based on user's permission\n return (\n <ChannelPermissionGate\n channelId={props.channel.id}\n teamId={props.teamId}\n permissions={[\n isPrivateChannel ? Permissions.MANAGE_PRIVATE_CHANNEL_PROPERTIES : Permissions.MANAGE_PUBLIC_CHANNEL_PROPERTIES,\n ]}\n >\n <AddChannelHeaderTextButton channel={props.channel}/>\n </ChannelPermissionGate>\n );\n}\n\nfunction AddChannelHeaderTextButton({channel}: {channel: Channel}) {\n const dispatch = useDispatch();\n\n function handleClick() {\n dispatch(openModal({\n modalId: ModalIdentifiers.EDIT_CHANNEL_HEADER,\n dialogType: EditChannelHeaderModal,\n dialogProps: {channel},\n }));\n }\n\n return (\n <button\n className='header-placeholder style--none'\n onClick={handleClick}\n >\n <FormattedMessage\n id='channel_header.headerText.addNewButton'\n defaultMessage='Add a channel header'\n />\n <i\n className='icon icon-pencil-outline edit-icon'\n aria-hidden={true}\n />\n </button>\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 {UserProfile} from '@mattermost/types/users';\n\nimport {getTeammateNameDisplaySetting} from 'mattermost-redux/selectors/entities/preferences';\nimport {getCurrentUser} from 'mattermost-redux/selectors/entities/users';\nimport {displayUsername, isGuest} from 'mattermost-redux/utils/user_utils';\n\nimport GuestTag from 'components/widgets/tag/guest_tag';\n\ntype Props = {\n dmUser?: UserProfile;\n}\n\nconst ChannelHeaderTitleDirect = ({\n dmUser,\n}: Props) => {\n const currentUser = useSelector(getCurrentUser);\n const teammateNameDisplaySetting = useSelector(getTeammateNameDisplaySetting);\n const displayName = displayUsername(dmUser, teammateNameDisplaySetting);\n\n return (\n <>\n {currentUser.id !== dmUser?.id && displayName + ' '}\n {currentUser.id === dmUser?.id &&\n <FormattedMessage\n id='channel_header.directchannel.you'\n defaultMessage='{displayName} (you) '\n values={{displayName}}\n />}\n {isGuest(dmUser?.roles ?? '') && <GuestTag/>}\n </>\n );\n};\n\nexport default memo(ChannelHeaderTitleDirect);\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport classNames from 'classnames';\nimport React, {memo, useCallback, useRef} from 'react';\nimport {FormattedMessage, useIntl} from 'react-intl';\nimport {useSelector, useDispatch} from 'react-redux';\n\nimport {favoriteChannel, unfavoriteChannel} from 'mattermost-redux/actions/channels';\nimport {getCurrentChannel, isCurrentChannelFavorite} from 'mattermost-redux/selectors/entities/channels';\n\nimport WithTooltip from 'components/with_tooltip';\n\nimport type {A11yFocusEventDetail} from 'utils/constants';\nimport {A11yCustomEventTypes} from 'utils/constants';\n\nconst ChannelHeaderTitleFavorite = () => {\n const intl = useIntl();\n const dispatch = useDispatch();\n const isFavorite = useSelector(isCurrentChannelFavorite);\n const channel = useSelector(getCurrentChannel);\n const channelIsArchived = (channel?.delete_at ?? 0) > 0;\n const favIconRef = useRef<HTMLButtonElement>(null);\n\n const toggleFavoriteCallback = useCallback((e: React.MouseEvent<HTMLButtonElement>) => {\n e.stopPropagation();\n if (!channel) {\n return;\n }\n if (isFavorite) {\n dispatch(unfavoriteChannel(channel.id));\n } else {\n dispatch(favoriteChannel(channel.id));\n }\n requestAnimationFrame(() => {\n if (favIconRef.current) {\n document.dispatchEvent(\n new CustomEvent<A11yFocusEventDetail>(A11yCustomEventTypes.FOCUS, {\n detail: {\n target: favIconRef.current,\n keyboardOnly: false,\n },\n }),\n );\n }\n });\n }, [isFavorite, channel, dispatch]);\n\n if (!channel || channelIsArchived) {\n return null;\n }\n\n let ariaLabel = intl.formatMessage({id: 'channelHeader.addToFavorites', defaultMessage: 'Add to Favorites'});\n if (isFavorite) {\n ariaLabel = intl.formatMessage({id: 'channelHeader.removeFromFavorites', defaultMessage: 'Remove from Favorites'});\n }\n ariaLabel = ariaLabel.toLowerCase();\n\n const title = (\n <>\n {!isFavorite &&\n <FormattedMessage\n id='channelHeader.addToFavorites'\n defaultMessage='Add to Favorites'\n />}\n {isFavorite &&\n <FormattedMessage\n id='channelHeader.removeFromFavorites'\n defaultMessage='Remove from Favorites'\n />}\n </>\n );\n\n return (\n <WithTooltip\n title={title}\n >\n <button\n id='toggleFavorite'\n onClick={toggleFavoriteCallback}\n className={classNames('channel-header__favorites btn btn-icon btn-xs', {active: isFavorite, inactive: !isFavorite})}\n aria-label={ariaLabel}\n ref={favIconRef}\n >\n <i className={classNames('icon', {'icon-star': isFavorite, 'icon-star-outline': !isFavorite})}/>\n </button>\n </WithTooltip>\n );\n};\n\nexport default memo(ChannelHeaderTitleFavorite);\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport React, {memo} from 'react';\nimport {useSelector} from 'react-redux';\n\nimport type {UserProfile} from '@mattermost/types/users';\n\nimport {getCurrentChannel} from 'mattermost-redux/selectors/entities/channels';\nimport {getTeammateNameDisplaySetting} from 'mattermost-redux/selectors/entities/preferences';\nimport {getCurrentUser} from 'mattermost-redux/selectors/entities/users';\nimport {displayUsername, isGuest} from 'mattermost-redux/utils/user_utils';\n\nimport GuestTag from 'components/widgets/tag/guest_tag';\n\ntype Props = {\n gmMembers?: UserProfile[];\n}\n\nconst ChannelHeaderTitleGroup = ({\n gmMembers,\n}: Props) => {\n const currentUser = useSelector(getCurrentUser);\n const teammateNameDisplaySetting = useSelector(getTeammateNameDisplaySetting);\n const channel = useSelector(getCurrentChannel);\n\n if (!channel) {\n return null;\n }\n\n // map the displayname to the gm member users\n const membersMap: Record<string, UserProfile[]> = {};\n if (gmMembers) {\n for (const user of gmMembers) {\n if (user.id === currentUser.id) {\n continue;\n }\n const userDisplayName = displayUsername(user, teammateNameDisplaySetting);\n\n if (!membersMap[userDisplayName]) {\n membersMap[userDisplayName] = []; //Create an array for cases with same display name\n }\n\n membersMap[userDisplayName].push(user);\n }\n }\n\n const displayNames = channel.display_name.split(', ');\n\n return (\n <>\n {displayNames.map((displayName, index) => {\n if (!membersMap[displayName]) {\n return displayName;\n }\n\n const user = membersMap[displayName].shift();\n\n return (\n <React.Fragment key={user?.id}>\n {index > 0 && ', '}\n {displayName}\n {isGuest(user?.roles ?? '') && <GuestTag/>}\n </React.Fragment>\n );\n })}\n </>\n );\n};\n\nexport default memo(ChannelHeaderTitleGroup);\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport classNames from 'classnames';\nimport type {ReactNode} from 'react';\nimport React, {memo, useState, useRef, useEffect} from 'react';\nimport {useIntl} from 'react-intl';\nimport {useSelector} from 'react-redux';\n\nimport type {UserProfile} from '@mattermost/types/users';\n\nimport {Client4} from 'mattermost-redux/client';\nimport {getCurrentChannel} from 'mattermost-redux/selectors/entities/channels';\n\nimport {getIsRhsOpen} from 'selectors/rhs';\n\nimport {ChannelHeaderDropdown} from 'components/channel_header_dropdown';\nimport ProfilePicture from 'components/profile_picture';\nimport SharedChannelIndicator from 'components/shared_channel_indicator';\nimport ArchiveIcon from 'components/widgets/icons/archive_icon';\nimport MenuWrapper from 'components/widgets/menu/menu_wrapper';\nimport BotTag from 'components/widgets/tag/bot_tag';\nimport WithTooltip from 'components/with_tooltip';\n\nimport {Constants} from 'utils/constants';\n\nimport ChannelHeaderTitleDirect from './channel_header_title_direct';\nimport ChannelHeaderTitleFavorite from './channel_header_title_favorite';\nimport ChannelHeaderTitleGroup from './channel_header_title_group';\n\ntype Props = {\n dmUser?: UserProfile;\n gmMembers?: UserProfile[];\n}\n\nconst ChannelHeaderTitle = ({\n dmUser,\n gmMembers,\n}: Props) => {\n const [titleMenuOpen, setTitleMenuOpen] = useState(false);\n const [showTooltip, setShowTooltip] = useState(false);\n const intl = useIntl();\n const channel = useSelector(getCurrentChannel);\n\n const headerItemRef = useRef<HTMLElement | null>(null);\n const isRHSOpen = useSelector(getIsRhsOpen);\n\n useEffect(() => {\n enableToolTipIfNeeded();\n\n // Re-check on window resize\n const handleResize = () => enableToolTipIfNeeded();\n window.addEventListener('resize', handleResize);\n\n return () => window.removeEventListener('resize', handleResize);\n }, [channel, gmMembers, dmUser, isRHSOpen]);\n\n if (!channel) {\n return null;\n }\n\n const enableToolTipIfNeeded = () => {\n const element = headerItemRef.current;\n const isTooltip = element && element.offsetWidth < element.scrollWidth;\n setShowTooltip(isTooltip as boolean);\n };\n\n const isDirect = (channel.type === Constants.DM_CHANNEL);\n const isGroup = (channel.type === Constants.GM_CHANNEL);\n const channelIsArchived = channel.delete_at !== 0;\n\n let archivedIcon: React.ReactNode = null;\n if (channelIsArchived) {\n archivedIcon = <ArchiveIcon className='icon icon__archive icon channel-header-archived-icon svg-text-color'/>;\n }\n\n let sharedIcon = null;\n if (channel.shared) {\n sharedIcon = (\n <SharedChannelIndicator\n className='shared-channel-icon'\n withTooltip={true}\n />\n );\n }\n\n let channelTitle: ReactNode = channel.display_name;\n if (isDirect) {\n channelTitle = <ChannelHeaderTitleDirect dmUser={dmUser}/>;\n } else if (isGroup) {\n channelTitle = <ChannelHeaderTitleGroup gmMembers={gmMembers}/>;\n }\n\n if (isDirect && dmUser?.is_bot) {\n return (\n <div\n id='channelHeaderDropdownButton'\n className='channel-header__bot'\n >\n <ChannelHeaderTitleFavorite/>\n <ProfilePicture\n src={Client4.getProfilePictureUrl(dmUser.id, dmUser.last_picture_update)}\n size='sm'\n />\n <strong\n id='channelHeaderTitle'\n className='heading'\n >\n <span>\n {archivedIcon}\n {channelTitle}\n </span>\n </strong>\n <BotTag/>\n </div>\n );\n }\n\n return (\n <div className='channel-header__top'>\n <ChannelHeaderTitleFavorite/>\n {isDirect && dmUser && ( // Check if it's a DM and dmUser is provided\n <ProfilePicture\n src={Client4.getProfilePictureUrl(dmUser.id, dmUser.last_picture_update)}\n size='sm'\n status={channel.status}\n />\n )}\n <MenuWrapper onToggle={setTitleMenuOpen}>\n <div\n id='channelHeaderDropdownButton'\n >\n <button\n className={classNames('channel-header__trigger style--none', {active: titleMenuOpen})}\n aria-label={intl.formatMessage({id: 'channel_header.menuAriaLabel', defaultMessage: 'Channel Menu'}).toLowerCase()}\n >\n {showTooltip ? (\n <WithTooltip\n title={channelTitle as string}\n >\n <strong\n id='channelHeaderTitle'\n className='heading'\n ref={headerItemRef}\n >\n <span>\n {archivedIcon}\n {channelTitle}\n {sharedIcon}\n </span>\n </strong>\n </WithTooltip>\n ) : (\n <strong\n id='channelHeaderTitle'\n className='heading'\n ref={headerItemRef}\n >\n <span>\n {archivedIcon}\n {channelTitle}\n {sharedIcon}\n </span>\n </strong>\n )}\n <span\n id='channelHeaderDropdownIcon'\n className='icon icon-chevron-down header-dropdown-chevron-icon'\n />\n </button>\n </div>\n <ChannelHeaderDropdown/>\n </MenuWrapper>\n </div>\n );\n};\n\nexport default memo(ChannelHeaderTitle);\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport React, {useCallback} from 'react';\nimport {useIntl} from 'react-intl';\nimport {useDispatch, useSelector} from 'react-redux';\nimport styled from 'styled-components';\n\nimport type {Channel} from '@mattermost/types/channels';\n\nimport {closeRightHandSide, showChannelInfo} from 'actions/views/rhs';\nimport {getIsRhsOpen, getRhsState} from 'selectors/rhs';\n\nimport {RHSStates} from 'utils/constants';\n\nimport type {RhsState} from 'types/store/rhs';\n\nimport HeaderIconWrapper from './components/header_icon_wrapper';\n\ninterface Props {\n channel: Channel;\n}\n\nconst Icon = styled.i`\n font-size:18px;\n line-height:18px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n`;\n\nconst ChannelInfoButton = ({channel}: Props) => {\n const dispatch = useDispatch();\n const intl = useIntl();\n\n const rhsState: RhsState = useSelector(getRhsState);\n const isRhsOpen: boolean = useSelector(getIsRhsOpen);\n const isChannelInfo = rhsState === RHSStates.CHANNEL_INFO ||\n rhsState === RHSStates.CHANNEL_MEMBERS ||\n rhsState === RHSStates.CHANNEL_FILES ||\n rhsState === RHSStates.PIN;\n\n const buttonActive = isRhsOpen && isChannelInfo;\n const toggleRHS = useCallback(() => {\n if (buttonActive) {\n const action = isChannelInfo ? closeRightHandSide() : showChannelInfo(channel.id);\n dispatch(action);\n } else {\n dispatch(showChannelInfo(channel.id));\n }\n }, [buttonActive, channel.id, isChannelInfo, dispatch]);\n\n let tooltip;\n if (buttonActive) {\n tooltip = intl.formatMessage({id: 'channel_header.closeChannelInfo', defaultMessage: 'Close info'});\n } else {\n tooltip = intl.formatMessage({id: 'channel_header.openChannelInfo', defaultMessage: 'View Info'});\n }\n\n let buttonClass = 'channel-header__icon';\n if (buttonActive) {\n buttonClass += ' channel-header__icon--active-inverted';\n }\n\n return (\n <HeaderIconWrapper\n buttonClass={buttonClass}\n buttonId='channel-info-btn'\n onClick={toggleRHS}\n tooltip={tooltip}\n >\n <Icon className='icon-information-outline'/>\n </HeaderIconWrapper>\n );\n};\n\nexport default ChannelInfoButton;\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 type {MouseEvent, ReactNode, RefObject} from 'react';\nimport {FormattedMessage, injectIntl} from 'react-intl';\nimport type {WrappedComponentProps} from 'react-intl';\n\nimport CustomStatusEmoji from 'components/custom_status/custom_status_emoji';\nimport CustomStatusText from 'components/custom_status/custom_status_text';\nimport Timestamp from 'components/timestamp';\nimport WithTooltip from 'components/with_tooltip';\n\nimport CallButton from 'plugins/call_button';\nimport ChannelHeaderPlug from 'plugins/channel_header_plug';\nimport {\n Constants,\n NotificationLevels,\n RHSStates,\n} from 'utils/constants';\nimport {isEmptyObject} from 'utils/utils';\n\nimport ChannelHeaderText from './channel_header_text';\nimport ChannelHeaderTitle from './channel_header_title';\nimport ChannelInfoButton from './channel_info_button';\nimport HeaderIconWrapper from './components/header_icon_wrapper';\n\nimport type {PropsFromRedux} from './index';\n\nexport type Props = WrappedComponentProps & PropsFromRedux;\n\nclass ChannelHeader extends React.PureComponent<Props> {\n toggleFavoriteRef: RefObject<HTMLButtonElement>;\n\n constructor(props: Props) {\n super(props);\n this.toggleFavoriteRef = React.createRef();\n }\n\n componentDidMount() {\n this.props.actions.getCustomEmojisInText(this.props.channel ? this.props.channel.header : '');\n }\n\n componentDidUpdate(prevProps: Props) {\n const header = this.props.channel ? this.props.channel.header : '';\n const prevHeader = prevProps.channel ? prevProps.channel.header : '';\n if (header !== prevHeader) {\n this.props.actions.getCustomEmojisInText(header);\n }\n }\n\n unmute = () => {\n const {actions, channel, channelMember, currentUser} = this.props;\n\n if (!channelMember || !currentUser || !channel) {\n return;\n }\n\n const options = {mark_unread: NotificationLevels.ALL};\n actions.updateChannelNotifyProps(currentUser.id, channel.id, options);\n };\n\n showPinnedPosts = (e: MouseEvent<HTMLButtonElement>) => {\n e.preventDefault();\n if (this.props.rhsState === RHSStates.PIN) {\n this.props.actions.closeRightHandSide();\n } else {\n this.props.actions.showPinnedPosts();\n }\n };\n\n showChannelFiles = () => {\n if (this.props.rhsState === RHSStates.CHANNEL_FILES) {\n this.props.actions.closeRightHandSide();\n } else if (this.props.channel) {\n this.props.actions.showChannelFiles(this.props.channel.id);\n }\n };\n\n toggleChannelMembersRHS = () => {\n if (this.props.rhsState === RHSStates.CHANNEL_MEMBERS) {\n this.props.actions.closeRightHandSide();\n } else if (this.props.channel) {\n this.props.actions.showChannelMembers(this.props.channel.id);\n }\n };\n\n renderCustomStatus = () => {\n const {customStatus, isCustomStatusEnabled, isCustomStatusExpired} = this.props;\n const isStatusSet = !isCustomStatusExpired && (customStatus?.text || customStatus?.emoji);\n if (!(isCustomStatusEnabled && isStatusSet)) {\n return null;\n }\n\n return (\n <div className='custom-emoji__wrapper'>\n <CustomStatusEmoji\n userID={this.props.dmUser?.id}\n showTooltip={true}\n emojiStyle={{\n verticalAlign: 'top',\n margin: '0 4px 1px',\n }}\n />\n <CustomStatusText\n text={customStatus?.text}\n className='custom-emoji__text'\n />\n </div>\n );\n };\n\n render() {\n const {\n teamId,\n currentUser,\n gmMembers,\n channel,\n channelMember,\n isChannelMuted,\n dmUser,\n rhsState,\n hasGuests,\n hideGuestTags,\n } = this.props;\n if (!channel) {\n return null;\n }\n\n const ariaLabelChannelHeader = this.props.intl.formatMessage({id: 'accessibility.sections.channelHeader', defaultMessage: 'channel header region'});\n\n let hasGuestsText: ReactNode = '';\n if (hasGuests && !hideGuestTags) {\n hasGuestsText = (\n <span className='has-guest-header'>\n <span tabIndex={0}>\n <FormattedMessage\n id='channel_header.channelHasGuests'\n defaultMessage='Channel has guests'\n />\n </span>\n </span>\n );\n }\n\n if (isEmptyObject(channel) ||\n isEmptyObject(channelMember) ||\n isEmptyObject(currentUser) ||\n (!dmUser && channel.type === Constants.DM_CHANNEL)\n ) {\n // Use an empty div to make sure the header's height stays constant\n return (\n <div className='channel-header'/>\n );\n }\n\n const isDirect = (channel.type === Constants.DM_CHANNEL);\n const isGroup = (channel.type === Constants.GM_CHANNEL);\n\n if (isGroup) {\n if (hasGuests && !hideGuestTags) {\n hasGuestsText = (\n <span className='has-guest-header'>\n <FormattedMessage\n id='channel_header.groupMessageHasGuests'\n defaultMessage='This group message has guests'\n />\n </span>\n );\n }\n }\n\n let dmHeaderTextStatus: ReactNode;\n if (isDirect && !dmUser?.delete_at && !dmUser?.is_bot) {\n dmHeaderTextStatus = (\n <span className='header-status__text'>\n {this.renderCustomStatus()}\n </span>\n );\n\n if (this.props.isLastActiveEnabled && this.props.lastActivityTimestamp && this.props.timestampUnits) {\n dmHeaderTextStatus = (\n <span className='header-status__text'>\n <span className='last-active__text'>\n <FormattedMessage\n id='channel_header.lastActive'\n defaultMessage='Active {timestamp}'\n values={{\n timestamp: (\n <Timestamp\n value={this.props.lastActivityTimestamp}\n units={this.props.timestampUnits}\n useTime={false}\n style={'short'}\n />\n ),\n }}\n />\n </span>\n {this.renderCustomStatus()}\n </span>\n );\n }\n }\n\n const channelFilesIconClass = classNames('channel-header__icon channel-header__icon--left btn btn-icon btn-xs ', {\n 'channel-header__icon--active': rhsState === RHSStates.CHANNEL_FILES,\n });\n const channelFilesIcon = <i className='icon icon-file-text-outline'/>;\n const pinnedIconClass = classNames('channel-header__icon channel-header__icon--wide channel-header__icon--left btn btn-icon btn-xs', {\n 'channel-header__icon--active': rhsState === RHSStates.PIN,\n });\n const pinnedIcon = this.props.pinnedPostsCount ? (\n <>\n <i\n aria-hidden='true'\n className='icon icon-pin-outline channel-header__pin'\n />\n <span\n id='channelPinnedPostCountText'\n className='icon__text'\n >\n {this.props.pinnedPostsCount}\n </span>\n </>\n ) : (\n <i\n aria-hidden='true'\n className='icon icon-pin-outline channel-header__pin'\n />\n );\n\n const pinnedButton = this.props.pinnedPostsCount ? (\n <HeaderIconWrapper\n buttonClass={pinnedIconClass}\n buttonId={'channelHeaderPinButton'}\n onClick={this.showPinnedPosts}\n tooltip={this.props.intl.formatMessage({id: 'channel_header.pinnedPosts', defaultMessage: 'Pinned messages'})}\n >\n {pinnedIcon}\n </HeaderIconWrapper>\n ) : (\n null\n );\n\n let memberListButton = null;\n if (!isDirect) {\n const membersIconClass = classNames('member-rhs__trigger channel-header__icon channel-header__icon--wide channel-header__icon--left btn btn-icon btn-xs', {\n 'channel-header__icon--active': rhsState === RHSStates.CHANNEL_MEMBERS,\n });\n const membersIcon = this.props.memberCount ? (\n <>\n <i\n aria-hidden='true'\n className='icon icon-account-outline channel-header__members'\n />\n <span\n id='channelMemberCountText'\n className='icon__text'\n >\n {this.props.memberCount}\n </span>\n </>\n ) : (\n <>\n <i\n aria-hidden='true'\n className='icon icon-account-outline channel-header__members'\n />\n <span\n id='channelMemberCountText'\n className='icon__text'\n >\n {'-'}\n </span>\n </>\n );\n\n memberListButton = (\n <HeaderIconWrapper\n tooltip={this.props.intl.formatMessage({id: 'channel_header.channelMembers', defaultMessage: 'Members'})}\n buttonClass={membersIconClass}\n buttonId={'member_rhs'}\n onClick={this.toggleChannelMembersRHS}\n >\n {membersIcon}\n </HeaderIconWrapper>\n );\n }\n\n let muteTrigger;\n if (isChannelMuted) {\n muteTrigger = (\n <WithTooltip\n title={\n <FormattedMessage\n id='channelHeader.unmute'\n defaultMessage='Unmute'\n />\n }\n >\n <button\n id='toggleMute'\n onClick={this.unmute}\n className={'channel-header__mute inactive btn btn-icon btn-xs'}\n aria-label={this.props.intl.formatMessage({id: 'channelHeader.unmute', defaultMessage: 'Unmute'})}\n >\n <i\n className={'icon icon-bell-off-outline'}\n aria-hidden={true}\n />\n </button>\n </WithTooltip>\n );\n }\n\n return (\n <div\n id='channel-header'\n aria-label={ariaLabelChannelHeader}\n role='banner'\n tabIndex={-1}\n data-channelid={`${channel.id}`}\n className='channel-header alt a11y__region'\n data-a11y-sort-order='8'\n >\n <div className='flex-parent'>\n <div className='flex-child'>\n <div\n id='channelHeaderInfo'\n className='channel-header__info'\n >\n <div\n className='channel-header__title dropdown'\n >\n <ChannelHeaderTitle\n dmUser={dmUser}\n gmMembers={gmMembers}\n />\n <div\n className='channel-header__icons'\n >\n {muteTrigger}\n {memberListButton}\n {pinnedButton}\n {this.props.isFileAttachmentsEnabled &&\n <HeaderIconWrapper\n buttonClass={channelFilesIconClass}\n buttonId={'channelHeaderFilesButton'}\n onClick={this.showChannelFiles}\n tooltip={this.props.intl.formatMessage({id: 'channel_header.channelFiles', defaultMessage: 'Channel files'})}\n >\n {channelFilesIcon}\n </HeaderIconWrapper>\n }\n </div>\n <div\n id='channelHeaderDescription'\n className='channel-header__description'\n >\n {dmHeaderTextStatus}\n {hasGuestsText}\n <ChannelHeaderText\n teamId={teamId}\n channel={channel}\n dmUser={dmUser}\n />\n </div>\n </div>\n </div>\n </div>\n <ChannelHeaderPlug\n channel={channel}\n channelMember={channelMember}\n />\n <CallButton/>\n <ChannelInfoButton channel={channel}/>\n </div>\n </div>\n );\n }\n}\n\nexport default injectIntl(ChannelHeader);\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {ConnectedProps} from 'react-redux';\nimport {connect} from 'react-redux';\nimport {withRouter} from 'react-router-dom';\nimport {bindActionCreators} from 'redux';\nimport type {Dispatch} from 'redux';\n\nimport {\n updateChannelNotifyProps,\n} from 'mattermost-redux/actions/channels';\nimport {getCustomEmojisInText} from 'mattermost-redux/actions/emojis';\nimport {General} from 'mattermost-redux/constants';\nimport {\n getCurrentChannel,\n getMyCurrentChannelMembership,\n isCurrentChannelMuted,\n getCurrentChannelStats,\n} from 'mattermost-redux/selectors/entities/channels';\nimport {getConfig} from 'mattermost-redux/selectors/entities/general';\nimport {getCurrentTeamId} from 'mattermost-redux/selectors/entities/teams';\nimport {\n displayLastActiveLabel,\n getCurrentUser,\n getLastActiveTimestampUnits,\n getLastActivityForUserId,\n getUser,\n makeGetProfilesInChannel,\n} from 'mattermost-redux/selectors/entities/users';\nimport {getUserIdFromChannelName} from 'mattermost-redux/utils/channel_utils';\n\nimport {\n showPinnedPosts,\n showChannelFiles,\n closeRightHandSide,\n showChannelMembers,\n} from 'actions/views/rhs';\nimport {getRhsState} from 'selectors/rhs';\nimport {makeGetCustomStatus, isCustomStatusEnabled, isCustomStatusExpired} from 'selectors/views/custom_status';\n\nimport {isFileAttachmentsEnabled} from 'utils/file_utils';\n\nimport type {GlobalState} from 'types/store';\n\nimport ChannelHeader from './channel_header';\n\nfunction makeMapStateToProps() {\n const doGetProfilesInChannel = makeGetProfilesInChannel();\n const getCustomStatus = makeGetCustomStatus();\n let timestampUnits: string[] = [];\n\n return function mapStateToProps(state: GlobalState) {\n const channel = getCurrentChannel(state);\n const user = getCurrentUser(state);\n const config = getConfig(state);\n\n let dmUser;\n let gmMembers;\n let customStatus;\n let lastActivityTimestamp;\n\n if (channel && channel.type === General.DM_CHANNEL) {\n const dmUserId = getUserIdFromChannelName(user.id, channel.name);\n dmUser = getUser(state, dmUserId);\n customStatus = dmUser && getCustomStatus(state, dmUser.id);\n lastActivityTimestamp = dmUser && getLastActivityForUserId(state, dmUser.id);\n } else if (channel && channel.type === General.GM_CHANNEL) {\n gmMembers = doGetProfilesInChannel(state, channel.id);\n }\n const stats = getCurrentChannelStats(state);\n\n let isLastActiveEnabled = false;\n if (dmUser) {\n isLastActiveEnabled = displayLastActiveLabel(state, dmUser.id);\n timestampUnits = getLastActiveTimestampUnits(state, dmUser.id);\n }\n\n return {\n teamId: getCurrentTeamId(state),\n channel,\n channelMember: getMyCurrentChannelMembership(state),\n memberCount: stats?.member_count || 0,\n currentUser: user,\n dmUser,\n gmMembers,\n rhsState: getRhsState(state),\n isChannelMuted: isCurrentChannelMuted(state),\n hasGuests: stats ? stats.guest_count > 0 : false,\n pinnedPostsCount: stats?.pinnedpost_count || 0,\n customStatus,\n isCustomStatusEnabled: isCustomStatusEnabled(state),\n isCustomStatusExpired: isCustomStatusExpired(state, customStatus),\n lastActivityTimestamp,\n isFileAttachmentsEnabled: isFileAttachmentsEnabled(config),\n isLastActiveEnabled,\n timestampUnits,\n hideGuestTags: config.HideGuestTags === 'true',\n };\n };\n}\n\nconst mapDispatchToProps = (dispatch: Dispatch) => ({\n actions: bindActionCreators({\n showPinnedPosts,\n showChannelFiles,\n closeRightHandSide,\n getCustomEmojisInText,\n updateChannelNotifyProps,\n showChannelMembers,\n }, dispatch),\n});\n\nconst connector = connect(makeMapStateToProps, mapDispatchToProps);\n\nexport type PropsFromRedux = ConnectedProps<typeof connector>;\n\nexport default withRouter(connector(ChannelHeader));\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.default = ownerWindow;\n\nvar _ownerDocument = _interopRequireDefault(require(\"./ownerDocument\"));\n\nfunction ownerWindow(node) {\n var doc = (0, _ownerDocument.default)(node);\n return doc && doc.defaultView || doc.parentWindow;\n}\n\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.default = height;\n\nvar _offset = _interopRequireDefault(require(\"./offset\"));\n\nvar _isWindow = _interopRequireDefault(require(\"./isWindow\"));\n\nfunction height(node, client) {\n var win = (0, _isWindow.default)(node);\n return win ? win.innerHeight : client ? node.clientHeight : (0, _offset.default)(node).height;\n}\n\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar _inDOM = _interopRequireDefault(require(\"./inDOM\"));\n\nvar vendors = ['', 'webkit', 'moz', 'o', 'ms'];\nvar cancel = 'clearTimeout';\nvar raf = fallback;\nvar compatRaf;\n\nvar getKey = function getKey(vendor, k) {\n return vendor + (!vendor ? k : k[0].toUpperCase() + k.substr(1)) + 'AnimationFrame';\n};\n\nif (_inDOM.default) {\n vendors.some(function (vendor) {\n var rafKey = getKey(vendor, 'request');\n\n if (rafKey in window) {\n cancel = getKey(vendor, 'cancel');\n return raf = function raf(cb) {\n return window[rafKey](cb);\n };\n }\n });\n}\n/* https://github.com/component/raf */\n\n\nvar prev = new Date().getTime();\n\nfunction fallback(fn) {\n var curr = new Date().getTime(),\n ms = Math.max(0, 16 - (curr - prev)),\n req = setTimeout(fn, ms);\n prev = curr;\n return req;\n}\n\ncompatRaf = function compatRaf(cb) {\n return raf(cb);\n};\n\ncompatRaf.cancel = function (id) {\n window[cancel] && typeof window[cancel] === 'function' && window[cancel](id);\n};\n\nvar _default = compatRaf;\nexports.default = _default;\nmodule.exports = exports[\"default\"];","'use strict';\n\nexports.__esModule = true;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _classnames = require('classnames');\n\nvar _classnames2 = _interopRequireDefault(_classnames);\n\nvar _height = require('dom-helpers/query/height');\n\nvar _height2 = _interopRequireDefault(_height);\n\nvar _offset = require('dom-helpers/query/offset');\n\nvar _offset2 = _interopRequireDefault(_offset);\n\nvar _offsetParent = require('dom-helpers/query/offsetParent');\n\nvar _offsetParent2 = _interopRequireDefault(_offsetParent);\n\nvar _scrollTop = require('dom-helpers/query/scrollTop');\n\nvar _scrollTop2 = _interopRequireDefault(_scrollTop);\n\nvar _requestAnimationFrame = require('dom-helpers/util/requestAnimationFrame');\n\nvar _requestAnimationFrame2 = _interopRequireDefault(_requestAnimationFrame);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactDom = require('react-dom');\n\nvar _reactDom2 = _interopRequireDefault(_reactDom);\n\nvar _addEventListener = require('./utils/addEventListener');\n\nvar _addEventListener2 = _interopRequireDefault(_addEventListener);\n\nvar _getDocumentHeight = require('./utils/getDocumentHeight');\n\nvar _getDocumentHeight2 = _interopRequireDefault(_getDocumentHeight);\n\nvar _ownerDocument = require('./utils/ownerDocument');\n\nvar _ownerDocument2 = _interopRequireDefault(_ownerDocument);\n\nvar _ownerWindow = require('./utils/ownerWindow');\n\nvar _ownerWindow2 = _interopRequireDefault(_ownerWindow);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n/**\n * The `<Affix/>` component toggles `position: fixed;` on and off, emulating\n * the effect found with `position: sticky;`.\n */\nvar Affix = function (_React$Component) {\n _inherits(Affix, _React$Component);\n\n function Affix(props, context) {\n _classCallCheck(this, Affix);\n\n var _this = _possibleConstructorReturn(this, _React$Component.call(this, props, context));\n\n _this.onWindowScroll = function () {\n _this.onUpdate();\n };\n\n _this.onDocumentClick = function () {\n (0, _requestAnimationFrame2.default)(function () {\n return _this.onUpdate();\n });\n };\n\n _this.onUpdate = function () {\n if (!_this._isMounted) {\n return;\n }\n\n var _this$props = _this.props,\n offsetTop = _this$props.offsetTop,\n viewportOffsetTop = _this$props.viewportOffsetTop;\n\n var scrollTop = (0, _scrollTop2.default)((0, _ownerWindow2.default)(_this));\n var positionTopMin = scrollTop + (viewportOffsetTop || 0);\n\n if (positionTopMin <= offsetTop) {\n _this.updateState('top', null, null);\n return;\n }\n\n if (positionTopMin > _this.getPositionTopMax()) {\n if (_this.state.affixed === 'bottom') {\n _this.updateStateAtBottom();\n } else {\n // Setting position away from `fixed` can change the offset parent of\n // the affix, so we can't calculate the correct position until after\n // we've updated its position.\n _this.setState({\n affixed: 'bottom',\n position: 'absolute',\n top: null\n }, function () {\n if (!_this._isMounted) {\n return;\n }\n\n _this.updateStateAtBottom();\n });\n }\n return;\n }\n\n _this.updateState('affix', 'fixed', viewportOffsetTop);\n };\n\n _this.getPositionTopMax = function () {\n var documentHeight = (0, _getDocumentHeight2.default)((0, _ownerDocument2.default)(_this));\n var height = (0, _height2.default)(_reactDom2.default.findDOMNode(_this));\n\n return documentHeight - height - _this.props.offsetBottom;\n };\n\n _this.updateState = function (affixed, position, top) {\n if (affixed === _this.state.affixed && position === _this.state.position && top === _this.state.top) {\n return;\n }\n\n var upperName = affixed === 'affix' ? '' : affixed.charAt(0).toUpperCase() + affixed.substr(1);\n\n if (_this.props['onAffix' + upperName]) {\n _this.props['onAffix' + upperName]();\n }\n\n _this.setState({ affixed: affixed, position: position, top: top }, function () {\n if (_this.props['onAffixed' + upperName]) {\n _this.props['onAffixed' + upperName]();\n }\n });\n };\n\n _this.updateStateAtBottom = function () {\n var positionTopMax = _this.getPositionTopMax();\n var offsetParent = (0, _offsetParent2.default)(_reactDom2.default.findDOMNode(_this));\n var parentTop = (0, _offset2.default)(offsetParent).top;\n\n _this.updateState('bottom', 'absolute', positionTopMax - parentTop);\n };\n\n _this.state = {\n affixed: 'top',\n position: null,\n top: null\n };\n\n _this._needPositionUpdate = false;\n return _this;\n }\n\n Affix.prototype.componentDidMount = function componentDidMount() {\n var _this2 = this;\n\n this._isMounted = true;\n\n this._windowScrollListener = (0, _addEventListener2.default)((0, _ownerWindow2.default)(this), 'scroll', function () {\n return _this2.onWindowScroll();\n });\n this._documentClickListener = (0, _addEventListener2.default)((0, _ownerDocument2.default)(this), 'click', function () {\n return _this2.onDocumentClick();\n });\n\n this.onUpdate();\n };\n\n Affix.prototype.UNSAFE_componentWillReceiveProps = function UNSAFE_componentWillReceiveProps() {\n this._needPositionUpdate = true;\n };\n\n Affix.prototype.componentDidUpdate = function componentDidUpdate() {\n if (this._needPositionUpdate) {\n this._needPositionUpdate = false;\n this.onUpdate();\n }\n };\n\n Affix.prototype.componentWillUnmount = function componentWillUnmount() {\n this._isMounted = false;\n\n if (this._windowScrollListener) {\n this._windowScrollListener.remove();\n }\n if (this._documentClickListener) {\n this._documentClickListener.remove();\n }\n };\n\n Affix.prototype.render = function render() {\n var child = _react2.default.Children.only(this.props.children);\n var _child$props = child.props,\n className = _child$props.className,\n style = _child$props.style;\n var _state = this.state,\n affixed = _state.affixed,\n position = _state.position,\n top = _state.top;\n\n var positionStyle = { position: position, top: top };\n\n var affixClassName = void 0;\n var affixStyle = void 0;\n if (affixed === 'top') {\n affixClassName = this.props.topClassName;\n affixStyle = this.props.topStyle;\n } else if (affixed === 'bottom') {\n affixClassName = this.props.bottomClassName;\n affixStyle = this.props.bottomStyle;\n } else {\n affixClassName = this.props.affixClassName;\n affixStyle = this.props.affixStyle;\n }\n\n return _react2.default.cloneElement(child, {\n className: (0, _classnames2.default)(affixClassName, className),\n style: _extends({}, positionStyle, affixStyle, style)\n });\n };\n\n return Affix;\n}(_react2.default.Component);\n\nAffix.propTypes = {\n /**\n * Pixels to offset from top of screen when calculating position\n */\n offsetTop: _propTypes2.default.number,\n\n /**\n * When affixed, pixels to offset from top of viewport\n */\n viewportOffsetTop: _propTypes2.default.number,\n\n /**\n * Pixels to offset from bottom of screen when calculating position\n */\n offsetBottom: _propTypes2.default.number,\n\n /**\n * CSS class or classes to apply when at top\n */\n topClassName: _propTypes2.default.string,\n\n /**\n * Style to apply when at top\n */\n topStyle: _propTypes2.default.object,\n\n /**\n * CSS class or classes to apply when affixed\n */\n affixClassName: _propTypes2.default.string,\n\n /**\n * Style to apply when affixed\n */\n affixStyle: _propTypes2.default.object,\n\n /**\n * CSS class or classes to apply when at bottom\n */\n bottomClassName: _propTypes2.default.string,\n\n /**\n * Style to apply when at bottom\n */\n bottomStyle: _propTypes2.default.object,\n\n /**\n * Callback fired right before the `affixStyle` and `affixClassName` props are rendered\n */\n onAffix: _propTypes2.default.func,\n\n /**\n * Callback fired after the component `affixStyle` and `affixClassName` props have been rendered\n */\n onAffixed: _propTypes2.default.func,\n\n /**\n * Callback fired right before the `topStyle` and `topClassName` props are rendered\n */\n onAffixTop: _propTypes2.default.func,\n\n /**\n * Callback fired after the component `topStyle` and `topClassName` props have been rendered\n */\n onAffixedTop: _propTypes2.default.func,\n\n /**\n * Callback fired right before the `bottomStyle` and `bottomClassName` props are rendered\n */\n onAffixBottom: _propTypes2.default.func,\n\n /**\n * Callback fired after the component `bottomStyle` and `bottomClassName` props have been rendered\n */\n onAffixedBottom: _propTypes2.default.func\n};\n\nAffix.defaultProps = {\n offsetTop: 0,\n viewportOffsetTop: null,\n offsetBottom: 0\n};\n\nexports.default = Affix;\nmodule.exports = exports['default'];","'use strict';\n\nexports.__esModule = true;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _offset = require('dom-helpers/query/offset');\n\nvar _offset2 = _interopRequireDefault(_offset);\n\nvar _requestAnimationFrame = require('dom-helpers/util/requestAnimationFrame');\n\nvar _requestAnimationFrame2 = _interopRequireDefault(_requestAnimationFrame);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _componentOrElement = require('prop-types-extra/lib/componentOrElement');\n\nvar _componentOrElement2 = _interopRequireDefault(_componentOrElement);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _Affix = require('./Affix');\n\nvar _Affix2 = _interopRequireDefault(_Affix);\n\nvar _addEventListener = require('./utils/addEventListener');\n\nvar _addEventListener2 = _interopRequireDefault(_addEventListener);\n\nvar _getContainer = require('./utils/getContainer');\n\nvar _getContainer2 = _interopRequireDefault(_getContainer);\n\nvar _getDocumentHeight = require('./utils/getDocumentHeight');\n\nvar _getDocumentHeight2 = _interopRequireDefault(_getDocumentHeight);\n\nvar _ownerDocument = require('./utils/ownerDocument');\n\nvar _ownerDocument2 = _interopRequireDefault(_ownerDocument);\n\nvar _ownerWindow = require('./utils/ownerWindow');\n\nvar _ownerWindow2 = _interopRequireDefault(_ownerWindow);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar displayName = 'AutoAffix';\n\nvar propTypes = _extends({}, _Affix2.default.propTypes, {\n /**\n * The logical container node or component for determining offset from bottom\n * of viewport, or a function that returns it\n */\n container: _propTypes2.default.oneOfType([_componentOrElement2.default, _propTypes2.default.func]),\n /**\n * Automatically set width when affixed\n */\n autoWidth: _propTypes2.default.bool\n});\n\n// This intentionally doesn't inherit default props from `<Affix>`, so that the\n// auto-calculated offsets can apply.\nvar defaultProps = {\n viewportOffsetTop: 0,\n autoWidth: true\n};\n\n/**\n * The `<AutoAffix/>` component wraps `<Affix/>` to automatically calculate\n * offsets in many common cases.\n */\n\nvar AutoAffix = function (_React$Component) {\n _inherits(AutoAffix, _React$Component);\n\n function AutoAffix(props, context) {\n _classCallCheck(this, AutoAffix);\n\n var _this = _possibleConstructorReturn(this, _React$Component.call(this, props, context));\n\n _this.onWindowScroll = function () {\n _this.onUpdate();\n };\n\n _this.onWindowResize = function () {\n if (_this.props.autoWidth) {\n (0, _requestAnimationFrame2.default)(function () {\n return _this.onUpdate();\n });\n }\n };\n\n _this.onDocumentClick = function () {\n (0, _requestAnimationFrame2.default)(function () {\n return _this.onUpdate();\n });\n };\n\n _this.onUpdate = function () {\n if (!_this._isMounted) {\n return;\n }\n\n var _getOffset = (0, _offset2.default)(_this.positioner),\n offsetTop = _getOffset.top,\n width = _getOffset.width;\n\n var container = (0, _getContainer2.default)(_this.props.container);\n var offsetBottom = void 0;\n if (container) {\n var documentHeight = (0, _getDocumentHeight2.default)((0, _ownerDocument2.default)(_this));\n\n var _getOffset2 = (0, _offset2.default)(container),\n top = _getOffset2.top,\n height = _getOffset2.height;\n\n offsetBottom = documentHeight - top - height;\n } else {\n offsetBottom = null;\n }\n\n _this.updateState(offsetTop, offsetBottom, width);\n };\n\n _this.updateState = function (offsetTop, offsetBottom, width) {\n if (offsetTop === _this.state.offsetTop && offsetBottom === _this.state.offsetBottom && width === _this.state.width) {\n return;\n }\n\n _this.setState({ offsetTop: offsetTop, offsetBottom: offsetBottom, width: width });\n };\n\n _this.state = {\n offsetTop: null,\n offsetBottom: null,\n width: null\n };\n return _this;\n }\n\n AutoAffix.prototype.componentDidMount = function componentDidMount() {\n var _this2 = this;\n\n this._isMounted = true;\n\n this._windowScrollListener = (0, _addEventListener2.default)((0, _ownerWindow2.default)(this), 'scroll', function () {\n return _this2.onWindowScroll();\n });\n\n this._windowResizeListener = (0, _addEventListener2.default)((0, _ownerWindow2.default)(this), 'resize', function () {\n return _this2.onWindowResize();\n });\n\n this._documentClickListener = (0, _addEventListener2.default)((0, _ownerDocument2.default)(this), 'click', function () {\n return _this2.onDocumentClick();\n });\n\n this.onUpdate();\n };\n\n AutoAffix.prototype.UNSAFE_componentWillReceiveProps = function UNSAFE_componentWillReceiveProps() {\n this._needPositionUpdate = true;\n };\n\n AutoAffix.prototype.componentDidUpdate = function componentDidUpdate() {\n if (this._needPositionUpdate) {\n this._needPositionUpdate = false;\n this.onUpdate();\n }\n };\n\n AutoAffix.prototype.componentWillUnmount = function componentWillUnmount() {\n this._isMounted = false;\n\n if (this._windowScrollListener) {\n this._windowScrollListener.remove();\n }\n if (this._documentClickListener) {\n this._documentClickListener.remove();\n }\n if (this._windowResizeListener) {\n this._windowResizeListener.remove();\n }\n };\n\n AutoAffix.prototype.render = function render() {\n var _this3 = this;\n\n var _props = this.props,\n autoWidth = _props.autoWidth,\n viewportOffsetTop = _props.viewportOffsetTop,\n children = _props.children,\n props = _objectWithoutProperties(_props, ['autoWidth', 'viewportOffsetTop', 'children']);\n\n var _state = this.state,\n offsetTop = _state.offsetTop,\n offsetBottom = _state.offsetBottom,\n width = _state.width;\n\n\n delete props.container;\n\n var effectiveOffsetTop = Math.max(offsetTop, viewportOffsetTop || 0);\n\n var _props2 = this.props,\n affixStyle = _props2.affixStyle,\n bottomStyle = _props2.bottomStyle;\n\n if (autoWidth) {\n affixStyle = _extends({ width: width }, affixStyle);\n bottomStyle = _extends({ width: width }, bottomStyle);\n }\n\n return _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement('div', { ref: function ref(c) {\n _this3.positioner = c;\n } }),\n _react2.default.createElement(\n _Affix2.default,\n _extends({}, props, {\n offsetTop: effectiveOffsetTop,\n viewportOffsetTop: viewportOffsetTop,\n offsetBottom: offsetBottom,\n affixStyle: affixStyle,\n bottomStyle: bottomStyle\n }),\n children\n )\n );\n };\n\n return AutoAffix;\n}(_react2.default.Component);\n\nAutoAffix.displayName = displayName;\nAutoAffix.propTypes = propTypes;\nAutoAffix.defaultProps = defaultProps;\n\nexports.default = AutoAffix;\nmodule.exports = exports['default'];","'use strict';\n\nexports.__esModule = true;\nexports.RootCloseWrapper = exports.Position = exports.Portal = exports.Overlay = exports.Modal = exports.AutoAffix = exports.Affix = undefined;\n\nvar _Affix2 = require('./Affix');\n\nvar _Affix3 = _interopRequireDefault(_Affix2);\n\nvar _AutoAffix2 = require('./AutoAffix');\n\nvar _AutoAffix3 = _interopRequireDefault(_AutoAffix2);\n\nvar _Modal2 = require('./Modal');\n\nvar _Modal3 = _interopRequireDefault(_Modal2);\n\nvar _Overlay2 = require('./Overlay');\n\nvar _Overlay3 = _interopRequireDefault(_Overlay2);\n\nvar _Portal2 = require('./Portal');\n\nvar _Portal3 = _interopRequireDefault(_Portal2);\n\nvar _Position2 = require('./Position');\n\nvar _Position3 = _interopRequireDefault(_Position2);\n\nvar _RootCloseWrapper2 = require('./RootCloseWrapper');\n\nvar _RootCloseWrapper3 = _interopRequireDefault(_RootCloseWrapper2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.Affix = _Affix3.default;\nexports.AutoAffix = _AutoAffix3.default;\nexports.Modal = _Modal3.default;\nexports.Overlay = _Overlay3.default;\nexports.Portal = _Portal3.default;\nexports.Position = _Position3.default;\nexports.RootCloseWrapper = _RootCloseWrapper3.default;","\"use strict\";\n\nexports.__esModule = true;\n\nexports.default = function (doc) {\n return Math.max(doc.documentElement.offsetHeight || 0, doc.height || 0, doc.body.scrollHeight || 0, doc.body.offsetHeight || 0);\n};\n\nmodule.exports = exports[\"default\"]; /**\n * Get the height of the document\n *\n * @returns {documentHeight: number}\n */","'use strict';\n\nexports.__esModule = true;\n\nexports.default = function (componentOrElement) {\n return (0, _ownerWindow2.default)(_reactDom2.default.findDOMNode(componentOrElement));\n};\n\nvar _reactDom = require('react-dom');\n\nvar _reactDom2 = _interopRequireDefault(_reactDom);\n\nvar _ownerWindow = require('dom-helpers/ownerWindow');\n\nvar _ownerWindow2 = _interopRequireDefault(_ownerWindow);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nmodule.exports = exports['default'];"],"names":["NewChannelWithBoardTourTip","_ref","pulsatingDotPlacement","pulsatingDotTranslate","dispatch","useDispatch","showTip","useSelector","showNewChannelWithBoardPulsatingDot","title","React","FormattedMessage","id","defaultMessage","screen","tipOpened","setTipOpened","useState","handleDismiss","useCallback","e","stopPropagation","setNewChannelWithBoardPreference","Preferences","NEW_CHANNEL_WITH_BOARD_TOUR_SHOWED","handleOpen","preventDefault","overlayPunchOut","useMeasurePunchouts","y","height","x","width","TourTip","show","placement","step","singleTip","showOptOut","interactivePunchOut","handlePrevious","offset","propTypes","_pt","isRequired","HeaderIconWrapper","props","ariaLabelOverride","buttonClass","buttonId","children","onClick","tooltip","tooltipText","tooltipShortcut","isRhsOpen","pluginId","boardsEnabled","suitePluginIds","focalboard","ariaLabelText","WithTooltip","shortcut","className","connect","state","currentChannel","getCurrentChannel","pluginCallComponents","plugins","components","CallButton","channelMember","getMyCurrentChannelMembership","sidebarOpen","views","rhs","isSidebarOpen","active","setActive","clickEnabled","setClickEnabled","prevSidebarOpen","useRef","formatMessage","useIntl","useEffect","current","setTimeout","Constants","CHANNEL_HEADER_BUTTON_DISABLE_TIMEOUT","length","style","container","marginTop","item","clickHandler","_item$action","action","call","undefined","onTouchEnd","button","items","map","key","_item$action2","dropdownButton","MenuWrapper","onToggle","toggle","classNames","PhoneOutlineIcon","color","toLowerCase","ChevronDownIcon","Menu","ariaLabel","customStyles","top","left","right","PluginChannelHeaderIcon","viewBox","version","role","d","CustomMenu","constructor","arguments","_defineProperty","this","onClose","render","open","rootCloseEvent","RootCloseWrapper","disabled","onRootClose","handleRootClose","event","bsRole","CustomToggle","activeClass","dropdownOpen","type","handleClick","ChannelHeaderPlug","super","setState","toggleDropdown","disableButtonsClosingRHS","channel","plug","_plug$tooltipText","tooltipToAriaLabelHack","intl","stringOrElement","value","dropdownText","fireAction","icon","async","context","createCallContext","binding","app_id","location","team_id","res","actions","handleBindingClick","error","errorResponse","errorMessage","text","postEphemeralCallResponseForChannel","callResp","data","AppCallResponseTypes","OK","NAVIGATE","FORM","form","openAppsModal","concat","onBindingClick","label","src","plugs","appBindings","componentItems","filter","href","fireActionAndClose","appsEnabled","Dropdown","componentDidUpdate","prevProps","shouldShowAppBar","componentButtons","createComponentButton","createAppBindingButton","createDropdown","injectIntl","apps","getChannelHeaderPluginComponents","getChannelHeaderAppBindings","appBarEnabled","theme","getTheme","bindActionCreators","TEXT_IN_HEADER_MARKDOWN_OPTIONS","singleline","TEXT_IN_POPOVER_MARKDOWN_OPTIONS","MENTION_MARKDOWN_OPTIONS","mentionHighlight","atMentions","IMAGE_MARKDOWN_OPTIONS","hideUtilities","TRANSITION_STYLE_PROPS","duration","OverlaysTimings","FADE_IN_DURATION","close","FADE_OUT_DURATION","initial","OverlayTransitionStyles","START","ChannelHeaderTextPopover","currentRelativeTeamUrl","getCurrentRelativeTeamUrl","rootElementRef","isTextOverflowing","elem","match","scrollWidth","clientWidth","scrollHeight","clientHeight","markdownOptions","useMemo","inHeader","_objectSpread","channelNamesMap","channelMentionsNameMap","inPopover","isPopoverOpen","setPopoverOpen","refs","setReference","setFloating","floatingStyles","floatingContext","useFloating","onOpenChange","whileElementsMounted","autoUpdate","middleware","isMounted","styles","transitionStyles","useTransitionStyles","hover","useHover","enabled","handleClose","safePolygon","requireIntent","blockPointerEvents","focus","useFocus","dismiss","useDismiss","click","useClick","useRole","getReferenceProps","getFloatingProps","useInteractions","rootRef","useMergeRefs","maxWidthOfPopover","getMaxWidthOfPopover","Object","assign","ref","Markdown","message","options","imageProps","FloatingPortal","RootHtmlPortalId","FloatingOverlay","lockScroll","maxWidth","handleFormattedTextClick","ChannelHeaderText","_props$dmUser$is_bot","_props$dmUser","_props$dmUser$bot_des","_props$dmUser2","_props$channel$header","_props$channel","isArchivedChannel","delete_at","isDirectChannel","DM_CHANNEL","isGroupChannel","GM_CHANNEL","isBotDMChannel","dmUser","is_bot","isPrivateChannel","PRIVATE_CHANNEL","headerText","bot_description","header","_props$channel2","_props$channel2$props","trim","isChannelNamesMap","channel_mentions","AddChannelHeaderTextButton","ChannelPermissionGate","channelId","teamId","permissions","Permissions","MANAGE_PRIVATE_CHANNEL_PROPERTIES","MANAGE_PUBLIC_CHANNEL_PROPERTIES","openModal","modalId","ModalIdentifiers","EDIT_CHANNEL_HEADER","dialogType","EditChannelHeaderModal","dialogProps","ChannelHeaderTitleDirect","_dmUser$roles","currentUser","getCurrentUser","teammateNameDisplaySetting","getTeammateNameDisplaySetting","displayName","displayUsername","values","isGuest","roles","GuestTag","memo","ChannelHeaderTitleFavorite","_channel$delete_at","isFavorite","isCurrentChannelFavorite","channelIsArchived","favIconRef","toggleFavoriteCallback","unfavoriteChannel","favoriteChannel","requestAnimationFrame","document","dispatchEvent","CustomEvent","A11yCustomEventTypes","FOCUS","detail","target","keyboardOnly","inactive","ChannelHeaderTitleGroup","gmMembers","membersMap","user","userDisplayName","push","displayNames","display_name","split","index","_user$roles","shift","ChannelHeaderTitle","titleMenuOpen","setTitleMenuOpen","showTooltip","setShowTooltip","headerItemRef","isRHSOpen","getIsRhsOpen","enableToolTipIfNeeded","handleResize","window","addEventListener","removeEventListener","element","isTooltip","offsetWidth","isDirect","isGroup","archivedIcon","ArchiveIcon","sharedIcon","shared","SharedChannelIndicator","withTooltip","channelTitle","ProfilePicture","Client4","getProfilePictureUrl","last_picture_update","size","BotTag","status","ChannelHeaderDropdown","Icon","styled","withConfig","rhsState","getRhsState","isChannelInfo","RHSStates","CHANNEL_INFO","CHANNEL_MEMBERS","CHANNEL_FILES","PIN","buttonActive","toggleRHS","closeRightHandSide","showChannelInfo","ChannelHeader","mark_unread","NotificationLevels","ALL","updateChannelNotifyProps","showPinnedPosts","showChannelFiles","showChannelMembers","_this$props$dmUser","customStatus","isCustomStatusEnabled","isCustomStatusExpired","isStatusSet","emoji","CustomStatusEmoji","userID","emojiStyle","verticalAlign","margin","CustomStatusText","toggleFavoriteRef","componentDidMount","getCustomEmojisInText","isChannelMuted","hasGuests","hideGuestTags","ariaLabelChannelHeader","hasGuestsText","tabIndex","isEmptyObject","dmHeaderTextStatus","renderCustomStatus","isLastActiveEnabled","lastActivityTimestamp","timestampUnits","timestamp","Timestamp","units","useTime","channelFilesIconClass","channelFilesIcon","pinnedIconClass","pinnedIcon","pinnedPostsCount","pinnedButton","muteTrigger","memberListButton","membersIconClass","membersIcon","memberCount","toggleChannelMembersRHS","unmute","isFileAttachmentsEnabled","ChannelInfoButton","connector","doGetProfilesInChannel","makeGetProfilesInChannel","getCustomStatus","makeGetCustomStatus","config","getConfig","General","dmUserId","getUserIdFromChannelName","name","getUser","getLastActivityForUserId","stats","getCurrentChannelStats","displayLastActiveLabel","getLastActiveTimestampUnits","getCurrentTeamId","member_count","isCurrentChannelMuted","guest_count","pinnedpost_count","HideGuestTags","withRouter","_interopRequireDefault","exports","__esModule","node","doc","_ownerDocument","default","defaultView","parentWindow","module","client","win","_isWindow","innerHeight","_offset","compatRaf","_inDOM","cancel","raf","fn","curr","Date","getTime","ms","Math","max","prev","req","getKey","vendor","k","toUpperCase","substr","some","rafKey","cb","_default","_extends","i","source","prototype","hasOwnProperty","_classnames2","_height2","_offset2","_offsetParent2","_scrollTop2","_requestAnimationFrame2","_propTypes2","_react2","_reactDom2","_addEventListener2","_getDocumentHeight2","_ownerDocument2","_ownerWindow2","obj","Affix","_React$Component","instance","Constructor","TypeError","_classCallCheck","_this","self","ReferenceError","_possibleConstructorReturn","onWindowScroll","onUpdate","onDocumentClick","_isMounted","_this$props","offsetTop","viewportOffsetTop","positionTopMin","updateState","getPositionTopMax","affixed","updateStateAtBottom","position","findDOMNode","offsetBottom","upperName","charAt","positionTopMax","offsetParent","parentTop","_needPositionUpdate","subClass","superClass","create","enumerable","writable","configurable","setPrototypeOf","__proto__","_inherits","_this2","_windowScrollListener","_documentClickListener","UNSAFE_componentWillReceiveProps","componentWillUnmount","remove","child","Children","only","_child$props","_state","positionStyle","affixClassName","affixStyle","topClassName","topStyle","bottomClassName","bottomStyle","cloneElement","Component","number","string","object","onAffix","func","onAffixed","onAffixTop","onAffixedTop","onAffixBottom","onAffixedBottom","defaultProps","_componentOrElement2","_Affix2","_getContainer2","oneOfType","autoWidth","bool","AutoAffix","onWindowResize","_getOffset","positioner","documentHeight","_getOffset2","_windowResizeListener","_this3","_props","keys","indexOf","_objectWithoutProperties","effectiveOffsetTop","_props2","createElement","c","_Affix3","_AutoAffix3","_Modal3","_Overlay3","_Portal3","_Position3","_RootCloseWrapper3","documentElement","offsetHeight","body","componentOrElement"],"sourceRoot":""}