{"version":3,"file":"js/4018-50440becc5ad047d836b.chunk.js","mappings":"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","sources":["webpack://halo/./app/client/src/components/Cards/BaseCardWide.tsx","webpack://halo/./app/client/src/components/Cards/RequestForStartupCardWide.tsx","webpack://halo/./app/client/src/components/CompanyNetworkCta/RequestToJoinNetworkModal.tsx","webpack://halo/./app/client/src/tsTypes/companyNetworkScientists.ts","webpack://halo/./app/client/src/components/CompanyNetworkCta/CompanyNetworkCta.tsx","webpack://halo/./app/client/src/utils/sponsorUtils.ts","webpack://halo/./app/client/src/views/CompanyPage/CompanyDescriptionModal.tsx","webpack://halo/./app/client/src/requests/countries.ts","webpack://halo/./app/client/src/utils/imageUtils.ts","webpack://halo/./app/client/src/views/CompanyPage/CompanyLogoModal.tsx","webpack://halo/./app/client/src/views/CompanyPage/CompanyLogo.tsx","webpack://halo/./app/client/src/views/CompanyPage/CompanyModals.styles.jsx","webpack://halo/./app/client/src/views/CompanyPage/CompanyVideoModal.jsx","webpack://halo/./app/client/src/views/CompanyPage/CompanyVideo.tsx","webpack://halo/./app/client/src/views/CompanyPage/styledComponents.ts","webpack://halo/./app/client/src/views/CompanyPage/CompanyPageJumbotron.tsx","webpack://halo/./app/client/src/views/CompanyPage/CompanyCTABanner.tsx","webpack://halo/./app/client/src/views/CompanyPage/CompanyEditForm.tsx","webpack://halo/./app/client/src/views/CompanyPage/tooltipContent.tsx","webpack://halo/./app/client/src/views/CompanyPage/ResearchInterestInput.tsx","webpack://halo/./app/client/src/views/CompanyPage/CompanyResearchInterest.tsx","webpack://halo/./app/client/src/views/CompanyPage/CompanyPageMoreOpportunities.tsx","webpack://halo/./app/client/src/views/CompanyPage/CompanyPageUsers.tsx","webpack://halo/./app/client/src/views/CompanyPage/CompanyPageViewLiveBanner.tsx","webpack://halo/./app/client/src/views/CompanyPage/CompanyTextInput.tsx","webpack://halo/./app/client/src/views/CompanyPage/CompanyPage.tsx","webpack://halo/./app/client/src/views/RequestForStartupPage/Status.tsx"],"sourcesContent":["import { CompanyAvatar, Tag, XMoreWrapper } from \"@components/library\";\nimport { COLORS, FONTS, STYLES, WINDOW_DIMENSIONS } from \"@constants\";\nimport { RootState } from \"@redux/store\";\nimport { ReactNode, useState } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { Link } from \"react-router-dom\";\nimport styled from \"styled-components\";\n\ninterface Props {\n  to: string | Record<string, unknown>;\n  isExternalLink?: boolean;\n  openInNewTab?: boolean;\n  title: string | ReactNode;\n  subtitle: string | ReactNode;\n  imageUrl: string | null;\n  cornerContent?: ReactNode;\n  tags: string[];\n  buttons?: ReactNode;\n  \"data-testid\"?: string;\n}\n\nexport default function BaseCardWide({\n  to,\n  isExternalLink = false,\n  openInNewTab = false,\n  title,\n  subtitle,\n  imageUrl,\n  cornerContent,\n  tags,\n  buttons,\n  \"data-testid\": dataTestId,\n}: Props) {\n  const [areButtonsHovered, setAreButtonsHovered] = useState(false);\n  const isMobile = useSelector((state: RootState) => state.window.isMobile);\n  const windowWidth = useSelector((state: RootState) => state.window.width);\n  const isCompactLayout = windowWidth <= WINDOW_DIMENSIONS.TABLET_LANDSCAPE;\n\n  return (\n    <CardLink\n      to={!isExternalLink && !areButtonsHovered && !isMobile && to}\n      href={isExternalLink && to}\n      as={isExternalLink ? \"a\" : undefined}\n      target={isExternalLink && openInNewTab ? \"_blank\" : undefined}\n      rel={isExternalLink && openInNewTab ? \"noopener noreferrer\" : undefined}\n    >\n      <Container data-testid={dataTestId}>\n        <Top onMouseOver={() => setAreButtonsHovered(false)}>\n          <Content>\n            <AvatarWrapper>\n              <CompanyAvatar imageUrl={imageUrl} size={isCompactLayout ? \"md\" : \"lg\"} />\n            </AvatarWrapper>\n            <Text>\n              <TitleGroup>\n                <Title>{title}</Title>\n                <Subtitle>{subtitle}</Subtitle>\n              </TitleGroup>\n              <CornerContent shouldWrap={isCompactLayout}>{cornerContent}</CornerContent>\n            </Text>\n          </Content>\n        </Top>\n        <Bottom>\n          <Tags onMouseOver={() => setAreButtonsHovered(false)} data-testid=\"keywords\">\n            <XMoreWrapper maxLines={isCompactLayout ? 2 : 1} maxTags={5}>\n              {tags.map((tag) => (\n                <Tag key={`${title}-tag-${tag}`} content={tag} />\n              ))}\n            </XMoreWrapper>\n          </Tags>\n          <Buttons\n            onMouseEnter={() => setAreButtonsHovered(true)}\n            onMouseLeave={() => setAreButtonsHovered(false)}\n            data-testid=\"buttons\"\n          >\n            {buttons}\n          </Buttons>\n        </Bottom>\n      </Container>\n    </CardLink>\n  );\n}\n\nconst CardLink = styled(Link)`\n  display: block;\n  :visited,\n  :link {\n    color: ${COLORS.BLACK};\n    text-decoration: none;\n  }\n`;\n\nconst Container = styled.div`\n  border: 1px solid ${COLORS.NEUTRAL_250};\n  border-radius: 8px;\n  box-shadow: ${STYLES.SHADOW_CARD};\n  min-width: 0;\n  transition: box-shadow 0.2s ease;\n  &:hover {\n    box-shadow: ${STYLES.SHADOW_A};\n  }\n  @media (max-width: ${WINDOW_DIMENSIONS.TABLET_LANDSCAPE}px) {\n    &:hover {\n      box-shadow: ${STYLES.SHADOW_CARD};\n    }\n  }\n`;\n\nconst Top = styled.div`\n  display: flex;\n  padding: 24px;\n  gap: 16px;\n  margin-bottom: 32px;\n  @media (max-width: ${WINDOW_DIMENSIONS.TABLET_LANDSCAPE}px) {\n    padding: 16px;\n  }\n`;\n\nconst Content = styled.div`\n  display: flex;\n  gap: 32px;\n  align-items: flex-start;\n  flex: 1;\n  padding: 8px 8px;\n  min-width: 0;\n  @media (max-width: ${WINDOW_DIMENSIONS.TABLET_LANDSCAPE}px) {\n    gap: 16px;\n  }\n`;\n\nconst AvatarWrapper = styled.div`\n  flex-shrink: 0;\n  width: 50px;\n  height: 50px;\n  display: flex;\n  align-items: center;\n  min-width: 50px;\n  @media (max-width: ${WINDOW_DIMENSIONS.TABLET_LANDSCAPE}px) {\n    width: 40px;\n    height: 40px;\n    min-width: 40px;\n  }\n`;\n\nconst Text = styled.div`\n  min-width: 0;\n  flex: 1;\n  display: flex;\n  flex-direction: row;\n  justify-content: space-between;\n  gap: 8px;\n  @media (min-width: ${WINDOW_DIMENSIONS.TABLET_LANDSCAPE + 1}px) {\n    min-width: 200px;\n  }\n  @media (max-width: ${WINDOW_DIMENSIONS.TABLET_LANDSCAPE}px) {\n    flex-wrap: wrap;\n    align-items: flex-start;\n  }\n`;\n\nconst TitleGroup = styled.div`\n  display: flex;\n  flex-direction: column;\n  min-width: 0;\n  flex: 1;\n  @media (max-width: ${WINDOW_DIMENSIONS.TABLET_LANDSCAPE}px) {\n    min-width: 100px;\n    flex: 1 1 100px;\n    align-items: flex-start;\n\n  }\n`;\n\nconst Title = styled.div`\n  display: flex;\n  align-items: center;\n  gap: 6px;\n  flex-wrap: nowrap;\n  ${FONTS.HEADING_5_SEMIBOLD};\n  overflow: hidden;\n  margin-bottom: 8px;\n  line-height: 1.4;\n  white-space: normal;\n  > span {\n    overflow: hidden;\n    text-overflow: ellipsis;\n    min-width: 0;\n  }\n  > svg, > div {\n    flex-shrink: 0;\n  }\n  @media (max-width: ${WINDOW_DIMENSIONS.TABLET_LANDSCAPE}px) {\n    width: 100%;\n  }\n  @media (max-width: ${WINDOW_DIMENSIONS.TABLET}px) {\n    ${FONTS.SEMIBOLD_1};\n    line-height: 1.2;\n    width: 100%;\n  }\n`;\n\nconst Subtitle = styled.div`\n  display: flex;\n  align-items: center;\n  text-overflow: ellipsis;\n  ${FONTS.SEMIBOLD_3};\n  color: ${COLORS.NEUTRAL_500};\n  margin-bottom: 0;\n  @media (max-width: ${WINDOW_DIMENSIONS.TABLET_LANDSCAPE}px) {\n    width: 100%;\n    justify-content: flex-start;\n  }\n`;\n\nconst CornerContent = styled.div`\n  height: fit-content;\n  flex-shrink: 0;\n  white-space: nowrap;  \n  font-size: 14px;\n  color: ${COLORS.NEUTRAL_500};\n  @media (max-width: ${WINDOW_DIMENSIONS.TABLET_LANDSCAPE}px) {\n    flex: 0 0 max-content;\n    margin-top: 8px;\n    align-self: flex-start;\n    text-align: left;\n    width: 100%;\n  }\n`;\n\nconst Bottom = styled.div`\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  padding: 16px 32px;\n  border-top: 1px solid ${COLORS.NEUTRAL_200};\n  gap: 24px;\n  @media (max-width: ${WINDOW_DIMENSIONS.TABLET_LANDSCAPE}px) {\n    flex-direction: column;\n    align-items: flex-start;\n    padding: 16px 24px;\n    gap: 16px;\n  }\n`;\n\nconst Tags = styled.div`\n  flex: 1;\n  min-width: 0;\n  @media (max-width: ${WINDOW_DIMENSIONS.TABLET_LANDSCAPE}px) {\n    order: 1;\n    width: 100%;\n    > div {\n      justify-content: flex-start;\n      > div {\n        justify-content: flex-start;\n      }\n    }\n  }\n`;\n\nconst Buttons = styled.div`\n  display: flex;\n  justify-content: flex-end;\n  gap: 8px;\n  flex-shrink: 0;\n  @media (min-width: 961px) {\n    margin-left: auto;\n  }\n  @media (max-width: ${WINDOW_DIMENSIONS.TABLET_LANDSCAPE}px) {\n    order: 3;\n    display: flex;\n    flex-direction: row;\n    flex-wrap: nowrap;\n    width: 100%;\n    margin-top: 8px;\n    justify-content: flex-start;\n    > * {\n      flex: 0 0 auto;\n      white-space: nowrap;\n    }\n  }\n  @media (max-width: ${WINDOW_DIMENSIONS.MOBILE}px) {\n    flex-direction: column;\n    align-items: flex-start;\n    width: 100%;\n    > * {\n      width: auto;\n    }\n  }\n`;","import { Button, Icon } from \"@components/library\";\nimport { COLORS, FONTS } from \"@constants\";\nimport useFollowRequest from \"@hooks/useFollowRequest\";\nimport { RootState } from \"@redux/store\";\nimport { SegmentEventName } from \"@tsTypes/__generated__/enums\";\nimport BaseCardWide from \"./BaseCardWide\";\n// @ts-ignore\nimport { CompanyVerificationStatus } from \"@tsTypes/companies.js.erb\";\nimport { RequestForStartupForCard } from \"@tsTypes/request_for_startups\";\nimport { LaunchableRequestStatus } from \"@tsTypes/requests\";\nimport { track } from \"@utils/appUtils\";\nimport { getLaunchableRequestStatus, requestPageUrlPath } from \"@utils/requestUtils\";\nimport { useSelector } from \"react-redux\";\nimport Status from \"src/views/RequestForStartupPage/Status\";\nimport styled from \"styled-components\";\nimport { WINDOW_DIMENSIONS } from \"@constants\";\n\ninterface Props {\n  request: RequestForStartupForCard;\n}\n\nexport default function RequestForStartupCardWide({ request }: Props) {\n  const currentUser = useSelector((state: RootState) => state.profiles.currentUser);\n  const windowWidth = useSelector((state: RootState) => state.window.width);\n  const isCompactLayout = windowWidth <= WINDOW_DIMENSIONS.TABLET_LANDSCAPE;\n\n  const { handleFollowRequest, isUserFollowing } = useFollowRequest(request.id);\n\n  const handleNotify = (e) => {\n    e.preventDefault();\n\n    if (request.requestable.has_page) {\n      track(SegmentEventName.Click, {\n        ui_component: \"Notify Me Button\",\n        react_component: \"RequestForStartupCardWide\",\n        request_slug: request.slug,\n      });\n    } else {\n      track(SegmentEventName.Click, {\n        ui_component: \"Notify Me Button - Offsite\",\n        react_component: \"RequestForStartupCardWide\",\n        logged_in: Boolean(currentUser.id),\n      });\n    }\n\n    handleFollowRequest();\n  };\n\n  const { has_page, external_url, parent_program } = request.requestable;\n\n  const status = getLaunchableRequestStatus(request as any);\n\n  let button = (\n    <Button\n      size=\"sm\"\n      type=\"button\"\n      variant=\"primary\"\n      to={requestPageUrlPath(request)}\n      iconName=\"Easy Apply\"\n      iconPosition=\"left\"\n      onClick={() =>\n        track(SegmentEventName.Click, {\n          ui_component: \"Easy Apply Button\",\n          react_component: \"RequestForStartupCardWide\",\n          request_slug: request.slug,\n          is_external_link: !request.requestable.has_page,\n        })\n      }\n    >\n      Easy apply\n    </Button>\n  );\n  if (external_url || !has_page) {\n    button = (\n      <Button\n        size=\"sm\"\n        type=\"button\"\n        variant=\"primary\"\n        to={has_page ? requestPageUrlPath(request) : external_url!}\n        isExternalLink={!has_page}\n        openInNewTab={!has_page}\n        iconName={!has_page ? \"Open in a new tab\" : undefined}\n        onClick={() =>\n          track(SegmentEventName.Click, {\n            ui_component: \"Learn More Button\",\n            react_component: \"RequestForStartupCardWide\",\n            request_slug: request.slug,\n            is_external_link: !request.requestable.has_page,\n          })\n        }\n      >\n        Learn more\n      </Button>\n    );\n  }\n  if (\n    status === LaunchableRequestStatus.COMING_SOON ||\n    (status === LaunchableRequestStatus.CLOSED && request.requestable.deadline) ||\n    status === LaunchableRequestStatus.IN_EXTENSION\n  ) {\n    if (isUserFollowing) {\n      button = (\n        <OptedIn>\n          <Icon name=\"Success\" color={COLORS.GREEN} size=\"sm\" />\n          You&apos;ll be notified\n        </OptedIn>\n      );\n    } else {\n      button = (\n        <Button size=\"sm\" type=\"button\" variant=\"primary\" iconName=\"Bell\" onClick={handleNotify}>\n          Notify me\n        </Button>\n      );\n    }\n  }\n\n  return (\n    <span\n      onClick={() =>\n        track(SegmentEventName.Click, {\n          ui_component: \"Request for Startup Card\",\n          request_slug: request.slug,\n        })\n      }\n    >\n      <BaseCardWide\n        to={has_page ? requestPageUrlPath(request) : external_url!}\n        isExternalLink={!has_page}\n        openInNewTab={!has_page}\n        title={`${parent_program ? `${parent_program}: ` : \"\"}${request.title}`}\n        subtitle={\n          <SubtitleWrapper>\n            <SubtitleText>\n              {\"private_alias\" in request.company\n                ? request.company.private_alias\n                : request.company.company_name}\n            </SubtitleText>\n            {request.company.verification_status === CompanyVerificationStatus.VERIFIED && (\n              <StyledIcon name=\"Verified\" size=\"sm\" color={COLORS.HALO_BLUE} />\n            )}\n          </SubtitleWrapper>\n        }\n        imageUrl={\"avatar\" in request.company ? request.company.avatar.url : null}\n        cornerContent={\n          <Status\n            request={request as any}\n            iconPosition=\"right\"\n            hasUnknownLaunchDate={request.requestable.unknown_launch_date}\n            useCompactText={windowWidth <= WINDOW_DIMENSIONS.TABLET}\n          />\n        }\n        tags={request.areas_of_expertise}\n        buttons={button}\n      />\n    </span>\n  );\n}\n\nconst OptedIn = styled.div`\n  display: flex;\n  align-items: center;\n  gap: 4px;\n  height: 36px;\n  color: ${COLORS.GREEN};\n  ${FONTS.REGULAR_2}\n`;\n\nconst SubtitleWrapper = styled.div`\n  display: inline-flex;\n  flex-wrap: nowrap;\n  align-items: center;\n  gap: 4px;\n`;\n\nconst SubtitleText = styled.span`\n  width: 100%;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  display: -webkit-box;\n  white-space: normal;\n  -webkit-box-orient: vertical;\n  -webkit-line-clamp: 1;\n  padding-right: .5rem;\n`;\n\nconst StyledIcon = styled(Icon)`\n  flex-shrink: 0;\n`;\n","import { BlankModal, Button, Icon } from \"@components/library\";\nimport { COLORS, FONTS } from \"@constants\";\nimport { t, t_html } from \"@utils/i18n\";\nimport { Link } from \"react-router-dom\";\nimport styled from \"styled-components\";\n\nconst TIPS = [\n  \"Include a short summary about your research\",\n  \"Add at least five publications, patents or grants\",\n  \"Upload a profile photo so they know it's you\",\n];\n\ninterface Props {\n  isOpen: boolean;\n  onClose: () => void;\n  companyName: string;\n  isCompanyVerified: boolean;\n  profileId: string;\n}\n\nconst RequestToJoinNetworkModal = ({\n  isOpen,\n  onClose,\n  companyName,\n  isCompanyVerified,\n  profileId,\n}: Props) => {\n  return (\n    <BlankModal isOpen={isOpen} onClose={onClose} width=\"620px\">\n      <Container data-testid=\"join-network-modal\">\n        <Content>\n          <Header>\n            <Icon name=\"Success\" color={COLORS.GREEN} size=\"xl\" />\n            {t([\n              \"components.scientist_network_cta.confirmation_modal.header\",\n              isCompanyVerified ? \"verified\" : \"unverified\",\n            ])}\n          </Header>\n          <Subheader>\n            {t_html(\n              [\n                \"components.scientist_network_cta.confirmation_modal.subheader\",\n                isCompanyVerified ? \"verified_html\" : \"unverified_html\",\n              ],\n              {\n                company_name: companyName,\n              }\n            )}\n          </Subheader>\n          <List>\n            Here are some tips to be more successful:\n            {TIPS.map((tip: string) => (\n              <Item key={tip}>\n                <Icon name=\"Success\" color={COLORS.HALO_BLUE} size=\"md\" />\n                {tip}\n              </Item>\n            ))}\n          </List>\n          <ButtonContainer>\n            <Link to={`/profile/${profileId}`}>\n              <Button size=\"md\" iconName=\"Arrow Right\" iconPosition=\"right\">\n                Go to my profile\n              </Button>\n            </Link>\n          </ButtonContainer>\n        </Content>\n      </Container>\n    </BlankModal>\n  );\n};\n\nexport default RequestToJoinNetworkModal;\n\nconst Container = styled.div`\n  margin: 50px 50px 40px 50px;\n`;\n\nconst Content = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 30px;\n`;\n\nconst Header = styled.div`\n  ${FONTS.HEADING_4_SEMIBOLD}\n\n  display: flex;\n  align-items: center;\n  gap: 12px;\n`;\n\nconst Subheader = styled.div`\n  ${FONTS.SEMIBOLD_2}\n`;\n\nconst List = styled.div`\n  ${FONTS.REGULAR_2}\n`;\n\nconst Item = styled.div`\n  display: grid;\n  grid-template-columns: 30px auto;\n  margin-top: 8px;\n`;\n\nconst ButtonContainer = styled.div`\n  display: flex;\n  justify-content: center;\n`;\n","export enum CompanyNetworkScientistStatus {\n  PENDING = \"pending\",\n  ACCEPTED = \"accepted\",\n  REJECTED = \"rejected\",\n}\n\nexport enum CompanyNetworkScientistSource {\n  SCIENTIST_REQUEST = \"scientist_request\",\n  PROPOSAL_SUBMISSION = \"proposal_submission\",\n  SPONSOR_INVITE = \"sponsor_invite\",\n  SPONSOR_ADD_FROM_DIGEST = \"sponsor_add_from_digest\",\n  SCIENTIST_REQUEST_FROM_DIGEST = \"scientist_request_from_digest\",\n}\n","import RequestToJoinNetworkModal from \"@components/CompanyNetworkCta/RequestToJoinNetworkModal\";\nimport toast from \"@components/Toast\";\nimport { Button, Icon, Tooltip } from \"@components/library\";\nimport { ButtonProps } from \"@components/library/Buttons/Button\";\nimport { COLORS, FONTS } from \"@constants\";\nimport { finishFollowUnfollowCompany, toggleLoginModal } from \"@redux/actions/profileActions\";\nimport { RootState } from \"@redux/store\";\nimport { followUnfollowCompany } from \"@requests/companies\";\nimport {\n  getCompanyNetworkScientist,\n  requestToJoinCompanyNetwork,\n} from \"@requests/companyNetworkScientists\";\nimport { SegmentEventName, SegmentEventObject } from \"@tsTypes/__generated__/enums\";\n// @ts-ignore\nimport { CompanyVerificationStatus } from \"@tsTypes/companies.js.erb\";\nimport { CompanyForCard } from \"@tsTypes/companies/_for_card\";\nimport { CompanyNetworkScientistStatus } from \"@tsTypes/companyNetworkScientists\";\nimport { CompanyForCompanyPage } from \"@tsTypes/index\";\nimport { CompanyNetworkScientist } from \"@tsTypes/schema\";\nimport { UserRole } from \"@tsTypes/users\";\nimport { track } from \"@utils/appUtils\";\nimport appsignal from \"@utils/appsignal\";\nimport { setPrevUrlCookie } from \"@utils/authUtils\";\nimport { t, t_link } from \"@utils/i18n\";\nimport { MouseEvent, useEffect, useState } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { Link } from \"react-router-dom\";\nimport styled from \"styled-components\";\n\ninterface Props {\n  company: CompanyForCompanyPage | CompanyForCard;\n  buttonProps?: Pick<ButtonProps, \"size\" | \"width\" | \"iconName\">;\n}\n\nfunction CompanyPageNetworkCTA({ company, buttonProps }: Props) {\n  const [requestToJoinNetworkModalOpen, setRequestToJoinNetworkModalOpen] = useState(false);\n  const [isSubmitting, setIsSubmitting] = useState(false);\n  const [companyNetworkScientist, setCompanyNetworkScientist] = useState<CompanyNetworkScientist>();\n\n  const currentUser = useSelector((state: RootState) => state.profiles.currentUser);\n  const dispatch = useDispatch();\n\n  const { id, identifier, company_name, verification_status } = company;\n\n  useEffect(() => {\n    (async () => {\n      if (currentUser.role === UserRole.SCIENTIST) {\n        const response = await getCompanyNetworkScientist({\n          scientistProfileId: currentUser.profile_info.id,\n          companyId: company.id,\n        });\n        setCompanyNetworkScientist((response as any) ?? undefined);\n      }\n    })();\n  }, []);\n\n  const joinNetwork = async () => {\n    setIsSubmitting(true);\n    track(SegmentEventName.Click, {\n      ...company,\n      ui_component: \"Join Network Button\",\n      react_component: \"CompanyPageNetworkCTA\",\n    });\n\n    try {\n      const { company_network_scientist } = await requestToJoinCompanyNetwork(company.id);\n      setRequestToJoinNetworkModalOpen(true);\n      setCompanyNetworkScientist(company_network_scientist as any);\n    } catch (e) {\n      console.error(e.message);\n    } finally {\n      setIsSubmitting(false);\n    }\n  };\n\n  const toggleFollow = async () => {\n    setIsSubmitting(true);\n\n    try {\n      const response = await followUnfollowCompany(identifier);\n\n      if (response.is_following) {\n        toast.success(\n          t_link(\n            \"components.scientist_network_cta.toast_success\",\n            <Link to=\"/account/?q=following\">Account Settings</Link>\n          )\n        );\n        track(SegmentEventName.Follow, {\n          ...company,\n          object: SegmentEventObject.Company,\n        });\n      } else {\n        track(SegmentEventName.Unfollow, {\n          ...company,\n          object: SegmentEventObject.Company,\n        });\n      }\n\n      dispatch(\n        finishFollowUnfollowCompany({\n          company: response.company,\n          isFollowing: response.is_following,\n        })\n      );\n    } catch (e) {\n      appsignal.sendError(e, (span) => {\n        span.setAction(\"CompanyNetworkCta#toggleFollow\");\n        span.setTags({\n          companyIdentifier: String(identifier),\n          currentUserId: currentUser.id,\n        });\n      });\n    } finally {\n      setIsSubmitting(false);\n    }\n  };\n\n  const handleClick = (e: MouseEvent<HTMLButtonElement>) => {\n    e.preventDefault();\n    e.stopPropagation();\n\n    switch (currentUser.role) {\n      case UserRole.SCIENTIST: {\n        joinNetwork();\n        break;\n      }\n      case UserRole.SPONSOR: {\n        return;\n      }\n      case UserRole.UNIVERSITY_ADMIN: {\n        toggleFollow();\n        break;\n      }\n      default: {\n        setPrevUrlCookie(window.location.href, 0);\n\n        dispatch(toggleLoginModal({ open: true }));\n      }\n    }\n  };\n\n  const followedCompaniesInfo = currentUser.profile_info.followed_companies_info as {\n    id: number;\n    company_name: string;\n    identifier: string;\n    is_partner: boolean;\n  }[];\n\n  const isFollowing = followedCompaniesInfo\n    ? followedCompaniesInfo.some((followedCompany) => followedCompany.id === id)\n    : false;\n\n  return (\n    <>\n      <RequestToJoinNetworkModal\n        isOpen={requestToJoinNetworkModalOpen}\n        onClose={() => setRequestToJoinNetworkModalOpen(false)}\n        companyName={company_name ?? \"\"}\n        isCompanyVerified={verification_status === CompanyVerificationStatus.VERIFIED}\n        profileId={currentUser.profile_id}\n      />\n      <Container>\n        {(() => {\n          if (currentUser.role === UserRole.SPONSOR) return null;\n          if (\n            verification_status !== CompanyVerificationStatus.VERIFIED &&\n            (companyNetworkScientist || isFollowing)\n          ) {\n            return (\n              <BannerCtaSuccess>\n                <Icon name=\"History\" color={COLORS.BLUE_LIGHT_600} size=\"xs\" />\n                {t(\"components.scientist_network_cta.status.unverified\", {\n                  company_name: company_name,\n                })}\n              </BannerCtaSuccess>\n            );\n          }\n          if (companyNetworkScientist) {\n            return (\n              <BannerCtaSuccess>\n                <Icon name=\"Success\" color={COLORS.BLUE_LIGHT_600} size=\"xs\" />\n                {t([\n                  \"components.scientist_network_cta.status\",\n                  companyNetworkScientist.status === CompanyNetworkScientistStatus.ACCEPTED\n                    ? \"accepted\"\n                    : \"pending\",\n                ])}\n              </BannerCtaSuccess>\n            );\n          }\n          return (\n            <Tooltip\n              position=\"bottom\"\n              contentWidth=\"100%\"\n              shouldWrap={false}\n              isActive={!(currentUser.role === UserRole.UNIVERSITY_ADMIN && isFollowing)}\n              content={\n                <TooltipText>\n                  {(() => {\n                    if (verification_status !== CompanyVerificationStatus.VERIFIED) {\n                      return t(\"components.scientist_network_cta.tooltip.unverified\", {\n                        company_name,\n                      });\n                    }\n                    if (currentUser.role === UserRole.UNIVERSITY_ADMIN) {\n                      return t(\"components.scientist_network_cta.tooltip.university_admin\");\n                    }\n                    return t(\"components.scientist_network_cta.tooltip.scientist\", {\n                      company_name,\n                    });\n                  })()}\n                </TooltipText>\n              }\n            >\n              <Button\n                type=\"button\"\n                size={buttonProps?.size ?? \"sm\"}\n                iconName={buttonProps?.iconName}\n                iconPosition=\"right\"\n                width={buttonProps?.width ?? \"100%\"}\n                onClick={handleClick}\n                disabled={isSubmitting || currentUser.role === UserRole.SPONSOR}\n              >\n                {(() => {\n                  if (verification_status !== CompanyVerificationStatus.VERIFIED) {\n                    return t(\"components.scientist_network_cta.join_network_button.unverified\");\n                  }\n                  if (currentUser.role === UserRole.UNIVERSITY_ADMIN) {\n                    return t([\n                      \"components.scientist_network_cta.join_network_button.university_admin\",\n                      isFollowing ? \"unfollow\" : \"follow\",\n                    ]);\n                  }\n                  return t(\"components.scientist_network_cta.join_network_button.scientist\");\n                })()}\n              </Button>\n            </Tooltip>\n          );\n        })()}\n      </Container>\n    </>\n  );\n}\n\nconst Container = styled.div`\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: 8px;\n  max-width: fit-content;\n  padding: 0px;\n  ${FONTS.REGULAR_2}\n  text-align: center;\n`;\n\nconst BannerCtaSuccess = styled.div`\n  ${FONTS.MEDIUM_3}\n  color: ${COLORS.BLUE_900};\n  display: flex;\n  align-items: center;\n  gap: 4px;\n  margin-top: 8px;\n`;\n\nconst TooltipText = styled.div`\n  text-align: center;\n`;\n\nexport default CompanyPageNetworkCTA;\n","import { SortDirection } from \"@components/library/Buttons/SortButton\";\nimport {\n  CompanyMember,\n  ReviewTeamMember,\n  ReviewerDashboardRequest,\n  RolePartial,\n  SponsorProfilePartial,\n} from \"@tsTypes/index\";\nimport { RoleName } from \"@tsTypes/roles\";\nimport { AnyUser, UserRole } from \"@tsTypes/users\";\nimport { findRequestRoleNameOnUser } from \"./requestUtils\";\n\nfunction isSponsorProfile(profile: any): profile is SponsorProfilePartial {\n  return (\n    (profile as SponsorProfilePartial).is_admin !== undefined &&\n    (profile as SponsorProfilePartial).company_id !== undefined\n  );\n}\n\nexport const canEditCompanyPage = (\n  currentUser: AnyUser,\n  company: {\n    id: number;\n  },\n  viewLive: boolean\n) => {\n  if (viewLive) {\n    return false;\n  } else if (\n    \"role\" in currentUser &&\n    currentUser.role === UserRole.SPONSOR &&\n    isSponsorProfile(currentUser.profile_info) &&\n    currentUser.profile_info.is_admin &&\n    currentUser.profile_info.company_id === company.id\n  ) {\n    return true;\n  }\n  return false;\n};\n\nexport const sortCompanyMembers = (\n  members: CompanyMember[],\n  currentUserId: number,\n  nameSortDirection: SortDirection,\n  assignmentSortDirection: SortDirection\n): CompanyMember[] => {\n  const _members = [...members];\n  // Privileges assignment sort over name sort. Consumer resets one sort every time the other is set.\n  if (nameSortDirection === \"ASC\") {\n    _members.sort((a, b) => (a.first_name > b.first_name ? 1 : -1));\n  }\n  if (nameSortDirection === \"DESC\") {\n    _members.sort((a, b) => (a.first_name > b.first_name ? -1 : 1));\n  }\n  if (assignmentSortDirection === \"ASC\") {\n    _members.sort((a, b) => a.roles.length - b.roles.length);\n  }\n  if (assignmentSortDirection === \"DESC\") {\n    _members.sort((a, b) => b.roles.length - a.roles.length);\n  }\n  if (nameSortDirection === \"NONE\" && assignmentSortDirection === \"NONE\") {\n    _members.sort((a, b) => {\n      if (a.id === currentUserId) return -1;\n      else if (b.id === currentUserId) return 1;\n      if (a.profile_info.is_super_admin && !b.profile_info.is_super_admin) {\n        return -1;\n      } else if (!a.profile_info.is_super_admin && b.profile_info.is_super_admin) {\n        return 1;\n      }\n      if (a.profile_info.is_admin && !b.profile_info.is_admin) {\n        return -1;\n      } else if (!a.profile_info.is_admin && b.profile_info.is_admin) {\n        return 1;\n      }\n      return a.first_name > b.first_name ? 1 : -1;\n    });\n  }\n  return _members;\n};\n\nexport const sortReviewTeamMembers = ({\n  request,\n  members: _members,\n  currentUserId,\n}: {\n  request: ReviewerDashboardRequest;\n  members: ReviewTeamMember[];\n  currentUserId: number;\n}) => {\n  const roleAsNum = {\n    [RoleName.REQUEST_DRAFT_EDITOR]: 0,\n    [RoleName.REQUEST_LEAD]: 0,\n    [RoleName.REQUEST_COMMENTER]: 1,\n    [RoleName.REQUEST_EXTERNAL_LEAD]: 2,\n    [RoleName.REQUEST_EXTERNAL_COMMENTER]: 3,\n    [RoleName.COMPANY_SUPER_ADMIN]: 4,\n    [RoleName.COMPANY_ADMIN]: 5,\n  };\n\n  // Eliminate draft editors from the list if the request is complete or leads/commenters from the list of the request is a draft\n  const members = _members.filter((member) => {\n    if (request.complete) {\n      return findRequestRoleNameOnUser(member as any, request) !== RoleName.REQUEST_DRAFT_EDITOR;\n    }\n    return (\n      findRequestRoleNameOnUser(member as any, request) !== RoleName.REQUEST_LEAD &&\n      findRequestRoleNameOnUser(member as any, request) !== RoleName.REQUEST_COMMENTER\n    );\n  });\n\n  // Sort by current user, then lead, commenter, external lead, external commenter, super admin, admin\n  members.sort((a, b) => {\n    if (a.id === currentUserId) return -1;\n    else if (b.id === currentUserId) return 1;\n\n    if (\n      roleAsNum[findRequestRoleNameOnUser(a as any, request)!] <\n      roleAsNum[findRequestRoleNameOnUser(b as any, request)!]\n    ) {\n      return -1;\n    } else if (\n      roleAsNum[findRequestRoleNameOnUser(a as any, request)!] >\n      roleAsNum[findRequestRoleNameOnUser(b as any, request)!]\n    ) {\n      return 1;\n    }\n    return a.first_name > b.first_name ? 1 : -1;\n  });\n\n  return members;\n};\n\nexport const countReviewTeamRoles = (roles: RolePartial[]) =>\n  roles.filter((role) => role.resource_type === \"Request\").length;\n","import toast from \"@components/Toast\";\nimport { BlankModal, Button, SingleSelectDropdown, TextInput } from \"@components/library\";\nimport { DropdownOption } from \"@components/library/Dropdowns/DropdownOption\";\nimport { updateCompanyInfo } from \"@requests/companies\";\nimport { getCountryNames } from \"@requests/countries\";\n// @ts-ignore\nimport { CompanySize, CompanySpend, CompanyType } from \"@tsTypes/companies.js.erb\";\nimport { getOptionFromValue } from \"@utils/dropdownUtils\";\nimport { Dispatch, FormEvent, SetStateAction, useEffect, useState } from \"react\";\nimport styled from \"styled-components\";\n\nimport { FONTS } from \"@constants\";\nimport { CompanyForCompanyPage } from \"@tsTypes/index\";\n\ninterface Props {\n  isOpen: boolean;\n  onClose: () => void;\n  company: CompanyForCompanyPage;\n  mode: \"all\" | \"stats\" | \"description\";\n  setCompany: Dispatch<SetStateAction<CompanyForCompanyPage>>;\n}\n\nfunction CompanyDescriptionModal({ isOpen, onClose, company, setCompany, mode }: Props) {\n  const [location, setLocation] = useState(company?.location);\n  const [employeeCount, setEmployeeCount] = useState(company?.employee_count);\n  const [researcherCount, setResearcherCount] = useState(company?.researcher_count);\n  const [rdSpendAmount, setRdSpendAmount] = useState(company?.rd_spend_amount);\n  const [rdCentersCount, setRdCentersCount] = useState(company?.rd_centers_count);\n  const [companyType, setCompanyType] = useState(company?.company_type);\n  const [description, setDescription] = useState(company.description ?? \"\");\n\n  const [countryOptions, setCountryOptions] = useState<DropdownOption[]>([]);\n\n  useEffect(() => {\n    (async () => {\n      setCountryOptions((await getCountryNames()).map(getOptionFromValue) as DropdownOption[]);\n    })();\n  }, []);\n\n  const handleSubmit = async (e: FormEvent<HTMLFormElement>) => {\n    e.preventDefault();\n\n    try {\n      const { company: _company } = (await updateCompanyInfo(company.id, {\n        researcher_count: researcherCount ?? undefined,\n        rd_centers_count: rdCentersCount ?? undefined,\n        rd_spend_amount: rdSpendAmount ?? undefined,\n        employee_count: employeeCount ?? undefined,\n        company_type: companyType ?? undefined,\n        location: location ?? undefined,\n        description,\n      })) as any;\n\n      setCompany(_company);\n\n      toast.success(\"Successfully updated company details\");\n\n      onClose();\n    } catch (err) {\n      toast.error(\"Failed to update company details\");\n      console.error(err);\n    }\n  };\n\n  const handleCancel = () => {\n    setLocation(company?.location);\n    setEmployeeCount(company?.employee_count);\n    setResearcherCount(company?.researcher_count);\n    setRdSpendAmount(company?.rd_spend_amount);\n    setRdCentersCount(company?.rd_centers_count);\n    setCompanyType(company?.company_type);\n    setDescription(company?.description ?? \"\");\n\n    onClose();\n  };\n\n  return (\n    <BlankModal\n      isOpen={isOpen}\n      onClose={onClose}\n      headerText={`Company ${mode === \"description\" ? \"Overview\" : \"Details\"}`}\n      width=\"500px\"\n    >\n      <Form onSubmit={handleSubmit}>\n        {(mode === \"all\" || mode === \"stats\") && (\n          <>\n            <Label>Country</Label>\n            <SingleSelectDropdown\n              isClearable\n              maxMenuHeight=\"200px\"\n              data-testid=\"company-description-modal-country\"\n              value={getOptionFromValue(location)}\n              options={countryOptions}\n              onChange={(newOption) => {\n                if (newOption) setLocation(newOption.value);\n                else if (newOption === null) setLocation(\"\");\n              }}\n            />\n            <Label>Number of Employees</Label>\n            <SingleSelectDropdown\n              isClearable\n              maxMenuHeight=\"200px\"\n              data-testid=\"company-description-modal-employees\"\n              value={getOptionFromValue(employeeCount)}\n              options={\n                Object.values(CompanySize).map(getOptionFromValue as any) as DropdownOption[]\n              }\n              onChange={(newOption) => {\n                if (newOption) setEmployeeCount(newOption.value);\n                else if (newOption === null) setEmployeeCount(\"\");\n              }}\n            />\n            <Label>Number of Researchers</Label>\n            <SingleSelectDropdown\n              isClearable\n              maxMenuHeight=\"200px\"\n              data-testid=\"company-description-modal-researchers\"\n              value={getOptionFromValue(researcherCount)}\n              options={\n                Object.values(CompanySize).map(getOptionFromValue as any) as DropdownOption[]\n              }\n              onChange={(newOption) => {\n                if (newOption) setResearcherCount(newOption.value);\n                else if (newOption === null) setResearcherCount(\"\");\n              }}\n            />\n            <Label>Annual R&D Spend</Label>\n            <SingleSelectDropdown\n              isClearable\n              maxMenuHeight=\"200px\"\n              data-testid=\"company-description-modal-spend\"\n              value={getOptionFromValue(rdSpendAmount)}\n              options={\n                Object.values(CompanySpend).map(getOptionFromValue as any) as DropdownOption[]\n              }\n              onChange={(newOption) => {\n                if (newOption) setRdSpendAmount(newOption.value);\n                else if (newOption === null) setRdSpendAmount(\"\");\n              }}\n            />\n            <Label>Number of R&D Centers</Label>\n            <TextInput\n              min={1}\n              type=\"number\"\n              value={String(rdCentersCount)}\n              data-testid=\"company-description-modal-rd-centers\"\n              onChange={(e) => setRdCentersCount(Number(e.target.value))}\n            />\n            <Label>Company Type</Label>\n            <SingleSelectDropdown\n              isClearable\n              maxMenuHeight=\"150px\"\n              data-testid=\"company-description-modal-company-type\"\n              value={getOptionFromValue(companyType)}\n              options={\n                Object.values(CompanyType).map(getOptionFromValue as any) as DropdownOption[]\n              }\n              onChange={(newOption) => {\n                if (newOption) setCompanyType(newOption.value);\n                else if (newOption === null) setCompanyType(\"\");\n              }}\n            />\n          </>\n        )}\n        {(mode === \"all\" || mode === \"description\") && (\n          <>\n            <Label>Company Description</Label>\n            <TextInput\n              textarea\n              value={description}\n              characterLimit={750}\n              startingHeight={mode === \"all\" ? \"50px\" : \"180px\"}\n              onChange={(e) => setDescription(e.target.value)}\n              data-testid=\"company-description-modal-description-input\"\n            />\n          </>\n        )}\n        <ButtonContainer>\n          <Button type=\"button\" variant=\"ghost\" onClick={handleCancel}>\n            Cancel\n          </Button>\n          <Button type=\"submit\" data-testid=\"company-description-modal-submit\">\n            Submit\n          </Button>\n        </ButtonContainer>\n      </Form>\n    </BlankModal>\n  );\n}\n\nexport default CompanyDescriptionModal;\n\nconst ButtonContainer = styled.div`\n  display: flex;\n  justify-content: flex-end;\n  gap: 16px;\n`;\n\nconst Form = styled.form`\n  display: flex;\n  flex-direction: column;\n  gap: 16px;\n  height: 100%;\n  margin: 16px 24px;\n`;\n\nconst Label = styled.label`\n  display: flex;\n  gap: 4px;\n\n  width: 100%;\n  margin: 0px 0 0;\n\n  ${FONTS.SEMIBOLD_2};\n`;\n","import api from \"./request\";\n\n// Gets list of names from countries table\n// Currently, only companies use this data -- use constants/countryOptions.ts for all other models\nexport const getCountryNames = async (): Promise<string[]> => {\n  const response = await api.get(\"/countries\");\n  return response.data;\n};\n","/* eslint-disable no-mixed-operators */\nexport const createImage = (blob) =>\n  new Promise<HTMLImageElement>((resolve, reject) => {\n    const image = new Image();\n    image.addEventListener(\"load\", () => resolve(image));\n    image.addEventListener(\"error\", (error) => reject(error));\n    image.setAttribute(\"crossOrigin\", \"anonymous\");\n    image.src = URL.createObjectURL(blob);\n  });\n\nexport default async function getZoomedImg(\n  imageSrc: Blob,\n  zoomLevel: number\n): Promise<Blob | null> {\n  const image = await createImage(imageSrc);\n\n  const canvas = document.createElement(\"canvas\");\n  const ctx = canvas.getContext(\"2d\");\n\n  if (!ctx) {\n    return null;\n  }\n\n  /*  Company image is displayed as 200x335 pixels\n   *  but we want to scale the canvas up so the image\n   *  is high resolution\n   */\n  canvas.width = 335 * 4;\n  canvas.height = 200 * 4;\n\n  ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n  const scale = Math.min(\n    canvas.width / (image.width / zoomLevel),\n    canvas.height / (image.height / zoomLevel)\n  );\n\n  const w = image.width * scale;\n  const h = image.height * scale;\n\n  const left = (canvas.width - w) / 2;\n  const top = (canvas.height - h) / 2;\n\n  ctx.drawImage(image, left, top, w, h);\n\n  return new Promise((resolve) => {\n    canvas.toBlob((file) => {\n      resolve(file);\n    }, \"image/png\");\n  });\n}\n","import { useState } from \"react\";\nimport styled from \"styled-components\";\n\nimport { BlankModal, Button, Icon } from \"@components/library\";\nimport { COLORS } from \"@constants\";\nimport getZoomedImg from \"@utils/imageUtils\";\n\nconst CompanyLogoModal = ({ open, blob, closeModal, onUpload }) => {\n  const [zoom, setZoom] = useState(1);\n\n  const onChangeZoom = (event) => {\n    if (event.target?.value) {\n      setZoom(Number(event.target.value));\n    }\n  };\n\n  const showZoomedImage = async () => {\n    const zoomBlob = await getZoomedImg(blob, zoom);\n\n    if (zoomBlob) {\n      onUpload(zoomBlob);\n    }\n  };\n\n  const src = URL.createObjectURL(blob);\n\n  return (\n    <BlankModal\n      data-testid=\"company-logo-modal-main\"\n      isOpen={open}\n      onClose={closeModal}\n      closeOnDimmerClick={false}\n      headerText=\"Adjust logo size\"\n      width=\"540px\"\n    >\n      <ImageContainer>\n        <CropContainer>\n          <ImagePreview src={src} style={{ transform: `scale(${zoom})` }} alt=\"logo\" />\n          {/* TODO: Update preview section to use blue/grey boxes from original design */}\n          {/* <BlueBox /> */}\n          {/* <GreyBox /> */}\n        </CropContainer>\n      </ImageContainer>\n      <ZoomImageContainer>\n        <Icon name=\"Minimize\" />\n        <SliderContainer>\n          <SliderInput\n            type=\"range\"\n            min=\"0.1\"\n            max=\"2\"\n            step=\"any\"\n            value={zoom}\n            onChange={onChangeZoom}\n          />\n        </SliderContainer>\n        <Icon name=\"Add\" />\n      </ZoomImageContainer>\n      <ButtonContainer>\n        <Button type=\"button\" variant=\"ghost\" onClick={closeModal}>\n          Cancel\n        </Button>\n        <Button\n          data-testid=\"company-logo-modal-upload\"\n          type=\"button\"\n          onClick={() => showZoomedImage()}\n        >\n          Upload\n        </Button>\n      </ButtonContainer>\n    </BlankModal>\n  );\n};\n\nexport default CompanyLogoModal;\n\nconst ButtonContainer = styled.div`\n  display: flex;\n  flex-direction: row;\n  justify-content: flex-end;\n  align-items: center;\n  padding: 24px 20px;\n  gap: 20px;\n`;\n\nconst ImageContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  align-items: center;\n  padding: 24px 20px;\n  gap: 10px;\n  height: 340px;\n`;\n\nconst ZoomImageContainer = styled.div`\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  width: 100%;\n  padding: 0 24px;\n`;\n\nconst CropContainer = styled.div`\n  width: 491px;\n  height: 293px;\n  border-radius: 8px;\n  border: 2px solid ${COLORS.HALO_BLUE};\n\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  position: relative;\n  overflow: hidden;\n`;\n\nconst ImagePreview = styled.img`\n  max-width: 491px;\n  max-height: 293px;\n  margin: 0 auto;\n`;\n\nconst BlueBox = styled.div`\n  border: 2px solid ${COLORS.HALO_BLUE};\n\n  position: absolute;\n\n  width: 372px;\n  height: 218px;\n\n  z-index: 1;\n`;\n\nconst GreyBox = styled.div`\n  border-right: 64px solid ${COLORS.BLACK};\n  border-left: 64px solid ${COLORS.BLACK};\n  border-top: 37px solid ${COLORS.BLACK};\n  border-bottom: 37px solid ${COLORS.BLACK};\n  opacity: 0.8;\n\n  position: absolute;\n\n  width: 100%;\n  height: 100%;\n\n  z-index: 1;\n`;\n\nconst SliderContainer = styled.div`\n  width: 100%;\n  margin-right: 12px;\n  margin-left: 12px;\n`;\n\nconst SliderInput = styled.input`\n  appearance: none;\n  outline: none;\n\n  background: ${COLORS.NEUTRAL_300};\n  border-radius: 2px;\n  height: 3px;\n  cursor: pointer;\n\n  &::-webkit-slider-thumb {\n    appearance: none;\n    width: 24px;\n    height: 24px;\n    border-radius: 50%;\n    background: ${COLORS.HALO_BLUE};\n  }\n\n  &::-moz-range-thumb {\n    width: 24px;\n    height: 24px;\n    border-radius: 50%;\n    background: ${COLORS.HALO_BLUE};\n  }\n`;\n","import CompanyNetworkCta from \"@components/CompanyNetworkCta\";\nimport toast from \"@components/Toast\";\nimport { Icon, IconButton } from \"@components/library\";\nimport { COLORS, FEATURE_FLAGS, FONTS, STYLES, WINDOW_DIMENSIONS } from \"@constants\";\nimport { RootState } from \"@redux/store\";\nimport { uploadCompanyImage } from \"@requests/companies\";\n// @ts-ignore\nimport { CompanyVerificationStatus } from \"@tsTypes/companies.js.erb\";\nimport { CompanyForCompanyPage } from \"@tsTypes/index\";\nimport { UserRole } from \"@tsTypes/users\";\nimport { ChangeEvent, useRef, useState } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport styled from \"styled-components\";\nimport CompanyLogoModal from \"./CompanyLogoModal\";\n\nconst { TABLET_LANDSCAPE_MEDIA_QUERY, TABLET_MEDIA_QUERY } = WINDOW_DIMENSIONS;\n\ninterface Props {\n  company: CompanyForCompanyPage;\n  showEditView: boolean;\n}\n\nfunction CompanyLogo({ company, showEditView }: Props) {\n  const { id, company_name, identifier, video, hero_image_url, verification_status } = company;\n\n  const fileInputRef = useRef<HTMLInputElement>(null);\n  const currentUser = useSelector((state: RootState) => state.profiles.currentUser);\n\n  const [logo, setLogo] = useState(company.logo);\n  const [logoBlob, setLogoBlob] = useState<Blob | null>(null);\n  const [logoFailedToLoad, setLogoFailedToLoad] = useState(false);\n  const [companyLogoModalOpen, setCompanyLogoModalOpen] = useState(false);\n\n  const handleFileSelect = (event: ChangeEvent<HTMLInputElement>) => {\n    if (event.target?.files?.length) {\n      setLogoBlob(event.target.files[0]);\n      setCompanyLogoModalOpen(true);\n    } else {\n      setLogoBlob(null);\n      setCompanyLogoModalOpen(false);\n      toast.error(\"Failed to open file\");\n    }\n\n    // Clear the value so that the same file can be selected again\n    // Otherwise, the onChange event won't fire if the same file is selected\n    if (fileInputRef.current) fileInputRef.current.value = \"\";\n  };\n\n  const handleLogoUpload = async (blob: Blob) => {\n    try {\n      if (!blob) throw new Error(\"No logo blob\");\n\n      const logoUrl = await uploadCompanyImage(id, identifier as any, blob);\n      setLogo({ url: logoUrl });\n\n      toast.success(\"Logo uploaded successfully\");\n    } catch (error) {\n      console.error(error);\n      toast.error(\"Failed to upload logo\");\n    } finally {\n      setLogoBlob(null);\n      setCompanyLogoModalOpen(false);\n    }\n  };\n\n  const noVideoContent = !video.url && !hero_image_url;\n\n  const isUnverified =\n    FEATURE_FLAGS.UNCLAIMED_COMPANY_PAGE &&\n    verification_status !== CompanyVerificationStatus.VERIFIED;\n\n  return (\n    <>\n      {companyLogoModalOpen && Boolean(logoBlob) && (\n        <CompanyLogoModal\n          open={companyLogoModalOpen}\n          blob={logoBlob}\n          closeModal={() => {\n            setLogoBlob(null);\n            setCompanyLogoModalOpen(false);\n          }}\n          onUpload={handleLogoUpload}\n        />\n      )}\n      <Container noVideoContent={noVideoContent} isUnverified={isUnverified}>\n        {showEditView && (\n          <EditContainer>\n            <input\n              type=\"file\"\n              accept=\"image/jpeg, image/png\"\n              ref={fileInputRef}\n              style={{ display: \"none\" }}\n              onChange={handleFileSelect}\n            />\n            <IconButton\n              variant=\"secondary\"\n              iconName=\"Edit\"\n              tooltipWidth=\"75px\"\n              tooltipText=\"Edit logo\"\n              onClick={() => fileInputRef.current?.click()}\n            />\n          </EditContainer>\n        )}\n        <Content isUnverified={isUnverified}>\n          {logo.url && !logoFailedToLoad ? (\n            <Logo\n              alt={company_name}\n              onError={() => setLogoFailedToLoad(true)}\n              src={`${logo.url}?${new Date().getTime()}`}\n            />\n          ) : (\n            <CompanyName isUnverified={isUnverified}>\n              {isUnverified && (\n                <NoLogoIconContainer>\n                  <Icon name=\"Organization\" size=\"md\" color={COLORS.NEUTRAL_400} />\n                </NoLogoIconContainer>\n              )}\n              {company_name}\n            </CompanyName>\n          )}\n          {currentUser.role !== UserRole.SPONSOR && (\n            <CompanyNetworkCta company={company} buttonProps={{ iconName: \"Followers\" }} />\n          )}\n        </Content>\n      </Container>\n    </>\n  );\n}\n\nconst Container = styled.div`\n  display: flex;\n  flex-direction: column;\n  ${({ isUnverified }) => !isUnverified && \"align-items: center\"};\n  justify-content: center;\n  flex-grow: 1;\n  position: relative;\n  padding: 64px;\n  ${({ noVideoContent, isUnverified }) =>\n    noVideoContent &&\n    `\n      height: 311px;\n      width: 100%;\n      ${!isUnverified && \"max-width: 346px;\"}\n    `}\n\n  ${TABLET_LANDSCAPE_MEDIA_QUERY} {\n    max-width: unset;\n  }\n\n  ${TABLET_MEDIA_QUERY} {\n    padding: 32px;\n  }\n`;\n\nconst Content = styled.div`\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: 24px;\n  max-width: ${({ isUnverified }) => (isUnverified ? \"100%\" : \"208px\")};\n`;\n\nconst Logo = styled.img`\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  text-align: center;\n  width: 100%;\n\n  ${TABLET_LANDSCAPE_MEDIA_QUERY} {\n    margin-bottom: initial;\n    max-width: 400px;\n  }\n`;\n\nconst NoLogoIconContainer = styled.div`\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  min-width: 38px;\n  height: 38px;\n  background-color: ${COLORS.NEUTRAL_250};\n  border-radius: 100%;\n`;\n\nconst CompanyName = styled.h1`\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  padding: 24px 0px;\n  text-align: center;\n  ${FONTS.HEADING_1_SEMIBOLD}\n  ${STYLES.ONE_LINE_ALT}\n`;\n\nexport const EditContainer = styled.div`\n  position: absolute;\n  top: 20px;\n  left: 20px;\n\n  z-index: 1;\n\n  border-radius: 4px;\n\n  background-color: ${COLORS.BLUE_LIGHT_250};\n\n  ${TABLET_LANDSCAPE_MEDIA_QUERY} {\n    display: none;\n  }\n`;\n\nexport default CompanyLogo;\n","import { COLORS, JS_FONTS } from \"@constants\";\nimport { StyleSheet } from \"aphrodite\";\n\nconst styles = StyleSheet.create({\n  CompanyModal_modal: {\n    overflow: \"visible\",\n    color: \"black\",\n    ...JS_FONTS.REGULAR_2,\n  },\n  CompanyModal_header: {\n    ...JS_FONTS.HEADING_4_SEMIBOLD,\n    fontFamily: \"Inter, sans-serif\",\n    color: COLORS.BLACK,\n    border: \"none\",\n    paddingBottom: 0,\n  },\n  CompanyModal_formLabel: {\n    margin: \"0px 0 6px\",\n  },\n  CompanyModal_fieldLabel: {\n    ...JS_FONTS.REGULAR_3,\n    margin: \"3px 0 -3px\",\n  },\n  CompanyModal_firstformLabel: {\n    margin: \"1rem 0 5px\",\n  },\n  CompanyModal_textarea: {\n    resize: \"none\",\n    width: \"100%\",\n    height: \"150px\",\n    border: `1px solid ${COLORS.NEUTRAL_400}`,\n    padding: \"1rem\",\n  },\n  CompanyModal_buttonContainer: {\n    display: \"flex\",\n    justifyContent: \"flex-end\",\n    marginTop: \"20px\",\n  },\n  CompanyPartnerModal_radioGroup: {\n    display: \"flex\",\n    alignItems: \"center\",\n    padding: \"20px 0 0 0\",\n    marginBottom: \"5px\",\n  },\n  CompanyPartnerModal_radio: {\n    margin: \"0 0 0 6px\",\n  },\n  CompanyPartnerModal_radioLabel: {\n    marginLeft: \"20px\",\n  },\n  CompanyModal_dropdown: {\n    width: \"100%\",\n    display: \"flex\",\n    height: \"48px\",\n    alignItems: \"center\",\n    borderStyle: \"solid\",\n    borderWidth: \"1px\",\n    borderColor: COLORS.NEUTRAL_400,\n    margin: \"auto\",\n    marginBottom: \"4px\",\n    ...JS_FONTS.REGULAR_2,\n    color: \"black\",\n    padding: \".67857143em 2.1em .67857143em 1em\",\n  },\n  CompanyPartnerModal_dropdown: {\n    width: \"100%\",\n    display: \"flex\",\n    height: \"35.8px\",\n    alignItems: \"center\",\n    borderStyle: \"solid\",\n    borderWidth: \"1px\",\n    borderColor: COLORS.NEUTRAL_400,\n    margin: \"auto\",\n    ...JS_FONTS.REGULAR_2,\n    color: \"black\",\n    padding: \"2px 8px\",\n    marginBottom: \"15px\",\n  },\n  CompanyModal_smallText: {\n    display: \"block\",\n    margin: \"10px 0 18px\",\n  },\n  CompanyModal_strongText: {\n    ...JS_FONTS.SEMIBOLD_2,\n  },\n  CompanyModal_errorContainer: {\n    display: \"flex\",\n    flexDirection: \"column\",\n    alignItems: \"center\",\n    color: COLORS.RED,\n  },\n  CompanyModal_captionLabel: {\n    ...JS_FONTS.REGULAR_1,\n    transform: \"translateY(-0.5em)\",\n  },\n  CompanyModal_errorLabel: {\n    color: \"#FF6136\",\n  },\n  CompanyLogoModal_imageContainer: {\n    width: \"400px\",\n    height: \"400px\",\n    overflow: \"hidden\",\n    border: `2px solid ${COLORS.NEUTRAL_200}`,\n    borderRadius: \"4px\",\n    margin: \"24px auto\",\n    display: \"grid\",\n    placeItems: \"center\",\n  },\n  CompanyLogoModal_imagePreview: {\n    width: \"100%\",\n    height: \"auto\",\n    margin: \"0 auto\",\n    zIndex: 1,\n  },\n  CompanyLogoModal_imageZoomContainer: {\n    display: \"flex\",\n    alignItems: \"center\",\n    justifyContent: \"space-between\",\n    width: \"100%\",\n    padding: \"0 24px\",\n  },\n  CompanyLogoModal_imageZoomButton: {\n    height: \"14px\",\n    width: \"14px\",\n  },\n  CompanyLogoModal_imageZoomInput: {\n    margin: \"0 5%\",\n    \":focus\": {\n      outline: \"none\",\n      boxShadow: \"none\",\n    },\n  },\n  CompanyVideoModal_videoPreviewContainer: {\n    position: \"relative\",\n    width: \"900px\",\n    height: \"max-content\",\n    margin: \"24px auto 35px\",\n    overflow: \"hidden\",\n  },\n  CompanyVideoModal_videoPreview: {\n    width: \"900px\",\n    maxHeight: \"506.25px\", // 16:9\n    margin: \"0 auto\",\n    background: COLORS.NEUTRAL_200,\n  },\n  CompanyVideoModal_uploadingOverlay: {\n    width: \"100%\",\n    height: \"100%\",\n    position: \"absolute\",\n    display: \"grid\",\n    placeItems: \"center\",\n    zIndex: 100000,\n    backgroundColor: \"rgba(109, 109, 109, 0.9)\",\n    transform: \"scale(1.5)\",\n    ...JS_FONTS.REGULAR_2,\n  },\n});\n\nexport const CompanyPartnerModal_dropdown = {\n  width: \"100%\",\n  margin: \"auto\",\n  ...JS_FONTS.REGULAR_2,\n  color: \"black\",\n  padding: \".5em 0\",\n  marginBottom: \"15px\",\n};\n\nexport default styles;\n","import { Button } from \"@components/library\";\nimport { css } from \"aphrodite\";\nimport { useState } from \"react\";\nimport { Loader, Modal } from \"semantic-ui-react\";\nimport styled from \"styled-components\";\nimport styles from \"./CompanyModals.styles\";\n\nconst MAX_VIDEO_SIZE = 50000000; // 50mb\n\nconst CompanyVideoModal = ({ open, blob, closeModal, onUpload }) => {\n  const [uploading, setUploading] = useState(false);\n  const isOverLimit = blob.size > MAX_VIDEO_SIZE;\n  const src = URL.createObjectURL(blob);\n\n  const handleUpload = async () => {\n    setUploading(true);\n    await onUpload();\n    setUploading(false);\n    closeModal();\n  };\n\n  return (\n    <Modal\n      data-testid=\"company-video-modal-main\"\n      open={open}\n      onClose={closeModal}\n      size=\"large\"\n      closeOnDimmerClick={false}\n    >\n      <Modal.Header className={css(styles.CompanyModal_header)}>Preview Company Video</Modal.Header>\n      <Modal.Content>\n        <div className={css(styles.CompanyModal_captionLabel)}>\n          {isOverLimit ? (\n            <span className={css(styles.CompanyModal_errorLabel)}>\n              This file is too large. Please upload a file less than 50mb.\n            </span>\n          ) : (\n            \"File format must be mp4 and less than 50mb\"\n          )}\n        </div>\n        <div className={css(styles.CompanyVideoModal_videoPreviewContainer)}>\n          {uploading && (\n            <div className={css(styles.CompanyVideoModal_uploadingOverlay)}>\n              <Loader active inverted size=\"big\">\n                Uploading Video\n              </Loader>\n            </div>\n          )}\n          <video\n            className={css(styles.CompanyVideoModal_videoPreview)}\n            autoPlay={!isOverLimit}\n            loop\n            muted\n            controls={!uploading}\n          >\n            <source src={src} type=\"video/mp4\" />\n          </video>\n        </div>\n        <div className={css(styles.CompanyModal_buttonContainer)}>\n          <ButtonContainer>\n            <Button onClick={closeModal} type=\"button\" variant=\"ghost\">\n              Cancel\n            </Button>\n          </ButtonContainer>\n          <Button\n            data-testid=\"company-video-modal-upload\"\n            type=\"button\"\n            onClick={handleUpload}\n            disabled={isOverLimit || uploading}\n          >\n            Upload\n          </Button>\n        </div>\n      </Modal.Content>\n    </Modal>\n  );\n};\n\nexport default CompanyVideoModal;\n\nconst ButtonContainer = styled.div`\n  margin-right: 16px;\n`;\n","import toast from \"@components/Toast\";\nimport { IconButton } from \"@components/library\";\nimport { COLORS, WINDOW_DIMENSIONS } from \"@constants\";\nimport { uploadCompanyVideo } from \"@requests/companies\";\nimport { CompanyForCompanyPage } from \"@tsTypes/index\";\nimport { ChangeEvent, useRef, useState } from \"react\";\nimport styled from \"styled-components\";\nimport CompanyVideoModal from \"../CompanyPage/CompanyVideoModal\";\nimport { EditContainer } from \"./CompanyLogo\";\n\nconst { TABLET_LANDSCAPE_MEDIA_QUERY, MOBILE_MEDIA_QUERY } = WINDOW_DIMENSIONS;\n\ninterface Props {\n  company: CompanyForCompanyPage;\n  showEditView: boolean;\n}\n\nfunction CompanyVideo({ company, showEditView }: Props) {\n  const { id, company_name, hero_image_url } = company;\n\n  const videoRef = useRef<HTMLVideoElement>(null);\n  const fileInputRef = useRef<HTMLInputElement>(null);\n\n  const [video, setVideo] = useState(company.video);\n  const [videoMuted, setVideoMuted] = useState(true);\n  const [videoBlob, setVideoBlob] = useState<Blob | null>(null);\n  const [videoFailedToLoad, setVideoFailedToLoad] = useState(false);\n  const [companyVideoModalOpen, setCompanyVideoModalOpen] = useState(false);\n\n  const handleFileSelect = (event: ChangeEvent<HTMLInputElement>) => {\n    if (event.target?.files?.length) {\n      setVideoBlob(event.target.files[0]);\n      setCompanyVideoModalOpen(true);\n    } else {\n      setVideoBlob(null);\n      setCompanyVideoModalOpen(false);\n      toast.error(\"Failed to open file\");\n    }\n\n    // Clear the value so that the same file can be selected again\n    // Otherwise, the onChange event won't fire if the same file is selected\n    if (fileInputRef.current) fileInputRef.current.value = \"\";\n  };\n\n  const handleVideoUpload = async () => {\n    try {\n      if (!videoBlob) throw new Error(\"No video blob\");\n\n      const videoUrl = await uploadCompanyVideo(id, videoBlob);\n      setVideo({ url: videoUrl });\n\n      toast.success(\"Video uploaded successfully\");\n    } catch (error) {\n      console.error(error);\n\n      toast.error(\"Failed to upload video\");\n    } finally {\n      setVideoBlob(null);\n      setCompanyVideoModalOpen(false);\n    }\n  };\n\n  const noVideoContent = !video.url && !hero_image_url;\n\n  return (\n    <>\n      {companyVideoModalOpen && Boolean(videoBlob) && (\n        <CompanyVideoModal\n          open={companyVideoModalOpen}\n          blob={videoBlob}\n          closeModal={() => {\n            setVideoBlob(null);\n            setCompanyVideoModalOpen(false);\n          }}\n          onUpload={handleVideoUpload}\n        />\n      )}\n      <Container noVideoContent={noVideoContent}>\n        {showEditView && (\n          <EditContainer>\n            <input\n              type=\"file\"\n              accept=\"video/mp4\"\n              ref={fileInputRef}\n              style={{ display: \"none\" }}\n              onChange={handleFileSelect}\n            />\n            <IconButton\n              variant=\"secondary\"\n              iconName=\"Edit\"\n              tooltipWidth=\"90px\"\n              tooltipText=\"Edit video\"\n              onClick={() => fileInputRef.current?.click()}\n            />\n          </EditContainer>\n        )}\n        {(() => {\n          if (video.url && !videoFailedToLoad) {\n            return (\n              <>\n                <MuteToggle>\n                  <IconButton\n                    variant=\"secondary\"\n                    size=\"md\"\n                    tooltipWidth=\"120px\"\n                    tooltipPosition=\"bottom\"\n                    iconName={videoMuted ? \"Audio Unmute\" : \"Audio Mute\"}\n                    tooltipText={videoMuted ? \"Unmute audio\" : \"Mute audio\"}\n                    onClick={() => {\n                      if (videoRef.current) {\n                        videoRef.current.muted = !videoMuted;\n                        setVideoMuted(!videoMuted);\n                      }\n                    }}\n                  />\n                </MuteToggle>\n                <Video\n                  playsInline\n                  autoPlay\n                  muted\n                  loop\n                  ref={videoRef}\n                  src={video.url}\n                  onError={() => setVideoFailedToLoad(true)}\n                  onCanPlay={({ currentTarget }) => currentTarget.play()}\n                />\n              </>\n            );\n          } else if (hero_image_url) {\n            return (\n              <CompanyVideoImageFallback src={hero_image_url} alt={`${company_name} hero image`} />\n            );\n          }\n          return null;\n        })()}\n      </Container>\n    </>\n  );\n}\n\nconst Container = styled.div`\n  display: flex;\n\n  position: relative;\n\n  max-width: 736px;\n\n  background: ${COLORS.BLUE_LIGHT_300};\n\n  ${({ noVideoContent }) =>\n    noVideoContent &&\n    `\n      height: 100%;\n      width: 100%;\n      max-width: unset;\n    `}\n\n  border-radius: 0px 8px 8px 0px;\n\n  ${TABLET_LANDSCAPE_MEDIA_QUERY} {\n    ${({ noVideoContent }) => noVideoContent && `display: none;`}\n    border-radius: 0px 0px 8px 8px;\n  }\n`;\n\nconst Video = styled.video`\n  object-fit: cover;\n\n  width: 100%;\n  height: 100%;\n\n  aspect-ratio: 16 / 9;\n\n  border-radius: 0px 8px 8px 0px;\n  ${TABLET_LANDSCAPE_MEDIA_QUERY} {\n    border-radius: 0px 0px 8px 8px;\n  }\n`;\n\nconst CompanyVideoImageFallback = styled.img`\n  object-fit: cover;\n\n  width: 100%;\n  height: 100%;\n\n  aspect-ratio: 16 / 9;\n\n  border-radius: 0px 8px 8px 0px;\n  ${TABLET_LANDSCAPE_MEDIA_QUERY} {\n    border-radius: 0px 0px 8px 8px;\n  }\n`;\n\nconst MuteToggle = styled.div`\n  position: absolute;\n  bottom: 20px;\n  right: 20px;\n\n  z-index: 1;\n\n  ${MOBILE_MEDIA_QUERY} {\n    display: none;\n  }\n`;\n\nexport default CompanyVideo;\n","import { STYLES, WINDOW_DIMENSIONS } from \"@constants\";\nimport styled, { css } from \"styled-components\";\n\nexport const COMPANY_PAGE_CONTENT_WIDTH = 1216;\n\nexport const layoutStyles = css`\n  width: ${COMPANY_PAGE_CONTENT_WIDTH}px;\n  max-width: calc(100% - ${2 * WINDOW_DIMENSIONS.PAGE_SIDE_PADDING}px);\n\n  ${STYLES.HERO_MEDIA_QUERY} {\n    max-width: unset;\n    width: calc(100% - ${WINDOW_DIMENSIONS.PAGE_SIDE_PADDING}px);\n  }\n\n  ${WINDOW_DIMENSIONS.TABLET_MEDIA_QUERY} {\n    width: 100%;\n    padding: 0 ${WINDOW_DIMENSIONS.TABLET_SIDE_PADDING}px;\n  }\n`;\n\nexport const Container = styled.div`\n  display: flex;\n  justify-content: center;\n\n  width: 100%;\n\n  ${({ background }) => background && `background: ${background};`}\n`;\n\nexport const Content = styled.div`\n  display: flex;\n  flex-direction: column;\n  ${layoutStyles};\n\n  ${({ gap }) => gap && `gap: ${gap};`}\n\n  padding: ${({ padding }) => padding ?? \"40px 0\"};\n\n  ${WINDOW_DIMENSIONS.TABLET_MEDIA_QUERY} {\n    padding-top: 36px;\n  }\n`;\n","import { Icon, IconButton, TextLink } from \"@components/library\";\nimport { COLORS, FONTS, STYLES, WINDOW_DIMENSIONS } from \"@constants\";\nimport { marketplacePath } from \"@routes/utils\";\n// @ts-ignore\nimport { CompanyVerificationStatus } from \"@tsTypes/companies.js.erb\";\nimport { CompanyForCompanyPage } from \"@tsTypes/index\";\nimport { Dispatch, SetStateAction, useState } from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport styled from \"styled-components\";\nimport CompanyDescriptionModal from \"./CompanyDescriptionModal\";\nimport CompanyLogo from \"./CompanyLogo\";\nimport CompanyVideo from \"./CompanyVideo\";\nimport { Container, Content } from \"./styledComponents\";\n\nconst { DESKTOP_MEDIA_QUERY, TABLET_LANDSCAPE_MEDIA_QUERY, TABLET_MEDIA_QUERY } = WINDOW_DIMENSIONS;\n\ninterface Props {\n  company: CompanyForCompanyPage;\n  setCompany: Dispatch<SetStateAction<CompanyForCompanyPage>>;\n  showEditView: boolean;\n}\n\nfunction CompanyPageJumbotron({ company, setCompany, showEditView }: Props) {\n  const {\n    location,\n    employee_count,\n    researcher_count,\n    rd_spend_amount,\n    rd_centers_count,\n    verification_status,\n  } = company;\n  const [companyDescriptionModalOpen, setCompanyDescriptionModalOpen] = useState(false);\n\n  const history = useHistory();\n  const { fromHref } = history.location;\n\n  const numItems = [\n    location,\n    rd_centers_count,\n    employee_count,\n    researcher_count,\n    rd_spend_amount,\n  ].filter((item) => item).length;\n\n  const isVerified = verification_status === CompanyVerificationStatus.VERIFIED;\n\n  return (\n    <>\n      <CompanyDescriptionModal\n        mode=\"stats\"\n        company={company}\n        setCompany={setCompany}\n        isOpen={companyDescriptionModalOpen}\n        onClose={() => setCompanyDescriptionModalOpen(false)}\n      />\n      <Container background={COLORS.BLUE_LIGHT_100}>\n        <Content gap=\"40px\">\n          {!showEditView && (\n            <TextLink to={fromHref ?? marketplacePath(\"partners\")} font={FONTS.MEDIUM_2}>\n              <Icon name=\"Arrow Left\" margin=\"0 4px 0 0\" data-testid=\"all-partners\" />\n              All partners\n            </TextLink>\n          )}\n          <Jumbotron>\n            <CompanyLogo company={company} showEditView={showEditView} />\n            {isVerified && <CompanyVideo company={company} showEditView={showEditView} />}\n          </Jumbotron>\n          <CompanyStats>\n            {showEditView && (\n              <IconButtonContainer>\n                <IconButton\n                  variant=\"secondary\"\n                  iconName=\"Edit\"\n                  onClick={() => {\n                    setCompanyDescriptionModalOpen(true);\n                  }}\n                />\n              </IconButtonContainer>\n            )}\n            <CompanyStatItems numItems={numItems}>\n              {location && (\n                <CompanyStatItem>\n                  <Icon name=\"Location\" color={COLORS.BLUE_LIGHT_600} />\n                  {location}\n                </CompanyStatItem>\n              )}\n              {employee_count && (\n                <CompanyStatItem>\n                  <Icon name=\"Employees\" color={COLORS.BLUE_LIGHT_600} />\n                  {employee_count} employees\n                </CompanyStatItem>\n              )}\n              {researcher_count && (\n                <CompanyStatItem>\n                  <Icon name=\"Employees\" color={COLORS.BLUE_LIGHT_600} />\n                  {researcher_count} researchers\n                </CompanyStatItem>\n              )}\n              {rd_centers_count && (\n                <CompanyStatItem>\n                  <Icon name=\"Organization\" color={COLORS.BLUE_LIGHT_600} />\n                  {rd_centers_count} R&D center{rd_centers_count > 1 ? \"s\" : \"\"}\n                </CompanyStatItem>\n              )}\n              {rd_spend_amount && (\n                <CompanyStatItem>\n                  <Icon name=\"Funding\" color={COLORS.BLUE_LIGHT_600} />\n                  {rd_spend_amount} in R&amp;D spend\n                </CompanyStatItem>\n              )}\n            </CompanyStatItems>\n          </CompanyStats>\n        </Content>\n      </Container>\n    </>\n  );\n}\n\nconst Jumbotron = styled.div`\n  display: flex;\n  background: ${COLORS.BLUE_LIGHT_300};\n  border-radius: 8px;\n\n  width: 100%;\n\n  ${TABLET_MEDIA_QUERY} {\n    flex-direction: column;\n  }\n`;\n\nconst CompanyStats = styled.div`\n  display: inline-flex;\n  width: 100%;\n  gap: 24px;\n\n  ${DESKTOP_MEDIA_QUERY} {\n    gap: 8px;\n  }\n`;\n\nconst CompanyStatItem = styled.div`\n  display: inline-flex;\n  align-items: center;\n  gap: 6px;\n\n  max-width: 100%;\n\n  ${STYLES.ONE_LINE_ALT}\n\n  color: ${COLORS.BLUE_900};\n\n  ${TABLET_MEDIA_QUERY} {\n    text-overflow: ellipsis;\n  }\n`;\n\nconst IconButtonContainer = styled.div`\n  ${TABLET_MEDIA_QUERY} {\n    display: none;\n  }\n`;\n\nconst CompanyStatItems = styled.div`\n  display: inline-flex;\n  align-items: center;\n\n  width: 100%;\n  max-width: 1600px;\n\n  ${FONTS.MEDIUM_1}\n\n  margin: 0 6px 0 0;\n\n  ${({ numItems }) =>\n    numItems > 4\n      ? `\n          justify-content: space-between;\n          ${FONTS.MEDIUM_2}\n      `\n      : `gap: 96px`};\n\n  ${DESKTOP_MEDIA_QUERY} {\n    gap: 32px;\n    & ${CompanyStatItem}:nth-of-type(1n+5) {\n      display: none;\n    }\n  }\n\n  ${TABLET_LANDSCAPE_MEDIA_QUERY} {\n    gap: 24px;\n    & ${CompanyStatItem}:nth-of-type(1n+4) {\n      display: none;\n    }\n  }\n\n  ${TABLET_MEDIA_QUERY} {\n    display: none;\n  }\n`;\n\nexport default CompanyPageJumbotron;\n","import { ReactNode } from \"react\";\nimport styled from \"styled-components\";\n\nimport { Button } from \"@components/library\";\nimport { COLORS, FONTS, WINDOW_DIMENSIONS } from \"@constants\";\n\nconst { MOBILE_MEDIA_QUERY, TABLET_LANDSCAPE_MEDIA_QUERY } = WINDOW_DIMENSIONS;\n\ninterface Props {\n  iconSrc: any;\n  title: string;\n  subtitle: ReactNode;\n  buttonText: string;\n  maxWidth?: string;\n  onClick: () => void;\n}\n\nfunction CompanyCTABanner({ iconSrc, title, subtitle, buttonText, maxWidth, onClick }: Props) {\n  return (\n    <Container maxWidth={maxWidth}>\n      <Left>\n        <img src={iconSrc} alt=\"paper\" />\n        <div>\n          <Title>{title}</Title>\n          <Subtitle>{subtitle}</Subtitle>\n        </div>\n      </Left>\n      <Button variant=\"secondary\" iconName=\"Add\" onClick={onClick} width=\"245px\">\n        {buttonText}\n      </Button>\n    </Container>\n  );\n}\n\nconst Container = styled.div`\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  gap: 24px;\n\n  width: 100%;\n  ${({ maxWidth }) => maxWidth && `max-width: ${maxWidth};`}\n\n  padding: 24px 40px;\n\n  border: solid 1px ${COLORS.NEUTRAL_200};\n  border-radius: 12px;\n\n  ${TABLET_LANDSCAPE_MEDIA_QUERY} {\n    flex-direction: column;\n    gap: 16px;\n  }\n\n  ${MOBILE_MEDIA_QUERY} {\n    display: none;\n  }\n`;\n\nconst Title = styled.div`\n  ${FONTS.HEADING_4_REGULAR}\n`;\n\nconst Subtitle = styled.div`\n  ${FONTS.REGULAR_1}\n`;\n\nconst Left = styled.div`\n  display: flex;\n  gap: 24px;\n  align-items: center;\n`;\n\nexport default CompanyCTABanner;\n","import { Button, InputTooltip } from \"@components/library\";\nimport { COLORS } from \"@constants\";\nimport { FormEvent, ReactNode } from \"react\";\nimport styled from \"styled-components\";\n\ninterface Props {\n  onSubmit: (e: FormEvent<HTMLFormElement>) => void;\n  onCancel: () => void;\n  children: ReactNode;\n  tooltipContent?: ReactNode;\n  disabled?: boolean;\n  withPlainStyles?: boolean;\n}\n\nfunction CompanyEditForm({\n  onSubmit,\n  onCancel,\n  children,\n  tooltipContent,\n  disabled,\n  withPlainStyles = false,\n}: Props) {\n  const input = (\n    <Form onSubmit={onSubmit} withPlainStyles={withPlainStyles}>\n      <Top>{children}</Top>\n      <Bottom>\n        <Button type=\"submit\" disabled={disabled}>\n          Save\n        </Button>\n        <Button variant=\"secondary\" onClick={onCancel}>\n          Cancel\n        </Button>\n      </Bottom>\n    </Form>\n  );\n\n  return tooltipContent ? (\n    <Container>\n      <InputTooltip content={tooltipContent} width=\"310px\" arrowOffsetTop=\"85px\">\n        {input}\n      </InputTooltip>\n    </Container>\n  ) : (\n    input\n  );\n}\n\nconst Container = styled.div`\n  width: 100%;\n  max-width: 844px; ;\n`;\nconst Form = styled.form`\n  display: flex;\n  flex-direction: column;\n  gap: 36px;\n  width: 100%;\n  max-width: 844px;\n  padding: 36px;\n  ${({ withPlainStyles }) =>\n    !withPlainStyles &&\n    `\n      border-radius: 12px;\n      border: 1px solid ${COLORS.NEUTRAL_200};\n      background: ${COLORS.NEUTRAL_50};\n  `}\n`;\n\nconst Top = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 36px;\n  width: 100%;\n`;\n\nconst Bottom = styled.div`\n  display: flex;\n  justify-content: flex-start;\n  flex-direction: row-reverse;\n  gap: 20px;\n`;\n\nexport default CompanyEditForm;\n","import styled from \"styled-components\";\n\nconst List = styled.ul`\n  margin: 0;\n  padding-left: 20px;\n`;\n\nconst TOOLTIP_CONTENT = {\n  introduction: (\n    <>\n      <b>Pro Tips</b>\n      <List>\n        <li>\n          If possible, focus on a succinct description of your organization&rsquo;s R&D mission\n        </li>\n        <li>You can also use your organization's overall mission or profile</li>\n      </List>\n    </>\n  ),\n  description: (\n    <>\n      <b>Pro Tips</b>\n      <List>\n        <li>Highlight your organization&rsquo;s approach to innovation or research</li>\n        <li>Describe your team's expertise and accomplishments</li>\n      </List>\n    </>\n  ),\n  research_interests: (\n    <>\n      <b>Pro Tips</b>\n      <List>\n        <li>Showcase your organization&rsquo;s capabilities or expertise in this area</li>\n        <li>\n          Include high level accomplishments that could help researchers understand this area of\n          interest better\n        </li>\n      </List>\n      <br />\n    </>\n  ),\n};\n\nexport default TOOLTIP_CONTENT;\n","import toast from \"@components/Toast\";\nimport {\n  Icon,\n  KeywordsDropdown,\n  MultiSelectDropdown,\n  Switch,\n  TextInput,\n  Tooltip,\n} from \"@components/library\";\nimport { DropdownOption } from \"@components/library/Dropdowns/DropdownOption\";\nimport { FONTS } from \"@constants\";\nimport { RootState } from \"@redux/store\";\nimport { createCompanyResearchInterest, updateCompanyResearchInterest } from \"@requests/companies\";\nimport {\n  CompanyForCompanyPage,\n  CompanyPageResearchInterest,\n  RfpRequestForCard,\n} from \"@tsTypes/index\";\nimport { getOptionFromValue } from \"@utils/dropdownUtils\";\nimport { sortRfps } from \"@utils/rfpUtils\";\nimport { Dispatch, FormEvent, SetStateAction, useEffect, useState } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { Link } from \"react-router-dom\";\nimport styled from \"styled-components\";\nimport CompanyEditForm from \"./CompanyEditForm\";\nimport TOOLTIP_CONTENT from \"./tooltipContent\";\n\ninterface Props {\n  interest?: CompanyPageResearchInterest;\n  onClose: (interestId: number) => void;\n  company: CompanyForCompanyPage;\n  setCompany: Dispatch<SetStateAction<CompanyForCompanyPage>>;\n  isInRfpForm?: boolean;\n}\n\ntype RfpDropdownOption = DropdownOption & { id: number };\n\nconst getRfpOptionFromValue = (request: RfpRequestForCard): RfpDropdownOption => ({\n  value: request.title ?? \"\",\n  label: request.title ?? \"\",\n  id: request.requestable.id,\n});\n\nconst SUMMARY_CHAR_LIMIT = 400;\n\nfunction ResearchInterestInput({\n  interest,\n  onClose,\n  company,\n  setCompany,\n  isInRfpForm = false,\n}: Props) {\n  const [title, setTitle] = useState(interest?.title ?? \"\");\n  const [summary, setSummary] = useState(interest?.summary ?? \"\");\n  const [keywordsOptions, setKeywordOptions] = useState<DropdownOption[]>(\n    (interest?.keywords.map(getOptionFromValue) as DropdownOption[]) ?? []\n  );\n  const [rfps, setRfps] = useState<RfpDropdownOption[]>(\n    interest?.rfp_requests.map(getRfpOptionFromValue) ?? []\n  );\n  const [isOpenCallActive, setIsOpenCallActive] = useState(\n    interest?.open_call_request?.enabled ?? true\n  );\n  const [isSubmitting, setIsSubmitting] = useState(false);\n\n  const subscription = useSelector((state: RootState) => state.company.subscription);\n\n  const rfpOptions = sortRfps(company.rfp_requests).map(getRfpOptionFromValue);\n\n  const handleSubmit = async (e: FormEvent<HTMLFormElement>) => {\n    e.preventDefault();\n\n    setIsSubmitting(true);\n\n    try {\n      let updatedInterest: CompanyPageResearchInterest;\n      const isNewInterest = !interest;\n\n      if (isNewInterest) {\n        const { company_research_interest, rfp_requests } = await createCompanyResearchInterest({\n          companyId: company.id,\n          title,\n          summary,\n          keywords: keywordsOptions.map((keyword) => keyword.value),\n          requestForProposalIds: rfps.map((rfp) => rfp.id),\n          isOpenCallActive,\n        });\n\n        setCompany({\n          ...company,\n          company_research_interests: [\n            ...company.company_research_interests,\n            company_research_interest,\n          ],\n          rfp_requests,\n        });\n\n        updatedInterest = company_research_interest;\n      } else {\n        const { company_research_interest, rfp_requests } = await updateCompanyResearchInterest({\n          id: interest.id,\n          title,\n          summary,\n          keywords: keywordsOptions.map((keyword) => keyword.value),\n          requestForProposalIds: rfps.map((rfp) => rfp.id),\n          isOpenCallActive,\n        });\n\n        const updatedInterestIndex = company.company_research_interests.findIndex(\n          (researchInterest) => researchInterest.id === company_research_interest.id\n        );\n        const interestsCopy = [...company.company_research_interests];\n        interestsCopy.splice(updatedInterestIndex, 1, company_research_interest);\n\n        setCompany({\n          ...company,\n          company_research_interests: interestsCopy,\n          rfp_requests,\n        });\n\n        updatedInterest = company_research_interest;\n      }\n\n      toast.success(\n        <span>\n          Successfully {isNewInterest ? \"added\" : \"updated\"} area of interest.\n          {subscription?.features.open_calls && !subscription.is_expired && (\n            <>\n              &nbsp;If you&rsquo;ve activated open calls\n              <br />\n              for this area of interest, you&rsquo;ll find proposal submissions in your&nbsp;\n              <br />\n              <Link to=\"/reviewer_dashboard\">Opportunity dashboard</Link> under &quot;{title}&quot;.\n            </>\n          )}\n        </span>\n      );\n\n      onClose(updatedInterest.id);\n    } catch (err) {\n      toast.error(\"Failed to update area of interest\");\n\n      console.error(err);\n    } finally {\n      setIsSubmitting(false);\n    }\n  };\n\n  // If an RFP is added to a different interest, it should be removed from the dropdown options\n  useEffect(() => {\n    if (interest) {\n      setRfps(interest.rfp_requests.map(getRfpOptionFromValue));\n    }\n  }, [interest]);\n\n  return (\n    <Container>\n      <CompanyEditForm\n        onSubmit={handleSubmit}\n        onCancel={() => onClose(interest?.id ?? -1)}\n        tooltipContent={!isInRfpForm && TOOLTIP_CONTENT.research_interests}\n        disabled={!title || !summary || summary.length > SUMMARY_CHAR_LIMIT || isSubmitting}\n        withPlainStyles={isInRfpForm}\n      >\n        <InputContainer>\n          <TextInput\n            value={title}\n            label=\"Title\"\n            onChange={(event) => setTitle(event.target.value)}\n            placeholder=\"What is your area of interest?\"\n          />\n        </InputContainer>\n        <InputContainer>\n          <TextInput\n            textarea\n            value={summary}\n            onChange={(event) => setSummary(event.target.value)}\n            characterLimit={SUMMARY_CHAR_LIMIT}\n            placeholder=\"Write a short description of your area of interest.\"\n            label=\"Description\"\n          />\n        </InputContainer>\n        <InputContainer>\n          <KeywordsDropdown\n            keywordType=\"area_of_expertise\"\n            targetType=\"company_research_interest\"\n            value={keywordsOptions.map((keyword) => keyword.value)}\n            onChange={(selection) =>\n              setKeywordOptions(selection.map(getOptionFromValue) as DropdownOption[])\n            }\n            label=\"Related Expertise Areas\"\n            maxMenuHeight=\"200px\"\n          />\n        </InputContainer>\n        {!isInRfpForm && (\n          <InputContainer>\n            <MultiSelectDropdown\n              label=\"Opportunities\"\n              onChange={(e) => setRfps(e)}\n              value={rfps}\n              options={rfpOptions}\n              placeholder=\"Select public opportunities\"\n              noOptionsMessage=\"No options. (Note: If you have private RFPs, they can't be displayed on your public company page.)\"\n            />\n            <DropdownNote>\n              Associate past and present opportunities to this area of interest\n            </DropdownNote>\n          </InputContainer>\n        )}\n        {subscription?.features.open_calls && !subscription.is_expired && (\n          <OpenCall>\n            <OpenCallLabel>\n              Open call for proposals\n              <Tooltip\n                content={\n                  <OpenCallTooltipContent>\n                    Setting the open call to <b>active</b> will add a button to this area of\n                    interest, and activate an open call opportunity in your Opportunities dashboard.\n                    You can use open calls to solicit proposals without a specific RFP.\n                  </OpenCallTooltipContent>\n                }\n                position=\"bottom\"\n                tooltipWidth=\"330px\"\n                arrowOffsetTop=\"-20px\"\n              >\n                <Icon name=\"Info\" size=\"xs\" />\n              </Tooltip>\n            </OpenCallLabel>\n            <Switch\n              checked={isOpenCallActive}\n              onChange={() => setIsOpenCallActive(!isOpenCallActive)}\n              labelLeft=\"Paused\"\n              labelRight=\"Active\"\n            />\n          </OpenCall>\n        )}\n      </CompanyEditForm>\n    </Container>\n  );\n}\n\nconst Container = styled.div`\n  position: relative;\n`;\nconst InputContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 8px;\n  width: 100%;\n`;\nconst DropdownNote = styled.div`\n  ${FONTS.REGULAR_3};\n  margin-bottom: 18px;\n`;\nconst OpenCall = styled.div`\n  display: flex;\n  align-items: center;\n  position: absolute;\n  bottom: 48px;\n`;\nconst OpenCallLabel = styled.div`\n  display: flex;\n  align-items: center;\n  gap: 6px;\n  margin-right: 24px;\n  ${FONTS.SEMIBOLD_2};\n`;\nconst OpenCallTooltipContent = styled.div`\n  ${FONTS.REGULAR_2};\n`;\n\nexport default ResearchInterestInput;\n","import RfpCard from \"@components/RfpCard/RfpCard\";\nimport toast from \"@components/Toast\";\nimport { Button, IconButton, SimpleConfirmationModal, Tag, TextButton } from \"@components/library\";\nimport { FONTS, WINDOW_DIMENSIONS } from \"@constants\";\nimport area_of_interest from \"@images/designSystemGraphics/area_of_interest.svg\";\nimport { toggleLoginModal } from \"@redux/actions/profileActions\";\nimport { RootState } from \"@redux/store\";\nimport { deleteCompanyResearchInterest } from \"@requests/companies\";\nimport {\n  CompanyForCompanyPage,\n  CompanyPageResearchInterest as CompanyPageResearchInterestType,\n} from \"@tsTypes/index\";\nimport { UserRole } from \"@tsTypes/users\";\nimport appsignal from \"@utils/appsignal\";\nimport { t } from \"@utils/i18n\";\nimport { sortRfps } from \"@utils/rfpUtils\";\nimport { renderMarkdownText } from \"@utils/textUtils\";\nimport { Dispatch, SetStateAction, useState } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { useHistory } from \"react-router-dom\";\nimport styled from \"styled-components\";\nimport CompanyCTABanner from \"./CompanyCTABanner\";\nimport ResearchInterestInput from \"./ResearchInterestInput\";\n\nconst { MOBILE_MEDIA_QUERY } = WINDOW_DIMENSIONS;\n\ninterface Props {\n  interest?: CompanyPageResearchInterestType;\n  company: CompanyForCompanyPage;\n  setCompany: Dispatch<SetStateAction<CompanyForCompanyPage>>;\n  showEditView: boolean;\n}\n\nfunction CompanyPageResearchInterest({ interest, company, setCompany, showEditView }: Props) {\n  const [isEditing, setIsEditing] = useState(false);\n  const [seeMoreRfps, setSeeMoreRfps] = useState(false);\n  const [isDeleteConfirmationModalOpen, setIsDeleteConfirmationModalOpen] = useState(false);\n\n  const currentUser = useSelector((state: RootState) => state.profiles.currentUser);\n\n  const dispatch = useDispatch();\n  const history = useHistory();\n\n  const handleDelete = async () => {\n    if (!interest) return;\n\n    try {\n      const { company_research_interests, rfp_requests } = await deleteCompanyResearchInterest(\n        interest.id\n      );\n\n      if (company_research_interests) {\n        setCompany({\n          ...company,\n          company_research_interests,\n          rfp_requests,\n        });\n      }\n\n      toast.success(\"Deleted area of interest\");\n    } catch (err) {\n      toast.error(\"Failed to delete area of interest\");\n      appsignal.sendError(err, (span) => {\n        span.setAction(\"CompanyResearchInterest#handleDelete\");\n        span.setTags({\n          companyResearchInterestId: String(interest.id),\n        });\n      });\n    }\n  };\n\n  const handleSubmitProposalClick = () => {\n    if (!currentUser.id) {\n      dispatch(\n        toggleLoginModal({\n          open: true,\n        })\n      );\n      return;\n    }\n\n    const hasExistingDraft = currentUser.profile_info.proposals.some(\n      (proposal) => !proposal.completed && proposal.request_id === interest?.open_call_request.id\n    );\n\n    history.push(\n      hasExistingDraft\n        ? `/submit/open_call/${company.identifier}?select=true&interest=${interest?.open_call_request.slug}`\n        : `/submit/open_call/${interest?.open_call_request.slug}`\n    );\n  };\n\n  if (showEditView) {\n    if (isEditing) {\n      return (\n        <ResearchInterestInput\n          interest={interest}\n          company={company}\n          setCompany={setCompany}\n          onClose={() => setIsEditing(false)}\n        />\n      );\n    } else if (!interest) {\n      const isFirstResearchInterest = company.company_research_interests.length === 0;\n      return (\n        <CompanyCTABanner\n          maxWidth=\"1060px\"\n          iconSrc={area_of_interest}\n          title={\n            isFirstResearchInterest\n              ? \"Add your first area of interest.\"\n              : \"Add more areas of interest.\"\n          }\n          subtitle={\n            isFirstResearchInterest ? (\n              <>\n                Define at least 1 area of interest for your <b>public sponsor page.</b>\n              </>\n            ) : (\n              <>\n                These areas help organize your RFPs and convey your org&rsquo;s research interests.\n              </>\n            )\n          }\n          buttonText=\"Add area of interest\"\n          onClick={() => setIsEditing(true)}\n        />\n      );\n    }\n  }\n\n  if (!interest) {\n    return null;\n  }\n\n  const { title, summary, keywords, rfp_requests } = interest;\n\n  const requestForProposals = sortRfps(rfp_requests);\n\n  return (\n    <>\n      <SimpleConfirmationModal\n        headerText={t(\n          \"pages.company_page.company_research_interest.simple_confirmation_modal.header\"\n        )}\n        subHeaderText={t(\n          \"pages.company_page.company_research_interest.simple_confirmation_modal.subheader\"\n        )}\n        isOpen={isDeleteConfirmationModalOpen}\n        onClose={() => setIsDeleteConfirmationModalOpen(false)}\n        onConfirm={handleDelete}\n        confirmButtonText=\"Delete\"\n        confirmIconName=\"Delete\"\n      />\n      <Container>\n        <MainContent>\n          <ResearchInterestHeader>\n            {showEditView && (\n              <IconContainer>\n                <IconButton\n                  iconName=\"Edit\"\n                  variant=\"secondary\"\n                  onClick={() => setIsEditing(true)}\n                />\n                <IconButton\n                  iconName=\"Delete\"\n                  variant=\"destructive-secondary\"\n                  onClick={() => {\n                    setIsDeleteConfirmationModalOpen(true);\n                  }}\n                />\n              </IconContainer>\n            )}\n            {title}\n          </ResearchInterestHeader>\n          {keywords.length > 0 && (\n            <Tags>\n              {keywords.map((keyword) => (\n                <Tag key={keyword} content={keyword} size=\"sm\" theme=\"neutral\" />\n              ))}\n            </Tags>\n          )}\n          <ResearchInterestSummary>{renderMarkdownText(summary)}</ResearchInterestSummary>\n        </MainContent>\n        {requestForProposals.length > 0 && (\n          <RfpCardsContainer>\n            <RfpCards>\n              {requestForProposals.slice(0, seeMoreRfps ? undefined : 3).map((rfp) => (\n                <RfpCard key={rfp.id} request={rfp} />\n              ))}\n            </RfpCards>\n            {requestForProposals.length > 3 && (\n              <div>\n                <TextButton\n                  onClick={() => setSeeMoreRfps(!seeMoreRfps)}\n                  text={seeMoreRfps ? \"See less\" : `See ${requestForProposals.length - 3} more`}\n                  iconName={seeMoreRfps ? \"Chevron Up\" : \"Chevron Down\"}\n                />\n              </div>\n            )}\n          </RfpCardsContainer>\n        )}\n        {interest?.open_call_request?.enabled &&\n          company.is_open_calls_accessible &&\n          !showEditView &&\n          currentUser.role !== UserRole.UNIVERSITY_ADMIN && (\n            <OpenCallCta\n              hasRfps={requestForProposals.length > 0}\n              isSponsor={currentUser.role === UserRole.SPONSOR}\n            >\n              {t(\"pages.company_page.company_research_interest.submit_proposal_label\", {\n                interest_title: interest.title ?? \"\",\n                company_name: company.company_name ?? \"\",\n              })}\n              <div>\n                <Button\n                  type=\"button\"\n                  variant=\"secondary\"\n                  onClick={handleSubmitProposalClick}\n                  margin=\"16px 0 0\"\n                >\n                  {t(\"components.buttons.open_call_submit\")}\n                </Button>\n              </div>\n            </OpenCallCta>\n          )}\n      </Container>\n    </>\n  );\n}\n\n// The following exported styled components are re-used in CompanyPageMoreOpporunities.tsx\n\nexport const Container = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 32px;\n`;\n\nexport const MainContent = styled.div`\n  flex-shrink: 0;\n  display: inherit;\n  flex-direction: inherit;\n\n  max-width: 800px;\n`;\n\nexport const RfpCardsContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 20px;\n`;\n\nexport const RfpCards = styled.div`\n  display: grid;\n  grid-template-columns: 1fr 1fr 1fr;\n  grid-gap: 20px;\n\n  line-height: 1;\n\n  ${WINDOW_DIMENSIONS.DESKTOP_MEDIA_QUERY} {\n    grid-template-columns: 1fr 1fr;\n  }\n  ${WINDOW_DIMENSIONS.TABLET_LANDSCAPE_MEDIA_QUERY} {\n    grid-template-columns: 1fr;\n  }\n`;\n\nconst ResearchInterestHeader = styled.div`\n  display: flex;\n  align-items: center;\n  gap: 16px;\n\n  margin: 0 0 24px;\n\n  ${FONTS.HEADING_4_SEMIBOLD}\n`;\n\nconst Tags = styled.div`\n  margin: 0 0 24px;\n`;\n\nconst IconContainer = styled.div`\n  display: flex;\n  gap: 10px;\n\n  ${MOBILE_MEDIA_QUERY} {\n    display: none;\n  }\n`;\n\nconst ResearchInterestSummary = styled.div`\n  ${FONTS.REGULAR_1}\n`;\nconst OpenCallCta = styled.div`\n  max-width: 800px;\n  ${({ hasRfps }) => hasRfps && \"margin-top: 8px\"};\n  ${({ isSponsor }) => isSponsor && \"pointer-events: none\"};\n  ${FONTS.REGULAR_1};\n`;\n\nexport default CompanyPageResearchInterest;\n","import RfpCard from \"@components/RfpCard/RfpCard\";\nimport { InfoBanner, TextButton } from \"@components/library\";\nimport { FONTS } from \"@constants\";\nimport { CompanyForCompanyPage, RfpRequestForCard } from \"@tsTypes/index\";\nimport { t } from \"@utils/i18n\";\nimport { sortRfps } from \"@utils/rfpUtils\";\nimport { useEffect, useState } from \"react\";\nimport styled from \"styled-components\";\nimport { Container, MainContent, RfpCards, RfpCardsContainer } from \"./CompanyResearchInterest\";\n\ninterface Props {\n  company: CompanyForCompanyPage;\n  showEditView: boolean;\n}\n\nfunction CompanyPageMoreOpportunities({ company, showEditView }: Props) {\n  const [rfps, setRfps] = useState<RfpRequestForCard[]>([]);\n  const [seeMoreRfps, setSeeMoreRfps] = useState(false);\n\n  useEffect(() => {\n    if (company.rfp_requests) {\n      setRfps(\n        sortRfps(\n          company.rfp_requests.filter(\n            (request) => !request.requestable.company_research_interest_id\n          )\n        )\n      );\n    }\n  }, [company]);\n\n  if (rfps.length > 0) {\n    return (\n      <Container>\n        <MainContent>\n          <Header>\n            {t(\"pages.company_page.more_opportunities.header\", { name: company.company_name })}\n          </Header>\n        </MainContent>\n        {showEditView && (\n          <Banner>\n            <InfoBanner text={t(\"pages.company_page.more_opportunities.description\")} />\n          </Banner>\n        )}\n        <RfpCardsContainer>\n          <RfpCards>\n            {rfps.slice(0, seeMoreRfps ? undefined : 3).map((rfp) => (\n              <RfpCard key={rfp.id} request={rfp} />\n            ))}\n          </RfpCards>\n          {rfps.length > 3 && (\n            <div>\n              <TextButton\n                onClick={() => setSeeMoreRfps(!seeMoreRfps)}\n                text={seeMoreRfps ? \"See less\" : `See ${rfps.length - 3} more`}\n                iconName={seeMoreRfps ? \"Chevron Up\" : \"Chevron Down\"}\n              />\n            </div>\n          )}\n        </RfpCardsContainer>\n      </Container>\n    );\n  }\n\n  return null;\n}\n\nconst Banner = styled.div`\n  width: 844px;\n`;\n\nexport const Header = styled.div`\n  display: flex;\n  align-items: center;\n  gap: 16px;\n\n  ${FONTS.HEADING_4_SEMIBOLD}\n`;\n\nexport default CompanyPageMoreOpportunities;\n","import toast from \"@components/Toast\";\nimport { IconButton, SimpleConfirmationModal, TextButton, UserPreview } from \"@components/library\";\nimport UserDropdown, { UserOption } from \"@components/library/Dropdowns/UserDropdown\";\nimport { FONTS, WINDOW_DIMENSIONS } from \"@constants\";\nimport team from \"@images/designSystemGraphics/team.svg\";\nimport { updateCompanyInfo } from \"@requests/companies\";\nimport { getCompanyMembers } from \"@requests/sponsors\";\nimport { CompanyForCompanyPage } from \"@tsTypes/index\";\nimport { UserRole } from \"@tsTypes/users\";\nimport { generateEmailDropdownOptions } from \"@utils/dropdownUtils\";\nimport { t } from \"@utils/i18n\";\nimport { Dispatch, FormEvent, SetStateAction, useEffect, useState } from \"react\";\nimport styled from \"styled-components\";\nimport CompanyCTABanner from \"./CompanyCTABanner\";\nimport CompanyEditForm from \"./CompanyEditForm\";\n\nconst { TABLET_LANDSCAPE_MEDIA_QUERY, TABLET_MEDIA_QUERY } = WINDOW_DIMENSIONS;\n\ninterface Props {\n  company: CompanyForCompanyPage;\n  setCompany: Dispatch<SetStateAction<CompanyForCompanyPage>>;\n  showEditView: boolean;\n}\n\nfunction CompanyPageUsers({ company, setCompany, showEditView }: Props) {\n  const { company_page_users } = company;\n\n  const [isDeleteConfirmationModalOpen, setIsDeleteConfirmationModalOpen] = useState(false);\n  const [newUserOptions, setNewUserOptions] = useState<UserOption[]>([]);\n  const [dropdownOptions, setDropdownOptions] = useState<UserOption[]>([]);\n  const [isEditing, setIsEditing] = useState(false);\n  const [seeMore, setSeeMore] = useState(false);\n  const [userIdToDelete, setUserIdToDelete] = useState<number | null>(null);\n\n  const handleUpdate = async (newCompanyPageUsers: { id: number }[]) => {\n    const { company: _company } = (await updateCompanyInfo(company.id, {\n      company_page_user_ids: newCompanyPageUsers.map((user) => user.id),\n    })) as any;\n    setCompany(_company);\n  };\n\n  const handleAddUsers = async (e: FormEvent<HTMLFormElement>) => {\n    e.preventDefault();\n\n    if (newUserOptions.length === 0) return;\n\n    try {\n      const newCompanyPageUsers = [\n        ...company_page_users,\n        ...(newUserOptions.map((option) => option.user) as { id: number }[]),\n      ];\n\n      await handleUpdate(newCompanyPageUsers);\n\n      setIsEditing(false);\n      setNewUserOptions([]);\n      if (company_page_users.length > 6) setSeeMore(true);\n\n      toast.success(\n        t(\"pages.company_page.our_team.toast_success_add\", { count: newUserOptions.length })\n      );\n    } catch (err) {\n      console.error(err);\n\n      toast.error(t(\"pages.company_page.our_team.toast_error_add\"));\n    }\n  };\n\n  const handleDeleteUser = async () => {\n    try {\n      const newCompanyPageUsers = company_page_users.filter((user) => user.id !== userIdToDelete);\n      await handleUpdate(newCompanyPageUsers);\n\n      setUserIdToDelete(null);\n      setIsDeleteConfirmationModalOpen(false);\n\n      toast.success(t(\"pages.company_page.our_team.toast_success_remove\"));\n    } catch (err) {\n      console.error(err);\n\n      toast.error(t(\"pages.company_page.our_team.toast_error_remove\"));\n    }\n  };\n\n  useEffect(() => {\n    (async () => {\n      if (isEditing) {\n        const { sponsor_users } = await getCompanyMembers(company.id);\n        setDropdownOptions(\n          generateEmailDropdownOptions(\n            sponsor_users,\n            company_page_users.map((user) => user.email)\n          )\n        );\n      }\n    })();\n  }, [isEditing, company_page_users]);\n\n  return (\n    <>\n      {(() => {\n        if (isEditing) {\n          return (\n            <EditContainer>\n              <CompanyEditForm\n                onSubmit={handleAddUsers}\n                onCancel={() => {\n                  setIsEditing(false);\n                  setNewUserOptions([]);\n                }}\n              >\n                <div>\n                  <Title>{t(\"pages.company_page.our_team.add_team_members\")}</Title>\n                  <UserDropdown\n                    maxMenuHeight=\"300px\"\n                    value={newUserOptions}\n                    options={dropdownOptions}\n                    onChange={setNewUserOptions}\n                  />\n                </div>\n              </CompanyEditForm>\n            </EditContainer>\n          );\n        }\n        if (showEditView) {\n          return (\n            <EditContainer>\n              <CompanyCTABanner\n                iconSrc={team}\n                title={t(\"pages.company_page.our_team.display_team_members\")}\n                subtitle={t(\"pages.company_page.our_team.display_team_members_subtitle\")}\n                buttonText={t(\"pages.company_page.our_team.select_team_members_button\")}\n                onClick={() => setIsEditing(true)}\n                maxWidth=\"1060px\"\n              />\n            </EditContainer>\n          );\n        }\n      })()}\n      {company_page_users.length > 0 && (\n        <>\n          <SimpleConfirmationModal\n            headerText={t(\"pages.company_page.our_team.remove_team_member_modal.header\")}\n            subHeaderText={t(\"pages.company_page.our_team.remove_team_member_modal.subheader\")}\n            confirmButtonText={t(\n              \"pages.company_page.our_team.remove_team_member_modal.confirm_button\"\n            )}\n            isOpen={isDeleteConfirmationModalOpen}\n            onClose={() => {\n              setUserIdToDelete(null);\n              setIsDeleteConfirmationModalOpen(false);\n            }}\n            onConfirm={handleDeleteUser}\n            confirmIconName=\"Delete\"\n          />\n          <Container>\n            {company_page_users.slice(0, seeMore ? company_page_users.length : 6).map((user) => (\n              <DeleteUserPreviewWrapper key={user.id}>\n                {showEditView && (\n                  <IconButtonWrapper>\n                    <IconButton\n                      variant=\"destructive-secondary\"\n                      iconName=\"Delete\"\n                      tooltipText=\"Remove\"\n                      tooltipPosition=\"bottom\"\n                      onClick={() => {\n                        setUserIdToDelete(user.id);\n                        setIsDeleteConfirmationModalOpen(true);\n                      }}\n                    />\n                  </IconButtonWrapper>\n                )}\n                <UserPreview size=\"xl\" user={user} userRole={UserRole.SPONSOR} />\n              </DeleteUserPreviewWrapper>\n            ))}\n          </Container>\n          {company_page_users.length > 6 && (\n            <div>\n              <TextButton\n                onClick={() => setSeeMore(!seeMore)}\n                text={seeMore ? \"See less\" : `See ${company_page_users.length - 6} more`}\n                iconName={seeMore ? \"Chevron Up\" : \"Chevron Down\"}\n              />\n            </div>\n          )}\n        </>\n      )}\n    </>\n  );\n}\n\nconst EditContainer = styled.div`\n  display: flex;\n  flex-direction: column;\n`;\n\nconst Container = styled.div`\n  display: grid;\n  gap: 24px;\n  max-width: 1300px;\n  grid-template-columns: 1fr 1fr 1fr;\n  ${TABLET_LANDSCAPE_MEDIA_QUERY} {\n    grid-template-columns: 1fr 1fr;\n  }\n  ${TABLET_MEDIA_QUERY} {\n    grid-template-columns: 1fr;\n  }\n`;\n\nconst DeleteUserPreviewWrapper = styled.div`\n  position: relative;\n  width: 100%;\n`;\nconst IconButtonWrapper = styled.div`\n  position: absolute;\n  bottom: 0px;\n  left: 0px;\n\n  ${WINDOW_DIMENSIONS.MOBILE_MEDIA_QUERY} {\n    display: none;\n  }\n`;\n\nconst Title = styled.div`\n  ${FONTS.SEMIBOLD_2}\n  margin-bottom: 8px;\n`;\n\nexport default CompanyPageUsers;\n","import { Button } from \"@components/library\";\nimport { COLORS } from \"@constants\";\nimport { RootState } from \"@redux/store\";\nimport { CompanyForCompanyPage } from \"@tsTypes/index\";\nimport { SponsorLicenseType } from \"@tsTypes/sponsorProfiles\";\nimport { useSelector } from \"react-redux\";\nimport styled from \"styled-components\";\nimport { Container, Content } from \"./styledComponents\";\n\ninterface Props {\n  company: CompanyForCompanyPage;\n  viewLive: boolean;\n}\n\nfunction CompanyPageViewLiveBanner({ company, viewLive }: Props) {\n  const currentUser = useSelector((state: RootState) => state.profiles.currentUser);\n\n  const showViewLiveButton =\n    currentUser.profile_info?.license === SponsorLicenseType.PREMIUM &&\n    currentUser.profile_info?.is_admin &&\n    currentUser.profile_info?.company_id === company.id;\n\n  if (showViewLiveButton && !viewLive) {\n    return (\n      <>\n        <Divider />\n        <Container>\n          <Content>\n            <div>\n              <Button\n                variant=\"secondary\"\n                width=\"min-content\"\n                iconName=\"View\"\n                onClick={() => {\n                  window.open(`/company/${company.identifier}?live=true`, \"_blank\");\n                }}\n              >\n                View live company page\n              </Button>\n            </div>\n          </Content>\n        </Container>\n      </>\n    );\n  }\n\n  return null;\n}\n\nconst Divider = styled.div`\n  border-top: 1px solid ${COLORS.NEUTRAL_200};\n`;\n\nexport default CompanyPageViewLiveBanner;\n","import { Dispatch, FormEvent, SetStateAction, useEffect, useState } from \"react\";\nimport styled from \"styled-components\";\n\nimport toast from \"@components/Toast\";\nimport { IconButton, TextInput } from \"@components/library\";\nimport { FONTS, WINDOW_DIMENSIONS } from \"@constants\";\nimport paper from \"@images/icons/paper.svg\";\nimport { updateCompanyInfo } from \"@requests/companies\";\nimport { CompanyForCompanyPage } from \"@tsTypes/index\";\nimport CompanyCTABanner from \"./CompanyCTABanner\";\nimport CompanyEditForm from \"./CompanyEditForm\";\nimport TOOLTIP_CONTENT from \"./tooltipContent\";\n\nconst { MOBILE_MEDIA_QUERY } = WINDOW_DIMENSIONS;\n\ninterface Props {\n  field: \"introduction\" | \"description\";\n  company: CompanyForCompanyPage;\n  setCompany: Dispatch<SetStateAction<CompanyForCompanyPage>>;\n  showEditView: boolean;\n}\n\nfunction CompanyTextInput({ company, setCompany, field, showEditView }: Props) {\n  const [value, setValue] = useState(company[field] ?? \"\");\n  const [isEditing, setIsEditing] = useState(false);\n\n  const title = field === \"introduction\" ? \"Intro statement\" : \"Overview\";\n  const charLimit = field === \"introduction\" ? 200 : 800;\n\n  const handleSubmit = async (e: FormEvent<HTMLFormElement>) => {\n    e.preventDefault();\n\n    try {\n      const { company: _company } = (await updateCompanyInfo(company.id, {\n        [field]: value,\n      })) as any;\n\n      toast.success(`Updated ${title.toLowerCase()}`);\n      setCompany(_company);\n      setIsEditing(false);\n    } catch (err) {\n      toast.error(`Failed to update ${title.toLowerCase()}`);\n\n      console.error(err);\n    }\n  };\n\n  useEffect(() => {\n    if (isEditing) {\n      setValue(company[field] ?? \"\");\n    }\n  }, [isEditing]);\n\n  if (isEditing) {\n    return (\n      <CompanyEditForm\n        onSubmit={handleSubmit}\n        onCancel={() => setIsEditing(false)}\n        tooltipContent={TOOLTIP_CONTENT[field]}\n        disabled={value.length > charLimit}\n      >\n        <TextInput\n          textarea\n          value={value}\n          onChange={(event) => setValue(event.target.value)}\n          characterLimit={charLimit}\n          startingHeight={field === \"introduction\" ? \"100px\" : \"150px\"}\n          placeholder={`You can use this content space to provide more detail about your ${\n            field === \"introduction\" ? \"organization\" : \"team\"\n          }.`}\n          label={title}\n        />\n      </CompanyEditForm>\n    );\n  }\n\n  if (showEditView && !company[field]) {\n    if (field === \"introduction\") {\n      return (\n        <CompanyCTABanner\n          maxWidth=\"1060px\"\n          iconSrc={paper}\n          title=\"Add an introductory statement.\"\n          subtitle=\"You can use this content space to provide more detail about your organization.\"\n          buttonText=\"Add intro statement\"\n          onClick={() => setIsEditing(true)}\n        />\n      );\n    }\n    return (\n      <CompanyCTABanner\n        maxWidth=\"1060px\"\n        iconSrc={paper}\n        title=\"Add a team overview.\"\n        subtitle=\"You can use this content space to provide more detail about your team.\"\n        buttonText=\"Add team overview\"\n        onClick={() => setIsEditing(true)}\n      />\n    );\n  }\n\n  if (!company[field]) {\n    return null;\n  }\n\n  return (\n    <Container>\n      {showEditView && (\n        <IconButtonContainer>\n          <IconButton iconName=\"Edit\" variant=\"secondary\" onClick={() => setIsEditing(true)} />\n        </IconButtonContainer>\n      )}\n      <Text field={field}>{company[field]}</Text>\n    </Container>\n  );\n}\n\nconst Container = styled.div`\n  display: flex;\n  gap: 20px;\n`;\n\nconst IconButtonContainer = styled.div`\n  height: min-content;\n\n  margin: 6px 0px 0;\n\n  ${MOBILE_MEDIA_QUERY} {\n    display: none;\n  }\n`;\nconst Text = styled.div`\n  display: flex;\n  align-items: center;\n  max-width: 844px;\n  ${({ field }) => {\n    switch (field) {\n      case \"introduction\":\n        return `\n          ${FONTS.HEADING_4_REGULAR};\n          line-height: 42px;\n         `;\n      case \"description\":\n        return `\n          ${FONTS.REGULAR_1};\n        `;\n    }\n  }}\n\n  white-space: pre-wrap;\n`;\n\nexport default CompanyTextInput;\n","import RequestForStartupCardWide from \"@components/Cards/RequestForStartupCardWide\";\nimport { Button, Icon } from \"@components/library\";\nimport { COLORS, FEATURE_FLAGS, FONTS, WINDOW_DIMENSIONS } from \"@constants\";\nimport { useSearchParams } from \"@hooks/router\";\nimport { useHubspotCTAs } from \"@hooks/useHubspotCTAs\";\nimport { toggleLoginModal } from \"@redux/actions/profileActions\";\nimport { RootState } from \"@redux/store\";\nimport { getCompanyForCompanyPage } from \"@requests/companies\";\nimport { requestToJoinCompanyNetworkFromDigest } from \"@requests/companyNetworkScientists\";\nimport { marketplacePath } from \"@routes/utils\";\n// @ts-ignore\nimport { CompanyVerificationStatus } from \"@tsTypes/companies.js.erb\";\nimport { CompanyForCompanyPage } from \"@tsTypes/index\";\nimport { UserRole } from \"@tsTypes/users\";\nimport { setPrevUrlCookie } from \"@utils/authUtils\";\nimport { t } from \"@utils/i18n\";\nimport { canEditCompanyPage } from \"@utils/sponsorUtils\";\nimport { useEffect, useState } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { useHistory, useParams } from \"react-router-dom\";\nimport styled from \"styled-components\";\nimport CompanyPageJumbotron from \"./CompanyPageJumbotron\";\nimport CompanyPageMoreOpportunities from \"./CompanyPageMoreOpportunities\";\nimport CompanyPageUsers from \"./CompanyPageUsers\";\nimport CompanyPageViewLiveBanner from \"./CompanyPageViewLiveBanner\";\nimport CompanyResearchInterest from \"./CompanyResearchInterest\";\nimport CompanyTextInput from \"./CompanyTextInput\";\nimport { Container, layoutStyles } from \"./styledComponents\";\n\nfunction CompanyPage() {\n  const { identifier } = useParams();\n  const history = useHistory();\n  const dispatch = useDispatch();\n\n  const [searchParams, setSearchParams] = useSearchParams();\n  const asLiveView = searchParams.get(\"live\") === \"true\";\n\n  const [company, setCompany] = useState<CompanyForCompanyPage>({} as CompanyForCompanyPage);\n\n  const currentUser = useSelector((state: RootState) => state.profiles.currentUser);\n\n  // Scientist join company network from digest email\n  useEffect(() => {\n    const isJoiningFromDigest = searchParams.get(\"join\") === \"true\";\n    if (!isJoiningFromDigest) return;\n    if (!currentUser.id) {\n      setPrevUrlCookie(window.location.href);\n      dispatch(toggleLoginModal({ open: true, landing: \"login\" }));\n      return;\n    }\n    if (currentUser.role !== UserRole.SCIENTIST) return;\n    requestToJoinCompanyNetworkFromDigest(identifier);\n    searchParams.delete(\"join\");\n    setSearchParams(searchParams);\n  }, []);\n\n  useHubspotCTAs([company.id]);\n\n  useEffect(() => {\n    (async () => {\n      try {\n        const response = await getCompanyForCompanyPage(identifier);\n        setCompany(response.company);\n      } catch (error) {\n        console.error(error);\n        history.push(marketplacePath());\n      }\n    })();\n  }, [identifier]);\n\n  // Until the company is loaded, return nothing\n  if (!company.id) return null;\n\n  const {\n    company_name,\n    company_research_interests,\n    company_page_users,\n    description,\n    verification_status,\n    request_for_startup_requests,\n  } = company;\n\n  const hasResearchInterests = company_research_interests.length > 0;\n  const isUnverified =\n    FEATURE_FLAGS.UNCLAIMED_COMPANY_PAGE &&\n    verification_status !== CompanyVerificationStatus.VERIFIED;\n  const showTeamSection =\n    (Number(company_page_users?.length) > 0 || Number(description?.length) > 0) && !isUnverified;\n  const showEditView = canEditCompanyPage(currentUser, company, asLiveView);\n\n  const reasonsToClaim = [\n    \"Access a network of researchers specifically interested in your organization\",\n    \"Post to the Halo marketplace to accelerate your research & development teams\",\n    \"Showcase your innovation brand to over 4500 scientific innovators actively looking to partner\",\n  ];\n\n  return (\n    <>\n      <CompanyPageViewLiveBanner company={company} viewLive={asLiveView} />\n      <CompanyPageJumbotron company={company} setCompany={setCompany} showEditView={showEditView} />\n      <ContentContainer>\n        <MainContent isUnverified={isUnverified}>\n          <TopContainer>\n            <CompanyInfo>\n              <CompanyTextInput\n                field=\"introduction\"\n                company={company}\n                setCompany={setCompany}\n                showEditView={showEditView}\n              />\n              <PartneringInterests>\n                {(hasResearchInterests || showEditView) && (\n                  <>\n                    {!isUnverified && (\n                      <Header>{t(\"pages.company_page.partnering_interests.header\")}</Header>\n                    )}\n                    <CompanyResearchInterest\n                      company={company}\n                      setCompany={setCompany}\n                      showEditView={showEditView}\n                    />\n                    {company_research_interests.map((cri) => (\n                      <CompanyResearchInterest\n                        key={cri.id}\n                        interest={cri}\n                        company={company}\n                        setCompany={setCompany}\n                        showEditView={showEditView}\n                      />\n                    ))}\n                  </>\n                )}\n                <CompanyPageMoreOpportunities company={company} showEditView={showEditView} />\n              </PartneringInterests>\n            </CompanyInfo>\n            {isUnverified && (\n              <UnclaimedBox>\n                <UnclaimedBoxHeader>This is an unclaimed page</UnclaimedBoxHeader>\n                <div>Is this your organization?</div>\n                <div className=\"hs-cta-trigger-button hs-cta-trigger-button-120195094169\">\n                  <Button variant=\"orange\" onClick={() => {}} size=\"sm\" margin=\"16px 0 24px\">\n                    Claim this page\n                  </Button>\n                </div>\n                <ReasonsToClaim>\n                  <ReasonToClaimHeader>Reasons to claim</ReasonToClaimHeader>\n                  {reasonsToClaim.map((reason) => (\n                    <ReasonToClaim key={reason}>\n                      <Icon name=\"Tick\" color={COLORS.BLACK} size=\"md\" margin=\"0 12px 0 0\" />\n                      {reason}\n                    </ReasonToClaim>\n                  ))}\n                </ReasonsToClaim>\n              </UnclaimedBox>\n            )}\n          </TopContainer>\n          {request_for_startup_requests.length > 0 && (\n            <StartupPrograms>\n              <Header>{t(\"pages.company_page.startup_programs.header\")}</Header>\n              {request_for_startup_requests.map((request) => (\n                <RequestForStartupCardWide key={\"rfs-\" + request.id} request={request} />\n              ))}\n            </StartupPrograms>\n          )}\n          {isUnverified ? (\n            <UnclaimedDisclaimer>\n              <Icon name=\"Info\" color={COLORS.NEUTRAL_500} size=\"xs\" margin=\"4px 12px 0 0\" />\n              {`This listing was automatically created by Halo and is not currently maintained by, endorsed by, or affiliated with ${company_name}.`}\n            </UnclaimedDisclaimer>\n          ) : (\n            <OurTeam>\n              {(showTeamSection || showEditView) && (\n                <Header>{t(\"pages.company_page.our_team.header\")}</Header>\n              )}\n              <CompanyTextInput\n                field=\"description\"\n                company={company}\n                setCompany={setCompany}\n                showEditView={showEditView}\n              />\n              <CompanyPageUsers\n                company={company}\n                setCompany={setCompany}\n                showEditView={showEditView}\n              />\n            </OurTeam>\n          )}\n        </MainContent>\n      </ContentContainer>\n    </>\n  );\n}\n\nconst ContentContainer = styled(Container)`\n  padding: 64px 0;\n`;\n\nconst MainContent = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: ${({ isUnverified }) => (isUnverified ? 88 : 96)}px;\n  margin: 0 auto;\n  ${layoutStyles};\n`;\nconst CompanyInfo = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 96px;\n  margin: 0 auto;\n  min-width: 0;\n  max-width: 100%;\n`;\nconst TopContainer = styled.div`\n  display: flex;\n  justify-content: space-between;\n  gap: 108px;\n  ${WINDOW_DIMENSIONS.TABLET_LANDSCAPE_MEDIA_QUERY} {\n    flex-direction: column-reverse;\n    gap: 88px;\n  }\n`;\nconst PartneringInterests = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 88px;\n`;\nconst Header = styled.div`\n  ${FONTS.HEADING_2_SEMIBOLD}\n`;\nconst StartupPrograms = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 64px;\n  max-width: 952px;\n`;\nconst UnclaimedDisclaimer = styled.div`\n  display: flex;\n  padding: 24px 24px 0 0;\n  max-width: 655px;\n  ${FONTS.REGULAR_2};\n  color: ${COLORS.NEUTRAL_500};\n  border-top: 1px solid ${COLORS.NEUTRAL_300};\n`;\nconst OurTeam = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 64px;\n`;\nconst UnclaimedBox = styled.div`\n  display: flex;\n  flex-direction: column;\n  width: 324px;\n  min-width: 324px;\n  height: fit-content;\n  padding: 24px;\n  background-color: ${COLORS.ORANGE_50};\n  border-radius: 12px;\n  ${FONTS.MEDIUM_2};\n  ${WINDOW_DIMENSIONS.TABLET_LANDSCAPE_MEDIA_QUERY} {\n    width: 100%;\n  }\n`;\nconst UnclaimedBoxHeader = styled.div`\n  ${FONTS.HEADING_4_SEMIBOLD}\n  margin: 0 0 16px;\n`;\nconst ReasonsToClaim = styled.div`\n  display: flex;\n  flex-direction: column;\n  gap: 16px;\n  padding-top: 24px;\n  border-top: 1px solid ${COLORS.NEUTRAL_300};\n`;\nconst ReasonToClaimHeader = styled.div`\n  ${FONTS.SEMIBOLD_1}\n`;\nconst ReasonToClaim = styled.div`\n  display: flex;\n  ${FONTS.REGULAR_2};\n`;\n\nexport default CompanyPage;\n","import { Icon } from \"@components/library\";\nimport { IconName } from \"@components/library/Icon/Icon\";\nimport { COLORS, FONTS, WINDOW_DIMENSIONS } from \"@constants\";\nimport { LaunchableRequestStatus } from \"@tsTypes/requests\";\nimport { formatDateToEastern } from \"@utils/dateUtils\";\nimport { t } from \"@utils/i18n\";\nimport { LaunchableRequest, getLaunchableRequestStatus } from \"@utils/requestUtils\";\nimport styled from \"styled-components\";\n\ninterface Props {\n  request: LaunchableRequest;\n  iconPosition?: \"left\" | \"right\";\n  hasUnknownLaunchDate?: boolean;\n  useCompactText?: boolean;\n}\n\nexport default function Status({\n  request,\n  iconPosition = \"left\",\n  hasUnknownLaunchDate = false,\n  useCompactText = false,\n}: Props) {\n  const status = getLaunchableRequestStatus(request);\n\n  let text = \"\";\n  let color = \"\";\n  let background = \"\";\n  let iconName: IconName;\n\n  switch (status) {\n    case LaunchableRequestStatus.ACTIVE:\n      if (request.requestable.deadline) {\n        text = t(\"pages.request_for_startups_page.status.active\", {\n          date: formatDateToEastern(\n            request.requestable.deadline,\n            \"MMM D\" +\n              (new Date(request.requestable.deadline).getFullYear() !== new Date().getFullYear()\n                ? \", yyyy\"\n                : \"\")\n          ),\n        });\n      } else {\n        text = t(\"pages.request_for_startups_page.status.open\");\n      }\n      color = COLORS.GREEN_800;\n      background = COLORS.GREEN_200;\n      iconName = \"Accelerator\";\n      break;\n    case LaunchableRequestStatus.COMING_SOON:\n      text = hasUnknownLaunchDate\n        ? \"Coming soon\"\n        : t(\"pages.request_for_startups_page.status.coming_soon\", {\n            date: formatDateToEastern(\n              request.requestable.launch_date!,\n              \"MMM D\" +\n                (new Date(request.requestable.launch_date!).getFullYear() !==\n                new Date().getFullYear()\n                  ? \", yyyy\"\n                  : \"\")\n            ),\n          });\n      color = COLORS.ORANGE;\n      background = COLORS.ORANGE_300;\n      iconName = \"Accelerator Complete\";\n      break;\n    default:\n      // Handle no date case\n      if (!request.requestable.deadline && !request.requestable.launch_date) {\n        if (request.enabled) {\n          text = \"Applications open\";\n          color = COLORS.GREEN_800;\n          background = COLORS.GREEN_200;\n          iconName = \"Accelerator\";\n        } else {\n          // Unknown status\n          text = \"\";\n        }\n      } else {\n        text = t(\"pages.request_for_startups_page.status.closed\");\n        color = COLORS.NEUTRAL_500;\n        background = COLORS.NEUTRAL_250;\n        iconName = \"Accelerator Complete\";\n      }\n  }\n\n  \n  let statusText = text;\n  if (useCompactText) {\n    if (statusText.toLowerCase().includes(\"applications closed\")) {\n      statusText = \"Closed\";\n    } else if (statusText.toLowerCase().includes(\"applications open\")) {\n      statusText = \"Open\";\n    }\n  }\n\n  return (\n    <Container iconPosition={iconPosition} color={color}>\n      {Number(iconName?.length) > 0 && (\n        <IconContainer background={background}>\n          <Icon name={iconName} size=\"sm\" color={color} />\n        </IconContainer>\n      )}\n      {statusText}\n    </Container>\n  );\n}\n\nconst Container = styled.div`\n  display: flex;\n  flex-direction: ${({ iconPosition }) => (iconPosition === \"left\" ? \"row\" : \"row-reverse\")};\n  align-items: center;\n  gap: 8px;\n  color: ${({ color }) => color};\n  ${FONTS.SEMIBOLD_3}\n  white-space: nowrap;\n  @media (max-width: ${WINDOW_DIMENSIONS.MOBILE_MEDIA_QUERY}px) {\n    text-align: left;\n    float: left;\n  }\n\n`;\n\nconst IconContainer = styled.div`\n  display: flex;\n  justify-content: center;\n  align-items: center;\n\n  width: 26px;\n  height: 26px;\n\n  border-radius: 100%;\n  background: ${({ background }) => background};\n`;\n"],"names":["BaseCardWide","to","isExternalLink","openInNewTab","title","subtitle","imageUrl","cornerContent","tags","buttons","dataTestId","_useState2","_slicedToArray","useState","areButtonsHovered","setAreButtonsHovered","isMobile","useSelector","state","window","isCompactLayout","width","WINDOW_DIMENSIONS","TABLET_LANDSCAPE","_jsx","CardLink","href","as","undefined","target","rel","children","_jsxs","Container","Top","onMouseOver","Content","AvatarWrapper","CompanyAvatar","size","Text","TitleGroup","Title","Subtitle","CornerContent","shouldWrap","Bottom","Tags","XMoreWrapper","maxLines","maxTags","map","tag","Tag","content","Buttons","onMouseEnter","onMouseLeave","styled","Link","COLORS","BLACK","div","NEUTRAL_250","STYLES","SHADOW_CARD","SHADOW_A","FONTS","HEADING_5_SEMIBOLD","TABLET","SEMIBOLD_1","SEMIBOLD_3","NEUTRAL_500","NEUTRAL_200","MOBILE","RequestForStartupCardWide","request","currentUser","profiles","windowWidth","_useFollowRequest","useFollowRequest","id","handleFollowRequest","isUserFollowing","handleNotify","e","preventDefault","requestable","has_page","track","SegmentEventName","Click","ui_component","react_component","request_slug","slug","logged_in","Boolean","_request$requestable","external_url","parent_program","status","getLaunchableRequestStatus","button","Button","type","variant","requestPageUrlPath","iconName","iconPosition","onClick","is_external_link","LaunchableRequestStatus","COMING_SOON","CLOSED","deadline","IN_EXTENSION","OptedIn","Icon","name","color","GREEN","SubtitleWrapper","SubtitleText","company","private_alias","company_name","verification_status","CompanyVerificationStatus","VERIFIED","StyledIcon","HALO_BLUE","avatar","url","Status","hasUnknownLaunchDate","unknown_launch_date","useCompactText","areas_of_expertise","REGULAR_2","span","TIPS","RequestToJoinNetworkModal","isOpen","onClose","companyName","isCompanyVerified","profileId","BlankModal","Header","t","Subheader","t_html","List","tip","Item","ButtonContainer","HEADING_4_SEMIBOLD","SEMIBOLD_2","CompanyNetworkScientistStatus","BannerCtaSuccess","MEDIUM_3","BLUE_900","TooltipText","buttonProps","requestToJoinNetworkModalOpen","setRequestToJoinNetworkModalOpen","_useState4","isSubmitting","setIsSubmitting","_useState6","companyNetworkScientist","setCompanyNetworkScientist","dispatch","useDispatch","identifier","useEffect","role","UserRole","SCIENTIST","response","getCompanyNetworkScientist","scientistProfileId","profile_info","companyId","handleClick","stopPropagation","async","_objectSpread","company_network_scientist","requestToJoinCompanyNetwork","console","error","message","joinNetwork","SPONSOR","UNIVERSITY_ADMIN","followUnfollowCompany","is_following","toast","success","t_link","Follow","object","SegmentEventObject","Company","Unfollow","finishFollowUnfollowCompany","isFollowing","appsignal","sendError","setAction","setTags","companyIdentifier","String","currentUserId","toggleFollow","setPrevUrlCookie","location","toggleLoginModal","open","followedCompaniesInfo","followed_companies_info","some","followedCompany","_Fragment","profile_id","BLUE_LIGHT_600","ACCEPTED","Tooltip","position","contentWidth","isActive","disabled","canEditCompanyPage","viewLive","profile","is_admin","company_id","sortCompanyMembers","members","nameSortDirection","assignmentSortDirection","_members","sort","a","b","first_name","roles","length","is_super_admin","sortReviewTeamMembers","roleAsNum","RoleName","REQUEST_DRAFT_EDITOR","REQUEST_LEAD","REQUEST_COMMENTER","REQUEST_EXTERNAL_LEAD","REQUEST_EXTERNAL_COMMENTER","COMPANY_SUPER_ADMIN","COMPANY_ADMIN","filter","member","complete","findRequestRoleNameOnUser","countReviewTeamRoles","resource_type","setCompany","mode","setLocation","employee_count","employeeCount","setEmployeeCount","researcher_count","researcherCount","setResearcherCount","_useState8","rd_spend_amount","rdSpendAmount","setRdSpendAmount","_useState10","rd_centers_count","rdCentersCount","setRdCentersCount","_useState12","company_type","companyType","setCompanyType","_useState14","description","setDescription","_useState16","countryOptions","setCountryOptions","api","get","data","getCountryNames","getOptionFromValue","headerText","Form","onSubmit","_company","updateCompanyInfo","err","Label","SingleSelectDropdown","isClearable","maxMenuHeight","value","options","onChange","newOption","Object","values","CompanySize","CompanySpend","TextInput","min","Number","CompanyType","textarea","characterLimit","startingHeight","handleCancel","form","label","getZoomedImg","imageSrc","zoomLevel","image","blob","Promise","resolve","reject","Image","addEventListener","setAttribute","src","URL","createObjectURL","canvas","document","createElement","ctx","getContext","height","clearRect","scale","Math","w","h","left","top","drawImage","toBlob","file","CompanyLogoModal","closeModal","onUpload","zoom","setZoom","closeOnDimmerClick","ImageContainer","CropContainer","ImagePreview","style","transform","alt","ZoomImageContainer","SliderContainer","SliderInput","max","step","event","zoomBlob","showZoomedImage","img","input","NEUTRAL_300","TABLET_LANDSCAPE_MEDIA_QUERY","TABLET_MEDIA_QUERY","isUnverified","noVideoContent","Logo","NoLogoIconContainer","CompanyName","h1","HEADING_1_SEMIBOLD","ONE_LINE_ALT","EditContainer","BLUE_LIGHT_250","showEditView","video","hero_image_url","fileInputRef","useRef","logo","setLogo","logoBlob","setLogoBlob","logoFailedToLoad","setLogoFailedToLoad","companyLogoModalOpen","setCompanyLogoModalOpen","FEATURE_FLAGS","UNCLAIMED_COMPANY_PAGE","Error","logoUrl","uploadCompanyImage","accept","ref","display","files","current","IconButton","tooltipWidth","tooltipText","click","onError","Date","getTime","NEUTRAL_400","CompanyNetworkCta","styles","StyleSheet","create","CompanyModal_modal","overflow","JS_FONTS","CompanyModal_header","fontFamily","border","paddingBottom","CompanyModal_formLabel","margin","CompanyModal_fieldLabel","REGULAR_3","CompanyModal_firstformLabel","CompanyModal_textarea","resize","padding","CompanyModal_buttonContainer","justifyContent","marginTop","CompanyPartnerModal_radioGroup","alignItems","marginBottom","CompanyPartnerModal_radio","CompanyPartnerModal_radioLabel","marginLeft","CompanyModal_dropdown","borderStyle","borderWidth","borderColor","CompanyPartnerModal_dropdown","CompanyModal_smallText","CompanyModal_strongText","CompanyModal_errorContainer","flexDirection","RED","CompanyModal_captionLabel","REGULAR_1","CompanyModal_errorLabel","CompanyLogoModal_imageContainer","borderRadius","placeItems","CompanyLogoModal_imagePreview","zIndex","CompanyLogoModal_imageZoomContainer","CompanyLogoModal_imageZoomButton","CompanyLogoModal_imageZoomInput","outline","boxShadow","CompanyVideoModal_videoPreviewContainer","CompanyVideoModal_videoPreview","maxHeight","background","CompanyVideoModal_uploadingOverlay","backgroundColor","CompanyVideoModal","uploading","setUploading","isOverLimit","Modal","className","css","Loader","active","inverted","autoPlay","loop","muted","controls","MOBILE_MEDIA_QUERY","BLUE_LIGHT_300","Video","CompanyVideoImageFallback","MuteToggle","videoRef","setVideo","videoMuted","setVideoMuted","videoBlob","setVideoBlob","videoFailedToLoad","setVideoFailedToLoad","companyVideoModalOpen","setCompanyVideoModalOpen","videoUrl","uploadCompanyVideo","tooltipPosition","playsInline","onCanPlay","currentTarget","play","layoutStyles","PAGE_SIDE_PADDING","HERO_MEDIA_QUERY","TABLET_SIDE_PADDING","gap","DESKTOP_MEDIA_QUERY","Jumbotron","CompanyStats","CompanyStatItem","IconButtonContainer","CompanyStatItems","MEDIUM_1","numItems","MEDIUM_2","companyDescriptionModalOpen","setCompanyDescriptionModalOpen","fromHref","useHistory","item","isVerified","CompanyDescriptionModal","BLUE_LIGHT_100","TextLink","marketplacePath","font","CompanyLogo","CompanyVideo","maxWidth","HEADING_4_REGULAR","Left","iconSrc","buttonText","withPlainStyles","NEUTRAL_50","onCancel","tooltipContent","InputTooltip","arrowOffsetTop","ul","introduction","research_interests","getRfpOptionFromValue","InputContainer","DropdownNote","OpenCall","OpenCallLabel","OpenCallTooltipContent","interest","isInRfpForm","setTitle","summary","setSummary","keywords","keywordsOptions","setKeywordOptions","rfp_requests","rfps","setRfps","open_call_request","enabled","isOpenCallActive","setIsOpenCallActive","subscription","rfpOptions","sortRfps","CompanyEditForm","updatedInterest","isNewInterest","_await$createCompanyR","createCompanyResearchInterest","keyword","requestForProposalIds","rfp","company_research_interest","company_research_interests","_await$updateCompanyR","updateCompanyResearchInterest","updatedInterestIndex","findIndex","researchInterest","interestsCopy","splice","features","open_calls","is_expired","TOOLTIP_CONTENT","placeholder","KeywordsDropdown","keywordType","targetType","selection","MultiSelectDropdown","noOptionsMessage","Switch","checked","labelLeft","labelRight","MainContent","RfpCardsContainer","RfpCards","ResearchInterestHeader","IconContainer","ResearchInterestSummary","OpenCallCta","hasRfps","isSponsor","isEditing","setIsEditing","seeMoreRfps","setSeeMoreRfps","isDeleteConfirmationModalOpen","setIsDeleteConfirmationModalOpen","history","ResearchInterestInput","isFirstResearchInterest","CompanyCTABanner","area_of_interest","requestForProposals","SimpleConfirmationModal","subHeaderText","onConfirm","_await$deleteCompanyR","deleteCompanyResearchInterest","companyResearchInterestId","confirmButtonText","confirmIconName","theme","renderMarkdownText","slice","RfpCard","TextButton","text","is_open_calls_accessible","interest_title","handleSubmitProposalClick","hasExistingDraft","proposals","proposal","completed","request_id","push","Banner","company_research_interest_id","InfoBanner","DeleteUserPreviewWrapper","IconButtonWrapper","company_page_users","newUserOptions","setNewUserOptions","dropdownOptions","setDropdownOptions","seeMore","setSeeMore","userIdToDelete","setUserIdToDelete","handleUpdate","company_page_user_ids","newCompanyPageUsers","user","handleAddUsers","option","count","sponsor_users","getCompanyMembers","generateEmailDropdownOptions","email","UserDropdown","team","UserPreview","userRole","Divider","license","SponsorLicenseType","PREMIUM","field","setValue","charLimit","handleSubmit","toLowerCase","paper","ContentContainer","CompanyInfo","TopContainer","PartneringInterests","HEADING_2_SEMIBOLD","StartupPrograms","UnclaimedDisclaimer","OurTeam","UnclaimedBox","ORANGE_50","UnclaimedBoxHeader","ReasonsToClaim","ReasonToClaimHeader","ReasonToClaim","useParams","_useSearchParams2","useSearchParams","searchParams","setSearchParams","asLiveView","requestToJoinCompanyNetworkFromDigest","delete","landing","useHubspotCTAs","getCompanyForCompanyPage","request_for_startup_requests","hasResearchInterests","showTeamSection","CompanyPageViewLiveBanner","CompanyPageJumbotron","CompanyTextInput","CompanyResearchInterest","cri","CompanyPageMoreOpportunities","reason","CompanyPageUsers","ACTIVE","date","formatDateToEastern","getFullYear","GREEN_800","GREEN_200","launch_date","ORANGE","ORANGE_300","statusText","includes"],"sourceRoot":""}