@workos-inc/widgets 1.18.0 → 1.19.0-next.1790102694835
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/dist/cjs/admin-portal-audit-log-streaming.client.cjs +16 -20
- package/dist/cjs/admin-portal-audit-log-streaming.client.cjs.map +1 -1
- package/dist/cjs/admin-portal-audit-log-streaming.client.d.cts +2 -0
- package/dist/cjs/admin-portal-domain-verification.client.cjs +42 -34
- package/dist/cjs/admin-portal-domain-verification.client.cjs.map +1 -1
- package/dist/cjs/admin-portal-domain-verification.client.d.cts +2 -0
- package/dist/cjs/admin-portal-sso-connection.client.cjs +77 -50
- package/dist/cjs/admin-portal-sso-connection.client.cjs.map +1 -1
- package/dist/cjs/api/client-graphql/client.cjs +2 -1
- package/dist/cjs/api/client-graphql/client.cjs.map +1 -1
- package/dist/cjs/api/client-graphql/generated.cjs +2295 -6
- package/dist/cjs/api/client-graphql/generated.cjs.map +1 -1
- package/dist/cjs/api/client-graphql/generated.d.cts +2989 -7
- package/dist/cjs/api/client-graphql/hooks.cjs +67 -0
- package/dist/cjs/api/client-graphql/hooks.cjs.map +1 -0
- package/dist/cjs/api/client-graphql/hooks.d.cts +44 -0
- package/dist/cjs/api/endpoint.cjs +43 -27
- package/dist/cjs/api/endpoint.cjs.map +1 -1
- package/dist/cjs/api/endpoint.d.cts +53 -20
- package/dist/cjs/api-keys.client.cjs +1 -2
- package/dist/cjs/api-keys.client.cjs.map +1 -1
- package/dist/cjs/directory-sync.client.cjs +54 -13
- package/dist/cjs/directory-sync.client.cjs.map +1 -1
- package/dist/cjs/experimental/api/fetch.cjs +44 -16
- package/dist/cjs/experimental/api/fetch.cjs.map +1 -1
- package/dist/cjs/experimental/api/fetch.d.cts +38 -9
- package/dist/cjs/experimental/api/react-query.cjs +75 -38
- package/dist/cjs/experimental/api/react-query.cjs.map +1 -1
- package/dist/cjs/experimental/api/react-query.d.cts +57 -24
- package/dist/cjs/experimental/api/swr.cjs +77 -35
- package/dist/cjs/experimental/api/swr.cjs.map +1 -1
- package/dist/cjs/experimental/api/swr.d.cts +49 -20
- package/dist/cjs/index.d.cts +4 -0
- package/dist/cjs/lib/add-mfa-dialog.cjs +39 -33
- package/dist/cjs/lib/add-mfa-dialog.cjs.map +1 -1
- package/dist/cjs/lib/admin-portal-audit-log-streaming.cjs.map +1 -1
- package/dist/cjs/lib/admin-portal-audit-log-streaming.d.cts +5 -3
- package/dist/cjs/lib/admin-portal-domain-verification.cjs.map +1 -1
- package/dist/cjs/lib/admin-portal-domain-verification.d.cts +4 -2
- package/dist/cjs/lib/api/api-key.cjs +128 -40
- package/dist/cjs/lib/api/api-key.cjs.map +1 -1
- package/dist/cjs/lib/api/api-key.d.cts +20 -9
- package/dist/cjs/lib/api/me.cjs +70 -0
- package/dist/cjs/lib/api/me.cjs.map +1 -0
- package/dist/cjs/lib/api/me.d.cts +37 -0
- package/dist/cjs/lib/api/pipes.cjs +419 -0
- package/dist/cjs/lib/api/pipes.cjs.map +1 -0
- package/dist/cjs/lib/api/pipes.d.cts +69 -0
- package/dist/cjs/lib/api/user-api-key.cjs +116 -45
- package/dist/cjs/lib/api/user-api-key.cjs.map +1 -1
- package/dist/cjs/lib/api/user-api-key.d.cts +17 -12
- package/dist/cjs/lib/api/user.cjs +170 -51
- package/dist/cjs/lib/api/user.cjs.map +1 -1
- package/dist/cjs/lib/api/user.d.cts +4 -25
- package/dist/cjs/lib/api-keys/api-key-details-dialog.cjs +2 -2
- package/dist/cjs/lib/api-keys/api-key-details-dialog.cjs.map +1 -1
- package/dist/cjs/lib/api-keys/create-api-key.cjs +1 -2
- package/dist/cjs/lib/api-keys/create-api-key.cjs.map +1 -1
- package/dist/cjs/lib/api-keys/revoke-api-key-dialog.cjs +5 -13
- package/dist/cjs/lib/api-keys/revoke-api-key-dialog.cjs.map +1 -1
- package/dist/cjs/lib/change-email-dialog.cjs +39 -26
- package/dist/cjs/lib/change-email-dialog.cjs.map +1 -1
- package/dist/cjs/lib/change-email-dialog.d.cts +4 -3
- package/dist/cjs/lib/change-password-dialog.cjs +14 -13
- package/dist/cjs/lib/change-password-dialog.cjs.map +1 -1
- package/dist/cjs/lib/client-graphql-result.cjs +116 -0
- package/dist/cjs/lib/client-graphql-result.cjs.map +1 -0
- package/dist/cjs/lib/client-graphql-result.d.cts +32 -0
- package/dist/cjs/lib/delete-domain-dialog.cjs.map +1 -1
- package/dist/cjs/lib/delete-domain-dialog.d.cts +3 -4
- package/dist/cjs/lib/delete-user-dialog.cjs.map +1 -1
- package/dist/cjs/lib/delete-user-dialog.d.cts +3 -2
- package/dist/cjs/lib/directory-sync.cjs +59 -23
- package/dist/cjs/lib/directory-sync.cjs.map +1 -1
- package/dist/cjs/lib/directory-sync.d.cts +23 -5
- package/dist/cjs/lib/domain-actions.cjs.map +1 -1
- package/dist/cjs/lib/domain-actions.d.cts +3 -4
- package/dist/cjs/lib/domain-item.cjs.map +1 -1
- package/dist/cjs/lib/domain-item.d.cts +3 -4
- package/dist/cjs/lib/edit-user-profile-dialog.cjs +19 -19
- package/dist/cjs/lib/edit-user-profile-dialog.cjs.map +1 -1
- package/dist/cjs/lib/edit-user-profile-dialog.d.cts +4 -3
- package/dist/cjs/lib/edit-user-role-dialog.cjs +3 -8
- package/dist/cjs/lib/edit-user-role-dialog.cjs.map +1 -1
- package/dist/cjs/lib/edit-user-role-dialog.d.cts +5 -4
- package/dist/cjs/lib/elevated-access.cjs +22 -13
- package/dist/cjs/lib/elevated-access.cjs.map +1 -1
- package/dist/cjs/lib/elevated-access.d.cts +1 -1
- package/dist/cjs/lib/invite-user-dialog.cjs +9 -15
- package/dist/cjs/lib/invite-user-dialog.cjs.map +1 -1
- package/dist/cjs/lib/logout-all-sessions-dialog.cjs +13 -5
- package/dist/cjs/lib/logout-all-sessions-dialog.cjs.map +1 -1
- package/dist/cjs/lib/logout-all-sessions-dialog.d.cts +2 -2
- package/dist/cjs/lib/logout-dialog.cjs +10 -6
- package/dist/cjs/lib/logout-dialog.cjs.map +1 -1
- package/dist/cjs/lib/logout-dialog.d.cts +3 -4
- package/dist/cjs/lib/name-server-icon.cjs.map +1 -1
- package/dist/cjs/lib/name-server-icon.d.cts +3 -4
- package/dist/cjs/lib/oauth-icons.cjs +13 -2
- package/dist/cjs/lib/oauth-icons.cjs.map +1 -1
- package/dist/cjs/lib/oauth-icons.d.cts +2 -1
- package/dist/cjs/lib/organization-switcher.cjs +3 -3
- package/dist/cjs/lib/organization-switcher.cjs.map +1 -1
- package/dist/cjs/lib/organization-switcher.d.cts +6 -3
- package/dist/cjs/lib/password-error-utils.cjs +28 -43
- package/dist/cjs/lib/password-error-utils.cjs.map +1 -1
- package/dist/cjs/lib/password-error-utils.d.cts +3 -13
- package/dist/cjs/lib/pipes-admin.cjs +109 -79
- package/dist/cjs/lib/pipes-admin.cjs.map +1 -1
- package/dist/cjs/lib/pipes-admin.d.cts +1 -1
- package/dist/cjs/lib/pipes.cjs +133 -60
- package/dist/cjs/lib/pipes.cjs.map +1 -1
- package/dist/cjs/lib/resend-invite-dialog.cjs.map +1 -1
- package/dist/cjs/lib/resend-invite-dialog.d.cts +3 -2
- package/dist/cjs/lib/reset-mfa-dialog.cjs +11 -3
- package/dist/cjs/lib/reset-mfa-dialog.cjs.map +1 -1
- package/dist/cjs/lib/revoke-invite-dialog.cjs.map +1 -1
- package/dist/cjs/lib/revoke-invite-dialog.d.cts +3 -2
- package/dist/cjs/lib/set-password-dialog.cjs +16 -3
- package/dist/cjs/lib/set-password-dialog.cjs.map +1 -1
- package/dist/cjs/lib/use-security-settings.cjs +5 -25
- package/dist/cjs/lib/use-security-settings.cjs.map +1 -1
- package/dist/cjs/lib/use-security-settings.d.cts +2 -2
- package/dist/cjs/lib/user-actions-dropdown.cjs +2 -6
- package/dist/cjs/lib/user-actions-dropdown.cjs.map +1 -1
- package/dist/cjs/lib/user-actions-dropdown.d.cts +3 -2
- package/dist/cjs/lib/user-api-keys/revoke-user-api-key-dialog.cjs +3 -10
- package/dist/cjs/lib/user-api-keys/revoke-user-api-key-dialog.cjs.map +1 -1
- package/dist/cjs/lib/user-profile.cjs +10 -5
- package/dist/cjs/lib/user-profile.cjs.map +1 -1
- package/dist/cjs/lib/user-profile.d.cts +5 -2
- package/dist/cjs/lib/user-security.cjs +4 -5
- package/dist/cjs/lib/user-security.cjs.map +1 -1
- package/dist/cjs/lib/user-security.d.cts +6 -2
- package/dist/cjs/lib/user-sessions.cjs +2 -2
- package/dist/cjs/lib/user-sessions.cjs.map +1 -1
- package/dist/cjs/lib/user-sessions.d.cts +6 -4
- package/dist/cjs/lib/users-filter.cjs.map +1 -1
- package/dist/cjs/lib/users-filter.d.cts +4 -3
- package/dist/cjs/lib/users-management-context.cjs.map +1 -1
- package/dist/cjs/lib/users-management-context.d.cts +4 -18
- package/dist/cjs/lib/users-management-state.cjs.map +1 -1
- package/dist/cjs/lib/users-management-state.d.cts +4 -25
- package/dist/cjs/lib/users-management.cjs.map +1 -1
- package/dist/cjs/lib/users-management.d.cts +7 -7
- package/dist/cjs/lib/view-dns-record-dialog.cjs.map +1 -1
- package/dist/cjs/lib/view-dns-record-dialog.d.cts +3 -4
- package/dist/cjs/organization-switcher.client.cjs +7 -6
- package/dist/cjs/organization-switcher.client.cjs.map +1 -1
- package/dist/cjs/organization-switcher.client.d.cts +3 -1
- package/dist/cjs/pipes-admin.client.cjs +7 -4
- package/dist/cjs/pipes-admin.client.cjs.map +1 -1
- package/dist/cjs/pipes.client.cjs +17 -16
- package/dist/cjs/pipes.client.cjs.map +1 -1
- package/dist/cjs/user-CgBDfSHl.d.cts +502 -0
- package/dist/cjs/user-profile.client.cjs +3 -3
- package/dist/cjs/user-profile.client.cjs.map +1 -1
- package/dist/cjs/user-profile.client.d.cts +4 -1
- package/dist/cjs/user-security.client.cjs +25 -14
- package/dist/cjs/user-security.client.cjs.map +1 -1
- package/dist/cjs/user-security.client.d.cts +2 -0
- package/dist/cjs/user-sessions.client.cjs +12 -29
- package/dist/cjs/user-sessions.client.cjs.map +1 -1
- package/dist/cjs/user-sessions.client.d.cts +2 -0
- package/dist/cjs/users-management.client.cjs +1 -4
- package/dist/cjs/users-management.client.cjs.map +1 -1
- package/dist/cjs/users-management.client.d.cts +4 -1
- package/dist/cjs/utils.cjs +2 -1
- package/dist/cjs/utils.cjs.map +1 -1
- package/dist/esm/admin-portal-audit-log-streaming.client.d.ts +2 -0
- package/dist/esm/admin-portal-audit-log-streaming.client.js +20 -23
- package/dist/esm/admin-portal-audit-log-streaming.client.js.map +1 -1
- package/dist/esm/admin-portal-domain-verification.client.d.ts +2 -0
- package/dist/esm/admin-portal-domain-verification.client.js +45 -39
- package/dist/esm/admin-portal-domain-verification.client.js.map +1 -1
- package/dist/esm/admin-portal-sso-connection.client.js +80 -52
- package/dist/esm/admin-portal-sso-connection.client.js.map +1 -1
- package/dist/esm/api/client-graphql/client.js +2 -1
- package/dist/esm/api/client-graphql/client.js.map +1 -1
- package/dist/esm/api/client-graphql/generated.d.ts +2989 -7
- package/dist/esm/api/client-graphql/generated.js +2203 -0
- package/dist/esm/api/client-graphql/generated.js.map +1 -1
- package/dist/esm/api/client-graphql/hooks.d.ts +44 -0
- package/dist/esm/api/client-graphql/hooks.js +43 -0
- package/dist/esm/api/client-graphql/hooks.js.map +1 -0
- package/dist/esm/api/endpoint.d.ts +53 -20
- package/dist/esm/api/endpoint.js +43 -27
- package/dist/esm/api/endpoint.js.map +1 -1
- package/dist/esm/api-keys.client.js +4 -2
- package/dist/esm/api-keys.client.js.map +1 -1
- package/dist/esm/directory-sync.client.js +56 -7
- package/dist/esm/directory-sync.client.js.map +1 -1
- package/dist/esm/experimental/api/fetch.d.ts +38 -9
- package/dist/esm/experimental/api/fetch.js +44 -16
- package/dist/esm/experimental/api/fetch.js.map +1 -1
- package/dist/esm/experimental/api/react-query.d.ts +57 -24
- package/dist/esm/experimental/api/react-query.js +75 -38
- package/dist/esm/experimental/api/react-query.js.map +1 -1
- package/dist/esm/experimental/api/swr.d.ts +49 -20
- package/dist/esm/experimental/api/swr.js +77 -35
- package/dist/esm/experimental/api/swr.js.map +1 -1
- package/dist/esm/index.d.ts +4 -0
- package/dist/esm/lib/add-mfa-dialog.js +39 -36
- package/dist/esm/lib/add-mfa-dialog.js.map +1 -1
- package/dist/esm/lib/admin-portal-audit-log-streaming.d.ts +5 -3
- package/dist/esm/lib/admin-portal-audit-log-streaming.js.map +1 -1
- package/dist/esm/lib/admin-portal-domain-verification.d.ts +4 -2
- package/dist/esm/lib/admin-portal-domain-verification.js.map +1 -1
- package/dist/esm/lib/api/api-key.d.ts +20 -9
- package/dist/esm/lib/api/api-key.js +124 -49
- package/dist/esm/lib/api/api-key.js.map +1 -1
- package/dist/esm/lib/api/me.d.ts +37 -0
- package/dist/esm/lib/api/me.js +37 -0
- package/dist/esm/lib/api/me.js.map +1 -0
- package/dist/esm/lib/api/pipes.d.ts +69 -0
- package/dist/esm/lib/api/pipes.js +380 -0
- package/dist/esm/lib/api/pipes.js.map +1 -0
- package/dist/esm/lib/api/user-api-key.d.ts +17 -12
- package/dist/esm/lib/api/user-api-key.js +113 -52
- package/dist/esm/lib/api/user-api-key.js.map +1 -1
- package/dist/esm/lib/api/user.d.ts +4 -25
- package/dist/esm/lib/api/user.js +173 -59
- package/dist/esm/lib/api/user.js.map +1 -1
- package/dist/esm/lib/api-keys/api-key-details-dialog.js +1 -3
- package/dist/esm/lib/api-keys/api-key-details-dialog.js.map +1 -1
- package/dist/esm/lib/api-keys/create-api-key.js +2 -2
- package/dist/esm/lib/api-keys/create-api-key.js.map +1 -1
- package/dist/esm/lib/api-keys/revoke-api-key-dialog.js +5 -15
- package/dist/esm/lib/api-keys/revoke-api-key-dialog.js.map +1 -1
- package/dist/esm/lib/change-email-dialog.d.ts +4 -3
- package/dist/esm/lib/change-email-dialog.js +39 -31
- package/dist/esm/lib/change-email-dialog.js.map +1 -1
- package/dist/esm/lib/change-password-dialog.js +14 -13
- package/dist/esm/lib/change-password-dialog.js.map +1 -1
- package/dist/esm/lib/client-graphql-result.d.ts +32 -0
- package/dist/esm/lib/client-graphql-result.js +89 -0
- package/dist/esm/lib/client-graphql-result.js.map +1 -0
- package/dist/esm/lib/delete-domain-dialog.d.ts +3 -4
- package/dist/esm/lib/delete-domain-dialog.js.map +1 -1
- package/dist/esm/lib/delete-user-dialog.d.ts +3 -2
- package/dist/esm/lib/delete-user-dialog.js.map +1 -1
- package/dist/esm/lib/directory-sync.d.ts +23 -5
- package/dist/esm/lib/directory-sync.js +46 -14
- package/dist/esm/lib/directory-sync.js.map +1 -1
- package/dist/esm/lib/domain-actions.d.ts +3 -4
- package/dist/esm/lib/domain-actions.js.map +1 -1
- package/dist/esm/lib/domain-item.d.ts +3 -4
- package/dist/esm/lib/domain-item.js.map +1 -1
- package/dist/esm/lib/edit-user-profile-dialog.d.ts +4 -3
- package/dist/esm/lib/edit-user-profile-dialog.js +19 -19
- package/dist/esm/lib/edit-user-profile-dialog.js.map +1 -1
- package/dist/esm/lib/edit-user-role-dialog.d.ts +5 -4
- package/dist/esm/lib/edit-user-role-dialog.js +7 -11
- package/dist/esm/lib/edit-user-role-dialog.js.map +1 -1
- package/dist/esm/lib/elevated-access.d.ts +1 -1
- package/dist/esm/lib/elevated-access.js +20 -11
- package/dist/esm/lib/elevated-access.js.map +1 -1
- package/dist/esm/lib/invite-user-dialog.js +10 -16
- package/dist/esm/lib/invite-user-dialog.js.map +1 -1
- package/dist/esm/lib/logout-all-sessions-dialog.d.ts +2 -2
- package/dist/esm/lib/logout-all-sessions-dialog.js +16 -5
- package/dist/esm/lib/logout-all-sessions-dialog.js.map +1 -1
- package/dist/esm/lib/logout-dialog.d.ts +3 -4
- package/dist/esm/lib/logout-dialog.js +12 -8
- package/dist/esm/lib/logout-dialog.js.map +1 -1
- package/dist/esm/lib/name-server-icon.d.ts +3 -4
- package/dist/esm/lib/name-server-icon.js.map +1 -1
- package/dist/esm/lib/oauth-icons.d.ts +2 -1
- package/dist/esm/lib/oauth-icons.js +11 -1
- package/dist/esm/lib/oauth-icons.js.map +1 -1
- package/dist/esm/lib/organization-switcher.d.ts +6 -3
- package/dist/esm/lib/organization-switcher.js +3 -3
- package/dist/esm/lib/organization-switcher.js.map +1 -1
- package/dist/esm/lib/password-error-utils.d.ts +3 -13
- package/dist/esm/lib/password-error-utils.js +28 -43
- package/dist/esm/lib/password-error-utils.js.map +1 -1
- package/dist/esm/lib/pipes-admin.d.ts +1 -1
- package/dist/esm/lib/pipes-admin.js +105 -78
- package/dist/esm/lib/pipes-admin.js.map +1 -1
- package/dist/esm/lib/pipes.js +140 -71
- package/dist/esm/lib/pipes.js.map +1 -1
- package/dist/esm/lib/resend-invite-dialog.d.ts +3 -2
- package/dist/esm/lib/resend-invite-dialog.js.map +1 -1
- package/dist/esm/lib/reset-mfa-dialog.js +11 -3
- package/dist/esm/lib/reset-mfa-dialog.js.map +1 -1
- package/dist/esm/lib/revoke-invite-dialog.d.ts +3 -2
- package/dist/esm/lib/revoke-invite-dialog.js.map +1 -1
- package/dist/esm/lib/set-password-dialog.js +16 -3
- package/dist/esm/lib/set-password-dialog.js.map +1 -1
- package/dist/esm/lib/use-security-settings.d.ts +2 -2
- package/dist/esm/lib/use-security-settings.js +5 -27
- package/dist/esm/lib/use-security-settings.js.map +1 -1
- package/dist/esm/lib/user-actions-dropdown.d.ts +3 -2
- package/dist/esm/lib/user-actions-dropdown.js +2 -6
- package/dist/esm/lib/user-actions-dropdown.js.map +1 -1
- package/dist/esm/lib/user-api-keys/revoke-user-api-key-dialog.js +3 -11
- package/dist/esm/lib/user-api-keys/revoke-user-api-key-dialog.js.map +1 -1
- package/dist/esm/lib/user-profile.d.ts +5 -2
- package/dist/esm/lib/user-profile.js +15 -6
- package/dist/esm/lib/user-profile.js.map +1 -1
- package/dist/esm/lib/user-security.d.ts +6 -2
- package/dist/esm/lib/user-security.js +4 -5
- package/dist/esm/lib/user-security.js.map +1 -1
- package/dist/esm/lib/user-sessions.d.ts +6 -4
- package/dist/esm/lib/user-sessions.js +2 -2
- package/dist/esm/lib/user-sessions.js.map +1 -1
- package/dist/esm/lib/users-filter.d.ts +4 -3
- package/dist/esm/lib/users-filter.js.map +1 -1
- package/dist/esm/lib/users-management-context.d.ts +4 -18
- package/dist/esm/lib/users-management-context.js.map +1 -1
- package/dist/esm/lib/users-management-state.d.ts +4 -25
- package/dist/esm/lib/users-management-state.js.map +1 -1
- package/dist/esm/lib/users-management.d.ts +7 -7
- package/dist/esm/lib/users-management.js.map +1 -1
- package/dist/esm/lib/view-dns-record-dialog.d.ts +3 -4
- package/dist/esm/lib/view-dns-record-dialog.js.map +1 -1
- package/dist/esm/organization-switcher.client.d.ts +3 -1
- package/dist/esm/organization-switcher.client.js +10 -6
- package/dist/esm/organization-switcher.client.js.map +1 -1
- package/dist/esm/pipes-admin.client.js +10 -4
- package/dist/esm/pipes-admin.client.js.map +1 -1
- package/dist/esm/pipes.client.js +17 -14
- package/dist/esm/pipes.client.js.map +1 -1
- package/dist/esm/user-BE5sIud6.d.ts +502 -0
- package/dist/esm/user-profile.client.d.ts +4 -1
- package/dist/esm/user-profile.client.js +2 -2
- package/dist/esm/user-profile.client.js.map +1 -1
- package/dist/esm/user-security.client.d.ts +2 -0
- package/dist/esm/user-security.client.js +28 -14
- package/dist/esm/user-security.client.js.map +1 -1
- package/dist/esm/user-sessions.client.d.ts +2 -0
- package/dist/esm/user-sessions.client.js +16 -30
- package/dist/esm/user-sessions.client.js.map +1 -1
- package/dist/esm/users-management.client.d.ts +4 -1
- package/dist/esm/users-management.client.js +2 -5
- package/dist/esm/users-management.client.js.map +1 -1
- package/dist/esm/utils.js +2 -1
- package/dist/esm/utils.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import {
|
|
3
|
-
import '
|
|
4
|
-
import '../api/widgets-api-client.js';
|
|
2
|
+
import { OrganizationDomainFieldsFragment } from '../api/client-graphql/generated.js';
|
|
3
|
+
import 'graphql-request';
|
|
5
4
|
|
|
6
5
|
interface NameServerIconProps {
|
|
7
|
-
provider?:
|
|
6
|
+
provider?: OrganizationDomainFieldsFragment["nameServer"];
|
|
8
7
|
}
|
|
9
8
|
declare const NameServerIcon: ({ provider }: NameServerIconProps) => React.JSX.Element;
|
|
10
9
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/name-server-icon.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { VisuallyHidden } from \"@radix-ui/themes\";\nimport {
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/name-server-icon.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { VisuallyHidden } from \"@radix-ui/themes\";\nimport type { OrganizationDomainFieldsFragment } from \"../api/client-graphql/generated.js\";\nimport { ProviderIcon } from \"./provider-icon.js\";\n\ninterface NameServerIconProps {\n provider?: OrganizationDomainFieldsFragment[\"nameServer\"];\n}\n\nexport const NameServerIcon = ({ provider }: NameServerIconProps) => (\n <>\n <CustomProviderIcon\n provider=\"aws\"\n show={provider === \"AwsRoute53\"}\n size=\"2\"\n />\n <CustomProviderIcon\n provider=\"google\"\n show={provider === \"GoogleDomains\"}\n size=\"2\"\n />\n <CustomProviderIcon\n provider=\"cloudflare\"\n show={provider === \"CloudFlare\"}\n size=\"2\"\n />\n <CustomProviderIcon\n provider=\"godaddy\"\n show={provider === \"GoDaddy\"}\n size=\"2\"\n />\n\n {(provider === undefined || provider === \"Other\") && (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <g clipPath=\"url(#clip0_439_15264)\">\n <path\n d=\"M8.36963 0.84314C12.1559 1.03545 15.1665 4.16625 15.1665 8.00037C15.1663 11.9581 11.9583 15.1662 8.00049 15.1664C4.04256 15.1664 0.833672 11.9583 0.833496 8.00037C0.833496 4.04233 4.04245 0.833374 8.00049 0.833374L8.36963 0.84314ZM1.85596 8.50037C2.0802 11.2918 4.1615 13.5566 6.86475 14.0599C5.68944 12.4359 4.98911 10.5102 4.85498 8.50037H1.85596ZM11.144 8.50037C11.0099 10.5105 10.3098 12.4357 9.13428 14.0599C11.8382 13.5571 13.9198 11.2923 14.144 8.50037H11.144ZM5.85889 8.50037C6.00462 10.4763 6.75172 12.3598 7.99951 13.8978C9.24761 12.3597 9.99445 10.4765 10.1401 8.50037H5.85889ZM6.86572 1.93884C4.16183 2.44193 2.08009 4.70839 1.85596 7.50037H4.85498C4.98905 5.48961 5.68956 3.5633 6.86572 1.93884ZM7.99951 2.10193C6.75148 3.64015 6.00449 5.52408 5.85889 7.50037H10.1401C9.99457 5.5239 9.24784 3.64025 7.99951 2.10193ZM9.1333 1.93884C10.3097 3.56349 11.011 5.48937 11.145 7.50037H14.144C13.9199 4.70785 11.8378 2.44135 9.1333 1.93884Z\"\n fill=\"#2B333B\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_439_15264\">\n <rect width=\"16\" height=\"16\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n )}\n </>\n);\n\ntype IconProps = React.ComponentPropsWithoutRef<typeof ProviderIcon> & {\n show?: boolean;\n};\n\nconst CustomProviderIcon = ({ show, ...props }: IconProps) => {\n const Wrapper = show ? React.Fragment : VisuallyHidden;\n return (\n <Wrapper>\n <ProviderIcon {...props} provider={props.provider} size=\"1\" />\n </Wrapper>\n );\n};\n"],"mappings":";AAYE,mBACE,KAsBE,YAvBJ;AAVF,YAAY,WAAW;AACvB,SAAS,sBAAsB;AAE/B,SAAS,oBAAoB;AAMtB,MAAM,iBAAiB,CAAC,EAAE,SAAS,MACxC,iCACE;AAAA;AAAA,IAAC;AAAA;AAAA,MACC,UAAS;AAAA,MACT,MAAM,aAAa;AAAA,MACnB,MAAK;AAAA;AAAA,EACP;AAAA,EACA;AAAA,IAAC;AAAA;AAAA,MACC,UAAS;AAAA,MACT,MAAM,aAAa;AAAA,MACnB,MAAK;AAAA;AAAA,EACP;AAAA,EACA;AAAA,IAAC;AAAA;AAAA,MACC,UAAS;AAAA,MACT,MAAM,aAAa;AAAA,MACnB,MAAK;AAAA;AAAA,EACP;AAAA,EACA;AAAA,IAAC;AAAA;AAAA,MACC,UAAS;AAAA,MACT,MAAM,aAAa;AAAA,MACnB,MAAK;AAAA;AAAA,EACP;AAAA,GAEE,aAAa,UAAa,aAAa,YACvC;AAAA,IAAC;AAAA;AAAA,MACC,OAAM;AAAA,MACN,QAAO;AAAA,MACP,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,OAAM;AAAA,MAEN;AAAA,4BAAC,OAAE,UAAS,yBACV;AAAA,UAAC;AAAA;AAAA,YACC,GAAE;AAAA,YACF,MAAK;AAAA;AAAA,QACP,GACF;AAAA,QACA,oBAAC,UACC,8BAAC,cAAS,IAAG,mBACX,8BAAC,UAAK,OAAM,MAAK,QAAO,MAAK,MAAK,SAAQ,GAC5C,GACF;AAAA;AAAA;AAAA,EACF;AAAA,GAEJ;AAOF,MAAM,qBAAqB,CAAC,EAAE,MAAM,GAAG,MAAM,MAAiB;AAC5D,QAAM,UAAU,OAAO,MAAM,WAAW;AACxC,SACE,oBAAC,WACC,8BAAC,gBAAc,GAAG,OAAO,UAAU,MAAM,UAAU,MAAK,KAAI,GAC9D;AAEJ;","names":[]}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
|
|
3
3
|
type OAuthAccount = "GithubOAuth" | "GoogleOAuth" | "MicrosoftOAuth" | "AppleOAuth";
|
|
4
|
+
declare function isOAuthAccount(value: string): value is OAuthAccount;
|
|
4
5
|
declare const OAuthIcon: ({ account, ...props }: React.ComponentPropsWithoutRef<"svg"> & {
|
|
5
6
|
account: OAuthAccount;
|
|
6
7
|
}) => React.JSX.Element;
|
|
7
8
|
declare const getOAuthName: (account: OAuthAccount) => "Apple" | "GitHub" | "Google" | "Microsoft";
|
|
8
9
|
|
|
9
|
-
export { type OAuthAccount, OAuthIcon, getOAuthName };
|
|
10
|
+
export { type OAuthAccount, OAuthIcon, getOAuthName, isOAuthAccount };
|
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
2
|
import * as React from "react";
|
|
3
|
+
const OAUTH_ACCOUNTS = [
|
|
4
|
+
"GithubOAuth",
|
|
5
|
+
"GoogleOAuth",
|
|
6
|
+
"MicrosoftOAuth",
|
|
7
|
+
"AppleOAuth"
|
|
8
|
+
];
|
|
9
|
+
function isOAuthAccount(value) {
|
|
10
|
+
return OAUTH_ACCOUNTS.some((account) => account === value);
|
|
11
|
+
}
|
|
3
12
|
const GitHub = React.forwardRef((props, forwardedRef) => /* @__PURE__ */ jsx(
|
|
4
13
|
"svg",
|
|
5
14
|
{
|
|
@@ -140,6 +149,7 @@ const getOAuthName = (account) => {
|
|
|
140
149
|
};
|
|
141
150
|
export {
|
|
142
151
|
OAuthIcon,
|
|
143
|
-
getOAuthName
|
|
152
|
+
getOAuthName,
|
|
153
|
+
isOAuthAccount
|
|
144
154
|
};
|
|
145
155
|
//# sourceMappingURL=oauth-icons.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/oauth-icons.tsx"],"sourcesContent":["import * as React from \"react\";\n\nexport type OAuthAccount =\n | \"GithubOAuth\"\n | \"GoogleOAuth\"\n | \"MicrosoftOAuth\"\n | \"AppleOAuth\";\n\nconst GitHub = React.forwardRef<\n SVGSVGElement,\n React.ComponentPropsWithoutRef<\"svg\">\n>((props, forwardedRef) => (\n <svg\n ref={forwardedRef}\n fill=\"none\"\n height=\"16\"\n viewBox=\"0 0 15 15\"\n width=\"16\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n clipRule=\"evenodd\"\n d=\"M7.49933 0.25C3.49635 0.25 0.25 3.49593 0.25 7.50024C0.25 10.703 2.32715 13.4206 5.2081 14.3797C5.57084 14.446 5.70302 14.2222 5.70302 14.0299C5.70302 13.8576 5.69679 13.4019 5.69323 12.797C3.67661 13.235 3.25112 11.825 3.25112 11.825C2.92132 10.9874 2.44599 10.7644 2.44599 10.7644C1.78773 10.3149 2.49584 10.3238 2.49584 10.3238C3.22353 10.375 3.60629 11.0711 3.60629 11.0711C4.25298 12.1788 5.30335 11.8588 5.71638 11.6732C5.78225 11.205 5.96962 10.8854 6.17658 10.7043C4.56675 10.5209 2.87415 9.89918 2.87415 7.12104C2.87415 6.32925 3.15677 5.68257 3.62053 5.17563C3.54576 4.99226 3.29697 4.25521 3.69174 3.25691C3.69174 3.25691 4.30015 3.06196 5.68522 3.99973C6.26337 3.83906 6.8838 3.75895 7.50022 3.75583C8.1162 3.75895 8.73619 3.83906 9.31523 3.99973C10.6994 3.06196 11.3069 3.25691 11.3069 3.25691C11.7026 4.25521 11.4538 4.99226 11.3795 5.17563C11.8441 5.68257 12.1245 6.32925 12.1245 7.12104C12.1245 9.9063 10.4292 10.5192 8.81452 10.6985C9.07444 10.9224 9.30633 11.3648 9.30633 12.0413C9.30633 13.0102 9.29742 13.7922 9.29742 14.0299C9.29742 14.2239 9.42828 14.4496 9.79591 14.3788C12.6746 13.4179 14.75 10.7025 14.75 7.50024C14.75 3.49593 11.5036 0.25 7.49933 0.25Z\"\n fill=\"currentColor\"\n fillRule=\"evenodd\"\n ></path>\n </svg>\n));\n\nGitHub.displayName = \"GitHub\";\n\nconst Google = React.forwardRef<\n SVGSVGElement,\n React.ComponentPropsWithoutRef<\"svg\">\n>((props, forwardedRef) => (\n <svg\n ref={forwardedRef}\n fill=\"none\"\n height=\"15\"\n viewBox=\"0 0 16 16\"\n width=\"15\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <g>\n <path\n d=\"M15.83 8.18C15.83 7.65333 15.7833 7.15333 15.7033 6.66667H8.17V9.67333H12.4833C12.29 10.66 11.7233 11.4933 10.8833 12.06V14.06H13.4567C14.9633 12.6667 15.83 10.6133 15.83 8.18Z\"\n fill=\"#4285F4\"\n />\n <path\n d=\"M8.17 16C10.33 16 12.1367 15.28 13.4567 14.06L10.8833 12.06C10.1633 12.54 9.25 12.8333 8.17 12.8333C6.08334 12.8333 4.31667 11.4267 3.68334 9.52667H1.03V11.5867C2.34334 14.2 5.04334 16 8.17 16Z\"\n fill=\"#34A853\"\n />\n <path\n d=\"M3.68334 9.52667C3.51667 9.04667 3.43 8.53333 3.43 8C3.43 7.46667 3.52334 6.95334 3.68334 6.47334V4.41334H1.03C0.483335 5.49334 0.170002 6.70667 0.170002 8C0.170002 9.29333 0.483335 10.5067 1.03 11.5867L3.68334 9.52667Z\"\n fill=\"#FBBC05\"\n />\n <path\n d=\"M8.17 3.16667C9.35 3.16667 10.4033 3.57334 11.2367 4.36667L13.5167 2.08667C12.1367 0.793334 10.33 0 8.17 0C5.04334 0 2.34334 1.8 1.03 4.41334L3.68334 6.47334C4.31667 4.57334 6.08334 3.16667 8.17 3.16667Z\"\n fill=\"#EA4335\"\n />\n </g>\n </svg>\n));\n\nGoogle.displayName = \"Google\";\n\nconst Microsoft = React.forwardRef<\n SVGSVGElement,\n React.ComponentPropsWithoutRef<\"svg\">\n>((props, forwardedRef) => (\n <svg\n ref={forwardedRef}\n fill=\"none\"\n height=\"15\"\n viewBox=\"0 0 15 15\"\n width=\"15\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <g>\n <path d=\"M0 0H7L7 7H-4.76837e-07L0 0Z\" fill=\"#F35325\" />\n <path d=\"M8 0H15V7H8L8 0Z\" fill=\"#81BC06\" />\n <path d=\"M0 8H7V15H0V8Z\" fill=\"#05A6F0\" />\n <path d=\"M8 8L15 8V15L8 15V8Z\" fill=\"#FFBA08\" />\n </g>\n </svg>\n));\n\nMicrosoft.displayName = \"Microsoft\";\n\nconst Apple = React.forwardRef<\n SVGSVGElement,\n React.ComponentPropsWithoutRef<\"svg\">\n>(({ style, ...props }, forwardedRef) => (\n <svg\n ref={forwardedRef}\n fill=\"none\"\n height=\"15\"\n style={{ overflow: \"visible\", ...style }}\n viewBox=\"0 0 15 15\"\n width=\"15\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M14.219 3.33667C14.1169 3.41674 12.3137 4.44312 12.3137 6.72534C12.3137 9.3651 14.6082 10.299 14.6769 10.3221C14.6663 10.379 14.3124 11.601 13.4671 12.8462C12.7134 13.942 11.9263 15.0359 10.7288 15.0359C9.53134 15.0359 9.22317 14.3333 7.84081 14.3333C6.49366 14.3333 6.01469 15.0591 4.91935 15.0591C3.82401 15.0591 3.05978 14.0451 2.18104 12.8C1.1632 11.3378 0.34082 9.06625 0.34082 6.91034C0.34082 3.45232 2.56668 1.61835 4.75732 1.61835C5.92133 1.61835 6.89164 2.39036 7.62246 2.39036C8.31802 2.39036 9.40277 1.5721 10.7271 1.5721C11.2289 1.5721 13.0321 1.61835 14.219 3.33667ZM10.0984 0.108136C10.646 -0.548247 11.0334 -1.459 11.0334 -2.36975C11.0334 -2.49605 11.0229 -2.62412 11 -2.72729C10.1089 -2.6935 9.04883 -2.12783 8.40959 -1.37895C7.90772 -0.802617 7.43931 0.108136 7.43931 1.03134C7.43931 1.1701 7.46218 1.30883 7.47277 1.35331C7.52909 1.36398 7.62067 1.37643 7.71224 1.37643C8.51172 1.37643 9.51724 0.835672 10.0984 0.108136Z\"\n fill=\"currentColor\"\n />\n </svg>\n));\n\nApple.displayName = \"Apple\";\n\nexport const OAuthIcon = ({\n account,\n ...props\n}: React.ComponentPropsWithoutRef<\"svg\"> & { account: OAuthAccount }) => {\n switch (account) {\n case \"GithubOAuth\":\n return <GitHub {...props} />;\n case \"GoogleOAuth\":\n return <Google {...props} />;\n case \"MicrosoftOAuth\":\n return <Microsoft {...props} />;\n case \"AppleOAuth\":\n return <Apple {...props} />;\n default:\n account satisfies never;\n throw new Error(`Unknown OAuth account type: ${account}`);\n }\n};\n\nexport const getOAuthName = (account: OAuthAccount) => {\n switch (account) {\n case \"GithubOAuth\":\n return \"GitHub\";\n case \"GoogleOAuth\":\n return \"Google\";\n case \"MicrosoftOAuth\":\n return \"Microsoft\";\n case \"AppleOAuth\":\n return \"Apple\";\n default:\n account satisfies never;\n throw new Error(`Unknown OAuth account type: ${account}`);\n }\n};\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/oauth-icons.tsx"],"sourcesContent":["import * as React from \"react\";\n\nexport type OAuthAccount =\n | \"GithubOAuth\"\n | \"GoogleOAuth\"\n | \"MicrosoftOAuth\"\n | \"AppleOAuth\";\n\nconst OAUTH_ACCOUNTS: readonly OAuthAccount[] = [\n \"GithubOAuth\",\n \"GoogleOAuth\",\n \"MicrosoftOAuth\",\n \"AppleOAuth\",\n];\n\nexport function isOAuthAccount(value: string): value is OAuthAccount {\n return OAUTH_ACCOUNTS.some((account) => account === value);\n}\n\nconst GitHub = React.forwardRef<\n SVGSVGElement,\n React.ComponentPropsWithoutRef<\"svg\">\n>((props, forwardedRef) => (\n <svg\n ref={forwardedRef}\n fill=\"none\"\n height=\"16\"\n viewBox=\"0 0 15 15\"\n width=\"16\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n clipRule=\"evenodd\"\n d=\"M7.49933 0.25C3.49635 0.25 0.25 3.49593 0.25 7.50024C0.25 10.703 2.32715 13.4206 5.2081 14.3797C5.57084 14.446 5.70302 14.2222 5.70302 14.0299C5.70302 13.8576 5.69679 13.4019 5.69323 12.797C3.67661 13.235 3.25112 11.825 3.25112 11.825C2.92132 10.9874 2.44599 10.7644 2.44599 10.7644C1.78773 10.3149 2.49584 10.3238 2.49584 10.3238C3.22353 10.375 3.60629 11.0711 3.60629 11.0711C4.25298 12.1788 5.30335 11.8588 5.71638 11.6732C5.78225 11.205 5.96962 10.8854 6.17658 10.7043C4.56675 10.5209 2.87415 9.89918 2.87415 7.12104C2.87415 6.32925 3.15677 5.68257 3.62053 5.17563C3.54576 4.99226 3.29697 4.25521 3.69174 3.25691C3.69174 3.25691 4.30015 3.06196 5.68522 3.99973C6.26337 3.83906 6.8838 3.75895 7.50022 3.75583C8.1162 3.75895 8.73619 3.83906 9.31523 3.99973C10.6994 3.06196 11.3069 3.25691 11.3069 3.25691C11.7026 4.25521 11.4538 4.99226 11.3795 5.17563C11.8441 5.68257 12.1245 6.32925 12.1245 7.12104C12.1245 9.9063 10.4292 10.5192 8.81452 10.6985C9.07444 10.9224 9.30633 11.3648 9.30633 12.0413C9.30633 13.0102 9.29742 13.7922 9.29742 14.0299C9.29742 14.2239 9.42828 14.4496 9.79591 14.3788C12.6746 13.4179 14.75 10.7025 14.75 7.50024C14.75 3.49593 11.5036 0.25 7.49933 0.25Z\"\n fill=\"currentColor\"\n fillRule=\"evenodd\"\n ></path>\n </svg>\n));\n\nGitHub.displayName = \"GitHub\";\n\nconst Google = React.forwardRef<\n SVGSVGElement,\n React.ComponentPropsWithoutRef<\"svg\">\n>((props, forwardedRef) => (\n <svg\n ref={forwardedRef}\n fill=\"none\"\n height=\"15\"\n viewBox=\"0 0 16 16\"\n width=\"15\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <g>\n <path\n d=\"M15.83 8.18C15.83 7.65333 15.7833 7.15333 15.7033 6.66667H8.17V9.67333H12.4833C12.29 10.66 11.7233 11.4933 10.8833 12.06V14.06H13.4567C14.9633 12.6667 15.83 10.6133 15.83 8.18Z\"\n fill=\"#4285F4\"\n />\n <path\n d=\"M8.17 16C10.33 16 12.1367 15.28 13.4567 14.06L10.8833 12.06C10.1633 12.54 9.25 12.8333 8.17 12.8333C6.08334 12.8333 4.31667 11.4267 3.68334 9.52667H1.03V11.5867C2.34334 14.2 5.04334 16 8.17 16Z\"\n fill=\"#34A853\"\n />\n <path\n d=\"M3.68334 9.52667C3.51667 9.04667 3.43 8.53333 3.43 8C3.43 7.46667 3.52334 6.95334 3.68334 6.47334V4.41334H1.03C0.483335 5.49334 0.170002 6.70667 0.170002 8C0.170002 9.29333 0.483335 10.5067 1.03 11.5867L3.68334 9.52667Z\"\n fill=\"#FBBC05\"\n />\n <path\n d=\"M8.17 3.16667C9.35 3.16667 10.4033 3.57334 11.2367 4.36667L13.5167 2.08667C12.1367 0.793334 10.33 0 8.17 0C5.04334 0 2.34334 1.8 1.03 4.41334L3.68334 6.47334C4.31667 4.57334 6.08334 3.16667 8.17 3.16667Z\"\n fill=\"#EA4335\"\n />\n </g>\n </svg>\n));\n\nGoogle.displayName = \"Google\";\n\nconst Microsoft = React.forwardRef<\n SVGSVGElement,\n React.ComponentPropsWithoutRef<\"svg\">\n>((props, forwardedRef) => (\n <svg\n ref={forwardedRef}\n fill=\"none\"\n height=\"15\"\n viewBox=\"0 0 15 15\"\n width=\"15\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <g>\n <path d=\"M0 0H7L7 7H-4.76837e-07L0 0Z\" fill=\"#F35325\" />\n <path d=\"M8 0H15V7H8L8 0Z\" fill=\"#81BC06\" />\n <path d=\"M0 8H7V15H0V8Z\" fill=\"#05A6F0\" />\n <path d=\"M8 8L15 8V15L8 15V8Z\" fill=\"#FFBA08\" />\n </g>\n </svg>\n));\n\nMicrosoft.displayName = \"Microsoft\";\n\nconst Apple = React.forwardRef<\n SVGSVGElement,\n React.ComponentPropsWithoutRef<\"svg\">\n>(({ style, ...props }, forwardedRef) => (\n <svg\n ref={forwardedRef}\n fill=\"none\"\n height=\"15\"\n style={{ overflow: \"visible\", ...style }}\n viewBox=\"0 0 15 15\"\n width=\"15\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n <path\n d=\"M14.219 3.33667C14.1169 3.41674 12.3137 4.44312 12.3137 6.72534C12.3137 9.3651 14.6082 10.299 14.6769 10.3221C14.6663 10.379 14.3124 11.601 13.4671 12.8462C12.7134 13.942 11.9263 15.0359 10.7288 15.0359C9.53134 15.0359 9.22317 14.3333 7.84081 14.3333C6.49366 14.3333 6.01469 15.0591 4.91935 15.0591C3.82401 15.0591 3.05978 14.0451 2.18104 12.8C1.1632 11.3378 0.34082 9.06625 0.34082 6.91034C0.34082 3.45232 2.56668 1.61835 4.75732 1.61835C5.92133 1.61835 6.89164 2.39036 7.62246 2.39036C8.31802 2.39036 9.40277 1.5721 10.7271 1.5721C11.2289 1.5721 13.0321 1.61835 14.219 3.33667ZM10.0984 0.108136C10.646 -0.548247 11.0334 -1.459 11.0334 -2.36975C11.0334 -2.49605 11.0229 -2.62412 11 -2.72729C10.1089 -2.6935 9.04883 -2.12783 8.40959 -1.37895C7.90772 -0.802617 7.43931 0.108136 7.43931 1.03134C7.43931 1.1701 7.46218 1.30883 7.47277 1.35331C7.52909 1.36398 7.62067 1.37643 7.71224 1.37643C8.51172 1.37643 9.51724 0.835672 10.0984 0.108136Z\"\n fill=\"currentColor\"\n />\n </svg>\n));\n\nApple.displayName = \"Apple\";\n\nexport const OAuthIcon = ({\n account,\n ...props\n}: React.ComponentPropsWithoutRef<\"svg\"> & { account: OAuthAccount }) => {\n switch (account) {\n case \"GithubOAuth\":\n return <GitHub {...props} />;\n case \"GoogleOAuth\":\n return <Google {...props} />;\n case \"MicrosoftOAuth\":\n return <Microsoft {...props} />;\n case \"AppleOAuth\":\n return <Apple {...props} />;\n default:\n account satisfies never;\n throw new Error(`Unknown OAuth account type: ${account}`);\n }\n};\n\nexport const getOAuthName = (account: OAuthAccount) => {\n switch (account) {\n case \"GithubOAuth\":\n return \"GitHub\";\n case \"GoogleOAuth\":\n return \"Google\";\n case \"MicrosoftOAuth\":\n return \"Microsoft\";\n case \"AppleOAuth\":\n return \"Apple\";\n default:\n account satisfies never;\n throw new Error(`Unknown OAuth account type: ${account}`);\n }\n};\n"],"mappings":"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","names":[]}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import * as React$1 from 'react';
|
|
2
|
-
import {
|
|
2
|
+
import { ListUserOrganizationsQuery } from '../api/client-graphql/generated.js';
|
|
3
3
|
import { WidgetRootDomProps } from './utils.js';
|
|
4
|
+
import 'graphql-request';
|
|
5
|
+
import '../api/endpoint.js';
|
|
4
6
|
import '@tanstack/react-query';
|
|
5
7
|
import '../api/widgets-api-client.js';
|
|
6
8
|
import './elements.js';
|
|
@@ -33,8 +35,9 @@ interface OrganizationSwitcherPassthroughProps extends WidgetRootDomProps {
|
|
|
33
35
|
*/
|
|
34
36
|
truncateBehavior?: "right" | "middle";
|
|
35
37
|
}
|
|
38
|
+
type UserOrganization = ListUserOrganizationsQuery["organizations"][number];
|
|
36
39
|
interface OrganizationSwitcherProps extends OrganizationSwitcherPassthroughProps {
|
|
37
|
-
organizations:
|
|
40
|
+
organizations: UserOrganization[];
|
|
38
41
|
}
|
|
39
42
|
declare const OrganizationSwitcher: React.FC<OrganizationSwitcherProps>;
|
|
40
43
|
interface OrganizationSwitcherLoadingProps extends WidgetRootDomProps {
|
|
@@ -47,4 +50,4 @@ interface OrganizationSwitcherErrorProps extends WidgetRootDomProps {
|
|
|
47
50
|
}
|
|
48
51
|
declare function OrganizationSwitcherError({ error, variant, ...domProps }: OrganizationSwitcherErrorProps): React$1.JSX.Element;
|
|
49
52
|
|
|
50
|
-
export { OrganizationSwitcher, OrganizationSwitcherError, type OrganizationSwitcherErrorProps, OrganizationSwitcherLoading, type OrganizationSwitcherLoadingProps, type OrganizationSwitcherPassthroughProps, type OrganizationSwitcherProps };
|
|
53
|
+
export { OrganizationSwitcher, OrganizationSwitcherError, type OrganizationSwitcherErrorProps, OrganizationSwitcherLoading, type OrganizationSwitcherLoadingProps, type OrganizationSwitcherPassthroughProps, type OrganizationSwitcherProps, type UserOrganization };
|
|
@@ -32,7 +32,7 @@ const OrganizationSwitcher = ({
|
|
|
32
32
|
...domProps
|
|
33
33
|
}) => {
|
|
34
34
|
const currentOrganization = organizations.find(
|
|
35
|
-
(organization) => organization.
|
|
35
|
+
(organization) => organization.isCurrent
|
|
36
36
|
);
|
|
37
37
|
const invalidateAllWidgets = useWidgetsInvalidator();
|
|
38
38
|
if (!currentOrganization) {
|
|
@@ -115,7 +115,7 @@ const OrganizationSwitcher = ({
|
|
|
115
115
|
truncateBehavior
|
|
116
116
|
}
|
|
117
117
|
),
|
|
118
|
-
organization.
|
|
118
|
+
organization.isCurrent && /* @__PURE__ */ jsx(VisuallyHidden, { children: /* @__PURE__ */ jsx(
|
|
119
119
|
Translation,
|
|
120
120
|
{
|
|
121
121
|
defaultMessage: "(current)",
|
|
@@ -130,7 +130,7 @@ const OrganizationSwitcher = ({
|
|
|
130
130
|
align: "center",
|
|
131
131
|
justify: "center",
|
|
132
132
|
flexShrink: "0",
|
|
133
|
-
children: organization.
|
|
133
|
+
children: organization.isCurrent ? /* @__PURE__ */ jsx(CheckIcon, { width: "18px", height: "18px" }) : (
|
|
134
134
|
// make the extra space for
|
|
135
135
|
/* @__PURE__ */ jsx(Box, { width: "18px", height: "18px" })
|
|
136
136
|
)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/organization-switcher.tsx"],"sourcesContent":["\"use client\";\n\nimport { CheckIcon } from \"@radix-ui/react-icons\";\nimport {\n Box,\n ChevronDownIcon,\n Flex,\n Text,\n VisuallyHidden,\n} from \"@radix-ui/themes\";\nimport type { OrganizationInfo } from \"../api/endpoint.js\";\nimport cx from \"clsx\";\nimport {\n getDomProps,\n isPromiseLike,\n type WidgetRootDomProps,\n type WidgetRootState,\n} from \"./utils.js\";\nimport { getErrorMessage } from \"./generic-error.js\";\nimport {\n Button,\n type ButtonProps,\n Skeleton,\n DropdownMenu,\n} from \"./elements.js\";\nimport { unstable_useWidgetsInvalidator as useWidgetsInvalidator } from \"../utils.js\";\nimport { Translation } from \"./i18n/translation.js\";\nimport { useTranslation } from \"./i18n/use-translation.js\";\n\ntype OrganizationSwitcherVariant = \"ghost\" | \"outline\";\n\n// Rename all uses of `org` to `organization`\ninterface OrganizationSwitcherPassthroughProps extends WidgetRootDomProps {\n switchToOrganization: ({\n organizationId,\n }: {\n organizationId: string;\n }) => void | Promise<void>;\n // Simple props to affect the overall style\n variant?: OrganizationSwitcherVariant;\n organizationLabel?: string | null;\n children?: React.ReactNode;\n /**\n * Choose where to truncate organization name in the trigger and dropdown\n * items.\n *\n * - `right`: Truncate the right side of the organization name\n * - `middle`: Truncate the middle of the organization name, trying to keep\n * words whole\n */\n truncateBehavior?: \"right\" | \"middle\";\n}\n\ninterface OrganizationSwitcherProps extends OrganizationSwitcherPassthroughProps {\n organizations: OrganizationInfo[];\n}\n\nconst OrganizationSwitcher: React.FC<OrganizationSwitcherProps> = ({\n organizations,\n switchToOrganization,\n variant,\n organizationLabel = \"Organizations\",\n truncateBehavior = \"right\",\n children,\n ...domProps\n}) => {\n const currentOrganization = organizations.find(\n (organization) => organization.current,\n );\n const invalidateAllWidgets = useWidgetsInvalidator();\n\n // TODO: Possible if the user has no organizations - we should figure out what\n // to do in this case\n if (!currentOrganization) {\n return null;\n }\n\n return (\n <DropdownMenu.Root>\n <DropdownMenu.Trigger>\n <Button\n variant=\"secondary\"\n {...mapVariantProps(variant)}\n {...getWidgetRootDomProps(\"resolved\", {\n ...domProps,\n // TODO: Remove `OrganizationSwitcherTrigger` in the next major\n // version. This should follow conventions of all other widgets\n // using classnames in getWidgetRootDomProps.\n className: cx(domProps.className, \"OrganizationSwitcherTrigger\"),\n })}\n >\n <Flex\n align=\"center\"\n justify=\"between\"\n gap=\"2\"\n flexGrow=\"1\"\n overflow=\"hidden\"\n minWidth=\"0\"\n >\n <TruncatedOrganizationName\n organizationName={currentOrganization.name}\n truncateBehavior={truncateBehavior}\n />\n <Flex asChild flexShrink=\"0\">\n <DropdownMenu.TriggerIcon />\n </Flex>\n </Flex>\n </Button>\n </DropdownMenu.Trigger>\n <DropdownMenu.Content>\n <DropdownMenu.Group>\n {organizationLabel ? (\n <DropdownMenu.Label>\n <Text>{organizationLabel}</Text>\n </DropdownMenu.Label>\n ) : null}\n {organizations.map((organization) => (\n <Flex\n key={organization.id}\n asChild\n pr=\"2\"\n maxWidth=\"280px\"\n minWidth=\"180px\"\n >\n <DropdownMenu.Item\n onClick={() => {\n if (organization.id !== currentOrganization.id) {\n const result = switchToOrganization({\n organizationId: organization.id,\n });\n if (isPromiseLike(result)) {\n result.then(invalidateAllWidgets);\n } else {\n invalidateAllWidgets();\n }\n }\n }}\n >\n <Flex\n justify=\"between\"\n align=\"center\"\n gap=\"4\"\n flexGrow=\"1\"\n overflow=\"hidden\"\n >\n <TruncatedOrganizationName\n organizationName={organization.name}\n truncateBehavior={truncateBehavior}\n />\n {organization.current && (\n <VisuallyHidden>\n <Translation\n defaultMessage=\"(current)\"\n id=\"daFXTP\"\n description=\"Label for screen readers indicating current organization\"\n />\n </VisuallyHidden>\n )}\n <Flex\n aria-hidden\n align=\"center\"\n justify=\"center\"\n flexShrink=\"0\"\n >\n {organization.current ? (\n <CheckIcon width=\"18px\" height=\"18px\" />\n ) : (\n // make the extra space for\n <Box width=\"18px\" height=\"18px\" />\n )}\n </Flex>\n </Flex>\n </DropdownMenu.Item>\n </Flex>\n ))}\n </DropdownMenu.Group>\n {children}\n </DropdownMenu.Content>\n </DropdownMenu.Root>\n );\n};\n\ninterface OrganizationSwitcherLoadingProps extends WidgetRootDomProps {\n variant?: OrganizationSwitcherVariant;\n}\n\nconst OrganizationSwitcherLoading: React.FC<\n OrganizationSwitcherLoadingProps\n> = ({ variant, ...props }: OrganizationSwitcherLoadingProps) => {\n return (\n // Always need DropdownMenu.Root to wrap children than may include\n <Button\n variant=\"secondary\"\n disabled\n {...mapVariantProps(variant)}\n {...getWidgetRootDomProps(\"loading\", props)}\n >\n <Flex align=\"center\" gap=\"2\">\n <Skeleton>\n {/* eslint-disable-next-line formatjs/no-literal-string-in-jsx */}\n <Text>Loading...</Text>\n </Skeleton>\n <ChevronDownIcon />\n </Flex>\n </Button>\n );\n};\n\ninterface OrganizationSwitcherErrorProps extends WidgetRootDomProps {\n error: unknown;\n variant?: OrganizationSwitcherVariant;\n}\n\nfunction OrganizationSwitcherError({\n error,\n variant,\n ...domProps\n}: OrganizationSwitcherErrorProps) {\n const translate = useTranslation();\n const { heading } = getErrorMessage(error, translate);\n\n return (\n <Button\n variant=\"secondary\"\n disabled\n {...mapVariantProps(variant)}\n {...getWidgetRootDomProps(\"error\", domProps)}\n >\n <Flex align=\"center\" gap=\"2\">\n <Text>{heading}</Text>\n <ChevronDownIcon />\n </Flex>\n </Button>\n );\n}\n\nconst MAX_TRUNCATED_SUFFIX_LENGTH = 10;\nconst MIN_TRUNCATED_SUFFIX_LENGTH = 3;\n\nconst WHITE_SPACE_REGEX = /\\s/;\n\nconst getSplitPosition = (organizationName: string) => {\n if (organizationName.length <= MAX_TRUNCATED_SUFFIX_LENGTH) {\n return organizationName.length;\n }\n\n for (\n let i = organizationName.length - MAX_TRUNCATED_SUFFIX_LENGTH;\n i < organizationName.length - MIN_TRUNCATED_SUFFIX_LENGTH;\n i++\n ) {\n if (WHITE_SPACE_REGEX.test(organizationName[i - 1])) {\n return i;\n }\n }\n\n return organizationName.length - MAX_TRUNCATED_SUFFIX_LENGTH;\n};\n\nconst splitOrganizationName = (organizationName: string) => {\n const splitPosition = getSplitPosition(organizationName);\n return [\n organizationName.slice(0, splitPosition),\n organizationName.slice(splitPosition),\n ];\n};\n\nconst TruncatedOrganizationName = ({\n organizationName,\n truncateBehavior,\n}: {\n organizationName: string;\n truncateBehavior: \"right\" | \"middle\";\n}) => {\n if (truncateBehavior === \"right\") {\n return <Text truncate>{organizationName}</Text>;\n }\n\n const [organizationNameLeft, organizationNameRight] =\n splitOrganizationName(organizationName);\n\n return (\n <Flex overflow=\"hidden\">\n <VisuallyHidden>\n <Text>{organizationName}</Text>\n </VisuallyHidden>\n <Text aria-hidden truncate style={{ whiteSpace: \"pre\" }}>\n {organizationNameLeft}\n </Text>\n <Text aria-hidden>{organizationNameRight}</Text>\n </Flex>\n );\n};\n\nfunction mapVariantProps(variant?: OrganizationSwitcherVariant): ButtonProps {\n const variantProps: ButtonProps = {};\n // Passing `undefined` to the variant prop will result in overrides to props we\n // set internally. This should be addressed in Radix Themes, but we can\n // explicitly set it only when it's provided and _not_ undefined.\n if (variant) {\n variantProps.unsafe_radixVariant = variant;\n }\n return variantProps;\n}\n\nfunction getWidgetRootDomProps(\n state: WidgetRootState,\n domProps: WidgetRootDomProps,\n) {\n return getDomProps({\n ...domProps,\n isWidgetRoot: true,\n widgetId: \"organization-switcher\",\n widgetState: state,\n });\n}\n\nexport type {\n OrganizationSwitcherProps,\n OrganizationSwitcherLoadingProps,\n OrganizationSwitcherErrorProps,\n /** @internal */\n OrganizationSwitcherPassthroughProps,\n};\nexport {\n OrganizationSwitcher,\n OrganizationSwitcherLoading,\n OrganizationSwitcherError,\n};\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/organization-switcher.tsx"],"sourcesContent":["\"use client\";\n\nimport { CheckIcon } from \"@radix-ui/react-icons\";\nimport {\n Box,\n ChevronDownIcon,\n Flex,\n Text,\n VisuallyHidden,\n} from \"@radix-ui/themes\";\nimport type { ListUserOrganizationsQuery } from \"../api/client-graphql/generated.js\";\nimport cx from \"clsx\";\nimport {\n getDomProps,\n isPromiseLike,\n type WidgetRootDomProps,\n type WidgetRootState,\n} from \"./utils.js\";\nimport { getErrorMessage } from \"./generic-error.js\";\nimport {\n Button,\n type ButtonProps,\n Skeleton,\n DropdownMenu,\n} from \"./elements.js\";\nimport { unstable_useWidgetsInvalidator as useWidgetsInvalidator } from \"../utils.js\";\nimport { Translation } from \"./i18n/translation.js\";\nimport { useTranslation } from \"./i18n/use-translation.js\";\n\ntype OrganizationSwitcherVariant = \"ghost\" | \"outline\";\n\n// Rename all uses of `org` to `organization`\ninterface OrganizationSwitcherPassthroughProps extends WidgetRootDomProps {\n switchToOrganization: ({\n organizationId,\n }: {\n organizationId: string;\n }) => void | Promise<void>;\n // Simple props to affect the overall style\n variant?: OrganizationSwitcherVariant;\n organizationLabel?: string | null;\n children?: React.ReactNode;\n /**\n * Choose where to truncate organization name in the trigger and dropdown\n * items.\n *\n * - `right`: Truncate the right side of the organization name\n * - `middle`: Truncate the middle of the organization name, trying to keep\n * words whole\n */\n truncateBehavior?: \"right\" | \"middle\";\n}\n\nexport type UserOrganization =\n ListUserOrganizationsQuery[\"organizations\"][number];\n\ninterface OrganizationSwitcherProps extends OrganizationSwitcherPassthroughProps {\n organizations: UserOrganization[];\n}\n\nconst OrganizationSwitcher: React.FC<OrganizationSwitcherProps> = ({\n organizations,\n switchToOrganization,\n variant,\n organizationLabel = \"Organizations\",\n truncateBehavior = \"right\",\n children,\n ...domProps\n}) => {\n const currentOrganization = organizations.find(\n (organization) => organization.isCurrent,\n );\n const invalidateAllWidgets = useWidgetsInvalidator();\n\n // TODO: Possible if the user has no organizations - we should figure out what\n // to do in this case\n if (!currentOrganization) {\n return null;\n }\n\n return (\n <DropdownMenu.Root>\n <DropdownMenu.Trigger>\n <Button\n variant=\"secondary\"\n {...mapVariantProps(variant)}\n {...getWidgetRootDomProps(\"resolved\", {\n ...domProps,\n // TODO: Remove `OrganizationSwitcherTrigger` in the next major\n // version. This should follow conventions of all other widgets\n // using classnames in getWidgetRootDomProps.\n className: cx(domProps.className, \"OrganizationSwitcherTrigger\"),\n })}\n >\n <Flex\n align=\"center\"\n justify=\"between\"\n gap=\"2\"\n flexGrow=\"1\"\n overflow=\"hidden\"\n minWidth=\"0\"\n >\n <TruncatedOrganizationName\n organizationName={currentOrganization.name}\n truncateBehavior={truncateBehavior}\n />\n <Flex asChild flexShrink=\"0\">\n <DropdownMenu.TriggerIcon />\n </Flex>\n </Flex>\n </Button>\n </DropdownMenu.Trigger>\n <DropdownMenu.Content>\n <DropdownMenu.Group>\n {organizationLabel ? (\n <DropdownMenu.Label>\n <Text>{organizationLabel}</Text>\n </DropdownMenu.Label>\n ) : null}\n {organizations.map((organization) => (\n <Flex\n key={organization.id}\n asChild\n pr=\"2\"\n maxWidth=\"280px\"\n minWidth=\"180px\"\n >\n <DropdownMenu.Item\n onClick={() => {\n if (organization.id !== currentOrganization.id) {\n const result = switchToOrganization({\n organizationId: organization.id,\n });\n if (isPromiseLike(result)) {\n result.then(invalidateAllWidgets);\n } else {\n invalidateAllWidgets();\n }\n }\n }}\n >\n <Flex\n justify=\"between\"\n align=\"center\"\n gap=\"4\"\n flexGrow=\"1\"\n overflow=\"hidden\"\n >\n <TruncatedOrganizationName\n organizationName={organization.name}\n truncateBehavior={truncateBehavior}\n />\n {organization.isCurrent && (\n <VisuallyHidden>\n <Translation\n defaultMessage=\"(current)\"\n id=\"daFXTP\"\n description=\"Label for screen readers indicating current organization\"\n />\n </VisuallyHidden>\n )}\n <Flex\n aria-hidden\n align=\"center\"\n justify=\"center\"\n flexShrink=\"0\"\n >\n {organization.isCurrent ? (\n <CheckIcon width=\"18px\" height=\"18px\" />\n ) : (\n // make the extra space for\n <Box width=\"18px\" height=\"18px\" />\n )}\n </Flex>\n </Flex>\n </DropdownMenu.Item>\n </Flex>\n ))}\n </DropdownMenu.Group>\n {children}\n </DropdownMenu.Content>\n </DropdownMenu.Root>\n );\n};\n\ninterface OrganizationSwitcherLoadingProps extends WidgetRootDomProps {\n variant?: OrganizationSwitcherVariant;\n}\n\nconst OrganizationSwitcherLoading: React.FC<\n OrganizationSwitcherLoadingProps\n> = ({ variant, ...props }: OrganizationSwitcherLoadingProps) => {\n return (\n // Always need DropdownMenu.Root to wrap children than may include\n <Button\n variant=\"secondary\"\n disabled\n {...mapVariantProps(variant)}\n {...getWidgetRootDomProps(\"loading\", props)}\n >\n <Flex align=\"center\" gap=\"2\">\n <Skeleton>\n {/* eslint-disable-next-line formatjs/no-literal-string-in-jsx */}\n <Text>Loading...</Text>\n </Skeleton>\n <ChevronDownIcon />\n </Flex>\n </Button>\n );\n};\n\ninterface OrganizationSwitcherErrorProps extends WidgetRootDomProps {\n error: unknown;\n variant?: OrganizationSwitcherVariant;\n}\n\nfunction OrganizationSwitcherError({\n error,\n variant,\n ...domProps\n}: OrganizationSwitcherErrorProps) {\n const translate = useTranslation();\n const { heading } = getErrorMessage(error, translate);\n\n return (\n <Button\n variant=\"secondary\"\n disabled\n {...mapVariantProps(variant)}\n {...getWidgetRootDomProps(\"error\", domProps)}\n >\n <Flex align=\"center\" gap=\"2\">\n <Text>{heading}</Text>\n <ChevronDownIcon />\n </Flex>\n </Button>\n );\n}\n\nconst MAX_TRUNCATED_SUFFIX_LENGTH = 10;\nconst MIN_TRUNCATED_SUFFIX_LENGTH = 3;\n\nconst WHITE_SPACE_REGEX = /\\s/;\n\nconst getSplitPosition = (organizationName: string) => {\n if (organizationName.length <= MAX_TRUNCATED_SUFFIX_LENGTH) {\n return organizationName.length;\n }\n\n for (\n let i = organizationName.length - MAX_TRUNCATED_SUFFIX_LENGTH;\n i < organizationName.length - MIN_TRUNCATED_SUFFIX_LENGTH;\n i++\n ) {\n if (WHITE_SPACE_REGEX.test(organizationName[i - 1])) {\n return i;\n }\n }\n\n return organizationName.length - MAX_TRUNCATED_SUFFIX_LENGTH;\n};\n\nconst splitOrganizationName = (organizationName: string) => {\n const splitPosition = getSplitPosition(organizationName);\n return [\n organizationName.slice(0, splitPosition),\n organizationName.slice(splitPosition),\n ];\n};\n\nconst TruncatedOrganizationName = ({\n organizationName,\n truncateBehavior,\n}: {\n organizationName: string;\n truncateBehavior: \"right\" | \"middle\";\n}) => {\n if (truncateBehavior === \"right\") {\n return <Text truncate>{organizationName}</Text>;\n }\n\n const [organizationNameLeft, organizationNameRight] =\n splitOrganizationName(organizationName);\n\n return (\n <Flex overflow=\"hidden\">\n <VisuallyHidden>\n <Text>{organizationName}</Text>\n </VisuallyHidden>\n <Text aria-hidden truncate style={{ whiteSpace: \"pre\" }}>\n {organizationNameLeft}\n </Text>\n <Text aria-hidden>{organizationNameRight}</Text>\n </Flex>\n );\n};\n\nfunction mapVariantProps(variant?: OrganizationSwitcherVariant): ButtonProps {\n const variantProps: ButtonProps = {};\n // Passing `undefined` to the variant prop will result in overrides to props we\n // set internally. This should be addressed in Radix Themes, but we can\n // explicitly set it only when it's provided and _not_ undefined.\n if (variant) {\n variantProps.unsafe_radixVariant = variant;\n }\n return variantProps;\n}\n\nfunction getWidgetRootDomProps(\n state: WidgetRootState,\n domProps: WidgetRootDomProps,\n) {\n return getDomProps({\n ...domProps,\n isWidgetRoot: true,\n widgetId: \"organization-switcher\",\n widgetState: state,\n });\n}\n\nexport type {\n OrganizationSwitcherProps,\n OrganizationSwitcherLoadingProps,\n OrganizationSwitcherErrorProps,\n /** @internal */\n OrganizationSwitcherPassthroughProps,\n};\nexport {\n OrganizationSwitcher,\n OrganizationSwitcherLoading,\n OrganizationSwitcherError,\n};\n"],"mappings":"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","names":[]}
|
|
@@ -1,18 +1,8 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import {
|
|
3
|
-
import '
|
|
4
|
-
import '../api/widgets-api-client.js';
|
|
2
|
+
import { PasswordViolationFieldsFragment } from '../api/client-graphql/generated.js';
|
|
3
|
+
import 'graphql-request';
|
|
5
4
|
|
|
6
|
-
|
|
7
|
-
* Derive the individual password validation error type from the generated
|
|
8
|
-
* API schema. `CreatePassword400` is a union of the structured
|
|
9
|
-
* `PasswordStrengthErrorResponse` and a generic `{ message }` shape; we
|
|
10
|
-
* extract the structured variant and pull its `errors` element type.
|
|
11
|
-
*/
|
|
12
|
-
type PasswordStrengthResponse = Extract<CreatePassword400, {
|
|
13
|
-
code: string;
|
|
14
|
-
}>;
|
|
15
|
-
type PasswordValidationError = PasswordStrengthResponse["errors"][number];
|
|
5
|
+
type PasswordValidationError = PasswordViolationFieldsFragment;
|
|
16
6
|
declare function getPasswordValidationErrors(error: unknown): PasswordValidationError[];
|
|
17
7
|
declare function PasswordValidationErrorList({ errors, }: {
|
|
18
8
|
errors: PasswordValidationError[];
|
|
@@ -1,23 +1,17 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx } from "react/jsx-runtime";
|
|
3
|
-
import {
|
|
4
|
-
import { isObjectLike } from "../api/utils.js";
|
|
3
|
+
import { PasswordPolicyViolationError } from "./client-graphql-result.js";
|
|
5
4
|
import { Translation } from "./i18n/translation.js";
|
|
6
|
-
function isPasswordStrengthContext(ctx) {
|
|
7
|
-
return Array.isArray(ctx.errors) && ctx.errors.every(
|
|
8
|
-
(e) => isObjectLike(e) && typeof e.code === "string" && typeof e.message === "string"
|
|
9
|
-
);
|
|
10
|
-
}
|
|
11
5
|
function getPasswordValidationErrors(error) {
|
|
12
|
-
if (!(error instanceof
|
|
13
|
-
|
|
14
|
-
return error.context.errors;
|
|
6
|
+
if (!(error instanceof PasswordPolicyViolationError)) return [];
|
|
7
|
+
return error.violations;
|
|
15
8
|
}
|
|
16
9
|
function CharacterTypeMessage({
|
|
17
|
-
characterType
|
|
10
|
+
characterType,
|
|
11
|
+
fallback
|
|
18
12
|
}) {
|
|
19
13
|
switch (characterType) {
|
|
20
|
-
case "
|
|
14
|
+
case "Uppercase":
|
|
21
15
|
return /* @__PURE__ */ jsx(
|
|
22
16
|
Translation,
|
|
23
17
|
{
|
|
@@ -26,7 +20,7 @@ function CharacterTypeMessage({
|
|
|
26
20
|
description: "Password validation error for missing uppercase letter"
|
|
27
21
|
}
|
|
28
22
|
);
|
|
29
|
-
case "
|
|
23
|
+
case "Lowercase":
|
|
30
24
|
return /* @__PURE__ */ jsx(
|
|
31
25
|
Translation,
|
|
32
26
|
{
|
|
@@ -35,7 +29,7 @@ function CharacterTypeMessage({
|
|
|
35
29
|
description: "Password validation error for missing lowercase letter"
|
|
36
30
|
}
|
|
37
31
|
);
|
|
38
|
-
case "
|
|
32
|
+
case "Number":
|
|
39
33
|
return /* @__PURE__ */ jsx(
|
|
40
34
|
Translation,
|
|
41
35
|
{
|
|
@@ -44,7 +38,7 @@ function CharacterTypeMessage({
|
|
|
44
38
|
description: "Password validation error for missing number"
|
|
45
39
|
}
|
|
46
40
|
);
|
|
47
|
-
case "
|
|
41
|
+
case "Symbol":
|
|
48
42
|
return /* @__PURE__ */ jsx(
|
|
49
43
|
Translation,
|
|
50
44
|
{
|
|
@@ -54,15 +48,7 @@ function CharacterTypeMessage({
|
|
|
54
48
|
}
|
|
55
49
|
);
|
|
56
50
|
default:
|
|
57
|
-
return
|
|
58
|
-
Translation,
|
|
59
|
-
{
|
|
60
|
-
defaultMessage: "Must include a {characterType} character",
|
|
61
|
-
id: "qLtNVL",
|
|
62
|
-
description: "Password validation error for missing character type",
|
|
63
|
-
values: { characterType }
|
|
64
|
-
}
|
|
65
|
-
);
|
|
51
|
+
return fallback;
|
|
66
52
|
}
|
|
67
53
|
}
|
|
68
54
|
function ValidationErrorMessage({
|
|
@@ -71,7 +57,13 @@ function ValidationErrorMessage({
|
|
|
71
57
|
const fallback = error.message;
|
|
72
58
|
switch (error.code) {
|
|
73
59
|
case "password_missing_character_type":
|
|
74
|
-
return /* @__PURE__ */ jsx(
|
|
60
|
+
return /* @__PURE__ */ jsx(
|
|
61
|
+
CharacterTypeMessage,
|
|
62
|
+
{
|
|
63
|
+
characterType: error.characterType,
|
|
64
|
+
fallback
|
|
65
|
+
}
|
|
66
|
+
);
|
|
75
67
|
case "password_contains_email":
|
|
76
68
|
return /* @__PURE__ */ jsx(
|
|
77
69
|
Translation,
|
|
@@ -88,7 +80,7 @@ function ValidationErrorMessage({
|
|
|
88
80
|
defaultMessage: "Password must be at least {minimumLength} characters",
|
|
89
81
|
id: "g1iDVF",
|
|
90
82
|
description: "Password validation error for password too short",
|
|
91
|
-
values: { minimumLength: String(error.
|
|
83
|
+
values: { minimumLength: String(error.minimumLength) }
|
|
92
84
|
}
|
|
93
85
|
);
|
|
94
86
|
case "password_too_long":
|
|
@@ -98,7 +90,7 @@ function ValidationErrorMessage({
|
|
|
98
90
|
defaultMessage: "Password must be {maximumLength} characters or fewer",
|
|
99
91
|
id: "zVDvW8",
|
|
100
92
|
description: "Password validation error for password too long",
|
|
101
|
-
values: { maximumLength: String(error.
|
|
93
|
+
values: { maximumLength: String(error.maximumLength) }
|
|
102
94
|
}
|
|
103
95
|
);
|
|
104
96
|
case "password_pwned":
|
|
@@ -129,7 +121,6 @@ function ValidationErrorMessage({
|
|
|
129
121
|
}
|
|
130
122
|
);
|
|
131
123
|
default:
|
|
132
|
-
error;
|
|
133
124
|
return fallback;
|
|
134
125
|
}
|
|
135
126
|
}
|
|
@@ -139,39 +130,34 @@ function PasswordValidationErrorList({
|
|
|
139
130
|
if (errors.length === 0) return null;
|
|
140
131
|
return /* @__PURE__ */ jsx("ul", { style: { margin: 0, paddingLeft: "1.25rem" }, children: errors.map((err, i) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(ValidationErrorMessage, { error: err }) }, i)) });
|
|
141
132
|
}
|
|
142
|
-
function characterTypeAriaText(characterType, translate) {
|
|
133
|
+
function characterTypeAriaText(characterType, fallback, translate) {
|
|
143
134
|
switch (characterType) {
|
|
144
|
-
case "
|
|
135
|
+
case "Uppercase":
|
|
145
136
|
return translate({
|
|
146
137
|
defaultMessage: "Must include an uppercase letter",
|
|
147
138
|
id: "s/nwpy",
|
|
148
139
|
description: "Password validation error for missing uppercase letter"
|
|
149
140
|
});
|
|
150
|
-
case "
|
|
141
|
+
case "Lowercase":
|
|
151
142
|
return translate({
|
|
152
143
|
defaultMessage: "Must include a lowercase letter",
|
|
153
144
|
id: "WiFn69",
|
|
154
145
|
description: "Password validation error for missing lowercase letter"
|
|
155
146
|
});
|
|
156
|
-
case "
|
|
147
|
+
case "Number":
|
|
157
148
|
return translate({
|
|
158
149
|
defaultMessage: "Must include a number",
|
|
159
150
|
id: "z6Mu1x",
|
|
160
151
|
description: "Password validation error for missing number"
|
|
161
152
|
});
|
|
162
|
-
case "
|
|
153
|
+
case "Symbol":
|
|
163
154
|
return translate({
|
|
164
155
|
defaultMessage: "Must include a special character",
|
|
165
156
|
id: "veTEdD",
|
|
166
157
|
description: "Password validation error for missing special character"
|
|
167
158
|
});
|
|
168
159
|
default:
|
|
169
|
-
return
|
|
170
|
-
defaultMessage: "Must include a {characterType} character",
|
|
171
|
-
id: "qLtNVL",
|
|
172
|
-
description: "Password validation error for missing character type",
|
|
173
|
-
values: { characterType }
|
|
174
|
-
});
|
|
160
|
+
return fallback;
|
|
175
161
|
}
|
|
176
162
|
}
|
|
177
163
|
function getPasswordValidationAriaTexts(errors, translate) {
|
|
@@ -179,7 +165,7 @@ function getPasswordValidationAriaTexts(errors, translate) {
|
|
|
179
165
|
const fallback = err.message;
|
|
180
166
|
switch (err.code) {
|
|
181
167
|
case "password_missing_character_type":
|
|
182
|
-
return characterTypeAriaText(err.
|
|
168
|
+
return characterTypeAriaText(err.characterType, fallback, translate);
|
|
183
169
|
case "password_contains_email":
|
|
184
170
|
return translate({
|
|
185
171
|
defaultMessage: "Password must not contain your email address",
|
|
@@ -191,14 +177,14 @@ function getPasswordValidationAriaTexts(errors, translate) {
|
|
|
191
177
|
defaultMessage: "Password must be at least {minimumLength} characters",
|
|
192
178
|
id: "g1iDVF",
|
|
193
179
|
description: "Password validation error for password too short",
|
|
194
|
-
values: { minimumLength: String(err.
|
|
180
|
+
values: { minimumLength: String(err.minimumLength) }
|
|
195
181
|
});
|
|
196
182
|
case "password_too_long":
|
|
197
183
|
return translate({
|
|
198
184
|
defaultMessage: "Password must be {maximumLength} characters or fewer",
|
|
199
185
|
id: "zVDvW8",
|
|
200
186
|
description: "Password validation error for password too long",
|
|
201
|
-
values: { maximumLength: String(err.
|
|
187
|
+
values: { maximumLength: String(err.maximumLength) }
|
|
202
188
|
});
|
|
203
189
|
case "password_pwned":
|
|
204
190
|
return translate({
|
|
@@ -219,7 +205,6 @@ function getPasswordValidationAriaTexts(errors, translate) {
|
|
|
219
205
|
description: "Password validation error for weak password"
|
|
220
206
|
});
|
|
221
207
|
default:
|
|
222
|
-
err;
|
|
223
208
|
return fallback;
|
|
224
209
|
}
|
|
225
210
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/password-error-utils.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport type { CreatePassword400 } from \"../api/endpoint.js\";\nimport { ApiError } from \"../api/errors.js\";\nimport { isObjectLike } from \"../api/utils.js\";\nimport { Translation } from \"./i18n/translation.js\";\n\n/**\n * Derive the individual password validation error type from the generated\n * API schema. `CreatePassword400` is a union of the structured\n * `PasswordStrengthErrorResponse` and a generic `{ message }` shape; we\n * extract the structured variant and pull its `errors` element type.\n */\ntype PasswordStrengthResponse = Extract<CreatePassword400, { code: string }>;\nexport type PasswordValidationError =\n PasswordStrengthResponse[\"errors\"][number];\n\nfunction isPasswordStrengthContext(\n ctx: Record<string, unknown>,\n): ctx is { errors: PasswordValidationError[] } {\n return (\n Array.isArray(ctx.errors) &&\n ctx.errors.every(\n (e: unknown) =>\n isObjectLike(e) &&\n typeof e.code === \"string\" &&\n typeof e.message === \"string\",\n )\n );\n}\n\nexport function getPasswordValidationErrors(\n error: unknown,\n): PasswordValidationError[] {\n if (!(error instanceof ApiError) || !isObjectLike(error.context)) return [];\n if (!isPasswordStrengthContext(error.context)) return [];\n return error.context.errors;\n}\n\nfunction CharacterTypeMessage({\n characterType,\n}: {\n characterType: string;\n}): React.ReactNode {\n switch (characterType) {\n case \"uppercase\":\n return (\n <Translation\n defaultMessage=\"Must include an uppercase letter\"\n id=\"s/nwpy\"\n description=\"Password validation error for missing uppercase letter\"\n />\n );\n case \"lowercase\":\n return (\n <Translation\n defaultMessage=\"Must include a lowercase letter\"\n id=\"WiFn69\"\n description=\"Password validation error for missing lowercase letter\"\n />\n );\n case \"number\":\n return (\n <Translation\n defaultMessage=\"Must include a number\"\n id=\"z6Mu1x\"\n description=\"Password validation error for missing number\"\n />\n );\n case \"symbol\":\n return (\n <Translation\n defaultMessage=\"Must include a special character\"\n id=\"veTEdD\"\n description=\"Password validation error for missing special character\"\n />\n );\n default:\n return (\n <Translation\n defaultMessage=\"Must include a {characterType} character\"\n id=\"qLtNVL\"\n description=\"Password validation error for missing character type\"\n values={{ characterType }}\n />\n );\n }\n}\n\nfunction ValidationErrorMessage({\n error,\n}: {\n error: PasswordValidationError;\n}): React.ReactNode {\n const fallback = error.message;\n switch (error.code) {\n case \"password_missing_character_type\":\n return <CharacterTypeMessage characterType={error.character_type} />;\n case \"password_contains_email\":\n return (\n <Translation\n defaultMessage=\"Password must not contain your email address\"\n id=\"6oLR3O\"\n description=\"Password validation error for password containing email\"\n />\n );\n case \"password_too_short\":\n return (\n <Translation\n defaultMessage=\"Password must be at least {minimumLength} characters\"\n id=\"g1iDVF\"\n description=\"Password validation error for password too short\"\n values={{ minimumLength: String(error.minimum_length) }}\n />\n );\n case \"password_too_long\":\n return (\n <Translation\n defaultMessage=\"Password must be {maximumLength} characters or fewer\"\n id=\"zVDvW8\"\n description=\"Password validation error for password too long\"\n values={{ maximumLength: String(error.maximum_length) }}\n />\n );\n case \"password_pwned\":\n return (\n <Translation\n defaultMessage=\"This password has appeared in data breaches and is not safe to use\"\n id=\"7rj/IT\"\n description=\"Password validation error for breached password\"\n />\n );\n case \"password_reused\":\n return (\n <Translation\n defaultMessage=\"This password has been used before\"\n id=\"aNnw0s\"\n description=\"Password validation error for reused password\"\n />\n );\n case \"password_too_weak\":\n return (\n <Translation\n defaultMessage=\"Password is not strong enough\"\n id=\"kB/Nl7\"\n description=\"Password validation error for weak password\"\n />\n );\n default:\n error satisfies never;\n return fallback;\n }\n}\n\nexport function PasswordValidationErrorList({\n errors,\n}: {\n errors: PasswordValidationError[];\n}) {\n if (errors.length === 0) return null;\n return (\n <ul style={{ margin: 0, paddingLeft: \"1.25rem\" }}>\n {errors.map((err, i) => (\n <li key={i}>\n <ValidationErrorMessage error={err} />\n </li>\n ))}\n </ul>\n );\n}\n\ntype TranslateFn = (descriptor: {\n defaultMessage: string;\n id: string;\n description: string;\n values?: Record<string, string>;\n}) => string;\n\nfunction characterTypeAriaText(\n characterType: string,\n translate: TranslateFn,\n): string {\n switch (characterType) {\n case \"uppercase\":\n return translate({\n defaultMessage: \"Must include an uppercase letter\",\n id: \"s/nwpy\",\n description: \"Password validation error for missing uppercase letter\",\n });\n case \"lowercase\":\n return translate({\n defaultMessage: \"Must include a lowercase letter\",\n id: \"WiFn69\",\n description: \"Password validation error for missing lowercase letter\",\n });\n case \"number\":\n return translate({\n defaultMessage: \"Must include a number\",\n id: \"z6Mu1x\",\n description: \"Password validation error for missing number\",\n });\n case \"symbol\":\n return translate({\n defaultMessage: \"Must include a special character\",\n id: \"veTEdD\",\n description: \"Password validation error for missing special character\",\n });\n default:\n return translate({\n defaultMessage: \"Must include a {characterType} character\",\n id: \"qLtNVL\",\n description: \"Password validation error for missing character type\",\n values: { characterType },\n });\n }\n}\n\nexport function getPasswordValidationAriaTexts(\n errors: PasswordValidationError[],\n translate: TranslateFn,\n): string[] {\n return errors.map((err) => {\n const fallback = err.message;\n switch (err.code) {\n case \"password_missing_character_type\":\n return characterTypeAriaText(err.character_type, translate);\n case \"password_contains_email\":\n return translate({\n defaultMessage: \"Password must not contain your email address\",\n id: \"6oLR3O\",\n description:\n \"Password validation error for password containing email\",\n });\n case \"password_too_short\":\n return translate({\n defaultMessage:\n \"Password must be at least {minimumLength} characters\",\n id: \"g1iDVF\",\n description: \"Password validation error for password too short\",\n values: { minimumLength: String(err.minimum_length) },\n });\n case \"password_too_long\":\n return translate({\n defaultMessage:\n \"Password must be {maximumLength} characters or fewer\",\n id: \"zVDvW8\",\n description: \"Password validation error for password too long\",\n values: { maximumLength: String(err.maximum_length) },\n });\n case \"password_pwned\":\n return translate({\n defaultMessage:\n \"This password has appeared in data breaches and is not safe to use\",\n id: \"7rj/IT\",\n description: \"Password validation error for breached password\",\n });\n case \"password_reused\":\n return translate({\n defaultMessage: \"This password has been used before\",\n id: \"aNnw0s\",\n description: \"Password validation error for reused password\",\n });\n case \"password_too_weak\":\n return translate({\n defaultMessage: \"Password is not strong enough\",\n id: \"kB/Nl7\",\n description: \"Password validation error for weak password\",\n });\n default:\n err satisfies never;\n return fallback;\n }\n });\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/password-error-utils.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport type {\n PasswordCharacterType,\n PasswordViolationFieldsFragment,\n} from \"../api/client-graphql/generated.js\";\nimport { PasswordPolicyViolationError } from \"./client-graphql-result.js\";\nimport { Translation } from \"./i18n/translation.js\";\n\nexport type PasswordValidationError = PasswordViolationFieldsFragment;\n\nexport function getPasswordValidationErrors(\n error: unknown,\n): PasswordValidationError[] {\n if (!(error instanceof PasswordPolicyViolationError)) return [];\n return error.violations;\n}\n\nfunction CharacterTypeMessage({\n characterType,\n fallback,\n}: {\n characterType: PasswordCharacterType | null | undefined;\n fallback: string;\n}): React.ReactNode {\n switch (characterType) {\n case \"Uppercase\":\n return (\n <Translation\n defaultMessage=\"Must include an uppercase letter\"\n id=\"s/nwpy\"\n description=\"Password validation error for missing uppercase letter\"\n />\n );\n case \"Lowercase\":\n return (\n <Translation\n defaultMessage=\"Must include a lowercase letter\"\n id=\"WiFn69\"\n description=\"Password validation error for missing lowercase letter\"\n />\n );\n case \"Number\":\n return (\n <Translation\n defaultMessage=\"Must include a number\"\n id=\"z6Mu1x\"\n description=\"Password validation error for missing number\"\n />\n );\n case \"Symbol\":\n return (\n <Translation\n defaultMessage=\"Must include a special character\"\n id=\"veTEdD\"\n description=\"Password validation error for missing special character\"\n />\n );\n default:\n return fallback;\n }\n}\n\nfunction ValidationErrorMessage({\n error,\n}: {\n error: PasswordValidationError;\n}): React.ReactNode {\n const fallback = error.message;\n switch (error.code) {\n case \"password_missing_character_type\":\n return (\n <CharacterTypeMessage\n characterType={error.characterType}\n fallback={fallback}\n />\n );\n case \"password_contains_email\":\n return (\n <Translation\n defaultMessage=\"Password must not contain your email address\"\n id=\"6oLR3O\"\n description=\"Password validation error for password containing email\"\n />\n );\n case \"password_too_short\":\n return (\n <Translation\n defaultMessage=\"Password must be at least {minimumLength} characters\"\n id=\"g1iDVF\"\n description=\"Password validation error for password too short\"\n values={{ minimumLength: String(error.minimumLength) }}\n />\n );\n case \"password_too_long\":\n return (\n <Translation\n defaultMessage=\"Password must be {maximumLength} characters or fewer\"\n id=\"zVDvW8\"\n description=\"Password validation error for password too long\"\n values={{ maximumLength: String(error.maximumLength) }}\n />\n );\n case \"password_pwned\":\n return (\n <Translation\n defaultMessage=\"This password has appeared in data breaches and is not safe to use\"\n id=\"7rj/IT\"\n description=\"Password validation error for breached password\"\n />\n );\n case \"password_reused\":\n return (\n <Translation\n defaultMessage=\"This password has been used before\"\n id=\"aNnw0s\"\n description=\"Password validation error for reused password\"\n />\n );\n case \"password_too_weak\":\n return (\n <Translation\n defaultMessage=\"Password is not strong enough\"\n id=\"kB/Nl7\"\n description=\"Password validation error for weak password\"\n />\n );\n default:\n return fallback;\n }\n}\n\nexport function PasswordValidationErrorList({\n errors,\n}: {\n errors: PasswordValidationError[];\n}) {\n if (errors.length === 0) return null;\n return (\n <ul style={{ margin: 0, paddingLeft: \"1.25rem\" }}>\n {errors.map((err, i) => (\n <li key={i}>\n <ValidationErrorMessage error={err} />\n </li>\n ))}\n </ul>\n );\n}\n\ntype TranslateFn = (descriptor: {\n defaultMessage: string;\n id: string;\n description: string;\n values?: Record<string, string>;\n}) => string;\n\nfunction characterTypeAriaText(\n characterType: PasswordCharacterType | null | undefined,\n fallback: string,\n translate: TranslateFn,\n): string {\n switch (characterType) {\n case \"Uppercase\":\n return translate({\n defaultMessage: \"Must include an uppercase letter\",\n id: \"s/nwpy\",\n description: \"Password validation error for missing uppercase letter\",\n });\n case \"Lowercase\":\n return translate({\n defaultMessage: \"Must include a lowercase letter\",\n id: \"WiFn69\",\n description: \"Password validation error for missing lowercase letter\",\n });\n case \"Number\":\n return translate({\n defaultMessage: \"Must include a number\",\n id: \"z6Mu1x\",\n description: \"Password validation error for missing number\",\n });\n case \"Symbol\":\n return translate({\n defaultMessage: \"Must include a special character\",\n id: \"veTEdD\",\n description: \"Password validation error for missing special character\",\n });\n default:\n return fallback;\n }\n}\n\nexport function getPasswordValidationAriaTexts(\n errors: PasswordValidationError[],\n translate: TranslateFn,\n): string[] {\n return errors.map((err) => {\n const fallback = err.message;\n switch (err.code) {\n case \"password_missing_character_type\":\n return characterTypeAriaText(err.characterType, fallback, translate);\n case \"password_contains_email\":\n return translate({\n defaultMessage: \"Password must not contain your email address\",\n id: \"6oLR3O\",\n description:\n \"Password validation error for password containing email\",\n });\n case \"password_too_short\":\n return translate({\n defaultMessage:\n \"Password must be at least {minimumLength} characters\",\n id: \"g1iDVF\",\n description: \"Password validation error for password too short\",\n values: { minimumLength: String(err.minimumLength) },\n });\n case \"password_too_long\":\n return translate({\n defaultMessage:\n \"Password must be {maximumLength} characters or fewer\",\n id: \"zVDvW8\",\n description: \"Password validation error for password too long\",\n values: { maximumLength: String(err.maximumLength) },\n });\n case \"password_pwned\":\n return translate({\n defaultMessage:\n \"This password has appeared in data breaches and is not safe to use\",\n id: \"7rj/IT\",\n description: \"Password validation error for breached password\",\n });\n case \"password_reused\":\n return translate({\n defaultMessage: \"This password has been used before\",\n id: \"aNnw0s\",\n description: \"Password validation error for reused password\",\n });\n case \"password_too_weak\":\n return translate({\n defaultMessage: \"Password is not strong enough\",\n id: \"kB/Nl7\",\n description: \"Password validation error for weak password\",\n });\n default:\n return fallback;\n }\n });\n}\n"],"mappings":"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","names":[]}
|
|
@@ -20,7 +20,7 @@ import '@radix-ui/themes/components/select';
|
|
|
20
20
|
* by React Query, so calling it from multiple components doesn't trigger extra
|
|
21
21
|
* fetches. Surfaces errors so the caller can render an error state rather than
|
|
22
22
|
* a misleadingly empty list: a denied permission (`usePermissions` throws
|
|
23
|
-
* `IncorrectPermissionsError`) and a failed
|
|
23
|
+
* `IncorrectPermissionsError`) and a failed configurations fetch both flow
|
|
24
24
|
* through `error`.
|
|
25
25
|
*/
|
|
26
26
|
declare function useManageableIntegrations(): {
|