@keycloakify/svelte 0.0.1-rc.6 → 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 (196) hide show
  1. package/README.md +1 -1
  2. package/keycloakify-svelte/account/DefaultPage.svelte +42 -0
  3. package/keycloakify-svelte/account/DefaultPage.svelte.d.ts +6 -0
  4. package/keycloakify-svelte/account/KcContext/KcContext.d.ts +1 -0
  5. package/keycloakify-svelte/account/KcContext/KcContext.js +1 -0
  6. package/keycloakify-svelte/account/KcContext/index.d.ts +1 -0
  7. package/keycloakify-svelte/account/KcContext/index.js +1 -0
  8. package/keycloakify-svelte/account/Template.svelte +143 -0
  9. package/keycloakify-svelte/account/Template.svelte.d.ts +6 -0
  10. package/keycloakify-svelte/account/Template.useInitialize.d.ts +12 -0
  11. package/keycloakify-svelte/account/Template.useInitialize.js +19 -0
  12. package/keycloakify-svelte/account/TemplateProps.d.ts +12 -0
  13. package/keycloakify-svelte/account/TemplateProps.js +1 -0
  14. package/keycloakify-svelte/account/i18n/i18n.d.ts +15 -0
  15. package/keycloakify-svelte/account/i18n/i18n.js +1 -0
  16. package/keycloakify-svelte/account/i18n/i18nBuilder.d.ts +18 -0
  17. package/keycloakify-svelte/account/i18n/i18nBuilder.js +26 -0
  18. package/keycloakify-svelte/account/i18n/index.d.ts +1 -0
  19. package/keycloakify-svelte/account/i18n/index.js +1 -0
  20. package/keycloakify-svelte/account/i18n/useI18n.d.ts +28 -0
  21. package/keycloakify-svelte/account/i18n/useI18n.js +65 -0
  22. package/keycloakify-svelte/account/index.d.ts +2 -0
  23. package/keycloakify-svelte/account/index.js +1 -0
  24. package/keycloakify-svelte/account/pages/Account.svelte +182 -0
  25. package/keycloakify-svelte/account/pages/Account.svelte.d.ts +6 -0
  26. package/keycloakify-svelte/account/pages/Applications.svelte +173 -0
  27. package/keycloakify-svelte/account/pages/Applications.svelte.d.ts +6 -0
  28. package/keycloakify-svelte/account/pages/FederatedIdentity.svelte +114 -0
  29. package/keycloakify-svelte/account/pages/FederatedIdentity.svelte.d.ts +6 -0
  30. package/keycloakify-svelte/account/pages/Log.svelte +68 -0
  31. package/keycloakify-svelte/account/pages/Log.svelte.d.ts +6 -0
  32. package/keycloakify-svelte/account/pages/PageProps.d.ts +10 -0
  33. package/keycloakify-svelte/account/pages/PageProps.js +1 -0
  34. package/keycloakify-svelte/account/pages/Password.svelte +233 -0
  35. package/keycloakify-svelte/account/pages/Password.svelte.d.ts +6 -0
  36. package/keycloakify-svelte/account/pages/Sessions.svelte +88 -0
  37. package/keycloakify-svelte/account/pages/Sessions.svelte.d.ts +6 -0
  38. package/keycloakify-svelte/account/pages/Totp.svelte +287 -0
  39. package/keycloakify-svelte/account/pages/Totp.svelte.d.ts +6 -0
  40. package/keycloakify-svelte/additional-svelte-typings.d.ts +6 -0
  41. package/keycloakify-svelte/bin/200.index.js +399 -0
  42. package/keycloakify-svelte/bin/266.index.js +964 -0
  43. package/keycloakify-svelte/bin/279.index.js +4298 -0
  44. package/keycloakify-svelte/bin/709.index.js +494 -0
  45. package/keycloakify-svelte/bin/818.index.js +1037 -0
  46. package/keycloakify-svelte/bin/index.js +2454 -0
  47. package/keycloakify-svelte/bin/package.json +3 -0
  48. package/keycloakify-svelte/login/DefaultPage.svelte +135 -0
  49. package/keycloakify-svelte/login/DefaultPage.svelte.d.ts +12 -0
  50. package/keycloakify-svelte/login/KcContext/KcContext.d.ts +1 -0
  51. package/keycloakify-svelte/login/KcContext/KcContext.js +1 -0
  52. package/keycloakify-svelte/login/KcContext/index.d.ts +1 -0
  53. package/keycloakify-svelte/login/KcContext/index.js +1 -0
  54. package/keycloakify-svelte/login/Template.svelte +223 -0
  55. package/keycloakify-svelte/login/Template.svelte.d.ts +6 -0
  56. package/keycloakify-svelte/login/Template.useInitialize.d.ts +14 -0
  57. package/keycloakify-svelte/login/Template.useInitialize.js +55 -0
  58. package/keycloakify-svelte/login/TemplateProps.d.ts +20 -0
  59. package/keycloakify-svelte/login/TemplateProps.js +1 -0
  60. package/keycloakify-svelte/login/components/AddRemoveButtonsMultiValuedAttribute.svelte +57 -0
  61. package/keycloakify-svelte/login/components/AddRemoveButtonsMultiValuedAttribute.svelte.d.ts +18 -0
  62. package/keycloakify-svelte/login/components/FieldErrors.svelte +31 -0
  63. package/keycloakify-svelte/login/components/FieldErrors.svelte.d.ts +12 -0
  64. package/keycloakify-svelte/login/components/GroupLabel.svelte +68 -0
  65. package/keycloakify-svelte/login/components/GroupLabel.svelte.d.ts +15 -0
  66. package/keycloakify-svelte/login/components/InputFieldByType.svelte +58 -0
  67. package/keycloakify-svelte/login/components/InputFieldByType.svelte.d.ts +4 -0
  68. package/keycloakify-svelte/login/components/InputFieldByTypeProps.d.ts +16 -0
  69. package/keycloakify-svelte/login/components/InputFieldByTypeProps.js +1 -0
  70. package/keycloakify-svelte/login/components/InputTag.svelte +107 -0
  71. package/keycloakify-svelte/login/components/InputTag.svelte.d.ts +7 -0
  72. package/keycloakify-svelte/login/components/InputTagSelects.svelte +111 -0
  73. package/keycloakify-svelte/login/components/InputTagSelects.svelte.d.ts +4 -0
  74. package/keycloakify-svelte/login/components/LogoutOtherSessions.svelte +29 -0
  75. package/keycloakify-svelte/login/components/LogoutOtherSessions.svelte.d.ts +10 -0
  76. package/keycloakify-svelte/login/components/PasswordWrapper.svelte +43 -0
  77. package/keycloakify-svelte/login/components/PasswordWrapper.svelte.d.ts +13 -0
  78. package/keycloakify-svelte/login/components/SelectTag.svelte +72 -0
  79. package/keycloakify-svelte/login/components/SelectTag.svelte.d.ts +4 -0
  80. package/keycloakify-svelte/login/components/TermsAcceptance.svelte +56 -0
  81. package/keycloakify-svelte/login/components/TermsAcceptance.svelte.d.ts +13 -0
  82. package/keycloakify-svelte/login/components/TextareaTag.svelte +40 -0
  83. package/keycloakify-svelte/login/components/TextareaTag.svelte.d.ts +4 -0
  84. package/keycloakify-svelte/login/components/UserProfileFormFields.svelte +123 -0
  85. package/keycloakify-svelte/login/components/UserProfileFormFields.svelte.d.ts +6 -0
  86. package/keycloakify-svelte/login/components/UserProfileFormFieldsProps.d.ts +27 -0
  87. package/keycloakify-svelte/login/components/UserProfileFormFieldsProps.js +2 -0
  88. package/keycloakify-svelte/login/components/inputLabel.d.ts +3 -0
  89. package/keycloakify-svelte/login/components/inputLabel.js +12 -0
  90. package/keycloakify-svelte/login/i18n/i18n.d.ts +15 -0
  91. package/keycloakify-svelte/login/i18n/i18n.js +1 -0
  92. package/keycloakify-svelte/login/i18n/i18nBuilder.d.ts +18 -0
  93. package/keycloakify-svelte/login/i18n/i18nBuilder.js +26 -0
  94. package/keycloakify-svelte/login/i18n/index.d.ts +1 -0
  95. package/keycloakify-svelte/login/i18n/index.js +1 -0
  96. package/keycloakify-svelte/login/i18n/useI18n.d.ts +28 -0
  97. package/keycloakify-svelte/login/i18n/useI18n.js +65 -0
  98. package/keycloakify-svelte/login/index.d.ts +2 -0
  99. package/keycloakify-svelte/login/index.js +1 -0
  100. package/keycloakify-svelte/login/lib/useUserProfileForm.d.ts +66 -0
  101. package/keycloakify-svelte/login/lib/useUserProfileForm.js +63 -0
  102. package/keycloakify-svelte/login/pages/Code.svelte +46 -0
  103. package/keycloakify-svelte/login/pages/Code.svelte.d.ts +6 -0
  104. package/keycloakify-svelte/login/pages/DeleteAccountConfirm.svelte +77 -0
  105. package/keycloakify-svelte/login/pages/DeleteAccountConfirm.svelte.d.ts +6 -0
  106. package/keycloakify-svelte/login/pages/DeleteCredential.svelte +58 -0
  107. package/keycloakify-svelte/login/pages/DeleteCredential.svelte.d.ts +6 -0
  108. package/keycloakify-svelte/login/pages/Error.svelte +43 -0
  109. package/keycloakify-svelte/login/pages/Error.svelte.d.ts +6 -0
  110. package/keycloakify-svelte/login/pages/FrontchannelLogout.svelte +57 -0
  111. package/keycloakify-svelte/login/pages/FrontchannelLogout.svelte.d.ts +6 -0
  112. package/keycloakify-svelte/login/pages/IdpReviewUserProfile.svelte +80 -0
  113. package/keycloakify-svelte/login/pages/IdpReviewUserProfile.svelte.d.ts +11 -0
  114. package/keycloakify-svelte/login/pages/Info.svelte +66 -0
  115. package/keycloakify-svelte/login/pages/Info.svelte.d.ts +6 -0
  116. package/keycloakify-svelte/login/pages/Login.svelte +225 -0
  117. package/keycloakify-svelte/login/pages/Login.svelte.d.ts +6 -0
  118. package/keycloakify-svelte/login/pages/LoginConfigTotp.svelte +217 -0
  119. package/keycloakify-svelte/login/pages/LoginConfigTotp.svelte.d.ts +6 -0
  120. package/keycloakify-svelte/login/pages/LoginIdpLinkConfirm.svelte +60 -0
  121. package/keycloakify-svelte/login/pages/LoginIdpLinkConfirm.svelte.d.ts +6 -0
  122. package/keycloakify-svelte/login/pages/LoginIdpLinkConfirmOverride.svelte +59 -0
  123. package/keycloakify-svelte/login/pages/LoginIdpLinkConfirmOverride.svelte.d.ts +6 -0
  124. package/keycloakify-svelte/login/pages/LoginIdpLinkEmail.svelte +50 -0
  125. package/keycloakify-svelte/login/pages/LoginIdpLinkEmail.svelte.d.ts +6 -0
  126. package/keycloakify-svelte/login/pages/LoginOauth2DeviceVerifyUserCode.svelte +85 -0
  127. package/keycloakify-svelte/login/pages/LoginOauth2DeviceVerifyUserCode.svelte.d.ts +6 -0
  128. package/keycloakify-svelte/login/pages/LoginOauthGrant.svelte +126 -0
  129. package/keycloakify-svelte/login/pages/LoginOauthGrant.svelte.d.ts +6 -0
  130. package/keycloakify-svelte/login/pages/LoginOtp.svelte +128 -0
  131. package/keycloakify-svelte/login/pages/LoginOtp.svelte.d.ts +6 -0
  132. package/keycloakify-svelte/login/pages/LoginPageExpired.svelte +50 -0
  133. package/keycloakify-svelte/login/pages/LoginPageExpired.svelte.d.ts +6 -0
  134. package/keycloakify-svelte/login/pages/LoginPasskeysConditionalAuthenticate.svelte +240 -0
  135. package/keycloakify-svelte/login/pages/LoginPasskeysConditionalAuthenticate.svelte.d.ts +6 -0
  136. package/keycloakify-svelte/login/pages/LoginPasskeysConditionalAuthenticate.useScript.d.ts +21 -0
  137. package/keycloakify-svelte/login/pages/LoginPasskeysConditionalAuthenticate.useScript.js +57 -0
  138. package/keycloakify-svelte/login/pages/LoginPassword.svelte +120 -0
  139. package/keycloakify-svelte/login/pages/LoginPassword.svelte.d.ts +6 -0
  140. package/keycloakify-svelte/login/pages/LoginRecoveryAuthnCodeConfig.svelte +179 -0
  141. package/keycloakify-svelte/login/pages/LoginRecoveryAuthnCodeConfig.svelte.d.ts +6 -0
  142. package/keycloakify-svelte/login/pages/LoginRecoveryAuthnCodeConfig.useScript.d.ts +10 -0
  143. package/keycloakify-svelte/login/pages/LoginRecoveryAuthnCodeConfig.useScript.js +141 -0
  144. package/keycloakify-svelte/login/pages/LoginRecoveryAuthnCodeInput.svelte +94 -0
  145. package/keycloakify-svelte/login/pages/LoginRecoveryAuthnCodeInput.svelte.d.ts +6 -0
  146. package/keycloakify-svelte/login/pages/LoginResetOtp.svelte +86 -0
  147. package/keycloakify-svelte/login/pages/LoginResetOtp.svelte.d.ts +6 -0
  148. package/keycloakify-svelte/login/pages/LoginResetPassword.svelte +109 -0
  149. package/keycloakify-svelte/login/pages/LoginResetPassword.svelte.d.ts +6 -0
  150. package/keycloakify-svelte/login/pages/LoginUpdatePassword.svelte +149 -0
  151. package/keycloakify-svelte/login/pages/LoginUpdatePassword.svelte.d.ts +6 -0
  152. package/keycloakify-svelte/login/pages/LoginUpdateProfile.svelte +98 -0
  153. package/keycloakify-svelte/login/pages/LoginUpdateProfile.svelte.d.ts +11 -0
  154. package/keycloakify-svelte/login/pages/LoginUsername.svelte +182 -0
  155. package/keycloakify-svelte/login/pages/LoginUsername.svelte.d.ts +6 -0
  156. package/keycloakify-svelte/login/pages/LoginVerifyEmail.svelte +39 -0
  157. package/keycloakify-svelte/login/pages/LoginVerifyEmail.svelte.d.ts +6 -0
  158. package/keycloakify-svelte/login/pages/LoginX509Info.svelte +123 -0
  159. package/keycloakify-svelte/login/pages/LoginX509Info.svelte.d.ts +6 -0
  160. package/keycloakify-svelte/login/pages/LogoutConfirm.svelte +77 -0
  161. package/keycloakify-svelte/login/pages/LogoutConfirm.svelte.d.ts +6 -0
  162. package/keycloakify-svelte/login/pages/PageProps.d.ts +10 -0
  163. package/keycloakify-svelte/login/pages/PageProps.js +1 -0
  164. package/keycloakify-svelte/login/pages/Register.svelte +136 -0
  165. package/keycloakify-svelte/login/pages/Register.svelte.d.ts +11 -0
  166. package/keycloakify-svelte/login/pages/SamlPostForm.svelte +80 -0
  167. package/keycloakify-svelte/login/pages/SamlPostForm.svelte.d.ts +6 -0
  168. package/keycloakify-svelte/login/pages/SelectAuthenticator.svelte +63 -0
  169. package/keycloakify-svelte/login/pages/SelectAuthenticator.svelte.d.ts +6 -0
  170. package/keycloakify-svelte/login/pages/Terms.svelte +57 -0
  171. package/keycloakify-svelte/login/pages/Terms.svelte.d.ts +6 -0
  172. package/keycloakify-svelte/login/pages/UpdateEmail.svelte +104 -0
  173. package/keycloakify-svelte/login/pages/UpdateEmail.svelte.d.ts +11 -0
  174. package/keycloakify-svelte/login/pages/WebauthnAuthenticate.svelte +182 -0
  175. package/keycloakify-svelte/login/pages/WebauthnAuthenticate.svelte.d.ts +6 -0
  176. package/keycloakify-svelte/login/pages/WebauthnAuthenticate.useScript.d.ts +22 -0
  177. package/keycloakify-svelte/login/pages/WebauthnAuthenticate.useScript.js +49 -0
  178. package/keycloakify-svelte/login/pages/WebauthnError.svelte +86 -0
  179. package/keycloakify-svelte/login/pages/WebauthnError.svelte.d.ts +6 -0
  180. package/keycloakify-svelte/login/pages/WebauthnRegister.svelte +109 -0
  181. package/keycloakify-svelte/login/pages/WebauthnRegister.svelte.d.ts +6 -0
  182. package/keycloakify-svelte/login/pages/WebauthnRegister.useScript.d.ts +28 -0
  183. package/keycloakify-svelte/login/pages/WebauthnRegister.useScript.js +57 -0
  184. package/keycloakify-svelte/tools/useConst.d.ts +1 -0
  185. package/keycloakify-svelte/tools/useConst.js +4 -0
  186. package/keycloakify-svelte/tools/useInsertLinkTags.d.ts +12 -0
  187. package/keycloakify-svelte/tools/useInsertLinkTags.js +62 -0
  188. package/keycloakify-svelte/tools/useInsertScriptTags.d.ts +29 -0
  189. package/keycloakify-svelte/tools/useInsertScriptTags.js +77 -0
  190. package/keycloakify-svelte/tools/useReducer.d.ts +2 -0
  191. package/keycloakify-svelte/tools/useReducer.js +7 -0
  192. package/keycloakify-svelte/tools/useSetClassName.d.ts +4 -0
  193. package/keycloakify-svelte/tools/useSetClassName.js +15 -0
  194. package/keycloakify-svelte/tools/useState.d.ts +2 -0
  195. package/keycloakify-svelte/tools/useState.js +7 -0
  196. package/package.json +6 -3
@@ -0,0 +1,3 @@
1
+ {
2
+ "type": "module"
3
+ }
@@ -0,0 +1,135 @@
1
+ <script lang="ts">
2
+ import type { UserProfileFormFieldsProps } from './components/UserProfileFormFieldsProps';
3
+ import type { PageProps } from './pages/PageProps';
4
+ import type { Component } from 'svelte';
5
+ import type { I18n } from './i18n';
6
+ import type { KcContext } from './KcContext';
7
+
8
+ type DefaultPageProps = PageProps<KcContext, I18n> & {
9
+ UserProfileFormFields: Component<UserProfileFormFieldsProps>;
10
+ doMakeUserConfirmPassword: boolean;
11
+ };
12
+ const props: DefaultPageProps = $props();
13
+ const { kcContext: kcContext, ...rest } = props;
14
+ const loadComponent = () => {
15
+ switch (kcContext.pageId) {
16
+ case 'login.ftl':
17
+ return import('./pages/Login.svelte');
18
+
19
+ case 'register.ftl':
20
+ return import('./pages/Register.svelte');
21
+
22
+ case 'info.ftl':
23
+ return import('./pages/Info.svelte');
24
+
25
+ case 'error.ftl':
26
+ return import('./pages/Error.svelte');
27
+
28
+ case 'login-reset-password.ftl':
29
+ return import('./pages/LoginResetPassword.svelte');
30
+
31
+ case 'login-verify-email.ftl':
32
+ return import('./pages/LoginVerifyEmail.svelte');
33
+
34
+ case 'terms.ftl':
35
+ return import('./pages/Terms.svelte');
36
+
37
+ case 'login-oauth2-device-verify-user-code.ftl':
38
+ return import('./pages/LoginOauth2DeviceVerifyUserCode.svelte');
39
+
40
+ case 'login-oauth-grant.ftl':
41
+ return import('./pages/LoginOauthGrant.svelte');
42
+
43
+ case 'login-otp.ftl':
44
+ return import('./pages/LoginOtp.svelte');
45
+
46
+ case 'login-username.ftl':
47
+ return import('./pages/LoginUsername.svelte');
48
+
49
+ case 'webauthn-authenticate.ftl':
50
+ return import('./pages/WebauthnAuthenticate.svelte');
51
+
52
+ case 'webauthn-register.ftl':
53
+ return import('./pages/WebauthnRegister.svelte');
54
+
55
+ case 'login-password.ftl':
56
+ return import('./pages/LoginPassword.svelte');
57
+
58
+ case 'login-update-password.ftl':
59
+ return import('./pages/LoginUpdatePassword.svelte');
60
+
61
+ case 'login-update-profile.ftl':
62
+ return import('./pages/LoginUpdateProfile.svelte');
63
+
64
+ case 'login-idp-link-confirm.ftl':
65
+ return import('./pages/LoginIdpLinkConfirm.svelte');
66
+
67
+ case 'login-idp-link-email.ftl':
68
+ return import('./pages/LoginIdpLinkEmail.svelte');
69
+
70
+ case 'login-page-expired.ftl':
71
+ return import('./pages/LoginPageExpired.svelte');
72
+
73
+ case 'login-config-totp.ftl':
74
+ return import('./pages/LoginConfigTotp.svelte');
75
+
76
+ case 'logout-confirm.ftl':
77
+ return import('./pages/LogoutConfirm.svelte');
78
+
79
+ case 'idp-review-user-profile.ftl':
80
+ return import('./pages/IdpReviewUserProfile.svelte');
81
+
82
+ case 'update-email.ftl':
83
+ return import('./pages/UpdateEmail.svelte');
84
+
85
+ case 'select-authenticator.ftl':
86
+ return import('./pages/SelectAuthenticator.svelte');
87
+
88
+ case 'saml-post-form.ftl':
89
+ return import('./pages/SamlPostForm.svelte');
90
+
91
+ case 'delete-credential.ftl':
92
+ return import('./pages/DeleteCredential.svelte');
93
+
94
+ case 'code.ftl':
95
+ return import('./pages/Code.svelte');
96
+
97
+ case 'delete-account-confirm.ftl':
98
+ return import('./pages/DeleteAccountConfirm.svelte');
99
+
100
+ case 'frontchannel-logout.ftl':
101
+ return import('./pages/FrontchannelLogout.svelte');
102
+
103
+ case 'login-recovery-authn-code-config.ftl':
104
+ return import('./pages/LoginRecoveryAuthnCodeConfig.svelte');
105
+
106
+ case 'login-recovery-authn-code-input.ftl':
107
+ return import('./pages/LoginRecoveryAuthnCodeInput.svelte');
108
+
109
+ case 'login-reset-otp.ftl':
110
+ return import('./pages/LoginResetOtp.svelte');
111
+
112
+ case 'login-x509-info.ftl':
113
+ return import('./pages/LoginX509Info.svelte');
114
+
115
+ case 'webauthn-error.ftl':
116
+ return import('./pages/WebauthnError.svelte');
117
+
118
+ case 'login-passkeys-conditional-authenticate.ftl':
119
+ return import('./pages/LoginPasskeysConditionalAuthenticate.svelte');
120
+
121
+ case 'login-idp-link-confirm-override.ftl':
122
+ return import('./pages/LoginIdpLinkConfirmOverride.svelte');
123
+ }
124
+ };
125
+ const lazyComponent = loadComponent();
126
+ </script>
127
+
128
+ {#if lazyComponent}
129
+ {#await lazyComponent then { default: LazyComponent }}
130
+ <LazyComponent
131
+ kcContext={kcContext as never}
132
+ {...rest}
133
+ />
134
+ {/await}
135
+ {/if}
@@ -0,0 +1,12 @@
1
+ type DefaultPageProps = PageProps<KcContext, I18n> & {
2
+ UserProfileFormFields: Component<UserProfileFormFieldsProps>;
3
+ doMakeUserConfirmPassword: boolean;
4
+ };
5
+ import type { UserProfileFormFieldsProps } from './components/UserProfileFormFieldsProps';
6
+ import type { PageProps } from './pages/PageProps';
7
+ import type { Component } from 'svelte';
8
+ import type { I18n } from './i18n';
9
+ import type { KcContext } from './KcContext';
10
+ declare const DefaultPage: Component<DefaultPageProps, {}, "">;
11
+ type DefaultPage = ReturnType<typeof DefaultPage>;
12
+ export default DefaultPage;
@@ -0,0 +1 @@
1
+ export type { ExtendKcContext, KcContext } from 'keycloakify/login/KcContext';
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export * from './KcContext';
@@ -0,0 +1 @@
1
+ export * from './KcContext';
@@ -0,0 +1,223 @@
1
+ <script lang="ts">
2
+ import { useInitialize } from './Template.useInitialize';
3
+ import type { TemplateProps } from './TemplateProps';
4
+ import { useSetClassName } from '../tools/useSetClassName';
5
+ import { kcSanitize } from 'keycloakify/lib/kcSanitize';
6
+ import { getKcClsx } from 'keycloakify/login/lib/kcClsx';
7
+ import { clsx } from 'keycloakify/tools/clsx';
8
+ import { onMount } from 'svelte';
9
+ import type { I18n } from './i18n';
10
+ import type { KcContext } from './KcContext';
11
+
12
+ const {
13
+ displayInfo = false,
14
+ displayMessage = true,
15
+ displayRequiredFields = false,
16
+ headerNode,
17
+ socialProvidersNode = null,
18
+ infoNode = null,
19
+ documentTitle,
20
+ bodyClassName,
21
+ kcContext,
22
+ i18n,
23
+ doUseDefaultCss,
24
+ classes,
25
+ children,
26
+ }: TemplateProps<KcContext, I18n> = $props();
27
+ const { kcClsx } = getKcClsx({ doUseDefaultCss, classes });
28
+
29
+ const { msgStr, currentLanguage, enabledLanguages } = $i18n;
30
+
31
+ const { realm, auth, url, message, isAppInitiatedAction } = kcContext;
32
+ onMount(() => {
33
+ document.title = documentTitle ?? msgStr('loginTitle', kcContext.realm.displayName);
34
+ });
35
+ useSetClassName({
36
+ qualifiedName: 'html',
37
+ className: kcClsx('kcHtmlClass'),
38
+ });
39
+
40
+ useSetClassName({
41
+ qualifiedName: 'body',
42
+ className: bodyClassName ?? kcClsx('kcBodyClass'),
43
+ });
44
+ const { isReadyToRender } = useInitialize({ kcContext, doUseDefaultCss });
45
+ </script>
46
+
47
+ {#if $isReadyToRender}
48
+ <div class={kcClsx('kcLoginClass')}>
49
+ <div
50
+ id="kc-header"
51
+ class={kcClsx('kcHeaderClass')}
52
+ >
53
+ <div
54
+ id="kc-header-wrapper"
55
+ class={kcClsx('kcHeaderWrapperClass')}
56
+ >
57
+ {msgStr('loginTitleHtml', realm.displayNameHtml)}
58
+ </div>
59
+ </div>
60
+
61
+ <div class={kcClsx('kcFormCardClass')}>
62
+ <header class={kcClsx('kcFormHeaderClass')}>
63
+ {#if enabledLanguages.length > 1}
64
+ <div
65
+ class={kcClsx('kcLocaleMainClass')}
66
+ id="kc-locale"
67
+ >
68
+ <div
69
+ id="kc-locale-wrapper"
70
+ class={kcClsx('kcLocaleWrapperClass')}
71
+ >
72
+ <div
73
+ id="kc-locale-dropdown"
74
+ class={clsx('menu-button-links', kcClsx('kcLocaleDropDownClass'))}
75
+ >
76
+ <button
77
+ tabindex={1}
78
+ id="kc-current-locale-link"
79
+ aria-label={msgStr('languages')}
80
+ aria-haspopup="true"
81
+ aria-expanded="false"
82
+ aria-controls="language-switch1"
83
+ >
84
+ {currentLanguage.label}
85
+ </button>
86
+ <!-- svelte-ignore a11y_incorrect_aria_attribute_type -->
87
+ <ul
88
+ role="menu"
89
+ tabindex={-1}
90
+ aria-labelledby="kc-current-locale-link"
91
+ aria-activedescendant=""
92
+ id="language-switch1"
93
+ class={kcClsx('kcLocaleListClass')}
94
+ >
95
+ {#each enabledLanguages as enabledLanguage, i}
96
+ {@const { label, href } = enabledLanguage}
97
+ <li
98
+ class={kcClsx('kcLocaleListItemClass')}
99
+ role="none"
100
+ >
101
+ <a
102
+ role="menuitem"
103
+ id={`language-${i + 1}`}
104
+ class={kcClsx('kcLocaleItemClass')}
105
+ {href}
106
+ >
107
+ {label}
108
+ </a>
109
+ </li>
110
+ {/each}
111
+ </ul>
112
+ </div>
113
+ </div>
114
+ </div>
115
+ {/if}
116
+ {#snippet node()}
117
+ {#if !(auth !== undefined && auth.showUsername && !auth.showResetCredentials)}
118
+ <h1 id="kc-page-title">{@render headerNode?.()}</h1>
119
+ {:else}
120
+ <div
121
+ id="kc-username"
122
+ class={kcClsx('kcFormGroupClass')}
123
+ >
124
+ <!-- svelte-ignore a11y_label_has_associated_control -->
125
+ <label id="kc-attempted-username">{auth.attemptedUsername}</label>
126
+ <a
127
+ id="reset-login"
128
+ href={url.loginRestartFlowUrl}
129
+ aria-label={msgStr('restartLoginTooltip')}
130
+ >
131
+ <div class="kc-login-tooltip">
132
+ <i class={kcClsx('kcResetFlowIcon')}></i>
133
+ <span class="kc-tooltip-text">{msgStr('restartLoginTooltip')}</span>
134
+ </div>
135
+ </a>
136
+ </div>
137
+ {/if}
138
+ {/snippet}
139
+ {#if displayRequiredFields}
140
+ <div class={kcClsx('kcContentWrapperClass')}>
141
+ <div class={clsx(kcClsx('kcLabelWrapperClass'), 'subtitle')}>
142
+ <span class="subtitle">
143
+ <span class="required">*</span>
144
+ {msgStr('requiredFields')}
145
+ </span>
146
+ </div>
147
+ <div class="col-md-10">{@render node()}</div>
148
+ </div>
149
+ {:else}
150
+ {@render node()}
151
+ {/if}
152
+ </header>
153
+ <div id="kc-content">
154
+ <div id="kc-content-wrapper">
155
+ <!-- App-initiated actions should not see warning messages about the need to complete the action during login. -->
156
+ {#if displayMessage && message !== undefined && (message.type !== 'warning' || !isAppInitiatedAction)}
157
+ <div
158
+ class={clsx(
159
+ `alert-${message.type}`,
160
+ kcClsx('kcAlertClass'),
161
+ `pf-m-${message?.type === 'error' ? 'danger' : message.type}`,
162
+ )}
163
+ >
164
+ <div class="pf-c-alert__icon">
165
+ {#if message.type === 'success'}
166
+ <span class={kcClsx('kcFeedbackSuccessIcon')}></span>
167
+ {:else if message.type === 'warning'}
168
+ <span class={kcClsx('kcFeedbackWarningIcon')}></span>
169
+ {:else if message.type === 'error'}
170
+ <span class={kcClsx('kcFeedbackErrorIcon')}></span>
171
+ {:else if message.type === 'info'}
172
+ <span class={kcClsx('kcFeedbackInfoIcon')}></span>
173
+ {/if}
174
+ </div>
175
+ <span class={kcClsx('kcAlertTitleClass')}>{@html kcSanitize(message.summary)}</span>
176
+ </div>
177
+ {/if}
178
+ {@render children?.()}
179
+ {#if auth !== undefined && auth.showTryAnotherWayLink}
180
+ <form
181
+ id="kc-select-try-another-way-form"
182
+ action={url.loginAction}
183
+ method="post"
184
+ >
185
+ <div class={kcClsx('kcFormGroupClass')}>
186
+ <input
187
+ type="hidden"
188
+ name="tryAnotherWay"
189
+ value="on"
190
+ />
191
+ <!-- svelte-ignore a11y_invalid_attribute -->
192
+ <a
193
+ href="#"
194
+ id="try-another-way"
195
+ onclick={() => {
196
+ document.forms['kc-select-try-another-way-form' as never].submit();
197
+ return false;
198
+ }}
199
+ >
200
+ {msgStr('doTryAnotherWay')}
201
+ </a>
202
+ </div>
203
+ </form>
204
+ {/if}
205
+ {@render socialProvidersNode?.()}
206
+ {#if displayInfo}
207
+ <div
208
+ id="kc-info"
209
+ class={kcClsx('kcSignUpClass')}
210
+ >
211
+ <div
212
+ id="kc-info-wrapper"
213
+ class={kcClsx('kcInfoAreaWrapperClass')}
214
+ >
215
+ {@render infoNode?.()}
216
+ </div>
217
+ </div>
218
+ {/if}
219
+ </div>
220
+ </div>
221
+ </div>
222
+ </div>
223
+ {/if}
@@ -0,0 +1,6 @@
1
+ import type { TemplateProps } from './TemplateProps';
2
+ import type { I18n } from './i18n';
3
+ import type { KcContext } from './KcContext';
4
+ declare const Template: import("svelte").Component<TemplateProps<KcContext, I18n>, {}, "">;
5
+ type Template = ReturnType<typeof Template>;
6
+ export default Template;
@@ -0,0 +1,14 @@
1
+ export type KcContextLike = {
2
+ url: {
3
+ resourcesCommonPath: string;
4
+ resourcesPath: string;
5
+ ssoLoginInOtherTabsUrl: string;
6
+ };
7
+ scripts?: string[];
8
+ };
9
+ export declare function useInitialize(params: {
10
+ kcContext: KcContextLike;
11
+ doUseDefaultCss: boolean;
12
+ }): {
13
+ isReadyToRender: import("svelte/store").Readable<boolean>;
14
+ };
@@ -0,0 +1,55 @@
1
+ import { useInsertLinkTags } from '../tools/useInsertLinkTags';
2
+ import { useInsertScriptTags } from '../tools/useInsertScriptTags';
3
+ import { assert } from 'keycloakify/tools/assert';
4
+ import { onMount } from 'svelte';
5
+ assert();
6
+ assert();
7
+ export function useInitialize(params) {
8
+ const { kcContext, doUseDefaultCss } = params;
9
+ const { url, scripts } = kcContext;
10
+ const { areAllStyleSheetsLoaded } = useInsertLinkTags({
11
+ componentOrHookName: 'Template',
12
+ hrefs: !doUseDefaultCss
13
+ ? []
14
+ : [
15
+ `${url.resourcesCommonPath}/node_modules/@patternfly/patternfly/patternfly.min.css`,
16
+ `${url.resourcesCommonPath}/node_modules/patternfly/dist/css/patternfly.min.css`,
17
+ `${url.resourcesCommonPath}/node_modules/patternfly/dist/css/patternfly-additions.min.css`,
18
+ `${url.resourcesCommonPath}/lib/pficon/pficon.css`,
19
+ `${url.resourcesPath}/css/login.css`,
20
+ ],
21
+ });
22
+ const { insertScriptTags } = useInsertScriptTags({
23
+ componentOrHookName: 'Template',
24
+ scriptTags: [
25
+ // NOTE: The importmap is added in by the FTL script because it's too late to add it here.
26
+ {
27
+ type: 'module',
28
+ src: `${url.resourcesPath}/js/menu-button-links.js`,
29
+ },
30
+ ...(scripts === undefined
31
+ ? []
32
+ : scripts.map((src) => ({
33
+ type: 'text/javascript',
34
+ src,
35
+ }))),
36
+ {
37
+ type: 'module',
38
+ textContent: `
39
+ import { checkCookiesAndSetTimer } from "${url.resourcesPath}/js/authChecker.js";
40
+
41
+ checkCookiesAndSetTimer("${url.ssoLoginInOtherTabsUrl}");
42
+ `,
43
+ },
44
+ ],
45
+ });
46
+ onMount(() => {
47
+ const unsubscriber = areAllStyleSheetsLoaded.subscribe((isReadyToRender) => {
48
+ if (isReadyToRender) {
49
+ insertScriptTags();
50
+ }
51
+ });
52
+ return () => unsubscriber();
53
+ });
54
+ return { isReadyToRender: areAllStyleSheetsLoaded };
55
+ }
@@ -0,0 +1,20 @@
1
+ import type { ClassKey } from 'keycloakify/login/lib/kcClsx';
2
+ import type { Snippet } from 'svelte';
3
+ import type { Readable } from 'svelte/store';
4
+ export type TemplateProps<KcContext, I18n> = {
5
+ kcContext: KcContext;
6
+ i18n: Readable<I18n>;
7
+ doUseDefaultCss: boolean;
8
+ classes?: Partial<Record<ClassKey, string>>;
9
+ children: Snippet;
10
+ displayInfo?: boolean;
11
+ displayMessage?: boolean;
12
+ displayRequiredFields?: boolean;
13
+ showAnotherWayIfPresent?: boolean;
14
+ headerNode: Snippet;
15
+ socialProvidersNode?: Snippet | null;
16
+ infoNode?: Snippet | null;
17
+ documentTitle?: string;
18
+ bodyClassName?: string;
19
+ };
20
+ export type { ClassKey };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,57 @@
1
+ <script lang="ts">
2
+ import {
3
+ getButtonToDisplayForMultivaluedAttributeField,
4
+ type FormAction,
5
+ } from '../lib/useUserProfileForm';
6
+ import type { Attribute } from 'keycloakify/login/KcContext';
7
+ import type { EventDispatcher } from 'svelte';
8
+ import type { Readable } from 'svelte/store';
9
+ import type { I18n } from '../i18n';
10
+
11
+ type AddRemoveButtonsMultiValuedAttributeProps = {
12
+ attribute: Attribute;
13
+ values: string[];
14
+ fieldIndex: number;
15
+ dispatchFormAction: EventDispatcher<{ formAction: Extract<FormAction, { action: 'update' }> }>;
16
+ i18n: Readable<I18n>;
17
+ };
18
+ const { attribute, values, fieldIndex, dispatchFormAction, i18n }: AddRemoveButtonsMultiValuedAttributeProps =
19
+ $props();
20
+ const { msg } = $i18n;
21
+
22
+ const { hasAdd, hasRemove } = getButtonToDisplayForMultivaluedAttributeField({ attribute, values, fieldIndex });
23
+
24
+ const idPostfix = `-${attribute.name}-${fieldIndex + 1}`;
25
+ </script>
26
+
27
+ {#if hasRemove}
28
+ <button
29
+ id={`kc-remove${idPostfix}`}
30
+ type="button"
31
+ class="pf-c-button pf-m-inline pf-m-link"
32
+ onclick={() =>
33
+ dispatchFormAction('formAction', {
34
+ action: 'update',
35
+ name: attribute.name,
36
+ valueOrValues: values.filter((_, i) => i !== fieldIndex),
37
+ })}
38
+ >
39
+ {@render msg('remove')()}
40
+ </button>
41
+ {#if hasAdd}&nbsp;|&nbsp;{/if}
42
+ {/if}
43
+ {#if hasAdd}
44
+ <button
45
+ id={`kc-add${idPostfix}`}
46
+ type="button"
47
+ class="pf-c-button pf-m-inline pf-m-link"
48
+ onclick={() =>
49
+ dispatchFormAction('formAction', {
50
+ action: 'update',
51
+ name: attribute.name,
52
+ valueOrValues: [...values, ''],
53
+ })}
54
+ >
55
+ {@render msg('addValue')()}
56
+ </button>
57
+ {/if}
@@ -0,0 +1,18 @@
1
+ import { type FormAction } from '../lib/useUserProfileForm';
2
+ import type { Attribute } from 'keycloakify/login/KcContext';
3
+ import type { EventDispatcher } from 'svelte';
4
+ import type { Readable } from 'svelte/store';
5
+ import type { I18n } from '../i18n';
6
+ declare const AddRemoveButtonsMultiValuedAttribute: import("svelte").Component<{
7
+ attribute: Attribute;
8
+ values: string[];
9
+ fieldIndex: number;
10
+ dispatchFormAction: EventDispatcher<{
11
+ formAction: Extract<FormAction, {
12
+ action: "update";
13
+ }>;
14
+ }>;
15
+ i18n: Readable<I18n>;
16
+ }, {}, "">;
17
+ type AddRemoveButtonsMultiValuedAttribute = ReturnType<typeof AddRemoveButtonsMultiValuedAttribute>;
18
+ export default AddRemoveButtonsMultiValuedAttribute;
@@ -0,0 +1,31 @@
1
+ <script lang="ts">
2
+ import type { FormFieldError } from '../lib/useUserProfileForm';
3
+ import type { Attribute } from 'keycloakify/login/KcContext';
4
+ import type { KcClsx } from 'keycloakify/login/lib/kcClsx';
5
+
6
+ type FieldErrorProps = {
7
+ attribute: Attribute;
8
+ displayableErrors: FormFieldError[];
9
+ fieldIndex?: number;
10
+ kcClsx: KcClsx;
11
+ };
12
+ let { attribute, fieldIndex, kcClsx, displayableErrors = $bindable([]) }: FieldErrorProps = $props();
13
+ </script>
14
+
15
+ {#snippet fieldErrors()}
16
+ {@const _displayableErrors = displayableErrors.filter((error) => error.fieldIndex === fieldIndex)}
17
+ {#if _displayableErrors.length !== 0}
18
+ <span
19
+ id={`input-error-${attribute.name}${fieldIndex === undefined ? '' : `-${fieldIndex}`}`}
20
+ class={kcClsx('kcInputErrorMessageClass')}
21
+ aria-live="polite"
22
+ >
23
+ {#each _displayableErrors as displayableError, i}
24
+ {@const { errorMessage } = displayableError}
25
+ {@render errorMessage()}
26
+ {#if _displayableErrors.length - 1 !== i}<br />{/if}
27
+ {/each}
28
+ </span>
29
+ {/if}
30
+ {/snippet}
31
+ {@render fieldErrors()}
@@ -0,0 +1,12 @@
1
+ type FieldErrorProps = {
2
+ attribute: Attribute;
3
+ displayableErrors: FormFieldError[];
4
+ fieldIndex?: number;
5
+ kcClsx: KcClsx;
6
+ };
7
+ import type { FormFieldError } from '../lib/useUserProfileForm';
8
+ import type { Attribute } from 'keycloakify/login/KcContext';
9
+ import type { KcClsx } from 'keycloakify/login/lib/kcClsx';
10
+ declare const FieldErrors: import("svelte").Component<FieldErrorProps, {}, "displayableErrors">;
11
+ type FieldErrors = ReturnType<typeof FieldErrors>;
12
+ export default FieldErrors;