{"version":3,"file":"js/participant_social_buttons-76301deb660a5dd56f1c.js","mappings":"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","sources":["webpack://user-interviews/./app/javascript/hooks/use_zod_schema.ts","webpack://user-interviews/./app/javascript/components/dope_form/dope_form.tsx","webpack://user-interviews/./app/javascript/participant/social_buttons/facebook/connect_facebook_button.jsx","webpack://user-interviews/./app/javascript/hooks/use_client_has_rendered.ts","webpack://user-interviews/./app/javascript/participant/social_buttons/linkedin/connect_linkedin_button.jsx","webpack://user-interviews/./app/javascript/participant/social_buttons/linkedin/signup_linkedin_button.jsx","webpack://user-interviews/./app/javascript/participant/social_buttons/facebook/share_facebook_button.jsx","webpack://user-interviews/./app/javascript/participant/social_buttons/facebook/share_facebook_button.module.scss?db0a","webpack://user-interviews/./app/javascript/participant/social_buttons/twitter/share_twitter_button.module.scss?7263","webpack://user-interviews/./app/javascript/participant/social_buttons/twitter/share_twitter_button.tsx","webpack://user-interviews/./app/javascript/components/owner_boundary/context.tsx","webpack://user-interviews/./app/javascript/hooks/use_rails_context.tsx","webpack://user-interviews/./app/javascript/hoc/with_tracked_click.jsx","webpack://user-interviews/./app/javascript/hooks/use_page_title/use_page_title.ts","webpack://user-interviews/./app/javascript/hoc/utils.ts","webpack://user-interviews/./app/javascript/participant/social_buttons/sign_in_or_up_with_social.js","webpack://user-interviews/./app/javascript/hooks/use_csrf.tsx","webpack://user-interviews/./app/javascript/packs/participant_social_buttons.js","webpack://user-interviews/./app/javascript/participant/social_buttons/facebook/signup_facebook_button.jsx","webpack://user-interviews/./app/javascript/hooks/use_error_logger.tsx"],"sourcesContent":["import { useMemo } from 'react';\nimport { type ZodSchema } from 'zod';\nimport { useErrorLogger } from './use_error_logger';\n\n// The goal of this hook is to provide a sane boundary between Typescript\n// and Javascript code. Using this hook with props and a corresponding\n// schema will attempt to parse the unknown into the schema.  In development,\n// this will throw an error on failure. In production, this will swallow the\n// error, while ensuring it is logged to Appsignal.\nexport function useZodSchema<T>(unknownProps: unknown, schema: ZodSchema<T>) {\n  const logError = useErrorLogger();\n\n  return useMemo(() => {\n    if (['development', 'test'].includes(process.env.NODE_ENV ?? '')) {\n      return schema.parse(unknownProps);\n    }\n\n    try {\n      return schema.parse(unknownProps);\n    } catch (error) {\n      logError(error as Error);\n\n      return unknownProps as T;\n    }\n  }, [logError, schema, unknownProps]);\n}\n","import type { ForwardedRef, FormEventHandler, ReactNode } from 'react';\n\nimport React, { forwardRef } from 'react';\nimport { Form } from '@user-interviews/ui-design-system';\nimport { useCSRF } from 'hooks/use_csrf';\n\ntype DopeFormProps = {\n  children?: ReactNode;\n  action?: string;\n  className?: string;\n  id: string;\n  method?: string;\n  multipart?: string;\n  name?: string;\n  onSubmit?: FormEventHandler<HTMLFormElement>;\n};\n\nexport const DopeForm = forwardRef(\n  (\n    { children, ...props }: DopeFormProps,\n    ref: ForwardedRef<HTMLFormElement>,\n  ) => {\n    const { csrfToken, csrfParam } = useCSRF();\n\n    return (\n      <Form {...props} ref={ref}>\n        <input name={csrfParam} type=\"hidden\" value={csrfToken} />\n        {children}\n      </Form>\n    );\n  },\n);\n","import React from 'react';\n\nimport * as propTypes from 'lib/prop_types';\n\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\n\nimport { TrackedButton } from 'common/analytics';\nimport {\n  oauthActions,\n  oauthPath,\n  oauthProviders,\n  oauthUserTypes,\n} from 'common/routing';\nimport { useClientHasRendered } from 'hooks/use_client_has_rendered';\nimport { DopeForm } from 'components/dope_form';\n\nimport { trackingEvents } from 'lib/analytics';\nimport { faFacebook } from 'lib/font_awesome/brands';\n\n// eslint-disable-next-line local-rules/css_modules\nimport './connect_facebook_button.scss';\n\nfunction ConnectFacebookButton({\n  className,\n  buttonText,\n  oauthAction,\n  trackingEvent,\n  returnTo,\n}) {\n  const clientHasRendered = useClientHasRendered();\n\n  return (\n    <DopeForm\n      action={oauthPath({\n        action: oauthAction,\n        provider: oauthProviders.FACEBOOK,\n        returnTo: returnTo || clientHasRendered ? window.location.href : '',\n        userType: oauthUserTypes.PARTICIPANT,\n      })}\n      method=\"post\"\n    >\n      <TrackedButton\n        className={`ConnectFacebookButton btn-sign-in ${className}`}\n        event={trackingEvent}\n        eventData={{ provider: oauthProviders.FACEBOOK }}\n        type=\"submit\"\n        variant=\"brand-facebook\"\n      >\n        <FontAwesomeIcon className=\"icon-left\" icon={faFacebook} />\n        <span className=\"btn-social__divided-content\">{buttonText}</span>\n      </TrackedButton>\n    </DopeForm>\n  );\n}\n\nConnectFacebookButton.propTypes = {\n  buttonText: propTypes.string,\n  className: propTypes.string,\n  oauthAction: propTypes.string,\n  returnTo: propTypes.string,\n  trackingEvent: propTypes.string,\n};\n\nConnectFacebookButton.defaultProps = {\n  buttonText: 'Connect with Facebook',\n  className: '',\n  oauthAction: oauthActions.CONNECT,\n  trackingEvent: trackingEvents.PARTICIPANT_OAUTH_CONNECT_CLICKED,\n};\n\nexport default ConnectFacebookButton;\n","import { useState, useEffect } from 'react';\n\nexport function useClientHasRendered() {\n  const [hasRendered, setHasRendered] = useState(false);\n\n  useEffect(() => {\n    setHasRendered(true);\n  }, []);\n\n  return hasRendered;\n}\n","import React, { useRef, useState } from 'react';\n\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faSpinnerThird } from 'lib/font_awesome/solid';\n\nimport classNames from 'classnames';\n\nimport { TrackedButton } from 'common/analytics';\nimport { useClientHasRendered } from 'hooks/use_client_has_rendered';\nimport { DopeForm } from 'components/dope_form';\nimport {\n  oauthActions,\n  oauthPath,\n  oauthProviders,\n  oauthUserTypes,\n} from 'common/routing';\n\nimport { faLinkedinIn } from 'lib/font_awesome/brands';\nimport * as propTypes from 'lib/prop_types';\nimport { trackingEvents } from 'lib/analytics';\n\n// eslint-disable-next-line local-rules/css_modules\nimport './connect_linkedin_button.scss';\n\nfunction ConnectLinkedInButton({\n  className,\n  buttonText,\n  oauthAction,\n  trackingEvent,\n  returnTo,\n  onBeforeSubmit,\n}) {\n  const clientHasRendered = useClientHasRendered();\n  const formRef = useRef(null);\n  const [isSubmitting, setIsSubmitting] = useState(false);\n\n  const handleSubmit = async (event) => {\n    event.preventDefault();\n    setIsSubmitting(true);\n\n    const ableToSubmit = await onBeforeSubmit();\n\n    if (ableToSubmit) {\n      formRef.current.submit();\n    }\n\n    setIsSubmitting(false);\n  };\n\n  return (\n    <div>\n      <DopeForm\n        action={oauthPath({\n          action: oauthAction,\n          provider: oauthProviders.LINKEDIN,\n          returnTo: returnTo || clientHasRendered ? window.location.href : '',\n          userType: oauthUserTypes.PARTICIPANT,\n        })}\n        method=\"post\"\n        ref={formRef}\n        onSubmit={handleSubmit}\n      >\n        <TrackedButton\n          className={`ConnectLinkedInButton btn-sign-in ${className}`}\n          disabled={isSubmitting}\n          event={trackingEvent}\n          eventData={{ provider: oauthProviders.LINKEDIN }}\n          type=\"submit\"\n          variant=\"brand-linkedin\"\n        >\n          <FontAwesomeIcon\n            className={classNames('icon-left', {\n              'fa-spin': isSubmitting,\n            })}\n            icon={isSubmitting ? faSpinnerThird : faLinkedinIn}\n          />\n          <span className=\"btn-social__divided-content\">{buttonText}</span>\n        </TrackedButton>\n      </DopeForm>\n    </div>\n  );\n}\n\nConnectLinkedInButton.propTypes = {\n  buttonText: propTypes.string,\n  className: propTypes.string,\n  oauthAction: propTypes.string,\n  returnTo: propTypes.string,\n  trackingEvent: propTypes.string,\n  onBeforeSubmit: propTypes.func,\n};\n\nConnectLinkedInButton.defaultProps = {\n  buttonText: 'Connect with LinkedIn',\n  className: '',\n  oauthAction: oauthActions.CONNECT,\n  trackingEvent: trackingEvents.PARTICIPANT_OAUTH_CONNECT_CLICKED,\n  onBeforeSubmit: () => true,\n};\n\nexport default ConnectLinkedInButton;\n","import React from 'react';\n\nimport * as propTypes from 'lib/prop_types';\nimport { useClientHasRendered } from 'hooks/use_client_has_rendered';\n\nimport signInOrUpWithSocial from '../sign_in_or_up_with_social';\n\nimport ConnectLinkedInButton from './connect_linkedin_button';\n\nfunction SignupLinkedInButton({ className, returnTo, signIn }) {\n  const clientHasRendered = useClientHasRendered();\n  const { buttonText, oauthAction, trackingEventName } =\n    signInOrUpWithSocial(signIn);\n\n  return (\n    <ConnectLinkedInButton\n      buttonText={`${buttonText} with LinkedIn`}\n      className={className}\n      oauthAction={oauthAction}\n      returnTo={returnTo || clientHasRendered ? window.location.href : null}\n      trackingEvent={trackingEventName}\n    />\n  );\n}\n\nSignupLinkedInButton.propTypes = {\n  className: propTypes.string,\n  returnTo: propTypes.string,\n  signIn: propTypes.bool,\n};\n\nSignupLinkedInButton.defaultProps = {\n  className: null,\n  signIn: false,\n};\n\nexport default SignupLinkedInButton;\n","import React from 'react';\n\nimport * as propTypes from 'lib/prop_types';\n\nimport { Button } from '@user-interviews/ui-design-system';\nimport { TrackedAnchor } from 'common/analytics';\nimport { trackingEvents } from 'lib/analytics';\nimport { faFacebook } from 'lib/font_awesome/brands';\n\n// eslint-disable-next-line local-rules/css_modules\nimport * as styles from './share_facebook_button.module.scss';\n\nconst popUpFeatures =\n  'toolbar=no,' +\n  'location=0,status=no,' +\n  'menubar=no,scrollbars=yes,' +\n  'resizable=yes,width=600,' +\n  'height=350';\n\nfunction ShareFacebookButton({ btnText, href }) {\n  const handleClick = (event) => {\n    event.preventDefault();\n    window.open(href, 'targetWindow', popUpFeatures);\n    return false;\n  };\n\n  return (\n    <TrackedAnchor\n      event={trackingEvents.FACEBOOK_SHARE_BUTTON_CLICKED}\n      href={href}\n      rel=\"noopener noreferrer\"\n      target=\"_blank\"\n      onClick={handleClick}\n    >\n      <Button\n        className={styles.shareFacebookButton}\n        leadingIcon={faFacebook}\n        variant=\"brand-facebook\"\n      >\n        {btnText}\n      </Button>\n    </TrackedAnchor>\n  );\n}\n\nShareFacebookButton.propTypes = {\n  btnText: propTypes.string,\n  href: propTypes.string.isRequired,\n};\n\nexport default ShareFacebookButton;\n","// extracted by mini-css-extract-plugin\nvar _1 = \"zI0FlCRxobn1yOxqbes5\";\nvar _2 = \"xvXtujBN4RzYmKKY2FJm\";\nvar _3 = \"vT7Y0WKolyZTofKcF_dJ\";\nvar _4 = \"OgvyU3Xg5jojDZZPRX1K\";\nvar _5 = \"DXOUWqhyPWpO_znpsCgB\";\nvar _6 = \"gW33esD2LjHZ1eOC_5x0\";\nvar _7 = \"j_VYIUk3Xf0TNF3LsOe5\";\nvar _8 = \"dBjEUtSh6yQuh5VaGrxa\";\nvar _9 = \"w1mFdZaTMVB4Alhyl0rD\";\nvar _a = \"muKN43D7pXVkKiFKU4DT\";\nvar _b = \"UQxKWvKj_7QQdqAc6Dpj\";\nvar _c = \"QajCu0hc8SSUKD1kWptQ\";\nvar _d = \"oI7Kt2t_UJ65ZYLoFXgG\";\nvar _e = \"PQIGWj85xFfN8PZr9Z4C\";\nvar _f = \"uzC5RPnV5SHOSDNaxe2u\";\nvar _10 = \"w0Wh8_IOgzDHP8h1Gx_V\";\nvar _11 = \"SWHLdglx7AorKa5uJTta\";\nexport { _1 as \"ApplySuccessCard__detail__date\", _2 as \"BillingInfoCard__column\", _3 as \"CopyToClipboard\", _4 as \"DataConsentNotice__content__preview__body\", _5 as \"MessageList__message__timestamp\", _6 as \"ParticipantProfile__participant-details__attribute-value\", _7 as \"ProjectCustomEmailSets\", _8 as \"ProjectListItem__status-date\", _9 as \"ProjectListing__detail\", _a as \"ProjectListing__details\", _b as \"TeamMemberInviterForm__section__invite-via-link\", _c as \"UnmoderatedTask__deadline\", _d as \"btn-link--neutral\", _e as \"btn-outline-secondary\", _f as \"participant-dashboard__project__info__status__string\", _10 as \"schedule-project-participant-page__time-slots\", _11 as \"shareFacebookButton\" }\n","// extracted by mini-css-extract-plugin\nvar _1 = \"PKFx6yttg8bzLsJqZz_A\";\nvar _2 = \"FEyhgPzKKtOwX4N2HflH\";\nvar _3 = \"sCOzJnsdxaBuaH_T0Fwj\";\nvar _4 = \"_7hqclHBoLRXhvU0Y_Md\";\nvar _5 = \"u4he2spVciFiWcSmmsxB\";\nvar _6 = \"mnsR8K9tloitGOpelTCz\";\nvar _7 = \"Xh3ikEJ_pbmyujtid5ZN\";\nvar _8 = \"tHcVM2HCQvHYBOPoMndf\";\nvar _9 = \"omLkVZkpOQ9uMn_7Uyez\";\nvar _a = \"M9ggLhoeLqsKMmAwhQZr\";\nvar _b = \"mErgneij6b75_VhJelhv\";\nvar _c = \"z_AC6jnmnS64uRKHmxvU\";\nvar _d = \"OceteHYEDTGaedmWr8H2\";\nvar _e = \"qPPIlGNqlNFsHBTuZ7xA\";\nvar _f = \"Zks0NtDA_JAe8s9N3q6L\";\nvar _10 = \"PjzXVFNSE9ifZTGCtzIk\";\nvar _11 = \"BZQveYtujOjLUhgUdYVw\";\nexport { _1 as \"ApplySuccessCard__detail__date\", _2 as \"BillingInfoCard__column\", _3 as \"CopyToClipboard\", _4 as \"DataConsentNotice__content__preview__body\", _5 as \"MessageList__message__timestamp\", _6 as \"ParticipantProfile__participant-details__attribute-value\", _7 as \"ProjectCustomEmailSets\", _8 as \"ProjectListItem__status-date\", _9 as \"ProjectListing__detail\", _a as \"ProjectListing__details\", _b as \"TeamMemberInviterForm__section__invite-via-link\", _c as \"UnmoderatedTask__deadline\", _d as \"btn-link--neutral\", _e as \"btn-outline-secondary\", _f as \"participant-dashboard__project__info__status__string\", _10 as \"schedule-project-participant-page__time-slots\", _11 as \"shareTwitterButton\" }\n","import React, { type MouseEvent } from 'react';\nimport { z } from 'zod';\nimport { Button } from '@user-interviews/ui-design-system';\nimport { TrackedAnchor } from 'common/analytics';\nimport { trackingEvents } from 'lib/analytics';\nimport { faXTwitter } from 'lib/font_awesome/brands';\nimport { useZodSchema } from 'hooks/use_zod_schema';\n\n// eslint-disable-next-line local-rules/css_modules\nimport * as styles from './share_twitter_button.module.scss';\n\nconst popUpFeatures =\n  'toolbar=no,' +\n  'location=0,status=no,' +\n  'menubar=no,scrollbars=yes,' +\n  'resizable=yes,width=600,' +\n  'height=350';\n\nconst ShareTwitterButtonSchema = z.object({\n  btnText: z.string().optional(),\n  href: z.string().url(),\n});\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function ShareTwitterButton(props: any) {\n  const { btnText, href } = useZodSchema(props, ShareTwitterButtonSchema);\n\n  const handleClick = (event: MouseEvent) => {\n    event.preventDefault();\n    window.open(href, 'targetWindow', popUpFeatures);\n    return false;\n  };\n\n  return (\n    <TrackedAnchor\n      event={trackingEvents.TWITTER_SHARE_BUTTON_CLICKED}\n      href={href}\n      rel=\"noopener noreferrer\"\n      target=\"_blank\"\n      onClick={handleClick}\n    >\n      <Button\n        className={styles.shareTwitterButton}\n        leadingIcon={faXTwitter}\n        variant=\"brand-twitter\"\n      >\n        {btnText}\n      </Button>\n    </TrackedAnchor>\n  );\n}\n","import React, {\n  createContext,\n  useMemo,\n  useContext,\n  type ReactNode,\n} from 'react';\nimport { type JSClient } from '@appsignal/types';\nimport { Ownership } from 'lib/generated_constants/ownership';\n\nconst OwnershipContext = createContext<{\n  owner: Ownership | 'frontend';\n  logError: (error: Error) => void;\n} | null>(null);\n\ntype OwnershipProviderProps = {\n  owner: Ownership | 'frontend';\n  appsignal: JSClient | null;\n  children: ReactNode;\n};\n\nfunction fallbackErrorLogger(error: Error) {\n  // eslint-disable-next-line no-console\n  console.error(error);\n}\n\nexport function OwnershipProvider({\n  owner,\n  appsignal,\n  children,\n}: OwnershipProviderProps) {\n  const contextValue = useMemo(\n    () => ({\n      owner,\n      logError: appsignal ? appsignal.sendError : fallbackErrorLogger,\n    }),\n    [appsignal, owner],\n  );\n\n  return (\n    <OwnershipContext.Provider value={contextValue}>\n      {children}\n    </OwnershipContext.Provider>\n  );\n}\n\nexport function useOwnershipContext() {\n  const ownershipContext = useContext(OwnershipContext);\n  const logError = useMemo(\n    () => (ownershipContext ? ownershipContext.logError : () => {}),\n    [ownershipContext],\n  );\n\n  if (!ownershipContext) {\n    return {\n      owner: 'frontend' as const,\n      logError,\n    };\n  }\n\n  return ownershipContext;\n}\n","import React, {\n  useMemo,\n  useContext,\n  createContext,\n  type ReactNode,\n} from 'react';\nimport { z } from 'zod';\n\nimport { customContextSchema } from 'lib/react_on_rails/custom_context_schema';\n\ntype ReactOnRailsContext = z.infer<typeof customContextSchema>;\n\nexport type RailsContextValue = {\n  env: ReactOnRailsContext['env'];\n  request: {\n    csrfParam: ReactOnRailsContext['request']['csrfParam'];\n    csrfToken: ReactOnRailsContext['request']['csrfToken'];\n    location: ReactOnRailsContext['location'];\n  };\n  uiState: ReactOnRailsContext['uiState'];\n  user: ReactOnRailsContext['user'];\n};\n\nexport const RailsContext = createContext<RailsContextValue | null>(null);\n\nexport function useRailsContext() {\n  const ctx = useContext(RailsContext);\n\n  if (!ctx) return null;\n\n  return ctx;\n}\n\ntype RailsContextProviderProps = {\n  railsContext: unknown;\n  children: ReactNode;\n};\n\nexport function RailsContextProvider({\n  railsContext,\n  children,\n}: RailsContextProviderProps) {\n  const { env, location, request, uiState, user } =\n    customContextSchema.parse(railsContext);\n\n  const contextValue = useMemo(\n    () => ({\n      env,\n      request: {\n        ...request,\n        location,\n      },\n      uiState,\n      user,\n    }),\n    [env, location, request, uiState, user],\n  );\n\n  return (\n    <RailsContext.Provider value={contextValue}>\n      {children}\n    </RailsContext.Provider>\n  );\n}\n","import React, { Component } from 'react';\n\nimport { track, trackingPropsShape } from 'lib/analytics';\nimport * as propTypes from 'lib/prop_types';\n\nimport { getDisplayName } from './utils';\n\nexport default function withTrackedClick(Target) {\n  class TrackedComponent extends Component {\n    static displayName = `${getDisplayName(Target)}WithTrackedClick`;\n\n    static propTypes = {\n      event: propTypes.string.isRequired,\n      eventData: propTypes.object,\n      onClick: propTypes.func,\n      ...trackingPropsShape,\n    };\n\n    static defaultProps = {\n      eventData: {},\n    };\n\n    handleClick = (event) => {\n      this.props.tracking.trackEvent({\n        ...this.props.eventData,\n        event: this.props.event,\n      });\n\n      if (this.props.onClick) {\n        this.props.onClick(event);\n      }\n    };\n\n    get targetProps() {\n      const transferProps = { ...this.props };\n\n      // Need to remove eventData, otherwise child props complain about:\n      // https://reactjs.org/warnings/unknown-prop.html\n      delete transferProps.eventData;\n\n      return {\n        ...transferProps,\n        onClick: this.handleClick,\n      };\n    }\n\n    render() {\n      return <Target {...this.targetProps} />;\n    }\n  }\n\n  return track()(TrackedComponent);\n}\n","import { useEffect } from 'react';\n\nconst UPDATE_PAGE_TITLE_EVENT = 'updatePageTitle';\n\n/**\n * Used to trigger event to update html title\n */\nexport function triggerUsePageTitleUpdate(newTitle?: string) {\n  const event = new CustomEvent(UPDATE_PAGE_TITLE_EVENT, {\n    detail: { title: newTitle },\n  });\n  window.dispatchEvent(event);\n}\n\n/**\n * Hook that adds event listener to update html title\n * and updates the title whenever UPDATE_PAGE_TITLE_EVENT is sent\n */\nexport function usePageTitle(initialTitle?: string) {\n  useEffect(() => {\n    const updateTitle = (event: CustomEvent) => {\n      const newTitle = event.detail.title || initialTitle;\n      document.title = newTitle\n        ? `${newTitle} | User Interviews`\n        : 'User Interviews';\n    };\n\n    window.addEventListener(\n      UPDATE_PAGE_TITLE_EVENT,\n      updateTitle as EventListener,\n    );\n    // Dispatch event on mount to set the initial title\n    triggerUsePageTitleUpdate();\n\n    return () => {\n      window.removeEventListener(\n        UPDATE_PAGE_TITLE_EVENT,\n        updateTitle as EventListener,\n      );\n    };\n  }, [initialTitle]);\n}\n","import type { ComponentType } from 'react';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function getDisplayName(WrappedComponent: ComponentType<any>) {\n  return WrappedComponent.displayName || WrappedComponent.name || 'Component';\n}\n","import { trackingEvents } from 'lib/analytics';\n\nimport { oauthActions } from 'common/routing';\n\nconst signInOrUpWithSocial = (signIn) => {\n  const buttonText = signIn ? 'Sign in' : 'Sign up';\n  const oauthAction = signIn ? oauthActions.SIGNIN : oauthActions.SIGNUP;\n  const trackingEventName = signIn\n    ? trackingEvents.PARTICIPANT_OAUTH_SIGNIN_CLICKED\n    : trackingEvents.PARTICIPANT_OAUTH_SIGNUP_CLICKED;\n\n  return {\n    buttonText,\n    oauthAction,\n    trackingEventName,\n  };\n};\n\nexport default signInOrUpWithSocial;\n","import { useState, useEffect } from 'react';\n\nimport { isServer } from 'lib/ssr_utils';\nimport { useClientHasRendered } from './use_client_has_rendered';\nimport { useRailsContext } from './use_rails_context';\n\nfunction getMetaContent(name: string) {\n  if (isServer) return '';\n\n  return (\n    document.querySelector(`meta[name=\"${name}\"]`)?.getAttribute('content') ??\n    ''\n  );\n}\n\nexport function useCSRF() {\n  const railsContext = useRailsContext();\n  const clientHasRendered = useClientHasRendered();\n  const [csrfParam, setCsrfParam] = useState(\n    () => railsContext?.request?.csrfParam ?? '',\n  );\n  const [csrfToken, setCsrfToken] = useState(\n    () => railsContext?.request?.csrfToken ?? '',\n  );\n\n  useEffect(() => {\n    if (!clientHasRendered) return;\n\n    if (!csrfParam) setCsrfParam(getMetaContent('csrf-param'));\n    if (!csrfToken) setCsrfToken(getMetaContent('csrf-token'));\n  }, [clientHasRendered, csrfParam, csrfToken]);\n\n  return { csrfToken, csrfParam };\n}\n","import { registerComponent } from 'lib/react_on_rails';\nimport {\n  ConnectFacebookButton,\n  ShareFacebookButton,\n  ConnectLinkedInButton,\n  ShareTwitterButton,\n  SignupFacebookButton,\n  SignupLinkedInButton,\n} from 'participant/social_buttons';\n\nregisterComponent('ConnectFacebookButton', ConnectFacebookButton);\nregisterComponent('ConnectLinkedInButton', ConnectLinkedInButton);\nregisterComponent('ShareFacebookButton', ShareFacebookButton);\nregisterComponent('ShareTwitterButton', ShareTwitterButton);\nregisterComponent('SignupFacebookButton', SignupFacebookButton);\nregisterComponent('SignupLinkedInButton', SignupLinkedInButton);\n","import React from 'react';\n\nimport * as propTypes from 'lib/prop_types';\nimport { useClientHasRendered } from 'hooks/use_client_has_rendered';\n\nimport signInOrUpWithSocial from '../sign_in_or_up_with_social';\n\nimport ConnectFacebookButton from './connect_facebook_button';\n\nfunction SignupFacebookButton({ className, returnTo, signIn }) {\n  const clientHasRendered = useClientHasRendered();\n  const { buttonText, oauthAction, trackingEventName } =\n    signInOrUpWithSocial(signIn);\n\n  return (\n    <ConnectFacebookButton\n      buttonText={`${buttonText} with Facebook`}\n      className={className}\n      oauthAction={oauthAction}\n      returnTo={returnTo || clientHasRendered ? window.location.href : ''}\n      trackingEvent={trackingEventName}\n    />\n  );\n}\n\nSignupFacebookButton.propTypes = {\n  className: propTypes.string,\n  returnTo: propTypes.string,\n  signIn: propTypes.bool,\n};\n\nSignupFacebookButton.defaultProps = {\n  className: null,\n  signIn: false,\n};\n\nexport default SignupFacebookButton;\n","import { useCallback } from 'react';\nimport { useOwnershipContext } from 'components/owner_boundary/context';\nimport { useRailsContext } from './use_rails_context';\n\nconst errorMessages = new Map<string, number>();\n\nexport function useErrorLogger() {\n  const ctx = useRailsContext();\n  const expirationSeconds =\n    ctx?.env.APPSIGNAL_JS_ERROR_LOG_EXPIRATION_SECONDS ?? 30;\n\n  const { logError } = useOwnershipContext();\n\n  return useCallback(\n    (error: Error) => {\n      const lastLoggedAt = errorMessages.get(error.message);\n      const now = Date.now();\n\n      if (!lastLoggedAt || now - lastLoggedAt > expirationSeconds * 1000) {\n        logError(error);\n        errorMessages.set(error.message, Date.now());\n      }\n    },\n    [expirationSeconds, logError],\n  );\n}\n"],"names":["useZodSchema","unknownProps","schema","logError","useErrorLogger","useMemo","includes","process","parse","error","DopeForm","forwardRef","_ref","ref","children","props","_objectWithoutProperties","_excluded","_useCSRF","useCSRF","csrfToken","csrfParam","React","Form","Object","assign","name","type","value","ConnectFacebookButton","className","buttonText","oauthAction","trackingEvent","returnTo","clientHasRendered","useClientHasRendered","action","oauthPath","provider","oauthProviders","FACEBOOK","window","location","href","userType","oauthUserTypes","PARTICIPANT","method","TrackedButton","event","eventData","variant","FontAwesomeIcon","icon","faFacebook","propTypes","defaultProps","oauthActions","CONNECT","trackingEvents","PARTICIPANT_OAUTH_CONNECT_CLICKED","_useState2","useState","hasRendered","setHasRendered","useEffect","ConnectLinkedInButton","onBeforeSubmit","formRef","useRef","isSubmitting","setIsSubmitting","LINKEDIN","onSubmit","async","preventDefault","current","submit","disabled","classNames","faSpinnerThird","faLinkedinIn","SignupLinkedInButton","signIn","_signInOrUpWithSocial","signInOrUpWithSocial","trackingEventName","ShareFacebookButton","btnText","TrackedAnchor","FACEBOOK_SHARE_BUTTON_CLICKED","rel","target","onClick","open","Button","leadingIcon","isRequired","popUpFeatures","ShareTwitterButtonSchema","z","object","string","optional","url","ShareTwitterButton","_useZodSchema","TWITTER_SHARE_BUTTON_CLICKED","styles","faXTwitter","OwnershipContext","createContext","fallbackErrorLogger","console","OwnershipProvider","owner","appsignal","contextValue","sendError","Provider","useOwnershipContext","ownershipContext","useContext","RailsContext","useRailsContext","RailsContextProvider","railsContext","_customContextSchema$","customContextSchema","env","request","uiState","user","_objectSpread","withTrackedClick","Target","TrackedComponent","Component","constructor","args","handleClick","this","tracking","trackEvent","targetProps","transferProps","render","displayName","getDisplayName","trackingPropsShape","track","UPDATE_PAGE_TITLE_EVENT","triggerUsePageTitleUpdate","newTitle","CustomEvent","detail","title","dispatchEvent","usePageTitle","initialTitle","updateTitle","document","addEventListener","removeEventListener","WrappedComponent","SIGNIN","SIGNUP","PARTICIPANT_OAUTH_SIGNIN_CLICKED","PARTICIPANT_OAUTH_SIGNUP_CLICKED","getMetaContent","isServer","querySelector","getAttribute","_slicedToArray","setCsrfParam","_useState4","setCsrfToken","registerComponent","SignupFacebookButton","errorMessages","Map","ctx","expirationSeconds","APPSIGNAL_JS_ERROR_LOG_EXPIRATION_SECONDS","useCallback","lastLoggedAt","get","message","now","Date","set"],"sourceRoot":""}