keycloakify 10.1.3 → 11.0.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.
- package/account/KcContext/kcContextMocks.js +18 -6
- package/account/KcContext/kcContextMocks.js.map +1 -1
- package/account/Template.js +8 -26
- package/account/Template.js.map +1 -1
- package/account/Template.useInitialize.d.ts +12 -0
- package/account/Template.useInitialize.js +20 -0
- package/account/Template.useInitialize.js.map +1 -0
- package/account/i18n/index.d.ts +5 -5
- package/account/i18n/index.js +1 -1
- package/account/i18n/index.js.map +1 -1
- package/account/i18n/messages_defaultSet/types.d.ts +3 -0
- package/account/i18n/messages_defaultSet/types.js +26 -0
- package/account/i18n/messages_defaultSet/types.js.map +1 -0
- package/account/i18n/noJsx/GenericI18n_noJsx.d.ts +63 -0
- package/account/i18n/noJsx/GenericI18n_noJsx.js +2 -0
- package/account/i18n/noJsx/GenericI18n_noJsx.js.map +1 -0
- package/account/i18n/noJsx/getI18n.d.ts +41 -0
- package/account/i18n/noJsx/getI18n.js +207 -0
- package/account/i18n/noJsx/getI18n.js.map +1 -0
- package/account/i18n/noJsx/i18nBuilder.d.ts +18 -0
- package/account/i18n/noJsx/i18nBuilder.js +27 -0
- package/account/i18n/noJsx/i18nBuilder.js.map +1 -0
- package/account/i18n/noJsx/index.d.ts +3 -0
- package/account/i18n/noJsx/index.js +2 -0
- package/account/i18n/noJsx/index.js.map +1 -0
- package/account/i18n/withJsx/GenericI18n.d.ts +72 -0
- package/account/i18n/withJsx/GenericI18n.js +5 -0
- package/account/i18n/withJsx/GenericI18n.js.map +1 -0
- package/account/i18n/withJsx/i18nBuilder.d.ts +18 -0
- package/account/i18n/withJsx/i18nBuilder.js +27 -0
- package/account/i18n/withJsx/i18nBuilder.js.map +1 -0
- package/account/i18n/withJsx/index.d.ts +3 -0
- package/account/i18n/withJsx/index.js +2 -0
- package/account/i18n/withJsx/index.js.map +1 -0
- package/account/i18n/withJsx/useI18n.d.ts +27 -0
- package/account/i18n/{useI18n.js → withJsx/useI18n.js} +6 -4
- package/account/i18n/withJsx/useI18n.js.map +1 -0
- package/account/index.d.ts +1 -1
- package/account/index.js +1 -1
- package/account/index.js.map +1 -1
- package/account/pages/Totp.js +3 -2
- package/account/pages/Totp.js.map +1 -1
- package/bin/246.index.js +191 -191
- package/bin/499.index.js +252 -68
- package/bin/main.js +1 -1
- package/lib/kcSanitize/HtmlPolicyBuilder.d.ts +28 -0
- package/lib/kcSanitize/HtmlPolicyBuilder.js +209 -0
- package/lib/kcSanitize/HtmlPolicyBuilder.js.map +1 -0
- package/lib/kcSanitize/KcSanitizer.d.ts +12 -0
- package/lib/kcSanitize/KcSanitizer.js +46 -0
- package/lib/kcSanitize/KcSanitizer.js.map +1 -0
- package/lib/kcSanitize/KcSanitizerPolicy.d.ts +24 -0
- package/lib/kcSanitize/KcSanitizerPolicy.js +149 -0
- package/lib/kcSanitize/KcSanitizerPolicy.js.map +1 -0
- package/lib/kcSanitize/index.d.ts +1 -0
- package/lib/kcSanitize/index.js +5 -0
- package/lib/kcSanitize/index.js.map +1 -0
- package/login/KcContext/kcContextMocks.js +24 -6
- package/login/KcContext/kcContextMocks.js.map +1 -1
- package/login/Template.js +7 -7
- package/login/Template.js.map +1 -1
- package/login/{Template.useStylesAndScripts.d.ts → Template.useInitialize.d.ts} +1 -4
- package/login/{Template.useStylesAndScripts.js → Template.useInitialize.js} +5 -23
- package/login/Template.useInitialize.js.map +1 -0
- package/login/i18n/index.d.ts +5 -5
- package/login/i18n/index.js +1 -1
- package/login/i18n/index.js.map +1 -1
- package/login/i18n/messages_defaultSet/types.d.ts +3 -0
- package/login/i18n/messages_defaultSet/types.js +33 -0
- package/login/i18n/messages_defaultSet/types.js.map +1 -0
- package/login/i18n/noJsx/GenericI18n_noJsx.d.ts +63 -0
- package/login/i18n/noJsx/GenericI18n_noJsx.js +2 -0
- package/login/i18n/noJsx/GenericI18n_noJsx.js.map +1 -0
- package/login/i18n/noJsx/getI18n.d.ts +41 -0
- package/login/i18n/noJsx/getI18n.js +207 -0
- package/login/i18n/noJsx/getI18n.js.map +1 -0
- package/login/i18n/noJsx/i18nBuilder.d.ts +18 -0
- package/login/i18n/noJsx/i18nBuilder.js +27 -0
- package/login/i18n/noJsx/i18nBuilder.js.map +1 -0
- package/login/i18n/noJsx/index.d.ts +3 -0
- package/login/i18n/noJsx/index.js +2 -0
- package/login/i18n/noJsx/index.js.map +1 -0
- package/login/i18n/withJsx/GenericI18n.d.ts +72 -0
- package/login/i18n/withJsx/GenericI18n.js +5 -0
- package/login/i18n/withJsx/GenericI18n.js.map +1 -0
- package/login/i18n/withJsx/i18nBuilder.d.ts +18 -0
- package/login/i18n/withJsx/i18nBuilder.js +27 -0
- package/login/i18n/withJsx/i18nBuilder.js.map +1 -0
- package/login/i18n/withJsx/index.d.ts +3 -0
- package/login/i18n/withJsx/index.js +2 -0
- package/login/i18n/withJsx/index.js.map +1 -0
- package/login/i18n/withJsx/useI18n.d.ts +27 -0
- package/login/i18n/{useI18n.js → withJsx/useI18n.js} +6 -4
- package/login/i18n/withJsx/useI18n.js.map +1 -0
- package/login/index.d.ts +1 -1
- package/login/index.js +1 -1
- package/login/index.js.map +1 -1
- package/login/lib/useUserProfileForm.d.ts +1 -1
- package/login/lib/useUserProfileForm.js +2 -1
- package/login/lib/useUserProfileForm.js.map +1 -1
- package/login/pages/Error.js +2 -1
- package/login/pages/Error.js.map +1 -1
- package/login/pages/Info.js +4 -3
- package/login/pages/Info.js.map +1 -1
- package/login/pages/Login.js +4 -3
- package/login/pages/Login.js.map +1 -1
- package/login/pages/LoginConfigTotp.js +3 -2
- package/login/pages/LoginConfigTotp.js.map +1 -1
- package/login/pages/LoginOtp.js +2 -1
- package/login/pages/LoginOtp.js.map +1 -1
- package/login/pages/LoginPassword.js +2 -1
- package/login/pages/LoginPassword.js.map +1 -1
- package/login/pages/LoginRecoveryAuthnCodeInput.js +2 -1
- package/login/pages/LoginRecoveryAuthnCodeInput.js.map +1 -1
- package/login/pages/LoginResetPassword.js +2 -1
- package/login/pages/LoginResetPassword.js.map +1 -1
- package/login/pages/LoginUpdatePassword.js +3 -2
- package/login/pages/LoginUpdatePassword.js.map +1 -1
- package/login/pages/Register.js +2 -1
- package/login/pages/Register.js.map +1 -1
- package/package.json +110 -31
- package/src/account/KcContext/kcContextMocks.ts +49 -29
- package/src/account/Template.tsx +11 -32
- package/src/account/Template.useInitialize.ts +35 -0
- package/src/account/i18n/index.ts +5 -5
- package/src/account/i18n/messages_defaultSet/types.ts +30 -0
- package/src/account/i18n/noJsx/GenericI18n_noJsx.ts +64 -0
- package/src/account/i18n/noJsx/getI18n.tsx +341 -0
- package/src/account/i18n/noJsx/i18nBuilder.ts +117 -0
- package/src/account/i18n/noJsx/index.ts +3 -0
- package/src/account/i18n/withJsx/GenericI18n.tsx +81 -0
- package/src/account/i18n/withJsx/i18nBuilder.ts +117 -0
- package/src/account/i18n/withJsx/index.ts +3 -0
- package/src/{login/i18n → account/i18n/withJsx}/useI18n.tsx +43 -11
- package/src/account/index.ts +1 -1
- package/src/account/pages/Totp.tsx +3 -2
- package/src/bin/initialize-account-theme/src/multi-page/i18n.ts +10 -3
- package/src/bin/keycloakify/generateFtl/kcContextDeclarationTemplate.ftl +15 -0
- package/src/bin/keycloakify/generateResources/generateMessageProperties.ts +371 -121
- package/src/bin/keycloakify/generateResources/generateResources.ts +8 -6
- package/src/bin/keycloakify/generateResources/generateResourcesForMainTheme.ts +61 -29
- package/src/bin/keycloakify/generateResources/generateResourcesForThemeVariant.ts +15 -9
- package/src/lib/kcSanitize/HtmlPolicyBuilder.ts +252 -0
- package/src/lib/kcSanitize/KcSanitizer.ts +60 -0
- package/src/lib/kcSanitize/KcSanitizerPolicy.ts +294 -0
- package/src/lib/kcSanitize/index.ts +5 -0
- package/src/login/KcContext/kcContextMocks.ts +54 -29
- package/src/login/Template.tsx +11 -17
- package/src/login/{Template.useStylesAndScripts.ts → Template.useInitialize.ts} +5 -29
- package/src/login/i18n/index.ts +5 -5
- package/src/login/i18n/messages_defaultSet/types.ts +37 -0
- package/src/login/i18n/noJsx/GenericI18n_noJsx.ts +64 -0
- package/src/login/i18n/noJsx/getI18n.tsx +341 -0
- package/src/login/i18n/noJsx/i18nBuilder.ts +117 -0
- package/src/login/i18n/noJsx/index.ts +3 -0
- package/src/login/i18n/withJsx/GenericI18n.tsx +81 -0
- package/src/login/i18n/withJsx/i18nBuilder.ts +117 -0
- package/src/login/i18n/withJsx/index.ts +3 -0
- package/src/{account/i18n → login/i18n/withJsx}/useI18n.tsx +43 -11
- package/src/login/index.ts +1 -1
- package/src/login/lib/useUserProfileForm.tsx +3 -2
- package/src/login/pages/Error.tsx +2 -1
- package/src/login/pages/Info.tsx +13 -10
- package/src/login/pages/Login.tsx +4 -3
- package/src/login/pages/LoginConfigTotp.tsx +3 -2
- package/src/login/pages/LoginOtp.tsx +2 -1
- package/src/login/pages/LoginPassword.tsx +2 -1
- package/src/login/pages/LoginRecoveryAuthnCodeInput.tsx +2 -1
- package/src/login/pages/LoginResetPassword.tsx +2 -1
- package/src/login/pages/LoginUpdatePassword.tsx +3 -2
- package/src/login/pages/Register.tsx +2 -1
- package/src/tools/useInsertScriptTags.ts +1 -1
- package/src/tools/vendor/dompurify.ts +3 -0
- package/stories/intro/intro.stories.tsx +0 -1
- package/tools/useInsertScriptTags.d.ts +1 -1
- package/tools/vendor/dompurify.d.ts +2 -0
- package/tools/vendor/dompurify.js +2 -0
- package/account/i18n/GenericI18n.d.ts +0 -6
- package/account/i18n/GenericI18n.js +0 -2
- package/account/i18n/GenericI18n.js.map +0 -1
- package/account/i18n/i18n.d.ts +0 -87
- package/account/i18n/i18n.js +0 -111
- package/account/i18n/i18n.js.map +0 -1
- package/account/i18n/useI18n.d.ts +0 -14
- package/account/i18n/useI18n.js.map +0 -1
- package/login/Template.useStylesAndScripts.js.map +0 -1
- package/login/i18n/GenericI18n.d.ts +0 -6
- package/login/i18n/GenericI18n.js +0 -2
- package/login/i18n/GenericI18n.js.map +0 -1
- package/login/i18n/i18n.d.ts +0 -87
- package/login/i18n/i18n.js +0 -113
- package/login/i18n/i18n.js.map +0 -1
- package/login/i18n/useI18n.d.ts +0 -14
- package/login/i18n/useI18n.js.map +0 -1
- package/src/account/i18n/GenericI18n.tsx +0 -6
- package/src/account/i18n/i18n.tsx +0 -250
- package/src/login/i18n/GenericI18n.tsx +0 -6
- package/src/login/i18n/i18n.tsx +0 -252
@@ -0,0 +1,117 @@
|
|
1
|
+
import type {
|
2
|
+
LanguageTag as LanguageTag_defaultSet,
|
3
|
+
MessageKey as MessageKey_defaultSet
|
4
|
+
} from "../messages_defaultSet/types";
|
5
|
+
import { type ReturnTypeOfCreateUseI18n, createUseI18n } from "../withJsx/useI18n";
|
6
|
+
|
7
|
+
export type I18nBuilder<
|
8
|
+
ThemeName extends string = never,
|
9
|
+
MessageKey_themeDefined extends string = never,
|
10
|
+
LanguageTag_notInDefaultSet extends string = never,
|
11
|
+
ExcludedMethod extends
|
12
|
+
| "withThemeName"
|
13
|
+
| "withExtraLanguages"
|
14
|
+
| "withCustomTranslations" = never
|
15
|
+
> = Omit<
|
16
|
+
{
|
17
|
+
withThemeName: <ThemeName extends string>() => I18nBuilder<
|
18
|
+
ThemeName,
|
19
|
+
MessageKey_themeDefined,
|
20
|
+
LanguageTag_notInDefaultSet,
|
21
|
+
ExcludedMethod | "withThemeName"
|
22
|
+
>;
|
23
|
+
withExtraLanguages: <
|
24
|
+
LanguageTag_notInDefaultSet extends string
|
25
|
+
>(extraLanguageTranslations: {
|
26
|
+
[LanguageTag in LanguageTag_notInDefaultSet]: {
|
27
|
+
label: string;
|
28
|
+
getMessages: () => Promise<{
|
29
|
+
default: Record<MessageKey_defaultSet, string>;
|
30
|
+
}>;
|
31
|
+
};
|
32
|
+
}) => I18nBuilder<
|
33
|
+
ThemeName,
|
34
|
+
MessageKey_themeDefined,
|
35
|
+
LanguageTag_notInDefaultSet,
|
36
|
+
ExcludedMethod | "withExtraLanguages"
|
37
|
+
>;
|
38
|
+
withCustomTranslations: <MessageKey_themeDefined extends string>(
|
39
|
+
messagesByLanguageTag_themeDefined: Partial<{
|
40
|
+
[LanguageTag in
|
41
|
+
| LanguageTag_defaultSet
|
42
|
+
| LanguageTag_notInDefaultSet]: Record<
|
43
|
+
MessageKey_themeDefined,
|
44
|
+
string | Record<ThemeName, string>
|
45
|
+
>;
|
46
|
+
}>
|
47
|
+
) => I18nBuilder<
|
48
|
+
ThemeName,
|
49
|
+
MessageKey_themeDefined,
|
50
|
+
LanguageTag_notInDefaultSet,
|
51
|
+
ExcludedMethod | "withCustomTranslations"
|
52
|
+
>;
|
53
|
+
build: () => ReturnTypeOfCreateUseI18n<
|
54
|
+
MessageKey_themeDefined,
|
55
|
+
LanguageTag_notInDefaultSet
|
56
|
+
>;
|
57
|
+
},
|
58
|
+
ExcludedMethod
|
59
|
+
>;
|
60
|
+
|
61
|
+
function createI18nBuilder<
|
62
|
+
ThemeName extends string = never,
|
63
|
+
MessageKey_themeDefined extends string = never,
|
64
|
+
LanguageTag_notInDefaultSet extends string = never
|
65
|
+
>(params: {
|
66
|
+
extraLanguageTranslations: {
|
67
|
+
[LanguageTag in LanguageTag_notInDefaultSet]: {
|
68
|
+
label: string;
|
69
|
+
getMessages: () => Promise<{
|
70
|
+
default: Record<MessageKey_defaultSet, string>;
|
71
|
+
}>;
|
72
|
+
};
|
73
|
+
};
|
74
|
+
messagesByLanguageTag_themeDefined: Partial<{
|
75
|
+
[LanguageTag in LanguageTag_defaultSet | LanguageTag_notInDefaultSet]: Record<
|
76
|
+
MessageKey_themeDefined,
|
77
|
+
string | Record<ThemeName, string>
|
78
|
+
>;
|
79
|
+
}>;
|
80
|
+
}): I18nBuilder<ThemeName, MessageKey_themeDefined, LanguageTag_notInDefaultSet> {
|
81
|
+
const i18nBuilder: I18nBuilder<
|
82
|
+
ThemeName,
|
83
|
+
MessageKey_themeDefined,
|
84
|
+
LanguageTag_notInDefaultSet
|
85
|
+
> = {
|
86
|
+
withThemeName: () =>
|
87
|
+
createI18nBuilder({
|
88
|
+
extraLanguageTranslations: params.extraLanguageTranslations,
|
89
|
+
messagesByLanguageTag_themeDefined:
|
90
|
+
params.messagesByLanguageTag_themeDefined as any
|
91
|
+
}),
|
92
|
+
withExtraLanguages: extraLanguageTranslations =>
|
93
|
+
createI18nBuilder({
|
94
|
+
extraLanguageTranslations,
|
95
|
+
messagesByLanguageTag_themeDefined:
|
96
|
+
params.messagesByLanguageTag_themeDefined as any
|
97
|
+
}),
|
98
|
+
withCustomTranslations: messagesByLanguageTag_themeDefined =>
|
99
|
+
createI18nBuilder({
|
100
|
+
extraLanguageTranslations: params.extraLanguageTranslations,
|
101
|
+
messagesByLanguageTag_themeDefined
|
102
|
+
}),
|
103
|
+
build: () =>
|
104
|
+
createUseI18n({
|
105
|
+
extraLanguageTranslations: params.extraLanguageTranslations,
|
106
|
+
messagesByLanguageTag_themeDefined:
|
107
|
+
params.messagesByLanguageTag_themeDefined
|
108
|
+
})
|
109
|
+
};
|
110
|
+
|
111
|
+
return i18nBuilder;
|
112
|
+
}
|
113
|
+
|
114
|
+
export const i18nBuilder = createI18nBuilder({
|
115
|
+
extraLanguageTranslations: {},
|
116
|
+
messagesByLanguageTag_themeDefined: {}
|
117
|
+
});
|
@@ -1,17 +1,49 @@
|
|
1
1
|
import { useEffect, useState } from "react";
|
2
|
-
import {
|
3
|
-
import {
|
2
|
+
import { kcSanitize } from "keycloakify/lib/kcSanitize";
|
3
|
+
import { createGetI18n, type KcContextLike } from "../noJsx/getI18n";
|
4
|
+
import type { GenericI18n_noJsx } from "../noJsx/GenericI18n_noJsx";
|
4
5
|
import { Reflect } from "tsafe/Reflect";
|
6
|
+
import type { GenericI18n } from "./GenericI18n";
|
7
|
+
import type { LanguageTag as LanguageTag_defaultSet, MessageKey as MessageKey_defaultSet } from "../messages_defaultSet/types";
|
8
|
+
|
9
|
+
export type ReturnTypeOfCreateUseI18n<MessageKey_themeDefined extends string, LanguageTag_notInDefaultSet extends string> = {
|
10
|
+
useI18n: (params: { kcContext: KcContextLike }) => {
|
11
|
+
i18n: GenericI18n<MessageKey_defaultSet | MessageKey_themeDefined, LanguageTag_defaultSet | LanguageTag_notInDefaultSet>;
|
12
|
+
};
|
13
|
+
ofTypeI18n: GenericI18n<MessageKey_defaultSet | MessageKey_themeDefined, LanguageTag_defaultSet | LanguageTag_notInDefaultSet>;
|
14
|
+
};
|
15
|
+
|
16
|
+
export { KcContextLike };
|
17
|
+
|
18
|
+
export function createUseI18n<
|
19
|
+
ThemeName extends string = string,
|
20
|
+
MessageKey_themeDefined extends string = never,
|
21
|
+
LanguageTag_notInDefaultSet extends string = never
|
22
|
+
>(params: {
|
23
|
+
extraLanguageTranslations: {
|
24
|
+
[languageTag in LanguageTag_notInDefaultSet]: {
|
25
|
+
label: string;
|
26
|
+
getMessages: () => Promise<{ default: Record<MessageKey_defaultSet, string> }>;
|
27
|
+
};
|
28
|
+
};
|
29
|
+
messagesByLanguageTag_themeDefined: Partial<{
|
30
|
+
[languageTag in LanguageTag_defaultSet | LanguageTag_notInDefaultSet]: {
|
31
|
+
[key in MessageKey_themeDefined]: string | Record<ThemeName, string>;
|
32
|
+
};
|
33
|
+
}>;
|
34
|
+
}): ReturnTypeOfCreateUseI18n<MessageKey_themeDefined, LanguageTag_notInDefaultSet> {
|
35
|
+
const { extraLanguageTranslations, messagesByLanguageTag_themeDefined } = params;
|
36
|
+
|
37
|
+
type LanguageTag = LanguageTag_defaultSet | LanguageTag_notInDefaultSet;
|
5
38
|
|
6
|
-
export function createUseI18n<MessageKey_themeDefined extends string = never>(messagesByLanguageTag: {
|
7
|
-
[languageTag: string]: { [key in MessageKey_themeDefined]: string };
|
8
|
-
}) {
|
9
39
|
type MessageKey = MessageKey_defaultSet | MessageKey_themeDefined;
|
10
40
|
|
11
|
-
type I18n = GenericI18n<MessageKey>;
|
41
|
+
type I18n = GenericI18n<MessageKey, LanguageTag>;
|
42
|
+
|
43
|
+
type Result = { i18n: I18n };
|
12
44
|
|
13
45
|
const { withJsx } = (() => {
|
14
|
-
const cache = new WeakMap<GenericI18n_noJsx<MessageKey>, GenericI18n<MessageKey>>();
|
46
|
+
const cache = new WeakMap<GenericI18n_noJsx<MessageKey, LanguageTag>, GenericI18n<MessageKey, LanguageTag>>();
|
15
47
|
|
16
48
|
function renderHtmlString(params: { htmlString: string; msgKey: string }): JSX.Element {
|
17
49
|
const { htmlString, msgKey } = params;
|
@@ -19,13 +51,13 @@ export function createUseI18n<MessageKey_themeDefined extends string = never>(me
|
|
19
51
|
<div
|
20
52
|
data-kc-msg={msgKey}
|
21
53
|
dangerouslySetInnerHTML={{
|
22
|
-
__html: htmlString
|
54
|
+
__html: kcSanitize(htmlString)
|
23
55
|
}}
|
24
56
|
/>
|
25
57
|
);
|
26
58
|
}
|
27
59
|
|
28
|
-
function withJsx(i18n_noJsx: GenericI18n_noJsx<MessageKey>): I18n {
|
60
|
+
function withJsx(i18n_noJsx: GenericI18n_noJsx<MessageKey, LanguageTag>): I18n {
|
29
61
|
use_cache: {
|
30
62
|
const i18n = cache.get(i18n_noJsx);
|
31
63
|
|
@@ -63,9 +95,9 @@ export function createUseI18n<MessageKey_themeDefined extends string = never>(me
|
|
63
95
|
(styleElement.textContent = `[data-kc-msg] { display: inline-block; }`), document.head.prepend(styleElement);
|
64
96
|
}
|
65
97
|
|
66
|
-
const { getI18n } = createGetI18n(
|
98
|
+
const { getI18n } = createGetI18n({ extraLanguageTranslations, messagesByLanguageTag_themeDefined });
|
67
99
|
|
68
|
-
function useI18n(params: { kcContext: KcContextLike }):
|
100
|
+
function useI18n(params: { kcContext: KcContextLike }): Result {
|
69
101
|
const { kcContext } = params;
|
70
102
|
|
71
103
|
const { i18n, prI18n_currentLanguage } = getI18n({ kcContext });
|
package/src/account/index.ts
CHANGED
@@ -1,3 +1,3 @@
|
|
1
1
|
export type { ExtendKcContext } from "keycloakify/account/KcContext";
|
2
2
|
export type { ClassKey } from "keycloakify/account/TemplateProps";
|
3
|
-
export {
|
3
|
+
export { i18nBuilder, type MessageKey_defaultSet } from "keycloakify/account/i18n";
|
@@ -1,5 +1,6 @@
|
|
1
1
|
import { clsx } from "keycloakify/tools/clsx";
|
2
2
|
import { getKcClsx } from "keycloakify/account/lib/kcClsx";
|
3
|
+
import { kcSanitize } from "keycloakify/lib/kcSanitize";
|
3
4
|
import type { PageProps } from "keycloakify/account/pages/PageProps";
|
4
5
|
import type { KcContext } from "../KcContext";
|
5
6
|
import type { I18n } from "../i18n";
|
@@ -159,7 +160,7 @@ export default function Totp(props: PageProps<Extract<KcContext, { pageId: "totp
|
|
159
160
|
className={kcClsx("kcInputErrorMessageClass")}
|
160
161
|
aria-live="polite"
|
161
162
|
dangerouslySetInnerHTML={{
|
162
|
-
__html: messagesPerField.get("totp")
|
163
|
+
__html: kcSanitize(messagesPerField.get("totp"))
|
163
164
|
}}
|
164
165
|
/>
|
165
166
|
)}
|
@@ -190,7 +191,7 @@ export default function Totp(props: PageProps<Extract<KcContext, { pageId: "totp
|
|
190
191
|
className={kcClsx("kcInputErrorMessageClass")}
|
191
192
|
aria-live="polite"
|
192
193
|
dangerouslySetInnerHTML={{
|
193
|
-
__html: messagesPerField.get("userLabel")
|
194
|
+
__html: kcSanitize(messagesPerField.get("userLabel"))
|
194
195
|
}}
|
195
196
|
/>
|
196
197
|
)}
|
@@ -1,5 +1,12 @@
|
|
1
|
-
import {
|
1
|
+
import { i18nBuilder } from "keycloakify/account";
|
2
|
+
import type { ThemeName } from "../kc.gen";
|
2
3
|
|
3
|
-
|
4
|
+
const { useI18n, ofTypeI18n } = i18nBuilder
|
5
|
+
.withThemeName<ThemeName>()
|
6
|
+
.withExtraLanguages({})
|
7
|
+
.withCustomTranslations({})
|
8
|
+
.build();
|
4
9
|
|
5
|
-
|
10
|
+
type I18n = typeof ofTypeI18n;
|
11
|
+
|
12
|
+
export { useI18n, type I18n };
|
@@ -85,6 +85,21 @@ attributes_to_attributesByName: {
|
|
85
85
|
});
|
86
86
|
}
|
87
87
|
window.kcContext = kcContext;
|
88
|
+
|
89
|
+
<#if xKeycloakify.themeType == "login" >
|
90
|
+
{
|
91
|
+
const script = document.createElement("script");
|
92
|
+
script.type = "importmap";
|
93
|
+
script.textContent = JSON.stringify({
|
94
|
+
imports: {
|
95
|
+
"rfc4648": kcContext.url.resourcesCommonPath + "/node_modules/rfc4648/lib/rfc4648.js"
|
96
|
+
}
|
97
|
+
}, null, 2);
|
98
|
+
|
99
|
+
document.head.appendChild(script);
|
100
|
+
}
|
101
|
+
</#if>
|
102
|
+
|
88
103
|
function decodeHtmlEntities(htmlStr){
|
89
104
|
var element = decodeHtmlEntities.element;
|
90
105
|
if (!element) {
|