{"version":3,"sources":["webpack:///./app/javascript/material-icons/400-24px/bookmark-fill.svg?4516","webpack:///./app/javascript/mastodon/features/status/components/action_bar.jsx","webpack:///./app/javascript/mastodon/components/edited_timestamp/containers/dropdown_menu_container.js","webpack:///./app/javascript/mastodon/components/edited_timestamp/index.jsx","webpack:///./app/javascript/mastodon/features/status/components/detailed_status.jsx","webpack:///./app/javascript/mastodon/features/status/index.jsx"],"names":["_path","_extends","Object","assign","bind","n","e","arguments","length","t","r","hasOwnProperty","call","apply","_ref","title","titleId","props","xmlns","height","viewBox","width","id","d","messages","defineMessages","delete","defaultMessage","redraft","edit","direct","mention","reply","reblog","reblog_private","cancel_reblog_private","cannot_reblog","favourite","bookmark","more","mute","muteConversation","unmuteConversation","block","report","share","pin","unpin","embed","admin_account","admin_status","admin_domain","copy","blockDomain","unblockDomain","unmute","unblock","openOriginalPage","ActionBar","PureComponent","constructor","_defineProperty","this","onReply","status","onReblog","onFavourite","onBookmark","onDelete","history","onEdit","onDirect","get","onMention","relationship","onMute","onUnmute","account","onBlock","onUnblock","onBlockDomain","onUnblockDomain","split","onMuteConversation","onReport","onPin","navigator","url","onEmbed","clipboard","writeText","render","intl","signedIn","permissions","identity","publicStatus","includes","pinnableStatus","mutingConversation","writtenByMe","getIn","me","isRemote","replyIcon","replyIconComponent","menu","push","text","formatMessage","href","action","handleCopy","handleShare","handleEmbed","handlePinClick","handleConversationMuteClick","handleEditClick","handleDeleteClick","dangerous","handleRedraftClick","name","handleMentionClick","handleMuteClick","handleBlockClick","handleReport","domain","handleUnblockDomain","handleBlockDomain","PERMISSION_MANAGE_USERS","PERMISSION_MANAGE_FEDERATION","concat","ReplyIcon","ReplyAllIcon","reblogPrivate","reblogTitle","reblogIconComponent","RepeatActiveIcon","RepeatPrivateActiveIcon","RepeatIcon","RepeatPrivateIcon","RepeatDisabledIcon","_jsx","className","IconButton","icon","iconComponent","onClick","handleReplyClick","classNames","disabled","active","handleReblogClick","animate","StarIcon","StarBorderIcon","handleFavouriteClick","BookmarkIcon","BookmarkBorderIcon","handleBookmarkClick","DropdownMenuContainer","MoreHorizIcon","items","direction","withRouter","connect","mapStateToProps","state","withIdentity","injectIntl","statusId","openDropdownId","dropdownMenu","openId","openedViaKeyboard","keyboard","loading","mapDispatchToProps","dispatch","_ref2","onOpen","onItemClick","fetchHistory","openDropdownMenu","onClose","closeDropdownMenu","DropdownMenu","EditedTimestamp","item","i","FormattedMessage","values","count","size","index","onKeyPress","formattedDate","RelativeTimestamp","timestamp","short","formattedName","InlineAccount","accountId","label","date","renderItem","scrollable","renderHeader","handleItemClick","formatDate","month","day","hour","minute","openModal","modalType","modalProps","DetailedStatus","ImmutablePureComponent","button","ctrlKey","metaKey","preventDefault","stopPropagation","options","onOpenVideo","onToggleHidden","c","node","_measureHeight","target","nodeName","parentNode","window","open","onTranslate","heightJustChanged","measureHeight","scheduleIdleTask","setState","Math","ceil","scrollHeight","onHeightChange","componentDidUpdate","prevProps","prevState","_properStatus","getAttachmentAspectRatio","attachments","outerStyle","boxSizing","compact","pictureInPicture","media","applicationLink","reblogLink","favouriteLink","language","PictureInPicturePlaceholder","aspectRatio","attachment","description","Audio","src","alt","lang","duration","poster","backgroundColor","foregroundColor","accentColor","sensitive","visible","showMedia","blurhash","onToggleVisibility","onToggleMediaVisibility","Video","preview","frameRate","handleOpenVideo","MediaGallery","standalone","onOpenMedia","Card","card","_jsxs","_Fragment","children","rel","visibilityLink","VisibilityIcon","visibility","Link","to","AnimatedNumber","value","handleModalLink","statusContentProps","hashtagBar","getHashtagBarForStatus","expanded","style","ref","setRef","Icon","AlternateEmailIcon","handleAccountClick","Avatar","DisplayName","localDomain","_jsx2","StatusContent","onExpandedToggle","handleExpandedToggle","handleTranslate","FormattedDate","Date","year","ImmutablePropTypes","map","PropTypes","func","isRequired","bool","string","contains","inUse","available","WithRouterPropTypes","deleteConfirm","deleteMessage","redraftConfirm","redraftMessage","revealAll","hideAll","statusTitleWithAttachments","detailedStatus","replyConfirm","replyMessage","blockDomainConfirm","titleFromStatus","displayName","username","user","trim","attachmentCount","truncate","str","num","arr","Array","from","slice","join","Status","_this","fullscreen","defaultMediaVisibility","loadedStatusId","undefined","unfavourite","type","askReplyConfirmation","message","confirm","onConfirm","replyCompose","privacy","unreblog","shiftKey","boostModal","handleModalReblog","unbookmark","withRedraft","deleteModal","deleteStatus","editStatus","router","directCompose","mentionCompose","startTime","handleOpenMedia","initMuteModal","unmuteStatus","muteStatus","revealStatus","hideStatus","ancestorsIds","descendantsIds","statusIds","toJS","undoStatusTranslation","translateStatus","initBlockModal","initReport","unmuteAccount","unblockAccount","initDomainBlockModal","handleMoveUp","handleMoveDown","handleToggleHidden","handleToggleMediaVisibility","_selectChild","indexOf","statusNode","isFullscreen","prevRouterProps","_ref3","_location$state","_prevRouterProps$loca","location","mastodonModalKey","offsetTop","UNSAFE_componentWillMount","fetchStatus","params","componentDidMount","attachFullscreenListener","onFullScreenChange","_scrollStatusIntoView","UNSAFE_componentWillReceiveProps","nextProps","align_top","container","element","querySelectorAll","scrollTop","scrollIntoView","clientHeight","offsetHeight","focus","renderChildren","list","ancestors","StatusContainer","onMoveUp","onMoveDown","contextType","previousId","nextId","rootId","multiColumn","requestIdleCallback","_this$statusNode","_document$querySelect","offset","document","querySelector","getBoundingClientRect","bottom","scrollingElement","body","scrollBy","_prevProps$status","componentWillUnmount","detachFullscreenListener","descendants","isLoading","Column","LoadingIndicator","BundleColumnError","errorType","isLocal","isIndexable","handlers","moveUp","handleHotkeyMoveUp","moveDown","handleHotkeyMoveDown","handleHotkeyReply","handleHotkeyFavourite","boost","handleHotkeyBoost","handleHotkeyMention","openProfile","handleHotkeyOpenProfile","toggleHidden","handleHotkeyToggleHidden","toggleSensitive","handleHotkeyToggleSensitive","openMedia","handleHotkeyOpenMedia","bindToDocument","ColumnHeader","showBackButton","extraButton","handleToggleAll","VisibilityOffIcon","ScrollContainer","scrollKey","shouldUpdateScroll","setContainerRef","HotKeys","tabIndex","textForScreenReader","setStatusRef","handleDirectClick","handleUnmuteClick","handleUnblockClick","handleBlockDomainClick","handleUnblockDomainClick","handlePin","Helmet","content","identityContextPropShape","object","makeMapStateToProps","getStatus","makeGetStatus","getPictureInPicture","makeGetPictureInPicture","getAncestorsIds","createSelector","_","inReplyTos","Immutable","List","withMutations","mutable","unshift","getDescendantsIds","contextReplies","statuses","ids","pop","replies","reverse","forEach","insertAt","findIndex","idx","splice"],"mappings":"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","file":"js/features/status-2335f87dd0546e5ce815.chunk.js","sourcesContent":["var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nfunction SvgBookmarkFill(_ref) {\n  let {\n    title,\n    titleId,\n    ...props\n  } = _ref;\n  return /*#__PURE__*/React.createElement(\"svg\", _extends({\n    xmlns: \"http://www.w3.org/2000/svg\",\n    height: 24,\n    viewBox: \"0 -960 960 960\",\n    width: 24,\n    \"aria-labelledby\": titleId\n  }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n    id: titleId\n  }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n    d: \"M200-120v-640q0-33 23.5-56.5T280-840h400q33 0 56.5 23.5T760-760v640L480-240 200-120Z\"\n  })));\n}\nexport default SvgBookmarkFill;","import PropTypes from 'prop-types';\nimport { PureComponent } from 'react';\n\nimport { defineMessages, injectIntl } from 'react-intl';\n\nimport classNames from 'classnames';\nimport { withRouter } from 'react-router-dom';\n\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport { connect } from 'react-redux';\n\nimport BookmarkIcon from '@/material-icons/400-24px/bookmark-fill.svg?react';\nimport BookmarkBorderIcon from '@/material-icons/400-24px/bookmark.svg?react';\nimport MoreHorizIcon from '@/material-icons/400-24px/more_horiz.svg?react';\nimport RepeatIcon from '@/material-icons/400-24px/repeat.svg?react';\nimport ReplyIcon from '@/material-icons/400-24px/reply.svg?react';\nimport ReplyAllIcon from '@/material-icons/400-24px/reply_all.svg?react';\nimport StarIcon from '@/material-icons/400-24px/star-fill.svg?react';\nimport StarBorderIcon from '@/material-icons/400-24px/star.svg?react';\nimport RepeatActiveIcon from '@/svg-icons/repeat_active.svg?react';\nimport RepeatDisabledIcon from '@/svg-icons/repeat_disabled.svg?react';\nimport RepeatPrivateIcon from '@/svg-icons/repeat_private.svg?react';\nimport RepeatPrivateActiveIcon from '@/svg-icons/repeat_private_active.svg?react';\nimport { identityContextPropShape, withIdentity } from 'mastodon/identity_context';\nimport { PERMISSION_MANAGE_USERS, PERMISSION_MANAGE_FEDERATION } from 'mastodon/permissions';\nimport { WithRouterPropTypes } from 'mastodon/utils/react_router';\n\nimport { IconButton } from '../../../components/icon_button';\nimport DropdownMenuContainer from '../../../containers/dropdown_menu_container';\nimport { me } from '../../../initial_state';\n\nconst messages = defineMessages({\n  delete: { id: 'status.delete', defaultMessage: 'Delete' },\n  redraft: { id: 'status.redraft', defaultMessage: 'Delete & re-draft' },\n  edit: { id: 'status.edit', defaultMessage: 'Edit' },\n  direct: { id: 'status.direct', defaultMessage: 'Privately mention @{name}' },\n  mention: { id: 'status.mention', defaultMessage: 'Mention @{name}' },\n  reply: { id: 'status.reply', defaultMessage: 'Reply' },\n  reblog: { id: 'status.reblog', defaultMessage: 'Boost' },\n  reblog_private: { id: 'status.reblog_private', defaultMessage: 'Boost with original visibility' },\n  cancel_reblog_private: { id: 'status.cancel_reblog_private', defaultMessage: 'Unboost' },\n  cannot_reblog: { id: 'status.cannot_reblog', defaultMessage: 'This post cannot be boosted' },\n  favourite: { id: 'status.favourite', defaultMessage: 'Favorite' },\n  bookmark: { id: 'status.bookmark', defaultMessage: 'Bookmark' },\n  more: { id: 'status.more', defaultMessage: 'More' },\n  mute: { id: 'status.mute', defaultMessage: 'Mute @{name}' },\n  muteConversation: { id: 'status.mute_conversation', defaultMessage: 'Mute conversation' },\n  unmuteConversation: { id: 'status.unmute_conversation', defaultMessage: 'Unmute conversation' },\n  block: { id: 'status.block', defaultMessage: 'Block @{name}' },\n  report: { id: 'status.report', defaultMessage: 'Report @{name}' },\n  share: { id: 'status.share', defaultMessage: 'Share' },\n  pin: { id: 'status.pin', defaultMessage: 'Pin on profile' },\n  unpin: { id: 'status.unpin', defaultMessage: 'Unpin from profile' },\n  embed: { id: 'status.embed', defaultMessage: 'Embed' },\n  admin_account: { id: 'status.admin_account', defaultMessage: 'Open moderation interface for @{name}' },\n  admin_status: { id: 'status.admin_status', defaultMessage: 'Open this post in the moderation interface' },\n  admin_domain: { id: 'status.admin_domain', defaultMessage: 'Open moderation interface for {domain}' },\n  copy: { id: 'status.copy', defaultMessage: 'Copy link to post' },\n  blockDomain: { id: 'account.block_domain', defaultMessage: 'Block domain {domain}' },\n  unblockDomain: { id: 'account.unblock_domain', defaultMessage: 'Unblock domain {domain}' },\n  unmute: { id: 'account.unmute', defaultMessage: 'Unmute @{name}' },\n  unblock: { id: 'account.unblock', defaultMessage: 'Unblock @{name}' },\n  openOriginalPage: { id: 'account.open_original_page', defaultMessage: 'Open original page' },\n});\n\nconst mapStateToProps = (state, { status }) => ({\n  relationship: state.getIn(['relationships', status.getIn(['account', 'id'])]),\n});\n\nclass ActionBar extends PureComponent {\n  static propTypes = {\n    identity: identityContextPropShape,\n    status: ImmutablePropTypes.map.isRequired,\n    relationship: ImmutablePropTypes.record,\n    onReply: PropTypes.func.isRequired,\n    onReblog: PropTypes.func.isRequired,\n    onFavourite: PropTypes.func.isRequired,\n    onBookmark: PropTypes.func.isRequired,\n    onDelete: PropTypes.func.isRequired,\n    onEdit: PropTypes.func.isRequired,\n    onDirect: PropTypes.func.isRequired,\n    onMention: PropTypes.func.isRequired,\n    onMute: PropTypes.func,\n    onUnmute: PropTypes.func,\n    onBlock: PropTypes.func,\n    onUnblock: PropTypes.func,\n    onBlockDomain: PropTypes.func,\n    onUnblockDomain: PropTypes.func,\n    onMuteConversation: PropTypes.func,\n    onReport: PropTypes.func,\n    onPin: PropTypes.func,\n    onEmbed: PropTypes.func,\n    intl: PropTypes.object.isRequired,\n    ...WithRouterPropTypes,\n  };\n\n  handleReplyClick = () => {\n    this.props.onReply(this.props.status);\n  };\n\n  handleReblogClick = (e) => {\n    this.props.onReblog(this.props.status, e);\n  };\n\n  handleFavouriteClick = () => {\n    this.props.onFavourite(this.props.status);\n  };\n\n  handleBookmarkClick = (e) => {\n    this.props.onBookmark(this.props.status, e);\n  };\n\n  handleDeleteClick = () => {\n    this.props.onDelete(this.props.status, this.props.history);\n  };\n\n  handleRedraftClick = () => {\n    this.props.onDelete(this.props.status, this.props.history, true);\n  };\n\n  handleEditClick = () => {\n    this.props.onEdit(this.props.status, this.props.history);\n  };\n\n  handleDirectClick = () => {\n    this.props.onDirect(this.props.status.get('account'), this.props.history);\n  };\n\n  handleMentionClick = () => {\n    this.props.onMention(this.props.status.get('account'), this.props.history);\n  };\n\n  handleMuteClick = () => {\n    const { status, relationship, onMute, onUnmute } = this.props;\n    const account = status.get('account');\n\n    if (relationship && relationship.get('muting')) {\n      onUnmute(account);\n    } else {\n      onMute(account);\n    }\n  };\n\n  handleBlockClick = () => {\n    const { status, relationship, onBlock, onUnblock } = this.props;\n    const account = status.get('account');\n\n    if (relationship && relationship.get('blocking')) {\n      onUnblock(account);\n    } else {\n      onBlock(status);\n    }\n  };\n\n  handleBlockDomain = () => {\n    const { status, onBlockDomain } = this.props;\n    const account = status.get('account');\n\n    onBlockDomain(account);\n  };\n\n  handleUnblockDomain = () => {\n    const { status, onUnblockDomain } = this.props;\n    const account = status.get('account');\n\n    onUnblockDomain(account.get('acct').split('@')[1]);\n  };\n\n  handleConversationMuteClick = () => {\n    this.props.onMuteConversation(this.props.status);\n  };\n\n  handleReport = () => {\n    this.props.onReport(this.props.status);\n  };\n\n  handlePinClick = () => {\n    this.props.onPin(this.props.status);\n  };\n\n  handleShare = () => {\n    navigator.share({\n      url: this.props.status.get('url'),\n    });\n  };\n\n  handleEmbed = () => {\n    this.props.onEmbed(this.props.status);\n  };\n\n  handleCopy = () => {\n    const url = this.props.status.get('url');\n    navigator.clipboard.writeText(url);\n  };\n\n  render () {\n    const { status, relationship, intl } = this.props;\n    const { signedIn, permissions } = this.props.identity;\n\n    const publicStatus       = ['public', 'unlisted'].includes(status.get('visibility'));\n    const pinnableStatus     = ['public', 'unlisted', 'private'].includes(status.get('visibility'));\n    const mutingConversation = status.get('muted');\n    const account            = status.get('account');\n    const writtenByMe        = status.getIn(['account', 'id']) === me;\n    const isRemote           = status.getIn(['account', 'username']) !== status.getIn(['account', 'acct']);\n\n    let menu = [];\n\n    if (publicStatus && isRemote) {\n      menu.push({ text: intl.formatMessage(messages.openOriginalPage), href: status.get('url') });\n    }\n\n    menu.push({ text: intl.formatMessage(messages.copy), action: this.handleCopy });\n\n    if (publicStatus && 'share' in navigator) {\n      menu.push({ text: intl.formatMessage(messages.share), action: this.handleShare });\n    }\n\n    if (publicStatus && (signedIn || !isRemote)) {\n      menu.push({ text: intl.formatMessage(messages.embed), action: this.handleEmbed });\n    }\n\n    if (signedIn) {\n      menu.push(null);\n\n      if (writtenByMe) {\n        if (pinnableStatus) {\n          menu.push({ text: intl.formatMessage(status.get('pinned') ? messages.unpin : messages.pin), action: this.handlePinClick });\n          menu.push(null);\n        }\n\n        menu.push({ text: intl.formatMessage(mutingConversation ? messages.unmuteConversation : messages.muteConversation), action: this.handleConversationMuteClick });\n        menu.push(null);\n        menu.push({ text: intl.formatMessage(messages.edit), action: this.handleEditClick });\n        menu.push({ text: intl.formatMessage(messages.delete), action: this.handleDeleteClick, dangerous: true });\n        menu.push({ text: intl.formatMessage(messages.redraft), action: this.handleRedraftClick, dangerous: true });\n      } else {\n        menu.push({ text: intl.formatMessage(messages.mention, { name: status.getIn(['account', 'username']) }), action: this.handleMentionClick });\n        menu.push(null);\n\n        if (relationship && relationship.get('muting')) {\n          menu.push({ text: intl.formatMessage(messages.unmute, { name: account.get('username') }), action: this.handleMuteClick });\n        } else {\n          menu.push({ text: intl.formatMessage(messages.mute, { name: account.get('username') }), action: this.handleMuteClick, dangerous: true });\n        }\n\n        if (relationship && relationship.get('blocking')) {\n          menu.push({ text: intl.formatMessage(messages.unblock, { name: account.get('username') }), action: this.handleBlockClick });\n        } else {\n          menu.push({ text: intl.formatMessage(messages.block, { name: account.get('username') }), action: this.handleBlockClick, dangerous: true });\n        }\n\n        menu.push({ text: intl.formatMessage(messages.report, { name: status.getIn(['account', 'username']) }), action: this.handleReport, dangerous: true });\n\n        if (account.get('acct') !== account.get('username')) {\n          const domain = account.get('acct').split('@')[1];\n\n          menu.push(null);\n\n          if (relationship && relationship.get('domain_blocking')) {\n            menu.push({ text: intl.formatMessage(messages.unblockDomain, { domain }), action: this.handleUnblockDomain });\n          } else {\n            menu.push({ text: intl.formatMessage(messages.blockDomain, { domain }), action: this.handleBlockDomain, dangerous: true });\n          }\n        }\n\n        if ((permissions & PERMISSION_MANAGE_USERS) === PERMISSION_MANAGE_USERS || (isRemote && (permissions & PERMISSION_MANAGE_FEDERATION) === PERMISSION_MANAGE_FEDERATION)) {\n          menu.push(null);\n          if ((permissions & PERMISSION_MANAGE_USERS) === PERMISSION_MANAGE_USERS) {\n            menu.push({ text: intl.formatMessage(messages.admin_account, { name: status.getIn(['account', 'username']) }), href: `/admin/accounts/${status.getIn(['account', 'id'])}` });\n            menu.push({ text: intl.formatMessage(messages.admin_status), href: `/admin/accounts/${status.getIn(['account', 'id'])}/statuses/${status.get('id')}` });\n          }\n          if (isRemote && (permissions & PERMISSION_MANAGE_FEDERATION) === PERMISSION_MANAGE_FEDERATION) {\n            const domain = account.get('acct').split('@')[1];\n            menu.push({ text: intl.formatMessage(messages.admin_domain, { domain: domain }), href: `/admin/instances/${domain}` });\n          }\n        }\n      }\n    }\n\n    let replyIcon;\n    let replyIconComponent;\n\n    if (status.get('in_reply_to_id', null) === null) {\n      replyIcon = 'reply';\n      replyIconComponent = ReplyIcon;\n    } else {\n      replyIcon = 'reply-all';\n      replyIconComponent = ReplyAllIcon;\n    }\n\n    const reblogPrivate = status.getIn(['account', 'id']) === me && status.get('visibility') === 'private';\n\n    let reblogTitle, reblogIconComponent;\n\n    if (status.get('reblogged')) {\n      reblogTitle = intl.formatMessage(messages.cancel_reblog_private);\n      reblogIconComponent = publicStatus ? RepeatActiveIcon : RepeatPrivateActiveIcon;\n    } else if (publicStatus) {\n      reblogTitle = intl.formatMessage(messages.reblog);\n      reblogIconComponent = RepeatIcon;\n    } else if (reblogPrivate) {\n      reblogTitle = intl.formatMessage(messages.reblog_private);\n      reblogIconComponent = RepeatPrivateIcon;\n    } else {\n      reblogTitle = intl.formatMessage(messages.cannot_reblog);\n      reblogIconComponent = RepeatDisabledIcon;\n    }\n\n    return (\n      <div className='detailed-status__action-bar'>\n        <div className='detailed-status__button'><IconButton title={intl.formatMessage(messages.reply)} icon={status.get('in_reply_to_account_id') === status.getIn(['account', 'id']) ? 'reply' : replyIcon} iconComponent={status.get('in_reply_to_account_id') === status.getIn(['account', 'id']) ? ReplyIcon : replyIconComponent}  onClick={this.handleReplyClick} /></div>\n        <div className='detailed-status__button'><IconButton className={classNames({ reblogPrivate })} disabled={!publicStatus && !reblogPrivate} active={status.get('reblogged')} title={reblogTitle} icon='retweet' iconComponent={reblogIconComponent} onClick={this.handleReblogClick} /></div>\n        <div className='detailed-status__button'><IconButton className='star-icon' animate active={status.get('favourited')} title={intl.formatMessage(messages.favourite)} icon='star' iconComponent={status.get('favourited') ? StarIcon : StarBorderIcon} onClick={this.handleFavouriteClick} /></div>\n        <div className='detailed-status__button'><IconButton className='bookmark-icon' disabled={!signedIn} active={status.get('bookmarked')} title={intl.formatMessage(messages.bookmark)} icon='bookmark' iconComponent={status.get('bookmarked') ? BookmarkIcon : BookmarkBorderIcon} onClick={this.handleBookmarkClick} /></div>\n\n        <div className='detailed-status__action-bar-dropdown'>\n          <DropdownMenuContainer icon='ellipsis-h' iconComponent={MoreHorizIcon} status={status} items={menu} direction='left' title={intl.formatMessage(messages.more)} />\n        </div>\n      </div>\n    );\n  }\n\n}\n\nexport default withRouter(connect(mapStateToProps)(withIdentity(injectIntl(ActionBar))));\n","import { connect } from 'react-redux';\n\nimport { openDropdownMenu, closeDropdownMenu } from 'mastodon/actions/dropdown_menu';\nimport { fetchHistory } from 'mastodon/actions/history';\nimport DropdownMenu from 'mastodon/components/dropdown_menu';\n\n/**\n *\n * @param {import('mastodon/store').RootState} state\n * @param {*} props\n */\nconst mapStateToProps = (state, { statusId }) => ({\n  openDropdownId: state.dropdownMenu.openId,\n  openedViaKeyboard: state.dropdownMenu.keyboard,\n  items: state.getIn(['history', statusId, 'items']),\n  loading: state.getIn(['history', statusId, 'loading']),\n});\n\nconst mapDispatchToProps = (dispatch, { statusId }) => ({\n\n  onOpen (id, onItemClick, keyboard) {\n    dispatch(fetchHistory(statusId));\n    dispatch(openDropdownMenu({ id, keyboard }));\n  },\n\n  onClose (id) {\n    dispatch(closeDropdownMenu({ id }));\n  },\n\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(DropdownMenu);\n","import PropTypes from 'prop-types';\nimport { PureComponent } from 'react';\n\nimport { FormattedMessage, injectIntl } from 'react-intl';\n\nimport { connect } from 'react-redux';\n\nimport { openModal } from 'mastodon/actions/modal';\nimport InlineAccount from 'mastodon/components/inline_account';\nimport { RelativeTimestamp } from 'mastodon/components/relative_timestamp';\n\nimport DropdownMenu from './containers/dropdown_menu_container';\n\nconst mapDispatchToProps = (dispatch, { statusId }) => ({\n\n  onItemClick (index) {\n    dispatch(openModal({\n      modalType: 'COMPARE_HISTORY',\n      modalProps: { index, statusId },\n    }));\n  },\n\n});\n\nclass EditedTimestamp extends PureComponent {\n\n  static propTypes = {\n    statusId: PropTypes.string.isRequired,\n    timestamp: PropTypes.string.isRequired,\n    intl: PropTypes.object.isRequired,\n    onItemClick: PropTypes.func.isRequired,\n  };\n\n  handleItemClick = (item, i) => {\n    const { onItemClick } = this.props;\n    onItemClick(i);\n  };\n\n  renderHeader = items => {\n    return (\n      <FormattedMessage id='status.edited_x_times' defaultMessage='Edited {count, plural, one {# time} other {# times}}' values={{ count: items.size - 1 }} />\n    );\n  };\n\n  renderItem = (item, index, { onClick, onKeyPress }) => {\n    const formattedDate = <RelativeTimestamp timestamp={item.get('created_at')} short={false} />;\n    const formattedName = <InlineAccount accountId={item.get('account')} />;\n\n    const label = item.get('original') ? (\n      <FormattedMessage id='status.history.created' defaultMessage='{name} created {date}' values={{ name: formattedName, date: formattedDate }} />\n    ) : (\n      <FormattedMessage id='status.history.edited' defaultMessage='{name} edited {date}' values={{ name: formattedName, date: formattedDate }} />\n    );\n\n    return (\n      <li className='dropdown-menu__item edited-timestamp__history__item' key={item.get('created_at')}>\n        <button data-index={index} onClick={onClick} onKeyPress={onKeyPress}>{label}</button>\n      </li>\n    );\n  };\n\n  render () {\n    const { timestamp, intl, statusId } = this.props;\n\n    return (\n      <DropdownMenu statusId={statusId} renderItem={this.renderItem} scrollable renderHeader={this.renderHeader} onItemClick={this.handleItemClick}>\n        <button className='dropdown-menu__text-button'>\n          <FormattedMessage id='status.edited' defaultMessage='Edited {date}' values={{ date: <span className='animated-number'>{intl.formatDate(timestamp, { month: 'short', day: '2-digit', hour: '2-digit', minute: '2-digit' })}</span> }} />\n        </button>\n      </DropdownMenu>\n    );\n  }\n\n}\n\nexport default connect(null, mapDispatchToProps)(injectIntl(EditedTimestamp));\n","import PropTypes from 'prop-types';\n\nimport { FormattedDate, FormattedMessage } from 'react-intl';\n\nimport classNames from 'classnames';\nimport { Link, withRouter } from 'react-router-dom';\n\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\n\nimport AlternateEmailIcon from '@/material-icons/400-24px/alternate_email.svg?react';\nimport { AnimatedNumber } from 'mastodon/components/animated_number';\nimport EditedTimestamp from 'mastodon/components/edited_timestamp';\nimport { getHashtagBarForStatus } from 'mastodon/components/hashtag_bar';\nimport { Icon }  from 'mastodon/components/icon';\nimport PictureInPicturePlaceholder from 'mastodon/components/picture_in_picture_placeholder';\nimport { VisibilityIcon } from 'mastodon/components/visibility_icon';\nimport { WithRouterPropTypes } from 'mastodon/utils/react_router';\n\nimport { Avatar } from '../../../components/avatar';\nimport { DisplayName } from '../../../components/display_name';\nimport MediaGallery from '../../../components/media_gallery';\nimport StatusContent from '../../../components/status_content';\nimport Audio from '../../audio';\nimport scheduleIdleTask from '../../ui/util/schedule_idle_task';\nimport Video from '../../video';\n\nimport Card from './card';\n\nclass DetailedStatus extends ImmutablePureComponent {\n\n  static propTypes = {\n    status: ImmutablePropTypes.map,\n    onOpenMedia: PropTypes.func.isRequired,\n    onOpenVideo: PropTypes.func.isRequired,\n    onToggleHidden: PropTypes.func.isRequired,\n    onTranslate: PropTypes.func.isRequired,\n    measureHeight: PropTypes.bool,\n    onHeightChange: PropTypes.func,\n    domain: PropTypes.string.isRequired,\n    compact: PropTypes.bool,\n    showMedia: PropTypes.bool,\n    pictureInPicture: ImmutablePropTypes.contains({\n      inUse: PropTypes.bool,\n      available: PropTypes.bool,\n    }),\n    onToggleMediaVisibility: PropTypes.func,\n    ...WithRouterPropTypes,\n  };\n\n  state = {\n    height: null,\n  };\n\n  handleAccountClick = (e) => {\n    if (e.button === 0 && !(e.ctrlKey || e.metaKey) && this.props.history) {\n      e.preventDefault();\n      this.props.history.push(`/@${this.props.status.getIn(['account', 'acct'])}`);\n    }\n\n    e.stopPropagation();\n  };\n\n  handleOpenVideo = (options) => {\n    this.props.onOpenVideo(this.props.status.getIn(['media_attachments', 0]), options);\n  };\n\n  handleExpandedToggle = () => {\n    this.props.onToggleHidden(this.props.status);\n  };\n\n  _measureHeight (heightJustChanged) {\n    if (this.props.measureHeight && this.node) {\n      scheduleIdleTask(() => this.node && this.setState({ height: Math.ceil(this.node.scrollHeight) + 1 }));\n\n      if (this.props.onHeightChange && heightJustChanged) {\n        this.props.onHeightChange();\n      }\n    }\n  }\n\n  setRef = c => {\n    this.node = c;\n    this._measureHeight();\n  };\n\n  componentDidUpdate (prevProps, prevState) {\n    this._measureHeight(prevState.height !== this.state.height);\n  }\n\n  handleModalLink = e => {\n    e.preventDefault();\n\n    let href;\n\n    if (e.target.nodeName !== 'A') {\n      href = e.target.parentNode.href;\n    } else {\n      href = e.target.href;\n    }\n\n    window.open(href, 'mastodon-intent', 'width=445,height=600,resizable=no,menubar=no,status=no,scrollbars=yes');\n  };\n\n  handleTranslate = () => {\n    const { onTranslate, status } = this.props;\n    onTranslate(status);\n  };\n\n  _properStatus () {\n    const { status } = this.props;\n\n    if (status.get('reblog', null) !== null && typeof status.get('reblog') === 'object') {\n      return status.get('reblog');\n    } else {\n      return status;\n    }\n  }\n\n  getAttachmentAspectRatio () {\n    const attachments = this._properStatus().get('media_attachments');\n\n    if (attachments.getIn([0, 'type']) === 'video') {\n      return `${attachments.getIn([0, 'meta', 'original', 'width'])} / ${attachments.getIn([0, 'meta', 'original', 'height'])}`;\n    } else if (attachments.getIn([0, 'type']) === 'audio') {\n      return '16 / 9';\n    } else {\n      return (attachments.size === 1 && attachments.getIn([0, 'meta', 'small', 'aspect'])) ? attachments.getIn([0, 'meta', 'small', 'aspect']) : '3 / 2';\n    }\n  }\n\n  render () {\n    const status = this._properStatus();\n    const outerStyle = { boxSizing: 'border-box' };\n    const { compact, pictureInPicture } = this.props;\n\n    if (!status) {\n      return null;\n    }\n\n    let media           = '';\n    let applicationLink = '';\n    let reblogLink = '';\n    let favouriteLink = '';\n\n    if (this.props.measureHeight) {\n      outerStyle.height = `${this.state.height}px`;\n    }\n\n    const language = status.getIn(['translation', 'language']) || status.get('language');\n\n    if (pictureInPicture.get('inUse')) {\n      media = <PictureInPicturePlaceholder aspectRatio={this.getAttachmentAspectRatio()} />;\n    } else if (status.get('media_attachments').size > 0) {\n      if (status.getIn(['media_attachments', 0, 'type']) === 'audio') {\n        const attachment = status.getIn(['media_attachments', 0]);\n        const description = attachment.getIn(['translation', 'description']) || attachment.get('description');\n\n        media = (\n          <Audio\n            src={attachment.get('url')}\n            alt={description}\n            lang={language}\n            duration={attachment.getIn(['meta', 'original', 'duration'], 0)}\n            poster={attachment.get('preview_url') || status.getIn(['account', 'avatar_static'])}\n            backgroundColor={attachment.getIn(['meta', 'colors', 'background'])}\n            foregroundColor={attachment.getIn(['meta', 'colors', 'foreground'])}\n            accentColor={attachment.getIn(['meta', 'colors', 'accent'])}\n            sensitive={status.get('sensitive')}\n            visible={this.props.showMedia}\n            blurhash={attachment.get('blurhash')}\n            height={150}\n            onToggleVisibility={this.props.onToggleMediaVisibility}\n          />\n        );\n      } else if (status.getIn(['media_attachments', 0, 'type']) === 'video') {\n        const attachment = status.getIn(['media_attachments', 0]);\n        const description = attachment.getIn(['translation', 'description']) || attachment.get('description');\n\n        media = (\n          <Video\n            preview={attachment.get('preview_url')}\n            frameRate={attachment.getIn(['meta', 'original', 'frame_rate'])}\n            aspectRatio={`${attachment.getIn(['meta', 'original', 'width'])} / ${attachment.getIn(['meta', 'original', 'height'])}`}\n            blurhash={attachment.get('blurhash')}\n            src={attachment.get('url')}\n            alt={description}\n            lang={language}\n            width={300}\n            height={150}\n            onOpenVideo={this.handleOpenVideo}\n            sensitive={status.get('sensitive')}\n            visible={this.props.showMedia}\n            onToggleVisibility={this.props.onToggleMediaVisibility}\n          />\n        );\n      } else {\n        media = (\n          <MediaGallery\n            standalone\n            sensitive={status.get('sensitive')}\n            media={status.get('media_attachments')}\n            lang={language}\n            height={300}\n            onOpenMedia={this.props.onOpenMedia}\n            visible={this.props.showMedia}\n            onToggleVisibility={this.props.onToggleMediaVisibility}\n          />\n        );\n      }\n    } else if (status.get('spoiler_text').length === 0) {\n      media = <Card sensitive={status.get('sensitive')} onOpenMedia={this.props.onOpenMedia} card={status.get('card', null)} />;\n    }\n\n    if (status.get('application')) {\n      applicationLink = <>·<a className='detailed-status__application' href={status.getIn(['application', 'website'])} target='_blank' rel='noopener noreferrer'>{status.getIn(['application', 'name'])}</a></>;\n    }\n\n    const visibilityLink = <>·<VisibilityIcon visibility={status.get('visibility')} /></>;\n\n    if (['private', 'direct'].includes(status.get('visibility'))) {\n      reblogLink = '';\n    } else if (this.props.history) {\n      reblogLink = (\n        <Link to={`/@${status.getIn(['account', 'acct'])}/${status.get('id')}/reblogs`} className='detailed-status__link'>\n          <span className='detailed-status__reblogs'>\n            <AnimatedNumber value={status.get('reblogs_count')} />\n          </span>\n          <FormattedMessage id='status.reblogs' defaultMessage='{count, plural, one {boost} other {boosts}}' values={{ count: status.get('reblogs_count') }} />\n        </Link>\n      );\n    } else {\n      reblogLink = (\n        <a href={`/interact/${status.get('id')}?type=reblog`} className='detailed-status__link' onClick={this.handleModalLink}>\n          <span className='detailed-status__reblogs'>\n            <AnimatedNumber value={status.get('reblogs_count')} />\n          </span>\n          <FormattedMessage id='status.reblogs' defaultMessage='{count, plural, one {boost} other {boosts}}' values={{ count: status.get('reblogs_count') }} />\n        </a>\n      );\n    }\n\n    if (this.props.history) {\n      favouriteLink = (\n        <Link to={`/@${status.getIn(['account', 'acct'])}/${status.get('id')}/favourites`} className='detailed-status__link'>\n          <span className='detailed-status__favorites'>\n            <AnimatedNumber value={status.get('favourites_count')} />\n          </span>\n          <FormattedMessage id='status.favourites' defaultMessage='{count, plural, one {favorite} other {favorites}}' values={{ count: status.get('favourites_count') }} />\n        </Link>\n      );\n    } else {\n      favouriteLink = (\n        <a href={`/interact/${status.get('id')}?type=favourite`} className='detailed-status__link' onClick={this.handleModalLink}>\n          <span className='detailed-status__favorites'>\n            <AnimatedNumber value={status.get('favourites_count')} />\n          </span>\n          <FormattedMessage id='status.favourites' defaultMessage='{count, plural, one {favorite} other {favorites}}' values={{ count: status.get('favourites_count') }} />\n        </a>\n      );\n    }\n\n    const {statusContentProps, hashtagBar} = getHashtagBarForStatus(status);\n    const expanded = !status.get('hidden') || status.get('spoiler_text').length === 0;\n\n    return (\n      <div style={outerStyle}>\n        <div ref={this.setRef} className={classNames('detailed-status', { compact })}>\n          {status.get('visibility') === 'direct' && (\n            <div className='status__prepend'>\n              <div className='status__prepend-icon-wrapper'><Icon id='at' icon={AlternateEmailIcon} className='status__prepend-icon' /></div>\n              <FormattedMessage id='status.direct_indicator' defaultMessage='Private mention' />\n            </div>\n          )}\n          <a href={`/@${status.getIn(['account', 'acct'])}`} data-hover-card-account={status.getIn(['account', 'id'])} onClick={this.handleAccountClick} className='detailed-status__display-name'>\n            <div className='detailed-status__display-avatar'><Avatar account={status.get('account')} size={46} /></div>\n            <DisplayName account={status.get('account')} localDomain={this.props.domain} />\n          </a>\n\n          <StatusContent\n            status={status}\n            expanded={!status.get('hidden')}\n            onExpandedToggle={this.handleExpandedToggle}\n            onTranslate={this.handleTranslate}\n            {...statusContentProps}\n          />\n\n          {media}\n\n          {expanded && hashtagBar}\n\n          <div className='detailed-status__meta'>\n            <div className='detailed-status__meta__line'>\n              <a className='detailed-status__datetime' href={`/@${status.getIn(['account', 'acct'])}/${status.get('id')}`} target='_blank' rel='noopener noreferrer'>\n                <FormattedDate value={new Date(status.get('created_at'))} year='numeric' month='short' day='2-digit' hour='2-digit' minute='2-digit' />\n              </a>\n\n              {visibilityLink}\n\n              {applicationLink}\n            </div>\n\n            {status.get('edited_at') && <div className='detailed-status__meta__line'><EditedTimestamp statusId={status.get('id')} timestamp={status.get('edited_at')} /></div>}\n\n            <div className='detailed-status__meta__line'>\n              {reblogLink}\n              {reblogLink && <>·</>}\n              {favouriteLink}\n            </div>\n          </div>\n        </div>\n      </div>\n    );\n  }\n\n}\n\nexport default withRouter(DetailedStatus);\n","import PropTypes from 'prop-types';\n\nimport { defineMessages, injectIntl } from 'react-intl';\n\nimport classNames from 'classnames';\nimport { Helmet } from 'react-helmet';\nimport { withRouter } from 'react-router-dom';\n\nimport { createSelector } from '@reduxjs/toolkit';\nimport Immutable from 'immutable';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport { connect } from 'react-redux';\n\nimport { HotKeys } from 'react-hotkeys';\n\nimport VisibilityIcon from '@/material-icons/400-24px/visibility.svg?react';\nimport VisibilityOffIcon from '@/material-icons/400-24px/visibility_off.svg?react';\nimport { Icon }  from 'mastodon/components/icon';\nimport { LoadingIndicator } from 'mastodon/components/loading_indicator';\nimport ScrollContainer from 'mastodon/containers/scroll_container';\nimport BundleColumnError from 'mastodon/features/ui/components/bundle_column_error';\nimport { identityContextPropShape, withIdentity } from 'mastodon/identity_context';\nimport { WithRouterPropTypes } from 'mastodon/utils/react_router';\n\nimport {\n  unblockAccount,\n  unmuteAccount,\n} from '../../actions/accounts';\nimport { initBlockModal } from '../../actions/blocks';\nimport {\n  replyCompose,\n  mentionCompose,\n  directCompose,\n} from '../../actions/compose';\nimport {\n  initDomainBlockModal,\n  unblockDomain,\n} from '../../actions/domain_blocks';\nimport {\n  favourite,\n  unfavourite,\n  bookmark,\n  unbookmark,\n  reblog,\n  unreblog,\n  pin,\n  unpin,\n} from '../../actions/interactions';\nimport { openModal } from '../../actions/modal';\nimport { initMuteModal } from '../../actions/mutes';\nimport { initReport } from '../../actions/reports';\nimport {\n  fetchStatus,\n  muteStatus,\n  unmuteStatus,\n  deleteStatus,\n  editStatus,\n  hideStatus,\n  revealStatus,\n  translateStatus,\n  undoStatusTranslation,\n} from '../../actions/statuses';\nimport ColumnHeader from '../../components/column_header';\nimport { textForScreenReader, defaultMediaVisibility } from '../../components/status';\nimport StatusContainer from '../../containers/status_container';\nimport { boostModal, deleteModal } from '../../initial_state';\nimport { makeGetStatus, makeGetPictureInPicture } from '../../selectors';\nimport Column from '../ui/components/column';\nimport { attachFullscreenListener, detachFullscreenListener, isFullscreen } from '../ui/util/fullscreen';\n\nimport ActionBar from './components/action_bar';\nimport DetailedStatus from './components/detailed_status';\n\n\nconst messages = defineMessages({\n  deleteConfirm: { id: 'confirmations.delete.confirm', defaultMessage: 'Delete' },\n  deleteMessage: { id: 'confirmations.delete.message', defaultMessage: 'Are you sure you want to delete this status?' },\n  redraftConfirm: { id: 'confirmations.redraft.confirm', defaultMessage: 'Delete & redraft' },\n  redraftMessage: { id: 'confirmations.redraft.message', defaultMessage: 'Are you sure you want to delete this status and re-draft it? Favorites and boosts will be lost, and replies to the original post will be orphaned.' },\n  revealAll: { id: 'status.show_more_all', defaultMessage: 'Show more for all' },\n  hideAll: { id: 'status.show_less_all', defaultMessage: 'Show less for all' },\n  statusTitleWithAttachments: { id: 'status.title.with_attachments', defaultMessage: '{user} posted {attachmentCount, plural, one {an attachment} other {# attachments}}' },\n  detailedStatus: { id: 'status.detailed_status', defaultMessage: 'Detailed conversation view' },\n  replyConfirm: { id: 'confirmations.reply.confirm', defaultMessage: 'Reply' },\n  replyMessage: { id: 'confirmations.reply.message', defaultMessage: 'Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?' },\n  blockDomainConfirm: { id: 'confirmations.domain_block.confirm', defaultMessage: 'Block entire domain' },\n});\n\nconst makeMapStateToProps = () => {\n  const getStatus = makeGetStatus();\n  const getPictureInPicture = makeGetPictureInPicture();\n\n  const getAncestorsIds = createSelector([\n    (_, { id }) => id,\n    state => state.getIn(['contexts', 'inReplyTos']),\n  ], (statusId, inReplyTos) => {\n    let ancestorsIds = Immutable.List();\n    ancestorsIds = ancestorsIds.withMutations(mutable => {\n      let id = statusId;\n\n      while (id && !mutable.includes(id)) {\n        mutable.unshift(id);\n        id = inReplyTos.get(id);\n      }\n    });\n\n    return ancestorsIds;\n  });\n\n  const getDescendantsIds = createSelector([\n    (_, { id }) => id,\n    state => state.getIn(['contexts', 'replies']),\n    state => state.get('statuses'),\n  ], (statusId, contextReplies, statuses) => {\n    let descendantsIds = [];\n    const ids = [statusId];\n\n    while (ids.length > 0) {\n      let id        = ids.pop();\n      const replies = contextReplies.get(id);\n\n      if (statusId !== id) {\n        descendantsIds.push(id);\n      }\n\n      if (replies) {\n        replies.reverse().forEach(reply => {\n          if (!ids.includes(reply) && !descendantsIds.includes(reply) && statusId !== reply) ids.push(reply);\n        });\n      }\n    }\n\n    let insertAt = descendantsIds.findIndex((id) => statuses.get(id).get('in_reply_to_account_id') !== statuses.get(id).get('account'));\n    if (insertAt !== -1) {\n      descendantsIds.forEach((id, idx) => {\n        if (idx > insertAt && statuses.get(id).get('in_reply_to_account_id') === statuses.get(id).get('account')) {\n          descendantsIds.splice(idx, 1);\n          descendantsIds.splice(insertAt, 0, id);\n          insertAt += 1;\n        }\n      });\n    }\n\n    return Immutable.List(descendantsIds);\n  });\n\n  const mapStateToProps = (state, props) => {\n    const status = getStatus(state, { id: props.params.statusId });\n\n    let ancestorsIds   = Immutable.List();\n    let descendantsIds = Immutable.List();\n\n    if (status) {\n      ancestorsIds   = getAncestorsIds(state, { id: status.get('in_reply_to_id') });\n      descendantsIds = getDescendantsIds(state, { id: status.get('id') });\n    }\n\n    return {\n      isLoading: state.getIn(['statuses', props.params.statusId, 'isLoading']),\n      status,\n      ancestorsIds,\n      descendantsIds,\n      askReplyConfirmation: state.getIn(['compose', 'text']).trim().length !== 0,\n      domain: state.getIn(['meta', 'domain']),\n      pictureInPicture: getPictureInPicture(state, { id: props.params.statusId }),\n    };\n  };\n\n  return mapStateToProps;\n};\n\nconst truncate = (str, num) => {\n  const arr = Array.from(str);\n  if (arr.length > num) {\n    return arr.slice(0, num).join('') + '…';\n  } else {\n    return str;\n  }\n};\n\nconst titleFromStatus = (intl, status) => {\n  const displayName = status.getIn(['account', 'display_name']);\n  const username = status.getIn(['account', 'username']);\n  const user = displayName.trim().length === 0 ? username : displayName;\n  const text = status.get('search_index');\n  const attachmentCount = status.get('media_attachments').size;\n\n  return text ? `${user}: \"${truncate(text, 30)}\"` : intl.formatMessage(messages.statusTitleWithAttachments, { user, attachmentCount });\n};\n\nclass Status extends ImmutablePureComponent {\n  static propTypes = {\n    identity: identityContextPropShape,\n    params: PropTypes.object.isRequired,\n    dispatch: PropTypes.func.isRequired,\n    status: ImmutablePropTypes.map,\n    isLoading: PropTypes.bool,\n    ancestorsIds: ImmutablePropTypes.list.isRequired,\n    descendantsIds: ImmutablePropTypes.list.isRequired,\n    intl: PropTypes.object.isRequired,\n    askReplyConfirmation: PropTypes.bool,\n    multiColumn: PropTypes.bool,\n    domain: PropTypes.string.isRequired,\n    pictureInPicture: ImmutablePropTypes.contains({\n      inUse: PropTypes.bool,\n      available: PropTypes.bool,\n    }),\n    ...WithRouterPropTypes\n  };\n\n  state = {\n    fullscreen: false,\n    showMedia: defaultMediaVisibility(this.props.status),\n    loadedStatusId: undefined,\n  };\n\n  UNSAFE_componentWillMount () {\n    this.props.dispatch(fetchStatus(this.props.params.statusId));\n  }\n\n  componentDidMount () {\n    attachFullscreenListener(this.onFullScreenChange);\n\n    this._scrollStatusIntoView();\n  }\n\n  UNSAFE_componentWillReceiveProps (nextProps) {\n    if (nextProps.params.statusId !== this.props.params.statusId && nextProps.params.statusId) {\n      this.props.dispatch(fetchStatus(nextProps.params.statusId));\n    }\n\n    if (nextProps.status && nextProps.status.get('id') !== this.state.loadedStatusId) {\n      this.setState({ showMedia: defaultMediaVisibility(nextProps.status), loadedStatusId: nextProps.status.get('id') });\n    }\n  }\n\n  handleToggleMediaVisibility = () => {\n    this.setState({ showMedia: !this.state.showMedia });\n  };\n\n  handleFavouriteClick = (status) => {\n    const { dispatch } = this.props;\n    const { signedIn } = this.props.identity;\n\n    if (signedIn) {\n      if (status.get('favourited')) {\n        dispatch(unfavourite(status));\n      } else {\n        dispatch(favourite(status));\n      }\n    } else {\n      dispatch(openModal({\n        modalType: 'INTERACTION',\n        modalProps: {\n          type: 'favourite',\n          accountId: status.getIn(['account', 'id']),\n          url: status.get('uri'),\n        },\n      }));\n    }\n  };\n\n  handlePin = (status) => {\n    if (status.get('pinned')) {\n      this.props.dispatch(unpin(status));\n    } else {\n      this.props.dispatch(pin(status));\n    }\n  };\n\n  handleReplyClick = (status) => {\n    const { askReplyConfirmation, dispatch, intl } = this.props;\n    const { signedIn } = this.props.identity;\n\n    if (signedIn) {\n      if (askReplyConfirmation) {\n        dispatch(openModal({\n          modalType: 'CONFIRM',\n          modalProps: {\n            message: intl.formatMessage(messages.replyMessage),\n            confirm: intl.formatMessage(messages.replyConfirm),\n            onConfirm: () => dispatch(replyCompose(status, this.props.history)),\n          },\n        }));\n      } else {\n        dispatch(replyCompose(status, this.props.history));\n      }\n    } else {\n      dispatch(openModal({\n        modalType: 'INTERACTION',\n        modalProps: {\n          type: 'reply',\n          accountId: status.getIn(['account', 'id']),\n          url: status.get('uri'),\n        },\n      }));\n    }\n  };\n\n  handleModalReblog = (status, privacy) => {\n    this.props.dispatch(reblog({ statusId: status.get('id'), visibility: privacy }));\n  };\n\n  handleReblogClick = (status, e) => {\n    const { dispatch } = this.props;\n    const { signedIn } = this.props.identity;\n\n    if (signedIn) {\n      if (status.get('reblogged')) {\n        dispatch(unreblog({ statusId: status.get('id') }));\n      } else {\n        if ((e && e.shiftKey) || !boostModal) {\n          this.handleModalReblog(status);\n        } else {\n          dispatch(openModal({ modalType: 'BOOST', modalProps: { status, onReblog: this.handleModalReblog } }));\n        }\n      }\n    } else {\n      dispatch(openModal({\n        modalType: 'INTERACTION',\n        modalProps: {\n          type: 'reblog',\n          accountId: status.getIn(['account', 'id']),\n          url: status.get('uri'),\n        },\n      }));\n    }\n  };\n\n  handleBookmarkClick = (status) => {\n    if (status.get('bookmarked')) {\n      this.props.dispatch(unbookmark(status));\n    } else {\n      this.props.dispatch(bookmark(status));\n    }\n  };\n\n  handleDeleteClick = (status, history, withRedraft = false) => {\n    const { dispatch, intl } = this.props;\n\n    if (!deleteModal) {\n      dispatch(deleteStatus(status.get('id'), history, withRedraft));\n    } else {\n      dispatch(openModal({\n        modalType: 'CONFIRM',\n        modalProps: {\n          message: intl.formatMessage(withRedraft ? messages.redraftMessage : messages.deleteMessage),\n          confirm: intl.formatMessage(withRedraft ? messages.redraftConfirm : messages.deleteConfirm),\n          onConfirm: () => dispatch(deleteStatus(status.get('id'), history, withRedraft)),\n        },\n      }));\n    }\n  };\n\n  handleEditClick = (status, history) => {\n    this.props.dispatch(editStatus(status.get('id'), history));\n  };\n\n  handleDirectClick = (account, router) => {\n    this.props.dispatch(directCompose(account, router));\n  };\n\n  handleMentionClick = (account, router) => {\n    this.props.dispatch(mentionCompose(account, router));\n  };\n\n  handleOpenMedia = (media, index, lang) => {\n    this.props.dispatch(openModal({\n      modalType: 'MEDIA',\n      modalProps: { statusId: this.props.status.get('id'), media, index, lang },\n    }));\n  };\n\n  handleOpenVideo = (media, lang, options) => {\n    this.props.dispatch(openModal({\n      modalType: 'VIDEO',\n      modalProps: { statusId: this.props.status.get('id'), media, lang, options },\n    }));\n  };\n\n  handleHotkeyOpenMedia = e => {\n    const { status } = this.props;\n\n    e.preventDefault();\n\n    if (status.get('media_attachments').size > 0) {\n      if (status.getIn(['media_attachments', 0, 'type']) === 'video') {\n        this.handleOpenVideo(status.getIn(['media_attachments', 0]), { startTime: 0 });\n      } else {\n        this.handleOpenMedia(status.get('media_attachments'), 0);\n      }\n    }\n  };\n\n  handleMuteClick = (account) => {\n    this.props.dispatch(initMuteModal(account));\n  };\n\n  handleConversationMuteClick = (status) => {\n    if (status.get('muted')) {\n      this.props.dispatch(unmuteStatus(status.get('id')));\n    } else {\n      this.props.dispatch(muteStatus(status.get('id')));\n    }\n  };\n\n  handleToggleHidden = (status) => {\n    if (status.get('hidden')) {\n      this.props.dispatch(revealStatus(status.get('id')));\n    } else {\n      this.props.dispatch(hideStatus(status.get('id')));\n    }\n  };\n\n  handleToggleAll = () => {\n    const { status, ancestorsIds, descendantsIds } = this.props;\n    const statusIds = [status.get('id')].concat(ancestorsIds.toJS(), descendantsIds.toJS());\n\n    if (status.get('hidden')) {\n      this.props.dispatch(revealStatus(statusIds));\n    } else {\n      this.props.dispatch(hideStatus(statusIds));\n    }\n  };\n\n  handleTranslate = status => {\n    const { dispatch } = this.props;\n\n    if (status.get('translation')) {\n      dispatch(undoStatusTranslation(status.get('id'), status.get('poll')));\n    } else {\n      dispatch(translateStatus(status.get('id')));\n    }\n  };\n\n  handleBlockClick = (status) => {\n    const { dispatch } = this.props;\n    const account = status.get('account');\n    dispatch(initBlockModal(account));\n  };\n\n  handleReport = (status) => {\n    this.props.dispatch(initReport(status.get('account'), status));\n  };\n\n  handleEmbed = (status) => {\n    this.props.dispatch(openModal({\n      modalType: 'EMBED',\n      modalProps: { id: status.get('id') },\n    }));\n  };\n\n  handleUnmuteClick = account => {\n    this.props.dispatch(unmuteAccount(account.get('id')));\n  };\n\n  handleUnblockClick = account => {\n    this.props.dispatch(unblockAccount(account.get('id')));\n  };\n\n  handleBlockDomainClick = account => {\n    this.props.dispatch(initDomainBlockModal(account));\n  };\n\n  handleUnblockDomainClick = domain => {\n    this.props.dispatch(unblockDomain(domain));\n  };\n\n\n  handleHotkeyMoveUp = () => {\n    this.handleMoveUp(this.props.status.get('id'));\n  };\n\n  handleHotkeyMoveDown = () => {\n    this.handleMoveDown(this.props.status.get('id'));\n  };\n\n  handleHotkeyReply = e => {\n    e.preventDefault();\n    this.handleReplyClick(this.props.status);\n  };\n\n  handleHotkeyFavourite = () => {\n    this.handleFavouriteClick(this.props.status);\n  };\n\n  handleHotkeyBoost = () => {\n    this.handleReblogClick(this.props.status);\n  };\n\n  handleHotkeyMention = e => {\n    e.preventDefault();\n    this.handleMentionClick(this.props.status.get('account'));\n  };\n\n  handleHotkeyOpenProfile = () => {\n    this.props.history.push(`/@${this.props.status.getIn(['account', 'acct'])}`);\n  };\n\n  handleHotkeyToggleHidden = () => {\n    this.handleToggleHidden(this.props.status);\n  };\n\n  handleHotkeyToggleSensitive = () => {\n    this.handleToggleMediaVisibility();\n  };\n\n  handleMoveUp = id => {\n    const { status, ancestorsIds, descendantsIds } = this.props;\n\n    if (id === status.get('id')) {\n      this._selectChild(ancestorsIds.size - 1, true);\n    } else {\n      let index = ancestorsIds.indexOf(id);\n\n      if (index === -1) {\n        index = descendantsIds.indexOf(id);\n        this._selectChild(ancestorsIds.size + index, true);\n      } else {\n        this._selectChild(index - 1, true);\n      }\n    }\n  };\n\n  handleMoveDown = id => {\n    const { status, ancestorsIds, descendantsIds } = this.props;\n\n    if (id === status.get('id')) {\n      this._selectChild(ancestorsIds.size + 1, false);\n    } else {\n      let index = ancestorsIds.indexOf(id);\n\n      if (index === -1) {\n        index = descendantsIds.indexOf(id);\n        this._selectChild(ancestorsIds.size + index + 2, false);\n      } else {\n        this._selectChild(index + 1, false);\n      }\n    }\n  };\n\n  _selectChild (index, align_top) {\n    const container = this.node;\n    const element = container.querySelectorAll('.focusable')[index];\n\n    if (element) {\n      if (align_top && container.scrollTop > element.offsetTop) {\n        element.scrollIntoView(true);\n      } else if (!align_top && container.scrollTop + container.clientHeight < element.offsetTop + element.offsetHeight) {\n        element.scrollIntoView(false);\n      }\n      element.focus();\n    }\n  }\n\n  renderChildren (list, ancestors) {\n    const { params: { statusId } } = this.props;\n\n    return list.map((id, i) => (\n      <StatusContainer\n        key={id}\n        id={id}\n        onMoveUp={this.handleMoveUp}\n        onMoveDown={this.handleMoveDown}\n        contextType='thread'\n        previousId={i > 0 ? list.get(i - 1) : undefined}\n        nextId={list.get(i + 1) || (ancestors && statusId)}\n        rootId={statusId}\n      />\n    ));\n  }\n\n  setContainerRef = c => {\n    this.node = c;\n  };\n\n  setStatusRef = c => {\n    this.statusNode = c;\n  };\n\n  _scrollStatusIntoView () {\n    const { status, multiColumn } = this.props;\n\n    if (status) {\n      requestIdleCallback(() => {\n        this.statusNode?.scrollIntoView(true);\n\n        // In the single-column interface, `scrollIntoView` will put the post behind the header,\n        // so compensate for that.\n        if (!multiColumn) {\n          const offset = document.querySelector('.column-header__wrapper')?.getBoundingClientRect()?.bottom;\n          if (offset) {\n            const scrollingElement = document.scrollingElement || document.body;\n            scrollingElement.scrollBy(0, -offset);\n          }\n        }\n      });\n    }\n  }\n\n  componentDidUpdate (prevProps) {\n    const { status, ancestorsIds } = this.props;\n\n    if (status && (ancestorsIds.size > prevProps.ancestorsIds.size || prevProps.status?.get('id') !== status.get('id'))) {\n      this._scrollStatusIntoView();\n    }\n  }\n\n  componentWillUnmount () {\n    detachFullscreenListener(this.onFullScreenChange);\n  }\n\n  onFullScreenChange = () => {\n    this.setState({ fullscreen: isFullscreen() });\n  };\n\n  shouldUpdateScroll = (prevRouterProps, { location }) => {\n    // Do not change scroll when opening a modal\n    if (location.state?.mastodonModalKey !== prevRouterProps?.location?.state?.mastodonModalKey) {\n      return false;\n    }\n\n    // Scroll to focused post if it is loaded\n    if (this.statusNode) {\n      return [0, this.statusNode.offsetTop];\n    }\n\n    // Do not scroll otherwise, `componentDidUpdate` will take care of that\n    return false;\n  };\n\n  render () {\n    let ancestors, descendants;\n    const { isLoading, status, ancestorsIds, descendantsIds, intl, domain, multiColumn, pictureInPicture } = this.props;\n    const { fullscreen } = this.state;\n\n    if (isLoading) {\n      return (\n        <Column>\n          <LoadingIndicator />\n        </Column>\n      );\n    }\n\n    if (status === null) {\n      return (\n        <BundleColumnError multiColumn={multiColumn} errorType='routing' />\n      );\n    }\n\n    if (ancestorsIds && ancestorsIds.size > 0) {\n      ancestors = <>{this.renderChildren(ancestorsIds, true)}</>;\n    }\n\n    if (descendantsIds && descendantsIds.size > 0) {\n      descendants = <>{this.renderChildren(descendantsIds)}</>;\n    }\n\n    const isLocal = status.getIn(['account', 'acct'], '').indexOf('@') === -1;\n    const isIndexable = !status.getIn(['account', 'noindex']);\n\n    const handlers = {\n      moveUp: this.handleHotkeyMoveUp,\n      moveDown: this.handleHotkeyMoveDown,\n      reply: this.handleHotkeyReply,\n      favourite: this.handleHotkeyFavourite,\n      boost: this.handleHotkeyBoost,\n      mention: this.handleHotkeyMention,\n      openProfile: this.handleHotkeyOpenProfile,\n      toggleHidden: this.handleHotkeyToggleHidden,\n      toggleSensitive: this.handleHotkeyToggleSensitive,\n      openMedia: this.handleHotkeyOpenMedia,\n    };\n\n    return (\n      <Column bindToDocument={!multiColumn} label={intl.formatMessage(messages.detailedStatus)}>\n        <ColumnHeader\n          showBackButton\n          multiColumn={multiColumn}\n          extraButton={(\n            <button type='button' className='column-header__button' title={intl.formatMessage(status.get('hidden') ? messages.revealAll : messages.hideAll)} aria-label={intl.formatMessage(status.get('hidden') ? messages.revealAll : messages.hideAll)} onClick={this.handleToggleAll}><Icon id={status.get('hidden') ? 'eye-slash' : 'eye'} icon={status.get('hidden') ? VisibilityOffIcon : VisibilityIcon} /></button>\n          )}\n        />\n\n        <ScrollContainer scrollKey='thread' shouldUpdateScroll={this.shouldUpdateScroll}>\n          <div className={classNames('scrollable', { fullscreen })} ref={this.setContainerRef}>\n            {ancestors}\n\n            <HotKeys handlers={handlers}>\n              <div className={classNames('focusable', 'detailed-status__wrapper', `detailed-status__wrapper-${status.get('visibility')}`)} tabIndex={0} aria-label={textForScreenReader(intl, status, false)} ref={this.setStatusRef}>\n                <DetailedStatus\n                  key={`details-${status.get('id')}`}\n                  status={status}\n                  onOpenVideo={this.handleOpenVideo}\n                  onOpenMedia={this.handleOpenMedia}\n                  onToggleHidden={this.handleToggleHidden}\n                  onTranslate={this.handleTranslate}\n                  domain={domain}\n                  showMedia={this.state.showMedia}\n                  onToggleMediaVisibility={this.handleToggleMediaVisibility}\n                  pictureInPicture={pictureInPicture}\n                />\n\n                <ActionBar\n                  key={`action-bar-${status.get('id')}`}\n                  status={status}\n                  onReply={this.handleReplyClick}\n                  onFavourite={this.handleFavouriteClick}\n                  onReblog={this.handleReblogClick}\n                  onBookmark={this.handleBookmarkClick}\n                  onDelete={this.handleDeleteClick}\n                  onEdit={this.handleEditClick}\n                  onDirect={this.handleDirectClick}\n                  onMention={this.handleMentionClick}\n                  onMute={this.handleMuteClick}\n                  onUnmute={this.handleUnmuteClick}\n                  onMuteConversation={this.handleConversationMuteClick}\n                  onBlock={this.handleBlockClick}\n                  onUnblock={this.handleUnblockClick}\n                  onBlockDomain={this.handleBlockDomainClick}\n                  onUnblockDomain={this.handleUnblockDomainClick}\n                  onReport={this.handleReport}\n                  onPin={this.handlePin}\n                  onEmbed={this.handleEmbed}\n                />\n              </div>\n            </HotKeys>\n\n            {descendants}\n          </div>\n        </ScrollContainer>\n\n        <Helmet>\n          <title>{titleFromStatus(intl, status)}</title>\n          <meta name='robots' content={(isLocal && isIndexable) ? 'all' : 'noindex'} />\n          <link rel='canonical' href={status.get('url')} />\n        </Helmet>\n      </Column>\n    );\n  }\n\n}\n\nexport default withRouter(injectIntl(connect(makeMapStateToProps)(withIdentity(Status))));\n"],"sourceRoot":""}