@clerk/ui 1.12.1-canary.v20260518181921 → 1.12.1
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.
- package/dist/ClerkUI.js +2 -2
- package/dist/components/ConfigureSSO/steps/ConfigureStep.js +45 -26
- package/dist/components/ConfigureSSO/steps/ConfigureStep.js.map +1 -1
- package/dist/components/ConfigureSSO/steps/TestConfigurationStep.js +2 -4
- package/dist/components/ConfigureSSO/steps/TestConfigurationStep.js.map +1 -1
- package/dist/configureSSO_ui_11cb97_1.12.1.js +1 -0
- package/dist/configureSSO_ui_88e02b_1.12.1.js +1 -0
- package/dist/configureSSO_ui_b5a52c_1.12.1.js +1 -0
- package/dist/index.js +1 -1
- package/dist/no-rhc/ClerkUI.js +2 -2
- package/dist/no-rhc/components/ConfigureSSO/steps/ConfigureStep.js +45 -26
- package/dist/no-rhc/components/ConfigureSSO/steps/ConfigureStep.js.map +1 -1
- package/dist/no-rhc/components/ConfigureSSO/steps/TestConfigurationStep.js +2 -4
- package/dist/no-rhc/components/ConfigureSSO/steps/TestConfigurationStep.js.map +1 -1
- package/dist/no-rhc/index.js +1 -1
- package/dist/server.js +1 -1
- package/dist/{ui-common_ui_91ca7a_1.12.1-canary.v20260518181921.js → ui-common_ui_11cb97_1.12.1.js} +1 -1
- package/dist/{ui-common_ui_465871_1.12.1-canary.v20260518181921.js → ui-common_ui_88e02b_1.12.1.js} +1 -1
- package/dist/{ui-common_ui_60ff7a_1.12.1-canary.v20260518181921.js → ui-common_ui_b5a52c_1.12.1.js} +1 -1
- package/dist/ui.browser.js +1 -1
- package/dist/ui.legacy.browser.js +1 -1
- package/dist/ui.shared.browser.js +2 -2
- package/package.json +3 -3
- package/dist/configureSSO_ui_465871_1.12.1-canary.v20260518181921.js +0 -1
- package/dist/configureSSO_ui_60ff7a_1.12.1-canary.v20260518181921.js +0 -1
- package/dist/configureSSO_ui_91ca7a_1.12.1-canary.v20260518181921.js +0 -1
- /package/dist/{295_ui_91ca7a_1.12.1-canary.v20260518181921.js → 295_ui_11cb97_1.12.1.js} +0 -0
- /package/dist/{295_ui_465871_1.12.1-canary.v20260518181921.js → 295_ui_88e02b_1.12.1.js} +0 -0
- /package/dist/{295_ui_60ff7a_1.12.1-canary.v20260518181921.js → 295_ui_b5a52c_1.12.1.js} +0 -0
- /package/dist/{37_ui_91ca7a_1.12.1-canary.v20260518181921.js → 37_ui_11cb97_1.12.1.js} +0 -0
- /package/dist/{37_ui_465871_1.12.1-canary.v20260518181921.js → 37_ui_88e02b_1.12.1.js} +0 -0
- /package/dist/{37_ui_60ff7a_1.12.1-canary.v20260518181921.js → 37_ui_b5a52c_1.12.1.js} +0 -0
- /package/dist/{606_ui_91ca7a_1.12.1-canary.v20260518181921.js → 606_ui_11cb97_1.12.1.js} +0 -0
- /package/dist/{606_ui_465871_1.12.1-canary.v20260518181921.js → 606_ui_88e02b_1.12.1.js} +0 -0
- /package/dist/{606_ui_60ff7a_1.12.1-canary.v20260518181921.js → 606_ui_b5a52c_1.12.1.js} +0 -0
- /package/dist/{718_ui_91ca7a_1.12.1-canary.v20260518181921.js → 718_ui_11cb97_1.12.1.js} +0 -0
- /package/dist/{718_ui_465871_1.12.1-canary.v20260518181921.js → 718_ui_88e02b_1.12.1.js} +0 -0
- /package/dist/{718_ui_60ff7a_1.12.1-canary.v20260518181921.js → 718_ui_b5a52c_1.12.1.js} +0 -0
- /package/dist/{746_ui_91ca7a_1.12.1-canary.v20260518181921.js → 746_ui_11cb97_1.12.1.js} +0 -0
- /package/dist/{746_ui_465871_1.12.1-canary.v20260518181921.js → 746_ui_88e02b_1.12.1.js} +0 -0
- /package/dist/{746_ui_60ff7a_1.12.1-canary.v20260518181921.js → 746_ui_b5a52c_1.12.1.js} +0 -0
- /package/dist/{76_ui_91ca7a_1.12.1-canary.v20260518181921.js → 76_ui_11cb97_1.12.1.js} +0 -0
- /package/dist/{76_ui_465871_1.12.1-canary.v20260518181921.js → 76_ui_88e02b_1.12.1.js} +0 -0
- /package/dist/{76_ui_60ff7a_1.12.1-canary.v20260518181921.js → 76_ui_b5a52c_1.12.1.js} +0 -0
- /package/dist/{829_ui_91ca7a_1.12.1-canary.v20260518181921.js → 829_ui_11cb97_1.12.1.js} +0 -0
- /package/dist/{829_ui_465871_1.12.1-canary.v20260518181921.js → 829_ui_88e02b_1.12.1.js} +0 -0
- /package/dist/{829_ui_60ff7a_1.12.1-canary.v20260518181921.js → 829_ui_b5a52c_1.12.1.js} +0 -0
- /package/dist/{apiKeys_ui_91ca7a_1.12.1-canary.v20260518181921.js → apiKeys_ui_11cb97_1.12.1.js} +0 -0
- /package/dist/{apiKeys_ui_465871_1.12.1-canary.v20260518181921.js → apiKeys_ui_88e02b_1.12.1.js} +0 -0
- /package/dist/{apiKeys_ui_60ff7a_1.12.1-canary.v20260518181921.js → apiKeys_ui_b5a52c_1.12.1.js} +0 -0
- /package/dist/{blankcaptcha_ui_60ff7a_1.12.1-canary.v20260518181921.js → blankcaptcha_ui_11cb97_1.12.1.js} +0 -0
- /package/dist/{blankcaptcha_ui_465871_1.12.1-canary.v20260518181921.js → blankcaptcha_ui_88e02b_1.12.1.js} +0 -0
- /package/dist/{blankcaptcha_ui_91ca7a_1.12.1-canary.v20260518181921.js → blankcaptcha_ui_b5a52c_1.12.1.js} +0 -0
- /package/dist/{checkout_ui_91ca7a_1.12.1-canary.v20260518181921.js → checkout_ui_11cb97_1.12.1.js} +0 -0
- /package/dist/{checkout_ui_465871_1.12.1-canary.v20260518181921.js → checkout_ui_88e02b_1.12.1.js} +0 -0
- /package/dist/{checkout_ui_60ff7a_1.12.1-canary.v20260518181921.js → checkout_ui_b5a52c_1.12.1.js} +0 -0
- /package/dist/{copy-api-key-modal_ui_91ca7a_1.12.1-canary.v20260518181921.js → copy-api-key-modal_ui_11cb97_1.12.1.js} +0 -0
- /package/dist/{copy-api-key-modal_ui_465871_1.12.1-canary.v20260518181921.js → copy-api-key-modal_ui_88e02b_1.12.1.js} +0 -0
- /package/dist/{copy-api-key-modal_ui_60ff7a_1.12.1-canary.v20260518181921.js → copy-api-key-modal_ui_b5a52c_1.12.1.js} +0 -0
- /package/dist/{createorganization_ui_91ca7a_1.12.1-canary.v20260518181921.js → createorganization_ui_11cb97_1.12.1.js} +0 -0
- /package/dist/{createorganization_ui_465871_1.12.1-canary.v20260518181921.js → createorganization_ui_88e02b_1.12.1.js} +0 -0
- /package/dist/{createorganization_ui_60ff7a_1.12.1-canary.v20260518181921.js → createorganization_ui_b5a52c_1.12.1.js} +0 -0
- /package/dist/{enableOrganizationsPrompt_ui_91ca7a_1.12.1-canary.v20260518181921.js → enableOrganizationsPrompt_ui_11cb97_1.12.1.js} +0 -0
- /package/dist/{enableOrganizationsPrompt_ui_465871_1.12.1-canary.v20260518181921.js → enableOrganizationsPrompt_ui_88e02b_1.12.1.js} +0 -0
- /package/dist/{enableOrganizationsPrompt_ui_60ff7a_1.12.1-canary.v20260518181921.js → enableOrganizationsPrompt_ui_b5a52c_1.12.1.js} +0 -0
- /package/dist/{framework_ui_465871_1.12.1-canary.v20260518181921.js → framework_ui_88e02b_1.12.1.js} +0 -0
- /package/dist/{framework_ui_60ff7a_1.12.1-canary.v20260518181921.js → framework_ui_b5a52c_1.12.1.js} +0 -0
- /package/dist/{impersonationfab_ui_91ca7a_1.12.1-canary.v20260518181921.js → impersonationfab_ui_11cb97_1.12.1.js} +0 -0
- /package/dist/{impersonationfab_ui_465871_1.12.1-canary.v20260518181921.js → impersonationfab_ui_88e02b_1.12.1.js} +0 -0
- /package/dist/{impersonationfab_ui_60ff7a_1.12.1-canary.v20260518181921.js → impersonationfab_ui_b5a52c_1.12.1.js} +0 -0
- /package/dist/{keylessPrompt_ui_91ca7a_1.12.1-canary.v20260518181921.js → keylessPrompt_ui_11cb97_1.12.1.js} +0 -0
- /package/dist/{keylessPrompt_ui_465871_1.12.1-canary.v20260518181921.js → keylessPrompt_ui_88e02b_1.12.1.js} +0 -0
- /package/dist/{keylessPrompt_ui_60ff7a_1.12.1-canary.v20260518181921.js → keylessPrompt_ui_b5a52c_1.12.1.js} +0 -0
- /package/dist/{oauthConsent_ui_91ca7a_1.12.1-canary.v20260518181921.js → oauthConsent_ui_11cb97_1.12.1.js} +0 -0
- /package/dist/{oauthConsent_ui_465871_1.12.1-canary.v20260518181921.js → oauthConsent_ui_88e02b_1.12.1.js} +0 -0
- /package/dist/{oauthConsent_ui_60ff7a_1.12.1-canary.v20260518181921.js → oauthConsent_ui_b5a52c_1.12.1.js} +0 -0
- /package/dist/{onetap_ui_91ca7a_1.12.1-canary.v20260518181921.js → onetap_ui_11cb97_1.12.1.js} +0 -0
- /package/dist/{onetap_ui_465871_1.12.1-canary.v20260518181921.js → onetap_ui_88e02b_1.12.1.js} +0 -0
- /package/dist/{onetap_ui_60ff7a_1.12.1-canary.v20260518181921.js → onetap_ui_b5a52c_1.12.1.js} +0 -0
- /package/dist/{op-api-keys-page_ui_60ff7a_1.12.1-canary.v20260518181921.js → op-api-keys-page_ui_11cb97_1.12.1.js} +0 -0
- /package/dist/{op-api-keys-page_ui_465871_1.12.1-canary.v20260518181921.js → op-api-keys-page_ui_88e02b_1.12.1.js} +0 -0
- /package/dist/{op-api-keys-page_ui_91ca7a_1.12.1-canary.v20260518181921.js → op-api-keys-page_ui_b5a52c_1.12.1.js} +0 -0
- /package/dist/{op-billing-page_ui_60ff7a_1.12.1-canary.v20260518181921.js → op-billing-page_ui_11cb97_1.12.1.js} +0 -0
- /package/dist/{op-billing-page_ui_465871_1.12.1-canary.v20260518181921.js → op-billing-page_ui_88e02b_1.12.1.js} +0 -0
- /package/dist/{op-billing-page_ui_91ca7a_1.12.1-canary.v20260518181921.js → op-billing-page_ui_b5a52c_1.12.1.js} +0 -0
- /package/dist/{op-plans-page_ui_60ff7a_1.12.1-canary.v20260518181921.js → op-plans-page_ui_11cb97_1.12.1.js} +0 -0
- /package/dist/{op-plans-page_ui_465871_1.12.1-canary.v20260518181921.js → op-plans-page_ui_88e02b_1.12.1.js} +0 -0
- /package/dist/{op-plans-page_ui_91ca7a_1.12.1-canary.v20260518181921.js → op-plans-page_ui_b5a52c_1.12.1.js} +0 -0
- /package/dist/{organizationlist_ui_91ca7a_1.12.1-canary.v20260518181921.js → organizationlist_ui_11cb97_1.12.1.js} +0 -0
- /package/dist/{organizationlist_ui_465871_1.12.1-canary.v20260518181921.js → organizationlist_ui_88e02b_1.12.1.js} +0 -0
- /package/dist/{organizationlist_ui_60ff7a_1.12.1-canary.v20260518181921.js → organizationlist_ui_b5a52c_1.12.1.js} +0 -0
- /package/dist/{organizationprofile_ui_91ca7a_1.12.1-canary.v20260518181921.js → organizationprofile_ui_11cb97_1.12.1.js} +0 -0
- /package/dist/{organizationprofile_ui_465871_1.12.1-canary.v20260518181921.js → organizationprofile_ui_88e02b_1.12.1.js} +0 -0
- /package/dist/{organizationprofile_ui_60ff7a_1.12.1-canary.v20260518181921.js → organizationprofile_ui_b5a52c_1.12.1.js} +0 -0
- /package/dist/{organizationswitcher_ui_91ca7a_1.12.1-canary.v20260518181921.js → organizationswitcher_ui_11cb97_1.12.1.js} +0 -0
- /package/dist/{organizationswitcher_ui_465871_1.12.1-canary.v20260518181921.js → organizationswitcher_ui_88e02b_1.12.1.js} +0 -0
- /package/dist/{organizationswitcher_ui_60ff7a_1.12.1-canary.v20260518181921.js → organizationswitcher_ui_b5a52c_1.12.1.js} +0 -0
- /package/dist/{payment-attempt-page_ui_60ff7a_1.12.1-canary.v20260518181921.js → payment-attempt-page_ui_11cb97_1.12.1.js} +0 -0
- /package/dist/{payment-attempt-page_ui_465871_1.12.1-canary.v20260518181921.js → payment-attempt-page_ui_88e02b_1.12.1.js} +0 -0
- /package/dist/{payment-attempt-page_ui_91ca7a_1.12.1-canary.v20260518181921.js → payment-attempt-page_ui_b5a52c_1.12.1.js} +0 -0
- /package/dist/{planDetails_ui_91ca7a_1.12.1-canary.v20260518181921.js → planDetails_ui_11cb97_1.12.1.js} +0 -0
- /package/dist/{planDetails_ui_465871_1.12.1-canary.v20260518181921.js → planDetails_ui_88e02b_1.12.1.js} +0 -0
- /package/dist/{planDetails_ui_60ff7a_1.12.1-canary.v20260518181921.js → planDetails_ui_b5a52c_1.12.1.js} +0 -0
- /package/dist/{prefetchorganizationlist_ui_60ff7a_1.12.1-canary.v20260518181921.js → prefetchorganizationlist_ui_11cb97_1.12.1.js} +0 -0
- /package/dist/{prefetchorganizationlist_ui_465871_1.12.1-canary.v20260518181921.js → prefetchorganizationlist_ui_88e02b_1.12.1.js} +0 -0
- /package/dist/{prefetchorganizationlist_ui_91ca7a_1.12.1-canary.v20260518181921.js → prefetchorganizationlist_ui_b5a52c_1.12.1.js} +0 -0
- /package/dist/{pricingTable_ui_91ca7a_1.12.1-canary.v20260518181921.js → pricingTable_ui_11cb97_1.12.1.js} +0 -0
- /package/dist/{pricingTable_ui_465871_1.12.1-canary.v20260518181921.js → pricingTable_ui_88e02b_1.12.1.js} +0 -0
- /package/dist/{pricingTable_ui_60ff7a_1.12.1-canary.v20260518181921.js → pricingTable_ui_b5a52c_1.12.1.js} +0 -0
- /package/dist/{revoke-api-key-modal_ui_91ca7a_1.12.1-canary.v20260518181921.js → revoke-api-key-modal_ui_11cb97_1.12.1.js} +0 -0
- /package/dist/{revoke-api-key-modal_ui_465871_1.12.1-canary.v20260518181921.js → revoke-api-key-modal_ui_88e02b_1.12.1.js} +0 -0
- /package/dist/{revoke-api-key-modal_ui_60ff7a_1.12.1-canary.v20260518181921.js → revoke-api-key-modal_ui_b5a52c_1.12.1.js} +0 -0
- /package/dist/{sessionTasks_ui_91ca7a_1.12.1-canary.v20260518181921.js → sessionTasks_ui_11cb97_1.12.1.js} +0 -0
- /package/dist/{sessionTasks_ui_465871_1.12.1-canary.v20260518181921.js → sessionTasks_ui_88e02b_1.12.1.js} +0 -0
- /package/dist/{sessionTasks_ui_60ff7a_1.12.1-canary.v20260518181921.js → sessionTasks_ui_b5a52c_1.12.1.js} +0 -0
- /package/dist/{signin_ui_91ca7a_1.12.1-canary.v20260518181921.js → signin_ui_11cb97_1.12.1.js} +0 -0
- /package/dist/{signin_ui_465871_1.12.1-canary.v20260518181921.js → signin_ui_88e02b_1.12.1.js} +0 -0
- /package/dist/{signin_ui_60ff7a_1.12.1-canary.v20260518181921.js → signin_ui_b5a52c_1.12.1.js} +0 -0
- /package/dist/{signup_ui_91ca7a_1.12.1-canary.v20260518181921.js → signup_ui_11cb97_1.12.1.js} +0 -0
- /package/dist/{signup_ui_465871_1.12.1-canary.v20260518181921.js → signup_ui_88e02b_1.12.1.js} +0 -0
- /package/dist/{signup_ui_60ff7a_1.12.1-canary.v20260518181921.js → signup_ui_b5a52c_1.12.1.js} +0 -0
- /package/dist/{statement-page_ui_91ca7a_1.12.1-canary.v20260518181921.js → statement-page_ui_11cb97_1.12.1.js} +0 -0
- /package/dist/{statement-page_ui_465871_1.12.1-canary.v20260518181921.js → statement-page_ui_88e02b_1.12.1.js} +0 -0
- /package/dist/{statement-page_ui_60ff7a_1.12.1-canary.v20260518181921.js → statement-page_ui_b5a52c_1.12.1.js} +0 -0
- /package/dist/{subscriptionDetails_ui_91ca7a_1.12.1-canary.v20260518181921.js → subscriptionDetails_ui_11cb97_1.12.1.js} +0 -0
- /package/dist/{subscriptionDetails_ui_465871_1.12.1-canary.v20260518181921.js → subscriptionDetails_ui_88e02b_1.12.1.js} +0 -0
- /package/dist/{subscriptionDetails_ui_60ff7a_1.12.1-canary.v20260518181921.js → subscriptionDetails_ui_b5a52c_1.12.1.js} +0 -0
- /package/dist/{taskChooseOrganization_ui_91ca7a_1.12.1-canary.v20260518181921.js → taskChooseOrganization_ui_11cb97_1.12.1.js} +0 -0
- /package/dist/{taskChooseOrganization_ui_465871_1.12.1-canary.v20260518181921.js → taskChooseOrganization_ui_88e02b_1.12.1.js} +0 -0
- /package/dist/{taskChooseOrganization_ui_60ff7a_1.12.1-canary.v20260518181921.js → taskChooseOrganization_ui_b5a52c_1.12.1.js} +0 -0
- /package/dist/{taskResetPassword_ui_91ca7a_1.12.1-canary.v20260518181921.js → taskResetPassword_ui_11cb97_1.12.1.js} +0 -0
- /package/dist/{taskResetPassword_ui_465871_1.12.1-canary.v20260518181921.js → taskResetPassword_ui_88e02b_1.12.1.js} +0 -0
- /package/dist/{taskResetPassword_ui_60ff7a_1.12.1-canary.v20260518181921.js → taskResetPassword_ui_b5a52c_1.12.1.js} +0 -0
- /package/dist/{taskSetupMFA_ui_91ca7a_1.12.1-canary.v20260518181921.js → taskSetupMFA_ui_11cb97_1.12.1.js} +0 -0
- /package/dist/{taskSetupMFA_ui_465871_1.12.1-canary.v20260518181921.js → taskSetupMFA_ui_88e02b_1.12.1.js} +0 -0
- /package/dist/{taskSetupMFA_ui_60ff7a_1.12.1-canary.v20260518181921.js → taskSetupMFA_ui_b5a52c_1.12.1.js} +0 -0
- /package/dist/{up-api-keys-page_ui_60ff7a_1.12.1-canary.v20260518181921.js → up-api-keys-page_ui_11cb97_1.12.1.js} +0 -0
- /package/dist/{up-api-keys-page_ui_465871_1.12.1-canary.v20260518181921.js → up-api-keys-page_ui_88e02b_1.12.1.js} +0 -0
- /package/dist/{up-api-keys-page_ui_91ca7a_1.12.1-canary.v20260518181921.js → up-api-keys-page_ui_b5a52c_1.12.1.js} +0 -0
- /package/dist/{up-billing-page_ui_60ff7a_1.12.1-canary.v20260518181921.js → up-billing-page_ui_11cb97_1.12.1.js} +0 -0
- /package/dist/{up-billing-page_ui_465871_1.12.1-canary.v20260518181921.js → up-billing-page_ui_88e02b_1.12.1.js} +0 -0
- /package/dist/{up-billing-page_ui_91ca7a_1.12.1-canary.v20260518181921.js → up-billing-page_ui_b5a52c_1.12.1.js} +0 -0
- /package/dist/{up-plans-page_ui_60ff7a_1.12.1-canary.v20260518181921.js → up-plans-page_ui_11cb97_1.12.1.js} +0 -0
- /package/dist/{up-plans-page_ui_465871_1.12.1-canary.v20260518181921.js → up-plans-page_ui_88e02b_1.12.1.js} +0 -0
- /package/dist/{up-plans-page_ui_91ca7a_1.12.1-canary.v20260518181921.js → up-plans-page_ui_b5a52c_1.12.1.js} +0 -0
- /package/dist/{useravatar_ui_91ca7a_1.12.1-canary.v20260518181921.js → useravatar_ui_11cb97_1.12.1.js} +0 -0
- /package/dist/{useravatar_ui_465871_1.12.1-canary.v20260518181921.js → useravatar_ui_88e02b_1.12.1.js} +0 -0
- /package/dist/{useravatar_ui_60ff7a_1.12.1-canary.v20260518181921.js → useravatar_ui_b5a52c_1.12.1.js} +0 -0
- /package/dist/{userbutton_ui_91ca7a_1.12.1-canary.v20260518181921.js → userbutton_ui_11cb97_1.12.1.js} +0 -0
- /package/dist/{userbutton_ui_465871_1.12.1-canary.v20260518181921.js → userbutton_ui_88e02b_1.12.1.js} +0 -0
- /package/dist/{userbutton_ui_60ff7a_1.12.1-canary.v20260518181921.js → userbutton_ui_b5a52c_1.12.1.js} +0 -0
- /package/dist/{userprofile_ui_91ca7a_1.12.1-canary.v20260518181921.js → userprofile_ui_11cb97_1.12.1.js} +0 -0
- /package/dist/{userprofile_ui_465871_1.12.1-canary.v20260518181921.js → userprofile_ui_88e02b_1.12.1.js} +0 -0
- /package/dist/{userprofile_ui_60ff7a_1.12.1-canary.v20260518181921.js → userprofile_ui_b5a52c_1.12.1.js} +0 -0
- /package/dist/{userverification_ui_91ca7a_1.12.1-canary.v20260518181921.js → userverification_ui_11cb97_1.12.1.js} +0 -0
- /package/dist/{userverification_ui_465871_1.12.1-canary.v20260518181921.js → userverification_ui_88e02b_1.12.1.js} +0 -0
- /package/dist/{userverification_ui_60ff7a_1.12.1-canary.v20260518181921.js → userverification_ui_b5a52c_1.12.1.js} +0 -0
- /package/dist/{vendors_ui_91ca7a_1.12.1-canary.v20260518181921.js → vendors_ui_11cb97_1.12.1.js} +0 -0
- /package/dist/{vendors_ui_465871_1.12.1-canary.v20260518181921.js → vendors_ui_88e02b_1.12.1.js} +0 -0
- /package/dist/{vendors_ui_60ff7a_1.12.1-canary.v20260518181921.js → vendors_ui_b5a52c_1.12.1.js} +0 -0
- /package/dist/{waitlist_ui_91ca7a_1.12.1-canary.v20260518181921.js → waitlist_ui_11cb97_1.12.1.js} +0 -0
- /package/dist/{waitlist_ui_465871_1.12.1-canary.v20260518181921.js → waitlist_ui_88e02b_1.12.1.js} +0 -0
- /package/dist/{waitlist_ui_60ff7a_1.12.1-canary.v20260518181921.js → waitlist_ui_b5a52c_1.12.1.js} +0 -0
- /package/dist/{web3-solana-wallet-buttons_ui_91ca7a_1.12.1-canary.v20260518181921.js → web3-solana-wallet-buttons_ui_11cb97_1.12.1.js} +0 -0
- /package/dist/{web3-solana-wallet-buttons_ui_465871_1.12.1-canary.v20260518181921.js → web3-solana-wallet-buttons_ui_88e02b_1.12.1.js} +0 -0
- /package/dist/{web3-solana-wallet-buttons_ui_60ff7a_1.12.1-canary.v20260518181921.js → web3-solana-wallet-buttons_ui_b5a52c_1.12.1.js} +0 -0
package/dist/ClerkUI.js
CHANGED
|
@@ -23,8 +23,8 @@ import { isVersionAtLeast, parseVersion } from "@clerk/shared/versionCheck";
|
|
|
23
23
|
* @public
|
|
24
24
|
*/
|
|
25
25
|
var ClerkUI = class ClerkUI {
|
|
26
|
-
static version = "1.12.1
|
|
27
|
-
version = "1.12.1
|
|
26
|
+
static version = "1.12.1";
|
|
27
|
+
version = "1.12.1";
|
|
28
28
|
#componentRenderer;
|
|
29
29
|
/**
|
|
30
30
|
* Creates a new `ClerkUI` instance and mounts the internal component renderer.
|
|
@@ -81,19 +81,22 @@ const ATTRIBUTE_ROWS = [
|
|
|
81
81
|
id: "email",
|
|
82
82
|
isRequired: true,
|
|
83
83
|
attribute: localizationKeys("configureSSO.configureStep.attributeMapping.rows.email.attribute"),
|
|
84
|
-
claim: localizationKeys("configureSSO.configureStep.attributeMapping.rows.email.claim")
|
|
84
|
+
claim: localizationKeys("configureSSO.configureStep.attributeMapping.rows.email.claim"),
|
|
85
|
+
oktaClaimValue: localizationKeys("configureSSO.configureStep.samlOkta.configureAttributes.pairs.email.expression")
|
|
85
86
|
},
|
|
86
87
|
{
|
|
87
88
|
id: "firstName",
|
|
88
89
|
isRequired: false,
|
|
89
90
|
attribute: localizationKeys("configureSSO.configureStep.attributeMapping.rows.firstName.attribute"),
|
|
90
|
-
claim: localizationKeys("configureSSO.configureStep.attributeMapping.rows.firstName.claim")
|
|
91
|
+
claim: localizationKeys("configureSSO.configureStep.attributeMapping.rows.firstName.claim"),
|
|
92
|
+
oktaClaimValue: localizationKeys("configureSSO.configureStep.samlOkta.configureAttributes.pairs.firstName.expression")
|
|
91
93
|
},
|
|
92
94
|
{
|
|
93
95
|
id: "lastName",
|
|
94
96
|
isRequired: false,
|
|
95
97
|
attribute: localizationKeys("configureSSO.configureStep.attributeMapping.rows.lastName.attribute"),
|
|
96
|
-
claim: localizationKeys("configureSSO.configureStep.attributeMapping.rows.lastName.claim")
|
|
98
|
+
claim: localizationKeys("configureSSO.configureStep.attributeMapping.rows.lastName.claim"),
|
|
99
|
+
oktaClaimValue: localizationKeys("configureSSO.configureStep.samlOkta.configureAttributes.pairs.lastName.expression")
|
|
97
100
|
}
|
|
98
101
|
];
|
|
99
102
|
const ATTRIBUTE_PAIRS = [
|
|
@@ -273,6 +276,7 @@ const OktaCompleteSamlIntegrationStepContent = () => {
|
|
|
273
276
|
const ConfigureAttributesSubStep = () => {
|
|
274
277
|
const { goNext, goPrev, isFirstStep, isLastStep } = useWizard();
|
|
275
278
|
const { provider } = useConfigureSSO();
|
|
279
|
+
const isOkta = provider === "saml_okta";
|
|
276
280
|
return /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(Step.Body, { children: /* @__PURE__ */ jsxs(Step.Section, {
|
|
277
281
|
sx: (theme) => ({ gap: theme.space.$3 }),
|
|
278
282
|
children: [
|
|
@@ -283,30 +287,45 @@ const ConfigureAttributesSubStep = () => {
|
|
|
283
287
|
}),
|
|
284
288
|
/* @__PURE__ */ jsxs(Table, {
|
|
285
289
|
sx: (theme) => ({ "tr > th:first-of-type": { paddingInlineStart: theme.space.$4 } }),
|
|
286
|
-
children: [/* @__PURE__ */ jsx(Thead, { children: /* @__PURE__ */ jsxs(Tr, { children: [
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
290
|
+
children: [/* @__PURE__ */ jsx(Thead, { children: /* @__PURE__ */ jsxs(Tr, { children: [
|
|
291
|
+
/* @__PURE__ */ jsx(Th, { children: /* @__PURE__ */ jsx(Text, {
|
|
292
|
+
sx: (theme) => ({ fontSize: theme.fontSizes.$xs }),
|
|
293
|
+
localizationKey: localizationKeys("configureSSO.configureStep.attributeMapping.columns.attribute")
|
|
294
|
+
}) }),
|
|
295
|
+
/* @__PURE__ */ jsx(Th, { children: /* @__PURE__ */ jsx(Text, {
|
|
296
|
+
sx: (theme) => ({ fontSize: theme.fontSizes.$xs }),
|
|
297
|
+
localizationKey: localizationKeys("configureSSO.configureStep.attributeMapping.columns.claimName")
|
|
298
|
+
}) }),
|
|
299
|
+
isOkta && /* @__PURE__ */ jsx(Th, { children: /* @__PURE__ */ jsx(Text, {
|
|
300
|
+
sx: (theme) => ({ fontSize: theme.fontSizes.$xs }),
|
|
301
|
+
localizationKey: localizationKeys("configureSSO.configureStep.attributeMapping.columns.claimValue")
|
|
302
|
+
}) })
|
|
303
|
+
] }) }), /* @__PURE__ */ jsx(Tbody, { children: ATTRIBUTE_ROWS.map((row) => /* @__PURE__ */ jsxs(Tr, { children: [
|
|
304
|
+
/* @__PURE__ */ jsx(Td, { children: /* @__PURE__ */ jsxs(Flex, {
|
|
305
|
+
as: "span",
|
|
306
|
+
align: "center",
|
|
307
|
+
sx: (theme) => ({ gap: theme.space.$2 }),
|
|
308
|
+
children: [/* @__PURE__ */ jsx(Text, {
|
|
309
|
+
colorScheme: "secondary",
|
|
310
|
+
localizationKey: row.attribute
|
|
311
|
+
}), /* @__PURE__ */ jsx(Badge, {
|
|
312
|
+
colorScheme: row.isRequired ? "warning" : "primary",
|
|
313
|
+
localizationKey: localizationKeys(row.isRequired ? "configureSSO.configureStep.attributeMapping.badges.required" : "configureSSO.configureStep.attributeMapping.badges.optional")
|
|
314
|
+
})]
|
|
315
|
+
}) }),
|
|
316
|
+
/* @__PURE__ */ jsx(Td, { children: /* @__PURE__ */ jsx(Text, {
|
|
317
|
+
as: "span",
|
|
318
|
+
sx: { fontFamily: "monospace" },
|
|
319
|
+
localizationKey: row.claim
|
|
320
|
+
}) }),
|
|
321
|
+
isOkta && /* @__PURE__ */ jsx(Td, { children: /* @__PURE__ */ jsx(Text, {
|
|
322
|
+
as: "span",
|
|
323
|
+
sx: { fontFamily: "monospace" },
|
|
324
|
+
localizationKey: row.oktaClaimValue
|
|
325
|
+
}) })
|
|
326
|
+
] }, row.id)) })]
|
|
308
327
|
}),
|
|
309
|
-
|
|
328
|
+
isOkta && /* @__PURE__ */ jsx(OktaConfigureAttributesStepContent, {})
|
|
310
329
|
]
|
|
311
330
|
}) }), /* @__PURE__ */ jsxs(Step.Footer, { children: [/* @__PURE__ */ jsx(Step.Footer.Previous, {
|
|
312
331
|
onClick: () => goPrev(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConfigureStep.js","names":["ClipboardOutline","Check","samlPayload: NonNullable<UpdateMeEnterpriseConnectionParams['saml']>","Upload","t","Close"],"sources":["../../../../src/components/ConfigureSSO/steps/ConfigureStep.tsx"],"sourcesContent":["import { isClerkAPIResponseError } from '@clerk/shared/error';\nimport { useReverification } from '@clerk/shared/react';\nimport type { FieldId, UpdateMeEnterpriseConnectionParams } from '@clerk/shared/types';\nimport React, { type JSX } from 'react';\n\nimport {\n Badge,\n Box,\n Button,\n Col,\n descriptors,\n Flex,\n Flow,\n Heading,\n Icon,\n localizationKeys,\n Table,\n Tbody,\n Td,\n Text,\n Th,\n Thead,\n Tr,\n useLocalizations,\n} from '@/customizables';\nimport { ClipboardInput } from '@/elements/ClipboardInput';\nimport { useCardState } from '@/elements/contexts';\nimport { Field } from '@/elements/FieldControl';\nimport { Form } from '@/elements/Form';\nimport { SegmentedControl } from '@/elements/SegmentedControl';\nimport { Check, ClipboardOutline, Close, Upload } from '@/icons';\nimport type { FormControlState } from '@/ui/utils/useFormControl';\nimport { useFormControl } from '@/ui/utils/useFormControl';\nimport { handleError } from '@/utils/errorHandler';\n\nimport { useConfigureSSO } from '../ConfigureSSOContext';\nimport { Step } from '../elements/Step';\nimport { useWizard, Wizard } from '../elements/Wizard';\nimport { useConfigureStepTranslations } from './configureStepTranslations';\n\nexport const ConfigureStep = (): JSX.Element => {\n const { key } = useConfigureStepTranslations();\n\n return (\n <Flow.Part part='configureCreateApp'>\n <Step\n elementDescriptor={descriptors.configureSSOStep}\n elementId={descriptors.configureSSOStep.setId('configure')}\n >\n <Wizard>\n <Wizard.Step id='create-app'>\n <Step.Header\n title={localizationKeys(key('headerTitle'))}\n description={localizationKeys(key('createApp.headerSubtitle'))}\n >\n <InnerStepCounter />\n </Step.Header>\n\n <CreateAppSubStep />\n </Wizard.Step>\n\n <Wizard.Step id='configure-attributes'>\n <Step.Header\n title={localizationKeys(key('headerTitle'))}\n description={localizationKeys(key('configureAttributes.headerSubtitle'))}\n >\n <InnerStepCounter />\n </Step.Header>\n\n <ConfigureAttributesSubStep />\n </Wizard.Step>\n\n <Wizard.Step id='assign-users'>\n <Step.Header\n title={localizationKeys(key('headerTitle'))}\n description={localizationKeys(key('assignUsers.headerSubtitle'))}\n >\n <InnerStepCounter />\n </Step.Header>\n\n <AssignUsersSubStep />\n </Wizard.Step>\n\n <Wizard.Step id='submit-saml-config'>\n <Step.Header\n title={localizationKeys(key('headerTitle'))}\n description={localizationKeys(key('metadataUrl.headerSubtitle'))}\n >\n <InnerStepCounter />\n </Step.Header>\n\n <SubmitSamlConfigSubStep />\n </Wizard.Step>\n </Wizard>\n </Step>\n </Flow.Part>\n );\n};\n\nconst InnerStepCounter = (): JSX.Element => {\n const { currentIndex, totalSteps } = useWizard();\n return (\n <Step.Counter\n total={totalSteps}\n current={currentIndex + 1}\n />\n );\n};\n\nconst ATTRIBUTE_ROWS = [\n {\n id: 'email',\n isRequired: true,\n attribute: localizationKeys('configureSSO.configureStep.attributeMapping.rows.email.attribute'),\n claim: localizationKeys('configureSSO.configureStep.attributeMapping.rows.email.claim'),\n },\n {\n id: 'firstName',\n isRequired: false,\n attribute: localizationKeys('configureSSO.configureStep.attributeMapping.rows.firstName.attribute'),\n claim: localizationKeys('configureSSO.configureStep.attributeMapping.rows.firstName.claim'),\n },\n {\n id: 'lastName',\n isRequired: false,\n attribute: localizationKeys('configureSSO.configureStep.attributeMapping.rows.lastName.attribute'),\n claim: localizationKeys('configureSSO.configureStep.attributeMapping.rows.lastName.claim'),\n },\n] as const;\n\nconst ATTRIBUTE_PAIRS = [\n {\n id: 'email',\n name: localizationKeys('configureSSO.configureStep.samlOkta.configureAttributes.pairs.email.name'),\n expression: localizationKeys('configureSSO.configureStep.samlOkta.configureAttributes.pairs.email.expression'),\n },\n {\n id: 'firstName',\n name: localizationKeys('configureSSO.configureStep.samlOkta.configureAttributes.pairs.firstName.name'),\n expression: localizationKeys('configureSSO.configureStep.samlOkta.configureAttributes.pairs.firstName.expression'),\n },\n {\n id: 'lastName',\n name: localizationKeys('configureSSO.configureStep.samlOkta.configureAttributes.pairs.lastName.name'),\n expression: localizationKeys('configureSSO.configureStep.samlOkta.configureAttributes.pairs.lastName.expression'),\n },\n] as const;\n\nexport const CreateAppSubStep = (): JSX.Element => {\n const { goNext, goPrev, isFirstStep, isLastStep } = useWizard();\n const { enterpriseConnection, provider } = useConfigureSSO();\n const { key } = useConfigureStepTranslations();\n\n const acsUrl = enterpriseConnection?.samlConnection?.acsUrl ?? '';\n const spEntityId = enterpriseConnection?.samlConnection?.spEntityId ?? '';\n\n const acsUrlField = useFormControl('acsUrl', acsUrl, {\n type: 'text',\n label: localizationKeys('configureSSO.configureStep.spFields.acsUrl.label'),\n isRequired: false,\n });\n const spEntityIdField = useFormControl('spEntityId', spEntityId, {\n type: 'text',\n label: localizationKeys('configureSSO.configureStep.spFields.spEntityId.label'),\n isRequired: false,\n });\n\n return (\n <>\n <Step.Body>\n <Step.Section sx={theme => ({ gap: theme.space.$5 })}>\n <Col sx={theme => ({ gap: theme.space.$1x5 })}>\n <Heading\n as='h3'\n textVariant='subtitle'\n localizationKey={localizationKeys(key('createApp.title'))}\n />\n\n {provider === 'saml_okta' && <OktaCreateAppStepContent />}\n\n {provider === 'saml_custom' && (\n <Text\n as='p'\n colorScheme='secondary'\n localizationKey={localizationKeys('configureSSO.configureStep.samlCustom.createApp.subtitle')}\n />\n )}\n </Col>\n\n {provider === 'saml_okta' && <OktaServiceProviderStepContent />}\n\n <Form.ControlRow elementId={acsUrlField.id}>\n <Form.CommonInputWrapper {...acsUrlField.props}>\n <ClipboardInput\n value={acsUrl}\n readOnly\n copyIcon={ClipboardOutline}\n copiedIcon={Check}\n />\n </Form.CommonInputWrapper>\n </Form.ControlRow>\n\n <Form.ControlRow elementId={spEntityIdField.id}>\n <Form.CommonInputWrapper {...spEntityIdField.props}>\n <ClipboardInput\n value={spEntityId}\n readOnly\n copyIcon={ClipboardOutline}\n copiedIcon={Check}\n />\n </Form.CommonInputWrapper>\n </Form.ControlRow>\n\n {provider === 'saml_okta' && <OktaCompleteSamlIntegrationStepContent />}\n </Step.Section>\n </Step.Body>\n\n <Step.Footer>\n <Step.Footer.Previous\n onClick={() => goPrev()}\n isDisabled={isFirstStep}\n />\n <Step.Footer.Continue\n onClick={() => goNext()}\n isDisabled={isLastStep}\n />\n </Step.Footer>\n </>\n );\n};\n\n// TODO - Move IdP specific content to separate modules\nconst OktaServiceProviderStepContent = (): JSX.Element => {\n return (\n <Col sx={theme => ({ gap: theme.space.$1x5 })}>\n <Heading\n as='h3'\n textVariant='subtitle'\n localizationKey={localizationKeys('configureSSO.configureStep.samlOkta.serviceProvider.title')}\n />\n <Text\n as='p'\n colorScheme='secondary'\n localizationKey={localizationKeys('configureSSO.configureStep.samlOkta.serviceProvider.paragraph1')}\n />\n <Text\n as='p'\n colorScheme='secondary'\n localizationKey={localizationKeys('configureSSO.configureStep.samlOkta.serviceProvider.paragraph2')}\n />\n </Col>\n );\n};\n\nconst OktaCreateAppStepContent = (): JSX.Element => {\n return (\n <Col\n as='ul'\n sx={theme => ({\n gap: theme.space.$1x5,\n margin: 0,\n paddingInlineStart: theme.space.$5,\n listStyleType: 'disc',\n })}\n >\n <Text\n as='li'\n colorScheme='secondary'\n localizationKey={localizationKeys('configureSSO.configureStep.samlOkta.createApp.step1')}\n />\n <Text\n as='li'\n colorScheme='secondary'\n localizationKey={localizationKeys('configureSSO.configureStep.samlOkta.createApp.step2')}\n />\n <Text\n as='li'\n colorScheme='secondary'\n localizationKey={localizationKeys('configureSSO.configureStep.samlOkta.createApp.step3')}\n />\n <Text\n as='li'\n colorScheme='secondary'\n localizationKey={localizationKeys('configureSSO.configureStep.samlOkta.createApp.step4')}\n />\n <Text\n as='li'\n colorScheme='secondary'\n localizationKey={localizationKeys('configureSSO.configureStep.samlOkta.createApp.step5')}\n />\n </Col>\n );\n};\n\nconst OktaCompleteSamlIntegrationStepContent = (): JSX.Element => {\n return (\n <Col sx={theme => ({ gap: theme.space.$1x5 })}>\n <Heading\n as='h3'\n textVariant='subtitle'\n localizationKey={localizationKeys('configureSSO.configureStep.samlOkta.completeSamlIntegration.title')}\n />\n <Col\n as='ul'\n sx={theme => ({\n gap: theme.space.$1x5,\n margin: 0,\n paddingInlineStart: theme.space.$5,\n listStyleType: 'disc',\n })}\n >\n <Text\n as='li'\n colorScheme='secondary'\n localizationKey={localizationKeys('configureSSO.configureStep.samlOkta.completeSamlIntegration.step1')}\n />\n <Text\n as='li'\n colorScheme='secondary'\n localizationKey={localizationKeys('configureSSO.configureStep.samlOkta.completeSamlIntegration.step2')}\n />\n </Col>\n </Col>\n );\n};\n\nexport const ConfigureAttributesSubStep = (): JSX.Element => {\n const { goNext, goPrev, isFirstStep, isLastStep } = useWizard();\n\n const { provider } = useConfigureSSO();\n\n return (\n <>\n <Step.Body>\n <Step.Section sx={theme => ({ gap: theme.space.$3 })}>\n {provider === 'saml_custom' && (\n <Heading\n as='h3'\n textVariant='subtitle'\n localizationKey={localizationKeys('configureSSO.configureStep.samlCustom.configureAttributes.title')}\n />\n )}\n\n <Table\n sx={theme => ({\n 'tr > th:first-of-type': {\n paddingInlineStart: theme.space.$4,\n },\n })}\n >\n <Thead>\n <Tr>\n <Th>\n <Text\n sx={theme => ({ fontSize: theme.fontSizes.$xs })}\n localizationKey={localizationKeys('configureSSO.configureStep.attributeMapping.columns.attribute')}\n />\n </Th>\n\n <Th>\n <Text\n sx={theme => ({ fontSize: theme.fontSizes.$xs })}\n localizationKey={localizationKeys('configureSSO.configureStep.attributeMapping.columns.claimName')}\n />\n </Th>\n </Tr>\n </Thead>\n\n <Tbody>\n {ATTRIBUTE_ROWS.map(row => (\n <Tr key={row.id}>\n <Td>\n <Flex\n as='span'\n align='center'\n sx={theme => ({ gap: theme.space.$2 })}\n >\n <Text\n colorScheme='secondary'\n localizationKey={row.attribute}\n />\n\n <Badge\n colorScheme={row.isRequired ? 'warning' : 'primary'}\n localizationKey={localizationKeys(\n row.isRequired\n ? 'configureSSO.configureStep.attributeMapping.badges.required'\n : 'configureSSO.configureStep.attributeMapping.badges.optional',\n )}\n />\n </Flex>\n </Td>\n\n <Td>\n <Text\n as='span'\n sx={{ fontFamily: 'monospace' }}\n localizationKey={row.claim}\n />\n </Td>\n </Tr>\n ))}\n </Tbody>\n </Table>\n\n {provider === 'saml_okta' && <OktaConfigureAttributesStepContent />}\n </Step.Section>\n </Step.Body>\n\n <Step.Footer>\n <Step.Footer.Previous\n onClick={() => goPrev()}\n isDisabled={isFirstStep}\n />\n <Step.Footer.Continue\n onClick={() => goNext()}\n isDisabled={isLastStep}\n />\n </Step.Footer>\n </>\n );\n};\n\nconst OktaConfigureAttributesStepContent = (): JSX.Element => {\n return (\n <>\n <Text\n as='p'\n colorScheme='secondary'\n localizationKey={localizationKeys('configureSSO.configureStep.attributeMapping.paragraph')}\n />\n\n <Col\n as='ol'\n sx={theme => ({\n gap: theme.space.$1x5,\n margin: 0,\n paddingInlineStart: theme.space.$5,\n listStyleType: 'decimal',\n })}\n >\n <Text\n as='li'\n colorScheme='secondary'\n localizationKey={localizationKeys('configureSSO.configureStep.samlOkta.configureAttributes.step1')}\n />\n <Text\n as='li'\n colorScheme='secondary'\n >\n <Text\n as='span'\n localizationKey={localizationKeys('configureSSO.configureStep.samlOkta.configureAttributes.step2')}\n />\n <Col\n as='ul'\n sx={theme => ({\n gap: theme.space.$1x5,\n margin: 0,\n marginTop: theme.space.$1x5,\n paddingInlineStart: theme.space.$5,\n listStyleType: '\"- \"',\n })}\n >\n {ATTRIBUTE_PAIRS.map(pair => (\n <Text\n key={pair.id}\n as='li'\n >\n <Badge\n localizationKey={pair.name}\n sx={{ fontFamily: 'monospace' }}\n />\n\n <Text\n as='span'\n localizationKey={localizationKeys(\n 'configureSSO.configureStep.samlOkta.configureAttributes.pairs.conjunction',\n )}\n />\n\n <Badge\n localizationKey={pair.expression}\n sx={{ fontFamily: 'monospace' }}\n />\n </Text>\n ))}\n </Col>\n </Text>\n </Col>\n </>\n );\n};\n\nexport const AssignUsersSubStep = (): JSX.Element => {\n const { goNext, goPrev, isFirstStep, isLastStep } = useWizard();\n const { provider } = useConfigureSSO();\n\n if (provider === 'saml_custom') {\n return (\n <>\n <Step.Body>\n <Step.Section sx={theme => ({ gap: theme.space.$3 })}>\n <Heading\n as='h3'\n textVariant='subtitle'\n localizationKey={localizationKeys('configureSSO.configureStep.samlCustom.assignUsers.title')}\n />\n <Text\n as='p'\n colorScheme='secondary'\n localizationKey={localizationKeys('configureSSO.configureStep.samlCustom.assignUsers.paragraph')}\n />\n </Step.Section>\n </Step.Body>\n\n <Step.Footer>\n <Step.Footer.Previous\n onClick={() => goPrev()}\n isDisabled={isFirstStep}\n />\n <Step.Footer.Continue\n onClick={() => goNext()}\n isDisabled={isLastStep}\n />\n </Step.Footer>\n </>\n );\n }\n\n return (\n <>\n <Step.Body>\n <Step.Section sx={theme => ({ gap: theme.space.$3 })}>\n <Heading\n as='h3'\n textVariant='subtitle'\n localizationKey={localizationKeys('configureSSO.configureStep.samlOkta.assignUsers.title')}\n />\n <Text\n as='p'\n colorScheme='secondary'\n localizationKey={localizationKeys('configureSSO.configureStep.samlOkta.assignUsers.paragraph')}\n />\n\n <Col\n as='ol'\n sx={theme => ({\n gap: theme.space.$1x5,\n margin: 0,\n paddingInlineStart: theme.space.$5,\n listStyleType: 'decimal',\n })}\n >\n <Text\n as='li'\n colorScheme='secondary'\n localizationKey={localizationKeys('configureSSO.configureStep.samlOkta.assignUsers.step1')}\n />\n <Text\n as='li'\n colorScheme='secondary'\n localizationKey={localizationKeys('configureSSO.configureStep.samlOkta.assignUsers.step2')}\n />\n <Text\n as='li'\n colorScheme='secondary'\n localizationKey={localizationKeys('configureSSO.configureStep.samlOkta.assignUsers.step3')}\n />\n <Text\n as='li'\n colorScheme='secondary'\n localizationKey={localizationKeys('configureSSO.configureStep.samlOkta.assignUsers.step4')}\n />\n <Text\n as='li'\n colorScheme='secondary'\n localizationKey={localizationKeys('configureSSO.configureStep.samlOkta.assignUsers.step5')}\n />\n </Col>\n </Step.Section>\n </Step.Body>\n\n <Step.Footer>\n <Step.Footer.Previous\n onClick={() => goPrev()}\n isDisabled={isFirstStep}\n />\n <Step.Footer.Continue\n onClick={() => goNext()}\n isDisabled={isLastStep}\n />\n </Step.Footer>\n </>\n );\n};\n\nexport const SubmitSamlConfigSubStep = (): JSX.Element => {\n const card = useCardState();\n const { t } = useLocalizations();\n const { goNext, goPrev, isFirstStep } = useWizard();\n const { enterpriseConnection, updateEnterpriseConnection } = useConfigureSSO();\n const { key } = useConfigureStepTranslations();\n\n const samlConnection = enterpriseConnection?.samlConnection;\n const hasExistingConfig = Boolean(\n samlConnection?.idpSsoUrl ||\n samlConnection?.idpEntityId ||\n samlConnection?.idpCertificate ||\n samlConnection?.idpMetadataUrl,\n );\n const existingCertPresent = Boolean(samlConnection?.idpCertificate);\n\n const [mode, setMode] = React.useState<'metadataUrl' | 'manual'>(hasExistingConfig ? 'manual' : 'metadataUrl');\n const [certFile, setCertFile] = React.useState<File | null>(null);\n\n const updateConnection = useReverification(\n React.useCallback(\n async (params: UpdateMeEnterpriseConnectionParams) => {\n if (!enterpriseConnection) {\n throw new Error('Enterprise connection required');\n }\n\n return updateEnterpriseConnection(enterpriseConnection.id, params);\n },\n [enterpriseConnection, updateEnterpriseConnection],\n ),\n );\n\n const metadataUrlField = useFormControl('idpMetadataUrl', samlConnection?.idpMetadataUrl ?? '', {\n type: 'text',\n label: localizationKeys(key('metadataUrl.label')),\n placeholder: localizationKeys(key('metadataUrl.placeholder')),\n isRequired: true,\n });\n\n const signOnUrlField = useFormControl('idpSsoUrl', samlConnection?.idpSsoUrl ?? '', {\n type: 'text',\n label: localizationKeys(key('manual.signOnUrl.label')),\n placeholder: localizationKeys(key('manual.signOnUrl.placeholder')),\n isRequired: true,\n });\n\n const issuerField = useFormControl('idpEntityId', samlConnection?.idpEntityId ?? '', {\n type: 'text',\n label: localizationKeys(key('manual.issuer.label')),\n placeholder: localizationKeys(key('manual.issuer.placeholder')),\n isRequired: true,\n });\n\n const certFileField = useFormControl('idpCertificate', '', {\n type: 'text',\n label: localizationKeys(key('manual.signingCertificate.label')),\n isRequired: true,\n });\n\n const trimmedMetadataUrl = metadataUrlField.value.trim();\n const trimmedSignOnUrl = signOnUrlField.value.trim();\n const trimmedIssuer = issuerField.value.trim();\n\n const hasCert = certFile !== null || existingCertPresent;\n const canSubmit =\n !card.isLoading &&\n ((mode === 'metadataUrl' && trimmedMetadataUrl.length > 0) ||\n (mode === 'manual' && trimmedSignOnUrl.length > 0 && trimmedIssuer.length > 0 && hasCert));\n\n const handleContinue = async () => {\n if (!enterpriseConnection || !canSubmit) {\n return;\n }\n\n card.setError(undefined);\n card.setLoading();\n\n try {\n if (mode === 'metadataUrl') {\n await updateConnection({ saml: { idpMetadataUrl: trimmedMetadataUrl } });\n } else {\n const samlPayload: NonNullable<UpdateMeEnterpriseConnectionParams['saml']> = {\n idpSsoUrl: trimmedSignOnUrl,\n idpEntityId: trimmedIssuer,\n };\n\n if (certFile !== null) {\n samlPayload.idpCertificate = await certFile.text();\n }\n\n await updateConnection({ saml: samlPayload });\n }\n\n void goNext();\n } catch (err) {\n const fields = mode === 'metadataUrl' ? [metadataUrlField] : [signOnUrlField, issuerField, certFileField];\n\n handleError(err as Error, fields, card.setError);\n\n if (isClerkAPIResponseError(err)) {\n const unscopedSamlError = err.errors.find(e => e.code?.startsWith('saml_') && !e.meta?.paramName);\n\n if (unscopedSamlError) {\n const primaryField = mode === 'metadataUrl' ? metadataUrlField : signOnUrlField;\n primaryField.setError(unscopedSamlError);\n card.setError(undefined);\n }\n }\n } finally {\n card.setIdle();\n }\n };\n\n return (\n <>\n <Step.Body>\n <Step.Section\n fill\n gap={5}\n >\n <Heading\n as='h3'\n textVariant='subtitle'\n localizationKey={localizationKeys(key('submitSamlConfig.title'))}\n />\n <SegmentedControl.Root\n aria-label={t(localizationKeys(key('modes.ariaLabel')))}\n value={mode}\n onChange={value => {\n card.setError(undefined);\n setMode(value as 'metadataUrl' | 'manual');\n }}\n fullWidth\n >\n <SegmentedControl.Button\n value='metadataUrl'\n text={localizationKeys(key('modes.metadataUrl'))}\n />\n <SegmentedControl.Button\n value='manual'\n text={localizationKeys(key('modes.manual'))}\n />\n </SegmentedControl.Root>\n\n {mode === 'metadataUrl' ? (\n <MetadataUrlPanel field={metadataUrlField} />\n ) : (\n <ManualEntryPanel\n signOnUrlField={signOnUrlField}\n issuerField={issuerField}\n certFileField={certFileField}\n certFile={certFile}\n setCertFile={setCertFile}\n existingCertPresent={existingCertPresent}\n />\n )}\n </Step.Section>\n </Step.Body>\n\n <Step.Footer>\n <Step.Footer.Previous\n onClick={() => goPrev()}\n isDisabled={isFirstStep || card.isLoading}\n />\n <Step.Footer.Continue\n onClick={handleContinue}\n isLoading={card.isLoading}\n isDisabled={!canSubmit}\n />\n </Step.Footer>\n </>\n );\n};\n\ntype FormControl = FormControlState<FieldId>;\n\ntype MetadataUrlPanelProps = {\n field: FormControl;\n};\n\ntype ManualEntryPanelProps = {\n signOnUrlField: FormControl;\n issuerField: FormControl;\n certFileField: FormControl;\n certFile: File | null;\n setCertFile: React.Dispatch<React.SetStateAction<File | null>>;\n existingCertPresent: boolean;\n};\n\nconst MetadataUrlPanel = ({ field }: MetadataUrlPanelProps): JSX.Element => {\n const { key } = useConfigureStepTranslations();\n\n return (\n <>\n <Text\n as='p'\n colorScheme='secondary'\n localizationKey={localizationKeys(key('metadataUrl.description'))}\n />\n <Form.ControlRow elementId={field.id}>\n <Form.PlainInput {...field.props} />\n </Form.ControlRow>\n </>\n );\n};\n\nconst ManualEntryPanel = ({\n signOnUrlField,\n issuerField,\n certFileField,\n certFile,\n setCertFile,\n existingCertPresent,\n}: ManualEntryPanelProps): JSX.Element => {\n const { t } = useLocalizations();\n const certInputRef = React.useRef<HTMLInputElement>(null);\n const { key } = useConfigureStepTranslations();\n\n return (\n <>\n <Text\n as='p'\n colorScheme='secondary'\n localizationKey={localizationKeys(key('manual.description'))}\n />\n\n <Form.ControlRow elementId={signOnUrlField.id}>\n <Form.PlainInput {...signOnUrlField.props} />\n </Form.ControlRow>\n\n <Form.ControlRow elementId={issuerField.id}>\n <Form.PlainInput {...issuerField.props} />\n </Form.ControlRow>\n\n <Box>\n <Field.Root {...certFileField.props}>\n <Col gap={2}>\n <Field.LabelRow>\n <Field.Label />\n </Field.LabelRow>\n\n <input\n ref={certInputRef}\n type='file'\n accept='.pem,.key,.crt,.cer,.cert'\n multiple={false}\n style={{ display: 'none' }}\n onChange={e => {\n setCertFile(e.target.files?.[0] ?? null);\n certFileField.clearFeedback();\n }}\n />\n\n {certFile === null ? (\n <Flex\n align='center'\n gap={2}\n sx={{ alignSelf: 'flex-start', flexWrap: 'wrap' }}\n >\n {existingCertPresent && (\n <Badge\n localizationKey={localizationKeys(\n 'configureSSO.configureStep.samlOkta.manual.signingCertificate.fileUploaded',\n )}\n />\n )}\n <Button\n size='xs'\n variant='outline'\n onClick={() => certInputRef.current?.click()}\n >\n <Icon\n icon={Upload}\n size='sm'\n colorScheme='neutral'\n sx={t => ({ marginInlineEnd: t.space.$1 })}\n />\n\n <Text\n as='span'\n localizationKey={localizationKeys(\n existingCertPresent\n ? 'configureSSO.configureStep.samlOkta.manual.signingCertificate.replaceFile'\n : 'configureSSO.configureStep.samlOkta.manual.signingCertificate.uploadFile',\n )}\n />\n </Button>\n </Flex>\n ) : (\n <Flex\n align='center'\n gap={2}\n sx={theme => ({ paddingTop: theme.space.$1, paddingBottom: theme.space.$1 })}\n >\n <Text\n as='span'\n colorScheme='secondary'\n variant='buttonSmall'\n >\n {certFile.name}\n </Text>\n\n <Button\n variant='ghost'\n colorScheme='neutral'\n aria-label={t(\n localizationKeys('configureSSO.configureStep.samlOkta.manual.signingCertificate.removeFile'),\n )}\n onClick={() => {\n setCertFile(null);\n certFileField.clearFeedback();\n if (certInputRef.current) {\n certInputRef.current.value = '';\n }\n }}\n sx={t => ({ padding: t.space.$1 })}\n >\n <Icon\n icon={Close}\n size='xs'\n />\n </Button>\n </Flex>\n )}\n </Col>\n <Field.Feedback />\n </Field.Root>\n </Box>\n </>\n );\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ConfigureStep.js","names":["ClipboardOutline","Check","samlPayload: NonNullable<UpdateMeEnterpriseConnectionParams['saml']>","Upload","t","Close"],"sources":["../../../../src/components/ConfigureSSO/steps/ConfigureStep.tsx"],"sourcesContent":["import { isClerkAPIResponseError } from '@clerk/shared/error';\nimport { useReverification } from '@clerk/shared/react';\nimport type { FieldId, UpdateMeEnterpriseConnectionParams } from '@clerk/shared/types';\nimport React, { type JSX } from 'react';\n\nimport {\n Badge,\n Box,\n Button,\n Col,\n descriptors,\n Flex,\n Flow,\n Heading,\n Icon,\n localizationKeys,\n Table,\n Tbody,\n Td,\n Text,\n Th,\n Thead,\n Tr,\n useLocalizations,\n} from '@/customizables';\nimport { ClipboardInput } from '@/elements/ClipboardInput';\nimport { useCardState } from '@/elements/contexts';\nimport { Field } from '@/elements/FieldControl';\nimport { Form } from '@/elements/Form';\nimport { SegmentedControl } from '@/elements/SegmentedControl';\nimport { Check, ClipboardOutline, Close, Upload } from '@/icons';\nimport type { FormControlState } from '@/ui/utils/useFormControl';\nimport { useFormControl } from '@/ui/utils/useFormControl';\nimport { handleError } from '@/utils/errorHandler';\n\nimport { useConfigureSSO } from '../ConfigureSSOContext';\nimport { Step } from '../elements/Step';\nimport { useWizard, Wizard } from '../elements/Wizard';\nimport { useConfigureStepTranslations } from './configureStepTranslations';\n\nexport const ConfigureStep = (): JSX.Element => {\n const { key } = useConfigureStepTranslations();\n\n return (\n <Flow.Part part='configureCreateApp'>\n <Step\n elementDescriptor={descriptors.configureSSOStep}\n elementId={descriptors.configureSSOStep.setId('configure')}\n >\n <Wizard>\n <Wizard.Step id='create-app'>\n <Step.Header\n title={localizationKeys(key('headerTitle'))}\n description={localizationKeys(key('createApp.headerSubtitle'))}\n >\n <InnerStepCounter />\n </Step.Header>\n\n <CreateAppSubStep />\n </Wizard.Step>\n\n <Wizard.Step id='configure-attributes'>\n <Step.Header\n title={localizationKeys(key('headerTitle'))}\n description={localizationKeys(key('configureAttributes.headerSubtitle'))}\n >\n <InnerStepCounter />\n </Step.Header>\n\n <ConfigureAttributesSubStep />\n </Wizard.Step>\n\n <Wizard.Step id='assign-users'>\n <Step.Header\n title={localizationKeys(key('headerTitle'))}\n description={localizationKeys(key('assignUsers.headerSubtitle'))}\n >\n <InnerStepCounter />\n </Step.Header>\n\n <AssignUsersSubStep />\n </Wizard.Step>\n\n <Wizard.Step id='submit-saml-config'>\n <Step.Header\n title={localizationKeys(key('headerTitle'))}\n description={localizationKeys(key('metadataUrl.headerSubtitle'))}\n >\n <InnerStepCounter />\n </Step.Header>\n\n <SubmitSamlConfigSubStep />\n </Wizard.Step>\n </Wizard>\n </Step>\n </Flow.Part>\n );\n};\n\nconst InnerStepCounter = (): JSX.Element => {\n const { currentIndex, totalSteps } = useWizard();\n return (\n <Step.Counter\n total={totalSteps}\n current={currentIndex + 1}\n />\n );\n};\n\nconst ATTRIBUTE_ROWS = [\n {\n id: 'email',\n isRequired: true,\n attribute: localizationKeys('configureSSO.configureStep.attributeMapping.rows.email.attribute'),\n claim: localizationKeys('configureSSO.configureStep.attributeMapping.rows.email.claim'),\n oktaClaimValue: localizationKeys('configureSSO.configureStep.samlOkta.configureAttributes.pairs.email.expression'),\n },\n {\n id: 'firstName',\n isRequired: false,\n attribute: localizationKeys('configureSSO.configureStep.attributeMapping.rows.firstName.attribute'),\n claim: localizationKeys('configureSSO.configureStep.attributeMapping.rows.firstName.claim'),\n oktaClaimValue: localizationKeys(\n 'configureSSO.configureStep.samlOkta.configureAttributes.pairs.firstName.expression',\n ),\n },\n {\n id: 'lastName',\n isRequired: false,\n attribute: localizationKeys('configureSSO.configureStep.attributeMapping.rows.lastName.attribute'),\n claim: localizationKeys('configureSSO.configureStep.attributeMapping.rows.lastName.claim'),\n oktaClaimValue: localizationKeys(\n 'configureSSO.configureStep.samlOkta.configureAttributes.pairs.lastName.expression',\n ),\n },\n] as const;\n\nconst ATTRIBUTE_PAIRS = [\n {\n id: 'email',\n name: localizationKeys('configureSSO.configureStep.samlOkta.configureAttributes.pairs.email.name'),\n expression: localizationKeys('configureSSO.configureStep.samlOkta.configureAttributes.pairs.email.expression'),\n },\n {\n id: 'firstName',\n name: localizationKeys('configureSSO.configureStep.samlOkta.configureAttributes.pairs.firstName.name'),\n expression: localizationKeys('configureSSO.configureStep.samlOkta.configureAttributes.pairs.firstName.expression'),\n },\n {\n id: 'lastName',\n name: localizationKeys('configureSSO.configureStep.samlOkta.configureAttributes.pairs.lastName.name'),\n expression: localizationKeys('configureSSO.configureStep.samlOkta.configureAttributes.pairs.lastName.expression'),\n },\n] as const;\n\nexport const CreateAppSubStep = (): JSX.Element => {\n const { goNext, goPrev, isFirstStep, isLastStep } = useWizard();\n const { enterpriseConnection, provider } = useConfigureSSO();\n const { key } = useConfigureStepTranslations();\n\n const acsUrl = enterpriseConnection?.samlConnection?.acsUrl ?? '';\n const spEntityId = enterpriseConnection?.samlConnection?.spEntityId ?? '';\n\n const acsUrlField = useFormControl('acsUrl', acsUrl, {\n type: 'text',\n label: localizationKeys('configureSSO.configureStep.spFields.acsUrl.label'),\n isRequired: false,\n });\n const spEntityIdField = useFormControl('spEntityId', spEntityId, {\n type: 'text',\n label: localizationKeys('configureSSO.configureStep.spFields.spEntityId.label'),\n isRequired: false,\n });\n\n return (\n <>\n <Step.Body>\n <Step.Section sx={theme => ({ gap: theme.space.$5 })}>\n <Col sx={theme => ({ gap: theme.space.$1x5 })}>\n <Heading\n as='h3'\n textVariant='subtitle'\n localizationKey={localizationKeys(key('createApp.title'))}\n />\n\n {provider === 'saml_okta' && <OktaCreateAppStepContent />}\n\n {provider === 'saml_custom' && (\n <Text\n as='p'\n colorScheme='secondary'\n localizationKey={localizationKeys('configureSSO.configureStep.samlCustom.createApp.subtitle')}\n />\n )}\n </Col>\n\n {provider === 'saml_okta' && <OktaServiceProviderStepContent />}\n\n <Form.ControlRow elementId={acsUrlField.id}>\n <Form.CommonInputWrapper {...acsUrlField.props}>\n <ClipboardInput\n value={acsUrl}\n readOnly\n copyIcon={ClipboardOutline}\n copiedIcon={Check}\n />\n </Form.CommonInputWrapper>\n </Form.ControlRow>\n\n <Form.ControlRow elementId={spEntityIdField.id}>\n <Form.CommonInputWrapper {...spEntityIdField.props}>\n <ClipboardInput\n value={spEntityId}\n readOnly\n copyIcon={ClipboardOutline}\n copiedIcon={Check}\n />\n </Form.CommonInputWrapper>\n </Form.ControlRow>\n\n {provider === 'saml_okta' && <OktaCompleteSamlIntegrationStepContent />}\n </Step.Section>\n </Step.Body>\n\n <Step.Footer>\n <Step.Footer.Previous\n onClick={() => goPrev()}\n isDisabled={isFirstStep}\n />\n <Step.Footer.Continue\n onClick={() => goNext()}\n isDisabled={isLastStep}\n />\n </Step.Footer>\n </>\n );\n};\n\n// TODO - Move IdP specific content to separate modules\nconst OktaServiceProviderStepContent = (): JSX.Element => {\n return (\n <Col sx={theme => ({ gap: theme.space.$1x5 })}>\n <Heading\n as='h3'\n textVariant='subtitle'\n localizationKey={localizationKeys('configureSSO.configureStep.samlOkta.serviceProvider.title')}\n />\n <Text\n as='p'\n colorScheme='secondary'\n localizationKey={localizationKeys('configureSSO.configureStep.samlOkta.serviceProvider.paragraph1')}\n />\n <Text\n as='p'\n colorScheme='secondary'\n localizationKey={localizationKeys('configureSSO.configureStep.samlOkta.serviceProvider.paragraph2')}\n />\n </Col>\n );\n};\n\nconst OktaCreateAppStepContent = (): JSX.Element => {\n return (\n <Col\n as='ul'\n sx={theme => ({\n gap: theme.space.$1x5,\n margin: 0,\n paddingInlineStart: theme.space.$5,\n listStyleType: 'disc',\n })}\n >\n <Text\n as='li'\n colorScheme='secondary'\n localizationKey={localizationKeys('configureSSO.configureStep.samlOkta.createApp.step1')}\n />\n <Text\n as='li'\n colorScheme='secondary'\n localizationKey={localizationKeys('configureSSO.configureStep.samlOkta.createApp.step2')}\n />\n <Text\n as='li'\n colorScheme='secondary'\n localizationKey={localizationKeys('configureSSO.configureStep.samlOkta.createApp.step3')}\n />\n <Text\n as='li'\n colorScheme='secondary'\n localizationKey={localizationKeys('configureSSO.configureStep.samlOkta.createApp.step4')}\n />\n <Text\n as='li'\n colorScheme='secondary'\n localizationKey={localizationKeys('configureSSO.configureStep.samlOkta.createApp.step5')}\n />\n </Col>\n );\n};\n\nconst OktaCompleteSamlIntegrationStepContent = (): JSX.Element => {\n return (\n <Col sx={theme => ({ gap: theme.space.$1x5 })}>\n <Heading\n as='h3'\n textVariant='subtitle'\n localizationKey={localizationKeys('configureSSO.configureStep.samlOkta.completeSamlIntegration.title')}\n />\n <Col\n as='ul'\n sx={theme => ({\n gap: theme.space.$1x5,\n margin: 0,\n paddingInlineStart: theme.space.$5,\n listStyleType: 'disc',\n })}\n >\n <Text\n as='li'\n colorScheme='secondary'\n localizationKey={localizationKeys('configureSSO.configureStep.samlOkta.completeSamlIntegration.step1')}\n />\n <Text\n as='li'\n colorScheme='secondary'\n localizationKey={localizationKeys('configureSSO.configureStep.samlOkta.completeSamlIntegration.step2')}\n />\n </Col>\n </Col>\n );\n};\n\nexport const ConfigureAttributesSubStep = (): JSX.Element => {\n const { goNext, goPrev, isFirstStep, isLastStep } = useWizard();\n\n const { provider } = useConfigureSSO();\n const isOkta = provider === 'saml_okta';\n\n return (\n <>\n <Step.Body>\n <Step.Section sx={theme => ({ gap: theme.space.$3 })}>\n {provider === 'saml_custom' && (\n <Heading\n as='h3'\n textVariant='subtitle'\n localizationKey={localizationKeys('configureSSO.configureStep.samlCustom.configureAttributes.title')}\n />\n )}\n\n <Table\n sx={theme => ({\n 'tr > th:first-of-type': {\n paddingInlineStart: theme.space.$4,\n },\n })}\n >\n <Thead>\n <Tr>\n <Th>\n <Text\n sx={theme => ({ fontSize: theme.fontSizes.$xs })}\n localizationKey={localizationKeys('configureSSO.configureStep.attributeMapping.columns.attribute')}\n />\n </Th>\n\n <Th>\n <Text\n sx={theme => ({ fontSize: theme.fontSizes.$xs })}\n localizationKey={localizationKeys('configureSSO.configureStep.attributeMapping.columns.claimName')}\n />\n </Th>\n\n {isOkta && (\n <Th>\n <Text\n sx={theme => ({ fontSize: theme.fontSizes.$xs })}\n localizationKey={localizationKeys(\n 'configureSSO.configureStep.attributeMapping.columns.claimValue',\n )}\n />\n </Th>\n )}\n </Tr>\n </Thead>\n\n <Tbody>\n {ATTRIBUTE_ROWS.map(row => (\n <Tr key={row.id}>\n <Td>\n <Flex\n as='span'\n align='center'\n sx={theme => ({ gap: theme.space.$2 })}\n >\n <Text\n colorScheme='secondary'\n localizationKey={row.attribute}\n />\n\n <Badge\n colorScheme={row.isRequired ? 'warning' : 'primary'}\n localizationKey={localizationKeys(\n row.isRequired\n ? 'configureSSO.configureStep.attributeMapping.badges.required'\n : 'configureSSO.configureStep.attributeMapping.badges.optional',\n )}\n />\n </Flex>\n </Td>\n\n <Td>\n <Text\n as='span'\n sx={{ fontFamily: 'monospace' }}\n localizationKey={row.claim}\n />\n </Td>\n\n {isOkta && (\n <Td>\n <Text\n as='span'\n sx={{ fontFamily: 'monospace' }}\n localizationKey={row.oktaClaimValue}\n />\n </Td>\n )}\n </Tr>\n ))}\n </Tbody>\n </Table>\n\n {isOkta && <OktaConfigureAttributesStepContent />}\n </Step.Section>\n </Step.Body>\n\n <Step.Footer>\n <Step.Footer.Previous\n onClick={() => goPrev()}\n isDisabled={isFirstStep}\n />\n <Step.Footer.Continue\n onClick={() => goNext()}\n isDisabled={isLastStep}\n />\n </Step.Footer>\n </>\n );\n};\n\nconst OktaConfigureAttributesStepContent = (): JSX.Element => {\n return (\n <>\n <Text\n as='p'\n colorScheme='secondary'\n localizationKey={localizationKeys('configureSSO.configureStep.attributeMapping.paragraph')}\n />\n\n <Col\n as='ol'\n sx={theme => ({\n gap: theme.space.$1x5,\n margin: 0,\n paddingInlineStart: theme.space.$5,\n listStyleType: 'decimal',\n })}\n >\n <Text\n as='li'\n colorScheme='secondary'\n localizationKey={localizationKeys('configureSSO.configureStep.samlOkta.configureAttributes.step1')}\n />\n <Text\n as='li'\n colorScheme='secondary'\n >\n <Text\n as='span'\n localizationKey={localizationKeys('configureSSO.configureStep.samlOkta.configureAttributes.step2')}\n />\n <Col\n as='ul'\n sx={theme => ({\n gap: theme.space.$1x5,\n margin: 0,\n marginTop: theme.space.$1x5,\n paddingInlineStart: theme.space.$5,\n listStyleType: '\"- \"',\n })}\n >\n {ATTRIBUTE_PAIRS.map(pair => (\n <Text\n key={pair.id}\n as='li'\n >\n <Badge\n localizationKey={pair.name}\n sx={{ fontFamily: 'monospace' }}\n />\n\n <Text\n as='span'\n localizationKey={localizationKeys(\n 'configureSSO.configureStep.samlOkta.configureAttributes.pairs.conjunction',\n )}\n />\n\n <Badge\n localizationKey={pair.expression}\n sx={{ fontFamily: 'monospace' }}\n />\n </Text>\n ))}\n </Col>\n </Text>\n </Col>\n </>\n );\n};\n\nexport const AssignUsersSubStep = (): JSX.Element => {\n const { goNext, goPrev, isFirstStep, isLastStep } = useWizard();\n const { provider } = useConfigureSSO();\n\n if (provider === 'saml_custom') {\n return (\n <>\n <Step.Body>\n <Step.Section sx={theme => ({ gap: theme.space.$3 })}>\n <Heading\n as='h3'\n textVariant='subtitle'\n localizationKey={localizationKeys('configureSSO.configureStep.samlCustom.assignUsers.title')}\n />\n <Text\n as='p'\n colorScheme='secondary'\n localizationKey={localizationKeys('configureSSO.configureStep.samlCustom.assignUsers.paragraph')}\n />\n </Step.Section>\n </Step.Body>\n\n <Step.Footer>\n <Step.Footer.Previous\n onClick={() => goPrev()}\n isDisabled={isFirstStep}\n />\n <Step.Footer.Continue\n onClick={() => goNext()}\n isDisabled={isLastStep}\n />\n </Step.Footer>\n </>\n );\n }\n\n return (\n <>\n <Step.Body>\n <Step.Section sx={theme => ({ gap: theme.space.$3 })}>\n <Heading\n as='h3'\n textVariant='subtitle'\n localizationKey={localizationKeys('configureSSO.configureStep.samlOkta.assignUsers.title')}\n />\n <Text\n as='p'\n colorScheme='secondary'\n localizationKey={localizationKeys('configureSSO.configureStep.samlOkta.assignUsers.paragraph')}\n />\n\n <Col\n as='ol'\n sx={theme => ({\n gap: theme.space.$1x5,\n margin: 0,\n paddingInlineStart: theme.space.$5,\n listStyleType: 'decimal',\n })}\n >\n <Text\n as='li'\n colorScheme='secondary'\n localizationKey={localizationKeys('configureSSO.configureStep.samlOkta.assignUsers.step1')}\n />\n <Text\n as='li'\n colorScheme='secondary'\n localizationKey={localizationKeys('configureSSO.configureStep.samlOkta.assignUsers.step2')}\n />\n <Text\n as='li'\n colorScheme='secondary'\n localizationKey={localizationKeys('configureSSO.configureStep.samlOkta.assignUsers.step3')}\n />\n <Text\n as='li'\n colorScheme='secondary'\n localizationKey={localizationKeys('configureSSO.configureStep.samlOkta.assignUsers.step4')}\n />\n <Text\n as='li'\n colorScheme='secondary'\n localizationKey={localizationKeys('configureSSO.configureStep.samlOkta.assignUsers.step5')}\n />\n </Col>\n </Step.Section>\n </Step.Body>\n\n <Step.Footer>\n <Step.Footer.Previous\n onClick={() => goPrev()}\n isDisabled={isFirstStep}\n />\n <Step.Footer.Continue\n onClick={() => goNext()}\n isDisabled={isLastStep}\n />\n </Step.Footer>\n </>\n );\n};\n\nexport const SubmitSamlConfigSubStep = (): JSX.Element => {\n const card = useCardState();\n const { t } = useLocalizations();\n const { goNext, goPrev, isFirstStep } = useWizard();\n const { enterpriseConnection, updateEnterpriseConnection } = useConfigureSSO();\n const { key } = useConfigureStepTranslations();\n\n const samlConnection = enterpriseConnection?.samlConnection;\n const hasExistingConfig = Boolean(\n samlConnection?.idpSsoUrl ||\n samlConnection?.idpEntityId ||\n samlConnection?.idpCertificate ||\n samlConnection?.idpMetadataUrl,\n );\n const existingCertPresent = Boolean(samlConnection?.idpCertificate);\n\n const [mode, setMode] = React.useState<'metadataUrl' | 'manual'>(hasExistingConfig ? 'manual' : 'metadataUrl');\n const [certFile, setCertFile] = React.useState<File | null>(null);\n\n const updateConnection = useReverification(\n React.useCallback(\n async (params: UpdateMeEnterpriseConnectionParams) => {\n if (!enterpriseConnection) {\n throw new Error('Enterprise connection required');\n }\n\n return updateEnterpriseConnection(enterpriseConnection.id, params);\n },\n [enterpriseConnection, updateEnterpriseConnection],\n ),\n );\n\n const metadataUrlField = useFormControl('idpMetadataUrl', samlConnection?.idpMetadataUrl ?? '', {\n type: 'text',\n label: localizationKeys(key('metadataUrl.label')),\n placeholder: localizationKeys(key('metadataUrl.placeholder')),\n isRequired: true,\n });\n\n const signOnUrlField = useFormControl('idpSsoUrl', samlConnection?.idpSsoUrl ?? '', {\n type: 'text',\n label: localizationKeys(key('manual.signOnUrl.label')),\n placeholder: localizationKeys(key('manual.signOnUrl.placeholder')),\n isRequired: true,\n });\n\n const issuerField = useFormControl('idpEntityId', samlConnection?.idpEntityId ?? '', {\n type: 'text',\n label: localizationKeys(key('manual.issuer.label')),\n placeholder: localizationKeys(key('manual.issuer.placeholder')),\n isRequired: true,\n });\n\n const certFileField = useFormControl('idpCertificate', '', {\n type: 'text',\n label: localizationKeys(key('manual.signingCertificate.label')),\n isRequired: true,\n });\n\n const trimmedMetadataUrl = metadataUrlField.value.trim();\n const trimmedSignOnUrl = signOnUrlField.value.trim();\n const trimmedIssuer = issuerField.value.trim();\n\n const hasCert = certFile !== null || existingCertPresent;\n const canSubmit =\n !card.isLoading &&\n ((mode === 'metadataUrl' && trimmedMetadataUrl.length > 0) ||\n (mode === 'manual' && trimmedSignOnUrl.length > 0 && trimmedIssuer.length > 0 && hasCert));\n\n const handleContinue = async () => {\n if (!enterpriseConnection || !canSubmit) {\n return;\n }\n\n card.setError(undefined);\n card.setLoading();\n\n try {\n if (mode === 'metadataUrl') {\n await updateConnection({ saml: { idpMetadataUrl: trimmedMetadataUrl } });\n } else {\n const samlPayload: NonNullable<UpdateMeEnterpriseConnectionParams['saml']> = {\n idpSsoUrl: trimmedSignOnUrl,\n idpEntityId: trimmedIssuer,\n };\n\n if (certFile !== null) {\n samlPayload.idpCertificate = await certFile.text();\n }\n\n await updateConnection({ saml: samlPayload });\n }\n\n void goNext();\n } catch (err) {\n const fields = mode === 'metadataUrl' ? [metadataUrlField] : [signOnUrlField, issuerField, certFileField];\n\n handleError(err as Error, fields, card.setError);\n\n if (isClerkAPIResponseError(err)) {\n const unscopedSamlError = err.errors.find(e => e.code?.startsWith('saml_') && !e.meta?.paramName);\n\n if (unscopedSamlError) {\n const primaryField = mode === 'metadataUrl' ? metadataUrlField : signOnUrlField;\n primaryField.setError(unscopedSamlError);\n card.setError(undefined);\n }\n }\n } finally {\n card.setIdle();\n }\n };\n\n return (\n <>\n <Step.Body>\n <Step.Section\n fill\n gap={5}\n >\n <Heading\n as='h3'\n textVariant='subtitle'\n localizationKey={localizationKeys(key('submitSamlConfig.title'))}\n />\n <SegmentedControl.Root\n aria-label={t(localizationKeys(key('modes.ariaLabel')))}\n value={mode}\n onChange={value => {\n card.setError(undefined);\n setMode(value as 'metadataUrl' | 'manual');\n }}\n fullWidth\n >\n <SegmentedControl.Button\n value='metadataUrl'\n text={localizationKeys(key('modes.metadataUrl'))}\n />\n <SegmentedControl.Button\n value='manual'\n text={localizationKeys(key('modes.manual'))}\n />\n </SegmentedControl.Root>\n\n {mode === 'metadataUrl' ? (\n <MetadataUrlPanel field={metadataUrlField} />\n ) : (\n <ManualEntryPanel\n signOnUrlField={signOnUrlField}\n issuerField={issuerField}\n certFileField={certFileField}\n certFile={certFile}\n setCertFile={setCertFile}\n existingCertPresent={existingCertPresent}\n />\n )}\n </Step.Section>\n </Step.Body>\n\n <Step.Footer>\n <Step.Footer.Previous\n onClick={() => goPrev()}\n isDisabled={isFirstStep || card.isLoading}\n />\n <Step.Footer.Continue\n onClick={handleContinue}\n isLoading={card.isLoading}\n isDisabled={!canSubmit}\n />\n </Step.Footer>\n </>\n );\n};\n\ntype FormControl = FormControlState<FieldId>;\n\ntype MetadataUrlPanelProps = {\n field: FormControl;\n};\n\ntype ManualEntryPanelProps = {\n signOnUrlField: FormControl;\n issuerField: FormControl;\n certFileField: FormControl;\n certFile: File | null;\n setCertFile: React.Dispatch<React.SetStateAction<File | null>>;\n existingCertPresent: boolean;\n};\n\nconst MetadataUrlPanel = ({ field }: MetadataUrlPanelProps): JSX.Element => {\n const { key } = useConfigureStepTranslations();\n\n return (\n <>\n <Text\n as='p'\n colorScheme='secondary'\n localizationKey={localizationKeys(key('metadataUrl.description'))}\n />\n <Form.ControlRow elementId={field.id}>\n <Form.PlainInput {...field.props} />\n </Form.ControlRow>\n </>\n );\n};\n\nconst ManualEntryPanel = ({\n signOnUrlField,\n issuerField,\n certFileField,\n certFile,\n setCertFile,\n existingCertPresent,\n}: ManualEntryPanelProps): JSX.Element => {\n const { t } = useLocalizations();\n const certInputRef = React.useRef<HTMLInputElement>(null);\n const { key } = useConfigureStepTranslations();\n\n return (\n <>\n <Text\n as='p'\n colorScheme='secondary'\n localizationKey={localizationKeys(key('manual.description'))}\n />\n\n <Form.ControlRow elementId={signOnUrlField.id}>\n <Form.PlainInput {...signOnUrlField.props} />\n </Form.ControlRow>\n\n <Form.ControlRow elementId={issuerField.id}>\n <Form.PlainInput {...issuerField.props} />\n </Form.ControlRow>\n\n <Box>\n <Field.Root {...certFileField.props}>\n <Col gap={2}>\n <Field.LabelRow>\n <Field.Label />\n </Field.LabelRow>\n\n <input\n ref={certInputRef}\n type='file'\n accept='.pem,.key,.crt,.cer,.cert'\n multiple={false}\n style={{ display: 'none' }}\n onChange={e => {\n setCertFile(e.target.files?.[0] ?? null);\n certFileField.clearFeedback();\n }}\n />\n\n {certFile === null ? (\n <Flex\n align='center'\n gap={2}\n sx={{ alignSelf: 'flex-start', flexWrap: 'wrap' }}\n >\n {existingCertPresent && (\n <Badge\n localizationKey={localizationKeys(\n 'configureSSO.configureStep.samlOkta.manual.signingCertificate.fileUploaded',\n )}\n />\n )}\n <Button\n size='xs'\n variant='outline'\n onClick={() => certInputRef.current?.click()}\n >\n <Icon\n icon={Upload}\n size='sm'\n colorScheme='neutral'\n sx={t => ({ marginInlineEnd: t.space.$1 })}\n />\n\n <Text\n as='span'\n localizationKey={localizationKeys(\n existingCertPresent\n ? 'configureSSO.configureStep.samlOkta.manual.signingCertificate.replaceFile'\n : 'configureSSO.configureStep.samlOkta.manual.signingCertificate.uploadFile',\n )}\n />\n </Button>\n </Flex>\n ) : (\n <Flex\n align='center'\n gap={2}\n sx={theme => ({ paddingTop: theme.space.$1, paddingBottom: theme.space.$1 })}\n >\n <Text\n as='span'\n colorScheme='secondary'\n variant='buttonSmall'\n >\n {certFile.name}\n </Text>\n\n <Button\n variant='ghost'\n colorScheme='neutral'\n aria-label={t(\n localizationKeys('configureSSO.configureStep.samlOkta.manual.signingCertificate.removeFile'),\n )}\n onClick={() => {\n setCertFile(null);\n certFileField.clearFeedback();\n if (certInputRef.current) {\n certInputRef.current.value = '';\n }\n }}\n sx={t => ({ padding: t.space.$1 })}\n >\n <Icon\n icon={Close}\n size='xs'\n />\n </Button>\n </Flex>\n )}\n </Col>\n <Field.Feedback />\n </Field.Root>\n </Box>\n </>\n );\n};\n"],"mappings":"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"}
|
|
@@ -153,14 +153,13 @@ const TestConfigurationStep = () => {
|
|
|
153
153
|
}) : null,
|
|
154
154
|
/* @__PURE__ */ jsxs(Step.Footer, { children: [/* @__PURE__ */ jsx(Step.Footer.Previous, { onClick: () => goPrev() }), /* @__PURE__ */ jsx(ContinueTestSsoStepButton, {
|
|
155
155
|
enterpriseConnectionId: enterpriseConnection?.id,
|
|
156
|
-
isConnectionActive: enterpriseConnection?.active,
|
|
157
156
|
onContinue: () => void goNext()
|
|
158
157
|
})] })
|
|
159
158
|
]
|
|
160
159
|
})
|
|
161
160
|
});
|
|
162
161
|
};
|
|
163
|
-
const ContinueTestSsoStepButton = ({ enterpriseConnectionId,
|
|
162
|
+
const ContinueTestSsoStepButton = ({ enterpriseConnectionId, onContinue }) => {
|
|
164
163
|
const { user } = useUser();
|
|
165
164
|
const { t } = useLocalizations();
|
|
166
165
|
const card = useCardState();
|
|
@@ -184,8 +183,7 @@ const ContinueTestSsoStepButton = ({ enterpriseConnectionId, isConnectionActive,
|
|
|
184
183
|
};
|
|
185
184
|
return /* @__PURE__ */ jsx(Step.Footer.Continue, {
|
|
186
185
|
onClick: () => void handleContinue(),
|
|
187
|
-
isLoading: isValidating
|
|
188
|
-
isDisabled: !enterpriseConnectionId || isConnectionActive
|
|
186
|
+
isLoading: isValidating
|
|
189
187
|
});
|
|
190
188
|
};
|
|
191
189
|
const TestResultsTable = ({ rows, isLoading, isPolling, onTestRunCreated, page, pageCount, pageSize, totalCount, onPageChange }) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TestConfigurationStep.js","names":["RotateLeftRight","t","Check","Copy"],"sources":["../../../../src/components/ConfigureSSO/steps/TestConfigurationStep.tsx"],"sourcesContent":["import { __internal_useEnterpriseConnectionTestRuns, useUser } from '@clerk/shared/react/index';\nimport type { EnterpriseConnectionTestRunResource } from '@clerk/shared/types';\nimport type { ReactNode } from 'react';\nimport { useState } from 'react';\n\nimport type { LocalizationKey } from '@/customizables';\nimport {\n Badge,\n Box,\n Button,\n Dd,\n descriptors,\n Dl,\n Dt,\n Flex,\n Flow,\n Heading,\n Icon,\n localizationKeys,\n Spinner,\n Table,\n Tbody,\n Td,\n Text,\n Th,\n Thead,\n Tr,\n useLocalizations,\n} from '@/customizables';\nimport { useCardState } from '@/elements/contexts';\nimport { Drawer } from '@/elements/Drawer';\nimport { IconButton } from '@/elements/IconButton';\nimport { Pagination } from '@/elements/Pagination';\nimport { ProfileSection } from '@/elements/Section';\nimport { useClipboard } from '@/hooks';\nimport { Check, Copy, RotateLeftRight } from '@/icons';\nimport { common, mqu } from '@/styledSystem';\nimport { handleError } from '@/utils/errorHandler';\n\nimport { useConfigureSSO } from '../ConfigureSSOContext';\nimport { Step } from '../elements/Step';\nimport { useWizard } from '../elements/Wizard';\nimport { TestRunHowToFixSection } from './TestRunHowToFixSection';\n\nconst TEST_RUNS_PAGE_SIZE = 5;\nconst TEST_RESULTS_TABLE_COLUMN_COUNT = 3;\n\nexport const TestConfigurationStep = (): JSX.Element => {\n const { goNext, goPrev } = useWizard();\n const { enterpriseConnection } = useConfigureSSO();\n const card = useCardState();\n\n const [currentPage, setCurrentPage] = useState(1);\n\n const {\n data: testRuns,\n totalCount,\n isLoading: areTestRunsLoading,\n isPolling,\n revalidate: revalidateTestRuns,\n } = __internal_useEnterpriseConnectionTestRuns({\n enterpriseConnectionId: enterpriseConnection?.id ?? null,\n params: { initialPage: currentPage, pageSize: TEST_RUNS_PAGE_SIZE },\n });\n\n const pageCount = totalCount ? Math.ceil(totalCount / TEST_RUNS_PAGE_SIZE) : 0;\n\n const handleTestRunCreated = () => {\n setCurrentPage(1);\n void revalidateTestRuns();\n };\n\n return (\n <Flow.Part part='testSso'>\n <Step\n elementDescriptor={descriptors.configureSSOStep}\n elementId={descriptors.configureSSOStep.setId('test')}\n >\n <Step.Header\n title={localizationKeys('configureSSO.testConfigurationStep.title')}\n description={localizationKeys('configureSSO.testConfigurationStep.subtitle')}\n />\n\n <Step.Body>\n <Step.Section\n sx={theme => ({\n borderBottomWidth: theme.borderWidths.$normal,\n borderBottomStyle: theme.borderStyles.$solid,\n borderBottomColor: theme.colors.$borderAlpha100,\n })}\n >\n <ProfileSection.Root\n title={localizationKeys('configureSSO.testConfigurationStep.testUrl.title')}\n id='testSsoUrl'\n centered={false}\n sx={t => ({\n borderTopWidth: 0,\n paddingTop: 0,\n paddingBottom: 0,\n flexDirection: 'column-reverse',\n gap: t.space.$1,\n })}\n >\n <Text\n colorScheme='secondary'\n localizationKey={localizationKeys('configureSSO.testConfigurationStep.testUrl.subtitle')}\n />\n <ProfileSection.Item\n id='testSsoUrl'\n sx={{ paddingInlineStart: 0 }}\n >\n <Flex gap={2}>\n <CopyTestUrlButton onTestRunCreated={handleTestRunCreated} />\n\n <Button\n variant='bordered'\n colorScheme='secondary'\n size='xs'\n onClick={() => void revalidateTestRuns()}\n isDisabled={areTestRunsLoading}\n sx={t => ({ gap: t.space.$1x5 })}\n >\n <Icon\n icon={RotateLeftRight}\n size='sm'\n colorScheme='neutral'\n />\n <Text\n as='span'\n localizationKey={localizationKeys(\n 'configureSSO.testConfigurationStep.testResults.actionLabel__refresh',\n )}\n />\n </Button>\n </Flex>\n </ProfileSection.Item>\n </ProfileSection.Root>\n </Step.Section>\n\n <Step.Section sx={{ flex: 1, minHeight: 0 }}>\n <ProfileSection.Root\n title={localizationKeys('configureSSO.testConfigurationStep.testResults.title')}\n id='testResults'\n centered={false}\n sx={t => ({\n borderTopWidth: 0,\n paddingTop: 0,\n paddingBottom: 0,\n flexDirection: 'column-reverse',\n gap: t.space.$2,\n flex: 1,\n minHeight: 0,\n '& > *:first-of-type': {\n flex: 1,\n minHeight: 0,\n },\n })}\n >\n <TestResultsTable\n rows={testRuns ?? []}\n isPolling={isPolling}\n isLoading={areTestRunsLoading}\n page={currentPage}\n pageCount={pageCount}\n pageSize={TEST_RUNS_PAGE_SIZE}\n totalCount={totalCount ?? 0}\n onPageChange={setCurrentPage}\n onTestRunCreated={handleTestRunCreated}\n />\n </ProfileSection.Root>\n </Step.Section>\n </Step.Body>\n\n {card.error ? (\n <Box\n sx={t => ({\n flexShrink: 0,\n paddingInline: t.space.$5,\n paddingBlock: t.space.$3,\n borderTopWidth: t.borderWidths.$normal,\n borderTopStyle: t.borderStyles.$solid,\n borderTopColor: t.colors.$borderAlpha100,\n })}\n >\n <Text\n as='p'\n variant='body'\n sx={t => ({ color: t.colors.$danger500, fontSize: t.fontSizes.$sm })}\n >\n {card.error}\n </Text>\n </Box>\n ) : null}\n\n <Step.Footer>\n <Step.Footer.Previous onClick={() => goPrev()} />\n <ContinueTestSsoStepButton\n enterpriseConnectionId={enterpriseConnection?.id}\n isConnectionActive={enterpriseConnection?.active}\n onContinue={() => void goNext()}\n />\n </Step.Footer>\n </Step>\n </Flow.Part>\n );\n};\n\ntype ContinueTestSsoStepButtonProps = {\n enterpriseConnectionId: string | undefined;\n isConnectionActive: boolean | undefined;\n onContinue: () => void;\n};\n\nconst ContinueTestSsoStepButton = ({\n enterpriseConnectionId,\n isConnectionActive,\n onContinue,\n}: ContinueTestSsoStepButtonProps): JSX.Element => {\n const { user } = useUser();\n const { t } = useLocalizations();\n const card = useCardState();\n const [isValidating, setIsValidating] = useState(false);\n\n const handleContinue = async () => {\n if (!user || !enterpriseConnectionId) {\n return;\n }\n\n setIsValidating(true);\n card.setError(undefined);\n\n try {\n const result = await user.getEnterpriseConnectionTestRuns(enterpriseConnectionId, {\n initialPage: 1,\n pageSize: 1,\n status: ['success'],\n });\n\n if (result.data.length > 0) {\n onContinue();\n } else {\n card.setError(t(localizationKeys('configureSSO.testConfigurationStep.error__noSuccessfulTestRun')));\n }\n } catch (err) {\n handleError(err as Error, [], card.setError);\n } finally {\n setIsValidating(false);\n }\n };\n\n return (\n <Step.Footer.Continue\n onClick={() => void handleContinue()}\n isLoading={isValidating}\n isDisabled={!enterpriseConnectionId || isConnectionActive}\n />\n );\n};\n\ntype TestResultsTableProps = {\n rows: EnterpriseConnectionTestRunResource[];\n isLoading: boolean;\n isPolling: boolean;\n onTestRunCreated?: (testUrl: string) => void;\n page: number;\n pageCount: number;\n pageSize: number;\n totalCount: number;\n onPageChange: (page: number) => void;\n};\n\nconst TestResultsTable = ({\n rows,\n isLoading,\n isPolling,\n onTestRunCreated,\n page,\n pageCount,\n pageSize,\n totalCount,\n onPageChange,\n}: TestResultsTableProps): JSX.Element => {\n const { t } = useLocalizations();\n const { contentRef } = useConfigureSSO();\n const [selectedTestRun, setSelectedTestRun] = useState<EnterpriseConnectionTestRunResource | null>(null);\n\n const drawerTitle =\n selectedTestRun?.status === 'failed'\n ? selectedTestRun.logs?.[0]?.shortMessage ||\n t(localizationKeys('configureSSO.testConfigurationStep.testRunDetails.title'))\n : t(localizationKeys('configureSSO.testConfigurationStep.testRunDetails.title'));\n\n return (\n <>\n <Flex\n direction='col'\n sx={t => ({\n width: '100%',\n flex: '0 1 auto',\n minHeight: 0,\n overflowY: 'auto',\n borderWidth: t.borderWidths.$normal,\n borderStyle: t.borderStyles.$solid,\n borderColor: t.colors.$borderAlpha150,\n borderRadius: t.radii.$lg,\n ...common.unstyledScrollbar(t),\n [mqu.sm]: { overflowX: 'auto', padding: t.space.$0x25 },\n })}\n >\n <Table\n tableHeadVisuallyHidden={!rows.length}\n sx={t => ({\n background: t.colors.$colorBackground,\n '&&': {\n border: 'none',\n borderRadius: 0,\n },\n })}\n >\n <Thead>\n <Tr>\n <Th\n localizationKey={localizationKeys(\n 'configureSSO.testConfigurationStep.testRunDetails.runDetails.timestamp',\n )}\n />\n <Th\n localizationKey={localizationKeys(\n 'configureSSO.testConfigurationStep.testRunDetails.runDetails.sectionTitle',\n )}\n />\n <Th\n localizationKey={localizationKeys(\n 'configureSSO.testConfigurationStep.testRunDetails.runDetails.status',\n )}\n />\n </Tr>\n </Thead>\n <Tbody>\n {isLoading || isPolling ? (\n <Tr>\n <Td colSpan={TEST_RESULTS_TABLE_COLUMN_COUNT}>\n <Flex\n direction='col'\n align='center'\n gap={2}\n sx={t => ({ padding: `${t.space.$10} 0` })}\n >\n <Spinner\n colorScheme='primary'\n elementDescriptor={descriptors.spinner}\n />\n <Text\n colorScheme='secondary'\n localizationKey={\n isPolling\n ? localizationKeys('configureSSO.testConfigurationStep.testResults.polling')\n : undefined\n }\n />\n </Flex>\n </Td>\n </Tr>\n ) : !rows.length ? (\n <Tr>\n <Td colSpan={TEST_RESULTS_TABLE_COLUMN_COUNT}>\n <Flex\n align='center'\n justify='center'\n sx={t => ({ padding: `${t.space.$10} 0`, flex: 1 })}\n >\n <CopyTestUrlButton onTestRunCreated={onTestRunCreated} />\n </Flex>\n </Td>\n </Tr>\n ) : (\n rows.map(row => (\n <Tr\n key={row.id}\n onClick={() => setSelectedTestRun(row)}\n sx={t => ({\n cursor: 'pointer',\n '&:hover > td': {\n backgroundColor: t.colors.$neutralAlpha50,\n },\n })}\n >\n <Td>\n <TestRunTimestampCell testRun={row} />\n </Td>\n <Td>\n <TestRunDetailsCell testRun={row} />\n </Td>\n <Td>\n <TestRunStatusCell testRun={row} />\n </Td>\n </Tr>\n ))\n )}\n </Tbody>\n </Table>\n </Flex>\n\n {pageCount > 1 ? (\n <Box sx={{ flexShrink: 0 }}>\n <Pagination\n page={Math.min(page, pageCount)}\n count={pageCount}\n onChange={onPageChange}\n siblingCount={1}\n rowInfo={{\n allRowsCount: totalCount,\n startingRow: totalCount > 0 ? Math.max(0, (page - 1) * pageSize) + 1 : 0,\n endingRow: Math.min(page * pageSize, totalCount),\n }}\n />\n </Box>\n ) : null}\n\n <Drawer.Root\n open={selectedTestRun !== null}\n onOpenChange={open => {\n if (!open) {\n setSelectedTestRun(null);\n }\n }}\n strategy='absolute'\n portalProps={{ root: contentRef }}\n >\n <Drawer.Overlay />\n <Drawer.Content>\n <Drawer.Header title={drawerTitle} />\n {selectedTestRun ? <TestRunDetailsBody testRun={selectedTestRun} /> : null}\n </Drawer.Content>\n </Drawer.Root>\n </>\n );\n};\n\nconst useTestRunFormattedTimestamp = (testRun: EnterpriseConnectionTestRunResource) => {\n const { locale } = useLocalizations();\n if (!testRun.createdAt) {\n return null;\n }\n const time = new Intl.DateTimeFormat(locale, { timeStyle: 'medium' }).format(testRun.createdAt);\n const day = new Intl.DateTimeFormat(locale, { month: 'short', day: 'numeric' }).format(testRun.createdAt);\n\n return { time, day };\n};\n\nconst TestRunTimestampCell = ({ testRun }: { testRun: EnterpriseConnectionTestRunResource }): JSX.Element | null => {\n const formatted = useTestRunFormattedTimestamp(testRun);\n if (!formatted) {\n return null;\n }\n\n return (\n <Flex\n gap={2}\n align='baseline'\n sx={{ whiteSpace: 'nowrap' }}\n >\n <Text>{formatted.time}</Text>\n <Text colorScheme='secondary'>{formatted.day}</Text>\n </Flex>\n );\n};\n\nconst DetailRow = ({ title, children }: { title: LocalizationKey; children: ReactNode }): JSX.Element => (\n <Box\n as='div'\n sx={t => ({\n display: 'grid',\n gridTemplateColumns: 'repeat(2, minmax(0, 1fr))',\n gap: t.space.$2,\n })}\n >\n <Dt\n localizationKey={title}\n sx={t => ({\n color: t.colors.$colorForeground,\n ...common.textVariants(t).subtitle,\n })}\n />\n <Dd\n sx={t => ({\n display: 'grid',\n justifyContent: 'end',\n color: t.colors.$colorForeground,\n })}\n >\n {children}\n </Dd>\n </Box>\n);\n\nconst TestRunDetailsBody = ({ testRun }: { testRun: EnterpriseConnectionTestRunResource }): JSX.Element => {\n const formatted = useTestRunFormattedTimestamp(testRun);\n const failedLog = testRun.status === 'failed' ? testRun.logs?.[0] : null;\n\n return (\n <Drawer.Body\n sx={t => ({\n display: 'flex',\n flexDirection: 'column',\n flex: 1,\n overflowY: 'auto',\n padding: t.space.$4,\n gap: t.space.$4,\n })}\n >\n <Heading\n as='h3'\n textVariant='h3'\n localizationKey={localizationKeys('configureSSO.testConfigurationStep.testRunDetails.runDetails.sectionTitle')}\n />\n\n <Dl sx={t => ({ display: 'grid', gridRowGap: t.space.$2 })}>\n {formatted ? (\n <DetailRow title={localizationKeys('configureSSO.testConfigurationStep.testRunDetails.runDetails.timestamp')}>\n <Flex\n gap={2}\n align='baseline'\n sx={{ whiteSpace: 'nowrap' }}\n >\n <Text>{formatted.time}</Text>\n <Text colorScheme='secondary'>{formatted.day}</Text>\n </Flex>\n </DetailRow>\n ) : null}\n\n {testRun.status === 'failed' ? (\n failedLog?.code ? (\n <DetailRow\n title={localizationKeys('configureSSO.testConfigurationStep.testRunDetails.runDetails.errorCode')}\n >\n <Text sx={t => ({ fontFamily: t.fonts.$mono })}>{failedLog.code}</Text>\n </DetailRow>\n ) : null\n ) : (\n <DetailRow title={localizationKeys('configureSSO.testConfigurationStep.testRunDetails.runDetails.status')}>\n <TestRunStatusCell testRun={testRun} />\n </DetailRow>\n )}\n </Dl>\n\n {testRun.status === 'failed' && failedLog?.message ? <FullMessageBlock message={failedLog.message} /> : null}\n\n {testRun.status === 'failed' ? <TestRunHowToFixSection errorCode={failedLog?.code} /> : null}\n\n {testRun.status === 'success' ? <ParsedUserInfoSection parsedUserInfo={testRun.parsedUserInfo} /> : null}\n </Drawer.Body>\n );\n};\n\nconst ParsedUserInfoSection = ({\n parsedUserInfo,\n}: {\n parsedUserInfo: EnterpriseConnectionTestRunResource['parsedUserInfo'];\n}): JSX.Element | null => {\n if (!parsedUserInfo?.emailAddress && !parsedUserInfo?.firstName) {\n return null;\n }\n\n return (\n <Flex\n direction='col'\n gap={3}\n sx={t => ({\n borderTopWidth: t.borderWidths.$normal,\n borderTopStyle: t.borderStyles.$solid,\n borderTopColor: t.colors.$borderAlpha100,\n paddingTop: t.space.$4,\n })}\n >\n <Heading\n as='h3'\n textVariant='h3'\n localizationKey={localizationKeys(\n 'configureSSO.testConfigurationStep.testRunDetails.parsedUserInfo.sectionTitle',\n )}\n />\n\n <Dl sx={t => ({ display: 'grid', gridRowGap: t.space.$2 })}>\n {parsedUserInfo.emailAddress ? (\n <DetailRow title={localizationKeys('configureSSO.testConfigurationStep.testRunDetails.parsedUserInfo.email')}>\n <Text sx={t => ({ fontFamily: t.fonts.$mono })}>{parsedUserInfo.emailAddress}</Text>\n </DetailRow>\n ) : null}\n\n {parsedUserInfo.firstName ? (\n <DetailRow\n title={localizationKeys('configureSSO.testConfigurationStep.testRunDetails.parsedUserInfo.firstName')}\n >\n <Text sx={t => ({ fontFamily: t.fonts.$mono })}>{parsedUserInfo.firstName}</Text>\n </DetailRow>\n ) : null}\n </Dl>\n </Flex>\n );\n};\n\nconst FullMessageBlock = ({ message }: { message: string }): JSX.Element => {\n const { t } = useLocalizations();\n const { onCopy, hasCopied } = useClipboard(message);\n const copyLabel = t(\n localizationKeys(\n hasCopied\n ? 'configureSSO.testConfigurationStep.testRunDetails.runDetails.actionLabel__copied'\n : 'configureSSO.testConfigurationStep.testRunDetails.runDetails.actionLabel__copy',\n ),\n );\n\n return (\n <Flex\n direction='col'\n gap={2}\n >\n <Flex\n justify='between'\n align='center'\n gap={4}\n >\n <Text\n colorScheme='secondary'\n localizationKey={localizationKeys('configureSSO.testConfigurationStep.testRunDetails.runDetails.fullMessage')}\n />\n <IconButton\n variant='ghost'\n colorScheme='neutral'\n size='xs'\n icon={hasCopied ? Check : Copy}\n aria-label={copyLabel}\n onClick={() => onCopy()}\n />\n </Flex>\n <Box\n as='pre'\n sx={t => ({\n margin: 0,\n padding: t.space.$3,\n backgroundColor: t.colors.$colorBackground,\n borderWidth: t.borderWidths.$normal,\n borderStyle: t.borderStyles.$solid,\n borderColor: t.colors.$borderAlpha150,\n borderRadius: t.radii.$md,\n boxShadow: t.shadows.$cardContentShadow,\n fontFamily: t.fonts.$mono,\n fontSize: t.fontSizes.$sm,\n color: t.colors.$colorForeground,\n whiteSpace: 'pre-wrap',\n wordBreak: 'break-word',\n })}\n >\n {message}\n </Box>\n </Flex>\n );\n};\n\nconst TestRunDetailsCell = ({ testRun }: { testRun: EnterpriseConnectionTestRunResource }): JSX.Element | null => {\n if (testRun.status === 'pending') {\n return (\n <Flex sx={t => ({ fontFamily: t.fonts.$mono })}>\n <Text>-</Text>\n </Flex>\n );\n }\n\n if (testRun.status === 'success') {\n return (\n <Flex sx={t => ({ fontFamily: t.fonts.$mono })}>\n <Text>{testRun.parsedUserInfo?.emailAddress}</Text>\n </Flex>\n );\n }\n\n return (\n <Flex sx={t => ({ fontFamily: t.fonts.$mono })}>\n <Text>{testRun.logs?.[0]?.shortMessage}</Text>\n </Flex>\n );\n};\n\nconst TestRunStatusCell = ({ testRun }: { testRun: EnterpriseConnectionTestRunResource }): JSX.Element => {\n if (testRun.status === 'success') {\n return (\n <Badge\n colorScheme='success'\n localizationKey={localizationKeys('configureSSO.testConfigurationStep.testResults.status__success')}\n />\n );\n }\n if (testRun.status === 'failed') {\n return (\n <Badge\n colorScheme='danger'\n localizationKey={localizationKeys('configureSSO.testConfigurationStep.testResults.status__failed')}\n />\n );\n }\n return (\n <Badge\n colorScheme='warning'\n localizationKey={localizationKeys('configureSSO.testConfigurationStep.testResults.status__pending')}\n />\n );\n};\n\ntype CopyTestUrlButtonProps = {\n onTestRunCreated?: (testUrl: string) => void;\n};\n\nconst CopyTestUrlButton = ({ onTestRunCreated }: CopyTestUrlButtonProps): JSX.Element => {\n const { t } = useLocalizations();\n const { user } = useUser();\n const card = useCardState();\n const { enterpriseConnection } = useConfigureSSO();\n\n const [testUrl, setTestUrl] = useState('');\n const [isCreatingTestRun, setIsCreatingTestRun] = useState(false);\n const { onCopy, hasCopied } = useClipboard(testUrl);\n\n const createTestRun = () => {\n if (!user || !enterpriseConnection) {\n return;\n }\n\n setIsCreatingTestRun(true);\n\n user\n .createEnterpriseConnectionTestRun(enterpriseConnection.id)\n .then(({ url }) => {\n setTestUrl(url);\n onCopy(url);\n onTestRunCreated?.(url);\n })\n .catch(err => handleError(err as Error, [], card.setError))\n .finally(() => setIsCreatingTestRun(false));\n };\n\n return (\n <Button\n id='testSsoUrl'\n variant='bordered'\n colorScheme='secondary'\n size='xs'\n onClick={createTestRun}\n isDisabled={isCreatingTestRun}\n isLoading={isCreatingTestRun}\n loadingText={t(localizationKeys('configureSSO.testConfigurationStep.testUrl.actionLabel__copy'))}\n sx={t => ({\n gap: t.space.$1x5,\n })}\n >\n <Icon\n icon={hasCopied ? Check : Copy}\n size='sm'\n colorScheme='neutral'\n />\n <Text\n as='span'\n localizationKey={localizationKeys('configureSSO.testConfigurationStep.testUrl.actionLabel__copy')}\n />\n </Button>\n );\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TestConfigurationStep.js","names":["RotateLeftRight","t","Check","Copy"],"sources":["../../../../src/components/ConfigureSSO/steps/TestConfigurationStep.tsx"],"sourcesContent":["import { __internal_useEnterpriseConnectionTestRuns, useUser } from '@clerk/shared/react/index';\nimport type { EnterpriseConnectionTestRunResource } from '@clerk/shared/types';\nimport type { ReactNode } from 'react';\nimport { useState } from 'react';\n\nimport type { LocalizationKey } from '@/customizables';\nimport {\n Badge,\n Box,\n Button,\n Dd,\n descriptors,\n Dl,\n Dt,\n Flex,\n Flow,\n Heading,\n Icon,\n localizationKeys,\n Spinner,\n Table,\n Tbody,\n Td,\n Text,\n Th,\n Thead,\n Tr,\n useLocalizations,\n} from '@/customizables';\nimport { useCardState } from '@/elements/contexts';\nimport { Drawer } from '@/elements/Drawer';\nimport { IconButton } from '@/elements/IconButton';\nimport { Pagination } from '@/elements/Pagination';\nimport { ProfileSection } from '@/elements/Section';\nimport { useClipboard } from '@/hooks';\nimport { Check, Copy, RotateLeftRight } from '@/icons';\nimport { common, mqu } from '@/styledSystem';\nimport { handleError } from '@/utils/errorHandler';\n\nimport { useConfigureSSO } from '../ConfigureSSOContext';\nimport { Step } from '../elements/Step';\nimport { useWizard } from '../elements/Wizard';\nimport { TestRunHowToFixSection } from './TestRunHowToFixSection';\n\nconst TEST_RUNS_PAGE_SIZE = 5;\nconst TEST_RESULTS_TABLE_COLUMN_COUNT = 3;\n\nexport const TestConfigurationStep = (): JSX.Element => {\n const { goNext, goPrev } = useWizard();\n const { enterpriseConnection } = useConfigureSSO();\n const card = useCardState();\n\n const [currentPage, setCurrentPage] = useState(1);\n\n const {\n data: testRuns,\n totalCount,\n isLoading: areTestRunsLoading,\n isPolling,\n revalidate: revalidateTestRuns,\n } = __internal_useEnterpriseConnectionTestRuns({\n enterpriseConnectionId: enterpriseConnection?.id ?? null,\n params: { initialPage: currentPage, pageSize: TEST_RUNS_PAGE_SIZE },\n });\n\n const pageCount = totalCount ? Math.ceil(totalCount / TEST_RUNS_PAGE_SIZE) : 0;\n\n const handleTestRunCreated = () => {\n setCurrentPage(1);\n void revalidateTestRuns();\n };\n\n return (\n <Flow.Part part='testSso'>\n <Step\n elementDescriptor={descriptors.configureSSOStep}\n elementId={descriptors.configureSSOStep.setId('test')}\n >\n <Step.Header\n title={localizationKeys('configureSSO.testConfigurationStep.title')}\n description={localizationKeys('configureSSO.testConfigurationStep.subtitle')}\n />\n\n <Step.Body>\n <Step.Section\n sx={theme => ({\n borderBottomWidth: theme.borderWidths.$normal,\n borderBottomStyle: theme.borderStyles.$solid,\n borderBottomColor: theme.colors.$borderAlpha100,\n })}\n >\n <ProfileSection.Root\n title={localizationKeys('configureSSO.testConfigurationStep.testUrl.title')}\n id='testSsoUrl'\n centered={false}\n sx={t => ({\n borderTopWidth: 0,\n paddingTop: 0,\n paddingBottom: 0,\n flexDirection: 'column-reverse',\n gap: t.space.$1,\n })}\n >\n <Text\n colorScheme='secondary'\n localizationKey={localizationKeys('configureSSO.testConfigurationStep.testUrl.subtitle')}\n />\n <ProfileSection.Item\n id='testSsoUrl'\n sx={{ paddingInlineStart: 0 }}\n >\n <Flex gap={2}>\n <CopyTestUrlButton onTestRunCreated={handleTestRunCreated} />\n\n <Button\n variant='bordered'\n colorScheme='secondary'\n size='xs'\n onClick={() => void revalidateTestRuns()}\n isDisabled={areTestRunsLoading}\n sx={t => ({ gap: t.space.$1x5 })}\n >\n <Icon\n icon={RotateLeftRight}\n size='sm'\n colorScheme='neutral'\n />\n <Text\n as='span'\n localizationKey={localizationKeys(\n 'configureSSO.testConfigurationStep.testResults.actionLabel__refresh',\n )}\n />\n </Button>\n </Flex>\n </ProfileSection.Item>\n </ProfileSection.Root>\n </Step.Section>\n\n <Step.Section sx={{ flex: 1, minHeight: 0 }}>\n <ProfileSection.Root\n title={localizationKeys('configureSSO.testConfigurationStep.testResults.title')}\n id='testResults'\n centered={false}\n sx={t => ({\n borderTopWidth: 0,\n paddingTop: 0,\n paddingBottom: 0,\n flexDirection: 'column-reverse',\n gap: t.space.$2,\n flex: 1,\n minHeight: 0,\n '& > *:first-of-type': {\n flex: 1,\n minHeight: 0,\n },\n })}\n >\n <TestResultsTable\n rows={testRuns ?? []}\n isPolling={isPolling}\n isLoading={areTestRunsLoading}\n page={currentPage}\n pageCount={pageCount}\n pageSize={TEST_RUNS_PAGE_SIZE}\n totalCount={totalCount ?? 0}\n onPageChange={setCurrentPage}\n onTestRunCreated={handleTestRunCreated}\n />\n </ProfileSection.Root>\n </Step.Section>\n </Step.Body>\n\n {card.error ? (\n <Box\n sx={t => ({\n flexShrink: 0,\n paddingInline: t.space.$5,\n paddingBlock: t.space.$3,\n borderTopWidth: t.borderWidths.$normal,\n borderTopStyle: t.borderStyles.$solid,\n borderTopColor: t.colors.$borderAlpha100,\n })}\n >\n <Text\n as='p'\n variant='body'\n sx={t => ({ color: t.colors.$danger500, fontSize: t.fontSizes.$sm })}\n >\n {card.error}\n </Text>\n </Box>\n ) : null}\n\n <Step.Footer>\n <Step.Footer.Previous onClick={() => goPrev()} />\n <ContinueTestSsoStepButton\n enterpriseConnectionId={enterpriseConnection?.id}\n onContinue={() => void goNext()}\n />\n </Step.Footer>\n </Step>\n </Flow.Part>\n );\n};\n\ntype ContinueTestSsoStepButtonProps = {\n enterpriseConnectionId: string | undefined;\n onContinue: () => void;\n};\n\nconst ContinueTestSsoStepButton = ({\n enterpriseConnectionId,\n onContinue,\n}: ContinueTestSsoStepButtonProps): JSX.Element => {\n const { user } = useUser();\n const { t } = useLocalizations();\n const card = useCardState();\n const [isValidating, setIsValidating] = useState(false);\n\n const handleContinue = async () => {\n if (!user || !enterpriseConnectionId) {\n return;\n }\n\n setIsValidating(true);\n card.setError(undefined);\n\n try {\n const result = await user.getEnterpriseConnectionTestRuns(enterpriseConnectionId, {\n initialPage: 1,\n pageSize: 1,\n status: ['success'],\n });\n\n if (result.data.length > 0) {\n onContinue();\n } else {\n card.setError(t(localizationKeys('configureSSO.testConfigurationStep.error__noSuccessfulTestRun')));\n }\n } catch (err) {\n handleError(err as Error, [], card.setError);\n } finally {\n setIsValidating(false);\n }\n };\n\n return (\n <Step.Footer.Continue\n onClick={() => void handleContinue()}\n isLoading={isValidating}\n />\n );\n};\n\ntype TestResultsTableProps = {\n rows: EnterpriseConnectionTestRunResource[];\n isLoading: boolean;\n isPolling: boolean;\n onTestRunCreated?: (testUrl: string) => void;\n page: number;\n pageCount: number;\n pageSize: number;\n totalCount: number;\n onPageChange: (page: number) => void;\n};\n\nconst TestResultsTable = ({\n rows,\n isLoading,\n isPolling,\n onTestRunCreated,\n page,\n pageCount,\n pageSize,\n totalCount,\n onPageChange,\n}: TestResultsTableProps): JSX.Element => {\n const { t } = useLocalizations();\n const { contentRef } = useConfigureSSO();\n const [selectedTestRun, setSelectedTestRun] = useState<EnterpriseConnectionTestRunResource | null>(null);\n\n const drawerTitle =\n selectedTestRun?.status === 'failed'\n ? selectedTestRun.logs?.[0]?.shortMessage ||\n t(localizationKeys('configureSSO.testConfigurationStep.testRunDetails.title'))\n : t(localizationKeys('configureSSO.testConfigurationStep.testRunDetails.title'));\n\n return (\n <>\n <Flex\n direction='col'\n sx={t => ({\n width: '100%',\n flex: '0 1 auto',\n minHeight: 0,\n overflowY: 'auto',\n borderWidth: t.borderWidths.$normal,\n borderStyle: t.borderStyles.$solid,\n borderColor: t.colors.$borderAlpha150,\n borderRadius: t.radii.$lg,\n ...common.unstyledScrollbar(t),\n [mqu.sm]: { overflowX: 'auto', padding: t.space.$0x25 },\n })}\n >\n <Table\n tableHeadVisuallyHidden={!rows.length}\n sx={t => ({\n background: t.colors.$colorBackground,\n '&&': {\n border: 'none',\n borderRadius: 0,\n },\n })}\n >\n <Thead>\n <Tr>\n <Th\n localizationKey={localizationKeys(\n 'configureSSO.testConfigurationStep.testRunDetails.runDetails.timestamp',\n )}\n />\n <Th\n localizationKey={localizationKeys(\n 'configureSSO.testConfigurationStep.testRunDetails.runDetails.sectionTitle',\n )}\n />\n <Th\n localizationKey={localizationKeys(\n 'configureSSO.testConfigurationStep.testRunDetails.runDetails.status',\n )}\n />\n </Tr>\n </Thead>\n <Tbody>\n {isLoading || isPolling ? (\n <Tr>\n <Td colSpan={TEST_RESULTS_TABLE_COLUMN_COUNT}>\n <Flex\n direction='col'\n align='center'\n gap={2}\n sx={t => ({ padding: `${t.space.$10} 0` })}\n >\n <Spinner\n colorScheme='primary'\n elementDescriptor={descriptors.spinner}\n />\n <Text\n colorScheme='secondary'\n localizationKey={\n isPolling\n ? localizationKeys('configureSSO.testConfigurationStep.testResults.polling')\n : undefined\n }\n />\n </Flex>\n </Td>\n </Tr>\n ) : !rows.length ? (\n <Tr>\n <Td colSpan={TEST_RESULTS_TABLE_COLUMN_COUNT}>\n <Flex\n align='center'\n justify='center'\n sx={t => ({ padding: `${t.space.$10} 0`, flex: 1 })}\n >\n <CopyTestUrlButton onTestRunCreated={onTestRunCreated} />\n </Flex>\n </Td>\n </Tr>\n ) : (\n rows.map(row => (\n <Tr\n key={row.id}\n onClick={() => setSelectedTestRun(row)}\n sx={t => ({\n cursor: 'pointer',\n '&:hover > td': {\n backgroundColor: t.colors.$neutralAlpha50,\n },\n })}\n >\n <Td>\n <TestRunTimestampCell testRun={row} />\n </Td>\n <Td>\n <TestRunDetailsCell testRun={row} />\n </Td>\n <Td>\n <TestRunStatusCell testRun={row} />\n </Td>\n </Tr>\n ))\n )}\n </Tbody>\n </Table>\n </Flex>\n\n {pageCount > 1 ? (\n <Box sx={{ flexShrink: 0 }}>\n <Pagination\n page={Math.min(page, pageCount)}\n count={pageCount}\n onChange={onPageChange}\n siblingCount={1}\n rowInfo={{\n allRowsCount: totalCount,\n startingRow: totalCount > 0 ? Math.max(0, (page - 1) * pageSize) + 1 : 0,\n endingRow: Math.min(page * pageSize, totalCount),\n }}\n />\n </Box>\n ) : null}\n\n <Drawer.Root\n open={selectedTestRun !== null}\n onOpenChange={open => {\n if (!open) {\n setSelectedTestRun(null);\n }\n }}\n strategy='absolute'\n portalProps={{ root: contentRef }}\n >\n <Drawer.Overlay />\n <Drawer.Content>\n <Drawer.Header title={drawerTitle} />\n {selectedTestRun ? <TestRunDetailsBody testRun={selectedTestRun} /> : null}\n </Drawer.Content>\n </Drawer.Root>\n </>\n );\n};\n\nconst useTestRunFormattedTimestamp = (testRun: EnterpriseConnectionTestRunResource) => {\n const { locale } = useLocalizations();\n if (!testRun.createdAt) {\n return null;\n }\n const time = new Intl.DateTimeFormat(locale, { timeStyle: 'medium' }).format(testRun.createdAt);\n const day = new Intl.DateTimeFormat(locale, { month: 'short', day: 'numeric' }).format(testRun.createdAt);\n\n return { time, day };\n};\n\nconst TestRunTimestampCell = ({ testRun }: { testRun: EnterpriseConnectionTestRunResource }): JSX.Element | null => {\n const formatted = useTestRunFormattedTimestamp(testRun);\n if (!formatted) {\n return null;\n }\n\n return (\n <Flex\n gap={2}\n align='baseline'\n sx={{ whiteSpace: 'nowrap' }}\n >\n <Text>{formatted.time}</Text>\n <Text colorScheme='secondary'>{formatted.day}</Text>\n </Flex>\n );\n};\n\nconst DetailRow = ({ title, children }: { title: LocalizationKey; children: ReactNode }): JSX.Element => (\n <Box\n as='div'\n sx={t => ({\n display: 'grid',\n gridTemplateColumns: 'repeat(2, minmax(0, 1fr))',\n gap: t.space.$2,\n })}\n >\n <Dt\n localizationKey={title}\n sx={t => ({\n color: t.colors.$colorForeground,\n ...common.textVariants(t).subtitle,\n })}\n />\n <Dd\n sx={t => ({\n display: 'grid',\n justifyContent: 'end',\n color: t.colors.$colorForeground,\n })}\n >\n {children}\n </Dd>\n </Box>\n);\n\nconst TestRunDetailsBody = ({ testRun }: { testRun: EnterpriseConnectionTestRunResource }): JSX.Element => {\n const formatted = useTestRunFormattedTimestamp(testRun);\n const failedLog = testRun.status === 'failed' ? testRun.logs?.[0] : null;\n\n return (\n <Drawer.Body\n sx={t => ({\n display: 'flex',\n flexDirection: 'column',\n flex: 1,\n overflowY: 'auto',\n padding: t.space.$4,\n gap: t.space.$4,\n })}\n >\n <Heading\n as='h3'\n textVariant='h3'\n localizationKey={localizationKeys('configureSSO.testConfigurationStep.testRunDetails.runDetails.sectionTitle')}\n />\n\n <Dl sx={t => ({ display: 'grid', gridRowGap: t.space.$2 })}>\n {formatted ? (\n <DetailRow title={localizationKeys('configureSSO.testConfigurationStep.testRunDetails.runDetails.timestamp')}>\n <Flex\n gap={2}\n align='baseline'\n sx={{ whiteSpace: 'nowrap' }}\n >\n <Text>{formatted.time}</Text>\n <Text colorScheme='secondary'>{formatted.day}</Text>\n </Flex>\n </DetailRow>\n ) : null}\n\n {testRun.status === 'failed' ? (\n failedLog?.code ? (\n <DetailRow\n title={localizationKeys('configureSSO.testConfigurationStep.testRunDetails.runDetails.errorCode')}\n >\n <Text sx={t => ({ fontFamily: t.fonts.$mono })}>{failedLog.code}</Text>\n </DetailRow>\n ) : null\n ) : (\n <DetailRow title={localizationKeys('configureSSO.testConfigurationStep.testRunDetails.runDetails.status')}>\n <TestRunStatusCell testRun={testRun} />\n </DetailRow>\n )}\n </Dl>\n\n {testRun.status === 'failed' && failedLog?.message ? <FullMessageBlock message={failedLog.message} /> : null}\n\n {testRun.status === 'failed' ? <TestRunHowToFixSection errorCode={failedLog?.code} /> : null}\n\n {testRun.status === 'success' ? <ParsedUserInfoSection parsedUserInfo={testRun.parsedUserInfo} /> : null}\n </Drawer.Body>\n );\n};\n\nconst ParsedUserInfoSection = ({\n parsedUserInfo,\n}: {\n parsedUserInfo: EnterpriseConnectionTestRunResource['parsedUserInfo'];\n}): JSX.Element | null => {\n if (!parsedUserInfo?.emailAddress && !parsedUserInfo?.firstName) {\n return null;\n }\n\n return (\n <Flex\n direction='col'\n gap={3}\n sx={t => ({\n borderTopWidth: t.borderWidths.$normal,\n borderTopStyle: t.borderStyles.$solid,\n borderTopColor: t.colors.$borderAlpha100,\n paddingTop: t.space.$4,\n })}\n >\n <Heading\n as='h3'\n textVariant='h3'\n localizationKey={localizationKeys(\n 'configureSSO.testConfigurationStep.testRunDetails.parsedUserInfo.sectionTitle',\n )}\n />\n\n <Dl sx={t => ({ display: 'grid', gridRowGap: t.space.$2 })}>\n {parsedUserInfo.emailAddress ? (\n <DetailRow title={localizationKeys('configureSSO.testConfigurationStep.testRunDetails.parsedUserInfo.email')}>\n <Text sx={t => ({ fontFamily: t.fonts.$mono })}>{parsedUserInfo.emailAddress}</Text>\n </DetailRow>\n ) : null}\n\n {parsedUserInfo.firstName ? (\n <DetailRow\n title={localizationKeys('configureSSO.testConfigurationStep.testRunDetails.parsedUserInfo.firstName')}\n >\n <Text sx={t => ({ fontFamily: t.fonts.$mono })}>{parsedUserInfo.firstName}</Text>\n </DetailRow>\n ) : null}\n </Dl>\n </Flex>\n );\n};\n\nconst FullMessageBlock = ({ message }: { message: string }): JSX.Element => {\n const { t } = useLocalizations();\n const { onCopy, hasCopied } = useClipboard(message);\n const copyLabel = t(\n localizationKeys(\n hasCopied\n ? 'configureSSO.testConfigurationStep.testRunDetails.runDetails.actionLabel__copied'\n : 'configureSSO.testConfigurationStep.testRunDetails.runDetails.actionLabel__copy',\n ),\n );\n\n return (\n <Flex\n direction='col'\n gap={2}\n >\n <Flex\n justify='between'\n align='center'\n gap={4}\n >\n <Text\n colorScheme='secondary'\n localizationKey={localizationKeys('configureSSO.testConfigurationStep.testRunDetails.runDetails.fullMessage')}\n />\n <IconButton\n variant='ghost'\n colorScheme='neutral'\n size='xs'\n icon={hasCopied ? Check : Copy}\n aria-label={copyLabel}\n onClick={() => onCopy()}\n />\n </Flex>\n <Box\n as='pre'\n sx={t => ({\n margin: 0,\n padding: t.space.$3,\n backgroundColor: t.colors.$colorBackground,\n borderWidth: t.borderWidths.$normal,\n borderStyle: t.borderStyles.$solid,\n borderColor: t.colors.$borderAlpha150,\n borderRadius: t.radii.$md,\n boxShadow: t.shadows.$cardContentShadow,\n fontFamily: t.fonts.$mono,\n fontSize: t.fontSizes.$sm,\n color: t.colors.$colorForeground,\n whiteSpace: 'pre-wrap',\n wordBreak: 'break-word',\n })}\n >\n {message}\n </Box>\n </Flex>\n );\n};\n\nconst TestRunDetailsCell = ({ testRun }: { testRun: EnterpriseConnectionTestRunResource }): JSX.Element | null => {\n if (testRun.status === 'pending') {\n return (\n <Flex sx={t => ({ fontFamily: t.fonts.$mono })}>\n <Text>-</Text>\n </Flex>\n );\n }\n\n if (testRun.status === 'success') {\n return (\n <Flex sx={t => ({ fontFamily: t.fonts.$mono })}>\n <Text>{testRun.parsedUserInfo?.emailAddress}</Text>\n </Flex>\n );\n }\n\n return (\n <Flex sx={t => ({ fontFamily: t.fonts.$mono })}>\n <Text>{testRun.logs?.[0]?.shortMessage}</Text>\n </Flex>\n );\n};\n\nconst TestRunStatusCell = ({ testRun }: { testRun: EnterpriseConnectionTestRunResource }): JSX.Element => {\n if (testRun.status === 'success') {\n return (\n <Badge\n colorScheme='success'\n localizationKey={localizationKeys('configureSSO.testConfigurationStep.testResults.status__success')}\n />\n );\n }\n if (testRun.status === 'failed') {\n return (\n <Badge\n colorScheme='danger'\n localizationKey={localizationKeys('configureSSO.testConfigurationStep.testResults.status__failed')}\n />\n );\n }\n return (\n <Badge\n colorScheme='warning'\n localizationKey={localizationKeys('configureSSO.testConfigurationStep.testResults.status__pending')}\n />\n );\n};\n\ntype CopyTestUrlButtonProps = {\n onTestRunCreated?: (testUrl: string) => void;\n};\n\nconst CopyTestUrlButton = ({ onTestRunCreated }: CopyTestUrlButtonProps): JSX.Element => {\n const { t } = useLocalizations();\n const { user } = useUser();\n const card = useCardState();\n const { enterpriseConnection } = useConfigureSSO();\n\n const [testUrl, setTestUrl] = useState('');\n const [isCreatingTestRun, setIsCreatingTestRun] = useState(false);\n const { onCopy, hasCopied } = useClipboard(testUrl);\n\n const createTestRun = () => {\n if (!user || !enterpriseConnection) {\n return;\n }\n\n setIsCreatingTestRun(true);\n\n user\n .createEnterpriseConnectionTestRun(enterpriseConnection.id)\n .then(({ url }) => {\n setTestUrl(url);\n onCopy(url);\n onTestRunCreated?.(url);\n })\n .catch(err => handleError(err as Error, [], card.setError))\n .finally(() => setIsCreatingTestRun(false));\n };\n\n return (\n <Button\n id='testSsoUrl'\n variant='bordered'\n colorScheme='secondary'\n size='xs'\n onClick={createTestRun}\n isDisabled={isCreatingTestRun}\n isLoading={isCreatingTestRun}\n loadingText={t(localizationKeys('configureSSO.testConfigurationStep.testUrl.actionLabel__copy'))}\n sx={t => ({\n gap: t.space.$1x5,\n })}\n >\n <Icon\n icon={hasCopied ? Check : Copy}\n size='sm'\n colorScheme='neutral'\n />\n <Text\n as='span'\n localizationKey={localizationKeys('configureSSO.testConfigurationStep.testUrl.actionLabel__copy')}\n />\n </Button>\n );\n};\n"],"mappings":"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"}
|