{"version":3,"sources":["webpack:///./src/constants.ts","webpack:///./src/components/primary-buttons/primary-buttons.tsx","webpack:///./src/components/privacy-info.tsx","webpack:///./src/components/language-select/language-select.tsx","webpack:///./src/components/register-section/register-section.tsx","webpack:///./src/components/register-section/images/waves.png","webpack:///./src/components/register-section/images sync ^\\.\\/.*\\-.*\\.png$","webpack:///./src/components/register-section/images/1-1.png","webpack:///./src/components/register-section/images/1-2.png","webpack:///./src/components/register-section/images/1-3.png","webpack:///./src/components/register-section/images/1-4.png","webpack:///./src/components/register-section/images/1-5.png","webpack:///./src/components/register-section/images/1-6.png","webpack:///./src/components/register-section/images/2-1.png","webpack:///./src/components/register-section/images/2-2.png","webpack:///./src/components/register-section/images/2-3.png","webpack:///./src/components/register-section/images/2-4.png","webpack:///./src/components/register-section/images/2-5.png","webpack:///./src/components/plot/plot.tsx","webpack:///./src/components/request-language-modal/language-autocomplete.tsx","webpack:///./src/components/request-language-modal/language-request-success.tsx","webpack:///./src/components/request-language-modal/request-language-modal.tsx","webpack:///../node_modules/@yr/monotone-cubic-spline/index.js","webpack:///./src/components/pages/home/images/fading.svg","webpack:///./src/components/pages/home/images/speak.svg","webpack:///./src/components/pages/home/hero.tsx","webpack:///./src/components/pages/home/stats.tsx","webpack:///./src/components/pages/home/home.tsx"],"names":["DAILY_GOALS","Object","freeze","speak","listen","BENEFITS","WHATS_PUBLIC","PrimaryButton","_a","className","to","trackClass","props","React","disabled","getTrackClass","join","LocaleLink","type","RecordButton","status","MicIcon","StopIcon","RecordLink","URLS","SPEAK","Voice","PlayButton","isPlaying","OldPlayIcon","PlayLink","LISTEN","localizedPrefix","Localized","id","elems","privacyLink","href","target","rel","contributableLocales","require","ALL_LOCALES","value","onChange","Downshift","initialInputValue","getItemProps","highlightedIndex","isOpen","toggleMenu","onClick","concat","map","l","i","key","item","RegisterSection","children","flipped","marsSrc","locale","useLocale","index","setIndex","useState","tab","setTab","isBenefits","info","src","alt","name","checked","trackHome","cx","module","exports","webpackContext","req","webpackContextResolve","__webpack_require__","o","e","Error","code","keys","resolve","Y_OFFSET","TOTAL_LINE_MARGIN","LINE_OFFSET","TEXT_OFFSET","PLOT_PADDING","Plot","constructor","state","width","svgRef","updateSize","this","setState","current","getBoundingClientRect","componentDidMount","window","addEventListener","componentWillUnmount","removeEventListener","render","data","formatNumber","max","renderXTickLabel","tickCount","tickMultipliers","tickMultiplier","slice","reverse","find","m","ticks","height","ref","Array","from","length","_","y","x","dominantBaseline","textAnchor","Math","round","x1","y1","x2","y2","stroke","datum","BAR_HEIGHT","n","toString","BarPlot","reduce","d","date","Date","toLocaleString","hour","minute","replace","barWidth","getBarX","offset","stopColor","fill","LanguageAutocomplete","requestedLanguages","useTypedSelector","store","languages","fetchRequestedLanguages","useAction","RequestedLanguages","actions","fetch","Input","LabeledInput","useEffect","getInputProps","inputValue","selectedItem","options","Set","filter","toLowerCase","includes","exactMatch","attrs","label","required","style","position","left","top","zIndex","border","maxHeight","overflowY","background","backgroundColor","fontWeight","onRequestClose","SuccessIcon","TextButton","color","RequestLanguageModal","email","user","isSubmitted","language","NATIVE_NAMES","navigator","lang","split","otherLanguage","sendEmails","update","updateOtherLanguage","save","event","__awaiter","preventDefault","api","createLanguageRequest","updateUser","subscribeToNewsletter","Modal","innerClassName","LanguageRequestSuccess","onSubmit","LabeledSelect","entries","Hr","Button","rounded","PrivacyInfo","mapDispatchToProps","create","User","connect","slope","p0","p1","points","_points","tgts","finiteDifferences","a","b","s","abs","sqrt","_i","min","push","tangents","p","pts","t","t0","_p","_t","start","end","svgPath","point","Hero","count","dimensions","showToMeasure","toggleableRefs","measure","fetchDailyClipsCount","fetchDailyVotesCount","componentDidUpdate","offsetWidth","offsetHeight","getToggleableProps","onHide","onShow","PrimaryLink","onMouseEnter","onMouseLeave","TERMS","vars","goal","spline","Tooltip","StatsCard","onLocaleChange","header","setLocale","LanguageSelect","mapStateToProps","ClipsStats","formatSeconds","totalSeconds","precise","seconds","minutes","floor","hours","toPrecision","timeParts","MetricValue","attribute","title","Metric","labelId","pointFromDatum","PLOT_STROKE_WIDTH","lastIndex","strokeWidth","cy","r","CIRCLE_RADIUS","BareRoot","hoveredIndex","pathRef","updateData","fetchClipsStats","handleMouseMove","path","clientX","handleMouseOut","getString","total","valid","toLocaleDateString","day","month","year","withLocalization","VoiceStats","fetchClipVoices","HomePage","heroes","shallowEqual","activeHero","setActiveHero","showRequestLanguageModal","setShowRequestLanguageModal","showWallOfText","setShowWallOfText","statsRef","useRef","location","hash","scrollIntoView","scrollBy","ContributableLocaleLock","isContributable","Root","account","LinkButton"],"mappings":"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","file":"7.js?id=74493a7ace882b838da3","sourcesContent":["export const DAILY_GOALS = Object.freeze({\n  speak: [120, 250],\n  listen: [240],\n});\n\nexport const BENEFITS = [\n  'rich-data',\n  'improve-audio',\n  'keep-track',\n  'compare-progress',\n  'view-goals',\n  'join-newsletter',\n];\n\nexport const WHATS_PUBLIC = [\n  'email-not-public',\n  'recordings-and-locale-public',\n  'username-optin-public',\n  'demographic-deidentified-clarity',\n  'username-email-not-demographic',\n];\n","import * as React from 'react';\nimport URLS from '../../urls';\nimport { LocaleLink } from '../locale-helpers';\nimport { getTrackClass } from '../../services/tracker';\nimport { MicIcon, OldPlayIcon, StopIcon } from '../ui/icons';\n\nimport './primary-buttons.css';\n\nexport const PrimaryButton = ({\n  className,\n  to,\n  trackClass,\n  ...props\n}: { to?: string; trackClass?: string } & React.ButtonHTMLAttributes<any>) => (\n  <div\n    className={[\n      'primary-button',\n      className,\n      props.disabled ? 'disabled' : '',\n      trackClass ? getTrackClass('fs', trackClass) : '',\n    ].join(' ')}>\n    {to ? (\n      <LocaleLink to={to} {...props} />\n    ) : (\n      <button type=\"button\" {...props} />\n    )}\n    <div className=\"background\" />\n  </div>\n);\n\nexport type RecordingStatus = null | 'waiting' | 'recording';\n\nexport const RecordButton = ({\n  status,\n  trackClass,\n  ...props\n}: {\n  status: RecordingStatus;\n  trackClass?: string;\n} & React.ButtonHTMLAttributes<any>) => (\n  <PrimaryButton\n    className={status === null ? 'stop' : 'record'}\n    {...props}\n    trackClass={trackClass}\n    disabled={status === 'waiting'}>\n    {status === null && <MicIcon />}\n    {status === 'recording' && <StopIcon />}\n  </PrimaryButton>\n);\n\nexport const RecordLink = (props: any) => (\n  <PrimaryButton className=\"stop\" to={URLS.SPEAK} {...props}>\n    <MicIcon />\n  </PrimaryButton>\n);\n\nexport const Voice = (props: any) => (\n  <PrimaryButton className=\"stop\" {...props} />\n);\n\nexport const PlayButton = ({\n  isPlaying,\n  trackClass,\n  ...props\n}: { isPlaying: boolean; trackClass?: string } & React.ButtonHTMLAttributes<\n  any\n>) => (\n  <PrimaryButton\n    className={isPlaying ? 'stop' : 'play'}\n    trackClass={trackClass}\n    {...props}>\n    {isPlaying ? <StopIcon /> : <OldPlayIcon />}\n  </PrimaryButton>\n);\n\nexport const PlayLink = (props: any) => (\n  <PrimaryButton className=\"play\" to={URLS.LISTEN} {...props}>\n    <OldPlayIcon />\n  </PrimaryButton>\n);\n","import { Localized } from '@fluent/react';\nimport * as React from 'react';\n\nexport default ({ localizedPrefix }: { localizedPrefix?: string }) => {\n  localizedPrefix = localizedPrefix || '';\n  return (\n    <>\n      <Localized id={localizedPrefix + 'stayintouch'}>\n        <p className=\"small\" />\n      </Localized>\n      <br />\n\n      <Localized\n        id={localizedPrefix + 'privacy-info'}\n        elems={{\n          privacyLink: (\n            <a href=\"/privacy\" target=\"_blank\" rel=\"noopener noreferrer\" />\n          ),\n        }}>\n        <p className=\"small\" />\n      </Localized>\n    </>\n  );\n};\n","import { Localized } from '@fluent/react';\nimport Downshift from 'downshift';\nimport * as React from 'react';\n\nconst contributableLocales = require('../../../../locales/contributable.json') as string[];\n\nimport './language-select.css';\n\nexport const ALL_LOCALES = 'all-locales';\n\nexport default ({\n  value,\n  onChange,\n}: {\n  value: string;\n  onChange: (locale: string) => any;\n}) => (\n  <Downshift initialInputValue={value} onChange={onChange}>\n    {({ getItemProps, highlightedIndex, isOpen, toggleMenu }) => (\n      <div className=\"language-select\" onClick={() => toggleMenu()}>\n        <Localized id={value}>\n          <div className=\"current\" />\n        </Localized>\n        {isOpen && (\n          <ul onClick={() => toggleMenu()}>\n            {[ALL_LOCALES].concat(contributableLocales).map((l, i) => (\n              <Localized key={l} id={l}>\n                <li\n                  className={[\n                    l === value ? 'selected' : '',\n                    highlightedIndex === i ? 'highlighted' : '',\n                  ].join(' ')}\n                  {...getItemProps({ item: l })}\n                  value={l}\n                />\n              </Localized>\n            ))}\n          </ul>\n        )}\n      </div>\n    )}\n  </Downshift>\n);\n","import cx from 'classnames';\nimport { Localized } from '@fluent/react';\nimport React from 'react';\nimport { useState } from 'react';\nimport { trackHome } from '../../services/tracker';\nimport { BENEFITS, WHATS_PUBLIC } from '../../constants';\nimport { useLocale } from '../locale-helpers';\n\nimport './register-section.css';\n\nexport default function RegisterSection({\n  children,\n  flipped = false,\n  marsSrc,\n}: {\n  children: React.ReactNode[];\n  flipped?: boolean;\n  marsSrc: string;\n}) {\n  const [locale] = useLocale();\n  const [index, setIndex] = useState(0);\n  const [tab, setTab] = useState('benefits');\n  const isBenefits = tab == 'benefits';\n  const info = (\n    <div className=\"signup-info\">\n      <div className=\"tabs\">\n        <img\n          className=\"waves\"\n          src={require('./images/waves.png')}\n          alt=\"Waves\"\n        />\n        {['benefits', 'whats-public'].map(l => (\n          <label key={l}>\n            <input\n              type=\"radio\"\n              name=\"tab\"\n              checked={tab == l}\n              onChange={() => {\n                setTab(l);\n                setIndex(0);\n                trackHome('change-benefits-tabs', locale);\n              }}\n            />\n            <Localized id={l}>\n              <div />\n            </Localized>\n          </label>\n        ))}\n      </div>\n      <div className=\"list-and-bg\">\n        <div className=\"bg\" />\n        <ul key={tab}>\n          {(isBenefits ? BENEFITS : WHATS_PUBLIC).map((l, i) => (\n            <li\n              key={l}\n              className={i == index ? 'active' : ''}\n              onClick={() => {\n                setIndex(i);\n                trackHome(\n                  isBenefits\n                    ? 'click-benefits-item'\n                    : 'click-whats-public-item',\n                  locale\n                );\n              }}>\n              <span>{i + 1}.</span>\n              <Localized id={l}>\n                <span />\n              </Localized>\n            </li>\n          ))}\n        </ul>\n      </div>\n    </div>\n  );\n\n  return (\n    <section className={cx('register-section', { flipped })}>\n      <div className=\"top\">\n        <div className=\"cta-container\">\n          {children}\n          {info}\n        </div>\n        <div className=\"images-container\">\n          <img className=\"mars\" src={marsSrc} alt=\"Mars\" />\n          <img\n            className=\"screenshot\"\n            src={require(`./images/${isBenefits ? 1 : 2}-${index + 1}.png`)}\n            alt=\"\"\n          />\n        </div>\n      </div>\n    </section>\n  );\n}\n","module.exports = __webpack_public_path__ + \"a2c72ce8a9bd6f20f71fa49fc8b9dd73.png\";","var map = {\n\t\"./1-1.png\": 164,\n\t\"./1-2.png\": 165,\n\t\"./1-3.png\": 166,\n\t\"./1-4.png\": 167,\n\t\"./1-5.png\": 168,\n\t\"./1-6.png\": 169,\n\t\"./2-1.png\": 170,\n\t\"./2-2.png\": 171,\n\t\"./2-3.png\": 172,\n\t\"./2-4.png\": 173,\n\t\"./2-5.png\": 174\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 163;","module.exports = __webpack_public_path__ + \"2cb216340211e9b34afb1b57cfc32594.png\";","module.exports = __webpack_public_path__ + \"8e6cb9062d62d488bdf3fd9071d86031.png\";","module.exports = __webpack_public_path__ + \"0b4220a387d9aad682345524a7733f5d.png\";","module.exports = __webpack_public_path__ + \"ff4df4f7d1a06f0f93a888e76cfdaca1.png\";","module.exports = __webpack_public_path__ + \"bdde4170dd8fb0ced9f55e35db39a784.png\";","module.exports = __webpack_public_path__ + \"f095ff0ceeef4e50c4ac4a3d226a3462.png\";","module.exports = __webpack_public_path__ + \"a7d0c00c65eb5ec0b51d1fe1bbebd237.png\";","module.exports = __webpack_public_path__ + \"0b4220a387d9aad682345524a7733f5d.png\";","module.exports = __webpack_public_path__ + \"c7b641eff0dd692673efc1d0bc1ffd2d.png\";","module.exports = __webpack_public_path__ + \"43c5462406314770c88feb382dae8381.png\";","module.exports = __webpack_public_path__ + \"7548c4482abe7c0f77caee1a7db86200.png\";","import * as React from 'react';\n\nexport const Y_OFFSET = 10;\nexport const TOTAL_LINE_MARGIN = 154;\nexport const TEXT_OFFSET = 40;\nexport const LINE_OFFSET = TEXT_OFFSET + 5;\nexport const PLOT_PADDING = 13;\n\nimport './plot.css';\n\nexport type PlotProps = {\n  children: (state: { max: number; width: number }) => React.ReactNode;\n  data: any[];\n  formatNumber: (n: number) => string;\n  max: number;\n  renderXTickLabel: (datum: any, i: number) => React.ReactNode;\n  tickCount: number;\n  tickMultipliers: number[];\n} & React.SVGProps<SVGElement>;\n\nexport default class Plot extends React.Component<\n  PlotProps,\n  {\n    width: number;\n  }\n> {\n  state: {\n    width: number;\n  } = {\n    width: 0,\n  };\n\n  svgRef = React.createRef<SVGSVGElement>();\n\n  async componentDidMount() {\n    window.addEventListener('resize', this.updateSize);\n    this.updateSize();\n  }\n\n  componentWillUnmount() {\n    window.removeEventListener('resize', this.updateSize);\n  }\n\n  updateSize = () => {\n    this.setState({\n      width: this.svgRef.current.getBoundingClientRect().width,\n    });\n  };\n\n  render() {\n    let {\n      children,\n      data,\n      formatNumber,\n      max,\n      renderXTickLabel,\n      tickCount,\n      tickMultipliers,\n      ...props\n    } = this.props;\n    const { width } = this.state;\n\n    const tickMultiplier =\n      tickMultipliers\n        .slice()\n        .reverse()\n        .find(m => max > m) || 1;\n    const ticks = (tickCount - 1) * tickMultiplier;\n\n    max = max + (ticks - (max % ticks));\n\n    return (\n      <svg\n        width=\"100%\"\n        height=\"100%\"\n        className=\"plot\"\n        {...props}\n        ref={this.svgRef}>\n        {Array.from({ length: tickCount }).map((_, i) => {\n          const y = (i * TOTAL_LINE_MARGIN) / tickCount + Y_OFFSET;\n          return (\n            <React.Fragment key={i}>\n              <text\n                className=\"tick-label\"\n                x={TEXT_OFFSET}\n                y={y}\n                dominantBaseline=\"middle\"\n                textAnchor=\"end\">\n                {formatNumber(\n                  Math.round(((tickCount - 1 - i) * max) / (tickCount - 1))\n                )}\n              </text>\n              <line\n                x1={LINE_OFFSET}\n                y1={y}\n                x2={width + PLOT_PADDING}\n                y2={y}\n                stroke=\"rgba(0,0,0,0.2)\"\n              />\n            </React.Fragment>\n          );\n        })}\n        {data.map((datum, i) => (\n          <text\n            key={i}\n            className=\"x tick-label\"\n            x={\n              LINE_OFFSET +\n              i * ((width - PLOT_PADDING - TEXT_OFFSET) / data.length)\n            }\n            y={Y_OFFSET + TOTAL_LINE_MARGIN}>\n            {renderXTickLabel(datum, i)}\n          </text>\n        ))}\n        {children({ width, max })}\n      </svg>\n    );\n  }\n}\n\nconst BAR_COUNT = 10;\nconst BAR_WIDTH_LG = 15;\nconst BAR_WIDTH_XS = 7;\nconst TICK_COUNT = 4;\nconst BAR_HEIGHT = TOTAL_LINE_MARGIN * ((TICK_COUNT - 1) / TICK_COUNT);\n\nfunction formatNumber(n: number) {\n  return n > 1000 ? Math.round(n / 1000) + 'k' : n.toString();\n}\n\nexport const BarPlot = ({\n  data,\n}: {\n  data: { date: string; value: number }[];\n}) => (\n  <Plot\n    data={data}\n    formatNumber={formatNumber}\n    max={(data || []).reduce((max, d) => Math.max(max, d.value), 0)}\n    renderXTickLabel={({ date }) => {\n      const timeString = new Date(date)\n        .toLocaleString([], {\n          hour: '2-digit',\n          minute: '2-digit',\n        })\n        .replace(':00 ', '')\n        .replace(/\\./g, '');\n\n      return timeString;\n    }}\n    tickCount={TICK_COUNT}\n    tickMultipliers={[5, 10, 100, 1000]}>\n    {({ max, width }) => {\n      const barWidth = width < 400 ? BAR_WIDTH_XS : BAR_WIDTH_LG;\n      const getBarX = (i: number) =>\n        LINE_OFFSET +\n        PLOT_PADDING -\n        barWidth / 2 +\n        (i * (width - PLOT_PADDING - TEXT_OFFSET)) / BAR_COUNT;\n\n      return (\n        <>\n          {Array.from({ length: BAR_COUNT }).map((_, i) => (\n            <rect\n              key={i}\n              className=\"bg\"\n              x={getBarX(i)}\n              y={Y_OFFSET}\n              width={barWidth}\n              height={BAR_HEIGHT}\n            />\n          ))}\n\n          <defs>\n            <linearGradient id=\"blue-purple\" x2=\"0%\" y2=\"100%\">\n              <stop offset=\"5%\" stopColor=\"#88d1f1\" />\n              <stop offset=\"95%\" stopColor=\"#b1b5e5\" />\n            </linearGradient>\n          </defs>\n          {(data || []).map(({ value }: any, i: number) => {\n            const height = (value * BAR_HEIGHT) / max || 0;\n            return (\n              <rect\n                key={i}\n                fill=\"url(#blue-purple)\"\n                className={i + 1 === BAR_COUNT ? 'current' : ''}\n                x={getBarX(i)}\n                y={Y_OFFSET + BAR_HEIGHT - height}\n                width={barWidth}\n                height={height}\n              />\n            );\n          })}\n        </>\n      );\n    }}\n  </Plot>\n);\n","import Downshift from 'downshift';\nimport { Localized } from '@fluent/react';\nimport * as React from 'react';\nimport { useEffect } from 'react';\nimport { useAction } from '../../hooks/store-hooks';\nimport { RequestedLanguages } from '../../stores/requested-languages';\nimport { useTypedSelector } from '../../stores/tree';\nimport { LabeledInput } from '../ui/ui';\n\nexport default function LanguageAutocomplete({\n  onChange,\n}: {\n  onChange: (...args: any[]) => any;\n}) {\n  const requestedLanguages = useTypedSelector(\n    store => store.requestedLanguages.languages\n  );\n  const fetchRequestedLanguages = useAction(RequestedLanguages.actions.fetch);\n\n  // Types for Downshift haven't caught up yet. Can be removed in the future\n  const Input = LabeledInput as any;\n\n  useEffect(() => {\n    fetchRequestedLanguages();\n  }, []);\n\n  return (\n    <Downshift onChange={onChange}>\n      {({\n        getInputProps,\n        getItemProps,\n        isOpen,\n        inputValue,\n        selectedItem,\n        highlightedIndex,\n      }) => {\n        const options = Array.from(\n          new Set(requestedLanguages || [])\n        ).filter(name => name.toLowerCase().includes(inputValue.toLowerCase()));\n        const exactMatch = options.find(\n          name => name.toLowerCase() === inputValue.toLowerCase()\n        );\n        return (\n          <div>\n            <Localized id=\"language-autocomplete\" attrs={{ label: true }}>\n              <Input\n                {...getInputProps({\n                  label: (\n                    <Localized id=\"other-language\">\n                      <span />\n                    </Localized>\n                  ),\n                  required: true,\n                  type: 'text',\n                })}\n              />\n            </Localized>\n            <div style={{ position: 'relative' }}>\n              {isOpen && (\n                <div\n                  style={{\n                    position: 'absolute',\n                    left: 0,\n                    top: '-1rem',\n                    zIndex: 10,\n                    border: '1px solid #ccc',\n                    width: '100%',\n                    maxHeight: '5rem',\n                    overflowY: 'auto',\n                    background: 'white',\n                  }}>\n                  {!exactMatch && (\n                    <div\n                      {...getItemProps({ item: inputValue })}\n                      style={{\n                        backgroundColor:\n                          highlightedIndex === 0 ? 'lightgray' : 'white',\n                        fontWeight: selectedItem === name ? 'bold' : 'normal',\n                      }}>\n                      Add new Language \"{inputValue}\"\n                    </div>\n                  )}\n                  {options.map((name, index) => (\n                    <div\n                      {...getItemProps({ item: name })}\n                      key={name}\n                      style={{\n                        backgroundColor:\n                          highlightedIndex === index + (exactMatch ? 0 : 1)\n                            ? 'lightgray'\n                            : 'white',\n                        fontWeight: selectedItem === name ? 'bold' : 'normal',\n                      }}>\n                      {name}\n                    </div>\n                  ))}\n                </div>\n              )}\n            </div>\n          </div>\n        );\n      }}\n    </Downshift>\n  );\n}\n","import { Localized } from '@fluent/react';\nimport * as React from 'react';\nimport { SuccessIcon } from '../ui/icons';\nimport { TextButton } from '../ui/ui';\n\nexport default ({ onRequestClose }: { onRequestClose: () => void }) => (\n  <>\n    <SuccessIcon className=\"success\" />\n\n    <Localized id=\"request-language-success-title\">\n      <h2 />\n    </Localized>\n\n    <br />\n\n    <Localized id=\"request-language-success-content\">\n      <p className=\"small\" />\n    </Localized>\n\n    <br />\n\n    <Localized id=\"return-to-cv\">\n      <TextButton\n        onClick={onRequestClose}\n        className=\"small\"\n        style={{ fontWeight: 'bold', color: 'black' }}\n      />\n    </Localized>\n\n    <br />\n    <br />\n  </>\n);\n","import { Localized } from '@fluent/react';\nimport * as React from 'react';\nimport { connect } from 'react-redux';\nimport Modal from '../modal/modal';\nimport { Button, Hr, LabeledInput, LabeledSelect } from '../ui/ui';\nimport API from '../../services/api';\nimport { NATIVE_NAMES } from '../../services/localization';\nimport { RequestedLanguages } from '../../stores/requested-languages';\nimport StateTree from '../../stores/tree';\nimport { User } from '../../stores/user';\nimport PrivacyInfo from '../privacy-info';\nimport LanguageAutocomplete from './language-autocomplete';\nimport LanguageRequestSuccess from './language-request-success';\n\ninterface PropsFromState {\n  api: API;\n  user: User.State;\n}\n\ninterface PropsFromDispatch {\n  createLanguageRequest: typeof RequestedLanguages.actions.create;\n  updateUser: typeof User.actions.update;\n}\n\ninterface Props extends PropsFromState, PropsFromDispatch {\n  onRequestClose: () => void;\n}\n\ninterface State {\n  email: string;\n  isSubmitted: boolean;\n  language: string;\n  otherLanguage: string;\n  sendEmails: boolean;\n}\n\nclass RequestLanguageModal extends React.Component<Props, State> {\n  state: State = {\n    email: this.props.user.email,\n    isSubmitted: false,\n    language:\n      NATIVE_NAMES[\n        navigator.languages.find(lang => lang.split('-')[0] !== 'en')\n      ],\n    otherLanguage: '',\n    sendEmails: this.props.user.sendEmails,\n  };\n\n  private update = ({ target }: any) => {\n    this.setState({\n      [target.name]: target.type === 'checkbox' ? target.checked : target.value,\n    } as any);\n  };\n\n  private updateOtherLanguage = (otherLanguage: string) => {\n    this.setState({ otherLanguage });\n  };\n\n  private save = async (event: React.FormEvent<HTMLFormElement>) => {\n    event.preventDefault();\n    const { api, createLanguageRequest, updateUser, user } = this.props;\n    const { email, language, otherLanguage, sendEmails } = this.state;\n\n    createLanguageRequest(language == 'other' ? otherLanguage : language);\n    if (!user.sendEmails && sendEmails) {\n      await api.subscribeToNewsletter(email);\n    }\n    updateUser({ email, sendEmails });\n    this.setState({ isSubmitted: true });\n  };\n\n  render() {\n    const { onRequestClose } = this.props;\n    const {\n      email,\n      language,\n      otherLanguage,\n      isSubmitted,\n      sendEmails,\n    } = this.state;\n    return (\n      <Modal\n        innerClassName={\n          'request-language-modal ' + (isSubmitted ? '' : 'left-align')\n        }\n        onRequestClose={onRequestClose}>\n        {isSubmitted ? (\n          <LanguageRequestSuccess onRequestClose={onRequestClose} />\n        ) : (\n          <form onSubmit={this.save}>\n            <div className=\"title-and-action\">\n              <Localized id=\"request-language-title\">\n                <h2 />\n              </Localized>\n            </div>\n\n            <br />\n\n            <Localized\n              id=\"request-language-form-language\"\n              attrs={{ label: true }}>\n              <LabeledSelect\n                name=\"language\"\n                required\n                value={language}\n                onChange={this.update}>\n                <Localized id=\"select-language\">\n                  <option value=\"\" />\n                </Localized>\n                {Object.entries(NATIVE_NAMES).map(([code, name]) => (\n                  <option key={name} value={name}>\n                    {name}\n                  </option>\n                ))}\n                <Localized id=\"other\">\n                  <option value=\"other\" />\n                </Localized>\n              </LabeledSelect>\n            </Localized>\n\n            {language == 'other' && (\n              <LanguageAutocomplete onChange={this.updateOtherLanguage} />\n            )}\n\n            <Localized id=\"email-input\" attrs={{ label: true }}>\n              <LabeledInput\n                label=\"Email\"\n                name=\"email\"\n                required\n                type=\"email\"\n                value={email}\n                onChange={this.update}\n              />\n            </Localized>\n\n            <label className=\"opt-in\">\n              <input\n                name=\"sendEmails\"\n                type=\"checkbox\"\n                checked={sendEmails}\n                onChange={this.update}\n              />\n              <Localized id=\"yes-receive-emails\">\n                <span />\n              </Localized>\n            </label>\n\n            <Hr />\n\n            <div className=\"actions\">\n              <Localized id=\"submit-form-action\">\n                <Button\n                  disabled={\n                    !email || (language == 'other' ? !otherLanguage : !language)\n                  }\n                  type=\"submit\"\n                  rounded\n                />\n              </Localized>\n              <div />\n            </div>\n\n            <br />\n\n            <PrivacyInfo />\n          </form>\n        )}\n      </Modal>\n    );\n  }\n}\n\nconst mapStateToProps = ({ api, user }: StateTree) => ({\n  api,\n  user,\n});\n\nconst mapDispatchToProps = {\n  createLanguageRequest: RequestedLanguages.actions.create,\n  updateUser: User.actions.update,\n};\n\nexport default connect<PropsFromState, any>(\n  mapStateToProps,\n  mapDispatchToProps\n)(RequestLanguageModal) as any;\n","'use strict';\n\n/**\n * Convert a series of points to a monotone cubic spline\n * Algorithm based on https://github.com/mbostock/d3\n * https://github.com/yr/monotone-cubic-spline\n * @copyright Yr\n * @license MIT\n */\n\nvar ε = 1e-6;\n\nmodule.exports = {\n  /**\n   * Convert 'points' to bezier\n   * @param {Array} points\n   * @returns {Array}\n   */\n  points: function points(_points) {\n    var tgts = tangents(_points);\n\n    var p = _points[1];\n    var p0 = _points[0];\n    var pts = [];\n    var t = tgts[1];\n    var t0 = tgts[0];\n\n    // Add starting 'M' and 'C' points\n    pts.push(p0, [p0[0] + t0[0], p0[1] + t0[1], p[0] - t[0], p[1] - t[1], p[0], p[1]]);\n\n    // Add 'S' points\n    for (var i = 2, n = tgts.length; i < n; i++) {\n      var _p = _points[i];\n      var _t = tgts[i];\n\n      pts.push([_p[0] - _t[0], _p[1] - _t[1], _p[0], _p[1]]);\n    }\n\n    return pts;\n  },\n\n\n  /**\n   * Slice out a segment of 'points'\n   * @param {Array} points\n   * @param {Number} start\n   * @param {Number} end\n   * @returns {Array}\n   */\n  slice: function slice(points, start, end) {\n    var pts = points.slice(start, end);\n\n    if (start) {\n      // Add additional 'C' points\n      if (pts[1].length < 6) {\n        var n = pts[0].length;\n\n        pts[1] = [pts[0][n - 2] * 2 - pts[0][n - 4], pts[0][n - 1] * 2 - pts[0][n - 3]].concat(pts[1]);\n      }\n      // Remove control points for 'M'\n      pts[0] = pts[0].slice(-2);\n    }\n\n    return pts;\n  },\n\n\n  /**\n   * Convert 'points' to svg path\n   * @param {Array} points\n   * @returns {String}\n   */\n  svgPath: function svgPath(points) {\n    var p = '';\n\n    for (var i = 0; i < points.length; i++) {\n      var point = points[i];\n      var n = point.length;\n\n      if (!i) {\n        p += 'M' + point[n - 2] + ' ' + point[n - 1];\n      } else if (n > 4) {\n        p += 'C' + point[0] + ', ' + point[1];\n        p += ', ' + point[2] + ', ' + point[3];\n        p += ', ' + point[4] + ', ' + point[5];\n      } else {\n        p += 'S' + point[0] + ', ' + point[1];\n        p += ', ' + point[2] + ', ' + point[3];\n      }\n    }\n\n    return p;\n  }\n};\n\n/**\n * Generate tangents for 'points'\n * @param {Array} points\n * @returns {Array}\n */\nfunction tangents(points) {\n  var m = finiteDifferences(points);\n  var n = points.length - 1;\n\n  var tgts = [];\n  var a = void 0,\n      b = void 0,\n      d = void 0,\n      s = void 0;\n\n  for (var i = 0; i < n; i++) {\n    d = slope(points[i], points[i + 1]);\n\n    if (Math.abs(d) < ε) {\n      m[i] = m[i + 1] = 0;\n    } else {\n      a = m[i] / d;\n      b = m[i + 1] / d;\n      s = a * a + b * b;\n      if (s > 9) {\n        s = d * 3 / Math.sqrt(s);\n        m[i] = s * a;\n        m[i + 1] = s * b;\n      }\n    }\n  }\n\n  for (var _i = 0; _i <= n; _i++) {\n    s = (points[Math.min(n, _i + 1)][0] - points[Math.max(0, _i - 1)][0]) / (6 * (1 + m[_i] * m[_i]));\n    tgts.push([s || 0, m[_i] * s || 0]);\n  }\n\n  return tgts;\n}\n\n/**\n * Compute slope from point 'p0' to 'p1'\n * @param {Array} p0\n * @param {Array} p1\n * @returns {Number}\n */\nfunction slope(p0, p1) {\n  return (p1[1] - p0[1]) / (p1[0] - p0[0]);\n}\n\n/**\n * Compute three-point differences for 'points'\n * @param {Array} points\n * @returns {Array}\n */\nfunction finiteDifferences(points) {\n  var m = [];\n  var p0 = points[0];\n  var p1 = points[1];\n  var d = m[0] = slope(p0, p1);\n  var i = 1;\n\n  for (var n = points.length - 1; i < n; i++) {\n    p0 = p1;\n    p1 = points[i + 1];\n    m[i] = (d + (d = slope(p0, p1))) * 0.5;\n  }\n  m[i] = d;\n\n  return m;\n}","module.exports = __webpack_public_path__ + \"559d2b611b7d60f4464cd9f3ca8aafdf.svg\";","module.exports = __webpack_public_path__ + \"df91fa2ab6ba9b38ce01ac2e7dab5947.svg\";","import { Localized } from '@fluent/react';\nimport * as React from 'react';\nimport { connect } from 'react-redux';\nimport { DAILY_GOALS } from '../../../constants';\nimport API from '../../../services/api';\nimport { trackHome } from '../../../services/tracker';\nimport { Locale } from '../../../stores/locale';\nimport StateTree from '../../../stores/tree';\nimport URLS from '../../../urls';\nimport { LocaleLink } from '../../locale-helpers';\nimport { PlayLink, RecordLink } from '../../primary-buttons/primary-buttons';\n\nimport './hero.css';\n\ninterface PropsFromState {\n  api: API;\n  locale: Locale.State;\n}\n\ntype State = {\n  count: number;\n  dimensions: { width: number; height: number }[];\n  showToMeasure: boolean;\n};\n\nclass Hero extends React.Component<\n  {\n    type: 'speak' | 'listen';\n    status: 'active' | 'compressed' | null;\n    onShow: () => any;\n    onHide: () => any;\n  } & PropsFromState,\n  State\n> {\n  state: State = { count: null, dimensions: [], showToMeasure: true };\n\n  toggleableRefs: any = Array.from({ length: 4 }).map(() => React.createRef());\n\n  async componentDidMount() {\n    window.addEventListener('resize', this.showToMeasure);\n    this.measure();\n\n    const { api, type } = this.props;\n    this.setState({\n      count: await (type === 'speak'\n        ? api.fetchDailyClipsCount()\n        : api.fetchDailyVotesCount()),\n    });\n  }\n\n  componentWillUnmount() {\n    window.removeEventListener('resize', this.showToMeasure);\n  }\n\n  componentDidUpdate() {\n    if (this.state.showToMeasure) {\n      this.measure();\n    }\n  }\n\n  showToMeasure = () => this.setState({ showToMeasure: true });\n\n  measure() {\n    this.setState({\n      dimensions: this.toggleableRefs.map(\n        ({ current: { offsetWidth, offsetHeight } }: any) => ({\n          width: offsetWidth,\n          height: offsetHeight,\n        })\n      ),\n      showToMeasure: false,\n    });\n  }\n\n  getToggleableProps(i: number, className = '') {\n    const { status } = this.props;\n    const { dimensions, showToMeasure } = this.state;\n    return {\n      ref: this.toggleableRefs[i],\n      className: 'toggleable ' + className,\n      style: showToMeasure\n        ? {}\n        : status === 'active'\n        ? dimensions[i]\n        : { width: 0, height: 0 },\n    };\n  }\n\n  render() {\n    const { locale, onHide, onShow, status, type } = this.props;\n    const { count } = this.state;\n    const isSpeak = type == 'speak';\n    const PrimaryLink = isSpeak ? RecordLink : PlayLink;\n    return (\n      <div\n        className={['hero-box', type, status].join(' ')}\n        onClick={onShow}\n        onMouseEnter={onShow}\n        onMouseLeave={onHide}>\n        <div className=\"column title\">\n          <Localized id={type}>\n            <h1 />\n          </Localized>\n          <h3>\n            <Localized id={type + '-subtitle'}>\n              <span />\n            </Localized>\n          </h3>\n          <div {...this.getToggleableProps(0)}>\n            <Localized id={type + '-paragraph'}>\n              <p className=\"description\" />\n            </Localized>\n            <Localized id=\"read-terms-q\">\n              <LocaleLink to={URLS.TERMS} className=\"terms\" />\n            </Localized>\n          </div>\n        </div>\n        <div className=\"column cta\">\n          <PrimaryLink\n            trackClass={`${type}-from-home`}\n            onClick={() => trackHome(type, locale)}\n          />\n          <div {...this.getToggleableProps(1, 'line ' + type)} />\n          <div {...this.getToggleableProps(2)}>\n            <Localized\n              id=\"help-reach-goal\"\n              vars={{ goal: DAILY_GOALS[type][0] }}>\n              <div className=\"cta-message\" />\n            </Localized>\n          </div>\n        </div>\n        <div {...this.getToggleableProps(3, 'progress column')}>\n          <Localized id=\"todays-progress\">\n            <h3 className=\"progress-title\" />\n          </Localized>\n          <span className=\"progress-count\">\n            <span className=\"current\">{count === null ? '?' : count}</span>\n            <span className=\"total\">\n              {' / '}\n              {DAILY_GOALS[type][0]}\n            </span>\n          </span>\n          <p>\n            <Localized id={type + '-goal-text'}>\n              <i />\n            </Localized>\n          </p>\n        </div>\n        <div className=\"fading\" />\n      </div>\n    );\n  }\n}\n\nconst mapStateToProps = ({ api, locale }: StateTree) => ({\n  api,\n  locale,\n});\n\nexport default connect<PropsFromState>(mapStateToProps)(Hero);\n","const spline = require('@yr/monotone-cubic-spline');\nimport {\n  Localized,\n  withLocalization,\n  WithLocalizationProps,\n} from '@fluent/react';\nimport * as React from 'react';\nimport { useState } from 'react';\nimport { connect } from 'react-redux';\nimport API from '../../../services/api';\nimport { trackHome } from '../../../services/tracker';\nimport StateTree from '../../../stores/tree';\nimport LanguageSelect, {\n  ALL_LOCALES,\n} from '../../language-select/language-select';\nimport Plot, {\n  BarPlot,\n  LINE_OFFSET,\n  PLOT_PADDING,\n  TOTAL_LINE_MARGIN,\n  Y_OFFSET,\n} from '../../plot/plot';\n\nimport './stats.css';\n\nconst { Tooltip } = require('react-tippy');\n\nconst PLOT_STROKE_WIDTH = 2;\n\ntype Attribute = 'total' | 'valid';\n\ninterface State {\n  locale: string;\n}\n\nfunction StatsCard({\n  children,\n  onLocaleChange,\n  header,\n}: {\n  children?: React.ReactNode;\n  header: React.ReactNode;\n  onLocaleChange: (locale: string) => any;\n}) {\n  const [locale, setLocale] = useState(ALL_LOCALES);\n  return (\n    <div className=\"home-card\">\n      <div className=\"head\">\n        {header}\n        <LanguageSelect\n          value={locale}\n          onChange={locale => {\n            trackHome('metric-locale-change', locale);\n            setLocale(locale);\n            onLocaleChange(locale == ALL_LOCALES ? null : locale);\n          }}\n        />\n      </div>\n      {children}\n    </div>\n  );\n}\n\ninterface PropsFromState {\n  api: API;\n}\n\nconst mapStateToProps = ({ api }: StateTree) => ({\n  api,\n});\n\nexport namespace ClipsStats {\n  const DATA_LENGTH = 5;\n  const TICK_COUNT = 7;\n  const CIRCLE_RADIUS = 8;\n\n  function formatSeconds(totalSeconds: number, precise: boolean = false) {\n    const seconds = totalSeconds % 60;\n    const minutes = Math.floor(totalSeconds / 60) % 60;\n    const hours = Math.floor(totalSeconds / 3600);\n\n    if (precise) return `${hours.toLocaleString()}h`;\n    if (hours >= 1000) {\n      return (hours / 1000).toPrecision(2) + 'k';\n    }\n\n    const timeParts = [];\n\n    if (hours > 0) {\n      timeParts.push(hours + 'h');\n    }\n\n    if (hours < 10 && minutes > 0) {\n      timeParts.push(minutes + 'm');\n    }\n\n    if (hours == 0 && minutes < 10 && seconds > 0) {\n      timeParts.push(seconds + 's');\n    }\n\n    return timeParts.join(' ') || '0';\n  }\n\n  const MetricValue = ({ attribute, title, children }: any) => (\n    <div className={'metric-value ' + attribute} title={title}>\n      <div className=\"point\">●</div>\n      {children}\n    </div>\n  );\n\n  const Metric = ({\n    data,\n    labelId,\n    attribute,\n  }: {\n    data: any[];\n    labelId: string;\n    attribute: Attribute;\n  }) => (\n    <div className=\"metric\">\n      <Localized id={labelId}>\n        <div className=\"label\" />\n      </Localized>\n      <MetricValue\n        attribute={attribute}\n        title={\n          data.length > 0\n            ? formatSeconds(data[data.length - 1][attribute], true)\n            : ''\n        }>\n        {data.length > 0\n          ? formatSeconds(data[data.length - 1][attribute])\n          : '?'}\n      </MetricValue>\n    </div>\n  );\n\n  const Path = React.forwardRef(\n    (\n      {\n        attribute,\n        data,\n        max,\n        width,\n      }: {\n        attribute: Attribute;\n        data: any[];\n        max: number;\n        width: number;\n      },\n      ref: any\n    ) => {\n      if (data.length === 0) return null;\n\n      const pointFromDatum = (x: number, y: number): [number, number] => [\n        LINE_OFFSET +\n          PLOT_PADDING +\n          (x * (width - LINE_OFFSET - 2 * PLOT_PADDING - CIRCLE_RADIUS)) /\n            (data.length - 1),\n        Y_OFFSET -\n          PLOT_STROKE_WIDTH / 2 +\n          ((1 - y / max) * (data.length + 1) * TOTAL_LINE_MARGIN) / TICK_COUNT,\n      ];\n\n      const lastIndex = data.length - 1;\n      const [x, y] = pointFromDatum(lastIndex, data[lastIndex][attribute]);\n\n      return (\n        <>\n          <path\n            d={spline.svgPath(\n              spline.points(\n                data.map((datum: any, i: number) =>\n                  pointFromDatum(i, datum[attribute])\n                )\n              )\n            )}\n            className={attribute}\n            fill=\"none\"\n            ref={ref}\n            strokeWidth={PLOT_STROKE_WIDTH}\n          />\n          <circle\n            cx={x}\n            cy={y}\n            r={CIRCLE_RADIUS}\n            fill=\"white\"\n            className={'outer ' + attribute}\n          />\n          <circle\n            cx={x}\n            cy={y}\n            r={CIRCLE_RADIUS - 2}\n            className={'inner ' + attribute}\n          />\n        </>\n      );\n    }\n  );\n\n  class BareRoot extends React.Component<\n    WithLocalizationProps & PropsFromState\n  > {\n    state: { data: any[]; hoveredIndex: number } = {\n      data: [],\n      hoveredIndex: null,\n    };\n\n    pathRef: any = React.createRef();\n\n    async componentDidMount() {\n      await this.updateData();\n    }\n\n    updateData = async (locale?: string) => {\n      this.setState({ data: await this.props.api.fetchClipsStats(locale) });\n    };\n\n    handleMouseMove = (event: any) => {\n      const path = this.pathRef.current;\n      if (!path) {\n        this.setState({ hoveredIndex: null });\n      }\n      const { left, width } = path.getBoundingClientRect();\n      const hoveredIndex =\n        Math.round((DATA_LENGTH * (event.clientX - left)) / width) - 1;\n      this.setState({\n        hoveredIndex:\n          hoveredIndex >= 0 && hoveredIndex < DATA_LENGTH ? hoveredIndex : null,\n      });\n    };\n\n    handleMouseOut = () => this.setState({ hoveredIndex: null });\n\n    render() {\n      const { getString } = this.props;\n      const { data, hoveredIndex } = this.state;\n\n      const datum = data[hoveredIndex];\n      const { date, total, valid } = datum || ({} as any);\n      const tooltipContents = datum ? (\n        <>\n          <b>\n            {new Date(date).toLocaleDateString([], {\n              day: 'numeric',\n              month: 'long',\n              year: 'numeric',\n            })}\n          </b>\n          <div className=\"metrics\">\n            <MetricValue attribute=\"total\">{formatSeconds(total)}</MetricValue>\n            <MetricValue attribute=\"valid\">{formatSeconds(valid)}</MetricValue>\n          </div>\n        </>\n      ) : null;\n\n      return (\n        <StatsCard\n          header={\n            <div className=\"metrics\">\n              <Metric data={data} labelId=\"hours-recorded\" attribute=\"total\" />\n              <Metric data={data} labelId=\"hours-validated\" attribute=\"valid\" />\n            </div>\n          }\n          onLocaleChange={this.updateData}></StatsCard>\n      );\n    }\n  }\n\n  export const Root = connect<PropsFromState>(mapStateToProps)(\n    withLocalization(BareRoot)\n  );\n}\n\nexport const VoiceStats = connect<PropsFromState>(mapStateToProps)(\n  class BareRoot extends React.Component<PropsFromState> {\n    state: { data: any[] } = { data: [] };\n\n    async componentDidMount() {\n      await this.updateData();\n    }\n\n    updateData = async (locale?: string) => {\n      this.setState({ data: await this.props.api.fetchClipVoices(locale) });\n    };\n\n    render() {\n      const { data } = this.state;\n      return (\n        <StatsCard\n          header={\n            <div>\n              <Localized id=\"voices-online\">\n                <h3 />\n              </Localized>\n              <div className=\"online-voices\">\n                {data.length > 0\n                  ? data[data.length - 1].value.toLocaleString()\n                  : '?'}\n              </div>\n            </div>\n          }\n          onLocaleChange={this.updateData}>\n          <BarPlot data={data} />\n        </StatsCard>\n      );\n    }\n  }\n);\n","import { Localized } from '@fluent/react';\nimport * as React from 'react';\nimport { useEffect, useRef, useState } from 'react';\nimport { shallowEqual } from 'react-redux';\nimport { trackHome } from '../../../services/tracker';\nimport { useTypedSelector } from '../../../stores/tree';\nimport { ContributableLocaleLock } from '../../locale-helpers';\nimport { RecordLink } from '../../primary-buttons/primary-buttons';\nimport RegisterSection from '../../register-section/register-section';\nimport RequestLanguageModal from '../../request-language-modal/request-language-modal';\nimport { LinkButton } from '../../ui/ui';\nimport Hero from './hero';\nimport { ClipsStats, VoiceStats } from './stats';\n\nimport './home.css';\n\ntype HeroType = 'speak' | 'listen';\n\nexport default function HomePage() {\n  const heroes = ['speak', 'listen'];\n  const { locale, user } = useTypedSelector(\n    ({ locale, user }) => ({\n      locale,\n      user,\n    }),\n    shallowEqual\n  );\n\n  const [activeHero, setActiveHero] = useState<null | HeroType>(null);\n  const [showRequestLanguageModal, setShowRequestLanguageModal] = useState(\n    false\n  );\n  const [showWallOfText, setShowWallOfText] = useState(false);\n\n  const statsRef = useRef<HTMLDivElement>(null);\n\n  useEffect(() => {\n    if (location.hash == '#stats') {\n      statsRef.current.scrollIntoView(true);\n      window.scrollBy(0, -130);\n    }\n  }, []);\n\n  return (\n    <div className=\"home\">\n      <ContributableLocaleLock\n        render={({ isContributable }: any) =>\n          isContributable ? (\n            <div\n              className={\n                'heroes ' + (heroes.length > 1 ? 'multiple' : 'single')\n              }>\n              {heroes.map((type: HeroType) => (\n                <Hero\n                  key={type + locale}\n                  type={type}\n                  status={\n                    heroes.length == 1 || activeHero === type\n                      ? 'active'\n                      : activeHero\n                      ? 'compressed'\n                      : null\n                  }\n                  onShow={() => setActiveHero(type)}\n                  onHide={() =>\n                    setActiveHero(activeHero === type ? null : activeHero)\n                  }\n                />\n              ))}\n            </div>\n          ) : (\n            <div className=\"non-contributable-hero\">\n              <img\n                className=\"fading\"\n                src={require('./images/fading.svg')}\n                alt=\"Fading\"\n              />\n              <img\n                className=\"waves\"\n                src={require('./images/speak.svg')}\n                alt=\"Waves\"\n              />\n            </div>\n          )\n        }\n      />\n\n      <div className=\"text\">\n        <div className=\"inner\">\n          <div className=\"title\">\n            <Localized id=\"home-title\">\n              <h1 />\n            </Localized>\n          </div>\n\n          <div className=\"description\">\n            <Localized id=\"wall-of-text-first\">\n              <p />\n            </Localized>\n\n            <br />\n\n            <Localized id=\"wall-of-text-second\">\n              <p />\n            </Localized>\n\n            <br />\n\n            {showWallOfText && (\n              <>\n                <Localized id=\"wall-of-text-more-desktop\">\n                  <p />\n                </Localized>\n                <br />\n              </>\n            )}\n\n            <Localized\n              id={showWallOfText ? 'languages-show-less' : 'show-wall-of-text'}>\n              <button\n                className=\"show-more\"\n                type=\"button\"\n                onClick={() => {\n                  if (showWallOfText) {\n                    trackHome('read-more', locale);\n                  }\n                  setShowWallOfText(!showWallOfText);\n                }}\n              />\n            </Localized>\n          </div>\n        </div>\n      </div>\n\n      <div className=\"stats\" ref={statsRef}>\n        <ClipsStats.Root />\n        <VoiceStats />\n      </div>\n\n      {user.account ? (\n        <section className=\"contribute-section\">\n          <div className=\"mars-container\">\n            <img src=\"/img/mars.svg\" alt=\"Mars\" />\n          </div>\n          <div className=\"cta\">\n            <ContributableLocaleLock\n              render={({ isContributable }: any) =>\n                isContributable ? (\n                  <>\n                    <RecordLink\n                      onClick={() => trackHome('speak-mars', locale)}\n                    />\n                    <Localized id=\"ready-to-record\">\n                      <h1 />\n                    </Localized>\n                  </>\n                ) : (\n                  <>\n                    <Localized id=\"request-language-text\">\n                      <h1 />\n                    </Localized>\n                    <div style={{ width: '100%' }} />\n                    <Localized id=\"request-language-button\">\n                      <button\n                        type=\"button\"\n                        className=\"request-language\"\n                        onClick={() => setShowRequestLanguageModal(true)}\n                      />\n                    </Localized>\n                    {showRequestLanguageModal && (\n                      <RequestLanguageModal\n                        onRequestClose={() =>\n                          setShowRequestLanguageModal(false)\n                        }\n                      />\n                    )}\n                  </>\n                )\n              }\n            />\n          </div>\n        </section>\n      ) : (\n        <RegisterSection marsSrc=\"/img/mars.svg\">\n          <Localized id=\"help-make-dataset\">\n            <h1 />\n          </Localized>\n          <Localized id=\"profile-not-required\">\n            <h2 />\n          </Localized>\n          <Localized id=\"sign-up-account\">\n            <LinkButton\n              rounded\n              href=\"/login\"\n              onClick={() => trackHome('click-benefits-register', locale)}\n            />\n          </Localized>\n        </RegisterSection>\n      )}\n    </div>\n  );\n}\n"],"sourceRoot":""}