keycloakify 10.0.0-rc.13 → 10.0.0-rc.130

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