keycloakify 10.0.0-rc.97 → 10.0.0

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 (507) hide show
  1. package/PUBLIC_URL.js +2 -2
  2. package/PUBLIC_URL.js.map +1 -1
  3. package/README.md +28 -242
  4. package/account/KcContext/KcContext.d.ts +4 -1
  5. package/account/KcContext/KcContext.js.map +1 -1
  6. package/account/KcContext/kcContextMocks.js +7 -4
  7. package/account/KcContext/kcContextMocks.js.map +1 -1
  8. package/account/Template.js +3 -1
  9. package/account/Template.js.map +1 -1
  10. package/account/i18n/GenericI18n.d.ts +6 -0
  11. package/account/i18n/GenericI18n.js +2 -0
  12. package/account/i18n/GenericI18n.js.map +1 -0
  13. package/account/i18n/i18n.d.ts +24 -30
  14. package/account/i18n/i18n.js +50 -70
  15. package/account/i18n/i18n.js.map +1 -1
  16. package/account/i18n/index.d.ts +4 -3
  17. package/account/i18n/index.js.map +1 -1
  18. package/account/i18n/messages_defaultSet/ar.js.map +1 -0
  19. package/account/i18n/messages_defaultSet/ca.js.map +1 -0
  20. package/account/i18n/messages_defaultSet/cs.js.map +1 -0
  21. package/account/i18n/messages_defaultSet/da.js.map +1 -0
  22. package/account/i18n/messages_defaultSet/de.js.map +1 -0
  23. package/account/i18n/messages_defaultSet/el.js.map +1 -0
  24. package/account/i18n/messages_defaultSet/en.js.map +1 -0
  25. package/account/i18n/messages_defaultSet/es.js.map +1 -0
  26. package/account/i18n/messages_defaultSet/fa.js.map +1 -0
  27. package/account/i18n/messages_defaultSet/fi.js.map +1 -0
  28. package/account/i18n/messages_defaultSet/fr.js.map +1 -0
  29. package/account/i18n/messages_defaultSet/hu.js.map +1 -0
  30. package/account/i18n/{baseMessages → messages_defaultSet}/index.d.ts +1 -1
  31. package/account/i18n/{baseMessages → messages_defaultSet}/index.js +3 -3
  32. package/account/i18n/messages_defaultSet/index.js.map +1 -0
  33. package/account/i18n/messages_defaultSet/it.js.map +1 -0
  34. package/account/i18n/messages_defaultSet/ja.js.map +1 -0
  35. package/account/i18n/messages_defaultSet/lt.js.map +1 -0
  36. package/account/i18n/messages_defaultSet/lv.js.map +1 -0
  37. package/account/i18n/messages_defaultSet/nl.js.map +1 -0
  38. package/account/i18n/messages_defaultSet/no.js.map +1 -0
  39. package/account/i18n/messages_defaultSet/pl.js.map +1 -0
  40. package/account/i18n/messages_defaultSet/pt-BR.js.map +1 -0
  41. package/account/i18n/messages_defaultSet/ru.js.map +1 -0
  42. package/account/i18n/messages_defaultSet/sk.js.map +1 -0
  43. package/account/i18n/messages_defaultSet/sv.js.map +1 -0
  44. package/account/i18n/messages_defaultSet/th.js.map +1 -0
  45. package/account/i18n/messages_defaultSet/tr.js.map +1 -0
  46. package/account/i18n/messages_defaultSet/uk.js.map +1 -0
  47. package/account/i18n/messages_defaultSet/zh-CN.js.map +1 -0
  48. package/account/i18n/useI18n.d.ts +6 -5
  49. package/account/i18n/useI18n.js +37 -4
  50. package/account/i18n/useI18n.js.map +1 -1
  51. package/account/pages/Applications.js +1 -1
  52. package/account/pages/Applications.js.map +1 -1
  53. package/account/pages/FederatedIdentity.js +1 -1
  54. package/account/pages/FederatedIdentity.js.map +1 -1
  55. package/account/pages/Totp.js +5 -1
  56. package/account/pages/Totp.js.map +1 -1
  57. package/bin/193.index.js +5 -5
  58. package/bin/{490.index.js → 246.index.js} +22 -4
  59. package/bin/31.index.js +264 -203
  60. package/bin/440.index.js +178 -106
  61. package/bin/453.index.js +59 -7
  62. package/bin/526.index.js +525 -137
  63. package/bin/599.index.js +567 -0
  64. package/bin/{893.index.js → 622.index.js} +239 -231
  65. package/bin/{36.index.js → 678.index.js} +577 -71
  66. package/bin/{180.index.js → 697.index.js} +611 -526
  67. package/bin/743.index.js +70 -0
  68. package/bin/780.index.js +895 -0
  69. package/bin/786.index.js +185 -0
  70. package/bin/932.index.js +740 -52
  71. package/bin/{456.index.js → 941.index.js} +3 -1988
  72. package/bin/97.index.js +29 -7
  73. package/bin/main.js +1994 -8
  74. package/bin/shared/KeycloakVersionRange.d.ts +3 -3
  75. package/bin/shared/buildContext.d.ts +52 -16
  76. package/bin/shared/buildContext.js.map +1 -1
  77. package/bin/shared/constants.d.ts +18 -17
  78. package/bin/shared/constants.js +15 -14
  79. package/bin/shared/constants.js.map +1 -1
  80. package/bin/shared/copyKeycloakResourcesToPublic.js.map +1 -1
  81. package/bin/shared/downloadKeycloakDefaultTheme.js.map +1 -1
  82. package/bin/shared/generateKcGenTs.d.ts +3 -0
  83. package/bin/shared/generateKcGenTs.js.map +1 -1
  84. package/bin/shared/getLatestsSemVersionedTag.d.ts +15 -0
  85. package/bin/shared/getLatestsSemVersionedTag.js.map +1 -0
  86. package/bin/shared/promptKeycloakVersion.d.ts +3 -1
  87. package/bin/shared/promptKeycloakVersion.js.map +1 -1
  88. package/lib/getKcClsx.js +2 -1
  89. package/lib/getKcClsx.js.map +1 -1
  90. package/login/KcContext/KcContext.d.ts +10 -11
  91. package/login/KcContext/KcContext.js.map +1 -1
  92. package/login/KcContext/kcContextMocks.js +4 -5
  93. package/login/KcContext/kcContextMocks.js.map +1 -1
  94. package/login/Template.js +13 -7
  95. package/login/Template.js.map +1 -1
  96. package/login/TemplateProps.d.ts +0 -1
  97. package/login/UserProfileFormFields.js +6 -5
  98. package/login/UserProfileFormFields.js.map +1 -1
  99. package/login/i18n/GenericI18n.d.ts +6 -0
  100. package/login/i18n/GenericI18n.js +2 -0
  101. package/login/i18n/GenericI18n.js.map +1 -0
  102. package/login/i18n/i18n.d.ts +22 -32
  103. package/login/i18n/i18n.js +51 -92
  104. package/login/i18n/i18n.js.map +1 -1
  105. package/login/i18n/index.d.ts +4 -3
  106. package/login/i18n/index.js.map +1 -1
  107. package/login/i18n/messages_defaultSet/ar.js.map +1 -0
  108. package/login/i18n/messages_defaultSet/ca.js.map +1 -0
  109. package/login/i18n/messages_defaultSet/cs.js.map +1 -0
  110. package/login/i18n/messages_defaultSet/da.js.map +1 -0
  111. package/login/i18n/messages_defaultSet/de.js.map +1 -0
  112. package/login/i18n/messages_defaultSet/el.js.map +1 -0
  113. package/login/i18n/messages_defaultSet/en.js.map +1 -0
  114. package/login/i18n/messages_defaultSet/es.js.map +1 -0
  115. package/login/i18n/messages_defaultSet/fa.js.map +1 -0
  116. package/login/i18n/messages_defaultSet/fi.js.map +1 -0
  117. package/login/i18n/messages_defaultSet/fr.js.map +1 -0
  118. package/login/i18n/messages_defaultSet/hu.js.map +1 -0
  119. package/login/i18n/{baseMessages → messages_defaultSet}/index.d.ts +1 -1
  120. package/login/i18n/{baseMessages → messages_defaultSet}/index.js +3 -3
  121. package/login/i18n/messages_defaultSet/index.js.map +1 -0
  122. package/login/i18n/messages_defaultSet/it.js.map +1 -0
  123. package/login/i18n/messages_defaultSet/ja.js.map +1 -0
  124. package/login/i18n/messages_defaultSet/lt.js.map +1 -0
  125. package/login/i18n/messages_defaultSet/lv.js.map +1 -0
  126. package/login/i18n/messages_defaultSet/nl.js.map +1 -0
  127. package/login/i18n/messages_defaultSet/no.js.map +1 -0
  128. package/login/i18n/messages_defaultSet/pl.js.map +1 -0
  129. package/login/i18n/messages_defaultSet/pt-BR.js.map +1 -0
  130. package/login/i18n/messages_defaultSet/ru.js.map +1 -0
  131. package/login/i18n/messages_defaultSet/sk.js.map +1 -0
  132. package/login/i18n/messages_defaultSet/sv.js.map +1 -0
  133. package/login/i18n/messages_defaultSet/th.js.map +1 -0
  134. package/login/i18n/messages_defaultSet/tr.js.map +1 -0
  135. package/login/i18n/messages_defaultSet/uk.js.map +1 -0
  136. package/login/i18n/messages_defaultSet/zh-CN.js.map +1 -0
  137. package/login/i18n/useI18n.d.ts +6 -5
  138. package/login/i18n/useI18n.js +37 -4
  139. package/login/i18n/useI18n.js.map +1 -1
  140. package/login/lib/useUserProfileForm.d.ts +2 -0
  141. package/login/lib/useUserProfileForm.js +44 -10
  142. package/login/lib/useUserProfileForm.js.map +1 -1
  143. package/login/pages/Error.js +1 -1
  144. package/login/pages/Error.js.map +1 -1
  145. package/login/pages/Info.js +15 -3
  146. package/login/pages/Info.js.map +1 -1
  147. package/login/pages/Login.js +6 -2
  148. package/login/pages/Login.js.map +1 -1
  149. package/login/pages/LoginConfigTotp.js +5 -1
  150. package/login/pages/LoginConfigTotp.js.map +1 -1
  151. package/login/pages/LoginOtp.js +3 -1
  152. package/login/pages/LoginOtp.js.map +1 -1
  153. package/login/pages/LoginPassword.js +3 -1
  154. package/login/pages/LoginPassword.js.map +1 -1
  155. package/login/pages/LoginRecoveryAuthnCodeInput.js +3 -1
  156. package/login/pages/LoginRecoveryAuthnCodeInput.js.map +1 -1
  157. package/login/pages/LoginResetPassword.js +3 -1
  158. package/login/pages/LoginResetPassword.js.map +1 -1
  159. package/login/pages/LoginUpdatePassword.js +5 -1
  160. package/login/pages/LoginUpdatePassword.js.map +1 -1
  161. package/login/pages/Register.js +3 -1
  162. package/login/pages/Register.js.map +1 -1
  163. package/login/pages/SamlPostForm.js +1 -1
  164. package/login/pages/SamlPostForm.js.map +1 -1
  165. package/login/pages/SelectAuthenticator.js +2 -2
  166. package/login/pages/SelectAuthenticator.js.map +1 -1
  167. package/login/pages/WebauthnAuthenticate.js +3 -3
  168. package/login/pages/WebauthnAuthenticate.js.map +1 -1
  169. package/login/pages/WebauthnRegister.js +2 -2
  170. package/package.json +267 -245
  171. package/src/PUBLIC_URL.ts +2 -2
  172. package/src/account/KcContext/KcContext.ts +4 -1
  173. package/src/account/KcContext/kcContextMocks.ts +7 -4
  174. package/src/account/Template.tsx +6 -1
  175. package/src/account/i18n/GenericI18n.tsx +6 -0
  176. package/src/account/i18n/i18n.tsx +91 -129
  177. package/src/account/i18n/index.ts +4 -3
  178. package/src/account/i18n/{baseMessages → messages_defaultSet}/index.ts +3 -3
  179. package/src/account/i18n/useI18n.tsx +95 -0
  180. package/src/account/pages/Applications.tsx +0 -1
  181. package/src/account/pages/FederatedIdentity.tsx +1 -1
  182. package/src/account/pages/Totp.tsx +16 -6
  183. package/src/bin/add-story.ts +42 -10
  184. package/src/bin/eject-page.ts +119 -11
  185. package/src/bin/initialize-account-theme/copyBoilerplate.ts +32 -0
  186. package/src/bin/initialize-account-theme/index.ts +1 -0
  187. package/src/bin/initialize-account-theme/initialize-account-theme.ts +112 -0
  188. package/src/bin/initialize-account-theme/initializeAccountTheme_multiPage.ts +21 -0
  189. package/src/bin/initialize-account-theme/initializeAccountTheme_singlePage.ts +152 -0
  190. package/src/bin/initialize-account-theme/src/multi-page/KcContext.ts +12 -0
  191. package/src/bin/initialize-account-theme/src/multi-page/KcPage.tsx +25 -0
  192. package/src/bin/initialize-account-theme/src/multi-page/KcPageStory.tsx +38 -0
  193. package/src/bin/initialize-account-theme/src/multi-page/i18n.ts +5 -0
  194. package/src/bin/initialize-account-theme/src/single-page/KcContext.ts +7 -0
  195. package/src/bin/initialize-account-theme/src/single-page/KcPage.tsx +11 -0
  196. package/src/bin/initialize-account-theme/updateAccountThemeImplementationInConfig.ts +92 -0
  197. package/src/bin/initialize-email-theme.ts +1 -1
  198. package/src/bin/keycloakify/buildJars/buildJar.ts +38 -24
  199. package/src/bin/keycloakify/buildJars/buildJars.ts +6 -3
  200. package/src/bin/keycloakify/buildJars/getKeycloakVersionRangeForJar.ts +5 -5
  201. package/src/bin/keycloakify/generateFtl/generateFtl.ts +16 -16
  202. package/src/bin/keycloakify/generateFtl/kcContextDeclarationTemplate.ftl +471 -364
  203. package/src/bin/keycloakify/generateResources/bringInAccountV1.ts +7 -7
  204. package/src/bin/keycloakify/generateResources/generateMessageProperties.ts +3 -3
  205. package/src/bin/keycloakify/generateResources/generateResourcesForMainTheme.ts +125 -59
  206. package/src/bin/keycloakify/generateResources/generateResourcesForThemeVariant.ts +2 -2
  207. package/src/bin/keycloakify/generateResources/readExtraPageNames.ts +5 -8
  208. package/src/bin/keycloakify/keycloakify.ts +8 -6
  209. package/src/bin/keycloakify/replacers/replaceImportsInCssCode.ts +41 -27
  210. package/src/bin/keycloakify/replacers/replaceImportsInJsCode/replaceImportsInJsCode.ts +2 -2
  211. package/src/bin/keycloakify/replacers/replaceImportsInJsCode/vite.ts +6 -6
  212. package/src/bin/keycloakify/replacers/replaceImportsInJsCode/webpack.ts +4 -4
  213. package/src/bin/main.ts +19 -2
  214. package/src/bin/shared/KeycloakVersionRange.ts +4 -4
  215. package/src/bin/shared/buildContext.ts +360 -251
  216. package/src/bin/shared/constants.ts +19 -17
  217. package/src/bin/shared/copyKeycloakResourcesToPublic.ts +6 -6
  218. package/src/bin/shared/downloadKeycloakDefaultTheme.ts +48 -27
  219. package/src/bin/shared/downloadKeycloakStaticResources.ts +2 -2
  220. package/src/bin/shared/generateKcGenTs.ts +110 -3
  221. package/src/bin/shared/getLatestsSemVersionedTag.ts +201 -0
  222. package/src/bin/shared/promptKeycloakVersion.ts +20 -80
  223. package/src/bin/start-keycloak/appBuild.ts +15 -11
  224. package/src/bin/start-keycloak/keycloakifyBuild.ts +3 -3
  225. package/src/bin/start-keycloak/myrealm-realm-18.json +4 -4
  226. package/src/bin/start-keycloak/myrealm-realm-19.json +4 -4
  227. package/src/bin/start-keycloak/myrealm-realm-20.json +4 -4
  228. package/src/bin/start-keycloak/myrealm-realm-21.json +4 -4
  229. package/src/bin/start-keycloak/myrealm-realm-23.json +3 -3
  230. package/src/bin/start-keycloak/myrealm-realm-24.json +4 -4
  231. package/src/bin/start-keycloak/myrealm-realm-25.json +4 -4
  232. package/src/bin/start-keycloak/start-keycloak.ts +256 -102
  233. package/src/bin/tools/assertNoPnpmDlx.ts +17 -0
  234. package/src/bin/tools/downloadAndExtractArchive.ts +10 -9
  235. package/src/bin/tools/fetchProxyOptions.ts +32 -11
  236. package/src/bin/tools/npmInstall.ts +63 -0
  237. package/src/bin/tools/octokit-addons/getLatestsSemVersionedTag.ts +3 -2
  238. package/src/bin/tsconfig.json +3 -1
  239. package/src/lib/getKcClsx.ts +2 -2
  240. package/src/login/KcContext/KcContext.ts +10 -28
  241. package/src/login/KcContext/kcContextMocks.ts +5 -6
  242. package/src/login/Template.tsx +32 -54
  243. package/src/login/TemplateProps.ts +0 -1
  244. package/src/login/UserProfileFormFields.tsx +15 -11
  245. package/src/login/i18n/GenericI18n.tsx +6 -0
  246. package/src/login/i18n/i18n.tsx +91 -166
  247. package/src/login/i18n/index.ts +4 -3
  248. package/src/login/i18n/{baseMessages → messages_defaultSet}/index.ts +3 -3
  249. package/src/login/i18n/useI18n.tsx +95 -0
  250. package/src/login/lib/useUserProfileForm.tsx +68 -20
  251. package/src/login/pages/Error.tsx +1 -1
  252. package/src/login/pages/Info.tsx +26 -6
  253. package/src/login/pages/Login.tsx +20 -9
  254. package/src/login/pages/LoginConfigTotp.tsx +16 -6
  255. package/src/login/pages/LoginOtp.tsx +8 -3
  256. package/src/login/pages/LoginPassword.tsx +8 -3
  257. package/src/login/pages/LoginRecoveryAuthnCodeInput.tsx +8 -3
  258. package/src/login/pages/LoginResetPassword.tsx +8 -3
  259. package/src/login/pages/LoginUpdatePassword.tsx +55 -47
  260. package/src/login/pages/Register.tsx +8 -3
  261. package/src/login/pages/SamlPostForm.tsx +1 -1
  262. package/src/login/pages/SelectAuthenticator.tsx +4 -4
  263. package/src/login/pages/WebauthnAuthenticate.tsx +5 -5
  264. package/src/login/pages/WebauthnRegister.tsx +2 -2
  265. package/src/tools/useInsertLinkTags.ts +9 -1
  266. package/src/tools/useInsertScriptTags.ts +9 -1
  267. package/src/vite-plugin/vite-plugin.ts +15 -13
  268. package/stories/account/pages/Applications.stories.tsx +80 -0
  269. package/stories/account/pages/Log.stories.tsx +1 -0
  270. package/stories/account-spa/index.stories.tsx +94 -0
  271. package/stories/intro/intro.stories.tsx +90 -0
  272. package/stories/login/pages/Info.stories.tsx +7 -2
  273. package/stories/login/pages/Login.stories.tsx +25 -13
  274. package/stories/login/pages/Register.stories.tsx +11 -9
  275. package/stories/login/pages/SelectAuthenticator.stories.tsx +41 -0
  276. package/stories/login/pages/Terms.stories.tsx +6 -2
  277. package/tools/useInsertLinkTags.js +7 -1
  278. package/tools/useInsertLinkTags.js.map +1 -1
  279. package/tools/useInsertScriptTags.js +7 -1
  280. package/tools/useInsertScriptTags.js.map +1 -1
  281. package/vite-plugin/index.js +25820 -25686
  282. package/vite-plugin/vite-plugin.d.ts +6 -4
  283. package/account/i18n/baseMessages/ar.js.map +0 -1
  284. package/account/i18n/baseMessages/ca.js.map +0 -1
  285. package/account/i18n/baseMessages/cs.js.map +0 -1
  286. package/account/i18n/baseMessages/da.js.map +0 -1
  287. package/account/i18n/baseMessages/de.js.map +0 -1
  288. package/account/i18n/baseMessages/el.js.map +0 -1
  289. package/account/i18n/baseMessages/en.js.map +0 -1
  290. package/account/i18n/baseMessages/es.js.map +0 -1
  291. package/account/i18n/baseMessages/fa.js.map +0 -1
  292. package/account/i18n/baseMessages/fi.js.map +0 -1
  293. package/account/i18n/baseMessages/fr.js.map +0 -1
  294. package/account/i18n/baseMessages/hu.js.map +0 -1
  295. package/account/i18n/baseMessages/index.js.map +0 -1
  296. package/account/i18n/baseMessages/it.js.map +0 -1
  297. package/account/i18n/baseMessages/ja.js.map +0 -1
  298. package/account/i18n/baseMessages/lt.js.map +0 -1
  299. package/account/i18n/baseMessages/lv.js.map +0 -1
  300. package/account/i18n/baseMessages/nl.js.map +0 -1
  301. package/account/i18n/baseMessages/no.js.map +0 -1
  302. package/account/i18n/baseMessages/pl.js.map +0 -1
  303. package/account/i18n/baseMessages/pt-BR.js.map +0 -1
  304. package/account/i18n/baseMessages/ru.js.map +0 -1
  305. package/account/i18n/baseMessages/sk.js.map +0 -1
  306. package/account/i18n/baseMessages/sv.js.map +0 -1
  307. package/account/i18n/baseMessages/th.js.map +0 -1
  308. package/account/i18n/baseMessages/tr.js.map +0 -1
  309. package/account/i18n/baseMessages/uk.js.map +0 -1
  310. package/account/i18n/baseMessages/zh-CN.js.map +0 -1
  311. package/bin/538.index.js +0 -108
  312. package/login/i18n/baseMessages/ar.js.map +0 -1
  313. package/login/i18n/baseMessages/ca.js.map +0 -1
  314. package/login/i18n/baseMessages/cs.js.map +0 -1
  315. package/login/i18n/baseMessages/da.js.map +0 -1
  316. package/login/i18n/baseMessages/de.js.map +0 -1
  317. package/login/i18n/baseMessages/el.js.map +0 -1
  318. package/login/i18n/baseMessages/en.js.map +0 -1
  319. package/login/i18n/baseMessages/es.js.map +0 -1
  320. package/login/i18n/baseMessages/fa.js.map +0 -1
  321. package/login/i18n/baseMessages/fi.js.map +0 -1
  322. package/login/i18n/baseMessages/fr.js.map +0 -1
  323. package/login/i18n/baseMessages/hu.js.map +0 -1
  324. package/login/i18n/baseMessages/index.js.map +0 -1
  325. package/login/i18n/baseMessages/it.js.map +0 -1
  326. package/login/i18n/baseMessages/ja.js.map +0 -1
  327. package/login/i18n/baseMessages/lt.js.map +0 -1
  328. package/login/i18n/baseMessages/lv.js.map +0 -1
  329. package/login/i18n/baseMessages/nl.js.map +0 -1
  330. package/login/i18n/baseMessages/no.js.map +0 -1
  331. package/login/i18n/baseMessages/pl.js.map +0 -1
  332. package/login/i18n/baseMessages/pt-BR.js.map +0 -1
  333. package/login/i18n/baseMessages/ru.js.map +0 -1
  334. package/login/i18n/baseMessages/sk.js.map +0 -1
  335. package/login/i18n/baseMessages/sv.js.map +0 -1
  336. package/login/i18n/baseMessages/th.js.map +0 -1
  337. package/login/i18n/baseMessages/tr.js.map +0 -1
  338. package/login/i18n/baseMessages/uk.js.map +0 -1
  339. package/login/i18n/baseMessages/zh-CN.js.map +0 -1
  340. package/src/account/i18n/useI18n.ts +0 -44
  341. package/src/login/i18n/useI18n.ts +0 -44
  342. package/src/tools/ExtractAfterStartingWith.ts +0 -4
  343. package/tools/ExtractAfterStartingWith.d.ts +0 -1
  344. package/tools/ExtractAfterStartingWith.js +0 -2
  345. package/tools/ExtractAfterStartingWith.js.map +0 -1
  346. /package/account/i18n/{baseMessages → messages_defaultSet}/ar.d.ts +0 -0
  347. /package/account/i18n/{baseMessages → messages_defaultSet}/ar.js +0 -0
  348. /package/account/i18n/{baseMessages → messages_defaultSet}/ca.d.ts +0 -0
  349. /package/account/i18n/{baseMessages → messages_defaultSet}/ca.js +0 -0
  350. /package/account/i18n/{baseMessages → messages_defaultSet}/cs.d.ts +0 -0
  351. /package/account/i18n/{baseMessages → messages_defaultSet}/cs.js +0 -0
  352. /package/account/i18n/{baseMessages → messages_defaultSet}/da.d.ts +0 -0
  353. /package/account/i18n/{baseMessages → messages_defaultSet}/da.js +0 -0
  354. /package/account/i18n/{baseMessages → messages_defaultSet}/de.d.ts +0 -0
  355. /package/account/i18n/{baseMessages → messages_defaultSet}/de.js +0 -0
  356. /package/account/i18n/{baseMessages → messages_defaultSet}/el.d.ts +0 -0
  357. /package/account/i18n/{baseMessages → messages_defaultSet}/el.js +0 -0
  358. /package/account/i18n/{baseMessages → messages_defaultSet}/en.d.ts +0 -0
  359. /package/account/i18n/{baseMessages → messages_defaultSet}/en.js +0 -0
  360. /package/account/i18n/{baseMessages → messages_defaultSet}/es.d.ts +0 -0
  361. /package/account/i18n/{baseMessages → messages_defaultSet}/es.js +0 -0
  362. /package/account/i18n/{baseMessages → messages_defaultSet}/fa.d.ts +0 -0
  363. /package/account/i18n/{baseMessages → messages_defaultSet}/fa.js +0 -0
  364. /package/account/i18n/{baseMessages → messages_defaultSet}/fi.d.ts +0 -0
  365. /package/account/i18n/{baseMessages → messages_defaultSet}/fi.js +0 -0
  366. /package/account/i18n/{baseMessages → messages_defaultSet}/fr.d.ts +0 -0
  367. /package/account/i18n/{baseMessages → messages_defaultSet}/fr.js +0 -0
  368. /package/account/i18n/{baseMessages → messages_defaultSet}/hu.d.ts +0 -0
  369. /package/account/i18n/{baseMessages → messages_defaultSet}/hu.js +0 -0
  370. /package/account/i18n/{baseMessages → messages_defaultSet}/it.d.ts +0 -0
  371. /package/account/i18n/{baseMessages → messages_defaultSet}/it.js +0 -0
  372. /package/account/i18n/{baseMessages → messages_defaultSet}/ja.d.ts +0 -0
  373. /package/account/i18n/{baseMessages → messages_defaultSet}/ja.js +0 -0
  374. /package/account/i18n/{baseMessages → messages_defaultSet}/lt.d.ts +0 -0
  375. /package/account/i18n/{baseMessages → messages_defaultSet}/lt.js +0 -0
  376. /package/account/i18n/{baseMessages → messages_defaultSet}/lv.d.ts +0 -0
  377. /package/account/i18n/{baseMessages → messages_defaultSet}/lv.js +0 -0
  378. /package/account/i18n/{baseMessages → messages_defaultSet}/nl.d.ts +0 -0
  379. /package/account/i18n/{baseMessages → messages_defaultSet}/nl.js +0 -0
  380. /package/account/i18n/{baseMessages → messages_defaultSet}/no.d.ts +0 -0
  381. /package/account/i18n/{baseMessages → messages_defaultSet}/no.js +0 -0
  382. /package/account/i18n/{baseMessages → messages_defaultSet}/pl.d.ts +0 -0
  383. /package/account/i18n/{baseMessages → messages_defaultSet}/pl.js +0 -0
  384. /package/account/i18n/{baseMessages → messages_defaultSet}/pt-BR.d.ts +0 -0
  385. /package/account/i18n/{baseMessages → messages_defaultSet}/pt-BR.js +0 -0
  386. /package/account/i18n/{baseMessages → messages_defaultSet}/ru.d.ts +0 -0
  387. /package/account/i18n/{baseMessages → messages_defaultSet}/ru.js +0 -0
  388. /package/account/i18n/{baseMessages → messages_defaultSet}/sk.d.ts +0 -0
  389. /package/account/i18n/{baseMessages → messages_defaultSet}/sk.js +0 -0
  390. /package/account/i18n/{baseMessages → messages_defaultSet}/sv.d.ts +0 -0
  391. /package/account/i18n/{baseMessages → messages_defaultSet}/sv.js +0 -0
  392. /package/account/i18n/{baseMessages → messages_defaultSet}/th.d.ts +0 -0
  393. /package/account/i18n/{baseMessages → messages_defaultSet}/th.js +0 -0
  394. /package/account/i18n/{baseMessages → messages_defaultSet}/tr.d.ts +0 -0
  395. /package/account/i18n/{baseMessages → messages_defaultSet}/tr.js +0 -0
  396. /package/account/i18n/{baseMessages → messages_defaultSet}/uk.d.ts +0 -0
  397. /package/account/i18n/{baseMessages → messages_defaultSet}/uk.js +0 -0
  398. /package/account/i18n/{baseMessages → messages_defaultSet}/zh-CN.d.ts +0 -0
  399. /package/account/i18n/{baseMessages → messages_defaultSet}/zh-CN.js +0 -0
  400. /package/login/i18n/{baseMessages → messages_defaultSet}/ar.d.ts +0 -0
  401. /package/login/i18n/{baseMessages → messages_defaultSet}/ar.js +0 -0
  402. /package/login/i18n/{baseMessages → messages_defaultSet}/ca.d.ts +0 -0
  403. /package/login/i18n/{baseMessages → messages_defaultSet}/ca.js +0 -0
  404. /package/login/i18n/{baseMessages → messages_defaultSet}/cs.d.ts +0 -0
  405. /package/login/i18n/{baseMessages → messages_defaultSet}/cs.js +0 -0
  406. /package/login/i18n/{baseMessages → messages_defaultSet}/da.d.ts +0 -0
  407. /package/login/i18n/{baseMessages → messages_defaultSet}/da.js +0 -0
  408. /package/login/i18n/{baseMessages → messages_defaultSet}/de.d.ts +0 -0
  409. /package/login/i18n/{baseMessages → messages_defaultSet}/de.js +0 -0
  410. /package/login/i18n/{baseMessages → messages_defaultSet}/el.d.ts +0 -0
  411. /package/login/i18n/{baseMessages → messages_defaultSet}/el.js +0 -0
  412. /package/login/i18n/{baseMessages → messages_defaultSet}/en.d.ts +0 -0
  413. /package/login/i18n/{baseMessages → messages_defaultSet}/en.js +0 -0
  414. /package/login/i18n/{baseMessages → messages_defaultSet}/es.d.ts +0 -0
  415. /package/login/i18n/{baseMessages → messages_defaultSet}/es.js +0 -0
  416. /package/login/i18n/{baseMessages → messages_defaultSet}/fa.d.ts +0 -0
  417. /package/login/i18n/{baseMessages → messages_defaultSet}/fa.js +0 -0
  418. /package/login/i18n/{baseMessages → messages_defaultSet}/fi.d.ts +0 -0
  419. /package/login/i18n/{baseMessages → messages_defaultSet}/fi.js +0 -0
  420. /package/login/i18n/{baseMessages → messages_defaultSet}/fr.d.ts +0 -0
  421. /package/login/i18n/{baseMessages → messages_defaultSet}/fr.js +0 -0
  422. /package/login/i18n/{baseMessages → messages_defaultSet}/hu.d.ts +0 -0
  423. /package/login/i18n/{baseMessages → messages_defaultSet}/hu.js +0 -0
  424. /package/login/i18n/{baseMessages → messages_defaultSet}/it.d.ts +0 -0
  425. /package/login/i18n/{baseMessages → messages_defaultSet}/it.js +0 -0
  426. /package/login/i18n/{baseMessages → messages_defaultSet}/ja.d.ts +0 -0
  427. /package/login/i18n/{baseMessages → messages_defaultSet}/ja.js +0 -0
  428. /package/login/i18n/{baseMessages → messages_defaultSet}/lt.d.ts +0 -0
  429. /package/login/i18n/{baseMessages → messages_defaultSet}/lt.js +0 -0
  430. /package/login/i18n/{baseMessages → messages_defaultSet}/lv.d.ts +0 -0
  431. /package/login/i18n/{baseMessages → messages_defaultSet}/lv.js +0 -0
  432. /package/login/i18n/{baseMessages → messages_defaultSet}/nl.d.ts +0 -0
  433. /package/login/i18n/{baseMessages → messages_defaultSet}/nl.js +0 -0
  434. /package/login/i18n/{baseMessages → messages_defaultSet}/no.d.ts +0 -0
  435. /package/login/i18n/{baseMessages → messages_defaultSet}/no.js +0 -0
  436. /package/login/i18n/{baseMessages → messages_defaultSet}/pl.d.ts +0 -0
  437. /package/login/i18n/{baseMessages → messages_defaultSet}/pl.js +0 -0
  438. /package/login/i18n/{baseMessages → messages_defaultSet}/pt-BR.d.ts +0 -0
  439. /package/login/i18n/{baseMessages → messages_defaultSet}/pt-BR.js +0 -0
  440. /package/login/i18n/{baseMessages → messages_defaultSet}/ru.d.ts +0 -0
  441. /package/login/i18n/{baseMessages → messages_defaultSet}/ru.js +0 -0
  442. /package/login/i18n/{baseMessages → messages_defaultSet}/sk.d.ts +0 -0
  443. /package/login/i18n/{baseMessages → messages_defaultSet}/sk.js +0 -0
  444. /package/login/i18n/{baseMessages → messages_defaultSet}/sv.d.ts +0 -0
  445. /package/login/i18n/{baseMessages → messages_defaultSet}/sv.js +0 -0
  446. /package/login/i18n/{baseMessages → messages_defaultSet}/th.d.ts +0 -0
  447. /package/login/i18n/{baseMessages → messages_defaultSet}/th.js +0 -0
  448. /package/login/i18n/{baseMessages → messages_defaultSet}/tr.d.ts +0 -0
  449. /package/login/i18n/{baseMessages → messages_defaultSet}/tr.js +0 -0
  450. /package/login/i18n/{baseMessages → messages_defaultSet}/uk.d.ts +0 -0
  451. /package/login/i18n/{baseMessages → messages_defaultSet}/uk.js +0 -0
  452. /package/login/i18n/{baseMessages → messages_defaultSet}/zh-CN.d.ts +0 -0
  453. /package/login/i18n/{baseMessages → messages_defaultSet}/zh-CN.js +0 -0
  454. /package/src/account/i18n/{baseMessages → messages_defaultSet}/ar.ts +0 -0
  455. /package/src/account/i18n/{baseMessages → messages_defaultSet}/ca.ts +0 -0
  456. /package/src/account/i18n/{baseMessages → messages_defaultSet}/cs.ts +0 -0
  457. /package/src/account/i18n/{baseMessages → messages_defaultSet}/da.ts +0 -0
  458. /package/src/account/i18n/{baseMessages → messages_defaultSet}/de.ts +0 -0
  459. /package/src/account/i18n/{baseMessages → messages_defaultSet}/el.ts +0 -0
  460. /package/src/account/i18n/{baseMessages → messages_defaultSet}/en.ts +0 -0
  461. /package/src/account/i18n/{baseMessages → messages_defaultSet}/es.ts +0 -0
  462. /package/src/account/i18n/{baseMessages → messages_defaultSet}/fa.ts +0 -0
  463. /package/src/account/i18n/{baseMessages → messages_defaultSet}/fi.ts +0 -0
  464. /package/src/account/i18n/{baseMessages → messages_defaultSet}/fr.ts +0 -0
  465. /package/src/account/i18n/{baseMessages → messages_defaultSet}/hu.ts +0 -0
  466. /package/src/account/i18n/{baseMessages → messages_defaultSet}/it.ts +0 -0
  467. /package/src/account/i18n/{baseMessages → messages_defaultSet}/ja.ts +0 -0
  468. /package/src/account/i18n/{baseMessages → messages_defaultSet}/lt.ts +0 -0
  469. /package/src/account/i18n/{baseMessages → messages_defaultSet}/lv.ts +0 -0
  470. /package/src/account/i18n/{baseMessages → messages_defaultSet}/nl.ts +0 -0
  471. /package/src/account/i18n/{baseMessages → messages_defaultSet}/no.ts +0 -0
  472. /package/src/account/i18n/{baseMessages → messages_defaultSet}/pl.ts +0 -0
  473. /package/src/account/i18n/{baseMessages → messages_defaultSet}/pt-BR.ts +0 -0
  474. /package/src/account/i18n/{baseMessages → messages_defaultSet}/ru.ts +0 -0
  475. /package/src/account/i18n/{baseMessages → messages_defaultSet}/sk.ts +0 -0
  476. /package/src/account/i18n/{baseMessages → messages_defaultSet}/sv.ts +0 -0
  477. /package/src/account/i18n/{baseMessages → messages_defaultSet}/th.ts +0 -0
  478. /package/src/account/i18n/{baseMessages → messages_defaultSet}/tr.ts +0 -0
  479. /package/src/account/i18n/{baseMessages → messages_defaultSet}/uk.ts +0 -0
  480. /package/src/account/i18n/{baseMessages → messages_defaultSet}/zh-CN.ts +0 -0
  481. /package/src/login/i18n/{baseMessages → messages_defaultSet}/ar.ts +0 -0
  482. /package/src/login/i18n/{baseMessages → messages_defaultSet}/ca.ts +0 -0
  483. /package/src/login/i18n/{baseMessages → messages_defaultSet}/cs.ts +0 -0
  484. /package/src/login/i18n/{baseMessages → messages_defaultSet}/da.ts +0 -0
  485. /package/src/login/i18n/{baseMessages → messages_defaultSet}/de.ts +0 -0
  486. /package/src/login/i18n/{baseMessages → messages_defaultSet}/el.ts +0 -0
  487. /package/src/login/i18n/{baseMessages → messages_defaultSet}/en.ts +0 -0
  488. /package/src/login/i18n/{baseMessages → messages_defaultSet}/es.ts +0 -0
  489. /package/src/login/i18n/{baseMessages → messages_defaultSet}/fa.ts +0 -0
  490. /package/src/login/i18n/{baseMessages → messages_defaultSet}/fi.ts +0 -0
  491. /package/src/login/i18n/{baseMessages → messages_defaultSet}/fr.ts +0 -0
  492. /package/src/login/i18n/{baseMessages → messages_defaultSet}/hu.ts +0 -0
  493. /package/src/login/i18n/{baseMessages → messages_defaultSet}/it.ts +0 -0
  494. /package/src/login/i18n/{baseMessages → messages_defaultSet}/ja.ts +0 -0
  495. /package/src/login/i18n/{baseMessages → messages_defaultSet}/lt.ts +0 -0
  496. /package/src/login/i18n/{baseMessages → messages_defaultSet}/lv.ts +0 -0
  497. /package/src/login/i18n/{baseMessages → messages_defaultSet}/nl.ts +0 -0
  498. /package/src/login/i18n/{baseMessages → messages_defaultSet}/no.ts +0 -0
  499. /package/src/login/i18n/{baseMessages → messages_defaultSet}/pl.ts +0 -0
  500. /package/src/login/i18n/{baseMessages → messages_defaultSet}/pt-BR.ts +0 -0
  501. /package/src/login/i18n/{baseMessages → messages_defaultSet}/ru.ts +0 -0
  502. /package/src/login/i18n/{baseMessages → messages_defaultSet}/sk.ts +0 -0
  503. /package/src/login/i18n/{baseMessages → messages_defaultSet}/sv.ts +0 -0
  504. /package/src/login/i18n/{baseMessages → messages_defaultSet}/th.ts +0 -0
  505. /package/src/login/i18n/{baseMessages → messages_defaultSet}/tr.ts +0 -0
  506. /package/src/login/i18n/{baseMessages → messages_defaultSet}/uk.ts +0 -0
  507. /package/src/login/i18n/{baseMessages → messages_defaultSet}/zh-CN.ts +0 -0
@@ -22,7 +22,15 @@ export function useInsertLinkTags(params: {
22
22
  alreadyMountedComponentOrHookNames.has(componentOrHookName);
23
23
 
24
24
  if (isAlreadyMounted) {
25
- window.location.reload();
25
+ reload: {
26
+ if (
27
+ new URL(window.location.href).searchParams.get("viewMode") === "docs"
28
+ ) {
29
+ // NOTE: Special case for Storybook, we want to avoid infinite reload loop.
30
+ break reload;
31
+ }
32
+ window.location.reload();
33
+ }
26
34
  return;
27
35
  }
28
36
 
@@ -40,7 +40,15 @@ export function useInsertScriptTags(params: {
40
40
  alreadyMountedComponentOrHookNames.has(componentOrHookName);
41
41
 
42
42
  if (isAlreadyMounted) {
43
- window.location.reload();
43
+ reload: {
44
+ if (
45
+ new URL(window.location.href).searchParams.get("viewMode") === "docs"
46
+ ) {
47
+ // NOTE: Special case for Storybook, we want to avoid infinite reload loop.
48
+ break reload;
49
+ }
50
+ window.location.reload();
51
+ }
44
52
  return;
45
53
  }
46
54
 
@@ -1,9 +1,9 @@
1
1
  import { join as pathJoin, relative as pathRelative, sep as pathSep } from "path";
2
2
  import type { Plugin } from "vite";
3
3
  import {
4
- basenameOfTheKeycloakifyResourcesDir,
5
- keycloak_resources,
6
- vitePluginSubScriptEnvNames
4
+ BASENAME_OF_KEYCLOAKIFY_RESOURCES_DIR,
5
+ KEYCLOAK_RESOURCES,
6
+ VITE_PLUGIN_SUB_SCRIPTS_ENV_NAMES
7
7
  } from "../bin/shared/constants";
8
8
  import { id } from "tsafe/id";
9
9
  import { rm } from "../bin/tools/fs.rm";
@@ -18,12 +18,14 @@ import {
18
18
  import MagicString from "magic-string";
19
19
  import { generateKcGenTs } from "../bin/shared/generateKcGenTs";
20
20
 
21
- export type Params = BuildOptions & {
22
- postBuild?: (buildContext: Omit<BuildContext, "bundler">) => Promise<void>;
23
- };
21
+ export namespace keycloakify {
22
+ export type Params = BuildOptions & {
23
+ postBuild?: (buildContext: Omit<BuildContext, "bundler">) => Promise<void>;
24
+ };
25
+ }
24
26
 
25
- export function keycloakify(params?: Params) {
26
- const { postBuild, ...buildOptions } = params ?? {};
27
+ export function keycloakify(params: keycloakify.Params) {
28
+ const { postBuild, ...buildOptions } = params;
27
29
 
28
30
  let projectDirPath: string | undefined = undefined;
29
31
  let urlPathname: string | undefined = undefined;
@@ -38,7 +40,7 @@ export function keycloakify(params?: Params) {
38
40
 
39
41
  run_post_build_script_case: {
40
42
  const envValue =
41
- process.env[vitePluginSubScriptEnvNames.runPostBuildScript];
43
+ process.env[VITE_PLUGIN_SUB_SCRIPTS_ENV_NAMES.RUN_POST_BUILD_SCRIPT];
42
44
 
43
45
  if (envValue === undefined) {
44
46
  break run_post_build_script_case;
@@ -94,13 +96,13 @@ export function keycloakify(params?: Params) {
94
96
 
95
97
  resolve_vite_config_case: {
96
98
  const envValue =
97
- process.env[vitePluginSubScriptEnvNames.resolveViteConfig];
99
+ process.env[VITE_PLUGIN_SUB_SCRIPTS_ENV_NAMES.RESOLVE_VITE_CONFIG];
98
100
 
99
101
  if (envValue === undefined) {
100
102
  break resolve_vite_config_case;
101
103
  }
102
104
 
103
- console.log(vitePluginSubScriptEnvNames.resolveViteConfig);
105
+ console.log(VITE_PLUGIN_SUB_SCRIPTS_ENV_NAMES.RESOLVE_VITE_CONFIG);
104
106
 
105
107
  console.log(
106
108
  JSON.stringify(
@@ -172,7 +174,7 @@ export function keycloakify(params?: Params) {
172
174
  `(`,
173
175
  `(window.kcContext === undefined || import.meta.env.MODE === "development")?`,
174
176
  `"${urlPathname ?? "/"}":`,
175
- `(window.kcContext.url.resourcesPath + "/${basenameOfTheKeycloakifyResourcesDir}/")`,
177
+ `(window.kcContext["x-keycloakify"].resourcesPath + "/${BASENAME_OF_KEYCLOAKIFY_RESOURCES_DIR}/")`,
176
178
  `)`
177
179
  ].join("")
178
180
  );
@@ -205,7 +207,7 @@ export function keycloakify(params?: Params) {
205
207
 
206
208
  assert(buildDirPath !== undefined);
207
209
 
208
- await rm(pathJoin(buildDirPath, keycloak_resources), {
210
+ await rm(pathJoin(buildDirPath, KEYCLOAK_RESOURCES), {
209
211
  recursive: true,
210
212
  force: true
211
213
  });
@@ -0,0 +1,80 @@
1
+ import React from "react";
2
+ import type { Meta, StoryObj } from "@storybook/react";
3
+ import { createKcPageStory } from "../KcPageStory";
4
+
5
+ const { KcPageStory } = createKcPageStory({ pageId: "applications.ftl" });
6
+
7
+ const meta = {
8
+ title: "account/applications.ftl",
9
+ component: KcPageStory
10
+ } satisfies Meta<typeof KcPageStory>;
11
+
12
+ export default meta;
13
+
14
+ type Story = StoryObj<typeof meta>;
15
+
16
+ export const Default: Story = {
17
+ render: () => (
18
+ <KcPageStory
19
+ kcContext={{
20
+ pageId: "applications.ftl",
21
+ applications: {
22
+ applications: [
23
+ {
24
+ realmRolesAvailable: [
25
+ {
26
+ name: "realmRoleName1",
27
+ description: "realm role description 1"
28
+ },
29
+ {
30
+ name: "realmRoleName2",
31
+ description: "realm role description 2"
32
+ }
33
+ ],
34
+ resourceRolesAvailable: {
35
+ resource1: [
36
+ {
37
+ roleName: "Resource Role Name 1",
38
+ roleDescription: "Resource role 1 description",
39
+ clientName: "Client Name 1",
40
+ clientId: "client1"
41
+ }
42
+ ],
43
+ resource2: [
44
+ {
45
+ roleName: "Resource Role Name 2",
46
+ clientName: "Client Name 1",
47
+ clientId: "client1"
48
+ }
49
+ ]
50
+ },
51
+ additionalGrants: ["grant1", "grant2"],
52
+ clientScopesGranted: ["scope1", "scope2"],
53
+ effectiveUrl: "#",
54
+ client: {
55
+ clientId: "application1",
56
+ name: "Application 1",
57
+ consentRequired: true
58
+ }
59
+ },
60
+ {
61
+ realmRolesAvailable: [
62
+ {
63
+ name: "Realm Role Name 1"
64
+ }
65
+ ],
66
+ resourceRolesAvailable: {},
67
+ additionalGrants: [],
68
+ clientScopesGranted: [],
69
+ effectiveUrl: "#",
70
+ client: {
71
+ clientId: "application2",
72
+ name: "Application 2"
73
+ }
74
+ }
75
+ ]
76
+ }
77
+ }}
78
+ />
79
+ )
80
+ };
@@ -15,6 +15,7 @@ export default meta;
15
15
 
16
16
  type Story = StoryObj<typeof meta>;
17
17
 
18
+ // NOTE: Enable in your Keycloak realm with: https://github.com/user-attachments/assets/5fc5e49e-a172-4cb0-897a-49baac284b47
18
19
  export const Default: Story = {
19
20
  render: () => (
20
21
  <KcPageStory
@@ -0,0 +1,94 @@
1
+ import React from "react";
2
+ import type { Meta, StoryObj } from "@storybook/react";
3
+ import { useInsertLinkTags } from "../../dist/tools/useInsertLinkTags";
4
+ import { tss } from "../tss";
5
+ // @ts-expect-error
6
+ import screenshotPngUrl from "./screenshot.png";
7
+
8
+ const meta = {
9
+ title: "Account SPA/index.ftl"
10
+ } satisfies Meta<any>;
11
+
12
+ export default meta;
13
+
14
+ type Story = StoryObj<typeof meta>;
15
+
16
+ export const NotInStorybookButSupported: Story = {
17
+ render: () => <AccountSpa />
18
+ };
19
+
20
+ function AccountSpa() {
21
+ console.log(window.location.href);
22
+
23
+ useInsertLinkTags({
24
+ componentOrHookName: "Template",
25
+ hrefs: []
26
+ });
27
+
28
+ const { classes, theme } = useStyles();
29
+
30
+ return (
31
+ <div className={classes.root}>
32
+ <div className={classes.content}>
33
+ <p>
34
+ Keycloakify offers two option for creating an account theme:{" "}
35
+ <a href="https://docs.keycloakify.dev/account-theme#multi-page" target="_blank">
36
+ Multi Page
37
+ </a>{" "}
38
+ or{" "}
39
+ <a href="https://docs.keycloakify.dev/account-theme#single-page" target="_blank">
40
+ Single Page
41
+ </a>
42
+ . Since the account Single Page does not support Storybook, here is a screenshot of it's default look:
43
+ <br />
44
+ <br />
45
+ <img className={classes.screenshot} alt="image" src={screenshotPngUrl} />
46
+ <br />
47
+ <a href="https://docs.keycloakify.dev/account-theme" target="_blank">
48
+ Learn more
49
+ </a>
50
+ </p>
51
+ </div>
52
+ </div>
53
+ );
54
+ }
55
+
56
+ const useStyles = tss.withName({ AccountSpa }).create(({ isDark, theme }) => ({
57
+ root: {
58
+ height: "100vh",
59
+ color: isDark ? "white" : "black",
60
+ backgroundColor: theme.appContentBg,
61
+ fontFamily: "'Work Sans'",
62
+ fontSize: "14px",
63
+ lineHeight: "24px",
64
+ WebkitFontSmoothing: "antialiased",
65
+ "& a": {
66
+ color: theme.colorSecondary,
67
+ textDecoration: "none",
68
+ "&:hover": {
69
+ textDecoration: "underline"
70
+ }
71
+ },
72
+ "& h1": {
73
+ fontSize: "32px",
74
+ marginBottom: 35
75
+ },
76
+ display: "flex",
77
+ justifyContent: "center"
78
+ },
79
+ content: {
80
+ maxWidth: 750,
81
+ textAlign: "center",
82
+ marginTop: 100
83
+ },
84
+ keycloakifyLogoWrapper: {
85
+ display: "flex",
86
+ justifyContent: "center"
87
+ },
88
+ keycloakifyLogo: {
89
+ width: 400
90
+ },
91
+ screenshot: {
92
+ maxWidth: "100%"
93
+ }
94
+ }));
@@ -0,0 +1,90 @@
1
+ import React from "react";
2
+ import type { Meta, StoryObj } from "@storybook/react";
3
+ import { KeycloakifyRotatingLogo } from "./KeycloakifyRotatingLogo";
4
+ import { useInsertLinkTags } from "../../dist/tools/useInsertLinkTags";
5
+ import { useOnFistMount } from "../../dist/tools/useOnFirstMount";
6
+ import { tss } from "../tss";
7
+
8
+ const meta = {
9
+ title: "Introduction"
10
+ } satisfies Meta<any>;
11
+
12
+ export default meta;
13
+
14
+ type Story = StoryObj<typeof meta>;
15
+
16
+ export const WhatIsThisWebsite: Story = {
17
+ render: () => <Introduction />
18
+ };
19
+
20
+ function Introduction() {
21
+ console.log(window.location.href);
22
+
23
+ useInsertLinkTags({
24
+ componentOrHookName: "Template",
25
+ hrefs: []
26
+ });
27
+
28
+ const { classes, theme } = useStyles();
29
+
30
+ return (
31
+ <div className={classes.root}>
32
+ <div className={classes.content}>
33
+ <div className={classes.keycloakifyLogoWrapper}>
34
+ <KeycloakifyRotatingLogo className={classes.keycloakifyLogo} />
35
+ </div>
36
+ <h1>
37
+ <a href={theme.brandUrl}>Keycloakify </a> Storybook
38
+ </h1>
39
+
40
+ <p>
41
+ This website showcases all the Keycloak user-facing pages of the Login and{" "}
42
+ <a href="https://docs.keycloakify.dev/account-theme#multi-page">Account Multi-Page theme</a>.<br />
43
+ The storybook serves as a reference to help you determine which pages you would like to personalize.
44
+ <br />
45
+ These pages are a direct React adaptation of the{" "}
46
+ <a href="https://github.com/keycloak/keycloak/tree/24.0.4/themes/src/main/resources/theme/base" target="_blank">
47
+ built-in FreeMarker Keycloak pages
48
+ </a>
49
+ .
50
+ </p>
51
+ </div>
52
+ </div>
53
+ );
54
+ }
55
+
56
+ const useStyles = tss.withName({ Introduction }).create(({ isDark, theme }) => ({
57
+ root: {
58
+ height: "100vh",
59
+ color: isDark ? "white" : "black",
60
+ backgroundColor: theme.appContentBg,
61
+ fontFamily: "'Work Sans'",
62
+ fontSize: "14px",
63
+ lineHeight: "24px",
64
+ WebkitFontSmoothing: "antialiased",
65
+ "& a": {
66
+ color: theme.colorSecondary,
67
+ textDecoration: "none",
68
+ "&:hover": {
69
+ textDecoration: "underline"
70
+ }
71
+ },
72
+ "& h1": {
73
+ fontSize: "32px",
74
+ marginBottom: 35
75
+ },
76
+ display: "flex",
77
+ justifyContent: "center"
78
+ },
79
+ content: {
80
+ maxWidth: 750,
81
+ textAlign: "center"
82
+ },
83
+ keycloakifyLogoWrapper: {
84
+ display: "flex",
85
+ justifyContent: "center"
86
+ },
87
+ keycloakifyLogo: {
88
+ width: 400
89
+ }
90
+ }));
@@ -43,9 +43,14 @@ export const WithRequiredActions: Story = {
43
43
  <KcPageStory
44
44
  kcContext={{
45
45
  message: {
46
- summary: "Server message"
46
+ summary: "Required actions: "
47
47
  },
48
- requiredActions: ["CONFIGURE_TOTP", "UPDATE_PROFILE", "VERIFY_EMAIL"]
48
+ requiredActions: ["CONFIGURE_TOTP", "UPDATE_PROFILE", "VERIFY_EMAIL", "CUSTOM_ACTION"],
49
+ "x-keycloakify": {
50
+ messages: {
51
+ "requiredAction.CUSTOM_ACTION": "Custom action"
52
+ }
53
+ }
49
54
  }}
50
55
  />
51
56
  )
@@ -122,73 +122,85 @@ export const WithSocialProviders: Story = {
122
122
  loginUrl: "google",
123
123
  alias: "google",
124
124
  providerId: "google",
125
- displayName: "Google"
125
+ displayName: "Google",
126
+ iconClasses: "fa fa-google"
126
127
  },
127
128
  {
128
129
  loginUrl: "microsoft",
129
130
  alias: "microsoft",
130
131
  providerId: "microsoft",
131
- displayName: "Microsoft"
132
+ displayName: "Microsoft",
133
+ iconClasses: "fa fa-windows"
132
134
  },
133
135
  {
134
136
  loginUrl: "facebook",
135
137
  alias: "facebook",
136
138
  providerId: "facebook",
137
- displayName: "Facebook"
139
+ displayName: "Facebook",
140
+ iconClasses: "fa fa-facebook"
138
141
  },
139
142
  {
140
143
  loginUrl: "instagram",
141
144
  alias: "instagram",
142
145
  providerId: "instagram",
143
- displayName: "Instagram"
146
+ displayName: "Instagram",
147
+ iconClasses: "fa fa-instagram"
144
148
  },
145
149
  {
146
150
  loginUrl: "twitter",
147
151
  alias: "twitter",
148
152
  providerId: "twitter",
149
- displayName: "Twitter"
153
+ displayName: "Twitter",
154
+ iconClasses: "fa fa-twitter"
150
155
  },
151
156
  {
152
157
  loginUrl: "linkedin",
153
158
  alias: "linkedin",
154
159
  providerId: "linkedin",
155
- displayName: "LinkedIn"
160
+ displayName: "LinkedIn",
161
+ iconClasses: "fa fa-linkedin"
156
162
  },
157
163
  {
158
164
  loginUrl: "stackoverflow",
159
165
  alias: "stackoverflow",
160
166
  providerId: "stackoverflow",
161
- displayName: "Stackoverflow"
167
+ displayName: "Stackoverflow",
168
+ iconClasses: "fa fa-stack-overflow"
162
169
  },
163
170
  {
164
171
  loginUrl: "github",
165
172
  alias: "github",
166
173
  providerId: "github",
167
- displayName: "Github"
174
+ displayName: "Github",
175
+ iconClasses: "fa fa-github"
168
176
  },
169
177
  {
170
178
  loginUrl: "gitlab",
171
179
  alias: "gitlab",
172
180
  providerId: "gitlab",
173
- displayName: "Gitlab"
181
+ displayName: "Gitlab",
182
+ iconClasses: "fa fa-gitlab"
174
183
  },
175
184
  {
176
185
  loginUrl: "bitbucket",
177
186
  alias: "bitbucket",
178
187
  providerId: "bitbucket",
179
- displayName: "Bitbucket"
188
+ displayName: "Bitbucket",
189
+ iconClasses: "fa fa-bitbucket"
180
190
  },
181
191
  {
182
192
  loginUrl: "paypal",
183
193
  alias: "paypal",
184
194
  providerId: "paypal",
185
- displayName: "PayPal"
195
+ displayName: "PayPal",
196
+ iconClasses: "fa fa-paypal"
186
197
  },
187
198
  {
188
199
  loginUrl: "openshift",
189
200
  alias: "openshift",
190
201
  providerId: "openshift",
191
- displayName: "OpenShift"
202
+ displayName: "OpenShift",
203
+ iconClasses: "fa fa-cloud"
192
204
  }
193
205
  ]
194
206
  }
@@ -212,7 +224,7 @@ export const WithErrorMessage: Story = {
212
224
  <KcPageStory
213
225
  kcContext={{
214
226
  message: {
215
- summary: "The time allotted for the connection has elapsed. The login process will restart from the beginning.",
227
+ summary: "The time allotted for the connection has elapsed.<br/>The login process will restart from the beginning.",
216
228
  type: "error"
217
229
  }
218
230
  }}
@@ -69,9 +69,9 @@ export const WithRestrictedToMITStudents: Story = {
69
69
  }
70
70
  },
71
71
  "x-keycloakify": {
72
- realmMessageBundleUserProfile: {
73
- "${profile.attributes.email.inputHelperTextBefore}": "Please use your MIT or Berkeley email.",
74
- "${profile.attributes.email.pattern.error}":
72
+ messages: {
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
  }
@@ -103,11 +103,11 @@ export const WithFavoritePet: Story = {
103
103
  }
104
104
  },
105
105
  "x-keycloakify": {
106
- realmMessageBundleUserProfile: {
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"
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"
111
111
  }
112
112
  }
113
113
  }}
@@ -177,7 +177,9 @@ export const WithTermsAcceptance: Story = {
177
177
  kcContext={{
178
178
  termsAcceptanceRequired: true,
179
179
  "x-keycloakify": {
180
- realmMessageBundleTermsText: "<a href='https://example.com/terms'>Service Terms of Use</a>"
180
+ messages: {
181
+ termsText: "<a href='https://example.com/terms'>Service Terms of Use</a>"
182
+ }
181
183
  }
182
184
  }}
183
185
  />
@@ -41,3 +41,44 @@ export const WithDifferentAuthenticationMethods: Story = {
41
41
  />
42
42
  )
43
43
  };
44
+
45
+ export const WithRealmTranslations: Story = {
46
+ render: () => (
47
+ <KcPageStory
48
+ kcContext={{
49
+ auth: {
50
+ authenticationSelections: [
51
+ {
52
+ authExecId: "f0c22855-eda7-4092-8565-0c22f77d2ffb",
53
+ displayName: "home-idp-discovery-display-name",
54
+ helpText: "home-idp-discovery-help-text",
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"
68
+ }
69
+ ]
70
+ },
71
+ "x-keycloakify": {
72
+ messages: {
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."
79
+ }
80
+ }
81
+ }}
82
+ />
83
+ )
84
+ };
@@ -18,7 +18,9 @@ export const Default: Story = {
18
18
  <KcPageStory
19
19
  kcContext={{
20
20
  "x-keycloakify": {
21
- realmMessageBundleTermsText: "<p>My terms in <strong>English</strong></p>"
21
+ messages: {
22
+ termsText: "<p>My terms in <strong>English</strong></p>"
23
+ }
22
24
  }
23
25
  }}
24
26
  />
@@ -34,7 +36,9 @@ export const French: Story = {
34
36
  },
35
37
  "x-keycloakify": {
36
38
  // cSpell: disable
37
- realmMessageBundleTermsText: "<p>Mes terme en <strong>Français</strong></p>"
39
+ messages: {
40
+ termsText: "<p>Mes terme en <strong>Français</strong></p>"
41
+ }
38
42
  // cSpell: enable
39
43
  }
40
44
  }}
@@ -14,7 +14,13 @@ export function useInsertLinkTags(params) {
14
14
  useOnFistMount(() => {
15
15
  const isAlreadyMounted = alreadyMountedComponentOrHookNames.has(componentOrHookName);
16
16
  if (isAlreadyMounted) {
17
- window.location.reload();
17
+ reload: {
18
+ if (new URL(window.location.href).searchParams.get("viewMode") === "docs") {
19
+ // NOTE: Special case for Storybook, we want to avoid infinite reload loop.
20
+ break reload;
21
+ }
22
+ window.location.reload();
23
+ }
18
24
  return;
19
25
  }
20
26
  alreadyMountedComponentOrHookNames.add(componentOrHookName);
@@ -1 +1 @@
1
- {"version":3,"file":"useInsertLinkTags.js","sourceRoot":"","sources":["../src/tools/useInsertLinkTags.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AACtD,OAAO,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAC9B,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAEnE,MAAM,kCAAkC,GAAG,IAAI,GAAG,EAAU,CAAC;AAE7D;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAGjC;IACG,MAAM,EAAE,KAAK,EAAE,mBAAmB,EAAE,GAAG,MAAM,CAAC;IAE9C,cAAc,CAAC,GAAG,EAAE;QAChB,MAAM,gBAAgB,GAClB,kCAAkC,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;QAEhE,IAAI,gBAAgB,EAAE;YAClB,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;YACzB,OAAO;SACV;QAED,kCAAkC,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,uBAAuB,EAAE,uBAAuB,CAAC,GAAG,UAAU,CACjE,GAAG,EAAE,CAAC,IAAI,EACV,KAAK,CACR,CAAC;IAEF,MAAM,wBAAwB,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC;QAC7C,OAAO,EAAE,EAAE,CAA4B,SAAS,CAAC;KACpD,CAAC,CAAC,CAAC;IAEJ,SAAS,CAAC,GAAG,EAAE;;QACX,IAAI,QAAQ,GAAG,IAAI,CAAC;QAEpB,OAAC,wBAAwB,CAAC,OAAO,oCAAhC,wBAAwB,CAAC,OAAO,GAAK,CAAC,KAAK,IAAI,EAAE;YAC9C,IAAI,sBAAsB,GAAgC,SAAS,CAAC;YAEpE,MAAM,GAAG,GAAoB,EAAE,CAAC;YAEhC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;gBACtB,MAAM,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;gBAEnD,GAAG,CAAC,IAAI,CACJ,IAAI,OAAO,CAAO,OAAO,CAAC,EAAE,CACxB,WAAW,CAAC,gBAAgB,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CACxD,CACJ,CAAC;gBAEF,WAAW,CAAC,GAAG,GAAG,YAAY,CAAC;gBAE/B,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC;gBAExB,IAAI,sBAAsB,KAAK,SAAS,EAAE;oBACtC,sBAAsB,CAAC,qBAAqB,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;iBACzE;qBAAM;oBACH,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;iBACtC;gBAED,sBAAsB,GAAG,WAAW,CAAC;aACxC;YAED,MAAM,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC3B,CAAC,CAAC,EAAE,EAAC,CAAC,IAAI,CAAC,GAAG,EAAE;YACZ,IAAI,CAAC,QAAQ,EAAE;gBACX,OAAO;aACV;YAED,uBAAuB,EAAE,CAAC;QAC9B,CAAC,CAAC,CAAC;QAEH,OAAO,GAAG,EAAE;YACR,QAAQ,GAAG,KAAK,CAAC;QACrB,CAAC,CAAC;IACN,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,EAAE,uBAAuB,EAAE,CAAC;AACvC,CAAC"}
1
+ {"version":3,"file":"useInsertLinkTags.js","sourceRoot":"","sources":["../src/tools/useInsertLinkTags.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AACtD,OAAO,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAC9B,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAEnE,MAAM,kCAAkC,GAAG,IAAI,GAAG,EAAU,CAAC;AAE7D;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAGjC;IACG,MAAM,EAAE,KAAK,EAAE,mBAAmB,EAAE,GAAG,MAAM,CAAC;IAE9C,cAAc,CAAC,GAAG,EAAE;QAChB,MAAM,gBAAgB,GAClB,kCAAkC,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;QAEhE,IAAI,gBAAgB,EAAE;YAClB,MAAM,EAAE;gBACJ,IACI,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,MAAM,EACvE;oBACE,2EAA2E;oBAC3E,MAAM,MAAM,CAAC;iBAChB;gBACD,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;aAC5B;YACD,OAAO;SACV;QAED,kCAAkC,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,uBAAuB,EAAE,uBAAuB,CAAC,GAAG,UAAU,CACjE,GAAG,EAAE,CAAC,IAAI,EACV,KAAK,CACR,CAAC;IAEF,MAAM,wBAAwB,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC;QAC7C,OAAO,EAAE,EAAE,CAA4B,SAAS,CAAC;KACpD,CAAC,CAAC,CAAC;IAEJ,SAAS,CAAC,GAAG,EAAE;;QACX,IAAI,QAAQ,GAAG,IAAI,CAAC;QAEpB,OAAC,wBAAwB,CAAC,OAAO,oCAAhC,wBAAwB,CAAC,OAAO,GAAK,CAAC,KAAK,IAAI,EAAE;YAC9C,IAAI,sBAAsB,GAAgC,SAAS,CAAC;YAEpE,MAAM,GAAG,GAAoB,EAAE,CAAC;YAEhC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;gBACtB,MAAM,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;gBAEnD,GAAG,CAAC,IAAI,CACJ,IAAI,OAAO,CAAO,OAAO,CAAC,EAAE,CACxB,WAAW,CAAC,gBAAgB,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CACxD,CACJ,CAAC;gBAEF,WAAW,CAAC,GAAG,GAAG,YAAY,CAAC;gBAE/B,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC;gBAExB,IAAI,sBAAsB,KAAK,SAAS,EAAE;oBACtC,sBAAsB,CAAC,qBAAqB,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;iBACzE;qBAAM;oBACH,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;iBACtC;gBAED,sBAAsB,GAAG,WAAW,CAAC;aACxC;YAED,MAAM,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC3B,CAAC,CAAC,EAAE,EAAC,CAAC,IAAI,CAAC,GAAG,EAAE;YACZ,IAAI,CAAC,QAAQ,EAAE;gBACX,OAAO;aACV;YAED,uBAAuB,EAAE,CAAC;QAC9B,CAAC,CAAC,CAAC;QAEH,OAAO,GAAG,EAAE;YACR,QAAQ,GAAG,KAAK,CAAC;QACrB,CAAC,CAAC;IACN,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,EAAE,uBAAuB,EAAE,CAAC;AACvC,CAAC"}
@@ -17,7 +17,13 @@ export function useInsertScriptTags(params) {
17
17
  useOnFistMount(() => {
18
18
  const isAlreadyMounted = alreadyMountedComponentOrHookNames.has(componentOrHookName);
19
19
  if (isAlreadyMounted) {
20
- window.location.reload();
20
+ reload: {
21
+ if (new URL(window.location.href).searchParams.get("viewMode") === "docs") {
22
+ // NOTE: Special case for Storybook, we want to avoid infinite reload loop.
23
+ break reload;
24
+ }
25
+ window.location.reload();
26
+ }
21
27
  return;
22
28
  }
23
29
  alreadyMountedComponentOrHookNames.add(componentOrHookName);