keycloakify 10.0.0-rc.3 → 10.0.0-rc.30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (875) hide show
  1. package/PUBLIC_URL.d.ts +1 -1
  2. package/PUBLIC_URL.js +2 -2
  3. package/PUBLIC_URL.js.map +1 -1
  4. package/account/Fallback.d.ts +2 -2
  5. package/account/Fallback.js +3 -0
  6. package/account/Fallback.js.map +1 -1
  7. package/account/{kcContext → KcContext}/KcContext.d.ts +74 -44
  8. package/account/KcContext/KcContext.js.map +1 -0
  9. package/account/KcContext/getKcContextMock.d.ts +22 -0
  10. package/account/KcContext/getKcContextMock.js +28 -0
  11. package/account/KcContext/getKcContextMock.js.map +1 -0
  12. package/account/KcContext/index.d.ts +2 -0
  13. package/account/KcContext/index.js +2 -0
  14. package/account/KcContext/index.js.map +1 -0
  15. package/account/{kcContext → KcContext}/kcContextMocks.d.ts +1 -1
  16. package/account/KcContext/kcContextMocks.js +151 -0
  17. package/account/KcContext/kcContextMocks.js.map +1 -0
  18. package/account/Template.d.ts +2 -2
  19. package/account/Template.js +8 -8
  20. package/account/Template.js.map +1 -1
  21. package/account/TemplateProps.d.ts +1 -1
  22. package/account/i18n/baseMessages/ar.d.ts +2 -0
  23. package/account/i18n/baseMessages/ar.js +3 -1
  24. package/account/i18n/baseMessages/ar.js.map +1 -1
  25. package/account/i18n/baseMessages/ca.d.ts +2 -0
  26. package/account/i18n/baseMessages/ca.js +3 -1
  27. package/account/i18n/baseMessages/ca.js.map +1 -1
  28. package/account/i18n/baseMessages/cs.d.ts +2 -0
  29. package/account/i18n/baseMessages/cs.js +3 -1
  30. package/account/i18n/baseMessages/cs.js.map +1 -1
  31. package/account/i18n/baseMessages/da.d.ts +2 -0
  32. package/account/i18n/baseMessages/da.js +3 -1
  33. package/account/i18n/baseMessages/da.js.map +1 -1
  34. package/account/i18n/baseMessages/de.d.ts +2 -0
  35. package/account/i18n/baseMessages/de.js +3 -1
  36. package/account/i18n/baseMessages/de.js.map +1 -1
  37. package/account/i18n/baseMessages/el.d.ts +2 -0
  38. package/account/i18n/baseMessages/el.js +3 -1
  39. package/account/i18n/baseMessages/el.js.map +1 -1
  40. package/account/i18n/baseMessages/en.d.ts +2 -0
  41. package/account/i18n/baseMessages/en.js +3 -1
  42. package/account/i18n/baseMessages/en.js.map +1 -1
  43. package/account/i18n/baseMessages/es.d.ts +2 -0
  44. package/account/i18n/baseMessages/es.js +3 -1
  45. package/account/i18n/baseMessages/es.js.map +1 -1
  46. package/account/i18n/baseMessages/fa.d.ts +2 -0
  47. package/account/i18n/baseMessages/fa.js +3 -1
  48. package/account/i18n/baseMessages/fa.js.map +1 -1
  49. package/account/i18n/baseMessages/fi.d.ts +2 -0
  50. package/account/i18n/baseMessages/fi.js +3 -1
  51. package/account/i18n/baseMessages/fi.js.map +1 -1
  52. package/account/i18n/baseMessages/fr.d.ts +2 -0
  53. package/account/i18n/baseMessages/fr.js +3 -1
  54. package/account/i18n/baseMessages/fr.js.map +1 -1
  55. package/account/i18n/baseMessages/hu.d.ts +2 -0
  56. package/account/i18n/baseMessages/hu.js +3 -1
  57. package/account/i18n/baseMessages/hu.js.map +1 -1
  58. package/account/i18n/baseMessages/index.d.ts +18 -0
  59. package/account/i18n/baseMessages/it.d.ts +2 -0
  60. package/account/i18n/baseMessages/it.js +3 -1
  61. package/account/i18n/baseMessages/it.js.map +1 -1
  62. package/account/i18n/baseMessages/ja.d.ts +2 -0
  63. package/account/i18n/baseMessages/ja.js +3 -1
  64. package/account/i18n/baseMessages/ja.js.map +1 -1
  65. package/account/i18n/baseMessages/lt.d.ts +2 -0
  66. package/account/i18n/baseMessages/lt.js +3 -1
  67. package/account/i18n/baseMessages/lt.js.map +1 -1
  68. package/account/i18n/baseMessages/lv.d.ts +2 -0
  69. package/account/i18n/baseMessages/lv.js +3 -1
  70. package/account/i18n/baseMessages/lv.js.map +1 -1
  71. package/account/i18n/baseMessages/nl.d.ts +2 -0
  72. package/account/i18n/baseMessages/nl.js +3 -1
  73. package/account/i18n/baseMessages/nl.js.map +1 -1
  74. package/account/i18n/baseMessages/no.d.ts +2 -0
  75. package/account/i18n/baseMessages/no.js +3 -1
  76. package/account/i18n/baseMessages/no.js.map +1 -1
  77. package/account/i18n/baseMessages/pl.d.ts +2 -0
  78. package/account/i18n/baseMessages/pl.js +3 -1
  79. package/account/i18n/baseMessages/pl.js.map +1 -1
  80. package/account/i18n/baseMessages/pt-BR.d.ts +2 -0
  81. package/account/i18n/baseMessages/pt-BR.js +3 -1
  82. package/account/i18n/baseMessages/pt-BR.js.map +1 -1
  83. package/account/i18n/baseMessages/ru.d.ts +2 -0
  84. package/account/i18n/baseMessages/ru.js +3 -1
  85. package/account/i18n/baseMessages/ru.js.map +1 -1
  86. package/account/i18n/baseMessages/sk.d.ts +2 -0
  87. package/account/i18n/baseMessages/sk.js +3 -1
  88. package/account/i18n/baseMessages/sk.js.map +1 -1
  89. package/account/i18n/baseMessages/sv.d.ts +2 -0
  90. package/account/i18n/baseMessages/sv.js +3 -1
  91. package/account/i18n/baseMessages/sv.js.map +1 -1
  92. package/account/i18n/baseMessages/th.d.ts +2 -0
  93. package/account/i18n/baseMessages/th.js +3 -1
  94. package/account/i18n/baseMessages/th.js.map +1 -1
  95. package/account/i18n/baseMessages/tr.d.ts +2 -0
  96. package/account/i18n/baseMessages/tr.js +3 -1
  97. package/account/i18n/baseMessages/tr.js.map +1 -1
  98. package/account/i18n/baseMessages/uk.d.ts +2 -0
  99. package/account/i18n/baseMessages/uk.js +3 -1
  100. package/account/i18n/baseMessages/uk.js.map +1 -1
  101. package/account/i18n/baseMessages/zh-CN.d.ts +2 -0
  102. package/account/i18n/baseMessages/zh-CN.js +3 -1
  103. package/account/i18n/baseMessages/zh-CN.js.map +1 -1
  104. package/account/i18n/i18n.d.ts +22 -30
  105. package/account/i18n/i18n.js +45 -49
  106. package/account/i18n/i18n.js.map +1 -1
  107. package/account/i18n/index.d.ts +1 -0
  108. package/account/i18n/index.js +1 -1
  109. package/account/i18n/index.js.map +1 -1
  110. package/account/index.d.ts +3 -6
  111. package/account/index.js +2 -5
  112. package/account/index.js.map +1 -1
  113. package/account/lib/useGetClassName.js +14 -14
  114. package/account/lib/useGetClassName.js.map +1 -1
  115. package/account/pages/Account.d.ts +1 -1
  116. package/account/pages/Account.js +1 -1
  117. package/account/pages/Account.js.map +1 -1
  118. package/account/pages/Applications.d.ts +1 -1
  119. package/account/pages/Applications.js +4 -4
  120. package/account/pages/Applications.js.map +1 -1
  121. package/account/pages/FederatedIdentity.d.ts +7 -0
  122. package/account/pages/FederatedIdentity.js +8 -0
  123. package/account/pages/FederatedIdentity.js.map +1 -0
  124. package/account/pages/Log.d.ts +1 -1
  125. package/account/pages/Log.js +1 -1
  126. package/account/pages/Log.js.map +1 -1
  127. package/account/pages/PageProps.d.ts +4 -4
  128. package/account/pages/Password.d.ts +1 -1
  129. package/account/pages/Password.js +7 -7
  130. package/account/pages/Password.js.map +1 -1
  131. package/account/pages/Sessions.d.ts +1 -1
  132. package/account/pages/Sessions.js +0 -4
  133. package/account/pages/Sessions.js.map +1 -1
  134. package/account/pages/Totp.d.ts +1 -1
  135. package/account/pages/Totp.js +6 -6
  136. package/account/pages/Totp.js.map +1 -1
  137. package/bin/246.index.js +466 -0
  138. package/bin/420.index.js +508 -0
  139. package/bin/509.index.js +438 -0
  140. package/bin/772.index.js +1524 -0
  141. package/bin/main.js +157734 -0
  142. package/bin/{keycloakify/generateFtl/pageId.d.ts → shared/constants.d.ts} +16 -1
  143. package/bin/shared/constants.js +63 -0
  144. package/bin/shared/constants.js.map +1 -0
  145. package/lib/isStorybook.js +2 -1
  146. package/lib/isStorybook.js.map +1 -1
  147. package/lib/useGetClassName.js.map +1 -1
  148. package/login/Fallback.d.ts +2 -2
  149. package/login/Fallback.js.map +1 -1
  150. package/login/{kcContext → KcContext}/KcContext.d.ts +23 -12
  151. package/login/{kcContext → KcContext}/KcContext.js +1 -0
  152. package/login/KcContext/KcContext.js.map +1 -0
  153. package/login/KcContext/getKcContextMock.d.ts +22 -0
  154. package/login/KcContext/getKcContextMock.js +28 -0
  155. package/login/KcContext/getKcContextMock.js.map +1 -0
  156. package/login/KcContext/index.d.ts +2 -0
  157. package/login/KcContext/index.js +2 -0
  158. package/login/KcContext/index.js.map +1 -0
  159. package/login/{kcContext → KcContext}/kcContextMocks.d.ts +1 -1
  160. package/login/KcContext/kcContextMocks.js +319 -0
  161. package/login/KcContext/kcContextMocks.js.map +1 -0
  162. package/login/Template.d.ts +2 -2
  163. package/login/Template.js +17 -17
  164. package/login/Template.js.map +1 -1
  165. package/login/TemplateProps.d.ts +1 -1
  166. package/login/UserProfileFormFields.d.ts +1 -1
  167. package/login/UserProfileFormFields.js +51 -95
  168. package/login/UserProfileFormFields.js.map +1 -1
  169. package/login/i18n/baseMessages/ar.d.ts +9 -0
  170. package/login/i18n/baseMessages/ar.js +10 -1
  171. package/login/i18n/baseMessages/ar.js.map +1 -1
  172. package/login/i18n/baseMessages/ca.d.ts +10 -1
  173. package/login/i18n/baseMessages/ca.js +11 -2
  174. package/login/i18n/baseMessages/ca.js.map +1 -1
  175. package/login/i18n/baseMessages/cs.d.ts +9 -0
  176. package/login/i18n/baseMessages/cs.js +10 -1
  177. package/login/i18n/baseMessages/cs.js.map +1 -1
  178. package/login/i18n/baseMessages/da.d.ts +9 -0
  179. package/login/i18n/baseMessages/da.js +10 -1
  180. package/login/i18n/baseMessages/da.js.map +1 -1
  181. package/login/i18n/baseMessages/de.d.ts +9 -0
  182. package/login/i18n/baseMessages/de.js +10 -1
  183. package/login/i18n/baseMessages/de.js.map +1 -1
  184. package/login/i18n/baseMessages/el.d.ts +9 -1
  185. package/login/i18n/baseMessages/el.js +10 -2
  186. package/login/i18n/baseMessages/el.js.map +1 -1
  187. package/login/i18n/baseMessages/en.d.ts +10 -1
  188. package/login/i18n/baseMessages/en.js +11 -2
  189. package/login/i18n/baseMessages/en.js.map +1 -1
  190. package/login/i18n/baseMessages/es.d.ts +10 -1
  191. package/login/i18n/baseMessages/es.js +11 -2
  192. package/login/i18n/baseMessages/es.js.map +1 -1
  193. package/login/i18n/baseMessages/fa.d.ts +9 -1
  194. package/login/i18n/baseMessages/fa.js +10 -2
  195. package/login/i18n/baseMessages/fa.js.map +1 -1
  196. package/login/i18n/baseMessages/fi.d.ts +9 -0
  197. package/login/i18n/baseMessages/fi.js +10 -1
  198. package/login/i18n/baseMessages/fi.js.map +1 -1
  199. package/login/i18n/baseMessages/fr.d.ts +9 -0
  200. package/login/i18n/baseMessages/fr.js +10 -1
  201. package/login/i18n/baseMessages/fr.js.map +1 -1
  202. package/login/i18n/baseMessages/hu.d.ts +10 -1
  203. package/login/i18n/baseMessages/hu.js +11 -2
  204. package/login/i18n/baseMessages/hu.js.map +1 -1
  205. package/login/i18n/baseMessages/index.d.ts +109 -2
  206. package/login/i18n/baseMessages/it.d.ts +9 -0
  207. package/login/i18n/baseMessages/it.js +10 -1
  208. package/login/i18n/baseMessages/it.js.map +1 -1
  209. package/login/i18n/baseMessages/ja.d.ts +9 -0
  210. package/login/i18n/baseMessages/ja.js +10 -1
  211. package/login/i18n/baseMessages/ja.js.map +1 -1
  212. package/login/i18n/baseMessages/lt.d.ts +9 -0
  213. package/login/i18n/baseMessages/lt.js +10 -1
  214. package/login/i18n/baseMessages/lt.js.map +1 -1
  215. package/login/i18n/baseMessages/lv.d.ts +9 -0
  216. package/login/i18n/baseMessages/lv.js +10 -1
  217. package/login/i18n/baseMessages/lv.js.map +1 -1
  218. package/login/i18n/baseMessages/nl.d.ts +9 -0
  219. package/login/i18n/baseMessages/nl.js +10 -1
  220. package/login/i18n/baseMessages/nl.js.map +1 -1
  221. package/login/i18n/baseMessages/no.d.ts +9 -0
  222. package/login/i18n/baseMessages/no.js +10 -1
  223. package/login/i18n/baseMessages/no.js.map +1 -1
  224. package/login/i18n/baseMessages/pl.d.ts +9 -0
  225. package/login/i18n/baseMessages/pl.js +10 -1
  226. package/login/i18n/baseMessages/pl.js.map +1 -1
  227. package/login/i18n/baseMessages/pt-BR.d.ts +9 -0
  228. package/login/i18n/baseMessages/pt-BR.js +10 -1
  229. package/login/i18n/baseMessages/pt-BR.js.map +1 -1
  230. package/login/i18n/baseMessages/ru.d.ts +9 -0
  231. package/login/i18n/baseMessages/ru.js +10 -1
  232. package/login/i18n/baseMessages/ru.js.map +1 -1
  233. package/login/i18n/baseMessages/sk.d.ts +9 -0
  234. package/login/i18n/baseMessages/sk.js +10 -1
  235. package/login/i18n/baseMessages/sk.js.map +1 -1
  236. package/login/i18n/baseMessages/sv.d.ts +9 -0
  237. package/login/i18n/baseMessages/sv.js +10 -1
  238. package/login/i18n/baseMessages/sv.js.map +1 -1
  239. package/login/i18n/baseMessages/th.d.ts +9 -0
  240. package/login/i18n/baseMessages/th.js +10 -1
  241. package/login/i18n/baseMessages/th.js.map +1 -1
  242. package/login/i18n/baseMessages/tr.d.ts +9 -0
  243. package/login/i18n/baseMessages/tr.js +10 -1
  244. package/login/i18n/baseMessages/tr.js.map +1 -1
  245. package/login/i18n/baseMessages/uk.d.ts +9 -0
  246. package/login/i18n/baseMessages/uk.js +10 -1
  247. package/login/i18n/baseMessages/uk.js.map +1 -1
  248. package/login/i18n/baseMessages/zh-CN.d.ts +10 -1
  249. package/login/i18n/baseMessages/zh-CN.js +11 -2
  250. package/login/i18n/baseMessages/zh-CN.js.map +1 -1
  251. package/login/i18n/i18n.d.ts +23 -32
  252. package/login/i18n/i18n.js +56 -53
  253. package/login/i18n/i18n.js.map +1 -1
  254. package/login/i18n/index.d.ts +2 -1
  255. package/login/i18n/index.js +1 -1
  256. package/login/i18n/index.js.map +1 -1
  257. package/login/index.d.ts +4 -7
  258. package/login/index.js +2 -5
  259. package/login/index.js.map +1 -1
  260. package/login/lib/useDownloadTerms.js +13 -20
  261. package/login/lib/useDownloadTerms.js.map +1 -1
  262. package/login/lib/useGetClassName.js +112 -112
  263. package/login/lib/useGetClassName.js.map +1 -1
  264. package/login/lib/useUserProfileForm.d.ts +10 -3
  265. package/login/lib/useUserProfileForm.js +281 -202
  266. package/login/lib/useUserProfileForm.js.map +1 -1
  267. package/login/pages/Code.d.ts +1 -1
  268. package/login/pages/Code.js.map +1 -1
  269. package/login/pages/DeleteAccountConfirm.d.ts +1 -1
  270. package/login/pages/DeleteAccountConfirm.js +5 -1
  271. package/login/pages/DeleteAccountConfirm.js.map +1 -1
  272. package/login/pages/DeleteCredential.d.ts +1 -1
  273. package/login/pages/DeleteCredential.js.map +1 -1
  274. package/login/pages/Error.d.ts +1 -1
  275. package/login/pages/FrontchannelLogout.d.ts +1 -1
  276. package/login/pages/FrontchannelLogout.js +1 -1
  277. package/login/pages/FrontchannelLogout.js.map +1 -1
  278. package/login/pages/IdpReviewUserProfile.d.ts +2 -2
  279. package/login/pages/Info.d.ts +1 -1
  280. package/login/pages/Login.d.ts +1 -1
  281. package/login/pages/Login.js.map +1 -1
  282. package/login/pages/LoginConfigTotp.d.ts +1 -1
  283. package/login/pages/LoginConfigTotp.js +2 -2
  284. package/login/pages/LoginConfigTotp.js.map +1 -1
  285. package/login/pages/LoginIdpLinkConfirm.d.ts +1 -1
  286. package/login/pages/LoginIdpLinkConfirm.js.map +1 -1
  287. package/login/pages/LoginIdpLinkEmail.d.ts +2 -2
  288. package/login/pages/LoginOauth2DeviceVerifyUserCode.d.ts +2 -2
  289. package/login/pages/LoginOauth2DeviceVerifyUserCode.js.map +1 -1
  290. package/login/pages/LoginOauthGrant.d.ts +2 -2
  291. package/login/pages/LoginOauthGrant.js.map +1 -1
  292. package/login/pages/LoginOtp.d.ts +1 -1
  293. package/login/pages/LoginOtp.js.map +1 -1
  294. package/login/pages/LoginPageExpired.d.ts +1 -1
  295. package/login/pages/LoginPassword.d.ts +1 -1
  296. package/login/pages/LoginPassword.js.map +1 -1
  297. package/login/pages/LoginRecoveryAuthnCodeConfig.d.ts +1 -1
  298. package/login/pages/LoginRecoveryAuthnCodeConfig.js +10 -10
  299. package/login/pages/LoginRecoveryAuthnCodeConfig.js.map +1 -1
  300. package/login/pages/LoginRecoveryAuthnCodeInput.d.ts +1 -1
  301. package/login/pages/LoginRecoveryAuthnCodeInput.js.map +1 -1
  302. package/login/pages/LoginResetOtp.d.ts +1 -1
  303. package/login/pages/LoginResetOtp.js.map +1 -1
  304. package/login/pages/LoginResetPassword.d.ts +1 -1
  305. package/login/pages/LoginResetPassword.js.map +1 -1
  306. package/login/pages/LoginUpdatePassword.d.ts +1 -1
  307. package/login/pages/LoginUpdatePassword.js.map +1 -1
  308. package/login/pages/LoginUpdateProfile.d.ts +3 -3
  309. package/login/pages/LoginUsername.d.ts +1 -1
  310. package/login/pages/LoginUsername.js.map +1 -1
  311. package/login/pages/LoginVerifyEmail.d.ts +1 -1
  312. package/login/pages/LoginX509Info.d.ts +1 -1
  313. package/login/pages/LoginX509Info.js.map +1 -1
  314. package/login/pages/LogoutConfirm.d.ts +1 -1
  315. package/login/pages/LogoutConfirm.js.map +1 -1
  316. package/login/pages/PageProps.d.ts +1 -1
  317. package/login/pages/Register.d.ts +2 -2
  318. package/login/pages/Register.js +2 -2
  319. package/login/pages/Register.js.map +1 -1
  320. package/login/pages/SamlPostForm.d.ts +1 -1
  321. package/login/pages/SelectAuthenticator.d.ts +2 -2
  322. package/login/pages/SelectAuthenticator.js.map +1 -1
  323. package/login/pages/Terms.d.ts +1 -1
  324. package/login/pages/Terms.js.map +1 -1
  325. package/login/pages/UpdateEmail.d.ts +1 -1
  326. package/login/pages/UpdateEmail.js.map +1 -1
  327. package/login/pages/WebauthnAuthenticate.d.ts +1 -1
  328. package/login/pages/WebauthnAuthenticate.js +16 -13
  329. package/login/pages/WebauthnAuthenticate.js.map +1 -1
  330. package/login/pages/WebauthnError.d.ts +1 -1
  331. package/login/pages/WebauthnError.js.map +1 -1
  332. package/login/pages/WebauthnRegister.d.ts +1 -1
  333. package/login/pages/WebauthnRegister.js +10 -10
  334. package/login/pages/WebauthnRegister.js.map +1 -1
  335. package/package.json +154 -565
  336. package/src/PUBLIC_URL.ts +5 -2
  337. package/src/account/Fallback.tsx +6 -3
  338. package/src/account/{kcContext → KcContext}/KcContext.ts +94 -48
  339. package/src/account/KcContext/getKcContextMock.ts +82 -0
  340. package/src/account/KcContext/index.ts +2 -0
  341. package/src/account/KcContext/kcContextMocks.ts +199 -0
  342. package/src/account/Template.tsx +10 -12
  343. package/src/account/TemplateProps.ts +5 -2
  344. package/src/account/i18n/baseMessages/ar.ts +3 -1
  345. package/src/account/i18n/baseMessages/ca.ts +3 -1
  346. package/src/account/i18n/baseMessages/cs.ts +3 -1
  347. package/src/account/i18n/baseMessages/da.ts +3 -1
  348. package/src/account/i18n/baseMessages/de.ts +3 -1
  349. package/src/account/i18n/baseMessages/el.ts +3 -1
  350. package/src/account/i18n/baseMessages/en.ts +3 -1
  351. package/src/account/i18n/baseMessages/es.ts +3 -1
  352. package/src/account/i18n/baseMessages/fa.ts +3 -1
  353. package/src/account/i18n/baseMessages/fi.ts +3 -1
  354. package/src/account/i18n/baseMessages/fr.ts +3 -1
  355. package/src/account/i18n/baseMessages/hu.ts +3 -1
  356. package/src/account/i18n/baseMessages/it.ts +3 -1
  357. package/src/account/i18n/baseMessages/ja.ts +3 -1
  358. package/src/account/i18n/baseMessages/lt.ts +3 -1
  359. package/src/account/i18n/baseMessages/lv.ts +3 -1
  360. package/src/account/i18n/baseMessages/nl.ts +3 -1
  361. package/src/account/i18n/baseMessages/no.ts +3 -1
  362. package/src/account/i18n/baseMessages/pl.ts +3 -1
  363. package/src/account/i18n/baseMessages/pt-BR.ts +3 -1
  364. package/src/account/i18n/baseMessages/ru.ts +3 -1
  365. package/src/account/i18n/baseMessages/sk.ts +3 -1
  366. package/src/account/i18n/baseMessages/sv.ts +3 -1
  367. package/src/account/i18n/baseMessages/th.ts +3 -1
  368. package/src/account/i18n/baseMessages/tr.ts +3 -1
  369. package/src/account/i18n/baseMessages/uk.ts +3 -1
  370. package/src/account/i18n/baseMessages/zh-CN.ts +3 -1
  371. package/src/account/i18n/i18n.tsx +77 -63
  372. package/src/account/i18n/index.ts +1 -0
  373. package/src/account/index.ts +3 -9
  374. package/src/account/lib/useGetClassName.ts +15 -14
  375. package/src/account/pages/Account.tsx +3 -3
  376. package/src/account/pages/Applications.tsx +8 -8
  377. package/src/account/pages/FederatedIdentity.tsx +58 -0
  378. package/src/account/pages/Log.tsx +3 -3
  379. package/src/account/pages/PageProps.ts +4 -4
  380. package/src/account/pages/Password.tsx +10 -10
  381. package/src/account/pages/Sessions.tsx +2 -5
  382. package/src/account/pages/Totp.tsx +26 -32
  383. package/src/bin/copy-keycloak-resources-to-public.ts +7 -106
  384. package/src/bin/download-keycloak-default-theme.ts +63 -0
  385. package/src/bin/eject-page.ts +176 -0
  386. package/src/bin/initialize-email-theme.ts +38 -29
  387. package/src/bin/keycloakify/buildJars/buildJar.ts +192 -72
  388. package/src/bin/keycloakify/buildJars/buildJars.ts +41 -23
  389. package/src/bin/keycloakify/buildJars/extensionVersions.ts +2 -1
  390. package/src/bin/keycloakify/buildJars/generatePom.ts +12 -4
  391. package/src/bin/keycloakify/buildJars/getKeycloakVersionRangeForJar.ts +73 -21
  392. package/src/bin/keycloakify/generateFtl/ftl_object_to_js_code_declaring_an_object.ftl +52 -31
  393. package/src/bin/keycloakify/generateFtl/generateFtl.ts +59 -15
  394. package/src/bin/keycloakify/generateFtl/index.ts +0 -1
  395. package/src/bin/keycloakify/{generateTheme → generateSrcMainResources}/bringInAccountV1.ts +34 -22
  396. package/src/bin/keycloakify/{generateTheme → generateSrcMainResources}/generateMessageProperties.ts +72 -20
  397. package/src/bin/keycloakify/generateSrcMainResources/generateSrcMainResources.ts +34 -0
  398. package/src/bin/keycloakify/{generateTheme/generateSrcMainResources.ts → generateSrcMainResources/generateSrcMainResourcesForMainTheme.ts} +113 -74
  399. package/src/bin/keycloakify/generateSrcMainResources/generateSrcMainResourcesForThemeVariant.ts +80 -0
  400. package/src/bin/keycloakify/generateSrcMainResources/index.ts +1 -0
  401. package/src/bin/keycloakify/{generateTheme → generateSrcMainResources}/readExtraPageNames.ts +21 -8
  402. package/src/bin/keycloakify/generateSrcMainResources/readFieldNameUsage.ts +83 -0
  403. package/src/bin/keycloakify/generateStartKeycloakTestingContainer.ts +21 -7
  404. package/src/bin/keycloakify/index.ts +0 -7
  405. package/src/bin/keycloakify/keycloakify.ts +77 -70
  406. package/src/bin/keycloakify/replacers/replaceImportsInCssCode.ts +26 -7
  407. package/src/bin/keycloakify/replacers/replaceImportsInInlineCssCode.ts +8 -4
  408. package/src/bin/keycloakify/replacers/replaceImportsInJsCode/replaceImportsInJsCode.ts +7 -4
  409. package/src/bin/keycloakify/replacers/replaceImportsInJsCode/vite.ts +25 -7
  410. package/src/bin/keycloakify/replacers/replaceImportsInJsCode/webpack.ts +50 -12
  411. package/src/bin/main.ts +212 -0
  412. package/src/bin/shared/KeycloakVersionRange.ts +9 -0
  413. package/src/bin/shared/buildOptions.ts +307 -0
  414. package/src/bin/{keycloakify/generateFtl/pageId.ts → shared/constants.ts} +31 -1
  415. package/src/bin/shared/copyKeycloakResourcesToPublic.ts +104 -0
  416. package/src/bin/shared/downloadKeycloakDefaultTheme.ts +207 -0
  417. package/src/bin/shared/downloadKeycloakStaticResources.ts +53 -0
  418. package/src/bin/shared/getJarFileBasename.ts +11 -0
  419. package/src/bin/{getThemeSrcDirPath.ts → shared/getThemeSrcDirPath.ts} +6 -3
  420. package/src/bin/shared/metaInfKeycloakThemes.ts +61 -0
  421. package/src/bin/shared/promptKeycloakVersion.ts +125 -0
  422. package/src/bin/start-keycloak/appBuild.ts +129 -0
  423. package/src/bin/start-keycloak/index.ts +1 -0
  424. package/src/bin/start-keycloak/keycloakifyBuild.ts +41 -0
  425. package/src/bin/start-keycloak/myrealm-realm-23.json +2142 -0
  426. package/src/bin/start-keycloak/myrealm-realm-24.json +2318 -0
  427. package/src/bin/start-keycloak/start-keycloak.ts +480 -0
  428. package/src/bin/tools/SemVer.ts +32 -13
  429. package/src/bin/tools/String.prototype.replaceAll.ts +9 -2
  430. package/src/bin/tools/crawl.ts +4 -1
  431. package/src/bin/tools/crc32.ts +42 -24
  432. package/src/bin/tools/downloadAndExtractArchive/downloadAndExtractArchive.ts +262 -0
  433. package/src/bin/tools/downloadAndExtractArchive/fetchProxyOptions.ts +96 -0
  434. package/src/bin/tools/downloadAndExtractArchive/index.ts +1 -0
  435. package/src/bin/tools/extractArchive.ts +140 -0
  436. package/src/bin/tools/fetchProxyOptions.ts +31 -8
  437. package/src/bin/tools/fs.rmSync.ts +4 -4
  438. package/src/bin/tools/getAbsoluteAndInOsFormatPath.ts +17 -2
  439. package/src/bin/tools/getNpmWorkspaceRootDirPath.ts +73 -0
  440. package/src/bin/tools/octokit-addons/getLatestsSemVersionedTag.ts +8 -2
  441. package/src/bin/tools/octokit-addons/listTags.ts +15 -4
  442. package/src/bin/tools/partitionPromiseSettledResults.ts +12 -3
  443. package/src/bin/tools/{readThisNpmProjectVersion.ts → readThisNpmPackageVersion.ts} +6 -2
  444. package/src/bin/tools/transformCodebase.ts +29 -10
  445. package/src/bin/tools/trimIndent.ts +4 -1
  446. package/src/lib/isStorybook.ts +3 -1
  447. package/src/lib/useGetClassName.ts +12 -3
  448. package/src/login/Fallback.tsx +3 -3
  449. package/src/login/{kcContext → KcContext}/KcContext.ts +58 -27
  450. package/src/login/KcContext/getKcContextMock.ts +82 -0
  451. package/src/login/KcContext/index.ts +8 -0
  452. package/src/login/KcContext/kcContextMocks.ts +565 -0
  453. package/src/login/Template.tsx +21 -24
  454. package/src/login/TemplateProps.ts +5 -2
  455. package/src/login/UserProfileFormFields.tsx +73 -126
  456. package/src/login/i18n/baseMessages/ar.ts +10 -1
  457. package/src/login/i18n/baseMessages/ca.ts +11 -2
  458. package/src/login/i18n/baseMessages/cs.ts +10 -1
  459. package/src/login/i18n/baseMessages/da.ts +10 -1
  460. package/src/login/i18n/baseMessages/de.ts +10 -1
  461. package/src/login/i18n/baseMessages/el.ts +10 -2
  462. package/src/login/i18n/baseMessages/en.ts +11 -2
  463. package/src/login/i18n/baseMessages/es.ts +11 -2
  464. package/src/login/i18n/baseMessages/fa.ts +10 -2
  465. package/src/login/i18n/baseMessages/fi.ts +10 -1
  466. package/src/login/i18n/baseMessages/fr.ts +10 -1
  467. package/src/login/i18n/baseMessages/hu.ts +11 -2
  468. package/src/login/i18n/baseMessages/it.ts +10 -1
  469. package/src/login/i18n/baseMessages/ja.ts +10 -1
  470. package/src/login/i18n/baseMessages/lt.ts +10 -1
  471. package/src/login/i18n/baseMessages/lv.ts +10 -1
  472. package/src/login/i18n/baseMessages/nl.ts +10 -1
  473. package/src/login/i18n/baseMessages/no.ts +10 -1
  474. package/src/login/i18n/baseMessages/pl.ts +10 -1
  475. package/src/login/i18n/baseMessages/pt-BR.ts +10 -1
  476. package/src/login/i18n/baseMessages/ru.ts +10 -1
  477. package/src/login/i18n/baseMessages/sk.ts +10 -1
  478. package/src/login/i18n/baseMessages/sv.ts +10 -1
  479. package/src/login/i18n/baseMessages/th.ts +10 -1
  480. package/src/login/i18n/baseMessages/tr.ts +10 -1
  481. package/src/login/i18n/baseMessages/uk.ts +10 -1
  482. package/src/login/i18n/baseMessages/zh-CN.ts +11 -2
  483. package/src/login/i18n/i18n.tsx +98 -68
  484. package/src/login/i18n/index.ts +2 -1
  485. package/src/login/index.ts +4 -10
  486. package/src/login/lib/useDownloadTerms.ts +19 -29
  487. package/src/login/lib/useGetClassName.ts +119 -112
  488. package/src/login/lib/useUserProfileForm.tsx +346 -229
  489. package/src/login/pages/Code.tsx +2 -2
  490. package/src/login/pages/DeleteAccountConfirm.tsx +11 -5
  491. package/src/login/pages/DeleteCredential.tsx +2 -2
  492. package/src/login/pages/Error.tsx +1 -1
  493. package/src/login/pages/FrontchannelLogout.tsx +2 -2
  494. package/src/login/pages/IdpReviewUserProfile.tsx +3 -3
  495. package/src/login/pages/Info.tsx +1 -1
  496. package/src/login/pages/Login.tsx +3 -3
  497. package/src/login/pages/LoginConfigTotp.tsx +4 -5
  498. package/src/login/pages/LoginIdpLinkConfirm.tsx +2 -2
  499. package/src/login/pages/LoginIdpLinkEmail.tsx +2 -2
  500. package/src/login/pages/LoginOauth2DeviceVerifyUserCode.tsx +3 -3
  501. package/src/login/pages/LoginOauthGrant.tsx +3 -3
  502. package/src/login/pages/LoginOtp.tsx +2 -2
  503. package/src/login/pages/LoginPageExpired.tsx +1 -1
  504. package/src/login/pages/LoginPassword.tsx +2 -2
  505. package/src/login/pages/LoginRecoveryAuthnCodeConfig.tsx +12 -13
  506. package/src/login/pages/LoginRecoveryAuthnCodeInput.tsx +2 -2
  507. package/src/login/pages/LoginResetOtp.tsx +2 -2
  508. package/src/login/pages/LoginResetPassword.tsx +4 -4
  509. package/src/login/pages/LoginUpdatePassword.tsx +2 -2
  510. package/src/login/pages/LoginUpdateProfile.tsx +4 -4
  511. package/src/login/pages/LoginUsername.tsx +4 -4
  512. package/src/login/pages/LoginVerifyEmail.tsx +1 -1
  513. package/src/login/pages/LoginX509Info.tsx +2 -2
  514. package/src/login/pages/LogoutConfirm.tsx +2 -2
  515. package/src/login/pages/PageProps.ts +1 -1
  516. package/src/login/pages/Register.tsx +4 -4
  517. package/src/login/pages/SamlPostForm.tsx +1 -1
  518. package/src/login/pages/SelectAuthenticator.tsx +3 -3
  519. package/src/login/pages/Terms.tsx +2 -2
  520. package/src/login/pages/UpdateEmail.tsx +2 -2
  521. package/src/login/pages/WebauthnAuthenticate.tsx +18 -17
  522. package/src/login/pages/WebauthnError.tsx +2 -2
  523. package/src/login/pages/WebauthnRegister.tsx +12 -13
  524. package/src/tools/Array.prototype.every.ts +4 -1
  525. package/src/tools/ExtractAfterStartingWith.ts +4 -0
  526. package/src/tools/LazyOrNot.ts +3 -1
  527. package/src/tools/Object.fromEntries.ts +23 -0
  528. package/src/tools/StatefulObservable/README.md +16 -0
  529. package/src/tools/StatefulObservable/StatefulObservable.ts +58 -0
  530. package/src/tools/StatefulObservable/hooks/index.ts +2 -0
  531. package/src/tools/StatefulObservable/hooks/useObservable.ts +25 -0
  532. package/src/tools/StatefulObservable/hooks/useRerenderOnChange.ts +19 -0
  533. package/src/tools/StatefulObservable/index.ts +2 -0
  534. package/src/tools/ValueOf.ts +2 -0
  535. package/src/tools/clsx.ts +7 -1
  536. package/src/tools/deepAssign.ts +57 -19
  537. package/src/tools/formatNumber.ts +4 -1
  538. package/src/tools/structuredCloneButFunctions.ts +24 -0
  539. package/src/tools/useConstCallback.ts +3 -1
  540. package/src/tools/useInsertLinkTags.ts +78 -74
  541. package/src/tools/useInsertScriptTags.ts +69 -73
  542. package/src/tools/useOnFirstMount.ts +18 -0
  543. package/src/tools/useSetClassName.ts +4 -1
  544. package/src/vite-plugin/tsconfig.json +2 -1
  545. package/src/vite-plugin/vite-plugin.ts +64 -52
  546. package/tools/Array.prototype.every.js +2 -1
  547. package/tools/Array.prototype.every.js.map +1 -1
  548. package/tools/ExtractAfterStartingWith.d.ts +1 -0
  549. package/tools/ExtractAfterStartingWith.js +2 -0
  550. package/tools/ExtractAfterStartingWith.js.map +1 -0
  551. package/tools/Object.fromEntries.d.ts +1 -0
  552. package/tools/Object.fromEntries.js +17 -0
  553. package/tools/Object.fromEntries.js.map +1 -0
  554. package/tools/StatefulObservable/StatefulObservable.d.ts +8 -0
  555. package/tools/StatefulObservable/StatefulObservable.js +36 -0
  556. package/tools/StatefulObservable/StatefulObservable.js.map +1 -0
  557. package/tools/StatefulObservable/hooks/index.d.ts +2 -0
  558. package/tools/StatefulObservable/hooks/index.js +3 -0
  559. package/tools/StatefulObservable/hooks/index.js.map +1 -0
  560. package/tools/StatefulObservable/hooks/useObservable.d.ts +8 -0
  561. package/tools/StatefulObservable/hooks/useObservable.js +17 -0
  562. package/tools/StatefulObservable/hooks/useObservable.js.map +1 -0
  563. package/tools/StatefulObservable/hooks/useRerenderOnChange.d.ts +5 -0
  564. package/tools/StatefulObservable/hooks/useRerenderOnChange.js +14 -0
  565. package/tools/StatefulObservable/hooks/useRerenderOnChange.js.map +1 -0
  566. package/tools/StatefulObservable/index.d.ts +2 -0
  567. package/tools/StatefulObservable/index.js +3 -0
  568. package/tools/StatefulObservable/index.js.map +1 -0
  569. package/tools/ValueOf.d.ts +2 -0
  570. package/tools/ValueOf.js +2 -0
  571. package/tools/ValueOf.js.map +1 -0
  572. package/tools/clsx.js.map +1 -1
  573. package/tools/deepAssign.d.ts +1 -0
  574. package/tools/deepAssign.js +41 -16
  575. package/tools/deepAssign.js.map +1 -1
  576. package/tools/formatNumber.js.map +1 -1
  577. package/tools/structuredCloneButFunctions.d.ts +7 -0
  578. package/tools/structuredCloneButFunctions.js +19 -0
  579. package/tools/structuredCloneButFunctions.js.map +1 -0
  580. package/tools/useConstCallback.js.map +1 -1
  581. package/tools/useInsertLinkTags.d.ts +11 -6
  582. package/tools/useInsertLinkTags.js +53 -52
  583. package/tools/useInsertLinkTags.js.map +1 -1
  584. package/tools/useInsertScriptTags.d.ts +15 -6
  585. package/tools/useInsertScriptTags.js +56 -61
  586. package/tools/useInsertScriptTags.js.map +1 -1
  587. package/tools/useOnFirstMount.d.ts +2 -0
  588. package/tools/useOnFirstMount.js +15 -0
  589. package/tools/useOnFirstMount.js.map +1 -0
  590. package/tools/useSetClassName.js.map +1 -1
  591. package/vite-plugin/index.js +52377 -3
  592. package/vite-plugin/vite-plugin.d.ts +1 -2
  593. package/account/kcContext/KcContext.js.map +0 -1
  594. package/account/kcContext/createGetKcContext.d.ts +0 -19
  595. package/account/kcContext/createGetKcContext.js +0 -73
  596. package/account/kcContext/createGetKcContext.js.map +0 -1
  597. package/account/kcContext/getKcContext.d.ts +0 -13
  598. package/account/kcContext/getKcContext.js +0 -13
  599. package/account/kcContext/getKcContext.js.map +0 -1
  600. package/account/kcContext/getKcContextFromWindow.d.ts +0 -8
  601. package/account/kcContext/getKcContextFromWindow.js +0 -5
  602. package/account/kcContext/getKcContextFromWindow.js.map +0 -1
  603. package/account/kcContext/index.d.ts +0 -1
  604. package/account/kcContext/index.js +0 -2
  605. package/account/kcContext/index.js.map +0 -1
  606. package/account/kcContext/kcContextMocks.js +0 -207
  607. package/account/kcContext/kcContextMocks.js.map +0 -1
  608. package/bin/constants.d.ts +0 -10
  609. package/bin/constants.js +0 -13
  610. package/bin/constants.js.map +0 -1
  611. package/bin/copy-keycloak-resources-to-public.d.ts +0 -14
  612. package/bin/copy-keycloak-resources-to-public.js +0 -216
  613. package/bin/copy-keycloak-resources-to-public.js.map +0 -1
  614. package/bin/download-builtin-keycloak-theme.d.ts +0 -10
  615. package/bin/download-builtin-keycloak-theme.js +0 -352
  616. package/bin/download-builtin-keycloak-theme.js.map +0 -1
  617. package/bin/downloadAndUnzip.d.ts +0 -16
  618. package/bin/downloadAndUnzip.js +0 -255
  619. package/bin/downloadAndUnzip.js.map +0 -1
  620. package/bin/eject-keycloak-page.d.ts +0 -2
  621. package/bin/eject-keycloak-page.js +0 -132
  622. package/bin/eject-keycloak-page.js.map +0 -1
  623. package/bin/getThemeSrcDirPath.d.ts +0 -6
  624. package/bin/getThemeSrcDirPath.js +0 -123
  625. package/bin/getThemeSrcDirPath.js.map +0 -1
  626. package/bin/initialize-email-theme.d.ts +0 -2
  627. package/bin/initialize-email-theme.js +0 -121
  628. package/bin/initialize-email-theme.js.map +0 -1
  629. package/bin/keycloakify/buildJars/buildJar.d.ts +0 -14
  630. package/bin/keycloakify/buildJars/buildJar.js +0 -224
  631. package/bin/keycloakify/buildJars/buildJar.js.map +0 -1
  632. package/bin/keycloakify/buildJars/buildJars.d.ts +0 -10
  633. package/bin/keycloakify/buildJars/buildJars.js +0 -95
  634. package/bin/keycloakify/buildJars/buildJars.js.map +0 -1
  635. package/bin/keycloakify/buildJars/extensionVersions.d.ts +0 -12
  636. package/bin/keycloakify/buildJars/extensionVersions.js +0 -7
  637. package/bin/keycloakify/buildJars/extensionVersions.js.map +0 -1
  638. package/bin/keycloakify/buildJars/generatePom.d.ts +0 -13
  639. package/bin/keycloakify/buildJars/generatePom.js +0 -95
  640. package/bin/keycloakify/buildJars/generatePom.js.map +0 -1
  641. package/bin/keycloakify/buildJars/getKeycloakVersionRangeForJar.d.ts +0 -6
  642. package/bin/keycloakify/buildJars/getKeycloakVersionRangeForJar.js +0 -35
  643. package/bin/keycloakify/buildJars/getKeycloakVersionRangeForJar.js.map +0 -1
  644. package/bin/keycloakify/buildJars/index.d.ts +0 -1
  645. package/bin/keycloakify/buildJars/index.js +0 -18
  646. package/bin/keycloakify/buildJars/index.js.map +0 -1
  647. package/bin/keycloakify/buildOptions/UserProvidedBuildOptions.d.ts +0 -35
  648. package/bin/keycloakify/buildOptions/UserProvidedBuildOptions.js +0 -14
  649. package/bin/keycloakify/buildOptions/UserProvidedBuildOptions.js.map +0 -1
  650. package/bin/keycloakify/buildOptions/buildOptions.d.ts +0 -25
  651. package/bin/keycloakify/buildOptions/buildOptions.js +0 -178
  652. package/bin/keycloakify/buildOptions/buildOptions.js.map +0 -1
  653. package/bin/keycloakify/buildOptions/getCacheDirPath.d.ts +0 -5
  654. package/bin/keycloakify/buildOptions/getCacheDirPath.js +0 -22
  655. package/bin/keycloakify/buildOptions/getCacheDirPath.js.map +0 -1
  656. package/bin/keycloakify/buildOptions/getNpmWorkspaceRootDirPath.d.ts +0 -5
  657. package/bin/keycloakify/buildOptions/getNpmWorkspaceRootDirPath.js +0 -86
  658. package/bin/keycloakify/buildOptions/getNpmWorkspaceRootDirPath.js.map +0 -1
  659. package/bin/keycloakify/buildOptions/getReactAppRootDirPath.d.ts +0 -5
  660. package/bin/keycloakify/buildOptions/getReactAppRootDirPath.js +0 -26
  661. package/bin/keycloakify/buildOptions/getReactAppRootDirPath.js.map +0 -1
  662. package/bin/keycloakify/buildOptions/index.d.ts +0 -1
  663. package/bin/keycloakify/buildOptions/index.js +0 -18
  664. package/bin/keycloakify/buildOptions/index.js.map +0 -1
  665. package/bin/keycloakify/buildOptions/parsedPackageJson.d.ts +0 -10
  666. package/bin/keycloakify/buildOptions/parsedPackageJson.js +0 -49
  667. package/bin/keycloakify/buildOptions/parsedPackageJson.js.map +0 -1
  668. package/bin/keycloakify/buildOptions/resolvedViteConfig.d.ts +0 -13
  669. package/bin/keycloakify/buildOptions/resolvedViteConfig.js +0 -77
  670. package/bin/keycloakify/buildOptions/resolvedViteConfig.js.map +0 -1
  671. package/bin/keycloakify/generateFtl/ftl_object_to_js_code_declaring_an_object.ftl +0 -521
  672. package/bin/keycloakify/generateFtl/generateFtl.d.ts +0 -23
  673. package/bin/keycloakify/generateFtl/generateFtl.js +0 -169
  674. package/bin/keycloakify/generateFtl/generateFtl.js.map +0 -1
  675. package/bin/keycloakify/generateFtl/index.d.ts +0 -2
  676. package/bin/keycloakify/generateFtl/index.js +0 -19
  677. package/bin/keycloakify/generateFtl/index.js.map +0 -1
  678. package/bin/keycloakify/generateFtl/pageId.js +0 -41
  679. package/bin/keycloakify/generateFtl/pageId.js.map +0 -1
  680. package/bin/keycloakify/generateStartKeycloakTestingContainer.d.ts +0 -13
  681. package/bin/keycloakify/generateStartKeycloakTestingContainer.js +0 -86
  682. package/bin/keycloakify/generateStartKeycloakTestingContainer.js.map +0 -1
  683. package/bin/keycloakify/generateTheme/bringInAccountV1.d.ts +0 -9
  684. package/bin/keycloakify/generateTheme/bringInAccountV1.js +0 -153
  685. package/bin/keycloakify/generateTheme/bringInAccountV1.js.map +0 -1
  686. package/bin/keycloakify/generateTheme/downloadKeycloakStaticResources.d.ts +0 -11
  687. package/bin/keycloakify/generateTheme/downloadKeycloakStaticResources.js +0 -102
  688. package/bin/keycloakify/generateTheme/downloadKeycloakStaticResources.js.map +0 -1
  689. package/bin/keycloakify/generateTheme/generateMessageProperties.d.ts +0 -8
  690. package/bin/keycloakify/generateTheme/generateMessageProperties.js +0 -271
  691. package/bin/keycloakify/generateTheme/generateMessageProperties.js.map +0 -1
  692. package/bin/keycloakify/generateTheme/generateSrcMainResources.d.ts +0 -21
  693. package/bin/keycloakify/generateTheme/generateSrcMainResources.js +0 -340
  694. package/bin/keycloakify/generateTheme/generateSrcMainResources.js.map +0 -1
  695. package/bin/keycloakify/generateTheme/generateTheme.d.ts +0 -13
  696. package/bin/keycloakify/generateTheme/generateTheme.js +0 -115
  697. package/bin/keycloakify/generateTheme/generateTheme.js.map +0 -1
  698. package/bin/keycloakify/generateTheme/generateThemeVariants.d.ts +0 -5
  699. package/bin/keycloakify/generateTheme/generateThemeVariants.js +0 -67
  700. package/bin/keycloakify/generateTheme/generateThemeVariants.js.map +0 -1
  701. package/bin/keycloakify/generateTheme/index.d.ts +0 -1
  702. package/bin/keycloakify/generateTheme/index.js +0 -18
  703. package/bin/keycloakify/generateTheme/index.js.map +0 -1
  704. package/bin/keycloakify/generateTheme/readExtraPageNames.d.ts +0 -5
  705. package/bin/keycloakify/generateTheme/readExtraPageNames.js +0 -105
  706. package/bin/keycloakify/generateTheme/readExtraPageNames.js.map +0 -1
  707. package/bin/keycloakify/generateTheme/readFieldNameUsage.d.ts +0 -7
  708. package/bin/keycloakify/generateTheme/readFieldNameUsage.js +0 -141
  709. package/bin/keycloakify/generateTheme/readFieldNameUsage.js.map +0 -1
  710. package/bin/keycloakify/index.d.ts +0 -2
  711. package/bin/keycloakify/index.js +0 -23
  712. package/bin/keycloakify/index.js.map +0 -1
  713. package/bin/keycloakify/keycloakify.d.ts +0 -1
  714. package/bin/keycloakify/keycloakify.js +0 -167
  715. package/bin/keycloakify/keycloakify.js.map +0 -1
  716. package/bin/keycloakify/replacers/replaceImportsInCssCode.d.ts +0 -15
  717. package/bin/keycloakify/replacers/replaceImportsInCssCode.js +0 -88
  718. package/bin/keycloakify/replacers/replaceImportsInCssCode.js.map +0 -1
  719. package/bin/keycloakify/replacers/replaceImportsInInlineCssCode.d.ts +0 -9
  720. package/bin/keycloakify/replacers/replaceImportsInInlineCssCode.js +0 -38
  721. package/bin/keycloakify/replacers/replaceImportsInInlineCssCode.js.map +0 -1
  722. package/bin/keycloakify/replacers/replaceImportsInJsCode/index.d.ts +0 -1
  723. package/bin/keycloakify/replacers/replaceImportsInJsCode/index.js +0 -18
  724. package/bin/keycloakify/replacers/replaceImportsInJsCode/index.js.map +0 -1
  725. package/bin/keycloakify/replacers/replaceImportsInJsCode/replaceImportsInJsCode.d.ts +0 -12
  726. package/bin/keycloakify/replacers/replaceImportsInJsCode/replaceImportsInJsCode.js +0 -70
  727. package/bin/keycloakify/replacers/replaceImportsInJsCode/replaceImportsInJsCode.js.map +0 -1
  728. package/bin/keycloakify/replacers/replaceImportsInJsCode/vite.d.ts +0 -13
  729. package/bin/keycloakify/replacers/replaceImportsInJsCode/vite.js +0 -95
  730. package/bin/keycloakify/replacers/replaceImportsInJsCode/vite.js.map +0 -1
  731. package/bin/keycloakify/replacers/replaceImportsInJsCode/webpack.d.ts +0 -12
  732. package/bin/keycloakify/replacers/replaceImportsInJsCode/webpack.js +0 -103
  733. package/bin/keycloakify/replacers/replaceImportsInJsCode/webpack.js.map +0 -1
  734. package/bin/promptKeycloakVersion.d.ts +0 -3
  735. package/bin/promptKeycloakVersion.js +0 -121
  736. package/bin/promptKeycloakVersion.js.map +0 -1
  737. package/bin/tools/OptionalIfCanBeUndefined.d.ts +0 -14
  738. package/bin/tools/OptionalIfCanBeUndefined.js +0 -3
  739. package/bin/tools/OptionalIfCanBeUndefined.js.map +0 -1
  740. package/bin/tools/SemVer.d.ts +0 -26
  741. package/bin/tools/SemVer.js +0 -119
  742. package/bin/tools/SemVer.js.map +0 -1
  743. package/bin/tools/String.prototype.replaceAll.d.ts +0 -1
  744. package/bin/tools/String.prototype.replaceAll.js +0 -29
  745. package/bin/tools/String.prototype.replaceAll.js.map +0 -1
  746. package/bin/tools/crawl.d.ts +0 -5
  747. package/bin/tools/crawl.js +0 -74
  748. package/bin/tools/crawl.js.map +0 -1
  749. package/bin/tools/crc32.d.ts +0 -9
  750. package/bin/tools/crc32.js +0 -64
  751. package/bin/tools/crc32.js.map +0 -1
  752. package/bin/tools/deflate.d.ts +0 -24
  753. package/bin/tools/deflate.js +0 -155
  754. package/bin/tools/deflate.js.map +0 -1
  755. package/bin/tools/fetchProxyOptions.d.ts +0 -5
  756. package/bin/tools/fetchProxyOptions.js +0 -172
  757. package/bin/tools/fetchProxyOptions.js.map +0 -1
  758. package/bin/tools/fs.existsAsync.d.ts +0 -1
  759. package/bin/tools/fs.existsAsync.js +0 -86
  760. package/bin/tools/fs.existsAsync.js.map +0 -1
  761. package/bin/tools/fs.rm.d.ts +0 -8
  762. package/bin/tools/fs.rm.js +0 -151
  763. package/bin/tools/fs.rm.js.map +0 -1
  764. package/bin/tools/fs.rmSync.d.ts +0 -8
  765. package/bin/tools/fs.rmSync.js +0 -58
  766. package/bin/tools/fs.rmSync.js.map +0 -1
  767. package/bin/tools/getAbsoluteAndInOsFormatPath.d.ts +0 -4
  768. package/bin/tools/getAbsoluteAndInOsFormatPath.js +0 -16
  769. package/bin/tools/getAbsoluteAndInOsFormatPath.js.map +0 -1
  770. package/bin/tools/getThisCodebaseRootDirPath.d.ts +0 -1
  771. package/bin/tools/getThisCodebaseRootDirPath.js +0 -43
  772. package/bin/tools/getThisCodebaseRootDirPath.js.map +0 -1
  773. package/bin/tools/isInside.d.ts +0 -4
  774. package/bin/tools/isInside.js +0 -10
  775. package/bin/tools/isInside.js.map +0 -1
  776. package/bin/tools/kebabCaseToSnakeCase.d.ts +0 -1
  777. package/bin/tools/kebabCaseToSnakeCase.js +0 -35
  778. package/bin/tools/kebabCaseToSnakeCase.js.map +0 -1
  779. package/bin/tools/logger.d.ts +0 -12
  780. package/bin/tools/logger.js +0 -23
  781. package/bin/tools/logger.js.map +0 -1
  782. package/bin/tools/octokit-addons/getLatestsSemVersionedTag.d.ts +0 -14
  783. package/bin/tools/octokit-addons/getLatestsSemVersionedTag.js +0 -119
  784. package/bin/tools/octokit-addons/getLatestsSemVersionedTag.js.map +0 -1
  785. package/bin/tools/octokit-addons/listTags.d.ts +0 -13
  786. package/bin/tools/octokit-addons/listTags.js +0 -154
  787. package/bin/tools/octokit-addons/listTags.js.map +0 -1
  788. package/bin/tools/partitionPromiseSettledResults.d.ts +0 -2
  789. package/bin/tools/partitionPromiseSettledResults.js +0 -41
  790. package/bin/tools/partitionPromiseSettledResults.js.map +0 -1
  791. package/bin/tools/readThisNpmProjectVersion.d.ts +0 -1
  792. package/bin/tools/readThisNpmProjectVersion.js +0 -37
  793. package/bin/tools/readThisNpmProjectVersion.js.map +0 -1
  794. package/bin/tools/tee.d.ts +0 -3
  795. package/bin/tools/tee.js +0 -37
  796. package/bin/tools/tee.js.map +0 -1
  797. package/bin/tools/transformCodebase.d.ts +0 -20
  798. package/bin/tools/transformCodebase.js +0 -97
  799. package/bin/tools/transformCodebase.js.map +0 -1
  800. package/bin/tools/trimIndent.d.ts +0 -5
  801. package/bin/tools/trimIndent.js +0 -82
  802. package/bin/tools/trimIndent.js.map +0 -1
  803. package/bin/tools/unzip.d.ts +0 -2
  804. package/bin/tools/unzip.js +0 -274
  805. package/bin/tools/unzip.js.map +0 -1
  806. package/index.d.ts +0 -1
  807. package/index.js +0 -2
  808. package/index.js.map +0 -1
  809. package/lib/keycloakJsAdapter.d.ts +0 -51
  810. package/lib/keycloakJsAdapter.js +0 -74
  811. package/lib/keycloakJsAdapter.js.map +0 -1
  812. package/login/kcContext/KcContext.js.map +0 -1
  813. package/login/kcContext/createGetKcContext.d.ts +0 -19
  814. package/login/kcContext/createGetKcContext.js +0 -109
  815. package/login/kcContext/createGetKcContext.js.map +0 -1
  816. package/login/kcContext/getKcContext.d.ts +0 -13
  817. package/login/kcContext/getKcContext.js +0 -13
  818. package/login/kcContext/getKcContext.js.map +0 -1
  819. package/login/kcContext/getKcContextFromWindow.d.ts +0 -8
  820. package/login/kcContext/getKcContextFromWindow.js +0 -5
  821. package/login/kcContext/getKcContextFromWindow.js.map +0 -1
  822. package/login/kcContext/index.d.ts +0 -1
  823. package/login/kcContext/index.js +0 -2
  824. package/login/kcContext/index.js.map +0 -1
  825. package/login/kcContext/kcContextMocks.js +0 -390
  826. package/login/kcContext/kcContextMocks.js.map +0 -1
  827. package/src/account/kcContext/createGetKcContext.ts +0 -108
  828. package/src/account/kcContext/getKcContext.ts +0 -21
  829. package/src/account/kcContext/getKcContextFromWindow.ts +0 -11
  830. package/src/account/kcContext/index.ts +0 -1
  831. package/src/account/kcContext/kcContextMocks.ts +0 -254
  832. package/src/bin/constants.ts +0 -13
  833. package/src/bin/download-builtin-keycloak-theme.ts +0 -290
  834. package/src/bin/downloadAndUnzip.ts +0 -203
  835. package/src/bin/eject-keycloak-page.ts +0 -64
  836. package/src/bin/keycloakify/buildOptions/UserProvidedBuildOptions.ts +0 -21
  837. package/src/bin/keycloakify/buildOptions/buildOptions.ts +0 -189
  838. package/src/bin/keycloakify/buildOptions/getCacheDirPath.ts +0 -25
  839. package/src/bin/keycloakify/buildOptions/getNpmWorkspaceRootDirPath.ts +0 -49
  840. package/src/bin/keycloakify/buildOptions/getReactAppRootDirPath.ts +0 -23
  841. package/src/bin/keycloakify/buildOptions/index.ts +0 -1
  842. package/src/bin/keycloakify/buildOptions/parsedPackageJson.ts +0 -32
  843. package/src/bin/keycloakify/buildOptions/resolvedViteConfig.ts +0 -74
  844. package/src/bin/keycloakify/generateTheme/downloadKeycloakStaticResources.ts +0 -49
  845. package/src/bin/keycloakify/generateTheme/generateTheme.ts +0 -44
  846. package/src/bin/keycloakify/generateTheme/generateThemeVariants.ts +0 -50
  847. package/src/bin/keycloakify/generateTheme/index.ts +0 -1
  848. package/src/bin/keycloakify/generateTheme/readFieldNameUsage.ts +0 -55
  849. package/src/bin/promptKeycloakVersion.ts +0 -49
  850. package/src/bin/tools/logger.ts +0 -27
  851. package/src/bin/tools/unzip.ts +0 -141
  852. package/src/index.ts +0 -1
  853. package/src/lib/keycloakJsAdapter.ts +0 -118
  854. package/src/login/kcContext/createGetKcContext.ts +0 -159
  855. package/src/login/kcContext/getKcContext.ts +0 -21
  856. package/src/login/kcContext/getKcContextFromWindow.ts +0 -11
  857. package/src/login/kcContext/index.ts +0 -1
  858. package/src/login/kcContext/kcContextMocks.ts +0 -631
  859. package/src/tools/AndByDiscriminatingKey.ts +0 -25
  860. package/src/tools/deepClone.ts +0 -17
  861. package/src/tools/memoize.ts +0 -55
  862. package/tools/AndByDiscriminatingKey.d.ts +0 -5
  863. package/tools/AndByDiscriminatingKey.js +0 -2
  864. package/tools/AndByDiscriminatingKey.js.map +0 -1
  865. package/tools/deepClone.d.ts +0 -2
  866. package/tools/deepClone.js +0 -14
  867. package/tools/deepClone.js.map +0 -1
  868. package/tools/memoize.d.ts +0 -7
  869. package/tools/memoize.js +0 -38
  870. package/tools/memoize.js.map +0 -1
  871. package/vite-plugin/index.js.map +0 -1
  872. package/vite-plugin/tsconfig.tsbuildinfo +0 -1
  873. package/vite-plugin/vite-plugin.js +0 -158
  874. package/vite-plugin/vite-plugin.js.map +0 -1
  875. /package/account/{kcContext → KcContext}/KcContext.js +0 -0
@@ -1,14 +1,14 @@
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 type { MessageKey } from "keycloakify/login/i18n/i18n";
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 { createUseInsertScriptTags } from "keycloakify/tools/useInsertScriptTags";
9
+ import { useInsertScriptTags } from "keycloakify/tools/useInsertScriptTags";
10
+ import type { KcContext, PasswordPolicies, Attribute, Validators } from "keycloakify/login/KcContext";
11
+ import type { MessageKey } from "keycloakify/login/i18n";
12
12
  import type { I18n } from "../i18n";
13
13
 
14
14
  export type FormFieldError = {
@@ -67,7 +67,7 @@ export type FormAction =
67
67
  export type KcContextLike = {
68
68
  messagesPerField: Pick<KcContext.Common["messagesPerField"], "existsError" | "get">;
69
69
  profile: {
70
- attributes: Attribute[];
70
+ attributesByName: Record<string, Attribute>;
71
71
  html5DataAnnotations?: Record<string, string>;
72
72
  };
73
73
  passwordRequired?: boolean;
@@ -102,17 +102,16 @@ namespace internal {
102
102
  };
103
103
  }
104
104
 
105
- const { useInsertScriptTags } = createUseInsertScriptTags();
106
-
107
105
  export function useUserProfileForm(params: ParamsOfUseUserProfileForm): ReturnTypeOfUseUserProfileForm {
108
106
  const { kcContext, i18n, doMakeUserConfirmPassword } = params;
109
107
 
110
108
  const { insertScriptTags } = useInsertScriptTags({
111
- "scriptTags": Object.keys(kcContext.profile?.html5DataAnnotations ?? {})
109
+ componentOrHookName: "useUserProfileForm",
110
+ scriptTags: Object.keys(kcContext.profile?.html5DataAnnotations ?? {})
112
111
  .filter(key => key !== "kcMultivalued" && key !== "kcNumberFormat") // NOTE: Keycloakify handles it.
113
112
  .map(key => ({
114
- "type": "module",
115
- "src": `${kcContext.url.resourcesPath}/js/${key}.js`
113
+ type: "module",
114
+ src: `${kcContext.url.resourcesPath}/js/${key}.js`
116
115
  }))
117
116
  });
118
117
 
@@ -136,7 +135,11 @@ export function useUserProfileForm(params: ParamsOfUseUserProfileForm): ReturnTy
136
135
 
137
136
  const attributes = (() => {
138
137
  retrocompat_patch: {
139
- if ("profile" in kcContext && "attributes" in kcContext.profile && kcContext.profile.attributes.length !== 0) {
138
+ if (
139
+ "profile" in kcContext &&
140
+ "attributesByName" in kcContext.profile &&
141
+ Object.keys(kcContext.profile.attributesByName).length !== 0
142
+ ) {
140
143
  break retrocompat_patch;
141
144
  }
142
145
 
@@ -146,15 +149,15 @@ export function useUserProfileForm(params: ParamsOfUseUserProfileForm): ReturnTy
146
149
  .filter(name => (name !== "username" ? true : !kcContext.realm.registrationEmailAsUsername))
147
150
  .map(name =>
148
151
  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": (() => {
152
+ name: name,
153
+ displayName: id<`\${${MessageKey}}`>(`\${${name}}`),
154
+ required: true,
155
+ value: (kcContext.register as any).formData[name] ?? "",
156
+ html5DataAnnotations: {},
157
+ readOnly: false,
158
+ validators: {},
159
+ annotations: {},
160
+ autocomplete: (() => {
158
161
  switch (name) {
159
162
  case "email":
160
163
  return "email";
@@ -174,15 +177,15 @@ export function useUserProfileForm(params: ParamsOfUseUserProfileForm): ReturnTy
174
177
  .filter(name => (name !== "username" ? true : (kcContext.user as any).editUsernameAllowed))
175
178
  .map(name =>
176
179
  id<Attribute>({
177
- "name": name,
178
- "displayName": id<`\${${MessageKey}}`>(`\${${name}}`),
179
- "required": true,
180
- "value": (kcContext as any).user[name] ?? "",
181
- "html5DataAnnotations": {},
182
- "readOnly": false,
183
- "validators": {},
184
- "annotations": {},
185
- "autocomplete": (() => {
180
+ name: name,
181
+ displayName: id<`\${${MessageKey}}`>(`\${${name}}`),
182
+ required: true,
183
+ value: (kcContext as any).user[name] ?? "",
184
+ html5DataAnnotations: {},
185
+ readOnly: false,
186
+ validators: {},
187
+ annotations: {},
188
+ autocomplete: (() => {
186
189
  switch (name) {
187
190
  case "email":
188
191
  return "email";
@@ -200,15 +203,15 @@ export function useUserProfileForm(params: ParamsOfUseUserProfileForm): ReturnTy
200
203
  //NOTE: Handle legacy update-email.ftl
201
204
  return [
202
205
  id<Attribute>({
203
- "name": "email",
204
- "displayName": id<`\${${MessageKey}}`>(`\${email}`),
205
- "required": true,
206
- "value": (kcContext.email as any).value ?? "",
207
- "html5DataAnnotations": {},
208
- "readOnly": false,
209
- "validators": {},
210
- "annotations": {},
211
- "autocomplete": "email"
206
+ name: "email",
207
+ displayName: id<`\${${MessageKey}}`>(`\${email}`),
208
+ required: true,
209
+ value: (kcContext.email as any).value ?? "",
210
+ html5DataAnnotations: {},
211
+ readOnly: false,
212
+ validators: {},
213
+ annotations: {},
214
+ autocomplete: "email"
212
215
  })
213
216
  ];
214
217
  }
@@ -216,7 +219,7 @@ export function useUserProfileForm(params: ParamsOfUseUserProfileForm): ReturnTy
216
219
  assert(false, "Unable to mock user profile from the current kcContext");
217
220
  }
218
221
 
219
- return kcContext.profile.attributes.map(attribute_pre_group_patch => {
222
+ return Object.values(kcContext.profile.attributesByName).map(attribute_pre_group_patch => {
220
223
  if (typeof attribute_pre_group_patch.group === "string" && attribute_pre_group_patch.group !== "") {
221
224
  const { group, groupDisplayHeader, groupDisplayDescription, groupAnnotations, ...rest } =
222
225
  attribute_pre_group_patch as Attribute & {
@@ -228,11 +231,11 @@ export function useUserProfileForm(params: ParamsOfUseUserProfileForm): ReturnTy
228
231
 
229
232
  return id<Attribute>({
230
233
  ...rest,
231
- "group": {
232
- "name": group,
233
- "displayHeader": groupDisplayHeader,
234
- "displayDescription": groupDisplayDescription,
235
- "html5DataAnnotations": {}
234
+ group: {
235
+ name: group,
236
+ displayHeader: groupDisplayHeader,
237
+ displayDescription: groupDisplayDescription,
238
+ html5DataAnnotations: {}
236
239
  }
237
240
  });
238
241
  }
@@ -242,7 +245,7 @@ export function useUserProfileForm(params: ParamsOfUseUserProfileForm): ReturnTy
242
245
  })();
243
246
 
244
247
  for (const attribute of attributes) {
245
- syntheticAttributes.push(attribute);
248
+ syntheticAttributes.push(structuredCloneButFunctions(attribute));
246
249
 
247
250
  add_password_and_password_confirm: {
248
251
  if (!kcContext.passwordRequired) {
@@ -257,38 +260,56 @@ export function useUserProfileForm(params: ParamsOfUseUserProfileForm): ReturnTy
257
260
 
258
261
  syntheticAttributes.push(
259
262
  {
260
- "name": "password",
261
- "displayName": id<`\${${MessageKey}}`>("${password}"),
262
- "required": true,
263
- "readOnly": false,
264
- "validators": {},
265
- "annotations": {},
266
- "autocomplete": "new-password",
267
- "html5DataAnnotations": {},
263
+ name: "password",
264
+ displayName: id<`\${${MessageKey}}`>("${password}"),
265
+ required: true,
266
+ readOnly: false,
267
+ validators: {},
268
+ annotations: {},
269
+ autocomplete: "new-password",
270
+ html5DataAnnotations: {},
268
271
  // NOTE: Compat with Keycloak version prior to 24
269
- ...({ "groupAnnotations": {} } as {})
272
+ ...({ groupAnnotations: {} } as {})
270
273
  },
271
274
  {
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",
275
+ name: "password-confirm",
276
+ displayName: id<`\${${MessageKey}}`>("${passwordConfirm}"),
277
+ required: true,
278
+ readOnly: false,
279
+ validators: {},
280
+ annotations: {},
281
+ html5DataAnnotations: {},
282
+ autocomplete: "new-password",
280
283
  // NOTE: Compat with Keycloak version prior to 24
281
- ...({ "groupAnnotations": {} } as {})
284
+ ...({ groupAnnotations: {} } as {})
282
285
  }
283
286
  );
284
287
  }
285
288
  }
286
289
 
290
+ // NOTE: Consistency patch
291
+ syntheticAttributes.forEach(attribute => {
292
+ if (getIsMultivaluedSingleField({ attribute })) {
293
+ attribute.multivalued = true;
294
+ }
295
+
296
+ if (attribute.multivalued) {
297
+ attribute.values ??= attribute.value !== undefined ? [attribute.value] : [];
298
+ delete attribute.value;
299
+ } else {
300
+ attribute.value ??= attribute.values?.[0];
301
+ delete attribute.values;
302
+ }
303
+ });
304
+
287
305
  return syntheticAttributes;
288
306
  })();
289
307
 
290
308
  const initialFormFieldState = (() => {
291
- const out: { attribute: Attribute; valueOrValues: string | string[] }[] = [];
309
+ const out: {
310
+ attribute: Attribute;
311
+ valueOrValues: string | string[];
312
+ }[] = [];
292
313
 
293
314
  for (const attribute of syntheticAttributes) {
294
315
  handle_multi_valued_attribute: {
@@ -296,10 +317,10 @@ export function useUserProfileForm(params: ParamsOfUseUserProfileForm): ReturnTy
296
317
  break handle_multi_valued_attribute;
297
318
  }
298
319
 
299
- const values = attribute.values ?? [""];
320
+ const values = attribute.values?.length ? attribute.values : [""];
300
321
 
301
322
  apply_validator_min_range: {
302
- if (attribute.annotations.inputType?.startsWith("multiselect")) {
323
+ if (getIsMultivaluedSingleField({ attribute })) {
303
324
  break apply_validator_min_range;
304
325
  }
305
326
 
@@ -311,7 +332,7 @@ export function useUserProfileForm(params: ParamsOfUseUserProfileForm): ReturnTy
311
332
 
312
333
  const { min: minStr } = validator;
313
334
 
314
- if (minStr === undefined) {
335
+ if (!minStr) {
315
336
  break apply_validator_min_range;
316
337
  }
317
338
 
@@ -324,7 +345,7 @@ export function useUserProfileForm(params: ParamsOfUseUserProfileForm): ReturnTy
324
345
 
325
346
  out.push({
326
347
  attribute,
327
- "valueOrValues": values
348
+ valueOrValues: values
328
349
  });
329
350
 
330
351
  continue;
@@ -332,7 +353,7 @@ export function useUserProfileForm(params: ParamsOfUseUserProfileForm): ReturnTy
332
353
 
333
354
  out.push({
334
355
  attribute,
335
- "valueOrValues": attribute.value ?? ""
356
+ valueOrValues: attribute.value ?? ""
336
357
  });
337
358
  }
338
359
 
@@ -340,36 +361,37 @@ export function useUserProfileForm(params: ParamsOfUseUserProfileForm): ReturnTy
340
361
  })();
341
362
 
342
363
  const initialState: internal.State = {
343
- "formFieldStates": initialFormFieldState.map(({ attribute, valueOrValues }) => ({
364
+ formFieldStates: initialFormFieldState.map(({ attribute, valueOrValues }) => ({
344
365
  attribute,
345
- "errors": getErrors({
346
- "attributeName": attribute.name,
347
- "formFieldStates": initialFormFieldState
366
+ errors: getErrors({
367
+ attributeName: attribute.name,
368
+ formFieldStates: initialFormFieldState
348
369
  }),
349
- "hasLostFocusAtLeastOnce": valueOrValues instanceof Array ? valueOrValues.map(() => false) : false,
350
- "valueOrValues": valueOrValues
370
+ hasLostFocusAtLeastOnce:
371
+ valueOrValues instanceof Array && !getIsMultivaluedSingleField({ attribute }) ? valueOrValues.map(() => false) : false,
372
+ valueOrValues: valueOrValues
351
373
  }))
352
374
  };
353
375
 
354
376
  return initialState;
355
377
  }, []);
356
378
 
357
- const [state, dispatchFormAction] = useReducer(function reducer(state: internal.State, params: FormAction): internal.State {
358
- const formFieldState = state.formFieldStates.find(({ attribute }) => attribute.name === params.name);
379
+ const [state, dispatchFormAction] = useReducer(function reducer(state: internal.State, formAction: FormAction): internal.State {
380
+ const formFieldState = state.formFieldStates.find(({ attribute }) => attribute.name === formAction.name);
359
381
 
360
382
  assert(formFieldState !== undefined);
361
383
 
362
384
  (() => {
363
- switch (params.action) {
385
+ switch (formAction.action) {
364
386
  case "update":
365
- formFieldState.valueOrValues = params.valueOrValues;
387
+ formFieldState.valueOrValues = formAction.valueOrValues;
366
388
 
367
389
  apply_formatters: {
368
390
  const { attribute } = formFieldState;
369
391
 
370
392
  const { kcNumberFormat } = attribute.html5DataAnnotations ?? {};
371
393
 
372
- if (kcNumberFormat === undefined) {
394
+ if (!kcNumberFormat) {
373
395
  break apply_formatters;
374
396
  }
375
397
 
@@ -381,8 +403,8 @@ export function useUserProfileForm(params: ParamsOfUseUserProfileForm): ReturnTy
381
403
  }
382
404
 
383
405
  formFieldState.errors = getErrors({
384
- "attributeName": params.name,
385
- "formFieldStates": state.formFieldStates
406
+ attributeName: formAction.name,
407
+ formFieldStates: state.formFieldStates
386
408
  });
387
409
 
388
410
  update_password_confirm: {
@@ -390,21 +412,21 @@ export function useUserProfileForm(params: ParamsOfUseUserProfileForm): ReturnTy
390
412
  break update_password_confirm;
391
413
  }
392
414
 
393
- if (params.name !== "password") {
415
+ if (formAction.name !== "password") {
394
416
  break update_password_confirm;
395
417
  }
396
418
 
397
419
  state = reducer(state, {
398
- "action": "update",
399
- "name": "password-confirm",
400
- "valueOrValues": params.valueOrValues
420
+ action: "update",
421
+ name: "password-confirm",
422
+ valueOrValues: formAction.valueOrValues
401
423
  });
402
424
  }
403
425
 
404
426
  return;
405
427
  case "focus lost":
406
428
  if (formFieldState.hasLostFocusAtLeastOnce instanceof Array) {
407
- const { fieldIndex } = params;
429
+ const { fieldIndex } = formAction;
408
430
  assert(fieldIndex !== undefined);
409
431
  formFieldState.hasLostFocusAtLeastOnce[fieldIndex] = true;
410
432
  return;
@@ -413,23 +435,23 @@ export function useUserProfileForm(params: ParamsOfUseUserProfileForm): ReturnTy
413
435
  formFieldState.hasLostFocusAtLeastOnce = true;
414
436
  return;
415
437
  }
416
- assert<Equals<typeof params, never>>(false);
438
+ assert<Equals<typeof formAction, never>>(false);
417
439
  })();
418
440
 
419
- return state;
441
+ return { ...state };
420
442
  }, initialState);
421
443
 
422
444
  const formState: FormState = useMemo(
423
445
  () => ({
424
- "formFieldStates": state.formFieldStates.map(
446
+ formFieldStates: state.formFieldStates.map(
425
447
  ({ errors, hasLostFocusAtLeastOnce: hasLostFocusAtLeastOnceOrArr, attribute, ...valueOrValuesWrap }) => ({
426
- "displayableErrors": errors.filter(error => {
448
+ displayableErrors: errors.filter(error => {
427
449
  const hasLostFocusAtLeastOnce =
428
450
  typeof hasLostFocusAtLeastOnceOrArr === "boolean"
429
451
  ? hasLostFocusAtLeastOnceOrArr
430
452
  : error.fieldIndex !== undefined
431
- ? hasLostFocusAtLeastOnceOrArr[error.fieldIndex]
432
- : hasLostFocusAtLeastOnceOrArr[hasLostFocusAtLeastOnceOrArr.length - 1];
453
+ ? hasLostFocusAtLeastOnceOrArr[error.fieldIndex]
454
+ : hasLostFocusAtLeastOnceOrArr[hasLostFocusAtLeastOnceOrArr.length - 1];
433
455
 
434
456
  switch (error.source.type) {
435
457
  case "server":
@@ -482,7 +504,7 @@ export function useUserProfileForm(params: ParamsOfUseUserProfileForm): ReturnTy
482
504
  ...valueOrValuesWrap
483
505
  })
484
506
  ),
485
- "isFormSubmittable": state.formFieldStates.every(({ errors }) => errors.length === 0)
507
+ isFormSubmittable: state.formFieldStates.every(({ errors }) => errors.length === 0)
486
508
  }),
487
509
  [state]
488
510
  );
@@ -501,7 +523,13 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
501
523
  const { msg, msgStr, advancedMsg, advancedMsgStr } = i18n;
502
524
 
503
525
  const getErrors = useConstCallback(
504
- (params: { attributeName: string; formFieldStates: { attribute: Attribute; valueOrValues: string | string[] }[] }): FormFieldError[] => {
526
+ (params: {
527
+ attributeName: string;
528
+ formFieldStates: {
529
+ attribute: Attribute;
530
+ valueOrValues: string | string[];
531
+ }[];
532
+ }): FormFieldError[] => {
505
533
  const { attributeName, formFieldStates } = params;
506
534
 
507
535
  const formFieldState = formFieldStates.find(({ attribute }) => attribute.name === attributeName);
@@ -516,7 +544,7 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
516
544
  unFormat_number: {
517
545
  const { kcNumberUnFormat } = attribute.html5DataAnnotations ?? {};
518
546
 
519
- if (kcNumberUnFormat === undefined) {
547
+ if (!kcNumberUnFormat) {
520
548
  break unFormat_number;
521
549
  }
522
550
 
@@ -534,7 +562,7 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
534
562
 
535
563
  server_side_error: {
536
564
  if (attribute.multivalued) {
537
- const defaultValues = attribute.values ?? [""];
565
+ const defaultValues = attribute.values?.length ? attribute.values : [""];
538
566
 
539
567
  assert(valueOrValues instanceof Array);
540
568
 
@@ -572,10 +600,10 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
572
600
  return [
573
601
  {
574
602
  errorMessageStr,
575
- "errorMessage": <span key={0}>{errorMessageStr}</span>,
576
- "fieldIndex": undefined,
577
- "source": {
578
- "type": "server"
603
+ errorMessage: <span key={0}>{errorMessageStr}</span>,
604
+ fieldIndex: undefined,
605
+ source: {
606
+ type: "server"
579
607
  }
580
608
  }
581
609
  ];
@@ -586,7 +614,7 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
586
614
  break handle_multi_valued_multi_fields;
587
615
  }
588
616
 
589
- if (attribute.annotations.inputType?.startsWith("multiselect")) {
617
+ if (getIsMultivaluedSingleField({ attribute })) {
590
618
  break handle_multi_valued_multi_fields;
591
619
  }
592
620
 
@@ -598,19 +626,19 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
598
626
  .map((...[, index]) => {
599
627
  const specificValueErrors = getErrors({
600
628
  attributeName,
601
- "formFieldStates": formFieldStates.map(formFieldState => {
629
+ formFieldStates: formFieldStates.map(formFieldState => {
602
630
  if (formFieldState.attribute.name === attributeName) {
603
631
  assert(formFieldState.valueOrValues instanceof Array);
604
632
  return {
605
- "attribute": {
633
+ attribute: {
606
634
  ...attribute,
607
- "annotations": {
635
+ annotations: {
608
636
  ...attribute.annotations,
609
- "inputType": undefined
637
+ inputType: undefined
610
638
  },
611
- "multivalued": false
639
+ multivalued: false
612
640
  },
613
- "valueOrValues": formFieldState.valueOrValues[index]
641
+ valueOrValues: formFieldState.valueOrValues[index]
614
642
  };
615
643
  }
616
644
 
@@ -626,7 +654,12 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
626
654
 
627
655
  return true;
628
656
  })
629
- .map((error): FormFieldError => ({ ...error, "fieldIndex": index }));
657
+ .map(
658
+ (error): FormFieldError => ({
659
+ ...error,
660
+ fieldIndex: index
661
+ })
662
+ );
630
663
  })
631
664
  .reduce((acc, errors) => [...acc, ...errors], []);
632
665
 
@@ -642,12 +675,12 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
642
675
  const msgArgs = ["error-user-attribute-required"] as const;
643
676
 
644
677
  errors.push({
645
- "errorMessage": <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
646
- "errorMessageStr": msgStr(...msgArgs),
647
- "fieldIndex": undefined,
648
- "source": {
649
- "type": "other",
650
- "rule": "requiredField"
678
+ errorMessage: <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
679
+ errorMessageStr: msgStr(...msgArgs),
680
+ fieldIndex: undefined,
681
+ source: {
682
+ type: "other",
683
+ rule: "requiredField"
651
684
  }
652
685
  });
653
686
  }
@@ -660,7 +693,7 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
660
693
  break handle_multi_valued_single_field;
661
694
  }
662
695
 
663
- if (!attribute.annotations.inputType?.startsWith("multiselect")) {
696
+ if (!getIsMultivaluedSingleField({ attribute })) {
664
697
  break handle_multi_valued_single_field;
665
698
  }
666
699
 
@@ -674,13 +707,13 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
674
707
 
675
708
  const { min: minStr } = validator;
676
709
 
677
- const min = minStr !== undefined ? parseInt(`${minStr}`) : attribute.required ? 1 : 0;
710
+ const min = minStr ? parseInt(`${minStr}`) : attribute.required ? 1 : 0;
678
711
 
679
712
  assert(!isNaN(min));
680
713
 
681
714
  const { max: maxStr } = validator;
682
715
 
683
- const max = maxStr === undefined ? Infinity : parseInt(`${maxStr}`);
716
+ const max = !maxStr ? Infinity : parseInt(`${maxStr}`);
684
717
 
685
718
  assert(!isNaN(max));
686
719
 
@@ -696,12 +729,12 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
696
729
 
697
730
  return [
698
731
  {
699
- "errorMessage": <Fragment key={0}>{msg(...msgArgs)}</Fragment>,
700
- "errorMessageStr": msgStr(...msgArgs),
701
- "fieldIndex": undefined,
702
- "source": {
703
- "type": "validator",
704
- "name": validatorName
732
+ errorMessage: <Fragment key={0}>{msg(...msgArgs)}</Fragment>,
733
+ errorMessageStr: msgStr(...msgArgs),
734
+ fieldIndex: undefined,
735
+ source: {
736
+ type: "validator",
737
+ name: validatorName
705
738
  }
706
739
  }
707
740
  ];
@@ -727,7 +760,7 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
727
760
 
728
761
  const policy = passwordPolicies[policyName];
729
762
 
730
- if (policy === undefined) {
763
+ if (!policy) {
731
764
  break check_password_policy_x;
732
765
  }
733
766
 
@@ -740,12 +773,12 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
740
773
  const msgArgs = ["invalidPasswordMinLengthMessage", `${minLength}`] as const;
741
774
 
742
775
  errors.push({
743
- "errorMessage": <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
744
- "errorMessageStr": msgStr(...msgArgs),
745
- "fieldIndex": undefined,
746
- "source": {
747
- "type": "passwordPolicy",
748
- "name": policyName
776
+ errorMessage: <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
777
+ errorMessageStr: msgStr(...msgArgs),
778
+ fieldIndex: undefined,
779
+ source: {
780
+ type: "passwordPolicy",
781
+ name: policyName
749
782
  }
750
783
  });
751
784
  }
@@ -755,7 +788,7 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
755
788
 
756
789
  const policy = passwordPolicies[policyName];
757
790
 
758
- if (policy === undefined) {
791
+ if (!policy) {
759
792
  break check_password_policy_x;
760
793
  }
761
794
 
@@ -768,12 +801,12 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
768
801
  const msgArgs = ["invalidPasswordMinDigitsMessage", `${minNumberOfDigits}`] as const;
769
802
 
770
803
  errors.push({
771
- "errorMessage": <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
772
- "errorMessageStr": msgStr(...msgArgs),
773
- "fieldIndex": undefined,
774
- "source": {
775
- "type": "passwordPolicy",
776
- "name": policyName
804
+ errorMessage: <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
805
+ errorMessageStr: msgStr(...msgArgs),
806
+ fieldIndex: undefined,
807
+ source: {
808
+ type: "passwordPolicy",
809
+ name: policyName
777
810
  }
778
811
  });
779
812
  }
@@ -783,7 +816,7 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
783
816
 
784
817
  const policy = passwordPolicies[policyName];
785
818
 
786
- if (policy === undefined) {
819
+ if (!policy) {
787
820
  break check_password_policy_x;
788
821
  }
789
822
 
@@ -798,12 +831,12 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
798
831
  const msgArgs = ["invalidPasswordMinLowerCaseCharsMessage", `${minNumberOfLowerCaseChar}`] as const;
799
832
 
800
833
  errors.push({
801
- "errorMessage": <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
802
- "errorMessageStr": msgStr(...msgArgs),
803
- "fieldIndex": undefined,
804
- "source": {
805
- "type": "passwordPolicy",
806
- "name": policyName
834
+ errorMessage: <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
835
+ errorMessageStr: msgStr(...msgArgs),
836
+ fieldIndex: undefined,
837
+ source: {
838
+ type: "passwordPolicy",
839
+ name: policyName
807
840
  }
808
841
  });
809
842
  }
@@ -813,7 +846,7 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
813
846
 
814
847
  const policy = passwordPolicies[policyName];
815
848
 
816
- if (policy === undefined) {
849
+ if (!policy) {
817
850
  break check_password_policy_x;
818
851
  }
819
852
 
@@ -828,12 +861,12 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
828
861
  const msgArgs = ["invalidPasswordMinUpperCaseCharsMessage", `${minNumberOfUpperCaseChar}`] as const;
829
862
 
830
863
  errors.push({
831
- "errorMessage": <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
832
- "errorMessageStr": msgStr(...msgArgs),
833
- "fieldIndex": undefined,
834
- "source": {
835
- "type": "passwordPolicy",
836
- "name": policyName
864
+ errorMessage: <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
865
+ errorMessageStr: msgStr(...msgArgs),
866
+ fieldIndex: undefined,
867
+ source: {
868
+ type: "passwordPolicy",
869
+ name: policyName
837
870
  }
838
871
  });
839
872
  }
@@ -843,7 +876,7 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
843
876
 
844
877
  const policy = passwordPolicies[policyName];
845
878
 
846
- if (policy === undefined) {
879
+ if (!policy) {
847
880
  break check_password_policy_x;
848
881
  }
849
882
 
@@ -856,12 +889,12 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
856
889
  const msgArgs = ["invalidPasswordMinSpecialCharsMessage", `${minNumberOfSpecialChar}`] as const;
857
890
 
858
891
  errors.push({
859
- "errorMessage": <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
860
- "errorMessageStr": msgStr(...msgArgs),
861
- "fieldIndex": undefined,
862
- "source": {
863
- "type": "passwordPolicy",
864
- "name": policyName
892
+ errorMessage: <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
893
+ errorMessageStr: msgStr(...msgArgs),
894
+ fieldIndex: undefined,
895
+ source: {
896
+ type: "passwordPolicy",
897
+ name: policyName
865
898
  }
866
899
  });
867
900
  }
@@ -877,7 +910,7 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
877
910
 
878
911
  const usernameFormFieldState = formFieldStates.find(formFieldState => formFieldState.attribute.name === "username");
879
912
 
880
- if (usernameFormFieldState === undefined) {
913
+ if (!usernameFormFieldState) {
881
914
  break check_password_policy_x;
882
915
  }
883
916
 
@@ -889,7 +922,7 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
889
922
  unFormat_number: {
890
923
  const { kcNumberUnFormat } = attribute.html5DataAnnotations ?? {};
891
924
 
892
- if (kcNumberUnFormat === undefined) {
925
+ if (!kcNumberUnFormat) {
893
926
  break unFormat_number;
894
927
  }
895
928
 
@@ -899,6 +932,10 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
899
932
  return valueOrValues;
900
933
  })();
901
934
 
935
+ if (usernameValue === "") {
936
+ break check_password_policy_x;
937
+ }
938
+
902
939
  if (value !== usernameValue) {
903
940
  break check_password_policy_x;
904
941
  }
@@ -906,12 +943,12 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
906
943
  const msgArgs = ["invalidPasswordNotUsernameMessage"] as const;
907
944
 
908
945
  errors.push({
909
- "errorMessage": <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
910
- "errorMessageStr": msgStr(...msgArgs),
911
- "fieldIndex": undefined,
912
- "source": {
913
- "type": "passwordPolicy",
914
- "name": policyName
946
+ errorMessage: <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
947
+ errorMessageStr: msgStr(...msgArgs),
948
+ fieldIndex: undefined,
949
+ source: {
950
+ type: "passwordPolicy",
951
+ name: policyName
915
952
  }
916
953
  });
917
954
  }
@@ -927,7 +964,7 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
927
964
 
928
965
  const emailFormFieldState = formFieldStates.find(formFieldState => formFieldState.attribute.name === "email");
929
966
 
930
- if (emailFormFieldState === undefined) {
967
+ if (!emailFormFieldState) {
931
968
  break check_password_policy_x;
932
969
  }
933
970
 
@@ -936,6 +973,10 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
936
973
  {
937
974
  const emailValue = emailFormFieldState.valueOrValues;
938
975
 
976
+ if (emailValue === "") {
977
+ break check_password_policy_x;
978
+ }
979
+
939
980
  if (value !== emailValue) {
940
981
  break check_password_policy_x;
941
982
  }
@@ -944,12 +985,12 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
944
985
  const msgArgs = ["invalidPasswordNotEmailMessage"] as const;
945
986
 
946
987
  errors.push({
947
- "errorMessage": <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
948
- "errorMessageStr": msgStr(...msgArgs),
949
- "fieldIndex": undefined,
950
- "source": {
951
- "type": "passwordPolicy",
952
- "name": policyName
988
+ errorMessage: <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
989
+ errorMessageStr: msgStr(...msgArgs),
990
+ fieldIndex: undefined,
991
+ source: {
992
+ type: "passwordPolicy",
993
+ name: policyName
953
994
  }
954
995
  });
955
996
  }
@@ -977,12 +1018,12 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
977
1018
  const msgArgs = ["invalidPasswordConfirmMessage"] as const;
978
1019
 
979
1020
  errors.push({
980
- "errorMessage": <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
981
- "errorMessageStr": msgStr(...msgArgs),
982
- "fieldIndex": undefined,
983
- "source": {
984
- "type": "other",
985
- "rule": "passwordConfirmMatchesPassword"
1021
+ errorMessage: <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
1022
+ errorMessageStr: msgStr(...msgArgs),
1023
+ fieldIndex: undefined,
1024
+ source: {
1025
+ type: "other",
1026
+ rule: "passwordConfirmMatchesPassword"
986
1027
  }
987
1028
  });
988
1029
  }
@@ -1001,12 +1042,12 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
1001
1042
  const msgArgs = ["error-user-attribute-required"] as const;
1002
1043
 
1003
1044
  errors.push({
1004
- "errorMessage": <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
1005
- "errorMessageStr": msgStr(...msgArgs),
1006
- "fieldIndex": undefined,
1007
- "source": {
1008
- "type": "other",
1009
- "rule": "requiredField"
1045
+ errorMessage: <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
1046
+ errorMessageStr: msgStr(...msgArgs),
1047
+ fieldIndex: undefined,
1048
+ source: {
1049
+ type: "other",
1050
+ rule: "requiredField"
1010
1051
  }
1011
1052
  });
1012
1053
  }
@@ -1016,7 +1057,7 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
1016
1057
 
1017
1058
  const validator = validators[validatorName];
1018
1059
 
1019
- if (validator === undefined) {
1060
+ if (!validator) {
1020
1061
  break validator_x;
1021
1062
  }
1022
1063
 
@@ -1027,28 +1068,28 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
1027
1068
  }
1028
1069
 
1029
1070
  const source: FormFieldError.Source = {
1030
- "type": "validator",
1031
- "name": validatorName
1071
+ type: "validator",
1072
+ name: validatorName
1032
1073
  };
1033
1074
 
1034
- if (max !== undefined && value.length > parseInt(`${max}`)) {
1075
+ if (max && value.length > parseInt(`${max}`)) {
1035
1076
  const msgArgs = ["error-invalid-length-too-long", `${max}`] as const;
1036
1077
 
1037
1078
  errors.push({
1038
- "errorMessage": <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
1039
- "errorMessageStr": msgStr(...msgArgs),
1040
- "fieldIndex": undefined,
1079
+ errorMessage: <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
1080
+ errorMessageStr: msgStr(...msgArgs),
1081
+ fieldIndex: undefined,
1041
1082
  source
1042
1083
  });
1043
1084
  }
1044
1085
 
1045
- if (min !== undefined && value.length < parseInt(`${min}`)) {
1086
+ if (min && value.length < parseInt(`${min}`)) {
1046
1087
  const msgArgs = ["error-invalid-length-too-short", `${min}`] as const;
1047
1088
 
1048
1089
  errors.push({
1049
- "errorMessage": <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
1050
- "errorMessageStr": msgStr(...msgArgs),
1051
- "fieldIndex": undefined,
1090
+ errorMessage: <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
1091
+ errorMessageStr: msgStr(...msgArgs),
1092
+ fieldIndex: undefined,
1052
1093
  source
1053
1094
  });
1054
1095
  }
@@ -1076,12 +1117,12 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
1076
1117
  const msgArgs = [errorMessageKey ?? id<MessageKey>("shouldMatchPattern"), pattern] as const;
1077
1118
 
1078
1119
  errors.push({
1079
- "errorMessage": <Fragment key={`${attributeName}-${errors.length}`}>{advancedMsg(...msgArgs)}</Fragment>,
1080
- "errorMessageStr": advancedMsgStr(...msgArgs),
1081
- "fieldIndex": undefined,
1082
- "source": {
1083
- "type": "validator",
1084
- "name": validatorName
1120
+ errorMessage: <Fragment key={`${attributeName}-${errors.length}`}>{advancedMsg(...msgArgs)}</Fragment>,
1121
+ errorMessageStr: advancedMsgStr(...msgArgs),
1122
+ fieldIndex: undefined,
1123
+ source: {
1124
+ type: "validator",
1125
+ name: validatorName
1085
1126
  }
1086
1127
  });
1087
1128
  }
@@ -1115,12 +1156,12 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
1115
1156
  const msgArgs = [id<MessageKey>("invalidEmailMessage")] as const;
1116
1157
 
1117
1158
  errors.push({
1118
- "errorMessage": <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
1119
- "errorMessageStr": msgStr(...msgArgs),
1120
- "fieldIndex": undefined,
1121
- "source": {
1122
- "type": "validator",
1123
- "name": validatorName
1159
+ errorMessage: <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
1160
+ errorMessageStr: msgStr(...msgArgs),
1161
+ fieldIndex: undefined,
1162
+ source: {
1163
+ type: "validator",
1164
+ name: validatorName
1124
1165
  }
1125
1166
  });
1126
1167
  }
@@ -1143,43 +1184,43 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
1143
1184
  const intValue = parseInt(value);
1144
1185
 
1145
1186
  const source: FormFieldError.Source = {
1146
- "type": "validator",
1147
- "name": validatorName
1187
+ type: "validator",
1188
+ name: validatorName
1148
1189
  };
1149
1190
 
1150
1191
  if (isNaN(intValue)) {
1151
1192
  const msgArgs = ["mustBeAnInteger"] as const;
1152
1193
 
1153
1194
  errors.push({
1154
- "errorMessage": <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
1155
- "errorMessageStr": msgStr(...msgArgs),
1156
- "fieldIndex": undefined,
1195
+ errorMessage: <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
1196
+ errorMessageStr: msgStr(...msgArgs),
1197
+ fieldIndex: undefined,
1157
1198
  source
1158
1199
  });
1159
1200
 
1160
1201
  break validator_x;
1161
1202
  }
1162
1203
 
1163
- if (max !== undefined && intValue > parseInt(`${max}`)) {
1204
+ if (max && intValue > parseInt(`${max}`)) {
1164
1205
  const msgArgs = ["error-number-out-of-range-too-big", `${max}`] as const;
1165
1206
 
1166
1207
  errors.push({
1167
- "errorMessage": <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
1168
- "errorMessageStr": msgStr(...msgArgs),
1169
- "fieldIndex": undefined,
1208
+ errorMessage: <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
1209
+ errorMessageStr: msgStr(...msgArgs),
1210
+ fieldIndex: undefined,
1170
1211
  source
1171
1212
  });
1172
1213
 
1173
1214
  break validator_x;
1174
1215
  }
1175
1216
 
1176
- if (min !== undefined && intValue < parseInt(`${min}`)) {
1217
+ if (min && intValue < parseInt(`${min}`)) {
1177
1218
  const msgArgs = ["error-number-out-of-range-too-small", `${min}`] as const;
1178
1219
 
1179
1220
  errors.push({
1180
- "errorMessage": <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
1181
- "errorMessageStr": msgStr(...msgArgs),
1182
- "fieldIndex": undefined,
1221
+ errorMessage: <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
1222
+ errorMessageStr: msgStr(...msgArgs),
1223
+ fieldIndex: undefined,
1183
1224
  source
1184
1225
  });
1185
1226
 
@@ -1207,12 +1248,12 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
1207
1248
  const msgArgs = [id<MessageKey>("notAValidOption")] as const;
1208
1249
 
1209
1250
  errors.push({
1210
- "errorMessage": <Fragment key={`${attributeName}-${errors.length}`}>{advancedMsg(...msgArgs)}</Fragment>,
1211
- "errorMessageStr": advancedMsgStr(...msgArgs),
1212
- "fieldIndex": undefined,
1213
- "source": {
1214
- "type": "validator",
1215
- "name": validatorName
1251
+ errorMessage: <Fragment key={`${attributeName}-${errors.length}`}>{advancedMsg(...msgArgs)}</Fragment>,
1252
+ errorMessageStr: advancedMsgStr(...msgArgs),
1253
+ fieldIndex: undefined,
1254
+ source: {
1255
+ type: "validator",
1256
+ name: validatorName
1216
1257
  }
1217
1258
  });
1218
1259
  }
@@ -1225,3 +1266,79 @@ function useGetErrors(params: { kcContext: Pick<KcContextLike, "messagesPerField
1225
1266
 
1226
1267
  return { getErrors };
1227
1268
  }
1269
+
1270
+ function getIsMultivaluedSingleField(params: { attribute: Attribute }) {
1271
+ const { attribute } = params;
1272
+
1273
+ return attribute.annotations.inputType?.startsWith("multiselect") ?? false;
1274
+ }
1275
+
1276
+ export function getButtonToDisplayForMultivaluedAttributeField(params: { attribute: Attribute; values: string[]; fieldIndex: number }) {
1277
+ const { attribute, values, fieldIndex } = params;
1278
+
1279
+ const hasRemove = (() => {
1280
+ if (values.length === 1) {
1281
+ return false;
1282
+ }
1283
+
1284
+ const minCount = (() => {
1285
+ const { multivalued } = attribute.validators;
1286
+
1287
+ if (multivalued === undefined) {
1288
+ return undefined;
1289
+ }
1290
+
1291
+ const minStr = multivalued.min;
1292
+
1293
+ if (minStr === undefined) {
1294
+ return undefined;
1295
+ }
1296
+
1297
+ return parseInt(`${minStr}`);
1298
+ })();
1299
+
1300
+ if (minCount === undefined) {
1301
+ return true;
1302
+ }
1303
+
1304
+ if (values.length === minCount) {
1305
+ return false;
1306
+ }
1307
+
1308
+ return true;
1309
+ })();
1310
+
1311
+ const hasAdd = (() => {
1312
+ if (fieldIndex + 1 !== values.length) {
1313
+ return false;
1314
+ }
1315
+
1316
+ const maxCount = (() => {
1317
+ const { multivalued } = attribute.validators;
1318
+
1319
+ if (multivalued === undefined) {
1320
+ return undefined;
1321
+ }
1322
+
1323
+ const maxStr = multivalued.max;
1324
+
1325
+ if (maxStr === undefined) {
1326
+ return undefined;
1327
+ }
1328
+
1329
+ return parseInt(`${maxStr}`);
1330
+ })();
1331
+
1332
+ if (maxCount === undefined) {
1333
+ return false;
1334
+ }
1335
+
1336
+ if (values.length === maxCount) {
1337
+ return false;
1338
+ }
1339
+
1340
+ return true;
1341
+ })();
1342
+
1343
+ return { hasRemove, hasAdd };
1344
+ }