@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
package/README.md CHANGED
@@ -31,7 +31,7 @@
31
31
 
32
32
  ## Using the library
33
33
 
34
- Don't it's not ready yet. Subscribe to alerts on the repo to get notified when it is.
34
+ See [Getting Started](https://docs.keycloakify.dev/)
35
35
 
36
36
  ## Contributing
37
37
 
@@ -0,0 +1,42 @@
1
+ <script lang="ts">
2
+ import type { PageProps } from './pages/PageProps';
3
+ import type { I18n } from './i18n';
4
+ import type { KcContext } from './KcContext';
5
+
6
+ const props: PageProps<KcContext, I18n> = $props();
7
+ const { kcContext: kcContext, ...rest } = props;
8
+ const loadComponent = () => {
9
+ switch (kcContext.pageId) {
10
+ case 'password.ftl':
11
+ return import('./pages/Password.svelte');
12
+
13
+ case 'sessions.ftl':
14
+ return import('./pages/Sessions.svelte');
15
+
16
+ case 'account.ftl':
17
+ return import('./pages/Account.svelte');
18
+
19
+ case 'totp.ftl':
20
+ return import('./pages/Totp.svelte');
21
+
22
+ case 'applications.ftl':
23
+ return import('./pages/Applications.svelte');
24
+
25
+ case 'log.ftl':
26
+ return import('./pages/Log.svelte');
27
+
28
+ case 'federatedIdentity.ftl':
29
+ return import('./pages/FederatedIdentity.svelte');
30
+ }
31
+ };
32
+ const lazyComponent = loadComponent();
33
+ </script>
34
+
35
+ {#if lazyComponent}
36
+ {#await lazyComponent then { default: LazyComponent }}
37
+ <LazyComponent
38
+ kcContext={kcContext as never}
39
+ {...rest}
40
+ />
41
+ {/await}
42
+ {/if}
@@ -0,0 +1,6 @@
1
+ import type { PageProps } from './pages/PageProps';
2
+ import type { I18n } from './i18n';
3
+ import type { KcContext } from './KcContext';
4
+ declare const DefaultPage: import("svelte").Component<PageProps<KcContext, I18n>, {}, "">;
5
+ type DefaultPage = ReturnType<typeof DefaultPage>;
6
+ export default DefaultPage;
@@ -0,0 +1 @@
1
+ export type { ExtendKcContext, KcContext } from 'keycloakify/account/KcContext';
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export * from './KcContext';
@@ -0,0 +1 @@
1
+ export * from './KcContext';
@@ -0,0 +1,143 @@
1
+ <script lang="ts">
2
+ import { useInitialize } from './Template.useInitialize';
3
+ import type { TemplateProps } from './TemplateProps';
4
+ import { useSetClassName } from '../tools/useSetClassName';
5
+ import { getKcClsx } from 'keycloakify/account/lib/kcClsx';
6
+ import { clsx } from 'keycloakify/tools/clsx';
7
+ import { onMount } from 'svelte';
8
+ import type { I18n } from './i18n';
9
+ import type { KcContext } from './KcContext';
10
+ import { kcSanitize } from 'keycloakify/lib/kcSanitize';
11
+
12
+ const { kcContext, i18n, doUseDefaultCss, active, classes, children }: TemplateProps<KcContext, I18n> = $props();
13
+ const { kcClsx } = getKcClsx({ doUseDefaultCss, classes });
14
+
15
+ const { msg, msgStr, currentLanguage, enabledLanguages } = $i18n;
16
+
17
+ const { url, features, realm, message, referrer } = kcContext;
18
+
19
+ onMount(() => {
20
+ document.title = msgStr('accountManagementTitle');
21
+ });
22
+
23
+ useSetClassName({
24
+ qualifiedName: 'html',
25
+ className: kcClsx('kcHtmlClass'),
26
+ });
27
+
28
+ useSetClassName({
29
+ qualifiedName: 'body',
30
+ className: clsx('admin-console', 'user', kcClsx('kcBodyClass')),
31
+ });
32
+
33
+ const { isReadyToRender } = useInitialize({ kcContext, doUseDefaultCss });
34
+ </script>
35
+
36
+ {#if $isReadyToRender}
37
+ <header class="navbar navbar-default navbar-pf navbar-main header">
38
+ <!-- svelte-ignore a11y_no_redundant_roles -->
39
+ <nav
40
+ class="navbar"
41
+ role="navigation"
42
+ >
43
+ <div class="navbar-header">
44
+ <div class="container">
45
+ <h1 class="navbar-title">Keycloak</h1>
46
+ </div>
47
+ </div>
48
+ <div class="navbar-collapse navbar-collapse-1">
49
+ <div class="container">
50
+ <ul class="nav navbar-nav navbar-utility">
51
+ {#if enabledLanguages.length}
52
+ <li>
53
+ <div
54
+ class="kc-dropdown"
55
+ id="kc-locale-dropdown"
56
+ >
57
+ <!-- svelte-ignore a11y_invalid_attribute -->
58
+ <a
59
+ href="#"
60
+ id="kc-current-locale-link"
61
+ >
62
+ {currentLanguage.label}
63
+ </a>
64
+ <ul>
65
+ {#each enabledLanguages as { label, href }}
66
+ <li class="kc-dropdown-item">
67
+ <a {href}>{label}</a>
68
+ </li>
69
+ {/each}
70
+ </ul>
71
+ </div>
72
+ </li>
73
+ {/if}
74
+ {#if referrer?.url}
75
+ <li>
76
+ <a
77
+ href={referrer.url}
78
+ id="referrer"
79
+ >
80
+ {@render msg('backTo', referrer.name)()}
81
+ </a>
82
+ </li>
83
+ {/if}
84
+ <li>
85
+ <a href={url.getLogoutUrl()}>{@render msg('doSignOut')()}</a>
86
+ </li>
87
+ </ul>
88
+ </div>
89
+ </div>
90
+ </nav>
91
+ </header>
92
+
93
+ <div class="container">
94
+ <div class="bs-sidebar col-sm-3">
95
+ <ul>
96
+ <li class={clsx(active === 'account' && 'active')}>
97
+ <a href={url.accountUrl}>{@render msg('account')()}</a>
98
+ </li>
99
+ {#if features.passwordUpdateSupported}
100
+ <li class={clsx(active === 'password' && 'active')}>
101
+ <a href={url.passwordUrl}>{@render msg('password')()}</a>
102
+ </li>
103
+ {/if}
104
+ <li class={clsx(active === 'totp' && 'active')}>
105
+ <a href={url.totpUrl}>{@render msg('authenticator')()}</a>
106
+ </li>
107
+ {#if features.identityFederation}
108
+ <li class={clsx(active === 'social' && 'active')}>
109
+ <a href={url.socialUrl}>{@render msg('federatedIdentity')()}</a>
110
+ </li>
111
+ {/if}
112
+ <li class={clsx(active === 'sessions' && 'active')}>
113
+ <a href={url.sessionsUrl}>{@render msg('sessions')()}</a>
114
+ </li>
115
+ <li class={clsx(active === 'applications' && 'active')}>
116
+ <a href={url.applicationsUrl}>{@render msg('applications')()}</a>
117
+ </li>
118
+ {#if features.log}
119
+ <li class={clsx(active === 'log' && 'active')}>
120
+ <a href={url.logUrl}>{@render msg('log')()}</a>
121
+ </li>
122
+ {/if}
123
+ {#if realm.userManagedAccessAllowed && features.authorization}
124
+ <li class={clsx(active === 'authorization' && 'active')}>
125
+ <a href={url.resourceUrl}>{@render msg('myResources')()}</a>
126
+ </li>
127
+ {/if}
128
+ </ul>
129
+ </div>
130
+
131
+ <div class="col-sm-9 content-area">
132
+ {#if message !== undefined}
133
+ <div class={clsx('alert', `alert-${message.type}`)}>
134
+ {#if message.type === 'success'}<span class="pficon pficon-ok"></span>{/if}
135
+ {#if message.type === 'error'}<span class="pficon pficon-error-circle-o"></span>{/if}
136
+ <span class="kc-feedback-text">{@html kcSanitize(message.summary)}</span>
137
+ </div>
138
+ {/if}
139
+
140
+ {@render children?.()}
141
+ </div>
142
+ </div>
143
+ {/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,12 @@
1
+ export type KcContextLike = {
2
+ url: {
3
+ resourcesCommonPath: string;
4
+ resourcesPath: string;
5
+ };
6
+ };
7
+ export declare function useInitialize(params: {
8
+ kcContext: KcContextLike;
9
+ doUseDefaultCss: boolean;
10
+ }): {
11
+ isReadyToRender: import("svelte/store").Readable<boolean>;
12
+ };
@@ -0,0 +1,19 @@
1
+ import { useInsertLinkTags } from '../tools/useInsertLinkTags';
2
+ import { assert } from 'keycloakify/tools/assert';
3
+ assert();
4
+ assert();
5
+ export function useInitialize(params) {
6
+ const { kcContext, doUseDefaultCss } = params;
7
+ const { url } = kcContext;
8
+ const { areAllStyleSheetsLoaded } = useInsertLinkTags({
9
+ componentOrHookName: 'Template',
10
+ hrefs: !doUseDefaultCss
11
+ ? []
12
+ : [
13
+ `${url.resourcesCommonPath}/node_modules/patternfly/dist/css/patternfly.min.css`,
14
+ `${url.resourcesCommonPath}/node_modules/patternfly/dist/css/patternfly-additions.min.css`,
15
+ `${url.resourcesPath}/css/account.css`,
16
+ ],
17
+ });
18
+ return { isReadyToRender: areAllStyleSheetsLoaded };
19
+ }
@@ -0,0 +1,12 @@
1
+ import type { ClassKey } from 'keycloakify/account/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
+ active: string;
11
+ };
12
+ export type { ClassKey };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,15 @@
1
+ import type { GenericI18n_noJsx } from 'keycloakify/account/i18n/noJsx/GenericI18n_noJsx';
2
+ import { type MessageKey as MessageKey_defaultSet } from 'keycloakify/account/i18n/messages_defaultSet/types';
3
+ import type { Snippet } from 'svelte';
4
+ /** INTERNAL: DO NOT IMPORT THIS */
5
+ export type GenericI18n_svelte<MessageKey extends string, LanguageTag extends string> = GenericI18n_noJsx<MessageKey, LanguageTag> & {
6
+ /**
7
+ * Same as msgStr but returns a Snippet with the html string rendered as html.
8
+ */
9
+ msg: (key: MessageKey_defaultSet, ...args: (string | undefined)[]) => Snippet;
10
+ /**
11
+ * Same as advancedMsgStr but returns a Snippet with the html string rendered as html.
12
+ */
13
+ advancedMsg: (key: string, ...args: (string | undefined)[]) => Snippet;
14
+ };
15
+ export type I18n = GenericI18n_svelte<MessageKey_defaultSet, string>;
@@ -0,0 +1 @@
1
+ import {} from 'keycloakify/account/i18n/messages_defaultSet/types';
@@ -0,0 +1,18 @@
1
+ import type { LanguageTag as LanguageTag_defaultSet, MessageKey as MessageKey_defaultSet } from 'keycloakify/account/i18n/messages_defaultSet/types';
2
+ import { type ReturnTypeOfCreateUseI18n } from './useI18n';
3
+ export type I18nBuilder<ThemeName extends string = never, MessageKey_themeDefined extends string = never, LanguageTag_notInDefaultSet extends string = never, ExcludedMethod extends 'withThemeName' | 'withExtraLanguages' | 'withCustomTranslations' = never> = Omit<{
4
+ withThemeName: <ThemeName extends string>() => I18nBuilder<ThemeName, MessageKey_themeDefined, LanguageTag_notInDefaultSet, ExcludedMethod | 'withThemeName'>;
5
+ withExtraLanguages: <LanguageTag_notInDefaultSet extends string>(extraLanguageTranslations: {
6
+ [LanguageTag in LanguageTag_notInDefaultSet]: {
7
+ label: string;
8
+ getMessages: () => Promise<{
9
+ default: Record<MessageKey_defaultSet, string>;
10
+ }>;
11
+ };
12
+ }) => I18nBuilder<ThemeName, MessageKey_themeDefined, LanguageTag_notInDefaultSet, ExcludedMethod | 'withExtraLanguages'>;
13
+ withCustomTranslations: <MessageKey_themeDefined extends string>(messagesByLanguageTag_themeDefined: Partial<{
14
+ [LanguageTag in LanguageTag_defaultSet | LanguageTag_notInDefaultSet]: Record<MessageKey_themeDefined, string | Record<ThemeName, string>>;
15
+ }>) => I18nBuilder<ThemeName, MessageKey_themeDefined, LanguageTag_notInDefaultSet, ExcludedMethod | 'withCustomTranslations'>;
16
+ build: () => ReturnTypeOfCreateUseI18n<MessageKey_themeDefined, LanguageTag_notInDefaultSet>;
17
+ }, ExcludedMethod>;
18
+ export declare const i18nBuilder: I18nBuilder<never, never, never, never>;
@@ -0,0 +1,26 @@
1
+ import { createUseI18n } from './useI18n';
2
+ function createI18nBuilder(params) {
3
+ const i18nBuilder = {
4
+ withThemeName: () => createI18nBuilder({
5
+ extraLanguageTranslations: params.extraLanguageTranslations,
6
+ messagesByLanguageTag_themeDefined: params.messagesByLanguageTag_themeDefined,
7
+ }),
8
+ withExtraLanguages: (extraLanguageTranslations) => createI18nBuilder({
9
+ extraLanguageTranslations,
10
+ messagesByLanguageTag_themeDefined: params.messagesByLanguageTag_themeDefined,
11
+ }),
12
+ withCustomTranslations: (messagesByLanguageTag_themeDefined) => createI18nBuilder({
13
+ extraLanguageTranslations: params.extraLanguageTranslations,
14
+ messagesByLanguageTag_themeDefined,
15
+ }),
16
+ build: () => createUseI18n({
17
+ extraLanguageTranslations: params.extraLanguageTranslations,
18
+ messagesByLanguageTag_themeDefined: params.messagesByLanguageTag_themeDefined,
19
+ }),
20
+ };
21
+ return i18nBuilder;
22
+ }
23
+ export const i18nBuilder = createI18nBuilder({
24
+ extraLanguageTranslations: {},
25
+ messagesByLanguageTag_themeDefined: {},
26
+ });
@@ -0,0 +1 @@
1
+ export * from './i18n';
@@ -0,0 +1 @@
1
+ export * from './i18n';
@@ -0,0 +1,28 @@
1
+ import { type LanguageTag as LanguageTag_defaultSet, type MessageKey as MessageKey_defaultSet } from 'keycloakify/account/i18n/messages_defaultSet/types';
2
+ import { type KcContextLike } from 'keycloakify/account/i18n/noJsx/getI18n';
3
+ import type { Readable } from 'svelte/store';
4
+ import type { GenericI18n_svelte } from './i18n';
5
+ export type ReturnTypeOfCreateUseI18n<MessageKey_themeDefined extends string, LanguageTag_notInDefaultSet extends string> = {
6
+ useI18n: (params: {
7
+ kcContext: KcContextLike;
8
+ }) => {
9
+ i18n: Readable<GenericI18n_svelte<MessageKey_defaultSet | MessageKey_themeDefined, LanguageTag_defaultSet | LanguageTag_notInDefaultSet>>;
10
+ };
11
+ ofTypeI18n: GenericI18n_svelte<MessageKey_defaultSet | MessageKey_themeDefined, LanguageTag_defaultSet | LanguageTag_notInDefaultSet>;
12
+ };
13
+ export type { KcContextLike };
14
+ export declare function createUseI18n<ThemeName extends string = string, MessageKey_themeDefined extends string = never, LanguageTag_notInDefaultSet extends string = never>(params: {
15
+ extraLanguageTranslations: {
16
+ [languageTag in LanguageTag_notInDefaultSet]: {
17
+ label: string;
18
+ getMessages: () => Promise<{
19
+ default: Record<MessageKey_defaultSet, string>;
20
+ }>;
21
+ };
22
+ };
23
+ messagesByLanguageTag_themeDefined: Partial<{
24
+ [languageTag in LanguageTag_defaultSet | LanguageTag_notInDefaultSet]: {
25
+ [key in MessageKey_themeDefined]: string | Record<ThemeName, string>;
26
+ };
27
+ }>;
28
+ }): ReturnTypeOfCreateUseI18n<MessageKey_themeDefined, LanguageTag_notInDefaultSet>;
@@ -0,0 +1,65 @@
1
+ import { useState } from '../../tools/useState';
2
+ import {} from 'keycloakify/account/i18n/messages_defaultSet/types';
3
+ import { createGetI18n } from 'keycloakify/account/i18n/noJsx/getI18n';
4
+ import { createRawSnippet, onMount } from 'svelte';
5
+ import { Reflect } from 'tsafe/Reflect';
6
+ export function createUseI18n(params) {
7
+ const { extraLanguageTranslations, messagesByLanguageTag_themeDefined } = params;
8
+ const { withSvelte } = (() => {
9
+ const cache = new WeakMap();
10
+ function renderHtmlString(params) {
11
+ const { htmlString, msgKey } = params;
12
+ return createRawSnippet(() => ({
13
+ render: () => `<div data-kc-msg="${msgKey}">${htmlString}</div>`,
14
+ }));
15
+ }
16
+ function withSvelte(i18n_noJsx) {
17
+ use_cache: {
18
+ const i18n = cache.get(i18n_noJsx);
19
+ if (i18n === undefined) {
20
+ break use_cache;
21
+ }
22
+ return i18n;
23
+ }
24
+ const i18n = {
25
+ ...i18n_noJsx,
26
+ msg: (msgKey, ...args) => renderHtmlString({ htmlString: i18n_noJsx.msgStr(msgKey, ...args), msgKey }),
27
+ advancedMsg: (msgKey, ...args) => renderHtmlString({ htmlString: i18n_noJsx.advancedMsgStr(msgKey, ...args), msgKey }),
28
+ };
29
+ cache.set(i18n_noJsx, i18n);
30
+ return i18n;
31
+ }
32
+ return { withSvelte };
33
+ })();
34
+ add_style: {
35
+ const attributeName = 'data-kc-i18n';
36
+ // Check if already exists in head
37
+ if (document.querySelector(`style[${attributeName}]`) !== null) {
38
+ break add_style;
39
+ }
40
+ const styleElement = document.createElement('style');
41
+ styleElement.attributes.setNamedItem(document.createAttribute(attributeName));
42
+ styleElement.textContent = `[data-kc-msg] { display: inline-block; }`;
43
+ document.head.prepend(styleElement);
44
+ }
45
+ const { getI18n } = createGetI18n({ extraLanguageTranslations, messagesByLanguageTag_themeDefined });
46
+ function useI18n(params) {
47
+ const { kcContext } = params;
48
+ const { i18n, prI18n_currentLanguage } = getI18n({ kcContext });
49
+ const [i18n_toReturn, setI18n_toReturn] = useState(withSvelte(i18n));
50
+ onMount(() => {
51
+ let isActive = true;
52
+ prI18n_currentLanguage?.then((i18n) => {
53
+ if (!isActive) {
54
+ return;
55
+ }
56
+ setI18n_toReturn(withSvelte(i18n));
57
+ });
58
+ return () => {
59
+ isActive = false;
60
+ };
61
+ });
62
+ return { i18n: i18n_toReturn };
63
+ }
64
+ return { useI18n, ofTypeI18n: Reflect() };
65
+ }
@@ -0,0 +1,2 @@
1
+ export type { ExtendKcContext } from './KcContext';
2
+ export { i18nBuilder } from './i18n/i18nBuilder';
@@ -0,0 +1 @@
1
+ export { i18nBuilder } from './i18n/i18nBuilder';
@@ -0,0 +1,182 @@
1
+ <script lang="ts">
2
+ import type { PageProps } from './PageProps';
3
+ import { getKcClsx } from 'keycloakify/account/lib/kcClsx';
4
+ import { clsx } from 'keycloakify/tools/clsx';
5
+ import type { I18n } from '../i18n';
6
+ import type { KcContext } from '../KcContext';
7
+
8
+ const {
9
+ kcContext,
10
+ i18n,
11
+ doUseDefaultCss,
12
+ Template,
13
+ ...props
14
+ }: PageProps<Extract<KcContext, { pageId: 'account.ftl' }>, I18n> = $props();
15
+
16
+ const classes = {
17
+ ...props.classes,
18
+ kcBodyClass: clsx(props.classes?.kcBodyClass, 'user'),
19
+ };
20
+
21
+ const { kcClsx } = getKcClsx({
22
+ doUseDefaultCss,
23
+ classes,
24
+ });
25
+
26
+ const { url, realm, messagesPerField, stateChecker, account, referrer } = kcContext;
27
+
28
+ const { msg } = $i18n;
29
+ </script>
30
+
31
+ <Template
32
+ {kcContext}
33
+ {i18n}
34
+ {doUseDefaultCss}
35
+ {classes}
36
+ active="account"
37
+ >
38
+ <div class="row">
39
+ <div class="col-md-10">
40
+ <h2>{@render msg('editAccountHtmlTitle')()}</h2>
41
+ </div>
42
+ <div class="col-md-2 subtitle">
43
+ <span class="subtitle">
44
+ <span class="required">*</span>
45
+ {@render msg('requiredFields')()}
46
+ </span>
47
+ </div>
48
+ </div>
49
+
50
+ <form
51
+ action={url.accountUrl}
52
+ class="form-horizontal"
53
+ method="post"
54
+ >
55
+ <input
56
+ type="hidden"
57
+ id="stateChecker"
58
+ name="stateChecker"
59
+ value={stateChecker}
60
+ />
61
+
62
+ {#if !realm.registrationEmailAsUsername}
63
+ <div class={clsx('form-group', messagesPerField.printIfExists('username', 'has-error'))}>
64
+ <div class="col-sm-2 col-md-2">
65
+ <label
66
+ for="username"
67
+ class="control-label"
68
+ >
69
+ {@render msg('username')()}
70
+ </label>
71
+ {#if realm.editUsernameAllowed}<span class="required">*</span>{/if}
72
+ </div>
73
+
74
+ <div class="col-sm-10 col-md-10">
75
+ <input
76
+ type="text"
77
+ class="form-control"
78
+ id="username"
79
+ name="username"
80
+ disabled={!realm.editUsernameAllowed}
81
+ value={account.username ?? ''}
82
+ />
83
+ </div>
84
+ </div>
85
+ {/if}
86
+
87
+ <div class={clsx('form-group', messagesPerField.printIfExists('email', 'has-error'))}>
88
+ <div class="col-sm-2 col-md-2">
89
+ <label
90
+ for="email"
91
+ class="control-label"
92
+ >
93
+ {@render msg('email')()}
94
+ </label>{' '}
95
+ <span class="required">*</span>
96
+ </div>
97
+
98
+ <div class="col-sm-10 col-md-10">
99
+ <!-- svelte-ignore a11y_autofocus -->
100
+ <input
101
+ type="text"
102
+ class="form-control"
103
+ id="email"
104
+ name="email"
105
+ autofocus
106
+ value={account.email ?? ''}
107
+ />
108
+ </div>
109
+ </div>
110
+
111
+ <div class={clsx('form-group', messagesPerField.printIfExists('firstName', 'has-error'))}>
112
+ <div class="col-sm-2 col-md-2">
113
+ <label
114
+ for="firstName"
115
+ class="control-label"
116
+ >
117
+ {@render msg('firstName')()}
118
+ </label>{' '}
119
+ <span class="required">*</span>
120
+ </div>
121
+
122
+ <div class="col-sm-10 col-md-10">
123
+ <input
124
+ type="text"
125
+ class="form-control"
126
+ id="firstName"
127
+ name="firstName"
128
+ value={account.firstName ?? ''}
129
+ />
130
+ </div>
131
+ </div>
132
+
133
+ <div class={clsx('form-group', messagesPerField.printIfExists('lastName', 'has-error'))}>
134
+ <div class="col-sm-2 col-md-2">
135
+ <label
136
+ for="lastName"
137
+ class="control-label"
138
+ >
139
+ {@render msg('lastName')()}
140
+ </label>{' '}
141
+ <span class="required">*</span>
142
+ </div>
143
+
144
+ <div class="col-sm-10 col-md-10">
145
+ <input
146
+ type="text"
147
+ class="form-control"
148
+ id="lastName"
149
+ name="lastName"
150
+ value={account.lastName ?? ''}
151
+ />
152
+ </div>
153
+ </div>
154
+
155
+ <div class="form-group">
156
+ <div
157
+ id="kc-form-buttons"
158
+ class="col-md-offset-2 col-md-10 submit"
159
+ >
160
+ <div>
161
+ {#if referrer !== undefined}<a href={referrer?.url}>{@render msg('backToApplication')()}</a>{/if}
162
+ <button
163
+ type="submit"
164
+ class={kcClsx('kcButtonClass', 'kcButtonPrimaryClass', 'kcButtonLargeClass')}
165
+ name="submitAction"
166
+ value="Save"
167
+ >
168
+ {@render msg('doSave')()}
169
+ </button>
170
+ <button
171
+ type="submit"
172
+ class={kcClsx('kcButtonClass', 'kcButtonDefaultClass', 'kcButtonLargeClass')}
173
+ name="submitAction"
174
+ value="Cancel"
175
+ >
176
+ {@render msg('doCancel')()}
177
+ </button>
178
+ </div>
179
+ </div>
180
+ </div>
181
+ </form>
182
+ </Template>
@@ -0,0 +1,6 @@
1
+ import type { PageProps } from './PageProps';
2
+ import type { I18n } from '../i18n';
3
+ import type { KcContext } from '../KcContext';
4
+ declare const Account: import("svelte").Component<PageProps<KcContext.Account, I18n>, {}, "">;
5
+ type Account = ReturnType<typeof Account>;
6
+ export default Account;