@clerk/ui 1.0.0-snapshot.v20251208202852 → 1.0.0-snapshot.v20251215203425

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (234) hide show
  1. package/dist/{207_ui_03abd0_1.0.0-snapshot.v20251208202852.js → 207_ui_e1841e_1.0.0-snapshot.v20251215203425.js} +1 -1
  2. package/dist/{217_ui_03abd0_1.0.0-snapshot.v20251208202852.js → 217_ui_e1841e_1.0.0-snapshot.v20251215203425.js} +1 -1
  3. package/dist/{360_ui_03abd0_1.0.0-snapshot.v20251208202852.js → 360_ui_e1841e_1.0.0-snapshot.v20251215203425.js} +1 -1
  4. package/dist/{444_ui_03abd0_1.0.0-snapshot.v20251208202852.js → 444_ui_e1841e_1.0.0-snapshot.v20251215203425.js} +1 -1
  5. package/dist/{573_ui_03abd0_1.0.0-snapshot.v20251208202852.js → 573_ui_e1841e_1.0.0-snapshot.v20251215203425.js} +1 -1
  6. package/dist/{970_ui_03abd0_1.0.0-snapshot.v20251208202852.js → 970_ui_e1841e_1.0.0-snapshot.v20251215203425.js} +1 -1
  7. package/dist/ClerkUi.js +2 -2
  8. package/dist/Components.js +7 -0
  9. package/dist/Components.js.map +1 -1
  10. package/dist/{apiKeys_ui_03abd0_1.0.0-snapshot.v20251208202852.js → apiKeys_ui_e1841e_1.0.0-snapshot.v20251215203425.js} +1 -1
  11. package/dist/{checkout_ui_03abd0_1.0.0-snapshot.v20251208202852.js → checkout_ui_e1841e_1.0.0-snapshot.v20251215203425.js} +2 -2
  12. package/dist/common/EmailLinkVerify.js +1 -1
  13. package/dist/common/Gate.js +1 -1
  14. package/dist/common/RemoveResourceForm.js +1 -1
  15. package/dist/common/SSOCallback.js +1 -1
  16. package/dist/common/withRedirect.js +1 -1
  17. package/dist/components/APIKeys/APIKeys.js +1 -1
  18. package/dist/components/APIKeys/RevokeAPIKeyConfirmationModal.js +1 -1
  19. package/dist/components/Checkout/CheckoutComplete.js +1 -1
  20. package/dist/components/Checkout/CheckoutForm.js +1 -1
  21. package/dist/components/Checkout/CheckoutPage.js +1 -1
  22. package/dist/components/Checkout/parts.js +1 -1
  23. package/dist/components/CreateOrganization/CreateOrganizationForm.js +1 -1
  24. package/dist/components/CreateOrganization/CreateOrganizationPage.js +1 -1
  25. package/dist/components/ImpersonationFab/index.js +1 -1
  26. package/dist/components/OAuthConsent/OAuthConsent.js +1 -1
  27. package/dist/components/OrganizationList/UserInvitationList.js +1 -1
  28. package/dist/components/OrganizationList/UserMembershipList.js +1 -1
  29. package/dist/components/OrganizationList/UserSuggestionList.js +1 -1
  30. package/dist/components/OrganizationProfile/ActionConfirmationPage.js +1 -1
  31. package/dist/components/OrganizationProfile/ActiveMembersList.js +1 -1
  32. package/dist/components/OrganizationProfile/AddDomainForm.js +1 -1
  33. package/dist/components/OrganizationProfile/DomainList.js +1 -1
  34. package/dist/components/OrganizationProfile/InviteMembersForm.js +3 -3
  35. package/dist/components/OrganizationProfile/InviteMembersForm.js.map +1 -1
  36. package/dist/components/OrganizationProfile/InviteMembersScreen.js +1 -1
  37. package/dist/components/OrganizationProfile/InvitedMembersList.js +1 -1
  38. package/dist/components/OrganizationProfile/MembersSearch.js.map +1 -1
  39. package/dist/components/OrganizationProfile/OrganizationAPIKeysPage.js +1 -1
  40. package/dist/components/OrganizationProfile/OrganizationGeneralPage.js +1 -1
  41. package/dist/components/OrganizationProfile/OrganizationMembers.js +1 -1
  42. package/dist/components/OrganizationProfile/OrganizationProfileNavbar.js +1 -1
  43. package/dist/components/OrganizationProfile/ProfileForm.js +1 -1
  44. package/dist/components/OrganizationProfile/RemoveDomainForm.js +1 -1
  45. package/dist/components/OrganizationProfile/RequestToJoinList.js +1 -1
  46. package/dist/components/OrganizationProfile/VerifiedDomainForm.js +1 -1
  47. package/dist/components/OrganizationProfile/VerifyDomainForm.js +1 -1
  48. package/dist/components/OrganizationProfile/index.js +1 -1
  49. package/dist/components/OrganizationSwitcher/OrganizationSwitcherPopover.js +6 -3
  50. package/dist/components/OrganizationSwitcher/OrganizationSwitcherPopover.js.map +1 -1
  51. package/dist/components/OrganizationSwitcher/OrganizationSwitcherTrigger.js +1 -1
  52. package/dist/components/OrganizationSwitcher/UserInvitationSuggestionList.js +1 -1
  53. package/dist/components/OrganizationSwitcher/UserMembershipList.js +1 -1
  54. package/dist/components/PaymentMethods/AddPaymentMethod.js +1 -1
  55. package/dist/components/PaymentMethods/PaymentMethods.js +1 -1
  56. package/dist/components/PricingTable/PricingTable.js +3 -2
  57. package/dist/components/PricingTable/PricingTable.js.map +1 -1
  58. package/dist/components/PricingTable/PricingTableDefault.js +1 -1
  59. package/dist/components/SessionTasks/index.js +1 -1
  60. package/dist/components/SessionTasks/tasks/TaskChooseOrganization/ChooseOrganizationScreen.js +1 -1
  61. package/dist/components/SessionTasks/tasks/TaskChooseOrganization/CreateOrganizationScreen.js +1 -1
  62. package/dist/components/SessionTasks/tasks/TaskChooseOrganization/index.js +1 -1
  63. package/dist/components/SessionTasks/tasks/TaskResetPassword/index.js +2 -2
  64. package/dist/components/SessionTasks/tasks/TaskResetPassword/index.js.map +1 -1
  65. package/dist/components/SignIn/ResetPassword.js +1 -0
  66. package/dist/components/SignIn/ResetPassword.js.map +1 -1
  67. package/dist/components/SignIn/SignInClientTrust.js +49 -0
  68. package/dist/components/SignIn/SignInClientTrust.js.map +1 -0
  69. package/dist/components/SignIn/SignInFactorOne.js +1 -1
  70. package/dist/components/SignIn/SignInFactorOneAlternativeChannelCodeForm.js +1 -1
  71. package/dist/components/SignIn/SignInFactorOneCodeForm.js +1 -1
  72. package/dist/components/SignIn/SignInFactorOneEmailLinkCard.js +1 -1
  73. package/dist/components/SignIn/SignInFactorOnePasswordCard.js +4 -3
  74. package/dist/components/SignIn/SignInFactorOnePasswordCard.js.map +1 -1
  75. package/dist/components/SignIn/SignInFactorTwo.js +3 -22
  76. package/dist/components/SignIn/SignInFactorTwo.js.map +1 -1
  77. package/dist/components/SignIn/SignInFactorTwoBackupCodeCard.js +1 -1
  78. package/dist/components/SignIn/SignInFactorTwoCodeForm.js +3 -3
  79. package/dist/components/SignIn/SignInFactorTwoCodeForm.js.map +1 -1
  80. package/dist/components/SignIn/SignInFactorTwoEmailLinkCard.js +2 -2
  81. package/dist/components/SignIn/SignInFactorTwoEmailLinkCard.js.map +1 -1
  82. package/dist/components/SignIn/SignInSocialButtons.js +1 -1
  83. package/dist/components/SignIn/SignInStart.js +3 -1
  84. package/dist/components/SignIn/SignInStart.js.map +1 -1
  85. package/dist/components/SignIn/index.js +6 -1
  86. package/dist/components/SignIn/index.js.map +1 -1
  87. package/dist/components/SignIn/shared.js +1 -1
  88. package/dist/components/SignIn/useSecondFactorSelection.js +35 -0
  89. package/dist/components/SignIn/useSecondFactorSelection.js.map +1 -0
  90. package/dist/components/SignUp/SignUpContinue.js +1 -1
  91. package/dist/components/SignUp/SignUpEmailLinkCard.js +1 -1
  92. package/dist/components/SignUp/SignUpRestrictedAccess.js +1 -1
  93. package/dist/components/SignUp/SignUpSocialButtons.js +1 -1
  94. package/dist/components/SignUp/SignUpStart.js +1 -1
  95. package/dist/components/SignUp/SignUpVerificationCodeForm.js +1 -1
  96. package/dist/components/SignUp/index.js +1 -1
  97. package/dist/components/SubscriptionDetails/index.js +1 -1
  98. package/dist/components/UserButton/UserButtonPopover.js +1 -1
  99. package/dist/components/UserButton/UserButtonTopLevelIdentifier.js +1 -1
  100. package/dist/components/UserButton/UserButtonTrigger.js +1 -1
  101. package/dist/components/UserButton/useMultisessionActions.js +7 -2
  102. package/dist/components/UserButton/useMultisessionActions.js.map +1 -1
  103. package/dist/components/UserProfile/APIKeysPage.js +1 -1
  104. package/dist/components/UserProfile/AccountPage.js +1 -1
  105. package/dist/components/UserProfile/ActiveDevicesSection.js +1 -1
  106. package/dist/components/UserProfile/AddAuthenticatorApp.js +1 -1
  107. package/dist/components/UserProfile/ConnectedAccountsMenu.js +1 -1
  108. package/dist/components/UserProfile/ConnectedAccountsSection.js +1 -1
  109. package/dist/components/UserProfile/DeleteUserForm.js +1 -1
  110. package/dist/components/UserProfile/EmailForm.js +1 -1
  111. package/dist/components/UserProfile/EmailsSection.js +1 -1
  112. package/dist/components/UserProfile/EnterpriseAccountsSection.js +1 -1
  113. package/dist/components/UserProfile/MfaBackupCodeCreateForm.js +1 -1
  114. package/dist/components/UserProfile/MfaBackupCodeList.js +1 -1
  115. package/dist/components/UserProfile/MfaForm.js +1 -1
  116. package/dist/components/UserProfile/MfaPhoneCodeScreen.js +1 -1
  117. package/dist/components/UserProfile/MfaSection.js +1 -1
  118. package/dist/components/UserProfile/PasskeySection.js +1 -1
  119. package/dist/components/UserProfile/PasswordForm.js +2 -1
  120. package/dist/components/UserProfile/PasswordForm.js.map +1 -1
  121. package/dist/components/UserProfile/PasswordSection.js +1 -1
  122. package/dist/components/UserProfile/PhoneForm.js +1 -1
  123. package/dist/components/UserProfile/PhoneSection.js +1 -1
  124. package/dist/components/UserProfile/ProfileForm.js +1 -1
  125. package/dist/components/UserProfile/RemoveResourceForm.js +1 -1
  126. package/dist/components/UserProfile/SecurityPage.js +1 -1
  127. package/dist/components/UserProfile/UserProfileSection.js +1 -1
  128. package/dist/components/UserProfile/UsernameForm.js +1 -1
  129. package/dist/components/UserProfile/UsernameSection.js +1 -1
  130. package/dist/components/UserProfile/VerifyTOTP.js +1 -1
  131. package/dist/components/UserProfile/Web3Form.js +1 -1
  132. package/dist/components/UserProfile/Web3Section.js +1 -1
  133. package/dist/components/UserVerification/UVFactorOneCodeForm.js +1 -1
  134. package/dist/components/UserVerification/UVFactorOnePasskeysCard.js +1 -1
  135. package/dist/components/UserVerification/UVFactorTwoBackupCodeCard.js +1 -1
  136. package/dist/components/UserVerification/UVFactorTwoCodeForm.js +1 -1
  137. package/dist/components/UserVerification/UVFactorTwoPhoneCodeCard.js +1 -1
  138. package/dist/components/UserVerification/UserVerificationFactorOnePassword.js +1 -1
  139. package/dist/components/UserVerification/UserVerificationFactorTwo.js +4 -20
  140. package/dist/components/UserVerification/UserVerificationFactorTwo.js.map +1 -1
  141. package/dist/components/UserVerification/useUserVerificationSession.js +1 -1
  142. package/dist/components/Waitlist/WaitlistForm.js +1 -1
  143. package/dist/components/Waitlist/index.js +1 -1
  144. package/dist/components/devPrompts/EnableOrganizationsPrompt/index.js +1 -1
  145. package/dist/components/devPrompts/KeylessPrompt/index.js +1 -1
  146. package/dist/contexts/CoreClerkContextWrapper.js +1 -1
  147. package/dist/contexts/CoreSessionContext.js +1 -1
  148. package/dist/contexts/CoreUserContext.js +1 -1
  149. package/dist/{createorganization_ui_03abd0_1.0.0-snapshot.v20251208202852.js → createorganization_ui_e1841e_1.0.0-snapshot.v20251215203425.js} +1 -1
  150. package/dist/customizables/AppearanceContext.js +1 -1
  151. package/dist/elements/Action/ActionRoot.js +1 -1
  152. package/dist/elements/AvatarUploader.js +14 -4
  153. package/dist/elements/AvatarUploader.js.map +1 -1
  154. package/dist/elements/CodeControl.js +1 -1
  155. package/dist/elements/Drawer.js +8 -2
  156. package/dist/elements/Drawer.js.map +1 -1
  157. package/dist/elements/Form.js +1 -1
  158. package/dist/elements/Menu.js +1 -1
  159. package/dist/elements/Modal.js +3 -2
  160. package/dist/elements/Modal.js.map +1 -1
  161. package/dist/elements/Navbar.js +1 -1
  162. package/dist/elements/PhoneInput/countryCodeData.js +34 -9
  163. package/dist/elements/PhoneInput/countryCodeData.js.map +1 -1
  164. package/dist/elements/PhoneInput/index.js +1 -1
  165. package/dist/elements/Popover.js +4 -1
  166. package/dist/elements/Popover.js.map +1 -1
  167. package/dist/elements/Select.js +1 -1
  168. package/dist/elements/SocialButtons.js +1 -1
  169. package/dist/elements/Tabs.js +1 -1
  170. package/dist/elements/TimerButton.js +1 -1
  171. package/dist/elements/Tooltip.js +29 -24
  172. package/dist/elements/Tooltip.js.map +1 -1
  173. package/dist/elements/contexts/index.js +1 -1
  174. package/dist/{enableOrganizationsPrompt_ui_03abd0_1.0.0-snapshot.v20251208202852.js → enableOrganizationsPrompt_ui_e1841e_1.0.0-snapshot.v20251215203425.js} +1 -1
  175. package/dist/foundations/defaultFoundations.d.ts +153 -153
  176. package/dist/hooks/useFetchRoles.js.map +1 -1
  177. package/dist/{impersonationfab_ui_03abd0_1.0.0-snapshot.v20251208202852.js → impersonationfab_ui_e1841e_1.0.0-snapshot.v20251215203425.js} +1 -1
  178. package/dist/index.js +1 -1
  179. package/dist/internal/index.js +2 -2
  180. package/dist/internal/index.js.map +1 -1
  181. package/dist/{keylessPrompt_ui_03abd0_1.0.0-snapshot.v20251208202852.js → keylessPrompt_ui_e1841e_1.0.0-snapshot.v20251215203425.js} +1 -1
  182. package/dist/lazyModules/MountedCheckoutDrawer.js +1 -1
  183. package/dist/lazyModules/MountedPlanDetailDrawer.js +1 -1
  184. package/dist/lazyModules/MountedSubscriptionDetailDrawer.js +1 -1
  185. package/dist/lazyModules/components.d.ts +20 -20
  186. package/dist/lazyModules/providers.js +24 -17
  187. package/dist/lazyModules/providers.js.map +1 -1
  188. package/dist/{oauthConsent_ui_03abd0_1.0.0-snapshot.v20251208202852.js → oauthConsent_ui_e1841e_1.0.0-snapshot.v20251215203425.js} +1 -1
  189. package/dist/{onetap_ui_03abd0_1.0.0-snapshot.v20251208202852.js → onetap_ui_e1841e_1.0.0-snapshot.v20251215203425.js} +1 -1
  190. package/dist/{op-api-keys-page_ui_03abd0_1.0.0-snapshot.v20251208202852.js → op-api-keys-page_ui_e1841e_1.0.0-snapshot.v20251215203425.js} +1 -1
  191. package/dist/{organizationlist_ui_03abd0_1.0.0-snapshot.v20251208202852.js → organizationlist_ui_e1841e_1.0.0-snapshot.v20251215203425.js} +1 -1
  192. package/dist/organizationprofile_ui_e1841e_1.0.0-snapshot.v20251215203425.js +1 -0
  193. package/dist/organizationswitcher_ui_e1841e_1.0.0-snapshot.v20251215203425.js +1 -0
  194. package/dist/{payment-attempt-page_ui_03abd0_1.0.0-snapshot.v20251208202852.js → payment-attempt-page_ui_e1841e_1.0.0-snapshot.v20251215203425.js} +1 -1
  195. package/dist/{planDetails_ui_03abd0_1.0.0-snapshot.v20251208202852.js → planDetails_ui_e1841e_1.0.0-snapshot.v20251215203425.js} +1 -1
  196. package/dist/{prefetchorganizationlist_ui_03abd0_1.0.0-snapshot.v20251208202852.js → prefetchorganizationlist_ui_e1841e_1.0.0-snapshot.v20251215203425.js} +1 -1
  197. package/dist/{pricingTable_ui_03abd0_1.0.0-snapshot.v20251208202852.js → pricingTable_ui_e1841e_1.0.0-snapshot.v20251215203425.js} +1 -1
  198. package/dist/primitives/hooks/useFormField.js +1 -1
  199. package/dist/{revoke-api-key-modal_ui_03abd0_1.0.0-snapshot.v20251208202852.js → revoke-api-key-modal_ui_e1841e_1.0.0-snapshot.v20251215203425.js} +1 -1
  200. package/dist/router/BaseRouter.js +1 -1
  201. package/dist/router/PathRouter.js +1 -1
  202. package/dist/router/Route.js +1 -1
  203. package/dist/router/VirtualRouter.js +1 -1
  204. package/dist/{sessionTasks_ui_03abd0_1.0.0-snapshot.v20251208202852.js → sessionTasks_ui_e1841e_1.0.0-snapshot.v20251215203425.js} +1 -1
  205. package/dist/signin_ui_e1841e_1.0.0-snapshot.v20251215203425.js +1 -0
  206. package/dist/{signup_ui_03abd0_1.0.0-snapshot.v20251208202852.js → signup_ui_e1841e_1.0.0-snapshot.v20251215203425.js} +1 -1
  207. package/dist/{statement-page_ui_03abd0_1.0.0-snapshot.v20251208202852.js → statement-page_ui_e1841e_1.0.0-snapshot.v20251215203425.js} +1 -1
  208. package/dist/{subscriptionDetails_ui_03abd0_1.0.0-snapshot.v20251208202852.js → subscriptionDetails_ui_e1841e_1.0.0-snapshot.v20251215203425.js} +1 -1
  209. package/dist/{taskChooseOrganization_ui_03abd0_1.0.0-snapshot.v20251208202852.js → taskChooseOrganization_ui_e1841e_1.0.0-snapshot.v20251215203425.js} +1 -1
  210. package/dist/taskResetPassword_ui_e1841e_1.0.0-snapshot.v20251215203425.js +1 -0
  211. package/dist/ui-common_ui_e1841e_1.0.0-snapshot.v20251215203425.js +122 -0
  212. package/dist/ui.browser.js +20 -3
  213. package/dist/{up-api-keys-page_ui_03abd0_1.0.0-snapshot.v20251208202852.js → up-api-keys-page_ui_e1841e_1.0.0-snapshot.v20251215203425.js} +1 -1
  214. package/dist/{useravatar_ui_03abd0_1.0.0-snapshot.v20251208202852.js → useravatar_ui_e1841e_1.0.0-snapshot.v20251215203425.js} +1 -1
  215. package/dist/{userbutton_ui_03abd0_1.0.0-snapshot.v20251208202852.js → userbutton_ui_e1841e_1.0.0-snapshot.v20251215203425.js} +1 -1
  216. package/dist/{userprofile_ui_03abd0_1.0.0-snapshot.v20251208202852.js → userprofile_ui_e1841e_1.0.0-snapshot.v20251215203425.js} +2 -2
  217. package/dist/userverification_ui_e1841e_1.0.0-snapshot.v20251215203425.js +1 -0
  218. package/dist/vendors_ui_e1841e_1.0.0-snapshot.v20251215203425.js +20 -0
  219. package/dist/{waitlist_ui_03abd0_1.0.0-snapshot.v20251208202852.js → waitlist_ui_e1841e_1.0.0-snapshot.v20251215203425.js} +1 -1
  220. package/package.json +5 -4
  221. package/dist/organizationprofile_ui_03abd0_1.0.0-snapshot.v20251208202852.js +0 -1
  222. package/dist/organizationswitcher_ui_03abd0_1.0.0-snapshot.v20251208202852.js +0 -1
  223. package/dist/signin_ui_03abd0_1.0.0-snapshot.v20251208202852.js +0 -1
  224. package/dist/taskResetPassword_ui_03abd0_1.0.0-snapshot.v20251208202852.js +0 -1
  225. package/dist/ui-common_ui_03abd0_1.0.0-snapshot.v20251208202852.js +0 -139
  226. package/dist/userverification_ui_03abd0_1.0.0-snapshot.v20251208202852.js +0 -1
  227. package/dist/vendors_ui_03abd0_1.0.0-snapshot.v20251208202852.js +0 -20
  228. /package/dist/{blankcaptcha_ui_03abd0_1.0.0-snapshot.v20251208202852.js → blankcaptcha_ui_e1841e_1.0.0-snapshot.v20251215203425.js} +0 -0
  229. /package/dist/{copy-api-key-modal_ui_03abd0_1.0.0-snapshot.v20251208202852.js → copy-api-key-modal_ui_e1841e_1.0.0-snapshot.v20251215203425.js} +0 -0
  230. /package/dist/{framework_ui_03abd0_1.0.0-snapshot.v20251208202852.js → framework_ui_e1841e_1.0.0-snapshot.v20251215203425.js} +0 -0
  231. /package/dist/{op-billing-page_ui_03abd0_1.0.0-snapshot.v20251208202852.js → op-billing-page_ui_e1841e_1.0.0-snapshot.v20251215203425.js} +0 -0
  232. /package/dist/{op-plans-page_ui_03abd0_1.0.0-snapshot.v20251208202852.js → op-plans-page_ui_e1841e_1.0.0-snapshot.v20251215203425.js} +0 -0
  233. /package/dist/{up-billing-page_ui_03abd0_1.0.0-snapshot.v20251208202852.js → up-billing-page_ui_e1841e_1.0.0-snapshot.v20251215203425.js} +0 -0
  234. /package/dist/{up-plans-page_ui_03abd0_1.0.0-snapshot.v20251208202852.js → up-plans-page_ui_e1841e_1.0.0-snapshot.v20251215203425.js} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"SignInStart.js","names":["initialValues: Record<SignInStartIdentifier, string | undefined>","e: any","instantPasswordError: ClerkAPIError","e","sessionAlreadyExistsError: ClerkAPIError","alreadySignedInError: ClerkAPIError","accountDoesNotExistError: ClerkAPIError","isWebAuthnAutofillSupported","autofilled"],"sources":["../../../src/components/SignIn/SignInStart.tsx"],"sourcesContent":["import { getAlternativePhoneCodeProviderData } from '@clerk/shared/alternativePhoneCode';\nimport { ERROR_CODES, SIGN_UP_MODES } from '@clerk/shared/internal/clerk-js/constants';\nimport { clerkInvalidFAPIResponse } from '@clerk/shared/internal/clerk-js/errors';\nimport { getClerkQueryParam, removeClerkQueryParam } from '@clerk/shared/internal/clerk-js/queryParams';\nimport { useClerk } from '@clerk/shared/react';\nimport type {\n ClerkAPIError,\n PhoneCodeChannel,\n PhoneCodeChannelData,\n SignInCreateParams,\n SignInResource,\n} from '@clerk/shared/types';\nimport { isWebAuthnAutofillSupported, isWebAuthnSupported } from '@clerk/shared/webauthn';\nimport { useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react';\n\nimport { Card } from '@/ui/elements/Card';\nimport { useCardState, withCardStateProvider } from '@/ui/elements/contexts';\nimport { Form } from '@/ui/elements/Form';\nimport { Header } from '@/ui/elements/Header';\nimport { LoadingCard } from '@/ui/elements/LoadingCard';\nimport { SocialButtonsReversibleContainerWithDivider } from '@/ui/elements/ReversibleContainer';\nimport { handleError } from '@/ui/utils/errorHandler';\nimport { isMobileDevice } from '@/ui/utils/isMobileDevice';\nimport type { FormControlState } from '@/ui/utils/useFormControl';\nimport { buildRequest, useFormControl } from '@/ui/utils/useFormControl';\n\nimport type { SignInStartIdentifier } from '../../common';\nimport {\n buildSSOCallbackURL,\n getIdentifierControlDisplayValues,\n groupIdentifiers,\n withRedirectToAfterSignIn,\n withRedirectToSignInTask,\n} from '../../common';\nimport { useCoreSignIn, useEnvironment, useSignInContext } from '../../contexts';\nimport { Col, descriptors, Flow, localizationKeys } from '../../customizables';\nimport { CaptchaElement } from '../../elements/CaptchaElement';\nimport { useLoadingStatus } from '../../hooks';\nimport { useSupportEmail } from '../../hooks/useSupportEmail';\nimport { useTotalEnabledAuthMethods } from '../../hooks/useTotalEnabledAuthMethods';\nimport { useRouter } from '../../router';\nimport { handleCombinedFlowTransfer } from './handleCombinedFlowTransfer';\nimport { hasMultipleEnterpriseConnections, useHandleAuthenticateWithPasskey } from './shared';\nimport { SignInAlternativePhoneCodePhoneNumberCard } from './SignInAlternativePhoneCodePhoneNumberCard';\nimport { SignInSocialButtons } from './SignInSocialButtons';\nimport {\n getPreferredAlternativePhoneChannel,\n getPreferredAlternativePhoneChannelForCombinedFlow,\n getSignUpAttributeFromIdentifier,\n} from './utils';\n\nconst useAutoFillPasskey = () => {\n const [isSupported, setIsSupported] = useState(false);\n const { navigate } = useRouter();\n const onSecondFactor = () => navigate('factor-two');\n const authenticateWithPasskey = useHandleAuthenticateWithPasskey(onSecondFactor);\n const { userSettings } = useEnvironment();\n const { passkeySettings, attributes } = userSettings;\n\n useEffect(() => {\n async function runAutofillPasskey() {\n const _isSupported = await isWebAuthnAutofillSupported();\n setIsSupported(_isSupported);\n if (!_isSupported) {\n return;\n }\n\n await authenticateWithPasskey({ flow: 'autofill' });\n }\n\n if (passkeySettings.allow_autofill && attributes.passkey?.enabled) {\n runAutofillPasskey();\n }\n }, []);\n\n return {\n isWebAuthnAutofillSupported: isSupported,\n };\n};\n\nfunction SignInStartInternal(): JSX.Element {\n const card = useCardState();\n const clerk = useClerk();\n const status = useLoadingStatus();\n const { displayConfig, userSettings, authConfig } = useEnvironment();\n const signIn = useCoreSignIn();\n const { navigate } = useRouter();\n const ctx = useSignInContext();\n const { afterSignInUrl, signUpUrl, waitlistUrl, isCombinedFlow, navigateOnSetActive } = ctx;\n const supportEmail = useSupportEmail();\n const totalEnabledAuthMethods = useTotalEnabledAuthMethods();\n const identifierAttributes = useMemo<SignInStartIdentifier[]>(\n () => groupIdentifiers(userSettings.enabledFirstFactorIdentifiers),\n [userSettings.enabledFirstFactorIdentifiers],\n );\n const alternativePhoneCodeChannels = userSettings.alternativePhoneCodeChannels;\n\n /**\n * Passkeys\n */\n const { isWebAuthnAutofillSupported } = useAutoFillPasskey();\n const onSecondFactor = () => navigate('factor-two');\n const authenticateWithPasskey = useHandleAuthenticateWithPasskey(onSecondFactor);\n const isWebSupported = isWebAuthnSupported();\n\n const onlyPhoneNumberInitialValueExists =\n !!ctx.initialValues?.phoneNumber && !(ctx.initialValues.emailAddress || ctx.initialValues.username);\n const shouldStartWithPhoneNumberIdentifier =\n onlyPhoneNumberInitialValueExists && identifierAttributes.includes('phone_number');\n const [identifierAttribute, setIdentifierAttribute] = useState<SignInStartIdentifier>(\n shouldStartWithPhoneNumberIdentifier ? 'phone_number' : identifierAttributes[0] || '',\n );\n const [hasSwitchedByAutofill, setHasSwitchedByAutofill] = useState(false);\n\n const organizationTicket = getClerkQueryParam('__clerk_ticket') || '';\n const clerkStatus = getClerkQueryParam('__clerk_status') || '';\n\n const standardFormAttributes = userSettings.enabledFirstFactorIdentifiers;\n const web3FirstFactors = userSettings.web3FirstFactors;\n const authenticatableSocialStrategies = userSettings.authenticatableSocialStrategies;\n const passwordBasedInstance = userSettings.instanceIsPasswordBased;\n const { currentIdentifier, nextIdentifier } = getIdentifierControlDisplayValues(\n identifierAttributes,\n identifierAttribute,\n );\n const instantPasswordField = useFormControl('password', '', {\n type: 'password',\n label: localizationKeys('formFieldLabel__password'),\n placeholder: localizationKeys('formFieldInputPlaceholder__password') as any,\n });\n\n const [alternativePhoneCodeProvider, setAlternativePhoneCodeProvider] = useState<PhoneCodeChannelData | null>(null);\n\n const showAlternativePhoneCodeProviders = userSettings.alternativePhoneCodeChannels.length > 0;\n\n const onAlternativePhoneCodeUseAnotherMethod = () => {\n setAlternativePhoneCodeProvider(null);\n };\n const onAlternativePhoneCodeProviderClick = (phoneCodeChannel: PhoneCodeChannel) => {\n const provider: PhoneCodeChannelData | null = getAlternativePhoneCodeProviderData(phoneCodeChannel) || null;\n setAlternativePhoneCodeProvider(provider);\n };\n\n const ctxInitialValues = ctx.initialValues || {};\n const initialValues: Record<SignInStartIdentifier, string | undefined> = useMemo(\n () => ({\n email_address: ctxInitialValues.emailAddress,\n email_address_username: ctxInitialValues.emailAddress || ctxInitialValues.username,\n username: ctxInitialValues.username,\n phone_number: ctxInitialValues.phoneNumber,\n }),\n [ctx.initialValues],\n );\n\n const hasSocialOrWeb3Buttons =\n !!authenticatableSocialStrategies.length || !!web3FirstFactors.length || !!alternativePhoneCodeChannels.length;\n const [shouldAutofocus, setShouldAutofocus] = useState(!isMobileDevice() && !hasSocialOrWeb3Buttons);\n const textIdentifierField = useFormControl('identifier', initialValues[identifierAttribute] || '', {\n ...currentIdentifier,\n isRequired: true,\n transformer: value => value.trim(),\n });\n\n const phoneIdentifierField = useFormControl('identifier', initialValues['phone_number'] || '', {\n ...currentIdentifier,\n isRequired: true,\n });\n\n const identifierField = identifierAttribute === 'phone_number' ? phoneIdentifierField : textIdentifierField;\n\n const switchToNextIdentifier = () => {\n setIdentifierAttribute(\n i => identifierAttributes[(identifierAttributes.indexOf(i) + 1) % identifierAttributes.length],\n );\n setShouldAutofocus(true);\n setHasSwitchedByAutofill(false);\n };\n\n const handlePhoneNumberPaste = (value: string) => {\n textIdentifierField.setValue(initialValues[identifierAttribute] || '');\n phoneIdentifierField.setValue(value);\n setIdentifierAttribute('phone_number');\n setShouldAutofocus(true);\n };\n\n // switch to the phone input (if available) if a \"+\" is entered\n // (either by the browser or the user)\n // this does not work in chrome as it does not fire the change event and the value is\n // not available via js\n useLayoutEffect(() => {\n if (\n identifierField.value.startsWith('+') &&\n identifierAttributes.includes('phone_number') &&\n identifierAttribute !== 'phone_number' &&\n !hasSwitchedByAutofill\n ) {\n handlePhoneNumberPaste(identifierField.value);\n // do not switch automatically on subsequent autofills\n // by the browser to avoid a switch loop\n setHasSwitchedByAutofill(true);\n }\n }, [identifierField.value, identifierAttributes]);\n\n useEffect(() => {\n if (!organizationTicket) {\n return;\n }\n\n if (clerkStatus === 'sign_up') {\n const paramsToForward = new URLSearchParams();\n if (organizationTicket) {\n paramsToForward.set('__clerk_ticket', organizationTicket);\n }\n // We explicitly navigate to 'create' in the combined flow to trigger a client-side navigation. Navigating to\n // signUpUrl triggers a full page reload when used with the hash router.\n void navigate(isCombinedFlow ? `create` : signUpUrl, { searchParams: paramsToForward });\n return;\n }\n\n status.setLoading();\n card.setLoading();\n signIn\n .create({\n strategy: 'ticket',\n ticket: organizationTicket,\n })\n .then(res => {\n switch (res.status) {\n case 'needs_first_factor': {\n if (!hasOnlyEnterpriseSSOFirstFactors(res) || hasMultipleEnterpriseConnections(res.supportedFirstFactors)) {\n return navigate('factor-one');\n }\n\n return authenticateWithEnterpriseSSO();\n }\n case 'needs_second_factor':\n return navigate('factor-two');\n case 'complete':\n removeClerkQueryParam('__clerk_ticket');\n return clerk.setActive({\n session: res.createdSessionId,\n navigate: async ({ session }) => {\n await navigateOnSetActive({ session, redirectUrl: afterSignInUrl });\n },\n });\n default: {\n console.error(clerkInvalidFAPIResponse(res.status, supportEmail));\n return;\n }\n }\n })\n .catch(err => {\n return attemptToRecoverFromSignInError(err);\n })\n .finally(() => {\n // Keep the card in loading state during SSO redirect to prevent UI flicker\n // This is necessary because there's a brief delay between initiating the SSO flow\n // and the actual redirect to the external Identity Provider\n const isRedirectingToSSOProvider = !!hasOnlyEnterpriseSSOFirstFactors(signIn);\n if (isRedirectingToSSOProvider) {\n return;\n }\n\n status.setIdle();\n card.setIdle();\n });\n }, []);\n\n useEffect(() => {\n async function handleOauthError() {\n const defaultErrorHandler = () => {\n // Error from server may be too much information for the end user, so set a generic error\n card.setError('Unable to complete action at this time. If the problem persists please contact support.');\n };\n\n const error = signIn?.firstFactorVerification?.error;\n if (error) {\n switch (error.code) {\n case ERROR_CODES.NOT_ALLOWED_TO_SIGN_UP:\n case ERROR_CODES.OAUTH_ACCESS_DENIED:\n case ERROR_CODES.NOT_ALLOWED_ACCESS:\n case ERROR_CODES.SAML_USER_ATTRIBUTE_MISSING:\n case ERROR_CODES.OAUTH_EMAIL_DOMAIN_RESERVED_BY_SAML:\n case ERROR_CODES.USER_LOCKED:\n case ERROR_CODES.EXTERNAL_ACCOUNT_NOT_FOUND:\n case ERROR_CODES.SIGN_UP_MODE_RESTRICTED:\n case ERROR_CODES.SIGN_UP_MODE_RESTRICTED_WAITLIST:\n case ERROR_CODES.ENTERPRISE_SSO_USER_ATTRIBUTE_MISSING:\n case ERROR_CODES.ENTERPRISE_SSO_EMAIL_ADDRESS_DOMAIN_MISMATCH:\n case ERROR_CODES.ENTERPRISE_SSO_HOSTED_DOMAIN_MISMATCH:\n case ERROR_CODES.SAML_EMAIL_ADDRESS_DOMAIN_MISMATCH:\n case ERROR_CODES.ORGANIZATION_MEMBERSHIP_QUOTA_EXCEEDED_FOR_SSO:\n case ERROR_CODES.CAPTCHA_INVALID:\n case ERROR_CODES.FRAUD_DEVICE_BLOCKED:\n case ERROR_CODES.FRAUD_ACTION_BLOCKED:\n case ERROR_CODES.SIGNUP_RATE_LIMIT_EXCEEDED:\n case ERROR_CODES.USER_BANNED:\n card.setError(error);\n break;\n default:\n defaultErrorHandler();\n }\n\n // TODO: This is a workaround in order to reset the sign in attempt\n // so that the oauth error does not persist on full page reloads.\n void (await signIn.create({}));\n }\n }\n\n void handleOauthError();\n }, []);\n\n const buildSignInParams = (fields: Array<FormControlState<string>>): SignInCreateParams => {\n const hasPassword = fields.some(f => f.name === 'password' && !!f.value);\n\n /**\n * FAPI will return an error when password is submitted but the user's email matches requires enterprise sso authentication.\n * We need to strip password from the create request, and reconstruct it later.\n */\n if (!hasPassword || userSettings.enterpriseSSO.enabled) {\n fields = fields.filter(f => f.name !== 'password');\n }\n return {\n ...buildRequest(fields),\n ...(hasPassword && !userSettings.enterpriseSSO.enabled && { strategy: 'password' }),\n } as SignInCreateParams;\n };\n\n const safePasswordSignInForEnterpriseSSOInstance = (\n signInCreatePromise: Promise<SignInResource>,\n fields: Array<FormControlState<string>>,\n ) => {\n return signInCreatePromise.then(signInResource => {\n if (!userSettings.enterpriseSSO.enabled) {\n return signInResource;\n }\n /**\n * For instances with Enterprise SSO enabled, perform sign in with password only when it is allowed for the identified user.\n */\n const passwordField = fields.find(f => f.name === 'password')?.value;\n if (!passwordField || signInResource.supportedFirstFactors?.some(ff => ff.strategy === 'enterprise_sso')) {\n return signInResource;\n }\n return signInResource.attemptFirstFactor({ strategy: 'password', password: passwordField });\n });\n };\n\n const signInWithFields = async (...fields: Array<FormControlState<string>>) => {\n // If the user has already selected an alternative phone code provider, we use that.\n const preferredAlternativePhoneChannel =\n alternativePhoneCodeProvider?.channel ||\n getPreferredAlternativePhoneChannel(fields, authConfig.preferredChannels, 'identifier');\n if (preferredAlternativePhoneChannel) {\n // We need to send the alternative phone code provider channel in the sign in request\n // together with the phone_code strategy, in order for FAPI to create a Verification upon this first request.\n const noop = () => {};\n fields.push({\n id: 'strategy',\n value: 'phone_code',\n clearFeedback: noop,\n setValue: noop,\n onChange: noop,\n setError: noop,\n } as any);\n fields.push({\n id: 'channel',\n value: preferredAlternativePhoneChannel,\n clearFeedback: noop,\n setValue: noop,\n onChange: noop,\n setError: noop,\n } as any);\n }\n try {\n const res = await safePasswordSignInForEnterpriseSSOInstance(signIn.create(buildSignInParams(fields)), fields);\n\n switch (res.status) {\n case 'needs_identifier':\n // Check if we need to initiate an enterprise sso flow\n if (res.supportedFirstFactors?.some(ff => ff.strategy === 'enterprise_sso')) {\n await authenticateWithEnterpriseSSO();\n }\n break;\n case 'needs_first_factor': {\n if (!hasOnlyEnterpriseSSOFirstFactors(res) || hasMultipleEnterpriseConnections(res.supportedFirstFactors)) {\n return navigate('factor-one');\n }\n\n return authenticateWithEnterpriseSSO();\n }\n case 'needs_second_factor':\n return navigate('factor-two');\n case 'complete':\n return clerk.setActive({\n session: res.createdSessionId,\n navigate: async ({ session }) => {\n await navigateOnSetActive({ session, redirectUrl: afterSignInUrl });\n },\n });\n default: {\n console.error(clerkInvalidFAPIResponse(res.status, supportEmail));\n return;\n }\n }\n } catch (e: any) {\n return attemptToRecoverFromSignInError(e);\n }\n };\n\n const authenticateWithEnterpriseSSO = async () => {\n const redirectUrl = buildSSOCallbackURL(ctx, displayConfig.signInUrl);\n const redirectUrlComplete = ctx.afterSignInUrl || '/';\n\n return signIn.authenticateWithRedirect({\n strategy: 'enterprise_sso',\n redirectUrl,\n redirectUrlComplete,\n oidcPrompt: ctx.oidcPrompt,\n continueSignIn: true,\n });\n };\n\n const attemptToRecoverFromSignInError = async (e: any) => {\n if (!e.errors) {\n return;\n }\n const instantPasswordError: ClerkAPIError = e.errors.find(\n (e: ClerkAPIError) =>\n e.code === ERROR_CODES.INVALID_STRATEGY_FOR_USER ||\n e.code === ERROR_CODES.FORM_PASSWORD_INCORRECT ||\n e.code === ERROR_CODES.FORM_PASSWORD_PWNED,\n );\n\n const sessionAlreadyExistsError: ClerkAPIError = e.errors.find(\n (e: ClerkAPIError) => e.code === ERROR_CODES.SESSION_EXISTS,\n );\n const alreadySignedInError: ClerkAPIError = e.errors.find(\n (e: ClerkAPIError) => e.code === 'identifier_already_signed_in',\n );\n const accountDoesNotExistError: ClerkAPIError = e.errors.find(\n (e: ClerkAPIError) =>\n e.code === ERROR_CODES.INVITATION_ACCOUNT_NOT_EXISTS || e.code === ERROR_CODES.FORM_IDENTIFIER_NOT_FOUND,\n );\n\n if (instantPasswordError) {\n await signInWithFields(identifierField);\n } else if (sessionAlreadyExistsError) {\n await clerk.setActive({\n session: clerk.client.lastActiveSessionId,\n navigate: async ({ session }) => {\n await navigateOnSetActive({ session, redirectUrl: afterSignInUrl });\n },\n });\n } else if (alreadySignedInError) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const sid = alreadySignedInError.meta!.sessionId!;\n await clerk.setActive({\n session: sid,\n navigate: async ({ session }) => {\n await navigateOnSetActive({ session, redirectUrl: afterSignInUrl });\n },\n });\n } else if (isCombinedFlow && accountDoesNotExistError) {\n const attribute = getSignUpAttributeFromIdentifier(identifierField);\n\n if (userSettings.signUp.mode === SIGN_UP_MODES.WAITLIST) {\n const waitlistUrl = clerk.buildWaitlistUrl(\n attribute === 'emailAddress'\n ? {\n initialValues: {\n [attribute]: identifierField.value,\n },\n }\n : {},\n );\n return navigate(waitlistUrl);\n }\n\n clerk.client.signUp[attribute] = identifierField.value;\n\n const redirectUrl = buildSSOCallbackURL(ctx, displayConfig.signUpUrl);\n const redirectUrlComplete = ctx.afterSignUpUrl || '/';\n\n return handleCombinedFlowTransfer({\n afterSignUpUrl: ctx.afterSignUpUrl || '/',\n clerk,\n handleError: e => handleError(e, [identifierField, instantPasswordField], card.setError),\n identifierAttribute: attribute,\n identifierValue: identifierField.value,\n navigate,\n organizationTicket,\n signUpMode: userSettings.signUp.mode,\n redirectUrl,\n redirectUrlComplete,\n navigateOnSetActive,\n passwordEnabled: userSettings.attributes.password?.required ?? false,\n alternativePhoneCodeChannel:\n alternativePhoneCodeProvider?.channel ||\n getPreferredAlternativePhoneChannelForCombinedFlow(\n authConfig.preferredChannels,\n attribute,\n identifierField.value,\n ),\n });\n } else {\n handleError(e, [identifierField, instantPasswordField], card.setError);\n }\n };\n\n const handleFirstPartySubmit = async (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n return signInWithFields(identifierField, instantPasswordField);\n };\n\n const DynamicField = useMemo(() => {\n const components = {\n tel: Form.PhoneInput,\n password: Form.PasswordInput,\n text: Form.PlainInput,\n email: Form.PlainInput,\n };\n\n return components[identifierField.type as keyof typeof components];\n }, [identifierField.type]);\n\n if (status.isLoading || clerkStatus === 'sign_up') {\n // clerkStatus being sign_up will trigger a navigation to the sign up flow, so show a loading card instead of\n // rendering the sign in flow.\n return <LoadingCard />;\n }\n\n // @ts-expect-error `action` is not typed\n const { action, validLastAuthenticationStrategies, ...identifierFieldProps } = identifierField.props;\n\n const lastAuthenticationStrategy = clerk.client?.lastAuthenticationStrategy;\n const isIdentifierLastAuthenticationStrategy =\n lastAuthenticationStrategy && totalEnabledAuthMethods > 1\n ? validLastAuthenticationStrategies?.has(lastAuthenticationStrategy)\n : false;\n\n return (\n <Flow.Part part='start'>\n {!alternativePhoneCodeProvider ? (\n <Card.Root>\n <Card.Content>\n <Header.Root showLogo>\n <Header.Title\n localizationKey={\n isCombinedFlow\n ? localizationKeys('signIn.start.titleCombined')\n : localizationKeys('signIn.start.title')\n }\n />\n <Header.Subtitle\n localizationKey={\n isCombinedFlow\n ? localizationKeys('signIn.start.subtitleCombined')\n : localizationKeys('signIn.start.subtitle')\n }\n sx={{\n '&:empty': {\n display: 'none',\n },\n }}\n />\n </Header.Root>\n <Card.Alert>{card.error}</Card.Alert>\n {/*TODO: extract main in its own component */}\n <Col\n elementDescriptor={descriptors.main}\n gap={6}\n >\n <SocialButtonsReversibleContainerWithDivider>\n {hasSocialOrWeb3Buttons && (\n <SignInSocialButtons\n enableWeb3Providers\n enableOAuthProviders\n enableAlternativePhoneCodeProviders={showAlternativePhoneCodeProviders}\n onAlternativePhoneCodeProviderClick={onAlternativePhoneCodeProviderClick}\n />\n )}\n {standardFormAttributes.length ? (\n <Form.Root\n onSubmit={handleFirstPartySubmit}\n gap={8}\n >\n <Col gap={6}>\n <Form.ControlRow elementId={identifierField.id}>\n <DynamicField\n actionLabel={nextIdentifier?.action}\n onActionClicked={switchToNextIdentifier}\n {...identifierFieldProps}\n autoFocus={shouldAutofocus}\n autoComplete={isWebAuthnAutofillSupported ? 'webauthn' : undefined}\n isLastAuthenticationStrategy={isIdentifierLastAuthenticationStrategy}\n />\n </Form.ControlRow>\n <InstantPasswordRow field={passwordBasedInstance ? instantPasswordField : undefined} />\n </Col>\n <Col center>\n <CaptchaElement />\n <Form.SubmitButton hasArrow />\n </Col>\n </Form.Root>\n ) : null}\n </SocialButtonsReversibleContainerWithDivider>\n {!standardFormAttributes.length && <CaptchaElement />}\n {userSettings.attributes.passkey?.enabled &&\n userSettings.passkeySettings.show_sign_in_button &&\n isWebSupported && (\n <Card.Action elementId={'usePasskey'}>\n <Card.ActionLink\n localizationKey={localizationKeys('signIn.start.actionLink__use_passkey')}\n onClick={() => authenticateWithPasskey({ flow: 'discoverable' })}\n />\n </Card.Action>\n )}\n </Col>\n </Card.Content>\n <Card.Footer>\n {userSettings.signUp.mode === SIGN_UP_MODES.PUBLIC && !isCombinedFlow && (\n <Card.Action elementId='signIn'>\n <Card.ActionText localizationKey={localizationKeys('signIn.start.actionText')} />\n <Card.ActionLink\n localizationKey={localizationKeys('signIn.start.actionLink')}\n to={clerk.buildUrlWithAuth(signUpUrl)}\n />\n </Card.Action>\n )}\n {userSettings.signUp.mode === SIGN_UP_MODES.WAITLIST && (\n <Card.Action elementId='signIn'>\n <Card.ActionText localizationKey={localizationKeys('signIn.start.actionText__join_waitlist')} />\n <Card.ActionLink\n localizationKey={localizationKeys('signIn.start.actionLink__join_waitlist')}\n to={clerk.buildUrlWithAuth(waitlistUrl)}\n />\n </Card.Action>\n )}\n </Card.Footer>\n </Card.Root>\n ) : (\n <SignInAlternativePhoneCodePhoneNumberCard\n handleSubmit={handleFirstPartySubmit}\n phoneNumberFormState={phoneIdentifierField}\n onUseAnotherMethod={onAlternativePhoneCodeUseAnotherMethod}\n phoneCodeProvider={alternativePhoneCodeProvider}\n />\n )}\n </Flow.Part>\n );\n}\n\nconst hasOnlyEnterpriseSSOFirstFactors = (signIn: SignInResource): boolean => {\n if (!signIn.supportedFirstFactors?.length) {\n return false;\n }\n\n return signIn.supportedFirstFactors.every(ff => ff.strategy === 'enterprise_sso');\n};\n\nconst InstantPasswordRow = ({ field }: { field?: FormControlState<'password'> }) => {\n const [autofilled, setAutofilled] = useState(false);\n const ref = useRef<HTMLInputElement>(null);\n const show = !!(autofilled || field?.value);\n\n // show password if it's autofilled by the browser\n useLayoutEffect(() => {\n const intervalId = setInterval(() => {\n if (ref?.current) {\n const autofilled =\n window.getComputedStyle(ref.current, ':autofill').animationName === 'onAutoFillStart' ||\n // https://github.com/facebook/react/issues/1159#issuecomment-1025423604\n !!ref.current?.matches('*:-webkit-autofill');\n if (autofilled) {\n setAutofilled(autofilled);\n clearInterval(intervalId);\n }\n }\n }, 500);\n\n return () => {\n clearInterval(intervalId);\n };\n }, []);\n\n useEffect(() => {\n //if the field receives a value, we default to normal behaviour\n if (field?.value && field.value !== '') {\n setAutofilled(false);\n }\n }, [field?.value]);\n\n if (!field) {\n return null;\n }\n\n return (\n <Form.ControlRow\n elementId={field.id}\n sx={show ? undefined : { position: 'absolute', opacity: 0, height: 0, pointerEvents: 'none', marginTop: '-1rem' }}\n >\n <Form.PasswordInput\n {...field.props}\n ref={ref}\n tabIndex={show ? undefined : -1}\n />\n </Form.ControlRow>\n );\n};\n\nexport const SignInStart = withRedirectToSignInTask(\n withRedirectToAfterSignIn(withCardStateProvider(SignInStartInternal)),\n);\n"],"mappings":"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"}
1
+ {"version":3,"file":"SignInStart.js","names":["initialValues: Record<SignInStartIdentifier, string | undefined>","e: any","instantPasswordError: ClerkAPIError","e","sessionAlreadyExistsError: ClerkAPIError","alreadySignedInError: ClerkAPIError","accountDoesNotExistError: ClerkAPIError","isWebAuthnAutofillSupported","autofilled"],"sources":["../../../src/components/SignIn/SignInStart.tsx"],"sourcesContent":["import { getAlternativePhoneCodeProviderData } from '@clerk/shared/alternativePhoneCode';\nimport { ERROR_CODES, SIGN_UP_MODES } from '@clerk/shared/internal/clerk-js/constants';\nimport { clerkInvalidFAPIResponse } from '@clerk/shared/internal/clerk-js/errors';\nimport { getClerkQueryParam, removeClerkQueryParam } from '@clerk/shared/internal/clerk-js/queryParams';\nimport { useClerk } from '@clerk/shared/react';\nimport type {\n ClerkAPIError,\n PhoneCodeChannel,\n PhoneCodeChannelData,\n SignInCreateParams,\n SignInResource,\n} from '@clerk/shared/types';\nimport { isWebAuthnAutofillSupported, isWebAuthnSupported } from '@clerk/shared/webauthn';\nimport { useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react';\n\nimport { Card } from '@/ui/elements/Card';\nimport { useCardState, withCardStateProvider } from '@/ui/elements/contexts';\nimport { Form } from '@/ui/elements/Form';\nimport { Header } from '@/ui/elements/Header';\nimport { LoadingCard } from '@/ui/elements/LoadingCard';\nimport { SocialButtonsReversibleContainerWithDivider } from '@/ui/elements/ReversibleContainer';\nimport { handleError } from '@/ui/utils/errorHandler';\nimport { isMobileDevice } from '@/ui/utils/isMobileDevice';\nimport type { FormControlState } from '@/ui/utils/useFormControl';\nimport { buildRequest, useFormControl } from '@/ui/utils/useFormControl';\n\nimport type { SignInStartIdentifier } from '../../common';\nimport {\n buildSSOCallbackURL,\n getIdentifierControlDisplayValues,\n groupIdentifiers,\n withRedirectToAfterSignIn,\n withRedirectToSignInTask,\n} from '../../common';\nimport { useCoreSignIn, useEnvironment, useSignInContext } from '../../contexts';\nimport { Col, descriptors, Flow, localizationKeys } from '../../customizables';\nimport { CaptchaElement } from '../../elements/CaptchaElement';\nimport { useLoadingStatus } from '../../hooks';\nimport { useSupportEmail } from '../../hooks/useSupportEmail';\nimport { useTotalEnabledAuthMethods } from '../../hooks/useTotalEnabledAuthMethods';\nimport { useRouter } from '../../router';\nimport { handleCombinedFlowTransfer } from './handleCombinedFlowTransfer';\nimport { hasMultipleEnterpriseConnections, useHandleAuthenticateWithPasskey } from './shared';\nimport { SignInAlternativePhoneCodePhoneNumberCard } from './SignInAlternativePhoneCodePhoneNumberCard';\nimport { SignInSocialButtons } from './SignInSocialButtons';\nimport {\n getPreferredAlternativePhoneChannel,\n getPreferredAlternativePhoneChannelForCombinedFlow,\n getSignUpAttributeFromIdentifier,\n} from './utils';\n\nconst useAutoFillPasskey = () => {\n const [isSupported, setIsSupported] = useState(false);\n const { navigate } = useRouter();\n const onSecondFactor = () => navigate('factor-two');\n const authenticateWithPasskey = useHandleAuthenticateWithPasskey(onSecondFactor);\n const { userSettings } = useEnvironment();\n const { passkeySettings, attributes } = userSettings;\n\n useEffect(() => {\n async function runAutofillPasskey() {\n const _isSupported = await isWebAuthnAutofillSupported();\n setIsSupported(_isSupported);\n if (!_isSupported) {\n return;\n }\n\n await authenticateWithPasskey({ flow: 'autofill' });\n }\n\n if (passkeySettings.allow_autofill && attributes.passkey?.enabled) {\n runAutofillPasskey();\n }\n }, []);\n\n return {\n isWebAuthnAutofillSupported: isSupported,\n };\n};\n\nfunction SignInStartInternal(): JSX.Element {\n const card = useCardState();\n const clerk = useClerk();\n const status = useLoadingStatus();\n const { displayConfig, userSettings, authConfig } = useEnvironment();\n const signIn = useCoreSignIn();\n const { navigate } = useRouter();\n const ctx = useSignInContext();\n const { afterSignInUrl, signUpUrl, waitlistUrl, isCombinedFlow, navigateOnSetActive } = ctx;\n const supportEmail = useSupportEmail();\n const totalEnabledAuthMethods = useTotalEnabledAuthMethods();\n const identifierAttributes = useMemo<SignInStartIdentifier[]>(\n () => groupIdentifiers(userSettings.enabledFirstFactorIdentifiers),\n [userSettings.enabledFirstFactorIdentifiers],\n );\n const alternativePhoneCodeChannels = userSettings.alternativePhoneCodeChannels;\n\n /**\n * Passkeys\n */\n const { isWebAuthnAutofillSupported } = useAutoFillPasskey();\n const onSecondFactor = () => navigate('factor-two');\n const authenticateWithPasskey = useHandleAuthenticateWithPasskey(onSecondFactor);\n const isWebSupported = isWebAuthnSupported();\n\n const onlyPhoneNumberInitialValueExists =\n !!ctx.initialValues?.phoneNumber && !(ctx.initialValues.emailAddress || ctx.initialValues.username);\n const shouldStartWithPhoneNumberIdentifier =\n onlyPhoneNumberInitialValueExists && identifierAttributes.includes('phone_number');\n const [identifierAttribute, setIdentifierAttribute] = useState<SignInStartIdentifier>(\n shouldStartWithPhoneNumberIdentifier ? 'phone_number' : identifierAttributes[0] || '',\n );\n const [hasSwitchedByAutofill, setHasSwitchedByAutofill] = useState(false);\n\n const organizationTicket = getClerkQueryParam('__clerk_ticket') || '';\n const clerkStatus = getClerkQueryParam('__clerk_status') || '';\n\n const standardFormAttributes = userSettings.enabledFirstFactorIdentifiers;\n const web3FirstFactors = userSettings.web3FirstFactors;\n const authenticatableSocialStrategies = userSettings.authenticatableSocialStrategies;\n const passwordBasedInstance = userSettings.instanceIsPasswordBased;\n const { currentIdentifier, nextIdentifier } = getIdentifierControlDisplayValues(\n identifierAttributes,\n identifierAttribute,\n );\n const instantPasswordField = useFormControl('password', '', {\n type: 'password',\n label: localizationKeys('formFieldLabel__password'),\n placeholder: localizationKeys('formFieldInputPlaceholder__password') as any,\n });\n\n const [alternativePhoneCodeProvider, setAlternativePhoneCodeProvider] = useState<PhoneCodeChannelData | null>(null);\n\n const showAlternativePhoneCodeProviders = userSettings.alternativePhoneCodeChannels.length > 0;\n\n const onAlternativePhoneCodeUseAnotherMethod = () => {\n setAlternativePhoneCodeProvider(null);\n };\n const onAlternativePhoneCodeProviderClick = (phoneCodeChannel: PhoneCodeChannel) => {\n const provider: PhoneCodeChannelData | null = getAlternativePhoneCodeProviderData(phoneCodeChannel) || null;\n setAlternativePhoneCodeProvider(provider);\n };\n\n const ctxInitialValues = ctx.initialValues || {};\n const initialValues: Record<SignInStartIdentifier, string | undefined> = useMemo(\n () => ({\n email_address: ctxInitialValues.emailAddress,\n email_address_username: ctxInitialValues.emailAddress || ctxInitialValues.username,\n username: ctxInitialValues.username,\n phone_number: ctxInitialValues.phoneNumber,\n }),\n [ctx.initialValues],\n );\n\n const hasSocialOrWeb3Buttons =\n !!authenticatableSocialStrategies.length || !!web3FirstFactors.length || !!alternativePhoneCodeChannels.length;\n const [shouldAutofocus, setShouldAutofocus] = useState(!isMobileDevice() && !hasSocialOrWeb3Buttons);\n const textIdentifierField = useFormControl('identifier', initialValues[identifierAttribute] || '', {\n ...currentIdentifier,\n isRequired: true,\n transformer: value => value.trim(),\n });\n\n const phoneIdentifierField = useFormControl('identifier', initialValues['phone_number'] || '', {\n ...currentIdentifier,\n isRequired: true,\n });\n\n const identifierField = identifierAttribute === 'phone_number' ? phoneIdentifierField : textIdentifierField;\n\n const switchToNextIdentifier = () => {\n setIdentifierAttribute(\n i => identifierAttributes[(identifierAttributes.indexOf(i) + 1) % identifierAttributes.length],\n );\n setShouldAutofocus(true);\n setHasSwitchedByAutofill(false);\n };\n\n const handlePhoneNumberPaste = (value: string) => {\n textIdentifierField.setValue(initialValues[identifierAttribute] || '');\n phoneIdentifierField.setValue(value);\n setIdentifierAttribute('phone_number');\n setShouldAutofocus(true);\n };\n\n // switch to the phone input (if available) if a \"+\" is entered\n // (either by the browser or the user)\n // this does not work in chrome as it does not fire the change event and the value is\n // not available via js\n useLayoutEffect(() => {\n if (\n identifierField.value.startsWith('+') &&\n identifierAttributes.includes('phone_number') &&\n identifierAttribute !== 'phone_number' &&\n !hasSwitchedByAutofill\n ) {\n handlePhoneNumberPaste(identifierField.value);\n // do not switch automatically on subsequent autofills\n // by the browser to avoid a switch loop\n setHasSwitchedByAutofill(true);\n }\n }, [identifierField.value, identifierAttributes]);\n\n useEffect(() => {\n if (!organizationTicket) {\n return;\n }\n\n if (clerkStatus === 'sign_up') {\n const paramsToForward = new URLSearchParams();\n if (organizationTicket) {\n paramsToForward.set('__clerk_ticket', organizationTicket);\n }\n // We explicitly navigate to 'create' in the combined flow to trigger a client-side navigation. Navigating to\n // signUpUrl triggers a full page reload when used with the hash router.\n void navigate(isCombinedFlow ? `create` : signUpUrl, { searchParams: paramsToForward });\n return;\n }\n\n status.setLoading();\n card.setLoading();\n signIn\n .create({\n strategy: 'ticket',\n ticket: organizationTicket,\n })\n .then(res => {\n switch (res.status) {\n case 'needs_first_factor': {\n if (!hasOnlyEnterpriseSSOFirstFactors(res) || hasMultipleEnterpriseConnections(res.supportedFirstFactors)) {\n return navigate('factor-one');\n }\n\n return authenticateWithEnterpriseSSO();\n }\n case 'needs_second_factor':\n return navigate('factor-two');\n case 'needs_client_trust':\n return navigate('client-trust');\n case 'complete':\n removeClerkQueryParam('__clerk_ticket');\n return clerk.setActive({\n session: res.createdSessionId,\n navigate: async ({ session }) => {\n await navigateOnSetActive({ session, redirectUrl: afterSignInUrl });\n },\n });\n default: {\n console.error(clerkInvalidFAPIResponse(res.status, supportEmail));\n return;\n }\n }\n })\n .catch(err => {\n return attemptToRecoverFromSignInError(err);\n })\n .finally(() => {\n // Keep the card in loading state during SSO redirect to prevent UI flicker\n // This is necessary because there's a brief delay between initiating the SSO flow\n // and the actual redirect to the external Identity Provider\n const isRedirectingToSSOProvider = !!hasOnlyEnterpriseSSOFirstFactors(signIn);\n if (isRedirectingToSSOProvider) {\n return;\n }\n\n status.setIdle();\n card.setIdle();\n });\n }, []);\n\n useEffect(() => {\n async function handleOauthError() {\n const defaultErrorHandler = () => {\n // Error from server may be too much information for the end user, so set a generic error\n card.setError('Unable to complete action at this time. If the problem persists please contact support.');\n };\n\n const error = signIn?.firstFactorVerification?.error;\n if (error) {\n switch (error.code) {\n case ERROR_CODES.NOT_ALLOWED_TO_SIGN_UP:\n case ERROR_CODES.OAUTH_ACCESS_DENIED:\n case ERROR_CODES.NOT_ALLOWED_ACCESS:\n case ERROR_CODES.SAML_USER_ATTRIBUTE_MISSING:\n case ERROR_CODES.OAUTH_EMAIL_DOMAIN_RESERVED_BY_SAML:\n case ERROR_CODES.USER_LOCKED:\n case ERROR_CODES.EXTERNAL_ACCOUNT_NOT_FOUND:\n case ERROR_CODES.SIGN_UP_MODE_RESTRICTED:\n case ERROR_CODES.SIGN_UP_MODE_RESTRICTED_WAITLIST:\n case ERROR_CODES.ENTERPRISE_SSO_USER_ATTRIBUTE_MISSING:\n case ERROR_CODES.ENTERPRISE_SSO_EMAIL_ADDRESS_DOMAIN_MISMATCH:\n case ERROR_CODES.ENTERPRISE_SSO_HOSTED_DOMAIN_MISMATCH:\n case ERROR_CODES.SAML_EMAIL_ADDRESS_DOMAIN_MISMATCH:\n case ERROR_CODES.ORGANIZATION_MEMBERSHIP_QUOTA_EXCEEDED_FOR_SSO:\n case ERROR_CODES.CAPTCHA_INVALID:\n case ERROR_CODES.FRAUD_DEVICE_BLOCKED:\n case ERROR_CODES.FRAUD_ACTION_BLOCKED:\n case ERROR_CODES.SIGNUP_RATE_LIMIT_EXCEEDED:\n case ERROR_CODES.USER_BANNED:\n card.setError(error);\n break;\n default:\n defaultErrorHandler();\n }\n\n // TODO: This is a workaround in order to reset the sign in attempt\n // so that the oauth error does not persist on full page reloads.\n void (await signIn.create({}));\n }\n }\n\n void handleOauthError();\n }, []);\n\n const buildSignInParams = (fields: Array<FormControlState<string>>): SignInCreateParams => {\n const hasPassword = fields.some(f => f.name === 'password' && !!f.value);\n\n /**\n * FAPI will return an error when password is submitted but the user's email matches requires enterprise sso authentication.\n * We need to strip password from the create request, and reconstruct it later.\n */\n if (!hasPassword || userSettings.enterpriseSSO.enabled) {\n fields = fields.filter(f => f.name !== 'password');\n }\n return {\n ...buildRequest(fields),\n ...(hasPassword && !userSettings.enterpriseSSO.enabled && { strategy: 'password' }),\n } as SignInCreateParams;\n };\n\n const safePasswordSignInForEnterpriseSSOInstance = (\n signInCreatePromise: Promise<SignInResource>,\n fields: Array<FormControlState<string>>,\n ) => {\n return signInCreatePromise.then(signInResource => {\n if (!userSettings.enterpriseSSO.enabled) {\n return signInResource;\n }\n /**\n * For instances with Enterprise SSO enabled, perform sign in with password only when it is allowed for the identified user.\n */\n const passwordField = fields.find(f => f.name === 'password')?.value;\n if (!passwordField || signInResource.supportedFirstFactors?.some(ff => ff.strategy === 'enterprise_sso')) {\n return signInResource;\n }\n return signInResource.attemptFirstFactor({ strategy: 'password', password: passwordField });\n });\n };\n\n const signInWithFields = async (...fields: Array<FormControlState<string>>) => {\n // If the user has already selected an alternative phone code provider, we use that.\n const preferredAlternativePhoneChannel =\n alternativePhoneCodeProvider?.channel ||\n getPreferredAlternativePhoneChannel(fields, authConfig.preferredChannels, 'identifier');\n if (preferredAlternativePhoneChannel) {\n // We need to send the alternative phone code provider channel in the sign in request\n // together with the phone_code strategy, in order for FAPI to create a Verification upon this first request.\n const noop = () => {};\n fields.push({\n id: 'strategy',\n value: 'phone_code',\n clearFeedback: noop,\n setValue: noop,\n onChange: noop,\n setError: noop,\n } as any);\n fields.push({\n id: 'channel',\n value: preferredAlternativePhoneChannel,\n clearFeedback: noop,\n setValue: noop,\n onChange: noop,\n setError: noop,\n } as any);\n }\n try {\n const res = await safePasswordSignInForEnterpriseSSOInstance(signIn.create(buildSignInParams(fields)), fields);\n\n switch (res.status) {\n case 'needs_identifier':\n // Check if we need to initiate an enterprise sso flow\n if (res.supportedFirstFactors?.some(ff => ff.strategy === 'enterprise_sso')) {\n await authenticateWithEnterpriseSSO();\n }\n break;\n case 'needs_first_factor': {\n if (!hasOnlyEnterpriseSSOFirstFactors(res) || hasMultipleEnterpriseConnections(res.supportedFirstFactors)) {\n return navigate('factor-one');\n }\n\n return authenticateWithEnterpriseSSO();\n }\n case 'needs_second_factor':\n return navigate('factor-two');\n case 'needs_client_trust':\n return navigate('client-trust');\n case 'complete':\n return clerk.setActive({\n session: res.createdSessionId,\n navigate: async ({ session }) => {\n await navigateOnSetActive({ session, redirectUrl: afterSignInUrl });\n },\n });\n default: {\n console.error(clerkInvalidFAPIResponse(res.status, supportEmail));\n return;\n }\n }\n } catch (e: any) {\n return attemptToRecoverFromSignInError(e);\n }\n };\n\n const authenticateWithEnterpriseSSO = async () => {\n const redirectUrl = buildSSOCallbackURL(ctx, displayConfig.signInUrl);\n const redirectUrlComplete = ctx.afterSignInUrl || '/';\n\n return signIn.authenticateWithRedirect({\n strategy: 'enterprise_sso',\n redirectUrl,\n redirectUrlComplete,\n oidcPrompt: ctx.oidcPrompt,\n continueSignIn: true,\n });\n };\n\n const attemptToRecoverFromSignInError = async (e: any) => {\n if (!e.errors) {\n return;\n }\n const instantPasswordError: ClerkAPIError = e.errors.find(\n (e: ClerkAPIError) =>\n e.code === ERROR_CODES.INVALID_STRATEGY_FOR_USER ||\n e.code === ERROR_CODES.FORM_PASSWORD_INCORRECT ||\n e.code === ERROR_CODES.FORM_PASSWORD_PWNED,\n );\n\n const sessionAlreadyExistsError: ClerkAPIError = e.errors.find(\n (e: ClerkAPIError) => e.code === ERROR_CODES.SESSION_EXISTS,\n );\n const alreadySignedInError: ClerkAPIError = e.errors.find(\n (e: ClerkAPIError) => e.code === 'identifier_already_signed_in',\n );\n const accountDoesNotExistError: ClerkAPIError = e.errors.find(\n (e: ClerkAPIError) =>\n e.code === ERROR_CODES.INVITATION_ACCOUNT_NOT_EXISTS || e.code === ERROR_CODES.FORM_IDENTIFIER_NOT_FOUND,\n );\n\n if (instantPasswordError) {\n await signInWithFields(identifierField);\n } else if (sessionAlreadyExistsError) {\n await clerk.setActive({\n session: clerk.client.lastActiveSessionId,\n navigate: async ({ session }) => {\n await navigateOnSetActive({ session, redirectUrl: afterSignInUrl });\n },\n });\n } else if (alreadySignedInError) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const sid = alreadySignedInError.meta!.sessionId!;\n await clerk.setActive({\n session: sid,\n navigate: async ({ session }) => {\n await navigateOnSetActive({ session, redirectUrl: afterSignInUrl });\n },\n });\n } else if (isCombinedFlow && accountDoesNotExistError) {\n const attribute = getSignUpAttributeFromIdentifier(identifierField);\n\n if (userSettings.signUp.mode === SIGN_UP_MODES.WAITLIST) {\n const waitlistUrl = clerk.buildWaitlistUrl(\n attribute === 'emailAddress'\n ? {\n initialValues: {\n [attribute]: identifierField.value,\n },\n }\n : {},\n );\n return navigate(waitlistUrl);\n }\n\n clerk.client.signUp[attribute] = identifierField.value;\n\n const redirectUrl = buildSSOCallbackURL(ctx, displayConfig.signUpUrl);\n const redirectUrlComplete = ctx.afterSignUpUrl || '/';\n\n return handleCombinedFlowTransfer({\n afterSignUpUrl: ctx.afterSignUpUrl || '/',\n clerk,\n handleError: e => handleError(e, [identifierField, instantPasswordField], card.setError),\n identifierAttribute: attribute,\n identifierValue: identifierField.value,\n navigate,\n organizationTicket,\n signUpMode: userSettings.signUp.mode,\n redirectUrl,\n redirectUrlComplete,\n navigateOnSetActive,\n passwordEnabled: userSettings.attributes.password?.required ?? false,\n alternativePhoneCodeChannel:\n alternativePhoneCodeProvider?.channel ||\n getPreferredAlternativePhoneChannelForCombinedFlow(\n authConfig.preferredChannels,\n attribute,\n identifierField.value,\n ),\n });\n } else {\n handleError(e, [identifierField, instantPasswordField], card.setError);\n }\n };\n\n const handleFirstPartySubmit = async (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n return signInWithFields(identifierField, instantPasswordField);\n };\n\n const DynamicField = useMemo(() => {\n const components = {\n tel: Form.PhoneInput,\n password: Form.PasswordInput,\n text: Form.PlainInput,\n email: Form.PlainInput,\n };\n\n return components[identifierField.type as keyof typeof components];\n }, [identifierField.type]);\n\n if (status.isLoading || clerkStatus === 'sign_up') {\n // clerkStatus being sign_up will trigger a navigation to the sign up flow, so show a loading card instead of\n // rendering the sign in flow.\n return <LoadingCard />;\n }\n\n // @ts-expect-error `action` is not typed\n const { action, validLastAuthenticationStrategies, ...identifierFieldProps } = identifierField.props;\n\n const lastAuthenticationStrategy = clerk.client?.lastAuthenticationStrategy;\n const isIdentifierLastAuthenticationStrategy =\n lastAuthenticationStrategy && totalEnabledAuthMethods > 1\n ? validLastAuthenticationStrategies?.has(lastAuthenticationStrategy)\n : false;\n\n return (\n <Flow.Part part='start'>\n {!alternativePhoneCodeProvider ? (\n <Card.Root>\n <Card.Content>\n <Header.Root showLogo>\n <Header.Title\n localizationKey={\n isCombinedFlow\n ? localizationKeys('signIn.start.titleCombined')\n : localizationKeys('signIn.start.title')\n }\n />\n <Header.Subtitle\n localizationKey={\n isCombinedFlow\n ? localizationKeys('signIn.start.subtitleCombined')\n : localizationKeys('signIn.start.subtitle')\n }\n sx={{\n '&:empty': {\n display: 'none',\n },\n }}\n />\n </Header.Root>\n <Card.Alert>{card.error}</Card.Alert>\n {/*TODO: extract main in its own component */}\n <Col\n elementDescriptor={descriptors.main}\n gap={6}\n >\n <SocialButtonsReversibleContainerWithDivider>\n {hasSocialOrWeb3Buttons && (\n <SignInSocialButtons\n enableWeb3Providers\n enableOAuthProviders\n enableAlternativePhoneCodeProviders={showAlternativePhoneCodeProviders}\n onAlternativePhoneCodeProviderClick={onAlternativePhoneCodeProviderClick}\n />\n )}\n {standardFormAttributes.length ? (\n <Form.Root\n onSubmit={handleFirstPartySubmit}\n gap={8}\n >\n <Col gap={6}>\n <Form.ControlRow elementId={identifierField.id}>\n <DynamicField\n actionLabel={nextIdentifier?.action}\n onActionClicked={switchToNextIdentifier}\n {...identifierFieldProps}\n autoFocus={shouldAutofocus}\n autoComplete={isWebAuthnAutofillSupported ? 'webauthn' : undefined}\n isLastAuthenticationStrategy={isIdentifierLastAuthenticationStrategy}\n />\n </Form.ControlRow>\n <InstantPasswordRow field={passwordBasedInstance ? instantPasswordField : undefined} />\n </Col>\n <Col center>\n <CaptchaElement />\n <Form.SubmitButton hasArrow />\n </Col>\n </Form.Root>\n ) : null}\n </SocialButtonsReversibleContainerWithDivider>\n {!standardFormAttributes.length && <CaptchaElement />}\n {userSettings.attributes.passkey?.enabled &&\n userSettings.passkeySettings.show_sign_in_button &&\n isWebSupported && (\n <Card.Action elementId={'usePasskey'}>\n <Card.ActionLink\n localizationKey={localizationKeys('signIn.start.actionLink__use_passkey')}\n onClick={() => authenticateWithPasskey({ flow: 'discoverable' })}\n />\n </Card.Action>\n )}\n </Col>\n </Card.Content>\n <Card.Footer>\n {userSettings.signUp.mode === SIGN_UP_MODES.PUBLIC && !isCombinedFlow && (\n <Card.Action elementId='signIn'>\n <Card.ActionText localizationKey={localizationKeys('signIn.start.actionText')} />\n <Card.ActionLink\n localizationKey={localizationKeys('signIn.start.actionLink')}\n to={clerk.buildUrlWithAuth(signUpUrl)}\n />\n </Card.Action>\n )}\n {userSettings.signUp.mode === SIGN_UP_MODES.WAITLIST && (\n <Card.Action elementId='signIn'>\n <Card.ActionText localizationKey={localizationKeys('signIn.start.actionText__join_waitlist')} />\n <Card.ActionLink\n localizationKey={localizationKeys('signIn.start.actionLink__join_waitlist')}\n to={clerk.buildUrlWithAuth(waitlistUrl)}\n />\n </Card.Action>\n )}\n </Card.Footer>\n </Card.Root>\n ) : (\n <SignInAlternativePhoneCodePhoneNumberCard\n handleSubmit={handleFirstPartySubmit}\n phoneNumberFormState={phoneIdentifierField}\n onUseAnotherMethod={onAlternativePhoneCodeUseAnotherMethod}\n phoneCodeProvider={alternativePhoneCodeProvider}\n />\n )}\n </Flow.Part>\n );\n}\n\nconst hasOnlyEnterpriseSSOFirstFactors = (signIn: SignInResource): boolean => {\n if (!signIn.supportedFirstFactors?.length) {\n return false;\n }\n\n return signIn.supportedFirstFactors.every(ff => ff.strategy === 'enterprise_sso');\n};\n\nconst InstantPasswordRow = ({ field }: { field?: FormControlState<'password'> }) => {\n const [autofilled, setAutofilled] = useState(false);\n const ref = useRef<HTMLInputElement>(null);\n const show = !!(autofilled || field?.value);\n\n // show password if it's autofilled by the browser\n useLayoutEffect(() => {\n const intervalId = setInterval(() => {\n if (ref?.current) {\n const autofilled =\n window.getComputedStyle(ref.current, ':autofill').animationName === 'onAutoFillStart' ||\n // https://github.com/facebook/react/issues/1159#issuecomment-1025423604\n !!ref.current?.matches('*:-webkit-autofill');\n if (autofilled) {\n setAutofilled(autofilled);\n clearInterval(intervalId);\n }\n }\n }, 500);\n\n return () => {\n clearInterval(intervalId);\n };\n }, []);\n\n useEffect(() => {\n //if the field receives a value, we default to normal behaviour\n if (field?.value && field.value !== '') {\n setAutofilled(false);\n }\n }, [field?.value]);\n\n if (!field) {\n return null;\n }\n\n return (\n <Form.ControlRow\n elementId={field.id}\n sx={show ? undefined : { position: 'absolute', opacity: 0, height: 0, pointerEvents: 'none', marginTop: '-1rem' }}\n >\n <Form.PasswordInput\n {...field.props}\n ref={ref}\n tabIndex={show ? undefined : -1}\n />\n </Form.ControlRow>\n );\n};\n\nexport const SignInStart = withRedirectToSignInTask(\n withRedirectToAfterSignIn(withCardStateProvider(SignInStartInternal)),\n);\n"],"mappings":"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"}
@@ -14,13 +14,14 @@ import { LazySignUpContinue, LazySignUpSSOCallback, LazySignUpStart, LazySignUpV
14
14
  import { ResetPassword } from "./ResetPassword.js";
15
15
  import { ResetPasswordSuccess } from "./ResetPasswordSuccess.js";
16
16
  import { SignInAccountSwitcher } from "./SignInAccountSwitcher.js";
17
+ import { SignInClientTrust } from "./SignInClientTrust.js";
17
18
  import { SignInFactorOne } from "./SignInFactorOne.js";
18
19
  import { SignInFactorTwo } from "./SignInFactorTwo.js";
19
20
  import { SignInSSOCallback } from "./SignInSSOCallback.js";
20
21
  import { SignInStart } from "./SignInStart.js";
21
22
  import React from "react";
22
- import { jsx, jsxs } from "@emotion/react/jsx-runtime";
23
23
  import { useClerk } from "@clerk/shared/react";
24
+ import { jsx, jsxs } from "@emotion/react/jsx-runtime";
24
25
 
25
26
  //#region src/components/SignIn/index.tsx
26
27
  function RedirectToSignIn() {
@@ -44,6 +45,10 @@ function SignInRoutes() {
44
45
  path: "factor-two",
45
46
  children: /* @__PURE__ */ jsx(SignInFactorTwo, {})
46
47
  }),
48
+ /* @__PURE__ */ jsx(Route, {
49
+ path: "client-trust",
50
+ children: /* @__PURE__ */ jsx(SignInClientTrust, {})
51
+ }),
47
52
  /* @__PURE__ */ jsx(Route, {
48
53
  path: "reset-password",
49
54
  children: /* @__PURE__ */ jsx(ResetPassword, {})
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["LazySessionTasks","SignIn: React.ComponentType<SignInProps>"],"sources":["../../../src/components/SignIn/index.tsx"],"sourcesContent":["import { useClerk } from '@clerk/shared/react';\nimport type { SignInModalProps, SignInProps } from '@clerk/shared/types';\nimport React from 'react';\n\nimport { SignInEmailLinkFlowComplete, SignUpEmailLinkFlowComplete } from '@/ui/common/EmailLinkCompleteFlowCard';\nimport {\n SignInContext,\n SignUpContext,\n useSignInContext,\n useSignUpContext,\n withCoreSessionSwitchGuard,\n} from '@/ui/contexts';\nimport { Flow } from '@/ui/customizables';\nimport { useFetch } from '@/ui/hooks';\nimport { usePreloadTasks } from '@/ui/hooks/usePreloadTasks';\nimport { SessionTasks as LazySessionTasks } from '@/ui/lazyModules/components';\nimport { Route, Switch, VIRTUAL_ROUTER_BASE_PATH } from '@/ui/router';\nimport type { SignUpCtx } from '@/ui/types';\nimport { normalizeRoutingOptions } from '@/utils/normalizeRoutingOptions';\n\nimport {\n LazySignUpContinue,\n LazySignUpSSOCallback,\n LazySignUpStart,\n LazySignUpVerifyEmail,\n LazySignUpVerifyPhone,\n preloadSignUp,\n} from './lazy-sign-up';\nimport { ResetPassword } from './ResetPassword';\nimport { ResetPasswordSuccess } from './ResetPasswordSuccess';\nimport { SignInAccountSwitcher } from './SignInAccountSwitcher';\nimport { SignInFactorOne } from './SignInFactorOne';\nimport { SignInFactorTwo } from './SignInFactorTwo';\nimport { SignInSSOCallback } from './SignInSSOCallback';\nimport { SignInStart } from './SignInStart';\n\nfunction RedirectToSignIn() {\n const clerk = useClerk();\n React.useEffect(() => {\n void clerk.redirectToSignIn();\n }, []);\n return null;\n}\n\nfunction SignInRoutes(): JSX.Element {\n const signInContext = useSignInContext();\n const signUpContext = useSignUpContext();\n\n return (\n <Flow.Root flow='signIn'>\n <Switch>\n <Route path='factor-one'>\n <SignInFactorOne />\n </Route>\n <Route path='factor-two'>\n <SignInFactorTwo />\n </Route>\n <Route path='reset-password'>\n <ResetPassword />\n </Route>\n <Route path='reset-password-success'>\n <ResetPasswordSuccess />\n </Route>\n <Route path='sso-callback'>\n <SignInSSOCallback\n signUpUrl={signInContext.signUpUrl}\n signInUrl={signInContext.signInUrl}\n signInForceRedirectUrl={signInContext.afterSignInUrl}\n signUpForceRedirectUrl={signInContext.afterSignUpUrl}\n continueSignUpUrl={signInContext.signUpContinueUrl}\n transferable={signInContext.transferable}\n firstFactorUrl={'../factor-one'}\n secondFactorUrl={'../factor-two'}\n resetPasswordUrl={'../reset-password'}\n />\n </Route>\n <Route path='choose'>\n <SignInAccountSwitcher />\n </Route>\n <Route path='verify'>\n <SignInEmailLinkFlowComplete\n redirectUrlComplete={signInContext.afterSignInUrl}\n redirectUrl='../factor-two'\n />\n </Route>\n\n {signInContext.isCombinedFlow && (\n <Route path='create'>\n <Route\n path='verify-email-address'\n canActivate={clerk => !!clerk.client.signUp.emailAddress}\n >\n <LazySignUpVerifyEmail />\n </Route>\n <Route\n path='verify-phone-number'\n canActivate={clerk => !!clerk.client.signUp.phoneNumber}\n >\n <LazySignUpVerifyPhone />\n </Route>\n <Route path='sso-callback'>\n <LazySignUpSSOCallback\n signUpUrl={signUpContext.signUpUrl}\n signInUrl={signUpContext.signInUrl}\n signUpForceRedirectUrl={signUpContext.afterSignUpUrl}\n signInForceRedirectUrl={signUpContext.afterSignInUrl}\n secondFactorUrl={signUpContext.secondFactorUrl}\n continueSignUpUrl='../continue'\n verifyEmailAddressUrl='../verify-email-address'\n verifyPhoneNumberUrl='../verify-phone-number'\n />\n </Route>\n <Route path='verify'>\n <SignUpEmailLinkFlowComplete\n redirectUrlComplete={signUpContext.afterSignUpUrl}\n verifyEmailPath='../verify-email-address'\n verifyPhonePath='../verify-phone-number'\n continuePath='../continue'\n />\n </Route>\n <Route path='continue'>\n <Route\n path='verify-email-address'\n canActivate={clerk => !!clerk.client.signUp.emailAddress}\n >\n <LazySignUpVerifyEmail />\n </Route>\n <Route\n path='verify-phone-number'\n canActivate={clerk => !!clerk.client.signUp.phoneNumber}\n >\n <LazySignUpVerifyPhone />\n </Route>\n <Route index>\n <LazySignUpContinue />\n </Route>\n </Route>\n <Route path='tasks'>\n <LazySessionTasks redirectUrlComplete={signInContext.afterSignUpUrl} />\n </Route>\n <Route index>\n <LazySignUpStart />\n </Route>\n </Route>\n )}\n <Route path='tasks'>\n <LazySessionTasks redirectUrlComplete={signInContext.afterSignInUrl} />\n </Route>\n <Route index>\n <SignInStart />\n </Route>\n <Route>\n <RedirectToSignIn />\n </Route>\n </Switch>\n </Flow.Root>\n );\n}\n\nconst usePreloadSignUp = (enabled = false) =>\n useFetch(enabled ? preloadSignUp : undefined, 'preloadComponent', { staleTime: Infinity });\n\nfunction SignInRoot() {\n const signInContext = useSignInContext();\n const normalizedSignUpContext = {\n componentName: 'SignUp',\n emailLinkRedirectUrl: signInContext.emailLinkRedirectUrl,\n ssoCallbackUrl: signInContext.ssoCallbackUrl,\n forceRedirectUrl: signInContext.signUpForceRedirectUrl,\n fallbackRedirectUrl: signInContext.signUpFallbackRedirectUrl,\n signInUrl: signInContext.signInUrl,\n unsafeMetadata: signInContext.unsafeMetadata,\n ...normalizeRoutingOptions({ routing: signInContext?.routing, path: signInContext?.path }),\n } as SignUpCtx;\n\n /**\n * Preload Sign Up when in Combined Flow.\n */\n usePreloadSignUp(signInContext.isCombinedFlow);\n\n usePreloadTasks();\n\n return (\n <SignUpContext.Provider value={normalizedSignUpContext}>\n <SignInRoutes />\n </SignUpContext.Provider>\n );\n}\n\nSignInRoutes.displayName = 'SignIn';\n\nexport const SignIn: React.ComponentType<SignInProps> = withCoreSessionSwitchGuard(SignInRoot);\n\nexport const SignInModal = (props: SignInModalProps): JSX.Element => {\n const signInProps = {\n signUpUrl: `/${VIRTUAL_ROUTER_BASE_PATH}/sign-up`,\n waitlistUrl: `/${VIRTUAL_ROUTER_BASE_PATH}/waitlist`,\n ...props,\n };\n\n return (\n <Route path='sign-in'>\n <SignInContext.Provider\n value={{\n componentName: 'SignIn',\n ...signInProps,\n routing: 'virtual',\n mode: 'modal',\n }}\n >\n {/*TODO: Used by InvisibleRootBox, can we simplify? */}\n <div>\n <SignIn\n {...signInProps}\n routing='virtual'\n />\n </div>\n </SignInContext.Provider>\n </Route>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["LazySessionTasks","SignIn: React.ComponentType<SignInProps>"],"sources":["../../../src/components/SignIn/index.tsx"],"sourcesContent":["import { useClerk } from '@clerk/shared/react';\nimport type { SignInModalProps, SignInProps } from '@clerk/shared/types';\nimport React from 'react';\n\nimport { SignInEmailLinkFlowComplete, SignUpEmailLinkFlowComplete } from '@/ui/common/EmailLinkCompleteFlowCard';\nimport {\n SignInContext,\n SignUpContext,\n useSignInContext,\n useSignUpContext,\n withCoreSessionSwitchGuard,\n} from '@/ui/contexts';\nimport { Flow } from '@/ui/customizables';\nimport { useFetch } from '@/ui/hooks';\nimport { usePreloadTasks } from '@/ui/hooks/usePreloadTasks';\nimport { SessionTasks as LazySessionTasks } from '@/ui/lazyModules/components';\nimport { Route, Switch, VIRTUAL_ROUTER_BASE_PATH } from '@/ui/router';\nimport type { SignUpCtx } from '@/ui/types';\nimport { normalizeRoutingOptions } from '@/utils/normalizeRoutingOptions';\n\nimport {\n LazySignUpContinue,\n LazySignUpSSOCallback,\n LazySignUpStart,\n LazySignUpVerifyEmail,\n LazySignUpVerifyPhone,\n preloadSignUp,\n} from './lazy-sign-up';\nimport { ResetPassword } from './ResetPassword';\nimport { ResetPasswordSuccess } from './ResetPasswordSuccess';\nimport { SignInAccountSwitcher } from './SignInAccountSwitcher';\nimport { SignInClientTrust } from './SignInClientTrust';\nimport { SignInFactorOne } from './SignInFactorOne';\nimport { SignInFactorTwo } from './SignInFactorTwo';\nimport { SignInSSOCallback } from './SignInSSOCallback';\nimport { SignInStart } from './SignInStart';\n\nfunction RedirectToSignIn() {\n const clerk = useClerk();\n React.useEffect(() => {\n void clerk.redirectToSignIn();\n }, []);\n return null;\n}\n\nfunction SignInRoutes(): JSX.Element {\n const signInContext = useSignInContext();\n const signUpContext = useSignUpContext();\n\n return (\n <Flow.Root flow='signIn'>\n <Switch>\n <Route path='factor-one'>\n <SignInFactorOne />\n </Route>\n <Route path='factor-two'>\n <SignInFactorTwo />\n </Route>\n <Route path='client-trust'>\n <SignInClientTrust />\n </Route>\n <Route path='reset-password'>\n <ResetPassword />\n </Route>\n <Route path='reset-password-success'>\n <ResetPasswordSuccess />\n </Route>\n <Route path='sso-callback'>\n <SignInSSOCallback\n signUpUrl={signInContext.signUpUrl}\n signInUrl={signInContext.signInUrl}\n signInForceRedirectUrl={signInContext.afterSignInUrl}\n signUpForceRedirectUrl={signInContext.afterSignUpUrl}\n continueSignUpUrl={signInContext.signUpContinueUrl}\n transferable={signInContext.transferable}\n firstFactorUrl={'../factor-one'}\n secondFactorUrl={'../factor-two'}\n resetPasswordUrl={'../reset-password'}\n />\n </Route>\n <Route path='choose'>\n <SignInAccountSwitcher />\n </Route>\n <Route path='verify'>\n <SignInEmailLinkFlowComplete\n redirectUrlComplete={signInContext.afterSignInUrl}\n redirectUrl='../factor-two'\n />\n </Route>\n\n {signInContext.isCombinedFlow && (\n <Route path='create'>\n <Route\n path='verify-email-address'\n canActivate={clerk => !!clerk.client.signUp.emailAddress}\n >\n <LazySignUpVerifyEmail />\n </Route>\n <Route\n path='verify-phone-number'\n canActivate={clerk => !!clerk.client.signUp.phoneNumber}\n >\n <LazySignUpVerifyPhone />\n </Route>\n <Route path='sso-callback'>\n <LazySignUpSSOCallback\n signUpUrl={signUpContext.signUpUrl}\n signInUrl={signUpContext.signInUrl}\n signUpForceRedirectUrl={signUpContext.afterSignUpUrl}\n signInForceRedirectUrl={signUpContext.afterSignInUrl}\n secondFactorUrl={signUpContext.secondFactorUrl}\n continueSignUpUrl='../continue'\n verifyEmailAddressUrl='../verify-email-address'\n verifyPhoneNumberUrl='../verify-phone-number'\n />\n </Route>\n <Route path='verify'>\n <SignUpEmailLinkFlowComplete\n redirectUrlComplete={signUpContext.afterSignUpUrl}\n verifyEmailPath='../verify-email-address'\n verifyPhonePath='../verify-phone-number'\n continuePath='../continue'\n />\n </Route>\n <Route path='continue'>\n <Route\n path='verify-email-address'\n canActivate={clerk => !!clerk.client.signUp.emailAddress}\n >\n <LazySignUpVerifyEmail />\n </Route>\n <Route\n path='verify-phone-number'\n canActivate={clerk => !!clerk.client.signUp.phoneNumber}\n >\n <LazySignUpVerifyPhone />\n </Route>\n <Route index>\n <LazySignUpContinue />\n </Route>\n </Route>\n <Route path='tasks'>\n <LazySessionTasks redirectUrlComplete={signInContext.afterSignUpUrl} />\n </Route>\n <Route index>\n <LazySignUpStart />\n </Route>\n </Route>\n )}\n <Route path='tasks'>\n <LazySessionTasks redirectUrlComplete={signInContext.afterSignInUrl} />\n </Route>\n <Route index>\n <SignInStart />\n </Route>\n <Route>\n <RedirectToSignIn />\n </Route>\n </Switch>\n </Flow.Root>\n );\n}\n\nconst usePreloadSignUp = (enabled = false) =>\n useFetch(enabled ? preloadSignUp : undefined, 'preloadComponent', { staleTime: Infinity });\n\nfunction SignInRoot() {\n const signInContext = useSignInContext();\n const normalizedSignUpContext = {\n componentName: 'SignUp',\n emailLinkRedirectUrl: signInContext.emailLinkRedirectUrl,\n ssoCallbackUrl: signInContext.ssoCallbackUrl,\n forceRedirectUrl: signInContext.signUpForceRedirectUrl,\n fallbackRedirectUrl: signInContext.signUpFallbackRedirectUrl,\n signInUrl: signInContext.signInUrl,\n unsafeMetadata: signInContext.unsafeMetadata,\n ...normalizeRoutingOptions({ routing: signInContext?.routing, path: signInContext?.path }),\n } as SignUpCtx;\n\n /**\n * Preload Sign Up when in Combined Flow.\n */\n usePreloadSignUp(signInContext.isCombinedFlow);\n\n usePreloadTasks();\n\n return (\n <SignUpContext.Provider value={normalizedSignUpContext}>\n <SignInRoutes />\n </SignUpContext.Provider>\n );\n}\n\nSignInRoutes.displayName = 'SignIn';\n\nexport const SignIn: React.ComponentType<SignInProps> = withCoreSessionSwitchGuard(SignInRoot);\n\nexport const SignInModal = (props: SignInModalProps): JSX.Element => {\n const signInProps = {\n signUpUrl: `/${VIRTUAL_ROUTER_BASE_PATH}/sign-up`,\n waitlistUrl: `/${VIRTUAL_ROUTER_BASE_PATH}/waitlist`,\n ...props,\n };\n\n return (\n <Route path='sign-in'>\n <SignInContext.Provider\n value={{\n componentName: 'SignIn',\n ...signInProps,\n routing: 'virtual',\n mode: 'modal',\n }}\n >\n {/*TODO: Used by InvisibleRootBox, can we simplify? */}\n <div>\n <SignIn\n {...signInProps}\n routing='virtual'\n />\n </div>\n </SignInContext.Provider>\n </Route>\n );\n};\n"],"mappings":"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"}
@@ -5,8 +5,8 @@ import { handleError } from "../../utils/errorHandler.js";
5
5
  import { useSupportEmail } from "../../hooks/useSupportEmail.js";
6
6
  import { clerkInvalidFAPIResponse } from "@clerk/shared/internal/clerk-js/errors";
7
7
  import { useCallback, useEffect } from "react";
8
- import { isClerkRuntimeError, isUserLockedError } from "@clerk/shared/error";
9
8
  import { useClerk } from "@clerk/shared/react";
9
+ import { isClerkRuntimeError, isUserLockedError } from "@clerk/shared/error";
10
10
  import { __internal_WebAuthnAbortService } from "@clerk/shared/internal/clerk-js/passkeys";
11
11
 
12
12
  //#region src/components/SignIn/shared.ts
@@ -0,0 +1,35 @@
1
+ import { determineStartingSignInSecondFactor } from "./utils.js";
2
+ import React from "react";
3
+
4
+ //#region src/components/SignIn/useSecondFactorSelection.ts
5
+ const secondFactorKey = (factor) => {
6
+ if (!factor) return "";
7
+ let key = factor.strategy;
8
+ if ("phoneNumberId" in factor) key += factor.phoneNumberId;
9
+ return key;
10
+ };
11
+ function useSecondFactorSelection(availableFactors) {
12
+ const lastPreparedFactorKeyRef = React.useRef("");
13
+ const [currentFactor, setCurrentFactor] = React.useState(() => determineStartingSignInSecondFactor(availableFactors));
14
+ const [showAllStrategies, setShowAllStrategies] = React.useState(!currentFactor);
15
+ const toggleAllStrategies = () => setShowAllStrategies((s) => !s);
16
+ const handleFactorPrepare = () => {
17
+ lastPreparedFactorKeyRef.current = secondFactorKey(currentFactor);
18
+ };
19
+ const selectFactor = (factor) => {
20
+ setCurrentFactor(factor);
21
+ setShowAllStrategies(false);
22
+ };
23
+ return {
24
+ currentFactor,
25
+ factorAlreadyPrepared: lastPreparedFactorKeyRef.current === secondFactorKey(currentFactor),
26
+ handleFactorPrepare,
27
+ selectFactor,
28
+ showAllStrategies,
29
+ toggleAllStrategies
30
+ };
31
+ }
32
+
33
+ //#endregion
34
+ export { useSecondFactorSelection };
35
+ //# sourceMappingURL=useSecondFactorSelection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSecondFactorSelection.js","names":[],"sources":["../../../src/components/SignIn/useSecondFactorSelection.ts"],"sourcesContent":["import type { SignInFactor } from '@clerk/shared/types';\nimport React from 'react';\n\nimport { determineStartingSignInSecondFactor } from './utils';\n\nconst secondFactorKey = (factor: SignInFactor | null | undefined) => {\n if (!factor) {\n return '';\n }\n let key = factor.strategy;\n if ('phoneNumberId' in factor) {\n key += factor.phoneNumberId;\n }\n return key;\n};\n\nexport function useSecondFactorSelection<T extends SignInFactor = SignInFactor>(availableFactors: T[] | null) {\n const lastPreparedFactorKeyRef = React.useRef('');\n const [currentFactor, setCurrentFactor] = React.useState<T | null>(\n () => determineStartingSignInSecondFactor(availableFactors) as T | null,\n );\n\n const [showAllStrategies, setShowAllStrategies] = React.useState<boolean>(!currentFactor);\n const toggleAllStrategies = () => setShowAllStrategies(s => !s);\n\n const handleFactorPrepare = () => {\n lastPreparedFactorKeyRef.current = secondFactorKey(currentFactor);\n };\n\n const selectFactor = (factor: T) => {\n setCurrentFactor(factor);\n setShowAllStrategies(false);\n };\n\n const factorAlreadyPrepared = lastPreparedFactorKeyRef.current === secondFactorKey(currentFactor);\n\n return {\n currentFactor,\n factorAlreadyPrepared,\n handleFactorPrepare,\n selectFactor,\n showAllStrategies,\n toggleAllStrategies,\n };\n}\n"],"mappings":";;;;AAKA,MAAM,mBAAmB,WAA4C;AACnE,KAAI,CAAC,OACH,QAAO;CAET,IAAI,MAAM,OAAO;AACjB,KAAI,mBAAmB,OACrB,QAAO,OAAO;AAEhB,QAAO;;AAGT,SAAgB,yBAAgE,kBAA8B;CAC5G,MAAM,2BAA2B,MAAM,OAAO,GAAG;CACjD,MAAM,CAAC,eAAe,oBAAoB,MAAM,eACxC,oCAAoC,iBAAiB,CAC5D;CAED,MAAM,CAAC,mBAAmB,wBAAwB,MAAM,SAAkB,CAAC,cAAc;CACzF,MAAM,4BAA4B,sBAAqB,MAAK,CAAC,EAAE;CAE/D,MAAM,4BAA4B;AAChC,2BAAyB,UAAU,gBAAgB,cAAc;;CAGnE,MAAM,gBAAgB,WAAc;AAClC,mBAAiB,OAAO;AACxB,uBAAqB,MAAM;;AAK7B,QAAO;EACL;EACA,uBAJ4B,yBAAyB,YAAY,gBAAgB,cAAc;EAK/F;EACA;EACA;EACA;EACD"}
@@ -21,8 +21,8 @@ import { determineActiveFields, emailOrPhone, getInitialActiveIdentifier, minimi
21
21
  import { SignUpSocialButtons } from "./SignUpSocialButtons.js";
22
22
  import { completeSignUpFlow } from "./util.js";
23
23
  import React, { useEffect, useMemo } from "react";
24
- import { jsx, jsxs } from "@emotion/react/jsx-runtime";
25
24
  import { useClerk } from "@clerk/shared/react";
25
+ import { jsx, jsxs } from "@emotion/react/jsx-runtime";
26
26
 
27
27
  //#region src/components/SignUp/SignUpContinue.tsx
28
28
  function SignUpContinueInternal() {
@@ -11,8 +11,8 @@ import { handleError } from "../../utils/errorHandler.js";
11
11
  import { VerificationLinkCard } from "../../elements/VerificationLinkCard.js";
12
12
  import { completeSignUpFlow } from "./util.js";
13
13
  import React from "react";
14
- import { jsx } from "@emotion/react/jsx-runtime";
15
14
  import { useClerk } from "@clerk/shared/react";
15
+ import { jsx } from "@emotion/react/jsx-runtime";
16
16
 
17
17
  //#region src/components/SignUp/SignUpEmailLinkCard.tsx
18
18
  const SignUpEmailLinkCard = () => {
@@ -9,8 +9,8 @@ import { Card } from "../../elements/Card/index.js";
9
9
  import { Header } from "../../elements/Header.js";
10
10
  import { useSupportEmail } from "../../hooks/useSupportEmail.js";
11
11
  import { SIGN_UP_MODES } from "@clerk/shared/internal/clerk-js/constants";
12
- import { jsx, jsxs } from "@emotion/react/jsx-runtime";
13
12
  import { useClerk } from "@clerk/shared/react";
13
+ import { jsx, jsxs } from "@emotion/react/jsx-runtime";
14
14
 
15
15
  //#region src/components/SignUp/SignUpRestrictedAccess.tsx
16
16
  const SignUpRestrictedAccess = () => {
@@ -7,8 +7,8 @@ import { originPrefersPopup } from "../../utils/originPrefersPopup.js";
7
7
  import { web3CallbackErrorHandler } from "../../utils/web3CallbackErrorHandler.js";
8
8
  import { SocialButtons } from "../../elements/SocialButtons.js";
9
9
  import React from "react";
10
- import { jsx } from "@emotion/react/jsx-runtime";
11
10
  import { useClerk } from "@clerk/shared/react";
11
+ import { jsx } from "@emotion/react/jsx-runtime";
12
12
 
13
13
  //#region src/components/SignUp/SignUpSocialButtons.tsx
14
14
  const SignUpSocialButtons = React.memo((props) => {
@@ -31,9 +31,9 @@ import { SignUpStartAlternativePhoneCodePhoneNumberCard } from "./SignUpStartAlt
31
31
  import React from "react";
32
32
  import { ERROR_CODES, SIGN_UP_MODES } from "@clerk/shared/internal/clerk-js/constants";
33
33
  import { getClerkQueryParam, removeClerkQueryParam } from "@clerk/shared/internal/clerk-js/queryParams";
34
+ import { useClerk } from "@clerk/shared/react";
34
35
  import { jsx, jsxs } from "@emotion/react/jsx-runtime";
35
36
  import { isClerkAPIResponseError } from "@clerk/shared/error";
36
- import { useClerk } from "@clerk/shared/react";
37
37
  import { getAlternativePhoneCodeProviderData } from "@clerk/shared/alternativePhoneCode";
38
38
 
39
39
  //#region src/components/SignUp/SignUpStart.tsx
@@ -5,8 +5,8 @@ import { VerificationCodeCard } from "../../elements/VerificationCodeCard.js";
5
5
  import { completeSignUpFlow } from "./util.js";
6
6
  import React from "react";
7
7
  import { forwardClerkQueryParams } from "@clerk/shared/internal/clerk-js/queryParams";
8
- import { jsx } from "@emotion/react/jsx-runtime";
9
8
  import { useClerk } from "@clerk/shared/react";
9
+ import { jsx } from "@emotion/react/jsx-runtime";
10
10
 
11
11
  //#region src/components/SignUp/SignUpVerificationCodeForm.tsx
12
12
  const SignUpVerificationCodeForm = (props) => {
@@ -14,8 +14,8 @@ import { SignUpStart } from "./SignUpStart.js";
14
14
  import { SignUpVerifyEmail } from "./SignUpVerifyEmail.js";
15
15
  import { SignUpVerifyPhone } from "./SignUpVerifyPhone.js";
16
16
  import React from "react";
17
- import { jsx, jsxs } from "@emotion/react/jsx-runtime";
18
17
  import { useClerk } from "@clerk/shared/react";
18
+ import { jsx, jsxs } from "@emotion/react/jsx-runtime";
19
19
 
20
20
  //#region src/components/SignUp/index.tsx
21
21
  function RedirectToSignUp() {
@@ -17,8 +17,8 @@ import { SubscriptionBadge } from "../Subscriptions/badge.js";
17
17
  import { Avatar } from "../../elements/Avatar.js";
18
18
  import * as React$1 from "react";
19
19
  import { useCallback, useContext, useState } from "react";
20
- import { Fragment as Fragment$1, jsx, jsxs } from "@emotion/react/jsx-runtime";
21
20
  import { useClerk, useOrganizationContext } from "@clerk/shared/react";
21
+ import { Fragment as Fragment$1, jsx, jsxs } from "@emotion/react/jsx-runtime";
22
22
 
23
23
  //#region src/components/SubscriptionDetails/index.tsx
24
24
  const isFreePlan = (plan) => !plan.hasBaseFee;
@@ -7,8 +7,8 @@ import { RootBox } from "../../elements/RootBox.js";
7
7
  import { MultiSessionActions, SignOutAllActions, SingleSessionActions } from "./SessionActions.js";
8
8
  import { useMultisessionActions } from "./useMultisessionActions.js";
9
9
  import React from "react";
10
- import { jsx, jsxs } from "@emotion/react/jsx-runtime";
11
10
  import { useSession, useUser } from "@clerk/shared/react";
11
+ import { jsx, jsxs } from "@emotion/react/jsx-runtime";
12
12
 
13
13
  //#region src/components/UserButton/UserButtonPopover.tsx
14
14
  const UserButtonPopover = React.forwardRef((props, ref) => {
@@ -1,7 +1,7 @@
1
1
  import { descriptors } from "../../customizables/elementDescriptors.js";
2
2
  import { Text } from "../../customizables/index.js";
3
- import { jsx } from "@emotion/react/jsx-runtime";
4
3
  import { useUser } from "@clerk/shared/react";
4
+ import { jsx } from "@emotion/react/jsx-runtime";
5
5
  import { getFullName, getIdentifier } from "@clerk/shared/internal/clerk-js/user";
6
6
 
7
7
  //#region src/components/UserButton/UserButtonTopLevelIdentifier.tsx
@@ -7,8 +7,8 @@ import { UserAvatar } from "../../elements/UserAvatar.js";
7
7
  import { withAvatarShimmer } from "../../elements/withAvatarShimmer.js";
8
8
  import { UserButtonTopLevelIdentifier } from "./UserButtonTopLevelIdentifier.js";
9
9
  import { forwardRef } from "react";
10
- import { jsx, jsxs } from "@emotion/react/jsx-runtime";
11
10
  import { useUser } from "@clerk/shared/react";
11
+ import { jsx, jsxs } from "@emotion/react/jsx-runtime";
12
12
 
13
13
  //#region src/components/UserButton/UserButtonTrigger.tsx
14
14
  const UserButtonTrigger = withAvatarShimmer(forwardRef((props, ref) => {
@@ -3,7 +3,7 @@ import { useEnvironment } from "../../contexts/EnvironmentContext.js";
3
3
  import { useCardState } from "../../elements/contexts/index.js";
4
4
  import { sleep } from "../../utils/sleep.js";
5
5
  import { useMultipleSessions } from "../../hooks/useMultipleSessions.js";
6
- import { useClerk } from "@clerk/shared/react";
6
+ import { useClerk, usePortalRoot } from "@clerk/shared/react";
7
7
  import { navigateIfTaskExists } from "@clerk/shared/internal/clerk-js/sessionTasks";
8
8
  import { windowNavigate } from "@clerk/shared/internal/clerk-js/windowNavigate";
9
9
 
@@ -14,6 +14,7 @@ const useMultisessionActions = (opts) => {
14
14
  const { signedInSessions, otherSessions } = useMultipleSessions({ user: opts.user });
15
15
  const { navigate } = useRouter();
16
16
  const { displayConfig } = useEnvironment();
17
+ const getContainer = usePortalRoot();
17
18
  const handleSignOutSessionClicked = (session) => () => {
18
19
  if (otherSessions.length === 0) return signOut(opts.navigateAfterSignOut);
19
20
  return signOut(opts.navigateAfterMultiSessionSingleSignOut, { sessionId: session.id }).finally(() => card.setIdle());
@@ -25,7 +26,10 @@ const useMultisessionActions = (opts) => {
25
26
  opts.actionCompleteCallback?.();
26
27
  })();
27
28
  });
28
- openUserProfile(opts.userProfileProps);
29
+ openUserProfile({
30
+ getContainer,
31
+ ...opts.userProfileProps
32
+ });
29
33
  return opts.actionCompleteCallback?.();
30
34
  };
31
35
  const handleUserProfileActionClicked = (__experimental_startPath) => {
@@ -36,6 +40,7 @@ const useMultisessionActions = (opts) => {
36
40
  })();
37
41
  });
38
42
  openUserProfile({
43
+ getContainer,
39
44
  ...opts.userProfileProps,
40
45
  ...__experimental_startPath && { __experimental_startPath }
41
46
  });
@@ -1 +1 @@
1
- {"version":3,"file":"useMultisessionActions.js","names":["session"],"sources":["../../../src/components/UserButton/useMultisessionActions.tsx"],"sourcesContent":["import { navigateIfTaskExists } from '@clerk/shared/internal/clerk-js/sessionTasks';\nimport { windowNavigate } from '@clerk/shared/internal/clerk-js/windowNavigate';\nimport { useClerk } from '@clerk/shared/react';\nimport type { SignedInSessionResource, UserButtonProps, UserResource } from '@clerk/shared/types';\n\nimport { useEnvironment } from '@/ui/contexts';\nimport { useCardState } from '@/ui/elements/contexts';\nimport { sleep } from '@/ui/utils/sleep';\n\nimport { useMultipleSessions } from '../../hooks/useMultipleSessions';\nimport { useRouter } from '../../router';\n\ntype UseMultisessionActionsParams = {\n user: UserResource | null | undefined;\n actionCompleteCallback?: () => void;\n navigateAfterSignOut?: () => any;\n navigateAfterMultiSessionSingleSignOut?: () => any;\n afterSwitchSessionUrl?: string;\n userProfileUrl?: string;\n signInUrl?: string;\n taskUrl?: string | null;\n} & Pick<UserButtonProps, 'userProfileMode' | 'appearance' | 'userProfileProps'>;\n\nexport const useMultisessionActions = (opts: UseMultisessionActionsParams) => {\n const { setActive, signOut, openUserProfile } = useClerk();\n const card = useCardState();\n const { signedInSessions, otherSessions } = useMultipleSessions({ user: opts.user });\n const { navigate } = useRouter();\n const { displayConfig } = useEnvironment();\n\n const handleSignOutSessionClicked = (session: SignedInSessionResource) => () => {\n if (otherSessions.length === 0) {\n return signOut(opts.navigateAfterSignOut);\n }\n return signOut(opts.navigateAfterMultiSessionSingleSignOut, { sessionId: session.id }).finally(() =>\n card.setIdle(),\n );\n };\n\n const handleManageAccountClicked = () => {\n if (opts.userProfileMode === 'navigation') {\n return navigate(opts.userProfileUrl || '').finally(() => {\n void (async () => {\n await sleep(300);\n opts.actionCompleteCallback?.();\n })();\n });\n }\n openUserProfile(opts.userProfileProps);\n return opts.actionCompleteCallback?.();\n };\n\n const handleUserProfileActionClicked = (__experimental_startPath?: string) => {\n if (opts.userProfileMode === 'navigation') {\n return navigate(opts.userProfileUrl || '').finally(() => {\n void (async () => {\n await sleep(300);\n opts.actionCompleteCallback?.();\n })();\n });\n }\n openUserProfile({\n ...opts.userProfileProps,\n ...(__experimental_startPath && { __experimental_startPath }),\n });\n\n return opts.actionCompleteCallback?.();\n };\n\n const handleSignOutAllClicked = () => {\n return signOut(opts.navigateAfterSignOut);\n };\n\n const handleSessionClicked = (session: SignedInSessionResource) => async () => {\n card.setLoading();\n\n return setActive({\n session,\n navigate: async ({ session }) => {\n if (!session.currentTask && opts.afterSwitchSessionUrl) {\n await navigate(opts.afterSwitchSessionUrl);\n return;\n }\n\n if (opts.taskUrl) {\n await navigate(opts.taskUrl);\n return;\n }\n\n await navigateIfTaskExists(session, {\n baseUrl: opts.signInUrl ?? displayConfig.signInUrl,\n navigate,\n });\n },\n }).finally(() => {\n card.setIdle();\n opts.actionCompleteCallback?.();\n });\n };\n\n const handleAddAccountClicked = () => {\n windowNavigate(opts.signInUrl || window.location.href);\n return sleep(2000);\n };\n\n return {\n handleSignOutSessionClicked,\n handleManageAccountClicked,\n handleUserProfileActionClicked,\n handleSignOutAllClicked,\n handleSessionClicked,\n handleAddAccountClicked,\n otherSessions,\n signedInSessions,\n };\n};\n"],"mappings":";;;;;;;;;;AAuBA,MAAa,0BAA0B,SAAuC;CAC5E,MAAM,EAAE,WAAW,SAAS,oBAAoB,UAAU;CAC1D,MAAM,OAAO,cAAc;CAC3B,MAAM,EAAE,kBAAkB,kBAAkB,oBAAoB,EAAE,MAAM,KAAK,MAAM,CAAC;CACpF,MAAM,EAAE,aAAa,WAAW;CAChC,MAAM,EAAE,kBAAkB,gBAAgB;CAE1C,MAAM,+BAA+B,kBAA2C;AAC9E,MAAI,cAAc,WAAW,EAC3B,QAAO,QAAQ,KAAK,qBAAqB;AAE3C,SAAO,QAAQ,KAAK,wCAAwC,EAAE,WAAW,QAAQ,IAAI,CAAC,CAAC,cACrF,KAAK,SAAS,CACf;;CAGH,MAAM,mCAAmC;AACvC,MAAI,KAAK,oBAAoB,aAC3B,QAAO,SAAS,KAAK,kBAAkB,GAAG,CAAC,cAAc;AACvD,IAAM,YAAY;AAChB,UAAM,MAAM,IAAI;AAChB,SAAK,0BAA0B;OAC7B;IACJ;AAEJ,kBAAgB,KAAK,iBAAiB;AACtC,SAAO,KAAK,0BAA0B;;CAGxC,MAAM,kCAAkC,6BAAsC;AAC5E,MAAI,KAAK,oBAAoB,aAC3B,QAAO,SAAS,KAAK,kBAAkB,GAAG,CAAC,cAAc;AACvD,IAAM,YAAY;AAChB,UAAM,MAAM,IAAI;AAChB,SAAK,0BAA0B;OAC7B;IACJ;AAEJ,kBAAgB;GACd,GAAG,KAAK;GACR,GAAI,4BAA4B,EAAE,0BAA0B;GAC7D,CAAC;AAEF,SAAO,KAAK,0BAA0B;;CAGxC,MAAM,gCAAgC;AACpC,SAAO,QAAQ,KAAK,qBAAqB;;CAG3C,MAAM,wBAAwB,YAAqC,YAAY;AAC7E,OAAK,YAAY;AAEjB,SAAO,UAAU;GACf;GACA,UAAU,OAAO,EAAE,yBAAc;AAC/B,QAAI,CAACA,UAAQ,eAAe,KAAK,uBAAuB;AACtD,WAAM,SAAS,KAAK,sBAAsB;AAC1C;;AAGF,QAAI,KAAK,SAAS;AAChB,WAAM,SAAS,KAAK,QAAQ;AAC5B;;AAGF,UAAM,qBAAqBA,WAAS;KAClC,SAAS,KAAK,aAAa,cAAc;KACzC;KACD,CAAC;;GAEL,CAAC,CAAC,cAAc;AACf,QAAK,SAAS;AACd,QAAK,0BAA0B;IAC/B;;CAGJ,MAAM,gCAAgC;AACpC,iBAAe,KAAK,aAAa,OAAO,SAAS,KAAK;AACtD,SAAO,MAAM,IAAK;;AAGpB,QAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD"}
1
+ {"version":3,"file":"useMultisessionActions.js","names":["session"],"sources":["../../../src/components/UserButton/useMultisessionActions.tsx"],"sourcesContent":["import { navigateIfTaskExists } from '@clerk/shared/internal/clerk-js/sessionTasks';\nimport { windowNavigate } from '@clerk/shared/internal/clerk-js/windowNavigate';\nimport { useClerk, usePortalRoot } from '@clerk/shared/react';\nimport type { SignedInSessionResource, UserButtonProps, UserResource } from '@clerk/shared/types';\n\nimport { useEnvironment } from '@/ui/contexts';\nimport { useCardState } from '@/ui/elements/contexts';\nimport { sleep } from '@/ui/utils/sleep';\n\nimport { useMultipleSessions } from '../../hooks/useMultipleSessions';\nimport { useRouter } from '../../router';\n\ntype UseMultisessionActionsParams = {\n user: UserResource | null | undefined;\n actionCompleteCallback?: () => void;\n navigateAfterSignOut?: () => any;\n navigateAfterMultiSessionSingleSignOut?: () => any;\n afterSwitchSessionUrl?: string;\n userProfileUrl?: string;\n signInUrl?: string;\n taskUrl?: string | null;\n} & Pick<UserButtonProps, 'userProfileMode' | 'appearance' | 'userProfileProps'>;\n\nexport const useMultisessionActions = (opts: UseMultisessionActionsParams) => {\n const { setActive, signOut, openUserProfile } = useClerk();\n const card = useCardState();\n const { signedInSessions, otherSessions } = useMultipleSessions({ user: opts.user });\n const { navigate } = useRouter();\n const { displayConfig } = useEnvironment();\n const getContainer = usePortalRoot();\n\n const handleSignOutSessionClicked = (session: SignedInSessionResource) => () => {\n if (otherSessions.length === 0) {\n return signOut(opts.navigateAfterSignOut);\n }\n return signOut(opts.navigateAfterMultiSessionSingleSignOut, { sessionId: session.id }).finally(() =>\n card.setIdle(),\n );\n };\n\n const handleManageAccountClicked = () => {\n if (opts.userProfileMode === 'navigation') {\n return navigate(opts.userProfileUrl || '').finally(() => {\n void (async () => {\n await sleep(300);\n opts.actionCompleteCallback?.();\n })();\n });\n }\n openUserProfile({ getContainer, ...opts.userProfileProps });\n return opts.actionCompleteCallback?.();\n };\n\n const handleUserProfileActionClicked = (__experimental_startPath?: string) => {\n if (opts.userProfileMode === 'navigation') {\n return navigate(opts.userProfileUrl || '').finally(() => {\n void (async () => {\n await sleep(300);\n opts.actionCompleteCallback?.();\n })();\n });\n }\n openUserProfile({\n getContainer,\n ...opts.userProfileProps,\n ...(__experimental_startPath && { __experimental_startPath }),\n });\n\n return opts.actionCompleteCallback?.();\n };\n\n const handleSignOutAllClicked = () => {\n return signOut(opts.navigateAfterSignOut);\n };\n\n const handleSessionClicked = (session: SignedInSessionResource) => async () => {\n card.setLoading();\n\n return setActive({\n session,\n navigate: async ({ session }) => {\n if (!session.currentTask && opts.afterSwitchSessionUrl) {\n await navigate(opts.afterSwitchSessionUrl);\n return;\n }\n\n if (opts.taskUrl) {\n await navigate(opts.taskUrl);\n return;\n }\n\n await navigateIfTaskExists(session, {\n baseUrl: opts.signInUrl ?? displayConfig.signInUrl,\n navigate,\n });\n },\n }).finally(() => {\n card.setIdle();\n opts.actionCompleteCallback?.();\n });\n };\n\n const handleAddAccountClicked = () => {\n windowNavigate(opts.signInUrl || window.location.href);\n return sleep(2000);\n };\n\n return {\n handleSignOutSessionClicked,\n handleManageAccountClicked,\n handleUserProfileActionClicked,\n handleSignOutAllClicked,\n handleSessionClicked,\n handleAddAccountClicked,\n otherSessions,\n signedInSessions,\n };\n};\n"],"mappings":";;;;;;;;;;AAuBA,MAAa,0BAA0B,SAAuC;CAC5E,MAAM,EAAE,WAAW,SAAS,oBAAoB,UAAU;CAC1D,MAAM,OAAO,cAAc;CAC3B,MAAM,EAAE,kBAAkB,kBAAkB,oBAAoB,EAAE,MAAM,KAAK,MAAM,CAAC;CACpF,MAAM,EAAE,aAAa,WAAW;CAChC,MAAM,EAAE,kBAAkB,gBAAgB;CAC1C,MAAM,eAAe,eAAe;CAEpC,MAAM,+BAA+B,kBAA2C;AAC9E,MAAI,cAAc,WAAW,EAC3B,QAAO,QAAQ,KAAK,qBAAqB;AAE3C,SAAO,QAAQ,KAAK,wCAAwC,EAAE,WAAW,QAAQ,IAAI,CAAC,CAAC,cACrF,KAAK,SAAS,CACf;;CAGH,MAAM,mCAAmC;AACvC,MAAI,KAAK,oBAAoB,aAC3B,QAAO,SAAS,KAAK,kBAAkB,GAAG,CAAC,cAAc;AACvD,IAAM,YAAY;AAChB,UAAM,MAAM,IAAI;AAChB,SAAK,0BAA0B;OAC7B;IACJ;AAEJ,kBAAgB;GAAE;GAAc,GAAG,KAAK;GAAkB,CAAC;AAC3D,SAAO,KAAK,0BAA0B;;CAGxC,MAAM,kCAAkC,6BAAsC;AAC5E,MAAI,KAAK,oBAAoB,aAC3B,QAAO,SAAS,KAAK,kBAAkB,GAAG,CAAC,cAAc;AACvD,IAAM,YAAY;AAChB,UAAM,MAAM,IAAI;AAChB,SAAK,0BAA0B;OAC7B;IACJ;AAEJ,kBAAgB;GACd;GACA,GAAG,KAAK;GACR,GAAI,4BAA4B,EAAE,0BAA0B;GAC7D,CAAC;AAEF,SAAO,KAAK,0BAA0B;;CAGxC,MAAM,gCAAgC;AACpC,SAAO,QAAQ,KAAK,qBAAqB;;CAG3C,MAAM,wBAAwB,YAAqC,YAAY;AAC7E,OAAK,YAAY;AAEjB,SAAO,UAAU;GACf;GACA,UAAU,OAAO,EAAE,yBAAc;AAC/B,QAAI,CAACA,UAAQ,eAAe,KAAK,uBAAuB;AACtD,WAAM,SAAS,KAAK,sBAAsB;AAC1C;;AAGF,QAAI,KAAK,SAAS;AAChB,WAAM,SAAS,KAAK,QAAQ;AAC5B;;AAGF,UAAM,qBAAqBA,WAAS;KAClC,SAAS,KAAK,aAAa,cAAc;KACzC;KACD,CAAC;;GAEL,CAAC,CAAC,cAAc;AACf,QAAK,SAAS;AACd,QAAK,0BAA0B;IAC/B;;CAGJ,MAAM,gCAAgC;AACpC,iBAAe,KAAK,aAAa,OAAO,SAAS,KAAK;AACtD,SAAO,MAAM,IAAK;;AAGpB,QAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD"}
@@ -6,8 +6,8 @@ import { Col } from "../../customizables/index.js";
6
6
  import { Header } from "../../elements/Header.js";
7
7
  import { APIKeysPage as APIKeysPage$1 } from "../APIKeys/APIKeys.js";
8
8
  import { useUnsafeNavbarContext } from "../../elements/Navbar.js";
9
- import { jsx, jsxs } from "@emotion/react/jsx-runtime";
10
9
  import { useUser } from "@clerk/shared/react";
10
+ import { jsx, jsxs } from "@emotion/react/jsx-runtime";
11
11
 
12
12
  //#region src/components/UserProfile/APIKeysPage.tsx
13
13
  const APIKeysPage = () => {
@@ -13,8 +13,8 @@ import { PhoneSection } from "./PhoneSection.js";
13
13
  import { UsernameSection } from "./UsernameSection.js";
14
14
  import { UserProfileSection } from "./UserProfileSection.js";
15
15
  import { Web3Section } from "./Web3Section.js";
16
- import { jsx, jsxs } from "@emotion/react/jsx-runtime";
17
16
  import { useUser } from "@clerk/shared/react";
17
+ import { jsx, jsxs } from "@emotion/react/jsx-runtime";
18
18
 
19
19
  //#region src/components/UserProfile/AccountPage.tsx
20
20
  const AccountPage = withCardStateProvider(() => {
@@ -13,8 +13,8 @@ import { FullHeightLoader } from "../../elements/FullHeightLoader.js";
13
13
  import { ProfileSection } from "../../elements/Section.js";
14
14
  import { currentSessionFirst } from "./utils.js";
15
15
  import { getRelativeToNowDateKey } from "../../utils/getRelativeToNowDateKey.js";
16
- import { Fragment, jsx, jsxs } from "@emotion/react/jsx-runtime";
17
16
  import { useReverification, useSession, useUser } from "@clerk/shared/react";
17
+ import { Fragment, jsx, jsxs } from "@emotion/react/jsx-runtime";
18
18
 
19
19
  //#region src/components/UserProfile/ActiveDevicesSection.tsx
20
20
  const ActiveDevicesSection = () => {
@@ -10,9 +10,9 @@ import { useActionContext } from "../../elements/Action/ActionRoot.js";
10
10
  import { ClipboardInput } from "../../elements/ClipboardInput.js";
11
11
  import { FullHeightLoader } from "../../elements/FullHeightLoader.js";
12
12
  import React from "react";
13
+ import { useReverification, useUser } from "@clerk/shared/react";
13
14
  import { Fragment as Fragment$1, jsx, jsxs } from "@emotion/react/jsx-runtime";
14
15
  import { isClerkRuntimeError } from "@clerk/shared/error";
15
- import { useReverification, useUser } from "@clerk/shared/react";
16
16
 
17
17
  //#region src/components/UserProfile/AddAuthenticatorApp.tsx
18
18
  const AddAuthenticatorApp = withCardStateProvider((props) => {
@@ -10,8 +10,8 @@ import { ProviderInitialIcon } from "../../common/ProviderInitialIcon.js";
10
10
  import { handleError } from "../../utils/errorHandler.js";
11
11
  import { ProfileSection } from "../../elements/Section.js";
12
12
  import { appendModalState } from "@clerk/shared/internal/clerk-js/queryStateParams";
13
- import { jsx } from "@emotion/react/jsx-runtime";
14
13
  import { useReverification, useUser } from "@clerk/shared/react";
14
+ import { jsx } from "@emotion/react/jsx-runtime";
15
15
 
16
16
  //#region src/components/UserProfile/ConnectedAccountsMenu.tsx
17
17
  const ConnectMenuButton = (props) => {
@@ -16,8 +16,8 @@ import { AddConnectedAccount } from "./ConnectedAccountsMenu.js";
16
16
  import { RemoveConnectedAccountForm } from "./RemoveResourceForm.js";
17
17
  import { Fragment, useState } from "react";
18
18
  import { appendModalState } from "@clerk/shared/internal/clerk-js/queryStateParams";
19
- import { jsx, jsxs } from "@emotion/react/jsx-runtime";
20
19
  import { useReverification, useUser } from "@clerk/shared/react";
20
+ import { jsx, jsxs } from "@emotion/react/jsx-runtime";
21
21
 
22
22
  //#region src/components/UserProfile/ConnectedAccountsSection.tsx
23
23
  const RemoveConnectedAccountScreen = (props) => {
@@ -9,8 +9,8 @@ import { Form } from "../../elements/Form.js";
9
9
  import { FormButtons } from "../../elements/FormButtons.js";
10
10
  import { FormContainer } from "../../elements/FormContainer.js";
11
11
  import { useMultipleSessions } from "../../hooks/useMultipleSessions.js";
12
- import { jsx, jsxs } from "@emotion/react/jsx-runtime";
13
12
  import { useClerk, useReverification, useUser } from "@clerk/shared/react";
13
+ import { jsx, jsxs } from "@emotion/react/jsx-runtime";
14
14
 
15
15
  //#region src/components/UserProfile/DeleteUserForm.tsx
16
16
  const DeleteUserForm = withCardStateProvider((props) => {