@keycloakify/svelte 0.2.0 → 0.2.2
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.
- package/keycloakify-svelte/account/Template.svelte +1 -1
- package/keycloakify-svelte/account/pages/Account.svelte +3 -3
- package/keycloakify-svelte/account/pages/Applications.svelte +8 -8
- package/keycloakify-svelte/account/pages/FederatedIdentity.svelte +1 -1
- package/keycloakify-svelte/account/pages/Log.svelte +2 -2
- package/keycloakify-svelte/account/pages/Password.svelte +1 -1
- package/keycloakify-svelte/account/pages/Sessions.svelte +2 -2
- package/keycloakify-svelte/account/pages/Totp.svelte +2 -2
- package/keycloakify-svelte/bin/292.index.js +297 -252
- package/keycloakify-svelte/login/Template.svelte +1 -1
- package/keycloakify-svelte/login/components/FieldErrors.svelte +1 -1
- package/keycloakify-svelte/login/components/InputFieldByType.svelte +1 -1
- package/keycloakify-svelte/login/components/InputTagSelects.svelte +1 -1
- package/keycloakify-svelte/login/components/SelectTag.svelte +1 -1
- package/keycloakify-svelte/login/components/UserProfileFormFields.svelte +1 -1
- package/keycloakify-svelte/login/pages/DeleteAccountConfirm.svelte +6 -6
- package/keycloakify-svelte/login/pages/FrontchannelLogout.svelte +11 -7
- package/keycloakify-svelte/login/pages/Login.svelte +3 -3
- package/keycloakify-svelte/login/pages/LoginConfigTotp.svelte +3 -3
- package/keycloakify-svelte/login/pages/LoginIdpLinkConfirmOverride.svelte +1 -1
- package/keycloakify-svelte/login/pages/LoginOauthGrant.svelte +1 -1
- package/keycloakify-svelte/login/pages/LoginOtp.svelte +1 -1
- package/keycloakify-svelte/login/pages/LoginPageExpired.svelte +3 -5
- package/keycloakify-svelte/login/pages/LoginPasskeysConditionalAuthenticate.svelte +6 -6
- package/keycloakify-svelte/login/pages/LoginRecoveryAuthnCodeConfig.svelte +1 -1
- package/keycloakify-svelte/login/pages/LoginResetOtp.svelte +1 -1
- package/keycloakify-svelte/login/pages/LoginUsername.svelte +2 -2
- package/keycloakify-svelte/login/pages/Register.svelte +19 -3
- package/keycloakify-svelte/login/pages/SelectAuthenticator.svelte +1 -1
- package/keycloakify-svelte/login/pages/WebauthnAuthenticate.svelte +4 -4
- package/package.json +21 -21
- package/src/account/Template.svelte +1 -1
- package/src/account/pages/Account.svelte +3 -3
- package/src/account/pages/Applications.svelte +8 -8
- package/src/account/pages/FederatedIdentity.svelte +1 -1
- package/src/account/pages/Log.svelte +2 -2
- package/src/account/pages/Password.svelte +1 -1
- package/src/account/pages/Sessions.svelte +2 -2
- package/src/account/pages/Totp.svelte +2 -2
- package/src/login/Template.svelte +1 -1
- package/src/login/components/FieldErrors.svelte +1 -1
- package/src/login/components/InputFieldByType.svelte +1 -1
- package/src/login/components/InputTagSelects.svelte +1 -1
- package/src/login/components/SelectTag.svelte +1 -1
- package/src/login/components/UserProfileFormFields.svelte +1 -1
- package/src/login/pages/DeleteAccountConfirm.svelte +6 -6
- package/src/login/pages/FrontchannelLogout.svelte +11 -7
- package/src/login/pages/Login.svelte +3 -3
- package/src/login/pages/LoginConfigTotp.svelte +3 -3
- package/src/login/pages/LoginIdpLinkConfirmOverride.svelte +1 -1
- package/src/login/pages/LoginOauthGrant.svelte +1 -1
- package/src/login/pages/LoginOtp.svelte +1 -1
- package/src/login/pages/LoginPageExpired.svelte +3 -5
- package/src/login/pages/LoginPasskeysConditionalAuthenticate.svelte +6 -6
- package/src/login/pages/LoginRecoveryAuthnCodeConfig.svelte +1 -1
- package/src/login/pages/LoginResetOtp.svelte +1 -1
- package/src/login/pages/LoginUsername.svelte +2 -2
- package/src/login/pages/Register.svelte +19 -3
- package/src/login/pages/SelectAuthenticator.svelte +1 -1
- package/src/login/pages/WebauthnAuthenticate.svelte +4 -4
- package/stories/account/KcPage.svelte +1 -0
- package/stories/login/KcPage.svelte +1 -0
|
@@ -92,7 +92,7 @@
|
|
|
92
92
|
id="language-switch1"
|
|
93
93
|
class={kcClsx('kcLocaleListClass')}
|
|
94
94
|
>
|
|
95
|
-
{#each enabledLanguages as enabledLanguage, i}
|
|
95
|
+
{#each enabledLanguages as enabledLanguage, i (enabledLanguage.languageTag)}
|
|
96
96
|
{@const { label, href } = enabledLanguage}
|
|
97
97
|
<li
|
|
98
98
|
class={kcClsx('kcLocaleListItemClass')}
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
class={kcClsx('kcInputErrorMessageClass')}
|
|
21
21
|
aria-live="polite"
|
|
22
22
|
>
|
|
23
|
-
{#each _displayableErrors as displayableError, i}
|
|
23
|
+
{#each _displayableErrors as displayableError, i (i)}
|
|
24
24
|
{@const { errorMessage } = displayableError}
|
|
25
25
|
{@render errorMessage()}
|
|
26
26
|
{#if _displayableErrors.length - 1 !== i}<br />{/if}
|
|
@@ -39,17 +39,17 @@
|
|
|
39
39
|
>
|
|
40
40
|
<div
|
|
41
41
|
class="alert alert-warning"
|
|
42
|
-
style:margin-top=
|
|
43
|
-
style:margin-bottom=
|
|
42
|
+
style:margin-top="0"
|
|
43
|
+
style:margin-bottom="30px"
|
|
44
44
|
>
|
|
45
45
|
<span class="pficon pficon-warning-triangle-o"></span>
|
|
46
46
|
{@render msg('irreversibleAction')()}
|
|
47
47
|
</div>
|
|
48
48
|
<p>{@render msg('deletingImplies')()}</p>
|
|
49
49
|
<ul
|
|
50
|
-
style:color=
|
|
51
|
-
style:list-style=
|
|
52
|
-
style:list-style-position=
|
|
50
|
+
style:color="#72767b"
|
|
51
|
+
style:list-style="disc"
|
|
52
|
+
style:list-style-position="inside"
|
|
53
53
|
>
|
|
54
54
|
<li>{@render msg('loggingOutImmediately')()}</li>
|
|
55
55
|
<li>{@render msg('errasingData')()}</li>
|
|
@@ -64,7 +64,7 @@
|
|
|
64
64
|
{#if triggered_from_aia}
|
|
65
65
|
<button
|
|
66
66
|
class={kcClsx('kcButtonClass', 'kcButtonDefaultClass', 'kcButtonLargeClass')}
|
|
67
|
-
style:margin-left=
|
|
67
|
+
style:margin-left="calc(100% - 220px)"
|
|
68
68
|
type="submit"
|
|
69
69
|
name="cancel-aia"
|
|
70
70
|
value="true"
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
2
|
import type { PageProps } from './PageProps';
|
|
3
|
-
import { onMount } from 'svelte';
|
|
4
3
|
import type { KcContext } from '../KcContext';
|
|
5
4
|
import type { I18n } from '../i18n';
|
|
6
5
|
|
|
@@ -15,11 +14,15 @@
|
|
|
15
14
|
const { logout } = kcContext;
|
|
16
15
|
|
|
17
16
|
const { msg, msgStr } = $i18n;
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
if (logout.logoutRedirectUri) {
|
|
21
|
-
|
|
17
|
+
let iframeLoadCount = $state(0);
|
|
18
|
+
$effect(() => {
|
|
19
|
+
if (!kcContext.logout.logoutRedirectUri) {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
if (iframeLoadCount !== kcContext.logout.clients.length) {
|
|
23
|
+
return;
|
|
22
24
|
}
|
|
25
|
+
window.location.replace(kcContext.logout.logoutRedirectUri);
|
|
23
26
|
});
|
|
24
27
|
</script>
|
|
25
28
|
|
|
@@ -35,13 +38,14 @@
|
|
|
35
38
|
{/snippet}
|
|
36
39
|
<p>{@render msg('frontchannel-logout.message')()}</p>
|
|
37
40
|
<ul>
|
|
38
|
-
{#each logout.clients as client}
|
|
41
|
+
{#each logout.clients as client (client.name)}
|
|
39
42
|
<li>
|
|
40
43
|
{client.name}
|
|
41
44
|
<!-- svelte-ignore a11y_missing_attribute -->
|
|
42
45
|
<iframe
|
|
43
46
|
src={client.frontChannelLogoutUrl}
|
|
44
|
-
style:display=
|
|
47
|
+
style:display="none"
|
|
48
|
+
onload={() => iframeLoadCount++}
|
|
45
49
|
></iframe>
|
|
46
50
|
</li>{/each}
|
|
47
51
|
</ul>
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
<div id="kc-registration-container">
|
|
43
43
|
<div id="kc-registration">
|
|
44
44
|
<span>
|
|
45
|
-
{@render msg('noAccount')()}
|
|
45
|
+
{@render msg('noAccount')()}
|
|
46
46
|
<a
|
|
47
47
|
tabindex={8}
|
|
48
48
|
href={url.registrationUrl}
|
|
@@ -63,7 +63,7 @@
|
|
|
63
63
|
<hr />
|
|
64
64
|
<h2>{@render msg('identity-provider-login-label')()}</h2>
|
|
65
65
|
<ul class={kcClsx('kcFormSocialAccountListClass', providers.length > 3 && 'kcFormSocialAccountListGridClass')}>
|
|
66
|
-
{#each providers as p}
|
|
66
|
+
{#each providers as p (p.providerId)}
|
|
67
67
|
<li>
|
|
68
68
|
<a
|
|
69
69
|
id={`social-${p.alias}`}
|
|
@@ -178,7 +178,7 @@
|
|
|
178
178
|
name="rememberMe"
|
|
179
179
|
type="checkbox"
|
|
180
180
|
checked={!!login.rememberMe}
|
|
181
|
-
|
|
181
|
+
/>
|
|
182
182
|
{@render msg('rememberMe')()}
|
|
183
183
|
</label>
|
|
184
184
|
</div>
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
<p>{@render msg('loginTotpStep1')()}</p>
|
|
40
40
|
|
|
41
41
|
<ul id="kc-totp-supported-apps">
|
|
42
|
-
{#each totp.supportedApplications as app}
|
|
42
|
+
{#each totp.supportedApplications as app (app)}
|
|
43
43
|
<li>{@render advancedMsg(app)()}</li>
|
|
44
44
|
{/each}
|
|
45
45
|
</ul>
|
|
@@ -119,7 +119,7 @@
|
|
|
119
119
|
class={kcClsx('kcLabelClass')}
|
|
120
120
|
>
|
|
121
121
|
{@render msg('authenticatorCode')()}
|
|
122
|
-
</label
|
|
122
|
+
</label>
|
|
123
123
|
<span class="required">*</span>
|
|
124
124
|
</div>
|
|
125
125
|
<div class={kcClsx('kcInputWrapperClass')}>
|
|
@@ -160,7 +160,7 @@
|
|
|
160
160
|
class={kcClsx('kcLabelClass')}
|
|
161
161
|
>
|
|
162
162
|
{@render msg('loginTotpDeviceName')()}
|
|
163
|
-
</label
|
|
163
|
+
</label>
|
|
164
164
|
{#if totp.otpCredentials.length >= 1}<span class="required">*</span>{/if}
|
|
165
165
|
</div>
|
|
166
166
|
<div class={kcClsx('kcInputWrapperClass')}>
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
{#if otpLogin.userOtpCredentials.length > 1}
|
|
43
43
|
<div class={kcClsx('kcFormGroupClass')}>
|
|
44
44
|
<div class={kcClsx('kcInputWrapperClass')}>
|
|
45
|
-
{#each otpLogin.userOtpCredentials as otpCredential, index}
|
|
45
|
+
{#each otpLogin.userOtpCredentials as otpCredential, index (otpCredential.id)}
|
|
46
46
|
<input
|
|
47
47
|
id={`kc-otp-credential-${index}`}
|
|
48
48
|
class={kcClsx('kcLoginOTPListInputClass')}
|
|
@@ -36,15 +36,13 @@
|
|
|
36
36
|
href={url.loginRestartFlowUrl}
|
|
37
37
|
>
|
|
38
38
|
{@render msg('doClickHere')()}
|
|
39
|
-
</a
|
|
40
|
-
|
|
41
|
-
{@render msg('pageExpiredMsg2')()}{' '}
|
|
39
|
+
</a> .<br />
|
|
40
|
+
{@render msg('pageExpiredMsg2')()}
|
|
42
41
|
<a
|
|
43
42
|
id="loginContinueLink"
|
|
44
43
|
href={url.loginAction}
|
|
45
44
|
>
|
|
46
45
|
{@render msg('doClickHere')()}
|
|
47
|
-
</a
|
|
48
|
-
.
|
|
46
|
+
</a> .
|
|
49
47
|
</p>
|
|
50
48
|
</Template>
|
|
@@ -101,14 +101,14 @@
|
|
|
101
101
|
<div
|
|
102
102
|
class={kcClsx('kcFormGroupClass')}
|
|
103
103
|
no-bottom-margin={true}
|
|
104
|
-
style:margin-bottom=
|
|
104
|
+
style:margin-bottom="0"
|
|
105
105
|
>
|
|
106
106
|
{#if authenticators !== undefined && Object.keys(authenticators).length !== 0}
|
|
107
107
|
<form
|
|
108
108
|
id="authn_select"
|
|
109
109
|
class={kcClsx('kcFormClass')}
|
|
110
110
|
>
|
|
111
|
-
{#each authenticators.authenticators as authenticator}
|
|
111
|
+
{#each authenticators.authenticators as authenticator (authenticator.credentialId)}
|
|
112
112
|
<input
|
|
113
113
|
type="hidden"
|
|
114
114
|
name="authn_use_chk"
|
|
@@ -122,7 +122,7 @@
|
|
|
122
122
|
<p class={kcClsx('kcSelectAuthListItemTitle')}>{msg('passkey-available-authenticators')}</p>
|
|
123
123
|
{/if}
|
|
124
124
|
<div class={kcClsx('kcFormClass')}>
|
|
125
|
-
{#each authenticators.authenticators as authenticator, i}
|
|
125
|
+
{#each authenticators.authenticators as authenticator, i (authenticator.credentialId)}
|
|
126
126
|
<div
|
|
127
127
|
id={`kc-webauthn-authenticator-item-${i}`}
|
|
128
128
|
class={kcClsx('kcSelectAuthListItemClass')}
|
|
@@ -151,7 +151,7 @@
|
|
|
151
151
|
id={`kc-webauthn-authenticator-transport-${i}`}
|
|
152
152
|
class={kcClsx('kcSelectAuthListItemDescriptionClass')}
|
|
153
153
|
>
|
|
154
|
-
{#each authenticator.transports.displayNameProperties as nameProperty, i}
|
|
154
|
+
{#each authenticator.transports.displayNameProperties as nameProperty, i (nameProperty)}
|
|
155
155
|
<span> {advancedMsg(nameProperty)} </span>
|
|
156
156
|
{#if i !== authenticator.transports.displayNameProperties.length - 1}
|
|
157
157
|
<span>, </span>{/if}
|
|
@@ -176,7 +176,7 @@
|
|
|
176
176
|
id="kc-form-login"
|
|
177
177
|
action={url.loginAction}
|
|
178
178
|
method="post"
|
|
179
|
-
style:display=
|
|
179
|
+
style:display="none"
|
|
180
180
|
onsubmit={(event) => {
|
|
181
181
|
try {
|
|
182
182
|
event.currentTarget.login.disabled = true;
|
|
@@ -223,7 +223,7 @@
|
|
|
223
223
|
<div
|
|
224
224
|
id="kc-form-passkey-button"
|
|
225
225
|
class={kcClsx('kcFormButtonsClass')}
|
|
226
|
-
style:display=
|
|
226
|
+
style:display="none"
|
|
227
227
|
>
|
|
228
228
|
<!-- svelte-ignore a11y_autofocus -->
|
|
229
229
|
<input
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
id={olRecoveryCodesListId}
|
|
62
62
|
class={kcClsx('kcRecoveryCodesList')}
|
|
63
63
|
>
|
|
64
|
-
{#each recoveryAuthnCodesConfigBean.generatedRecoveryAuthnCodesList as code, index}
|
|
64
|
+
{#each recoveryAuthnCodesConfigBean.generatedRecoveryAuthnCodesList as code, index (code)}
|
|
65
65
|
<li>
|
|
66
66
|
<span>{index + 1}:</span>
|
|
67
67
|
{code.slice(0, 4)}-{code.slice(4, 8)}-{code.slice(8)}
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
<div class={kcClsx('kcInputWrapperClass')}>
|
|
42
42
|
<div class={kcClsx('kcInfoAreaWrapperClass')}>
|
|
43
43
|
<p id="kc-otp-reset-form-description">{msg('otp-reset-description')}</p>
|
|
44
|
-
{#each configuredOtpCredentials.userOtpCredentials as otpCredential, index}
|
|
44
|
+
{#each configuredOtpCredentials.userOtpCredentials as otpCredential, index (otpCredential.id)}
|
|
45
45
|
<input
|
|
46
46
|
id={`kc-otp-credential-${index}`}
|
|
47
47
|
class={kcClsx('kcLoginOTPListInputClass')}
|
|
@@ -64,7 +64,7 @@
|
|
|
64
64
|
social.providers.length > 3 && 'kcFormSocialAccountListGridClass',
|
|
65
65
|
)}
|
|
66
66
|
>
|
|
67
|
-
{#each social.providers as p}
|
|
67
|
+
{#each social.providers as p (p.providerId)}
|
|
68
68
|
<li>
|
|
69
69
|
<a
|
|
70
70
|
id={`social-${p.alias}`}
|
|
@@ -153,7 +153,7 @@
|
|
|
153
153
|
name="rememberMe"
|
|
154
154
|
type="checkbox"
|
|
155
155
|
checked={!!login.rememberMe}
|
|
156
|
-
|
|
156
|
+
/>
|
|
157
157
|
{@render msg('rememberMe')()}
|
|
158
158
|
</label>
|
|
159
159
|
</div>
|
|
@@ -36,6 +36,23 @@
|
|
|
36
36
|
|
|
37
37
|
const [isFormSubmittable, setIsFormSubmittable] = useState(false);
|
|
38
38
|
const [areTermsAccepted, setAreTermsAccepted] = useState(false);
|
|
39
|
+
let htmlFormElement: HTMLFormElement | null = $state(null);
|
|
40
|
+
|
|
41
|
+
$effect(() => {
|
|
42
|
+
if (htmlFormElement === null) {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
46
|
+
(window as any)['onSubmitRecaptcha'] = () => {
|
|
47
|
+
// @ts-expect-error; form not null
|
|
48
|
+
htmlFormElement.requestSubmit();
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
return () => {
|
|
52
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
53
|
+
delete (window as any)['onSubmitRecaptcha'];
|
|
54
|
+
};
|
|
55
|
+
});
|
|
39
56
|
</script>
|
|
40
57
|
|
|
41
58
|
<Template
|
|
@@ -58,6 +75,7 @@
|
|
|
58
75
|
class={kcClsx('kcFormClass')}
|
|
59
76
|
action={url.registrationAction}
|
|
60
77
|
method="post"
|
|
78
|
+
bind:this={htmlFormElement}
|
|
61
79
|
>
|
|
62
80
|
<UserProfileFormFields
|
|
63
81
|
{kcContext}
|
|
@@ -109,9 +127,7 @@
|
|
|
109
127
|
'g-recaptcha',
|
|
110
128
|
)}
|
|
111
129
|
data-sitekey={recaptchaSiteKey}
|
|
112
|
-
data-callback=
|
|
113
|
-
(document.getElementById('kc-register-form') as HTMLFormElement).requestSubmit();
|
|
114
|
-
}}
|
|
130
|
+
data-callback="onSubmitRecaptcha"
|
|
115
131
|
data-action={recaptchaAction}
|
|
116
132
|
type="submit"
|
|
117
133
|
>
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
method="post"
|
|
35
35
|
>
|
|
36
36
|
<div class={kcClsx('kcSelectAuthListClass')}>
|
|
37
|
-
{#each auth.authenticationSelections as authenticationSelection}
|
|
37
|
+
{#each auth.authenticationSelections as authenticationSelection (authenticationSelection.authExecId)}
|
|
38
38
|
<button
|
|
39
39
|
class={kcClsx('kcSelectAuthListItemClass')}
|
|
40
40
|
type="submit"
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
{#snippet infoNode()}
|
|
44
44
|
<div id="kc-registration">
|
|
45
45
|
<span>
|
|
46
|
-
{@render msg('noAccount')()}
|
|
46
|
+
{@render msg('noAccount')()}
|
|
47
47
|
<a
|
|
48
48
|
tabindex={6}
|
|
49
49
|
href={url.registrationUrl}
|
|
@@ -99,7 +99,7 @@
|
|
|
99
99
|
id="authn_select"
|
|
100
100
|
class={kcClsx('kcFormClass')}
|
|
101
101
|
>
|
|
102
|
-
{#each authenticators.authenticators as authenticator}
|
|
102
|
+
{#each authenticators.authenticators as authenticator (authenticator.credentialId)}
|
|
103
103
|
<input
|
|
104
104
|
type="hidden"
|
|
105
105
|
name="authn_use_chk"
|
|
@@ -113,7 +113,7 @@
|
|
|
113
113
|
<p class={kcClsx('kcSelectAuthListItemTitle')}>{@render msg('webauthn-available-authenticators')()}</p>
|
|
114
114
|
{/if}
|
|
115
115
|
<div class={kcClsx('kcFormOptionsClass')}>
|
|
116
|
-
{#each authenticators.authenticators as authenticator, i}
|
|
116
|
+
{#each authenticators.authenticators as authenticator, i (authenticator.credentialId)}
|
|
117
117
|
<div
|
|
118
118
|
id={`kc-webauthn-authenticator-item-${i}`}
|
|
119
119
|
class={kcClsx('kcSelectAuthListItemClass')}
|
|
@@ -144,7 +144,7 @@
|
|
|
144
144
|
id={`kc-webauthn-authenticator-transport-${i}`}
|
|
145
145
|
class={kcClsx('kcSelectAuthListItemDescriptionClass')}
|
|
146
146
|
>
|
|
147
|
-
{#each authenticator.transports.displayNameProperties as displayNameProperty, i}
|
|
147
|
+
{#each authenticator.transports.displayNameProperties as displayNameProperty, i (displayNameProperty)}
|
|
148
148
|
{@const hasNext = i !== authenticator.transports.displayNameProperties.length - 1}
|
|
149
149
|
{@render advancedMsg(displayNameProperty)()}
|
|
150
150
|
{#if hasNext}<span>, </span>{/if}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@keycloakify/svelte",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.2",
|
|
4
4
|
"description": "Svelte Components for Keycloakify",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"keycloak",
|
|
@@ -432,38 +432,38 @@
|
|
|
432
432
|
"release": "sh scripts/release.sh"
|
|
433
433
|
},
|
|
434
434
|
"peerDependencies": {
|
|
435
|
-
"keycloakify": "^11.9.
|
|
435
|
+
"keycloakify": "^11.9.2",
|
|
436
436
|
"svelte": "^5.0.0"
|
|
437
437
|
},
|
|
438
438
|
"devDependencies": {
|
|
439
|
-
"@sveltejs/adapter-auto": "^6.0
|
|
440
|
-
"@sveltejs/kit": "^2.
|
|
441
|
-
"@sveltejs/package": "^2.
|
|
442
|
-
"@sveltejs/vite-plugin-svelte": "^6.
|
|
439
|
+
"@sveltejs/adapter-auto": "^6.1.0",
|
|
440
|
+
"@sveltejs/kit": "^2.29.1",
|
|
441
|
+
"@sveltejs/package": "^2.4.1",
|
|
442
|
+
"@sveltejs/vite-plugin-svelte": "^6.1.2",
|
|
443
443
|
"@types/eslint": "^9.6.1",
|
|
444
444
|
"@types/node": "^22.15.18",
|
|
445
445
|
"@vercel/ncc": "^0.38.3",
|
|
446
|
-
"conventional-changelog-cli": "^5.0.0",
|
|
447
|
-
"cz-conventional-changelog": "^3.3.0",
|
|
448
446
|
"cli-select": "^1.1.2",
|
|
449
|
-
"
|
|
450
|
-
"
|
|
451
|
-
"eslint
|
|
452
|
-
"eslint-
|
|
447
|
+
"conventional-changelog": "^7.1.1",
|
|
448
|
+
"conventional-changelog-angular": "^8.0.0",
|
|
449
|
+
"eslint": "^9.33.0",
|
|
450
|
+
"eslint-config-prettier": "^10.1.8",
|
|
451
|
+
"eslint-plugin-prettier": "^5.5.4",
|
|
452
|
+
"eslint-plugin-svelte": "^3.11.0",
|
|
453
453
|
"eslint-plugin-unused-imports": "^4.1.4",
|
|
454
454
|
"globals": "^16.3.0",
|
|
455
|
-
"keycloakify": "^11.9.
|
|
456
|
-
"npm-check-updates": "^18.0.
|
|
455
|
+
"keycloakify": "^11.9.2",
|
|
456
|
+
"npm-check-updates": "^18.0.2",
|
|
457
457
|
"prettier": "^3.6.2",
|
|
458
458
|
"prettier-plugin-svelte": "^3.4.0",
|
|
459
|
-
"publint": "0.
|
|
460
|
-
"svelte": "^5.
|
|
461
|
-
"svelte-check": "^4.
|
|
462
|
-
"tsx": "^4.20.
|
|
459
|
+
"publint": "^0.3.12",
|
|
460
|
+
"svelte": "^5.38.1",
|
|
461
|
+
"svelte-check": "^4.3.1",
|
|
462
|
+
"tsx": "^4.20.4",
|
|
463
463
|
"typescript": "~5.8.3",
|
|
464
|
-
"typescript-eslint": "^8.
|
|
465
|
-
"vite": "^7.
|
|
466
|
-
"zod": "^4.0.
|
|
464
|
+
"typescript-eslint": "^8.39.1",
|
|
465
|
+
"vite": "^7.1.2",
|
|
466
|
+
"zod": "^4.0.17"
|
|
467
467
|
},
|
|
468
468
|
"bin": {
|
|
469
469
|
"_keycloakify-custom-handler": "keycloakify-svelte/bin/index.js"
|
|
@@ -91,7 +91,7 @@
|
|
|
91
91
|
class="control-label"
|
|
92
92
|
>
|
|
93
93
|
{@render msg('email')()}
|
|
94
|
-
</label
|
|
94
|
+
</label>
|
|
95
95
|
<span class="required">*</span>
|
|
96
96
|
</div>
|
|
97
97
|
|
|
@@ -115,7 +115,7 @@
|
|
|
115
115
|
class="control-label"
|
|
116
116
|
>
|
|
117
117
|
{@render msg('firstName')()}
|
|
118
|
-
</label
|
|
118
|
+
</label>
|
|
119
119
|
<span class="required">*</span>
|
|
120
120
|
</div>
|
|
121
121
|
|
|
@@ -137,7 +137,7 @@
|
|
|
137
137
|
class="control-label"
|
|
138
138
|
>
|
|
139
139
|
{@render msg('lastName')()}
|
|
140
|
-
</label
|
|
140
|
+
</label>
|
|
141
141
|
<span class="required">*</span>
|
|
142
142
|
</div>
|
|
143
143
|
|
|
@@ -76,7 +76,7 @@
|
|
|
76
76
|
</thead>
|
|
77
77
|
|
|
78
78
|
<tbody>
|
|
79
|
-
{#each applications as application}
|
|
79
|
+
{#each applications as application, i (i)}
|
|
80
80
|
<tr>
|
|
81
81
|
<td>
|
|
82
82
|
{#if application.effectiveUrl}
|
|
@@ -97,22 +97,22 @@
|
|
|
97
97
|
|
|
98
98
|
<td>
|
|
99
99
|
{#if !isArrayWithEmptyObject(application.realmRolesAvailable)}
|
|
100
|
-
{#each application.realmRolesAvailable as role, index}
|
|
100
|
+
{#each application.realmRolesAvailable as role, index (role.name)}
|
|
101
101
|
<span>
|
|
102
102
|
{@render (role.description ? advancedMsg(role.description) : advancedMsg(role.name))()}
|
|
103
103
|
{#if index < application.realmRolesAvailable.length - 1}, {/if}
|
|
104
104
|
</span>
|
|
105
105
|
{/each}
|
|
106
106
|
{#if application.resourceRolesAvailable}
|
|
107
|
-
{#each Object.keys(application.resourceRolesAvailable) as resource}
|
|
107
|
+
{#each Object.keys(application.resourceRolesAvailable) as resource (resource)}
|
|
108
108
|
<span>
|
|
109
109
|
{#if !isArrayWithEmptyObject(application.realmRolesAvailable)}, {/if}
|
|
110
|
-
{#each application.resourceRolesAvailable[resource] as clientRole}
|
|
110
|
+
{#each application.resourceRolesAvailable[resource] as clientRole (clientRole.roleName)}
|
|
111
111
|
<span>
|
|
112
112
|
{@render (clientRole.roleDescription
|
|
113
113
|
? advancedMsg(clientRole.roleDescription)
|
|
114
|
-
: advancedMsg(clientRole.roleName))()}
|
|
115
|
-
{@render msg('inResource')()}
|
|
114
|
+
: advancedMsg(clientRole.roleName))()} :
|
|
115
|
+
{@render msg('inResource')()} :
|
|
116
116
|
<strong>
|
|
117
117
|
{#if clientRole.clientName}
|
|
118
118
|
{@render advancedMsg(clientRole.clientName)()}
|
|
@@ -131,7 +131,7 @@
|
|
|
131
131
|
|
|
132
132
|
<td>
|
|
133
133
|
{#if application.client.consentRequired}
|
|
134
|
-
{#each application.clientScopesGranted as claim}
|
|
134
|
+
{#each application.clientScopesGranted as claim (claim)}
|
|
135
135
|
<span>
|
|
136
136
|
{@render advancedMsg(claim)()}
|
|
137
137
|
{#if claim !== application.clientScopesGranted[application.clientScopesGranted.length - 1]}, {/if}
|
|
@@ -143,7 +143,7 @@
|
|
|
143
143
|
</td>
|
|
144
144
|
|
|
145
145
|
<td>
|
|
146
|
-
{#each application.additionalGrants as grant}
|
|
146
|
+
{#each application.additionalGrants as grant (grant)}
|
|
147
147
|
<span>
|
|
148
148
|
{@render advancedMsg(grant)()}
|
|
149
149
|
{#if grant !== application.additionalGrants[application.additionalGrants.length - 1]}, {/if}
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
</div>
|
|
30
30
|
</div>
|
|
31
31
|
<div id="federated-identities">
|
|
32
|
-
{#each federatedIdentity.identities as identity}
|
|
32
|
+
{#each federatedIdentity.identities as identity (identity.providerId)}
|
|
33
33
|
<div class="row margin-bottom">
|
|
34
34
|
<div class="col-sm-2 col-md-2">
|
|
35
35
|
<label
|
|
@@ -46,14 +46,14 @@
|
|
|
46
46
|
</thead>
|
|
47
47
|
|
|
48
48
|
<tbody>
|
|
49
|
-
{#each log.events as event}
|
|
49
|
+
{#each log.events as event (event.event)}
|
|
50
50
|
<tr>
|
|
51
51
|
<td>{event.date ? new Date(event.date).toLocaleString() : ''}</td>
|
|
52
52
|
<td>{event.event}</td>
|
|
53
53
|
<td>{event.ipAddress}</td>
|
|
54
54
|
<td>{event.client || ''}</td>
|
|
55
55
|
<td>
|
|
56
|
-
{#each event.details as detail, detailIndex}
|
|
56
|
+
{#each event.details as detail, detailIndex (detail.key)}
|
|
57
57
|
<span>
|
|
58
58
|
{`${detail.key} = ${detail.value}`}
|
|
59
59
|
{#if detailIndex < event.details.length - 1}, {/if}
|
|
@@ -48,14 +48,14 @@
|
|
|
48
48
|
|
|
49
49
|
<!-- svelte-ignore a11y_no_redundant_roles -->
|
|
50
50
|
<tbody role="rowgroup">
|
|
51
|
-
{#each sessions.sessions as session}
|
|
51
|
+
{#each sessions.sessions as session (session.id)}
|
|
52
52
|
<tr>
|
|
53
53
|
<td>{session.ipAddress}</td>
|
|
54
54
|
<td>{session?.started}</td>
|
|
55
55
|
<td>{session?.lastAccess}</td>
|
|
56
56
|
<td>{session?.expires}</td>
|
|
57
57
|
<td>
|
|
58
|
-
{#each session.clients as client}
|
|
58
|
+
{#each session.clients as client (client)}
|
|
59
59
|
<div>
|
|
60
60
|
{client}
|
|
61
61
|
<br />
|