@keycloakify/svelte 0.2.1 → 0.2.3
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/README.md +27 -2
- 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
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
{/if}
|
|
57
57
|
</thead>
|
|
58
58
|
<tbody>
|
|
59
|
-
{#each totp.otpCredentials as credential, index}
|
|
59
|
+
{#each totp.otpCredentials as credential, index (credential.id)}
|
|
60
60
|
<tr>
|
|
61
61
|
<td class="provider">{@render msg('mobile')()}</td>
|
|
62
62
|
{#if totp.otpCredentials.length > 1}<td class="provider">{credential.id}</td>{/if}
|
|
@@ -107,7 +107,7 @@
|
|
|
107
107
|
<p>{@render msg('totpStep1')()}</p>
|
|
108
108
|
|
|
109
109
|
<ul id="kc-totp-supported-apps">
|
|
110
|
-
{#each totp.supportedApplications as app}
|
|
110
|
+
{#each totp.supportedApplications as app (app)}
|
|
111
111
|
<li>{@render advancedMsg(app)()}</li>
|
|
112
112
|
{/each}
|
|
113
113
|
</ul>
|
|
@@ -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 '@keycloakify/svelte/login/pages/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}
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
const classes = {} satisfies { [key in ClassKey]?: string };
|
|
14
14
|
const doMakeUserConfirmPassword = true;
|
|
15
15
|
|
|
16
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
16
17
|
const page = async (): Promise<{ default?: Component<any> }> => {
|
|
17
18
|
switch (kcContext.pageId) {
|
|
18
19
|
default:
|