@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.
Files changed (163) hide show
  1. package/dist/ClerkUI.js +2 -2
  2. package/dist/components/OAuthConsent/OAuthConsent.js +8 -11
  3. package/dist/components/OAuthConsent/OAuthConsent.js.map +1 -1
  4. package/dist/components/OAuthConsent/OrgSelect.js +2 -13
  5. package/dist/components/OAuthConsent/OrgSelect.js.map +1 -1
  6. package/dist/index.js +1 -1
  7. package/dist/no-rhc/ClerkUI.js +2 -2
  8. package/dist/no-rhc/components/OAuthConsent/OAuthConsent.js +8 -11
  9. package/dist/no-rhc/components/OAuthConsent/OAuthConsent.js.map +1 -1
  10. package/dist/no-rhc/components/OAuthConsent/OrgSelect.js +2 -13
  11. package/dist/no-rhc/components/OAuthConsent/OrgSelect.js.map +1 -1
  12. package/dist/no-rhc/index.js +1 -1
  13. package/dist/oauthConsent_ui_0f89c0_1.6.3.js +1 -0
  14. package/dist/oauthConsent_ui_3aaa30_1.6.3.js +1 -0
  15. package/dist/oauthConsent_ui_fc1048_1.6.3.js +1 -0
  16. package/dist/server.js +1 -1
  17. package/dist/ui.browser.js +1 -1
  18. package/dist/ui.legacy.browser.js +1 -1
  19. package/dist/ui.shared.browser.js +1 -1
  20. package/package.json +3 -3
  21. package/dist/oauthConsent_ui_36a779_1.6.3-canary.v20260417193401.js +0 -1
  22. package/dist/oauthConsent_ui_9067f0_1.6.3-canary.v20260417193401.js +0 -1
  23. package/dist/oauthConsent_ui_e580fd_1.6.3-canary.v20260417193401.js +0 -1
  24. /package/dist/{207_ui_e580fd_1.6.3-canary.v20260417193401.js → 207_ui_0f89c0_1.6.3.js} +0 -0
  25. /package/dist/{207_ui_9067f0_1.6.3-canary.v20260417193401.js → 207_ui_3aaa30_1.6.3.js} +0 -0
  26. /package/dist/{207_ui_36a779_1.6.3-canary.v20260417193401.js → 207_ui_fc1048_1.6.3.js} +0 -0
  27. /package/dist/{217_ui_e580fd_1.6.3-canary.v20260417193401.js → 217_ui_0f89c0_1.6.3.js} +0 -0
  28. /package/dist/{217_ui_9067f0_1.6.3-canary.v20260417193401.js → 217_ui_3aaa30_1.6.3.js} +0 -0
  29. /package/dist/{217_ui_36a779_1.6.3-canary.v20260417193401.js → 217_ui_fc1048_1.6.3.js} +0 -0
  30. /package/dist/{360_ui_e580fd_1.6.3-canary.v20260417193401.js → 360_ui_0f89c0_1.6.3.js} +0 -0
  31. /package/dist/{360_ui_9067f0_1.6.3-canary.v20260417193401.js → 360_ui_3aaa30_1.6.3.js} +0 -0
  32. /package/dist/{360_ui_36a779_1.6.3-canary.v20260417193401.js → 360_ui_fc1048_1.6.3.js} +0 -0
  33. /package/dist/{444_ui_e580fd_1.6.3-canary.v20260417193401.js → 444_ui_0f89c0_1.6.3.js} +0 -0
  34. /package/dist/{444_ui_9067f0_1.6.3-canary.v20260417193401.js → 444_ui_3aaa30_1.6.3.js} +0 -0
  35. /package/dist/{444_ui_36a779_1.6.3-canary.v20260417193401.js → 444_ui_fc1048_1.6.3.js} +0 -0
  36. /package/dist/{573_ui_e580fd_1.6.3-canary.v20260417193401.js → 573_ui_0f89c0_1.6.3.js} +0 -0
  37. /package/dist/{573_ui_9067f0_1.6.3-canary.v20260417193401.js → 573_ui_3aaa30_1.6.3.js} +0 -0
  38. /package/dist/{573_ui_36a779_1.6.3-canary.v20260417193401.js → 573_ui_fc1048_1.6.3.js} +0 -0
  39. /package/dist/{931_ui_e580fd_1.6.3-canary.v20260417193401.js → 931_ui_0f89c0_1.6.3.js} +0 -0
  40. /package/dist/{931_ui_9067f0_1.6.3-canary.v20260417193401.js → 931_ui_3aaa30_1.6.3.js} +0 -0
  41. /package/dist/{931_ui_36a779_1.6.3-canary.v20260417193401.js → 931_ui_fc1048_1.6.3.js} +0 -0
  42. /package/dist/{970_ui_e580fd_1.6.3-canary.v20260417193401.js → 970_ui_0f89c0_1.6.3.js} +0 -0
  43. /package/dist/{970_ui_9067f0_1.6.3-canary.v20260417193401.js → 970_ui_3aaa30_1.6.3.js} +0 -0
  44. /package/dist/{970_ui_36a779_1.6.3-canary.v20260417193401.js → 970_ui_fc1048_1.6.3.js} +0 -0
  45. /package/dist/{apiKeys_ui_e580fd_1.6.3-canary.v20260417193401.js → apiKeys_ui_0f89c0_1.6.3.js} +0 -0
  46. /package/dist/{apiKeys_ui_9067f0_1.6.3-canary.v20260417193401.js → apiKeys_ui_3aaa30_1.6.3.js} +0 -0
  47. /package/dist/{apiKeys_ui_36a779_1.6.3-canary.v20260417193401.js → apiKeys_ui_fc1048_1.6.3.js} +0 -0
  48. /package/dist/{blankcaptcha_ui_e580fd_1.6.3-canary.v20260417193401.js → blankcaptcha_ui_0f89c0_1.6.3.js} +0 -0
  49. /package/dist/{blankcaptcha_ui_36a779_1.6.3-canary.v20260417193401.js → blankcaptcha_ui_3aaa30_1.6.3.js} +0 -0
  50. /package/dist/{blankcaptcha_ui_9067f0_1.6.3-canary.v20260417193401.js → blankcaptcha_ui_fc1048_1.6.3.js} +0 -0
  51. /package/dist/{checkout_ui_e580fd_1.6.3-canary.v20260417193401.js → checkout_ui_0f89c0_1.6.3.js} +0 -0
  52. /package/dist/{checkout_ui_9067f0_1.6.3-canary.v20260417193401.js → checkout_ui_3aaa30_1.6.3.js} +0 -0
  53. /package/dist/{checkout_ui_36a779_1.6.3-canary.v20260417193401.js → checkout_ui_fc1048_1.6.3.js} +0 -0
  54. /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
  55. /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
  56. /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
  57. /package/dist/{createorganization_ui_e580fd_1.6.3-canary.v20260417193401.js → createorganization_ui_0f89c0_1.6.3.js} +0 -0
  58. /package/dist/{createorganization_ui_9067f0_1.6.3-canary.v20260417193401.js → createorganization_ui_3aaa30_1.6.3.js} +0 -0
  59. /package/dist/{createorganization_ui_36a779_1.6.3-canary.v20260417193401.js → createorganization_ui_fc1048_1.6.3.js} +0 -0
  60. /package/dist/{enableOrganizationsPrompt_ui_e580fd_1.6.3-canary.v20260417193401.js → enableOrganizationsPrompt_ui_0f89c0_1.6.3.js} +0 -0
  61. /package/dist/{enableOrganizationsPrompt_ui_9067f0_1.6.3-canary.v20260417193401.js → enableOrganizationsPrompt_ui_3aaa30_1.6.3.js} +0 -0
  62. /package/dist/{enableOrganizationsPrompt_ui_36a779_1.6.3-canary.v20260417193401.js → enableOrganizationsPrompt_ui_fc1048_1.6.3.js} +0 -0
  63. /package/dist/{framework_ui_e580fd_1.6.3-canary.v20260417193401.js → framework_ui_0f89c0_1.6.3.js} +0 -0
  64. /package/dist/{framework_ui_9067f0_1.6.3-canary.v20260417193401.js → framework_ui_3aaa30_1.6.3.js} +0 -0
  65. /package/dist/{impersonationfab_ui_e580fd_1.6.3-canary.v20260417193401.js → impersonationfab_ui_0f89c0_1.6.3.js} +0 -0
  66. /package/dist/{impersonationfab_ui_9067f0_1.6.3-canary.v20260417193401.js → impersonationfab_ui_3aaa30_1.6.3.js} +0 -0
  67. /package/dist/{impersonationfab_ui_36a779_1.6.3-canary.v20260417193401.js → impersonationfab_ui_fc1048_1.6.3.js} +0 -0
  68. /package/dist/{keylessPrompt_ui_e580fd_1.6.3-canary.v20260417193401.js → keylessPrompt_ui_0f89c0_1.6.3.js} +0 -0
  69. /package/dist/{keylessPrompt_ui_9067f0_1.6.3-canary.v20260417193401.js → keylessPrompt_ui_3aaa30_1.6.3.js} +0 -0
  70. /package/dist/{keylessPrompt_ui_36a779_1.6.3-canary.v20260417193401.js → keylessPrompt_ui_fc1048_1.6.3.js} +0 -0
  71. /package/dist/{onetap_ui_e580fd_1.6.3-canary.v20260417193401.js → onetap_ui_0f89c0_1.6.3.js} +0 -0
  72. /package/dist/{onetap_ui_9067f0_1.6.3-canary.v20260417193401.js → onetap_ui_3aaa30_1.6.3.js} +0 -0
  73. /package/dist/{onetap_ui_36a779_1.6.3-canary.v20260417193401.js → onetap_ui_fc1048_1.6.3.js} +0 -0
  74. /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
  75. /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
  76. /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
  77. /package/dist/{op-billing-page_ui_e580fd_1.6.3-canary.v20260417193401.js → op-billing-page_ui_0f89c0_1.6.3.js} +0 -0
  78. /package/dist/{op-billing-page_ui_36a779_1.6.3-canary.v20260417193401.js → op-billing-page_ui_3aaa30_1.6.3.js} +0 -0
  79. /package/dist/{op-billing-page_ui_9067f0_1.6.3-canary.v20260417193401.js → op-billing-page_ui_fc1048_1.6.3.js} +0 -0
  80. /package/dist/{op-plans-page_ui_e580fd_1.6.3-canary.v20260417193401.js → op-plans-page_ui_0f89c0_1.6.3.js} +0 -0
  81. /package/dist/{op-plans-page_ui_36a779_1.6.3-canary.v20260417193401.js → op-plans-page_ui_3aaa30_1.6.3.js} +0 -0
  82. /package/dist/{op-plans-page_ui_9067f0_1.6.3-canary.v20260417193401.js → op-plans-page_ui_fc1048_1.6.3.js} +0 -0
  83. /package/dist/{organizationlist_ui_e580fd_1.6.3-canary.v20260417193401.js → organizationlist_ui_0f89c0_1.6.3.js} +0 -0
  84. /package/dist/{organizationlist_ui_9067f0_1.6.3-canary.v20260417193401.js → organizationlist_ui_3aaa30_1.6.3.js} +0 -0
  85. /package/dist/{organizationlist_ui_36a779_1.6.3-canary.v20260417193401.js → organizationlist_ui_fc1048_1.6.3.js} +0 -0
  86. /package/dist/{organizationprofile_ui_e580fd_1.6.3-canary.v20260417193401.js → organizationprofile_ui_0f89c0_1.6.3.js} +0 -0
  87. /package/dist/{organizationprofile_ui_9067f0_1.6.3-canary.v20260417193401.js → organizationprofile_ui_3aaa30_1.6.3.js} +0 -0
  88. /package/dist/{organizationprofile_ui_36a779_1.6.3-canary.v20260417193401.js → organizationprofile_ui_fc1048_1.6.3.js} +0 -0
  89. /package/dist/{organizationswitcher_ui_e580fd_1.6.3-canary.v20260417193401.js → organizationswitcher_ui_0f89c0_1.6.3.js} +0 -0
  90. /package/dist/{organizationswitcher_ui_9067f0_1.6.3-canary.v20260417193401.js → organizationswitcher_ui_3aaa30_1.6.3.js} +0 -0
  91. /package/dist/{organizationswitcher_ui_36a779_1.6.3-canary.v20260417193401.js → organizationswitcher_ui_fc1048_1.6.3.js} +0 -0
  92. /package/dist/{payment-attempt-page_ui_e580fd_1.6.3-canary.v20260417193401.js → payment-attempt-page_ui_0f89c0_1.6.3.js} +0 -0
  93. /package/dist/{payment-attempt-page_ui_36a779_1.6.3-canary.v20260417193401.js → payment-attempt-page_ui_3aaa30_1.6.3.js} +0 -0
  94. /package/dist/{payment-attempt-page_ui_9067f0_1.6.3-canary.v20260417193401.js → payment-attempt-page_ui_fc1048_1.6.3.js} +0 -0
  95. /package/dist/{planDetails_ui_e580fd_1.6.3-canary.v20260417193401.js → planDetails_ui_0f89c0_1.6.3.js} +0 -0
  96. /package/dist/{planDetails_ui_9067f0_1.6.3-canary.v20260417193401.js → planDetails_ui_3aaa30_1.6.3.js} +0 -0
  97. /package/dist/{planDetails_ui_36a779_1.6.3-canary.v20260417193401.js → planDetails_ui_fc1048_1.6.3.js} +0 -0
  98. /package/dist/{prefetchorganizationlist_ui_e580fd_1.6.3-canary.v20260417193401.js → prefetchorganizationlist_ui_0f89c0_1.6.3.js} +0 -0
  99. /package/dist/{prefetchorganizationlist_ui_36a779_1.6.3-canary.v20260417193401.js → prefetchorganizationlist_ui_3aaa30_1.6.3.js} +0 -0
  100. /package/dist/{prefetchorganizationlist_ui_9067f0_1.6.3-canary.v20260417193401.js → prefetchorganizationlist_ui_fc1048_1.6.3.js} +0 -0
  101. /package/dist/{pricingTable_ui_e580fd_1.6.3-canary.v20260417193401.js → pricingTable_ui_0f89c0_1.6.3.js} +0 -0
  102. /package/dist/{pricingTable_ui_9067f0_1.6.3-canary.v20260417193401.js → pricingTable_ui_3aaa30_1.6.3.js} +0 -0
  103. /package/dist/{pricingTable_ui_36a779_1.6.3-canary.v20260417193401.js → pricingTable_ui_fc1048_1.6.3.js} +0 -0
  104. /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
  105. /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
  106. /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
  107. /package/dist/{sessionTasks_ui_e580fd_1.6.3-canary.v20260417193401.js → sessionTasks_ui_0f89c0_1.6.3.js} +0 -0
  108. /package/dist/{sessionTasks_ui_9067f0_1.6.3-canary.v20260417193401.js → sessionTasks_ui_3aaa30_1.6.3.js} +0 -0
  109. /package/dist/{sessionTasks_ui_36a779_1.6.3-canary.v20260417193401.js → sessionTasks_ui_fc1048_1.6.3.js} +0 -0
  110. /package/dist/{signin_ui_e580fd_1.6.3-canary.v20260417193401.js → signin_ui_0f89c0_1.6.3.js} +0 -0
  111. /package/dist/{signin_ui_9067f0_1.6.3-canary.v20260417193401.js → signin_ui_3aaa30_1.6.3.js} +0 -0
  112. /package/dist/{signin_ui_36a779_1.6.3-canary.v20260417193401.js → signin_ui_fc1048_1.6.3.js} +0 -0
  113. /package/dist/{signup_ui_e580fd_1.6.3-canary.v20260417193401.js → signup_ui_0f89c0_1.6.3.js} +0 -0
  114. /package/dist/{signup_ui_9067f0_1.6.3-canary.v20260417193401.js → signup_ui_3aaa30_1.6.3.js} +0 -0
  115. /package/dist/{signup_ui_36a779_1.6.3-canary.v20260417193401.js → signup_ui_fc1048_1.6.3.js} +0 -0
  116. /package/dist/{statement-page_ui_e580fd_1.6.3-canary.v20260417193401.js → statement-page_ui_0f89c0_1.6.3.js} +0 -0
  117. /package/dist/{statement-page_ui_9067f0_1.6.3-canary.v20260417193401.js → statement-page_ui_3aaa30_1.6.3.js} +0 -0
  118. /package/dist/{statement-page_ui_36a779_1.6.3-canary.v20260417193401.js → statement-page_ui_fc1048_1.6.3.js} +0 -0
  119. /package/dist/{subscriptionDetails_ui_e580fd_1.6.3-canary.v20260417193401.js → subscriptionDetails_ui_0f89c0_1.6.3.js} +0 -0
  120. /package/dist/{subscriptionDetails_ui_9067f0_1.6.3-canary.v20260417193401.js → subscriptionDetails_ui_3aaa30_1.6.3.js} +0 -0
  121. /package/dist/{subscriptionDetails_ui_36a779_1.6.3-canary.v20260417193401.js → subscriptionDetails_ui_fc1048_1.6.3.js} +0 -0
  122. /package/dist/{taskChooseOrganization_ui_e580fd_1.6.3-canary.v20260417193401.js → taskChooseOrganization_ui_0f89c0_1.6.3.js} +0 -0
  123. /package/dist/{taskChooseOrganization_ui_9067f0_1.6.3-canary.v20260417193401.js → taskChooseOrganization_ui_3aaa30_1.6.3.js} +0 -0
  124. /package/dist/{taskChooseOrganization_ui_36a779_1.6.3-canary.v20260417193401.js → taskChooseOrganization_ui_fc1048_1.6.3.js} +0 -0
  125. /package/dist/{taskResetPassword_ui_e580fd_1.6.3-canary.v20260417193401.js → taskResetPassword_ui_0f89c0_1.6.3.js} +0 -0
  126. /package/dist/{taskResetPassword_ui_9067f0_1.6.3-canary.v20260417193401.js → taskResetPassword_ui_3aaa30_1.6.3.js} +0 -0
  127. /package/dist/{taskResetPassword_ui_36a779_1.6.3-canary.v20260417193401.js → taskResetPassword_ui_fc1048_1.6.3.js} +0 -0
  128. /package/dist/{taskSetupMFA_ui_e580fd_1.6.3-canary.v20260417193401.js → taskSetupMFA_ui_0f89c0_1.6.3.js} +0 -0
  129. /package/dist/{taskSetupMFA_ui_9067f0_1.6.3-canary.v20260417193401.js → taskSetupMFA_ui_3aaa30_1.6.3.js} +0 -0
  130. /package/dist/{taskSetupMFA_ui_36a779_1.6.3-canary.v20260417193401.js → taskSetupMFA_ui_fc1048_1.6.3.js} +0 -0
  131. /package/dist/{ui-common_ui_e580fd_1.6.3-canary.v20260417193401.js → ui-common_ui_0f89c0_1.6.3.js} +0 -0
  132. /package/dist/{ui-common_ui_9067f0_1.6.3-canary.v20260417193401.js → ui-common_ui_3aaa30_1.6.3.js} +0 -0
  133. /package/dist/{ui-common_ui_36a779_1.6.3-canary.v20260417193401.js → ui-common_ui_fc1048_1.6.3.js} +0 -0
  134. /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
  135. /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
  136. /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
  137. /package/dist/{up-billing-page_ui_e580fd_1.6.3-canary.v20260417193401.js → up-billing-page_ui_0f89c0_1.6.3.js} +0 -0
  138. /package/dist/{up-billing-page_ui_36a779_1.6.3-canary.v20260417193401.js → up-billing-page_ui_3aaa30_1.6.3.js} +0 -0
  139. /package/dist/{up-billing-page_ui_9067f0_1.6.3-canary.v20260417193401.js → up-billing-page_ui_fc1048_1.6.3.js} +0 -0
  140. /package/dist/{up-plans-page_ui_e580fd_1.6.3-canary.v20260417193401.js → up-plans-page_ui_0f89c0_1.6.3.js} +0 -0
  141. /package/dist/{up-plans-page_ui_36a779_1.6.3-canary.v20260417193401.js → up-plans-page_ui_3aaa30_1.6.3.js} +0 -0
  142. /package/dist/{up-plans-page_ui_9067f0_1.6.3-canary.v20260417193401.js → up-plans-page_ui_fc1048_1.6.3.js} +0 -0
  143. /package/dist/{useravatar_ui_e580fd_1.6.3-canary.v20260417193401.js → useravatar_ui_0f89c0_1.6.3.js} +0 -0
  144. /package/dist/{useravatar_ui_9067f0_1.6.3-canary.v20260417193401.js → useravatar_ui_3aaa30_1.6.3.js} +0 -0
  145. /package/dist/{useravatar_ui_36a779_1.6.3-canary.v20260417193401.js → useravatar_ui_fc1048_1.6.3.js} +0 -0
  146. /package/dist/{userbutton_ui_e580fd_1.6.3-canary.v20260417193401.js → userbutton_ui_0f89c0_1.6.3.js} +0 -0
  147. /package/dist/{userbutton_ui_9067f0_1.6.3-canary.v20260417193401.js → userbutton_ui_3aaa30_1.6.3.js} +0 -0
  148. /package/dist/{userbutton_ui_36a779_1.6.3-canary.v20260417193401.js → userbutton_ui_fc1048_1.6.3.js} +0 -0
  149. /package/dist/{userprofile_ui_e580fd_1.6.3-canary.v20260417193401.js → userprofile_ui_0f89c0_1.6.3.js} +0 -0
  150. /package/dist/{userprofile_ui_9067f0_1.6.3-canary.v20260417193401.js → userprofile_ui_3aaa30_1.6.3.js} +0 -0
  151. /package/dist/{userprofile_ui_36a779_1.6.3-canary.v20260417193401.js → userprofile_ui_fc1048_1.6.3.js} +0 -0
  152. /package/dist/{userverification_ui_e580fd_1.6.3-canary.v20260417193401.js → userverification_ui_0f89c0_1.6.3.js} +0 -0
  153. /package/dist/{userverification_ui_9067f0_1.6.3-canary.v20260417193401.js → userverification_ui_3aaa30_1.6.3.js} +0 -0
  154. /package/dist/{userverification_ui_36a779_1.6.3-canary.v20260417193401.js → userverification_ui_fc1048_1.6.3.js} +0 -0
  155. /package/dist/{vendors_ui_e580fd_1.6.3-canary.v20260417193401.js → vendors_ui_0f89c0_1.6.3.js} +0 -0
  156. /package/dist/{vendors_ui_9067f0_1.6.3-canary.v20260417193401.js → vendors_ui_3aaa30_1.6.3.js} +0 -0
  157. /package/dist/{vendors_ui_36a779_1.6.3-canary.v20260417193401.js → vendors_ui_fc1048_1.6.3.js} +0 -0
  158. /package/dist/{waitlist_ui_e580fd_1.6.3-canary.v20260417193401.js → waitlist_ui_0f89c0_1.6.3.js} +0 -0
  159. /package/dist/{waitlist_ui_9067f0_1.6.3-canary.v20260417193401.js → waitlist_ui_3aaa30_1.6.3.js} +0 -0
  160. /package/dist/{waitlist_ui_36a779_1.6.3-canary.v20260417193401.js → waitlist_ui_fc1048_1.6.3.js} +0 -0
  161. /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
  162. /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
  163. /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-canary.v20260417193401";
27
- version = "1.6.3-canary.v20260417193401";
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, useOrganizationList, useUser } from "@clerk/shared/react";
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().displayConfig;
33
+ const { displayConfig: { applicationName, logoImageUrl }, organizationSettings } = useEnvironment();
34
34
  const [isUriModalOpen, setIsUriModalOpen] = useState(false);
35
- const { isLoaded: isMembershipsLoaded, userMemberships } = useOrganizationList({ userMemberships: ctx.enableOrgSelection ? { infinite: true } : void 0 });
36
- const orgOptions = (userMemberships.data ?? []).map((m) => ({
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
- ctx.enableOrgSelection && orgOptions.length > 0 && effectiveOrg && /* @__PURE__ */ jsx(OrgSelect, {
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 && ctx.enableOrgSelection && effectiveOrg && /* @__PURE__ */ jsx("input", {
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, hasMore, onLoadMore }) {
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 { InfiniteListSpinner } from '@/ui/common/InfiniteListSpinner';\nimport { Box, Icon, Image, Text } from '@/ui/customizables';\nimport { Select, SelectButton, SelectOptionList } from '@/ui/elements/Select';\nimport { useInView } from '@/ui/hooks/useInView';\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 hasMore?: boolean;\n onLoadMore?: () => void;\n};\n\nexport function OrgSelect({ options, value, onChange, hasMore, onLoadMore }: OrgSelectProps) {\n const buttonRef = useRef<HTMLButtonElement>(null);\n const selected = options.find(option => option.value === value);\n const { ref: loadMoreRef } = useInView({\n threshold: 0,\n onChange: inView => {\n if (inView && hasMore) {\n onLoadMore?.();\n }\n },\n });\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 footer={hasMore ? <InfiniteListSpinner ref={loadMoreRef} /> : null}\n onReachEnd={hasMore ? onLoadMore : undefined}\n />\n </Select>\n );\n}\n"],"mappings":";;;;;;;;;;AAuBA,SAAgB,UAAU,EAAE,SAAS,OAAO,UAAU,SAAS,cAA8B;CAC3F,MAAM,YAAY,OAA0B,KAAK;CACjD,MAAM,WAAW,QAAQ,MAAK,WAAU,OAAO,UAAU,MAAM;CAC/D,MAAM,EAAE,KAAK,gBAAgB,UAAU;EACrC,WAAW;EACX,WAAU,WAAU;AAClB,OAAI,UAAU,QACZ,eAAc;;EAGnB,CAAC;AAEF,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;GACC,QAAQ,UAAU,oBAAC,uBAAoB,KAAK,cAAe,GAAG;GAC9D,YAAY,UAAU,aAAa;IACnC;GACK"}
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
@@ -17,7 +17,7 @@ import { UI_BRAND } from "./internal/index.js";
17
17
  */
18
18
  const ui = {
19
19
  __brand: UI_BRAND,
20
- version: "1.6.3-canary.v20260417193401",
20
+ version: "1.6.3",
21
21
  ClerkUI
22
22
  };
23
23
 
@@ -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-canary.v20260417193401";
27
- version = "1.6.3-canary.v20260417193401";
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, useOrganizationList, useUser } from "@clerk/shared/react";
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().displayConfig;
33
+ const { displayConfig: { applicationName, logoImageUrl }, organizationSettings } = useEnvironment();
34
34
  const [isUriModalOpen, setIsUriModalOpen] = useState(false);
35
- const { isLoaded: isMembershipsLoaded, userMemberships } = useOrganizationList({ userMemberships: ctx.enableOrgSelection ? { infinite: true } : void 0 });
36
- const orgOptions = (userMemberships.data ?? []).map((m) => ({
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
- ctx.enableOrgSelection && orgOptions.length > 0 && effectiveOrg && /* @__PURE__ */ jsx(OrgSelect, {
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 && ctx.enableOrgSelection && effectiveOrg && /* @__PURE__ */ jsx("input", {
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, hasMore, onLoadMore }) {
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 { InfiniteListSpinner } from '@/ui/common/InfiniteListSpinner';\nimport { Box, Icon, Image, Text } from '@/ui/customizables';\nimport { Select, SelectButton, SelectOptionList } from '@/ui/elements/Select';\nimport { useInView } from '@/ui/hooks/useInView';\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 hasMore?: boolean;\n onLoadMore?: () => void;\n};\n\nexport function OrgSelect({ options, value, onChange, hasMore, onLoadMore }: OrgSelectProps) {\n const buttonRef = useRef<HTMLButtonElement>(null);\n const selected = options.find(option => option.value === value);\n const { ref: loadMoreRef } = useInView({\n threshold: 0,\n onChange: inView => {\n if (inView && hasMore) {\n onLoadMore?.();\n }\n },\n });\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 footer={hasMore ? <InfiniteListSpinner ref={loadMoreRef} /> : null}\n onReachEnd={hasMore ? onLoadMore : undefined}\n />\n </Select>\n );\n}\n"],"mappings":";;;;;;;;;;AAuBA,SAAgB,UAAU,EAAE,SAAS,OAAO,UAAU,SAAS,cAA8B;CAC3F,MAAM,YAAY,OAA0B,KAAK;CACjD,MAAM,WAAW,QAAQ,MAAK,WAAU,OAAO,UAAU,MAAM;CAC/D,MAAM,EAAE,KAAK,gBAAgB,UAAU;EACrC,WAAW;EACX,WAAU,WAAU;AAClB,OAAI,UAAU,QACZ,eAAc;;EAGnB,CAAC;AAEF,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;GACC,QAAQ,UAAU,oBAAC,uBAAoB,KAAK,cAAe,GAAG;GAC9D,YAAY,UAAU,aAAa;IACnC;GACK"}
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"}
@@ -17,7 +17,7 @@ import { ClerkUI } from "./ClerkUI.js";
17
17
  */
18
18
  const ui = {
19
19
  __brand: UI_BRAND,
20
- version: "1.6.3-canary.v20260417193401",
20
+ version: "1.6.3",
21
21
  ClerkUI
22
22
  };
23
23
 
@@ -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}}}]);
package/dist/server.js CHANGED
@@ -22,7 +22,7 @@ import { UI_BRAND } from "./internal/index.js";
22
22
  */
23
23
  const ui = {
24
24
  __brand: UI_BRAND,
25
- version: "1.6.3-canary.v20260417193401",
25
+ version: "1.6.3",
26
26
  ClerkUI
27
27
  };
28
28