{"version":3,"sources":["webpack:///./app/javascript/packs/statuses.js","webpack:///./app/javascript/brighteon/features/ui/containers/account_action_button_container.js","webpack:///./app/javascript/brighteon/features/standalone/account_timeline/components/status_with_reply/components/upload_button.js","webpack:///./app/javascript/brighteon/features/standalone/account_timeline/components/status_with_reply/containers/upload_button_container.js","webpack:///./app/javascript/brighteon/features/standalone/account_timeline/components/status_with_reply/containers/emoji_picker_dropdown_container.js","webpack:///./app/javascript/brighteon/features/standalone/account_timeline/components/status_with_reply/components/upload_form/containers/upload_progress_container.js","webpack:///./app/javascript/brighteon/features/standalone/account_timeline/components/status_with_reply/components/upload_form/components/upload.js","webpack:///./app/javascript/brighteon/features/standalone/account_timeline/components/status_with_reply/components/upload_form/containers/upload_container.js","webpack:///./app/javascript/brighteon/features/standalone/account_timeline/components/status_with_reply/components/upload_form/containers/sensitive_button_container.js","webpack:///./app/javascript/brighteon/features/standalone/account_timeline/components/status_with_reply/components/upload_form/upload_form.js","webpack:///./app/javascript/brighteon/features/standalone/account_timeline/components/status_with_reply/components/upload_form/index.js","webpack:///./app/javascript/brighteon/features/standalone/account_timeline/components/status_with_reply/containers/upload_form_container.js","webpack:///./app/javascript/brighteon/features/standalone/account_timeline/components/status_with_reply/components/compose_form.js","webpack:///./app/javascript/brighteon/features/standalone/account_timeline/components/status_with_reply/components/status_action_bar.js","webpack:///./app/javascript/brighteon/features/standalone/account_timeline/components/status_with_reply/components/status_reply/components/status_action_bar.js","webpack:///./app/javascript/brighteon/features/standalone/account_timeline/components/status_with_reply/components/status_reply/status_reply.js","webpack:///./app/javascript/brighteon/features/standalone/account_timeline/components/status_with_reply/components/status_reply/index.js","webpack:///./app/javascript/brighteon/features/standalone/account_timeline/components/status_with_reply/containers/status_reply_container.js","webpack:///./app/javascript/brighteon/features/standalone/account_timeline/components/status_with_reply/containers/compose_form_container.js","webpack:///./app/javascript/brighteon/features/standalone/account_timeline/components/status_with_reply/status_with_reply.js","webpack:///./app/javascript/brighteon/features/standalone/account_timeline/components/status_with_reply/index.js","webpack:///./app/javascript/brighteon/features/standalone/account_timeline/containers/status_container.js","webpack:///./app/javascript/brighteon/features/standalone/account_timeline/index.js","webpack:///./app/javascript/brighteon/features/ui/containers/new_post_modal_handler.js","webpack:///./app/javascript/brighteon/containers/standalone_account_container.js","webpack:///./app/javascript/brighteon/features/standalone/account_timeline/components/status_with_reply/components/emoji_picker_dropdown.js"],"names":["loaded","StandaloneAccountContainer","require","default","AccountActionButton","React","ReactDOM","mountNode","document","getElementById","RelationshipsNode","props","JSON","parse","getAttribute","render","FollowButtons","getElementsByClassName","index","length","start","loadPolyfills","then","ready","catch","error","console","getLocale","localeData","messages","addLocaleData","store","configureStore","initialState","dispatch","hydrateStore","AccountActionButtonContainer","state","status","target_account_id","handleFollow","followAccount","setState","handleUnfollow","unfollowAccount","componentDidMount","this","locale","className","onClick","role","tabIndex","PureComponent","defaultProps","local","settings","known_fediverse","defineMessages","upload","iconStyle","height","lineHeight","UploadButton","connect","acceptContentTypes","getIn","injectIntl","handleChange","e","target","files","onSelectFile","handleClick","onFocus","fileElement","click","setRef","c","intl","resetFileKey","unavailable","disabled","message","formatMessage","icon","title","size","inverted","style","display","key","ref","type","multiple","accept","toArray","join","onChange","ImmutablePureComponent","propTypes","PropTypes","bool","func","isRequired","object","number","ImmutablePropTypes","listOf","string","some","m","includes","get","uploadCompose","DEFAULTS","getFrequentlyUsedEmojis","createSelector","ImmutableMap","emojiCounters","emojis","keySeq","sort","a","b","reverse","slice","perLine","uniqueDefaults","filter","emoji","concat","getCustomEmojis","aShort","toLowerCase","bShort","custom_emojis","skinTone","frequentlyUsedEmojis","onPickEmoji","onSkinTone","changeSetting","useEmoji","EmojiPickerDropdown","active","progress","UploadProgress","Upload","handleUndoClick","stopPropagation","onUndo","media","handleFocalPointClick","onOpenFocalPoint","focusX","focusY","x","y","defaultStyle","scale","spring","stiffness","damping","transform","backgroundImage","backgroundPosition","classNames","id","defaultMessage","contextTypes","router","map","find","item","undoUploadCompose","openModal","onSubmit","submitCompose","marked","unmarked","SensitiveButton","mediaCount","name","checked","values","count","changeComposeSensitivity","UploadForm","mediaIds","isEmpty","list","allowedAroundShortCode","placeholder","spoiler_placeholder","publish","publishLoud","ComposeForm","jumping","inReplyTo","replyCompose","ancestor","value","handleKeyDown","keyCode","ctrlKey","metaKey","handleSubmit","text","autosuggestTextarea","textarea","isSubmitting","isChangingUpload","isUploading","anyMedia","fulltext","spoilerText","countableText","trim","closeComposeModal","jumpSubmitButton","context","history","setTimeout","onSuggestionsClearRequested","onClearSuggestions","onSuggestionsFetchRequested","token","onFetchSuggestions","onSuggestionSelected","tokenStart","onSpoilerSuggestionSelected","handleChangeSpoilerText","onChangeSpoilerText","handleFocus","composeForm","scrollIntoView","behavior","block","setAutosuggestTextarea","passRefCb","setSpoilerText","handleEmojiPick","data","position","selectionStart","needsSpace","custom","componentDidUpdate","prevProps","getReplies","onPaste","disabledButton","publishText","privacy","suggestions","onKeyDown","autoFocus","max","spoiler","focusDate","instanceOf","Date","caretPosition","preselectDate","showSearch","any","singleColumn","delete","redraft","edit","direct","mention","mute","reply","share","more","replyAll","reblog","reblog_private","cancel_reblog_private","cannot_reblog","favourite","bookmark","removeBookmark","open","report","muteConversation","unmuteConversation","pin","unpin","embed","admin_account","admin_status","copy","blockDomain","unblockDomain","unmute","unblock","StatusActionBar","relationship","cryptoWallets","updateOnProps","handleReplyClick","me","onReply","_openInteractionDialog","handleShareClick","navigator","url","handleFavouriteClick","onFavourite","handleReblogClick","onReblog","window","handleBookmarkClick","onBookmark","handleDeleteClick","onDelete","handleRedraftClick","handleEditClick","onEdit","handlePinClick","onPin","handleMentionClick","openComposeModal","changeShowPrivacy","onMention","account","handleDirectClick","location","href","handleMuteClick","onMute","onUnmute","handleBlockClick","onBlock","onUnblock","handleBlockDomain","onBlockDomain","split","handleUnblockDomain","onUnblockDomain","handleOpen","handleEmbed","onEmbed","handleReport","onReport","handleConversationMuteClick","onMuteConversation","handleCopy","createElement","textContent","body","appendChild","select","execCommand","removeChild","toggleShowAllReplies","handleOpenRepliesModal","onOpenRepliesModal","handleOpenReblogsModal","onOpenReblogsModal","handleOpenFavouritesModal","onOpenFavouritesModal","handleShareStatus","onShareStatus","replyIcon","replyTitle","withDismiss","scrollKey","mutingConversation","anonymousAccess","publicStatus","menu","push","action","domain","isStaff","reblogPrivate","reblogTitle","pressed","animate","items","direction","accountId","accountName","onDirect","showAllReplies","textForScreenReader","rebloggedByText","displayName","formatDate","hour","minute","month","day","defaultMediaVisibility","displayMedia","StatusReply","showMedia","statusId","undefined","handleToggleMediaVisibility","handleExpandClick","button","handleAccountClick","currentTarget","preventDefault","handleExpandedToggle","onToggleHidden","_properStatus","handleCollapsedToggle","isCollapsed","onToggleCollapsed","handleOpenVideo","options","onOpenVideo","handleHotkeyOpenMedia","onOpenMedia","startTime","handleHotkeyReply","handleHotkeyFavourite","handleHotkeyBoost","handleHotkeyMention","handleHotkeyOpen","handleHotkeyOpenProfile","handleHotkeyMoveUp","onMoveUp","handleHotkeyMoveDown","onMoveDown","handleHotkeyToggleHidden","handleHotkeyToggleSensitive","handleRef","node","getDerivedStateFromProps","nextProps","prevState","renderLoadingMediaGallery","renderLoadingVideoPlayer","renderLoadingAudioPlayer","statusAvatar","prepend","hidden","featured","otherAccounts","unread","showThread","other","handlers","muted","boost","openProfile","moveUp","moveDown","toggleHidden","toggleSensitive","openMedia","focusable","minHandlers","fixedWidth","display_name_html","__html","dangerouslySetInnerHTML","compact","attachment","fetchComponent","Audio","loading","Component","src","alt","poster","backgroundColor","foregroundColor","accentColor","duration","width","cachedMediaWidth","cacheWidth","cacheMediaWidth","Video","preview","blurhash","inline","sensitive","visible","onToggleVisibility","MediaGallery","defaultWidth","card","read","rel","others","timestamp","expanded","onExpandedToggle","collapsable","onCollapsedToggle","children","onHeightChange","getScrollPosition","updateScrollBottom","deleteConfirm","deleteMessage","redraftConfirm","redraftMessage","replyConfirm","replyMessage","blockDomainConfirm","getStatus","makeGetStatus","_","getState","confirm","onConfirm","showComposePopup","onModalReblog","unreblog","shiftKey","boostModal","unfavourite","unbookmark","onError","showAlertForError","withRedraft","deleteModal","deleteStatus","editStatus","directCompose","mentionCompose","initBlockModal","unblockAccount","initReport","initMuteModal","unmuteAccount","unmuteStatus","muteStatus","revealStatus","hideStatus","toggleStatusCollapse","changeCompose","clearComposeSuggestions","fetchComposeSuggestions","suggestion","path","selectComposeSuggestion","changeComposeSpoilerText","insertEmojiCompose","closeModal","Status","importFetchedStatuses","Immutable","Map","rerenderFlag","showReplyBox","currentShowMediaOpt","newShowMedia","set","handleReply","replyTextareaRef","focus","setTextareaRef","getDescendants","status_id","api","descendants","ancestors","err","ensureShowReplyBox","checkIfAndroid","element","replyBox","yPosition","offsetTop","scrollTop","clientTop","offsetParent","scrollY","scrollBy","originContent","originStatus","avatar","replyOrigin","statuses","account_id","accounts","repliesCount","Object","toJS","st","in_reply_to_id","st1","st2","created_at","mediaSection","showPinnedMsg","pinned","username","origin","avatarStyle","backgroundSize","replies","idx","contextType","StatusWithReply","setPostForChat","getOrder","order","search","getParams","unpinned","params","pathname","aggregatedReplies","withReplies","onlyImage","onlyVideo","AccountTimeline","timelineId","generateTimelineId","timeline","statusIds","ImmutableList","isLoading","hasMore","handleLoadMore","maxId","last","requestParams","expandAccountTimeline","_connect","statusIdProp","loadMore","NewPostModalHandler","handleNewPostModal","onShowPopup","closeNewPostModal","showPopup","disconnect","connectUserStream","disconnectChat","connectChatStream","expandNotifications","setupBrowserNotifications","componentWillUnmount","show_pinned","donate_box_container","navigation_container","new_post_section","link_footer_node","BrowserRouter","createPortal","EmojiPicker","Emoji","emoji_search","emoji_not_found","recent","search_results","people","nature","food","activity","travel","objects","symbols","flags","assetHost","process","env","CDN_HOST","backgroundImageFn","listenerOptions","supportsPassiveEvents","passive","ModifierPickerMenu","onSelect","handleDocumentClick","contains","onClose","UNSAFE_componentWillReceiveProps","attachListeners","removeListeners","addEventListener","removeEventListener","sheetSize","skin","ModifierPicker","onOpen","handleSelect","modifier","EmojiPickerMenu","modifierOpen","placement","getI18n","notfound","categories","foods","places","event","native","colons","onPick","handleModifierOpen","handleModifierClose","handleModifierChange","top","pageYOffset","categoriesSort","splice","Array","from","categoriesFromEmojis","selecting","emojiSize","buildCustomEmojis","color","i18n","include","showPreview","emojiTooltip","dropdown","onShowDropdown","EmojiPickerAsync","EmojiMart","Picker","getBoundingClientRect","innerHeight","onHideDropdown","onToggle","setTargetRef","findTarget","show"],"mappings":"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","file":"js/statuses-1014212dfb2dfa76679c.chunk.js","sourcesContent":["import loadPolyfills from '../brighteon/load_polyfills';\nimport { start } from '../brighteon/common';\n\nstart();\n\nfunction loaded() {\n  const StandaloneAccountContainer = require('../brighteon/containers/standalone_account_container').default;\n  const AccountActionButton = require('../brighteon/features/ui/containers/account_action_button_container').default;\n  const React             = require('react');\n  const ReactDOM          = require('react-dom');\n  const mountNode         = document.getElementById('brighteon-statuses');\n  const RelationshipsNode = document.getElementById('relationships-accounts-container');\n\n  if (mountNode !== null) {\n    const props = JSON.parse(mountNode.getAttribute('data-props'));\n    ReactDOM.render(<StandaloneAccountContainer {...props} />, mountNode);\n  }\n\n  if (RelationshipsNode) {\n    const FollowButtons = RelationshipsNode.getElementsByClassName('relationship-action-button');\n\n    for (let index = 0; index < FollowButtons.length; index++) {\n      const props = JSON.parse(FollowButtons[index].getAttribute('data-props'));\n      ReactDOM.render(<AccountActionButton {...props} />, FollowButtons[index]);\n    }\n  }\n}\n\nfunction main() {\n  const ready = require('../brighteon/ready').default;\n  ready(loaded);\n}\n\nloadPolyfills().then(main).catch(error => {\n  console.error(error);\n});\n","import React, { Fragment } from 'react';\nimport { Provider } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport configureStore from '../../../store/configureStore';\nimport { hydrateStore } from '../../../actions/store';\nimport { IntlProvider, addLocaleData } from 'react-intl';\nimport { getLocale } from '../../../locales';\nimport initialState from '../../../initial_state';\nimport {\n  followAccount,\n  unfollowAccount,\n} from 'brighteon/actions/accounts';\n\nconst { localeData, messages } = getLocale();\naddLocaleData(localeData);\n\nconst store = configureStore();\n\nif (initialState) {\n  store.dispatch(hydrateStore(initialState));\n}\n\nexport default class AccountActionButtonContainer extends React.PureComponent {\n\n  static propTypes = {\n    locale: PropTypes.string,\n    status: PropTypes.object,\n    target_account_id: PropTypes.string,\n  };\n\n  static defaultProps = {\n    local: !initialState.settings.known_fediverse,\n  };\n\n  state = {\n    status: 'following',\n    target_account_id: '0',\n  }\n\n  componentDidMount() {\n    this.setState({\n      status: this.props.status,\n      target_account_id: this.props.target_account_id,\n    });\n  }\n\n  handleFollow = () => {\n    store.dispatch(followAccount(this.state.target_account_id));\n    this.setState({ status: 'following' });\n  }\n\n  handleUnfollow = () => {\n    store.dispatch(unfollowAccount(this.state.target_account_id));\n    this.setState({ status: 'unfollow' });\n  }\n\n  render() {\n    const { locale } = this.props;\n    const status = this.state.status;\n\n    return (\n      <IntlProvider locale={locale} messages={messages}>\n        <Provider store={store}>\n          <Fragment>\n            <div className='account-action'>\n              {\n                status === 'unfollow' && (\n                  <div className='button normal-button' onClick={this.handleFollow} role='button' tabIndex={0} >Follow</div>\n                )\n              }\n              {\n                status === 'following' && (\n                  <div className='button normal-button button--destructive' onClick={this.handleUnfollow} role='button' tabIndex={0} >\n                    <span className='normal'>Following</span>\n                    <span className='hover'>Unfollow</span>\n                  </div>\n                )\n              }\n            </div>\n          </Fragment>\n        </Provider>\n      </IntlProvider>\n    );\n  }\n\n}\n","import React from 'react';\nimport IconButton from 'brighteon/components/icon_button';\nimport PropTypes from 'prop-types';\nimport { defineMessages, injectIntl } from 'react-intl';\nimport { connect } from 'react-redux';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\n\nconst messages = defineMessages({\n  upload: { id: 'upload_button.label', defaultMessage: 'Add images, a video or an audio file' },\n});\n\nconst makeMapStateToProps = () => {\n  const mapStateToProps = state => ({\n    acceptContentTypes: state.getIn(['media_attachments', 'accept_content_types']),\n  });\n\n  return mapStateToProps;\n};\n\nconst iconStyle = {\n  height: null,\n  lineHeight: '27px',\n};\n\nexport default @connect(makeMapStateToProps)\n@injectIntl\nclass UploadButton extends ImmutablePureComponent {\n\n  static propTypes = {\n    disabled: PropTypes.bool,\n    unavailable: PropTypes.bool,\n    onSelectFile: PropTypes.func.isRequired,\n    style: PropTypes.object,\n    resetFileKey: PropTypes.number,\n    acceptContentTypes: ImmutablePropTypes.listOf(PropTypes.string).isRequired,\n    intl: PropTypes.object.isRequired,\n    onFocus: PropTypes.func.isRequired,\n  };\n\n  handleChange = (e) => {\n    if (e.target.files.length > 0) {\n      this.props.onSelectFile(e.target.files);\n    }\n  }\n\n  handleClick = () => {\n    this.props.onFocus();\n    this.fileElement.click();\n  }\n\n  setRef = (c) => {\n    this.fileElement = c;\n  }\n\n  render() {\n    const { intl, resetFileKey, unavailable, disabled, acceptContentTypes } = this.props;\n\n    if (unavailable) {\n      return null;\n    }\n\n    const message = intl.formatMessage(messages.upload);\n\n    return (\n      <div className='compose-form__upload-button'>\n        <IconButton icon='paperclip' title={message} disabled={disabled} onClick={this.handleClick} className='compose-form__upload-button-icon' size={18} inverted style={iconStyle} />\n        <label>\n          <span style={{ display: 'none' }}>{message}</span>\n          <input\n            key={resetFileKey}\n            ref={this.setRef}\n            type='file'\n            multiple\n            accept={acceptContentTypes.toArray().join(',')}\n            onChange={this.handleChange}\n            disabled={disabled}\n            style={{ display: 'none' }}\n          />\n        </label>\n      </div>\n    );\n  }\n\n}\n","import { connect } from 'react-redux';\nimport UploadButton from '../components/upload_button';\nimport { uploadCompose } from 'brighteon/actions/compose_in_reply';\n\nconst mapStateToProps = state => ({\n  disabled: state.getIn(['compose_in_reply', 'is_uploading']) || (state.getIn(['compose_in_reply', 'media_attachments']).size + state.getIn(['compose_in_reply', 'pending_media_attachments']) > 3 || state.getIn(['compose_in_reply', 'media_attachments']).some(m => ['video', 'audio'].includes(m.get('type')))),\n  unavailable: state.getIn(['compose_in_reply', 'poll']) !== null,\n  resetFileKey: state.getIn(['compose_in_reply', 'resetFileKey']),\n});\n\nconst mapDispatchToProps = dispatch => ({\n\n  onSelectFile(files) {\n    dispatch(uploadCompose(files));\n  },\n\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(UploadButton);\n","import { connect } from 'react-redux';\nimport EmojiPickerDropdown from '../components/emoji_picker_dropdown';\nimport { changeSetting } from 'brighteon/actions/settings';\nimport { createSelector } from 'reselect';\nimport { Map as ImmutableMap } from 'immutable';\nimport { useEmoji } from 'brighteon/actions/emojis';\n\nconst perLine = 8;\nconst lines = 2;\n\nconst DEFAULTS = [\n  '+1',\n  'grinning',\n  'kissing_heart',\n  'heart_eyes',\n  'laughing',\n  'stuck_out_tongue_winking_eye',\n  'sweat_smile',\n  'joy',\n  'yum',\n  'disappointed',\n  'thinking_face',\n  'weary',\n  'sob',\n  'sunglasses',\n  'heart',\n  'ok_hand',\n];\n\nconst getFrequentlyUsedEmojis = createSelector([\n  state => state.getIn(['settings', 'frequentlyUsedEmojis'], ImmutableMap()),\n], emojiCounters => {\n  let emojis = emojiCounters\n    .keySeq()\n    .sort((a, b) => emojiCounters.get(a) - emojiCounters.get(b))\n    .reverse()\n    .slice(0, perLine * lines)\n    .toArray();\n\n  if (emojis.length < DEFAULTS.length) {\n    let uniqueDefaults = DEFAULTS.filter(emoji => !emojis.includes(emoji));\n    emojis = emojis.concat(uniqueDefaults.slice(0, DEFAULTS.length - emojis.length));\n  }\n\n  return emojis;\n});\n\nconst getCustomEmojis = createSelector([\n  state => state.get('custom_emojis'),\n], emojis => emojis.filter(e => e.get('visible_in_picker')).sort((a, b) => {\n  const aShort = a.get('shortcode').toLowerCase();\n  const bShort = b.get('shortcode').toLowerCase();\n\n  if (aShort < bShort) {\n    return -1;\n  } else if (aShort > bShort) {\n    return 1;\n  } else {\n    return 0;\n  }\n}));\n\nconst mapStateToProps = state => ({\n  custom_emojis: getCustomEmojis(state),\n  skinTone: state.getIn(['settings', 'skinTone']),\n  frequentlyUsedEmojis: getFrequentlyUsedEmojis(state),\n});\n\nconst mapDispatchToProps = (dispatch, { onPickEmoji }) => ({\n  onSkinTone: skinTone => {\n    dispatch(changeSetting(['skinTone'], skinTone));\n  },\n\n  onPickEmoji: emoji => {\n    dispatch(useEmoji(emoji));\n\n    if (onPickEmoji) {\n      onPickEmoji(emoji);\n    }\n  },\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(EmojiPickerDropdown);\n","import { connect } from 'react-redux';\nimport UploadProgress from 'brighteon/features/compose/components/upload_progress';\n\nconst mapStateToProps = state => ({\n  active: state.getIn(['compose_in_reply', 'is_uploading']),\n  progress: state.getIn(['compose_in_reply', 'progress']),\n});\n\nexport default connect(mapStateToProps)(UploadProgress);\n","import React from 'react';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport PropTypes from 'prop-types';\nimport Motion from 'brighteon/features/ui/util/optional_motion';\nimport spring from 'react-motion/lib/spring';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport { FormattedMessage } from 'react-intl';\nimport classNames from 'classnames';\nimport Icon from 'brighteon/components/icon';\n\nexport default class Upload extends ImmutablePureComponent {\n\n  static contextTypes = {\n    router: PropTypes.object,\n  };\n\n  static propTypes = {\n    media: ImmutablePropTypes.map.isRequired,\n    onUndo: PropTypes.func.isRequired,\n    onOpenFocalPoint: PropTypes.func.isRequired,\n  };\n\n  handleUndoClick = e => {\n    e.stopPropagation();\n    this.props.onUndo(this.props.media.get('id'));\n  }\n\n  handleFocalPointClick = e => {\n    e.stopPropagation();\n    this.props.onOpenFocalPoint(this.props.media.get('id'));\n  }\n\n  render() {\n    const { media } = this.props;\n    const focusX = media.getIn(['meta', 'focus', 'x']);\n    const focusY = media.getIn(['meta', 'focus', 'y']);\n    const x = ((focusX / 2) + .5) * 100;\n    const y = ((focusY / -2) + .5) * 100;\n\n    return (\n      <div className='compose-form__upload' tabIndex='0' role='button'>\n        <Motion defaultStyle={{ scale: 0.8 }} style={{ scale: spring(1, { stiffness: 180, damping: 12 }) }}>\n          {({ scale }) => (\n            <div className='compose-form__upload-thumbnail' style={{ transform: `scale(${scale})`, backgroundImage: `url(${media.get('preview_url')})`, backgroundPosition: `${x}% ${y}%` }}>\n              <div className={classNames('compose-form__upload__actions', { active: true })}>\n                <button className='icon-button' onClick={this.handleUndoClick}><Icon id='times' /> <FormattedMessage id='upload_form.undo' defaultMessage='Delete' /></button>\n                {/*<button className='icon-button' onClick={this.handleFocalPointClick}><Icon id='pencil' /> <FormattedMessage id='upload_form.edit' defaultMessage='Edit' /></button>*/}\n              </div>\n            </div>\n          )}\n        </Motion>\n      </div>\n    );\n  }\n\n}\n","import { connect } from 'react-redux';\nimport Upload from '../components/upload';\nimport { undoUploadCompose } from 'brighteon/actions/compose_in_reply';\nimport { openModal } from 'brighteon/actions/modal';\nimport { submitCompose } from 'brighteon/actions/compose_in_reply';\n\nconst mapStateToProps = (state, { id }) => ({\n  media: state.getIn(['compose_in_reply', 'media_attachments']).find(item => item.get('id') === id),\n});\n\nconst mapDispatchToProps = dispatch => ({\n\n  onUndo: id => {\n    dispatch(undoUploadCompose(id));\n  },\n\n  onOpenFocalPoint: id => {\n    dispatch(openModal('FOCAL_POINT', { id }));\n  },\n\n  onSubmit(router) {\n    dispatch(submitCompose(router));\n  },\n\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Upload);\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { changeComposeSensitivity } from 'brighteon/actions/compose_in_reply';\nimport { injectIntl, defineMessages, FormattedMessage } from 'react-intl';\n\nconst messages = defineMessages({\n  marked: { id: 'compose_form.sensitive.marked', defaultMessage: 'Media is marked as sensitive' },\n  unmarked: { id: 'compose_form.sensitive.unmarked', defaultMessage: 'Media is not marked as sensitive' },\n});\n\nconst mapStateToProps = state => ({\n  active: state.getIn(['compose_in_reply', 'sensitive']),\n  disabled: state.getIn(['compose_in_reply', 'spoiler']),\n  mediaCount: state.getIn(['compose', 'media_attachments']).size,\n});\n\nconst mapDispatchToProps = dispatch => ({\n\n  onClick() {\n    dispatch(changeComposeSensitivity());\n  },\n\n});\n\nclass SensitiveButton extends React.PureComponent {\n\n  static propTypes = {\n    active: PropTypes.bool,\n    disabled: PropTypes.bool,\n    mediaCount: PropTypes.number,\n    onClick: PropTypes.func.isRequired,\n    intl: PropTypes.object.isRequired,\n  };\n\n  render() {\n    const { active, disabled, mediaCount, onClick, intl } = this.props;\n\n    return (\n      <div className='compose-form__sensitive-button'>\n        <label className={classNames('icon-button', { active })} title={intl.formatMessage(active ? messages.marked : messages.unmarked)}>\n          <input\n            name='mark-sensitive'\n            type='checkbox'\n            checked={active}\n            onChange={onClick}\n            disabled={disabled}\n          />\n\n          <span className={classNames('checkbox', { active })} />\n\n          <FormattedMessage\n            id='compose_form.sensitive.hide'\n            defaultMessage='{count, plural, one {Mark media as sensitive} other {Mark media as sensitive}}'\n            values={{ count: mediaCount }}\n          />\n        </label>\n      </div>\n    );\n  }\n\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(injectIntl(SensitiveButton));\n","import React from 'react';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport UploadProgressContainer from './containers/upload_progress_container';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport UploadContainer from './containers/upload_container';\nimport SensitiveButtonContainer from './containers/sensitive_button_container';\nimport { FormattedMessage } from 'react-intl';\n\nexport default class UploadForm extends ImmutablePureComponent {\n\n  static propTypes = {\n    mediaIds: ImmutablePropTypes.list.isRequired,\n  };\n\n  render () {\n    const { mediaIds } = this.props;\n\n    return (\n      <div className='compose-form__upload-wrapper'>\n        <UploadProgressContainer icon='upload' message={<FormattedMessage id='upload_progress.label' defaultMessage='Uploading…' />} />\n\n        <div className='compose-form__uploads-wrapper'>\n          {mediaIds.map(id => (\n            <UploadContainer id={id} key={id} />\n          ))}\n        </div>\n\n        {!mediaIds.isEmpty() && <SensitiveButtonContainer />}\n      </div>\n    );\n  }\n\n}\n","import UploadForm from './upload_form';\n\nexport default UploadForm;\n","import { connect } from 'react-redux';\nimport UploadForm from '../components/upload_form';\n\nconst mapStateToProps = state => ({\n  mediaIds: state.getIn(['compose_in_reply', 'media_attachments']).map(item => item.get('id')),\n});\n\nexport default connect(mapStateToProps)(UploadForm);\n","import React from 'react';\nimport classNames from 'classnames';\nimport CharacterCounter from 'brighteon/features/compose/components/character_counter';\nimport Button from 'brighteon/components/button';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport PropTypes from 'prop-types';\nimport AutosuggestTextarea from 'brighteon/components/autosuggest_textarea';\nimport UploadButtonContainer from '../containers/upload_button_container';\nimport { defineMessages, injectIntl } from 'react-intl';\nimport EmojiPickerDropdown from '../containers/emoji_picker_dropdown_container';\nimport UploadFormContainer from '../containers/upload_form_container';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport { length } from 'stringz';\nimport { countableText } from 'brighteon/features/compose/util/counter';\nimport Icon from 'brighteon/components/icon';\n\nconst allowedAroundShortCode = '><\\u0085\\u0020\\u00a0\\u1680\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029\\u0009\\u000a\\u000b\\u000c\\u000d';\n\nconst messages = defineMessages({\n  placeholder: { id: 'compose_form.placeholder', defaultMessage: 'What is on your mind?' },\n  spoiler_placeholder: { id: 'compose_form.spoiler_placeholder', defaultMessage: 'Write your warning here' },\n  publish: { id: 'compose_form.publish', defaultMessage: 'Post' },\n  publishLoud: { id: 'compose_form.publish_loud', defaultMessage: '{publish}' },\n});\n\nexport default @injectIntl\nclass ComposeForm extends ImmutablePureComponent {\n\n  static contextTypes = {\n    router: PropTypes.object,\n  };\n\n  static propTypes = {\n    intl: PropTypes.object.isRequired,\n    text: PropTypes.string.isRequired,\n    suggestions: ImmutablePropTypes.list,\n    spoiler: PropTypes.bool,\n    privacy: PropTypes.string,\n    spoilerText: PropTypes.string,\n    focusDate: PropTypes.instanceOf(Date),\n    caretPosition: PropTypes.number,\n    preselectDate: PropTypes.instanceOf(Date),\n    isSubmitting: PropTypes.bool,\n    isChangingUpload: PropTypes.bool,\n    isUploading: PropTypes.bool,\n    onChange: PropTypes.func.isRequired,\n    onSubmit: PropTypes.func.isRequired,\n    onClearSuggestions: PropTypes.func.isRequired,\n    onFetchSuggestions: PropTypes.func.isRequired,\n    onSuggestionSelected: PropTypes.func.isRequired,\n    onChangeSpoilerText: PropTypes.func.isRequired,\n    onPaste: PropTypes.func.isRequired,\n    onPickEmoji: PropTypes.func.isRequired,\n    closeComposeModal: PropTypes.func.isRequired,\n    showSearch: PropTypes.bool,\n    anyMedia: PropTypes.bool,\n    inReplyTo: PropTypes.any,\n    singleColumn: PropTypes.bool,\n    ancestor: ImmutablePropTypes.map.isRequired,\n    replyCompose: PropTypes.func.isRequired,\n    getReplies: PropTypes.func.isRequired,\n  };\n\n  static defaultProps = {\n    showSearch: false,\n  };\n\n  state = {\n    jumping: false,\n  }\n\n  handleChange = (e) => {\n    // this.props.onChange(e.target.value);\n    if (!this.props.inReplyTo) {\n      this.props.replyCompose(this.props.ancestor);\n    }\n    if (this.props.inReplyTo === this.props.ancestor.get('id')) {\n      this.props.onChange(e.target.value);\n    }\n  }\n\n  handleKeyDown = (e) => {\n    if (e.keyCode === 13 && (e.ctrlKey || e.metaKey)) {\n      this.handleSubmit();\n    }\n  }\n\n  handleSubmit = () => {\n    if (this.props.text !== this.autosuggestTextarea.textarea.value) {\n      // Something changed the text inside the textarea (e.g. browser extensions like Grammarly)\n      // Update the state to match the current text\n      this.props.onChange(this.autosuggestTextarea.textarea.value);\n    }\n\n    // Submit disabled:\n    const { isSubmitting, isChangingUpload, isUploading, anyMedia } = this.props;\n    const fulltext = [this.props.spoilerText, countableText(this.props.text)].join('');\n\n    if (isSubmitting || isUploading || isChangingUpload || length(fulltext) > 1500 || (fulltext.length !== 0 && fulltext.trim().length === 0 && !anyMedia)) {\n      return;\n    }\n\n    this.props.closeComposeModal(); // for only account card dropdown actions and profile page dropdown actions\n    this.jumpSubmitButton();\n    this.props.onSubmit(this.context.router ? this.context.router.history : null);\n  }\n\n  jumpSubmitButton = () => {\n    this.setState({\n      jumping: true,\n    });\n    setTimeout(() => {\n      this.setState({\n        jumping: false,\n      });\n    }, 2000);\n  }\n\n  onSuggestionsClearRequested = () => {\n    this.props.onClearSuggestions();\n  }\n\n  onSuggestionsFetchRequested = (token) => {\n    this.props.onFetchSuggestions(token);\n  }\n\n  onSuggestionSelected = (tokenStart, token, value) => {\n    this.props.onSuggestionSelected(tokenStart, token, value, ['text']);\n  }\n\n  onSpoilerSuggestionSelected = (tokenStart, token, value) => {\n    this.props.onSuggestionSelected(tokenStart, token, value, ['spoiler_text']);\n  }\n\n  handleChangeSpoilerText = (e) => {\n    this.props.onChangeSpoilerText(e.target.value);\n  }\n\n  handleFocus = () => {\n    if (this.composeForm) {\n      this.composeForm.scrollIntoView({\n        behavior: 'smooth',\n        block: 'center',\n      });\n    }\n    if (this.props.inReplyTo !== this.props.ancestor.get('id')) {\n      this.props.replyCompose(this.props.ancestor);\n    }\n  }\n\n  componentDidUpdate(prevProps) {\n    // This statement does several things:\n    // - If we're beginning a reply, and,\n    //     - Replying to zero or one users, places the cursor at the end of the textbox.\n    //     - Replying to more than one user, selects any usernames past the first;\n    //       this provides a convenient shortcut to drop everyone else from the conversation.\n    // if (this.props.focusDate !== prevProps.focusDate) {\n    //   let selectionEnd, selectionStart;\n    //\n    //   if (this.props.preselectDate !== prevProps.preselectDate) {\n    //     selectionEnd   = this.props.text.length;\n    //     selectionStart = this.props.text.search(/\\s/) + 1;\n    //   } else if (typeof this.props.caretPosition === 'number') {\n    //     selectionStart = this.props.caretPosition;\n    //     selectionEnd   = this.props.caretPosition;\n    //   } else {\n    //     selectionEnd   = this.props.text.length;\n    //     selectionStart = selectionEnd;\n    //   }\n    //\n    //   this.autosuggestTextarea.textarea.setSelectionRange(selectionStart, selectionEnd);\n    //   this.autosuggestTextarea.textarea.focus();\n    // } else if(prevProps.isSubmitting && !this.props.isSubmitting) {\n    //   this.autosuggestTextarea.textarea.focus();\n    // } else if (this.props.spoiler !== prevProps.spoiler) {\n    //   if (this.props.spoiler) {\n    //     this.spoilerText.input.focus();\n    //   } else {\n    //     this.autosuggestTextarea.textarea.focus();\n    //   }\n    // }\n    if (prevProps.isSubmitting && !this.props.isSubmitting) {\n      this.props.getReplies();\n    }\n  }\n\n  setAutosuggestTextarea = (c) => {\n    this.autosuggestTextarea = c;\n    if (this.props.passRefCb) {\n      this.props.passRefCb(c);\n    }\n  }\n\n  setSpoilerText = (c) => {\n    this.spoilerText = c;\n  }\n\n  setRef = c => {\n    this.composeForm = c;\n  };\n\n  handleEmojiPick = (data) => {\n    const { text } = this.props;\n    const position = this.autosuggestTextarea.textarea.selectionStart;\n    const needsSpace = data.custom && position > 0 && !allowedAroundShortCode.includes(text[position - 1]);\n\n    this.props.onPickEmoji(position, data, needsSpace);\n  }\n\n  render() {\n    const { intl, onPaste, anyMedia } = this.props;\n    const { jumping } = this.state;\n    const disabled = this.props.isSubmitting;\n    const text = [this.props.spoilerText, countableText(this.props.text)].join('');\n    const disabledButton = disabled || this.props.isUploading || this.props.isChangingUpload || length(text) > 1500 || (text.length !== 0 && text.trim().length === 0 && !anyMedia);\n    let publishText = '';\n\n    if (this.props.privacy === 'private' || this.props.privacy === 'direct') {\n      publishText = <span className='compose-form__publish-private'><Icon id='lock' /> {intl.formatMessage(messages.publish)}</span>;\n    } else {\n      publishText = this.props.privacy !== 'unlisted' ? intl.formatMessage(messages.publishLoud, { publish: intl.formatMessage(messages.publish) }) : intl.formatMessage(messages.publish);\n    }\n\n    return (\n      <div className='compose-form' ref={this.setRef}>\n\n        <AutosuggestTextarea\n          ref={this.setAutosuggestTextarea}\n          placeholder='Write a reply'\n          disabled={disabled}\n          value={(this.props.inReplyTo === this.props.ancestor.get('id')) ? this.props.text : ''}\n          onChange={this.handleChange}\n          suggestions={this.props.suggestions}\n          onFocus={this.handleFocus}\n          onKeyDown={this.handleKeyDown}\n          onSuggestionsFetchRequested={this.onSuggestionsFetchRequested}\n          onSuggestionsClearRequested={this.onSuggestionsClearRequested}\n          onSuggestionSelected={this.onSuggestionSelected}\n          onPaste={onPaste}\n          autoFocus={false}\n        >\n          <EmojiPickerDropdown\n            onPickEmoji={this.handleEmojiPick}\n            onFocus={this.handleFocus}\n          />\n          <div className='compose-form__modifiers'>\n            {\n              this.props.inReplyTo === this.props.ancestor.get('id') && (\n                <UploadFormContainer />\n              )\n            }\n          </div>\n        </AutosuggestTextarea>\n\n        <div className='compose-form__buttons-wrapper'>\n          <div className='compose-form__buttons'>\n            <UploadButtonContainer\n              onFocus={this.handleFocus}\n            />\n          </div>\n          <div className='character-counter__wrapper'><CharacterCounter max={1500} text={text} /></div>\n        </div>\n\n        <div className='compose-form__publish'>\n          <div className='compose-form__publish-button-wrapper'><Button className={classNames({ jumping })} text={publishText} onClick={this.handleSubmit} disabled={disabledButton} block /></div>\n        </div>\n      </div>\n    );\n  }\n\n}\n","import React from 'react';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport { connect } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport IconButton from 'brighteon/components/icon_button';\nimport DropdownMenuContainer from 'brighteon/containers/dropdown_menu_container';\nimport { defineMessages, injectIntl } from 'react-intl';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport { me, isStaff } from 'brighteon/initial_state';\nimport classNames from 'classnames';\nimport { changeShowPrivacy } from 'brighteon/actions/compose';\nimport AccountTip from '../../../../../../components/account_tip_container';\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: 'Direct message @{name}' },\n  mention: { id: 'status.mention', defaultMessage: 'Mention @{name}' },\n  mute: { id: 'account.mute', defaultMessage: 'Mute @{name}' },\n  block: { id: 'account.block', defaultMessage: 'Block @{name}' },\n  reply: { id: 'status.reply', defaultMessage: 'Reply' },\n  share: { id: 'status.share', defaultMessage: 'Share' },\n  more: { id: 'status.more', defaultMessage: 'More' },\n  replyAll: { id: 'status.replyAll', defaultMessage: 'Reply to thread' },\n  reblog: { id: 'status.reblog', defaultMessage: 'Repost' },\n  reblog_private: { id: 'status.reblog_private', defaultMessage: 'Repost original audience' },\n  cancel_reblog_private: { id: 'status.cancel_reblog_private', defaultMessage: 'Unrepost' },\n  cannot_reblog: { id: 'status.cannot_reblog', defaultMessage: 'This post cannot be reposted' },\n  favourite: { id: 'status.favourite', defaultMessage: 'Favourite' },\n  bookmark: { id: 'status.bookmark', defaultMessage: 'Bookmark' },\n  removeBookmark: { id: 'status.remove_bookmark', defaultMessage: 'Remove bookmark' },\n  open: { id: 'status.open', defaultMessage: 'Expand this status' },\n  report: { id: 'status.report', defaultMessage: 'Report @{name}' },\n  muteConversation: { id: 'status.mute_conversation', defaultMessage: 'Mute conversation' },\n  unmuteConversation: { id: 'status.unmute_conversation', defaultMessage: 'Unmute conversation' },\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 status in the moderation interface' },\n  copy: { id: 'status.copy', defaultMessage: 'Copy link to status' },\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});\n\nconst mapStateToProps = (state, { status }) => ({\n  relationship: state.getIn(['relationships', status.getIn(['account', 'id'])]),\n  cryptoWallets: state.getIn(['crypto_wallets', status.getIn(['account', 'id'])]),\n});\n\nexport default @connect(mapStateToProps)\n@injectIntl\nclass StatusActionBar extends ImmutablePureComponent {\n\n  static contextTypes = {\n    router: PropTypes.object,\n  };\n\n  static propTypes = {\n    status: ImmutablePropTypes.map.isRequired,\n    relationship: ImmutablePropTypes.map,\n    onReply: PropTypes.func,\n    onFavourite: PropTypes.func,\n    onReblog: PropTypes.func,\n    onDelete: PropTypes.func,\n    onEdit: PropTypes.func,\n    onDirect: PropTypes.func,\n    onMention: PropTypes.func,\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    onReport: PropTypes.func,\n    onEmbed: PropTypes.func,\n    onMuteConversation: PropTypes.func,\n    onPin: PropTypes.func,\n    onBookmark: PropTypes.func,\n    withDismiss: PropTypes.bool,\n    scrollKey: PropTypes.string,\n    intl: PropTypes.object.isRequired,\n    showAllReplies: PropTypes.any,\n    toggleShowAllReplies: PropTypes.func,\n    onOpenRepliesModal: PropTypes.func.isRequired,\n    onOpenReblogsModal: PropTypes.func.isRequired,\n    onOpenFavouritesModal: PropTypes.func.isRequired,\n    account: ImmutablePropTypes.map,\n  };\n\n  // Avoid checking props that are functions (and whose equality will always\n  // evaluate to false. See react-immutable-pure-component for usage.\n  updateOnProps = [\n    'status',\n    'relationship',\n    'withDismiss',\n  ]\n\n  handleReplyClick = () => {\n    if (me) {\n      // this.props.onReply(this.props.status, this.context.router.history);\n      this.props.onReply(this.props.status, null);\n    } else {\n      this._openInteractionDialog('reply');\n    }\n  }\n\n  handleShareClick = () => {\n    navigator.share({\n      text: this.props.status.get('search_index'),\n      url: this.props.status.get('url'),\n    }).catch((e) => {\n      if (e.name !== 'AbortError') console.error(e);\n    });\n  }\n\n  handleFavouriteClick = () => {\n    if (me) {\n      this.props.onFavourite(this.props.status);\n    } else {\n      this._openInteractionDialog('favourite');\n    }\n  }\n\n  handleReblogClick = e => {\n    if (me) {\n      this.props.onReblog(this.props.status, e);\n    } else {\n      this._openInteractionDialog('reblog');\n    }\n  }\n\n  _openInteractionDialog = type => {\n    window.open(`/interact/${this.props.status.get('id')}?type=${type}`, 'brighteon-intent', 'width=445,height=600,resizable=no,menubar=no,status=no,scrollbars=yes');\n  }\n\n  handleBookmarkClick = () => {\n    this.props.onBookmark(this.props.status);\n  }\n\n  handleDeleteClick = () => {\n    this.props.onDelete(this.props.status);\n  }\n\n  handleRedraftClick = () => {\n    this.props.onDelete(this.props.status, true);\n  }\n\n  handleEditClick = () => {\n    this.props.onEdit(this.props.status);\n  }\n\n  handlePinClick = () => {\n    this.props.onPin(this.props.status);\n  }\n\n  handleMentionClick = () => {\n    this.props.openComposeModal();\n    this.props.dispatch(changeShowPrivacy(true));\n    this.props.onMention(this.props.account, null);\n    // this.props.onMention(this.props.status.get('account'), this.context.router.history);\n  }\n\n  handleDirectClick = () => {\n    window.location.href = '/@' + this.props.account.get('username') + '/chat';\n  }\n\n  handleMuteClick = () => {\n    const { relationship, onMute, onUnmute, account } = this.props;\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, account } = this.props;\n\n    if (relationship && relationship.get('blocking')) {\n      onUnblock(account);\n    } else {\n      onBlock(status);\n    }\n  }\n\n  handleBlockDomain = () => {\n    const { onBlockDomain, account } = this.props;\n\n    onBlockDomain(account.get('acct').split('@')[1]);\n  }\n\n  handleUnblockDomain = () => {\n    const { onUnblockDomain, account } = this.props;\n\n    onUnblockDomain(account.get('acct').split('@')[1]);\n  }\n\n  handleOpen = () => {\n    window.location = this.props.status.get('url');\n  }\n\n  handleEmbed = () => {\n    this.props.onEmbed(this.props.status);\n  }\n\n  handleReport = () => {\n    this.props.onReport(this.props.status);\n  }\n\n  handleConversationMuteClick = () => {\n    this.props.onMuteConversation(this.props.status);\n  }\n\n  handleCopy = () => {\n    const url = this.props.status.get('url');\n    const textarea = document.createElement('textarea');\n\n    textarea.textContent = url;\n    textarea.style.position = 'fixed';\n\n    document.body.appendChild(textarea);\n\n    try {\n      textarea.select();\n      document.execCommand('copy');\n    } catch (e) {\n\n    } finally {\n      document.body.removeChild(textarea);\n    }\n  }\n\n  toggleShowAllReplies = () => {\n    this.props.toggleShowAllReplies();\n  }\n\n  handleOpenRepliesModal = () => {\n    const { status } = this.props;\n    const count = status.get('replies_count');\n    if (count > 0) {\n      this.props.onOpenRepliesModal(status);\n    }\n  }\n\n  handleOpenReblogsModal = () => {\n    const { status } = this.props;\n    const count = status.get('reblogs_count');\n    if (count > 0) {\n      this.props.onOpenReblogsModal(status);\n    }\n  }\n\n  handleOpenFavouritesModal = () => {\n    const { status } = this.props;\n    const count = status.get('favourites_count');\n    if (count > 0) {\n      this.props.onOpenFavouritesModal(status);\n    }\n  }\n\n  handleShareStatus = () => {\n    const { status } = this.props;\n    this.props.onShareStatus(status);\n  }\n\n  render() {\n    const { status, relationship, intl, withDismiss, scrollKey, account, cryptoWallets } = this.props;\n\n    const mutingConversation = status.get('muted');\n    const anonymousAccess = !me;\n    const publicStatus = ['public', 'unlisted'].includes(status.get('visibility'));\n\n    let menu = [];\n\n    menu.push({ text: intl.formatMessage(messages.open), action: this.handleOpen });\n\n    if (publicStatus) {\n      menu.push({ text: intl.formatMessage(messages.copy), action: this.handleCopy });\n      menu.push({ text: intl.formatMessage(messages.embed), action: this.handleEmbed });\n    }\n\n    menu.push({ text: intl.formatMessage(status.get('bookmarked') ? messages.removeBookmark : messages.bookmark), action: this.handleBookmarkClick });\n    menu.push(null);\n\n    menu.push({ text: 'Show all or only 3 replies', action: this.toggleShowAllReplies });\n    menu.push(null);\n\n    menu.push({ text: 'Share via Direct Message', action: this.handleShareStatus });\n    menu.push(null);\n\n    if (status.getIn(['account', 'id']) === me || withDismiss) {\n      menu.push({ text: intl.formatMessage(mutingConversation ? messages.unmuteConversation : messages.muteConversation), action: this.handleConversationMuteClick });\n      menu.push(null);\n    }\n\n    if (status.getIn(['account', 'id']) === me) {\n      if (publicStatus) {\n        menu.push({ text: intl.formatMessage(status.get('pinned') ? messages.unpin : messages.pin), action: this.handlePinClick });\n      }\n\n      menu.push({ text: intl.formatMessage(messages.edit), action: this.handleEditClick });\n      menu.push({ text: intl.formatMessage(messages.delete), action: this.handleDeleteClick });\n      menu.push({ text: intl.formatMessage(messages.redraft), action: this.handleRedraftClick });\n    } else {\n      if (account) {\n        menu.push({ text: intl.formatMessage(messages.mention, { name: account.get('username') }), action: this.handleMentionClick });\n        menu.push({ text: intl.formatMessage(messages.direct, { name: account.get('username') }), action: this.handleDirectClick });\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 });\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 });\n        }\n\n        menu.push({ text: intl.formatMessage(messages.report, { name: account.get('username') }), action: this.handleReport });\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 });\n          }\n        }\n\n        if (isStaff) {\n          menu.push(null);\n          menu.push({ text: intl.formatMessage(messages.admin_account, { name: account.get('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      }\n    }\n\n    let replyIcon;\n    let replyTitle;\n    if (status.get('in_reply_to_id', null) === null) {\n      replyIcon = 'reply';\n      replyTitle = intl.formatMessage(messages.reply);\n    } else {\n      replyIcon = 'reply-all';\n      replyTitle = intl.formatMessage(messages.replyAll);\n    }\n\n    const reblogPrivate = status.getIn(['account', 'id']) === me && status.get('visibility') === 'private';\n\n    let reblogTitle = '';\n    if (status.get('reblogged')) {\n      reblogTitle = intl.formatMessage(messages.cancel_reblog_private);\n    } else if (publicStatus) {\n      reblogTitle = intl.formatMessage(messages.reblog);\n    } else if (reblogPrivate) {\n      reblogTitle = intl.formatMessage(messages.reblog_private);\n    } else {\n      reblogTitle = intl.formatMessage(messages.cannot_reblog);\n    }\n\n    return (\n      <div className='status__action-bar d-flex justify-content-space-between'>\n        <div className='status__action-left d-flex'>\n          <div className='status__action-bar__counter'>\n            <IconButton className='status__action-bar-button' title={replyTitle} icon={status.get('in_reply_to_account_id') === status.getIn(['account', 'id']) ? 'reply' : replyIcon} onClick={this.handleReplyClick} />\n            <span className='status__action-bar__counter__label' onClick={this.handleOpenRepliesModal} role='button' tabIndex={0} >{status.get('replies_count')} Replies</span>\n          </div>\n          <div className='status__action-bar__counter'>\n            <IconButton className={classNames('status__action-bar-button', { reblogPrivate })} disabled={!publicStatus && !reblogPrivate} active={status.get('reblogged')} pressed={status.get('reblogged')} title={reblogTitle} icon='retweet' onClick={this.handleReblogClick} />\n            <span className='status__action-bar__counter__label' onClick={this.handleOpenReblogsModal} role='button' tabIndex={0} >{status.get('reblogs_count')} Reposts</span>\n          </div>\n          <div className='status__action-bar__counter'>\n            <IconButton className='status__action-bar-button star-icon' animate active={status.get('favourited')} pressed={status.get('favourited')} title={intl.formatMessage(messages.favourite)} icon='star' onClick={this.handleFavouriteClick} />\n            <span className='status__action-bar__counter__label' onClick={this.handleOpenFavouritesModal} role='button' tabIndex={0} >{status.get('favourites_count')} Favorites</span>\n          </div>\n\n          <div className='status__action-bar-dropdown'>\n            <DropdownMenuContainer\n              scrollKey={scrollKey}\n              disabled={anonymousAccess}\n              status={status}\n              items={menu}\n              icon='ellipsis-h'\n              size={18}\n              direction='right'\n              title={intl.formatMessage(messages.more)}\n            />\n          </div>\n        </div>\n        <div className='status__action-right'>\n          { cryptoWallets && cryptoWallets.length > 0 && <AccountTip accountId={account.get('id')} accountName={account.get('username')} /> }\n        </div>\n      </div>\n    );\n  }\n\n}\n","import React from 'react';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport { connect } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport IconButton from 'brighteon/components/icon_button';\nimport DropdownMenuContainer from 'brighteon/containers/dropdown_menu_container';\nimport { defineMessages, injectIntl } from 'react-intl';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport { me, isStaff } from 'brighteon/initial_state';\nimport classNames from 'classnames';\nimport { changeShowPrivacy } from 'brighteon/actions/compose';\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: 'Direct message @{name}' },\n  mention: { id: 'status.mention', defaultMessage: 'Mention @{name}' },\n  mute: { id: 'account.mute', defaultMessage: 'Mute @{name}' },\n  block: { id: 'account.block', defaultMessage: 'Block @{name}' },\n  reply: { id: 'status.reply', defaultMessage: 'Reply' },\n  share: { id: 'status.share', defaultMessage: 'Share' },\n  more: { id: 'status.more', defaultMessage: 'More' },\n  replyAll: { id: 'status.replyAll', defaultMessage: 'Reply to thread' },\n  reblog: { id: 'status.reblog', defaultMessage: 'Repost' },\n  reblog_private: { id: 'status.reblog_private', defaultMessage: 'Repost original audience' },\n  cancel_reblog_private: { id: 'status.cancel_reblog_private', defaultMessage: 'Unrepost' },\n  cannot_reblog: { id: 'status.cannot_reblog', defaultMessage: 'This post cannot be reposted' },\n  favourite: { id: 'status.favourite', defaultMessage: 'Favourite' },\n  bookmark: { id: 'status.bookmark', defaultMessage: 'Bookmark' },\n  removeBookmark: { id: 'status.remove_bookmark', defaultMessage: 'Remove bookmark' },\n  open: { id: 'status.open', defaultMessage: 'Expand this status' },\n  report: { id: 'status.report', defaultMessage: 'Report @{name}' },\n  muteConversation: { id: 'status.mute_conversation', defaultMessage: 'Mute conversation' },\n  unmuteConversation: { id: 'status.unmute_conversation', defaultMessage: 'Unmute conversation' },\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 status in the moderation interface' },\n  copy: { id: 'status.copy', defaultMessage: 'Copy link to status' },\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});\n\nconst mapStateToProps = (state, { status }) => ({\n  relationship: state.getIn(['relationships', status.getIn(['account', 'id'])]),\n});\n\nexport default @connect(mapStateToProps)\n@injectIntl\nclass StatusActionBar extends ImmutablePureComponent {\n\n  static contextTypes = {\n    router: PropTypes.object,\n  };\n\n  static propTypes = {\n    status: ImmutablePropTypes.map.isRequired,\n    relationship: ImmutablePropTypes.map,\n    onReply: PropTypes.func,\n    onFavourite: PropTypes.func,\n    onReblog: PropTypes.func,\n    onDelete: PropTypes.func,\n    onEdit: PropTypes.func,\n    onDirect: PropTypes.func,\n    onMention: PropTypes.func,\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    onReport: PropTypes.func,\n    onEmbed: PropTypes.func,\n    onMuteConversation: PropTypes.func,\n    onPin: PropTypes.func,\n    onBookmark: PropTypes.func,\n    withDismiss: PropTypes.bool,\n    scrollKey: PropTypes.string,\n    intl: PropTypes.object.isRequired,\n    showAllReplies: PropTypes.any,\n    onOpenRepliesModal: PropTypes.func.isRequired,\n    onOpenReblogsModal: PropTypes.func.isRequired,\n    onOpenFavouritesModal: PropTypes.func.isRequired,\n  };\n\n  // Avoid checking props that are functions (and whose equality will always\n  // evaluate to false. See react-immutable-pure-component for usage.\n  updateOnProps = [\n    'status',\n    'relationship',\n    'withDismiss',\n  ]\n\n  handleReplyClick = () => {\n    if (me) {\n      // this.props.onReply(this.props.status, this.context.router.history);\n      this.props.onReply(this.props.status, null);\n    } else {\n      this._openInteractionDialog('reply');\n    }\n  }\n\n  handleShareClick = () => {\n    navigator.share({\n      text: this.props.status.get('search_index'),\n      url: this.props.status.get('url'),\n    }).catch((e) => {\n      if (e.name !== 'AbortError') console.error(e);\n    });\n  }\n\n  handleFavouriteClick = () => {\n    if (me) {\n      this.props.onFavourite(this.props.status);\n    } else {\n      this._openInteractionDialog('favourite');\n    }\n  }\n\n  handleReblogClick = e => {\n    if (me) {\n      this.props.onReblog(this.props.status, e);\n    } else {\n      this._openInteractionDialog('reblog');\n    }\n  }\n\n  _openInteractionDialog = type => {\n    window.open(`/interact/${this.props.status.get('id')}?type=${type}`, 'brighteon-intent', 'width=445,height=600,resizable=no,menubar=no,status=no,scrollbars=yes');\n  }\n\n  handleBookmarkClick = () => {\n    this.props.onBookmark(this.props.status);\n  }\n\n  handleDeleteClick = () => {\n    this.props.onDelete(this.props.status);\n  }\n\n  handleRedraftClick = () => {\n    this.props.onDelete(this.props.status, true);\n  }\n\n  handleEditClick = () => {\n    this.props.onEdit(this.props.status);\n  }\n\n  handlePinClick = () => {\n    this.props.onPin(this.props.status);\n  }\n\n  handleMentionClick = () => {\n    // this.props.onMention(this.props.status.get('account'), this.context.router.history);\n    this.props.openComposeModal();\n    this.props.dispatch(changeShowPrivacy(true));\n    this.props.onMention(this.props.status.get('account'), null);\n  }\n\n  handleDirectClick = () => {\n    window.location.href = '/@' + this.props.status.get('account').get('username') + '/chat';\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.get('acct').split('@')[1]);\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  handleOpen = () => {\n    // this.context.router.history.push(`/statuses/${this.props.status.get('id')}`);\n    window.location = `${window.location.href}/${this.props.status.get('id')}`;\n  }\n\n  handleEmbed = () => {\n    this.props.onEmbed(this.props.status);\n  }\n\n  handleReport = () => {\n    this.props.onReport(this.props.status);\n  }\n\n  handleConversationMuteClick = () => {\n    this.props.onMuteConversation(this.props.status);\n  }\n\n  handleCopy = () => {\n    const url = this.props.status.get('url');\n    const textarea = document.createElement('textarea');\n\n    textarea.textContent = url;\n    textarea.style.position = 'fixed';\n\n    document.body.appendChild(textarea);\n\n    try {\n      textarea.select();\n      document.execCommand('copy');\n    } catch (e) {\n\n    } finally {\n      document.body.removeChild(textarea);\n    }\n  }\n\n  handleOpenRepliesModal = () => {\n    const { status } = this.props;\n    const count = status.get('replies_count');\n    if (count > 0) {\n      this.props.onOpenRepliesModal(status);\n    }\n  }\n\n  handleOpenReblogsModal = () => {\n    const { status } = this.props;\n    const count = status.get('reblogs_count');\n    if (count > 0) {\n      this.props.onOpenReblogsModal(status);\n    }\n  }\n\n  handleOpenFavouritesModal = () => {\n    const { status } = this.props;\n    const count = status.get('favourites_count');\n    if (count > 0) {\n      this.props.onOpenFavouritesModal(status);\n    }\n  }\n\n  render() {\n    const { status, relationship, intl, scrollKey } = this.props;\n\n    const anonymousAccess = !me;\n    const publicStatus = ['public', 'unlisted'].includes(status.get('visibility'));\n    const account = status.get('account');\n\n    let menu = [];\n\n    // menu.push({ text: intl.formatMessage(messages.open), action: this.handleOpen });\n    //\n    if (publicStatus) {\n      menu.push({ text: intl.formatMessage(messages.copy), action: this.handleCopy });\n      //   menu.push({ text: intl.formatMessage(messages.embed), action: this.handleEmbed });\n    }\n    //\n    menu.push({ text: intl.formatMessage(status.get('bookmarked') ? messages.removeBookmark : messages.bookmark), action: this.handleBookmarkClick });\n    menu.push(null);\n    //\n    // if (status.getIn(['account', 'id']) === me || withDismiss) {\n    //   menu.push({ text: intl.formatMessage(mutingConversation ? messages.unmuteConversation : messages.muteConversation), action: this.handleConversationMuteClick });\n    //   menu.push(null);\n    // }\n\n    if (status.getIn(['account', 'id']) === me) {\n      if (publicStatus) {\n        menu.push({ text: intl.formatMessage(status.get('pinned') ? messages.unpin : messages.pin), action: this.handlePinClick });\n      }\n\n      menu.push({ text: intl.formatMessage(messages.edit), action: this.handleEditClick });\n      menu.push({ text: intl.formatMessage(messages.delete), action: this.handleDeleteClick });\n      menu.push({ text: intl.formatMessage(messages.redraft), action: this.handleRedraftClick });\n    } else {\n      menu.push({ text: intl.formatMessage(messages.mention, { name: account.get('username') }), action: this.handleMentionClick });\n      menu.push({ text: intl.formatMessage(messages.direct, { name: account.get('username') }), action: this.handleDirectClick });\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 });\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 });\n      }\n\n      menu.push({ text: intl.formatMessage(messages.report, { name: account.get('username') }), action: this.handleReport });\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 });\n        }\n      }\n\n      if (isStaff) {\n        menu.push(null);\n        menu.push({ text: intl.formatMessage(messages.admin_account, { name: account.get('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    }\n\n    let replyIcon;\n    let replyTitle;\n    if (status.get('in_reply_to_id', null) === null) {\n      replyIcon = 'reply';\n      replyTitle = intl.formatMessage(messages.reply);\n    } else {\n      replyIcon = 'reply-all';\n      replyTitle = intl.formatMessage(messages.replyAll);\n    }\n\n    const reblogPrivate = status.getIn(['account', 'id']) === me && status.get('visibility') === 'private';\n\n    let reblogTitle = '';\n    if (status.get('reblogged')) {\n      reblogTitle = intl.formatMessage(messages.cancel_reblog_private);\n    } else if (publicStatus) {\n      reblogTitle = intl.formatMessage(messages.reblog);\n    } else if (reblogPrivate) {\n      reblogTitle = intl.formatMessage(messages.reblog_private);\n    } else {\n      reblogTitle = intl.formatMessage(messages.cannot_reblog);\n    }\n\n    return (\n      <div className='status__action-bar'>\n        <div className='status__action-bar__counter'>\n          <IconButton className='status__action-bar-button' title={replyTitle} icon={status.get('in_reply_to_account_id') === status.getIn(['account', 'id']) ? 'reply' : replyIcon} onClick={this.handleReplyClick} />\n          <span className='status__action-bar__counter__label' onClick={this.handleOpenRepliesModal} role='button' tabIndex={0} >{status.get('replies_count')} Replies</span>\n        </div>\n        <div className='status__action-bar__counter'>\n          <IconButton className={classNames('status__action-bar-button', { reblogPrivate })} disabled={!publicStatus && !reblogPrivate} active={status.get('reblogged')} pressed={status.get('reblogged')} title={reblogTitle} icon='retweet' onClick={this.handleReblogClick} />\n          <span className='status__action-bar__counter__label' onClick={this.handleOpenReblogsModal} role='button' tabIndex={0} >{status.get('reblogs_count')} Reposts</span>\n        </div>\n        <div className='status__action-bar__counter'>\n          <IconButton className='status__action-bar-button star-icon' animate active={status.get('favourited')} pressed={status.get('favourited')} title={intl.formatMessage(messages.favourite)} icon='star' onClick={this.handleFavouriteClick} />\n          <span className='status__action-bar__counter__label' onClick={this.handleOpenFavouritesModal} role='button' tabIndex={0} >{status.get('favourites_count')} Favorites</span>\n        </div>\n\n        <div className='status__action-bar-dropdown'>\n          <DropdownMenuContainer\n            scrollKey={scrollKey}\n            disabled={anonymousAccess}\n            status={status}\n            items={menu}\n            icon='ellipsis-h'\n            size={18}\n            direction='right'\n            title={intl.formatMessage(messages.more)}\n          />\n        </div>\n      </div>\n    );\n  }\n\n}\n","import React from 'react';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport PropTypes from 'prop-types';\nimport Avatar from 'brighteon/components/avatar';\nimport RelativeTimestamp from 'brighteon/components/relative_timestamp';\nimport DisplayName from 'brighteon/components/display_name';\nimport StatusContent from 'brighteon/components/status_content';\nimport AttachmentList from 'brighteon/components/attachment_list';\nimport Card from 'brighteon/features/status/components/card';\nimport { injectIntl, FormattedMessage } from 'react-intl';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport { MediaGallery, Video, Audio } from 'brighteon/features/ui/util/async-components';\nimport { HotKeys } from 'react-hotkeys';\nimport classNames from 'classnames';\nimport Icon from 'brighteon/components/icon';\nimport { displayMedia } from 'brighteon/initial_state';\n\n// We use the component (and not the container) since we do not want\n// to use the progress bar to show download progress\nimport Bundle from 'brighteon/features/ui/components/bundle';\nimport { StatusActionBar } from './components';\n\nexport const textForScreenReader = (intl, status, rebloggedByText = false) => {\n  const displayName = status.getIn(['account', 'display_name']);\n\n  const values = [\n    displayName.length === 0 ? status.getIn(['account', 'acct']).split('@')[0] : displayName,\n    status.get('spoiler_text') && status.get('hidden') ? status.get('spoiler_text') : status.get('search_index').slice(status.get('spoiler_text').length),\n    intl.formatDate(status.get('created_at'), { hour: '2-digit', minute: '2-digit', month: 'short', day: 'numeric' }),\n    status.getIn(['account', 'acct']),\n  ];\n\n  if (rebloggedByText) {\n    values.push(rebloggedByText);\n  }\n\n  return values.join(', ');\n};\n\nexport const defaultMediaVisibility = (status) => {\n  if (!status) {\n    return undefined;\n  }\n\n  if (status.get('reblog', null) !== null && typeof status.get('reblog') === 'object') {\n    status = status.get('reblog');\n  }\n\n  return (displayMedia !== 'hide_all' && !status.get('sensitive') || displayMedia === 'show_all');\n};\n\nexport default @injectIntl\nclass StatusReply extends ImmutablePureComponent {\n\n  static contextTypes = {\n    router: PropTypes.object,\n  };\n\n  static propTypes = {\n    status: ImmutablePropTypes.map,\n    account: ImmutablePropTypes.map,\n    otherAccounts: ImmutablePropTypes.list,\n    onClick: PropTypes.func,\n    onReply: PropTypes.func,\n    onFavourite: PropTypes.func,\n    onReblog: PropTypes.func,\n    onDelete: PropTypes.func,\n    onDirect: PropTypes.func,\n    onMention: PropTypes.func,\n    onPin: PropTypes.func,\n    onOpenMedia: PropTypes.func,\n    onOpenVideo: PropTypes.func,\n    onBlock: PropTypes.func,\n    onEmbed: PropTypes.func,\n    onHeightChange: PropTypes.func,\n    onToggleHidden: PropTypes.func,\n    onToggleCollapsed: PropTypes.func,\n    muted: PropTypes.bool,\n    hidden: PropTypes.bool,\n    unread: PropTypes.bool,\n    onMoveUp: PropTypes.func,\n    onMoveDown: PropTypes.func,\n    showThread: PropTypes.bool,\n    getScrollPosition: PropTypes.func,\n    updateScrollBottom: PropTypes.func,\n    cacheMediaWidth: PropTypes.func,\n    cachedMediaWidth: PropTypes.number,\n    scrollKey: PropTypes.string,\n    onOpenRepliesModal: PropTypes.func,\n    onOpenReblogsModal: PropTypes.func,\n    onOpenFavouritesModal: PropTypes.func,\n  };\n\n  // Avoid checking props that are functions (and whose equality will always\n  // evaluate to false. See react-immutable-pure-component for usage.\n  updateOnProps = [\n    'status',\n    'account',\n    'muted',\n    'hidden',\n  ];\n\n  state = {\n    showMedia: defaultMediaVisibility(this.props.status),\n    statusId: undefined,\n  };\n\n  static getDerivedStateFromProps(nextProps, prevState) {\n    if (nextProps.status && nextProps.status.get('id') !== prevState.statusId) {\n      return {\n        showMedia: defaultMediaVisibility(nextProps.status),\n        statusId: nextProps.status.get('id'),\n      };\n    } else {\n      return null;\n    }\n  }\n\n  handleToggleMediaVisibility = () => {\n    this.setState({ showMedia: !this.state.showMedia });\n  }\n\n  handleClick = () => {\n    if (this.props.onClick) {\n      this.props.onClick();\n      return;\n    }\n\n    const { status } = this.props;\n    window.open(status.get('url'), '_blank');\n  }\n\n  handleExpandClick = (e) => {\n    if (this.props.onClick) {\n      this.props.onClick();\n      return;\n    }\n\n    if (e.button === 0) {\n      if (!this.context.router) {\n        return;\n      }\n\n      const { status } = this.props;\n      this.context.router.history.push(`/statuses/${status.getIn(['reblog', 'id'], status.get('id'))}`);\n    }\n  }\n\n  handleAccountClick = (e) => {\n    if (this.context.router && e.button === 0 && !(e.ctrlKey || e.metaKey)) {\n      const id = e.currentTarget.getAttribute('data-id');\n      e.preventDefault();\n      this.context.router.history.push(`/accounts/${id}`);\n    }\n  }\n\n  handleExpandedToggle = () => {\n    this.props.onToggleHidden(this._properStatus());\n  }\n\n  handleCollapsedToggle = isCollapsed => {\n    this.props.onToggleCollapsed(this._properStatus(), isCollapsed);\n  }\n\n  renderLoadingMediaGallery() {\n    return <div className='media-gallery' style={{ height: '110px' }} />;\n  }\n\n  renderLoadingVideoPlayer() {\n    return <div className='video-player' style={{ height: '110px' }} />;\n  }\n\n  renderLoadingAudioPlayer() {\n    return <div className='audio-player' style={{ height: '110px' }} />;\n  }\n\n  handleOpenVideo = (media, options) => {\n    this.props.onOpenVideo(media, options);\n  }\n\n  handleHotkeyOpenMedia = e => {\n    const { onOpenMedia, onOpenVideo } = this.props;\n    const status = this._properStatus();\n\n    e.preventDefault();\n\n    if (status.get('media_attachments').size > 0) {\n      if (status.getIn(['media_attachments', 0, 'type']) === 'audio') {\n        // TODO: toggle play/paused?\n      } else if (status.getIn(['media_attachments', 0, 'type']) === 'video') {\n        onOpenVideo(status.getIn(['media_attachments', 0]), { startTime: 0 });\n      } else {\n        onOpenMedia(status.get('media_attachments'), 0);\n      }\n    }\n  }\n\n  handleHotkeyReply = e => {\n    e.preventDefault();\n    this.props.onReply(this._properStatus(), this.context.router.history);\n  }\n\n  handleHotkeyFavourite = () => {\n    this.props.onFavourite(this._properStatus());\n  }\n\n  handleHotkeyBoost = e => {\n    this.props.onReblog(this._properStatus(), e);\n  }\n\n  handleHotkeyMention = e => {\n    e.preventDefault();\n    this.props.onMention(this._properStatus().get('account'), this.context.router.history);\n  }\n\n  handleHotkeyOpen = () => {\n    this.context.router.history.push(`/statuses/${this._properStatus().get('id')}`);\n  }\n\n  handleHotkeyOpenProfile = () => {\n    this.context.router.history.push(`/accounts/${this._properStatus().getIn(['account', 'id'])}`);\n  }\n\n  handleHotkeyMoveUp = e => {\n    this.props.onMoveUp(this.props.status.get('id'), e.target.getAttribute('data-featured'));\n  }\n\n  handleHotkeyMoveDown = e => {\n    this.props.onMoveDown(this.props.status.get('id'), e.target.getAttribute('data-featured'));\n  }\n\n  handleHotkeyToggleHidden = () => {\n    this.props.onToggleHidden(this._properStatus());\n  }\n\n  handleHotkeyToggleSensitive = () => {\n    this.handleToggleMediaVisibility();\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  handleRef = c => {\n    this.node = c;\n  }\n\n  render() {\n    let media = null;\n    let statusAvatar, prepend, rebloggedByText;\n\n    const { intl, hidden, featured, otherAccounts, unread, showThread, scrollKey } = this.props;\n\n    let { status, account, ...other } = this.props;\n\n    if (status === null) {\n      return null;\n    }\n\n    const handlers = this.props.muted ? {} : {\n      reply: this.handleHotkeyReply,\n      favourite: this.handleHotkeyFavourite,\n      boost: this.handleHotkeyBoost,\n      mention: this.handleHotkeyMention,\n      open: this.handleHotkeyOpen,\n      openProfile: this.handleHotkeyOpenProfile,\n      moveUp: this.handleHotkeyMoveUp,\n      moveDown: this.handleHotkeyMoveDown,\n      toggleHidden: this.handleHotkeyToggleHidden,\n      toggleSensitive: this.handleHotkeyToggleSensitive,\n      openMedia: this.handleHotkeyOpenMedia,\n    };\n\n    if (hidden) {\n      return (\n        <HotKeys handlers={handlers}>\n          <div ref={this.handleRef} className={classNames('status__wrapper', { focusable: !this.props.muted })} tabIndex='0'>\n            {status.getIn(['account', 'display_name']) || status.getIn(['account', 'username'])}\n            {status.get('content')}\n          </div>\n        </HotKeys>\n      );\n    }\n\n    if (status.get('filtered') || status.getIn(['reblog', 'filtered'])) {\n      const minHandlers = this.props.muted ? {} : {\n        moveUp: this.handleHotkeyMoveUp,\n        moveDown: this.handleHotkeyMoveDown,\n      };\n\n      return (\n        <HotKeys handlers={minHandlers}>\n          <div className='status__wrapper status__wrapper--filtered focusable' tabIndex='0' ref={this.handleRef}>\n            <FormattedMessage id='status.filtered' defaultMessage='Filtered' />\n          </div>\n        </HotKeys>\n      );\n    }\n\n    if (featured) {\n      prepend = (\n        <div className='status__prepend'>\n          <div className='status__prepend-icon-wrapper'><Icon id='thumb-tack' className='status__prepend-icon' fixedWidth /></div>\n          <FormattedMessage id='status.pinned' defaultMessage='Pinned toot' />\n        </div>\n      );\n    } else if (status.get('reblog', null) !== null && typeof status.get('reblog') === 'object') {\n      const display_name_html = { __html: status.getIn(['account', 'display_name_html']) };\n\n      prepend = (\n        <div className='status__prepend'>\n          <div className='status__prepend-icon-wrapper'><Icon id='retweet' className='status__prepend-icon' fixedWidth /></div>\n          <FormattedMessage id='status.reblogged_by' defaultMessage='{name} boosted' values={{ name: <a onClick={this.handleAccountClick} data-id={status.getIn(['account', 'id'])} href={status.getIn(['account', 'url'])} className='status__display-name muted'><bdi><strong dangerouslySetInnerHTML={display_name_html} /></bdi></a> }} />\n        </div>\n      );\n\n      rebloggedByText = intl.formatMessage({ id: 'status.reblogged_by', defaultMessage: '{name} boosted' }, { name: status.getIn(['account', 'acct']) });\n\n      account = status.get('account');\n      status = status.get('reblog');\n    }\n\n    if (status.get('media_attachments').size > 0) {\n      if (this.props.muted) {\n        media = (\n          <AttachmentList\n            compact\n            media={status.get('media_attachments')}\n          />\n        );\n      } else if (status.getIn(['media_attachments', 0, 'type']) === 'audio') {\n        const attachment = status.getIn(['media_attachments', 0]);\n\n        media = (\n          <Bundle fetchComponent={Audio} loading={this.renderLoadingAudioPlayer} >\n            {Component => (\n              <Component\n                src={attachment.get('url')}\n                alt={attachment.get('description')}\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                duration={attachment.getIn(['meta', 'original', 'duration'], 0)}\n                width={this.props.cachedMediaWidth}\n                height={110}\n                cacheWidth={this.props.cacheMediaWidth}\n              />\n            )}\n          </Bundle>\n        );\n      } else if (status.getIn(['media_attachments', 0, 'type']) === 'video') {\n        const attachment = status.getIn(['media_attachments', 0]);\n\n        media = (\n          <Bundle fetchComponent={Video} loading={this.renderLoadingVideoPlayer} >\n            {Component => (\n              <Component\n                preview={attachment.get('preview_url')}\n                blurhash={attachment.get('blurhash')}\n                src={attachment.get('url')}\n                alt={attachment.get('description')}\n                width={this.props.cachedMediaWidth}\n                height={110}\n                inline\n                sensitive={status.get('sensitive')}\n                onOpenVideo={this.handleOpenVideo}\n                cacheWidth={this.props.cacheMediaWidth}\n                visible={this.state.showMedia}\n                onToggleVisibility={this.handleToggleMediaVisibility}\n              />\n            )}\n          </Bundle>\n        );\n      } else {\n        media = (\n          <Bundle fetchComponent={MediaGallery} loading={this.renderLoadingMediaGallery}>\n            {Component => (\n              <Component\n                media={status.get('media_attachments')}\n                sensitive={status.get('sensitive')}\n                height={110}\n                onOpenMedia={this.props.onOpenMedia}\n                cacheWidth={this.props.cacheMediaWidth}\n                defaultWidth={this.props.cachedMediaWidth}\n                visible={this.state.showMedia}\n                onToggleVisibility={this.handleToggleMediaVisibility}\n              />\n            )}\n          </Bundle>\n        );\n      }\n    } else if (status.get('spoiler_text').length === 0 && status.get('card')) {\n      media = (\n        <Card\n          onOpenMedia={this.props.onOpenMedia}\n          card={status.get('card')}\n          cacheWidth={this.props.cacheMediaWidth}\n          defaultWidth={this.props.cachedMediaWidth}\n          sensitive={status.get('sensitive')}\n        />\n      );\n    }\n\n    // if (otherAccounts && otherAccounts.size > 0) {\n    //   statusAvatar = <AvatarComposite accounts={otherAccounts} size={48} />;\n    // } else if (account === undefined || account === null) {\n    //   statusAvatar = <Avatar account={status.get('account')} size={48} />;\n    // } else {\n    //   statusAvatar = <AvatarOverlay account={status.get('account')} friend={account} />;\n    // }\n    statusAvatar = <Avatar account={status.get('account')} size={36} />;\n\n    return (\n      <HotKeys handlers={handlers}>\n        <div className={classNames('status__wrapper', `status__wrapper-${status.get('visibility')}`, { 'status__wrapper-reply': !!status.get('in_reply_to_id'), read: unread === false, focusable: !this.props.muted })} tabIndex={this.props.muted ? null : 0} data-featured={featured ? 'true' : null} aria-label={textForScreenReader(intl, status, rebloggedByText)} ref={this.handleRef}>\n          {prepend}\n\n          <div className={classNames('status__reply', `status-${status.get('visibility')}`, { 'status-reply': !!status.get('in_reply_to_id'), muted: this.props.muted, read: unread === false })} data-id={status.get('id')}>\n            <div className='status__info'>\n              <div>\n                <a onClick={this.handleAccountClick} data-id={status.getIn(['account', 'id'])} href={status.getIn(['account', 'url'])} title={status.getIn(['account', 'acct'])} className='status__display-name' target='_blank' rel='noopener noreferrer'>\n                  <div className='status__avatar'>\n                    {statusAvatar}\n                  </div>\n\n                  <DisplayName account={status.get('account')} others={otherAccounts} />\n                </a>\n              </div>\n              <div>\n                <a\n                  href={status.get('url')}\n                  className='status__relative-time'\n                  target='_blank'\n                  rel='noopener noreferrer'\n                >\n                  <RelativeTimestamp timestamp={status.get('created_at')} />\n                </a>\n                {/*<span className='status__visibility-icon'><Icon id={visibilityIcon.icon} title={visibilityIcon.text} /></span>*/}\n              </div>\n            </div>\n\n            <StatusContent status={status} onClick={this.handleClick} expanded={!status.get('hidden')} showThread={showThread} onExpandedToggle={this.handleExpandedToggle} collapsable onCollapsedToggle={this.handleCollapsedToggle} />\n\n            {media}\n\n            <StatusActionBar scrollKey={scrollKey} status={status} account={account} {...other} />\n            {this.props.children}\n          </div>\n        </div>\n      </HotKeys>\n    );\n  }\n\n}\n","import StatusReply from './status_reply';\n\nexport default StatusReply;\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport StatusReply from '../components/status_reply';\nimport { makeGetStatus } from 'brighteon/selectors';\nimport {\n  replyCompose,\n  mentionCompose,\n  directCompose,\n  showComposePopup,\n} from 'brighteon/actions/compose';\nimport {\n  reblog,\n  favourite,\n  bookmark,\n  unreblog,\n  unfavourite,\n  unbookmark,\n  pin,\n  unpin,\n} from 'brighteon/actions/interactions';\nimport {\n  muteStatus,\n  unmuteStatus,\n  deleteStatus,\n  hideStatus,\n  revealStatus,\n  toggleStatusCollapse,\n  editStatus,\n} from 'brighteon/actions/statuses';\nimport {\n  unmuteAccount,\n  unblockAccount,\n} from 'brighteon/actions/accounts';\nimport {\n  blockDomain,\n  unblockDomain,\n} from 'brighteon/actions/domain_blocks';\nimport { initMuteModal } from 'brighteon/actions/mutes';\nimport { initBlockModal } from 'brighteon/actions/blocks';\nimport { initReport } from 'brighteon/actions/reports';\nimport { openModal } from 'brighteon/actions/modal';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport { boostModal, deleteModal, me } from 'brighteon/initial_state';\nimport { showAlertForError } from 'brighteon/actions/alerts';\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? Favourites and boosts will be lost, and replies to the original post will be orphaned.' },\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: 'Hide entire domain' },\n});\n\nconst makeMapStateToProps = () => {\n  const getStatus = makeGetStatus();\n\n  const mapStateToProps = (state, props) => ({\n    status: getStatus(state, props),\n    account: state.getIn(['accounts', me]),\n  });\n\n  return mapStateToProps;\n};\n\nconst mapDispatchToProps = (dispatch, { intl }) => ({\n\n  onReply(status, router) {\n    dispatch((_, getState) => {\n      let state = getState();\n\n      if (state.getIn(['compose', 'text']).trim().length !== 0) {\n        dispatch(openModal('CONFIRM', {\n          message: intl.formatMessage(messages.replyMessage),\n          confirm: intl.formatMessage(messages.replyConfirm),\n          onConfirm: () => {\n            dispatch(replyCompose(status, router));\n            dispatch(showComposePopup(true));\n          },\n        }));\n      } else {\n        dispatch(replyCompose(status, router));\n        dispatch(showComposePopup(true));\n      }\n    });\n  },\n\n  onModalReblog(status) {\n    if (status.get('reblogged')) {\n      dispatch(unreblog(status));\n    } else {\n      dispatch(reblog(status));\n    }\n  },\n\n  onReblog(status, e) {\n    if ((e && e.shiftKey) || !boostModal) {\n      this.onModalReblog(status);\n    } else {\n      dispatch(openModal('BOOST', { status, onReblog: this.onModalReblog }));\n    }\n  },\n\n  onFavourite(status) {\n    if (status.get('favourited')) {\n      dispatch(unfavourite(status));\n    } else {\n      dispatch(favourite(status));\n    }\n  },\n\n  onBookmark(status) {\n    if (status.get('bookmarked')) {\n      dispatch(unbookmark(status));\n    } else {\n      dispatch(bookmark(status));\n    }\n  },\n\n  onPin(status) {\n    if (status.get('pinned')) {\n      dispatch(unpin(status));\n    } else {\n      dispatch(pin(status));\n    }\n  },\n\n  onEmbed(status) {\n    dispatch(openModal('EMBED', {\n      url: status.get('url'),\n      onError: error => dispatch(showAlertForError(error)),\n    }));\n  },\n\n  onDelete(status, withRedraft = false) {\n    if (!deleteModal) {\n      dispatch(deleteStatus(status.get('id'), withRedraft));\n    } else {\n      dispatch(openModal('CONFIRM', {\n        message: intl.formatMessage(withRedraft ? messages.redraftMessage : messages.deleteMessage),\n        confirm: intl.formatMessage(withRedraft ? messages.redraftConfirm : messages.deleteConfirm),\n        onConfirm: () => {\n          dispatch(deleteStatus(status.get('id'), withRedraft));\n          if (withRedraft) {\n            dispatch(showComposePopup(true));\n          }\n        },\n      }));\n    }\n  },\n\n  onEdit (status) {\n    dispatch(editStatus(status.get('id')));\n    dispatch(showComposePopup(true));\n  },\n\n  onDirect(account, router) {\n    dispatch(directCompose(account, router));\n  },\n\n  onMention(account, router) {\n    dispatch(mentionCompose(account, router));\n  },\n\n  onOpenMedia(media, index) {\n    dispatch(openModal('MEDIA', { media, index }));\n  },\n\n  onOpenVideo(media, options) {\n    dispatch(openModal('VIDEO', { media, options }));\n  },\n\n  onBlock(status) {\n    const account = status.get('account');\n    dispatch(initBlockModal(account));\n  },\n\n  onUnblock(account) {\n    dispatch(unblockAccount(account.get('id')));\n  },\n\n  onReport(status) {\n    dispatch(initReport(status.get('account'), status));\n  },\n\n  onMute(account) {\n    dispatch(initMuteModal(account));\n  },\n\n  onUnmute(account) {\n    dispatch(unmuteAccount(account.get('id')));\n  },\n\n  onMuteConversation(status) {\n    if (status.get('muted')) {\n      dispatch(unmuteStatus(status.get('id')));\n    } else {\n      dispatch(muteStatus(status.get('id')));\n    }\n  },\n\n  onToggleHidden(status) {\n    if (status.get('hidden')) {\n      dispatch(revealStatus(status.get('id')));\n    } else {\n      dispatch(hideStatus(status.get('id')));\n    }\n  },\n\n  onToggleCollapsed(status, isCollapsed) {\n    dispatch(toggleStatusCollapse(status.get('id'), isCollapsed));\n  },\n\n  onBlockDomain(domain) {\n    dispatch(openModal('CONFIRM', {\n      message: <FormattedMessage id='confirmations.domain_block.message' defaultMessage='Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.' values={{ domain: <strong>{domain}</strong> }} />,\n      confirm: intl.formatMessage(messages.blockDomainConfirm),\n      onConfirm: () => dispatch(blockDomain(domain)),\n    }));\n  },\n\n  onUnblockDomain(domain) {\n    dispatch(unblockDomain(domain));\n  },\n\n  onOpenRepliesModal(status) {\n    dispatch(openModal('REPLIES', {\n      status,\n    }));\n  },\n\n  onOpenReblogsModal(status) {\n    dispatch(openModal('REBLOGS', {\n      status,\n    }));\n  },\n\n  onOpenFavouritesModal(status) {\n    dispatch(openModal('FAVOURITES', {\n      status,\n    }));\n  },\n});\n\nexport default injectIntl(connect(makeMapStateToProps, mapDispatchToProps)(StatusReply));\n","import { connect } from 'react-redux';\nimport ComposeForm from '../components/compose_form';\nimport {\n  changeCompose,\n  submitCompose,\n  clearComposeSuggestions,\n  fetchComposeSuggestions,\n  selectComposeSuggestion,\n  changeComposeSpoilerText,\n  insertEmojiCompose,\n  uploadCompose,\n  replyCompose,\n  // } from 'brighteon/actions/compose';\n} from 'brighteon/actions/compose_in_reply';\nimport { closeModal } from 'brighteon/actions/modal';\n\nconst mapStateToProps = state => ({\n  text: state.getIn(['compose_in_reply', 'text']),\n  suggestions: state.getIn(['compose_in_reply', 'suggestions']),\n  spoiler: state.getIn(['compose_in_reply', 'spoiler']),\n  spoilerText: state.getIn(['compose_in_reply', 'spoiler_text']),\n  privacy: state.getIn(['compose_in_reply', 'privacy']),\n  focusDate: state.getIn(['compose_in_reply', 'focusDate']),\n  caretPosition: state.getIn(['compose_in_reply', 'caretPosition']),\n  preselectDate: state.getIn(['compose_in_reply', 'preselectDate']),\n  isSubmitting: state.getIn(['compose_in_reply', 'is_submitting']),\n  isChangingUpload: state.getIn(['compose_in_reply', 'is_changing_upload']),\n  isUploading: state.getIn(['compose_in_reply', 'is_uploading']),\n  showSearch: state.getIn(['search', 'submitted']) && !state.getIn(['search', 'hidden']),\n  anyMedia: state.getIn(['compose_in_reply', 'media_attachments']).size > 0,\n  inReplyTo: state.getIn(['compose_in_reply', 'in_reply_to']),\n});\n\nconst mapDispatchToProps = (dispatch) => ({\n\n  onChange(text) {\n    dispatch(changeCompose(text));\n  },\n\n  onSubmit(router) {\n    dispatch(submitCompose(router));\n  },\n\n  onClearSuggestions() {\n    dispatch(clearComposeSuggestions());\n  },\n\n  onFetchSuggestions(token) {\n    dispatch(fetchComposeSuggestions(token));\n  },\n\n  onSuggestionSelected(position, token, suggestion, path) {\n    dispatch(selectComposeSuggestion(position, token, suggestion, path));\n  },\n\n  onChangeSpoilerText(checked) {\n    dispatch(changeComposeSpoilerText(checked));\n  },\n\n  onPaste(files) {\n    dispatch(uploadCompose(files));\n  },\n\n  onPickEmoji(position, data, needsSpace) {\n    dispatch(insertEmojiCompose(position, data, needsSpace));\n  },\n\n  closeComposeModal() {\n    dispatch(closeModal('COMPOSE'));\n  },\n\n  replyCompose(status) {\n    dispatch(replyCompose(status));\n  },\n\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(ComposeForm);\n","import React from 'react';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport PropTypes from 'prop-types';\nimport Avatar from 'brighteon/components/avatar';\nimport RelativeTimestamp from 'brighteon/components/relative_timestamp';\nimport DisplayName from 'brighteon/components/display_name';\nimport StatusContent from 'brighteon/components/status_content';\nimport { StatusActionBar } from './components';\nimport AttachmentList from 'brighteon/components/attachment_list';\nimport Card from 'brighteon/features/status/components/card';\nimport { injectIntl, FormattedMessage } from 'react-intl';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport { MediaGallery, Video, Audio } from 'brighteon/features/ui/util/async-components';\nimport classNames from 'classnames';\nimport Icon from 'brighteon/components/icon';\nimport { displayMedia } from 'brighteon/initial_state';\nimport api from 'brighteon/api';\nimport { checkIfAndroid } from 'brighteon/is_mobile';\nimport Immutable from 'immutable';\n\n// We use the component (and not the container) since we do not want\n// to use the progress bar to show download progress\nimport Bundle from 'brighteon/features/ui/components/bundle';\nimport { importFetchedStatuses } from 'brighteon/actions/importer';\n\nimport { connect } from 'react-redux';\nimport { StatusReplyContainer } from './containers';\nimport ComposeFormContainer from '../../../../../../brighteon/components/status_with_reply/containers/compose_form_container';\n\nexport const textForScreenReader = (intl, status, rebloggedByText = false) => {\n  const displayName = status.getIn(['account', 'display_name']);\n\n  const values = [\n    displayName.length === 0 ? status.getIn(['account', 'acct']).split('@')[0] : displayName,\n    status.get('spoiler_text') && status.get('hidden') ? status.get('spoiler_text') : status.get('search_index').slice(status.get('spoiler_text').length),\n    intl.formatDate(status.get('created_at'), { hour: '2-digit', minute: '2-digit', month: 'short', day: 'numeric' }),\n    status.getIn(['account', 'acct']),\n  ];\n\n  if (rebloggedByText) {\n    values.push(rebloggedByText);\n  }\n\n  return values.join(', ');\n};\n\nexport const defaultMediaVisibility = (status) => {\n  if (!status) {\n    return undefined;\n  }\n\n  if (status.get('reblog', null) !== null && typeof status.get('reblog') === 'object') {\n    status = status.get('reblog');\n  }\n\n  return (displayMedia !== 'hide_all' && !status.get('sensitive') || displayMedia === 'show_all');\n};\n\nconst mapDispatchToProps = dispatch => ({\n  importFetchedStatuses: (...args) => dispatch(importFetchedStatuses(...args)),\n});\n\nconst mapStateToProps = state => ({\n  me: state.getIn(['meta', 'me']),\n});\n\nexport default @connect(mapStateToProps, mapDispatchToProps) @injectIntl\nclass Status extends ImmutablePureComponent {\n\n  static contextTypes = {\n    router: PropTypes.object,\n  };\n\n  static propTypes = {\n    statuses: ImmutablePropTypes.map,\n    status: ImmutablePropTypes.map,\n    account: ImmutablePropTypes.map,\n    accounts: ImmutablePropTypes.map,\n    otherAccounts: ImmutablePropTypes.list,\n    onClick: PropTypes.func,\n    onReply: PropTypes.func,\n    onFavourite: PropTypes.func,\n    onReblog: PropTypes.func,\n    onDelete: PropTypes.func,\n    onDirect: PropTypes.func,\n    onMention: PropTypes.func,\n    onPin: PropTypes.func,\n    onOpenMedia: PropTypes.func,\n    onOpenVideo: PropTypes.func,\n    onBlock: PropTypes.func,\n    onEmbed: PropTypes.func,\n    onHeightChange: PropTypes.func,\n    onToggleHidden: PropTypes.func,\n    onToggleCollapsed: PropTypes.func,\n    muted: PropTypes.bool,\n    hidden: PropTypes.bool,\n    unread: PropTypes.bool,\n    onMoveUp: PropTypes.func,\n    onMoveDown: PropTypes.func,\n    showThread: PropTypes.bool,\n    showPinnedMsg: PropTypes.bool,\n    getScrollPosition: PropTypes.func,\n    updateScrollBottom: PropTypes.func,\n    cacheMediaWidth: PropTypes.func,\n    cachedMediaWidth: PropTypes.number,\n    scrollKey: PropTypes.string,\n    username: PropTypes.string,\n    avatar: PropTypes.string,\n    statusId: PropTypes.any,\n    replyOrigin: PropTypes.any,\n    onOpenRepliesModal: PropTypes.func,\n    onOpenReblogsModal: PropTypes.func,\n    onOpenFavouritesModal: PropTypes.func,\n  };\n\n  // Avoid checking props that are functions (and whose equality will always\n  // evaluate to false. See react-immutable-pure-component for usage.\n  updateOnProps = [\n    'status',\n    'account',\n    'muted',\n    'hidden',\n  ];\n\n  state = {\n    showMedia: new Immutable.Map({}),\n    statusId: undefined,\n    rerenderFlag: false,\n    showReplyBox: true,\n    showAllReplies: false,\n  };\n\n  static getDerivedStateFromProps(nextProps, prevState) {\n    if (nextProps.status && nextProps.status.get('id') !== prevState.statusId) {\n      return {\n        // showMedia: defaultMediaVisibility(nextProps.status),\n        statusId: nextProps.status.get('id'),\n      };\n    } else {\n      return null;\n    }\n  }\n\n  handleToggleMediaVisibility = (status) => () => {\n    const statusId = status.get('id');\n    const currentShowMediaOpt = this.state.showMedia.get(statusId);\n    const newShowMedia = this.state.showMedia.set(statusId, currentShowMediaOpt ? false : true);\n    this.setState({ showMedia: newShowMedia });\n  }\n\n  handleClick = (status) => () => {\n    window.open(status.get('url'), '_blank');\n  }\n\n  handleExpandClick = (e) => {\n    if (this.props.onClick) {\n      this.props.onClick();\n      return;\n    }\n\n    if (e.button === 0) {\n      if (!this.context.router) {\n        return;\n      }\n\n      const { status } = this.props;\n      this.context.router.history.push(`/statuses/${status.getIn(['reblog', 'id'], status.get('id'))}`);\n    }\n  }\n\n  handleAccountClick = () => {\n    // if (this.context.router && e.button === 0 && !(e.ctrlKey || e.metaKey)) {\n    //   const id = e.currentTarget.getAttribute('data-id');\n    //   e.preventDefault();\n    //   this.context.router.history.push(`/accounts/${id}`);\n    // }\n  }\n\n  handleExpandedToggle = () => {\n    this.props.onToggleHidden(this._properStatus());\n  }\n\n  handleCollapsedToggle = isCollapsed => {\n    this.props.onToggleCollapsed(this._properStatus(), isCollapsed);\n  }\n\n  renderLoadingMediaGallery() {\n    return <div className='media-gallery' style={{ height: '110px' }} />;\n  }\n\n  renderLoadingVideoPlayer() {\n    return <div className='video-player' style={{ height: '110px' }} />;\n  }\n\n  renderLoadingAudioPlayer() {\n    return <div className='audio-player' style={{ height: '110px' }} />;\n  }\n\n  handleOpenVideo = (media, options) => {\n    this.props.onOpenVideo(media, options);\n  }\n\n  handleHotkeyOpenMedia = e => {\n    const { onOpenMedia, onOpenVideo } = this.props;\n    const status = this._properStatus();\n\n    e.preventDefault();\n\n    if (status.get('media_attachments').size > 0) {\n      if (status.getIn(['media_attachments', 0, 'type']) === 'audio') {\n        // TODO: toggle play/paused?\n      } else if (status.getIn(['media_attachments', 0, 'type']) === 'video') {\n        onOpenVideo(status.getIn(['media_attachments', 0]), { startTime: 0 });\n      } else {\n        onOpenMedia(status.get('media_attachments'), 0);\n      }\n    }\n  }\n\n  handleHotkeyReply = e => {\n    e.preventDefault();\n    this.props.onReply(this._properStatus(), this.context.router.history);\n  }\n\n  handleHotkeyFavourite = () => {\n    this.props.onFavourite(this._properStatus());\n  }\n\n  handleHotkeyBoost = e => {\n    this.props.onReblog(this._properStatus(), e);\n  }\n\n  handleHotkeyMention = e => {\n    e.preventDefault();\n    this.props.onMention(this._properStatus().get('account'), this.context.router.history);\n  }\n\n  handleHotkeyOpen = () => {\n    this.context.router.history.push(`/statuses/${this._properStatus().get('id')}`);\n  }\n\n  handleHotkeyOpenProfile = () => {\n    this.context.router.history.push(`/accounts/${this._properStatus().getIn(['account', 'id'])}`);\n  }\n\n  handleHotkeyMoveUp = e => {\n    this.props.onMoveUp(this.props.status.get('id'), e.target.getAttribute('data-featured'));\n  }\n\n  handleHotkeyMoveDown = e => {\n    this.props.onMoveDown(this.props.status.get('id'), e.target.getAttribute('data-featured'));\n  }\n\n  handleHotkeyToggleHidden = () => {\n    this.props.onToggleHidden(this._properStatus());\n  }\n\n  handleHotkeyToggleSensitive = () => {\n    this.handleToggleMediaVisibility(this.props.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  handleRef = c => {\n    this.node = c;\n  }\n\n  handleReply = () => {\n    // this.props.onReply(this.props.status);\n    this.replyTextareaRef.textarea.focus();\n  }\n\n  setTextareaRef = (c) => {\n    this.replyTextareaRef = c;\n  }\n\n  toggleShowAllReplies = () => {\n    this.setState({\n      showAllReplies: !this.state.showAllReplies,\n    });\n  }\n\n  // OnInput() {\n  //   this.style.height = 'auto';\n  //   this.style.height = (this.scrollHeight) + 'px';\n  // }\n\n  getDescendants = () => {\n    const { status } = this.props;\n    let status_id = status.get('reblog') && status.getIn(['reblog', 'id']);\n    status_id = status_id || status.get('id');\n    api().get(`/api/v1/statuses/${status_id}/context`)\n      .then(({ data }) => {\n        if (data.descendants.length > 0) {\n          this.props.importFetchedStatuses(data.descendants);\n        }\n        if (data.ancestors.length > 0) {\n          this.props.importFetchedStatuses(data.ancestors);\n        }\n        if (data.ancestors.length > 0 || data.descendants.length > 0) {\n          // workaround start: force rerender\n          this.setState({\n            rerenderFlag: true,\n          });\n          this.setState({\n            rerenderFlag: false,\n          });\n          // workaround end\n        }\n      })\n      .catch(err => {\n        console.error(err);\n      });\n  }\n\n  componentDidMount() {\n    if (this.props.status) {\n      this.getDescendants();\n      if (this.props.status.get('replies_count') === 0) {\n        const status = this.props.status.get('reblog');\n        if (status && status.get('replies_count') > 0) {\n          this.getDescendants();\n        }\n      }\n    }\n  }\n\n  ensureShowReplyBox = () => {\n    if (checkIfAndroid()) {\n      let element = this.replyBox;\n\n      let yPosition = 0;\n      while (element) {\n        yPosition += (element.offsetTop - element.scrollTop + element.clientTop);\n        element = element.offsetParent;\n      }\n      if (yPosition - window.scrollY > 300) {\n        window.scrollBy(0, 200);\n      }\n    }\n  }\n\n  originContent = (status_id) => {\n    let originStatus = '';\n    let { showThread, avatar, statusId, replyOrigin, ...other } = this.props;\n    const status = this.props.statuses.get(status_id);\n    if (!status) {\n      return '';\n    }\n    if (status.get('in_reply_to')) {\n      originStatus = this.originContent(status.get('in_reply_to_id'));\n    }\n\n    const account_id = status.get('account');\n    const account = this.props.accounts.get(account_id);\n    const replies = Object.values(this.props.statuses.toJS())\n      .filter(st => st.in_reply_to_id === status.get('id'))\n      .sort((st1, st2) => st1.created_at > st2.created_at ? 1 : -1);\n    const repliesCount = replies.length;\n\n    return (\n      <>\n        {originStatus}\n        <div className={classNames('status', `status-${status.get('visibility')}`, { 'status-reply': !!status.get('in_reply_to_id') })} data-id={status.get('id')}>\n          <div className='status__expand' onClick={this.handleExpandClick} role='presentation' />\n          <div className='status__info'>\n            <div>\n              <a onClick={this.handleAccountClick} data-id={status.getIn(['account', 'id'])} href={status.getIn(['account', 'url'])} title={status.getIn(['account', 'acct'])} className='status__display-name' target='_blank' rel='noopener noreferrer'>\n                <div className='status__avatar'>\n                  <Avatar account={account} size={48} />\n                </div>\n                <DisplayName account={account} />\n              </a>\n            </div>\n            <div>\n              <a href={status.get('url')} className='status__relative-time' target='_blank' rel='noopener noreferrer'>\n                <RelativeTimestamp timestamp={status.get('created_at')} />\n              </a>\n            </div>\n          </div>\n\n          <StatusContent status={status} onClick={this.handleClick(status)} expanded={!status.get('hidden')} showThread={showThread} onExpandedToggle={this.handleExpandedToggle} collapsable onCollapsedToggle={this.handleCollapsedToggle} />\n\n          {this.mediaSection(status)}\n\n          <StatusActionBar onReply={this.handleReply} repliesCount={repliesCount} {...other} status={status} account={account} />\n        </div>\n      </>\n    );\n\n  }\n\n  mediaSection = (status) => {\n    let media = null;\n    if (status.get('media_attachments').size > 0) {\n      if (this.props.muted) {\n        media = (\n          <AttachmentList\n            compact\n            media={status.get('media_attachments')}\n          />\n        );\n      } else if (status.getIn(['media_attachments', 0, 'type']) === 'audio') {\n        const attachment = status.getIn(['media_attachments', 0]);\n\n        media = (\n          <Bundle fetchComponent={Audio} loading={this.renderLoadingAudioPlayer}>\n            {Component => (\n              <Component\n                src={attachment.get('url')}\n                alt={attachment.get('description')}\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                duration={attachment.getIn(['meta', 'original', 'duration'], 0)}\n                width={this.props.cachedMediaWidth}\n                height={110}\n                cacheWidth={this.props.cacheMediaWidth}\n              />\n            )}\n          </Bundle>\n        );\n      } else if (status.getIn(['media_attachments', 0, 'type']) === 'video') {\n        const attachment = status.getIn(['media_attachments', 0]);\n\n        media = (\n          <Bundle fetchComponent={Video} loading={this.renderLoadingVideoPlayer}>\n            {Component => (\n              <Component\n                preview={attachment.get('preview_url')}\n                blurhash={attachment.get('blurhash')}\n                src={attachment.get('url')}\n                alt={attachment.get('description')}\n                width={this.props.cachedMediaWidth}\n                height={110}\n                inline\n                sensitive={status.get('sensitive')}\n                onOpenVideo={this.handleOpenVideo}\n                cacheWidth={this.props.cacheMediaWidth}\n                visible={this.state.showMedia.get(status.get('id'))}\n                onToggleVisibility={this.handleToggleMediaVisibility(status)}\n              />\n            )}\n          </Bundle>\n        );\n      } else {\n        media = (\n          <Bundle fetchComponent={MediaGallery} loading={this.renderLoadingMediaGallery}>\n            {Component => (\n              <Component\n                media={status.get('media_attachments')}\n                sensitive={status.get('sensitive')}\n                height={110}\n                onOpenMedia={this.props.onOpenMedia}\n                cacheWidth={this.props.cacheMediaWidth}\n                defaultWidth={this.props.cachedMediaWidth}\n                visible={this.state.showMedia.get(status.get('id'))}\n                onToggleVisibility={this.handleToggleMediaVisibility(status)}\n              />\n            )}\n          </Bundle>\n        );\n      }\n    } else if (status.get('spoiler_text').length === 0 && status.get('card')) {\n      media = (\n        <Card\n          onOpenMedia={this.props.onOpenMedia}\n          card={status.get('card')}\n          cacheWidth={this.props.cacheMediaWidth}\n          defaultWidth={this.props.cachedMediaWidth}\n          sensitive={status.get('sensitive')}\n        />\n      );\n    }\n\n    return media;\n  }\n\n  render () {\n    let media = null;\n    let statusAvatar, prepend = '', rebloggedByText;\n\n    const { intl, hidden, featured, otherAccounts, unread, showThread, scrollKey, showPinnedMsg, pinned } = this.props;\n\n    let { status, account, username, avatar, statusId, replyOrigin, ...other } = this.props;\n\n    if (status === null) {\n      return null;\n    }\n\n    if (replyOrigin && status.get('visibility') !== 'public') {\n      return '';\n    }\n\n    if (hidden) {\n      return (\n        <div ref={this.handleRef} className={classNames('status__wrapper', { focusable: !this.props.muted })} tabIndex='0'>\n          {status.getIn(['account', 'display_name']) || status.getIn(['account', 'username'])}\n          {status.get('content')}\n        </div>\n      );\n    }\n\n    if (status.get('filtered') || status.getIn(['reblog', 'filtered'])) {\n      return (\n        <div className='status__wrapper status__wrapper--filtered focusable' tabIndex='0' ref={this.handleRef}>\n          <FormattedMessage id='status.filtered' defaultMessage='Filtered' />\n        </div>\n      );\n    }\n\n    if (replyOrigin) {\n      const display_name_html = { __html: status.getIn(['account', 'display_name_html']) };\n\n      prepend = (\n        <div className='status__prepend'>\n          <FormattedMessage id='status.replied_to' defaultMessage=\"{origin} replied to {name}'s post\" values={{ origin: replyOrigin, name: <a onClick={this.handleAccountClick} data-id={status.getIn(['account', 'id'])} href={status.getIn(['account', 'url'])} className='status__display-name muted'><bdi><strong dangerouslySetInnerHTML={display_name_html} /></bdi></a> }} />\n        </div>\n      );\n    }\n\n    if (pinned && status.get('pinned')) {\n      prepend = showPinnedMsg && (\n        <>\n          {prepend}\n          <div className='status__prepend'>\n            <div className='status__prepend-icon-wrapper'><Icon id='thumb-tack' className='status__prepend-icon' size={20} /></div>\n            <FormattedMessage id='status.pinned' defaultMessage='Pinned post' />\n          </div>\n          <div className='border' />\n        </>\n      );\n    } else if (status.get('reblog', null) !== null && typeof status.get('reblog') === 'object') {\n      const display_name_html = { __html: status.getIn(['account', 'display_name_html']) };\n\n      prepend = (\n        <>\n          {prepend}\n          <div className='status__prepend'>\n            <div className='status__prepend-icon-wrapper'><Icon id='retweet' className='status__prepend-icon' size={20} /></div>\n            <FormattedMessage id='status.reblogged_by' defaultMessage='{name} reposted' values={{ name: <a onClick={this.handleAccountClick} data-id={status.getIn(['account', 'id'])} href={status.getIn(['account', 'url'])} className='status__display-name muted'><bdi><strong dangerouslySetInnerHTML={display_name_html} /></bdi></a> }} />\n          </div>\n          <div className='border' />\n        </>\n      );\n\n      rebloggedByText = intl.formatMessage({ id: 'status.reblogged_by', defaultMessage: '{name} reposted' }, { name: status.getIn(['account', 'acct']) });\n\n      account = status.get('account');\n      status = status.get('reblog');\n    }\n\n    if (status.get('media_attachments').size > 0) {\n      if (this.props.muted) {\n        media = (\n          <AttachmentList\n            compact\n            media={status.get('media_attachments')}\n          />\n        );\n      } else if (status.getIn(['media_attachments', 0, 'type']) === 'audio') {\n        const attachment = status.getIn(['media_attachments', 0]);\n\n        media = (\n          <Bundle fetchComponent={Audio} loading={this.renderLoadingAudioPlayer}>\n            {Component => (\n              <Component\n                src={attachment.get('url')}\n                alt={attachment.get('description')}\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                duration={attachment.getIn(['meta', 'original', 'duration'], 0)}\n                width={this.props.cachedMediaWidth}\n                height={110}\n                cacheWidth={this.props.cacheMediaWidth}\n              />\n            )}\n          </Bundle>\n        );\n      } else if (status.getIn(['media_attachments', 0, 'type']) === 'video') {\n        const attachment = status.getIn(['media_attachments', 0]);\n\n        media = (\n          <Bundle fetchComponent={Video} loading={this.renderLoadingVideoPlayer}>\n            {Component => (\n              <Component\n                preview={attachment.get('preview_url')}\n                blurhash={attachment.get('blurhash')}\n                src={attachment.get('url')}\n                alt={attachment.get('description')}\n                width={this.props.cachedMediaWidth}\n                height={110}\n                inline\n                sensitive={status.get('sensitive')}\n                onOpenVideo={this.handleOpenVideo}\n                cacheWidth={this.props.cacheMediaWidth}\n                visible={this.state.showMedia.get(status.get('id'))}\n                onToggleVisibility={this.handleToggleMediaVisibility(status)}\n              />\n            )}\n          </Bundle>\n        );\n      } else {\n        media = (\n          <Bundle fetchComponent={MediaGallery} loading={this.renderLoadingMediaGallery}>\n            {Component => (\n              <Component\n                media={status.get('media_attachments')}\n                sensitive={status.get('sensitive')}\n                height={110}\n                onOpenMedia={this.props.onOpenMedia}\n                cacheWidth={this.props.cacheMediaWidth}\n                defaultWidth={this.props.cachedMediaWidth}\n                visible={this.state.showMedia.get(status.get('id'))}\n                onToggleVisibility={this.handleToggleMediaVisibility(status)}\n              />\n            )}\n          </Bundle>\n        );\n      }\n    } else if (status.get('spoiler_text').length === 0 && status.get('card')) {\n      media = (\n        <Card\n          onOpenMedia={this.props.onOpenMedia}\n          card={status.get('card')}\n          cacheWidth={this.props.cacheMediaWidth}\n          defaultWidth={this.props.cachedMediaWidth}\n          sensitive={status.get('sensitive')}\n        />\n      );\n    }\n\n    statusAvatar = <Avatar account={status.get('account')} size={48} />;\n\n    const avatarStyle = {\n      width: '36px',\n      height: '36px',\n      backgroundSize: '36px 36px',\n      backgroundImage: `url(${avatar})`,\n    };\n\n    if (!statusId || (statusId === status.get('id'))) {\n      const replies = Object.values(this.props.statuses.toJS())\n        .filter(st => st.in_reply_to_id === status.get('id'))\n        .sort((st1, st2) => st1.created_at > st2.created_at ? 1 : -1);\n      const repliesCount = replies.length;\n\n      return (\n        <div className={classNames('status__wrapper', `status__wrapper-${status.get('visibility')}`, { 'status__wrapper-reply': !!status.get('in_reply_to_id'), read: unread === false, focusable: !this.props.muted })} tabIndex={this.props.muted ? null : 0} data-featured={featured ? 'true' : null} aria-label={textForScreenReader(intl, status, rebloggedByText)} ref={this.handleRef}>\n          {prepend}\n          {status.get('in_reply_to') && this.originContent(status.getIn(['in_reply_to', 'id']))}\n\n          <div className={classNames('status', `status-${status.get('visibility')}`, { 'status-reply': !!status.get('in_reply_to_id'), muted: this.props.muted, read: unread === false })} data-id={status.get('id')}>\n            <div className='status__expand' onClick={this.handleExpandClick} role='presentation' />\n            <div className='status__info'>\n              <div>\n                <a onClick={this.handleAccountClick} data-id={status.getIn(['account', 'id'])} href={status.getIn(['account', 'url'])} title={status.getIn(['account', 'acct'])} className='status__display-name' target='_blank' rel='noopener noreferrer'>\n                  <div className='status__avatar'>\n                    {statusAvatar}\n                  </div>\n\n                  <DisplayName account={status.get('account')} others={otherAccounts} />\n                </a>\n              </div>\n              <div>\n                <a href={status.get('url')} className='status__relative-time' target='_blank' rel='noopener noreferrer'>\n                  <RelativeTimestamp timestamp={status.get('created_at')} />\n                </a>\n              </div>\n            </div>\n\n            <StatusContent status={status} onClick={this.handleClick(status)} expanded={!status.get('hidden')} showThread={showThread} onExpandedToggle={this.handleExpandedToggle} collapsable onCollapsedToggle={this.handleCollapsedToggle} />\n\n            {media}\n\n            <StatusActionBar scrollKey={scrollKey} status={status} account={status.get('account')} {...other} onReply={this.handleReply} repliesCount={repliesCount} showAllReplies={this.state.showAllReplies} toggleShowAllReplies={this.toggleShowAllReplies} />\n\n            {\n              replies.filter(\n                (reply, idx) => (idx < 3 || this.state.showAllReplies),\n              ).map((reply) => (\n                <StatusReplyContainer\n                  key={reply.id}\n                  id={reply.id}\n                  contextType={this.props.contextType}\n                  openComposeModal={this.props.openComposeModal}\n                />\n              ))\n            }\n\n            {\n              !this.state.showAllReplies && repliesCount > 3 && (\n                <button className='status__content__read-more-button' onClick={this.toggleShowAllReplies}>\n                  <span>Show All Replies</span>\n                </button>\n              )\n            }\n\n            {\n              this.state.showAllReplies && repliesCount > 3 && (\n                <button className='status__content__read-more-button' onClick={this.toggleShowAllReplies}>\n                  <span>Show Top 3 Replies</span>\n                </button>\n              )\n            }\n\n            {\n              this.state.showReplyBox && this.props.me && (\n                <div className='status__reply'>\n                  <div className='status__avatar'>\n                    <div className='account__avatar' style={avatarStyle} />\n                  </div>\n\n                  <div className='status__reply-box'>\n                    <ComposeFormContainer passRefCb={this.setTextareaRef} ancestor={this.props.status} getReplies={this.getDescendants} />\n                  </div>\n                </div>\n              )\n            }\n          </div>\n        </div>\n      );\n    }\n\n    return null;\n  }\n\n}\n","import StatusWithReply from './status_with_reply';\n\nexport default StatusWithReply;\n","import React from 'react';\nimport { connect } from 'react-redux';\n// import Status from '../components/status';\nimport Status from '../components/status_with_reply';\nimport { makeGetStatus } from 'brighteon/selectors';\nimport {\n  replyCompose,\n  mentionCompose,\n  directCompose,\n  showComposePopup,\n} from 'brighteon/actions/compose';\nimport {\n  reblog,\n  favourite,\n  bookmark,\n  unreblog,\n  unfavourite,\n  unbookmark,\n  pin,\n  unpin,\n} from 'brighteon/actions/interactions';\nimport {\n  muteStatus,\n  unmuteStatus,\n  deleteStatus,\n  hideStatus,\n  revealStatus,\n  toggleStatusCollapse,\n  editStatus,\n} from 'brighteon/actions/statuses';\nimport {\n  unmuteAccount,\n  unblockAccount,\n} from 'brighteon/actions/accounts';\nimport {\n  blockDomain,\n  unblockDomain,\n} from 'brighteon/actions/domain_blocks';\nimport { initMuteModal } from 'brighteon/actions/mutes';\nimport { initBlockModal } from 'brighteon/actions/blocks';\nimport { initReport } from 'brighteon/actions/reports';\nimport { openModal } from 'brighteon/actions/modal';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport { boostModal, deleteModal } from 'brighteon/initial_state';\nimport { showAlertForError } from 'brighteon/actions/alerts';\nimport { setPostForChat } from '../../../../actions/chats';\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? Favourites and boosts will be lost, and replies to the original post will be orphaned.' },\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: 'Hide entire domain' },\n});\n\nconst makeMapStateToProps = () => {\n  const getStatus = makeGetStatus();\n\n  const mapStateToProps = (state, props) => ({\n    statuses: state.get('statuses'),\n    status: getStatus(state, props),\n    accounts: state.get('accounts'),\n  });\n\n  return mapStateToProps;\n};\n\nconst mapDispatchToProps = (dispatch, { intl }) => ({\n\n  onReply(status, router) {\n    dispatch((_, getState) => {\n      let state = getState();\n\n      if (state.getIn(['compose', 'text']).trim().length !== 0) {\n        dispatch(openModal('CONFIRM', {\n          message: intl.formatMessage(messages.replyMessage),\n          confirm: intl.formatMessage(messages.replyConfirm),\n          onConfirm: () => dispatch(replyCompose(status, router)),\n        }));\n      } else {\n        dispatch(replyCompose(status, router));\n      }\n    });\n  },\n\n  onModalReblog(status) {\n    if (status.get('reblogged')) {\n      dispatch(unreblog(status));\n    } else {\n      dispatch(reblog(status));\n    }\n  },\n\n  onReblog(status, e) {\n    if ((e && e.shiftKey) || !boostModal) {\n      this.onModalReblog(status);\n    } else {\n      dispatch(openModal('BOOST', { status, onReblog: this.onModalReblog }));\n    }\n  },\n\n  onFavourite(status) {\n    if (status.get('favourited')) {\n      dispatch(unfavourite(status));\n    } else {\n      dispatch(favourite(status));\n    }\n  },\n\n  onBookmark(status) {\n    if (status.get('bookmarked')) {\n      dispatch(unbookmark(status));\n    } else {\n      dispatch(bookmark(status));\n    }\n  },\n\n  onPin(status) {\n    if (status.get('pinned')) {\n      dispatch(unpin(status));\n    } else {\n      dispatch(pin(status));\n    }\n  },\n\n  onEmbed(status) {\n    dispatch(openModal('EMBED', {\n      url: status.get('url'),\n      onError: error => dispatch(showAlertForError(error)),\n    }));\n  },\n\n  onDelete(status, withRedraft = false) {\n    if (!deleteModal) {\n      dispatch(deleteStatus(status.get('id'), withRedraft));\n    } else {\n      dispatch(openModal('CONFIRM', {\n        message: intl.formatMessage(withRedraft ? messages.redraftMessage : messages.deleteMessage),\n        confirm: intl.formatMessage(withRedraft ? messages.redraftConfirm : messages.deleteConfirm),\n        onConfirm: () => {\n          dispatch(deleteStatus(status.get('id'), withRedraft));\n          if (withRedraft) {\n            dispatch(showComposePopup(true));\n          }\n        },\n      }));\n    }\n  },\n\n  onEdit (status) {\n    dispatch(editStatus(status.get('id')));\n    dispatch(showComposePopup(true));\n  },\n\n  onDirect(account, router) {\n    dispatch(directCompose(account, router));\n  },\n\n  onMention(account, router) {\n    dispatch(mentionCompose(account, router));\n  },\n\n  onOpenMedia(media, index) {\n    dispatch(openModal('MEDIA', { media, index }));\n  },\n\n  onOpenVideo(media, options) {\n    dispatch(openModal('VIDEO', { media, options }));\n  },\n\n  onBlock(status) {\n    const account = status.get('account');\n    dispatch(initBlockModal(account));\n  },\n\n  onUnblock(account) {\n    dispatch(unblockAccount(account.get('id')));\n  },\n\n  onReport(status) {\n    dispatch(initReport(status.get('account'), status));\n  },\n\n  onMute(account) {\n    dispatch(initMuteModal(account));\n  },\n\n  onUnmute(account) {\n    dispatch(unmuteAccount(account.get('id')));\n  },\n\n  onMuteConversation(status) {\n    if (status.get('muted')) {\n      dispatch(unmuteStatus(status.get('id')));\n    } else {\n      dispatch(muteStatus(status.get('id')));\n    }\n  },\n\n  onToggleHidden(status) {\n    if (status.get('hidden')) {\n      dispatch(revealStatus(status.get('id')));\n    } else {\n      dispatch(hideStatus(status.get('id')));\n    }\n  },\n\n  onToggleCollapsed(status, isCollapsed) {\n    dispatch(toggleStatusCollapse(status.get('id'), isCollapsed));\n  },\n\n  onBlockDomain(domain) {\n    dispatch(openModal('CONFIRM', {\n      message: <FormattedMessage id='confirmations.domain_block.message' defaultMessage='Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.' values={{ domain: <strong>{domain}</strong> }} />,\n      confirm: intl.formatMessage(messages.blockDomainConfirm),\n      onConfirm: () => dispatch(blockDomain(domain)),\n    }));\n  },\n\n  onUnblockDomain(domain) {\n    dispatch(unblockDomain(domain));\n  },\n\n  openComposeModal() {\n    dispatch(openModal('COMPOSE'));\n  },\n\n  onOpenRepliesModal(status) {\n    dispatch(openModal('REPLIES', {\n      status,\n    }));\n  },\n\n  onOpenReblogsModal(status) {\n    dispatch(openModal('REBLOGS', {\n      status,\n    }));\n  },\n\n  onOpenFavouritesModal(status) {\n    dispatch(openModal('FAVOURITES', {\n      status,\n    }));\n  },\n\n  onShareStatus (status) {\n    dispatch(setPostForChat(status));\n    dispatch(openModal('CHAT_LIST', {\n      status,\n      title: 'Send post to chat',\n    }));\n  },\n});\n\nexport default injectIntl(connect(makeMapStateToProps, mapDispatchToProps)(Status));\n","import React, { Fragment } from 'react';\nimport { connect } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport { expandAccountTimeline } from 'brighteon/actions/timelines';\nimport { List as ImmutableList, Map as ImmutableMap } from 'immutable';\nimport StatusContainer from './containers/status_container';\nimport LoadMore from '../../../components/load_more';\n\nconst getOrder = () => {\n  let order;\n\n  if (window.location.search.includes('?order=reblogs')) {\n    order = 'reblogs';\n  } else if (window.location.search.includes('?order=replies')) {\n    order = 'replies';\n  } else if (window.location.search.includes('?order=favourites')) {\n    order = 'favourites';\n  }\n\n  return order;\n};\n\nconst generateTimelineId = function (accountId, pinned, unpinned) {\n  if (window.location.pathname.slice(0, 2) === '/@') {\n    let onlyReplies = false, onlyImage = false, onlyVideo = false, statusId = false, withReplies = false, aggregatedReplies = false, order = null;\n    if (window.location.pathname.includes('/with_replies')) {\n      aggregatedReplies = true;\n      withReplies = true;\n    } else if (window.location.pathname.includes('/photos')) {\n      onlyImage = true;\n      withReplies = true;\n    } else if (window.location.pathname.includes('/videos')) {\n      onlyVideo = true;\n      withReplies = true;\n    } else if (window.location.pathname.split('/').length === 3) {\n      statusId = true;\n      withReplies = true;\n    } else if (window.location.pathname.split('/').length === 2) {\n      withReplies = false;\n    } else {\n      withReplies = false;\n    }\n\n    order = getOrder();\n\n    return `account:${accountId}${withReplies ? ':with_replies' : ''}${onlyReplies ? ':only_replies' : ''}${aggregatedReplies ? ':aggregated_replies' : ''}${onlyImage ? ':only_image' : ''}${onlyVideo ? ':only_video' : ''}${statusId ? ':specific' : ''}${pinned ? ':pinned' : ''}${unpinned ? ':unpinned' : ''}${order ? ':order' : ''}`;\n  }\n  return '';\n};\n\nconst getParams = function (pinned, unpinned) {\n  const params = {};\n  if (window.location.pathname.slice(0, 2) === '/@') {\n    if (window.location.pathname.includes('/with_replies')) {\n      params.aggregatedReplies = true;\n      params.withReplies = true;\n    } else if (window.location.pathname.includes('/photos')) {\n      params.onlyImage = true;\n      params.withReplies = true;\n    } else if (window.location.pathname.includes('/videos')) {\n      params.onlyVideo = true;\n      params.withReplies = true;\n    } else if (window.location.pathname.split('/').length === 3) {\n      params.statusId = window.location.pathname.split('/')[2];\n      params.withReplies = true;\n    } else if (window.location.pathname.split('/').length === 2) {\n      params.withReplies = false;\n    } else {\n      params.withReplies = false;\n    }\n\n    params.order = getOrder();\n  }\n  return {\n    ...params,\n    pinned,\n    unpinned,\n  };\n};\n\nconst mapStateToProps = (state, { accountId, pinned, unpinned }) => {\n  const timelineId = generateTimelineId(accountId, pinned, unpinned);\n  const timeline = state.getIn(['timelines', timelineId], ImmutableMap());\n\n  // Filter only account's boosts and replies\n  let statusIds = timeline.get('items', ImmutableList());\n\n  return {\n    statusIds: statusIds,\n    statuses: state.get('statuses', ImmutableMap()),\n    isLoading: timeline.get('isLoading', false),\n    hasMore: timeline.get('hasMore', false),\n  };\n};\n\nexport default @connect(mapStateToProps)\nclass AccountTimeline extends React.PureComponent {\n\n  static propTypes = {\n    dispatch: PropTypes.func.isRequired,\n    statusIds: ImmutablePropTypes.list.isRequired,\n    statuses: ImmutablePropTypes.map,\n    isLoading: PropTypes.bool.isRequired,\n    hasMore: PropTypes.bool.isRequired,\n    local: PropTypes.bool,\n    username: PropTypes.string.isRequired,\n    avatar: PropTypes.string,\n    statusId: PropTypes.any,\n    accountId: PropTypes.any,\n    pinned: PropTypes.any,\n    unpinned: PropTypes.any,\n  };\n\n  componentDidMount() {\n    this._connect();\n  }\n\n  componentDidUpdate(prevProps) {\n    if (prevProps.local !== this.props.local) {\n      this._connect();\n    }\n  }\n\n  _connect() {\n    const { dispatch, accountId, pinned, unpinned } = this.props;\n\n    let params = getParams(pinned, unpinned);\n\n    dispatch(expandAccountTimeline(accountId, params));\n  }\n\n  handleLoadMore = () => {\n    const { dispatch, accountId, statusIds, pinned, unpinned, statuses } = this.props;\n    const maxId = statusIds.last();\n    let params = getParams(pinned, unpinned);\n\n    if (maxId) {\n      const requestParams = {\n        maxId,\n        ...params,\n      };\n\n      if (params.order) {\n        requestParams.count = statuses.getIn([maxId, `${params.order}_count`]);\n      }\n\n      dispatch(expandAccountTimeline(accountId, requestParams));\n    }\n  };\n\n  render() {\n    const { statusIds, username, avatar, statusId: statusIdProp, isLoading, hasMore, pinned, unpinned } = this.props;\n    const loadMore = hasMore ? <LoadMore visible={!isLoading} onClick={this.handleLoadMore} /> : null;\n\n    return (\n      <Fragment>\n        {\n          statusIds.map(statusId => (\n            <StatusContainer\n              key={`f-${statusId}`}\n              id={statusId}\n              onMoveUp={null}\n              onMoveDown={null}\n              contextType={'public'}\n              username={username}\n              avatar={avatar}\n              statusId={statusIdProp}\n              showThread\n              showPinnedMsg={pinned || unpinned ? true : false}\n              pinned\n            />\n          ),\n          )\n        }\n        {loadMore}\n      </Fragment>\n    );\n  }\n\n}\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport Icon from '../../../../brighteon/components/icon';\nimport { showComposePopup } from '../../../actions/compose';\n\nconst mapStateToProps = state => ({\n  showPopup: state.getIn(['compose', 'showPopup']),\n});\n\nconst mapDispatchToProps = dispatch => ({\n  onShowPopup (showPopup) {\n    dispatch(showComposePopup(showPopup));\n  },\n});\n\nclass NewPostModalHandler extends React.PureComponent {\n\n  static propTypes = {\n    showPopup: PropTypes.bool.isRequired,\n    onShowPopup: PropTypes.func,\n  };\n\n  handleNewPostModal = () => {\n    this.props.onShowPopup(true);\n  }\n\n  closeNewPostModal = () => {\n    this.props.onShowPopup(false);\n  }\n\n  render () {\n    return (\n      <div>\n        <div key='floating-new-post-button' className='floating-new-post-button z2' onClick={this.handleNewPostModal} role='button' tabIndex={0} >\n          <Icon id='new-post-white' size={20} />\n        </div>\n      </div>\n    );\n  }\n\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(NewPostModalHandler);\n","import React, { Fragment } from 'react';\nimport ReactDOM from 'react-dom';\nimport { Provider } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport configureStore from '../store/configureStore';\nimport { hydrateStore } from '../actions/store';\nimport { setupBrowserNotifications, expandNotifications } from '../actions/notifications';\nimport { IntlProvider, addLocaleData } from 'react-intl';\nimport { getLocale } from '../locales';\nimport AccountTimeline from '../features/standalone/account_timeline';\nimport ModalContainer from '../features/ui/containers/modal_container';\nimport NewPostModalHandler from '../features/ui/containers/new_post_modal_handler';\nimport LinkFooter from '../features/ui/components/link_footer';\nimport DonateBoxContainer from '../features/compose/containers/donate_box_container';\nimport initialState from '../initial_state';\nimport TopContainer from '../features/compose/containers/top_container';\nimport { connectChatStream, connectUserStream } from '../actions/streaming';\nimport { BrowserRouter } from 'react-router-dom';\n\nconst { localeData, messages } = getLocale();\naddLocaleData(localeData);\n\nconst store = configureStore();\n\nif (initialState) {\n  store.dispatch(hydrateStore(initialState));\n}\n\nexport default class StandaloneAccountContainer extends React.PureComponent {\n\n  static propTypes = {\n    accountId: PropTypes.string.isRequired,\n    locale: PropTypes.string.isRequired,\n    currentAccountId: PropTypes.string,\n    hashtag: PropTypes.string,\n    local: PropTypes.bool,\n    username: PropTypes.string,\n    avatar: PropTypes.string,\n    statusId: PropTypes.any,\n    pinned: PropTypes.any,\n    unpinned: PropTypes.any,\n  };\n\n  static defaultProps = {\n    local: !initialState.settings.known_fediverse,\n  };\n\n  componentDidMount() {\n    this.disconnect = store.dispatch(connectUserStream());\n    this.disconnectChat = store.dispatch(connectChatStream());\n    store.dispatch(expandNotifications());\n\n    store.dispatch(setupBrowserNotifications());\n    if (process.env.NODE_ENV === 'production') {\n      // avoid offline in dev mode because it's harder to debug, commeting out because this does not work for profile page and independent status page\n      // require('offline-plugin/runtime').install();\n      // store.dispatch(registerPushNotifications.register());\n    }\n  }\n\n  componentWillUnmount () {\n    if (this.disconnect) {\n      this.disconnect();\n      this.disconnectChat();\n      this.disconnect = null;\n      this.disconnectChat = null;\n    }\n  }\n\n  render () {\n    const { locale, username, accountId, avatar, statusId } = this.props;\n\n    let show_pinned = true;\n    if (window.location.pathname.slice(0, 2) === '/@') {\n      if (window.location.pathname.includes('/videos') ||\n        window.location.pathname.includes('/photos') ||\n        window.location.pathname.includes('/with_replies')) {\n        show_pinned = false;\n      }\n    }\n\n    const donate_box_container = document.getElementById('donate-modal-container');\n    if (donate_box_container) {\n      ReactDOM.render(\n        <DonateBoxContainer />,\n        donate_box_container,\n      );\n    }\n\n    const navigation_container = document.getElementById('brighteon-navigation');\n    const new_post_section     = document.getElementById('new-post-section');\n    const link_footer_node     = document.getElementById('link-footer');\n\n    return (\n      <IntlProvider locale={locale} messages={messages}>\n        <Provider store={store}>\n          <BrowserRouter>\n            <Fragment>\n              <div className='profile-timeline-container'>\n                {\n                  show_pinned ? (\n                    <>\n                      <AccountTimeline username={username} avatar={avatar} statusId={statusId} accountId={accountId} pinned />\n                      <AccountTimeline username={username} avatar={avatar} statusId={statusId} accountId={accountId} unpinned />\n                    </>\n                  ) : (\n                    <>\n                      <AccountTimeline username={username} avatar={avatar} statusId={statusId} accountId={accountId} />\n                    </>\n                  )\n                }\n              </div>\n\n              {\n                ReactDOM.createPortal(\n                  <ModalContainer />,\n                  document.getElementById('modal-container'),\n                )\n              }\n              {\n                navigation_container && ReactDOM.createPortal(\n                  <TopContainer />,\n                  navigation_container,\n                )\n              }\n              {\n                new_post_section && ReactDOM.createPortal(\n                  <NewPostModalHandler />,\n                  new_post_section,\n                )\n              }\n              {\n                link_footer_node && ReactDOM.createPortal(\n                  <LinkFooter />,\n                  link_footer_node,\n                )\n              }\n            </Fragment>\n          </BrowserRouter>\n        </Provider>\n      </IntlProvider>\n    );\n  }\n\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { defineMessages, injectIntl } from 'react-intl';\nimport { EmojiPicker as EmojiPickerAsync } from 'brighteon/features/ui/util/async-components';\nimport Overlay from 'react-overlays/lib/Overlay';\nimport classNames from 'classnames';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport { supportsPassiveEvents } from 'detect-passive-events';\nimport { buildCustomEmojis, categoriesFromEmojis } from 'brighteon/features/emoji/emoji';\n\nconst messages = defineMessages({\n  emoji: { id: 'emoji_button.label', defaultMessage: 'Insert emoji' },\n  emoji_search: { id: 'emoji_button.search', defaultMessage: 'Search...' },\n  emoji_not_found: { id: 'emoji_button.not_found', defaultMessage: 'No emojos!! (╯°□°)╯︵ ┻━┻' },\n  custom: { id: 'emoji_button.custom', defaultMessage: 'Custom' },\n  recent: { id: 'emoji_button.recent', defaultMessage: 'Frequently used' },\n  search_results: { id: 'emoji_button.search_results', defaultMessage: 'Search results' },\n  people: { id: 'emoji_button.people', defaultMessage: 'People' },\n  nature: { id: 'emoji_button.nature', defaultMessage: 'Nature' },\n  food: { id: 'emoji_button.food', defaultMessage: 'Food & Drink' },\n  activity: { id: 'emoji_button.activity', defaultMessage: 'Activity' },\n  travel: { id: 'emoji_button.travel', defaultMessage: 'Travel & Places' },\n  objects: { id: 'emoji_button.objects', defaultMessage: 'Objects' },\n  symbols: { id: 'emoji_button.symbols', defaultMessage: 'Symbols' },\n  flags: { id: 'emoji_button.flags', defaultMessage: 'Flags' },\n});\n\nconst assetHost = process.env.CDN_HOST || '';\nlet EmojiPicker, Emoji; // load asynchronously\n\nconst backgroundImageFn = () => `${assetHost}/emoji/sheet_10.png`;\nconst listenerOptions = supportsPassiveEvents ? { passive: true } : false;\n\nclass ModifierPickerMenu extends React.PureComponent {\n\n  static propTypes = {\n    active: PropTypes.bool,\n    onSelect: PropTypes.func.isRequired,\n    onClose: PropTypes.func.isRequired,\n  };\n\n  handleClick = e => {\n    this.props.onSelect(e.currentTarget.getAttribute('data-index') * 1);\n  }\n\n  UNSAFE_componentWillReceiveProps(nextProps) {\n    if (nextProps.active) {\n      this.attachListeners();\n    } else {\n      this.removeListeners();\n    }\n  }\n\n  componentWillUnmount() {\n    this.removeListeners();\n  }\n\n  handleDocumentClick = e => {\n    if (this.node && !this.node.contains(e.target)) {\n      this.props.onClose();\n    }\n  }\n\n  attachListeners() {\n    document.addEventListener('click', this.handleDocumentClick, false);\n    document.addEventListener('touchend', this.handleDocumentClick, listenerOptions);\n  }\n\n  removeListeners() {\n    document.removeEventListener('click', this.handleDocumentClick, false);\n    document.removeEventListener('touchend', this.handleDocumentClick, listenerOptions);\n  }\n\n  setRef = c => {\n    this.node = c;\n  }\n\n  render() {\n    const { active } = this.props;\n\n    return (\n      <div className='emoji-picker-dropdown__modifiers__menu' style={{ display: active ? 'block' : 'none' }} ref={this.setRef}>\n        <button onClick={this.handleClick} data-index={1}><Emoji emoji='fist' set='twitter' size={22} sheetSize={32} skin={1} backgroundImageFn={backgroundImageFn} /></button>\n        <button onClick={this.handleClick} data-index={2}><Emoji emoji='fist' set='twitter' size={22} sheetSize={32} skin={2} backgroundImageFn={backgroundImageFn} /></button>\n        <button onClick={this.handleClick} data-index={3}><Emoji emoji='fist' set='twitter' size={22} sheetSize={32} skin={3} backgroundImageFn={backgroundImageFn} /></button>\n        <button onClick={this.handleClick} data-index={4}><Emoji emoji='fist' set='twitter' size={22} sheetSize={32} skin={4} backgroundImageFn={backgroundImageFn} /></button>\n        <button onClick={this.handleClick} data-index={5}><Emoji emoji='fist' set='twitter' size={22} sheetSize={32} skin={5} backgroundImageFn={backgroundImageFn} /></button>\n        <button onClick={this.handleClick} data-index={6}><Emoji emoji='fist' set='twitter' size={22} sheetSize={32} skin={6} backgroundImageFn={backgroundImageFn} /></button>\n      </div>\n    );\n  }\n\n}\n\nclass ModifierPicker extends React.PureComponent {\n\n  static propTypes = {\n    active: PropTypes.bool,\n    modifier: PropTypes.number,\n    onChange: PropTypes.func,\n    onClose: PropTypes.func,\n    onOpen: PropTypes.func,\n  };\n\n  handleClick = () => {\n    if (this.props.active) {\n      this.props.onClose();\n    } else {\n      this.props.onOpen();\n    }\n  }\n\n  handleSelect = modifier => {\n    this.props.onChange(modifier);\n    this.props.onClose();\n  }\n\n  render() {\n    const { active, modifier } = this.props;\n\n    return (\n      <div className='emoji-picker-dropdown__modifiers'>\n        <Emoji emoji='fist' set='twitter' size={22} sheetSize={32} skin={modifier} onClick={this.handleClick} backgroundImageFn={backgroundImageFn} />\n        <ModifierPickerMenu active={active} onSelect={this.handleSelect} onClose={this.props.onClose} />\n      </div>\n    );\n  }\n\n}\n\n@injectIntl\nclass EmojiPickerMenu extends React.PureComponent {\n\n  static propTypes = {\n    custom_emojis: ImmutablePropTypes.list,\n    frequentlyUsedEmojis: PropTypes.arrayOf(PropTypes.string),\n    loading: PropTypes.bool,\n    onClose: PropTypes.func.isRequired,\n    onPick: PropTypes.func.isRequired,\n    style: PropTypes.object,\n    placement: PropTypes.string,\n    arrowOffsetLeft: PropTypes.string,\n    arrowOffsetTop: PropTypes.string,\n    intl: PropTypes.object.isRequired,\n    skinTone: PropTypes.number.isRequired,\n    onSkinTone: PropTypes.func.isRequired,\n  };\n\n  static defaultProps = {\n    style: {},\n    loading: true,\n    frequentlyUsedEmojis: [],\n  };\n\n  state = {\n    modifierOpen: false,\n    placement: null,\n  };\n\n  handleDocumentClick = e => {\n    if (this.node && !this.node.contains(e.target)) {\n      this.props.onClose();\n    }\n  }\n\n  componentDidMount() {\n    document.addEventListener('click', this.handleDocumentClick, false);\n    document.addEventListener('touchend', this.handleDocumentClick, listenerOptions);\n  }\n\n  componentWillUnmount() {\n    document.removeEventListener('click', this.handleDocumentClick, false);\n    document.removeEventListener('touchend', this.handleDocumentClick, listenerOptions);\n  }\n\n  setRef = c => {\n    this.node = c;\n  }\n\n  getI18n = () => {\n    const { intl } = this.props;\n\n    return {\n      search: intl.formatMessage(messages.emoji_search),\n      notfound: intl.formatMessage(messages.emoji_not_found),\n      categories: {\n        search: intl.formatMessage(messages.search_results),\n        recent: intl.formatMessage(messages.recent),\n        people: intl.formatMessage(messages.people),\n        nature: intl.formatMessage(messages.nature),\n        foods: intl.formatMessage(messages.food),\n        activity: intl.formatMessage(messages.activity),\n        places: intl.formatMessage(messages.travel),\n        objects: intl.formatMessage(messages.objects),\n        symbols: intl.formatMessage(messages.symbols),\n        flags: intl.formatMessage(messages.flags),\n        custom: intl.formatMessage(messages.custom),\n      },\n    };\n  }\n\n  handleClick = (emoji, event) => {\n    if (!emoji.native) {\n      emoji.native = emoji.colons;\n    }\n    if (!(event.ctrlKey || event.metaKey)) {\n      this.props.onClose();\n    }\n    this.props.onPick(emoji);\n  }\n\n  handleModifierOpen = () => {\n    this.setState({ modifierOpen: true });\n  }\n\n  handleModifierClose = () => {\n    this.setState({ modifierOpen: false });\n  }\n\n  handleModifierChange = modifier => {\n    this.props.onSkinTone(modifier);\n  }\n\n  render() {\n    const { loading, style, intl, custom_emojis, skinTone, frequentlyUsedEmojis } = this.props;\n    if (style.top === 0) {\n      style.top = window.pageYOffset;\n    }\n\n    if (loading) {\n      return <div style={{ width: 299 }} />;\n    }\n\n    const title = intl.formatMessage(messages.emoji);\n\n    const { modifierOpen } = this.state;\n\n    const categoriesSort = [\n      'recent',\n      'people',\n      'nature',\n      'foods',\n      'activity',\n      'places',\n      'objects',\n      'symbols',\n      'flags',\n    ];\n\n    categoriesSort.splice(1, 0, ...Array.from(categoriesFromEmojis(custom_emojis)).sort());\n\n    return (\n      <div className={classNames('emoji-picker-dropdown__menu', { selecting: modifierOpen })} style={style} ref={this.setRef}>\n        <EmojiPicker\n          perLine={8}\n          emojiSize={22}\n          sheetSize={32}\n          custom={buildCustomEmojis(custom_emojis)}\n          color=''\n          emoji=''\n          set='twitter'\n          title={title}\n          i18n={this.getI18n()}\n          onClick={this.handleClick}\n          include={categoriesSort}\n          recent={frequentlyUsedEmojis}\n          skin={skinTone}\n          showPreview={false}\n          backgroundImageFn={backgroundImageFn}\n          autoFocus\n          emojiTooltip\n        />\n\n        <ModifierPicker\n          active={modifierOpen}\n          modifier={skinTone}\n          onOpen={this.handleModifierOpen}\n          onClose={this.handleModifierClose}\n          onChange={this.handleModifierChange}\n        />\n      </div>\n    );\n  }\n\n}\n\nexport default @injectIntl\nclass EmojiPickerDropdown extends React.PureComponent {\n\n  static propTypes = {\n    custom_emojis: ImmutablePropTypes.list,\n    frequentlyUsedEmojis: PropTypes.arrayOf(PropTypes.string),\n    intl: PropTypes.object.isRequired,\n    onPickEmoji: PropTypes.func.isRequired,\n    onSkinTone: PropTypes.func.isRequired,\n    skinTone: PropTypes.number.isRequired,\n    button: PropTypes.node,\n    onFocus: PropTypes.func.isRequired,\n  };\n\n  state = {\n    active: false,\n    loading: false,\n  };\n\n  setRef = (c) => {\n    this.dropdown = c;\n  }\n\n  onShowDropdown = ({ target }) => {\n    this.setState({ active: true });\n\n    if (!EmojiPicker) {\n      this.setState({ loading: true });\n\n      EmojiPickerAsync().then(EmojiMart => {\n        EmojiPicker = EmojiMart.Picker;\n        Emoji = EmojiMart.Emoji;\n\n        this.setState({ loading: false });\n      }).catch(() => {\n        this.setState({ loading: false, active: false });\n      });\n    }\n\n    const { top } = target.getBoundingClientRect();\n    this.setState({ placement: top * 2 < innerHeight ? 'bottom' : 'top' });\n  }\n\n  onHideDropdown = () => {\n    this.setState({ active: false });\n  }\n\n  onToggle = (e) => {\n    this.props.onFocus();\n    if (!this.state.loading && (!e.key || e.key === 'Enter')) {\n      if (this.state.active) {\n        this.onHideDropdown();\n      } else {\n        this.onShowDropdown(e);\n      }\n    }\n  }\n\n  handleKeyDown = e => {\n    if (e.key === 'Escape') {\n      this.onHideDropdown();\n    }\n  }\n\n  setTargetRef = c => {\n    this.target = c;\n  }\n\n  findTarget = () => {\n    return this.target;\n  }\n\n  render() {\n    const { intl, onPickEmoji, onSkinTone, skinTone, frequentlyUsedEmojis, button } = this.props;\n    const title = intl.formatMessage(messages.emoji);\n    const { active, loading, placement } = this.state;\n\n    return (\n      <div className='emoji-picker-dropdown' onKeyDown={this.handleKeyDown}>\n        <div ref={this.setTargetRef} className='emoji-button' title={title} aria-label={title} aria-expanded={active} role='button' onClick={this.onToggle} onKeyDown={this.onToggle} tabIndex={0}>\n          {button || <img\n            className={classNames('emojione', { 'pulse-loading': active && loading })}\n            alt='🙂'\n            src={`${assetHost}/emoji/1f602.svg`}\n          />}\n        </div>\n\n        <Overlay show={active} placement={placement} target={this.findTarget}>\n          <EmojiPickerMenu\n            custom_emojis={this.props.custom_emojis}\n            loading={loading}\n            onClose={this.onHideDropdown}\n            onPick={onPickEmoji}\n            onSkinTone={onSkinTone}\n            skinTone={skinTone}\n            frequentlyUsedEmojis={frequentlyUsedEmojis}\n          />\n        </Overlay>\n      </div>\n    );\n  }\n\n}\n"],"sourceRoot":""}