Compare commits

..

1 Commits

Author SHA1 Message Date
7dec6c7ebe Enabling shorter import paths [automatic] 2021-03-02 11:20:31 +00:00
69 changed files with 585 additions and 1347 deletions

View File

@ -1,9 +1,3 @@
### **0.0.26** (2021-03-02)
- Login page implemented
- Implement login
- remove unesseary log
### **0.0.25** (2021-03-02) ### **0.0.25** (2021-03-02)
- Fix build and reduce size - Fix build and reduce size

View File

@ -1 +1 @@
export declare const ftlValuesGlobalName = "kcContext"; export declare const ftlValuesGlobalName = "keycloakPagesContext";

View File

@ -1,5 +1,5 @@
"use strict"; "use strict";
Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "__esModule", { value: true });
exports.ftlValuesGlobalName = void 0; exports.ftlValuesGlobalName = void 0;
exports.ftlValuesGlobalName = "kcContext"; exports.ftlValuesGlobalName = "keycloakPagesContext";
//# sourceMappingURL=ftlValuesGlobalName.js.map //# sourceMappingURL=ftlValuesGlobalName.js.map

View File

@ -1 +1 @@
{"version":3,"file":"ftlValuesGlobalName.js","sourceRoot":"","sources":["../../src/bin/build-keycloak-theme/ftlValuesGlobalName.ts"],"names":[],"mappings":";;;AACa,QAAA,mBAAmB,GAAG,WAAW,CAAC"} {"version":3,"file":"ftlValuesGlobalName.js","sourceRoot":"","sources":["../../src/bin/build-keycloak-theme/ftlValuesGlobalName.ts"],"names":[],"mappings":";;;AACa,QAAA,mBAAmB,GAAG,sBAAsB,CAAC"}

View File

@ -4,19 +4,12 @@
"loginAction": "${url.loginAction}", "loginAction": "${url.loginAction}",
"resourcesPath": "${url.resourcesPath}", "resourcesPath": "${url.resourcesPath}",
"resourcesCommonPath": "${url.resourcesCommonPath}", "resourcesCommonPath": "${url.resourcesCommonPath}",
"loginRestartFlowUrl": "${url.loginRestartFlowUrl}", "loginRestartFlowUrl": "${url.loginRestartFlowUrl}"
"loginResetCredentialsUrl": "${url.loginResetCredentialsUrl}",
"registrationUrl": "${url.registrationUrl}"
}, },
"realm": { "realm": {
"displayName": "${realm.displayName!''}" || undefined, "displayName": "${realm.displayName!''}" || undefined,
"displayNameHtml": "${realm.displayNameHtml!''}" || undefined, "displayNameHtml": "${realm.displayNameHtml!''}" || undefined,
"internationalizationEnabled": ${realm.internationalizationEnabled?c}, "internationalizationEnabled": ${realm.internationalizationEnabled?c}
"password": ${realm.password?c},
"loginWithEmailAllowed": ${realm.loginWithEmailAllowed?c},
"registrationEmailAsUsername": ${realm.registrationEmailAsUsername?c},
"rememberMe": ${realm.rememberMe?c},
"resetPasswordAllowed": ${realm.resetPasswordAllowed?c}
}, },
"locale": (function (){ "locale": (function (){
@ -61,7 +54,6 @@
"showUsername": ${auth.showUsername()?c}, "showUsername": ${auth.showUsername()?c},
"showResetCredentials": ${auth.showResetCredentials()?c}, "showResetCredentials": ${auth.showResetCredentials()?c},
"showTryAnotherWayLink": ${auth.showTryAnotherWayLink()?c} "showTryAnotherWayLink": ${auth.showTryAnotherWayLink()?c}
"selectedCredential": "${auth.selectedCredential!''}" || undefined
}; };
<#if auth.showUsername() && !auth.showResetCredentials()> <#if auth.showUsername() && !auth.showResetCredentials()>
@ -87,7 +79,7 @@
<#if scripts??> <#if scripts??>
<#list scripts as script> <#list scripts as script>
out.push("${script}"); out.push("${script}");
</#list> </#list>
</#if> </#if>
@ -115,59 +107,7 @@
</#if> </#if>
return false; return false;
})(), })()
"social": {
"displayInfo": ${social.displayInfo?c},
"providers": (()=>{
<#if social.providers??>
var out= [];
<#list social.providers as p>
out.push({
"loginUrl": "${p.loginUrl}",
"alias": "${p.alias}",
"providerId": "${p.providerId}",
"displayName": "${p.displayName}"
});
</#list>
return out;
</#if>
return undefined;
})()
},
"usernameEditDisabled": (function () {
<#if usernameEditDisabled??>
return true;
</#if>
return false;
})(),
"login": {
"username": "${login.username!''}" || undefined,
"rememberMe": (function (){
<#if login.rememberMe??>
return true;
</#if>
return false;
})()
},
"registrationDisabled": (function (){
<#if registrationDisabled??>
return true;
</#if>
return false;
})
} }
</script> </script>

View File

@ -31,6 +31,7 @@ var fs_1 = __importDefault(require("fs"));
function downloadAndUnzip(params) { function downloadAndUnzip(params) {
var url = params.url, destDirPath = params.destDirPath; var url = params.url, destDirPath = params.destDirPath;
fs_1.default.mkdirSync(destDirPath, { "recursive": true }); fs_1.default.mkdirSync(destDirPath, { "recursive": true });
console.log({ url: url, destDirPath: destDirPath });
__spreadArray([ __spreadArray([
"wget " + url "wget " + url
], __read(["unzip", "rm"].map(function (prg) { return prg + " " + path_1.basename(url); }))).forEach(function (cmd) { return child_process_1.default.execSync(cmd, { "cwd": destDirPath }); }); ], __read(["unzip", "rm"].map(function (prg) { return prg + " " + path_1.basename(url); }))).forEach(function (cmd) { return child_process_1.default.execSync(cmd, { "cwd": destDirPath }); });

View File

@ -1 +1 @@
{"version":3,"file":"downloadAndUnzip.js","sourceRoot":"","sources":["../../src/bin/tools/downloadAndUnzip.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,6BAAgD;AAChD,gEAA0C;AAC1C,0CAAoB;AAEpB,SAAgB,gBAAgB,CAC5B,MAGC;IAGO,IAAA,GAAG,GAAkB,MAAM,IAAxB,EAAE,WAAW,GAAK,MAAM,YAAX,CAAY;IAEpC,YAAE,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;IAEjD;QACI,UAAQ,GAAK;cACV,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,UAAA,GAAG,IAAI,OAAG,GAAG,SAAI,eAAY,CAAC,GAAG,CAAG,EAA7B,CAA6B,CAAC,GAC9D,OAAO,CAAC,UAAA,GAAG,IAAI,OAAA,uBAAa,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,EAAnD,CAAmD,CAAC,CAAC;AAE1E,CAAC;AAhBD,4CAgBC"} {"version":3,"file":"downloadAndUnzip.js","sourceRoot":"","sources":["../../src/bin/tools/downloadAndUnzip.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,6BAAgD;AAChD,gEAA0C;AAC1C,0CAAoB;AAEpB,SAAgB,gBAAgB,CAC5B,MAGC;IAGO,IAAA,GAAG,GAAkB,MAAM,IAAxB,EAAE,WAAW,GAAK,MAAM,YAAX,CAAY;IAEpC,YAAE,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;IAEjD,OAAO,CAAC,GAAG,CAAC,EAAE,GAAG,KAAA,EAAE,WAAW,aAAA,EAAE,CAAC,CAAC;IAElC;QACI,UAAQ,GAAK;cACV,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,UAAA,GAAG,IAAI,OAAG,GAAG,SAAI,eAAY,CAAC,GAAG,CAAG,EAA7B,CAA6B,CAAC,GAC9D,OAAO,CAAC,UAAA,GAAG,IAAI,OAAA,uBAAa,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,EAAnD,CAAmD,CAAC,CAAC;AAE1E,CAAC;AAlBD,4CAkBC"}

1
lib/LoginPage.d.ts vendored Normal file
View File

@ -0,0 +1 @@
export {};

31
lib/LoginPage.js Normal file
View File

@ -0,0 +1,31 @@
"use strict";
/*
import { useState, memo } from "react";
import { KcProperties, Template } from "./Template";
import { assert } from "evt/tools/typeSafety/assert";
import { keycloakPagesContext } from "./keycloakFtlValues";
export type Props = {
properties: KcProperties;
};
export const LoginPage = memo((props: Props)=>{
const [{ }] = useState(() => {
assert(keycloakPagesContext !== undefined);
return keycloakPagesContext;
});
return (
<Template/>
);
});
*/
Object.defineProperty(exports, "__esModule", { value: true });
//# sourceMappingURL=LoginPage.js.map

1
lib/LoginPage.js.map Normal file
View File

@ -0,0 +1 @@
{"version":3,"file":"LoginPage.js","sourceRoot":"","sources":["../src/lib/LoginPage.tsx"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2BE"}

23
lib/Template.d.ts vendored Normal file
View File

@ -0,0 +1,23 @@
import type { ReactNode } from "react";
declare type KcClasses<T extends string> = {
[key in T]?: string[] | string;
};
export declare type KcProperties = {
stylesCommon?: string[];
styles?: string[];
scripts?: string[];
} & KcClasses<"kcLoginClass" | "kcHeaderClass" | "kcHeaderWrapperClass" | "kcFormCardClass" | "kcFormCardAccountClass" | "kcFormHeaderClass" | "kcLocaleWrapperClass" | "kcContentWrapperClass" | "kcLabelWrapperClass" | "kcContentWrapperClass" | "kcLabelWrapperClass" | "kcFormGroupClass" | "kcResetFlowIcon" | "kcResetFlowIcon" | "kcFeedbackSuccessIcon" | "kcFeedbackWarningIcon" | "kcFeedbackErrorIcon" | "kcFeedbackInfoIcon" | "kcContentWrapperClass" | "kcFormSocialAccountContentClass" | "kcFormSocialAccountClass" | "kcSignUpClass" | "kcInfoAreaWrapperClass">;
export declare type Props = {
displayInfo?: boolean;
displayMessage: boolean;
displayRequiredFields: boolean;
displayWide: boolean;
showAnotherWayIfPresent: boolean;
properties?: KcProperties;
headerNode: ReactNode;
showUsernameNode: ReactNode;
formNode: ReactNode;
displayInfoNode: ReactNode;
};
export declare function Template(props: Props): JSX.Element;
export {};

View File

@ -30,81 +30,82 @@ Object.defineProperty(exports, "__esModule", { value: true });
exports.Template = void 0; exports.Template = void 0;
var jsx_runtime_1 = require("react/jsx-runtime"); var jsx_runtime_1 = require("react/jsx-runtime");
var react_1 = require("react"); var react_1 = require("react");
var useKcTranslation_1 = require("../i18n/useKcTranslation"); var useKeycloakTranslation_1 = require("./i18n/useKeycloakTranslation");
var kcContext_1 = require("../kcContext"); var keycloakFtlValues_1 = require("./keycloakFtlValues");
var assert_1 = require("evt/tools/typeSafety/assert"); var assert_1 = require("evt/tools/typeSafety/assert");
var tss_react_1 = require("tss-react"); var tss_react_1 = require("tss-react");
var useKcLanguageTag_1 = require("../i18n/useKcLanguageTag"); var useKeycloakLanguage_1 = require("./i18n/useKeycloakLanguage");
var KcLanguageTag_1 = require("../i18n/KcLanguageTag"); var getLanguageLabel_1 = require("./i18n/getLanguageLabel");
var powerhooks_1 = require("powerhooks"); var powerhooks_1 = require("powerhooks");
var appendLinkInHead_1 = require("../tools/appendLinkInHead"); var appendLinkInHead_1 = require("./tools/appendLinkInHead");
var appendScriptInHead_1 = require("../tools/appendScriptInHead"); var appendScriptInHead_1 = require("./tools/appendScriptInHead");
var path_1 = require("path"); var path_1 = require("path");
var powerhooks_2 = require("powerhooks"); var powerhooks_2 = require("powerhooks");
var KcProperties_1 = require("./KcProperties"); function Template(props) {
exports.Template = react_1.memo(function (props) { var _a = props.displayInfo, displayInfo = _a === void 0 ? false : _a, _b = props.displayMessage, displayMessage = _b === void 0 ? true : _b, _c = props.displayRequiredFields, displayRequiredFields = _c === void 0 ? false : _c, _d = props.displayWide, displayWide = _d === void 0 ? false : _d, _e = props.showAnotherWayIfPresent, showAnotherWayIfPresent = _e === void 0 ? true : _e, _f = props.properties, properties = _f === void 0 ? {} : _f, headerNode = props.headerNode, showUsernameNode = props.showUsernameNode, formNode = props.formNode, displayInfoNode = props.displayInfoNode;
var _a = props.displayInfo, displayInfo = _a === void 0 ? false : _a, _b = props.displayMessage, displayMessage = _b === void 0 ? true : _b, _c = props.displayRequiredFields, displayRequiredFields = _c === void 0 ? false : _c, _d = props.displayWide, displayWide = _d === void 0 ? false : _d, _e = props.showAnotherWayIfPresent, showAnotherWayIfPresent = _e === void 0 ? true : _e, _f = props.kcProperties, kcProperties = _f === void 0 ? {} : _f, headerNode = props.headerNode, showUsernameNode = props.showUsernameNode, formNode = props.formNode, displayInfoNode = props.displayInfoNode; var t = useKeycloakTranslation_1.useKeycloakThemeTranslation().t;
var t = useKcTranslation_1.useKcTranslation().t; var _g = useKeycloakLanguage_1.useKeycloakLanguage(), keycloakLanguage = _g.keycloakLanguage, setKeycloakLanguage = _g.setKeycloakLanguage;
Object.assign(kcProperties, KcProperties_1.defaultKcTemplateProperties);
var _g = useKcLanguageTag_1.useKcLanguageTag(), kcLanguageTag = _g.kcLanguageTag, setKcLanguageTag = _g.setKcLanguageTag;
var onChangeLanguageClickFactory = powerhooks_1.useCallbackFactory(function (_a) { var onChangeLanguageClickFactory = powerhooks_1.useCallbackFactory(function (_a) {
var _b = __read(_a, 1), languageTag = _b[0]; var _b = __read(_a, 1), languageTag = _b[0];
return setKcLanguageTag(languageTag); return setKeycloakLanguage(languageTag);
}); });
var onTryAnotherWayClick = powerhooks_2.useConstCallback(function () { var onTryAnotherWayClick = powerhooks_2.useConstCallback(function () {
document.forms["kc-select-try-another-way-form"].submit(); document.forms["kc-select-try-another-way-form"].submit();
return false; return false;
}); });
var _h = __read(react_1.useState(function () { return (assert_1.assert(kcContext_1.kcContext !== undefined, "App is not currently being served by KeyCloak"), var _h = __read(react_1.useState(function () {
kcContext_1.kcContext); }), 1), _j = _h[0], realm = _j.realm, locale = _j.locale, auth = _j.auth, url = _j.url, message = _j.message, isAppInitiatedAction = _j.isAppInitiatedAction; assert_1.assert(keycloakFtlValues_1.keycloakPagesContext !== undefined);
return keycloakFtlValues_1.keycloakPagesContext;
}), 1), _j = _h[0], realm = _j.realm, locale = _j.locale, auth = _j.auth, url = _j.url, message = _j.message, isAppInitiatedAction = _j.isAppInitiatedAction;
react_1.useEffect(function () { react_1.useEffect(function () {
var _a, _b, _c; var _a, _b, _c;
(_a = kcProperties.stylesCommon) === null || _a === void 0 ? void 0 : _a.forEach(function (relativePath) { (_a = properties.stylesCommon) === null || _a === void 0 ? void 0 : _a.forEach(function (relativePath) {
return appendLinkInHead_1.appendLinkInHead({ "href": path_1.join(url.resourcesCommonPath, relativePath) }); return appendLinkInHead_1.appendLinkInHead({ "href": path_1.join(url.resourcesCommonPath, relativePath) });
}); });
(_b = kcProperties.styles) === null || _b === void 0 ? void 0 : _b.forEach(function (relativePath) { (_b = properties.styles) === null || _b === void 0 ? void 0 : _b.forEach(function (relativePath) {
return appendLinkInHead_1.appendLinkInHead({ "href": path_1.join(url.resourcesPath, relativePath) }); return appendLinkInHead_1.appendLinkInHead({ "href": path_1.join(url.resourcesPath, relativePath) });
}); });
(_c = kcProperties.scripts) === null || _c === void 0 ? void 0 : _c.forEach(function (relativePath) { (_c = properties.scripts) === null || _c === void 0 ? void 0 : _c.forEach(function (relativePath) {
return appendScriptInHead_1.appendScriptInHead({ "src": path_1.join(url.resourcesPath, relativePath) }); return appendScriptInHead_1.appendScriptInHead({ "src": path_1.join(url.resourcesPath, relativePath) });
}); });
}, []); }, []);
return (jsx_runtime_1.jsxs("div", __assign({ className: tss_react_1.cx(kcProperties.kcLoginClass) }, { children: [jsx_runtime_1.jsx("div", __assign({ id: "kc-header", className: tss_react_1.cx(kcProperties.kcHeaderClass) }, { children: jsx_runtime_1.jsx("div", __assign({ id: "kc-header-wrapper", className: tss_react_1.cx(kcProperties.kcHeaderWrapperClass) }, { children: t("loginTitleHtml", realm.displayNameHtml) }), void 0) }), void 0), return (jsx_runtime_1.jsxs("div", __assign({ className: tss_react_1.cx(properties.kcLoginClass) }, { children: [jsx_runtime_1.jsx("div", __assign({ id: "kc-header", className: tss_react_1.cx(properties.kcHeaderClass) }, { children: jsx_runtime_1.jsx("div", __assign({ id: "kc-header-wrapper", className: tss_react_1.cx(properties.kcHeaderWrapperClass) }, { children: t("loginTitleHtml", realm.displayNameHtml) }), void 0) }), void 0),
jsx_runtime_1.jsxs("div", __assign({ className: tss_react_1.cx("kcFormCardClass", displayWide && kcProperties.kcFormCardAccountClass) }, { children: [jsx_runtime_1.jsxs("header", __assign({ className: tss_react_1.cx(kcProperties.kcFormHeaderClass) }, { children: [(realm.internationalizationEnabled && jsx_runtime_1.jsxs("div", __assign({ className: tss_react_1.cx("kcFormCardClass", displayWide && properties.kcFormCardAccountClass) }, { children: [jsx_runtime_1.jsxs("header", __assign({ className: tss_react_1.cx(properties.kcFormHeaderClass) }, { children: [(realm.internationalizationEnabled &&
(assert_1.assert(locale !== undefined), true) && (assert_1.assert(locale !== undefined), true) &&
locale.supported.length > 1) && locale.supported.length > 1) &&
jsx_runtime_1.jsx("div", __assign({ id: "kc-locale" }, { children: jsx_runtime_1.jsx("div", __assign({ id: "kc-locale-wrapper", className: tss_react_1.cx(kcProperties.kcLocaleWrapperClass) }, { children: jsx_runtime_1.jsxs("div", __assign({ className: "kc-dropdown", id: "kc-locale-dropdown" }, { children: [jsx_runtime_1.jsx("a", __assign({ href: "#", id: "kc-current-locale-link" }, { children: KcLanguageTag_1.getKcLanguageTagLabel(kcLanguageTag) }), void 0), jsx_runtime_1.jsx("div", __assign({ id: "kc-locale" }, { children: jsx_runtime_1.jsx("div", __assign({ id: "kc-locale-wrapper", className: tss_react_1.cx(properties.kcLocaleWrapperClass) }, { children: jsx_runtime_1.jsxs("div", __assign({ className: "kc-dropdown", id: "kc-locale-dropdown" }, { children: [jsx_runtime_1.jsx("a", __assign({ href: "#", id: "kc-current-locale-link" }, { children: getLanguageLabel_1.getLanguageLabel(keycloakLanguage) }), void 0),
jsx_runtime_1.jsx("ul", { children: locale.supported.map(function (_a) { jsx_runtime_1.jsx("ul", { children: locale.supported.map(function (_a) {
var languageTag = _a.languageTag; var languageTag = _a.languageTag;
return jsx_runtime_1.jsx("li", __assign({ className: "kc-dropdown-item" }, { children: jsx_runtime_1.jsx("a", __assign({ href: "#", onClick: onChangeLanguageClickFactory(languageTag) }, { children: KcLanguageTag_1.getKcLanguageTagLabel(languageTag) }), void 0) }), void 0); return jsx_runtime_1.jsx("li", __assign({ className: "kc-dropdown-item" }, { children: jsx_runtime_1.jsx("a", __assign({ href: "#", onClick: onChangeLanguageClickFactory(languageTag) }, { children: getLanguageLabel_1.getLanguageLabel(languageTag) }), void 0) }), void 0);
}) }, void 0)] }), void 0) }), void 0) }), void 0), }) }, void 0)] }), void 0) }), void 0) }), void 0),
(auth !== undefined && (auth !== undefined &&
auth.showUsername && auth.showUsername &&
!auth.showResetCredentials) ? !auth.showResetCredentials) ?
(displayRequiredFields ? (displayRequiredFields ?
(jsx_runtime_1.jsxs("div", __assign({ className: tss_react_1.cx(kcProperties.kcContentWrapperClass) }, { children: [jsx_runtime_1.jsx("div", __assign({ className: tss_react_1.cx(kcProperties.kcLabelWrapperClass, "subtitle") }, { children: jsx_runtime_1.jsxs("span", __assign({ className: "subtitle" }, { children: [jsx_runtime_1.jsx("span", __assign({ className: "required" }, { children: "*" }), void 0), t("requiredFields")] }), void 0) }), void 0), (jsx_runtime_1.jsxs("div", __assign({ className: tss_react_1.cx(properties.kcContentWrapperClass) }, { children: [jsx_runtime_1.jsx("div", __assign({ className: tss_react_1.cx(properties.kcLabelWrapperClass, "subtitle") }, { children: jsx_runtime_1.jsxs("span", __assign({ className: "subtitle" }, { children: [jsx_runtime_1.jsx("span", __assign({ className: "required" }, { children: "*" }), void 0), t("requiredFields")] }), void 0) }), void 0),
jsx_runtime_1.jsx("div", __assign({ className: "col-md-10" }, { children: jsx_runtime_1.jsx("h1", __assign({ id: "kc-page-title" }, { children: headerNode }), void 0) }), void 0)] }), void 0)) jsx_runtime_1.jsx("div", __assign({ className: "col-md-10" }, { children: jsx_runtime_1.jsx("h1", __assign({ id: "kc-page-title" }, { children: headerNode }), void 0) }), void 0)] }), void 0))
: :
(jsx_runtime_1.jsx("h1", __assign({ id: "kc-page-title" }, { children: headerNode }), void 0))) : (displayRequiredFields ? (jsx_runtime_1.jsxs("div", __assign({ className: tss_react_1.cx(kcProperties.kcContentWrapperClass) }, { children: [jsx_runtime_1.jsx("div", __assign({ className: tss_react_1.cx(kcProperties.kcLabelWrapperClass, "subtitle") }, { children: jsx_runtime_1.jsxs("span", __assign({ className: "subtitle" }, { children: [jsx_runtime_1.jsx("span", __assign({ className: "required" }, { children: "*" }), void 0), " ", t("requiredFields")] }), void 0) }), void 0), (jsx_runtime_1.jsx("h1", __assign({ id: "kc-page-title" }, { children: headerNode }), void 0))) : (displayRequiredFields ? (jsx_runtime_1.jsxs("div", __assign({ className: tss_react_1.cx(properties.kcContentWrapperClass) }, { children: [jsx_runtime_1.jsx("div", __assign({ className: tss_react_1.cx(properties.kcLabelWrapperClass, "subtitle") }, { children: jsx_runtime_1.jsxs("span", __assign({ className: "subtitle" }, { children: [jsx_runtime_1.jsx("span", __assign({ className: "required" }, { children: "*" }), void 0), " ", t("requiredFields")] }), void 0) }), void 0),
jsx_runtime_1.jsxs("div", __assign({ className: "col-md-10" }, { children: [showUsernameNode, jsx_runtime_1.jsx("div", __assign({ className: tss_react_1.cx(kcProperties.kcFormGroupClass) }, { children: jsx_runtime_1.jsxs("div", __assign({ id: "kc-username" }, { children: [jsx_runtime_1.jsx("label", __assign({ id: "kc-attempted-username" }, { children: auth === null || auth === void 0 ? void 0 : auth.attemptedUsername }), void 0), jsx_runtime_1.jsxs("div", __assign({ className: "col-md-10" }, { children: [showUsernameNode, jsx_runtime_1.jsx("div", __assign({ className: tss_react_1.cx(properties.kcFormGroupClass) }, { children: jsx_runtime_1.jsxs("div", __assign({ id: "kc-username" }, { children: [jsx_runtime_1.jsx("label", __assign({ id: "kc-attempted-username" }, { children: auth === null || auth === void 0 ? void 0 : auth.attemptedUsername }), void 0),
jsx_runtime_1.jsx("a", __assign({ id: "reset-login", href: url.loginRestartFlowUrl }, { children: jsx_runtime_1.jsxs("div", __assign({ className: "kc-login-tooltip" }, { children: [jsx_runtime_1.jsx("i", { className: tss_react_1.cx(kcProperties.kcResetFlowIcon) }, void 0), jsx_runtime_1.jsx("a", __assign({ id: "reset-login", href: url.loginRestartFlowUrl }, { children: jsx_runtime_1.jsxs("div", __assign({ className: "kc-login-tooltip" }, { children: [jsx_runtime_1.jsx("i", { className: tss_react_1.cx(properties.kcResetFlowIcon) }, void 0),
jsx_runtime_1.jsx("span", __assign({ className: "kc-tooltip-text" }, { children: t("restartLoginTooltip") }), void 0)] }), void 0) }), void 0)] }), void 0) }), void 0)] }), void 0)] }), void 0)) : (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [showUsernameNode, jsx_runtime_1.jsx("div", __assign({ className: tss_react_1.cx(kcProperties.kcFormGroupClass) }, { children: jsx_runtime_1.jsxs("div", __assign({ id: "kc-username" }, { children: [jsx_runtime_1.jsx("label", __assign({ id: "kc-attempted-username" }, { children: auth === null || auth === void 0 ? void 0 : auth.attemptedUsername }), void 0), jsx_runtime_1.jsx("span", __assign({ className: "kc-tooltip-text" }, { children: t("restartLoginTooltip") }), void 0)] }), void 0) }), void 0)] }), void 0) }), void 0)] }), void 0)] }), void 0)) : (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [showUsernameNode, jsx_runtime_1.jsx("div", __assign({ className: tss_react_1.cx(properties.kcFormGroupClass) }, { children: jsx_runtime_1.jsxs("div", __assign({ id: "kc-username" }, { children: [jsx_runtime_1.jsx("label", __assign({ id: "kc-attempted-username" }, { children: auth === null || auth === void 0 ? void 0 : auth.attemptedUsername }), void 0),
jsx_runtime_1.jsx("a", __assign({ id: "reset-login", href: url.loginRestartFlowUrl }, { children: jsx_runtime_1.jsxs("div", __assign({ className: "kc-login-tooltip" }, { children: [jsx_runtime_1.jsx("i", { className: tss_react_1.cx(kcProperties.kcResetFlowIcon) }, void 0), jsx_runtime_1.jsx("a", __assign({ id: "reset-login", href: url.loginRestartFlowUrl }, { children: jsx_runtime_1.jsxs("div", __assign({ className: "kc-login-tooltip" }, { children: [jsx_runtime_1.jsx("i", { className: tss_react_1.cx(properties.kcResetFlowIcon) }, void 0),
jsx_runtime_1.jsx("span", __assign({ className: "kc-tooltip-text" }, { children: t("restartLoginTooltip") }), void 0)] }), void 0) }), void 0)] }), void 0) }), void 0)] }, void 0)))] }), void 0), jsx_runtime_1.jsx("span", __assign({ className: "kc-tooltip-text" }, { children: t("restartLoginTooltip") }), void 0)] }), void 0) }), void 0)] }), void 0) }), void 0)] }, void 0)))] }), void 0),
jsx_runtime_1.jsx("div", __assign({ id: "kc-content" }, { children: jsx_runtime_1.jsxs("div", __assign({ id: "kc-content-wrapper" }, { children: [(displayMessage && jsx_runtime_1.jsx("div", __assign({ id: "kc-content" }, { children: jsx_runtime_1.jsxs("div", __assign({ id: "kc-content-wrapper" }, { children: [(displayMessage &&
message !== undefined && message !== undefined &&
(message.type !== "warning" || (message.type !== "warning" ||
!isAppInitiatedAction)) && !isAppInitiatedAction)) &&
jsx_runtime_1.jsxs("div", __assign({ className: tss_react_1.cx("alert", "alert-" + message.type) }, { children: [message.type === "success" && jsx_runtime_1.jsx("span", { className: tss_react_1.cx(kcProperties.kcFeedbackSuccessIcon) }, void 0), jsx_runtime_1.jsxs("div", __assign({ className: tss_react_1.cx("alert", "alert-" + message.type) }, { children: [message.type === "success" && jsx_runtime_1.jsx("span", { className: tss_react_1.cx(properties.kcFeedbackSuccessIcon) }, void 0),
message.type === "warning" && jsx_runtime_1.jsx("span", { className: tss_react_1.cx(kcProperties.kcFeedbackWarningIcon) }, void 0), message.type === "warning" && jsx_runtime_1.jsx("span", { className: tss_react_1.cx(properties.kcFeedbackWarningIcon) }, void 0),
message.type === "error" && jsx_runtime_1.jsx("span", { className: tss_react_1.cx(kcProperties.kcFeedbackErrorIcon) }, void 0), message.type === "error" && jsx_runtime_1.jsx("span", { className: tss_react_1.cx(properties.kcFeedbackErrorIcon) }, void 0),
message.type === "info" && jsx_runtime_1.jsx("span", { className: tss_react_1.cx(kcProperties.kcFeedbackInfoIcon) }, void 0), message.type === "info" && jsx_runtime_1.jsx("span", { className: tss_react_1.cx(properties.kcFeedbackInfoIcon) }, void 0),
jsx_runtime_1.jsx("span", __assign({ className: "kc-feedback-text" }, { children: message.summary }), void 0)] }), void 0), formNode, (auth !== undefined && jsx_runtime_1.jsx("span", __assign({ className: "kc-feedback-text" }, { children: message.summary }), void 0)] }), void 0), formNode, (auth !== undefined &&
auth.showTryAnotherWayLink && auth.showTryAnotherWayLink &&
showAnotherWayIfPresent) && showAnotherWayIfPresent) &&
jsx_runtime_1.jsx("form", __assign({ id: "kc-select-try-another-way-form", action: url.loginAction, method: "post", className: tss_react_1.cx(displayWide && kcProperties.kcContentWrapperClass) }, { children: jsx_runtime_1.jsx("div", __assign({ className: tss_react_1.cx(displayWide && [kcProperties.kcFormSocialAccountContentClass, kcProperties.kcFormSocialAccountClass]) }, { children: jsx_runtime_1.jsxs("div", __assign({ className: tss_react_1.cx(kcProperties.kcFormGroupClass) }, { children: [jsx_runtime_1.jsx("input", { type: "hidden", name: "tryAnotherWay", value: "on" }, void 0), jsx_runtime_1.jsx("form", __assign({ id: "kc-select-try-another-way-form", action: url.loginAction, method: "post", className: tss_react_1.cx(displayWide && properties.kcContentWrapperClass) }, { children: jsx_runtime_1.jsx("div", __assign({ className: tss_react_1.cx(displayWide && [properties.kcFormSocialAccountContentClass, properties.kcFormSocialAccountClass]) }, { children: jsx_runtime_1.jsxs("div", __assign({ className: tss_react_1.cx(properties.kcFormGroupClass) }, { children: [jsx_runtime_1.jsx("input", { type: "hidden", name: "tryAnotherWay", value: "on" }, void 0),
jsx_runtime_1.jsx("a", __assign({ href: "#", id: "try-another-way", onClick: onTryAnotherWayClick }, { children: t("doTryAnotherWay") }), void 0)] }), void 0) }), void 0) }), void 0), jsx_runtime_1.jsx("a", __assign({ href: "#", id: "try-another-way", onClick: onTryAnotherWayClick }, { children: t("doTryAnotherWay") }), void 0)] }), void 0) }), void 0) }), void 0),
displayInfo && displayInfo &&
jsx_runtime_1.jsx("div", __assign({ id: "kc-info", className: tss_react_1.cx(kcProperties.kcSignUpClass) }, { children: jsx_runtime_1.jsx("div", __assign({ id: "kc-info-wrapper", className: tss_react_1.cx(kcProperties.kcInfoAreaWrapperClass) }, { children: displayInfoNode }), void 0) }), void 0)] }), void 0) }), void 0)] }), void 0)] }), void 0)); jsx_runtime_1.jsx("div", __assign({ id: "kc-info", className: tss_react_1.cx(properties.kcSignUpClass) }, { children: jsx_runtime_1.jsx("div", __assign({ id: "kc-info-wrapper", className: tss_react_1.cx(properties.kcInfoAreaWrapperClass) }, { children: displayInfoNode }), void 0) }), void 0)] }), void 0) }), void 0)] }), void 0)] }), void 0));
}); }
exports.Template = Template;
//# sourceMappingURL=Template.js.map //# sourceMappingURL=Template.js.map

1
lib/Template.js.map Normal file

File diff suppressed because one or more lines are too long

View File

@ -1,17 +0,0 @@
/** Class names can be provided as an array or separated by whitespace */
export declare type KcClasses<CssClasses extends string> = {
[key in CssClasses]?: string[] | string;
};
export declare type KcTemplateCssClasses = "kcLoginClass" | "kcHeaderClass" | "kcHeaderWrapperClass" | "kcFormCardClass" | "kcFormCardAccountClass" | "kcFormHeaderClass" | "kcLocaleWrapperClass" | "kcContentWrapperClass" | "kcLabelWrapperClass" | "kcContentWrapperClass" | "kcLabelWrapperClass" | "kcFormGroupClass" | "kcResetFlowIcon" | "kcResetFlowIcon" | "kcFeedbackSuccessIcon" | "kcFeedbackWarningIcon" | "kcFeedbackErrorIcon" | "kcFeedbackInfoIcon" | "kcContentWrapperClass" | "kcFormSocialAccountContentClass" | "kcFormSocialAccountClass" | "kcSignUpClass" | "kcInfoAreaWrapperClass";
export declare type KcTemplateProperties = {
stylesCommon?: string[];
styles?: string[];
scripts?: string[];
} & KcClasses<KcTemplateCssClasses>;
export declare const defaultKcTemplateProperties: KcTemplateProperties;
/** Tu use if you don't want any default */
export declare const allClearKcTemplateProperties: Record<KcTemplateCssClasses | "stylesCommon" | "styles" | "scripts", undefined>;
export declare type KcPagesProperties = KcClasses<KcTemplateCssClasses | "kcLogoLink" | "kcLogoClass" | "kcContainerClass" | "kcContentClass" | "kcFeedbackAreaClass" | "kcLocaleClass" | "kcAlertIconClasserror" | "kcFormAreaClass" | "kcFormSocialAccountListClass" | "kcFormSocialAccountDoubleListClass" | "kcFormSocialAccountListLinkClass" | "kcWebAuthnKeyIcon" | "kcFormClass" | "kcFormGroupErrorClass" | "kcLabelClass" | "kcInputClass" | "kcInputWrapperClass" | "kcFormOptionsClass" | "kcFormButtonsClass" | "kcFormSettingClass" | "kcTextareaClass" | "kcInfoAreaClass" | "kcButtonClass" | "kcButtonPrimaryClass" | "kcButtonDefaultClass" | "kcButtonLargeClass" | "kcButtonBlockClass" | "kcInputLargeClass" | "kcSrOnlyClass" | "kcSelectAuthListClass" | "kcSelectAuthListItemClass" | "kcSelectAuthListItemInfoClass" | "kcSelectAuthListItemLeftClass" | "kcSelectAuthListItemBodyClass" | "kcSelectAuthListItemDescriptionClass" | "kcSelectAuthListItemHeadingClass" | "kcSelectAuthListItemHelpTextClass" | "kcAuthenticatorDefaultClass" | "kcAuthenticatorPasswordClass" | "kcAuthenticatorOTPClass" | "kcAuthenticatorWebAuthnClass" | "kcAuthenticatorWebAuthnPasswordlessClass" | "kcSelectOTPListClass" | "kcSelectOTPListItemClass" | "kcAuthenticatorOtpCircleClass" | "kcSelectOTPItemHeadingClass" | "kcFormOptionsWrapperClass">;
export declare const defaultKcPagesProperties: KcPagesProperties;
/** Tu use if you don't want any default */
export declare const allClearKcLoginPageProperties: Record<KcTemplateCssClasses | "kcLogoLink" | "kcLogoClass" | "kcContainerClass" | "kcContentClass" | "kcFeedbackAreaClass" | "kcLocaleClass" | "kcAlertIconClasserror" | "kcFormAreaClass" | "kcFormSocialAccountListClass" | "kcFormSocialAccountDoubleListClass" | "kcFormSocialAccountListLinkClass" | "kcWebAuthnKeyIcon" | "kcFormClass" | "kcFormGroupErrorClass" | "kcLabelClass" | "kcInputClass" | "kcInputWrapperClass" | "kcFormOptionsClass" | "kcFormButtonsClass" | "kcFormSettingClass" | "kcTextareaClass" | "kcInfoAreaClass" | "kcButtonClass" | "kcButtonPrimaryClass" | "kcButtonDefaultClass" | "kcButtonLargeClass" | "kcButtonBlockClass" | "kcInputLargeClass" | "kcSrOnlyClass" | "kcSelectAuthListClass" | "kcSelectAuthListItemClass" | "kcSelectAuthListItemInfoClass" | "kcSelectAuthListItemLeftClass" | "kcSelectAuthListItemBodyClass" | "kcSelectAuthListItemDescriptionClass" | "kcSelectAuthListItemHeadingClass" | "kcSelectAuthListItemHelpTextClass" | "kcAuthenticatorDefaultClass" | "kcAuthenticatorPasswordClass" | "kcAuthenticatorOTPClass" | "kcAuthenticatorWebAuthnClass" | "kcAuthenticatorWebAuthnPasswordlessClass" | "kcSelectOTPListClass" | "kcSelectOTPListItemClass" | "kcAuthenticatorOtpCircleClass" | "kcSelectOTPItemHeadingClass" | "kcFormOptionsWrapperClass", undefined>;

View File

@ -1,81 +0,0 @@
"use strict";
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var __read = (this && this.__read) || function (o, n) {
var m = typeof Symbol === "function" && o[Symbol.iterator];
if (!m) return o;
var i = m.call(o), r, ar = [], e;
try {
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
}
catch (error) { e = { error: error }; }
finally {
try {
if (r && !r.done && (m = i["return"])) m.call(i);
}
finally { if (e) throw e.error; }
}
return ar;
};
var __spreadArray = (this && this.__spreadArray) || function (to, from) {
for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
to[j] = from[i];
return to;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.allClearKcLoginPageProperties = exports.defaultKcPagesProperties = exports.allClearKcTemplateProperties = exports.defaultKcTemplateProperties = void 0;
var allPropertiesValuesToUndefined_1 = require("../tools/allPropertiesValuesToUndefined");
exports.defaultKcTemplateProperties = {
"styles": ["css/login.css"],
"stylesCommon": __spreadArray(__spreadArray([], __read([".min.css", "-additions.min.css"]
.map(function (end) { return "node_modules/patternfly/dist/css/patternfly" + end; }))), [
"lib/zocial/zocial.css"
]),
"kcLoginClass": "login-pf-page",
"kcContentWrapperClass": "row",
"kcHeaderClass": "login-pf-page-header",
"kcFormCardClass": "card-pf",
"kcFormCardAccountClass": "login-pf-accounts",
"kcFormSocialAccountClass": "login-pf-social-section",
"kcFormSocialAccountContentClass": "col-xs-12 col-sm-6",
"kcFormHeaderClass": "login-pf-header",
"kcFeedbackErrorIcon": "pficon pficon-error-circle-o",
"kcFeedbackWarningIcon": "pficon pficon-warning-triangle-o",
"kcFeedbackSuccessIcon": "pficon pficon-ok",
"kcFeedbackInfoIcon": "pficon pficon-info",
"kcResetFlowIcon": "pficon pficon-arrow fa-2x",
"kcFormGroupClass": "form-group",
"kcLabelWrapperClass": "col-xs-12 col-sm-12 col-md-12 col-lg-12",
"kcSignUpClass": "login-pf-sighup"
};
/** Tu use if you don't want any default */
exports.allClearKcTemplateProperties = allPropertiesValuesToUndefined_1.allPropertiesValuesToUndefined(exports.defaultKcTemplateProperties);
exports.defaultKcPagesProperties = __assign(__assign({}, exports.defaultKcTemplateProperties), { "kcLogoLink": "http://www.keycloak.org", "kcLogoClass": "login-pf-brand", "kcContainerClass": "container-fluid", "kcContentClass": "col-sm-8 col-sm-offset-2 col-md-6 col-md-offset-3 col-lg-6 col-lg-offset-3", "kcFeedbackAreaClass": "col-md-12", "kcLocaleClass": "col-xs-12 col-sm-1", "kcAlertIconClasserror": "pficon pficon-error-circle-o", "kcFormAreaClass": "col-sm-10 col-sm-offset-1 col-md-8 col-md-offset-2 col-lg-8 col-lg-offset-2", "kcFormSocialAccountListClass": "login-pf-social list-unstyled login-pf-social-all", "kcFormSocialAccountDoubleListClass": "login-pf-social-double-col", "kcFormSocialAccountListLinkClass": "login-pf-social-link", "kcWebAuthnKeyIcon": "pficon pficon-key", "kcFormClass": "form-horizontal", "kcFormGroupErrorClass": "has-error", "kcLabelClass": "control-label", "kcInputClass": "form-control", "kcInputWrapperClass": "col-xs-12 col-sm-12 col-md-12 col-lg-12", "kcFormOptionsClass": "col-xs-12 col-sm-12 col-md-12 col-lg-12", "kcFormButtonsClass": "col-xs-12 col-sm-12 col-md-12 col-lg-12", "kcFormSettingClass": "login-pf-settings", "kcTextareaClass": "form-control", "kcInfoAreaClass": "col-xs-12 col-sm-4 col-md-4 col-lg-5 details",
// css classes for form buttons main class used for all buttons
"kcButtonClass": "btn",
// classes defining priority of the button - primary or default (there is typically only one priority button for the form)
"kcButtonPrimaryClass": "btn-primary", "kcButtonDefaultClass": "btn-default",
// classes defining size of the button
"kcButtonLargeClass": "btn-lg", "kcButtonBlockClass": "btn-block",
// css classes for input
"kcInputLargeClass": "input-lg",
// css classes for form accessability
"kcSrOnlyClass": "sr-only",
// css classes for select-authenticator form
"kcSelectAuthListClass": "list-group list-view-pf", "kcSelectAuthListItemClass": "list-group-item list-view-pf-stacked", "kcSelectAuthListItemInfoClass": "list-view-pf-main-info", "kcSelectAuthListItemLeftClass": "list-view-pf-left", "kcSelectAuthListItemBodyClass": "list-view-pf-body", "kcSelectAuthListItemDescriptionClass": "list-view-pf-description", "kcSelectAuthListItemHeadingClass": "list-group-item-heading", "kcSelectAuthListItemHelpTextClass": "list-group-item-text",
// css classes for the authenticators
"kcAuthenticatorDefaultClass": "fa list-view-pf-icon-lg", "kcAuthenticatorPasswordClass": "fa fa-unlock list-view-pf-icon-lg", "kcAuthenticatorOTPClass": "fa fa-mobile list-view-pf-icon-lg", "kcAuthenticatorWebAuthnClass": "fa fa-key list-view-pf-icon-lg", "kcAuthenticatorWebAuthnPasswordlessClass": "fa fa-key list-view-pf-icon-lg",
//css classes for the OTP Login Form
"kcSelectOTPListClass": "card-pf card-pf-view card-pf-view-select card-pf-view-single-select", "kcSelectOTPListItemClass": "card-pf-body card-pf-top-element", "kcAuthenticatorOtpCircleClass": "fa fa-mobile card-pf-icon-circle", "kcSelectOTPItemHeadingClass": "card-pf-title text-center" });
/** Tu use if you don't want any default */
exports.allClearKcLoginPageProperties = allPropertiesValuesToUndefined_1.allPropertiesValuesToUndefined(exports.defaultKcPagesProperties);
//# sourceMappingURL=KcProperties.js.map

View File

@ -1 +0,0 @@
{"version":3,"file":"KcProperties.js","sourceRoot":"","sources":["../../src/lib/components/KcProperties.ts"],"names":[],"mappings":"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"}

View File

@ -1,6 +0,0 @@
/// <reference types="react" />
import type { KcPagesProperties } from "./KcProperties";
export declare type LoginProps = {
kcProperties?: KcPagesProperties;
};
export declare const Login: import("react").MemoExoticComponent<(props: LoginProps) => JSX.Element>;

View File

@ -1,76 +0,0 @@
"use strict";
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var __read = (this && this.__read) || function (o, n) {
var m = typeof Symbol === "function" && o[Symbol.iterator];
if (!m) return o;
var i = m.call(o), r, ar = [], e;
try {
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
}
catch (error) { e = { error: error }; }
finally {
try {
if (r && !r.done && (m = i["return"])) m.call(i);
}
finally { if (e) throw e.error; }
}
return ar;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Login = void 0;
var jsx_runtime_1 = require("react/jsx-runtime");
var react_1 = require("react");
var Template_1 = require("./Template");
var KcProperties_1 = require("./KcProperties");
var assert_1 = require("evt/tools/typeSafety/assert");
var kcContext_1 = require("../kcContext");
var useKcTranslation_1 = require("../i18n/useKcTranslation");
var tss_react_1 = require("tss-react");
var powerhooks_1 = require("powerhooks");
exports.Login = react_1.memo(function (props) {
var _a;
var _b = props.kcProperties, kcProperties = _b === void 0 ? {} : _b;
var _c = useKcTranslation_1.useKcTranslation(), t = _c.t, tStr = _c.tStr;
Object.assign(kcProperties, KcProperties_1.defaultKcPagesProperties);
var _d = __read(react_1.useState(function () { return (assert_1.assert(kcContext_1.kcContext !== undefined, "App is currently being served by keycloak"),
kcContext_1.kcContext); }), 1), _e = _d[0], social = _e.social, realm = _e.realm, url = _e.url, usernameEditDisabled = _e.usernameEditDisabled, login = _e.login, auth = _e.auth, registrationDisabled = _e.registrationDisabled;
var _f = __read(react_1.useState(false), 2), isLoginButtonDisabled = _f[0], setIsLoginButtonDisabled = _f[1];
var onSubmit = powerhooks_1.useConstCallback(function () {
return (setIsLoginButtonDisabled(true), true);
});
return (jsx_runtime_1.jsx(Template_1.Template, { displayInfo: social.displayInfo, displayWide: realm.password && social.providers !== undefined, kcProperties: kcProperties, headerNode: t("doLogIn"), showUsernameNode: null, formNode: jsx_runtime_1.jsxs("div", __assign({ id: "kc-form", className: tss_react_1.cx(realm.password && social.providers !== undefined && kcProperties.kcContentWrapperClass) }, { children: [jsx_runtime_1.jsx("div", __assign({ id: "kc-form-wrapper", className: tss_react_1.cx(realm.password && social.providers && [kcProperties.kcFormSocialAccountContentClass, kcProperties.kcFormSocialAccountClass]) }, { children: realm.password &&
(jsx_runtime_1.jsxs("form", __assign({ id: "kc-form-login", onSubmit: onSubmit, action: url.loginAction, method: "post" }, { children: [jsx_runtime_1.jsxs("div", __assign({ className: tss_react_1.cx(kcProperties.kcFormGroupClass) }, { children: [jsx_runtime_1.jsx("label", __assign({ htmlFor: "username", className: tss_react_1.cx(kcProperties.kcLabelClass) }, { children: !realm.loginWithEmailAllowed ?
t("username")
:
(!realm.registrationEmailAsUsername ?
t("usernameOrEmail") :
t("email")) }), void 0),
jsx_runtime_1.jsx("input", __assign({ tabIndex: 1, id: "username", className: tss_react_1.cx(kcProperties.kcInputClass), name: "username", value: (_a = login.username) !== null && _a !== void 0 ? _a : '', type: "text" }, (usernameEditDisabled ? { "disabled": true } : { "autofocus": true, "autocomplete": "off" })), void 0)] }), void 0),
jsx_runtime_1.jsxs("div", __assign({ className: tss_react_1.cx(kcProperties.kcFormGroupClass) }, { children: [jsx_runtime_1.jsx("label", __assign({ htmlFor: "password", className: tss_react_1.cx(kcProperties.kcLabelClass) }, { children: t("password") }), void 0),
jsx_runtime_1.jsx("input", { tabIndex: 2, id: "password", className: tss_react_1.cx(kcProperties.kcInputClass), name: "password", type: "password", autoComplete: "off" }, void 0)] }), void 0),
jsx_runtime_1.jsxs("div", __assign({ className: tss_react_1.cx(kcProperties.kcFormGroupClass, kcProperties.kcFormSettingClass) }, { children: [jsx_runtime_1.jsx("div", __assign({ id: "kc-form-options" }, { children: (realm.rememberMe &&
!usernameEditDisabled) &&
jsx_runtime_1.jsx("div", __assign({ className: "checkbox" }, { children: jsx_runtime_1.jsx("label", { children: jsx_runtime_1.jsxs("input", __assign({ tabIndex: 3, id: "rememberMe", name: "rememberMe", type: "checkbox" }, (login.rememberMe ? { "checked": true } : {}), { children: [" ", t("rememberMe")] }), void 0) }, void 0) }), void 0) }), void 0),
jsx_runtime_1.jsx("div", __assign({ className: tss_react_1.cx(kcProperties.kcFormOptionsWrapperClass) }, { children: realm.resetPasswordAllowed &&
jsx_runtime_1.jsx("span", { children: jsx_runtime_1.jsx("a", __assign({ tabIndex: 5, href: url.loginResetCredentialsUrl }, { children: t("doForgotPassword") }), void 0) }, void 0) }), void 0)] }), void 0),
jsx_runtime_1.jsxs("div", __assign({ id: "kc-form-buttons", className: tss_react_1.cx(kcProperties.kcFormGroupClass) }, { children: [jsx_runtime_1.jsx("input", __assign({ type: "hidden", id: "id-hidden-input", name: "credentialId" }, ((auth === null || auth === void 0 ? void 0 : auth.selectedCredential) !== undefined ? { "value": auth.selectedCredential } : {})), void 0),
jsx_runtime_1.jsx("input", { tabIndex: 4, className: tss_react_1.cx(kcProperties.kcButtonClass, kcProperties.kcButtonPrimaryClass, kcProperties.kcButtonBlockClass, kcProperties.kcButtonLargeClass), name: "login", id: "kc-login", type: "submit", value: tStr("doLogIn"), disabled: isLoginButtonDisabled }, void 0)] }), void 0)] }), void 0)) }), void 0),
(realm.password && social.providers !== undefined) &&
jsx_runtime_1.jsx("div", __assign({ id: "kc-social-providers", className: tss_react_1.cx(kcProperties.kcFormSocialAccountContentClass, kcProperties.kcFormSocialAccountClass) }, { children: jsx_runtime_1.jsx("ul", __assign({ className: tss_react_1.cx(kcProperties.kcFormSocialAccountListClass, social.providers.length > 4 && kcProperties.kcFormSocialAccountDoubleListClass) }, { children: social.providers.map(function (p) {
return jsx_runtime_1.jsx("li", __assign({ className: tss_react_1.cx(kcProperties.kcFormSocialAccountListLinkClass) }, { children: jsx_runtime_1.jsx("a", __assign({ href: p.loginUrl, id: "zocial-" + p.alias, className: tss_react_1.cx("zocial", p.providerId) }, { children: jsx_runtime_1.jsx("span", { children: p.displayName }, void 0) }), void 0) }), void 0);
}) }), void 0) }), void 0)] }), void 0), displayInfoNode: (realm.password &&
realm.resetPasswordAllowed &&
!registrationDisabled) &&
jsx_runtime_1.jsx("div", __assign({ id: "kc-registration" }, { children: jsx_runtime_1.jsxs("span", { children: [t("noAccount"), jsx_runtime_1.jsx("a", __assign({ tabIndex: 6, href: url.registrationUrl }, { children: t("doRegister") }), void 0)] }, void 0) }), void 0) }, void 0));
});
//# sourceMappingURL=Login.js.map

View File

@ -1 +0,0 @@
{"version":3,"file":"Login.js","sourceRoot":"","sources":["../../src/lib/components/Login.tsx"],"names":[],"mappings":"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"}

View File

@ -1,15 +0,0 @@
import type { ReactNode } from "react";
import type { KcTemplateProperties } from "./KcProperties";
export declare type TemplateProps = {
kcProperties: KcTemplateProperties;
displayInfo?: boolean;
displayMessage?: boolean;
displayRequiredFields?: boolean;
displayWide?: boolean;
showAnotherWayIfPresent?: boolean;
headerNode: ReactNode;
showUsernameNode: ReactNode;
formNode: ReactNode;
displayInfoNode: ReactNode;
};
export declare const Template: import("react").MemoExoticComponent<(props: TemplateProps) => JSX.Element>;

File diff suppressed because one or more lines are too long

View File

@ -1,11 +0,0 @@
import { messages } from "./generated_messages/login";
export declare type KcLanguageTag = keyof typeof messages;
export declare type LanguageLabel = "Deutsch" | "Norsk" | "Русский" | "Svenska" | "Português (Brasil)" | "Lietuvių" | "English" | "Italiano" | "Français" | "中文简体" | "Español" | "Čeština" | "日本語" | "Slovenčina" | "Polish" | "Català" | "Nederlands" | "tr";
export declare function getKcLanguageTagLabel(language: KcLanguageTag): LanguageLabel;
/**
* Pass in "fr-FR" or "français" for example, it will return the AvailableLanguage
* it corresponds to: "fr".
* If there is no reasonable match it's guessed from navigator.language.
* If still no matches "en" is returned.
*/
export declare function getBestMatchAmongKcLanguageTag(languageLike: string): KcLanguageTag;

View File

@ -1,53 +0,0 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.getBestMatchAmongKcLanguageTag = exports.getKcLanguageTagLabel = void 0;
var objectKeys_1 = require("evt/tools/typeSafety/objectKeys");
var login_1 = require("./generated_messages/login");
/* spell-checker: enable */
function getKcLanguageTagLabel(language) {
switch (language) {
/* spell-checker: disable */
case "es": return "Español";
case "it": return "Italiano";
case "fr": return "Français";
case "ca": return "Català";
case "en": return "English";
case "de": return "Deutsch";
case "no": return "Norsk";
case "pt_BR": return "Português (Brasil)";
case "ru": return "Русский";
case "sk":
case "sv": return "Slovenčina";
case "ja": return "日本語";
case "pl": return "Polish";
case "zh_CN": return "中文简体";
case "sv": return "Svenska";
case "lt": return "Lietuvių";
case "cs": return "Čeština";
case "nl": return "Nederlands";
case "tr": return "tr";
/* spell-checker: enable */
}
return language;
}
exports.getKcLanguageTagLabel = getKcLanguageTagLabel;
var availableLanguages = objectKeys_1.objectKeys(login_1.messages);
/**
* Pass in "fr-FR" or "français" for example, it will return the AvailableLanguage
* it corresponds to: "fr".
* If there is no reasonable match it's guessed from navigator.language.
* If still no matches "en" is returned.
*/
function getBestMatchAmongKcLanguageTag(languageLike) {
var iso2LanguageLike = languageLike.split("-")[0].toLowerCase();
var language = availableLanguages.find(function (language) {
return language.toLowerCase().includes(iso2LanguageLike) ||
getKcLanguageTagLabel(language).toLocaleLowerCase() === languageLike.toLocaleLowerCase();
});
if (language === undefined && languageLike !== navigator.language) {
return getBestMatchAmongKcLanguageTag(navigator.language);
}
return "en";
}
exports.getBestMatchAmongKcLanguageTag = getBestMatchAmongKcLanguageTag;
//# sourceMappingURL=KcLanguageTag.js.map

View File

@ -1 +0,0 @@
{"version":3,"file":"KcLanguageTag.js","sourceRoot":"","sources":["../../src/lib/i18n/KcLanguageTag.ts"],"names":[],"mappings":";;;AACA,8DAA6D;AAC7D,oDAAsD;AAStD,2BAA2B;AAE3B,SAAgB,qBAAqB,CAAC,QAAuB;IAEzD,QAAQ,QAAQ,EAAE;QACd,4BAA4B;QAC5B,KAAK,IAAI,CAAC,CAAC,OAAO,SAAS,CAAC;QAC5B,KAAK,IAAI,CAAC,CAAC,OAAO,UAAU,CAAC;QAC7B,KAAK,IAAI,CAAC,CAAC,OAAO,UAAU,CAAC;QAC7B,KAAK,IAAI,CAAC,CAAC,OAAO,QAAQ,CAAC;QAC3B,KAAK,IAAI,CAAC,CAAC,OAAO,SAAS,CAAC;QAC5B,KAAK,IAAI,CAAC,CAAC,OAAO,SAAS,CAAC;QAC5B,KAAK,IAAI,CAAC,CAAC,OAAO,OAAO,CAAC;QAC1B,KAAK,OAAO,CAAC,CAAC,OAAO,oBAAoB,CAAC;QAC1C,KAAK,IAAI,CAAC,CAAC,OAAO,SAAS,CAAC;QAC5B,KAAK,IAAI,CAAC;QACV,KAAK,IAAI,CAAC,CAAC,OAAO,YAAY,CAAC;QAC/B,KAAK,IAAI,CAAC,CAAC,OAAO,KAAK,CAAC;QACxB,KAAK,IAAI,CAAC,CAAC,OAAO,QAAQ,CAAC;QAC3B,KAAK,OAAO,CAAC,CAAC,OAAO,MAAM,CAAA;QAC3B,KAAK,IAAI,CAAC,CAAC,OAAO,SAAS,CAAC;QAC5B,KAAK,IAAI,CAAC,CAAC,OAAO,UAAU,CAAC;QAC7B,KAAK,IAAI,CAAC,CAAC,OAAO,SAAS,CAAC;QAC5B,KAAK,IAAI,CAAC,CAAC,OAAO,YAAY,CAAC;QAC/B,KAAK,IAAI,CAAC,CAAC,OAAO,IAAI,CAAA;QACtB,2BAA2B;KAC9B;IAED,OAAO,QAAQ,CAAC;AAEpB,CAAC;AA5BD,sDA4BC;AAED,IAAM,kBAAkB,GAAG,uBAAU,CAAC,gBAAQ,CAAC,CAAC;AAEhD;;;;;EAKE;AACF,SAAgB,8BAA8B,CAC1C,YAAoB;IAGpB,IAAM,gBAAgB,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IAElE,IAAM,QAAQ,GAAG,kBAAkB,CAAC,IAAI,CAAC,UAAA,QAAQ;QAC7C,OAAA,QAAQ,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;YACjD,qBAAqB,CAAC,QAAQ,CAAC,CAAC,iBAAiB,EAAE,KAAK,YAAY,CAAC,iBAAiB,EAAE;IADxF,CACwF,CAC3F,CAAC;IAEF,IAAI,QAAQ,KAAK,SAAS,IAAI,YAAY,KAAK,SAAS,CAAC,QAAQ,EAAE;QAC/D,OAAO,8BAA8B,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;KAC7D;IAED,OAAO,IAAI,CAAC;AAChB,CAAC;AAhBD,wEAgBC"}

3
lib/i18n/getLanguageLabel.d.ts vendored Normal file
View File

@ -0,0 +1,3 @@
import type { AvailableLanguages } from "./useKeycloakLanguage";
export declare function getLanguageLabel(language: AvailableLanguages): LanguageLabel;
export declare type LanguageLabel = "Deutsch" | "Norsk" | "Русский" | "Svenska" | "Português (Brasil)" | "Lietuvių" | "English" | "Italiano" | "Français" | "中文简体" | "Español" | "Čeština" | "日本語" | "Slovenčina" | "Polish" | "Català" | "Nederlands" | "tr";

View File

@ -0,0 +1,32 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.getLanguageLabel = void 0;
function getLanguageLabel(language) {
switch (language) {
/* spell-checker: disable */
case "es": return "Español";
case "it": return "Italiano";
case "fr": return "Français";
case "ca": return "Català";
case "en": return "English";
case "de": return "Deutsch";
case "no": return "Norsk";
case "pt_BR": return "Português (Brasil)";
case "ru": return "Русский";
case "sk":
case "sv": return "Slovenčina";
case "ja": return "日本語";
case "pl": return "Polish";
case "zh_CN": return "中文简体";
case "sv": return "Svenska";
case "lt": return "Lietuvių";
case "cs": return "Čeština";
case "nl": return "Nederlands";
case "tr": return "tr";
/* spell-checker: enable */
}
return language;
}
exports.getLanguageLabel = getLanguageLabel;
/* spell-checker: enable */
//# sourceMappingURL=getLanguageLabel.js.map

View File

@ -0,0 +1 @@
{"version":3,"file":"getLanguageLabel.js","sourceRoot":"","sources":["../../src/lib/i18n/getLanguageLabel.ts"],"names":[],"mappings":";;;AAGA,SAAgB,gBAAgB,CAAC,QAA4B;IAEzD,QAAQ,QAAQ,EAAE;QACd,4BAA4B;QAC5B,KAAK,IAAI,CAAC,CAAC,OAAO,SAAS,CAAC;QAC5B,KAAK,IAAI,CAAC,CAAC,OAAO,UAAU,CAAC;QAC7B,KAAK,IAAI,CAAC,CAAC,OAAO,UAAU,CAAC;QAC7B,KAAK,IAAI,CAAC,CAAC,OAAO,QAAQ,CAAC;QAC3B,KAAK,IAAI,CAAC,CAAC,OAAO,SAAS,CAAC;QAC5B,KAAK,IAAI,CAAC,CAAC,OAAO,SAAS,CAAC;QAC5B,KAAK,IAAI,CAAC,CAAC,OAAO,OAAO,CAAC;QAC1B,KAAK,OAAO,CAAC,CAAC,OAAO,oBAAoB,CAAC;QAC1C,KAAK,IAAI,CAAC,CAAC,OAAO,SAAS,CAAC;QAC5B,KAAK,IAAI,CAAC;QACV,KAAK,IAAI,CAAC,CAAC,OAAO,YAAY,CAAC;QAC/B,KAAK,IAAI,CAAC,CAAC,OAAO,KAAK,CAAC;QACxB,KAAK,IAAI,CAAC,CAAC,OAAO,QAAQ,CAAC;QAC3B,KAAK,OAAO,CAAC,CAAC,OAAO,MAAM,CAAA;QAC3B,KAAK,IAAI,CAAC,CAAC,OAAO,SAAS,CAAC;QAC5B,KAAK,IAAI,CAAC,CAAC,OAAO,UAAU,CAAC;QAC7B,KAAK,IAAI,CAAC,CAAC,OAAO,SAAS,CAAC;QAC5B,KAAK,IAAI,CAAC,CAAC,OAAO,YAAY,CAAC;QAC/B,KAAK,IAAI,CAAC,CAAC,OAAO,IAAI,CAAA;QACtB,2BAA2B;KAC9B;IAED,OAAO,QAAQ,CAAC;AAEpB,CAAC;AA5BD,4CA4BC;AAOD,2BAA2B"}

View File

@ -1 +0,0 @@
export declare const useKcLanguageTag: () => import("powerhooks").UseNamedStateReturnType<"tr" | "no" | "en" | "ca" | "cs" | "de" | "es" | "fr" | "it" | "ja" | "lt" | "nl" | "pl" | "pt_BR" | "ru" | "sk" | "sv" | "zh_CN", "kcLanguageTag">;

View File

@ -1,13 +0,0 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.useKcLanguageTag = void 0;
var powerhooks_1 = require("powerhooks");
var kcContext_1 = require("../kcContext");
var KcLanguageTag_1 = require("./KcLanguageTag");
var assert_1 = require("evt/tools/typeSafety/assert");
exports.useKcLanguageTag = powerhooks_1.createUseGlobalState("kcLanguageTag", function () {
var _a, _b;
return KcLanguageTag_1.getBestMatchAmongKcLanguageTag((assert_1.assert(kcContext_1.kcContext !== undefined, "Page not served by KeyCloak"),
(_b = (_a = kcContext_1.kcContext.locale) === null || _a === void 0 ? void 0 : _a["current"]) !== null && _b !== void 0 ? _b : navigator.language));
}, { "persistance": "cookies" }).useKcLanguageTag;
//# sourceMappingURL=useKcLanguageTag.js.map

View File

@ -1 +0,0 @@
{"version":3,"file":"useKcLanguageTag.js","sourceRoot":"","sources":["../../src/lib/i18n/useKcLanguageTag.ts"],"names":[],"mappings":";;;AACA,yCAAkD;AAClD,0CAAyC;AACzC,iDAAiE;AACjE,sDAAqD;AAEtC,QAAA,gBAAgB,GAAK,iCAAoB,CACpD,eAAe,EACf;;IAAM,OAAA,8CAA8B,CAAC,CACjC,eAAM,CAAC,qBAAS,KAAK,SAAS,EAAE,6BAA6B,CAAC;QAC9D,MAAA,MAAA,qBAAS,CAAC,MAAM,0CAAG,SAAkB,CAAC,mCACtC,SAAS,CAAC,QAAQ,CACrB,CAAC,CAAA;CAAA,EACF,EAAE,aAAa,EAAE,SAAS,EAAE,CAC/B,kBAAC"}

File diff suppressed because one or more lines are too long

View File

@ -1,57 +0,0 @@
"use strict";
var __read = (this && this.__read) || function (o, n) {
var m = typeof Symbol === "function" && o[Symbol.iterator];
if (!m) return o;
var i = m.call(o), r, ar = [], e;
try {
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
}
catch (error) { e = { error: error }; }
finally {
try {
if (r && !r.done && (m = i["return"])) m.call(i);
}
finally { if (e) throw e.error; }
}
return ar;
};
var __spreadArray = (this && this.__spreadArray) || function (to, from) {
for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
to[j] = from[i];
return to;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.useKcTranslation = void 0;
var jsx_runtime_1 = require("react/jsx-runtime");
var useKcLanguageTag_1 = require("./useKcLanguageTag");
var login_1 = require("./generated_messages/login");
var powerhooks_1 = require("powerhooks");
var id_1 = require("evt/tools/typeSafety/id");
function useKcTranslation() {
var kcLanguageTag = useKcLanguageTag_1.useKcLanguageTag().kcLanguageTag;
var tStr = powerhooks_1.useConstCallback(function (key) {
var _a;
var args = [];
for (var _i = 1; _i < arguments.length; _i++) {
args[_i - 1] = arguments[_i];
}
var str = (_a = login_1.messages[kcLanguageTag][key]) !== null && _a !== void 0 ? _a : login_1.messages["en"][key];
args.forEach(function (arg, i) {
if (arg === undefined) {
return;
}
str = str.replace(new RegExp("\\{" + i + "\\}", "g"), arg);
});
return str;
});
var t = powerhooks_1.useConstCallback(id_1.id(function (key) {
var args = [];
for (var _i = 1; _i < arguments.length; _i++) {
args[_i - 1] = arguments[_i];
}
return jsx_runtime_1.jsx("span", { className: key, dangerouslySetInnerHTML: { "__html": tStr.apply(void 0, __spreadArray([key], __read(args))) } }, void 0);
}));
return { t: t, tStr: tStr };
}
exports.useKcTranslation = useKcTranslation;
//# sourceMappingURL=useKcTranslation.js.map

View File

@ -1 +0,0 @@
{"version":3,"file":"useKcTranslation.js","sourceRoot":"","sources":["../../src/lib/i18n/useKcTranslation.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AACA,uDAAsD;AACtD,oDAAsD;AACtD,yCAA8C;AAE9C,8CAA6C;AAI7C,SAAgB,gBAAgB;IAEpB,IAAA,aAAa,GAAK,mCAAgB,EAAE,cAAvB,CAAwB;IAE7C,IAAM,IAAI,GAAG,6BAAgB,CACzB,UAAC,GAAe;;QAAE,cAA+B;aAA/B,UAA+B,EAA/B,qBAA+B,EAA/B,IAA+B;YAA/B,6BAA+B;;QAE7C,IAAI,GAAG,GAAW,MAAA,gBAAQ,CAAC,aAA4B,CAAC,CAAC,GAAG,CAAC,mCAAI,gBAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QAErF,IAAI,CAAC,OAAO,CAAC,UAAC,GAAG,EAAE,CAAC;YAEhB,IAAI,GAAG,KAAK,SAAS,EAAE;gBACnB,OAAO;aACV;YAED,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,QAAM,CAAC,QAAK,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;QAE1D,CAAC,CAAC,CAAC;QAEH,OAAO,GAAG,CAAC;IAEf,CAAC,CACJ,CAAC;IAEF,IAAM,CAAC,GAAG,6BAAgB,CACtB,OAAE,CACE,UAAC,GAAG;QAAE,cAAO;aAAP,UAAO,EAAP,qBAAO,EAAP,IAAO;YAAP,6BAAO;;QACT,OAAA,4BAAM,SAAS,EAAE,GAAG,EAAE,uBAAuB,EAAE,EAAE,QAAQ,EAAE,IAAI,8BAAC,GAAG,UAAK,IAAI,GAAC,EAAE,WAAI;IAAnF,CAAmF,CAC1F,CACJ,CAAC;IAEF,OAAO,EAAE,CAAC,GAAA,EAAE,IAAI,MAAA,EAAE,CAAC;AAEvB,CAAC;AAjCD,4CAiCC"}

11
lib/i18n/useKeycloakLanguage.d.ts vendored Normal file
View File

@ -0,0 +1,11 @@
declare const availableLanguages: ("tr" | "no" | "en" | "ca" | "cs" | "de" | "es" | "fr" | "it" | "ja" | "lt" | "nl" | "pl" | "pt_BR" | "ru" | "sk" | "sv" | "zh_CN")[];
export declare type AvailableLanguages = typeof availableLanguages[number];
export declare const useKeycloakLanguage: () => import("powerhooks").UseNamedStateReturnType<"tr" | "no" | "en" | "ca" | "cs" | "de" | "es" | "fr" | "it" | "ja" | "lt" | "nl" | "pl" | "pt_BR" | "ru" | "sk" | "sv" | "zh_CN", "keycloakLanguage">;
/**
* Pass in "fr-FR" or "français" for example, it will return the AvailableLanguage
* it corresponds to: "fr".
* If there is no reasonable match it's guessed from navigator.language.
* If still no matches "en" is returned.
*/
export declare function getBestMatchAmongKeycloakAvailableLanguages(languageLike: string): AvailableLanguages;
export {};

View File

@ -0,0 +1,32 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.getBestMatchAmongKeycloakAvailableLanguages = exports.useKeycloakLanguage = void 0;
var powerhooks_1 = require("powerhooks");
var login_1 = require("./generated_messages/login");
var objectKeys_1 = require("evt/tools/typeSafety/objectKeys");
var getLanguageLabel_1 = require("./getLanguageLabel");
var keycloakFtlValues_1 = require("../keycloakFtlValues");
var availableLanguages = objectKeys_1.objectKeys(login_1.messages);
exports.useKeycloakLanguage = powerhooks_1.createUseGlobalState("keycloakLanguage", function () {
var _a, _b;
return getBestMatchAmongKeycloakAvailableLanguages((_b = (_a = keycloakFtlValues_1.keycloakPagesContext === null || keycloakFtlValues_1.keycloakPagesContext === void 0 ? void 0 : keycloakFtlValues_1.keycloakPagesContext.locale) === null || _a === void 0 ? void 0 : _a["current"]) !== null && _b !== void 0 ? _b : navigator.language);
}, { "persistance": "cookies" }).useKeycloakLanguage;
/**
* Pass in "fr-FR" or "français" for example, it will return the AvailableLanguage
* it corresponds to: "fr".
* If there is no reasonable match it's guessed from navigator.language.
* If still no matches "en" is returned.
*/
function getBestMatchAmongKeycloakAvailableLanguages(languageLike) {
var iso2LanguageLike = languageLike.split("-")[0].toLowerCase();
var language = availableLanguages.find(function (language) {
return language.toLowerCase().includes(iso2LanguageLike) ||
getLanguageLabel_1.getLanguageLabel(language).toLocaleLowerCase() === languageLike.toLocaleLowerCase();
});
if (language === undefined && languageLike !== navigator.language) {
return getBestMatchAmongKeycloakAvailableLanguages(navigator.language);
}
return "en";
}
exports.getBestMatchAmongKeycloakAvailableLanguages = getBestMatchAmongKeycloakAvailableLanguages;
//# sourceMappingURL=useKeycloakLanguage.js.map

View File

@ -0,0 +1 @@
{"version":3,"file":"useKeycloakLanguage.js","sourceRoot":"","sources":["../../src/lib/i18n/useKeycloakLanguage.ts"],"names":[],"mappings":";;;AACA,yCAAkD;AAClD,oDAAsD;AACtD,8DAA6D;AAC7D,uDAAsD;AACtD,0DAA4D;AAE5D,IAAM,kBAAkB,GAAG,uBAAU,CAAC,gBAAQ,CAAC,CAAC;AAIjC,QAAA,mBAAmB,GAAK,iCAAoB,CACvD,kBAAkB,EAClB;;IAAM,OAAA,2CAA2C,CAC7C,MAAA,MAAA,wCAAoB,aAApB,wCAAoB,uBAApB,wCAAoB,CAAE,MAAM,0CAAG,SAAkB,CAAC,mCAClD,SAAS,CAAC,QAAQ,CACrB,CAAA;CAAA,EACD,EAAE,aAAa,EAAE,SAAS,EAAE,CAC/B,qBAAC;AAEF;;;;;EAKE;AACF,SAAgB,2CAA2C,CACvD,YAAoB;IAGpB,IAAM,gBAAgB,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IAElE,IAAM,QAAQ,GAAG,kBAAkB,CAAC,IAAI,CAAC,UAAA,QAAQ;QAC7C,OAAA,QAAQ,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;YACjD,mCAAgB,CAAC,QAAQ,CAAC,CAAC,iBAAiB,EAAE,KAAK,YAAY,CAAC,iBAAiB,EAAE;IADnF,CACmF,CACtF,CAAC;IAEF,IAAI,QAAQ,KAAK,SAAS,IAAI,YAAY,KAAK,SAAS,CAAC,QAAQ,EAAE;QAC/D,OAAO,2CAA2C,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;KAC1E;IAED,OAAO,IAAI,CAAC;AAChB,CAAC;AAhBD,kGAgBC"}

6
lib/i18n/useKeycloakTranslation.d.ts vendored Normal file
View File

@ -0,0 +1,6 @@
import { messages } from "./generated_messages/login";
import type { ReactNode } from "react";
export declare type MessageKey = keyof typeof messages["en"];
export declare function useKeycloakThemeTranslation(): {
t: (key: MessageKey, ...args: (string | undefined)[]) => ReactNode;
};

View File

@ -0,0 +1,28 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.useKeycloakThemeTranslation = void 0;
var jsx_runtime_1 = require("react/jsx-runtime");
var useKeycloakLanguage_1 = require("./useKeycloakLanguage");
var login_1 = require("./generated_messages/login");
var powerhooks_1 = require("powerhooks");
function useKeycloakThemeTranslation() {
var keycloakLanguage = useKeycloakLanguage_1.useKeycloakLanguage().keycloakLanguage;
var t = powerhooks_1.useConstCallback(function (key) {
var _a;
var args = [];
for (var _i = 1; _i < arguments.length; _i++) {
args[_i - 1] = arguments[_i];
}
var out = (_a = login_1.messages[keycloakLanguage][key]) !== null && _a !== void 0 ? _a : login_1.messages["en"][key];
args.forEach(function (arg, i) {
if (arg === undefined) {
return;
}
out = out.replace(new RegExp("\\{" + i + "\\}", "g"), arg);
});
return jsx_runtime_1.jsx("span", { className: key, dangerouslySetInnerHTML: { "__html": out } }, void 0);
});
return { t: t };
}
exports.useKeycloakThemeTranslation = useKeycloakThemeTranslation;
//# sourceMappingURL=useKeycloakTranslation.js.map

View File

@ -0,0 +1 @@
{"version":3,"file":"useKeycloakTranslation.js","sourceRoot":"","sources":["../../src/lib/i18n/useKeycloakTranslation.tsx"],"names":[],"mappings":";;;;AACA,6DAA4D;AAC5D,oDAAsD;AACtD,yCAA8C;AAM9C,SAAgB,2BAA2B;IAE/B,IAAA,gBAAgB,GAAK,yCAAmB,EAAE,iBAA1B,CAA2B;IAEnD,IAAM,CAAC,GAAG,6BAAgB,CACtB,UAAC,GAAe;;QAAE,cAA+B;aAA/B,UAA+B,EAA/B,qBAA+B,EAA/B,IAA+B;YAA/B,6BAA+B;;QAE7C,IAAI,GAAG,GAAW,MAAA,gBAAQ,CAAC,gBAA+B,CAAC,CAAC,GAAG,CAAC,mCAAI,gBAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QAExF,IAAI,CAAC,OAAO,CAAC,UAAC,GAAG,EAAE,CAAC;YAEhB,IAAI,GAAG,KAAK,SAAS,EAAE;gBACnB,OAAO;aACV;YAED,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,QAAM,CAAC,QAAK,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;QAE1D,CAAC,CAAC,CAAC;QAEH,OAAO,4BAAM,SAAS,EAAE,GAAG,EAAE,uBAAuB,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,WAAI,CAAC;IAEhF,CAAC,CACJ,CAAC;IAEF,OAAO,EAAE,CAAC,GAAA,EAAE,CAAC;AAEjB,CAAC;AA1BD,kEA0BC"}

11
lib/index.d.ts vendored
View File

@ -1,7 +1,4 @@
export * from "./kcContext"; export * from "./keycloakFtlValues";
export * from "./i18n/KcLanguageTag"; export * from "./i18n/useKeycloakLanguage";
export * from "./i18n/useKcLanguageTag"; export * from "./i18n/useKeycloakTranslation";
export * from "./i18n/useKcTranslation"; export * from "./i18n/getLanguageLabel";
export * from "./components/KcProperties";
export * from "./components/Login";
export * from "./components/Template";

View File

@ -10,11 +10,8 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
}; };
Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "__esModule", { value: true });
__exportStar(require("./kcContext"), exports); __exportStar(require("./keycloakFtlValues"), exports);
__exportStar(require("./i18n/KcLanguageTag"), exports); __exportStar(require("./i18n/useKeycloakLanguage"), exports);
__exportStar(require("./i18n/useKcLanguageTag"), exports); __exportStar(require("./i18n/useKeycloakTranslation"), exports);
__exportStar(require("./i18n/useKcTranslation"), exports); __exportStar(require("./i18n/getLanguageLabel"), exports);
__exportStar(require("./components/KcProperties"), exports);
__exportStar(require("./components/Login"), exports);
__exportStar(require("./components/Template"), exports);
//# sourceMappingURL=index.js.map //# sourceMappingURL=index.js.map

View File

@ -1 +1 @@
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/lib/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,8CAA4B;AAE5B,uDAAqC;AACrC,0DAAwC;AACxC,0DAAwC;AAExC,4DAA0C;AAC1C,qDAAmC;AACnC,wDAAsC"} {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/lib/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,sDAAoC;AACpC,6DAA2C;AAC3C,gEAA8C;AAC9C,0DAAwC"}

View File

@ -1,7 +0,0 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.kcContext = void 0;
var ftlValuesGlobalName_1 = require("../bin/build-keycloak-theme/ftlValuesGlobalName");
var id_1 = require("evt/tools/typeSafety/id");
exports.kcContext = id_1.id(window[ftlValuesGlobalName_1.ftlValuesGlobalName]);
//# sourceMappingURL=kcContext.js.map

View File

@ -1 +0,0 @@
{"version":3,"file":"kcContext.js","sourceRoot":"","sources":["../src/lib/kcContext.ts"],"names":[],"mappings":";;;AACA,uFAAsF;AAEtF,8CAA6C;AAoEhC,QAAA,SAAS,GAAG,OAAE,CAAyB,MAAc,CAAC,yCAAmB,CAAC,CAAC,CAAC"}

View File

@ -1,29 +1,22 @@
import type { generateFtlFilesCodeFactory } from "../bin/build-keycloak-theme/generateFtl"; import type { generateFtlFilesCodeFactory } from "../bin/build-keycloak-theme/generateFtl";
import type { KcLanguageTag } from "./i18n/KcLanguageTag"; import type { AvailableLanguages } from "./i18n/useKeycloakLanguage";
export declare type KcContext = { export declare type KeycloakFtlValues = {
pageBasename: Parameters<ReturnType<typeof generateFtlFilesCodeFactory>["generateFtlFilesCode"]>[0]["pageBasename"]; pageBasename: Parameters<ReturnType<typeof generateFtlFilesCodeFactory>["generateFtlFilesCode"]>[0]["pageBasename"];
url: { url: {
loginAction: string; loginAction: string;
resourcesPath: string; resourcesPath: string;
resourcesCommonPath: string; resourcesCommonPath: string;
loginRestartFlowUrl: string; loginRestartFlowUrl: string;
loginResetCredentialsUrl: string;
registrationUrl: string;
}; };
realm: { realm: {
displayName?: string; displayName?: string;
displayNameHtml?: string; displayNameHtml?: string;
internationalizationEnabled: boolean; internationalizationEnabled: boolean;
password: boolean;
loginWithEmailAllowed: boolean;
registrationEmailAsUsername: boolean;
rememberMe: boolean;
resetPasswordAllowed: boolean;
}; };
/** Undefined if !realm.internationalizationEnabled */ /** Undefined if !realm.internationalizationEnabled */
locale?: { locale?: {
supported: { supported: {
languageTag: KcLanguageTag; languageTag: AvailableLanguages;
}[]; }[];
}; };
auth?: { auth?: {
@ -31,7 +24,6 @@ export declare type KcContext = {
showResetCredentials: boolean; showResetCredentials: boolean;
showTryAnotherWayLink: boolean; showTryAnotherWayLink: boolean;
attemptedUsername?: boolean; attemptedUsername?: boolean;
selectedCredential?: string;
}; };
scripts: string[]; scripts: string[];
message?: { message?: {
@ -39,20 +31,5 @@ export declare type KcContext = {
summary: string; summary: string;
}; };
isAppInitiatedAction: boolean; isAppInitiatedAction: boolean;
social: {
displayInfo: boolean;
providers?: {
loginUrl: string;
alias: string;
providerId: string;
displayName: string;
}[];
};
usernameEditDisabled: boolean;
login: {
username?: string;
rememberMe: boolean;
};
registrationDisabled: boolean;
}; };
export declare const kcContext: KcContext | undefined; export declare const keycloakPagesContext: KeycloakFtlValues | undefined;

9
lib/keycloakFtlValues.js Normal file
View File

@ -0,0 +1,9 @@
"use strict";
var _a;
Object.defineProperty(exports, "__esModule", { value: true });
exports.keycloakPagesContext = void 0;
var ftlValuesGlobalName_1 = require("../bin/build-keycloak-theme/ftlValuesGlobalName");
var id_1 = require("evt/tools/typeSafety/id");
exports.keycloakPagesContext = (_a = {}, _a[ftlValuesGlobalName_1.ftlValuesGlobalName] = id_1.id(window[ftlValuesGlobalName_1.ftlValuesGlobalName]), _a).keycloakPagesContext;
;
//# sourceMappingURL=keycloakFtlValues.js.map

View File

@ -0,0 +1 @@
{"version":3,"file":"keycloakFtlValues.js","sourceRoot":"","sources":["../src/lib/keycloakFtlValues.ts"],"names":[],"mappings":";;;;AACA,uFAAsF;AAEtF,8CAA6C;AA8C9B,QAAA,oBAAoB,aAC7B,GAAC,yCAAmB,IAAG,OAAE,CAAiC,MAAc,CAAC,yCAAmB,CAAC,CAAC,2BAAG;AACvG,CAAC"}

View File

@ -1,2 +0,0 @@
import "minimal-polyfills/Object.fromEntries";
export declare function allPropertiesValuesToUndefined<T extends Record<string, unknown>>(obj: T): Record<keyof T, undefined>;

View File

@ -1,29 +0,0 @@
"use strict";
var __read = (this && this.__read) || function (o, n) {
var m = typeof Symbol === "function" && o[Symbol.iterator];
if (!m) return o;
var i = m.call(o), r, ar = [], e;
try {
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
}
catch (error) { e = { error: error }; }
finally {
try {
if (r && !r.done && (m = i["return"])) m.call(i);
}
finally { if (e) throw e.error; }
}
return ar;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.allPropertiesValuesToUndefined = void 0;
require("minimal-polyfills/Object.fromEntries");
function allPropertiesValuesToUndefined(obj) {
return Object.fromEntries(Object.entries(obj)
.map(function (_a) {
var _b = __read(_a, 1), key = _b[0];
return [key, undefined];
}));
}
exports.allPropertiesValuesToUndefined = allPropertiesValuesToUndefined;
//# sourceMappingURL=allPropertiesValuesToUndefined.js.map

View File

@ -1 +0,0 @@
{"version":3,"file":"allPropertiesValuesToUndefined.js","sourceRoot":"","sources":["../../src/lib/tools/allPropertiesValuesToUndefined.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;AAEA,gDAA8C;AAE9C,SAAgB,8BAA8B,CAAoC,GAAM;IACpF,OAAO,MAAM,CAAC,WAAW,CACrB,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;SACd,GAAG,CAAC,UAAC,EAAK;YAAL,KAAA,aAAK,EAAJ,GAAG,QAAA;QAAM,OAAA,CAAC,GAAG,EAAE,SAAS,CAAC;IAAhB,CAAgB,CAAC,CACjC,CAAC;AACb,CAAC;AALD,wEAKC"}

View File

@ -1,6 +1,6 @@
{ {
"name": "keycloak-react-theming", "name": "keycloak-react-theming",
"version": "0.0.26", "version": "0.0.25",
"description": "Keycloak theme generator for Reacts app", "description": "Keycloak theme generator for Reacts app",
"repository": { "repository": {
"type": "git", "type": "git",
@ -31,19 +31,17 @@
"src/bin/tools/getProjectRoot.ts", "src/bin/tools/getProjectRoot.ts",
"src/bin/tools/grant-exec-perms.ts", "src/bin/tools/grant-exec-perms.ts",
"src/bin/tools/transformCodebase.ts", "src/bin/tools/transformCodebase.ts",
"src/lib/components/KcProperties.ts", "src/lib/LoginPage.tsx",
"src/lib/components/Login.tsx", "src/lib/Template.tsx",
"src/lib/components/Template.tsx",
"src/lib/i18n/KcLanguageTag.ts",
"src/lib/i18n/generated_messages/account.ts", "src/lib/i18n/generated_messages/account.ts",
"src/lib/i18n/generated_messages/admin.ts", "src/lib/i18n/generated_messages/admin.ts",
"src/lib/i18n/generated_messages/email.ts", "src/lib/i18n/generated_messages/email.ts",
"src/lib/i18n/generated_messages/login.ts", "src/lib/i18n/generated_messages/login.ts",
"src/lib/i18n/useKcLanguageTag.ts", "src/lib/i18n/getLanguageLabel.ts",
"src/lib/i18n/useKcTranslation.tsx", "src/lib/i18n/useKeycloakLanguage.ts",
"src/lib/i18n/useKeycloakTranslation.tsx",
"src/lib/index.ts", "src/lib/index.ts",
"src/lib/kcContext.ts", "src/lib/keycloakFtlValues.ts",
"src/lib/tools/allPropertiesValuesToUndefined.ts",
"src/lib/tools/appendLinkInHead.ts", "src/lib/tools/appendLinkInHead.ts",
"src/lib/tools/appendScriptInHead.ts", "src/lib/tools/appendScriptInHead.ts",
"bin/build-keycloak-theme/ftlValuesGlobalName.d.ts", "bin/build-keycloak-theme/ftlValuesGlobalName.d.ts",
@ -90,18 +88,12 @@
"bin/tools/transformCodebase.d.ts", "bin/tools/transformCodebase.d.ts",
"bin/tools/transformCodebase.js", "bin/tools/transformCodebase.js",
"bin/tools/transformCodebase.js.map", "bin/tools/transformCodebase.js.map",
"lib/components/KcProperties.d.ts", "lib/LoginPage.d.ts",
"lib/components/KcProperties.js", "lib/LoginPage.js",
"lib/components/KcProperties.js.map", "lib/LoginPage.js.map",
"lib/components/Login.d.ts", "lib/Template.d.ts",
"lib/components/Login.js", "lib/Template.js",
"lib/components/Login.js.map", "lib/Template.js.map",
"lib/components/Template.d.ts",
"lib/components/Template.js",
"lib/components/Template.js.map",
"lib/i18n/KcLanguageTag.d.ts",
"lib/i18n/KcLanguageTag.js",
"lib/i18n/KcLanguageTag.js.map",
"lib/i18n/generated_messages/account.d.ts", "lib/i18n/generated_messages/account.d.ts",
"lib/i18n/generated_messages/account.js", "lib/i18n/generated_messages/account.js",
"lib/i18n/generated_messages/account.js.map", "lib/i18n/generated_messages/account.js.map",
@ -114,21 +106,21 @@
"lib/i18n/generated_messages/login.d.ts", "lib/i18n/generated_messages/login.d.ts",
"lib/i18n/generated_messages/login.js", "lib/i18n/generated_messages/login.js",
"lib/i18n/generated_messages/login.js.map", "lib/i18n/generated_messages/login.js.map",
"lib/i18n/useKcLanguageTag.d.ts", "lib/i18n/getLanguageLabel.d.ts",
"lib/i18n/useKcLanguageTag.js", "lib/i18n/getLanguageLabel.js",
"lib/i18n/useKcLanguageTag.js.map", "lib/i18n/getLanguageLabel.js.map",
"lib/i18n/useKcTranslation.d.ts", "lib/i18n/useKeycloakLanguage.d.ts",
"lib/i18n/useKcTranslation.js", "lib/i18n/useKeycloakLanguage.js",
"lib/i18n/useKcTranslation.js.map", "lib/i18n/useKeycloakLanguage.js.map",
"lib/i18n/useKeycloakTranslation.d.ts",
"lib/i18n/useKeycloakTranslation.js",
"lib/i18n/useKeycloakTranslation.js.map",
"lib/index.d.ts", "lib/index.d.ts",
"lib/index.js", "lib/index.js",
"lib/index.js.map", "lib/index.js.map",
"lib/kcContext.d.ts", "lib/keycloakFtlValues.d.ts",
"lib/kcContext.js", "lib/keycloakFtlValues.js",
"lib/kcContext.js.map", "lib/keycloakFtlValues.js.map",
"lib/tools/allPropertiesValuesToUndefined.d.ts",
"lib/tools/allPropertiesValuesToUndefined.js",
"lib/tools/allPropertiesValuesToUndefined.js.map",
"lib/tools/appendLinkInHead.d.ts", "lib/tools/appendLinkInHead.d.ts",
"lib/tools/appendLinkInHead.js", "lib/tools/appendLinkInHead.js",
"lib/tools/appendLinkInHead.js.map", "lib/tools/appendLinkInHead.js.map",
@ -160,7 +152,6 @@
"dependencies": { "dependencies": {
"cheerio": "^1.0.0-rc.5", "cheerio": "^1.0.0-rc.5",
"evt": "^1.9.12", "evt": "^1.9.12",
"minimal-polyfills": "^2.1.6",
"powerhooks": "^0.0.14", "powerhooks": "^0.0.14",
"tss-react": "^0.0.9" "tss-react": "^0.0.9"
} }

View File

@ -1,2 +1,2 @@
export const ftlValuesGlobalName = "kcContext"; export const ftlValuesGlobalName = "keycloakPagesContext";

View File

@ -4,19 +4,12 @@
"loginAction": "${url.loginAction}", "loginAction": "${url.loginAction}",
"resourcesPath": "${url.resourcesPath}", "resourcesPath": "${url.resourcesPath}",
"resourcesCommonPath": "${url.resourcesCommonPath}", "resourcesCommonPath": "${url.resourcesCommonPath}",
"loginRestartFlowUrl": "${url.loginRestartFlowUrl}", "loginRestartFlowUrl": "${url.loginRestartFlowUrl}"
"loginResetCredentialsUrl": "${url.loginResetCredentialsUrl}",
"registrationUrl": "${url.registrationUrl}"
}, },
"realm": { "realm": {
"displayName": "${realm.displayName!''}" || undefined, "displayName": "${realm.displayName!''}" || undefined,
"displayNameHtml": "${realm.displayNameHtml!''}" || undefined, "displayNameHtml": "${realm.displayNameHtml!''}" || undefined,
"internationalizationEnabled": ${realm.internationalizationEnabled?c}, "internationalizationEnabled": ${realm.internationalizationEnabled?c}
"password": ${realm.password?c},
"loginWithEmailAllowed": ${realm.loginWithEmailAllowed?c},
"registrationEmailAsUsername": ${realm.registrationEmailAsUsername?c},
"rememberMe": ${realm.rememberMe?c},
"resetPasswordAllowed": ${realm.resetPasswordAllowed?c}
}, },
"locale": (function (){ "locale": (function (){
@ -61,7 +54,6 @@
"showUsername": ${auth.showUsername()?c}, "showUsername": ${auth.showUsername()?c},
"showResetCredentials": ${auth.showResetCredentials()?c}, "showResetCredentials": ${auth.showResetCredentials()?c},
"showTryAnotherWayLink": ${auth.showTryAnotherWayLink()?c} "showTryAnotherWayLink": ${auth.showTryAnotherWayLink()?c}
"selectedCredential": "${auth.selectedCredential!''}" || undefined
}; };
<#if auth.showUsername() && !auth.showResetCredentials()> <#if auth.showUsername() && !auth.showResetCredentials()>
@ -87,7 +79,7 @@
<#if scripts??> <#if scripts??>
<#list scripts as script> <#list scripts as script>
out.push("${script}"); out.push("${script}");
</#list> </#list>
</#if> </#if>
@ -115,59 +107,7 @@
</#if> </#if>
return false; return false;
})(), })()
"social": {
"displayInfo": ${social.displayInfo?c},
"providers": (()=>{
<#if social.providers??>
var out= [];
<#list social.providers as p>
out.push({
"loginUrl": "${p.loginUrl}",
"alias": "${p.alias}",
"providerId": "${p.providerId}",
"displayName": "${p.displayName}"
});
</#list>
return out;
</#if>
return undefined;
})()
},
"usernameEditDisabled": (function () {
<#if usernameEditDisabled??>
return true;
</#if>
return false;
})(),
"login": {
"username": "${login.username!''}" || undefined,
"rememberMe": (function (){
<#if login.rememberMe??>
return true;
</#if>
return false;
})()
},
"registrationDisabled": (function (){
<#if registrationDisabled??>
return true;
</#if>
return false;
})
} }
</script> </script>

View File

@ -14,6 +14,8 @@ export function downloadAndUnzip(
fs.mkdirSync(destDirPath, { "recursive": true }); fs.mkdirSync(destDirPath, { "recursive": true });
console.log({ url, destDirPath });
[ [
`wget ${url}`, `wget ${url}`,
...["unzip", "rm"].map(prg => `${prg} ${pathBasename(url)}`), ...["unzip", "rm"].map(prg => `${prg} ${pathBasename(url)}`),

31
src/lib/LoginPage.tsx Normal file
View File

@ -0,0 +1,31 @@
/*
import { useState, memo } from "react";
import { KcProperties, Template } from "./Template";
import { assert } from "evt/tools/typeSafety/assert";
import { keycloakPagesContext } from "./keycloakFtlValues";
export type Props = {
properties: KcProperties;
};
export const LoginPage = memo((props: Props)=>{
const [{ }] = useState(() => {
assert(keycloakPagesContext !== undefined);
return keycloakPagesContext;
});
return (
<Template/>
);
});
*/
export {};

View File

@ -1,36 +1,64 @@
import { useState, useEffect, memo } from "react";
import type { ReactNode } from "react"; import type { ReactNode } from "react";
import { useKcTranslation } from "../i18n/useKcTranslation"; import { useState, useEffect } from "react";
import { kcContext } from "../kcContext"; import { useKeycloakThemeTranslation } from "./i18n/useKeycloakTranslation";
import { keycloakPagesContext } from "./keycloakFtlValues";
import { assert } from "evt/tools/typeSafety/assert"; import { assert } from "evt/tools/typeSafety/assert";
import { cx } from "tss-react"; import { cx } from "tss-react";
import { useKcLanguageTag } from "../i18n/useKcLanguageTag"; import { useKeycloakLanguage, AvailableLanguages } from "./i18n/useKeycloakLanguage";
import type { KcLanguageTag } from "../i18n/KcLanguageTag"; import { getLanguageLabel } from "./i18n/getLanguageLabel";
import { getKcLanguageTagLabel } from "../i18n/KcLanguageTag";
import { useCallbackFactory } from "powerhooks"; import { useCallbackFactory } from "powerhooks";
import { appendLinkInHead } from "../tools/appendLinkInHead"; import { appendLinkInHead } from "./tools/appendLinkInHead";
import { appendScriptInHead } from "../tools/appendScriptInHead"; import { appendScriptInHead } from "./tools/appendScriptInHead";
import { join as pathJoin } from "path"; import { join as pathJoin } from "path";
import { useConstCallback } from "powerhooks"; import { useConstCallback } from "powerhooks";
import type { KcTemplateProperties } from "./KcProperties";
import { defaultKcTemplateProperties } from "./KcProperties";
export type TemplateProps = { type KcClasses<T extends string> = { [key in T]?: string[] | string };
kcProperties: KcTemplateProperties;
export type KcProperties = {
stylesCommon?: string[];
styles?: string[];
scripts?: string[];
} & KcClasses<
"kcLoginClass" |
"kcHeaderClass" |
"kcHeaderWrapperClass" |
"kcFormCardClass" |
"kcFormCardAccountClass" |
"kcFormHeaderClass" |
"kcLocaleWrapperClass" |
"kcContentWrapperClass" |
"kcLabelWrapperClass" |
"kcContentWrapperClass" |
"kcLabelWrapperClass" |
"kcFormGroupClass" |
"kcResetFlowIcon" |
"kcResetFlowIcon" |
"kcFeedbackSuccessIcon" |
"kcFeedbackWarningIcon" |
"kcFeedbackErrorIcon" |
"kcFeedbackInfoIcon" |
"kcContentWrapperClass" |
"kcFormSocialAccountContentClass" |
"kcFormSocialAccountClass" |
"kcSignUpClass" |
"kcInfoAreaWrapperClass"
>;
export type Props = {
displayInfo?: boolean; displayInfo?: boolean;
displayMessage?: boolean; displayMessage: boolean;
displayRequiredFields?: boolean; displayRequiredFields: boolean;
displayWide?: boolean; displayWide: boolean;
showAnotherWayIfPresent?: boolean; showAnotherWayIfPresent: boolean;
properties?: KcProperties;
headerNode: ReactNode; headerNode: ReactNode;
showUsernameNode: ReactNode; showUsernameNode: ReactNode;
formNode: ReactNode; formNode: ReactNode;
displayInfoNode: ReactNode; displayInfoNode: ReactNode;
}; };
export function Template(props: Props) {
export const Template = memo((props: TemplateProps) => {
const { const {
displayInfo = false, displayInfo = false,
@ -38,22 +66,20 @@ export const Template = memo((props: TemplateProps) => {
displayRequiredFields = false, displayRequiredFields = false,
displayWide = false, displayWide = false,
showAnotherWayIfPresent = true, showAnotherWayIfPresent = true,
kcProperties = {}, properties = {},
headerNode, headerNode,
showUsernameNode, showUsernameNode,
formNode, formNode,
displayInfoNode displayInfoNode
} = props; } = props;
const { t } = useKcTranslation(); const { t } = useKeycloakThemeTranslation();
Object.assign(kcProperties, defaultKcTemplateProperties); const { keycloakLanguage, setKeycloakLanguage } = useKeycloakLanguage();
const { kcLanguageTag, setKcLanguageTag } = useKcLanguageTag();
const onChangeLanguageClickFactory = useCallbackFactory( const onChangeLanguageClickFactory = useCallbackFactory(
([languageTag]: [KcLanguageTag]) => ([languageTag]: [AvailableLanguages]) =>
setKcLanguageTag(languageTag) setKeycloakLanguage(languageTag)
); );
const onTryAnotherWayClick = useConstCallback(() => { const onTryAnotherWayClick = useConstCallback(() => {
@ -64,28 +90,31 @@ export const Template = memo((props: TemplateProps) => {
}); });
const [{ realm, locale, auth, url, message, isAppInitiatedAction }] = useState(() => ( const [{ realm, locale, auth, url, message, isAppInitiatedAction }] = useState(() => {
assert(kcContext !== undefined, "App is not currently being served by KeyCloak"),
kcContext assert(keycloakPagesContext !== undefined);
));
return keycloakPagesContext;
});
useEffect(() => { useEffect(() => {
kcProperties.stylesCommon?.forEach( properties.stylesCommon?.forEach(
relativePath => relativePath =>
appendLinkInHead( appendLinkInHead(
{ "href": pathJoin(url.resourcesCommonPath, relativePath) } { "href": pathJoin(url.resourcesCommonPath, relativePath) }
) )
); );
kcProperties.styles?.forEach( properties.styles?.forEach(
relativePath => relativePath =>
appendLinkInHead( appendLinkInHead(
{ "href": pathJoin(url.resourcesPath, relativePath) } { "href": pathJoin(url.resourcesPath, relativePath) }
) )
); );
kcProperties.scripts?.forEach( properties.scripts?.forEach(
relativePath => relativePath =>
appendScriptInHead( appendScriptInHead(
{ "src": pathJoin(url.resourcesPath, relativePath) } { "src": pathJoin(url.resourcesPath, relativePath) }
@ -96,16 +125,16 @@ export const Template = memo((props: TemplateProps) => {
}, []); }, []);
return ( return (
<div className={cx(kcProperties.kcLoginClass)}> <div className={cx(properties.kcLoginClass)}>
<div id="kc-header" className={cx(kcProperties.kcHeaderClass)}> <div id="kc-header" className={cx(properties.kcHeaderClass)}>
<div id="kc-header-wrapper" className={cx(kcProperties.kcHeaderWrapperClass)}> <div id="kc-header-wrapper" className={cx(properties.kcHeaderWrapperClass)}>
{t("loginTitleHtml", realm.displayNameHtml)} {t("loginTitleHtml", realm.displayNameHtml)}
</div> </div>
</div> </div>
<div className={cx("kcFormCardClass", displayWide && kcProperties.kcFormCardAccountClass)}> <div className={cx("kcFormCardClass", displayWide && properties.kcFormCardAccountClass)}>
<header className={cx(kcProperties.kcFormHeaderClass)}> <header className={cx(properties.kcFormHeaderClass)}>
{ {
( (
realm.internationalizationEnabled && realm.internationalizationEnabled &&
@ -113,10 +142,10 @@ export const Template = memo((props: TemplateProps) => {
locale.supported.length > 1 locale.supported.length > 1
) && ) &&
<div id="kc-locale"> <div id="kc-locale">
<div id="kc-locale-wrapper" className={cx(kcProperties.kcLocaleWrapperClass)}> <div id="kc-locale-wrapper" className={cx(properties.kcLocaleWrapperClass)}>
<div className="kc-dropdown" id="kc-locale-dropdown"> <div className="kc-dropdown" id="kc-locale-dropdown">
<a href="#" id="kc-current-locale-link"> <a href="#" id="kc-current-locale-link">
{getKcLanguageTagLabel(kcLanguageTag)} {getLanguageLabel(keycloakLanguage)}
</a> </a>
<ul> <ul>
{ {
@ -124,7 +153,7 @@ export const Template = memo((props: TemplateProps) => {
({ languageTag }) => ({ languageTag }) =>
<li className="kc-dropdown-item"> <li className="kc-dropdown-item">
<a href="#" onClick={onChangeLanguageClickFactory(languageTag)}> <a href="#" onClick={onChangeLanguageClickFactory(languageTag)}>
{getKcLanguageTagLabel(languageTag)} {getLanguageLabel(languageTag)}
</a> </a>
</li> </li>
@ -147,8 +176,8 @@ export const Template = memo((props: TemplateProps) => {
displayRequiredFields ? displayRequiredFields ?
( (
<div className={cx(kcProperties.kcContentWrapperClass)}> <div className={cx(properties.kcContentWrapperClass)}>
<div className={cx(kcProperties.kcLabelWrapperClass, "subtitle")}> <div className={cx(properties.kcLabelWrapperClass, "subtitle")}>
<span className="subtitle"> <span className="subtitle">
<span className="required">*</span> <span className="required">*</span>
{t("requiredFields")} {t("requiredFields")}
@ -168,18 +197,18 @@ export const Template = memo((props: TemplateProps) => {
) )
) : ( ) : (
displayRequiredFields ? ( displayRequiredFields ? (
<div className={cx(kcProperties.kcContentWrapperClass)}> <div className={cx(properties.kcContentWrapperClass)}>
<div className={cx(kcProperties.kcLabelWrapperClass, "subtitle")}> <div className={cx(properties.kcLabelWrapperClass, "subtitle")}>
<span className="subtitle"><span className="required">*</span> {t("requiredFields")}</span> <span className="subtitle"><span className="required">*</span> {t("requiredFields")}</span>
</div> </div>
<div className="col-md-10"> <div className="col-md-10">
{showUsernameNode} {showUsernameNode}
<div className={cx(kcProperties.kcFormGroupClass)}> <div className={cx(properties.kcFormGroupClass)}>
<div id="kc-username"> <div id="kc-username">
<label id="kc-attempted-username">{auth?.attemptedUsername}</label> <label id="kc-attempted-username">{auth?.attemptedUsername}</label>
<a id="reset-login" href={url.loginRestartFlowUrl}> <a id="reset-login" href={url.loginRestartFlowUrl}>
<div className="kc-login-tooltip"> <div className="kc-login-tooltip">
<i className={cx(kcProperties.kcResetFlowIcon)}></i> <i className={cx(properties.kcResetFlowIcon)}></i>
<span className="kc-tooltip-text">{t("restartLoginTooltip")}</span> <span className="kc-tooltip-text">{t("restartLoginTooltip")}</span>
</div> </div>
</a> </a>
@ -190,12 +219,12 @@ export const Template = memo((props: TemplateProps) => {
) : ( ) : (
<> <>
{showUsernameNode} {showUsernameNode}
<div className={cx(kcProperties.kcFormGroupClass)}> <div className={cx(properties.kcFormGroupClass)}>
<div id="kc-username"> <div id="kc-username">
<label id="kc-attempted-username">{auth?.attemptedUsername}</label> <label id="kc-attempted-username">{auth?.attemptedUsername}</label>
<a id="reset-login" href={url.loginRestartFlowUrl}> <a id="reset-login" href={url.loginRestartFlowUrl}>
<div className="kc-login-tooltip"> <div className="kc-login-tooltip">
<i className={cx(kcProperties.kcResetFlowIcon)}></i> <i className={cx(properties.kcResetFlowIcon)}></i>
<span className="kc-tooltip-text">{t("restartLoginTooltip")}</span> <span className="kc-tooltip-text">{t("restartLoginTooltip")}</span>
</div> </div>
</a> </a>
@ -219,10 +248,10 @@ export const Template = memo((props: TemplateProps) => {
) )
) && ) &&
<div className={cx("alert", `alert-${message.type}`)}> <div className={cx("alert", `alert-${message.type}`)}>
{message.type === "success" && <span className={cx(kcProperties.kcFeedbackSuccessIcon)}></span>} {message.type === "success" && <span className={cx(properties.kcFeedbackSuccessIcon)}></span>}
{message.type === "warning" && <span className={cx(kcProperties.kcFeedbackWarningIcon)}></span>} {message.type === "warning" && <span className={cx(properties.kcFeedbackWarningIcon)}></span>}
{message.type === "error" && <span className={cx(kcProperties.kcFeedbackErrorIcon)}></span>} {message.type === "error" && <span className={cx(properties.kcFeedbackErrorIcon)}></span>}
{message.type === "info" && <span className={cx(kcProperties.kcFeedbackInfoIcon)}></span>} {message.type === "info" && <span className={cx(properties.kcFeedbackInfoIcon)}></span>}
<span className="kc-feedback-text">{message.summary}</span> <span className="kc-feedback-text">{message.summary}</span>
</div> </div>
} }
@ -234,9 +263,9 @@ export const Template = memo((props: TemplateProps) => {
showAnotherWayIfPresent showAnotherWayIfPresent
) && ) &&
<form id="kc-select-try-another-way-form" action={url.loginAction} method="post" className={cx(displayWide && kcProperties.kcContentWrapperClass)} > <form id="kc-select-try-another-way-form" action={url.loginAction} method="post" className={cx(displayWide && properties.kcContentWrapperClass)} >
<div className={cx(displayWide && [kcProperties.kcFormSocialAccountContentClass, kcProperties.kcFormSocialAccountClass])} > <div className={cx(displayWide && [properties.kcFormSocialAccountContentClass, properties.kcFormSocialAccountClass])} >
<div className={cx(kcProperties.kcFormGroupClass)}> <div className={cx(properties.kcFormGroupClass)}>
<input type="hidden" name="tryAnotherWay" value="on" /> <input type="hidden" name="tryAnotherWay" value="on" />
<a href="#" id="try-another-way" onClick={onTryAnotherWayClick}>{t("doTryAnotherWay")}</a> <a href="#" id="try-another-way" onClick={onTryAnotherWayClick}>{t("doTryAnotherWay")}</a>
</div> </div>
@ -246,15 +275,15 @@ export const Template = memo((props: TemplateProps) => {
{ {
displayInfo && displayInfo &&
<div id="kc-info" className={cx(kcProperties.kcSignUpClass)}> <div id="kc-info" className={cx(properties.kcSignUpClass)}>
<div id="kc-info-wrapper" className={cx(kcProperties.kcInfoAreaWrapperClass)}> <div id="kc-info-wrapper" className={cx(properties.kcInfoAreaWrapperClass)}>
{displayInfoNode} {displayInfoNode}
</div> </div>
</div> </div>
} }
</div> </div >
</div> </div >
</div> </div >
</div> </div >
); );
}); }

View File

@ -1,190 +0,0 @@
import { allPropertiesValuesToUndefined } from "../tools/allPropertiesValuesToUndefined";
/** Class names can be provided as an array or separated by whitespace */
export type KcClasses<CssClasses extends string> = { [key in CssClasses]?: string[] | string };
export type KcTemplateCssClasses =
"kcLoginClass" |
"kcHeaderClass" |
"kcHeaderWrapperClass" |
"kcFormCardClass" |
"kcFormCardAccountClass" |
"kcFormHeaderClass" |
"kcLocaleWrapperClass" |
"kcContentWrapperClass" |
"kcLabelWrapperClass" |
"kcContentWrapperClass" |
"kcLabelWrapperClass" |
"kcFormGroupClass" |
"kcResetFlowIcon" |
"kcResetFlowIcon" |
"kcFeedbackSuccessIcon" |
"kcFeedbackWarningIcon" |
"kcFeedbackErrorIcon" |
"kcFeedbackInfoIcon" |
"kcContentWrapperClass" |
"kcFormSocialAccountContentClass" |
"kcFormSocialAccountClass" |
"kcSignUpClass" |
"kcInfoAreaWrapperClass"
;
export type KcTemplateProperties = {
stylesCommon?: string[];
styles?: string[];
scripts?: string[];
} & KcClasses<KcTemplateCssClasses>;
export const defaultKcTemplateProperties: KcTemplateProperties = {
"styles": ["css/login.css"],
"stylesCommon": [
...[".min.css", "-additions.min.css"]
.map(end => `node_modules/patternfly/dist/css/patternfly${end}`),
"lib/zocial/zocial.css"
],
"kcLoginClass": "login-pf-page",
"kcContentWrapperClass": "row",
"kcHeaderClass": "login-pf-page-header",
"kcFormCardClass": "card-pf",
"kcFormCardAccountClass": "login-pf-accounts",
"kcFormSocialAccountClass": "login-pf-social-section",
"kcFormSocialAccountContentClass": "col-xs-12 col-sm-6",
"kcFormHeaderClass": "login-pf-header",
"kcFeedbackErrorIcon": "pficon pficon-error-circle-o",
"kcFeedbackWarningIcon": "pficon pficon-warning-triangle-o",
"kcFeedbackSuccessIcon": "pficon pficon-ok",
"kcFeedbackInfoIcon": "pficon pficon-info",
"kcResetFlowIcon": "pficon pficon-arrow fa-2x",
"kcFormGroupClass": "form-group",
"kcLabelWrapperClass": "col-xs-12 col-sm-12 col-md-12 col-lg-12",
"kcSignUpClass": "login-pf-sighup"
};
/** Tu use if you don't want any default */
export const allClearKcTemplateProperties =
allPropertiesValuesToUndefined(defaultKcTemplateProperties);
export type KcPagesProperties = KcClasses<
KcTemplateCssClasses |
"kcLogoLink" |
"kcLogoClass" |
"kcContainerClass" |
"kcContentClass" |
"kcFeedbackAreaClass" |
"kcLocaleClass" |
"kcAlertIconClasserror" |
"kcFormAreaClass" |
"kcFormSocialAccountListClass" |
"kcFormSocialAccountDoubleListClass" |
"kcFormSocialAccountListLinkClass" |
"kcWebAuthnKeyIcon" |
"kcFormClass" |
"kcFormGroupErrorClass" |
"kcLabelClass" |
"kcInputClass" |
"kcInputWrapperClass" |
"kcFormOptionsClass" |
"kcFormButtonsClass" |
"kcFormSettingClass" |
"kcTextareaClass" |
"kcInfoAreaClass" |
"kcButtonClass" |
"kcButtonPrimaryClass" |
"kcButtonDefaultClass" |
"kcButtonLargeClass" |
"kcButtonBlockClass" |
"kcInputLargeClass" |
"kcSrOnlyClass" |
"kcSelectAuthListClass" |
"kcSelectAuthListItemClass" |
"kcSelectAuthListItemInfoClass" |
"kcSelectAuthListItemLeftClass" |
"kcSelectAuthListItemBodyClass" |
"kcSelectAuthListItemDescriptionClass" |
"kcSelectAuthListItemHeadingClass" |
"kcSelectAuthListItemHelpTextClass" |
"kcAuthenticatorDefaultClass" |
"kcAuthenticatorPasswordClass" |
"kcAuthenticatorOTPClass" |
"kcAuthenticatorWebAuthnClass" |
"kcAuthenticatorWebAuthnPasswordlessClass" |
"kcSelectOTPListClass" |
"kcSelectOTPListItemClass" |
"kcAuthenticatorOtpCircleClass" |
"kcSelectOTPItemHeadingClass" |
"kcFormOptionsWrapperClass"
>;
export const defaultKcPagesProperties: KcPagesProperties = {
...defaultKcTemplateProperties,
"kcLogoLink": "http://www.keycloak.org",
"kcLogoClass": "login-pf-brand",
"kcContainerClass": "container-fluid",
"kcContentClass": "col-sm-8 col-sm-offset-2 col-md-6 col-md-offset-3 col-lg-6 col-lg-offset-3",
"kcFeedbackAreaClass": "col-md-12",
"kcLocaleClass": "col-xs-12 col-sm-1",
"kcAlertIconClasserror": "pficon pficon-error-circle-o",
"kcFormAreaClass": "col-sm-10 col-sm-offset-1 col-md-8 col-md-offset-2 col-lg-8 col-lg-offset-2",
"kcFormSocialAccountListClass": "login-pf-social list-unstyled login-pf-social-all",
"kcFormSocialAccountDoubleListClass": "login-pf-social-double-col",
"kcFormSocialAccountListLinkClass": "login-pf-social-link",
"kcWebAuthnKeyIcon": "pficon pficon-key",
"kcFormClass": "form-horizontal",
"kcFormGroupErrorClass": "has-error",
"kcLabelClass": "control-label",
"kcInputClass": "form-control",
"kcInputWrapperClass": "col-xs-12 col-sm-12 col-md-12 col-lg-12",
"kcFormOptionsClass": "col-xs-12 col-sm-12 col-md-12 col-lg-12",
"kcFormButtonsClass": "col-xs-12 col-sm-12 col-md-12 col-lg-12",
"kcFormSettingClass": "login-pf-settings",
"kcTextareaClass": "form-control",
"kcInfoAreaClass": "col-xs-12 col-sm-4 col-md-4 col-lg-5 details",
// css classes for form buttons main class used for all buttons
"kcButtonClass": "btn",
// classes defining priority of the button - primary or default (there is typically only one priority button for the form)
"kcButtonPrimaryClass": "btn-primary",
"kcButtonDefaultClass": "btn-default",
// classes defining size of the button
"kcButtonLargeClass": "btn-lg",
"kcButtonBlockClass": "btn-block",
// css classes for input
"kcInputLargeClass": "input-lg",
// css classes for form accessability
"kcSrOnlyClass": "sr-only",
// css classes for select-authenticator form
"kcSelectAuthListClass": "list-group list-view-pf",
"kcSelectAuthListItemClass": "list-group-item list-view-pf-stacked",
"kcSelectAuthListItemInfoClass": "list-view-pf-main-info",
"kcSelectAuthListItemLeftClass": "list-view-pf-left",
"kcSelectAuthListItemBodyClass": "list-view-pf-body",
"kcSelectAuthListItemDescriptionClass": "list-view-pf-description",
"kcSelectAuthListItemHeadingClass": "list-group-item-heading",
"kcSelectAuthListItemHelpTextClass": "list-group-item-text",
// css classes for the authenticators
"kcAuthenticatorDefaultClass": "fa list-view-pf-icon-lg",
"kcAuthenticatorPasswordClass": "fa fa-unlock list-view-pf-icon-lg",
"kcAuthenticatorOTPClass": "fa fa-mobile list-view-pf-icon-lg",
"kcAuthenticatorWebAuthnClass": "fa fa-key list-view-pf-icon-lg",
"kcAuthenticatorWebAuthnPasswordlessClass": "fa fa-key list-view-pf-icon-lg",
//css classes for the OTP Login Form
"kcSelectOTPListClass": "card-pf card-pf-view card-pf-view-select card-pf-view-single-select",
"kcSelectOTPListItemClass": "card-pf-body card-pf-top-element",
"kcAuthenticatorOtpCircleClass": "fa fa-mobile card-pf-icon-circle",
"kcSelectOTPItemHeadingClass": "card-pf-title text-center"
};
/** Tu use if you don't want any default */
export const allClearKcLoginPageProperties =
allPropertiesValuesToUndefined(defaultKcPagesProperties);

View File

@ -1,171 +0,0 @@
import { useState, memo } from "react";
import { Template } from "./Template";
import type { KcPagesProperties } from "./KcProperties";
import { defaultKcPagesProperties } from "./KcProperties";
import { assert } from "evt/tools/typeSafety/assert";
import { kcContext } from "../kcContext";
import { useKcTranslation } from "../i18n/useKcTranslation";
import { cx } from "tss-react";
import { useConstCallback } from "powerhooks";
export type LoginProps = {
kcProperties?: KcPagesProperties;
};
export const Login = memo((props: LoginProps) => {
const { kcProperties = {} } = props;
const { t, tStr } = useKcTranslation();
Object.assign(kcProperties, defaultKcPagesProperties);
const [{
social, realm, url,
usernameEditDisabled, login,
auth, registrationDisabled
}] = useState(() => (
assert(
kcContext !== undefined,
"App is currently being served by keycloak"
),
kcContext
));
const [isLoginButtonDisabled, setIsLoginButtonDisabled] = useState(false);
const onSubmit = useConstCallback(() =>
(setIsLoginButtonDisabled(true), true)
);
return (
<Template
displayInfo={social.displayInfo}
displayWide={realm.password && social.providers !== undefined}
kcProperties={kcProperties}
headerNode={t("doLogIn")}
showUsernameNode={null}
formNode={
<div
id="kc-form"
className={cx(realm.password && social.providers !== undefined && kcProperties.kcContentWrapperClass)}
>
<div
id="kc-form-wrapper"
className={cx(realm.password && social.providers && [kcProperties.kcFormSocialAccountContentClass, kcProperties.kcFormSocialAccountClass])}
>
{
realm.password &&
(
<form id="kc-form-login" onSubmit={onSubmit} action={url.loginAction} method="post">
<div className={cx(kcProperties.kcFormGroupClass)}>
<label htmlFor="username" className={cx(kcProperties.kcLabelClass)}>
{
!realm.loginWithEmailAllowed ?
t("username")
:
(
!realm.registrationEmailAsUsername ?
t("usernameOrEmail") :
t("email")
)
}
</label>
<input
tabIndex={1}
id="username"
className={cx(kcProperties.kcInputClass)}
name="username"
value={login.username ?? ''}
type="text"
{...(usernameEditDisabled ? { "disabled": true } : { "autofocus": true, "autocomplete": "off" })}
/>
</div>
<div className={cx(kcProperties.kcFormGroupClass)}>
<label htmlFor="password" className={cx(kcProperties.kcLabelClass)}>
{t("password")}
</label>
<input tabIndex={2} id="password" className={cx(kcProperties.kcInputClass)} name="password" type="password" autoComplete="off" />
</div>
<div className={cx(kcProperties.kcFormGroupClass, kcProperties.kcFormSettingClass)}>
<div id="kc-form-options">
{
(
realm.rememberMe &&
!usernameEditDisabled
) &&
<div className="checkbox">
<label>
<input tabIndex={3} id="rememberMe" name="rememberMe" type="checkbox" {...(login.rememberMe ? { "checked": true } : {})}> {t("rememberMe")}</input>
</label>
</div>
}
</div>
<div className={cx(kcProperties.kcFormOptionsWrapperClass)}>
{
realm.resetPasswordAllowed &&
<span>
<a tabIndex={5} href={url.loginResetCredentialsUrl}>{t("doForgotPassword")}</a>
</span>
}
</div>
</div>
<div id="kc-form-buttons" className={cx(kcProperties.kcFormGroupClass)}>
<input
type="hidden"
id="id-hidden-input"
name="credentialId"
{...(auth?.selectedCredential !== undefined ? { "value": auth.selectedCredential } : {})}
/>
<input
tabIndex={4}
className={cx(kcProperties.kcButtonClass, kcProperties.kcButtonPrimaryClass, kcProperties.kcButtonBlockClass, kcProperties.kcButtonLargeClass)} name="login" id="kc-login" type="submit"
value={tStr("doLogIn")}
disabled={isLoginButtonDisabled}
/>
</div>
</form>
)
}
</div>
{
(realm.password && social.providers !== undefined) &&
<div id="kc-social-providers" className={cx(kcProperties.kcFormSocialAccountContentClass, kcProperties.kcFormSocialAccountClass)}>
<ul className={cx(kcProperties.kcFormSocialAccountListClass, social.providers.length > 4 && kcProperties.kcFormSocialAccountDoubleListClass)}>
{
social.providers.map(p =>
<li className={cx(kcProperties.kcFormSocialAccountListLinkClass)}>
<a href={p.loginUrl} id={`zocial-${p.alias}`} className={cx("zocial", p.providerId)}>
<span>{p.displayName}</span>
</a>
</li>
)
}
</ul>
</div>
}
</div>
}
displayInfoNode={
(
realm.password &&
realm.resetPasswordAllowed &&
!registrationDisabled
) &&
<div id="kc-registration">
<span>
{t("noAccount")}
<a tabIndex={6} href={url.registrationUrl}>
{t("doRegister")}
</a>
</span>
</div>
}
/>
);
});

View File

@ -1,17 +1,7 @@
import { objectKeys } from "evt/tools/typeSafety/objectKeys"; import type { AvailableLanguages } from "./useKeycloakLanguage";
import { messages } from "./generated_messages/login";
export type KcLanguageTag = keyof typeof messages; export function getLanguageLabel(language: AvailableLanguages): LanguageLabel {
export type LanguageLabel =
/* spell-checker: disable */
"Deutsch" | "Norsk" | "Русский" | "Svenska" | "Português (Brasil)" | "Lietuvių" |
"English" | "Italiano" | "Français" | "中文简体" | "Español" | "Čeština" | "日本語" |
"Slovenčina" | "Polish" | "Català" | "Nederlands" | "tr";
/* spell-checker: enable */
export function getKcLanguageTagLabel(language: KcLanguageTag): LanguageLabel {
switch (language) { switch (language) {
/* spell-checker: disable */ /* spell-checker: disable */
@ -41,29 +31,9 @@ export function getKcLanguageTagLabel(language: KcLanguageTag): LanguageLabel {
} }
const availableLanguages = objectKeys(messages); export type LanguageLabel =
/* spell-checker: disable */
/** "Deutsch" | "Norsk" | "Русский" | "Svenska" | "Português (Brasil)" | "Lietuvių" |
* Pass in "fr-FR" or "français" for example, it will return the AvailableLanguage "English" | "Italiano" | "Français" | "中文简体" | "Español" | "Čeština" | "日本語" |
* it corresponds to: "fr". "Slovenčina" | "Polish" | "Català" | "Nederlands" | "tr";
* If there is no reasonable match it's guessed from navigator.language. /* spell-checker: enable */
* If still no matches "en" is returned.
*/
export function getBestMatchAmongKcLanguageTag(
languageLike: string
): KcLanguageTag {
const iso2LanguageLike = languageLike.split("-")[0].toLowerCase();
const language = availableLanguages.find(language =>
language.toLowerCase().includes(iso2LanguageLike) ||
getKcLanguageTagLabel(language).toLocaleLowerCase() === languageLike.toLocaleLowerCase()
);
if (language === undefined && languageLike !== navigator.language) {
return getBestMatchAmongKcLanguageTag(navigator.language);
}
return "en";
}

View File

@ -1,15 +0,0 @@
import { createUseGlobalState } from "powerhooks";
import { kcContext } from "../kcContext";
import { getBestMatchAmongKcLanguageTag } from "./KcLanguageTag";
import { assert } from "evt/tools/typeSafety/assert";
export const { useKcLanguageTag } = createUseGlobalState(
"kcLanguageTag",
() => getBestMatchAmongKcLanguageTag((
assert(kcContext !== undefined, "Page not served by KeyCloak"),
kcContext.locale?.["current" as never] ??
navigator.language
)),
{ "persistance": "cookies" }
);

View File

@ -1,43 +0,0 @@
import { useKcLanguageTag } from "./useKcLanguageTag";
import { messages } from "./generated_messages/login";
import { useConstCallback } from "powerhooks";
import type { ReactNode } from "react";
import { id } from "evt/tools/typeSafety/id";
export type MessageKey = keyof typeof messages["en"];
export function useKcTranslation() {
const { kcLanguageTag } = useKcLanguageTag();
const tStr = useConstCallback(
(key: MessageKey, ...args: (string | undefined)[]): string => {
let str: string = messages[kcLanguageTag as any as "en"][key] ?? messages["en"][key];
args.forEach((arg, i) => {
if (arg === undefined) {
return;
}
str = str.replace(new RegExp(`\\{${i}\\}`, "g"), arg);
});
return str;
}
);
const t = useConstCallback(
id<(...args: Parameters<typeof tStr>) => ReactNode>(
(key, ...args) =>
<span className={key} dangerouslySetInnerHTML={{ "__html": tStr(key, ...args) }} />
)
);
return { t, tStr };
}

View File

@ -0,0 +1,44 @@
import { createUseGlobalState } from "powerhooks";
import { messages } from "./generated_messages/login";
import { objectKeys } from "evt/tools/typeSafety/objectKeys";
import { getLanguageLabel } from "./getLanguageLabel";
import { keycloakPagesContext } from "../keycloakFtlValues";
const availableLanguages = objectKeys(messages);
export type AvailableLanguages = typeof availableLanguages[number];
export const { useKeycloakLanguage } = createUseGlobalState(
"keycloakLanguage",
() => getBestMatchAmongKeycloakAvailableLanguages(
keycloakPagesContext?.locale?.["current" as never] ??
navigator.language
),
{ "persistance": "cookies" }
);
/**
* Pass in "fr-FR" or "français" for example, it will return the AvailableLanguage
* it corresponds to: "fr".
* If there is no reasonable match it's guessed from navigator.language.
* If still no matches "en" is returned.
*/
export function getBestMatchAmongKeycloakAvailableLanguages(
languageLike: string
): AvailableLanguages {
const iso2LanguageLike = languageLike.split("-")[0].toLowerCase();
const language = availableLanguages.find(language =>
language.toLowerCase().includes(iso2LanguageLike) ||
getLanguageLabel(language).toLocaleLowerCase() === languageLike.toLocaleLowerCase()
);
if (language === undefined && languageLike !== navigator.language) {
return getBestMatchAmongKeycloakAvailableLanguages(navigator.language);
}
return "en";
}

View File

@ -0,0 +1,36 @@
import { useKeycloakLanguage } from "./useKeycloakLanguage";
import { messages } from "./generated_messages/login";
import { useConstCallback } from "powerhooks";
import type { ReactNode } from "react";
export type MessageKey = keyof typeof messages["en"]
export function useKeycloakThemeTranslation() {
const { keycloakLanguage } = useKeycloakLanguage();
const t = useConstCallback(
(key: MessageKey, ...args: (string | undefined)[]): ReactNode => {
let out: string = messages[keycloakLanguage as any as "en"][key] ?? messages["en"][key];
args.forEach((arg, i) => {
if (arg === undefined) {
return;
}
out = out.replace(new RegExp(`\\{${i}\\}`, "g"), arg);
});
return <span className={key} dangerouslySetInnerHTML={{ "__html": out }} />;
}
);
return { t };
}

View File

@ -1,9 +1,4 @@
export * from "./kcContext"; export * from "./keycloakFtlValues";
export * from "./i18n/useKeycloakLanguage";
export * from "./i18n/KcLanguageTag"; export * from "./i18n/useKeycloakTranslation";
export * from "./i18n/useKcLanguageTag"; export * from "./i18n/getLanguageLabel";
export * from "./i18n/useKcTranslation";
export * from "./components/KcProperties";
export * from "./components/Login";
export * from "./components/Template";

View File

@ -2,34 +2,28 @@
import { ftlValuesGlobalName } from "../bin/build-keycloak-theme/ftlValuesGlobalName"; import { ftlValuesGlobalName } from "../bin/build-keycloak-theme/ftlValuesGlobalName";
import type { generateFtlFilesCodeFactory } from "../bin/build-keycloak-theme/generateFtl"; import type { generateFtlFilesCodeFactory } from "../bin/build-keycloak-theme/generateFtl";
import { id } from "evt/tools/typeSafety/id"; import { id } from "evt/tools/typeSafety/id";
import type { KcLanguageTag } from "./i18n/KcLanguageTag"; //import type { LanguageLabel } from "./i18n/getLanguageLabel";
import type { AvailableLanguages } from "./i18n/useKeycloakLanguage";
export type KcContext = { export type KeycloakFtlValues = {
pageBasename: Parameters<ReturnType<typeof generateFtlFilesCodeFactory>["generateFtlFilesCode"]>[0]["pageBasename"]; pageBasename: Parameters<ReturnType<typeof generateFtlFilesCodeFactory>["generateFtlFilesCode"]>[0]["pageBasename"];
url: { url: {
loginAction: string; loginAction: string;
resourcesPath: string; resourcesPath: string;
resourcesCommonPath: string; resourcesCommonPath: string;
loginRestartFlowUrl: string; loginRestartFlowUrl: string;
loginResetCredentialsUrl: string; },
registrationUrl: string;
};
realm: { realm: {
displayName?: string; displayName?: string;
displayNameHtml?: string; displayNameHtml?: string;
internationalizationEnabled: boolean; internationalizationEnabled: boolean;
password: boolean; },
loginWithEmailAllowed: boolean;
registrationEmailAsUsername: boolean;
rememberMe: boolean;
resetPasswordAllowed: boolean;
};
/** Undefined if !realm.internationalizationEnabled */ /** Undefined if !realm.internationalizationEnabled */
locale?: { locale?: {
supported: { supported: {
//url: string; //url: string;
languageTag: KcLanguageTag; languageTag: AvailableLanguages;
/** Is determined by languageTag. Ex: languageTag === "en" => label === "English" /** Is determined by languageTag. Ex: languageTag === "en" => label === "English"
* or getLanguageLabel(languageTag) === label * or getLanguageLabel(languageTag) === label
*/ */
@ -44,29 +38,15 @@ export type KcContext = {
showResetCredentials: boolean; showResetCredentials: boolean;
showTryAnotherWayLink: boolean; showTryAnotherWayLink: boolean;
attemptedUsername?: boolean; attemptedUsername?: boolean;
selectedCredential?: string; },
};
scripts: string[]; scripts: string[];
message?: { message?: {
type: "success" | "warning" | "error" | "info"; type: "success" | "warning" | "error" | "info";
summary: string; summary: string;
}; },
isAppInitiatedAction: boolean; isAppInitiatedAction: boolean;
social: {
displayInfo: boolean;
providers?: {
loginUrl: string;
alias: string;
providerId: string;
displayName: string;
}[]
};
usernameEditDisabled: boolean;
login: {
username?: string;
rememberMe: boolean;
};
registrationDisabled: boolean;
}; };
export const kcContext = id<KcContext | undefined>((window as any)[ftlValuesGlobalName]); export const { keycloakPagesContext } =
{ [ftlValuesGlobalName]: id<KeycloakFtlValues | undefined>((window as any)[ftlValuesGlobalName]) };
;

View File

@ -1,10 +0,0 @@
import "minimal-polyfills/Object.fromEntries";
export function allPropertiesValuesToUndefined<T extends Record<string, unknown>>(obj: T): Record<keyof T, undefined> {
return Object.fromEntries(
Object.entries(obj)
.map(([key]) => [key, undefined])
) as any;
}

View File

@ -2,7 +2,7 @@
"compilerOptions": { "compilerOptions": {
"module": "CommonJS", "module": "CommonJS",
"target": "es5", "target": "es5",
"lib": ["es2015", "DOM", "ES2019.Object"], "lib": ["es2015", "DOM"],
"esModuleInterop": true, "esModuleInterop": true,
"declaration": true, "declaration": true,
"outDir": "./dist", "outDir": "./dist",

View File

@ -131,11 +131,6 @@
"signature": "c80df75850fea5caa2afe43b9949338ce4e2de086f91713e9af1a06f973872b8", "signature": "c80df75850fea5caa2afe43b9949338ce4e2de086f91713e9af1a06f973872b8",
"affectsGlobalScope": true "affectsGlobalScope": true
}, },
"../node_modules/typescript/lib/lib.es2019.object.d.ts": {
"version": "6c51b5dd26a2c31dbf37f00cfc32b2aa6a92e19c995aefb5b97a3a64f1ac99de",
"signature": "6c51b5dd26a2c31dbf37f00cfc32b2aa6a92e19c995aefb5b97a3a64f1ac99de",
"affectsGlobalScope": true
},
"../node_modules/typescript/lib/lib.es2020.bigint.d.ts": { "../node_modules/typescript/lib/lib.es2020.bigint.d.ts": {
"version": "7b5a10e3c897fabece5a51aa85b4111727d7adb53c2734b5d37230ff96802a09", "version": "7b5a10e3c897fabece5a51aa85b4111727d7adb53c2734b5d37230ff96802a09",
"signature": "7b5a10e3c897fabece5a51aa85b4111727d7adb53c2734b5d37230ff96802a09", "signature": "7b5a10e3c897fabece5a51aa85b4111727d7adb53c2734b5d37230ff96802a09",
@ -282,13 +277,13 @@
"affectsGlobalScope": false "affectsGlobalScope": false
}, },
"../src/bin/tools/downloadAndUnzip.ts": { "../src/bin/tools/downloadAndUnzip.ts": {
"version": "b89489224a2f4b7172c50f8e3f667a5e71d119b3f01113a8885448fe6fd73ed8", "version": "8fa092b1883d7c37682d5cedac52cf42a8bde33adf0c6329c75c20fa94cb9203",
"signature": "4fdfe9418b5a6a5b03a719ab67e03a3a393129c129ec1d01e5cb06d8b5ce7104", "signature": "4fdfe9418b5a6a5b03a719ab67e03a3a393129c129ec1d01e5cb06d8b5ce7104",
"affectsGlobalScope": false "affectsGlobalScope": false
}, },
"../src/bin/build-keycloak-theme/ftlValuesGlobalName.ts": { "../src/bin/build-keycloak-theme/ftlValuesGlobalName.ts": {
"version": "f7cca39a25069f9eade9ecd19429d68d46f33981ae10801cd9ebc5686194737a", "version": "e2234455ea2b73e12ffae5c6b694829c57ed0187fdce2b56ae8f84af109ff7ab",
"signature": "f433ba7538e542cf157faa77f7ed388de070cab33fd699e16cd94c833d87226b", "signature": "a6a3e3f3938990c0ac7cfd0199654d42675100d82eee03da4ed5a065a2b8534d",
"affectsGlobalScope": false "affectsGlobalScope": false
}, },
"../src/bin/build-keycloak-theme/generateKeycloakThemeResources.ts": { "../src/bin/build-keycloak-theme/generateKeycloakThemeResources.ts": {
@ -331,24 +326,9 @@
"signature": "8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881", "signature": "8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881",
"affectsGlobalScope": false "affectsGlobalScope": false
}, },
"../node_modules/evt/tools/typeSafety/id.d.ts": { "../src/lib/LoginPage.tsx": {
"version": "9b4cbbc5d76a0e78a053503ed153a83f48799f1519e3aef593cb0987700704b8", "version": "6e1a9037c36fb289e5b26e099be9a6cf5904e4685b32634eb37024bc77104cde",
"signature": "9b4cbbc5d76a0e78a053503ed153a83f48799f1519e3aef593cb0987700704b8", "signature": "8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881",
"affectsGlobalScope": false
},
"../src/lib/i18n/generated_messages/login.ts": {
"version": "d0ef29558975516f5df6f56981b3f1ec3582d3535050134421c953999ac9c187",
"signature": "132a7be6c96260e3171ea263eeb06a1117d9d97851afcc0c351258e37d39bee5",
"affectsGlobalScope": false
},
"../src/lib/i18n/KcLanguageTag.ts": {
"version": "fb5d82e0a3d72698401c823e8c672f8bb10e3fbc7b4f1e22b0c0ef9d72b62d71",
"signature": "32a51753658af81ebb7e4139a1085f625e18bd0cb67d1027f30481967d7c69fd",
"affectsGlobalScope": false
},
"../src/lib/kcContext.ts": {
"version": "970a58f22d4aacd16cf980064551817b9f3b11dc71a07021aedddf3d6f630374",
"signature": "7aa2e369c6d81452ce8bf8fe3d7e136b7151e85036b897cb015db462af96d08d",
"affectsGlobalScope": false "affectsGlobalScope": false
}, },
"../node_modules/powerhooks/useArrayDiff.d.ts": { "../node_modules/powerhooks/useArrayDiff.d.ts": {
@ -421,36 +401,41 @@
"signature": "842cf60645647486885d3d7c146e23e976782458b50ade9116c01334132dbe60", "signature": "842cf60645647486885d3d7c146e23e976782458b50ade9116c01334132dbe60",
"affectsGlobalScope": false "affectsGlobalScope": false
}, },
"../src/lib/i18n/generated_messages/login.ts": {
"version": "d0ef29558975516f5df6f56981b3f1ec3582d3535050134421c953999ac9c187",
"signature": "132a7be6c96260e3171ea263eeb06a1117d9d97851afcc0c351258e37d39bee5",
"affectsGlobalScope": false
},
"../src/lib/i18n/getLanguageLabel.ts": {
"version": "ee36fe1507770f9b227839cd107746a4d65d5bb057b994d6b76f03b4308b87fd",
"signature": "2b6288ae572cb54ba4bb9306904c6c58a4b874f833829cb40eb12a3777c8ce28",
"affectsGlobalScope": false
},
"../node_modules/evt/tools/typeSafety/id.d.ts": {
"version": "9b4cbbc5d76a0e78a053503ed153a83f48799f1519e3aef593cb0987700704b8",
"signature": "9b4cbbc5d76a0e78a053503ed153a83f48799f1519e3aef593cb0987700704b8",
"affectsGlobalScope": false
},
"../src/lib/keycloakFtlValues.ts": {
"version": "c54ff5f00b00ea2b749111b44d591fb53face4c1517332e11fa07aef2da766e3",
"signature": "e394ca5507b65dbfbf54256c32fab2c1b71d15135025a467ac87d968d5d59655",
"affectsGlobalScope": false
},
"../src/lib/i18n/useKeycloakLanguage.ts": {
"version": "dfbf6417d0e2e10ca0ad485a0ec54c0e681512490df4ea946868852e4fce23d4",
"signature": "b03730ceb41dd050b1c3723327e29775905de7efc565957b4b5bf0768da1ed94",
"affectsGlobalScope": false
},
"../src/lib/i18n/useKeycloakTranslation.tsx": {
"version": "d8f149429e2fd893654831be56b8a664b97da41d386a1f51b24e328b224d7f10",
"signature": "4421afada3ed04e56a9c3e67ec48cfcabf90e085a861f8ca930cbf0fe25188ee",
"affectsGlobalScope": false
},
"../node_modules/evt/tools/typeSafety/assert.d.ts": { "../node_modules/evt/tools/typeSafety/assert.d.ts": {
"version": "ce5d5fee87218d3b112beb80802ffa8cc6622f07984d59b88cb784f4002272ea", "version": "ce5d5fee87218d3b112beb80802ffa8cc6622f07984d59b88cb784f4002272ea",
"signature": "ce5d5fee87218d3b112beb80802ffa8cc6622f07984d59b88cb784f4002272ea", "signature": "ce5d5fee87218d3b112beb80802ffa8cc6622f07984d59b88cb784f4002272ea",
"affectsGlobalScope": false "affectsGlobalScope": false
}, },
"../src/lib/i18n/useKcLanguageTag.ts": {
"version": "6680e1b2735f9a06a09b7a4fd0f56d4a2ef97894b5f41123cd1990d4c4e4d4da",
"signature": "bd7e7f53e7ef1bbd48435b731f7437eeb1fcd2b93d16382f442801b8e48a81cb",
"affectsGlobalScope": false
},
"../src/lib/i18n/useKcTranslation.tsx": {
"version": "b7ff7d6a60f789876e4c1989e9ce07638dcd72fbc89d346669bfd8c6b13d78b1",
"signature": "da6283e16140fbb9da517f6cc8158c0c04cbf1d6a3b82029ba3c6009d7c33ddf",
"affectsGlobalScope": false
},
"../node_modules/minimal-polyfills/Object.fromEntries.d.ts": {
"version": "8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881",
"signature": "8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881",
"affectsGlobalScope": false
},
"../src/lib/tools/allPropertiesValuesToUndefined.ts": {
"version": "f93662dd9db384afbb0bd5f18385df5d18250dd408750c34a0aacad632c0712b",
"signature": "0def15cba1960127b829b47cb9e6e3f1600aac348a2a311d99982318f6490f0c",
"affectsGlobalScope": false
},
"../src/lib/components/KcProperties.ts": {
"version": "cd17ad026db3b1770c0ea4821dee99abb6f4ad6984c62a9ed40f2074241c4951",
"signature": "7f2609e4fb3874e4e64ee05452003f061fa2850f32f5f27d71fffc95f8c31e54",
"affectsGlobalScope": false
},
"../node_modules/@emotion/utils/types/index.d.ts": { "../node_modules/@emotion/utils/types/index.d.ts": {
"version": "4b46f4712ae966996b2cc81949d482063887c55478706e25d942482a44b99b71", "version": "4b46f4712ae966996b2cc81949d482063887c55478706e25d942482a44b99b71",
"signature": "4b46f4712ae966996b2cc81949d482063887c55478706e25d942482a44b99b71", "signature": "4b46f4712ae966996b2cc81949d482063887c55478706e25d942482a44b99b71",
@ -496,19 +481,14 @@
"signature": "21f2e40dfae1bc0a1dab00a004cb49f93209f49231d129d09277b297dec07525", "signature": "21f2e40dfae1bc0a1dab00a004cb49f93209f49231d129d09277b297dec07525",
"affectsGlobalScope": false "affectsGlobalScope": false
}, },
"../src/lib/components/Template.tsx": { "../src/lib/Template.tsx": {
"version": "af3ea6a4e66450806d52241b9ee46a406de8560e363cf7fd2d09e0aa9d0891c6", "version": "fba25529d281bab712c3da5dd513ba1f77fcf1a957a8814fbcfe11880baf0e13",
"signature": "5819531407c279a04fb2fa379d807999f30757996e561d95769ab661837cfa00", "signature": "eb92c0a47d38b07a3f9587bf6b473a4ae14371595dfba41e8f36bc9fc20bf0a9",
"affectsGlobalScope": false
},
"../src/lib/components/Login.tsx": {
"version": "a3dd428187b4594b82ec3a70cf278dcc0613985090b4aa89366eaf7954067198",
"signature": "b140c6befa7cffb7a1ba17cd337326993258beb795aa99d9495c01727cd732da",
"affectsGlobalScope": false "affectsGlobalScope": false
}, },
"../src/lib/index.ts": { "../src/lib/index.ts": {
"version": "57ce3866aa67ccd2a899eaa6deea5c60452edb5bcfdefed7fdd3f757387f8de6", "version": "8baee7ac19e659661ccbfaa9447bf106bcca907c505ad6afdeab78e6b6846e5c",
"signature": "ede4a52c319dbd5e4af56958957e4881904104cff5b5d25adb3c1c095e0dc7f1", "signature": "38e39be533e70bd563f6de8762c11f27d97a1162bb121ca7d2614703b38e15d7",
"affectsGlobalScope": false "affectsGlobalScope": false
}, },
"../src/lib/i18n/generated_messages/account.ts": { "../src/lib/i18n/generated_messages/account.ts": {
@ -792,8 +772,7 @@
"target": 1, "target": 1,
"lib": [ "lib": [
"lib.es2015.d.ts", "lib.es2015.d.ts",
"lib.dom.d.ts", "lib.dom.d.ts"
"lib.es2019.object.d.ts"
], ],
"esModuleInterop": true, "esModuleInterop": true,
"declaration": true, "declaration": true,
@ -1169,41 +1148,23 @@
"../node_modules/@types/react/jsx-runtime.d.ts", "../node_modules/@types/react/jsx-runtime.d.ts",
"../src/bin/tools/crawl.ts" "../src/bin/tools/crawl.ts"
], ],
"../src/lib/components/KcProperties.ts": [ "../src/lib/LoginPage.tsx": [
"../node_modules/@types/react/jsx-runtime.d.ts", "../node_modules/@types/react/jsx-runtime.d.ts"
"../src/lib/tools/allPropertiesValuesToUndefined.ts"
], ],
"../src/lib/components/Login.tsx": [ "../src/lib/Template.tsx": [
"../node_modules/@types/react/index.d.ts",
"../node_modules/@types/react/jsx-runtime.d.ts",
"../node_modules/evt/tools/typeSafety/assert.d.ts",
"../node_modules/powerhooks/index.d.ts",
"../node_modules/tss-react/index.d.ts",
"../src/lib/components/KcProperties.ts",
"../src/lib/components/Template.tsx",
"../src/lib/i18n/useKcTranslation.tsx",
"../src/lib/kcContext.ts"
],
"../src/lib/components/Template.tsx": [
"../node_modules/@types/node/path.d.ts", "../node_modules/@types/node/path.d.ts",
"../node_modules/@types/react/index.d.ts", "../node_modules/@types/react/index.d.ts",
"../node_modules/@types/react/jsx-runtime.d.ts", "../node_modules/@types/react/jsx-runtime.d.ts",
"../node_modules/evt/tools/typeSafety/assert.d.ts", "../node_modules/evt/tools/typeSafety/assert.d.ts",
"../node_modules/powerhooks/index.d.ts", "../node_modules/powerhooks/index.d.ts",
"../node_modules/tss-react/index.d.ts", "../node_modules/tss-react/index.d.ts",
"../src/lib/components/KcProperties.ts", "../src/lib/i18n/getLanguageLabel.ts",
"../src/lib/i18n/KcLanguageTag.ts", "../src/lib/i18n/useKeycloakLanguage.ts",
"../src/lib/i18n/useKcLanguageTag.ts", "../src/lib/i18n/useKeycloakTranslation.tsx",
"../src/lib/i18n/useKcTranslation.tsx", "../src/lib/keycloakFtlValues.ts",
"../src/lib/kcContext.ts",
"../src/lib/tools/appendLinkInHead.ts", "../src/lib/tools/appendLinkInHead.ts",
"../src/lib/tools/appendScriptInHead.ts" "../src/lib/tools/appendScriptInHead.ts"
], ],
"../src/lib/i18n/KcLanguageTag.ts": [
"../node_modules/@types/react/jsx-runtime.d.ts",
"../node_modules/evt/tools/typeSafety/objectKeys.d.ts",
"../src/lib/i18n/generated_messages/login.ts"
],
"../src/lib/i18n/generated_messages/account.ts": [ "../src/lib/i18n/generated_messages/account.ts": [
"../node_modules/@types/react/jsx-runtime.d.ts" "../node_modules/@types/react/jsx-runtime.d.ts"
], ],
@ -1216,41 +1177,38 @@
"../src/lib/i18n/generated_messages/login.ts": [ "../src/lib/i18n/generated_messages/login.ts": [
"../node_modules/@types/react/jsx-runtime.d.ts" "../node_modules/@types/react/jsx-runtime.d.ts"
], ],
"../src/lib/i18n/useKcLanguageTag.ts": [ "../src/lib/i18n/getLanguageLabel.ts": [
"../node_modules/@types/react/jsx-runtime.d.ts", "../node_modules/@types/react/jsx-runtime.d.ts",
"../node_modules/evt/tools/typeSafety/assert.d.ts", "../src/lib/i18n/useKeycloakLanguage.ts"
"../node_modules/powerhooks/index.d.ts",
"../src/lib/i18n/KcLanguageTag.ts",
"../src/lib/kcContext.ts"
], ],
"../src/lib/i18n/useKcTranslation.tsx": [ "../src/lib/i18n/useKeycloakLanguage.ts": [
"../node_modules/@types/react/index.d.ts",
"../node_modules/@types/react/jsx-runtime.d.ts", "../node_modules/@types/react/jsx-runtime.d.ts",
"../node_modules/evt/tools/typeSafety/id.d.ts", "../node_modules/evt/tools/typeSafety/objectKeys.d.ts",
"../node_modules/powerhooks/index.d.ts", "../node_modules/powerhooks/index.d.ts",
"../src/lib/i18n/generated_messages/login.ts", "../src/lib/i18n/generated_messages/login.ts",
"../src/lib/i18n/useKcLanguageTag.ts" "../src/lib/i18n/getLanguageLabel.ts",
"../src/lib/keycloakFtlValues.ts"
],
"../src/lib/i18n/useKeycloakTranslation.tsx": [
"../node_modules/@types/react/index.d.ts",
"../node_modules/@types/react/jsx-runtime.d.ts",
"../node_modules/powerhooks/index.d.ts",
"../src/lib/i18n/generated_messages/login.ts",
"../src/lib/i18n/useKeycloakLanguage.ts"
], ],
"../src/lib/index.ts": [ "../src/lib/index.ts": [
"../node_modules/@types/react/jsx-runtime.d.ts", "../node_modules/@types/react/jsx-runtime.d.ts",
"../src/lib/components/KcProperties.ts", "../src/lib/i18n/getLanguageLabel.ts",
"../src/lib/components/Login.tsx", "../src/lib/i18n/useKeycloakLanguage.ts",
"../src/lib/components/Template.tsx", "../src/lib/i18n/useKeycloakTranslation.tsx",
"../src/lib/i18n/KcLanguageTag.ts", "../src/lib/keycloakFtlValues.ts"
"../src/lib/i18n/useKcLanguageTag.ts",
"../src/lib/i18n/useKcTranslation.tsx",
"../src/lib/kcContext.ts"
], ],
"../src/lib/kcContext.ts": [ "../src/lib/keycloakFtlValues.ts": [
"../node_modules/@types/react/jsx-runtime.d.ts", "../node_modules/@types/react/jsx-runtime.d.ts",
"../node_modules/evt/tools/typeSafety/id.d.ts", "../node_modules/evt/tools/typeSafety/id.d.ts",
"../src/bin/build-keycloak-theme/ftlValuesGlobalName.ts", "../src/bin/build-keycloak-theme/ftlValuesGlobalName.ts",
"../src/bin/build-keycloak-theme/generateFtl/index.ts", "../src/bin/build-keycloak-theme/generateFtl/index.ts",
"../src/lib/i18n/KcLanguageTag.ts" "../src/lib/i18n/useKeycloakLanguage.ts"
],
"../src/lib/tools/allPropertiesValuesToUndefined.ts": [
"../node_modules/@types/react/jsx-runtime.d.ts",
"../node_modules/minimal-polyfills/Object.fromEntries.d.ts"
], ],
"../src/lib/tools/appendLinkInHead.ts": [ "../src/lib/tools/appendLinkInHead.ts": [
"../node_modules/@types/react/jsx-runtime.d.ts" "../node_modules/@types/react/jsx-runtime.d.ts"
@ -1559,39 +1517,28 @@
"../node_modules/@emotion/css/types/index.d.ts", "../node_modules/@emotion/css/types/index.d.ts",
"../node_modules/@emotion/serialize/types/index.d.ts" "../node_modules/@emotion/serialize/types/index.d.ts"
], ],
"../src/lib/components/Login.tsx": [ "../src/lib/Template.tsx": [
"../node_modules/@types/react/index.d.ts", "../node_modules/@types/react/index.d.ts"
"../src/lib/components/KcProperties.ts"
], ],
"../src/lib/components/Template.tsx": [ "../src/lib/i18n/getLanguageLabel.ts": [
"../node_modules/@types/react/index.d.ts", "../src/lib/i18n/useKeycloakLanguage.ts"
"../src/lib/components/KcProperties.ts"
], ],
"../src/lib/i18n/KcLanguageTag.ts": [ "../src/lib/i18n/useKeycloakLanguage.ts": [
"../src/lib/i18n/generated_messages/login.ts"
],
"../src/lib/i18n/useKcLanguageTag.ts": [
"../node_modules/powerhooks/index.d.ts" "../node_modules/powerhooks/index.d.ts"
], ],
"../src/lib/i18n/useKcTranslation.tsx": [ "../src/lib/i18n/useKeycloakTranslation.tsx": [
"../node_modules/@types/react/index.d.ts", "../node_modules/@types/react/index.d.ts",
"../src/lib/i18n/generated_messages/login.ts" "../src/lib/i18n/generated_messages/login.ts"
], ],
"../src/lib/index.ts": [ "../src/lib/index.ts": [
"../src/lib/components/KcProperties.ts", "../src/lib/i18n/getLanguageLabel.ts",
"../src/lib/components/Login.tsx", "../src/lib/i18n/useKeycloakLanguage.ts",
"../src/lib/components/Template.tsx", "../src/lib/i18n/useKeycloakTranslation.tsx",
"../src/lib/i18n/KcLanguageTag.ts", "../src/lib/keycloakFtlValues.ts"
"../src/lib/i18n/useKcLanguageTag.ts",
"../src/lib/i18n/useKcTranslation.tsx",
"../src/lib/kcContext.ts"
], ],
"../src/lib/kcContext.ts": [ "../src/lib/keycloakFtlValues.ts": [
"../src/bin/build-keycloak-theme/generateFtl/index.ts", "../src/bin/build-keycloak-theme/generateFtl/index.ts",
"../src/lib/i18n/KcLanguageTag.ts" "../src/lib/i18n/useKeycloakLanguage.ts"
],
"../src/lib/tools/allPropertiesValuesToUndefined.ts": [
"../node_modules/minimal-polyfills/Object.fromEntries.d.ts"
] ]
}, },
"semanticDiagnosticsPerFile": [ "semanticDiagnosticsPerFile": [
@ -1671,7 +1618,6 @@
"../node_modules/htmlparser2/lib/Parser.d.ts", "../node_modules/htmlparser2/lib/Parser.d.ts",
"../node_modules/htmlparser2/lib/Tokenizer.d.ts", "../node_modules/htmlparser2/lib/Tokenizer.d.ts",
"../node_modules/htmlparser2/lib/index.d.ts", "../node_modules/htmlparser2/lib/index.d.ts",
"../node_modules/minimal-polyfills/Object.fromEntries.d.ts",
"../node_modules/powerhooks/index.d.ts", "../node_modules/powerhooks/index.d.ts",
"../node_modules/powerhooks/useArrayDiff.d.ts", "../node_modules/powerhooks/useArrayDiff.d.ts",
"../node_modules/powerhooks/useCallbackFactory.d.ts", "../node_modules/powerhooks/useCallbackFactory.d.ts",
@ -1714,7 +1660,6 @@
"../node_modules/typescript/lib/lib.es2018.intl.d.ts", "../node_modules/typescript/lib/lib.es2018.intl.d.ts",
"../node_modules/typescript/lib/lib.es2018.promise.d.ts", "../node_modules/typescript/lib/lib.es2018.promise.d.ts",
"../node_modules/typescript/lib/lib.es2018.regexp.d.ts", "../node_modules/typescript/lib/lib.es2018.regexp.d.ts",
"../node_modules/typescript/lib/lib.es2019.object.d.ts",
"../node_modules/typescript/lib/lib.es2020.bigint.d.ts", "../node_modules/typescript/lib/lib.es2020.bigint.d.ts",
"../node_modules/typescript/lib/lib.es5.d.ts", "../node_modules/typescript/lib/lib.es5.d.ts",
"../node_modules/typescript/lib/lib.esnext.intl.d.ts", "../node_modules/typescript/lib/lib.esnext.intl.d.ts",
@ -1732,19 +1677,17 @@
"../src/bin/tools/getProjectRoot.ts", "../src/bin/tools/getProjectRoot.ts",
"../src/bin/tools/grant-exec-perms.ts", "../src/bin/tools/grant-exec-perms.ts",
"../src/bin/tools/transformCodebase.ts", "../src/bin/tools/transformCodebase.ts",
"../src/lib/components/KcProperties.ts", "../src/lib/LoginPage.tsx",
"../src/lib/components/Login.tsx", "../src/lib/Template.tsx",
"../src/lib/components/Template.tsx",
"../src/lib/i18n/KcLanguageTag.ts",
"../src/lib/i18n/generated_messages/account.ts", "../src/lib/i18n/generated_messages/account.ts",
"../src/lib/i18n/generated_messages/admin.ts", "../src/lib/i18n/generated_messages/admin.ts",
"../src/lib/i18n/generated_messages/email.ts", "../src/lib/i18n/generated_messages/email.ts",
"../src/lib/i18n/generated_messages/login.ts", "../src/lib/i18n/generated_messages/login.ts",
"../src/lib/i18n/useKcLanguageTag.ts", "../src/lib/i18n/getLanguageLabel.ts",
"../src/lib/i18n/useKcTranslation.tsx", "../src/lib/i18n/useKeycloakLanguage.ts",
"../src/lib/i18n/useKeycloakTranslation.tsx",
"../src/lib/index.ts", "../src/lib/index.ts",
"../src/lib/kcContext.ts", "../src/lib/keycloakFtlValues.ts",
"../src/lib/tools/allPropertiesValuesToUndefined.ts",
"../src/lib/tools/appendLinkInHead.ts", "../src/lib/tools/appendLinkInHead.ts",
"../src/lib/tools/appendScriptInHead.ts", "../src/lib/tools/appendScriptInHead.ts",
"../src/test/build-keycloak-theme.ts", "../src/test/build-keycloak-theme.ts",

View File

@ -816,7 +816,7 @@ memoizee@^0.4.15:
next-tick "^1.1.0" next-tick "^1.1.0"
timers-ext "^0.1.7" timers-ext "^0.1.7"
minimal-polyfills@^2.1.5, minimal-polyfills@^2.1.6: minimal-polyfills@^2.1.5:
version "2.1.6" version "2.1.6"
resolved "https://registry.yarnpkg.com/minimal-polyfills/-/minimal-polyfills-2.1.6.tgz#eab50832add31afd40a22b38fb76d1fdcd2a51e4" resolved "https://registry.yarnpkg.com/minimal-polyfills/-/minimal-polyfills-2.1.6.tgz#eab50832add31afd40a22b38fb76d1fdcd2a51e4"
integrity sha512-vqoxj7eMzsqX0M6/dkgoNFPw6Mztgn5qjSl0bWGboQeU7Y4UPLeyoqQw6JI+0qmBcJYdkr3nK7dqY8u/fgRp5g== integrity sha512-vqoxj7eMzsqX0M6/dkgoNFPw6Mztgn5qjSl0bWGboQeU7Y4UPLeyoqQw6JI+0qmBcJYdkr3nK7dqY8u/fgRp5g==