@clerk/ui 1.6.3-canary.v20260417193401 → 1.6.3
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/OAuthConsent/OAuthConsent.js +8 -11
- package/dist/components/OAuthConsent/OAuthConsent.js.map +1 -1
- package/dist/components/OAuthConsent/OrgSelect.js +2 -13
- package/dist/components/OAuthConsent/OrgSelect.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/no-rhc/ClerkUI.js +2 -2
- package/dist/no-rhc/components/OAuthConsent/OAuthConsent.js +8 -11
- package/dist/no-rhc/components/OAuthConsent/OAuthConsent.js.map +1 -1
- package/dist/no-rhc/components/OAuthConsent/OrgSelect.js +2 -13
- package/dist/no-rhc/components/OAuthConsent/OrgSelect.js.map +1 -1
- package/dist/no-rhc/index.js +1 -1
- package/dist/oauthConsent_ui_0f89c0_1.6.3.js +1 -0
- package/dist/oauthConsent_ui_3aaa30_1.6.3.js +1 -0
- package/dist/oauthConsent_ui_fc1048_1.6.3.js +1 -0
- package/dist/server.js +1 -1
- package/dist/ui.browser.js +1 -1
- package/dist/ui.legacy.browser.js +1 -1
- package/dist/ui.shared.browser.js +1 -1
- package/package.json +3 -3
- package/dist/oauthConsent_ui_36a779_1.6.3-canary.v20260417193401.js +0 -1
- package/dist/oauthConsent_ui_9067f0_1.6.3-canary.v20260417193401.js +0 -1
- package/dist/oauthConsent_ui_e580fd_1.6.3-canary.v20260417193401.js +0 -1
- /package/dist/{207_ui_e580fd_1.6.3-canary.v20260417193401.js → 207_ui_0f89c0_1.6.3.js} +0 -0
- /package/dist/{207_ui_9067f0_1.6.3-canary.v20260417193401.js → 207_ui_3aaa30_1.6.3.js} +0 -0
- /package/dist/{207_ui_36a779_1.6.3-canary.v20260417193401.js → 207_ui_fc1048_1.6.3.js} +0 -0
- /package/dist/{217_ui_e580fd_1.6.3-canary.v20260417193401.js → 217_ui_0f89c0_1.6.3.js} +0 -0
- /package/dist/{217_ui_9067f0_1.6.3-canary.v20260417193401.js → 217_ui_3aaa30_1.6.3.js} +0 -0
- /package/dist/{217_ui_36a779_1.6.3-canary.v20260417193401.js → 217_ui_fc1048_1.6.3.js} +0 -0
- /package/dist/{360_ui_e580fd_1.6.3-canary.v20260417193401.js → 360_ui_0f89c0_1.6.3.js} +0 -0
- /package/dist/{360_ui_9067f0_1.6.3-canary.v20260417193401.js → 360_ui_3aaa30_1.6.3.js} +0 -0
- /package/dist/{360_ui_36a779_1.6.3-canary.v20260417193401.js → 360_ui_fc1048_1.6.3.js} +0 -0
- /package/dist/{444_ui_e580fd_1.6.3-canary.v20260417193401.js → 444_ui_0f89c0_1.6.3.js} +0 -0
- /package/dist/{444_ui_9067f0_1.6.3-canary.v20260417193401.js → 444_ui_3aaa30_1.6.3.js} +0 -0
- /package/dist/{444_ui_36a779_1.6.3-canary.v20260417193401.js → 444_ui_fc1048_1.6.3.js} +0 -0
- /package/dist/{573_ui_e580fd_1.6.3-canary.v20260417193401.js → 573_ui_0f89c0_1.6.3.js} +0 -0
- /package/dist/{573_ui_9067f0_1.6.3-canary.v20260417193401.js → 573_ui_3aaa30_1.6.3.js} +0 -0
- /package/dist/{573_ui_36a779_1.6.3-canary.v20260417193401.js → 573_ui_fc1048_1.6.3.js} +0 -0
- /package/dist/{931_ui_e580fd_1.6.3-canary.v20260417193401.js → 931_ui_0f89c0_1.6.3.js} +0 -0
- /package/dist/{931_ui_9067f0_1.6.3-canary.v20260417193401.js → 931_ui_3aaa30_1.6.3.js} +0 -0
- /package/dist/{931_ui_36a779_1.6.3-canary.v20260417193401.js → 931_ui_fc1048_1.6.3.js} +0 -0
- /package/dist/{970_ui_e580fd_1.6.3-canary.v20260417193401.js → 970_ui_0f89c0_1.6.3.js} +0 -0
- /package/dist/{970_ui_9067f0_1.6.3-canary.v20260417193401.js → 970_ui_3aaa30_1.6.3.js} +0 -0
- /package/dist/{970_ui_36a779_1.6.3-canary.v20260417193401.js → 970_ui_fc1048_1.6.3.js} +0 -0
- /package/dist/{apiKeys_ui_e580fd_1.6.3-canary.v20260417193401.js → apiKeys_ui_0f89c0_1.6.3.js} +0 -0
- /package/dist/{apiKeys_ui_9067f0_1.6.3-canary.v20260417193401.js → apiKeys_ui_3aaa30_1.6.3.js} +0 -0
- /package/dist/{apiKeys_ui_36a779_1.6.3-canary.v20260417193401.js → apiKeys_ui_fc1048_1.6.3.js} +0 -0
- /package/dist/{blankcaptcha_ui_e580fd_1.6.3-canary.v20260417193401.js → blankcaptcha_ui_0f89c0_1.6.3.js} +0 -0
- /package/dist/{blankcaptcha_ui_36a779_1.6.3-canary.v20260417193401.js → blankcaptcha_ui_3aaa30_1.6.3.js} +0 -0
- /package/dist/{blankcaptcha_ui_9067f0_1.6.3-canary.v20260417193401.js → blankcaptcha_ui_fc1048_1.6.3.js} +0 -0
- /package/dist/{checkout_ui_e580fd_1.6.3-canary.v20260417193401.js → checkout_ui_0f89c0_1.6.3.js} +0 -0
- /package/dist/{checkout_ui_9067f0_1.6.3-canary.v20260417193401.js → checkout_ui_3aaa30_1.6.3.js} +0 -0
- /package/dist/{checkout_ui_36a779_1.6.3-canary.v20260417193401.js → checkout_ui_fc1048_1.6.3.js} +0 -0
- /package/dist/{copy-api-key-modal_ui_e580fd_1.6.3-canary.v20260417193401.js → copy-api-key-modal_ui_0f89c0_1.6.3.js} +0 -0
- /package/dist/{copy-api-key-modal_ui_9067f0_1.6.3-canary.v20260417193401.js → copy-api-key-modal_ui_3aaa30_1.6.3.js} +0 -0
- /package/dist/{copy-api-key-modal_ui_36a779_1.6.3-canary.v20260417193401.js → copy-api-key-modal_ui_fc1048_1.6.3.js} +0 -0
- /package/dist/{createorganization_ui_e580fd_1.6.3-canary.v20260417193401.js → createorganization_ui_0f89c0_1.6.3.js} +0 -0
- /package/dist/{createorganization_ui_9067f0_1.6.3-canary.v20260417193401.js → createorganization_ui_3aaa30_1.6.3.js} +0 -0
- /package/dist/{createorganization_ui_36a779_1.6.3-canary.v20260417193401.js → createorganization_ui_fc1048_1.6.3.js} +0 -0
- /package/dist/{enableOrganizationsPrompt_ui_e580fd_1.6.3-canary.v20260417193401.js → enableOrganizationsPrompt_ui_0f89c0_1.6.3.js} +0 -0
- /package/dist/{enableOrganizationsPrompt_ui_9067f0_1.6.3-canary.v20260417193401.js → enableOrganizationsPrompt_ui_3aaa30_1.6.3.js} +0 -0
- /package/dist/{enableOrganizationsPrompt_ui_36a779_1.6.3-canary.v20260417193401.js → enableOrganizationsPrompt_ui_fc1048_1.6.3.js} +0 -0
- /package/dist/{framework_ui_e580fd_1.6.3-canary.v20260417193401.js → framework_ui_0f89c0_1.6.3.js} +0 -0
- /package/dist/{framework_ui_9067f0_1.6.3-canary.v20260417193401.js → framework_ui_3aaa30_1.6.3.js} +0 -0
- /package/dist/{impersonationfab_ui_e580fd_1.6.3-canary.v20260417193401.js → impersonationfab_ui_0f89c0_1.6.3.js} +0 -0
- /package/dist/{impersonationfab_ui_9067f0_1.6.3-canary.v20260417193401.js → impersonationfab_ui_3aaa30_1.6.3.js} +0 -0
- /package/dist/{impersonationfab_ui_36a779_1.6.3-canary.v20260417193401.js → impersonationfab_ui_fc1048_1.6.3.js} +0 -0
- /package/dist/{keylessPrompt_ui_e580fd_1.6.3-canary.v20260417193401.js → keylessPrompt_ui_0f89c0_1.6.3.js} +0 -0
- /package/dist/{keylessPrompt_ui_9067f0_1.6.3-canary.v20260417193401.js → keylessPrompt_ui_3aaa30_1.6.3.js} +0 -0
- /package/dist/{keylessPrompt_ui_36a779_1.6.3-canary.v20260417193401.js → keylessPrompt_ui_fc1048_1.6.3.js} +0 -0
- /package/dist/{onetap_ui_e580fd_1.6.3-canary.v20260417193401.js → onetap_ui_0f89c0_1.6.3.js} +0 -0
- /package/dist/{onetap_ui_9067f0_1.6.3-canary.v20260417193401.js → onetap_ui_3aaa30_1.6.3.js} +0 -0
- /package/dist/{onetap_ui_36a779_1.6.3-canary.v20260417193401.js → onetap_ui_fc1048_1.6.3.js} +0 -0
- /package/dist/{op-api-keys-page_ui_e580fd_1.6.3-canary.v20260417193401.js → op-api-keys-page_ui_0f89c0_1.6.3.js} +0 -0
- /package/dist/{op-api-keys-page_ui_36a779_1.6.3-canary.v20260417193401.js → op-api-keys-page_ui_3aaa30_1.6.3.js} +0 -0
- /package/dist/{op-api-keys-page_ui_9067f0_1.6.3-canary.v20260417193401.js → op-api-keys-page_ui_fc1048_1.6.3.js} +0 -0
- /package/dist/{op-billing-page_ui_e580fd_1.6.3-canary.v20260417193401.js → op-billing-page_ui_0f89c0_1.6.3.js} +0 -0
- /package/dist/{op-billing-page_ui_36a779_1.6.3-canary.v20260417193401.js → op-billing-page_ui_3aaa30_1.6.3.js} +0 -0
- /package/dist/{op-billing-page_ui_9067f0_1.6.3-canary.v20260417193401.js → op-billing-page_ui_fc1048_1.6.3.js} +0 -0
- /package/dist/{op-plans-page_ui_e580fd_1.6.3-canary.v20260417193401.js → op-plans-page_ui_0f89c0_1.6.3.js} +0 -0
- /package/dist/{op-plans-page_ui_36a779_1.6.3-canary.v20260417193401.js → op-plans-page_ui_3aaa30_1.6.3.js} +0 -0
- /package/dist/{op-plans-page_ui_9067f0_1.6.3-canary.v20260417193401.js → op-plans-page_ui_fc1048_1.6.3.js} +0 -0
- /package/dist/{organizationlist_ui_e580fd_1.6.3-canary.v20260417193401.js → organizationlist_ui_0f89c0_1.6.3.js} +0 -0
- /package/dist/{organizationlist_ui_9067f0_1.6.3-canary.v20260417193401.js → organizationlist_ui_3aaa30_1.6.3.js} +0 -0
- /package/dist/{organizationlist_ui_36a779_1.6.3-canary.v20260417193401.js → organizationlist_ui_fc1048_1.6.3.js} +0 -0
- /package/dist/{organizationprofile_ui_e580fd_1.6.3-canary.v20260417193401.js → organizationprofile_ui_0f89c0_1.6.3.js} +0 -0
- /package/dist/{organizationprofile_ui_9067f0_1.6.3-canary.v20260417193401.js → organizationprofile_ui_3aaa30_1.6.3.js} +0 -0
- /package/dist/{organizationprofile_ui_36a779_1.6.3-canary.v20260417193401.js → organizationprofile_ui_fc1048_1.6.3.js} +0 -0
- /package/dist/{organizationswitcher_ui_e580fd_1.6.3-canary.v20260417193401.js → organizationswitcher_ui_0f89c0_1.6.3.js} +0 -0
- /package/dist/{organizationswitcher_ui_9067f0_1.6.3-canary.v20260417193401.js → organizationswitcher_ui_3aaa30_1.6.3.js} +0 -0
- /package/dist/{organizationswitcher_ui_36a779_1.6.3-canary.v20260417193401.js → organizationswitcher_ui_fc1048_1.6.3.js} +0 -0
- /package/dist/{payment-attempt-page_ui_e580fd_1.6.3-canary.v20260417193401.js → payment-attempt-page_ui_0f89c0_1.6.3.js} +0 -0
- /package/dist/{payment-attempt-page_ui_36a779_1.6.3-canary.v20260417193401.js → payment-attempt-page_ui_3aaa30_1.6.3.js} +0 -0
- /package/dist/{payment-attempt-page_ui_9067f0_1.6.3-canary.v20260417193401.js → payment-attempt-page_ui_fc1048_1.6.3.js} +0 -0
- /package/dist/{planDetails_ui_e580fd_1.6.3-canary.v20260417193401.js → planDetails_ui_0f89c0_1.6.3.js} +0 -0
- /package/dist/{planDetails_ui_9067f0_1.6.3-canary.v20260417193401.js → planDetails_ui_3aaa30_1.6.3.js} +0 -0
- /package/dist/{planDetails_ui_36a779_1.6.3-canary.v20260417193401.js → planDetails_ui_fc1048_1.6.3.js} +0 -0
- /package/dist/{prefetchorganizationlist_ui_e580fd_1.6.3-canary.v20260417193401.js → prefetchorganizationlist_ui_0f89c0_1.6.3.js} +0 -0
- /package/dist/{prefetchorganizationlist_ui_36a779_1.6.3-canary.v20260417193401.js → prefetchorganizationlist_ui_3aaa30_1.6.3.js} +0 -0
- /package/dist/{prefetchorganizationlist_ui_9067f0_1.6.3-canary.v20260417193401.js → prefetchorganizationlist_ui_fc1048_1.6.3.js} +0 -0
- /package/dist/{pricingTable_ui_e580fd_1.6.3-canary.v20260417193401.js → pricingTable_ui_0f89c0_1.6.3.js} +0 -0
- /package/dist/{pricingTable_ui_9067f0_1.6.3-canary.v20260417193401.js → pricingTable_ui_3aaa30_1.6.3.js} +0 -0
- /package/dist/{pricingTable_ui_36a779_1.6.3-canary.v20260417193401.js → pricingTable_ui_fc1048_1.6.3.js} +0 -0
- /package/dist/{revoke-api-key-modal_ui_e580fd_1.6.3-canary.v20260417193401.js → revoke-api-key-modal_ui_0f89c0_1.6.3.js} +0 -0
- /package/dist/{revoke-api-key-modal_ui_9067f0_1.6.3-canary.v20260417193401.js → revoke-api-key-modal_ui_3aaa30_1.6.3.js} +0 -0
- /package/dist/{revoke-api-key-modal_ui_36a779_1.6.3-canary.v20260417193401.js → revoke-api-key-modal_ui_fc1048_1.6.3.js} +0 -0
- /package/dist/{sessionTasks_ui_e580fd_1.6.3-canary.v20260417193401.js → sessionTasks_ui_0f89c0_1.6.3.js} +0 -0
- /package/dist/{sessionTasks_ui_9067f0_1.6.3-canary.v20260417193401.js → sessionTasks_ui_3aaa30_1.6.3.js} +0 -0
- /package/dist/{sessionTasks_ui_36a779_1.6.3-canary.v20260417193401.js → sessionTasks_ui_fc1048_1.6.3.js} +0 -0
- /package/dist/{signin_ui_e580fd_1.6.3-canary.v20260417193401.js → signin_ui_0f89c0_1.6.3.js} +0 -0
- /package/dist/{signin_ui_9067f0_1.6.3-canary.v20260417193401.js → signin_ui_3aaa30_1.6.3.js} +0 -0
- /package/dist/{signin_ui_36a779_1.6.3-canary.v20260417193401.js → signin_ui_fc1048_1.6.3.js} +0 -0
- /package/dist/{signup_ui_e580fd_1.6.3-canary.v20260417193401.js → signup_ui_0f89c0_1.6.3.js} +0 -0
- /package/dist/{signup_ui_9067f0_1.6.3-canary.v20260417193401.js → signup_ui_3aaa30_1.6.3.js} +0 -0
- /package/dist/{signup_ui_36a779_1.6.3-canary.v20260417193401.js → signup_ui_fc1048_1.6.3.js} +0 -0
- /package/dist/{statement-page_ui_e580fd_1.6.3-canary.v20260417193401.js → statement-page_ui_0f89c0_1.6.3.js} +0 -0
- /package/dist/{statement-page_ui_9067f0_1.6.3-canary.v20260417193401.js → statement-page_ui_3aaa30_1.6.3.js} +0 -0
- /package/dist/{statement-page_ui_36a779_1.6.3-canary.v20260417193401.js → statement-page_ui_fc1048_1.6.3.js} +0 -0
- /package/dist/{subscriptionDetails_ui_e580fd_1.6.3-canary.v20260417193401.js → subscriptionDetails_ui_0f89c0_1.6.3.js} +0 -0
- /package/dist/{subscriptionDetails_ui_9067f0_1.6.3-canary.v20260417193401.js → subscriptionDetails_ui_3aaa30_1.6.3.js} +0 -0
- /package/dist/{subscriptionDetails_ui_36a779_1.6.3-canary.v20260417193401.js → subscriptionDetails_ui_fc1048_1.6.3.js} +0 -0
- /package/dist/{taskChooseOrganization_ui_e580fd_1.6.3-canary.v20260417193401.js → taskChooseOrganization_ui_0f89c0_1.6.3.js} +0 -0
- /package/dist/{taskChooseOrganization_ui_9067f0_1.6.3-canary.v20260417193401.js → taskChooseOrganization_ui_3aaa30_1.6.3.js} +0 -0
- /package/dist/{taskChooseOrganization_ui_36a779_1.6.3-canary.v20260417193401.js → taskChooseOrganization_ui_fc1048_1.6.3.js} +0 -0
- /package/dist/{taskResetPassword_ui_e580fd_1.6.3-canary.v20260417193401.js → taskResetPassword_ui_0f89c0_1.6.3.js} +0 -0
- /package/dist/{taskResetPassword_ui_9067f0_1.6.3-canary.v20260417193401.js → taskResetPassword_ui_3aaa30_1.6.3.js} +0 -0
- /package/dist/{taskResetPassword_ui_36a779_1.6.3-canary.v20260417193401.js → taskResetPassword_ui_fc1048_1.6.3.js} +0 -0
- /package/dist/{taskSetupMFA_ui_e580fd_1.6.3-canary.v20260417193401.js → taskSetupMFA_ui_0f89c0_1.6.3.js} +0 -0
- /package/dist/{taskSetupMFA_ui_9067f0_1.6.3-canary.v20260417193401.js → taskSetupMFA_ui_3aaa30_1.6.3.js} +0 -0
- /package/dist/{taskSetupMFA_ui_36a779_1.6.3-canary.v20260417193401.js → taskSetupMFA_ui_fc1048_1.6.3.js} +0 -0
- /package/dist/{ui-common_ui_e580fd_1.6.3-canary.v20260417193401.js → ui-common_ui_0f89c0_1.6.3.js} +0 -0
- /package/dist/{ui-common_ui_9067f0_1.6.3-canary.v20260417193401.js → ui-common_ui_3aaa30_1.6.3.js} +0 -0
- /package/dist/{ui-common_ui_36a779_1.6.3-canary.v20260417193401.js → ui-common_ui_fc1048_1.6.3.js} +0 -0
- /package/dist/{up-api-keys-page_ui_e580fd_1.6.3-canary.v20260417193401.js → up-api-keys-page_ui_0f89c0_1.6.3.js} +0 -0
- /package/dist/{up-api-keys-page_ui_36a779_1.6.3-canary.v20260417193401.js → up-api-keys-page_ui_3aaa30_1.6.3.js} +0 -0
- /package/dist/{up-api-keys-page_ui_9067f0_1.6.3-canary.v20260417193401.js → up-api-keys-page_ui_fc1048_1.6.3.js} +0 -0
- /package/dist/{up-billing-page_ui_e580fd_1.6.3-canary.v20260417193401.js → up-billing-page_ui_0f89c0_1.6.3.js} +0 -0
- /package/dist/{up-billing-page_ui_36a779_1.6.3-canary.v20260417193401.js → up-billing-page_ui_3aaa30_1.6.3.js} +0 -0
- /package/dist/{up-billing-page_ui_9067f0_1.6.3-canary.v20260417193401.js → up-billing-page_ui_fc1048_1.6.3.js} +0 -0
- /package/dist/{up-plans-page_ui_e580fd_1.6.3-canary.v20260417193401.js → up-plans-page_ui_0f89c0_1.6.3.js} +0 -0
- /package/dist/{up-plans-page_ui_36a779_1.6.3-canary.v20260417193401.js → up-plans-page_ui_3aaa30_1.6.3.js} +0 -0
- /package/dist/{up-plans-page_ui_9067f0_1.6.3-canary.v20260417193401.js → up-plans-page_ui_fc1048_1.6.3.js} +0 -0
- /package/dist/{useravatar_ui_e580fd_1.6.3-canary.v20260417193401.js → useravatar_ui_0f89c0_1.6.3.js} +0 -0
- /package/dist/{useravatar_ui_9067f0_1.6.3-canary.v20260417193401.js → useravatar_ui_3aaa30_1.6.3.js} +0 -0
- /package/dist/{useravatar_ui_36a779_1.6.3-canary.v20260417193401.js → useravatar_ui_fc1048_1.6.3.js} +0 -0
- /package/dist/{userbutton_ui_e580fd_1.6.3-canary.v20260417193401.js → userbutton_ui_0f89c0_1.6.3.js} +0 -0
- /package/dist/{userbutton_ui_9067f0_1.6.3-canary.v20260417193401.js → userbutton_ui_3aaa30_1.6.3.js} +0 -0
- /package/dist/{userbutton_ui_36a779_1.6.3-canary.v20260417193401.js → userbutton_ui_fc1048_1.6.3.js} +0 -0
- /package/dist/{userprofile_ui_e580fd_1.6.3-canary.v20260417193401.js → userprofile_ui_0f89c0_1.6.3.js} +0 -0
- /package/dist/{userprofile_ui_9067f0_1.6.3-canary.v20260417193401.js → userprofile_ui_3aaa30_1.6.3.js} +0 -0
- /package/dist/{userprofile_ui_36a779_1.6.3-canary.v20260417193401.js → userprofile_ui_fc1048_1.6.3.js} +0 -0
- /package/dist/{userverification_ui_e580fd_1.6.3-canary.v20260417193401.js → userverification_ui_0f89c0_1.6.3.js} +0 -0
- /package/dist/{userverification_ui_9067f0_1.6.3-canary.v20260417193401.js → userverification_ui_3aaa30_1.6.3.js} +0 -0
- /package/dist/{userverification_ui_36a779_1.6.3-canary.v20260417193401.js → userverification_ui_fc1048_1.6.3.js} +0 -0
- /package/dist/{vendors_ui_e580fd_1.6.3-canary.v20260417193401.js → vendors_ui_0f89c0_1.6.3.js} +0 -0
- /package/dist/{vendors_ui_9067f0_1.6.3-canary.v20260417193401.js → vendors_ui_3aaa30_1.6.3.js} +0 -0
- /package/dist/{vendors_ui_36a779_1.6.3-canary.v20260417193401.js → vendors_ui_fc1048_1.6.3.js} +0 -0
- /package/dist/{waitlist_ui_e580fd_1.6.3-canary.v20260417193401.js → waitlist_ui_0f89c0_1.6.3.js} +0 -0
- /package/dist/{waitlist_ui_9067f0_1.6.3-canary.v20260417193401.js → waitlist_ui_3aaa30_1.6.3.js} +0 -0
- /package/dist/{waitlist_ui_36a779_1.6.3-canary.v20260417193401.js → waitlist_ui_fc1048_1.6.3.js} +0 -0
- /package/dist/{web3-solana-wallet-buttons_ui_e580fd_1.6.3-canary.v20260417193401.js → web3-solana-wallet-buttons_ui_0f89c0_1.6.3.js} +0 -0
- /package/dist/{web3-solana-wallet-buttons_ui_9067f0_1.6.3-canary.v20260417193401.js → web3-solana-wallet-buttons_ui_3aaa30_1.6.3.js} +0 -0
- /package/dist/{web3-solana-wallet-buttons_ui_36a779_1.6.3-canary.v20260417193401.js → web3-solana-wallet-buttons_ui_fc1048_1.6.3.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.6.3
|
|
27
|
-
version = "1.6.3
|
|
26
|
+
static version = "1.6.3";
|
|
27
|
+
version = "1.6.3";
|
|
28
28
|
#componentRenderer;
|
|
29
29
|
/**
|
|
30
30
|
* Creates a new `ClerkUI` instance and mounts the internal component renderer.
|
|
@@ -21,7 +21,7 @@ import { LogoGroup, LogoGroupIcon, LogoGroupItem, LogoGroupSeparator } from "./L
|
|
|
21
21
|
import { OrgSelect } from "./OrgSelect.js";
|
|
22
22
|
import { getForwardedParams, getOAuthConsentFromSearch, getRedirectDisplay, getRedirectUriFromSearch } from "./utils.js";
|
|
23
23
|
import { useState } from "react";
|
|
24
|
-
import { useClerk, useOAuthConsent,
|
|
24
|
+
import { useClerk, useOAuthConsent, useUser } from "@clerk/shared/react";
|
|
25
25
|
import { Fragment as Fragment$1, jsx, jsxs } from "@emotion/react/jsx-runtime";
|
|
26
26
|
|
|
27
27
|
//#region src/components/OAuthConsent/OAuthConsent.tsx
|
|
@@ -30,14 +30,14 @@ function _OAuthConsent() {
|
|
|
30
30
|
const ctx = useOAuthConsentContext();
|
|
31
31
|
const clerk = useClerk();
|
|
32
32
|
const { user } = useUser();
|
|
33
|
-
const { applicationName, logoImageUrl } = useEnvironment()
|
|
33
|
+
const { displayConfig: { applicationName, logoImageUrl }, organizationSettings } = useEnvironment();
|
|
34
34
|
const [isUriModalOpen, setIsUriModalOpen] = useState(false);
|
|
35
|
-
const
|
|
36
|
-
const orgOptions = (
|
|
35
|
+
const orgSelectionEnabled = !!(ctx.enableOrgSelection && organizationSettings.enabled);
|
|
36
|
+
const orgOptions = orgSelectionEnabled ? (user?.organizationMemberships ?? []).map((m) => ({
|
|
37
37
|
value: m.organization.id,
|
|
38
38
|
label: m.organization.name,
|
|
39
39
|
logoUrl: m.organization.imageUrl
|
|
40
|
-
}));
|
|
40
|
+
})) : [];
|
|
41
41
|
const [selectedOrg, setSelectedOrg] = useState(null);
|
|
42
42
|
const effectiveOrg = selectedOrg ?? orgOptions[0]?.value ?? null;
|
|
43
43
|
const hasContextCallbacks = Boolean(ctx.onAllow || ctx.onDeny);
|
|
@@ -66,7 +66,6 @@ function _OAuthConsent() {
|
|
|
66
66
|
if (errorMessage) return /* @__PURE__ */ jsxs(Card.Root, { children: [/* @__PURE__ */ jsx(Card.Content, { children: /* @__PURE__ */ jsx(Card.Alert, { children: errorMessage }) }), /* @__PURE__ */ jsx(Card.Footer, {})] });
|
|
67
67
|
if (isLoading) return /* @__PURE__ */ jsxs(Card.Root, { children: [/* @__PURE__ */ jsx(Card.Content, { children: /* @__PURE__ */ jsx(LoadingCardContainer, {}) }), /* @__PURE__ */ jsx(Card.Footer, {})] });
|
|
68
68
|
}
|
|
69
|
-
if (ctx.enableOrgSelection && (!isMembershipsLoaded || userMemberships.isLoading)) return /* @__PURE__ */ jsxs(Card.Root, { children: [/* @__PURE__ */ jsx(Card.Content, { children: /* @__PURE__ */ jsx(LoadingCardContainer, {}) }), /* @__PURE__ */ jsx(Card.Footer, {})] });
|
|
70
69
|
const actionUrl = clerk.oauthApplication.buildConsentActionUrl({ clientId: oauthClientId });
|
|
71
70
|
const forwardedParams = getForwardedParams();
|
|
72
71
|
const handleSubmit = (e) => {
|
|
@@ -135,12 +134,10 @@ function _OAuthConsent() {
|
|
|
135
134
|
identifier: primaryIdentifier || ""
|
|
136
135
|
}) })
|
|
137
136
|
] }),
|
|
138
|
-
|
|
137
|
+
orgSelectionEnabled && orgOptions.length > 0 && effectiveOrg && /* @__PURE__ */ jsx(OrgSelect, {
|
|
139
138
|
options: orgOptions,
|
|
140
139
|
value: effectiveOrg,
|
|
141
|
-
onChange: setSelectedOrg
|
|
142
|
-
hasMore: userMemberships.hasNextPage,
|
|
143
|
-
onLoadMore: userMemberships.fetchNext
|
|
140
|
+
onChange: setSelectedOrg
|
|
144
141
|
}),
|
|
145
142
|
/* @__PURE__ */ jsxs(ListGroup, { children: [/* @__PURE__ */ jsx(ListGroupHeader, { children: /* @__PURE__ */ jsx(ListGroupHeaderTitle, { localizationKey: localizationKeys("oauthConsent.scopeList.title", { applicationName: oauthApplicationName }) }) }), /* @__PURE__ */ jsx(ListGroupContent, { children: displayedScopes.map((item) => /* @__PURE__ */ jsx(ListGroupItem, { children: /* @__PURE__ */ jsx(ListGroupItemLabel, { children: item.description || item.scope || "" }) }, item.scope)) })] }),
|
|
146
143
|
/* @__PURE__ */ jsx(Alert, {
|
|
@@ -196,7 +193,7 @@ function _OAuthConsent() {
|
|
|
196
193
|
name: key,
|
|
197
194
|
value
|
|
198
195
|
}, key)),
|
|
199
|
-
!hasContextCallbacks &&
|
|
196
|
+
!hasContextCallbacks && orgSelectionEnabled && effectiveOrg && /* @__PURE__ */ jsx("input", {
|
|
200
197
|
type: "hidden",
|
|
201
198
|
name: "organization_id",
|
|
202
199
|
value: effectiveOrg
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OAuthConsent.js","names":["orgOptions: OrgOption[]","t"],"sources":["../../../src/components/OAuthConsent/OAuthConsent.tsx"],"sourcesContent":["import { useClerk, useOAuthConsent, useOrganizationList, useUser } from '@clerk/shared/react';\nimport { useState } from 'react';\n\nimport { useEnvironment, useOAuthConsentContext, withCoreUserGuard } from '@/ui/contexts';\nimport { Box, Button, Flow, Grid, localizationKeys, Text, useLocalizations } from '@/ui/customizables';\nimport { ApplicationLogo } from '@/ui/elements/ApplicationLogo';\nimport { Card } from '@/ui/elements/Card';\nimport { withCardStateProvider } from '@/ui/elements/contexts';\nimport { Header } from '@/ui/elements/Header';\nimport { LoadingCardContainer } from '@/ui/elements/LoadingCard';\nimport { Modal } from '@/ui/elements/Modal';\nimport { Alert, Textarea } from '@/ui/primitives';\nimport { Route, Switch } from '@/ui/router';\n\nimport { InlineAction } from './InlineAction';\nimport {\n ListGroup,\n ListGroupContent,\n ListGroupHeader,\n ListGroupHeaderTitle,\n ListGroupItem,\n ListGroupItemLabel,\n} from './ListGroup';\nimport { LogoGroup, LogoGroupIcon, LogoGroupItem, LogoGroupSeparator } from './LogoGroup';\nimport type { OrgOption } from './OrgSelect';\nimport { OrgSelect } from './OrgSelect';\nimport { getForwardedParams, getOAuthConsentFromSearch, getRedirectDisplay, getRedirectUriFromSearch } from './utils';\n\nconst OFFLINE_ACCESS_SCOPE = 'offline_access';\n\nfunction _OAuthConsent() {\n const ctx = useOAuthConsentContext();\n const clerk = useClerk();\n const { user } = useUser();\n const { applicationName, logoImageUrl } = useEnvironment().displayConfig;\n const [isUriModalOpen, setIsUriModalOpen] = useState(false);\n const { isLoaded: isMembershipsLoaded, userMemberships } = useOrganizationList({\n userMemberships: ctx.enableOrgSelection ? { infinite: true } : undefined,\n });\n const orgOptions: OrgOption[] = (userMemberships.data ?? []).map(m => ({\n value: m.organization.id,\n label: m.organization.name,\n logoUrl: m.organization.imageUrl,\n }));\n\n const [selectedOrg, setSelectedOrg] = useState<string | null>(null);\n const effectiveOrg = selectedOrg ?? orgOptions[0]?.value ?? null;\n\n // onAllow and onDeny are always provided as a pair by the accounts portal.\n const hasContextCallbacks = Boolean(ctx.onAllow || ctx.onDeny);\n\n // Resolve oauthClientId and scope once: context overrides URL fallback.\n const fromUrl = getOAuthConsentFromSearch();\n const oauthClientId = ctx.oauthClientId ?? fromUrl.oauthClientId;\n const scope = ctx.scope ?? fromUrl.scope;\n\n // Public path: fetch via hook. Disabled on the accounts portal path\n // (which already has all data via context) to avoid a wasted FAPI request.\n const { data, isLoading, error } = useOAuthConsent({\n oauthClientId,\n scope,\n // TODO: Remove this once account portal is refactored to use this component\n enabled: !hasContextCallbacks,\n });\n\n // Hook returns camelCase `requiresConsent`; the render logic uses snake_case.\n const mappedHookScopes = data?.scopes?.map(s => ({\n scope: s.scope,\n description: s.description,\n requires_consent: s.requiresConsent,\n }));\n\n // Context (accounts portal path) wins over hook data (public path).\n const scopes = ctx.scopes ?? mappedHookScopes ?? [];\n const oauthApplicationName = ctx.oauthApplicationName ?? data?.oauthApplicationName ?? '';\n const oauthApplicationLogoUrl = ctx.oauthApplicationLogoUrl ?? data?.oauthApplicationLogoUrl;\n const oauthApplicationUrl = ctx.oauthApplicationUrl ?? data?.oauthApplicationUrl;\n const redirectUrl = ctx.redirectUrl ?? getRedirectUriFromSearch();\n\n const { t } = useLocalizations();\n const domainAction = getRedirectDisplay(redirectUrl);\n const viewFullUrlText = t(localizationKeys('oauthConsent.viewFullUrl'));\n\n // Error states only apply to the public flow.\n if (!hasContextCallbacks) {\n const errorMessage = !oauthClientId\n ? 'The client ID is missing.'\n : !redirectUrl\n ? 'The redirect URI is missing.'\n : error\n ? (error.message ?? 'Failed to load consent information.')\n : undefined;\n\n if (errorMessage) {\n return (\n <Card.Root>\n <Card.Content>\n <Card.Alert>{errorMessage}</Card.Alert>\n </Card.Content>\n <Card.Footer />\n </Card.Root>\n );\n }\n\n if (isLoading) {\n return (\n <Card.Root>\n <Card.Content>\n <LoadingCardContainer />\n </Card.Content>\n <Card.Footer />\n </Card.Root>\n );\n }\n }\n\n if (ctx.enableOrgSelection && (!isMembershipsLoaded || userMemberships.isLoading)) {\n return (\n <Card.Root>\n <Card.Content>\n <LoadingCardContainer />\n </Card.Content>\n <Card.Footer />\n </Card.Root>\n );\n }\n\n const actionUrl = clerk.oauthApplication.buildConsentActionUrl({ clientId: oauthClientId });\n const forwardedParams = getForwardedParams();\n\n // Accounts portal path delegates to context callbacks; public path lets the form submit natively.\n const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {\n if (!hasContextCallbacks) {\n return;\n }\n e.preventDefault();\n const submitter = (e.nativeEvent as SubmitEvent).submitter as HTMLButtonElement | null;\n if (submitter?.value === 'true') {\n ctx.onAllow?.();\n } else {\n ctx.onDeny?.();\n }\n };\n\n const primaryIdentifier = user?.primaryEmailAddress?.emailAddress || user?.primaryPhoneNumber?.phoneNumber;\n\n const displayedScopes = scopes.filter(item => item.scope !== OFFLINE_ACCESS_SCOPE);\n const hasOfflineAccess = scopes.some(item => item.scope === OFFLINE_ACCESS_SCOPE);\n\n return (\n <>\n <form\n method='POST'\n action={actionUrl}\n onSubmit={handleSubmit}\n >\n <Card.Root>\n <Card.Content>\n <Header.Root>\n {/* both have avatars */}\n {oauthApplicationLogoUrl && logoImageUrl && (\n <LogoGroup>\n <LogoGroupItem justify='end'>\n <ApplicationLogo\n src={oauthApplicationLogoUrl}\n alt={oauthApplicationName}\n href={oauthApplicationUrl}\n isExternal\n />\n </LogoGroupItem>\n <LogoGroupSeparator />\n <LogoGroupItem justify='start'>\n <ApplicationLogo />\n </LogoGroupItem>\n </LogoGroup>\n )}\n {/* only OAuth app has an avatar */}\n {oauthApplicationLogoUrl && !logoImageUrl && (\n <LogoGroup>\n <Box sx={{ position: 'relative' }}>\n <ApplicationLogo\n src={oauthApplicationLogoUrl}\n alt={oauthApplicationName}\n href={oauthApplicationUrl}\n isExternal\n />\n <LogoGroupIcon\n size='sm'\n sx={t => ({\n position: 'absolute',\n bottom: `calc(${t.space.$3} * -1)`,\n insetInlineEnd: `calc(${t.space.$3} * -1)`,\n })}\n />\n </Box>\n </LogoGroup>\n )}\n {/* only Clerk application has an avatar */}\n {!oauthApplicationLogoUrl && logoImageUrl && (\n <LogoGroup>\n <LogoGroupItem justify='end'>\n <LogoGroupIcon />\n </LogoGroupItem>\n <LogoGroupSeparator />\n <LogoGroupItem justify='start'>\n <ApplicationLogo />\n </LogoGroupItem>\n </LogoGroup>\n )}\n {/* no avatars */}\n {!oauthApplicationLogoUrl && !logoImageUrl && (\n <LogoGroup>\n <LogoGroupIcon />\n </LogoGroup>\n )}\n <Header.Title localizationKey={oauthApplicationName} />\n <Header.Subtitle\n localizationKey={localizationKeys('oauthConsent.subtitle', {\n applicationName,\n identifier: primaryIdentifier || '',\n })}\n />\n </Header.Root>\n {ctx.enableOrgSelection && orgOptions.length > 0 && effectiveOrg && (\n <OrgSelect\n options={orgOptions}\n value={effectiveOrg}\n onChange={setSelectedOrg}\n hasMore={userMemberships.hasNextPage}\n onLoadMore={userMemberships.fetchNext}\n />\n )}\n <ListGroup>\n <ListGroupHeader>\n <ListGroupHeaderTitle\n localizationKey={localizationKeys('oauthConsent.scopeList.title', {\n applicationName: oauthApplicationName,\n })}\n />\n </ListGroupHeader>\n <ListGroupContent>\n {displayedScopes.map(item => (\n <ListGroupItem key={item.scope}>\n <ListGroupItemLabel>{item.description || item.scope || ''}</ListGroupItemLabel>\n </ListGroupItem>\n ))}\n </ListGroupContent>\n </ListGroup>\n <Alert colorScheme='warning'>\n <Text\n colorScheme='warning'\n variant='caption'\n >\n <InlineAction\n text={t(\n localizationKeys('oauthConsent.warning', {\n applicationName: oauthApplicationName || applicationName,\n domainAction,\n }),\n )}\n actionText={domainAction}\n onClick={() => setIsUriModalOpen(true)}\n tooltipText={viewFullUrlText}\n />\n </Text>\n </Alert>\n <Grid\n columns={2}\n gap={3}\n >\n <Button\n type='submit'\n name='consented'\n value='false'\n colorScheme='secondary'\n variant='outline'\n localizationKey={localizationKeys('oauthConsent.action__deny')}\n />\n <Button\n type='submit'\n name='consented'\n value='true'\n localizationKey={localizationKeys('oauthConsent.action__allow')}\n />\n <Text\n sx={{ gridColumn: 'span 2' }}\n colorScheme='secondary'\n variant='caption'\n >\n <InlineAction\n text={t(localizationKeys('oauthConsent.redirectNotice', { domainAction }))}\n actionText={domainAction}\n onClick={() => setIsUriModalOpen(true)}\n tooltipText={viewFullUrlText}\n />\n {hasOfflineAccess && t(localizationKeys('oauthConsent.offlineAccessNotice'))}\n </Text>\n </Grid>\n </Card.Content>\n <Card.Footer />\n </Card.Root>\n {!hasContextCallbacks &&\n forwardedParams.map(([key, value]) => (\n <input\n key={key}\n type='hidden'\n name={key}\n value={value}\n />\n ))}\n {!hasContextCallbacks && ctx.enableOrgSelection && effectiveOrg && (\n <input\n type='hidden'\n name='organization_id'\n value={effectiveOrg}\n />\n )}\n </form>\n <RedirectUriModal\n isOpen={isUriModalOpen}\n onOpen={() => setIsUriModalOpen(true)}\n onClose={() => setIsUriModalOpen(false)}\n redirectUri={redirectUrl}\n oauthApplicationName={oauthApplicationName}\n />\n </>\n );\n}\n\ntype RedirectUriModalProps = {\n onOpen: () => void;\n onClose: () => void;\n isOpen: boolean;\n redirectUri: string;\n oauthApplicationName: string;\n};\n\nfunction RedirectUriModal({ onOpen, onClose, isOpen, redirectUri, oauthApplicationName }: RedirectUriModalProps) {\n if (!isOpen) {\n return null;\n }\n\n return (\n <Modal\n handleOpen={onOpen}\n handleClose={onClose}\n >\n <Card.Root>\n <Card.Content>\n <Header.Root>\n <Header.Title localizationKey={localizationKeys('oauthConsent.redirectUriModal.title')} />\n <Header.Subtitle\n localizationKey={localizationKeys('oauthConsent.redirectUriModal.subtitle', {\n applicationName: oauthApplicationName,\n })}\n />\n </Header.Root>\n <Textarea\n style={{ maxHeight: 'none' }}\n cols={50}\n rows={6}\n defaultValue={redirectUri}\n readOnly\n />\n </Card.Content>\n </Card.Root>\n </Modal>\n );\n}\n\nconst AuthenticatedRoutes = withCoreUserGuard(withCardStateProvider(_OAuthConsent));\n\nconst OAuthConsentInternal = () => {\n return (\n <Flow.Root flow='oauthConsent'>\n <Flow.Part>\n <Switch>\n <Route>\n <AuthenticatedRoutes />\n </Route>\n </Switch>\n </Flow.Part>\n </Flow.Root>\n );\n};\n\nexport const OAuthConsent = OAuthConsentInternal;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"OAuthConsent.js","names":["t"],"sources":["../../../src/components/OAuthConsent/OAuthConsent.tsx"],"sourcesContent":["import { useClerk, useOAuthConsent, useUser } from '@clerk/shared/react';\nimport { useState } from 'react';\n\nimport { useEnvironment, useOAuthConsentContext, withCoreUserGuard } from '@/ui/contexts';\nimport { Box, Button, Flow, Grid, localizationKeys, Text, useLocalizations } from '@/ui/customizables';\nimport { ApplicationLogo } from '@/ui/elements/ApplicationLogo';\nimport { Card } from '@/ui/elements/Card';\nimport { withCardStateProvider } from '@/ui/elements/contexts';\nimport { Header } from '@/ui/elements/Header';\nimport { LoadingCardContainer } from '@/ui/elements/LoadingCard';\nimport { Modal } from '@/ui/elements/Modal';\nimport { Alert, Textarea } from '@/ui/primitives';\nimport { Route, Switch } from '@/ui/router';\n\nimport { InlineAction } from './InlineAction';\nimport {\n ListGroup,\n ListGroupContent,\n ListGroupHeader,\n ListGroupHeaderTitle,\n ListGroupItem,\n ListGroupItemLabel,\n} from './ListGroup';\nimport { LogoGroup, LogoGroupIcon, LogoGroupItem, LogoGroupSeparator } from './LogoGroup';\nimport { OrgSelect } from './OrgSelect';\nimport { getForwardedParams, getOAuthConsentFromSearch, getRedirectDisplay, getRedirectUriFromSearch } from './utils';\n\nconst OFFLINE_ACCESS_SCOPE = 'offline_access';\n\nfunction _OAuthConsent() {\n const ctx = useOAuthConsentContext();\n const clerk = useClerk();\n const { user } = useUser();\n const {\n displayConfig: { applicationName, logoImageUrl },\n organizationSettings,\n } = useEnvironment();\n const [isUriModalOpen, setIsUriModalOpen] = useState(false);\n\n const orgSelectionEnabled = !!(ctx.enableOrgSelection && organizationSettings.enabled);\n const orgOptions = orgSelectionEnabled\n ? (user?.organizationMemberships ?? []).map(m => ({\n value: m.organization.id,\n label: m.organization.name,\n logoUrl: m.organization.imageUrl,\n }))\n : [];\n\n const [selectedOrg, setSelectedOrg] = useState<string | null>(null);\n const effectiveOrg = selectedOrg ?? orgOptions[0]?.value ?? null;\n\n // onAllow and onDeny are always provided as a pair by the accounts portal.\n const hasContextCallbacks = Boolean(ctx.onAllow || ctx.onDeny);\n\n // Resolve oauthClientId and scope once: context overrides URL fallback.\n const fromUrl = getOAuthConsentFromSearch();\n const oauthClientId = ctx.oauthClientId ?? fromUrl.oauthClientId;\n const scope = ctx.scope ?? fromUrl.scope;\n\n // Public path: fetch via hook. Disabled on the accounts portal path\n // (which already has all data via context) to avoid a wasted FAPI request.\n const { data, isLoading, error } = useOAuthConsent({\n oauthClientId,\n scope,\n // TODO: Remove this once account portal is refactored to use this component\n enabled: !hasContextCallbacks,\n });\n\n // Hook returns camelCase `requiresConsent`; the render logic uses snake_case.\n const mappedHookScopes = data?.scopes?.map(s => ({\n scope: s.scope,\n description: s.description,\n requires_consent: s.requiresConsent,\n }));\n\n // Context (accounts portal path) wins over hook data (public path).\n const scopes = ctx.scopes ?? mappedHookScopes ?? [];\n const oauthApplicationName = ctx.oauthApplicationName ?? data?.oauthApplicationName ?? '';\n const oauthApplicationLogoUrl = ctx.oauthApplicationLogoUrl ?? data?.oauthApplicationLogoUrl;\n const oauthApplicationUrl = ctx.oauthApplicationUrl ?? data?.oauthApplicationUrl;\n const redirectUrl = ctx.redirectUrl ?? getRedirectUriFromSearch();\n\n const { t } = useLocalizations();\n const domainAction = getRedirectDisplay(redirectUrl);\n const viewFullUrlText = t(localizationKeys('oauthConsent.viewFullUrl'));\n\n // Error states only apply to the public flow.\n if (!hasContextCallbacks) {\n const errorMessage = !oauthClientId\n ? 'The client ID is missing.'\n : !redirectUrl\n ? 'The redirect URI is missing.'\n : error\n ? (error.message ?? 'Failed to load consent information.')\n : undefined;\n\n if (errorMessage) {\n return (\n <Card.Root>\n <Card.Content>\n <Card.Alert>{errorMessage}</Card.Alert>\n </Card.Content>\n <Card.Footer />\n </Card.Root>\n );\n }\n\n if (isLoading) {\n return (\n <Card.Root>\n <Card.Content>\n <LoadingCardContainer />\n </Card.Content>\n <Card.Footer />\n </Card.Root>\n );\n }\n }\n\n const actionUrl = clerk.oauthApplication.buildConsentActionUrl({ clientId: oauthClientId });\n const forwardedParams = getForwardedParams();\n\n // Accounts portal path delegates to context callbacks; public path lets the form submit natively.\n const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {\n if (!hasContextCallbacks) {\n return;\n }\n e.preventDefault();\n const submitter = (e.nativeEvent as SubmitEvent).submitter as HTMLButtonElement | null;\n if (submitter?.value === 'true') {\n ctx.onAllow?.();\n } else {\n ctx.onDeny?.();\n }\n };\n\n const primaryIdentifier = user?.primaryEmailAddress?.emailAddress || user?.primaryPhoneNumber?.phoneNumber;\n\n const displayedScopes = scopes.filter(item => item.scope !== OFFLINE_ACCESS_SCOPE);\n const hasOfflineAccess = scopes.some(item => item.scope === OFFLINE_ACCESS_SCOPE);\n\n return (\n <>\n <form\n method='POST'\n action={actionUrl}\n onSubmit={handleSubmit}\n >\n <Card.Root>\n <Card.Content>\n <Header.Root>\n {/* both have avatars */}\n {oauthApplicationLogoUrl && logoImageUrl && (\n <LogoGroup>\n <LogoGroupItem justify='end'>\n <ApplicationLogo\n src={oauthApplicationLogoUrl}\n alt={oauthApplicationName}\n href={oauthApplicationUrl}\n isExternal\n />\n </LogoGroupItem>\n <LogoGroupSeparator />\n <LogoGroupItem justify='start'>\n <ApplicationLogo />\n </LogoGroupItem>\n </LogoGroup>\n )}\n {/* only OAuth app has an avatar */}\n {oauthApplicationLogoUrl && !logoImageUrl && (\n <LogoGroup>\n <Box sx={{ position: 'relative' }}>\n <ApplicationLogo\n src={oauthApplicationLogoUrl}\n alt={oauthApplicationName}\n href={oauthApplicationUrl}\n isExternal\n />\n <LogoGroupIcon\n size='sm'\n sx={t => ({\n position: 'absolute',\n bottom: `calc(${t.space.$3} * -1)`,\n insetInlineEnd: `calc(${t.space.$3} * -1)`,\n })}\n />\n </Box>\n </LogoGroup>\n )}\n {/* only Clerk application has an avatar */}\n {!oauthApplicationLogoUrl && logoImageUrl && (\n <LogoGroup>\n <LogoGroupItem justify='end'>\n <LogoGroupIcon />\n </LogoGroupItem>\n <LogoGroupSeparator />\n <LogoGroupItem justify='start'>\n <ApplicationLogo />\n </LogoGroupItem>\n </LogoGroup>\n )}\n {/* no avatars */}\n {!oauthApplicationLogoUrl && !logoImageUrl && (\n <LogoGroup>\n <LogoGroupIcon />\n </LogoGroup>\n )}\n <Header.Title localizationKey={oauthApplicationName} />\n <Header.Subtitle\n localizationKey={localizationKeys('oauthConsent.subtitle', {\n applicationName,\n identifier: primaryIdentifier || '',\n })}\n />\n </Header.Root>\n {orgSelectionEnabled && orgOptions.length > 0 && effectiveOrg && (\n <OrgSelect\n options={orgOptions}\n value={effectiveOrg}\n onChange={setSelectedOrg}\n />\n )}\n <ListGroup>\n <ListGroupHeader>\n <ListGroupHeaderTitle\n localizationKey={localizationKeys('oauthConsent.scopeList.title', {\n applicationName: oauthApplicationName,\n })}\n />\n </ListGroupHeader>\n <ListGroupContent>\n {displayedScopes.map(item => (\n <ListGroupItem key={item.scope}>\n <ListGroupItemLabel>{item.description || item.scope || ''}</ListGroupItemLabel>\n </ListGroupItem>\n ))}\n </ListGroupContent>\n </ListGroup>\n <Alert colorScheme='warning'>\n <Text\n colorScheme='warning'\n variant='caption'\n >\n <InlineAction\n text={t(\n localizationKeys('oauthConsent.warning', {\n applicationName: oauthApplicationName || applicationName,\n domainAction,\n }),\n )}\n actionText={domainAction}\n onClick={() => setIsUriModalOpen(true)}\n tooltipText={viewFullUrlText}\n />\n </Text>\n </Alert>\n <Grid\n columns={2}\n gap={3}\n >\n <Button\n type='submit'\n name='consented'\n value='false'\n colorScheme='secondary'\n variant='outline'\n localizationKey={localizationKeys('oauthConsent.action__deny')}\n />\n <Button\n type='submit'\n name='consented'\n value='true'\n localizationKey={localizationKeys('oauthConsent.action__allow')}\n />\n <Text\n sx={{ gridColumn: 'span 2' }}\n colorScheme='secondary'\n variant='caption'\n >\n <InlineAction\n text={t(localizationKeys('oauthConsent.redirectNotice', { domainAction }))}\n actionText={domainAction}\n onClick={() => setIsUriModalOpen(true)}\n tooltipText={viewFullUrlText}\n />\n {hasOfflineAccess && t(localizationKeys('oauthConsent.offlineAccessNotice'))}\n </Text>\n </Grid>\n </Card.Content>\n <Card.Footer />\n </Card.Root>\n {!hasContextCallbacks &&\n forwardedParams.map(([key, value]) => (\n <input\n key={key}\n type='hidden'\n name={key}\n value={value}\n />\n ))}\n {!hasContextCallbacks && orgSelectionEnabled && effectiveOrg && (\n <input\n type='hidden'\n name='organization_id'\n value={effectiveOrg}\n />\n )}\n </form>\n <RedirectUriModal\n isOpen={isUriModalOpen}\n onOpen={() => setIsUriModalOpen(true)}\n onClose={() => setIsUriModalOpen(false)}\n redirectUri={redirectUrl}\n oauthApplicationName={oauthApplicationName}\n />\n </>\n );\n}\n\ntype RedirectUriModalProps = {\n onOpen: () => void;\n onClose: () => void;\n isOpen: boolean;\n redirectUri: string;\n oauthApplicationName: string;\n};\n\nfunction RedirectUriModal({ onOpen, onClose, isOpen, redirectUri, oauthApplicationName }: RedirectUriModalProps) {\n if (!isOpen) {\n return null;\n }\n\n return (\n <Modal\n handleOpen={onOpen}\n handleClose={onClose}\n >\n <Card.Root>\n <Card.Content>\n <Header.Root>\n <Header.Title localizationKey={localizationKeys('oauthConsent.redirectUriModal.title')} />\n <Header.Subtitle\n localizationKey={localizationKeys('oauthConsent.redirectUriModal.subtitle', {\n applicationName: oauthApplicationName,\n })}\n />\n </Header.Root>\n <Textarea\n style={{ maxHeight: 'none' }}\n cols={50}\n rows={6}\n defaultValue={redirectUri}\n readOnly\n />\n </Card.Content>\n </Card.Root>\n </Modal>\n );\n}\n\nconst AuthenticatedRoutes = withCoreUserGuard(withCardStateProvider(_OAuthConsent));\n\nconst OAuthConsentInternal = () => {\n return (\n <Flow.Root flow='oauthConsent'>\n <Flow.Part>\n <Switch>\n <Route>\n <AuthenticatedRoutes />\n </Route>\n </Switch>\n </Flow.Part>\n </Flow.Root>\n );\n};\n\nexport const OAuthConsent = OAuthConsentInternal;\n"],"mappings":"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"}
|
|
@@ -1,22 +1,14 @@
|
|
|
1
|
-
import { useInView } from "../../hooks/useInView.js";
|
|
2
1
|
import check_default from "../../icons/check.js";
|
|
3
2
|
import { common } from "../../styledSystem/common.js";
|
|
4
3
|
import { Box, Icon, Image, Text } from "../../customizables/index.js";
|
|
5
|
-
import { InfiniteListSpinner } from "../../common/InfiniteListSpinner.js";
|
|
6
4
|
import { Select, SelectButton, SelectOptionList } from "../../elements/Select.js";
|
|
7
5
|
import { useRef } from "react";
|
|
8
6
|
import { jsx, jsxs } from "@emotion/react/jsx-runtime";
|
|
9
7
|
|
|
10
8
|
//#region src/components/OAuthConsent/OrgSelect.tsx
|
|
11
|
-
function OrgSelect({ options, value, onChange
|
|
9
|
+
function OrgSelect({ options, value, onChange }) {
|
|
12
10
|
const buttonRef = useRef(null);
|
|
13
11
|
const selected = options.find((option) => option.value === value);
|
|
14
|
-
const { ref: loadMoreRef } = useInView({
|
|
15
|
-
threshold: 0,
|
|
16
|
-
onChange: (inView) => {
|
|
17
|
-
if (inView && hasMore) onLoadMore?.();
|
|
18
|
-
}
|
|
19
|
-
});
|
|
20
12
|
return /* @__PURE__ */ jsxs(Select, {
|
|
21
13
|
options,
|
|
22
14
|
value,
|
|
@@ -92,10 +84,7 @@ function OrgSelect({ options, value, onChange, hasMore, onLoadMore }) {
|
|
|
92
84
|
},
|
|
93
85
|
children: selected?.label || "Select an option"
|
|
94
86
|
})]
|
|
95
|
-
}), /* @__PURE__ */ jsx(SelectOptionList, {
|
|
96
|
-
footer: hasMore ? /* @__PURE__ */ jsx(InfiniteListSpinner, { ref: loadMoreRef }) : null,
|
|
97
|
-
onReachEnd: hasMore ? onLoadMore : void 0
|
|
98
|
-
})]
|
|
87
|
+
}), /* @__PURE__ */ jsx(SelectOptionList, {})]
|
|
99
88
|
});
|
|
100
89
|
}
|
|
101
90
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OrgSelect.js","names":["Check"],"sources":["../../../src/components/OAuthConsent/OrgSelect.tsx"],"sourcesContent":["import { useRef } from 'react';\n\nimport {
|
|
1
|
+
{"version":3,"file":"OrgSelect.js","names":["Check"],"sources":["../../../src/components/OAuthConsent/OrgSelect.tsx"],"sourcesContent":["import { useRef } from 'react';\n\nimport { Box, Icon, Image, Text } from '@/ui/customizables';\nimport { Select, SelectButton, SelectOptionList } from '@/ui/elements/Select';\nimport { Check } from '@/ui/icons';\nimport { common } from '@/ui/styledSystem';\n\nexport type OrgOption = {\n value: string;\n label: string;\n logoUrl: string;\n};\n\ntype OrgSelectProps = {\n options: OrgOption[];\n value: string | null;\n onChange: (value: string) => void;\n};\n\nexport function OrgSelect({ options, value, onChange }: OrgSelectProps) {\n const buttonRef = useRef<HTMLButtonElement>(null);\n const selected = options.find(option => option.value === value);\n\n return (\n <Select\n options={options}\n value={value}\n onChange={option => onChange(option.value)}\n referenceElement={buttonRef}\n renderOption={(option, _index, isSelected) => (\n <Box\n as='span'\n sx={theme => ({\n width: '100%',\n display: 'grid',\n gridTemplateColumns: `${theme.sizes.$5} 1fr ${theme.sizes.$3}`,\n columnGap: theme.space.$2,\n paddingInlineStart: theme.space.$1,\n paddingInlineEnd: theme.space.$1x5,\n paddingBlock: theme.space.$1,\n alignItems: 'center',\n borderRadius: theme.radii.$md,\n '&:hover, &[data-focused=\"true\"]': {\n background: common.mutedBackground(theme),\n },\n })}\n >\n <Image\n src={option.logoUrl}\n alt={option.label}\n sx={theme => ({\n width: theme.sizes.$5,\n height: theme.sizes.$5,\n objectFit: 'contain',\n flexShrink: 0,\n borderRadius: theme.radii.$md,\n })}\n />\n <Text\n sx={{ flex: 1, textAlign: 'start', minWidth: 0, maxInlineSize: '200px' }}\n truncate\n as='span'\n variant='subtitle'\n >\n {option.label}\n </Text>\n {isSelected && (\n <Icon\n icon={Check}\n size='sm'\n sx={theme => ({ color: theme.colors.$primary500 })}\n />\n )}\n </Box>\n )}\n >\n <SelectButton\n ref={buttonRef}\n aria-haspopup='listbox'\n sx={theme => ({\n paddingInline: theme.space.$3,\n })}\n >\n <Image\n src={selected?.logoUrl || ''}\n alt={selected?.label || ''}\n sx={theme => ({\n width: theme.sizes.$5,\n height: theme.sizes.$5,\n borderRadius: theme.radii.$md,\n objectFit: 'contain',\n flexShrink: 0,\n })}\n />\n <Text\n colorScheme='body'\n as='span'\n truncate\n sx={{ flex: 1, minWidth: 0, textAlign: 'start' }}\n >\n {selected?.label || 'Select an option'}\n </Text>\n </SelectButton>\n <SelectOptionList />\n </Select>\n );\n}\n"],"mappings":";;;;;;;;AAmBA,SAAgB,UAAU,EAAE,SAAS,OAAO,YAA4B;CACtE,MAAM,YAAY,OAA0B,KAAK;CACjD,MAAM,WAAW,QAAQ,MAAK,WAAU,OAAO,UAAU,MAAM;AAE/D,QACE,qBAAC;EACU;EACF;EACP,WAAU,WAAU,SAAS,OAAO,MAAM;EAC1C,kBAAkB;EAClB,eAAe,QAAQ,QAAQ,eAC7B,qBAAC;GACC,IAAG;GACH,KAAI,WAAU;IACZ,OAAO;IACP,SAAS;IACT,qBAAqB,GAAG,MAAM,MAAM,GAAG,OAAO,MAAM,MAAM;IAC1D,WAAW,MAAM,MAAM;IACvB,oBAAoB,MAAM,MAAM;IAChC,kBAAkB,MAAM,MAAM;IAC9B,cAAc,MAAM,MAAM;IAC1B,YAAY;IACZ,cAAc,MAAM,MAAM;IAC1B,qCAAmC,EACjC,YAAY,OAAO,gBAAgB,MAAM,EAC1C;IACF;;IAED,oBAAC;KACC,KAAK,OAAO;KACZ,KAAK,OAAO;KACZ,KAAI,WAAU;MACZ,OAAO,MAAM,MAAM;MACnB,QAAQ,MAAM,MAAM;MACpB,WAAW;MACX,YAAY;MACZ,cAAc,MAAM,MAAM;MAC3B;MACD;IACF,oBAAC;KACC,IAAI;MAAE,MAAM;MAAG,WAAW;MAAS,UAAU;MAAG,eAAe;MAAS;KACxE;KACA,IAAG;KACH,SAAQ;eAEP,OAAO;MACH;IACN,cACC,oBAAC;KACC,MAAMA;KACN,MAAK;KACL,KAAI,WAAU,EAAE,OAAO,MAAM,OAAO,aAAa;MACjD;;IAEA;aAGR,qBAAC;GACC,KAAK;GACL,iBAAc;GACd,KAAI,WAAU,EACZ,eAAe,MAAM,MAAM,IAC5B;cAED,oBAAC;IACC,KAAK,UAAU,WAAW;IAC1B,KAAK,UAAU,SAAS;IACxB,KAAI,WAAU;KACZ,OAAO,MAAM,MAAM;KACnB,QAAQ,MAAM,MAAM;KACpB,cAAc,MAAM,MAAM;KAC1B,WAAW;KACX,YAAY;KACb;KACD,EACF,oBAAC;IACC,aAAY;IACZ,IAAG;IACH;IACA,IAAI;KAAE,MAAM;KAAG,UAAU;KAAG,WAAW;KAAS;cAE/C,UAAU,SAAS;KACf;IACM,EACf,oBAAC,qBAAmB;GACb"}
|
package/dist/index.js
CHANGED
package/dist/no-rhc/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.6.3
|
|
27
|
-
version = "1.6.3
|
|
26
|
+
static version = "1.6.3";
|
|
27
|
+
version = "1.6.3";
|
|
28
28
|
#componentRenderer;
|
|
29
29
|
/**
|
|
30
30
|
* Creates a new `ClerkUI` instance and mounts the internal component renderer.
|
|
@@ -21,7 +21,7 @@ import { LogoGroup, LogoGroupIcon, LogoGroupItem, LogoGroupSeparator } from "./L
|
|
|
21
21
|
import { OrgSelect } from "./OrgSelect.js";
|
|
22
22
|
import { getForwardedParams, getOAuthConsentFromSearch, getRedirectDisplay, getRedirectUriFromSearch } from "./utils.js";
|
|
23
23
|
import { useState } from "react";
|
|
24
|
-
import { useClerk, useOAuthConsent,
|
|
24
|
+
import { useClerk, useOAuthConsent, useUser } from "@clerk/shared/react";
|
|
25
25
|
import { Fragment as Fragment$1, jsx, jsxs } from "@emotion/react/jsx-runtime";
|
|
26
26
|
|
|
27
27
|
//#region src/components/OAuthConsent/OAuthConsent.tsx
|
|
@@ -30,14 +30,14 @@ function _OAuthConsent() {
|
|
|
30
30
|
const ctx = useOAuthConsentContext();
|
|
31
31
|
const clerk = useClerk();
|
|
32
32
|
const { user } = useUser();
|
|
33
|
-
const { applicationName, logoImageUrl } = useEnvironment()
|
|
33
|
+
const { displayConfig: { applicationName, logoImageUrl }, organizationSettings } = useEnvironment();
|
|
34
34
|
const [isUriModalOpen, setIsUriModalOpen] = useState(false);
|
|
35
|
-
const
|
|
36
|
-
const orgOptions = (
|
|
35
|
+
const orgSelectionEnabled = !!(ctx.enableOrgSelection && organizationSettings.enabled);
|
|
36
|
+
const orgOptions = orgSelectionEnabled ? (user?.organizationMemberships ?? []).map((m) => ({
|
|
37
37
|
value: m.organization.id,
|
|
38
38
|
label: m.organization.name,
|
|
39
39
|
logoUrl: m.organization.imageUrl
|
|
40
|
-
}));
|
|
40
|
+
})) : [];
|
|
41
41
|
const [selectedOrg, setSelectedOrg] = useState(null);
|
|
42
42
|
const effectiveOrg = selectedOrg ?? orgOptions[0]?.value ?? null;
|
|
43
43
|
const hasContextCallbacks = Boolean(ctx.onAllow || ctx.onDeny);
|
|
@@ -66,7 +66,6 @@ function _OAuthConsent() {
|
|
|
66
66
|
if (errorMessage) return /* @__PURE__ */ jsxs(Card.Root, { children: [/* @__PURE__ */ jsx(Card.Content, { children: /* @__PURE__ */ jsx(Card.Alert, { children: errorMessage }) }), /* @__PURE__ */ jsx(Card.Footer, {})] });
|
|
67
67
|
if (isLoading) return /* @__PURE__ */ jsxs(Card.Root, { children: [/* @__PURE__ */ jsx(Card.Content, { children: /* @__PURE__ */ jsx(LoadingCardContainer, {}) }), /* @__PURE__ */ jsx(Card.Footer, {})] });
|
|
68
68
|
}
|
|
69
|
-
if (ctx.enableOrgSelection && (!isMembershipsLoaded || userMemberships.isLoading)) return /* @__PURE__ */ jsxs(Card.Root, { children: [/* @__PURE__ */ jsx(Card.Content, { children: /* @__PURE__ */ jsx(LoadingCardContainer, {}) }), /* @__PURE__ */ jsx(Card.Footer, {})] });
|
|
70
69
|
const actionUrl = clerk.oauthApplication.buildConsentActionUrl({ clientId: oauthClientId });
|
|
71
70
|
const forwardedParams = getForwardedParams();
|
|
72
71
|
const handleSubmit = (e) => {
|
|
@@ -135,12 +134,10 @@ function _OAuthConsent() {
|
|
|
135
134
|
identifier: primaryIdentifier || ""
|
|
136
135
|
}) })
|
|
137
136
|
] }),
|
|
138
|
-
|
|
137
|
+
orgSelectionEnabled && orgOptions.length > 0 && effectiveOrg && /* @__PURE__ */ jsx(OrgSelect, {
|
|
139
138
|
options: orgOptions,
|
|
140
139
|
value: effectiveOrg,
|
|
141
|
-
onChange: setSelectedOrg
|
|
142
|
-
hasMore: userMemberships.hasNextPage,
|
|
143
|
-
onLoadMore: userMemberships.fetchNext
|
|
140
|
+
onChange: setSelectedOrg
|
|
144
141
|
}),
|
|
145
142
|
/* @__PURE__ */ jsxs(ListGroup, { children: [/* @__PURE__ */ jsx(ListGroupHeader, { children: /* @__PURE__ */ jsx(ListGroupHeaderTitle, { localizationKey: localizationKeys("oauthConsent.scopeList.title", { applicationName: oauthApplicationName }) }) }), /* @__PURE__ */ jsx(ListGroupContent, { children: displayedScopes.map((item) => /* @__PURE__ */ jsx(ListGroupItem, { children: /* @__PURE__ */ jsx(ListGroupItemLabel, { children: item.description || item.scope || "" }) }, item.scope)) })] }),
|
|
146
143
|
/* @__PURE__ */ jsx(Alert, {
|
|
@@ -196,7 +193,7 @@ function _OAuthConsent() {
|
|
|
196
193
|
name: key,
|
|
197
194
|
value
|
|
198
195
|
}, key)),
|
|
199
|
-
!hasContextCallbacks &&
|
|
196
|
+
!hasContextCallbacks && orgSelectionEnabled && effectiveOrg && /* @__PURE__ */ jsx("input", {
|
|
200
197
|
type: "hidden",
|
|
201
198
|
name: "organization_id",
|
|
202
199
|
value: effectiveOrg
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OAuthConsent.js","names":["orgOptions: OrgOption[]","t"],"sources":["../../../../src/components/OAuthConsent/OAuthConsent.tsx"],"sourcesContent":["import { useClerk, useOAuthConsent, useOrganizationList, useUser } from '@clerk/shared/react';\nimport { useState } from 'react';\n\nimport { useEnvironment, useOAuthConsentContext, withCoreUserGuard } from '@/ui/contexts';\nimport { Box, Button, Flow, Grid, localizationKeys, Text, useLocalizations } from '@/ui/customizables';\nimport { ApplicationLogo } from '@/ui/elements/ApplicationLogo';\nimport { Card } from '@/ui/elements/Card';\nimport { withCardStateProvider } from '@/ui/elements/contexts';\nimport { Header } from '@/ui/elements/Header';\nimport { LoadingCardContainer } from '@/ui/elements/LoadingCard';\nimport { Modal } from '@/ui/elements/Modal';\nimport { Alert, Textarea } from '@/ui/primitives';\nimport { Route, Switch } from '@/ui/router';\n\nimport { InlineAction } from './InlineAction';\nimport {\n ListGroup,\n ListGroupContent,\n ListGroupHeader,\n ListGroupHeaderTitle,\n ListGroupItem,\n ListGroupItemLabel,\n} from './ListGroup';\nimport { LogoGroup, LogoGroupIcon, LogoGroupItem, LogoGroupSeparator } from './LogoGroup';\nimport type { OrgOption } from './OrgSelect';\nimport { OrgSelect } from './OrgSelect';\nimport { getForwardedParams, getOAuthConsentFromSearch, getRedirectDisplay, getRedirectUriFromSearch } from './utils';\n\nconst OFFLINE_ACCESS_SCOPE = 'offline_access';\n\nfunction _OAuthConsent() {\n const ctx = useOAuthConsentContext();\n const clerk = useClerk();\n const { user } = useUser();\n const { applicationName, logoImageUrl } = useEnvironment().displayConfig;\n const [isUriModalOpen, setIsUriModalOpen] = useState(false);\n const { isLoaded: isMembershipsLoaded, userMemberships } = useOrganizationList({\n userMemberships: ctx.enableOrgSelection ? { infinite: true } : undefined,\n });\n const orgOptions: OrgOption[] = (userMemberships.data ?? []).map(m => ({\n value: m.organization.id,\n label: m.organization.name,\n logoUrl: m.organization.imageUrl,\n }));\n\n const [selectedOrg, setSelectedOrg] = useState<string | null>(null);\n const effectiveOrg = selectedOrg ?? orgOptions[0]?.value ?? null;\n\n // onAllow and onDeny are always provided as a pair by the accounts portal.\n const hasContextCallbacks = Boolean(ctx.onAllow || ctx.onDeny);\n\n // Resolve oauthClientId and scope once: context overrides URL fallback.\n const fromUrl = getOAuthConsentFromSearch();\n const oauthClientId = ctx.oauthClientId ?? fromUrl.oauthClientId;\n const scope = ctx.scope ?? fromUrl.scope;\n\n // Public path: fetch via hook. Disabled on the accounts portal path\n // (which already has all data via context) to avoid a wasted FAPI request.\n const { data, isLoading, error } = useOAuthConsent({\n oauthClientId,\n scope,\n // TODO: Remove this once account portal is refactored to use this component\n enabled: !hasContextCallbacks,\n });\n\n // Hook returns camelCase `requiresConsent`; the render logic uses snake_case.\n const mappedHookScopes = data?.scopes?.map(s => ({\n scope: s.scope,\n description: s.description,\n requires_consent: s.requiresConsent,\n }));\n\n // Context (accounts portal path) wins over hook data (public path).\n const scopes = ctx.scopes ?? mappedHookScopes ?? [];\n const oauthApplicationName = ctx.oauthApplicationName ?? data?.oauthApplicationName ?? '';\n const oauthApplicationLogoUrl = ctx.oauthApplicationLogoUrl ?? data?.oauthApplicationLogoUrl;\n const oauthApplicationUrl = ctx.oauthApplicationUrl ?? data?.oauthApplicationUrl;\n const redirectUrl = ctx.redirectUrl ?? getRedirectUriFromSearch();\n\n const { t } = useLocalizations();\n const domainAction = getRedirectDisplay(redirectUrl);\n const viewFullUrlText = t(localizationKeys('oauthConsent.viewFullUrl'));\n\n // Error states only apply to the public flow.\n if (!hasContextCallbacks) {\n const errorMessage = !oauthClientId\n ? 'The client ID is missing.'\n : !redirectUrl\n ? 'The redirect URI is missing.'\n : error\n ? (error.message ?? 'Failed to load consent information.')\n : undefined;\n\n if (errorMessage) {\n return (\n <Card.Root>\n <Card.Content>\n <Card.Alert>{errorMessage}</Card.Alert>\n </Card.Content>\n <Card.Footer />\n </Card.Root>\n );\n }\n\n if (isLoading) {\n return (\n <Card.Root>\n <Card.Content>\n <LoadingCardContainer />\n </Card.Content>\n <Card.Footer />\n </Card.Root>\n );\n }\n }\n\n if (ctx.enableOrgSelection && (!isMembershipsLoaded || userMemberships.isLoading)) {\n return (\n <Card.Root>\n <Card.Content>\n <LoadingCardContainer />\n </Card.Content>\n <Card.Footer />\n </Card.Root>\n );\n }\n\n const actionUrl = clerk.oauthApplication.buildConsentActionUrl({ clientId: oauthClientId });\n const forwardedParams = getForwardedParams();\n\n // Accounts portal path delegates to context callbacks; public path lets the form submit natively.\n const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {\n if (!hasContextCallbacks) {\n return;\n }\n e.preventDefault();\n const submitter = (e.nativeEvent as SubmitEvent).submitter as HTMLButtonElement | null;\n if (submitter?.value === 'true') {\n ctx.onAllow?.();\n } else {\n ctx.onDeny?.();\n }\n };\n\n const primaryIdentifier = user?.primaryEmailAddress?.emailAddress || user?.primaryPhoneNumber?.phoneNumber;\n\n const displayedScopes = scopes.filter(item => item.scope !== OFFLINE_ACCESS_SCOPE);\n const hasOfflineAccess = scopes.some(item => item.scope === OFFLINE_ACCESS_SCOPE);\n\n return (\n <>\n <form\n method='POST'\n action={actionUrl}\n onSubmit={handleSubmit}\n >\n <Card.Root>\n <Card.Content>\n <Header.Root>\n {/* both have avatars */}\n {oauthApplicationLogoUrl && logoImageUrl && (\n <LogoGroup>\n <LogoGroupItem justify='end'>\n <ApplicationLogo\n src={oauthApplicationLogoUrl}\n alt={oauthApplicationName}\n href={oauthApplicationUrl}\n isExternal\n />\n </LogoGroupItem>\n <LogoGroupSeparator />\n <LogoGroupItem justify='start'>\n <ApplicationLogo />\n </LogoGroupItem>\n </LogoGroup>\n )}\n {/* only OAuth app has an avatar */}\n {oauthApplicationLogoUrl && !logoImageUrl && (\n <LogoGroup>\n <Box sx={{ position: 'relative' }}>\n <ApplicationLogo\n src={oauthApplicationLogoUrl}\n alt={oauthApplicationName}\n href={oauthApplicationUrl}\n isExternal\n />\n <LogoGroupIcon\n size='sm'\n sx={t => ({\n position: 'absolute',\n bottom: `calc(${t.space.$3} * -1)`,\n insetInlineEnd: `calc(${t.space.$3} * -1)`,\n })}\n />\n </Box>\n </LogoGroup>\n )}\n {/* only Clerk application has an avatar */}\n {!oauthApplicationLogoUrl && logoImageUrl && (\n <LogoGroup>\n <LogoGroupItem justify='end'>\n <LogoGroupIcon />\n </LogoGroupItem>\n <LogoGroupSeparator />\n <LogoGroupItem justify='start'>\n <ApplicationLogo />\n </LogoGroupItem>\n </LogoGroup>\n )}\n {/* no avatars */}\n {!oauthApplicationLogoUrl && !logoImageUrl && (\n <LogoGroup>\n <LogoGroupIcon />\n </LogoGroup>\n )}\n <Header.Title localizationKey={oauthApplicationName} />\n <Header.Subtitle\n localizationKey={localizationKeys('oauthConsent.subtitle', {\n applicationName,\n identifier: primaryIdentifier || '',\n })}\n />\n </Header.Root>\n {ctx.enableOrgSelection && orgOptions.length > 0 && effectiveOrg && (\n <OrgSelect\n options={orgOptions}\n value={effectiveOrg}\n onChange={setSelectedOrg}\n hasMore={userMemberships.hasNextPage}\n onLoadMore={userMemberships.fetchNext}\n />\n )}\n <ListGroup>\n <ListGroupHeader>\n <ListGroupHeaderTitle\n localizationKey={localizationKeys('oauthConsent.scopeList.title', {\n applicationName: oauthApplicationName,\n })}\n />\n </ListGroupHeader>\n <ListGroupContent>\n {displayedScopes.map(item => (\n <ListGroupItem key={item.scope}>\n <ListGroupItemLabel>{item.description || item.scope || ''}</ListGroupItemLabel>\n </ListGroupItem>\n ))}\n </ListGroupContent>\n </ListGroup>\n <Alert colorScheme='warning'>\n <Text\n colorScheme='warning'\n variant='caption'\n >\n <InlineAction\n text={t(\n localizationKeys('oauthConsent.warning', {\n applicationName: oauthApplicationName || applicationName,\n domainAction,\n }),\n )}\n actionText={domainAction}\n onClick={() => setIsUriModalOpen(true)}\n tooltipText={viewFullUrlText}\n />\n </Text>\n </Alert>\n <Grid\n columns={2}\n gap={3}\n >\n <Button\n type='submit'\n name='consented'\n value='false'\n colorScheme='secondary'\n variant='outline'\n localizationKey={localizationKeys('oauthConsent.action__deny')}\n />\n <Button\n type='submit'\n name='consented'\n value='true'\n localizationKey={localizationKeys('oauthConsent.action__allow')}\n />\n <Text\n sx={{ gridColumn: 'span 2' }}\n colorScheme='secondary'\n variant='caption'\n >\n <InlineAction\n text={t(localizationKeys('oauthConsent.redirectNotice', { domainAction }))}\n actionText={domainAction}\n onClick={() => setIsUriModalOpen(true)}\n tooltipText={viewFullUrlText}\n />\n {hasOfflineAccess && t(localizationKeys('oauthConsent.offlineAccessNotice'))}\n </Text>\n </Grid>\n </Card.Content>\n <Card.Footer />\n </Card.Root>\n {!hasContextCallbacks &&\n forwardedParams.map(([key, value]) => (\n <input\n key={key}\n type='hidden'\n name={key}\n value={value}\n />\n ))}\n {!hasContextCallbacks && ctx.enableOrgSelection && effectiveOrg && (\n <input\n type='hidden'\n name='organization_id'\n value={effectiveOrg}\n />\n )}\n </form>\n <RedirectUriModal\n isOpen={isUriModalOpen}\n onOpen={() => setIsUriModalOpen(true)}\n onClose={() => setIsUriModalOpen(false)}\n redirectUri={redirectUrl}\n oauthApplicationName={oauthApplicationName}\n />\n </>\n );\n}\n\ntype RedirectUriModalProps = {\n onOpen: () => void;\n onClose: () => void;\n isOpen: boolean;\n redirectUri: string;\n oauthApplicationName: string;\n};\n\nfunction RedirectUriModal({ onOpen, onClose, isOpen, redirectUri, oauthApplicationName }: RedirectUriModalProps) {\n if (!isOpen) {\n return null;\n }\n\n return (\n <Modal\n handleOpen={onOpen}\n handleClose={onClose}\n >\n <Card.Root>\n <Card.Content>\n <Header.Root>\n <Header.Title localizationKey={localizationKeys('oauthConsent.redirectUriModal.title')} />\n <Header.Subtitle\n localizationKey={localizationKeys('oauthConsent.redirectUriModal.subtitle', {\n applicationName: oauthApplicationName,\n })}\n />\n </Header.Root>\n <Textarea\n style={{ maxHeight: 'none' }}\n cols={50}\n rows={6}\n defaultValue={redirectUri}\n readOnly\n />\n </Card.Content>\n </Card.Root>\n </Modal>\n );\n}\n\nconst AuthenticatedRoutes = withCoreUserGuard(withCardStateProvider(_OAuthConsent));\n\nconst OAuthConsentInternal = () => {\n return (\n <Flow.Root flow='oauthConsent'>\n <Flow.Part>\n <Switch>\n <Route>\n <AuthenticatedRoutes />\n </Route>\n </Switch>\n </Flow.Part>\n </Flow.Root>\n );\n};\n\nexport const OAuthConsent = OAuthConsentInternal;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"OAuthConsent.js","names":["t"],"sources":["../../../../src/components/OAuthConsent/OAuthConsent.tsx"],"sourcesContent":["import { useClerk, useOAuthConsent, useUser } from '@clerk/shared/react';\nimport { useState } from 'react';\n\nimport { useEnvironment, useOAuthConsentContext, withCoreUserGuard } from '@/ui/contexts';\nimport { Box, Button, Flow, Grid, localizationKeys, Text, useLocalizations } from '@/ui/customizables';\nimport { ApplicationLogo } from '@/ui/elements/ApplicationLogo';\nimport { Card } from '@/ui/elements/Card';\nimport { withCardStateProvider } from '@/ui/elements/contexts';\nimport { Header } from '@/ui/elements/Header';\nimport { LoadingCardContainer } from '@/ui/elements/LoadingCard';\nimport { Modal } from '@/ui/elements/Modal';\nimport { Alert, Textarea } from '@/ui/primitives';\nimport { Route, Switch } from '@/ui/router';\n\nimport { InlineAction } from './InlineAction';\nimport {\n ListGroup,\n ListGroupContent,\n ListGroupHeader,\n ListGroupHeaderTitle,\n ListGroupItem,\n ListGroupItemLabel,\n} from './ListGroup';\nimport { LogoGroup, LogoGroupIcon, LogoGroupItem, LogoGroupSeparator } from './LogoGroup';\nimport { OrgSelect } from './OrgSelect';\nimport { getForwardedParams, getOAuthConsentFromSearch, getRedirectDisplay, getRedirectUriFromSearch } from './utils';\n\nconst OFFLINE_ACCESS_SCOPE = 'offline_access';\n\nfunction _OAuthConsent() {\n const ctx = useOAuthConsentContext();\n const clerk = useClerk();\n const { user } = useUser();\n const {\n displayConfig: { applicationName, logoImageUrl },\n organizationSettings,\n } = useEnvironment();\n const [isUriModalOpen, setIsUriModalOpen] = useState(false);\n\n const orgSelectionEnabled = !!(ctx.enableOrgSelection && organizationSettings.enabled);\n const orgOptions = orgSelectionEnabled\n ? (user?.organizationMemberships ?? []).map(m => ({\n value: m.organization.id,\n label: m.organization.name,\n logoUrl: m.organization.imageUrl,\n }))\n : [];\n\n const [selectedOrg, setSelectedOrg] = useState<string | null>(null);\n const effectiveOrg = selectedOrg ?? orgOptions[0]?.value ?? null;\n\n // onAllow and onDeny are always provided as a pair by the accounts portal.\n const hasContextCallbacks = Boolean(ctx.onAllow || ctx.onDeny);\n\n // Resolve oauthClientId and scope once: context overrides URL fallback.\n const fromUrl = getOAuthConsentFromSearch();\n const oauthClientId = ctx.oauthClientId ?? fromUrl.oauthClientId;\n const scope = ctx.scope ?? fromUrl.scope;\n\n // Public path: fetch via hook. Disabled on the accounts portal path\n // (which already has all data via context) to avoid a wasted FAPI request.\n const { data, isLoading, error } = useOAuthConsent({\n oauthClientId,\n scope,\n // TODO: Remove this once account portal is refactored to use this component\n enabled: !hasContextCallbacks,\n });\n\n // Hook returns camelCase `requiresConsent`; the render logic uses snake_case.\n const mappedHookScopes = data?.scopes?.map(s => ({\n scope: s.scope,\n description: s.description,\n requires_consent: s.requiresConsent,\n }));\n\n // Context (accounts portal path) wins over hook data (public path).\n const scopes = ctx.scopes ?? mappedHookScopes ?? [];\n const oauthApplicationName = ctx.oauthApplicationName ?? data?.oauthApplicationName ?? '';\n const oauthApplicationLogoUrl = ctx.oauthApplicationLogoUrl ?? data?.oauthApplicationLogoUrl;\n const oauthApplicationUrl = ctx.oauthApplicationUrl ?? data?.oauthApplicationUrl;\n const redirectUrl = ctx.redirectUrl ?? getRedirectUriFromSearch();\n\n const { t } = useLocalizations();\n const domainAction = getRedirectDisplay(redirectUrl);\n const viewFullUrlText = t(localizationKeys('oauthConsent.viewFullUrl'));\n\n // Error states only apply to the public flow.\n if (!hasContextCallbacks) {\n const errorMessage = !oauthClientId\n ? 'The client ID is missing.'\n : !redirectUrl\n ? 'The redirect URI is missing.'\n : error\n ? (error.message ?? 'Failed to load consent information.')\n : undefined;\n\n if (errorMessage) {\n return (\n <Card.Root>\n <Card.Content>\n <Card.Alert>{errorMessage}</Card.Alert>\n </Card.Content>\n <Card.Footer />\n </Card.Root>\n );\n }\n\n if (isLoading) {\n return (\n <Card.Root>\n <Card.Content>\n <LoadingCardContainer />\n </Card.Content>\n <Card.Footer />\n </Card.Root>\n );\n }\n }\n\n const actionUrl = clerk.oauthApplication.buildConsentActionUrl({ clientId: oauthClientId });\n const forwardedParams = getForwardedParams();\n\n // Accounts portal path delegates to context callbacks; public path lets the form submit natively.\n const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {\n if (!hasContextCallbacks) {\n return;\n }\n e.preventDefault();\n const submitter = (e.nativeEvent as SubmitEvent).submitter as HTMLButtonElement | null;\n if (submitter?.value === 'true') {\n ctx.onAllow?.();\n } else {\n ctx.onDeny?.();\n }\n };\n\n const primaryIdentifier = user?.primaryEmailAddress?.emailAddress || user?.primaryPhoneNumber?.phoneNumber;\n\n const displayedScopes = scopes.filter(item => item.scope !== OFFLINE_ACCESS_SCOPE);\n const hasOfflineAccess = scopes.some(item => item.scope === OFFLINE_ACCESS_SCOPE);\n\n return (\n <>\n <form\n method='POST'\n action={actionUrl}\n onSubmit={handleSubmit}\n >\n <Card.Root>\n <Card.Content>\n <Header.Root>\n {/* both have avatars */}\n {oauthApplicationLogoUrl && logoImageUrl && (\n <LogoGroup>\n <LogoGroupItem justify='end'>\n <ApplicationLogo\n src={oauthApplicationLogoUrl}\n alt={oauthApplicationName}\n href={oauthApplicationUrl}\n isExternal\n />\n </LogoGroupItem>\n <LogoGroupSeparator />\n <LogoGroupItem justify='start'>\n <ApplicationLogo />\n </LogoGroupItem>\n </LogoGroup>\n )}\n {/* only OAuth app has an avatar */}\n {oauthApplicationLogoUrl && !logoImageUrl && (\n <LogoGroup>\n <Box sx={{ position: 'relative' }}>\n <ApplicationLogo\n src={oauthApplicationLogoUrl}\n alt={oauthApplicationName}\n href={oauthApplicationUrl}\n isExternal\n />\n <LogoGroupIcon\n size='sm'\n sx={t => ({\n position: 'absolute',\n bottom: `calc(${t.space.$3} * -1)`,\n insetInlineEnd: `calc(${t.space.$3} * -1)`,\n })}\n />\n </Box>\n </LogoGroup>\n )}\n {/* only Clerk application has an avatar */}\n {!oauthApplicationLogoUrl && logoImageUrl && (\n <LogoGroup>\n <LogoGroupItem justify='end'>\n <LogoGroupIcon />\n </LogoGroupItem>\n <LogoGroupSeparator />\n <LogoGroupItem justify='start'>\n <ApplicationLogo />\n </LogoGroupItem>\n </LogoGroup>\n )}\n {/* no avatars */}\n {!oauthApplicationLogoUrl && !logoImageUrl && (\n <LogoGroup>\n <LogoGroupIcon />\n </LogoGroup>\n )}\n <Header.Title localizationKey={oauthApplicationName} />\n <Header.Subtitle\n localizationKey={localizationKeys('oauthConsent.subtitle', {\n applicationName,\n identifier: primaryIdentifier || '',\n })}\n />\n </Header.Root>\n {orgSelectionEnabled && orgOptions.length > 0 && effectiveOrg && (\n <OrgSelect\n options={orgOptions}\n value={effectiveOrg}\n onChange={setSelectedOrg}\n />\n )}\n <ListGroup>\n <ListGroupHeader>\n <ListGroupHeaderTitle\n localizationKey={localizationKeys('oauthConsent.scopeList.title', {\n applicationName: oauthApplicationName,\n })}\n />\n </ListGroupHeader>\n <ListGroupContent>\n {displayedScopes.map(item => (\n <ListGroupItem key={item.scope}>\n <ListGroupItemLabel>{item.description || item.scope || ''}</ListGroupItemLabel>\n </ListGroupItem>\n ))}\n </ListGroupContent>\n </ListGroup>\n <Alert colorScheme='warning'>\n <Text\n colorScheme='warning'\n variant='caption'\n >\n <InlineAction\n text={t(\n localizationKeys('oauthConsent.warning', {\n applicationName: oauthApplicationName || applicationName,\n domainAction,\n }),\n )}\n actionText={domainAction}\n onClick={() => setIsUriModalOpen(true)}\n tooltipText={viewFullUrlText}\n />\n </Text>\n </Alert>\n <Grid\n columns={2}\n gap={3}\n >\n <Button\n type='submit'\n name='consented'\n value='false'\n colorScheme='secondary'\n variant='outline'\n localizationKey={localizationKeys('oauthConsent.action__deny')}\n />\n <Button\n type='submit'\n name='consented'\n value='true'\n localizationKey={localizationKeys('oauthConsent.action__allow')}\n />\n <Text\n sx={{ gridColumn: 'span 2' }}\n colorScheme='secondary'\n variant='caption'\n >\n <InlineAction\n text={t(localizationKeys('oauthConsent.redirectNotice', { domainAction }))}\n actionText={domainAction}\n onClick={() => setIsUriModalOpen(true)}\n tooltipText={viewFullUrlText}\n />\n {hasOfflineAccess && t(localizationKeys('oauthConsent.offlineAccessNotice'))}\n </Text>\n </Grid>\n </Card.Content>\n <Card.Footer />\n </Card.Root>\n {!hasContextCallbacks &&\n forwardedParams.map(([key, value]) => (\n <input\n key={key}\n type='hidden'\n name={key}\n value={value}\n />\n ))}\n {!hasContextCallbacks && orgSelectionEnabled && effectiveOrg && (\n <input\n type='hidden'\n name='organization_id'\n value={effectiveOrg}\n />\n )}\n </form>\n <RedirectUriModal\n isOpen={isUriModalOpen}\n onOpen={() => setIsUriModalOpen(true)}\n onClose={() => setIsUriModalOpen(false)}\n redirectUri={redirectUrl}\n oauthApplicationName={oauthApplicationName}\n />\n </>\n );\n}\n\ntype RedirectUriModalProps = {\n onOpen: () => void;\n onClose: () => void;\n isOpen: boolean;\n redirectUri: string;\n oauthApplicationName: string;\n};\n\nfunction RedirectUriModal({ onOpen, onClose, isOpen, redirectUri, oauthApplicationName }: RedirectUriModalProps) {\n if (!isOpen) {\n return null;\n }\n\n return (\n <Modal\n handleOpen={onOpen}\n handleClose={onClose}\n >\n <Card.Root>\n <Card.Content>\n <Header.Root>\n <Header.Title localizationKey={localizationKeys('oauthConsent.redirectUriModal.title')} />\n <Header.Subtitle\n localizationKey={localizationKeys('oauthConsent.redirectUriModal.subtitle', {\n applicationName: oauthApplicationName,\n })}\n />\n </Header.Root>\n <Textarea\n style={{ maxHeight: 'none' }}\n cols={50}\n rows={6}\n defaultValue={redirectUri}\n readOnly\n />\n </Card.Content>\n </Card.Root>\n </Modal>\n );\n}\n\nconst AuthenticatedRoutes = withCoreUserGuard(withCardStateProvider(_OAuthConsent));\n\nconst OAuthConsentInternal = () => {\n return (\n <Flow.Root flow='oauthConsent'>\n <Flow.Part>\n <Switch>\n <Route>\n <AuthenticatedRoutes />\n </Route>\n </Switch>\n </Flow.Part>\n </Flow.Root>\n );\n};\n\nexport const OAuthConsent = OAuthConsentInternal;\n"],"mappings":"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"}
|
|
@@ -1,22 +1,14 @@
|
|
|
1
|
-
import { useInView } from "../../hooks/useInView.js";
|
|
2
1
|
import check_default from "../../icons/check.js";
|
|
3
2
|
import { common } from "../../styledSystem/common.js";
|
|
4
3
|
import { Box, Icon, Image, Text } from "../../customizables/index.js";
|
|
5
|
-
import { InfiniteListSpinner } from "../../common/InfiniteListSpinner.js";
|
|
6
4
|
import { Select, SelectButton, SelectOptionList } from "../../elements/Select.js";
|
|
7
5
|
import { useRef } from "react";
|
|
8
6
|
import { jsx, jsxs } from "@emotion/react/jsx-runtime";
|
|
9
7
|
|
|
10
8
|
//#region src/components/OAuthConsent/OrgSelect.tsx
|
|
11
|
-
function OrgSelect({ options, value, onChange
|
|
9
|
+
function OrgSelect({ options, value, onChange }) {
|
|
12
10
|
const buttonRef = useRef(null);
|
|
13
11
|
const selected = options.find((option) => option.value === value);
|
|
14
|
-
const { ref: loadMoreRef } = useInView({
|
|
15
|
-
threshold: 0,
|
|
16
|
-
onChange: (inView) => {
|
|
17
|
-
if (inView && hasMore) onLoadMore?.();
|
|
18
|
-
}
|
|
19
|
-
});
|
|
20
12
|
return /* @__PURE__ */ jsxs(Select, {
|
|
21
13
|
options,
|
|
22
14
|
value,
|
|
@@ -92,10 +84,7 @@ function OrgSelect({ options, value, onChange, hasMore, onLoadMore }) {
|
|
|
92
84
|
},
|
|
93
85
|
children: selected?.label || "Select an option"
|
|
94
86
|
})]
|
|
95
|
-
}), /* @__PURE__ */ jsx(SelectOptionList, {
|
|
96
|
-
footer: hasMore ? /* @__PURE__ */ jsx(InfiniteListSpinner, { ref: loadMoreRef }) : null,
|
|
97
|
-
onReachEnd: hasMore ? onLoadMore : void 0
|
|
98
|
-
})]
|
|
87
|
+
}), /* @__PURE__ */ jsx(SelectOptionList, {})]
|
|
99
88
|
});
|
|
100
89
|
}
|
|
101
90
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OrgSelect.js","names":["Check"],"sources":["../../../../src/components/OAuthConsent/OrgSelect.tsx"],"sourcesContent":["import { useRef } from 'react';\n\nimport {
|
|
1
|
+
{"version":3,"file":"OrgSelect.js","names":["Check"],"sources":["../../../../src/components/OAuthConsent/OrgSelect.tsx"],"sourcesContent":["import { useRef } from 'react';\n\nimport { Box, Icon, Image, Text } from '@/ui/customizables';\nimport { Select, SelectButton, SelectOptionList } from '@/ui/elements/Select';\nimport { Check } from '@/ui/icons';\nimport { common } from '@/ui/styledSystem';\n\nexport type OrgOption = {\n value: string;\n label: string;\n logoUrl: string;\n};\n\ntype OrgSelectProps = {\n options: OrgOption[];\n value: string | null;\n onChange: (value: string) => void;\n};\n\nexport function OrgSelect({ options, value, onChange }: OrgSelectProps) {\n const buttonRef = useRef<HTMLButtonElement>(null);\n const selected = options.find(option => option.value === value);\n\n return (\n <Select\n options={options}\n value={value}\n onChange={option => onChange(option.value)}\n referenceElement={buttonRef}\n renderOption={(option, _index, isSelected) => (\n <Box\n as='span'\n sx={theme => ({\n width: '100%',\n display: 'grid',\n gridTemplateColumns: `${theme.sizes.$5} 1fr ${theme.sizes.$3}`,\n columnGap: theme.space.$2,\n paddingInlineStart: theme.space.$1,\n paddingInlineEnd: theme.space.$1x5,\n paddingBlock: theme.space.$1,\n alignItems: 'center',\n borderRadius: theme.radii.$md,\n '&:hover, &[data-focused=\"true\"]': {\n background: common.mutedBackground(theme),\n },\n })}\n >\n <Image\n src={option.logoUrl}\n alt={option.label}\n sx={theme => ({\n width: theme.sizes.$5,\n height: theme.sizes.$5,\n objectFit: 'contain',\n flexShrink: 0,\n borderRadius: theme.radii.$md,\n })}\n />\n <Text\n sx={{ flex: 1, textAlign: 'start', minWidth: 0, maxInlineSize: '200px' }}\n truncate\n as='span'\n variant='subtitle'\n >\n {option.label}\n </Text>\n {isSelected && (\n <Icon\n icon={Check}\n size='sm'\n sx={theme => ({ color: theme.colors.$primary500 })}\n />\n )}\n </Box>\n )}\n >\n <SelectButton\n ref={buttonRef}\n aria-haspopup='listbox'\n sx={theme => ({\n paddingInline: theme.space.$3,\n })}\n >\n <Image\n src={selected?.logoUrl || ''}\n alt={selected?.label || ''}\n sx={theme => ({\n width: theme.sizes.$5,\n height: theme.sizes.$5,\n borderRadius: theme.radii.$md,\n objectFit: 'contain',\n flexShrink: 0,\n })}\n />\n <Text\n colorScheme='body'\n as='span'\n truncate\n sx={{ flex: 1, minWidth: 0, textAlign: 'start' }}\n >\n {selected?.label || 'Select an option'}\n </Text>\n </SelectButton>\n <SelectOptionList />\n </Select>\n );\n}\n"],"mappings":";;;;;;;;AAmBA,SAAgB,UAAU,EAAE,SAAS,OAAO,YAA4B;CACtE,MAAM,YAAY,OAA0B,KAAK;CACjD,MAAM,WAAW,QAAQ,MAAK,WAAU,OAAO,UAAU,MAAM;AAE/D,QACE,qBAAC;EACU;EACF;EACP,WAAU,WAAU,SAAS,OAAO,MAAM;EAC1C,kBAAkB;EAClB,eAAe,QAAQ,QAAQ,eAC7B,qBAAC;GACC,IAAG;GACH,KAAI,WAAU;IACZ,OAAO;IACP,SAAS;IACT,qBAAqB,GAAG,MAAM,MAAM,GAAG,OAAO,MAAM,MAAM;IAC1D,WAAW,MAAM,MAAM;IACvB,oBAAoB,MAAM,MAAM;IAChC,kBAAkB,MAAM,MAAM;IAC9B,cAAc,MAAM,MAAM;IAC1B,YAAY;IACZ,cAAc,MAAM,MAAM;IAC1B,qCAAmC,EACjC,YAAY,OAAO,gBAAgB,MAAM,EAC1C;IACF;;IAED,oBAAC;KACC,KAAK,OAAO;KACZ,KAAK,OAAO;KACZ,KAAI,WAAU;MACZ,OAAO,MAAM,MAAM;MACnB,QAAQ,MAAM,MAAM;MACpB,WAAW;MACX,YAAY;MACZ,cAAc,MAAM,MAAM;MAC3B;MACD;IACF,oBAAC;KACC,IAAI;MAAE,MAAM;MAAG,WAAW;MAAS,UAAU;MAAG,eAAe;MAAS;KACxE;KACA,IAAG;KACH,SAAQ;eAEP,OAAO;MACH;IACN,cACC,oBAAC;KACC,MAAMA;KACN,MAAK;KACL,KAAI,WAAU,EAAE,OAAO,MAAM,OAAO,aAAa;MACjD;;IAEA;aAGR,qBAAC;GACC,KAAK;GACL,iBAAc;GACd,KAAI,WAAU,EACZ,eAAe,MAAM,MAAM,IAC5B;cAED,oBAAC;IACC,KAAK,UAAU,WAAW;IAC1B,KAAK,UAAU,SAAS;IACxB,KAAI,WAAU;KACZ,OAAO,MAAM,MAAM;KACnB,QAAQ,MAAM,MAAM;KACpB,cAAc,MAAM,MAAM;KAC1B,WAAW;KACX,YAAY;KACb;KACD,EACF,oBAAC;IACC,aAAY;IACZ,IAAG;IACH;IACA,IAAI;KAAE,MAAM;KAAG,UAAU;KAAG,WAAW;KAAS;cAE/C,UAAU,SAAS;KACf;IACM,EACf,oBAAC,qBAAmB;GACb"}
|
package/dist/no-rhc/index.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";(globalThis.webpackChunk_clerk_ui=globalThis.webpackChunk_clerk_ui||[]).push([["591"],{68569:function(e,n,o){o.r(n),o.d(n,{OAuthConsent:()=>P}),o(88711),o(19161),o(22239),o(95055),o(89305);var t=o(61564),i=o(90231),l=o(35074),r=o(72121),a=o(97697),c=o(43264),s=o(10078),d=o(22861),u=o(18272),p=o(44607),h=o(22037),m=o(23707),f=o(63269),g=o(76153),Y=o(56980),b=o(86705),$=o(92349),y=o(2204),v=o(80212),x=o(42265),C=o(96455);function k(e){let{text:n,actionText:o,onClick:i,tooltipText:l}=e,r=n.indexOf(o);if(-1===r)return(0,t.Y)(t.FK,{children:n});let a=n.slice(0,r),c=n.slice(r+o.length),s="",d="";a.endsWith("(")&&(a=a.slice(0,-1),s="("),c.startsWith(")")&&(c=c.slice(1),d=")");let p=(0,t.FD)(C.m_.Root,{children:[(0,t.Y)(C.m_.Trigger,{children:(0,t.Y)(u.EY,{as:"span",role:"button",tabIndex:0,"aria-label":l,variant:"caption",onClick:i,onKeyDown:e=>{("Enter"===e.key||" "===e.key)&&(e.preventDefault(),i())},sx:e=>({textDecoration:"underline",textDecorationStyle:"dotted",cursor:"pointer",outline:"none",display:"inline-block","&:focus-visible":{outline:"2px solid",outlineColor:e.colors.$colorRing}}),children:o})}),(0,t.Y)(C.m_.Content,{text:l})]});return(0,t.FD)(t.FK,{children:[a,s||d?(0,t.FD)(u.EY,{as:"span",sx:{whiteSpace:"nowrap"},children:[s,p,d]}):p,c]})}var z=o(58920),D=o(41464),F=o(14620);function w(e){let{children:n,sx:o,...i}=e;return(0,t.Y)(u.az,{...i,sx:[e=>({textAlign:"start",borderWidth:e.borderWidths.$normal,borderStyle:e.borderStyles.$solid,borderColor:e.colors.$borderAlpha100,borderRadius:e.radii.$lg,overflow:"hidden"}),o],elementDescriptor:z.$z.listGroup,children:n})}function S(e){let{children:n,sx:o,...i}=e;return(0,t.Y)(u.az,{...i,sx:[e=>({padding:e.space.$3,background:D.s.mergedColorsBackground(F.T.setAlpha(e.colors.$colorBackground,1),e.colors.$neutralAlpha50)}),o],elementDescriptor:z.$z.listGroupHeader,children:n})}function A(e){return(0,t.Y)(u.EY,{...e,variant:"subtitle",elementDescriptor:z.$z.listGroupHeaderTitle})}function G(e){let{children:n,sx:o,...i}=e;return(0,t.Y)(u.az,{...i,as:"ul",sx:[e=>({margin:e.sizes.$none,padding:e.sizes.$none,maxBlockSize:"10.9375rem",backgroundColor:e.colors.$colorBackground,overflowY:"auto",...D.s.unstyledScrollbar(e),"--fade-distance":"2.5rem","&::before, &::after":{content:'""',display:"block",position:"sticky",insetInline:0,blockSize:"var(--fade-distance)",pointerEvents:"none",zIndex:1,opacity:0},"&::before":{insetBlockStart:0,marginBlockEnd:"calc(var(--fade-distance) * -1)",background:"linear-gradient(to bottom, ".concat(e.colors.$colorBackground,", transparent)")},"&::after":{insetBlockEnd:0,marginBlockStart:"calc(var(--fade-distance) * -1)",background:"linear-gradient(to top, ".concat(e.colors.$colorBackground,", transparent)")},"@keyframes list-fade-top":{from:{opacity:0},to:{opacity:1}},"@keyframes list-fade-bottom":{from:{opacity:1},to:{opacity:0}},"@supports (animation-timeline: scroll())":{"&::before":{animationName:"list-fade-top",animationDuration:"auto",animationTimingFunction:"linear",animationFillMode:"both",animationTimeline:"scroll(y)",animationRange:"0 var(--fade-distance)"},"&::after":{animationName:"list-fade-bottom",animationDuration:"auto",animationTimingFunction:"linear",animationFillMode:"both",animationTimeline:"scroll(y)",animationRange:"calc(100% - var(--fade-distance)) 100%"}}}),o],elementDescriptor:z.$z.listGroupContent,children:n})}function I(e){let{children:n,sx:o,...i}=e;return(0,t.Y)(u.az,{...i,as:"li",sx:[e=>({display:"flex",alignItems:"baseline",paddingInline:e.space.$3,paddingBlock:e.space.$2,borderTopWidth:e.borderWidths.$normal,borderTopStyle:e.borderStyles.$solid,borderTopColor:e.colors.$borderAlpha100,"&::before":{content:'""',display:"inline-block",width:e.space.$1,height:e.space.$1,background:e.colors.$colorMutedForeground,borderRadius:e.radii.$circle,transform:"translateY(-0.1875rem)",marginInlineEnd:e.space.$2,flexShrink:0}}),o],elementDescriptor:z.$z.listGroupItem,children:n})}function T(e){return(0,t.Y)(u.EY,{...e,variant:"subtitle",elementDescriptor:z.$z.listGroupItemLabel})}var R=o(94380);function E(e){let{children:n}=e;return(0,t.Y)(u.so,{justify:"center",align:"center",gap:4,sx:e=>({marginBlockEnd:e.space.$6}),elementDescriptor:z.$z.logoGroup,children:n})}function U(e){let{children:n,sx:o,...i}=e;return(0,t.Y)(u.so,{...i,sx:[{flex:1},o],elementDescriptor:z.$z.logoGroupItem,children:n})}function _(e){let{size:n="md",sx:o}=e,i=e=>{let o="sm"===n?e.space.$6:e.space.$12;return{width:o,height:o}};return(0,t.Y)(u.az,{sx:e=>[{background:D.s.mergedColorsBackground(F.T.setAlpha(e.colors.$colorBackground,1),e.colors.$neutralAlpha50),borderRadius:e.radii.$circle,borderWidth:e.borderWidths.$normal,borderStyle:e.borderStyles.$solid,borderColor:e.colors.$borderAlpha100,display:"flex",alignItems:"center",justifyContent:"center"},i,o],elementDescriptor:z.$z.logoGroupIcon,children:(0,t.Y)(u.In,{icon:R.A,sx:e=>({color:e.colors.$primary500})})})}function B(){return(0,t.Y)(u.az,{as:"svg",fill:"none",viewBox:"0 0 16 2",height:2,"aria-hidden":!0,sx:e=>({color:e.colors.$colorMutedForeground}),elementDescriptor:z.$z.logoGroupSeparator,children:(0,t.Y)("path",{stroke:"currentColor",strokeDasharray:"0.1 4",strokeLinecap:"round",strokeWidth:"2",d:"M1 1h14"})})}o(85074);var W=o(41586),N=o(92405);function O(e){let{options:n,value:o,onChange:i}=e,r=(0,l.useRef)(null),a=n.find(e=>e.value===o);return(0,t.FD)(W.l6,{options:n,value:o,onChange:e=>i(e.value),referenceElement:r,renderOption:(e,n,o)=>(0,t.FD)(u.az,{as:"span",sx:e=>({width:"100%",display:"grid",gridTemplateColumns:"".concat(e.sizes.$5," 1fr ").concat(e.sizes.$3),columnGap:e.space.$2,paddingInlineStart:e.space.$1,paddingInlineEnd:e.space.$1x5,paddingBlock:e.space.$1,alignItems:"center",borderRadius:e.radii.$md,'&:hover, &[data-focused="true"]':{background:D.s.mutedBackground(e)}}),children:[(0,t.Y)(u._V,{src:e.logoUrl,alt:e.label,sx:e=>({width:e.sizes.$5,height:e.sizes.$5,objectFit:"contain",flexShrink:0,borderRadius:e.radii.$md})}),(0,t.Y)(u.EY,{sx:{flex:1,textAlign:"start",minWidth:0,maxInlineSize:"200px"},truncate:!0,as:"span",variant:"subtitle",children:e.label}),o&&(0,t.Y)(u.In,{icon:N.A,size:"sm",sx:e=>({color:e.colors.$primary500})})]}),children:[(0,t.FD)(W.JC,{ref:r,"aria-haspopup":"listbox",sx:e=>({paddingInline:e.space.$3}),children:[(0,t.Y)(u._V,{src:(null==a?void 0:a.logoUrl)||"",alt:(null==a?void 0:a.label)||"",sx:e=>({width:e.sizes.$5,height:e.sizes.$5,borderRadius:e.radii.$md,objectFit:"contain",flexShrink:0})}),(0,t.Y)(u.EY,{colorScheme:"body",as:"span",truncate:!0,sx:{flex:1,minWidth:0,textAlign:"start"},children:(null==a?void 0:a.label)||"Select an option"})]}),(0,t.Y)(W.UL,{})]})}o(64178),o(60962),o(60486),o(25089),o(61244),o(77895),o(22501),o(30945);let Z=()=>"undefined"!=typeof window&&!!window.location,K=/^(\d{1,3}\.){3}\d{1,3}$/,L="offline_access";function M(e){let{onOpen:n,onClose:o,isOpen:i,redirectUri:l,oauthApplicationName:r}=e;return i?(0,t.Y)(b.Modal,{handleOpen:n,handleClose:o,children:(0,t.Y)(m.Z.Root,{children:(0,t.FD)(m.Z.Content,{children:[(0,t.FD)(g.Y.Root,{children:[(0,t.Y)(g.Y.Title,{localizationKey:(0,d.G)("oauthConsent.redirectUriModal.title")}),(0,t.Y)(g.Y.Subtitle,{localizationKey:(0,d.G)("oauthConsent.redirectUriModal.subtitle",{applicationName:r})})]}),(0,t.Y)(y.TM,{style:{maxHeight:"none"},cols:50,rows:6,defaultValue:l,readOnly:!0})]})})}):null}let j=(0,c.G)((0,f.dm)(function(){var e,n,o,c,p,f,b,y,v,x,C,z,D,F,R,W,N;let j=(0,r.W)(),P=(0,i.ho)(),{user:q}=(0,i.Jd)(),{displayConfig:{applicationName:H,logoImageUrl:V},organizationSettings:J}=(0,a.O)(),[Q,X]=(0,l.useState)(!1),ee=!!(j.enableOrgSelection&&J.enabled),en=ee?(null!=(p=null==q?void 0:q.organizationMemberships)?p:[]).map(e=>({value:e.organization.id,label:e.organization.name,logoUrl:e.organization.imageUrl})):[],[eo,et]=(0,l.useState)(null),ei=null!=(f=null!=eo?eo:null==(e=en[0])?void 0:e.value)?f:null,el=!!(j.onAllow||j.onDeny),er=function(){var e,n;if(!Z())return{oauthClientId:""};let o=new URLSearchParams(window.location.search),t=null!=(e=o.get("client_id"))?e:"",i=null!=(n=o.get("scope"))?n:void 0;return void 0!==i?{oauthClientId:t,scope:i}:{oauthClientId:t}}(),ea=null!=(b=j.oauthClientId)?b:er.oauthClientId,ec=null!=(y=j.scope)?y:er.scope,{data:es,isLoading:ed,error:eu}=(0,i.$U)({oauthClientId:ea,scope:ec,enabled:!el}),ep=null==es||null==(n=es.scopes)?void 0:n.map(e=>({scope:e.scope,description:e.description,requires_consent:e.requiresConsent})),eh=null!=(x=null!=(v=j.scopes)?v:ep)?x:[],em=null!=(z=null!=(C=j.oauthApplicationName)?C:null==es?void 0:es.oauthApplicationName)?z:"",ef=null!=(D=j.oauthApplicationLogoUrl)?D:null==es?void 0:es.oauthApplicationLogoUrl,eg=null!=(F=j.oauthApplicationUrl)?F:null==es?void 0:es.oauthApplicationUrl,eY=null!=(R=j.redirectUrl)?R:Z()&&null!=(N=new URL(window.location.href).searchParams.get("redirect_uri"))?N:"",{t:eb}=(0,s._)(),e$=function(e){let n;try{n=new URL(e).hostname}catch{return""}if(!n)return"";let o=n.startsWith("[")&&n.endsWith("]")?n.slice(1,-1):n;return K.test(o)?o:o.includes(":")?"[".concat(o,"]"):o.split(".").slice(-2).join(".")}(eY),ey=eb((0,d.G)("oauthConsent.viewFullUrl"));if(!el){let e=ea?eY?eu?null!=(W=eu.message)?W:"Failed to load consent information.":void 0:"The redirect URI is missing.":"The client ID is missing.";if(e)return(0,t.FD)(m.Z.Root,{children:[(0,t.Y)(m.Z.Content,{children:(0,t.Y)(m.Z.Alert,{children:e})}),(0,t.Y)(m.Z.Footer,{})]});if(ed)return(0,t.FD)(m.Z.Root,{children:[(0,t.Y)(m.Z.Content,{children:(0,t.Y)(Y.W,{})}),(0,t.Y)(m.Z.Footer,{})]})}let ev=P.oauthApplication.buildConsentActionUrl({clientId:ea}),ex=Z()?Array.from(new URLSearchParams(window.location.search).entries()):[],eC=(null==q||null==(o=q.primaryEmailAddress)?void 0:o.emailAddress)||(null==q||null==(c=q.primaryPhoneNumber)?void 0:c.phoneNumber),ek=eh.filter(e=>e.scope!==L),ez=eh.some(e=>e.scope===L);return(0,t.FD)(t.FK,{children:[(0,t.FD)("form",{method:"POST",action:ev,onSubmit:e=>{var n,o;if(!el)return;e.preventDefault();let t=e.nativeEvent.submitter;(null==t?void 0:t.value)==="true"?null==(n=j.onAllow)||n.call(j):null==(o=j.onDeny)||o.call(j)},children:[(0,t.FD)(m.Z.Root,{children:[(0,t.FD)(m.Z.Content,{children:[(0,t.FD)(g.Y.Root,{children:[ef&&V&&(0,t.FD)(E,{children:[(0,t.Y)(U,{justify:"end",children:(0,t.Y)(h.G,{src:ef,alt:em,href:eg,isExternal:!0})}),(0,t.Y)(B,{}),(0,t.Y)(U,{justify:"start",children:(0,t.Y)(h.G,{})})]}),ef&&!V&&(0,t.Y)(E,{children:(0,t.FD)(u.az,{sx:{position:"relative"},children:[(0,t.Y)(h.G,{src:ef,alt:em,href:eg,isExternal:!0}),(0,t.Y)(_,{size:"sm",sx:e=>({position:"absolute",bottom:"calc(".concat(e.space.$3," * -1)"),insetInlineEnd:"calc(".concat(e.space.$3," * -1)")})})]})}),!ef&&V&&(0,t.FD)(E,{children:[(0,t.Y)(U,{justify:"end",children:(0,t.Y)(_,{})}),(0,t.Y)(B,{}),(0,t.Y)(U,{justify:"start",children:(0,t.Y)(h.G,{})})]}),!ef&&!V&&(0,t.Y)(E,{children:(0,t.Y)(_,{})}),(0,t.Y)(g.Y.Title,{localizationKey:em}),(0,t.Y)(g.Y.Subtitle,{localizationKey:(0,d.G)("oauthConsent.subtitle",{applicationName:H,identifier:eC||""})})]}),ee&&en.length>0&&ei&&(0,t.Y)(O,{options:en,value:ei,onChange:et}),(0,t.FD)(w,{children:[(0,t.Y)(S,{children:(0,t.Y)(A,{localizationKey:(0,d.G)("oauthConsent.scopeList.title",{applicationName:em})})}),(0,t.Y)(G,{children:ek.map(e=>(0,t.Y)(I,{children:(0,t.Y)(T,{children:e.description||e.scope||""})},e.scope))})]}),(0,t.Y)($.F,{colorScheme:"warning",children:(0,t.Y)(u.EY,{colorScheme:"warning",variant:"caption",children:(0,t.Y)(k,{text:eb((0,d.G)("oauthConsent.warning",{applicationName:em||H,domainAction:e$})),actionText:e$,onClick:()=>X(!0),tooltipText:ey})})}),(0,t.FD)(u.xA,{columns:2,gap:3,children:[(0,t.Y)(u.$n,{type:"submit",name:"consented",value:"false",colorScheme:"secondary",variant:"outline",localizationKey:(0,d.G)("oauthConsent.action__deny")}),(0,t.Y)(u.$n,{type:"submit",name:"consented",value:"true",localizationKey:(0,d.G)("oauthConsent.action__allow")}),(0,t.FD)(u.EY,{sx:{gridColumn:"span 2"},colorScheme:"secondary",variant:"caption",children:[(0,t.Y)(k,{text:eb((0,d.G)("oauthConsent.redirectNotice",{domainAction:e$})),actionText:e$,onClick:()=>X(!0),tooltipText:ey}),ez&&eb((0,d.G)("oauthConsent.offlineAccessNotice"))]})]})]}),(0,t.Y)(m.Z.Footer,{})]}),!el&&ex.map(e=>{let[n,o]=e;return(0,t.Y)("input",{type:"hidden",name:n,value:o},n)}),!el&&ee&&ei&&(0,t.Y)("input",{type:"hidden",name:"organization_id",value:ei})]}),(0,t.Y)(M,{isOpen:Q,onOpen:()=>X(!0),onClose:()=>X(!1),redirectUri:eY,oauthApplicationName:em})]})})),P=()=>(0,t.Y)(p.n.Root,{flow:"oauthConsent",children:(0,t.Y)(p.n.Part,{children:(0,t.Y)(v.d,{children:(0,t.Y)(x.q,{children:(0,t.Y)(j,{})})})})})},72121:function(e,n,o){o.d(n,{W:()=>l,n:()=>i}),o(98114);var t=o(35074);let i=(0,t.createContext)(null),l=()=>{let e=(0,t.useContext)(i);if(null===e)throw Error("Clerk: useOAuthConsentContext called outside of the mounted OAuthConsent component.");return e}}}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";(globalThis.webpackChunk_clerk_ui=globalThis.webpackChunk_clerk_ui||[]).push([["591"],{8569:function(e,n,o){o.r(n),o.d(n,{OAuthConsent:()=>P});var t=o(1564),i=o(4180),r=o(5074),a=o(2121),l=o(7697),c=o(3264),s=o(78),d=o(2861),u=o(8272),p=o(4607),h=o(2037),m=o(6088),f=o(3269),g=o(6153),Y=o(6980),b=o(6705),$=o(2349),y=o(2204),x=o(212),C=o(2265),k=o(6455);function v({text:e,actionText:n,onClick:o,tooltipText:i}){let r=e.indexOf(n);if(-1===r)return(0,t.Y)(t.FK,{children:e});let a=e.slice(0,r),l=e.slice(r+n.length),c="",s="";a.endsWith("(")&&(a=a.slice(0,-1),c="("),l.startsWith(")")&&(l=l.slice(1),s=")");let d=(0,t.FD)(k.m_.Root,{children:[(0,t.Y)(k.m_.Trigger,{children:(0,t.Y)(u.EY,{as:"span",role:"button",tabIndex:0,"aria-label":i,variant:"caption",onClick:o,onKeyDown:e=>{("Enter"===e.key||" "===e.key)&&(e.preventDefault(),o())},sx:e=>({textDecoration:"underline",textDecorationStyle:"dotted",cursor:"pointer",outline:"none",display:"inline-block","&:focus-visible":{outline:"2px solid",outlineColor:e.colors.$colorRing}}),children:n})}),(0,t.Y)(k.m_.Content,{text:i})]});return(0,t.FD)(t.FK,{children:[a,c||s?(0,t.FD)(u.EY,{as:"span",sx:{whiteSpace:"nowrap"},children:[c,d,s]}):d,l]})}var z=o(8920),D=o(1464),F=o(4620);function w({children:e,sx:n,...o}){return(0,t.Y)(u.az,{...o,sx:[e=>({textAlign:"start",borderWidth:e.borderWidths.$normal,borderStyle:e.borderStyles.$solid,borderColor:e.colors.$borderAlpha100,borderRadius:e.radii.$lg,overflow:"hidden"}),n],elementDescriptor:z.$z.listGroup,children:e})}function S({children:e,sx:n,...o}){return(0,t.Y)(u.az,{...o,sx:[e=>({padding:e.space.$3,background:D.s.mergedColorsBackground(F.T.setAlpha(e.colors.$colorBackground,1),e.colors.$neutralAlpha50)}),n],elementDescriptor:z.$z.listGroupHeader,children:e})}function A(e){return(0,t.Y)(u.EY,{...e,variant:"subtitle",elementDescriptor:z.$z.listGroupHeaderTitle})}function G({children:e,sx:n,...o}){return(0,t.Y)(u.az,{...o,as:"ul",sx:[e=>({margin:e.sizes.$none,padding:e.sizes.$none,maxBlockSize:"10.9375rem",backgroundColor:e.colors.$colorBackground,overflowY:"auto",...D.s.unstyledScrollbar(e),"--fade-distance":"2.5rem","&::before, &::after":{content:'""',display:"block",position:"sticky",insetInline:0,blockSize:"var(--fade-distance)",pointerEvents:"none",zIndex:1,opacity:0},"&::before":{insetBlockStart:0,marginBlockEnd:"calc(var(--fade-distance) * -1)",background:`linear-gradient(to bottom, ${e.colors.$colorBackground}, transparent)`},"&::after":{insetBlockEnd:0,marginBlockStart:"calc(var(--fade-distance) * -1)",background:`linear-gradient(to top, ${e.colors.$colorBackground}, transparent)`},"@keyframes list-fade-top":{from:{opacity:0},to:{opacity:1}},"@keyframes list-fade-bottom":{from:{opacity:1},to:{opacity:0}},"@supports (animation-timeline: scroll())":{"&::before":{animationName:"list-fade-top",animationDuration:"auto",animationTimingFunction:"linear",animationFillMode:"both",animationTimeline:"scroll(y)",animationRange:"0 var(--fade-distance)"},"&::after":{animationName:"list-fade-bottom",animationDuration:"auto",animationTimingFunction:"linear",animationFillMode:"both",animationTimeline:"scroll(y)",animationRange:"calc(100% - var(--fade-distance)) 100%"}}}),n],elementDescriptor:z.$z.listGroupContent,children:e})}function I({children:e,sx:n,...o}){return(0,t.Y)(u.az,{...o,as:"li",sx:[e=>({display:"flex",alignItems:"baseline",paddingInline:e.space.$3,paddingBlock:e.space.$2,borderTopWidth:e.borderWidths.$normal,borderTopStyle:e.borderStyles.$solid,borderTopColor:e.colors.$borderAlpha100,"&::before":{content:'""',display:"inline-block",width:e.space.$1,height:e.space.$1,background:e.colors.$colorMutedForeground,borderRadius:e.radii.$circle,transform:"translateY(-0.1875rem)",marginInlineEnd:e.space.$2,flexShrink:0}}),n],elementDescriptor:z.$z.listGroupItem,children:e})}function T(e){return(0,t.Y)(u.EY,{...e,variant:"subtitle",elementDescriptor:z.$z.listGroupItemLabel})}var R=o(4380);function E({children:e}){return(0,t.Y)(u.so,{justify:"center",align:"center",gap:4,sx:e=>({marginBlockEnd:e.space.$6}),elementDescriptor:z.$z.logoGroup,children:e})}function U({children:e,sx:n,...o}){return(0,t.Y)(u.so,{...o,sx:[{flex:1},n],elementDescriptor:z.$z.logoGroupItem,children:e})}function _({size:e="md",sx:n}){let o=n=>{let o="sm"===e?n.space.$6:n.space.$12;return{width:o,height:o}};return(0,t.Y)(u.az,{sx:e=>[{background:D.s.mergedColorsBackground(F.T.setAlpha(e.colors.$colorBackground,1),e.colors.$neutralAlpha50),borderRadius:e.radii.$circle,borderWidth:e.borderWidths.$normal,borderStyle:e.borderStyles.$solid,borderColor:e.colors.$borderAlpha100,display:"flex",alignItems:"center",justifyContent:"center"},o,n],elementDescriptor:z.$z.logoGroupIcon,children:(0,t.Y)(u.In,{icon:R.A,sx:e=>({color:e.colors.$primary500})})})}function B(){return(0,t.Y)(u.az,{as:"svg",fill:"none",viewBox:"0 0 16 2",height:2,"aria-hidden":!0,sx:e=>({color:e.colors.$colorMutedForeground}),elementDescriptor:z.$z.logoGroupSeparator,children:(0,t.Y)("path",{stroke:"currentColor",strokeDasharray:"0.1 4",strokeLinecap:"round",strokeWidth:"2",d:"M1 1h14"})})}var W=o(1586),N=o(2405);function O({options:e,value:n,onChange:o}){let i=(0,r.useRef)(null),a=e.find(e=>e.value===n);return(0,t.FD)(W.l6,{options:e,value:n,onChange:e=>o(e.value),referenceElement:i,renderOption:(e,n,o)=>(0,t.FD)(u.az,{as:"span",sx:e=>({width:"100%",display:"grid",gridTemplateColumns:`${e.sizes.$5} 1fr ${e.sizes.$3}`,columnGap:e.space.$2,paddingInlineStart:e.space.$1,paddingInlineEnd:e.space.$1x5,paddingBlock:e.space.$1,alignItems:"center",borderRadius:e.radii.$md,'&:hover, &[data-focused="true"]':{background:D.s.mutedBackground(e)}}),children:[(0,t.Y)(u._V,{src:e.logoUrl,alt:e.label,sx:e=>({width:e.sizes.$5,height:e.sizes.$5,objectFit:"contain",flexShrink:0,borderRadius:e.radii.$md})}),(0,t.Y)(u.EY,{sx:{flex:1,textAlign:"start",minWidth:0,maxInlineSize:"200px"},truncate:!0,as:"span",variant:"subtitle",children:e.label}),o&&(0,t.Y)(u.In,{icon:N.A,size:"sm",sx:e=>({color:e.colors.$primary500})})]}),children:[(0,t.FD)(W.JC,{ref:i,"aria-haspopup":"listbox",sx:e=>({paddingInline:e.space.$3}),children:[(0,t.Y)(u._V,{src:a?.logoUrl||"",alt:a?.label||"",sx:e=>({width:e.sizes.$5,height:e.sizes.$5,borderRadius:e.radii.$md,objectFit:"contain",flexShrink:0})}),(0,t.Y)(u.EY,{colorScheme:"body",as:"span",truncate:!0,sx:{flex:1,minWidth:0,textAlign:"start"},children:a?.label||"Select an option"})]}),(0,t.Y)(W.UL,{})]})}let Z=()=>"undefined"!=typeof window&&!!window.location,K=/^(\d{1,3}\.){3}\d{1,3}$/,L="offline_access";function M({onOpen:e,onClose:n,isOpen:o,redirectUri:i,oauthApplicationName:r}){return o?(0,t.Y)(b.Modal,{handleOpen:e,handleClose:n,children:(0,t.Y)(m.Z.Root,{children:(0,t.FD)(m.Z.Content,{children:[(0,t.FD)(g.Y.Root,{children:[(0,t.Y)(g.Y.Title,{localizationKey:(0,d.G)("oauthConsent.redirectUriModal.title")}),(0,t.Y)(g.Y.Subtitle,{localizationKey:(0,d.G)("oauthConsent.redirectUriModal.subtitle",{applicationName:r})})]}),(0,t.Y)(y.TM,{style:{maxHeight:"none"},cols:50,rows:6,defaultValue:i,readOnly:!0})]})})}):null}let j=(0,c.G)((0,f.dm)(function(){let e=(0,a.W)(),n=(0,i.ho)(),{user:o}=(0,i.Jd)(),{displayConfig:{applicationName:c,logoImageUrl:p},organizationSettings:f}=(0,l.O)(),[b,y]=(0,r.useState)(!1),x=!!(e.enableOrgSelection&&f.enabled),C=x?(o?.organizationMemberships??[]).map(e=>({value:e.organization.id,label:e.organization.name,logoUrl:e.organization.imageUrl})):[],[k,z]=(0,r.useState)(null),D=k??C[0]?.value??null,F=!!(e.onAllow||e.onDeny),R=function(){if(!Z())return{oauthClientId:""};let e=new URLSearchParams(window.location.search),n=e.get("client_id")??"",o=e.get("scope")??void 0;return void 0!==o?{oauthClientId:n,scope:o}:{oauthClientId:n}}(),W=e.oauthClientId??R.oauthClientId,N=e.scope??R.scope,{data:j,isLoading:P,error:q}=(0,i.$U)({oauthClientId:W,scope:N,enabled:!F}),H=j?.scopes?.map(e=>({scope:e.scope,description:e.description,requires_consent:e.requiresConsent})),V=e.scopes??H??[],J=e.oauthApplicationName??j?.oauthApplicationName??"",Q=e.oauthApplicationLogoUrl??j?.oauthApplicationLogoUrl,X=e.oauthApplicationUrl??j?.oauthApplicationUrl,ee=e.redirectUrl??(Z()?new URL(window.location.href).searchParams.get("redirect_uri")??"":""),{t:en}=(0,s._)(),eo=function(e){let n;try{n=new URL(e).hostname}catch{return""}if(!n)return"";let o=n.startsWith("[")&&n.endsWith("]")?n.slice(1,-1):n;return K.test(o)?o:o.includes(":")?`[${o}]`:o.split(".").slice(-2).join(".")}(ee),et=en((0,d.G)("oauthConsent.viewFullUrl"));if(!F){let e=W?ee?q?q.message??"Failed to load consent information.":void 0:"The redirect URI is missing.":"The client ID is missing.";if(e)return(0,t.FD)(m.Z.Root,{children:[(0,t.Y)(m.Z.Content,{children:(0,t.Y)(m.Z.Alert,{children:e})}),(0,t.Y)(m.Z.Footer,{})]});if(P)return(0,t.FD)(m.Z.Root,{children:[(0,t.Y)(m.Z.Content,{children:(0,t.Y)(Y.W,{})}),(0,t.Y)(m.Z.Footer,{})]})}let ei=n.oauthApplication.buildConsentActionUrl({clientId:W}),er=Z()?Array.from(new URLSearchParams(window.location.search).entries()):[],ea=o?.primaryEmailAddress?.emailAddress||o?.primaryPhoneNumber?.phoneNumber,el=V.filter(e=>e.scope!==L),ec=V.some(e=>e.scope===L);return(0,t.FD)(t.FK,{children:[(0,t.FD)("form",{method:"POST",action:ei,onSubmit:n=>{if(!F)return;n.preventDefault();let o=n.nativeEvent.submitter;o?.value==="true"?e.onAllow?.():e.onDeny?.()},children:[(0,t.FD)(m.Z.Root,{children:[(0,t.FD)(m.Z.Content,{children:[(0,t.FD)(g.Y.Root,{children:[Q&&p&&(0,t.FD)(E,{children:[(0,t.Y)(U,{justify:"end",children:(0,t.Y)(h.G,{src:Q,alt:J,href:X,isExternal:!0})}),(0,t.Y)(B,{}),(0,t.Y)(U,{justify:"start",children:(0,t.Y)(h.G,{})})]}),Q&&!p&&(0,t.Y)(E,{children:(0,t.FD)(u.az,{sx:{position:"relative"},children:[(0,t.Y)(h.G,{src:Q,alt:J,href:X,isExternal:!0}),(0,t.Y)(_,{size:"sm",sx:e=>({position:"absolute",bottom:`calc(${e.space.$3} * -1)`,insetInlineEnd:`calc(${e.space.$3} * -1)`})})]})}),!Q&&p&&(0,t.FD)(E,{children:[(0,t.Y)(U,{justify:"end",children:(0,t.Y)(_,{})}),(0,t.Y)(B,{}),(0,t.Y)(U,{justify:"start",children:(0,t.Y)(h.G,{})})]}),!Q&&!p&&(0,t.Y)(E,{children:(0,t.Y)(_,{})}),(0,t.Y)(g.Y.Title,{localizationKey:J}),(0,t.Y)(g.Y.Subtitle,{localizationKey:(0,d.G)("oauthConsent.subtitle",{applicationName:c,identifier:ea||""})})]}),x&&C.length>0&&D&&(0,t.Y)(O,{options:C,value:D,onChange:z}),(0,t.FD)(w,{children:[(0,t.Y)(S,{children:(0,t.Y)(A,{localizationKey:(0,d.G)("oauthConsent.scopeList.title",{applicationName:J})})}),(0,t.Y)(G,{children:el.map(e=>(0,t.Y)(I,{children:(0,t.Y)(T,{children:e.description||e.scope||""})},e.scope))})]}),(0,t.Y)($.F,{colorScheme:"warning",children:(0,t.Y)(u.EY,{colorScheme:"warning",variant:"caption",children:(0,t.Y)(v,{text:en((0,d.G)("oauthConsent.warning",{applicationName:J||c,domainAction:eo})),actionText:eo,onClick:()=>y(!0),tooltipText:et})})}),(0,t.FD)(u.xA,{columns:2,gap:3,children:[(0,t.Y)(u.$n,{type:"submit",name:"consented",value:"false",colorScheme:"secondary",variant:"outline",localizationKey:(0,d.G)("oauthConsent.action__deny")}),(0,t.Y)(u.$n,{type:"submit",name:"consented",value:"true",localizationKey:(0,d.G)("oauthConsent.action__allow")}),(0,t.FD)(u.EY,{sx:{gridColumn:"span 2"},colorScheme:"secondary",variant:"caption",children:[(0,t.Y)(v,{text:en((0,d.G)("oauthConsent.redirectNotice",{domainAction:eo})),actionText:eo,onClick:()=>y(!0),tooltipText:et}),ec&&en((0,d.G)("oauthConsent.offlineAccessNotice"))]})]})]}),(0,t.Y)(m.Z.Footer,{})]}),!F&&er.map(([e,n])=>(0,t.Y)("input",{type:"hidden",name:e,value:n},e)),!F&&x&&D&&(0,t.Y)("input",{type:"hidden",name:"organization_id",value:D})]}),(0,t.Y)(M,{isOpen:b,onOpen:()=>y(!0),onClose:()=>y(!1),redirectUri:ee,oauthApplicationName:J})]})})),P=()=>(0,t.Y)(p.n.Root,{flow:"oauthConsent",children:(0,t.Y)(p.n.Part,{children:(0,t.Y)(x.d,{children:(0,t.Y)(C.q,{children:(0,t.Y)(j,{})})})})})},2121:function(e,n,o){o.d(n,{W:()=>r,n:()=>i});var t=o(5074);let i=(0,t.createContext)(null),r=()=>{let e=(0,t.useContext)(i);if(null===e)throw Error("Clerk: useOAuthConsentContext called outside of the mounted OAuthConsent component.");return e}}}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";(globalThis.webpackChunk_clerk_ui=globalThis.webpackChunk_clerk_ui||[]).push([["591"],{8569:function(e,n,o){o.r(n),o.d(n,{OAuthConsent:()=>P});var t=o(1564),i=o(4180),r=o(630),a=o(2121),l=o(7697),c=o(3264),s=o(78),d=o(2861),u=o(8272),p=o(4607),h=o(2037),m=o(6088),f=o(3269),g=o(6153),Y=o(6980),b=o(6705),$=o(2349),y=o(2204),x=o(212),C=o(2265),k=o(6455);function v({text:e,actionText:n,onClick:o,tooltipText:i}){let r=e.indexOf(n);if(-1===r)return(0,t.Y)(t.FK,{children:e});let a=e.slice(0,r),l=e.slice(r+n.length),c="",s="";a.endsWith("(")&&(a=a.slice(0,-1),c="("),l.startsWith(")")&&(l=l.slice(1),s=")");let d=(0,t.FD)(k.m_.Root,{children:[(0,t.Y)(k.m_.Trigger,{children:(0,t.Y)(u.EY,{as:"span",role:"button",tabIndex:0,"aria-label":i,variant:"caption",onClick:o,onKeyDown:e=>{("Enter"===e.key||" "===e.key)&&(e.preventDefault(),o())},sx:e=>({textDecoration:"underline",textDecorationStyle:"dotted",cursor:"pointer",outline:"none",display:"inline-block","&:focus-visible":{outline:"2px solid",outlineColor:e.colors.$colorRing}}),children:n})}),(0,t.Y)(k.m_.Content,{text:i})]});return(0,t.FD)(t.FK,{children:[a,c||s?(0,t.FD)(u.EY,{as:"span",sx:{whiteSpace:"nowrap"},children:[c,d,s]}):d,l]})}var z=o(8920),D=o(1464),F=o(4620);function w({children:e,sx:n,...o}){return(0,t.Y)(u.az,{...o,sx:[e=>({textAlign:"start",borderWidth:e.borderWidths.$normal,borderStyle:e.borderStyles.$solid,borderColor:e.colors.$borderAlpha100,borderRadius:e.radii.$lg,overflow:"hidden"}),n],elementDescriptor:z.$z.listGroup,children:e})}function S({children:e,sx:n,...o}){return(0,t.Y)(u.az,{...o,sx:[e=>({padding:e.space.$3,background:D.s.mergedColorsBackground(F.T.setAlpha(e.colors.$colorBackground,1),e.colors.$neutralAlpha50)}),n],elementDescriptor:z.$z.listGroupHeader,children:e})}function A(e){return(0,t.Y)(u.EY,{...e,variant:"subtitle",elementDescriptor:z.$z.listGroupHeaderTitle})}function G({children:e,sx:n,...o}){return(0,t.Y)(u.az,{...o,as:"ul",sx:[e=>({margin:e.sizes.$none,padding:e.sizes.$none,maxBlockSize:"10.9375rem",backgroundColor:e.colors.$colorBackground,overflowY:"auto",...D.s.unstyledScrollbar(e),"--fade-distance":"2.5rem","&::before, &::after":{content:'""',display:"block",position:"sticky",insetInline:0,blockSize:"var(--fade-distance)",pointerEvents:"none",zIndex:1,opacity:0},"&::before":{insetBlockStart:0,marginBlockEnd:"calc(var(--fade-distance) * -1)",background:`linear-gradient(to bottom, ${e.colors.$colorBackground}, transparent)`},"&::after":{insetBlockEnd:0,marginBlockStart:"calc(var(--fade-distance) * -1)",background:`linear-gradient(to top, ${e.colors.$colorBackground}, transparent)`},"@keyframes list-fade-top":{from:{opacity:0},to:{opacity:1}},"@keyframes list-fade-bottom":{from:{opacity:1},to:{opacity:0}},"@supports (animation-timeline: scroll())":{"&::before":{animationName:"list-fade-top",animationDuration:"auto",animationTimingFunction:"linear",animationFillMode:"both",animationTimeline:"scroll(y)",animationRange:"0 var(--fade-distance)"},"&::after":{animationName:"list-fade-bottom",animationDuration:"auto",animationTimingFunction:"linear",animationFillMode:"both",animationTimeline:"scroll(y)",animationRange:"calc(100% - var(--fade-distance)) 100%"}}}),n],elementDescriptor:z.$z.listGroupContent,children:e})}function I({children:e,sx:n,...o}){return(0,t.Y)(u.az,{...o,as:"li",sx:[e=>({display:"flex",alignItems:"baseline",paddingInline:e.space.$3,paddingBlock:e.space.$2,borderTopWidth:e.borderWidths.$normal,borderTopStyle:e.borderStyles.$solid,borderTopColor:e.colors.$borderAlpha100,"&::before":{content:'""',display:"inline-block",width:e.space.$1,height:e.space.$1,background:e.colors.$colorMutedForeground,borderRadius:e.radii.$circle,transform:"translateY(-0.1875rem)",marginInlineEnd:e.space.$2,flexShrink:0}}),n],elementDescriptor:z.$z.listGroupItem,children:e})}function T(e){return(0,t.Y)(u.EY,{...e,variant:"subtitle",elementDescriptor:z.$z.listGroupItemLabel})}var R=o(4380);function E({children:e}){return(0,t.Y)(u.so,{justify:"center",align:"center",gap:4,sx:e=>({marginBlockEnd:e.space.$6}),elementDescriptor:z.$z.logoGroup,children:e})}function U({children:e,sx:n,...o}){return(0,t.Y)(u.so,{...o,sx:[{flex:1},n],elementDescriptor:z.$z.logoGroupItem,children:e})}function _({size:e="md",sx:n}){let o=n=>{let o="sm"===e?n.space.$6:n.space.$12;return{width:o,height:o}};return(0,t.Y)(u.az,{sx:e=>[{background:D.s.mergedColorsBackground(F.T.setAlpha(e.colors.$colorBackground,1),e.colors.$neutralAlpha50),borderRadius:e.radii.$circle,borderWidth:e.borderWidths.$normal,borderStyle:e.borderStyles.$solid,borderColor:e.colors.$borderAlpha100,display:"flex",alignItems:"center",justifyContent:"center"},o,n],elementDescriptor:z.$z.logoGroupIcon,children:(0,t.Y)(u.In,{icon:R.A,sx:e=>({color:e.colors.$primary500})})})}function B(){return(0,t.Y)(u.az,{as:"svg",fill:"none",viewBox:"0 0 16 2",height:2,"aria-hidden":!0,sx:e=>({color:e.colors.$colorMutedForeground}),elementDescriptor:z.$z.logoGroupSeparator,children:(0,t.Y)("path",{stroke:"currentColor",strokeDasharray:"0.1 4",strokeLinecap:"round",strokeWidth:"2",d:"M1 1h14"})})}var W=o(1586),N=o(2405);function O({options:e,value:n,onChange:o}){let i=(0,r.useRef)(null),a=e.find(e=>e.value===n);return(0,t.FD)(W.l6,{options:e,value:n,onChange:e=>o(e.value),referenceElement:i,renderOption:(e,n,o)=>(0,t.FD)(u.az,{as:"span",sx:e=>({width:"100%",display:"grid",gridTemplateColumns:`${e.sizes.$5} 1fr ${e.sizes.$3}`,columnGap:e.space.$2,paddingInlineStart:e.space.$1,paddingInlineEnd:e.space.$1x5,paddingBlock:e.space.$1,alignItems:"center",borderRadius:e.radii.$md,'&:hover, &[data-focused="true"]':{background:D.s.mutedBackground(e)}}),children:[(0,t.Y)(u._V,{src:e.logoUrl,alt:e.label,sx:e=>({width:e.sizes.$5,height:e.sizes.$5,objectFit:"contain",flexShrink:0,borderRadius:e.radii.$md})}),(0,t.Y)(u.EY,{sx:{flex:1,textAlign:"start",minWidth:0,maxInlineSize:"200px"},truncate:!0,as:"span",variant:"subtitle",children:e.label}),o&&(0,t.Y)(u.In,{icon:N.A,size:"sm",sx:e=>({color:e.colors.$primary500})})]}),children:[(0,t.FD)(W.JC,{ref:i,"aria-haspopup":"listbox",sx:e=>({paddingInline:e.space.$3}),children:[(0,t.Y)(u._V,{src:a?.logoUrl||"",alt:a?.label||"",sx:e=>({width:e.sizes.$5,height:e.sizes.$5,borderRadius:e.radii.$md,objectFit:"contain",flexShrink:0})}),(0,t.Y)(u.EY,{colorScheme:"body",as:"span",truncate:!0,sx:{flex:1,minWidth:0,textAlign:"start"},children:a?.label||"Select an option"})]}),(0,t.Y)(W.UL,{})]})}let Z=()=>"undefined"!=typeof window&&!!window.location,K=/^(\d{1,3}\.){3}\d{1,3}$/,L="offline_access";function M({onOpen:e,onClose:n,isOpen:o,redirectUri:i,oauthApplicationName:r}){return o?(0,t.Y)(b.Modal,{handleOpen:e,handleClose:n,children:(0,t.Y)(m.Z.Root,{children:(0,t.FD)(m.Z.Content,{children:[(0,t.FD)(g.Y.Root,{children:[(0,t.Y)(g.Y.Title,{localizationKey:(0,d.G)("oauthConsent.redirectUriModal.title")}),(0,t.Y)(g.Y.Subtitle,{localizationKey:(0,d.G)("oauthConsent.redirectUriModal.subtitle",{applicationName:r})})]}),(0,t.Y)(y.TM,{style:{maxHeight:"none"},cols:50,rows:6,defaultValue:i,readOnly:!0})]})})}):null}let j=(0,c.G)((0,f.dm)(function(){let e=(0,a.W)(),n=(0,i.ho)(),{user:o}=(0,i.Jd)(),{displayConfig:{applicationName:c,logoImageUrl:p},organizationSettings:f}=(0,l.O)(),[b,y]=(0,r.useState)(!1),x=!!(e.enableOrgSelection&&f.enabled),C=x?(o?.organizationMemberships??[]).map(e=>({value:e.organization.id,label:e.organization.name,logoUrl:e.organization.imageUrl})):[],[k,z]=(0,r.useState)(null),D=k??C[0]?.value??null,F=!!(e.onAllow||e.onDeny),R=function(){if(!Z())return{oauthClientId:""};let e=new URLSearchParams(window.location.search),n=e.get("client_id")??"",o=e.get("scope")??void 0;return void 0!==o?{oauthClientId:n,scope:o}:{oauthClientId:n}}(),W=e.oauthClientId??R.oauthClientId,N=e.scope??R.scope,{data:j,isLoading:P,error:q}=(0,i.$U)({oauthClientId:W,scope:N,enabled:!F}),H=j?.scopes?.map(e=>({scope:e.scope,description:e.description,requires_consent:e.requiresConsent})),V=e.scopes??H??[],J=e.oauthApplicationName??j?.oauthApplicationName??"",Q=e.oauthApplicationLogoUrl??j?.oauthApplicationLogoUrl,X=e.oauthApplicationUrl??j?.oauthApplicationUrl,ee=e.redirectUrl??(Z()?new URL(window.location.href).searchParams.get("redirect_uri")??"":""),{t:en}=(0,s._)(),eo=function(e){let n;try{n=new URL(e).hostname}catch{return""}if(!n)return"";let o=n.startsWith("[")&&n.endsWith("]")?n.slice(1,-1):n;return K.test(o)?o:o.includes(":")?`[${o}]`:o.split(".").slice(-2).join(".")}(ee),et=en((0,d.G)("oauthConsent.viewFullUrl"));if(!F){let e=W?ee?q?q.message??"Failed to load consent information.":void 0:"The redirect URI is missing.":"The client ID is missing.";if(e)return(0,t.FD)(m.Z.Root,{children:[(0,t.Y)(m.Z.Content,{children:(0,t.Y)(m.Z.Alert,{children:e})}),(0,t.Y)(m.Z.Footer,{})]});if(P)return(0,t.FD)(m.Z.Root,{children:[(0,t.Y)(m.Z.Content,{children:(0,t.Y)(Y.W,{})}),(0,t.Y)(m.Z.Footer,{})]})}let ei=n.oauthApplication.buildConsentActionUrl({clientId:W}),er=Z()?Array.from(new URLSearchParams(window.location.search).entries()):[],ea=o?.primaryEmailAddress?.emailAddress||o?.primaryPhoneNumber?.phoneNumber,el=V.filter(e=>e.scope!==L),ec=V.some(e=>e.scope===L);return(0,t.FD)(t.FK,{children:[(0,t.FD)("form",{method:"POST",action:ei,onSubmit:n=>{if(!F)return;n.preventDefault();let o=n.nativeEvent.submitter;o?.value==="true"?e.onAllow?.():e.onDeny?.()},children:[(0,t.FD)(m.Z.Root,{children:[(0,t.FD)(m.Z.Content,{children:[(0,t.FD)(g.Y.Root,{children:[Q&&p&&(0,t.FD)(E,{children:[(0,t.Y)(U,{justify:"end",children:(0,t.Y)(h.G,{src:Q,alt:J,href:X,isExternal:!0})}),(0,t.Y)(B,{}),(0,t.Y)(U,{justify:"start",children:(0,t.Y)(h.G,{})})]}),Q&&!p&&(0,t.Y)(E,{children:(0,t.FD)(u.az,{sx:{position:"relative"},children:[(0,t.Y)(h.G,{src:Q,alt:J,href:X,isExternal:!0}),(0,t.Y)(_,{size:"sm",sx:e=>({position:"absolute",bottom:`calc(${e.space.$3} * -1)`,insetInlineEnd:`calc(${e.space.$3} * -1)`})})]})}),!Q&&p&&(0,t.FD)(E,{children:[(0,t.Y)(U,{justify:"end",children:(0,t.Y)(_,{})}),(0,t.Y)(B,{}),(0,t.Y)(U,{justify:"start",children:(0,t.Y)(h.G,{})})]}),!Q&&!p&&(0,t.Y)(E,{children:(0,t.Y)(_,{})}),(0,t.Y)(g.Y.Title,{localizationKey:J}),(0,t.Y)(g.Y.Subtitle,{localizationKey:(0,d.G)("oauthConsent.subtitle",{applicationName:c,identifier:ea||""})})]}),x&&C.length>0&&D&&(0,t.Y)(O,{options:C,value:D,onChange:z}),(0,t.FD)(w,{children:[(0,t.Y)(S,{children:(0,t.Y)(A,{localizationKey:(0,d.G)("oauthConsent.scopeList.title",{applicationName:J})})}),(0,t.Y)(G,{children:el.map(e=>(0,t.Y)(I,{children:(0,t.Y)(T,{children:e.description||e.scope||""})},e.scope))})]}),(0,t.Y)($.F,{colorScheme:"warning",children:(0,t.Y)(u.EY,{colorScheme:"warning",variant:"caption",children:(0,t.Y)(v,{text:en((0,d.G)("oauthConsent.warning",{applicationName:J||c,domainAction:eo})),actionText:eo,onClick:()=>y(!0),tooltipText:et})})}),(0,t.FD)(u.xA,{columns:2,gap:3,children:[(0,t.Y)(u.$n,{type:"submit",name:"consented",value:"false",colorScheme:"secondary",variant:"outline",localizationKey:(0,d.G)("oauthConsent.action__deny")}),(0,t.Y)(u.$n,{type:"submit",name:"consented",value:"true",localizationKey:(0,d.G)("oauthConsent.action__allow")}),(0,t.FD)(u.EY,{sx:{gridColumn:"span 2"},colorScheme:"secondary",variant:"caption",children:[(0,t.Y)(v,{text:en((0,d.G)("oauthConsent.redirectNotice",{domainAction:eo})),actionText:eo,onClick:()=>y(!0),tooltipText:et}),ec&&en((0,d.G)("oauthConsent.offlineAccessNotice"))]})]})]}),(0,t.Y)(m.Z.Footer,{})]}),!F&&er.map(([e,n])=>(0,t.Y)("input",{type:"hidden",name:e,value:n},e)),!F&&x&&D&&(0,t.Y)("input",{type:"hidden",name:"organization_id",value:D})]}),(0,t.Y)(M,{isOpen:b,onOpen:()=>y(!0),onClose:()=>y(!1),redirectUri:ee,oauthApplicationName:J})]})})),P=()=>(0,t.Y)(p.n.Root,{flow:"oauthConsent",children:(0,t.Y)(p.n.Part,{children:(0,t.Y)(x.d,{children:(0,t.Y)(C.q,{children:(0,t.Y)(j,{})})})})})},2121:function(e,n,o){o.d(n,{W:()=>r,n:()=>i});var t=o(630);let i=(0,t.createContext)(null),r=()=>{let e=(0,t.useContext)(i);if(null===e)throw Error("Clerk: useOAuthConsentContext called outside of the mounted OAuthConsent component.");return e}}}]);
|