@andreyyolkin/keycloakify-vue 0.1.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 (349) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +109 -0
  3. package/keycloakify-vue/account/DefaultPage.vue +55 -0
  4. package/keycloakify-vue/account/DefaultPage.vue.d.ts +14 -0
  5. package/keycloakify-vue/account/KcContext/index.d.ts +1 -0
  6. package/keycloakify-vue/account/KcContext/index.js +0 -0
  7. package/keycloakify-vue/account/Template.useInitialize.d.ts +13 -0
  8. package/keycloakify-vue/account/Template.useInitialize.js +20 -0
  9. package/keycloakify-vue/account/Template.vue +178 -0
  10. package/keycloakify-vue/account/Template.vue.d.ts +17 -0
  11. package/keycloakify-vue/account/TemplateProps.d.ts +9 -0
  12. package/keycloakify-vue/account/TemplateProps.js +0 -0
  13. package/keycloakify-vue/account/i18n/i18n.d.ts +11 -0
  14. package/keycloakify-vue/account/i18n/i18n.js +0 -0
  15. package/keycloakify-vue/account/i18n/i18nBuilder.d.ts +18 -0
  16. package/keycloakify-vue/account/i18n/i18nBuilder.js +29 -0
  17. package/keycloakify-vue/account/i18n/index.d.ts +1 -0
  18. package/keycloakify-vue/account/i18n/index.js +1 -0
  19. package/keycloakify-vue/account/i18n/useI18n.d.ts +28 -0
  20. package/keycloakify-vue/account/i18n/useI18n.js +67 -0
  21. package/keycloakify-vue/account/index.d.ts +4 -0
  22. package/keycloakify-vue/account/index.js +8 -0
  23. package/keycloakify-vue/account/pages/Account.vue +182 -0
  24. package/keycloakify-vue/account/pages/Account.vue.d.ts +9 -0
  25. package/keycloakify-vue/account/pages/Applications.vue +192 -0
  26. package/keycloakify-vue/account/pages/Applications.vue.d.ts +9 -0
  27. package/keycloakify-vue/account/pages/FederatedIdentity.vue +123 -0
  28. package/keycloakify-vue/account/pages/FederatedIdentity.vue.d.ts +9 -0
  29. package/keycloakify-vue/account/pages/Log.vue +64 -0
  30. package/keycloakify-vue/account/pages/Log.vue.d.ts +9 -0
  31. package/keycloakify-vue/account/pages/NotImplemented.vue +24 -0
  32. package/keycloakify-vue/account/pages/NotImplemented.vue.d.ts +6 -0
  33. package/keycloakify-vue/account/pages/PageProps.d.ts +9 -0
  34. package/keycloakify-vue/account/pages/PageProps.js +0 -0
  35. package/keycloakify-vue/account/pages/Password.vue +247 -0
  36. package/keycloakify-vue/account/pages/Password.vue.d.ts +9 -0
  37. package/keycloakify-vue/account/pages/Sessions.vue +84 -0
  38. package/keycloakify-vue/account/pages/Sessions.vue.d.ts +9 -0
  39. package/keycloakify-vue/account/pages/Totp.vue +308 -0
  40. package/keycloakify-vue/account/pages/Totp.vue.d.ts +9 -0
  41. package/keycloakify-vue/bin/index.js +14 -0
  42. package/keycloakify-vue/bin/initialize-account-theme/boilerplate/KcContext.js +0 -0
  43. package/keycloakify-vue/bin/initialize-account-theme/boilerplate/KcPage.vue +23 -0
  44. package/keycloakify-vue/bin/initialize-account-theme/boilerplate/KcPageStory.js +18 -0
  45. package/keycloakify-vue/bin/initialize-account-theme/boilerplate/KcPageStory.vue +13 -0
  46. package/keycloakify-vue/bin/initialize-account-theme/boilerplate/i18n.js +5 -0
  47. package/keycloakify-vue/login/DefaultPage.vue +167 -0
  48. package/keycloakify-vue/login/DefaultPage.vue.d.ts +20 -0
  49. package/keycloakify-vue/login/Template.useInitialize.d.ts +18 -0
  50. package/keycloakify-vue/login/Template.useInitialize.js +49 -0
  51. package/keycloakify-vue/login/Template.vue +239 -0
  52. package/keycloakify-vue/login/Template.vue.d.ts +26 -0
  53. package/keycloakify-vue/login/TemplateProps.d.ts +14 -0
  54. package/keycloakify-vue/login/TemplateProps.js +0 -0
  55. package/keycloakify-vue/login/components/AddRemoveButtonsMultiValuedAttribute.vue +59 -0
  56. package/keycloakify-vue/login/components/AddRemoveButtonsMultiValuedAttribute.vue.d.ts +15 -0
  57. package/keycloakify-vue/login/components/FieldErrors.vue +35 -0
  58. package/keycloakify-vue/login/components/FieldErrors.vue.d.ts +14 -0
  59. package/keycloakify-vue/login/components/GroupLabel.vue +68 -0
  60. package/keycloakify-vue/login/components/GroupLabel.vue.d.ts +14 -0
  61. package/keycloakify-vue/login/components/InputFieldByType.vue +94 -0
  62. package/keycloakify-vue/login/components/InputFieldByType.vue.d.ts +4 -0
  63. package/keycloakify-vue/login/components/InputFieldByTypeProps.d.ts +12 -0
  64. package/keycloakify-vue/login/components/InputFieldByTypeProps.js +0 -0
  65. package/keycloakify-vue/login/components/InputTag.vue +105 -0
  66. package/keycloakify-vue/login/components/InputTag.vue.d.ts +7 -0
  67. package/keycloakify-vue/login/components/InputTagSelects.vue +108 -0
  68. package/keycloakify-vue/login/components/InputTagSelects.vue.d.ts +4 -0
  69. package/keycloakify-vue/login/components/LogoutOtherSessions.vue +27 -0
  70. package/keycloakify-vue/login/components/LogoutOtherSessions.vue.d.ts +9 -0
  71. package/keycloakify-vue/login/components/PasswordWrapper.vue +42 -0
  72. package/keycloakify-vue/login/components/PasswordWrapper.vue.d.ts +20 -0
  73. package/keycloakify-vue/login/components/SelectTag.vue +74 -0
  74. package/keycloakify-vue/login/components/SelectTag.vue.d.ts +4 -0
  75. package/keycloakify-vue/login/components/TermsAcceptance.vue +59 -0
  76. package/keycloakify-vue/login/components/TermsAcceptance.vue.d.ts +13 -0
  77. package/keycloakify-vue/login/components/TextareaTag.vue +47 -0
  78. package/keycloakify-vue/login/components/TextareaTag.vue.d.ts +4 -0
  79. package/keycloakify-vue/login/components/UserProfileFormFields.vue +119 -0
  80. package/keycloakify-vue/login/components/UserProfileFormFields.vue.d.ts +33 -0
  81. package/keycloakify-vue/login/components/UserProfileFormFieldsProps.d.ts +22 -0
  82. package/keycloakify-vue/login/components/UserProfileFormFieldsProps.js +0 -0
  83. package/keycloakify-vue/login/components/inputLabel.d.ts +4 -0
  84. package/keycloakify-vue/login/components/inputLabel.js +15 -0
  85. package/keycloakify-vue/login/i18n/i18n.d.ts +11 -0
  86. package/keycloakify-vue/login/i18n/i18n.js +0 -0
  87. package/keycloakify-vue/login/i18n/i18nBuilder.d.ts +18 -0
  88. package/keycloakify-vue/login/i18n/i18nBuilder.js +29 -0
  89. package/keycloakify-vue/login/i18n/index.d.ts +1 -0
  90. package/keycloakify-vue/login/i18n/index.js +1 -0
  91. package/keycloakify-vue/login/i18n/useI18n.d.ts +28 -0
  92. package/keycloakify-vue/login/i18n/useI18n.js +67 -0
  93. package/keycloakify-vue/login/index.d.ts +5 -0
  94. package/keycloakify-vue/login/index.js +10 -0
  95. package/keycloakify-vue/login/lib/useUserProfileForm.d.ts +53 -0
  96. package/keycloakify-vue/login/lib/useUserProfileForm.js +50 -0
  97. package/keycloakify-vue/login/pages/Code.vue +54 -0
  98. package/keycloakify-vue/login/pages/Code.vue.d.ts +9 -0
  99. package/keycloakify-vue/login/pages/DeleteAccountConfirm.vue +69 -0
  100. package/keycloakify-vue/login/pages/DeleteAccountConfirm.vue.d.ts +9 -0
  101. package/keycloakify-vue/login/pages/DeleteCredential.vue +56 -0
  102. package/keycloakify-vue/login/pages/DeleteCredential.vue.d.ts +9 -0
  103. package/keycloakify-vue/login/pages/Error.vue +41 -0
  104. package/keycloakify-vue/login/pages/Error.vue.d.ts +9 -0
  105. package/keycloakify-vue/login/pages/FrontchannelLogout.vue +67 -0
  106. package/keycloakify-vue/login/pages/FrontchannelLogout.vue.d.ts +9 -0
  107. package/keycloakify-vue/login/pages/IdpReviewUserProfile.vue +77 -0
  108. package/keycloakify-vue/login/pages/IdpReviewUserProfile.vue.d.ts +14 -0
  109. package/keycloakify-vue/login/pages/Info.vue +61 -0
  110. package/keycloakify-vue/login/pages/Info.vue.d.ts +9 -0
  111. package/keycloakify-vue/login/pages/LinkIdpAction.vue +66 -0
  112. package/keycloakify-vue/login/pages/LinkIdpAction.vue.d.ts +9 -0
  113. package/keycloakify-vue/login/pages/Login.vue +230 -0
  114. package/keycloakify-vue/login/pages/Login.vue.d.ts +9 -0
  115. package/keycloakify-vue/login/pages/LoginConfigTotp.vue +233 -0
  116. package/keycloakify-vue/login/pages/LoginConfigTotp.vue.d.ts +9 -0
  117. package/keycloakify-vue/login/pages/LoginIdpLinkConfirm.vue +57 -0
  118. package/keycloakify-vue/login/pages/LoginIdpLinkConfirm.vue.d.ts +9 -0
  119. package/keycloakify-vue/login/pages/LoginIdpLinkConfirmOverride.vue +56 -0
  120. package/keycloakify-vue/login/pages/LoginIdpLinkConfirmOverride.vue.d.ts +9 -0
  121. package/keycloakify-vue/login/pages/LoginIdpLinkEmail.vue +52 -0
  122. package/keycloakify-vue/login/pages/LoginIdpLinkEmail.vue.d.ts +9 -0
  123. package/keycloakify-vue/login/pages/LoginOauth2DeviceVerifyUserCode.vue +82 -0
  124. package/keycloakify-vue/login/pages/LoginOauth2DeviceVerifyUserCode.vue.d.ts +9 -0
  125. package/keycloakify-vue/login/pages/LoginOauthGrant.vue +131 -0
  126. package/keycloakify-vue/login/pages/LoginOauthGrant.vue.d.ts +9 -0
  127. package/keycloakify-vue/login/pages/LoginOtp.vue +135 -0
  128. package/keycloakify-vue/login/pages/LoginOtp.vue.d.ts +9 -0
  129. package/keycloakify-vue/login/pages/LoginPageExpired.vue +44 -0
  130. package/keycloakify-vue/login/pages/LoginPageExpired.vue.d.ts +9 -0
  131. package/keycloakify-vue/login/pages/LoginPasskeysConditionalAuthenticate.useScript.d.ts +21 -0
  132. package/keycloakify-vue/login/pages/LoginPasskeysConditionalAuthenticate.useScript.js +74 -0
  133. package/keycloakify-vue/login/pages/LoginPasskeysConditionalAuthenticate.vue +255 -0
  134. package/keycloakify-vue/login/pages/LoginPasskeysConditionalAuthenticate.vue.d.ts +9 -0
  135. package/keycloakify-vue/login/pages/LoginPassword.useScript.d.ts +23 -0
  136. package/keycloakify-vue/login/pages/LoginPassword.useScript.js +64 -0
  137. package/keycloakify-vue/login/pages/LoginPassword.vue +191 -0
  138. package/keycloakify-vue/login/pages/LoginPassword.vue.d.ts +9 -0
  139. package/keycloakify-vue/login/pages/LoginRecoveryAuthnCodeConfig.useScript.d.ts +9 -0
  140. package/keycloakify-vue/login/pages/LoginRecoveryAuthnCodeConfig.useScript.js +139 -0
  141. package/keycloakify-vue/login/pages/LoginRecoveryAuthnCodeConfig.vue +183 -0
  142. package/keycloakify-vue/login/pages/LoginRecoveryAuthnCodeConfig.vue.d.ts +9 -0
  143. package/keycloakify-vue/login/pages/LoginRecoveryAuthnCodeInput.vue +90 -0
  144. package/keycloakify-vue/login/pages/LoginRecoveryAuthnCodeInput.vue.d.ts +9 -0
  145. package/keycloakify-vue/login/pages/LoginResetOtp.vue +88 -0
  146. package/keycloakify-vue/login/pages/LoginResetOtp.vue.d.ts +9 -0
  147. package/keycloakify-vue/login/pages/LoginResetPassword.vue +114 -0
  148. package/keycloakify-vue/login/pages/LoginResetPassword.vue.d.ts +9 -0
  149. package/keycloakify-vue/login/pages/LoginUpdatePassword.vue +145 -0
  150. package/keycloakify-vue/login/pages/LoginUpdatePassword.vue.d.ts +9 -0
  151. package/keycloakify-vue/login/pages/LoginUpdateProfile.vue +94 -0
  152. package/keycloakify-vue/login/pages/LoginUpdateProfile.vue.d.ts +14 -0
  153. package/keycloakify-vue/login/pages/LoginUsername.useScript.d.ts +23 -0
  154. package/keycloakify-vue/login/pages/LoginUsername.useScript.js +64 -0
  155. package/keycloakify-vue/login/pages/LoginUsername.vue +263 -0
  156. package/keycloakify-vue/login/pages/LoginUsername.vue.d.ts +9 -0
  157. package/keycloakify-vue/login/pages/LoginVerifyEmail.vue +39 -0
  158. package/keycloakify-vue/login/pages/LoginVerifyEmail.vue.d.ts +9 -0
  159. package/keycloakify-vue/login/pages/LoginX509Info.vue +120 -0
  160. package/keycloakify-vue/login/pages/LoginX509Info.vue.d.ts +9 -0
  161. package/keycloakify-vue/login/pages/LogoutConfirm.vue +73 -0
  162. package/keycloakify-vue/login/pages/LogoutConfirm.vue.d.ts +9 -0
  163. package/keycloakify-vue/login/pages/NotImplemented.vue +12 -0
  164. package/keycloakify-vue/login/pages/NotImplemented.vue.d.ts +6 -0
  165. package/keycloakify-vue/login/pages/PageProps.d.ts +9 -0
  166. package/keycloakify-vue/login/pages/PageProps.js +0 -0
  167. package/keycloakify-vue/login/pages/Register.vue +158 -0
  168. package/keycloakify-vue/login/pages/Register.vue.d.ts +14 -0
  169. package/keycloakify-vue/login/pages/SamlPostForm.vue +75 -0
  170. package/keycloakify-vue/login/pages/SamlPostForm.vue.d.ts +9 -0
  171. package/keycloakify-vue/login/pages/SelectAuthenticator.vue +65 -0
  172. package/keycloakify-vue/login/pages/SelectAuthenticator.vue.d.ts +9 -0
  173. package/keycloakify-vue/login/pages/SelectOrganization.vue +89 -0
  174. package/keycloakify-vue/login/pages/SelectOrganization.vue.d.ts +9 -0
  175. package/keycloakify-vue/login/pages/Terms.vue +56 -0
  176. package/keycloakify-vue/login/pages/Terms.vue.d.ts +9 -0
  177. package/keycloakify-vue/login/pages/UpdateEmail.vue +100 -0
  178. package/keycloakify-vue/login/pages/UpdateEmail.vue.d.ts +14 -0
  179. package/keycloakify-vue/login/pages/WebauthnAuthenticate.useScript.d.ts +22 -0
  180. package/keycloakify-vue/login/pages/WebauthnAuthenticate.useScript.js +53 -0
  181. package/keycloakify-vue/login/pages/WebauthnAuthenticate.vue +186 -0
  182. package/keycloakify-vue/login/pages/WebauthnAuthenticate.vue.d.ts +9 -0
  183. package/keycloakify-vue/login/pages/WebauthnError.vue +84 -0
  184. package/keycloakify-vue/login/pages/WebauthnError.vue.d.ts +9 -0
  185. package/keycloakify-vue/login/pages/WebauthnRegister.useScript.d.ts +28 -0
  186. package/keycloakify-vue/login/pages/WebauthnRegister.useScript.js +75 -0
  187. package/keycloakify-vue/login/pages/WebauthnRegister.vue +105 -0
  188. package/keycloakify-vue/login/pages/WebauthnRegister.vue.d.ts +9 -0
  189. package/keycloakify-vue/tools/useInsertLinkTags.d.ts +12 -0
  190. package/keycloakify-vue/tools/useInsertLinkTags.js +47 -0
  191. package/keycloakify-vue/tools/useInsertScriptTags.d.ts +19 -0
  192. package/keycloakify-vue/tools/useInsertScriptTags.js +56 -0
  193. package/keycloakify-vue/tools/useSetClassName.d.ts +4 -0
  194. package/keycloakify-vue/tools/useSetClassName.js +16 -0
  195. package/package.json +553 -0
  196. package/src/account/DefaultPage.vue +55 -0
  197. package/src/account/KcContext/index.ts +1 -0
  198. package/src/account/Template.useInitialize.ts +34 -0
  199. package/src/account/Template.vue +178 -0
  200. package/src/account/TemplateProps.ts +11 -0
  201. package/src/account/i18n/i18n.ts +16 -0
  202. package/src/account/i18n/i18nBuilder.ts +100 -0
  203. package/src/account/i18n/index.ts +1 -0
  204. package/src/account/i18n/useI18n.ts +128 -0
  205. package/src/account/index.ts +4 -0
  206. package/src/account/pages/Account.vue +182 -0
  207. package/src/account/pages/Applications.vue +192 -0
  208. package/src/account/pages/FederatedIdentity.vue +123 -0
  209. package/src/account/pages/Log.vue +64 -0
  210. package/src/account/pages/NotImplemented.vue +24 -0
  211. package/src/account/pages/PageProps.ts +10 -0
  212. package/src/account/pages/Password.vue +247 -0
  213. package/src/account/pages/Sessions.vue +84 -0
  214. package/src/account/pages/Totp.vue +308 -0
  215. package/src/bin/initialize-account-theme/boilerplate/KcContext.ts +11 -0
  216. package/src/bin/initialize-account-theme/boilerplate/KcPage.vue +23 -0
  217. package/src/bin/initialize-account-theme/boilerplate/KcPageStory.ts +22 -0
  218. package/src/bin/initialize-account-theme/boilerplate/KcPageStory.vue +13 -0
  219. package/src/bin/initialize-account-theme/boilerplate/i18n.ts +8 -0
  220. package/src/login/DefaultPage.vue +167 -0
  221. package/src/login/Template.useInitialize.ts +71 -0
  222. package/src/login/Template.vue +239 -0
  223. package/src/login/TemplateProps.ts +17 -0
  224. package/src/login/components/AddRemoveButtonsMultiValuedAttribute.vue +59 -0
  225. package/src/login/components/FieldErrors.vue +35 -0
  226. package/src/login/components/GroupLabel.vue +68 -0
  227. package/src/login/components/InputFieldByType.vue +94 -0
  228. package/src/login/components/InputFieldByTypeProps.ts +13 -0
  229. package/src/login/components/InputTag.vue +105 -0
  230. package/src/login/components/InputTagSelects.vue +108 -0
  231. package/src/login/components/LogoutOtherSessions.vue +27 -0
  232. package/src/login/components/PasswordWrapper.vue +42 -0
  233. package/src/login/components/SelectTag.vue +74 -0
  234. package/src/login/components/TermsAcceptance.vue +59 -0
  235. package/src/login/components/TextareaTag.vue +47 -0
  236. package/src/login/components/UserProfileFormFields.vue +119 -0
  237. package/src/login/components/UserProfileFormFieldsProps.ts +22 -0
  238. package/src/login/components/inputLabel.ts +18 -0
  239. package/src/login/i18n/i18n.ts +16 -0
  240. package/src/login/i18n/i18nBuilder.ts +100 -0
  241. package/src/login/i18n/index.ts +1 -0
  242. package/src/login/i18n/useI18n.ts +128 -0
  243. package/src/login/index.ts +5 -0
  244. package/src/login/lib/useUserProfileForm.ts +121 -0
  245. package/src/login/pages/Code.vue +54 -0
  246. package/src/login/pages/DeleteAccountConfirm.vue +69 -0
  247. package/src/login/pages/DeleteCredential.vue +56 -0
  248. package/src/login/pages/Error.vue +41 -0
  249. package/src/login/pages/FrontchannelLogout.vue +67 -0
  250. package/src/login/pages/IdpReviewUserProfile.vue +77 -0
  251. package/src/login/pages/Info.vue +61 -0
  252. package/src/login/pages/LinkIdpAction.vue +66 -0
  253. package/src/login/pages/Login.vue +230 -0
  254. package/src/login/pages/LoginConfigTotp.vue +233 -0
  255. package/src/login/pages/LoginIdpLinkConfirm.vue +57 -0
  256. package/src/login/pages/LoginIdpLinkConfirmOverride.vue +56 -0
  257. package/src/login/pages/LoginIdpLinkEmail.vue +52 -0
  258. package/src/login/pages/LoginOauth2DeviceVerifyUserCode.vue +82 -0
  259. package/src/login/pages/LoginOauthGrant.vue +131 -0
  260. package/src/login/pages/LoginOtp.vue +135 -0
  261. package/src/login/pages/LoginPageExpired.vue +44 -0
  262. package/src/login/pages/LoginPasskeysConditionalAuthenticate.useScript.ts +96 -0
  263. package/src/login/pages/LoginPasskeysConditionalAuthenticate.vue +255 -0
  264. package/src/login/pages/LoginPassword.useScript.ts +88 -0
  265. package/src/login/pages/LoginPassword.vue +191 -0
  266. package/src/login/pages/LoginRecoveryAuthnCodeConfig.useScript.ts +152 -0
  267. package/src/login/pages/LoginRecoveryAuthnCodeConfig.vue +183 -0
  268. package/src/login/pages/LoginRecoveryAuthnCodeInput.vue +90 -0
  269. package/src/login/pages/LoginResetOtp.vue +88 -0
  270. package/src/login/pages/LoginResetPassword.vue +114 -0
  271. package/src/login/pages/LoginUpdatePassword.vue +145 -0
  272. package/src/login/pages/LoginUpdateProfile.vue +94 -0
  273. package/src/login/pages/LoginUsername.useScript.ts +88 -0
  274. package/src/login/pages/LoginUsername.vue +263 -0
  275. package/src/login/pages/LoginVerifyEmail.vue +39 -0
  276. package/src/login/pages/LoginX509Info.vue +120 -0
  277. package/src/login/pages/LogoutConfirm.vue +73 -0
  278. package/src/login/pages/NotImplemented.vue +12 -0
  279. package/src/login/pages/PageProps.ts +10 -0
  280. package/src/login/pages/Register.vue +158 -0
  281. package/src/login/pages/SamlPostForm.vue +75 -0
  282. package/src/login/pages/SelectAuthenticator.vue +65 -0
  283. package/src/login/pages/SelectOrganization.vue +89 -0
  284. package/src/login/pages/Terms.vue +56 -0
  285. package/src/login/pages/UpdateEmail.vue +100 -0
  286. package/src/login/pages/WebauthnAuthenticate.useScript.ts +75 -0
  287. package/src/login/pages/WebauthnAuthenticate.vue +186 -0
  288. package/src/login/pages/WebauthnError.vue +84 -0
  289. package/src/login/pages/WebauthnRegister.useScript.ts +109 -0
  290. package/src/login/pages/WebauthnRegister.vue +105 -0
  291. package/src/tools/useInsertLinkTags.ts +62 -0
  292. package/src/tools/useInsertScriptTags.ts +75 -0
  293. package/src/tools/useSetClassName.ts +15 -0
  294. package/stories/account/KcContext.ts +13 -0
  295. package/stories/account/KcContextMock.ts +26 -0
  296. package/stories/account/KcPage.vue +26 -0
  297. package/stories/account/KcPageStory.vue +13 -0
  298. package/stories/account/i18n.ts +7 -0
  299. package/stories/account/pages/Account.stories.ts +22 -0
  300. package/stories/account/pages/Applications.stories.ts +70 -0
  301. package/stories/account/pages/FederatedIdentity.stories.ts +64 -0
  302. package/stories/account/pages/Log.stories.ts +42 -0
  303. package/stories/account/pages/Password.stories.ts +22 -0
  304. package/stories/account/pages/Sessions.stories.ts +41 -0
  305. package/stories/account/pages/Totp.stories.ts +33 -0
  306. package/stories/kc.gen.ts +17 -0
  307. package/stories/login/KcContext.ts +13 -0
  308. package/stories/login/KcContextMock.ts +26 -0
  309. package/stories/login/KcPage.vue +28 -0
  310. package/stories/login/KcPageStory.vue +13 -0
  311. package/stories/login/i18n.ts +7 -0
  312. package/stories/login/pages/Code.stories.ts +50 -0
  313. package/stories/login/pages/DeleteAccountConfirm.stories.ts +32 -0
  314. package/stories/login/pages/DeleteCredential.stories.ts +23 -0
  315. package/stories/login/pages/Error.stories.ts +53 -0
  316. package/stories/login/pages/FrontchannelLogout.stories.ts +24 -0
  317. package/stories/login/pages/IdpReviewUserProfile.stories.ts +56 -0
  318. package/stories/login/pages/Info.stories.ts +52 -0
  319. package/stories/login/pages/LinkIdpAction.stories.ts +30 -0
  320. package/stories/login/pages/Login.stories.ts +76 -0
  321. package/stories/login/pages/LoginConfigTotp.stories.ts +53 -0
  322. package/stories/login/pages/LoginIdpLinkConfirm.stories.ts +34 -0
  323. package/stories/login/pages/LoginIdpLinkConfirmOverride.stories.ts +14 -0
  324. package/stories/login/pages/LoginIdpLinkEmail.stories.ts +60 -0
  325. package/stories/login/pages/LoginOauth2DeviceVerifyUserCode.stories.ts +42 -0
  326. package/stories/login/pages/LoginOauthGrant.stories.ts +95 -0
  327. package/stories/login/pages/LoginOtp.stories.ts +92 -0
  328. package/stories/login/pages/LoginPageExpired.stories.ts +29 -0
  329. package/stories/login/pages/LoginPasskeysConditionalAuthenticate.stories.ts +14 -0
  330. package/stories/login/pages/LoginPassword.stories.ts +49 -0
  331. package/stories/login/pages/LoginRecoveryAuthnCodeConfig.stories.ts +28 -0
  332. package/stories/login/pages/LoginRecoveryAuthnCodeInput.stories.ts +14 -0
  333. package/stories/login/pages/LoginResetOtp.stories.ts +69 -0
  334. package/stories/login/pages/LoginResetPassword.stories.ts +48 -0
  335. package/stories/login/pages/LoginUpdatePassword.stories.ts +52 -0
  336. package/stories/login/pages/LoginUpdateProfile.stories.ts +29 -0
  337. package/stories/login/pages/LoginUsername.stories.ts +25 -0
  338. package/stories/login/pages/LoginVerifyEmail.stories.ts +63 -0
  339. package/stories/login/pages/LoginX509Info.stories.ts +29 -0
  340. package/stories/login/pages/LogoutConfirm.stories.ts +35 -0
  341. package/stories/login/pages/Register.stories.ts +76 -0
  342. package/stories/login/pages/SamlPostForm.stories.ts +14 -0
  343. package/stories/login/pages/SelectAuthenticator.stories.ts +89 -0
  344. package/stories/login/pages/SelectOrganization.stories.ts +63 -0
  345. package/stories/login/pages/Terms.stories.ts +78 -0
  346. package/stories/login/pages/UpdateEmail.stories.ts +28 -0
  347. package/stories/login/pages/WebauthnAuthenticate.stories.ts +147 -0
  348. package/stories/login/pages/WebauthnError.stories.ts +77 -0
  349. package/stories/login/pages/WebauthnRegister.stories.ts +54 -0
@@ -0,0 +1,139 @@
1
+ import { onMounted } from "vue";
2
+ import { useInsertScriptTags } from "../../tools/useInsertScriptTags";
3
+ import { waitForElementMountedOnDom } from "keycloakify/tools/waitForElementMountedOnDom";
4
+ function useScript(params) {
5
+ const { olRecoveryCodesListId, i18n } = params;
6
+ const { msgStr, isFetchingTranslations } = i18n;
7
+ const { insertScriptTags } = useInsertScriptTags({
8
+ componentOrHookName: "LoginRecoveryAuthnCodeConfig",
9
+ scriptTags: [
10
+ {
11
+ type: "text/javascript",
12
+ textContent: () => `
13
+
14
+ /* copy recovery codes */
15
+ function copyRecoveryCodes() {
16
+ var tmpTextarea = document.createElement("textarea");
17
+ var codes = document.querySelectorAll("#${olRecoveryCodesListId} li");
18
+ for (i = 0; i < codes.length; i++) {
19
+ tmpTextarea.value = tmpTextarea.value + codes[i].innerText + "\\n";
20
+ }
21
+ document.body.appendChild(tmpTextarea);
22
+ tmpTextarea.select();
23
+ document.execCommand("copy");
24
+ document.body.removeChild(tmpTextarea);
25
+ }
26
+
27
+ var copyButton = document.getElementById("copyRecoveryCodes");
28
+ copyButton && copyButton.addEventListener("click", function () {
29
+ copyRecoveryCodes();
30
+ });
31
+
32
+ /* download recovery codes */
33
+ function formatCurrentDateTime() {
34
+ var dt = new Date();
35
+ var options = {
36
+ month: 'long',
37
+ day: 'numeric',
38
+ year: 'numeric',
39
+ hour: 'numeric',
40
+ minute: 'numeric',
41
+ timeZoneName: 'short'
42
+ };
43
+
44
+ return dt.toLocaleString('en-US', options);
45
+ }
46
+
47
+ function parseRecoveryCodeList() {
48
+ var recoveryCodes = document.querySelectorAll("#${olRecoveryCodesListId} li");
49
+ var recoveryCodeList = "";
50
+
51
+ for (var i = 0; i < recoveryCodes.length; i++) {
52
+ var recoveryCodeLiElement = recoveryCodes[i].innerText;
53
+ recoveryCodeList += recoveryCodeLiElement + "\\r\\n";
54
+ }
55
+
56
+ return recoveryCodeList;
57
+ }
58
+
59
+ function buildDownloadContent() {
60
+ var recoveryCodeList = parseRecoveryCodeList();
61
+ var dt = new Date();
62
+ var options = {
63
+ month: 'long',
64
+ day: 'numeric',
65
+ year: 'numeric',
66
+ hour: 'numeric',
67
+ minute: 'numeric',
68
+ timeZoneName: 'short'
69
+ };
70
+
71
+ return fileBodyContent =
72
+ ${JSON.stringify(msgStr("recovery-codes-download-file-header"))} + "\\n\\n" +
73
+ recoveryCodeList + "\\n" +
74
+ ${JSON.stringify(msgStr("recovery-codes-download-file-description"))} + "\\n\\n" +
75
+ ${JSON.stringify(msgStr("recovery-codes-download-file-date"))} + " " + formatCurrentDateTime();
76
+ }
77
+
78
+ function setUpDownloadLinkAndDownload(filename, text) {
79
+ var el = document.createElement('a');
80
+ el.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text));
81
+ el.setAttribute('download', filename);
82
+ el.style.display = 'none';
83
+ document.body.appendChild(el);
84
+ el.click();
85
+ document.body.removeChild(el);
86
+ }
87
+
88
+ function downloadRecoveryCodes() {
89
+ setUpDownloadLinkAndDownload('kc-download-recovery-codes.txt', buildDownloadContent());
90
+ }
91
+
92
+ var downloadButton = document.getElementById("downloadRecoveryCodes");
93
+ downloadButton && downloadButton.addEventListener("click", downloadRecoveryCodes);
94
+
95
+ /* print recovery codes */
96
+ function buildPrintContent() {
97
+ var recoveryCodeListHTML = document.getElementById('${olRecoveryCodesListId}').innerHTML;
98
+ var styles =
99
+ \`@page { size: auto; margin-top: 0; }
100
+ body { width: 480px; }
101
+ div { list-style-type: none; font-family: monospace }
102
+ p:first-of-type { margin-top: 48px }\`;
103
+
104
+ return printFileContent =
105
+ "<html><style>" + styles + "</style><body>" +
106
+ "<title>kc-download-recovery-codes</title>" +
107
+ "<p>" + ${JSON.stringify(msgStr("recovery-codes-download-file-header"))} + "</p>" +
108
+ "<div>" + recoveryCodeListHTML + "</div>" +
109
+ "<p>" + ${JSON.stringify(msgStr("recovery-codes-download-file-description"))} + "</p>" +
110
+ "<p>" + ${JSON.stringify(msgStr("recovery-codes-download-file-date"))} + " " + formatCurrentDateTime() + "</p>" +
111
+ "</body></html>";
112
+ }
113
+
114
+ function printRecoveryCodes() {
115
+ var w = window.open();
116
+ w.document.write(buildPrintContent());
117
+ w.print();
118
+ w.close();
119
+ }
120
+
121
+ var printButton = document.getElementById("printRecoveryCodes");
122
+ printButton && printButton.addEventListener("click", printRecoveryCodes);
123
+ `
124
+ }
125
+ ]
126
+ });
127
+ onMounted(async () => {
128
+ if (isFetchingTranslations) {
129
+ return;
130
+ }
131
+ await waitForElementMountedOnDom({
132
+ elementId: olRecoveryCodesListId
133
+ });
134
+ insertScriptTags();
135
+ });
136
+ }
137
+ export {
138
+ useScript
139
+ };
@@ -0,0 +1,183 @@
1
+ <script setup lang="ts">
2
+ import { clsx } from 'keycloakify/tools/clsx';
3
+ import type { KcContext } from 'keycloakify/login/KcContext';
4
+ import { getKcClsx } from 'keycloakify/login/lib/kcClsx';
5
+ import LogoutOtherSessions from '../components/LogoutOtherSessions.vue';
6
+ import type { I18n } from '../i18n/i18n';
7
+ import type { PageProps } from './PageProps';
8
+ import { useScript } from './LoginRecoveryAuthnCodeConfig.useScript';
9
+
10
+ const props = defineProps<PageProps<Extract<KcContext, { pageId: 'login-recovery-authn-code-config.ftl' }>, I18n>>();
11
+
12
+ const { kcClsx } = getKcClsx({
13
+ doUseDefaultCss: props.doUseDefaultCss,
14
+ classes: props.classes,
15
+ });
16
+
17
+ const kcContext = props.kcContext;
18
+ const { recoveryAuthnCodesConfigBean, isAppInitiatedAction } = kcContext;
19
+
20
+ const olRecoveryCodesListId = 'kc-recovery-codes-list';
21
+
22
+ useScript({ olRecoveryCodesListId, i18n: props.i18n });
23
+ </script>
24
+
25
+ <template>
26
+ <component
27
+ :is="Template"
28
+ :kcContext="kcContext"
29
+ :i18n="i18n"
30
+ :doUseDefaultCss="doUseDefaultCss"
31
+ :classes="classes"
32
+ >
33
+ <template #header>
34
+ <component :is="i18n.msg('recovery-code-config-header')" />
35
+ </template>
36
+
37
+ <div
38
+ :class="clsx('pf-c-alert', 'pf-m-warning', 'pf-m-inline', kcClsx('kcRecoveryCodesWarning'))"
39
+ aria-label="Warning alert"
40
+ >
41
+ <div class="pf-c-alert__icon">
42
+ <i
43
+ class="pficon-warning-triangle-o"
44
+ aria-hidden="true"
45
+ ></i>
46
+ </div>
47
+ <h4 class="pf-c-alert__title">
48
+ <span class="pf-screen-reader">Warning alert:</span>
49
+ <component :is="i18n.msg('recovery-code-config-warning-title')" />
50
+ </h4>
51
+ <div class="pf-c-alert__description">
52
+ <p>
53
+ <component :is="i18n.msg('recovery-code-config-warning-message')" />
54
+ </p>
55
+ </div>
56
+ </div>
57
+
58
+ <ol
59
+ :id="olRecoveryCodesListId"
60
+ :class="kcClsx('kcRecoveryCodesList')"
61
+ >
62
+ <li
63
+ v-for="(code, index) in recoveryAuthnCodesConfigBean.generatedRecoveryAuthnCodesList"
64
+ :key="code"
65
+ >
66
+ <span>{{ index + 1 }}:</span> {{ code.slice(0, 4) }}-{{ code.slice(4, 8) }}-{{ code.slice(8) }}
67
+ </li>
68
+ </ol>
69
+
70
+ <!-- actions -->
71
+ <div :class="kcClsx('kcRecoveryCodesActions')">
72
+ <button
73
+ id="printRecoveryCodes"
74
+ :class="clsx('pf-c-button', 'pf-m-link')"
75
+ type="button"
76
+ >
77
+ <i
78
+ class="pficon-print"
79
+ aria-hidden="true"
80
+ ></i>
81
+ <component :is="i18n.msg('recovery-codes-print')" />
82
+ </button>
83
+ <button
84
+ id="downloadRecoveryCodes"
85
+ :class="clsx('pf-c-button', 'pf-m-link')"
86
+ type="button"
87
+ >
88
+ <i
89
+ class="pficon-save"
90
+ aria-hidden="true"
91
+ ></i>
92
+ <component :is="i18n.msg('recovery-codes-download')" />
93
+ </button>
94
+ <button
95
+ id="copyRecoveryCodes"
96
+ :class="clsx('pf-c-button', 'pf-m-link')"
97
+ type="button"
98
+ >
99
+ <i
100
+ class="pficon-blueprint"
101
+ aria-hidden="true"
102
+ ></i>
103
+ <component :is="i18n.msg('recovery-codes-copy')" />
104
+ </button>
105
+ </div>
106
+
107
+ <!-- confirmation checkbox -->
108
+ <div :class="kcClsx('kcFormOptionsClass')">
109
+ <input
110
+ :class="kcClsx('kcCheckInputClass')"
111
+ type="checkbox"
112
+ id="kcRecoveryCodesConfirmationCheck"
113
+ name="kcRecoveryCodesConfirmationCheck"
114
+ @change="
115
+ (event) => {
116
+ // @ts-expect-error: This is inherited from the original code
117
+ document.getElementById('saveRecoveryAuthnCodesBtn').disabled = !(event.target as HTMLInputElement).checked;
118
+ }
119
+ "
120
+ />
121
+ <label for="kcRecoveryCodesConfirmationCheck">
122
+ <component :is="i18n.msg('recovery-codes-confirmation-message')" />
123
+ </label>
124
+ </div>
125
+
126
+ <form
127
+ :action="kcContext.url.loginAction"
128
+ :class="kcClsx('kcFormGroupClass')"
129
+ id="kc-recovery-codes-settings-form"
130
+ method="post"
131
+ >
132
+ <input
133
+ type="hidden"
134
+ name="generatedRecoveryAuthnCodes"
135
+ :value="recoveryAuthnCodesConfigBean.generatedRecoveryAuthnCodesAsString"
136
+ />
137
+ <input
138
+ type="hidden"
139
+ name="generatedAt"
140
+ :value="recoveryAuthnCodesConfigBean.generatedAt"
141
+ />
142
+ <input
143
+ type="hidden"
144
+ id="userLabel"
145
+ name="userLabel"
146
+ :value="i18n.msgStr('recovery-codes-label-default')"
147
+ />
148
+
149
+ <LogoutOtherSessions
150
+ :kcClsx="kcClsx"
151
+ :i18n="i18n"
152
+ />
153
+
154
+ <template v-if="isAppInitiatedAction">
155
+ <input
156
+ type="submit"
157
+ :class="kcClsx('kcButtonClass', 'kcButtonPrimaryClass', 'kcButtonLargeClass')"
158
+ id="saveRecoveryAuthnCodesBtn"
159
+ :value="i18n.msgStr('recovery-codes-action-complete')"
160
+ disabled
161
+ />
162
+ <button
163
+ type="submit"
164
+ :class="kcClsx('kcButtonClass', 'kcButtonDefaultClass', 'kcButtonLargeClass')"
165
+ id="cancelRecoveryAuthnCodesBtn"
166
+ name="cancel-aia"
167
+ value="true"
168
+ >
169
+ <component :is="i18n.msg('recovery-codes-action-cancel')" />
170
+ </button>
171
+ </template>
172
+ <template v-else>
173
+ <input
174
+ type="submit"
175
+ :class="kcClsx('kcButtonClass', 'kcButtonPrimaryClass', 'kcButtonBlockClass', 'kcButtonLargeClass')"
176
+ id="saveRecoveryAuthnCodesBtn"
177
+ :value="i18n.msgStr('recovery-codes-action-complete')"
178
+ disabled
179
+ />
180
+ </template>
181
+ </form>
182
+ </component>
183
+ </template>
@@ -0,0 +1,9 @@
1
+ import type { KcContext } from 'keycloakify/login/KcContext';
2
+ import type { I18n } from '../i18n/i18n';
3
+ import type { PageProps } from './PageProps';
4
+ type __VLS_Props = PageProps<Extract<KcContext, {
5
+ pageId: 'login-recovery-authn-code-config.ftl';
6
+ }>, I18n>;
7
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
8
+ declare const _default: typeof __VLS_export;
9
+ export default _default;
@@ -0,0 +1,90 @@
1
+ <script setup lang="ts">
2
+ import { kcSanitize } from 'keycloakify/lib/kcSanitize';
3
+ import type { KcContext } from 'keycloakify/login/KcContext';
4
+ import { getKcClsx } from 'keycloakify/login/lib/kcClsx';
5
+ import type { I18n } from '../i18n/i18n';
6
+ import type { PageProps } from './PageProps';
7
+
8
+ const props = defineProps<PageProps<Extract<KcContext, { pageId: 'login-recovery-authn-code-input.ftl' }>, I18n>>();
9
+
10
+ const { kcClsx } = getKcClsx({
11
+ doUseDefaultCss: props.doUseDefaultCss,
12
+ classes: props.classes,
13
+ });
14
+
15
+ const kcContext = props.kcContext;
16
+ const { url, messagesPerField, recoveryAuthnCodesInputBean } = kcContext;
17
+ </script>
18
+
19
+ <template>
20
+ <component
21
+ :is="Template"
22
+ :kcContext="kcContext"
23
+ :i18n="i18n"
24
+ :doUseDefaultCss="doUseDefaultCss"
25
+ :classes="classes"
26
+ :displayMessage="!messagesPerField.existsError('recoveryCodeInput')"
27
+ >
28
+ <template #header>
29
+ <component :is="i18n.msg('auth-recovery-code-header')" />
30
+ </template>
31
+
32
+ <form
33
+ id="kc-recovery-code-login-form"
34
+ :class="kcClsx('kcFormClass')"
35
+ :action="url.loginAction"
36
+ method="post"
37
+ >
38
+ <div :class="kcClsx('kcFormGroupClass')">
39
+ <div :class="kcClsx('kcLabelWrapperClass')">
40
+ <label
41
+ for="recoveryCodeInput"
42
+ :class="kcClsx('kcLabelClass')"
43
+ >
44
+ <component :is="i18n.msg('auth-recovery-code-prompt', `${recoveryAuthnCodesInputBean.codeNumber}`)" />
45
+ </label>
46
+ </div>
47
+ <div :class="kcClsx('kcInputWrapperClass')">
48
+ <input
49
+ :tabindex="1"
50
+ id="recoveryCodeInput"
51
+ name="recoveryCodeInput"
52
+ :aria-invalid="messagesPerField.existsError('recoveryCodeInput')"
53
+ autocomplete="off"
54
+ type="text"
55
+ :class="kcClsx('kcInputClass')"
56
+ autofocus
57
+ />
58
+ <span
59
+ v-if="messagesPerField.existsError('recoveryCodeInput')"
60
+ id="input-error"
61
+ :class="kcClsx('kcInputErrorMessageClass')"
62
+ aria-live="polite"
63
+ v-html="kcSanitize(messagesPerField.get('recoveryCodeInput'))"
64
+ ></span>
65
+ </div>
66
+ </div>
67
+
68
+ <div :class="kcClsx('kcFormGroupClass')">
69
+ <div
70
+ id="kc-form-options"
71
+ :class="kcClsx('kcFormOptionsWrapperClass')"
72
+ >
73
+ <div :class="kcClsx('kcFormOptionsWrapperClass')"></div>
74
+ </div>
75
+ <div
76
+ id="kc-form-buttons"
77
+ :class="kcClsx('kcFormButtonsClass')"
78
+ >
79
+ <input
80
+ :class="kcClsx('kcButtonClass', 'kcButtonPrimaryClass', 'kcButtonBlockClass', 'kcButtonLargeClass')"
81
+ name="login"
82
+ id="kc-login"
83
+ type="submit"
84
+ :value="i18n.msgStr('doLogIn')"
85
+ />
86
+ </div>
87
+ </div>
88
+ </form>
89
+ </component>
90
+ </template>
@@ -0,0 +1,9 @@
1
+ import type { KcContext } from 'keycloakify/login/KcContext';
2
+ import type { I18n } from '../i18n/i18n';
3
+ import type { PageProps } from './PageProps';
4
+ type __VLS_Props = PageProps<Extract<KcContext, {
5
+ pageId: 'login-recovery-authn-code-input.ftl';
6
+ }>, I18n>;
7
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
8
+ declare const _default: typeof __VLS_export;
9
+ export default _default;
@@ -0,0 +1,88 @@
1
+ <script setup lang="ts">
2
+ import type { KcContext } from 'keycloakify/login/KcContext';
3
+ import { getKcClsx } from 'keycloakify/login/lib/kcClsx';
4
+ import type { I18n } from '../i18n/i18n';
5
+ import type { PageProps } from './PageProps';
6
+
7
+ const props = defineProps<PageProps<Extract<KcContext, { pageId: 'login-reset-otp.ftl' }>, I18n>>();
8
+
9
+ const { kcClsx } = getKcClsx({
10
+ doUseDefaultCss: props.doUseDefaultCss,
11
+ classes: props.classes,
12
+ });
13
+
14
+ const kcContext = props.kcContext;
15
+ const { url, messagesPerField, configuredOtpCredentials } = kcContext;
16
+ </script>
17
+
18
+ <template>
19
+ <component
20
+ :is="Template"
21
+ :kcContext="kcContext"
22
+ :i18n="i18n"
23
+ :doUseDefaultCss="doUseDefaultCss"
24
+ :classes="classes"
25
+ :displayMessage="!messagesPerField.existsError('totp')"
26
+ >
27
+ <template #header>
28
+ <component :is="i18n.msg('doLogIn')" />
29
+ </template>
30
+
31
+ <form
32
+ id="kc-otp-reset-form"
33
+ :class="kcClsx('kcFormClass')"
34
+ :action="url.loginAction"
35
+ method="post"
36
+ >
37
+ <div :class="kcClsx('kcInputWrapperClass')">
38
+ <div :class="kcClsx('kcInfoAreaWrapperClass')">
39
+ <p id="kc-otp-reset-form-description">
40
+ <component :is="i18n.msg('otp-reset-description')" />
41
+ </p>
42
+ <template
43
+ v-for="(otpCredential, index) in configuredOtpCredentials.userOtpCredentials"
44
+ :key="otpCredential.id"
45
+ >
46
+ <input
47
+ :id="`kc-otp-credential-${index}`"
48
+ :class="kcClsx('kcLoginOTPListInputClass')"
49
+ type="radio"
50
+ name="selectedCredentialId"
51
+ :value="otpCredential.id"
52
+ :checked="otpCredential.id === configuredOtpCredentials.selectedCredentialId"
53
+ />
54
+ <label
55
+ :for="`kc-otp-credential-${index}`"
56
+ :class="kcClsx('kcLoginOTPListClass')"
57
+ :tabindex="index"
58
+ >
59
+ <span :class="kcClsx('kcLoginOTPListItemHeaderClass')">
60
+ <span :class="kcClsx('kcLoginOTPListItemIconBodyClass')">
61
+ <i
62
+ :class="kcClsx('kcLoginOTPListItemIconClass')"
63
+ aria-hidden="true"
64
+ ></i>
65
+ </span>
66
+ <span :class="kcClsx('kcLoginOTPListItemTitleClass')">{{ otpCredential.userLabel }}</span>
67
+ </span>
68
+ </label>
69
+ </template>
70
+ <div :class="kcClsx('kcFormGroupClass')">
71
+ <div
72
+ id="kc-form-buttons"
73
+ :class="kcClsx('kcFormButtonsClass')"
74
+ >
75
+ <input
76
+ id="kc-otp-reset-form-submit"
77
+ :class="kcClsx('kcButtonClass', 'kcButtonPrimaryClass', 'kcButtonBlockClass', 'kcButtonLargeClass')"
78
+ type="submit"
79
+ :value="i18n.msgStr('doSubmit')"
80
+ />
81
+ </div>
82
+ </div>
83
+ </div>
84
+ </div>
85
+ </form>
86
+ <div class="clearfix" />
87
+ </component>
88
+ </template>
@@ -0,0 +1,9 @@
1
+ import type { KcContext } from 'keycloakify/login/KcContext';
2
+ import type { I18n } from '../i18n/i18n';
3
+ import type { PageProps } from './PageProps';
4
+ type __VLS_Props = PageProps<Extract<KcContext, {
5
+ pageId: 'login-reset-otp.ftl';
6
+ }>, I18n>;
7
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
8
+ declare const _default: typeof __VLS_export;
9
+ export default _default;
@@ -0,0 +1,114 @@
1
+ <script setup lang="ts">
2
+ import { kcSanitize } from 'keycloakify/lib/kcSanitize';
3
+ import type { KcContext } from 'keycloakify/login/KcContext';
4
+ import { getKcClsx } from 'keycloakify/login/lib/kcClsx';
5
+ import type { I18n } from '../i18n/i18n';
6
+ import type { PageProps } from './PageProps';
7
+
8
+ const props = defineProps<PageProps<Extract<KcContext, { pageId: 'login-reset-password.ftl' }>, I18n>>();
9
+
10
+ const { kcClsx } = getKcClsx({
11
+ doUseDefaultCss: props.doUseDefaultCss,
12
+ classes: props.classes,
13
+ });
14
+
15
+ const kcContext = props.kcContext;
16
+ const { url, realm, auth, messagesPerField } = kcContext;
17
+ </script>
18
+
19
+ <template>
20
+ <component
21
+ :is="Template"
22
+ :kcContext="kcContext"
23
+ :i18n="i18n"
24
+ :doUseDefaultCss="doUseDefaultCss"
25
+ :classes="classes"
26
+ :displayInfo="true"
27
+ :displayMessage="!messagesPerField.existsError('username')"
28
+ >
29
+ <template #header>
30
+ <component :is="i18n.msg('emailForgotTitle')" />
31
+ </template>
32
+
33
+ <template #info>
34
+ <component
35
+ v-if="realm.duplicateEmailsAllowed"
36
+ :is="i18n.msg('emailInstructionUsername')"
37
+ />
38
+ <component
39
+ v-else
40
+ :is="i18n.msg('emailInstruction')"
41
+ />
42
+ </template>
43
+
44
+ <form
45
+ id="kc-reset-password-form"
46
+ :class="kcClsx('kcFormClass')"
47
+ :action="url.loginAction"
48
+ method="post"
49
+ >
50
+ <div :class="kcClsx('kcFormGroupClass')">
51
+ <div :class="kcClsx('kcLabelWrapperClass')">
52
+ <label
53
+ for="username"
54
+ :class="kcClsx('kcLabelClass')"
55
+ >
56
+ <component
57
+ v-if="!realm.loginWithEmailAllowed"
58
+ :is="i18n.msg('username')"
59
+ />
60
+ <component
61
+ v-else-if="!realm.registrationEmailAsUsername"
62
+ :is="i18n.msg('usernameOrEmail')"
63
+ />
64
+ <component
65
+ v-else
66
+ :is="i18n.msg('email')"
67
+ />
68
+ </label>
69
+ </div>
70
+ <div :class="kcClsx('kcInputWrapperClass')">
71
+ <input
72
+ type="text"
73
+ id="username"
74
+ name="username"
75
+ :class="kcClsx('kcInputClass')"
76
+ autofocus
77
+ :value="auth.attemptedUsername ?? ''"
78
+ :aria-invalid="messagesPerField.existsError('username')"
79
+ />
80
+ <span
81
+ v-if="messagesPerField.existsError('username')"
82
+ id="input-error-username"
83
+ :class="kcClsx('kcInputErrorMessageClass')"
84
+ aria-live="polite"
85
+ v-html="kcSanitize(messagesPerField.get('username'))"
86
+ ></span>
87
+ </div>
88
+ </div>
89
+ <div :class="kcClsx('kcFormGroupClass', 'kcFormSettingClass')">
90
+ <div
91
+ id="kc-form-options"
92
+ :class="kcClsx('kcFormOptionsClass')"
93
+ >
94
+ <div :class="kcClsx('kcFormOptionsWrapperClass')">
95
+ <span>
96
+ <a :href="url.loginUrl"><component :is="i18n.msg('backToLogin')" /></a>
97
+ </span>
98
+ </div>
99
+ </div>
100
+
101
+ <div
102
+ id="kc-form-buttons"
103
+ :class="kcClsx('kcFormButtonsClass')"
104
+ >
105
+ <input
106
+ :class="kcClsx('kcButtonClass', 'kcButtonPrimaryClass', 'kcButtonBlockClass', 'kcButtonLargeClass')"
107
+ type="submit"
108
+ :value="i18n.msgStr('doSubmit')"
109
+ />
110
+ </div>
111
+ </div>
112
+ </form>
113
+ </component>
114
+ </template>
@@ -0,0 +1,9 @@
1
+ import type { KcContext } from 'keycloakify/login/KcContext';
2
+ import type { I18n } from '../i18n/i18n';
3
+ import type { PageProps } from './PageProps';
4
+ type __VLS_Props = PageProps<Extract<KcContext, {
5
+ pageId: 'login-reset-password.ftl';
6
+ }>, I18n>;
7
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
8
+ declare const _default: typeof __VLS_export;
9
+ export default _default;