keycloakify 10.0.0-rc.10 → 10.0.0-rc.101
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/PUBLIC_URL.d.ts +1 -1
- package/PUBLIC_URL.js +3 -3
- package/PUBLIC_URL.js.map +1 -1
- package/README.md +8 -6
- package/account/DefaultPage.d.ts +5 -0
- package/account/{Fallback.js → DefaultPage.js} +3 -3
- package/account/DefaultPage.js.map +1 -0
- package/account/{kcContext → KcContext}/KcContext.d.ts +13 -0
- package/account/KcContext/KcContext.js.map +1 -0
- package/account/KcContext/getKcContextMock.d.ts +24 -0
- package/account/KcContext/getKcContextMock.js +28 -0
- package/account/KcContext/getKcContextMock.js.map +1 -0
- package/account/KcContext/index.d.ts +2 -0
- package/account/KcContext/index.js +2 -0
- package/account/KcContext/index.js.map +1 -0
- package/account/{kcContext → KcContext}/kcContextMocks.d.ts +1 -1
- package/account/KcContext/kcContextMocks.js +143 -0
- package/account/KcContext/kcContextMocks.js.map +1 -0
- package/account/Template.d.ts +2 -2
- package/account/Template.js +14 -12
- package/account/Template.js.map +1 -1
- package/account/TemplateProps.d.ts +3 -5
- package/account/i18n/baseMessages/ar.d.ts +2 -0
- package/account/i18n/baseMessages/ar.js +3 -1
- package/account/i18n/baseMessages/ar.js.map +1 -1
- package/account/i18n/baseMessages/ca.d.ts +2 -0
- package/account/i18n/baseMessages/ca.js +3 -1
- package/account/i18n/baseMessages/ca.js.map +1 -1
- package/account/i18n/baseMessages/cs.d.ts +2 -0
- package/account/i18n/baseMessages/cs.js +3 -1
- package/account/i18n/baseMessages/cs.js.map +1 -1
- package/account/i18n/baseMessages/da.d.ts +2 -0
- package/account/i18n/baseMessages/da.js +3 -1
- package/account/i18n/baseMessages/da.js.map +1 -1
- package/account/i18n/baseMessages/de.d.ts +2 -0
- package/account/i18n/baseMessages/de.js +3 -1
- package/account/i18n/baseMessages/de.js.map +1 -1
- package/account/i18n/baseMessages/el.d.ts +2 -0
- package/account/i18n/baseMessages/el.js +3 -1
- package/account/i18n/baseMessages/el.js.map +1 -1
- package/account/i18n/baseMessages/en.d.ts +2 -0
- package/account/i18n/baseMessages/en.js +3 -1
- package/account/i18n/baseMessages/en.js.map +1 -1
- package/account/i18n/baseMessages/es.d.ts +2 -0
- package/account/i18n/baseMessages/es.js +3 -1
- package/account/i18n/baseMessages/es.js.map +1 -1
- package/account/i18n/baseMessages/fa.d.ts +2 -0
- package/account/i18n/baseMessages/fa.js +3 -1
- package/account/i18n/baseMessages/fa.js.map +1 -1
- package/account/i18n/baseMessages/fi.d.ts +2 -0
- package/account/i18n/baseMessages/fi.js +3 -1
- package/account/i18n/baseMessages/fi.js.map +1 -1
- package/account/i18n/baseMessages/fr.d.ts +2 -0
- package/account/i18n/baseMessages/fr.js +3 -1
- package/account/i18n/baseMessages/fr.js.map +1 -1
- package/account/i18n/baseMessages/hu.d.ts +2 -0
- package/account/i18n/baseMessages/hu.js +3 -1
- package/account/i18n/baseMessages/hu.js.map +1 -1
- package/account/i18n/baseMessages/index.d.ts +18 -0
- package/account/i18n/baseMessages/index.js.map +1 -1
- package/account/i18n/baseMessages/it.d.ts +2 -0
- package/account/i18n/baseMessages/it.js +3 -1
- package/account/i18n/baseMessages/it.js.map +1 -1
- package/account/i18n/baseMessages/ja.d.ts +2 -0
- package/account/i18n/baseMessages/ja.js +3 -1
- package/account/i18n/baseMessages/ja.js.map +1 -1
- package/account/i18n/baseMessages/lt.d.ts +2 -0
- package/account/i18n/baseMessages/lt.js +3 -1
- package/account/i18n/baseMessages/lt.js.map +1 -1
- package/account/i18n/baseMessages/lv.d.ts +2 -0
- package/account/i18n/baseMessages/lv.js +3 -1
- package/account/i18n/baseMessages/lv.js.map +1 -1
- package/account/i18n/baseMessages/nl.d.ts +2 -0
- package/account/i18n/baseMessages/nl.js +3 -1
- package/account/i18n/baseMessages/nl.js.map +1 -1
- package/account/i18n/baseMessages/no.d.ts +2 -0
- package/account/i18n/baseMessages/no.js +3 -1
- package/account/i18n/baseMessages/no.js.map +1 -1
- package/account/i18n/baseMessages/pl.d.ts +2 -0
- package/account/i18n/baseMessages/pl.js +3 -1
- package/account/i18n/baseMessages/pl.js.map +1 -1
- package/account/i18n/baseMessages/pt-BR.d.ts +2 -0
- package/account/i18n/baseMessages/pt-BR.js +3 -1
- package/account/i18n/baseMessages/pt-BR.js.map +1 -1
- package/account/i18n/baseMessages/ru.d.ts +2 -0
- package/account/i18n/baseMessages/ru.js +3 -1
- package/account/i18n/baseMessages/ru.js.map +1 -1
- package/account/i18n/baseMessages/sk.d.ts +2 -0
- package/account/i18n/baseMessages/sk.js +3 -1
- package/account/i18n/baseMessages/sk.js.map +1 -1
- package/account/i18n/baseMessages/sv.d.ts +2 -0
- package/account/i18n/baseMessages/sv.js +3 -1
- package/account/i18n/baseMessages/sv.js.map +1 -1
- package/account/i18n/baseMessages/th.d.ts +2 -0
- package/account/i18n/baseMessages/th.js +3 -1
- package/account/i18n/baseMessages/th.js.map +1 -1
- package/account/i18n/baseMessages/tr.d.ts +2 -0
- package/account/i18n/baseMessages/tr.js +3 -1
- package/account/i18n/baseMessages/tr.js.map +1 -1
- package/account/i18n/baseMessages/uk.d.ts +2 -0
- package/account/i18n/baseMessages/uk.js +3 -1
- package/account/i18n/baseMessages/uk.js.map +1 -1
- package/account/i18n/baseMessages/zh-CN.d.ts +2 -0
- package/account/i18n/baseMessages/zh-CN.js +3 -1
- package/account/i18n/baseMessages/zh-CN.js.map +1 -1
- package/account/i18n/i18n.d.ts +34 -36
- package/account/i18n/i18n.js +117 -98
- package/account/i18n/i18n.js.map +1 -1
- package/account/i18n/index.d.ts +4 -1
- package/account/i18n/index.js +1 -1
- package/account/i18n/index.js.map +1 -1
- package/account/i18n/useI18n.d.ts +13 -0
- package/account/i18n/useI18n.js +26 -0
- package/account/i18n/useI18n.js.map +1 -0
- package/account/index.d.ts +3 -7
- package/account/index.js +1 -5
- package/account/index.js.map +1 -1
- package/account/lib/kcClsx.d.ts +9 -0
- package/account/lib/kcClsx.js +19 -0
- package/account/lib/kcClsx.js.map +1 -0
- package/account/pages/Account.d.ts +1 -1
- package/account/pages/Account.js +7 -6
- package/account/pages/Account.js.map +1 -1
- package/account/pages/Applications.d.ts +1 -1
- package/account/pages/Applications.js +8 -9
- package/account/pages/Applications.js.map +1 -1
- package/account/pages/FederatedIdentity.d.ts +3 -3
- package/account/pages/FederatedIdentity.js +1 -1
- package/account/pages/FederatedIdentity.js.map +1 -1
- package/account/pages/Log.d.ts +1 -1
- package/account/pages/Log.js +3 -3
- package/account/pages/Log.js.map +1 -1
- package/account/pages/PageProps.d.ts +4 -6
- package/account/pages/Password.d.ts +1 -1
- package/account/pages/Password.js +16 -13
- package/account/pages/Password.js.map +1 -1
- package/account/pages/Sessions.d.ts +1 -1
- package/account/pages/Sessions.js +3 -4
- package/account/pages/Sessions.js.map +1 -1
- package/account/pages/Totp.d.ts +1 -1
- package/account/pages/Totp.js +9 -10
- package/account/pages/Totp.js.map +1 -1
- package/bin/180.index.js +4664 -0
- package/bin/193.index.js +160 -0
- package/bin/266.index.js +806 -0
- package/bin/304.index.js +1108 -0
- package/bin/31.index.js +804 -0
- package/bin/36.index.js +9980 -0
- package/bin/430.index.js +1349 -0
- package/bin/440.index.js +1466 -0
- package/bin/453.index.js +769 -0
- package/bin/490.index.js +75195 -0
- package/bin/525.index.js +41826 -0
- package/bin/526.index.js +996 -0
- package/bin/538.index.js +108 -0
- package/bin/720.index.js +243 -0
- package/bin/877.index.js +275 -0
- package/bin/893.index.js +713 -0
- package/bin/932.index.js +269 -0
- package/bin/966.index.js +4232 -0
- package/bin/97.index.js +677 -0
- package/bin/main.js +9456 -141122
- package/bin/shared/KeycloakVersionRange.d.ts +5 -0
- package/bin/shared/KeycloakVersionRange.js.map +1 -0
- package/bin/shared/buildContext.d.ts +74 -0
- package/bin/shared/buildContext.js.map +1 -0
- package/bin/shared/constants.d.ts +18 -0
- package/bin/shared/constants.js +59 -0
- package/bin/shared/constants.js.map +1 -0
- package/bin/shared/copyKeycloakResourcesToPublic.d.ts +8 -0
- package/bin/shared/copyKeycloakResourcesToPublic.js.map +1 -0
- package/bin/shared/downloadKeycloakDefaultTheme.d.ts +11 -0
- package/bin/shared/downloadKeycloakDefaultTheme.js.map +1 -0
- package/bin/shared/downloadKeycloakStaticResources.d.ts +9 -0
- package/bin/shared/downloadKeycloakStaticResources.js.map +1 -0
- package/bin/shared/generateKcGenTs.d.ts +12 -0
- package/bin/shared/generateKcGenTs.js.map +1 -0
- package/bin/shared/metaInfKeycloakThemes.d.ts +13 -0
- package/bin/shared/metaInfKeycloakThemes.js.map +1 -0
- package/bin/shared/promptKeycloakVersion.d.ts +7 -0
- package/bin/shared/promptKeycloakVersion.js.map +1 -0
- package/lib/BASE_URL.js.map +1 -1
- package/lib/getKcClsx.d.ts +11 -0
- package/lib/getKcClsx.js +55 -0
- package/lib/getKcClsx.js.map +1 -0
- package/login/{Fallback.d.ts → DefaultPage.d.ts} +7 -6
- package/login/{Fallback.js → DefaultPage.js} +2 -2
- package/login/DefaultPage.js.map +1 -0
- package/login/{kcContext → KcContext}/KcContext.d.ts +36 -17
- package/login/KcContext/KcContext.js.map +1 -0
- package/login/KcContext/getKcContextMock.d.ts +24 -0
- package/login/KcContext/getKcContextMock.js +28 -0
- package/login/KcContext/getKcContextMock.js.map +1 -0
- package/login/KcContext/index.d.ts +2 -0
- package/login/KcContext/index.js +2 -0
- package/login/KcContext/index.js.map +1 -0
- package/login/{kcContext → KcContext}/kcContextMocks.d.ts +1 -1
- package/login/KcContext/kcContextMocks.js +334 -0
- package/login/KcContext/kcContextMocks.js.map +1 -0
- package/login/Template.d.ts +2 -2
- package/login/Template.js +31 -25
- package/login/Template.js.map +1 -1
- package/login/TemplateProps.d.ts +3 -6
- package/login/UserProfileFormFields.d.ts +3 -20
- package/login/UserProfileFormFields.js +78 -122
- package/login/UserProfileFormFields.js.map +1 -1
- package/login/UserProfileFormFieldsProps.d.ts +24 -0
- package/login/UserProfileFormFieldsProps.js +2 -0
- package/login/UserProfileFormFieldsProps.js.map +1 -0
- package/login/i18n/baseMessages/ar.d.ts +9 -0
- package/login/i18n/baseMessages/ar.js +11 -2
- package/login/i18n/baseMessages/ar.js.map +1 -1
- package/login/i18n/baseMessages/ca.d.ts +10 -1
- package/login/i18n/baseMessages/ca.js +12 -3
- package/login/i18n/baseMessages/ca.js.map +1 -1
- package/login/i18n/baseMessages/cs.d.ts +9 -0
- package/login/i18n/baseMessages/cs.js +11 -2
- package/login/i18n/baseMessages/cs.js.map +1 -1
- package/login/i18n/baseMessages/da.d.ts +9 -0
- package/login/i18n/baseMessages/da.js +11 -2
- package/login/i18n/baseMessages/da.js.map +1 -1
- package/login/i18n/baseMessages/de.d.ts +9 -0
- package/login/i18n/baseMessages/de.js +11 -2
- package/login/i18n/baseMessages/de.js.map +1 -1
- package/login/i18n/baseMessages/el.d.ts +9 -1
- package/login/i18n/baseMessages/el.js +11 -3
- package/login/i18n/baseMessages/el.js.map +1 -1
- package/login/i18n/baseMessages/en.d.ts +10 -1
- package/login/i18n/baseMessages/en.js +12 -3
- package/login/i18n/baseMessages/en.js.map +1 -1
- package/login/i18n/baseMessages/es.d.ts +10 -1
- package/login/i18n/baseMessages/es.js +12 -3
- package/login/i18n/baseMessages/es.js.map +1 -1
- package/login/i18n/baseMessages/fa.d.ts +9 -1
- package/login/i18n/baseMessages/fa.js +11 -3
- package/login/i18n/baseMessages/fa.js.map +1 -1
- package/login/i18n/baseMessages/fi.d.ts +9 -0
- package/login/i18n/baseMessages/fi.js +11 -2
- package/login/i18n/baseMessages/fi.js.map +1 -1
- package/login/i18n/baseMessages/fr.d.ts +9 -0
- package/login/i18n/baseMessages/fr.js +11 -2
- package/login/i18n/baseMessages/fr.js.map +1 -1
- package/login/i18n/baseMessages/hu.d.ts +10 -1
- package/login/i18n/baseMessages/hu.js +12 -3
- package/login/i18n/baseMessages/hu.js.map +1 -1
- package/login/i18n/baseMessages/index.d.ts +109 -2
- package/login/i18n/baseMessages/index.js.map +1 -1
- package/login/i18n/baseMessages/it.d.ts +9 -0
- package/login/i18n/baseMessages/it.js +11 -2
- package/login/i18n/baseMessages/it.js.map +1 -1
- package/login/i18n/baseMessages/ja.d.ts +9 -0
- package/login/i18n/baseMessages/ja.js +11 -2
- package/login/i18n/baseMessages/ja.js.map +1 -1
- package/login/i18n/baseMessages/lt.d.ts +9 -0
- package/login/i18n/baseMessages/lt.js +11 -2
- package/login/i18n/baseMessages/lt.js.map +1 -1
- package/login/i18n/baseMessages/lv.d.ts +9 -0
- package/login/i18n/baseMessages/lv.js +11 -2
- package/login/i18n/baseMessages/lv.js.map +1 -1
- package/login/i18n/baseMessages/nl.d.ts +9 -0
- package/login/i18n/baseMessages/nl.js +11 -2
- package/login/i18n/baseMessages/nl.js.map +1 -1
- package/login/i18n/baseMessages/no.d.ts +9 -0
- package/login/i18n/baseMessages/no.js +11 -2
- package/login/i18n/baseMessages/no.js.map +1 -1
- package/login/i18n/baseMessages/pl.d.ts +9 -0
- package/login/i18n/baseMessages/pl.js +11 -2
- package/login/i18n/baseMessages/pl.js.map +1 -1
- package/login/i18n/baseMessages/pt-BR.d.ts +9 -0
- package/login/i18n/baseMessages/pt-BR.js +11 -2
- package/login/i18n/baseMessages/pt-BR.js.map +1 -1
- package/login/i18n/baseMessages/ru.d.ts +9 -0
- package/login/i18n/baseMessages/ru.js +11 -2
- package/login/i18n/baseMessages/ru.js.map +1 -1
- package/login/i18n/baseMessages/sk.d.ts +9 -0
- package/login/i18n/baseMessages/sk.js +11 -2
- package/login/i18n/baseMessages/sk.js.map +1 -1
- package/login/i18n/baseMessages/sv.d.ts +9 -0
- package/login/i18n/baseMessages/sv.js +11 -2
- package/login/i18n/baseMessages/sv.js.map +1 -1
- package/login/i18n/baseMessages/th.d.ts +9 -0
- package/login/i18n/baseMessages/th.js +11 -2
- package/login/i18n/baseMessages/th.js.map +1 -1
- package/login/i18n/baseMessages/tr.d.ts +9 -0
- package/login/i18n/baseMessages/tr.js +11 -2
- package/login/i18n/baseMessages/tr.js.map +1 -1
- package/login/i18n/baseMessages/uk.d.ts +9 -0
- package/login/i18n/baseMessages/uk.js +11 -2
- package/login/i18n/baseMessages/uk.js.map +1 -1
- package/login/i18n/baseMessages/zh-CN.d.ts +10 -1
- package/login/i18n/baseMessages/zh-CN.js +12 -3
- package/login/i18n/baseMessages/zh-CN.js.map +1 -1
- package/login/i18n/i18n.d.ts +38 -38
- package/login/i18n/i18n.js +139 -99
- package/login/i18n/i18n.js.map +1 -1
- package/login/i18n/index.d.ts +4 -1
- package/login/i18n/index.js +1 -1
- package/login/i18n/index.js.map +1 -1
- package/login/i18n/useI18n.d.ts +13 -0
- package/login/i18n/useI18n.js +26 -0
- package/login/i18n/useI18n.js.map +1 -0
- package/login/index.d.ts +3 -8
- package/login/index.js +1 -6
- package/login/index.js.map +1 -1
- package/login/lib/kcClsx.d.ts +9 -0
- package/login/lib/kcClsx.js +130 -0
- package/login/lib/kcClsx.js.map +1 -0
- package/login/lib/useUserProfileForm.d.ts +20 -8
- package/login/lib/useUserProfileForm.js +404 -295
- package/login/lib/useUserProfileForm.js.map +1 -1
- package/login/pages/Code.d.ts +1 -1
- package/login/pages/Code.js +3 -3
- package/login/pages/Code.js.map +1 -1
- package/login/pages/DeleteAccountConfirm.d.ts +1 -1
- package/login/pages/DeleteAccountConfirm.js +7 -4
- package/login/pages/DeleteAccountConfirm.js.map +1 -1
- package/login/pages/DeleteCredential.d.ts +1 -1
- package/login/pages/DeleteCredential.js +3 -4
- package/login/pages/DeleteCredential.js.map +1 -1
- package/login/pages/Error.d.ts +1 -1
- package/login/pages/Error.js +1 -1
- package/login/pages/Error.js.map +1 -1
- package/login/pages/FrontchannelLogout.d.ts +1 -1
- package/login/pages/FrontchannelLogout.js +1 -1
- package/login/pages/FrontchannelLogout.js.map +1 -1
- package/login/pages/IdpReviewUserProfile.d.ts +4 -3
- package/login/pages/IdpReviewUserProfile.js +4 -5
- package/login/pages/IdpReviewUserProfile.js.map +1 -1
- package/login/pages/Info.d.ts +1 -1
- package/login/pages/Info.js +18 -8
- package/login/pages/Info.js.map +1 -1
- package/login/pages/Login.d.ts +1 -1
- package/login/pages/Login.js +12 -8
- package/login/pages/Login.js.map +1 -1
- package/login/pages/LoginConfigTotp.d.ts +1 -1
- package/login/pages/LoginConfigTotp.js +10 -7
- package/login/pages/LoginConfigTotp.js.map +1 -1
- package/login/pages/LoginIdpLinkConfirm.d.ts +1 -1
- package/login/pages/LoginIdpLinkConfirm.js +3 -4
- package/login/pages/LoginIdpLinkConfirm.js.map +1 -1
- package/login/pages/LoginIdpLinkEmail.d.ts +2 -2
- package/login/pages/LoginIdpLinkEmail.js +1 -1
- package/login/pages/LoginIdpLinkEmail.js.map +1 -1
- package/login/pages/LoginOauth2DeviceVerifyUserCode.d.ts +3 -3
- package/login/pages/LoginOauth2DeviceVerifyUserCode.js +3 -4
- package/login/pages/LoginOauth2DeviceVerifyUserCode.js.map +1 -1
- package/login/pages/LoginOauthGrant.d.ts +3 -3
- package/login/pages/LoginOauthGrant.js +4 -5
- package/login/pages/LoginOauthGrant.js.map +1 -1
- package/login/pages/LoginOtp.d.ts +1 -1
- package/login/pages/LoginOtp.js +5 -4
- package/login/pages/LoginOtp.js.map +1 -1
- package/login/pages/LoginPageExpired.d.ts +1 -1
- package/login/pages/LoginPageExpired.js +1 -1
- package/login/pages/LoginPageExpired.js.map +1 -1
- package/login/pages/LoginPassword.d.ts +1 -1
- package/login/pages/LoginPassword.js +9 -7
- package/login/pages/LoginPassword.js.map +1 -1
- package/login/pages/LoginRecoveryAuthnCodeConfig.d.ts +1 -1
- package/login/pages/LoginRecoveryAuthnCodeConfig.js +16 -16
- package/login/pages/LoginRecoveryAuthnCodeConfig.js.map +1 -1
- package/login/pages/LoginRecoveryAuthnCodeInput.d.ts +1 -1
- package/login/pages/LoginRecoveryAuthnCodeInput.js +5 -4
- package/login/pages/LoginRecoveryAuthnCodeInput.js.map +1 -1
- package/login/pages/LoginResetOtp.d.ts +1 -1
- package/login/pages/LoginResetOtp.js +3 -4
- package/login/pages/LoginResetOtp.js.map +1 -1
- package/login/pages/LoginResetPassword.d.ts +1 -1
- package/login/pages/LoginResetPassword.js +6 -5
- package/login/pages/LoginResetPassword.js.map +1 -1
- package/login/pages/LoginUpdatePassword.d.ts +1 -1
- package/login/pages/LoginUpdatePassword.js +12 -9
- package/login/pages/LoginUpdatePassword.js.map +1 -1
- package/login/pages/LoginUpdateProfile.d.ts +4 -3
- package/login/pages/LoginUpdateProfile.js +5 -9
- package/login/pages/LoginUpdateProfile.js.map +1 -1
- package/login/pages/LoginUsername.d.ts +1 -1
- package/login/pages/LoginUsername.js +5 -5
- package/login/pages/LoginUsername.js.map +1 -1
- package/login/pages/LoginVerifyEmail.d.ts +1 -1
- package/login/pages/LoginVerifyEmail.js +1 -1
- package/login/pages/LoginVerifyEmail.js.map +1 -1
- package/login/pages/LoginX509Info.d.ts +1 -1
- package/login/pages/LoginX509Info.js +3 -4
- package/login/pages/LoginX509Info.js.map +1 -1
- package/login/pages/LogoutConfirm.d.ts +1 -1
- package/login/pages/LogoutConfirm.js +3 -4
- package/login/pages/LogoutConfirm.js.map +1 -1
- package/login/pages/PageProps.d.ts +3 -5
- package/login/pages/Register.d.ts +4 -3
- package/login/pages/Register.js +9 -19
- package/login/pages/Register.js.map +1 -1
- package/login/pages/SamlPostForm.d.ts +1 -1
- package/login/pages/SamlPostForm.js +2 -2
- package/login/pages/SamlPostForm.js.map +1 -1
- package/login/pages/SelectAuthenticator.d.ts +2 -2
- package/login/pages/SelectAuthenticator.js +3 -7
- package/login/pages/SelectAuthenticator.js.map +1 -1
- package/login/pages/Terms.d.ts +2 -2
- package/login/pages/Terms.js +3 -10
- package/login/pages/Terms.js.map +1 -1
- package/login/pages/UpdateEmail.d.ts +3 -2
- package/login/pages/UpdateEmail.js +6 -10
- package/login/pages/UpdateEmail.js.map +1 -1
- package/login/pages/WebauthnAuthenticate.d.ts +1 -1
- package/login/pages/WebauthnAuthenticate.js +25 -22
- package/login/pages/WebauthnAuthenticate.js.map +1 -1
- package/login/pages/WebauthnError.d.ts +1 -1
- package/login/pages/WebauthnError.js +4 -5
- package/login/pages/WebauthnError.js.map +1 -1
- package/login/pages/WebauthnRegister.d.ts +1 -1
- package/login/pages/WebauthnRegister.js +16 -17
- package/login/pages/WebauthnRegister.js.map +1 -1
- package/package.json +418 -315
- package/src/PUBLIC_URL.ts +3 -3
- package/src/account/{Fallback.tsx → DefaultPage.tsx} +5 -5
- package/src/account/{kcContext → KcContext}/KcContext.ts +24 -2
- package/src/account/KcContext/getKcContextMock.ts +69 -0
- package/src/account/KcContext/index.ts +2 -0
- package/src/account/KcContext/kcContextMocks.ts +190 -0
- package/src/account/Template.tsx +20 -17
- package/src/account/TemplateProps.ts +4 -5
- package/src/account/i18n/baseMessages/ar.ts +3 -1
- package/src/account/i18n/baseMessages/ca.ts +3 -1
- package/src/account/i18n/baseMessages/cs.ts +3 -1
- package/src/account/i18n/baseMessages/da.ts +3 -1
- package/src/account/i18n/baseMessages/de.ts +3 -1
- package/src/account/i18n/baseMessages/el.ts +3 -1
- package/src/account/i18n/baseMessages/en.ts +3 -1
- package/src/account/i18n/baseMessages/es.ts +3 -1
- package/src/account/i18n/baseMessages/fa.ts +3 -1
- package/src/account/i18n/baseMessages/fi.ts +3 -1
- package/src/account/i18n/baseMessages/fr.ts +3 -1
- package/src/account/i18n/baseMessages/hu.ts +3 -1
- package/src/account/i18n/baseMessages/it.ts +3 -1
- package/src/account/i18n/baseMessages/ja.ts +3 -1
- package/src/account/i18n/baseMessages/lt.ts +3 -1
- package/src/account/i18n/baseMessages/lv.ts +3 -1
- package/src/account/i18n/baseMessages/nl.ts +3 -1
- package/src/account/i18n/baseMessages/no.ts +3 -1
- package/src/account/i18n/baseMessages/pl.ts +3 -1
- package/src/account/i18n/baseMessages/pt-BR.ts +3 -1
- package/src/account/i18n/baseMessages/ru.ts +3 -1
- package/src/account/i18n/baseMessages/sk.ts +3 -1
- package/src/account/i18n/baseMessages/sv.ts +3 -1
- package/src/account/i18n/baseMessages/th.ts +3 -1
- package/src/account/i18n/baseMessages/tr.ts +3 -1
- package/src/account/i18n/baseMessages/uk.ts +3 -1
- package/src/account/i18n/baseMessages/zh-CN.ts +3 -1
- package/src/account/i18n/i18n.tsx +202 -144
- package/src/account/i18n/index.ts +4 -1
- package/src/account/i18n/useI18n.ts +44 -0
- package/src/account/index.ts +3 -10
- package/src/account/lib/kcClsx.ts +25 -0
- package/src/account/pages/Account.tsx +12 -18
- package/src/account/pages/Applications.tsx +8 -10
- package/src/account/pages/FederatedIdentity.tsx +3 -3
- package/src/account/pages/Log.tsx +5 -5
- package/src/account/pages/PageProps.ts +4 -6
- package/src/account/pages/Password.tsx +17 -19
- package/src/account/pages/Sessions.tsx +5 -6
- package/src/account/pages/Totp.tsx +32 -42
- package/src/bin/add-story.ts +105 -0
- package/src/bin/copy-keycloak-resources-to-public.ts +3 -6
- package/src/bin/eject-page.ts +256 -0
- package/src/bin/initialize-email-theme.ts +30 -26
- package/src/bin/keycloakify/buildJars/buildJar.ts +138 -77
- package/src/bin/keycloakify/buildJars/buildJars.ts +35 -31
- package/src/bin/keycloakify/buildJars/extensionVersions.ts +3 -2
- package/src/bin/keycloakify/buildJars/generatePom.ts +19 -11
- package/src/bin/keycloakify/buildJars/getKeycloakVersionRangeForJar.ts +42 -10
- package/src/bin/keycloakify/generateFtl/generateFtl.ts +74 -48
- package/src/bin/keycloakify/generateFtl/{ftl_object_to_js_code_declaring_an_object.ftl → kcContextDeclarationTemplate.ftl} +233 -194
- package/src/bin/keycloakify/generateResources/bringInAccountV1.ts +89 -0
- package/src/bin/keycloakify/generateResources/generateMessageProperties.ts +192 -0
- package/src/bin/keycloakify/generateResources/generateResources.ts +42 -0
- package/src/bin/keycloakify/generateResources/generateResourcesForMainTheme.ts +300 -0
- package/src/bin/keycloakify/generateResources/generateResourcesForThemeVariant.ts +70 -0
- package/src/bin/keycloakify/generateResources/index.ts +1 -0
- package/src/bin/keycloakify/{generateSrcMainResources → generateResources}/readExtraPageNames.ts +21 -7
- package/src/bin/keycloakify/generateResources/readFieldNameUsage.ts +91 -0
- package/src/bin/keycloakify/keycloakify.ts +50 -16
- package/src/bin/keycloakify/replacers/replaceImportsInCssCode.ts +42 -46
- package/src/bin/keycloakify/replacers/replaceImportsInJsCode/replaceImportsInJsCode.ts +15 -12
- package/src/bin/keycloakify/replacers/replaceImportsInJsCode/vite.ts +31 -16
- package/src/bin/keycloakify/replacers/replaceImportsInJsCode/webpack.ts +53 -18
- package/src/bin/main.ts +99 -44
- package/src/bin/shared/KeycloakVersionRange.ts +4 -2
- package/src/bin/shared/buildContext.ts +868 -0
- package/src/bin/shared/constants.ts +10 -4
- package/src/bin/shared/copyKeycloakResourcesToPublic.ts +32 -21
- package/src/bin/shared/downloadKeycloakDefaultTheme.ts +277 -0
- package/src/bin/shared/downloadKeycloakStaticResources.ts +30 -26
- package/src/bin/shared/generateKcGenTs.ts +68 -0
- package/src/bin/shared/metaInfKeycloakThemes.ts +25 -19
- package/src/bin/shared/promptKeycloakVersion.ts +39 -15
- package/src/bin/start-keycloak/appBuild.ts +180 -0
- package/src/bin/start-keycloak/index.ts +1 -0
- package/src/bin/start-keycloak/keycloakifyBuild.ts +43 -0
- package/src/bin/start-keycloak/myrealm-realm-18.json +2155 -0
- package/src/bin/start-keycloak/myrealm-realm-19.json +2186 -0
- package/src/bin/start-keycloak/myrealm-realm-20.json +2197 -0
- package/src/bin/start-keycloak/myrealm-realm-21.json +2201 -0
- package/src/bin/start-keycloak/myrealm-realm-23.json +2155 -0
- package/src/bin/start-keycloak/myrealm-realm-24.json +2318 -0
- package/src/bin/start-keycloak/myrealm-realm-25.json +2400 -0
- package/src/bin/start-keycloak/start-keycloak.ts +451 -0
- package/src/bin/tools/SemVer.ts +32 -13
- package/src/bin/tools/String.prototype.replaceAll.ts +9 -2
- package/src/bin/tools/assertNoPnpmDlx.ts +15 -0
- package/src/bin/tools/crawl.ts +4 -1
- package/src/bin/tools/crc32.ts +42 -24
- package/src/bin/tools/downloadAndExtractArchive.ts +254 -0
- package/src/bin/tools/escapeStringForPropertiesFile.ts +64 -0
- package/src/bin/tools/extractArchive.ts +140 -0
- package/src/bin/tools/fetchProxyOptions.ts +76 -53
- package/src/bin/tools/getAbsoluteAndInOsFormatPath.ts +10 -2
- package/src/bin/tools/octokit-addons/getLatestsSemVersionedTag.ts +8 -2
- package/src/bin/tools/octokit-addons/listTags.ts +15 -4
- package/src/bin/tools/partitionPromiseSettledResults.ts +12 -3
- package/src/bin/tools/readThisNpmPackageVersion.ts +5 -1
- package/src/bin/tools/transformCodebase.ts +29 -10
- package/src/bin/tools/trimIndent.ts +4 -1
- package/src/bin/tsconfig.json +4 -3
- package/src/bin/update-kc-gen.ts +13 -0
- package/src/lib/getKcClsx.ts +89 -0
- package/src/login/{Fallback.tsx → DefaultPage.tsx} +7 -6
- package/src/login/{kcContext → KcContext}/KcContext.ts +58 -30
- package/src/login/KcContext/getKcContextMock.ts +69 -0
- package/src/login/KcContext/index.ts +8 -0
- package/src/login/KcContext/kcContextMocks.ts +583 -0
- package/src/login/Template.tsx +69 -92
- package/src/login/TemplateProps.ts +3 -7
- package/src/login/UserProfileFormFields.tsx +126 -211
- package/src/login/UserProfileFormFieldsProps.tsx +22 -0
- package/src/login/i18n/baseMessages/ar.ts +11 -2
- package/src/login/i18n/baseMessages/ca.ts +12 -3
- package/src/login/i18n/baseMessages/cs.ts +11 -2
- package/src/login/i18n/baseMessages/da.ts +11 -2
- package/src/login/i18n/baseMessages/de.ts +11 -2
- package/src/login/i18n/baseMessages/el.ts +11 -3
- package/src/login/i18n/baseMessages/en.ts +12 -3
- package/src/login/i18n/baseMessages/es.ts +12 -3
- package/src/login/i18n/baseMessages/fa.ts +11 -3
- package/src/login/i18n/baseMessages/fi.ts +11 -2
- package/src/login/i18n/baseMessages/fr.ts +11 -2
- package/src/login/i18n/baseMessages/hu.ts +12 -3
- package/src/login/i18n/baseMessages/it.ts +11 -2
- package/src/login/i18n/baseMessages/ja.ts +11 -2
- package/src/login/i18n/baseMessages/lt.ts +11 -2
- package/src/login/i18n/baseMessages/lv.ts +11 -2
- package/src/login/i18n/baseMessages/nl.ts +11 -2
- package/src/login/i18n/baseMessages/no.ts +11 -2
- package/src/login/i18n/baseMessages/pl.ts +11 -2
- package/src/login/i18n/baseMessages/pt-BR.ts +11 -2
- package/src/login/i18n/baseMessages/ru.ts +11 -2
- package/src/login/i18n/baseMessages/sk.ts +11 -2
- package/src/login/i18n/baseMessages/sv.ts +11 -2
- package/src/login/i18n/baseMessages/th.ts +11 -2
- package/src/login/i18n/baseMessages/tr.ts +11 -2
- package/src/login/i18n/baseMessages/uk.ts +11 -2
- package/src/login/i18n/baseMessages/zh-CN.ts +12 -3
- package/src/login/i18n/i18n.tsx +240 -145
- package/src/login/i18n/index.ts +4 -1
- package/src/login/i18n/useI18n.ts +44 -0
- package/src/login/index.ts +3 -11
- package/src/login/lib/kcClsx.ts +143 -0
- package/src/login/lib/useUserProfileForm.tsx +487 -351
- package/src/login/pages/Code.tsx +8 -5
- package/src/login/pages/DeleteAccountConfirm.tsx +15 -10
- package/src/login/pages/DeleteCredential.tsx +9 -7
- package/src/login/pages/Error.tsx +10 -3
- package/src/login/pages/FrontchannelLogout.tsx +6 -3
- package/src/login/pages/IdpReviewUserProfile.tsx +20 -21
- package/src/login/pages/Info.tsx +30 -13
- package/src/login/pages/Login.tsx +51 -59
- package/src/login/pages/LoginConfigTotp.tsx +49 -43
- package/src/login/pages/LoginIdpLinkConfirm.tsx +7 -18
- package/src/login/pages/LoginIdpLinkEmail.tsx +9 -3
- package/src/login/pages/LoginOauth2DeviceVerifyUserCode.tsx +24 -23
- package/src/login/pages/LoginOauthGrant.tsx +14 -20
- package/src/login/pages/LoginOtp.tsx +34 -32
- package/src/login/pages/LoginPageExpired.tsx +2 -2
- package/src/login/pages/LoginPassword.tsx +29 -34
- package/src/login/pages/LoginRecoveryAuthnCodeConfig.tsx +34 -34
- package/src/login/pages/LoginRecoveryAuthnCodeInput.tsx +26 -24
- package/src/login/pages/LoginResetOtp.tsx +19 -22
- package/src/login/pages/LoginResetPassword.tsx +28 -26
- package/src/login/pages/LoginUpdatePassword.tsx +55 -55
- package/src/login/pages/LoginUpdateProfile.tsx +32 -30
- package/src/login/pages/LoginUsername.tsx +23 -34
- package/src/login/pages/LoginVerifyEmail.tsx +5 -2
- package/src/login/pages/LoginX509Info.tsx +24 -33
- package/src/login/pages/LogoutConfirm.tsx +8 -14
- package/src/login/pages/PageProps.ts +3 -5
- package/src/login/pages/Register.tsx +54 -54
- package/src/login/pages/SamlPostForm.tsx +3 -3
- package/src/login/pages/SelectAuthenticator.tsx +23 -24
- package/src/login/pages/Terms.tsx +14 -24
- package/src/login/pages/UpdateEmail.tsx +30 -33
- package/src/login/pages/WebauthnAuthenticate.tsx +40 -44
- package/src/login/pages/WebauthnError.tsx +15 -19
- package/src/login/pages/WebauthnRegister.tsx +28 -37
- package/src/tools/Array.prototype.every.ts +4 -1
- package/src/tools/ExtractAfterStartingWith.ts +4 -0
- package/src/tools/LazyOrNot.ts +3 -1
- package/src/tools/Object.fromEntries.ts +23 -0
- package/src/tools/StatefulObservable/README.md +16 -0
- package/src/tools/StatefulObservable/StatefulObservable.ts +58 -0
- package/src/tools/StatefulObservable/hooks/index.ts +2 -0
- package/src/tools/StatefulObservable/hooks/useObservable.ts +25 -0
- package/src/tools/StatefulObservable/hooks/useRerenderOnChange.ts +19 -0
- package/src/tools/StatefulObservable/index.ts +2 -0
- package/src/tools/ValueOf.ts +2 -0
- package/src/tools/clsx.ts +6 -42
- package/src/tools/clsx_withTransform.ts +55 -0
- package/src/tools/deepAssign.ts +57 -19
- package/src/tools/formatNumber.ts +7 -3
- package/src/tools/structuredCloneButFunctions.ts +24 -0
- package/src/tools/useConstCallback.ts +3 -1
- package/src/tools/useInsertLinkTags.ts +78 -74
- package/src/tools/useInsertScriptTags.ts +69 -73
- package/src/tools/useOnFirstMount.ts +18 -0
- package/src/tools/useSetClassName.ts +4 -1
- package/src/vite-plugin/vite-plugin.ts +73 -37
- package/stories/account/pages/Account.stories.tsx +18 -0
- package/stories/account/pages/Applications.stories.tsx +80 -0
- package/stories/account/pages/FederatedIdentity.stories.tsx +38 -0
- package/stories/account/pages/Log.stories.tsx +356 -0
- package/stories/account/pages/Password.stories.tsx +28 -0
- package/stories/account/pages/Sessions.stories.tsx +59 -0
- package/stories/account/pages/Totp.stories.tsx +182 -0
- package/stories/login/pages/Code.stories.tsx +18 -0
- package/stories/login/pages/DeleteAccountConfirm.stories.tsx +18 -0
- package/stories/login/pages/DeleteCredential.stories.tsx +18 -0
- package/stories/login/pages/Error.stories.tsx +28 -0
- package/stories/login/pages/FrontchannelLogout.stories.tsx +18 -0
- package/stories/login/pages/IdpReviewUserProfile.stories.tsx +18 -0
- package/stories/login/pages/Info.stories.tsx +52 -0
- package/stories/login/pages/Login.stories.tsx +221 -0
- package/stories/login/pages/LoginConfigTotp.stories.tsx +43 -0
- package/stories/login/pages/LoginDeviceVerifyUserCode.stories.tsx +18 -0
- package/stories/login/pages/LoginIdpLinkConfirm.stories.tsx +18 -0
- package/stories/login/pages/LoginIdpLinkEmail.stories.tsx +18 -0
- package/stories/login/pages/LoginOauth2DeviceVerifyUserCode.stories.tsx +18 -0
- package/stories/login/pages/LoginOauthGrant.stories.tsx +18 -0
- package/stories/login/pages/LoginOtp.stories.tsx +18 -0
- package/stories/login/pages/LoginPageExpired.stories.tsx +18 -0
- package/stories/login/pages/LoginPassword.stories.tsx +18 -0
- package/stories/login/pages/LoginRecoveryAuthnCodeConfig.stories.tsx +18 -0
- package/stories/login/pages/LoginRecoveryAuthnCodeInput.stories.tsx +18 -0
- package/stories/login/pages/LoginResetOtp.stories.tsx +18 -0
- package/stories/login/pages/LoginResetPassword.stories.tsx +31 -0
- package/stories/login/pages/LoginUpdatePassword.stories.tsx +18 -0
- package/stories/login/pages/LoginUpdateProfile.stories.tsx +18 -0
- package/stories/login/pages/LoginUsername.stories.tsx +31 -0
- package/stories/login/pages/LoginVerifyEmail.stories.tsx +30 -0
- package/stories/login/pages/LoginX509Info.stories.tsx +18 -0
- package/stories/login/pages/LogoutConfirm.stories.tsx +18 -0
- package/stories/login/pages/Register.stories.tsx +185 -0
- package/stories/login/pages/SamlPostForm.stories.tsx +18 -0
- package/stories/login/pages/SelectAuthenticator.stories.tsx +43 -0
- package/stories/login/pages/Terms.stories.tsx +43 -0
- package/stories/login/pages/UpdateEmail.stories.tsx +18 -0
- package/stories/login/pages/WebauthnAuthenticate.stories.tsx +18 -0
- package/stories/login/pages/WebauthnError.stories.tsx +18 -0
- package/stories/login/pages/WebauthnRegister.stories.tsx +18 -0
- package/tools/Array.prototype.every.js +2 -1
- package/tools/Array.prototype.every.js.map +1 -1
- package/tools/ExtractAfterStartingWith.d.ts +1 -0
- package/tools/ExtractAfterStartingWith.js +2 -0
- package/tools/ExtractAfterStartingWith.js.map +1 -0
- package/tools/HTMLElement.prototype.prepend.js.map +1 -1
- package/tools/Object.fromEntries.d.ts +1 -0
- package/tools/Object.fromEntries.js +17 -0
- package/tools/Object.fromEntries.js.map +1 -0
- package/tools/StatefulObservable/StatefulObservable.d.ts +8 -0
- package/tools/StatefulObservable/StatefulObservable.js +36 -0
- package/tools/StatefulObservable/StatefulObservable.js.map +1 -0
- package/tools/StatefulObservable/hooks/index.d.ts +2 -0
- package/tools/StatefulObservable/hooks/index.js +3 -0
- package/tools/StatefulObservable/hooks/index.js.map +1 -0
- package/tools/StatefulObservable/hooks/useObservable.d.ts +8 -0
- package/tools/StatefulObservable/hooks/useObservable.js +17 -0
- package/tools/StatefulObservable/hooks/useObservable.js.map +1 -0
- package/tools/StatefulObservable/hooks/useRerenderOnChange.d.ts +5 -0
- package/tools/StatefulObservable/hooks/useRerenderOnChange.js +14 -0
- package/tools/StatefulObservable/hooks/useRerenderOnChange.js.map +1 -0
- package/tools/StatefulObservable/index.d.ts +2 -0
- package/tools/StatefulObservable/index.js +3 -0
- package/tools/StatefulObservable/index.js.map +1 -0
- package/tools/ValueOf.d.ts +2 -0
- package/tools/ValueOf.js +2 -0
- package/tools/ValueOf.js.map +1 -0
- package/tools/clsx.d.ts +3 -2
- package/tools/clsx.js +5 -41
- package/tools/clsx.js.map +1 -1
- package/tools/clsx_withTransform.d.ts +5 -0
- package/tools/clsx_withTransform.js +43 -0
- package/tools/clsx_withTransform.js.map +1 -0
- package/tools/deepAssign.d.ts +1 -0
- package/tools/deepAssign.js +41 -16
- package/tools/deepAssign.js.map +1 -1
- package/tools/formatNumber.js +2 -1
- package/tools/formatNumber.js.map +1 -1
- package/tools/structuredCloneButFunctions.d.ts +7 -0
- package/tools/structuredCloneButFunctions.js +19 -0
- package/tools/structuredCloneButFunctions.js.map +1 -0
- package/tools/useConstCallback.js.map +1 -1
- package/tools/useInsertLinkTags.d.ts +11 -6
- package/tools/useInsertLinkTags.js +53 -52
- package/tools/useInsertLinkTags.js.map +1 -1
- package/tools/useInsertScriptTags.d.ts +15 -6
- package/tools/useInsertScriptTags.js +56 -61
- package/tools/useInsertScriptTags.js.map +1 -1
- package/tools/useOnFirstMount.d.ts +2 -0
- package/tools/useOnFirstMount.js +15 -0
- package/tools/useOnFirstMount.js.map +1 -0
- package/tools/useSetClassName.js.map +1 -1
- package/vite-plugin/index.d.ts +1 -0
- package/vite-plugin/index.js +53377 -0
- package/vite-plugin/vite-plugin.d.ts +5 -0
- package/account/Fallback.d.ts +0 -5
- package/account/Fallback.js.map +0 -1
- package/account/kcContext/KcContext.js.map +0 -1
- package/account/kcContext/createGetKcContext.d.ts +0 -19
- package/account/kcContext/createGetKcContext.js +0 -73
- package/account/kcContext/createGetKcContext.js.map +0 -1
- package/account/kcContext/getKcContext.d.ts +0 -13
- package/account/kcContext/getKcContext.js +0 -13
- package/account/kcContext/getKcContext.js.map +0 -1
- package/account/kcContext/getKcContextFromWindow.d.ts +0 -8
- package/account/kcContext/getKcContextFromWindow.js +0 -5
- package/account/kcContext/getKcContextFromWindow.js.map +0 -1
- package/account/kcContext/index.d.ts +0 -1
- package/account/kcContext/index.js +0 -2
- package/account/kcContext/index.js.map +0 -1
- package/account/kcContext/kcContextMocks.js +0 -215
- package/account/kcContext/kcContextMocks.js.map +0 -1
- package/account/lib/useGetClassName.d.ts +0 -7
- package/account/lib/useGetClassName.js +0 -19
- package/account/lib/useGetClassName.js.map +0 -1
- package/lib/isStorybook.d.ts +0 -1
- package/lib/isStorybook.js +0 -2
- package/lib/isStorybook.js.map +0 -1
- package/lib/useGetClassName.d.ts +0 -10
- package/lib/useGetClassName.js +0 -14
- package/lib/useGetClassName.js.map +0 -1
- package/login/Fallback.js.map +0 -1
- package/login/kcContext/KcContext.js.map +0 -1
- package/login/kcContext/createGetKcContext.d.ts +0 -19
- package/login/kcContext/createGetKcContext.js +0 -109
- package/login/kcContext/createGetKcContext.js.map +0 -1
- package/login/kcContext/getKcContext.d.ts +0 -13
- package/login/kcContext/getKcContext.js +0 -13
- package/login/kcContext/getKcContext.js.map +0 -1
- package/login/kcContext/getKcContextFromWindow.d.ts +0 -8
- package/login/kcContext/getKcContextFromWindow.js +0 -5
- package/login/kcContext/getKcContextFromWindow.js.map +0 -1
- package/login/kcContext/index.d.ts +0 -1
- package/login/kcContext/index.js +0 -2
- package/login/kcContext/index.js.map +0 -1
- package/login/kcContext/kcContextMocks.js +0 -390
- package/login/kcContext/kcContextMocks.js.map +0 -1
- package/login/lib/useDownloadTerms.d.ts +0 -17
- package/login/lib/useDownloadTerms.js +0 -32
- package/login/lib/useDownloadTerms.js.map +0 -1
- package/login/lib/useGetClassName.d.ts +0 -7
- package/login/lib/useGetClassName.js +0 -130
- package/login/lib/useGetClassName.js.map +0 -1
- package/src/account/kcContext/createGetKcContext.ts +0 -108
- package/src/account/kcContext/getKcContext.ts +0 -21
- package/src/account/kcContext/getKcContextFromWindow.ts +0 -11
- package/src/account/kcContext/index.ts +0 -1
- package/src/account/kcContext/kcContextMocks.ts +0 -260
- package/src/account/lib/useGetClassName.ts +0 -20
- package/src/bin/download-builtin-keycloak-theme.ts +0 -30
- package/src/bin/eject-keycloak-page.ts +0 -126
- package/src/bin/keycloakify/generateSrcMainResources/bringInAccountV1.ts +0 -79
- package/src/bin/keycloakify/generateSrcMainResources/generateMessageProperties.ts +0 -179
- package/src/bin/keycloakify/generateSrcMainResources/generateSrcMainResources.ts +0 -32
- package/src/bin/keycloakify/generateSrcMainResources/generateSrcMainResourcesForMainTheme.ts +0 -261
- package/src/bin/keycloakify/generateSrcMainResources/generateSrcMainResourcesForThemeVariant.ts +0 -56
- package/src/bin/keycloakify/generateSrcMainResources/index.ts +0 -1
- package/src/bin/keycloakify/generateSrcMainResources/readFieldNameUsage.ts +0 -56
- package/src/bin/keycloakify/generateStartKeycloakTestingContainer.ts +0 -60
- package/src/bin/keycloakify/replacers/replaceImportsInInlineCssCode.ts +0 -24
- package/src/bin/shared/buildOptions.ts +0 -277
- package/src/bin/shared/downloadAndUnzip.ts +0 -203
- package/src/bin/shared/downloadBuiltinKeycloakTheme.ts +0 -264
- package/src/bin/shared/getJarFileBasename.ts +0 -9
- package/src/bin/shared/getThemeSrcDirPath.ts +0 -47
- package/src/bin/start-keycloak.ts +0 -236
- package/src/bin/tools/getNpmWorkspaceRootDirPath.ts +0 -27
- package/src/bin/tools/unzip.ts +0 -141
- package/src/lib/isStorybook.ts +0 -1
- package/src/lib/useGetClassName.ts +0 -18
- package/src/login/kcContext/createGetKcContext.ts +0 -159
- package/src/login/kcContext/getKcContext.ts +0 -21
- package/src/login/kcContext/getKcContextFromWindow.ts +0 -11
- package/src/login/kcContext/index.ts +0 -1
- package/src/login/kcContext/kcContextMocks.ts +0 -630
- package/src/login/lib/useDownloadTerms.ts +0 -57
- package/src/login/lib/useGetClassName.ts +0 -132
- package/src/tools/AndByDiscriminatingKey.ts +0 -25
- package/src/tools/Markdown.ts +0 -3
- package/src/tools/deepClone.ts +0 -17
- package/src/tools/memoize.ts +0 -55
- package/tools/AndByDiscriminatingKey.d.ts +0 -5
- package/tools/AndByDiscriminatingKey.js +0 -2
- package/tools/AndByDiscriminatingKey.js.map +0 -1
- package/tools/Markdown.d.ts +0 -2
- package/tools/Markdown.js +0 -3
- package/tools/Markdown.js.map +0 -1
- package/tools/deepClone.d.ts +0 -2
- package/tools/deepClone.js +0 -14
- package/tools/deepClone.js.map +0 -1
- package/tools/memoize.d.ts +0 -7
- package/tools/memoize.js +0 -38
- package/tools/memoize.js.map +0 -1
- /package/account/{kcContext → KcContext}/KcContext.js +0 -0
- /package/login/{kcContext → KcContext}/KcContext.js +0 -0
@@ -1,14 +1,16 @@
|
|
1
1
|
import "keycloakify/tools/Array.prototype.every";
|
2
2
|
import { useMemo, useReducer, useEffect, Fragment, type Dispatch } from "react";
|
3
|
+
import { assert, type Equals } from "tsafe/assert";
|
3
4
|
import { id } from "tsafe/id";
|
4
|
-
import
|
5
|
-
import type { Attribute, Validators } from "keycloakify/login/kcContext/KcContext";
|
5
|
+
import { structuredCloneButFunctions } from "keycloakify/tools/structuredCloneButFunctions";
|
6
6
|
import { useConstCallback } from "keycloakify/tools/useConstCallback";
|
7
7
|
import { emailRegexp } from "keycloakify/tools/emailRegExp";
|
8
|
-
import type { KcContext, PasswordPolicies } from "keycloakify/login/kcContext/KcContext";
|
9
|
-
import { assert, type Equals } from "tsafe/assert";
|
10
8
|
import { formatNumber } from "keycloakify/tools/formatNumber";
|
11
|
-
import {
|
9
|
+
import { useInsertScriptTags } from "keycloakify/tools/useInsertScriptTags";
|
10
|
+
import type { PasswordPolicies, Attribute, Validators } from "keycloakify/login/KcContext";
|
11
|
+
import type { KcContext } from "../KcContext";
|
12
|
+
import type { MessageKey } from "keycloakify/login/i18n";
|
13
|
+
import { KcContextLike as KcContextLike_i18n } from "keycloakify/login/i18n";
|
12
14
|
import type { I18n } from "../i18n";
|
13
15
|
|
14
16
|
export type FormFieldError = {
|
@@ -64,21 +66,22 @@ export type FormAction =
|
|
64
66
|
fieldIndex: number | undefined;
|
65
67
|
};
|
66
68
|
|
67
|
-
export type KcContextLike =
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
69
|
+
export type KcContextLike = KcContextLike_i18n &
|
70
|
+
KcContextLike_useGetErrors & {
|
71
|
+
profile: {
|
72
|
+
attributesByName: Record<string, Attribute>;
|
73
|
+
html5DataAnnotations?: Record<string, string>;
|
74
|
+
};
|
75
|
+
passwordRequired?: boolean;
|
76
|
+
realm: { registrationEmailAsUsername: boolean };
|
77
|
+
url: {
|
78
|
+
resourcesPath: string;
|
79
|
+
};
|
78
80
|
};
|
79
|
-
};
|
80
81
|
|
81
|
-
|
82
|
+
assert<Extract<Extract<KcContext, { profile: unknown }>, { pageId: "register.ftl" }> extends KcContextLike ? true : false>();
|
83
|
+
|
84
|
+
export type UseUserProfileFormParams = {
|
82
85
|
kcContext: KcContextLike;
|
83
86
|
i18n: I18n;
|
84
87
|
doMakeUserConfirmPassword: boolean;
|
@@ -102,17 +105,16 @@ namespace internal {
|
|
102
105
|
};
|
103
106
|
}
|
104
107
|
|
105
|
-
|
106
|
-
|
107
|
-
export function useUserProfileForm(params: ParamsOfUseUserProfileForm): ReturnTypeOfUseUserProfileForm {
|
108
|
+
export function useUserProfileForm(params: UseUserProfileFormParams): ReturnTypeOfUseUserProfileForm {
|
108
109
|
const { kcContext, i18n, doMakeUserConfirmPassword } = params;
|
109
110
|
|
110
111
|
const { insertScriptTags } = useInsertScriptTags({
|
111
|
-
"
|
112
|
+
componentOrHookName: "useUserProfileForm",
|
113
|
+
scriptTags: Object.keys(kcContext.profile?.html5DataAnnotations ?? {})
|
112
114
|
.filter(key => key !== "kcMultivalued" && key !== "kcNumberFormat") // NOTE: Keycloakify handles it.
|
113
115
|
.map(key => ({
|
114
|
-
|
115
|
-
|
116
|
+
type: "module",
|
117
|
+
src: `${kcContext.url.resourcesPath}/js/${key}.js`
|
116
118
|
}))
|
117
119
|
});
|
118
120
|
|
@@ -128,226 +130,251 @@ export function useUserProfileForm(params: ParamsOfUseUserProfileForm): ReturnTy
|
|
128
130
|
const initialState = useMemo((): internal.State => {
|
129
131
|
// NOTE: We don't use te kcContext.profile.attributes directly because
|
130
132
|
// they don't includes the password and password confirm fields and we want to add them.
|
131
|
-
//
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
}
|
142
|
-
|
143
|
-
if ("register" in kcContext && kcContext.register instanceof Object && "formData" in kcContext.register) {
|
144
|
-
//NOTE: Handle legacy register.ftl page
|
145
|
-
return (["firstName", "lastName", "email", "username"] as const)
|
146
|
-
.filter(name => (name !== "username" ? true : !kcContext.realm.registrationEmailAsUsername))
|
147
|
-
.map(name =>
|
148
|
-
id<Attribute>({
|
149
|
-
"name": name,
|
150
|
-
"displayName": id<`\${${MessageKey}}`>(`\${${name}}`),
|
151
|
-
"required": true,
|
152
|
-
"value": (kcContext.register as any).formData[name] ?? "",
|
153
|
-
"html5DataAnnotations": {},
|
154
|
-
"readOnly": false,
|
155
|
-
"validators": {},
|
156
|
-
"annotations": {},
|
157
|
-
"autocomplete": (() => {
|
158
|
-
switch (name) {
|
159
|
-
case "email":
|
160
|
-
return "email";
|
161
|
-
case "username":
|
162
|
-
return "username";
|
163
|
-
default:
|
164
|
-
return undefined;
|
165
|
-
}
|
166
|
-
})()
|
167
|
-
})
|
168
|
-
);
|
169
|
-
}
|
133
|
+
// We also want to apply some retro-compatibility and consistency patches.
|
134
|
+
const attributes: Attribute[] = (() => {
|
135
|
+
mock_user_profile_attributes_for_older_keycloak_versions: {
|
136
|
+
if (
|
137
|
+
"profile" in kcContext &&
|
138
|
+
"attributesByName" in kcContext.profile &&
|
139
|
+
Object.keys(kcContext.profile.attributesByName).length !== 0
|
140
|
+
) {
|
141
|
+
break mock_user_profile_attributes_for_older_keycloak_versions;
|
142
|
+
}
|
170
143
|
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
144
|
+
if ("register" in kcContext && kcContext.register instanceof Object && "formData" in kcContext.register) {
|
145
|
+
//NOTE: Handle legacy register.ftl page
|
146
|
+
return (["firstName", "lastName", "email", "username"] as const)
|
147
|
+
.filter(name => (name !== "username" ? true : !kcContext.realm.registrationEmailAsUsername))
|
148
|
+
.map(name =>
|
149
|
+
id<Attribute>({
|
150
|
+
name: name,
|
151
|
+
displayName: id<`\${${MessageKey}}`>(`\${${name}}`),
|
152
|
+
required: true,
|
153
|
+
value: (kcContext.register as any).formData[name] ?? "",
|
154
|
+
html5DataAnnotations: {},
|
155
|
+
readOnly: false,
|
156
|
+
validators: {},
|
157
|
+
annotations: {},
|
158
|
+
autocomplete: (() => {
|
159
|
+
switch (name) {
|
160
|
+
case "email":
|
161
|
+
return "email";
|
162
|
+
case "username":
|
163
|
+
return "username";
|
164
|
+
default:
|
165
|
+
return undefined;
|
166
|
+
}
|
167
|
+
})()
|
168
|
+
})
|
169
|
+
);
|
170
|
+
}
|
198
171
|
|
199
|
-
|
200
|
-
|
201
|
-
|
172
|
+
if ("user" in kcContext && kcContext.user instanceof Object) {
|
173
|
+
//NOTE: Handle legacy login-update-profile.ftl
|
174
|
+
return (["username", "email", "firstName", "lastName"] as const)
|
175
|
+
.filter(name => (name !== "username" ? true : (kcContext.user as any).editUsernameAllowed))
|
176
|
+
.map(name =>
|
202
177
|
id<Attribute>({
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
178
|
+
name: name,
|
179
|
+
displayName: id<`\${${MessageKey}}`>(`\${${name}}`),
|
180
|
+
required: true,
|
181
|
+
value: (kcContext as any).user[name] ?? "",
|
182
|
+
html5DataAnnotations: {},
|
183
|
+
readOnly: false,
|
184
|
+
validators: {},
|
185
|
+
annotations: {},
|
186
|
+
autocomplete: (() => {
|
187
|
+
switch (name) {
|
188
|
+
case "email":
|
189
|
+
return "email";
|
190
|
+
case "username":
|
191
|
+
return "username";
|
192
|
+
default:
|
193
|
+
return undefined;
|
194
|
+
}
|
195
|
+
})()
|
212
196
|
})
|
213
|
-
|
214
|
-
|
197
|
+
);
|
198
|
+
}
|
215
199
|
|
216
|
-
|
200
|
+
if ("email" in kcContext && kcContext.email instanceof Object) {
|
201
|
+
//NOTE: Handle legacy update-email.ftl
|
202
|
+
return [
|
203
|
+
id<Attribute>({
|
204
|
+
name: "email",
|
205
|
+
displayName: id<`\${${MessageKey}}`>(`\${email}`),
|
206
|
+
required: true,
|
207
|
+
value: (kcContext.email as any).value ?? "",
|
208
|
+
html5DataAnnotations: {},
|
209
|
+
readOnly: false,
|
210
|
+
validators: {},
|
211
|
+
annotations: {},
|
212
|
+
autocomplete: "email"
|
213
|
+
})
|
214
|
+
];
|
217
215
|
}
|
218
216
|
|
219
|
-
|
220
|
-
|
221
|
-
const { group, groupDisplayHeader, groupDisplayDescription, groupAnnotations, ...rest } =
|
222
|
-
attribute_pre_group_patch as Attribute & {
|
223
|
-
group: string;
|
224
|
-
groupDisplayHeader?: string;
|
225
|
-
groupDisplayDescription?: string;
|
226
|
-
groupAnnotations: Record<string, string>;
|
227
|
-
};
|
228
|
-
|
229
|
-
return id<Attribute>({
|
230
|
-
...rest,
|
231
|
-
"group": {
|
232
|
-
"name": group,
|
233
|
-
"displayHeader": groupDisplayHeader,
|
234
|
-
"displayDescription": groupDisplayDescription,
|
235
|
-
"html5DataAnnotations": {}
|
236
|
-
}
|
237
|
-
});
|
238
|
-
}
|
217
|
+
assert(false, "Unable to mock user profile from the current kcContext");
|
218
|
+
}
|
239
219
|
|
240
|
-
|
241
|
-
|
242
|
-
})();
|
220
|
+
return Object.values(kcContext.profile.attributesByName).map(structuredCloneButFunctions);
|
221
|
+
})();
|
243
222
|
|
244
|
-
|
245
|
-
|
223
|
+
// Retro-compatibility and consistency patches
|
224
|
+
attributes.forEach(attribute => {
|
225
|
+
patch_legacy_group: {
|
226
|
+
if (typeof attribute.group !== "string") {
|
227
|
+
break patch_legacy_group;
|
228
|
+
}
|
246
229
|
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
230
|
+
const { group, groupDisplayHeader, groupDisplayDescription /*, groupAnnotations*/ } = attribute as Attribute & {
|
231
|
+
group: string;
|
232
|
+
groupDisplayHeader?: string;
|
233
|
+
groupDisplayDescription?: string;
|
234
|
+
groupAnnotations: Record<string, string>;
|
235
|
+
};
|
251
236
|
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
237
|
+
delete attribute.group;
|
238
|
+
// @ts-expect-error
|
239
|
+
delete attribute.groupDisplayHeader;
|
240
|
+
// @ts-expect-error
|
241
|
+
delete attribute.groupDisplayDescription;
|
242
|
+
// @ts-expect-error
|
243
|
+
delete attribute.groupAnnotations;
|
257
244
|
|
258
|
-
|
259
|
-
|
260
|
-
"name": "password",
|
261
|
-
"displayName": id<`\${${MessageKey}}`>("${password}"),
|
262
|
-
"required": true,
|
263
|
-
"readOnly": false,
|
264
|
-
"validators": {},
|
265
|
-
"annotations": {},
|
266
|
-
"autocomplete": "new-password",
|
267
|
-
"html5DataAnnotations": {},
|
268
|
-
// NOTE: Compat with Keycloak version prior to 24
|
269
|
-
...({ "groupAnnotations": {} } as {})
|
270
|
-
},
|
271
|
-
{
|
272
|
-
"name": "password-confirm",
|
273
|
-
"displayName": id<`\${${MessageKey}}`>("${passwordConfirm}"),
|
274
|
-
"required": true,
|
275
|
-
"readOnly": false,
|
276
|
-
"validators": {},
|
277
|
-
"annotations": {},
|
278
|
-
"html5DataAnnotations": {},
|
279
|
-
"autocomplete": "new-password",
|
280
|
-
// NOTE: Compat with Keycloak version prior to 24
|
281
|
-
...({ "groupAnnotations": {} } as {})
|
282
|
-
}
|
283
|
-
);
|
245
|
+
if (group === "") {
|
246
|
+
break patch_legacy_group;
|
284
247
|
}
|
248
|
+
|
249
|
+
attribute.group = {
|
250
|
+
name: group,
|
251
|
+
displayHeader: groupDisplayHeader,
|
252
|
+
displayDescription: groupDisplayDescription,
|
253
|
+
html5DataAnnotations: {}
|
254
|
+
};
|
285
255
|
}
|
286
256
|
|
287
|
-
|
288
|
-
|
257
|
+
// Attributes with options rendered by default as select inputs
|
258
|
+
if (attribute.validators.options !== undefined && attribute.annotations.inputType === undefined) {
|
259
|
+
attribute.annotations.inputType = "select";
|
260
|
+
}
|
289
261
|
|
290
|
-
|
291
|
-
|
262
|
+
// Consistency patch on values/value property
|
263
|
+
{
|
264
|
+
if (getIsMultivaluedSingleField({ attribute })) {
|
265
|
+
attribute.multivalued = true;
|
266
|
+
}
|
292
267
|
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
268
|
+
if (attribute.multivalued) {
|
269
|
+
attribute.values ??= attribute.value !== undefined ? [attribute.value] : [];
|
270
|
+
delete attribute.value;
|
271
|
+
} else {
|
272
|
+
attribute.value ??= attribute.values?.[0];
|
273
|
+
delete attribute.values;
|
274
|
+
}
|
275
|
+
}
|
276
|
+
});
|
277
|
+
|
278
|
+
add_password_and_password_confirm: {
|
279
|
+
if (!kcContext.passwordRequired) {
|
280
|
+
break add_password_and_password_confirm;
|
281
|
+
}
|
282
|
+
|
283
|
+
attributes.forEach((attribute, i) => {
|
284
|
+
if (attribute.name !== (kcContext.realm.registrationEmailAsUsername ? "email" : "username")) {
|
285
|
+
// NOTE: We want to add password and password-confirm after the field that identifies the user.
|
286
|
+
// It's either email or username.
|
287
|
+
return;
|
288
|
+
}
|
289
|
+
|
290
|
+
attributes.splice(
|
291
|
+
i + 1,
|
292
|
+
0,
|
293
|
+
{
|
294
|
+
name: "password",
|
295
|
+
displayName: id<`\${${MessageKey}}`>("${password}"),
|
296
|
+
required: true,
|
297
|
+
readOnly: false,
|
298
|
+
validators: {},
|
299
|
+
annotations: {},
|
300
|
+
autocomplete: "new-password",
|
301
|
+
html5DataAnnotations: {}
|
302
|
+
},
|
303
|
+
{
|
304
|
+
name: "password-confirm",
|
305
|
+
displayName: id<`\${${MessageKey}}`>("${passwordConfirm}"),
|
306
|
+
required: true,
|
307
|
+
readOnly: false,
|
308
|
+
validators: {},
|
309
|
+
annotations: {},
|
310
|
+
html5DataAnnotations: {},
|
311
|
+
autocomplete: "new-password"
|
297
312
|
}
|
313
|
+
);
|
314
|
+
});
|
315
|
+
}
|
298
316
|
|
299
|
-
|
317
|
+
const initialFormFieldState: {
|
318
|
+
attribute: Attribute;
|
319
|
+
valueOrValues: string | string[];
|
320
|
+
}[] = [];
|
300
321
|
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
322
|
+
for (const attribute of attributes) {
|
323
|
+
handle_multi_valued_attribute: {
|
324
|
+
if (!attribute.multivalued) {
|
325
|
+
break handle_multi_valued_attribute;
|
326
|
+
}
|
305
327
|
|
306
|
-
|
328
|
+
const values = attribute.values?.length ? attribute.values : [""];
|
307
329
|
|
308
|
-
|
309
|
-
|
310
|
-
|
330
|
+
apply_validator_min_range: {
|
331
|
+
if (getIsMultivaluedSingleField({ attribute })) {
|
332
|
+
break apply_validator_min_range;
|
333
|
+
}
|
311
334
|
|
312
|
-
|
335
|
+
const validator = attribute.validators.multivalued;
|
313
336
|
|
314
|
-
|
315
|
-
|
316
|
-
|
337
|
+
if (validator === undefined) {
|
338
|
+
break apply_validator_min_range;
|
339
|
+
}
|
317
340
|
|
318
|
-
|
341
|
+
const { min: minStr } = validator;
|
319
342
|
|
320
|
-
|
321
|
-
|
322
|
-
}
|
343
|
+
if (!minStr) {
|
344
|
+
break apply_validator_min_range;
|
323
345
|
}
|
324
346
|
|
325
|
-
|
326
|
-
attribute,
|
327
|
-
"valueOrValues": values
|
328
|
-
});
|
347
|
+
const min = parseInt(`${minStr}`);
|
329
348
|
|
330
|
-
|
349
|
+
for (let index = values.length; index < min; index++) {
|
350
|
+
values.push("");
|
351
|
+
}
|
331
352
|
}
|
332
353
|
|
333
|
-
|
354
|
+
initialFormFieldState.push({
|
334
355
|
attribute,
|
335
|
-
|
356
|
+
valueOrValues: values
|
336
357
|
});
|
358
|
+
|
359
|
+
continue;
|
337
360
|
}
|
338
361
|
|
339
|
-
|
340
|
-
|
362
|
+
initialFormFieldState.push({
|
363
|
+
attribute,
|
364
|
+
valueOrValues: attribute.value ?? ""
|
365
|
+
});
|
366
|
+
}
|
341
367
|
|
342
368
|
const initialState: internal.State = {
|
343
|
-
|
369
|
+
formFieldStates: initialFormFieldState.map(({ attribute, valueOrValues }) => ({
|
344
370
|
attribute,
|
345
|
-
|
346
|
-
|
347
|
-
|
371
|
+
errors: getErrors({
|
372
|
+
attributeName: attribute.name,
|
373
|
+
formFieldStates: initialFormFieldState
|
348
374
|
}),
|
349
|
-
|
350
|
-
|
375
|
+
hasLostFocusAtLeastOnce:
|
376
|
+
valueOrValues instanceof Array && !getIsMultivaluedSingleField({ attribute }) ? valueOrValues.map(() => false) : false,
|
377
|
+
valueOrValues: valueOrValues
|
351
378
|
}))
|
352
379
|
};
|
353
380
|
|
@@ -369,7 +396,7 @@ export function useUserProfileForm(params: ParamsOfUseUserProfileForm): ReturnTy
|
|
369
396
|
|
370
397
|
const { kcNumberFormat } = attribute.html5DataAnnotations ?? {};
|
371
398
|
|
372
|
-
if (kcNumberFormat
|
399
|
+
if (!kcNumberFormat) {
|
373
400
|
break apply_formatters;
|
374
401
|
}
|
375
402
|
|
@@ -381,8 +408,8 @@ export function useUserProfileForm(params: ParamsOfUseUserProfileForm): ReturnTy
|
|
381
408
|
}
|
382
409
|
|
383
410
|
formFieldState.errors = getErrors({
|
384
|
-
|
385
|
-
|
411
|
+
attributeName: formAction.name,
|
412
|
+
formFieldStates: state.formFieldStates
|
386
413
|
});
|
387
414
|
|
388
415
|
update_password_confirm: {
|
@@ -395,9 +422,9 @@ export function useUserProfileForm(params: ParamsOfUseUserProfileForm): ReturnTy
|
|
395
422
|
}
|
396
423
|
|
397
424
|
state = reducer(state, {
|
398
|
-
|
399
|
-
|
400
|
-
|
425
|
+
action: "update",
|
426
|
+
name: "password-confirm",
|
427
|
+
valueOrValues: formAction.valueOrValues
|
401
428
|
});
|
402
429
|
}
|
403
430
|
|
@@ -421,15 +448,15 @@ export function useUserProfileForm(params: ParamsOfUseUserProfileForm): ReturnTy
|
|
421
448
|
|
422
449
|
const formState: FormState = useMemo(
|
423
450
|
() => ({
|
424
|
-
|
451
|
+
formFieldStates: state.formFieldStates.map(
|
425
452
|
({ errors, hasLostFocusAtLeastOnce: hasLostFocusAtLeastOnceOrArr, attribute, ...valueOrValuesWrap }) => ({
|
426
|
-
|
453
|
+
displayableErrors: errors.filter(error => {
|
427
454
|
const hasLostFocusAtLeastOnce =
|
428
455
|
typeof hasLostFocusAtLeastOnceOrArr === "boolean"
|
429
456
|
? hasLostFocusAtLeastOnceOrArr
|
430
457
|
: error.fieldIndex !== undefined
|
431
|
-
|
432
|
-
|
458
|
+
? hasLostFocusAtLeastOnceOrArr[error.fieldIndex]
|
459
|
+
: hasLostFocusAtLeastOnceOrArr[hasLostFocusAtLeastOnceOrArr.length - 1];
|
433
460
|
|
434
461
|
switch (error.source.type) {
|
435
462
|
case "server":
|
@@ -482,7 +509,7 @@ export function useUserProfileForm(params: ParamsOfUseUserProfileForm): ReturnTy
|
|
482
509
|
...valueOrValuesWrap
|
483
510
|
})
|
484
511
|
),
|
485
|
-
|
512
|
+
isFormSubmittable: state.formFieldStates.every(({ errors }) => errors.length === 0)
|
486
513
|
}),
|
487
514
|
[state]
|
488
515
|
);
|
@@ -493,7 +520,14 @@ export function useUserProfileForm(params: ParamsOfUseUserProfileForm): ReturnTy
|
|
493
520
|
};
|
494
521
|
}
|
495
522
|
|
496
|
-
|
523
|
+
type KcContextLike_useGetErrors = KcContextLike_i18n & {
|
524
|
+
messagesPerField: Pick<KcContext["messagesPerField"], "existsError" | "get">;
|
525
|
+
passwordPolicies?: PasswordPolicies;
|
526
|
+
};
|
527
|
+
|
528
|
+
assert<KcContextLike extends KcContextLike_useGetErrors ? true : false>();
|
529
|
+
|
530
|
+
function useGetErrors(params: { kcContext: KcContextLike_useGetErrors; i18n: I18n }) {
|
497
531
|
const { kcContext, i18n } = params;
|
498
532
|
|
499
533
|
const { messagesPerField, passwordPolicies } = kcContext;
|
@@ -501,7 +535,13 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
501
535
|
const { msg, msgStr, advancedMsg, advancedMsgStr } = i18n;
|
502
536
|
|
503
537
|
const getErrors = useConstCallback(
|
504
|
-
(params: {
|
538
|
+
(params: {
|
539
|
+
attributeName: string;
|
540
|
+
formFieldStates: {
|
541
|
+
attribute: Attribute;
|
542
|
+
valueOrValues: string | string[];
|
543
|
+
}[];
|
544
|
+
}): FormFieldError[] => {
|
505
545
|
const { attributeName, formFieldStates } = params;
|
506
546
|
|
507
547
|
const formFieldState = formFieldStates.find(({ attribute }) => attribute.name === attributeName);
|
@@ -516,7 +556,7 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
516
556
|
unFormat_number: {
|
517
557
|
const { kcNumberUnFormat } = attribute.html5DataAnnotations ?? {};
|
518
558
|
|
519
|
-
if (kcNumberUnFormat
|
559
|
+
if (!kcNumberUnFormat) {
|
520
560
|
break unFormat_number;
|
521
561
|
}
|
522
562
|
|
@@ -534,7 +574,7 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
534
574
|
|
535
575
|
server_side_error: {
|
536
576
|
if (attribute.multivalued) {
|
537
|
-
const defaultValues = attribute.values
|
577
|
+
const defaultValues = attribute.values?.length ? attribute.values : [""];
|
538
578
|
|
539
579
|
assert(valueOrValues instanceof Array);
|
540
580
|
|
@@ -572,10 +612,17 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
572
612
|
return [
|
573
613
|
{
|
574
614
|
errorMessageStr,
|
575
|
-
|
576
|
-
|
577
|
-
|
578
|
-
|
615
|
+
errorMessage: (
|
616
|
+
<span
|
617
|
+
key={0}
|
618
|
+
dangerouslySetInnerHTML={{
|
619
|
+
__html: errorMessageStr
|
620
|
+
}}
|
621
|
+
/>
|
622
|
+
),
|
623
|
+
fieldIndex: undefined,
|
624
|
+
source: {
|
625
|
+
type: "server"
|
579
626
|
}
|
580
627
|
}
|
581
628
|
];
|
@@ -586,7 +633,7 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
586
633
|
break handle_multi_valued_multi_fields;
|
587
634
|
}
|
588
635
|
|
589
|
-
if (attribute
|
636
|
+
if (getIsMultivaluedSingleField({ attribute })) {
|
590
637
|
break handle_multi_valued_multi_fields;
|
591
638
|
}
|
592
639
|
|
@@ -598,19 +645,19 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
598
645
|
.map((...[, index]) => {
|
599
646
|
const specificValueErrors = getErrors({
|
600
647
|
attributeName,
|
601
|
-
|
648
|
+
formFieldStates: formFieldStates.map(formFieldState => {
|
602
649
|
if (formFieldState.attribute.name === attributeName) {
|
603
650
|
assert(formFieldState.valueOrValues instanceof Array);
|
604
651
|
return {
|
605
|
-
|
652
|
+
attribute: {
|
606
653
|
...attribute,
|
607
|
-
|
654
|
+
annotations: {
|
608
655
|
...attribute.annotations,
|
609
|
-
|
656
|
+
inputType: undefined
|
610
657
|
},
|
611
|
-
|
658
|
+
multivalued: false
|
612
659
|
},
|
613
|
-
|
660
|
+
valueOrValues: formFieldState.valueOrValues[index]
|
614
661
|
};
|
615
662
|
}
|
616
663
|
|
@@ -626,7 +673,12 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
626
673
|
|
627
674
|
return true;
|
628
675
|
})
|
629
|
-
.map(
|
676
|
+
.map(
|
677
|
+
(error): FormFieldError => ({
|
678
|
+
...error,
|
679
|
+
fieldIndex: index
|
680
|
+
})
|
681
|
+
);
|
630
682
|
})
|
631
683
|
.reduce((acc, errors) => [...acc, ...errors], []);
|
632
684
|
|
@@ -642,12 +694,12 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
642
694
|
const msgArgs = ["error-user-attribute-required"] as const;
|
643
695
|
|
644
696
|
errors.push({
|
645
|
-
|
646
|
-
|
647
|
-
|
648
|
-
|
649
|
-
|
650
|
-
|
697
|
+
errorMessage: <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
|
698
|
+
errorMessageStr: msgStr(...msgArgs),
|
699
|
+
fieldIndex: undefined,
|
700
|
+
source: {
|
701
|
+
type: "other",
|
702
|
+
rule: "requiredField"
|
651
703
|
}
|
652
704
|
});
|
653
705
|
}
|
@@ -660,7 +712,7 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
660
712
|
break handle_multi_valued_single_field;
|
661
713
|
}
|
662
714
|
|
663
|
-
if (!attribute
|
715
|
+
if (!getIsMultivaluedSingleField({ attribute })) {
|
664
716
|
break handle_multi_valued_single_field;
|
665
717
|
}
|
666
718
|
|
@@ -674,13 +726,13 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
674
726
|
|
675
727
|
const { min: minStr } = validator;
|
676
728
|
|
677
|
-
const min = minStr
|
729
|
+
const min = minStr ? parseInt(`${minStr}`) : attribute.required ? 1 : 0;
|
678
730
|
|
679
731
|
assert(!isNaN(min));
|
680
732
|
|
681
733
|
const { max: maxStr } = validator;
|
682
734
|
|
683
|
-
const max = maxStr
|
735
|
+
const max = !maxStr ? Infinity : parseInt(`${maxStr}`);
|
684
736
|
|
685
737
|
assert(!isNaN(max));
|
686
738
|
|
@@ -696,12 +748,12 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
696
748
|
|
697
749
|
return [
|
698
750
|
{
|
699
|
-
|
700
|
-
|
701
|
-
|
702
|
-
|
703
|
-
|
704
|
-
|
751
|
+
errorMessage: <Fragment key={0}>{msg(...msgArgs)}</Fragment>,
|
752
|
+
errorMessageStr: msgStr(...msgArgs),
|
753
|
+
fieldIndex: undefined,
|
754
|
+
source: {
|
755
|
+
type: "validator",
|
756
|
+
name: validatorName
|
705
757
|
}
|
706
758
|
}
|
707
759
|
];
|
@@ -727,7 +779,7 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
727
779
|
|
728
780
|
const policy = passwordPolicies[policyName];
|
729
781
|
|
730
|
-
if (policy
|
782
|
+
if (!policy) {
|
731
783
|
break check_password_policy_x;
|
732
784
|
}
|
733
785
|
|
@@ -740,12 +792,12 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
740
792
|
const msgArgs = ["invalidPasswordMinLengthMessage", `${minLength}`] as const;
|
741
793
|
|
742
794
|
errors.push({
|
743
|
-
|
744
|
-
|
745
|
-
|
746
|
-
|
747
|
-
|
748
|
-
|
795
|
+
errorMessage: <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
|
796
|
+
errorMessageStr: msgStr(...msgArgs),
|
797
|
+
fieldIndex: undefined,
|
798
|
+
source: {
|
799
|
+
type: "passwordPolicy",
|
800
|
+
name: policyName
|
749
801
|
}
|
750
802
|
});
|
751
803
|
}
|
@@ -755,7 +807,7 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
755
807
|
|
756
808
|
const policy = passwordPolicies[policyName];
|
757
809
|
|
758
|
-
if (policy
|
810
|
+
if (!policy) {
|
759
811
|
break check_password_policy_x;
|
760
812
|
}
|
761
813
|
|
@@ -768,12 +820,12 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
768
820
|
const msgArgs = ["invalidPasswordMinDigitsMessage", `${minNumberOfDigits}`] as const;
|
769
821
|
|
770
822
|
errors.push({
|
771
|
-
|
772
|
-
|
773
|
-
|
774
|
-
|
775
|
-
|
776
|
-
|
823
|
+
errorMessage: <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
|
824
|
+
errorMessageStr: msgStr(...msgArgs),
|
825
|
+
fieldIndex: undefined,
|
826
|
+
source: {
|
827
|
+
type: "passwordPolicy",
|
828
|
+
name: policyName
|
777
829
|
}
|
778
830
|
});
|
779
831
|
}
|
@@ -783,7 +835,7 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
783
835
|
|
784
836
|
const policy = passwordPolicies[policyName];
|
785
837
|
|
786
|
-
if (policy
|
838
|
+
if (!policy) {
|
787
839
|
break check_password_policy_x;
|
788
840
|
}
|
789
841
|
|
@@ -798,12 +850,12 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
798
850
|
const msgArgs = ["invalidPasswordMinLowerCaseCharsMessage", `${minNumberOfLowerCaseChar}`] as const;
|
799
851
|
|
800
852
|
errors.push({
|
801
|
-
|
802
|
-
|
803
|
-
|
804
|
-
|
805
|
-
|
806
|
-
|
853
|
+
errorMessage: <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
|
854
|
+
errorMessageStr: msgStr(...msgArgs),
|
855
|
+
fieldIndex: undefined,
|
856
|
+
source: {
|
857
|
+
type: "passwordPolicy",
|
858
|
+
name: policyName
|
807
859
|
}
|
808
860
|
});
|
809
861
|
}
|
@@ -813,7 +865,7 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
813
865
|
|
814
866
|
const policy = passwordPolicies[policyName];
|
815
867
|
|
816
|
-
if (policy
|
868
|
+
if (!policy) {
|
817
869
|
break check_password_policy_x;
|
818
870
|
}
|
819
871
|
|
@@ -828,12 +880,12 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
828
880
|
const msgArgs = ["invalidPasswordMinUpperCaseCharsMessage", `${minNumberOfUpperCaseChar}`] as const;
|
829
881
|
|
830
882
|
errors.push({
|
831
|
-
|
832
|
-
|
833
|
-
|
834
|
-
|
835
|
-
|
836
|
-
|
883
|
+
errorMessage: <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
|
884
|
+
errorMessageStr: msgStr(...msgArgs),
|
885
|
+
fieldIndex: undefined,
|
886
|
+
source: {
|
887
|
+
type: "passwordPolicy",
|
888
|
+
name: policyName
|
837
889
|
}
|
838
890
|
});
|
839
891
|
}
|
@@ -843,7 +895,7 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
843
895
|
|
844
896
|
const policy = passwordPolicies[policyName];
|
845
897
|
|
846
|
-
if (policy
|
898
|
+
if (!policy) {
|
847
899
|
break check_password_policy_x;
|
848
900
|
}
|
849
901
|
|
@@ -856,12 +908,12 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
856
908
|
const msgArgs = ["invalidPasswordMinSpecialCharsMessage", `${minNumberOfSpecialChar}`] as const;
|
857
909
|
|
858
910
|
errors.push({
|
859
|
-
|
860
|
-
|
861
|
-
|
862
|
-
|
863
|
-
|
864
|
-
|
911
|
+
errorMessage: <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
|
912
|
+
errorMessageStr: msgStr(...msgArgs),
|
913
|
+
fieldIndex: undefined,
|
914
|
+
source: {
|
915
|
+
type: "passwordPolicy",
|
916
|
+
name: policyName
|
865
917
|
}
|
866
918
|
});
|
867
919
|
}
|
@@ -877,7 +929,7 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
877
929
|
|
878
930
|
const usernameFormFieldState = formFieldStates.find(formFieldState => formFieldState.attribute.name === "username");
|
879
931
|
|
880
|
-
if (usernameFormFieldState
|
932
|
+
if (!usernameFormFieldState) {
|
881
933
|
break check_password_policy_x;
|
882
934
|
}
|
883
935
|
|
@@ -889,7 +941,7 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
889
941
|
unFormat_number: {
|
890
942
|
const { kcNumberUnFormat } = attribute.html5DataAnnotations ?? {};
|
891
943
|
|
892
|
-
if (kcNumberUnFormat
|
944
|
+
if (!kcNumberUnFormat) {
|
893
945
|
break unFormat_number;
|
894
946
|
}
|
895
947
|
|
@@ -899,6 +951,10 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
899
951
|
return valueOrValues;
|
900
952
|
})();
|
901
953
|
|
954
|
+
if (usernameValue === "") {
|
955
|
+
break check_password_policy_x;
|
956
|
+
}
|
957
|
+
|
902
958
|
if (value !== usernameValue) {
|
903
959
|
break check_password_policy_x;
|
904
960
|
}
|
@@ -906,12 +962,12 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
906
962
|
const msgArgs = ["invalidPasswordNotUsernameMessage"] as const;
|
907
963
|
|
908
964
|
errors.push({
|
909
|
-
|
910
|
-
|
911
|
-
|
912
|
-
|
913
|
-
|
914
|
-
|
965
|
+
errorMessage: <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
|
966
|
+
errorMessageStr: msgStr(...msgArgs),
|
967
|
+
fieldIndex: undefined,
|
968
|
+
source: {
|
969
|
+
type: "passwordPolicy",
|
970
|
+
name: policyName
|
915
971
|
}
|
916
972
|
});
|
917
973
|
}
|
@@ -927,7 +983,7 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
927
983
|
|
928
984
|
const emailFormFieldState = formFieldStates.find(formFieldState => formFieldState.attribute.name === "email");
|
929
985
|
|
930
|
-
if (emailFormFieldState
|
986
|
+
if (!emailFormFieldState) {
|
931
987
|
break check_password_policy_x;
|
932
988
|
}
|
933
989
|
|
@@ -936,6 +992,10 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
936
992
|
{
|
937
993
|
const emailValue = emailFormFieldState.valueOrValues;
|
938
994
|
|
995
|
+
if (emailValue === "") {
|
996
|
+
break check_password_policy_x;
|
997
|
+
}
|
998
|
+
|
939
999
|
if (value !== emailValue) {
|
940
1000
|
break check_password_policy_x;
|
941
1001
|
}
|
@@ -944,12 +1004,12 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
944
1004
|
const msgArgs = ["invalidPasswordNotEmailMessage"] as const;
|
945
1005
|
|
946
1006
|
errors.push({
|
947
|
-
|
948
|
-
|
949
|
-
|
950
|
-
|
951
|
-
|
952
|
-
|
1007
|
+
errorMessage: <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
|
1008
|
+
errorMessageStr: msgStr(...msgArgs),
|
1009
|
+
fieldIndex: undefined,
|
1010
|
+
source: {
|
1011
|
+
type: "passwordPolicy",
|
1012
|
+
name: policyName
|
953
1013
|
}
|
954
1014
|
});
|
955
1015
|
}
|
@@ -977,12 +1037,12 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
977
1037
|
const msgArgs = ["invalidPasswordConfirmMessage"] as const;
|
978
1038
|
|
979
1039
|
errors.push({
|
980
|
-
|
981
|
-
|
982
|
-
|
983
|
-
|
984
|
-
|
985
|
-
|
1040
|
+
errorMessage: <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
|
1041
|
+
errorMessageStr: msgStr(...msgArgs),
|
1042
|
+
fieldIndex: undefined,
|
1043
|
+
source: {
|
1044
|
+
type: "other",
|
1045
|
+
rule: "passwordConfirmMatchesPassword"
|
986
1046
|
}
|
987
1047
|
});
|
988
1048
|
}
|
@@ -1001,12 +1061,12 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
1001
1061
|
const msgArgs = ["error-user-attribute-required"] as const;
|
1002
1062
|
|
1003
1063
|
errors.push({
|
1004
|
-
|
1005
|
-
|
1006
|
-
|
1007
|
-
|
1008
|
-
|
1009
|
-
|
1064
|
+
errorMessage: <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
|
1065
|
+
errorMessageStr: msgStr(...msgArgs),
|
1066
|
+
fieldIndex: undefined,
|
1067
|
+
source: {
|
1068
|
+
type: "other",
|
1069
|
+
rule: "requiredField"
|
1010
1070
|
}
|
1011
1071
|
});
|
1012
1072
|
}
|
@@ -1016,7 +1076,7 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
1016
1076
|
|
1017
1077
|
const validator = validators[validatorName];
|
1018
1078
|
|
1019
|
-
if (validator
|
1079
|
+
if (!validator) {
|
1020
1080
|
break validator_x;
|
1021
1081
|
}
|
1022
1082
|
|
@@ -1027,28 +1087,28 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
1027
1087
|
}
|
1028
1088
|
|
1029
1089
|
const source: FormFieldError.Source = {
|
1030
|
-
|
1031
|
-
|
1090
|
+
type: "validator",
|
1091
|
+
name: validatorName
|
1032
1092
|
};
|
1033
1093
|
|
1034
|
-
if (max
|
1094
|
+
if (max && value.length > parseInt(`${max}`)) {
|
1035
1095
|
const msgArgs = ["error-invalid-length-too-long", `${max}`] as const;
|
1036
1096
|
|
1037
1097
|
errors.push({
|
1038
|
-
|
1039
|
-
|
1040
|
-
|
1098
|
+
errorMessage: <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
|
1099
|
+
errorMessageStr: msgStr(...msgArgs),
|
1100
|
+
fieldIndex: undefined,
|
1041
1101
|
source
|
1042
1102
|
});
|
1043
1103
|
}
|
1044
1104
|
|
1045
|
-
if (min
|
1105
|
+
if (min && value.length < parseInt(`${min}`)) {
|
1046
1106
|
const msgArgs = ["error-invalid-length-too-short", `${min}`] as const;
|
1047
1107
|
|
1048
1108
|
errors.push({
|
1049
|
-
|
1050
|
-
|
1051
|
-
|
1109
|
+
errorMessage: <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
|
1110
|
+
errorMessageStr: msgStr(...msgArgs),
|
1111
|
+
fieldIndex: undefined,
|
1052
1112
|
source
|
1053
1113
|
});
|
1054
1114
|
}
|
@@ -1076,12 +1136,12 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
1076
1136
|
const msgArgs = [errorMessageKey ?? id<MessageKey>("shouldMatchPattern"), pattern] as const;
|
1077
1137
|
|
1078
1138
|
errors.push({
|
1079
|
-
|
1080
|
-
|
1081
|
-
|
1082
|
-
|
1083
|
-
|
1084
|
-
|
1139
|
+
errorMessage: <Fragment key={`${attributeName}-${errors.length}`}>{advancedMsg(...msgArgs)}</Fragment>,
|
1140
|
+
errorMessageStr: advancedMsgStr(...msgArgs),
|
1141
|
+
fieldIndex: undefined,
|
1142
|
+
source: {
|
1143
|
+
type: "validator",
|
1144
|
+
name: validatorName
|
1085
1145
|
}
|
1086
1146
|
});
|
1087
1147
|
}
|
@@ -1115,12 +1175,12 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
1115
1175
|
const msgArgs = [id<MessageKey>("invalidEmailMessage")] as const;
|
1116
1176
|
|
1117
1177
|
errors.push({
|
1118
|
-
|
1119
|
-
|
1120
|
-
|
1121
|
-
|
1122
|
-
|
1123
|
-
|
1178
|
+
errorMessage: <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
|
1179
|
+
errorMessageStr: msgStr(...msgArgs),
|
1180
|
+
fieldIndex: undefined,
|
1181
|
+
source: {
|
1182
|
+
type: "validator",
|
1183
|
+
name: validatorName
|
1124
1184
|
}
|
1125
1185
|
});
|
1126
1186
|
}
|
@@ -1143,43 +1203,43 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
1143
1203
|
const intValue = parseInt(value);
|
1144
1204
|
|
1145
1205
|
const source: FormFieldError.Source = {
|
1146
|
-
|
1147
|
-
|
1206
|
+
type: "validator",
|
1207
|
+
name: validatorName
|
1148
1208
|
};
|
1149
1209
|
|
1150
1210
|
if (isNaN(intValue)) {
|
1151
1211
|
const msgArgs = ["mustBeAnInteger"] as const;
|
1152
1212
|
|
1153
1213
|
errors.push({
|
1154
|
-
|
1155
|
-
|
1156
|
-
|
1214
|
+
errorMessage: <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
|
1215
|
+
errorMessageStr: msgStr(...msgArgs),
|
1216
|
+
fieldIndex: undefined,
|
1157
1217
|
source
|
1158
1218
|
});
|
1159
1219
|
|
1160
1220
|
break validator_x;
|
1161
1221
|
}
|
1162
1222
|
|
1163
|
-
if (max
|
1223
|
+
if (max && intValue > parseInt(`${max}`)) {
|
1164
1224
|
const msgArgs = ["error-number-out-of-range-too-big", `${max}`] as const;
|
1165
1225
|
|
1166
1226
|
errors.push({
|
1167
|
-
|
1168
|
-
|
1169
|
-
|
1227
|
+
errorMessage: <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
|
1228
|
+
errorMessageStr: msgStr(...msgArgs),
|
1229
|
+
fieldIndex: undefined,
|
1170
1230
|
source
|
1171
1231
|
});
|
1172
1232
|
|
1173
1233
|
break validator_x;
|
1174
1234
|
}
|
1175
1235
|
|
1176
|
-
if (min
|
1236
|
+
if (min && intValue < parseInt(`${min}`)) {
|
1177
1237
|
const msgArgs = ["error-number-out-of-range-too-small", `${min}`] as const;
|
1178
1238
|
|
1179
1239
|
errors.push({
|
1180
|
-
|
1181
|
-
|
1182
|
-
|
1240
|
+
errorMessage: <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
|
1241
|
+
errorMessageStr: msgStr(...msgArgs),
|
1242
|
+
fieldIndex: undefined,
|
1183
1243
|
source
|
1184
1244
|
});
|
1185
1245
|
|
@@ -1207,12 +1267,12 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
1207
1267
|
const msgArgs = [id<MessageKey>("notAValidOption")] as const;
|
1208
1268
|
|
1209
1269
|
errors.push({
|
1210
|
-
|
1211
|
-
|
1212
|
-
|
1213
|
-
|
1214
|
-
|
1215
|
-
|
1270
|
+
errorMessage: <Fragment key={`${attributeName}-${errors.length}`}>{advancedMsg(...msgArgs)}</Fragment>,
|
1271
|
+
errorMessageStr: advancedMsgStr(...msgArgs),
|
1272
|
+
fieldIndex: undefined,
|
1273
|
+
source: {
|
1274
|
+
type: "validator",
|
1275
|
+
name: validatorName
|
1216
1276
|
}
|
1217
1277
|
});
|
1218
1278
|
}
|
@@ -1225,3 +1285,79 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
|
|
1225
1285
|
|
1226
1286
|
return { getErrors };
|
1227
1287
|
}
|
1288
|
+
|
1289
|
+
function getIsMultivaluedSingleField(params: { attribute: Attribute }) {
|
1290
|
+
const { attribute } = params;
|
1291
|
+
|
1292
|
+
return attribute.annotations.inputType?.startsWith("multiselect") ?? false;
|
1293
|
+
}
|
1294
|
+
|
1295
|
+
export function getButtonToDisplayForMultivaluedAttributeField(params: { attribute: Attribute; values: string[]; fieldIndex: number }) {
|
1296
|
+
const { attribute, values, fieldIndex } = params;
|
1297
|
+
|
1298
|
+
const hasRemove = (() => {
|
1299
|
+
if (values.length === 1) {
|
1300
|
+
return false;
|
1301
|
+
}
|
1302
|
+
|
1303
|
+
const minCount = (() => {
|
1304
|
+
const { multivalued } = attribute.validators;
|
1305
|
+
|
1306
|
+
if (multivalued === undefined) {
|
1307
|
+
return undefined;
|
1308
|
+
}
|
1309
|
+
|
1310
|
+
const minStr = multivalued.min;
|
1311
|
+
|
1312
|
+
if (minStr === undefined) {
|
1313
|
+
return undefined;
|
1314
|
+
}
|
1315
|
+
|
1316
|
+
return parseInt(`${minStr}`);
|
1317
|
+
})();
|
1318
|
+
|
1319
|
+
if (minCount === undefined) {
|
1320
|
+
return true;
|
1321
|
+
}
|
1322
|
+
|
1323
|
+
if (values.length === minCount) {
|
1324
|
+
return false;
|
1325
|
+
}
|
1326
|
+
|
1327
|
+
return true;
|
1328
|
+
})();
|
1329
|
+
|
1330
|
+
const hasAdd = (() => {
|
1331
|
+
if (fieldIndex + 1 !== values.length) {
|
1332
|
+
return false;
|
1333
|
+
}
|
1334
|
+
|
1335
|
+
const maxCount = (() => {
|
1336
|
+
const { multivalued } = attribute.validators;
|
1337
|
+
|
1338
|
+
if (multivalued === undefined) {
|
1339
|
+
return undefined;
|
1340
|
+
}
|
1341
|
+
|
1342
|
+
const maxStr = multivalued.max;
|
1343
|
+
|
1344
|
+
if (maxStr === undefined) {
|
1345
|
+
return undefined;
|
1346
|
+
}
|
1347
|
+
|
1348
|
+
return parseInt(`${maxStr}`);
|
1349
|
+
})();
|
1350
|
+
|
1351
|
+
if (maxCount === undefined) {
|
1352
|
+
return false;
|
1353
|
+
}
|
1354
|
+
|
1355
|
+
if (values.length === maxCount) {
|
1356
|
+
return false;
|
1357
|
+
}
|
1358
|
+
|
1359
|
+
return true;
|
1360
|
+
})();
|
1361
|
+
|
1362
|
+
return { hasRemove, hasAdd };
|
1363
|
+
}
|