keycloakify 10.0.0-rc.108 → 10.0.0-rc.109

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 (333) hide show
  1. package/account/KcContext/KcContext.d.ts +4 -1
  2. package/account/KcContext/KcContext.js.map +1 -1
  3. package/account/KcContext/kcContextMocks.js +4 -1
  4. package/account/KcContext/kcContextMocks.js.map +1 -1
  5. package/account/i18n/GenericI18n.d.ts +6 -0
  6. package/account/i18n/GenericI18n.js +2 -0
  7. package/account/i18n/GenericI18n.js.map +1 -0
  8. package/account/i18n/i18n.d.ts +24 -30
  9. package/account/i18n/i18n.js +47 -67
  10. package/account/i18n/i18n.js.map +1 -1
  11. package/account/i18n/index.d.ts +4 -3
  12. package/account/i18n/index.js.map +1 -1
  13. package/account/i18n/messages_defaultSet/ar.js.map +1 -0
  14. package/account/i18n/messages_defaultSet/ca.js.map +1 -0
  15. package/account/i18n/messages_defaultSet/cs.js.map +1 -0
  16. package/account/i18n/messages_defaultSet/da.js.map +1 -0
  17. package/account/i18n/messages_defaultSet/de.js.map +1 -0
  18. package/account/i18n/messages_defaultSet/el.js.map +1 -0
  19. package/account/i18n/messages_defaultSet/en.js.map +1 -0
  20. package/account/i18n/messages_defaultSet/es.js.map +1 -0
  21. package/account/i18n/messages_defaultSet/fa.js.map +1 -0
  22. package/account/i18n/messages_defaultSet/fi.js.map +1 -0
  23. package/account/i18n/messages_defaultSet/fr.js.map +1 -0
  24. package/account/i18n/messages_defaultSet/hu.js.map +1 -0
  25. package/account/i18n/{baseMessages → messages_defaultSet}/index.d.ts +1 -1
  26. package/account/i18n/{baseMessages → messages_defaultSet}/index.js +3 -3
  27. package/account/i18n/messages_defaultSet/index.js.map +1 -0
  28. package/account/i18n/messages_defaultSet/it.js.map +1 -0
  29. package/account/i18n/messages_defaultSet/ja.js.map +1 -0
  30. package/account/i18n/messages_defaultSet/lt.js.map +1 -0
  31. package/account/i18n/messages_defaultSet/lv.js.map +1 -0
  32. package/account/i18n/messages_defaultSet/nl.js.map +1 -0
  33. package/account/i18n/messages_defaultSet/no.js.map +1 -0
  34. package/account/i18n/messages_defaultSet/pl.js.map +1 -0
  35. package/account/i18n/messages_defaultSet/pt-BR.js.map +1 -0
  36. package/account/i18n/messages_defaultSet/ru.js.map +1 -0
  37. package/account/i18n/messages_defaultSet/sk.js.map +1 -0
  38. package/account/i18n/messages_defaultSet/sv.js.map +1 -0
  39. package/account/i18n/messages_defaultSet/th.js.map +1 -0
  40. package/account/i18n/messages_defaultSet/tr.js.map +1 -0
  41. package/account/i18n/messages_defaultSet/uk.js.map +1 -0
  42. package/account/i18n/messages_defaultSet/zh-CN.js.map +1 -0
  43. package/account/i18n/useI18n.d.ts +6 -5
  44. package/account/i18n/useI18n.js +24 -2
  45. package/account/i18n/useI18n.js.map +1 -1
  46. package/bin/440.index.js +1 -1
  47. package/login/KcContext/KcContext.d.ts +1 -0
  48. package/login/KcContext/KcContext.js.map +1 -1
  49. package/login/i18n/GenericI18n.d.ts +6 -0
  50. package/login/i18n/GenericI18n.js +2 -0
  51. package/login/i18n/GenericI18n.js.map +1 -0
  52. package/login/i18n/i18n.d.ts +21 -30
  53. package/login/i18n/i18n.js +44 -93
  54. package/login/i18n/i18n.js.map +1 -1
  55. package/login/i18n/index.d.ts +4 -3
  56. package/login/i18n/index.js.map +1 -1
  57. package/login/i18n/messages_defaultSet/ar.js.map +1 -0
  58. package/login/i18n/messages_defaultSet/ca.js.map +1 -0
  59. package/login/i18n/messages_defaultSet/cs.js.map +1 -0
  60. package/login/i18n/messages_defaultSet/da.js.map +1 -0
  61. package/login/i18n/messages_defaultSet/de.js.map +1 -0
  62. package/login/i18n/messages_defaultSet/el.js.map +1 -0
  63. package/login/i18n/messages_defaultSet/en.js.map +1 -0
  64. package/login/i18n/messages_defaultSet/es.js.map +1 -0
  65. package/login/i18n/messages_defaultSet/fa.js.map +1 -0
  66. package/login/i18n/messages_defaultSet/fi.js.map +1 -0
  67. package/login/i18n/messages_defaultSet/fr.js.map +1 -0
  68. package/login/i18n/messages_defaultSet/hu.js.map +1 -0
  69. package/login/i18n/{baseMessages → messages_defaultSet}/index.d.ts +1 -1
  70. package/login/i18n/{baseMessages → messages_defaultSet}/index.js +3 -3
  71. package/login/i18n/messages_defaultSet/index.js.map +1 -0
  72. package/login/i18n/messages_defaultSet/it.js.map +1 -0
  73. package/login/i18n/messages_defaultSet/ja.js.map +1 -0
  74. package/login/i18n/messages_defaultSet/lt.js.map +1 -0
  75. package/login/i18n/messages_defaultSet/lv.js.map +1 -0
  76. package/login/i18n/messages_defaultSet/nl.js.map +1 -0
  77. package/login/i18n/messages_defaultSet/no.js.map +1 -0
  78. package/login/i18n/messages_defaultSet/pl.js.map +1 -0
  79. package/login/i18n/messages_defaultSet/pt-BR.js.map +1 -0
  80. package/login/i18n/messages_defaultSet/ru.js.map +1 -0
  81. package/login/i18n/messages_defaultSet/sk.js.map +1 -0
  82. package/login/i18n/messages_defaultSet/sv.js.map +1 -0
  83. package/login/i18n/messages_defaultSet/th.js.map +1 -0
  84. package/login/i18n/messages_defaultSet/tr.js.map +1 -0
  85. package/login/i18n/messages_defaultSet/uk.js.map +1 -0
  86. package/login/i18n/messages_defaultSet/zh-CN.js.map +1 -0
  87. package/login/i18n/useI18n.d.ts +6 -5
  88. package/login/i18n/useI18n.js +33 -2
  89. package/login/i18n/useI18n.js.map +1 -1
  90. package/login/lib/useUserProfileForm.js +4 -3
  91. package/login/lib/useUserProfileForm.js.map +1 -1
  92. package/login/pages/Info.js +1 -1
  93. package/login/pages/Info.js.map +1 -1
  94. package/package.json +235 -227
  95. package/src/account/KcContext/KcContext.ts +4 -1
  96. package/src/account/KcContext/kcContextMocks.ts +4 -1
  97. package/src/account/i18n/GenericI18n.tsx +6 -0
  98. package/src/account/i18n/i18n.tsx +88 -126
  99. package/src/account/i18n/index.ts +4 -3
  100. package/src/account/i18n/{baseMessages → messages_defaultSet}/index.ts +3 -3
  101. package/src/account/i18n/useI18n.tsx +81 -0
  102. package/src/bin/keycloakify/generateFtl/kcContextDeclarationTemplate.ftl +100 -88
  103. package/src/bin/keycloakify/generateResources/generateMessageProperties.ts +1 -1
  104. package/src/login/KcContext/KcContext.ts +1 -0
  105. package/src/login/i18n/GenericI18n.tsx +6 -0
  106. package/src/login/i18n/i18n.tsx +82 -165
  107. package/src/login/i18n/index.ts +4 -3
  108. package/src/login/i18n/{baseMessages → messages_defaultSet}/index.ts +3 -3
  109. package/src/login/i18n/useI18n.tsx +90 -0
  110. package/src/login/lib/useUserProfileForm.tsx +13 -12
  111. package/src/login/pages/Info.tsx +1 -1
  112. package/stories/login/pages/Register.stories.tsx +6 -6
  113. package/stories/login/pages/SelectAuthenticator.stories.tsx +19 -4
  114. package/account/i18n/baseMessages/ar.js.map +0 -1
  115. package/account/i18n/baseMessages/ca.js.map +0 -1
  116. package/account/i18n/baseMessages/cs.js.map +0 -1
  117. package/account/i18n/baseMessages/da.js.map +0 -1
  118. package/account/i18n/baseMessages/de.js.map +0 -1
  119. package/account/i18n/baseMessages/el.js.map +0 -1
  120. package/account/i18n/baseMessages/en.js.map +0 -1
  121. package/account/i18n/baseMessages/es.js.map +0 -1
  122. package/account/i18n/baseMessages/fa.js.map +0 -1
  123. package/account/i18n/baseMessages/fi.js.map +0 -1
  124. package/account/i18n/baseMessages/fr.js.map +0 -1
  125. package/account/i18n/baseMessages/hu.js.map +0 -1
  126. package/account/i18n/baseMessages/index.js.map +0 -1
  127. package/account/i18n/baseMessages/it.js.map +0 -1
  128. package/account/i18n/baseMessages/ja.js.map +0 -1
  129. package/account/i18n/baseMessages/lt.js.map +0 -1
  130. package/account/i18n/baseMessages/lv.js.map +0 -1
  131. package/account/i18n/baseMessages/nl.js.map +0 -1
  132. package/account/i18n/baseMessages/no.js.map +0 -1
  133. package/account/i18n/baseMessages/pl.js.map +0 -1
  134. package/account/i18n/baseMessages/pt-BR.js.map +0 -1
  135. package/account/i18n/baseMessages/ru.js.map +0 -1
  136. package/account/i18n/baseMessages/sk.js.map +0 -1
  137. package/account/i18n/baseMessages/sv.js.map +0 -1
  138. package/account/i18n/baseMessages/th.js.map +0 -1
  139. package/account/i18n/baseMessages/tr.js.map +0 -1
  140. package/account/i18n/baseMessages/uk.js.map +0 -1
  141. package/account/i18n/baseMessages/zh-CN.js.map +0 -1
  142. package/login/i18n/baseMessages/ar.js.map +0 -1
  143. package/login/i18n/baseMessages/ca.js.map +0 -1
  144. package/login/i18n/baseMessages/cs.js.map +0 -1
  145. package/login/i18n/baseMessages/da.js.map +0 -1
  146. package/login/i18n/baseMessages/de.js.map +0 -1
  147. package/login/i18n/baseMessages/el.js.map +0 -1
  148. package/login/i18n/baseMessages/en.js.map +0 -1
  149. package/login/i18n/baseMessages/es.js.map +0 -1
  150. package/login/i18n/baseMessages/fa.js.map +0 -1
  151. package/login/i18n/baseMessages/fi.js.map +0 -1
  152. package/login/i18n/baseMessages/fr.js.map +0 -1
  153. package/login/i18n/baseMessages/hu.js.map +0 -1
  154. package/login/i18n/baseMessages/index.js.map +0 -1
  155. package/login/i18n/baseMessages/it.js.map +0 -1
  156. package/login/i18n/baseMessages/ja.js.map +0 -1
  157. package/login/i18n/baseMessages/lt.js.map +0 -1
  158. package/login/i18n/baseMessages/lv.js.map +0 -1
  159. package/login/i18n/baseMessages/nl.js.map +0 -1
  160. package/login/i18n/baseMessages/no.js.map +0 -1
  161. package/login/i18n/baseMessages/pl.js.map +0 -1
  162. package/login/i18n/baseMessages/pt-BR.js.map +0 -1
  163. package/login/i18n/baseMessages/ru.js.map +0 -1
  164. package/login/i18n/baseMessages/sk.js.map +0 -1
  165. package/login/i18n/baseMessages/sv.js.map +0 -1
  166. package/login/i18n/baseMessages/th.js.map +0 -1
  167. package/login/i18n/baseMessages/tr.js.map +0 -1
  168. package/login/i18n/baseMessages/uk.js.map +0 -1
  169. package/login/i18n/baseMessages/zh-CN.js.map +0 -1
  170. package/src/account/i18n/useI18n.ts +0 -44
  171. package/src/login/i18n/useI18n.ts +0 -44
  172. /package/account/i18n/{baseMessages → messages_defaultSet}/ar.d.ts +0 -0
  173. /package/account/i18n/{baseMessages → messages_defaultSet}/ar.js +0 -0
  174. /package/account/i18n/{baseMessages → messages_defaultSet}/ca.d.ts +0 -0
  175. /package/account/i18n/{baseMessages → messages_defaultSet}/ca.js +0 -0
  176. /package/account/i18n/{baseMessages → messages_defaultSet}/cs.d.ts +0 -0
  177. /package/account/i18n/{baseMessages → messages_defaultSet}/cs.js +0 -0
  178. /package/account/i18n/{baseMessages → messages_defaultSet}/da.d.ts +0 -0
  179. /package/account/i18n/{baseMessages → messages_defaultSet}/da.js +0 -0
  180. /package/account/i18n/{baseMessages → messages_defaultSet}/de.d.ts +0 -0
  181. /package/account/i18n/{baseMessages → messages_defaultSet}/de.js +0 -0
  182. /package/account/i18n/{baseMessages → messages_defaultSet}/el.d.ts +0 -0
  183. /package/account/i18n/{baseMessages → messages_defaultSet}/el.js +0 -0
  184. /package/account/i18n/{baseMessages → messages_defaultSet}/en.d.ts +0 -0
  185. /package/account/i18n/{baseMessages → messages_defaultSet}/en.js +0 -0
  186. /package/account/i18n/{baseMessages → messages_defaultSet}/es.d.ts +0 -0
  187. /package/account/i18n/{baseMessages → messages_defaultSet}/es.js +0 -0
  188. /package/account/i18n/{baseMessages → messages_defaultSet}/fa.d.ts +0 -0
  189. /package/account/i18n/{baseMessages → messages_defaultSet}/fa.js +0 -0
  190. /package/account/i18n/{baseMessages → messages_defaultSet}/fi.d.ts +0 -0
  191. /package/account/i18n/{baseMessages → messages_defaultSet}/fi.js +0 -0
  192. /package/account/i18n/{baseMessages → messages_defaultSet}/fr.d.ts +0 -0
  193. /package/account/i18n/{baseMessages → messages_defaultSet}/fr.js +0 -0
  194. /package/account/i18n/{baseMessages → messages_defaultSet}/hu.d.ts +0 -0
  195. /package/account/i18n/{baseMessages → messages_defaultSet}/hu.js +0 -0
  196. /package/account/i18n/{baseMessages → messages_defaultSet}/it.d.ts +0 -0
  197. /package/account/i18n/{baseMessages → messages_defaultSet}/it.js +0 -0
  198. /package/account/i18n/{baseMessages → messages_defaultSet}/ja.d.ts +0 -0
  199. /package/account/i18n/{baseMessages → messages_defaultSet}/ja.js +0 -0
  200. /package/account/i18n/{baseMessages → messages_defaultSet}/lt.d.ts +0 -0
  201. /package/account/i18n/{baseMessages → messages_defaultSet}/lt.js +0 -0
  202. /package/account/i18n/{baseMessages → messages_defaultSet}/lv.d.ts +0 -0
  203. /package/account/i18n/{baseMessages → messages_defaultSet}/lv.js +0 -0
  204. /package/account/i18n/{baseMessages → messages_defaultSet}/nl.d.ts +0 -0
  205. /package/account/i18n/{baseMessages → messages_defaultSet}/nl.js +0 -0
  206. /package/account/i18n/{baseMessages → messages_defaultSet}/no.d.ts +0 -0
  207. /package/account/i18n/{baseMessages → messages_defaultSet}/no.js +0 -0
  208. /package/account/i18n/{baseMessages → messages_defaultSet}/pl.d.ts +0 -0
  209. /package/account/i18n/{baseMessages → messages_defaultSet}/pl.js +0 -0
  210. /package/account/i18n/{baseMessages → messages_defaultSet}/pt-BR.d.ts +0 -0
  211. /package/account/i18n/{baseMessages → messages_defaultSet}/pt-BR.js +0 -0
  212. /package/account/i18n/{baseMessages → messages_defaultSet}/ru.d.ts +0 -0
  213. /package/account/i18n/{baseMessages → messages_defaultSet}/ru.js +0 -0
  214. /package/account/i18n/{baseMessages → messages_defaultSet}/sk.d.ts +0 -0
  215. /package/account/i18n/{baseMessages → messages_defaultSet}/sk.js +0 -0
  216. /package/account/i18n/{baseMessages → messages_defaultSet}/sv.d.ts +0 -0
  217. /package/account/i18n/{baseMessages → messages_defaultSet}/sv.js +0 -0
  218. /package/account/i18n/{baseMessages → messages_defaultSet}/th.d.ts +0 -0
  219. /package/account/i18n/{baseMessages → messages_defaultSet}/th.js +0 -0
  220. /package/account/i18n/{baseMessages → messages_defaultSet}/tr.d.ts +0 -0
  221. /package/account/i18n/{baseMessages → messages_defaultSet}/tr.js +0 -0
  222. /package/account/i18n/{baseMessages → messages_defaultSet}/uk.d.ts +0 -0
  223. /package/account/i18n/{baseMessages → messages_defaultSet}/uk.js +0 -0
  224. /package/account/i18n/{baseMessages → messages_defaultSet}/zh-CN.d.ts +0 -0
  225. /package/account/i18n/{baseMessages → messages_defaultSet}/zh-CN.js +0 -0
  226. /package/login/i18n/{baseMessages → messages_defaultSet}/ar.d.ts +0 -0
  227. /package/login/i18n/{baseMessages → messages_defaultSet}/ar.js +0 -0
  228. /package/login/i18n/{baseMessages → messages_defaultSet}/ca.d.ts +0 -0
  229. /package/login/i18n/{baseMessages → messages_defaultSet}/ca.js +0 -0
  230. /package/login/i18n/{baseMessages → messages_defaultSet}/cs.d.ts +0 -0
  231. /package/login/i18n/{baseMessages → messages_defaultSet}/cs.js +0 -0
  232. /package/login/i18n/{baseMessages → messages_defaultSet}/da.d.ts +0 -0
  233. /package/login/i18n/{baseMessages → messages_defaultSet}/da.js +0 -0
  234. /package/login/i18n/{baseMessages → messages_defaultSet}/de.d.ts +0 -0
  235. /package/login/i18n/{baseMessages → messages_defaultSet}/de.js +0 -0
  236. /package/login/i18n/{baseMessages → messages_defaultSet}/el.d.ts +0 -0
  237. /package/login/i18n/{baseMessages → messages_defaultSet}/el.js +0 -0
  238. /package/login/i18n/{baseMessages → messages_defaultSet}/en.d.ts +0 -0
  239. /package/login/i18n/{baseMessages → messages_defaultSet}/en.js +0 -0
  240. /package/login/i18n/{baseMessages → messages_defaultSet}/es.d.ts +0 -0
  241. /package/login/i18n/{baseMessages → messages_defaultSet}/es.js +0 -0
  242. /package/login/i18n/{baseMessages → messages_defaultSet}/fa.d.ts +0 -0
  243. /package/login/i18n/{baseMessages → messages_defaultSet}/fa.js +0 -0
  244. /package/login/i18n/{baseMessages → messages_defaultSet}/fi.d.ts +0 -0
  245. /package/login/i18n/{baseMessages → messages_defaultSet}/fi.js +0 -0
  246. /package/login/i18n/{baseMessages → messages_defaultSet}/fr.d.ts +0 -0
  247. /package/login/i18n/{baseMessages → messages_defaultSet}/fr.js +0 -0
  248. /package/login/i18n/{baseMessages → messages_defaultSet}/hu.d.ts +0 -0
  249. /package/login/i18n/{baseMessages → messages_defaultSet}/hu.js +0 -0
  250. /package/login/i18n/{baseMessages → messages_defaultSet}/it.d.ts +0 -0
  251. /package/login/i18n/{baseMessages → messages_defaultSet}/it.js +0 -0
  252. /package/login/i18n/{baseMessages → messages_defaultSet}/ja.d.ts +0 -0
  253. /package/login/i18n/{baseMessages → messages_defaultSet}/ja.js +0 -0
  254. /package/login/i18n/{baseMessages → messages_defaultSet}/lt.d.ts +0 -0
  255. /package/login/i18n/{baseMessages → messages_defaultSet}/lt.js +0 -0
  256. /package/login/i18n/{baseMessages → messages_defaultSet}/lv.d.ts +0 -0
  257. /package/login/i18n/{baseMessages → messages_defaultSet}/lv.js +0 -0
  258. /package/login/i18n/{baseMessages → messages_defaultSet}/nl.d.ts +0 -0
  259. /package/login/i18n/{baseMessages → messages_defaultSet}/nl.js +0 -0
  260. /package/login/i18n/{baseMessages → messages_defaultSet}/no.d.ts +0 -0
  261. /package/login/i18n/{baseMessages → messages_defaultSet}/no.js +0 -0
  262. /package/login/i18n/{baseMessages → messages_defaultSet}/pl.d.ts +0 -0
  263. /package/login/i18n/{baseMessages → messages_defaultSet}/pl.js +0 -0
  264. /package/login/i18n/{baseMessages → messages_defaultSet}/pt-BR.d.ts +0 -0
  265. /package/login/i18n/{baseMessages → messages_defaultSet}/pt-BR.js +0 -0
  266. /package/login/i18n/{baseMessages → messages_defaultSet}/ru.d.ts +0 -0
  267. /package/login/i18n/{baseMessages → messages_defaultSet}/ru.js +0 -0
  268. /package/login/i18n/{baseMessages → messages_defaultSet}/sk.d.ts +0 -0
  269. /package/login/i18n/{baseMessages → messages_defaultSet}/sk.js +0 -0
  270. /package/login/i18n/{baseMessages → messages_defaultSet}/sv.d.ts +0 -0
  271. /package/login/i18n/{baseMessages → messages_defaultSet}/sv.js +0 -0
  272. /package/login/i18n/{baseMessages → messages_defaultSet}/th.d.ts +0 -0
  273. /package/login/i18n/{baseMessages → messages_defaultSet}/th.js +0 -0
  274. /package/login/i18n/{baseMessages → messages_defaultSet}/tr.d.ts +0 -0
  275. /package/login/i18n/{baseMessages → messages_defaultSet}/tr.js +0 -0
  276. /package/login/i18n/{baseMessages → messages_defaultSet}/uk.d.ts +0 -0
  277. /package/login/i18n/{baseMessages → messages_defaultSet}/uk.js +0 -0
  278. /package/login/i18n/{baseMessages → messages_defaultSet}/zh-CN.d.ts +0 -0
  279. /package/login/i18n/{baseMessages → messages_defaultSet}/zh-CN.js +0 -0
  280. /package/src/account/i18n/{baseMessages → messages_defaultSet}/ar.ts +0 -0
  281. /package/src/account/i18n/{baseMessages → messages_defaultSet}/ca.ts +0 -0
  282. /package/src/account/i18n/{baseMessages → messages_defaultSet}/cs.ts +0 -0
  283. /package/src/account/i18n/{baseMessages → messages_defaultSet}/da.ts +0 -0
  284. /package/src/account/i18n/{baseMessages → messages_defaultSet}/de.ts +0 -0
  285. /package/src/account/i18n/{baseMessages → messages_defaultSet}/el.ts +0 -0
  286. /package/src/account/i18n/{baseMessages → messages_defaultSet}/en.ts +0 -0
  287. /package/src/account/i18n/{baseMessages → messages_defaultSet}/es.ts +0 -0
  288. /package/src/account/i18n/{baseMessages → messages_defaultSet}/fa.ts +0 -0
  289. /package/src/account/i18n/{baseMessages → messages_defaultSet}/fi.ts +0 -0
  290. /package/src/account/i18n/{baseMessages → messages_defaultSet}/fr.ts +0 -0
  291. /package/src/account/i18n/{baseMessages → messages_defaultSet}/hu.ts +0 -0
  292. /package/src/account/i18n/{baseMessages → messages_defaultSet}/it.ts +0 -0
  293. /package/src/account/i18n/{baseMessages → messages_defaultSet}/ja.ts +0 -0
  294. /package/src/account/i18n/{baseMessages → messages_defaultSet}/lt.ts +0 -0
  295. /package/src/account/i18n/{baseMessages → messages_defaultSet}/lv.ts +0 -0
  296. /package/src/account/i18n/{baseMessages → messages_defaultSet}/nl.ts +0 -0
  297. /package/src/account/i18n/{baseMessages → messages_defaultSet}/no.ts +0 -0
  298. /package/src/account/i18n/{baseMessages → messages_defaultSet}/pl.ts +0 -0
  299. /package/src/account/i18n/{baseMessages → messages_defaultSet}/pt-BR.ts +0 -0
  300. /package/src/account/i18n/{baseMessages → messages_defaultSet}/ru.ts +0 -0
  301. /package/src/account/i18n/{baseMessages → messages_defaultSet}/sk.ts +0 -0
  302. /package/src/account/i18n/{baseMessages → messages_defaultSet}/sv.ts +0 -0
  303. /package/src/account/i18n/{baseMessages → messages_defaultSet}/th.ts +0 -0
  304. /package/src/account/i18n/{baseMessages → messages_defaultSet}/tr.ts +0 -0
  305. /package/src/account/i18n/{baseMessages → messages_defaultSet}/uk.ts +0 -0
  306. /package/src/account/i18n/{baseMessages → messages_defaultSet}/zh-CN.ts +0 -0
  307. /package/src/login/i18n/{baseMessages → messages_defaultSet}/ar.ts +0 -0
  308. /package/src/login/i18n/{baseMessages → messages_defaultSet}/ca.ts +0 -0
  309. /package/src/login/i18n/{baseMessages → messages_defaultSet}/cs.ts +0 -0
  310. /package/src/login/i18n/{baseMessages → messages_defaultSet}/da.ts +0 -0
  311. /package/src/login/i18n/{baseMessages → messages_defaultSet}/de.ts +0 -0
  312. /package/src/login/i18n/{baseMessages → messages_defaultSet}/el.ts +0 -0
  313. /package/src/login/i18n/{baseMessages → messages_defaultSet}/en.ts +0 -0
  314. /package/src/login/i18n/{baseMessages → messages_defaultSet}/es.ts +0 -0
  315. /package/src/login/i18n/{baseMessages → messages_defaultSet}/fa.ts +0 -0
  316. /package/src/login/i18n/{baseMessages → messages_defaultSet}/fi.ts +0 -0
  317. /package/src/login/i18n/{baseMessages → messages_defaultSet}/fr.ts +0 -0
  318. /package/src/login/i18n/{baseMessages → messages_defaultSet}/hu.ts +0 -0
  319. /package/src/login/i18n/{baseMessages → messages_defaultSet}/it.ts +0 -0
  320. /package/src/login/i18n/{baseMessages → messages_defaultSet}/ja.ts +0 -0
  321. /package/src/login/i18n/{baseMessages → messages_defaultSet}/lt.ts +0 -0
  322. /package/src/login/i18n/{baseMessages → messages_defaultSet}/lv.ts +0 -0
  323. /package/src/login/i18n/{baseMessages → messages_defaultSet}/nl.ts +0 -0
  324. /package/src/login/i18n/{baseMessages → messages_defaultSet}/no.ts +0 -0
  325. /package/src/login/i18n/{baseMessages → messages_defaultSet}/pl.ts +0 -0
  326. /package/src/login/i18n/{baseMessages → messages_defaultSet}/pt-BR.ts +0 -0
  327. /package/src/login/i18n/{baseMessages → messages_defaultSet}/ru.ts +0 -0
  328. /package/src/login/i18n/{baseMessages → messages_defaultSet}/sk.ts +0 -0
  329. /package/src/login/i18n/{baseMessages → messages_defaultSet}/sv.ts +0 -0
  330. /package/src/login/i18n/{baseMessages → messages_defaultSet}/th.ts +0 -0
  331. /package/src/login/i18n/{baseMessages → messages_defaultSet}/tr.ts +0 -0
  332. /package/src/login/i18n/{baseMessages → messages_defaultSet}/uk.ts +0 -0
  333. /package/src/login/i18n/{baseMessages → messages_defaultSet}/zh-CN.ts +0 -0
@@ -1,9 +1,10 @@
1
1
  import "keycloakify/tools/Object.fromEntries";
2
2
  import { assert } from "tsafe/assert";
3
- import messages_fallbackLanguage from "./baseMessages/en";
4
- import { getMessages } from "./baseMessages";
3
+ import messages_defaultSet_fallbackLanguage from "./messages_defaultSet/en";
4
+ import { fetchMessages_defaultSet } from "./messages_defaultSet";
5
5
  import type { KcContext } from "../KcContext";
6
6
  import { fallbackLanguageTag } from "keycloakify/bin/shared/constants";
7
+ import { id } from "tsafe/id";
7
8
 
8
9
  export type KcContextLike = {
9
10
  locale?: {
@@ -17,9 +18,7 @@ export type KcContextLike = {
17
18
 
18
19
  assert<KcContext extends KcContextLike ? true : false>();
19
20
 
20
- export type MessageKey = keyof typeof messages_fallbackLanguage;
21
-
22
- export type GenericI18n<MessageKey extends string> = {
21
+ export type GenericI18n_noJsx<MessageKey extends string> = {
23
22
  /**
24
23
  * e.g: "en", "fr", "zh-CN"
25
24
  *
@@ -39,16 +38,21 @@ export type GenericI18n<MessageKey extends string> = {
39
38
  * */
40
39
  labelBySupportedLanguageTag: Record<string, string>;
41
40
  /**
41
+ *
42
42
  * Examples assuming currentLanguageTag === "en"
43
+ * {
44
+ * en: {
45
+ * "access-denied": "Access denied",
46
+ * "impersonateTitleHtml": "<strong>{0}</strong> Impersonate User",
47
+ * "bar": "Bar {0}"
48
+ * }
49
+ * }
43
50
  *
44
- * msg("access-denied") === <span>Access denied</span>
45
- * msg("impersonateTitleHtml", "Foo") === <span><strong>Foo</strong> Impersonate User</span>
46
- */
47
- msg: (key: MessageKey, ...args: (string | undefined)[]) => JSX.Element;
48
- /**
49
- * It's the same thing as msg() but instead of returning a JSX.Element it returns a string.
50
- * It can be more convenient to manipulate strings but if there are HTML tags it wont render.
51
+ * msgStr("access-denied") === "Access denied"
52
+ * msgStr("not-a-message-key") Throws an error
51
53
  * msgStr("impersonateTitleHtml", "Foo") === "<strong>Foo</strong> Impersonate User"
54
+ * msgStr("${bar}", "<strong>c</strong>") === "Bar &lt;strong&gt;XXX&lt;/strong&gt;"
55
+ * The html in the arg is partially escaped for security reasons, it might come from an untrusted source, it's not safe to render it as html.
52
56
  */
53
57
  msgStr: (key: MessageKey, ...args: (string | undefined)[]) => string;
54
58
  /**
@@ -59,24 +63,11 @@ export type GenericI18n<MessageKey extends string> = {
59
63
  * {
60
64
  * en: {
61
65
  * "access-denied": "Access denied",
62
- * "foo": "Foo {0} {1}",
63
- * "bar": "Bar {0}"
64
66
  * }
65
67
  * }
66
68
  *
67
- * advancedMsg("${access-denied} foo bar") === <span>{msgStr("access-denied")} foo bar<span> === <span>Access denied foo bar</span>
68
- * advancedMsg("${access-denied}") === advancedMsg("access-denied") === msg("access-denied") === <span>Access denied</span>
69
- * advancedMsg("${not-a-message-key}") === advancedMsg(not-a-message-key") === <span>not-a-message-key</span>
70
- * advancedMsg("${bar}", "<strong>c</strong>")
71
- * === <span>{msgStr("bar", "<strong>XXX</strong>")}<span>
72
- * === <span>Bar &lt;strong&gt;XXX&lt;/strong&gt;</span> (The html in the arg is partially escaped for security reasons, it might be untrusted)
73
- * advancedMsg("${foo} xx ${bar}", "a", "b", "c")
74
- * === <span>{msgStr("foo", "a", "b")} xx {msgStr("bar")}<span>
75
- * === <span>Foo a b xx Bar {0}</span> (The substitution are only applied in the first message)
76
- */
77
- advancedMsg: (key: string, ...args: (string | undefined)[]) => JSX.Element;
78
- /**
79
- * See advancedMsg() but instead of returning a JSX.Element it returns a string.
69
+ * advancedMsgStr("${access-denied}") === advancedMsgStr("access-denied") === msgStr("access-denied") === "Access denied"
70
+ * advancedMsgStr("${not-a-message-key}") === advancedMsgStr("not-a-message-key") === "not-a-message-key"
80
71
  */
81
72
  advancedMsgStr: (key: string, ...args: (string | undefined)[]) => string;
82
73
 
@@ -88,10 +79,12 @@ export type GenericI18n<MessageKey extends string> = {
88
79
  isFetchingTranslations: boolean;
89
80
  };
90
81
 
91
- export function createGetI18n<ExtraMessageKey extends string = never>(messageBundle: {
92
- [languageTag: string]: { [key in ExtraMessageKey]: string };
82
+ export type MessageKey_defaultSet = keyof typeof messages_defaultSet_fallbackLanguage;
83
+
84
+ export function createGetI18n<MessageKey_themeDefined extends string = never>(messagesByLanguageTag_themeDefined: {
85
+ [languageTag: string]: { [key in MessageKey_themeDefined]: string };
93
86
  }) {
94
- type I18n = GenericI18n<MessageKey | ExtraMessageKey>;
87
+ type I18n = GenericI18n_noJsx<MessageKey_defaultSet | MessageKey_themeDefined>;
95
88
 
96
89
  type Result = { i18n: I18n; prI18n_currentLanguage: Promise<I18n> | undefined };
97
90
 
@@ -126,11 +119,18 @@ export function createGetI18n<ExtraMessageKey extends string = never>(messageBun
126
119
  labelBySupportedLanguageTag: Object.fromEntries((kcContext.locale?.supported ?? []).map(({ languageTag, label }) => [languageTag, label]))
127
120
  };
128
121
 
129
- const { createI18nTranslationFunctions } = createI18nTranslationFunctionsFactory<MessageKey, ExtraMessageKey>({
130
- messages_fallbackLanguage,
131
- messageBundle_fallbackLanguage: messageBundle[fallbackLanguageTag],
132
- messageBundle_currentLanguage: messageBundle[partialI18n.currentLanguageTag],
133
- messageBundle_realm: kcContext["x-keycloakify"].messages
122
+ const { createI18nTranslationFunctions } = createI18nTranslationFunctionsFactory<MessageKey_themeDefined>({
123
+ messages_themeDefined:
124
+ messagesByLanguageTag_themeDefined[partialI18n.currentLanguageTag] ??
125
+ messagesByLanguageTag_themeDefined[fallbackLanguageTag] ??
126
+ (() => {
127
+ const firstLanguageTag = Object.keys(messagesByLanguageTag_themeDefined)[0];
128
+ if (firstLanguageTag === undefined) {
129
+ return undefined;
130
+ }
131
+ return messagesByLanguageTag_themeDefined[firstLanguageTag];
132
+ })(),
133
+ messages_fromKcServer: kcContext["x-keycloakify"].messages
134
134
  });
135
135
 
136
136
  const isCurrentLanguageFallbackLanguage = partialI18n.currentLanguageTag === fallbackLanguageTag;
@@ -139,18 +139,18 @@ export function createGetI18n<ExtraMessageKey extends string = never>(messageBun
139
139
  i18n: {
140
140
  ...partialI18n,
141
141
  ...createI18nTranslationFunctions({
142
- messages_currentLanguage: isCurrentLanguageFallbackLanguage ? messages_fallbackLanguage : undefined
142
+ messages_defaultSet_currentLanguage: isCurrentLanguageFallbackLanguage ? messages_defaultSet_fallbackLanguage : undefined
143
143
  }),
144
144
  isFetchingTranslations: !isCurrentLanguageFallbackLanguage
145
145
  },
146
146
  prI18n_currentLanguage: isCurrentLanguageFallbackLanguage
147
147
  ? undefined
148
148
  : (async () => {
149
- const messages_currentLanguage = await getMessages(partialI18n.currentLanguageTag);
149
+ const messages_defaultSet_currentLanguage = await fetchMessages_defaultSet(partialI18n.currentLanguageTag);
150
150
 
151
151
  const i18n_currentLanguage: I18n = {
152
152
  ...partialI18n,
153
- ...createI18nTranslationFunctions({ messages_currentLanguage }),
153
+ ...createI18nTranslationFunctions({ messages_defaultSet_currentLanguage }),
154
154
  isFetchingTranslations: false
155
155
  };
156
156
 
@@ -173,155 +173,72 @@ export function createGetI18n<ExtraMessageKey extends string = never>(messageBun
173
173
  return { getI18n };
174
174
  }
175
175
 
176
- function createI18nTranslationFunctionsFactory<MessageKey extends string, ExtraMessageKey extends string>(params: {
177
- messages_fallbackLanguage: Record<MessageKey, string>;
178
- messageBundle_fallbackLanguage: Record<ExtraMessageKey, string> | undefined;
179
- messageBundle_currentLanguage: Partial<Record<ExtraMessageKey, string>> | undefined;
180
- messageBundle_realm: Record<string, string>;
176
+ function createI18nTranslationFunctionsFactory<MessageKey_themeDefined extends string>(params: {
177
+ messages_themeDefined: Record<MessageKey_themeDefined, string> | undefined;
178
+ messages_fromKcServer: Record<string, string>;
181
179
  }) {
182
- const { messageBundle_currentLanguage, messageBundle_realm } = params;
183
-
184
- const messages_fallbackLanguage = {
185
- ...params.messages_fallbackLanguage,
186
- ...params.messageBundle_fallbackLanguage
187
- };
180
+ const { messages_themeDefined, messages_fromKcServer } = params;
188
181
 
189
182
  function createI18nTranslationFunctions(params: {
190
- messages_currentLanguage: Partial<Record<MessageKey, string>> | undefined;
191
- }): Pick<GenericI18n<MessageKey | ExtraMessageKey>, "msg" | "msgStr" | "advancedMsg" | "advancedMsgStr"> {
192
- const messages_currentLanguage = {
193
- ...params.messages_currentLanguage,
194
- ...messageBundle_currentLanguage
195
- };
183
+ messages_defaultSet_currentLanguage: Partial<Record<MessageKey_defaultSet, string>> | undefined;
184
+ }): Pick<GenericI18n_noJsx<MessageKey_defaultSet | MessageKey_themeDefined>, "msgStr" | "advancedMsgStr"> {
185
+ const { messages_defaultSet_currentLanguage } = params;
196
186
 
197
- function resolveMsg(props: { key: string; args: (string | undefined)[]; doRenderAsHtml: boolean }): string | JSX.Element | undefined {
198
- const { key, args, doRenderAsHtml } = props;
199
-
200
- const messageOrUndefined: string | undefined = (() => {
201
- terms_text: {
202
- if (key !== "termsText") {
203
- break terms_text;
204
- }
205
- const termsTextMessage = messageBundle_realm[key];
206
-
207
- if (termsTextMessage === undefined) {
208
- break terms_text;
209
- }
210
-
211
- return termsTextMessage;
212
- }
187
+ function resolveMsg(props: { key: string; args: (string | undefined)[] }): string | undefined {
188
+ const { key, args } = props;
213
189
 
214
- const messageOrUndefined = (messages_currentLanguage as any)[key] ?? (messages_fallbackLanguage as any)[key];
190
+ const message =
191
+ id<Record<string, string | undefined>>(messages_fromKcServer)[key] ??
192
+ id<Record<string, string | undefined> | undefined>(messages_themeDefined)?.[key] ??
193
+ id<Record<string, string | undefined> | undefined>(messages_defaultSet_currentLanguage)?.[key] ??
194
+ id<Record<string, string | undefined>>(messages_defaultSet_fallbackLanguage)[key];
215
195
 
216
- return messageOrUndefined;
217
- })();
218
-
219
- if (messageOrUndefined === undefined) {
196
+ if (message === undefined) {
220
197
  return undefined;
221
198
  }
222
199
 
223
- const message = messageOrUndefined;
224
-
225
- const messageWithArgsInjectedIfAny = (() => {
226
- const startIndex = message
227
- .match(/{[0-9]+}/g)
228
- ?.map(g => g.match(/{([0-9]+)}/)![1])
229
- .map(indexStr => parseInt(indexStr))
230
- .sort((a, b) => a - b)[0];
231
-
232
- if (startIndex === undefined) {
233
- // No {0} in message (no arguments expected)
234
- return message;
235
- }
236
-
237
- let messageWithArgsInjected = message;
238
-
239
- args.forEach((arg, i) => {
240
- if (arg === undefined) {
241
- return;
242
- }
243
-
244
- messageWithArgsInjected = messageWithArgsInjected.replace(
245
- new RegExp(`\\{${i + startIndex}\\}`, "g"),
246
- arg.replace(/</g, "&lt;").replace(/>/g, "&gt;")
247
- );
248
- });
249
-
250
- return messageWithArgsInjected;
251
- })();
252
-
253
- return doRenderAsHtml ? (
254
- <span
255
- // NOTE: The message is trusted. The arguments are not but are escaped.
256
- dangerouslySetInnerHTML={{
257
- __html: messageWithArgsInjectedIfAny
258
- }}
259
- />
260
- ) : (
261
- messageWithArgsInjectedIfAny
262
- );
263
- }
200
+ const startIndex = message
201
+ .match(/{[0-9]+}/g)
202
+ ?.map(g => g.match(/{([0-9]+)}/)![1])
203
+ .map(indexStr => parseInt(indexStr))
204
+ .sort((a, b) => a - b)[0];
264
205
 
265
- function resolveMsgAdvanced(props: { key: string; args: (string | undefined)[]; doRenderAsHtml: boolean }): JSX.Element | string {
266
- const { key, args, doRenderAsHtml } = props;
267
-
268
- realm_messages: {
269
- const resolvedMessage = messageBundle_realm[key] ?? messageBundle_realm["${" + key + "}"];
270
-
271
- if (resolvedMessage === undefined) {
272
- break realm_messages;
273
- }
274
-
275
- return doRenderAsHtml ? (
276
- <span
277
- // NOTE: The message is trusted. The arguments are not but are escaped.
278
- dangerouslySetInnerHTML={{
279
- __html: resolvedMessage
280
- }}
281
- />
282
- ) : (
283
- resolvedMessage
284
- );
206
+ if (startIndex === undefined) {
207
+ // No {0} in message (no arguments expected)
208
+ return message;
285
209
  }
286
210
 
287
- if (!/\$\{[^}]+\}/.test(key)) {
288
- const resolvedMessage = resolveMsg({ key, args, doRenderAsHtml });
211
+ let messageWithArgsInjected = message;
289
212
 
290
- if (resolvedMessage === undefined) {
291
- return doRenderAsHtml ? <span dangerouslySetInnerHTML={{ __html: key }} /> : key;
213
+ args.forEach((arg, i) => {
214
+ if (arg === undefined) {
215
+ return;
292
216
  }
293
217
 
294
- return resolvedMessage;
295
- }
296
-
297
- let isFirstMatch = true;
218
+ messageWithArgsInjected = messageWithArgsInjected.replace(
219
+ new RegExp(`\\{${i + startIndex}\\}`, "g"),
220
+ arg.replace(/</g, "&lt;").replace(/>/g, "&gt;")
221
+ );
222
+ });
298
223
 
299
- const resolvedComplexMessage = key.replace(/\$\{([^}]+)\}/g, (...[, key_i]) => {
300
- const replaceBy = resolveMsg({ key: key_i, args: isFirstMatch ? args : [], doRenderAsHtml: false }) ?? key_i;
224
+ return messageWithArgsInjected;
225
+ }
301
226
 
302
- isFirstMatch = false;
227
+ function resolveMsgAdvanced(props: { key: string; args: (string | undefined)[] }): string {
228
+ const { key, args } = props;
303
229
 
304
- return replaceBy;
305
- });
230
+ const match = key.match(/^\$\{(.+)\}$/);
306
231
 
307
- return doRenderAsHtml ? <span dangerouslySetInnerHTML={{ __html: resolvedComplexMessage }} /> : resolvedComplexMessage;
232
+ return resolveMsg({ key: match !== null ? match[1] : key, args }) ?? key;
308
233
  }
309
234
 
310
235
  return {
311
- msgStr: (key, ...args) => resolveMsg({ key, args, doRenderAsHtml: false }) as string,
312
- msg: (key, ...args) => resolveMsg({ key, args, doRenderAsHtml: true }) as JSX.Element,
313
- advancedMsg: (key, ...args) =>
314
- resolveMsgAdvanced({
315
- key,
316
- args,
317
- doRenderAsHtml: true
318
- }) as JSX.Element,
319
- advancedMsgStr: (key, ...args) =>
320
- resolveMsgAdvanced({
321
- key,
322
- args,
323
- doRenderAsHtml: false
324
- }) as string
236
+ msgStr: (key, ...args) => {
237
+ const resolvedMessage = resolveMsg({ key, args });
238
+ assert(resolvedMessage !== undefined, `Message with key "${key}" not found`);
239
+ return resolvedMessage;
240
+ },
241
+ advancedMsgStr: (key, ...args) => resolveMsgAdvanced({ key, args })
325
242
  };
326
243
  }
327
244
 
@@ -1,4 +1,5 @@
1
- import type { GenericI18n, MessageKey, KcContextLike } from "./i18n";
2
- export type { MessageKey, KcContextLike };
3
- export type I18n = GenericI18n<MessageKey>;
1
+ import type { GenericI18n } from "./GenericI18n";
2
+ import type { MessageKey_defaultSet, KcContextLike } from "./i18n";
3
+ export type { MessageKey_defaultSet, KcContextLike };
4
+ export type I18n = GenericI18n<MessageKey_defaultSet>;
4
5
  export { createUseI18n } from "./useI18n";
@@ -2,8 +2,8 @@
2
2
  //PLEASE DO NOT EDIT MANUALLY
3
3
  import * as en from "./en";
4
4
 
5
- export async function getMessages(currentLanguageTag: string) {
6
- const { default: messages } = await (() => {
5
+ export async function fetchMessages_defaultSet(currentLanguageTag: string) {
6
+ const { default: messages_defaultSet } = await (() => {
7
7
  switch (currentLanguageTag) {
8
8
  case "en": return en;
9
9
  case "ar": return import("./ar");
@@ -35,5 +35,5 @@ export async function getMessages(currentLanguageTag: string) {
35
35
  default: return { "default": {} };
36
36
  }
37
37
  })();
38
- return messages;
38
+ return messages_defaultSet;
39
39
  }
@@ -0,0 +1,90 @@
1
+ import { useEffect, useState } from "react";
2
+ import { createGetI18n, type GenericI18n_noJsx, type KcContextLike, type MessageKey_defaultSet } from "./i18n";
3
+ import { GenericI18n } from "./GenericI18n";
4
+ import { Reflect } from "tsafe/Reflect";
5
+
6
+ export function createUseI18n<MessageKey_themeDefined extends string = never>(messageBundle: {
7
+ [languageTag: string]: { [key in MessageKey_themeDefined]: string };
8
+ }) {
9
+ type MessageKey = MessageKey_defaultSet | MessageKey_themeDefined;
10
+
11
+ type I18n = GenericI18n<MessageKey>;
12
+
13
+ const { withJsx } = (() => {
14
+ const cache = new WeakMap<GenericI18n_noJsx<MessageKey>, GenericI18n<MessageKey>>();
15
+
16
+ function renderHtmlString(htmlString: string): JSX.Element {
17
+ return (
18
+ <div
19
+ style={{ display: "inline-block" }}
20
+ dangerouslySetInnerHTML={{
21
+ __html: htmlString
22
+ }}
23
+ />
24
+ );
25
+ /*
26
+ return (
27
+ <span
28
+ dangerouslySetInnerHTML={{
29
+ "__html": htmlString
30
+ }}
31
+ />
32
+ );
33
+ */
34
+ }
35
+
36
+ function withJsx(i18n_noJsx: GenericI18n_noJsx<MessageKey>): I18n {
37
+ use_cache: {
38
+ const i18n = cache.get(i18n_noJsx);
39
+
40
+ if (i18n === undefined) {
41
+ break use_cache;
42
+ }
43
+
44
+ return i18n;
45
+ }
46
+
47
+ const i18n: I18n = {
48
+ ...i18n_noJsx,
49
+ msg: (...args) => renderHtmlString(i18n_noJsx.msgStr(...args)),
50
+ advancedMsg: (...args) => renderHtmlString(i18n_noJsx.advancedMsgStr(...args))
51
+ };
52
+
53
+ cache.set(i18n_noJsx, i18n);
54
+
55
+ return i18n;
56
+ }
57
+
58
+ return { withJsx };
59
+ })();
60
+
61
+ const { getI18n } = createGetI18n(messageBundle);
62
+
63
+ function useI18n(params: { kcContext: KcContextLike }): { i18n: I18n } {
64
+ const { kcContext } = params;
65
+
66
+ const { i18n, prI18n_currentLanguage } = getI18n({ kcContext });
67
+
68
+ const [i18n_toReturn, setI18n_toReturn] = useState<I18n>(withJsx(i18n));
69
+
70
+ useEffect(() => {
71
+ let isActive = true;
72
+
73
+ prI18n_currentLanguage?.then(i18n => {
74
+ if (!isActive) {
75
+ return;
76
+ }
77
+
78
+ setI18n_toReturn(withJsx(i18n));
79
+ });
80
+
81
+ return () => {
82
+ isActive = false;
83
+ };
84
+ }, []);
85
+
86
+ return { i18n: i18n_toReturn };
87
+ }
88
+
89
+ return { useI18n, ofTypeI18n: Reflect<I18n>() };
90
+ }
@@ -9,7 +9,7 @@ import { formatNumber } from "keycloakify/tools/formatNumber";
9
9
  import { useInsertScriptTags } from "keycloakify/tools/useInsertScriptTags";
10
10
  import type { PasswordPolicies, Attribute, Validators } from "keycloakify/login/KcContext";
11
11
  import type { KcContext } from "../KcContext";
12
- import type { MessageKey } from "keycloakify/login/i18n";
12
+ import type { MessageKey_defaultSet } from "keycloakify/login/i18n";
13
13
  import { KcContextLike as KcContextLike_i18n } from "keycloakify/login/i18n";
14
14
  import type { I18n } from "../i18n";
15
15
 
@@ -148,7 +148,7 @@ export function useUserProfileForm(params: UseUserProfileFormParams): ReturnType
148
148
  .map(name =>
149
149
  id<Attribute>({
150
150
  name: name,
151
- displayName: id<`\${${MessageKey}}`>(`\${${name}}`),
151
+ displayName: id<`\${${MessageKey_defaultSet}}`>(`\${${name}}`),
152
152
  required: true,
153
153
  value: (kcContext.register as any).formData[name] ?? "",
154
154
  html5DataAnnotations: {},
@@ -176,7 +176,7 @@ export function useUserProfileForm(params: UseUserProfileFormParams): ReturnType
176
176
  .map(name =>
177
177
  id<Attribute>({
178
178
  name: name,
179
- displayName: id<`\${${MessageKey}}`>(`\${${name}}`),
179
+ displayName: id<`\${${MessageKey_defaultSet}}`>(`\${${name}}`),
180
180
  required: true,
181
181
  value: (kcContext as any).user[name] ?? "",
182
182
  html5DataAnnotations: {},
@@ -202,7 +202,7 @@ export function useUserProfileForm(params: UseUserProfileFormParams): ReturnType
202
202
  return [
203
203
  id<Attribute>({
204
204
  name: "email",
205
- displayName: id<`\${${MessageKey}}`>(`\${email}`),
205
+ displayName: id<`\${${MessageKey_defaultSet}}`>(`\${email}`),
206
206
  required: true,
207
207
  value: (kcContext.email as any).value ?? "",
208
208
  html5DataAnnotations: {},
@@ -227,7 +227,7 @@ export function useUserProfileForm(params: UseUserProfileFormParams): ReturnType
227
227
  break patch_legacy_group;
228
228
  }
229
229
 
230
- const { group, groupDisplayHeader, groupDisplayDescription /*, groupAnnotations*/ } = attribute as Attribute & {
230
+ const { group, groupDisplayHeader, groupDisplayDescription, groupAnnotations } = attribute as Attribute & {
231
231
  group: string;
232
232
  groupDisplayHeader?: string;
233
233
  groupDisplayDescription?: string;
@@ -250,6 +250,7 @@ export function useUserProfileForm(params: UseUserProfileFormParams): ReturnType
250
250
  name: group,
251
251
  displayHeader: groupDisplayHeader,
252
252
  displayDescription: groupDisplayDescription,
253
+ annotations: groupAnnotations,
253
254
  html5DataAnnotations: {}
254
255
  };
255
256
  }
@@ -292,7 +293,7 @@ export function useUserProfileForm(params: UseUserProfileFormParams): ReturnType
292
293
  0,
293
294
  {
294
295
  name: "password",
295
- displayName: id<`\${${MessageKey}}`>("${password}"),
296
+ displayName: id<`\${${MessageKey_defaultSet}}`>("${password}"),
296
297
  required: true,
297
298
  readOnly: false,
298
299
  validators: {},
@@ -302,7 +303,7 @@ export function useUserProfileForm(params: UseUserProfileFormParams): ReturnType
302
303
  },
303
304
  {
304
305
  name: "password-confirm",
305
- displayName: id<`\${${MessageKey}}`>("${passwordConfirm}"),
306
+ displayName: id<`\${${MessageKey_defaultSet}}`>("${passwordConfirm}"),
306
307
  required: true,
307
308
  readOnly: false,
308
309
  validators: {},
@@ -1133,7 +1134,7 @@ function useGetErrors(params: { kcContext: KcContextLike_useGetErrors; i18n: I18
1133
1134
  break validator_x;
1134
1135
  }
1135
1136
 
1136
- const msgArgs = [errorMessageKey ?? id<MessageKey>("shouldMatchPattern"), pattern] as const;
1137
+ const msgArgs = [errorMessageKey ?? id<MessageKey_defaultSet>("shouldMatchPattern"), pattern] as const;
1137
1138
 
1138
1139
  errors.push({
1139
1140
  errorMessage: <Fragment key={`${attributeName}-${errors.length}`}>{advancedMsg(...msgArgs)}</Fragment>,
@@ -1172,7 +1173,7 @@ function useGetErrors(params: { kcContext: KcContextLike_useGetErrors; i18n: I18
1172
1173
  break validator_x;
1173
1174
  }
1174
1175
 
1175
- const msgArgs = [id<MessageKey>("invalidEmailMessage")] as const;
1176
+ const msgArgs = [id<MessageKey_defaultSet>("invalidEmailMessage")] as const;
1176
1177
 
1177
1178
  errors.push({
1178
1179
  errorMessage: <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
@@ -1264,11 +1265,11 @@ function useGetErrors(params: { kcContext: KcContextLike_useGetErrors; i18n: I18
1264
1265
  break validator_x;
1265
1266
  }
1266
1267
 
1267
- const msgArgs = [id<MessageKey>("notAValidOption")] as const;
1268
+ const msgArgs = [id<MessageKey_defaultSet>("notAValidOption")] as const;
1268
1269
 
1269
1270
  errors.push({
1270
- errorMessage: <Fragment key={`${attributeName}-${errors.length}`}>{advancedMsg(...msgArgs)}</Fragment>,
1271
- errorMessageStr: advancedMsgStr(...msgArgs),
1271
+ errorMessage: <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
1272
+ errorMessageStr: msgStr(...msgArgs),
1272
1273
  fieldIndex: undefined,
1273
1274
  source: {
1274
1275
  type: "validator",
@@ -34,7 +34,7 @@ export default function Info(props: PageProps<Extract<KcContext, { pageId: "info
34
34
  if (requiredActions) {
35
35
  html += "<b>";
36
36
 
37
- html += requiredActions.map(requiredAction => advancedMsgStr(`requiredAction.${requiredAction}`)).join(",");
37
+ html += requiredActions.map(requiredAction => advancedMsgStr(`requiredAction.${requiredAction}`)).join(", ");
38
38
 
39
39
  html += "</b>";
40
40
  }
@@ -70,8 +70,8 @@ export const WithRestrictedToMITStudents: Story = {
70
70
  },
71
71
  "x-keycloakify": {
72
72
  messages: {
73
- "${profile.attributes.email.inputHelperTextBefore}": "Please use your MIT or Berkeley email.",
74
- "${profile.attributes.email.pattern.error}":
73
+ "profile.attributes.email.inputHelperTextBefore": "Please use your MIT or Berkeley email.",
74
+ "profile.attributes.email.pattern.error":
75
75
  "This is not an MIT (<strong>@mit.edu</strong>) nor a Berkeley (<strong>@berkeley.edu</strong>) email."
76
76
  }
77
77
  }
@@ -104,10 +104,10 @@ export const WithFavoritePet: Story = {
104
104
  },
105
105
  "x-keycloakify": {
106
106
  messages: {
107
- "${profile.attributes.favoritePet}": "Favorite Pet",
108
- "${profile.attributes.favoritePet.options.cat}": "Fluffy Cat",
109
- "${profile.attributes.favoritePet.options.dog}": "Loyal Dog",
110
- "${profile.attributes.favoritePet.options.fish}": "Peaceful Fish"
107
+ "profile.attributes.favoritePet": "Favorite Pet",
108
+ "profile.attributes.favoritePet.options.cat": "Fluffy Cat",
109
+ "profile.attributes.favoritePet.options.dog": "Loyal Dog",
110
+ "profile.attributes.favoritePet.options.fish": "Peaceful Fish"
111
111
  }
112
112
  }
113
113
  }}
@@ -53,14 +53,29 @@ export const WithRealmTranslations: Story = {
53
53
  displayName: "home-idp-discovery-display-name",
54
54
  helpText: "home-idp-discovery-help-text",
55
55
  iconCssClass: "kcAuthenticatorDefaultClass"
56
+ },
57
+ {
58
+ authExecId: "20456f5a-8b2b-45f3-98e0-551dcb27e3e1",
59
+ displayName: "identity-provider-redirctor-display-name",
60
+ helpText: "identity-provider-redirctor-help-text",
61
+ iconCssClass: "kcAuthenticatorDefaultClass"
62
+ },
63
+ {
64
+ authExecId: "eb435db9-474e-473a-8da7-c184fa510b96",
65
+ displayName: "auth-username-password-form-display-name",
66
+ helpText: "auth-username-password-help-text",
67
+ iconCssClass: "kcAuthenticatorDefaultClass"
56
68
  }
57
69
  ]
58
70
  },
59
- ["x-keycloakify"]: {
71
+ "x-keycloakify": {
60
72
  messages: {
61
- "${home-idp-discovery-display-name}": "Home identity provider",
62
- "${home-idp-discovery-help-text}":
63
- "Sign in via your home identity provider which will be automatically determined based on your provided email address."
73
+ "home-idp-discovery-display-name": "Home identity provider",
74
+ "home-idp-discovery-help-text":
75
+ "Sign in via your home identity provider which will be automatically determined based on your provided email address.",
76
+ "identity-provider-redirctor-display-name": "Identity Provider Redirector",
77
+ "identity-provider-redirctor-help-text": "Sign in via your identity provider.",
78
+ "auth-username-password-help-text": "Sign in via your username and password."
64
79
  }
65
80
  }
66
81
  }}