Compare commits

..

32 Commits

Author SHA1 Message Date
071635ea05 Enabling shorter import paths [automatic] 2021-03-02 23:06:50 +00:00
ec2b085855 Update changelog v0.0.27 2021-03-02 23:05:59 +00:00
305d5b7328 Merge branch 'develop' of https://github.com/garronej/keycloak-react-theming into develop 2021-03-03 00:04:28 +01:00
deb4ddaed2 Bump version (changelog ignore) 2021-03-03 00:04:26 +01:00
379f052e6e Implement entrypoint 2021-03-03 00:04:06 +01:00
2f592ab38c Update changelog v0.0.26 2021-03-02 22:50:08 +00:00
43c412405a Login page implemented 2021-03-02 23:48:31 +01:00
7f6ab1d391 Merge branch 'develop' of https://github.com/garronej/keycloak-react-theming into develop 2021-03-02 22:48:42 +01:00
e5e39d036d Implement login 2021-03-02 22:48:36 +01:00
6a93c6e894 remove unesseary log 2021-03-02 12:19:12 +01:00
069262c83d Update changelog v0.0.25 2021-03-02 11:19:07 +00:00
69f017df36 Fix build and reduce size 2021-03-02 12:17:24 +01:00
63ccb0609e Merge branch 'develop' of https://github.com/garronej/keycloak-react-theming into develop 2021-03-02 01:05:22 +01:00
292881532a Implement the template 2021-03-02 01:05:15 +01:00
d35eac9661 Update changelog v0.0.24 2021-03-01 20:00:22 +00:00
f92488b80d update 2021-03-01 20:58:50 +01:00
46c482d098 update 2021-03-01 20:56:05 +01:00
1bd05d22c3 Merge branch 'develop' of https://github.com/garronej/keycloak-react-theming into develop 2021-03-01 20:52:19 +01:00
9e51ef90c0 update 2021-03-01 20:52:14 +01:00
b6fadad6cc Update changelog v0.0.23 2021-03-01 19:52:03 +00:00
193f66c843 Merge branch 'develop' of https://github.com/garronej/keycloak-react-theming into develop 2021-03-01 20:50:38 +01:00
c3459106d6 update 2021-03-01 20:50:13 +01:00
931ce161d7 Update changelog v0.0.23 2021-03-01 19:49:56 +00:00
83ebf93f2a Update changelog v0.0.23 2021-03-01 19:49:37 +00:00
84b9909931 update 2021-03-01 20:48:30 +01:00
8d91ea6307 Merge branch 'develop' of https://github.com/garronej/keycloak-react-theming into develop 2021-03-01 20:47:59 +01:00
fa99d8dd9a update 2021-03-01 20:47:53 +01:00
67243ecfc6 Update changelog v0.0.23 2021-03-01 19:47:44 +00:00
6cfefd7fbd Merge branch 'develop' of https://github.com/garronej/keycloak-react-theming into develop 2021-03-01 20:45:44 +01:00
f599df2bb7 update 2021-03-01 20:45:37 +01:00
57a0d9f10f Bump version (changelog ignore) 2021-03-01 13:56:18 +01:00
34902b54e4 Handle formatting in translation function 2021-03-01 13:55:58 +01:00
91 changed files with 2475 additions and 405 deletions

6
.gitattributes vendored
View File

@ -1,3 +1,3 @@
src/lib/i18n/generated_messages linguist-vendored=false
src/bin/download-sample-keycloak-themes.ts linguist-vendored=false
src/bin/build-keycloak-theme/index.ts linguist-vendored=false
src/lib/i18n/generated_messages/* linguist-documentation
src/bin/build-keycloak-theme/index.ts -linguist-detectable
src/bin/download-sample-keycloak-themes.ts -linguist-detectable

View File

@ -1,3 +1,43 @@
### **0.0.27** (2021-03-02)
- Implement entrypoint
### **0.0.26** (2021-03-02)
- Login page implemented
- Implement login
- remove unesseary log
### **0.0.25** (2021-03-02)
- Fix build and reduce size
- Implement the template
### **0.0.24** (2021-03-01)
- update
- update
- update
### **0.0.23** (2021-03-01)
- update
### **0.0.23** (2021-03-01)
- update
- update
### **0.0.23** (2021-03-01)
- update
- update
### **0.0.23** (2021-03-01)
- update
- Handle formatting in translation function
### **0.0.22** (2021-02-28)
- Split page messages

View File

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

View File

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

View File

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

View File

@ -4,12 +4,19 @@
"loginAction": "${url.loginAction}",
"resourcesPath": "${url.resourcesPath}",
"resourcesCommonPath": "${url.resourcesCommonPath}",
"loginRestartFlowUrl": "${url.loginRestartFlowUrl}"
"loginRestartFlowUrl": "${url.loginRestartFlowUrl}",
"loginResetCredentialsUrl": "${url.loginResetCredentialsUrl}",
"registrationUrl": "${url.registrationUrl}"
},
"realm": {
"displayName": "${realm.displayName!''}" || 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 (){
@ -54,6 +61,7 @@
"showUsername": ${auth.showUsername()?c},
"showResetCredentials": ${auth.showResetCredentials()?c},
"showTryAnotherWayLink": ${auth.showTryAnotherWayLink()?c}
"selectedCredential": "${auth.selectedCredential!''}" || undefined
};
<#if auth.showUsername() && !auth.showResetCredentials()>
@ -79,7 +87,7 @@
<#if scripts??>
<#list scripts as script>
out.push("${script}");
out.push("${script}");
</#list>
</#if>
@ -107,7 +115,59 @@
</#if>
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>

View File

@ -60,7 +60,7 @@ function generateFtlFilesCodeFactory(params) {
if (!(href === null || href === void 0 ? void 0 : href.startsWith("/"))) {
return;
}
$(element).attr(attrName, "${url.resourcesPath}" + href);
$(element).attr(attrName, "${url.resourcesPath}/build" + href);
});
});
//FTL is no valid html, we can't insert with cheerio, we put placeholder for injecting later.

View File

@ -1 +1 @@
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/bin/build-keycloak-theme/generateFtl/index.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/bin/build-keycloak-theme/generateFtl/index.ts"],"names":[],"mappings":"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"}

View File

@ -1,4 +1,3 @@
export declare const ftlValuesGlobalName = "keycloakPagesContext";
export declare function generateKeycloakThemeResources(params: {
themeName: string;
reactAppBuildDirPath: string;

View File

@ -30,19 +30,22 @@ var __importStar = (this && this.__importStar) || function (mod) {
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.generateKeycloakThemeResources = exports.ftlValuesGlobalName = void 0;
exports.generateKeycloakThemeResources = void 0;
var transformCodebase_1 = require("../tools/transformCodebase");
var fs = __importStar(require("fs"));
var path_1 = require("path");
var replaceImportFromStatic_1 = require("./replaceImportFromStatic");
var generateFtl_1 = require("./generateFtl");
exports.ftlValuesGlobalName = "keycloakPagesContext";
var download_sample_keycloak_themes_1 = require("../download-sample-keycloak-themes");
var downloadAndUnzip_1 = require("../tools/downloadAndUnzip");
var child_process = __importStar(require("child_process"));
var ftlValuesGlobalName_1 = require("./ftlValuesGlobalName");
function generateKeycloakThemeResources(params) {
var themeName = params.themeName, reactAppBuildDirPath = params.reactAppBuildDirPath, keycloakThemeBuildingDirPath = params.keycloakThemeBuildingDirPath;
var themeDirPath = path_1.join(keycloakThemeBuildingDirPath, "src", "main", "resources", "theme", themeName, "login");
var allCssGlobalsToDefine = {};
transformCodebase_1.transformCodebase({
"destDirPath": path_1.join(themeDirPath, "resources"),
"destDirPath": path_1.join(themeDirPath, "resources", "build"),
"srcDirPath": reactAppBuildDirPath,
"transformSourceCodeString": function (_a) {
var filePath = _a.filePath, sourceCode = _a.sourceCode;
@ -54,7 +57,7 @@ function generateKeycloakThemeResources(params) {
if (/\.js?$/i.test(filePath)) {
var fixedJsCode = replaceImportFromStatic_1.replaceImportFromStaticInJsCode({
"jsCode": sourceCode.toString("utf8"),
ftlValuesGlobalName: exports.ftlValuesGlobalName
ftlValuesGlobalName: ftlValuesGlobalName_1.ftlValuesGlobalName
}).fixedJsCode;
return { "modifiedSourceCode": Buffer.from(fixedJsCode, "utf8") };
}
@ -63,14 +66,27 @@ function generateKeycloakThemeResources(params) {
});
var generateFtlFilesCode = generateFtl_1.generateFtlFilesCodeFactory({
"cssGlobalsToDefine": allCssGlobalsToDefine,
ftlValuesGlobalName: exports.ftlValuesGlobalName,
ftlValuesGlobalName: ftlValuesGlobalName_1.ftlValuesGlobalName,
"indexHtmlCode": fs.readFileSync(path_1.join(reactAppBuildDirPath, "index.html")).toString("utf8")
}).generateFtlFilesCode;
["login.ftl", "register.ftl"].forEach(function (pageBasename) {
var ftlCode = generateFtlFilesCode({ pageBasename: pageBasename }).ftlCode;
fs.writeFileSync(path_1.join(themeDirPath, pageBasename), Buffer.from(ftlCode, "utf8"));
});
fs.writeFileSync(path_1.join(themeDirPath, "theme.properties"), Buffer.from("parent=base\n", "utf8"));
{
var destDirPath = path_1.join(themeDirPath, "..", "tmp_xxKdLpdIdLd");
downloadAndUnzip_1.downloadAndUnzip({
"url": download_sample_keycloak_themes_1.keycloakBuiltinThemesAndThirdPartyExamplesThemsUrl,
destDirPath: destDirPath
});
child_process.execSync([
"mv",
path_1.join("keycloak", "common"),
path_1.join("..", "common")
].join(" "), { "cwd": destDirPath });
child_process.execSync("rm -r " + destDirPath);
}
fs.writeFileSync(path_1.join(themeDirPath, "theme.properties"), Buffer.from("import=common/" + themeName + "\n", "utf8"));
}
exports.generateKeycloakThemeResources = generateKeycloakThemeResources;
//# sourceMappingURL=generateKeycloakThemeResources.js.map

View File

@ -1 +1 @@
{"version":3,"file":"generateKeycloakThemeResources.js","sourceRoot":"","sources":["../../src/bin/build-keycloak-theme/generateKeycloakThemeResources.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,gEAA+D;AAC/D,qCAAyB;AACzB,6BAAwC;AACxC,qEAGmC;AACnC,6CAA4D;AAE/C,QAAA,mBAAmB,GAAG,sBAAsB,CAAC;AAE1D,SAAgB,8BAA8B,CAC1C,MAIC;IAGO,IAAA,SAAS,GAAyD,MAAM,UAA/D,EAAE,oBAAoB,GAAmC,MAAM,qBAAzC,EAAE,4BAA4B,GAAK,MAAM,6BAAX,CAAY;IAEjF,IAAM,YAAY,GAAG,WAAQ,CAAC,4BAA4B,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IAErH,IAAI,qBAAqB,GAA2B,EAAE,CAAC;IAEvD,qCAAiB,CAAC;QACd,aAAa,EAAE,WAAQ,CAAC,YAAY,EAAE,WAAW,CAAC;QAClD,YAAY,EAAE,oBAAoB;QAClC,2BAA2B,EAAE,UAAC,EAAwB;gBAAtB,QAAQ,cAAA,EAAE,UAAU,gBAAA;YAEhD,IAAI,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;gBAErB,IAAA,KAAuC,0DAAgC,CACzE,EAAE,SAAS,EAAE,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAC7C,EAFO,kBAAkB,wBAAA,EAAE,YAAY,kBAEvC,CAAC;gBAEF,qBAAqB,yBACd,qBAAqB,GACrB,kBAAkB,CACxB,CAAC;gBAEF,OAAO,EAAE,oBAAoB,EAAE,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,EAAE,CAAC;aAEtE;YAED,IAAI,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;gBAElB,IAAA,WAAW,GAAK,yDAA+B,CAAC;oBACpD,QAAQ,EAAE,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC;oBACrC,mBAAmB,6BAAA;iBACtB,CAAC,YAHiB,CAGhB;gBAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,EAAE,CAAC;aAErE;YAED,OAAO,EAAE,oBAAoB,EAAE,UAAU,EAAE,CAAC;QAEhD,CAAC;KACJ,CAAC,CAAC;IAEK,IAAA,oBAAoB,GAAK,yCAA2B,CAAC;QACzD,oBAAoB,EAAE,qBAAqB;QAC3C,mBAAmB,6BAAA;QACnB,eAAe,EAAE,EAAE,CAAC,YAAY,CAC5B,WAAQ,CAAC,oBAAoB,EAAE,YAAY,CAAC,CAC/C,CAAC,QAAQ,CAAC,MAAM,CAAC;KACrB,CAAC,qBAN0B,CAMzB;IAEF,CAAC,WAAW,EAAE,cAAc,CAAW,CAAC,OAAO,CAAC,UAAA,YAAY;QAEjD,IAAA,OAAO,GAAK,oBAAoB,CAAC,EAAE,YAAY,cAAA,EAAE,CAAC,QAA3C,CAA4C;QAE3D,EAAE,CAAC,aAAa,CACZ,WAAQ,CAAC,YAAY,EAAE,YAAY,CAAC,EACpC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAC/B,CAAA;IAEL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,aAAa,CACZ,WAAQ,CAAC,YAAY,EAAE,kBAAkB,CAAC,EAC1C,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,CACvC,CAAC;AAEN,CAAC;AA1ED,wEA0EC"}
{"version":3,"file":"generateKeycloakThemeResources.js","sourceRoot":"","sources":["../../src/bin/build-keycloak-theme/generateKeycloakThemeResources.ts"],"names":[],"mappings":"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"}

View File

@ -44,7 +44,7 @@ exports.generateCssCodeToDefineGlobals = exports.replaceImportFromStaticInCssCod
var crypto = __importStar(require("crypto"));
function replaceImportFromStaticInJsCode(params) {
var jsCode = params.jsCode, ftlValuesGlobalName = params.ftlValuesGlobalName;
var fixedJsCode = jsCode.replace(/"static\//g, "window." + ftlValuesGlobalName + ".url.resourcesPath.replace(/^\\//,\"\") + \"/\" + \"static/");
var fixedJsCode = jsCode.replace(/"static\//g, "window." + ftlValuesGlobalName + ".url.resourcesPath.replace(/^\\//,\"\") + \"/build/static/");
return { fixedJsCode: fixedJsCode };
}
exports.replaceImportFromStaticInJsCode = replaceImportFromStaticInJsCode;
@ -80,7 +80,7 @@ function generateCssCodeToDefineGlobals(params) {
"--" + cssVariableName + ":",
[
"url(",
"${url.resourcesPath}" +
"${url.resourcesPath}/build" +
cssGlobalsToDefine[cssVariableName].match(/^url\(([^)]+)\)$/)[1],
")"
].join("")

View File

@ -1 +1 @@
{"version":3,"file":"replaceImportFromStatic.js","sourceRoot":"","sources":["../../src/bin/build-keycloak-theme/replaceImportFromStatic.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,6CAAiC;AAEjC,SAAgB,+BAA+B,CAC3C,MAGC;IAGO,IAAA,MAAM,GAA0B,MAAM,OAAhC,EAAE,mBAAmB,GAAK,MAAM,oBAAX,CAAY;IAE/C,IAAM,WAAW,GAAG,MAAO,CAAC,OAAO,CAC/B,YAAY,EACZ,YAAU,mBAAmB,gEAAwD,CACxF,CAAC;IAEF,OAAO,EAAE,WAAW,aAAA,EAAE,CAAC;AAE3B,CAAC;AAhBD,0EAgBC;AAED,SAAgB,gCAAgC,CAC5C,MAEC;;IAMO,IAAA,OAAO,GAAK,MAAM,QAAX,CAAY;IAE3B,IAAM,kBAAkB,GAA2B,EAAE,CAAC;IAEtD,IAAI,GAAG,CAAC,MAAA,OAAO,CAAC,KAAK,CAAC,mBAAmB,CAAC,mCAAI,EAAE,CAAC;SAC5C,OAAO,CAAC,UAAA,KAAK;QACV,OAAA,kBAAkB,CAClB,KAAK,GAAG,MAAM;aACT,UAAU,CAAC,QAAQ,CAAC;aACpB,MAAM,CAAC,KAAK,CAAC;aACb,MAAM,CAAC,KAAK,CAAC;aACb,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CACpB,GAAG,KAAK;IANT,CAMS,CACZ,CAAC;IAEN,IAAI,YAAY,GAAG,OAAO,CAAC;IAE3B,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,OAAO,CACnC,UAAA,eAAe;QACX,wCAAwC;QACxC,OAAA,YAAY;YACZ,YAAY,CAAC,KAAK,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC;iBAClD,IAAI,CAAC,WAAS,eAAe,MAAG,CAAC;IAFtC,CAEsC,CAC7C,CAAC;IAEF,OAAO,EAAE,YAAY,cAAA,EAAE,kBAAkB,oBAAA,EAAE,CAAC;AAEhD,CAAC;AApCD,4EAoCC;AAED,SAAgB,8BAA8B,CAC1C,MAEC;IAKO,IAAA,kBAAkB,GAAK,MAAM,mBAAX,CAAY;IAEtC,OAAO;QACH,wBAAwB,EAAE;YACtB,SAAS;kBACN,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC;aAC7B,GAAG,CAAC,UAAA,eAAe,IAAI,OAAA;YACpB,OAAK,eAAe,MAAG;YACvB;gBACI,MAAM;gBACN,sBAAsB;oBACtB,kBAAkB,CAAC,eAAe,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAE,CAAC,CAAC,CAAC;gBACjE,GAAG;aACN,CAAC,IAAI,CAAC,EAAE,CAAC;SACb,CAAC,IAAI,CAAC,GAAG,CAAC,EARa,CAQb,CAAC;aACX,GAAG,CAAC,UAAA,IAAI,IAAI,OAAA,SAAO,IAAI,MAAG,EAAd,CAAc,CAAC;YAChC,GAAG;WACL,IAAI,CAAC,IAAI,CAAC;KACf,CAAC;AAEN,CAAC;AA5BD,wEA4BC"}
{"version":3,"file":"replaceImportFromStatic.js","sourceRoot":"","sources":["../../src/bin/build-keycloak-theme/replaceImportFromStatic.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,6CAAiC;AAEjC,SAAgB,+BAA+B,CAC3C,MAGC;IAGO,IAAA,MAAM,GAA0B,MAAM,OAAhC,EAAE,mBAAmB,GAAK,MAAM,oBAAX,CAAY;IAE/C,IAAM,WAAW,GAAG,MAAO,CAAC,OAAO,CAC/B,YAAY,EACZ,YAAU,mBAAmB,+DAAyD,CACzF,CAAC;IAEF,OAAO,EAAE,WAAW,aAAA,EAAE,CAAC;AAE3B,CAAC;AAhBD,0EAgBC;AAED,SAAgB,gCAAgC,CAC5C,MAEC;;IAMO,IAAA,OAAO,GAAK,MAAM,QAAX,CAAY;IAE3B,IAAM,kBAAkB,GAA2B,EAAE,CAAC;IAEtD,IAAI,GAAG,CAAC,MAAA,OAAO,CAAC,KAAK,CAAC,mBAAmB,CAAC,mCAAI,EAAE,CAAC;SAC5C,OAAO,CAAC,UAAA,KAAK;QACV,OAAA,kBAAkB,CAClB,KAAK,GAAG,MAAM;aACT,UAAU,CAAC,QAAQ,CAAC;aACpB,MAAM,CAAC,KAAK,CAAC;aACb,MAAM,CAAC,KAAK,CAAC;aACb,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CACpB,GAAG,KAAK;IANT,CAMS,CACZ,CAAC;IAEN,IAAI,YAAY,GAAG,OAAO,CAAC;IAE3B,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,OAAO,CACnC,UAAA,eAAe;QACX,wCAAwC;QACxC,OAAA,YAAY;YACZ,YAAY,CAAC,KAAK,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC;iBAClD,IAAI,CAAC,WAAS,eAAe,MAAG,CAAC;IAFtC,CAEsC,CAC7C,CAAC;IAEF,OAAO,EAAE,YAAY,cAAA,EAAE,kBAAkB,oBAAA,EAAE,CAAC;AAEhD,CAAC;AApCD,4EAoCC;AAED,SAAgB,8BAA8B,CAC1C,MAEC;IAKO,IAAA,kBAAkB,GAAK,MAAM,mBAAX,CAAY;IAEtC,OAAO;QACH,wBAAwB,EAAE;YACtB,SAAS;kBACN,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC;aAC7B,GAAG,CAAC,UAAA,eAAe,IAAI,OAAA;YACpB,OAAK,eAAe,MAAG;YACvB;gBACI,MAAM;gBACN,4BAA4B;oBAC5B,kBAAkB,CAAC,eAAe,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAE,CAAC,CAAC,CAAC;gBACjE,GAAG;aACN,CAAC,IAAI,CAAC,EAAE,CAAC;SACb,CAAC,IAAI,CAAC,GAAG,CAAC,EARa,CAQb,CAAC;aACX,GAAG,CAAC,UAAA,IAAI,IAAI,OAAA,SAAO,IAAI,MAAG,EAAd,CAAc,CAAC;YAChC,GAAG;WACL,IAAI,CAAC,IAAI,CAAC;KACf,CAAC;AAEN,CAAC;AA5BD,wEA4BC"}

View File

@ -4,12 +4,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
exports.keycloakBuiltinThemesAndThirdPartyExamplesThemsUrl = void 0;
var build_keycloak_theme_1 = require("./build-keycloak-theme");
var downloadAndUnzip_1 = require("./tools/downloadAndUnzip");
var path_1 = require("path");
exports.keycloakBuiltinThemesAndThirdPartyExamplesThemsUrl = "https://github.com/garronej/keycloak-react-theming/releases/download/v0.0.1/other_keycloak_thems.zip";
if (require.main === module) {
console.log("execute!");
downloadAndUnzip_1.downloadAndUnzip({
"url": exports.keycloakBuiltinThemesAndThirdPartyExamplesThemsUrl,
"destDirPath": build_keycloak_theme_1.keycloakThemeBuildingDirPath
"destDirPath": path_1.join(build_keycloak_theme_1.keycloakThemeBuildingDirPath, "src", "main", "resources", "theme")
});
}
//# sourceMappingURL=download-sample-keycloak-themes.js.map

View File

@ -1 +1 @@
{"version":3,"file":"download-sample-keycloak-themes.js","sourceRoot":"","sources":["../src/bin/download-sample-keycloak-themes.ts"],"names":[],"mappings":";;;;AAEA,+DAAsE;AACtE,6DAA4D;AAE/C,QAAA,kDAAkD,GAC3D,sGAAsG,CAAC;AAE3G,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE;IAEzB,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAExB,mCAAgB,CAAC;QACb,KAAK,EAAE,0DAAkD;QACzD,aAAa,EAAE,mDAA4B;KAC9C,CAAC,CAAC;CAEN"}
{"version":3,"file":"download-sample-keycloak-themes.js","sourceRoot":"","sources":["../src/bin/download-sample-keycloak-themes.ts"],"names":[],"mappings":";;;;AAEA,+DAAsE;AACtE,6DAA4D;AAC5D,6BAAwC;AAE3B,QAAA,kDAAkD,GAC3D,sGAAsG,CAAC;AAE3G,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE;IAEzB,mCAAgB,CAAC;QACb,KAAK,EAAE,0DAAkD;QACzD,aAAa,EAAE,WAAQ,CAAC,mDAA4B,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,CAAC;KAC7F,CAAC,CAAC;CAEN"}

6
lib/components/KcApp.d.ts vendored Normal file
View File

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

19
lib/components/KcApp.js Normal file
View File

@ -0,0 +1,19 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.KcApp = void 0;
var jsx_runtime_1 = require("react/jsx-runtime");
var react_1 = require("react");
var kcContext_1 = require("../kcContext");
var assert_1 = require("evt/tools/typeSafety/assert");
var Login_1 = require("./Login");
exports.KcApp = react_1.memo(function (props) {
var kcProperties = props.kcProperties;
assert_1.assert(kcContext_1.kcContext !== undefined, "App is not currently served by a Keycloak server");
switch (kcContext_1.kcContext.pageBasename) {
case "login.ftl": return jsx_runtime_1.jsx(Login_1.Login, { kcProperties: kcProperties }, void 0);
case "register.ftl":
alert("TODO: Implement " + kcContext_1.kcContext.pageBasename);
return null;
}
});
//# sourceMappingURL=KcApp.js.map

View File

@ -0,0 +1 @@
{"version":3,"file":"KcApp.js","sourceRoot":"","sources":["../../src/lib/components/KcApp.tsx"],"names":[],"mappings":";;;;AACA,+BAA6B;AAC7B,0CAAyC;AACzC,sDAAqD;AAErD,iCAAgC;AAMnB,QAAA,KAAK,GAAG,YAAI,CAAC,UAAC,KAAiB;IAEhC,IAAA,YAAY,GAAK,KAAK,aAAV,CAAW;IAE/B,eAAM,CAAC,qBAAS,KAAK,SAAS,EAAE,kDAAkD,CAAC,CAAC;IAEpF,QAAQ,qBAAS,CAAC,YAAY,EAAE;QAC5B,KAAK,WAAW,CAAC,CAAC,OAAO,kBAAC,aAAK,IAAC,YAAY,EAAE,YAAY,WAAI,CAAA;QAC9D,KAAK,cAAc;YACf,KAAK,CAAC,qBAAmB,qBAAS,CAAC,YAAc,CAAC,CAAC;YACnD,OAAO,IAAI,CAAC;KACnB;AAEL,CAAC,CAAC,CAAC"}

17
lib/components/KcProperties.d.ts vendored Normal file
View File

@ -0,0 +1,17 @@
/** 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

@ -0,0 +1,81 @@
"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

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

6
lib/components/Login.d.ts vendored Normal file
View File

@ -0,0 +1,6 @@
/// <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>;

76
lib/components/Login.js Normal file
View File

@ -0,0 +1,76 @@
"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

@ -0,0 +1 @@
{"version":3,"file":"Login.js","sourceRoot":"","sources":["../../src/lib/components/Login.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,+BAAuC;AACvC,uCAAsC;AAEtC,+CAA0D;AAC1D,sDAAqD;AACrD,0CAAyC;AACzC,6DAA4D;AAC5D,uCAA+B;AAC/B,yCAA8C;AAMjC,QAAA,KAAK,GAAG,YAAI,CAAC,UAAC,KAAiB;;IAEhC,IAAA,KAAsB,KAAK,aAAV,EAAjB,YAAY,mBAAG,EAAE,KAAA,CAAW;IAE9B,IAAA,KAAc,mCAAgB,EAAE,EAA9B,CAAC,OAAA,EAAE,IAAI,UAAuB,CAAC;IAEvC,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,uCAAwB,CAAC,CAAC;IAEhD,IAAA,KAAA,OAID,gBAAQ,CAAC,cAAM,OAAA,CAChB,eAAM,CACF,qBAAS,KAAK,SAAS,EACvB,2CAA2C,CAC9C;QACD,qBAAS,CACZ,EANmB,CAMnB,CAAC,IAAA,EAVK,UAIN,EAHG,MAAM,YAAA,EAAE,KAAK,WAAA,EAAE,GAAG,SAAA,EAClB,oBAAoB,0BAAA,EAAE,KAAK,WAAA,EAC3B,IAAI,UAAA,EAAE,oBAAoB,0BAO5B,CAAC;IAEG,IAAA,KAAA,OAAoD,gBAAQ,CAAC,KAAK,CAAC,IAAA,EAAlE,qBAAqB,QAAA,EAAE,wBAAwB,QAAmB,CAAC;IAE1E,IAAM,QAAQ,GAAG,6BAAgB,CAAC;QAC9B,OAAA,CAAC,wBAAwB,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC;IAAtC,CAAsC,CACzC,CAAC;IAGF,OAAO,CACH,kBAAC,mBAAQ,IACL,WAAW,EAAE,MAAM,CAAC,WAAW,EAC/B,WAAW,EAAE,KAAK,CAAC,QAAQ,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,EAC7D,YAAY,EAAE,YAAY,EAC1B,UAAU,EAAE,CAAC,CAAC,SAAS,CAAC,EACxB,gBAAgB,EAAE,IAAI,EACtB,QAAQ,EACJ,qCACI,EAAE,EAAC,SAAS,EACZ,SAAS,EAAE,cAAE,CAAC,KAAK,CAAC,QAAQ,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,IAAI,YAAY,CAAC,qBAAqB,CAAC,iBAErG,oCACI,EAAE,EAAC,iBAAiB,EACpB,SAAS,EAAE,cAAE,CAAC,KAAK,CAAC,QAAQ,IAAI,MAAM,CAAC,SAAS,IAAI,CAAC,YAAY,CAAC,+BAA+B,EAAE,YAAY,CAAC,wBAAwB,CAAC,CAAC,gBAGtI,KAAK,CAAC,QAAQ;wBACd,CACI,sCAAM,EAAE,EAAC,eAAe,EAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,WAAW,EAAE,MAAM,EAAC,MAAM,iBAC/E,qCAAK,SAAS,EAAE,cAAE,CAAC,YAAY,CAAC,gBAAgB,CAAC,iBAC7C,sCAAO,OAAO,EAAC,UAAU,EAAC,SAAS,EAAE,cAAE,CAAC,YAAY,CAAC,YAAY,CAAC,gBAE1D,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;gDAC1B,CAAC,CAAC,UAAU,CAAC;gDACb,CAAC;oDACD,CACI,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;wDAChC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC;wDACtB,CAAC,CAAC,OAAO,CAAC,CACjB,YAEL;wCACR,sCACI,QAAQ,EAAE,CAAC,EACX,EAAE,EAAC,UAAU,EACb,SAAS,EAAE,cAAE,CAAC,YAAY,CAAC,YAAY,CAAC,EACxC,IAAI,EAAC,UAAU,EACf,KAAK,EAAE,MAAA,KAAK,CAAC,QAAQ,mCAAI,EAAE,EAC3B,IAAI,EAAC,MAAM,IACP,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,UAClG,aACA;gCACN,qCAAK,SAAS,EAAE,cAAE,CAAC,YAAY,CAAC,gBAAgB,CAAC,iBAC7C,sCAAO,OAAO,EAAC,UAAU,EAAC,SAAS,EAAE,cAAE,CAAC,YAAY,CAAC,YAAY,CAAC,gBAC7D,CAAC,CAAC,UAAU,CAAC,YACV;wCACR,6BAAO,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAC,UAAU,EAAC,SAAS,EAAE,cAAE,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,IAAI,EAAC,UAAU,EAAC,IAAI,EAAC,UAAU,EAAC,YAAY,EAAC,KAAK,WAAG,aAC/H;gCACN,qCAAK,SAAS,EAAE,cAAE,CAAC,YAAY,CAAC,gBAAgB,EAAE,YAAY,CAAC,kBAAkB,CAAC,iBAC9E,oCAAK,EAAE,EAAC,iBAAiB,gBAEjB,CACI,KAAK,CAAC,UAAU;gDAChB,CAAC,oBAAoB,CACxB;gDACD,oCAAK,SAAS,EAAC,UAAU,gBACrB,uCACI,uCAAO,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAC,YAAY,EAAC,IAAI,EAAC,YAAY,EAAC,IAAI,EAAC,UAAU,IAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,oBAAI,CAAC,CAAC,YAAY,CAAC,aAAS,WAC/I,YACN,YAER;wCACN,oCAAK,SAAS,EAAE,cAAE,CAAC,YAAY,CAAC,yBAAyB,CAAC,gBAElD,KAAK,CAAC,oBAAoB;gDAC1B,sCACI,kCAAG,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,wBAAwB,gBAAG,CAAC,CAAC,kBAAkB,CAAC,YAAK,WAC5E,YAET,aAEJ;gCACN,qCAAK,EAAE,EAAC,iBAAiB,EAAC,SAAS,EAAE,cAAE,CAAC,YAAY,CAAC,gBAAgB,CAAC,iBAClE,sCACI,IAAI,EAAC,QAAQ,EACb,EAAE,EAAC,iBAAiB,EACpB,IAAI,EAAC,cAAc,IACf,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,kBAAkB,MAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,UAC1F;wCACF,6BACI,QAAQ,EAAE,CAAC,EACX,SAAS,EAAE,cAAE,CAAC,YAAY,CAAC,aAAa,EAAE,YAAY,CAAC,oBAAoB,EAAE,YAAY,CAAC,kBAAkB,EAAE,YAAY,CAAC,kBAAkB,CAAC,EAAE,IAAI,EAAC,OAAO,EAAC,EAAE,EAAC,UAAU,EAAC,IAAI,EAAC,QAAQ,EACxL,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,EACtB,QAAQ,EAAE,qBAAqB,WACjC,aACA,aACH,CACV,YAEH;gBAEF,CAAC,KAAK,CAAC,QAAQ,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,CAAC;oBAClD,oCAAK,EAAE,EAAC,qBAAqB,EAAC,SAAS,EAAE,cAAE,CAAC,YAAY,CAAC,+BAA+B,EAAE,YAAY,CAAC,wBAAwB,CAAC,gBAC5H,mCAAI,SAAS,EAAE,cAAE,CAAC,YAAY,CAAC,4BAA4B,EAAE,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,YAAY,CAAC,kCAAkC,CAAC,gBAEpI,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,UAAA,CAAC;gCAClB,OAAA,mCAAI,SAAS,EAAE,cAAE,CAAC,YAAY,CAAC,gCAAgC,CAAC,gBAC5D,kCAAG,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAE,EAAE,YAAU,CAAC,CAAC,KAAO,EAAE,SAAS,EAAE,cAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,UAAU,CAAC,gBAC/E,sCAAO,CAAC,CAAC,WAAW,WAAQ,YAC5B,YACH;4BAJL,CAIK,CACR,YAEJ,YACH,aAER,EAEV,eAAe,EACX,CACI,KAAK,CAAC,QAAQ;YACd,KAAK,CAAC,oBAAoB;YAC1B,CAAC,oBAAoB,CACxB;YACD,oCAAK,EAAE,EAAC,iBAAiB,gBACrB,wCACK,CAAC,CAAC,WAAW,CAAC,EACf,kCAAG,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,eAAe,gBACpC,CAAC,CAAC,YAAY,CAAC,YAChB,YACD,YACL,WAEZ,CACL,CAAC;AACN,CAAC,CAAC,CAAC"}

15
lib/components/Template.d.ts vendored Normal file
View File

@ -0,0 +1,15 @@
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>;

110
lib/components/Template.js Normal file
View File

@ -0,0 +1,110 @@
"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.Template = void 0;
var jsx_runtime_1 = require("react/jsx-runtime");
var react_1 = require("react");
var useKcTranslation_1 = require("../i18n/useKcTranslation");
var kcContext_1 = require("../kcContext");
var assert_1 = require("evt/tools/typeSafety/assert");
var tss_react_1 = require("tss-react");
var useKcLanguageTag_1 = require("../i18n/useKcLanguageTag");
var KcLanguageTag_1 = require("../i18n/KcLanguageTag");
var powerhooks_1 = require("powerhooks");
var appendLinkInHead_1 = require("../tools/appendLinkInHead");
var appendScriptInHead_1 = require("../tools/appendScriptInHead");
var path_1 = require("path");
var powerhooks_2 = require("powerhooks");
var KcProperties_1 = require("./KcProperties");
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.kcProperties, kcProperties = _f === void 0 ? {} : _f, headerNode = props.headerNode, showUsernameNode = props.showUsernameNode, formNode = props.formNode, displayInfoNode = props.displayInfoNode;
var t = useKcTranslation_1.useKcTranslation().t;
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 _b = __read(_a, 1), languageTag = _b[0];
return setKcLanguageTag(languageTag);
});
var onTryAnotherWayClick = powerhooks_2.useConstCallback(function () {
document.forms["kc-select-try-another-way-form"].submit();
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"),
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;
react_1.useEffect(function () {
var _a, _b, _c;
(_a = kcProperties.stylesCommon) === null || _a === void 0 ? void 0 : _a.forEach(function (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) {
return appendLinkInHead_1.appendLinkInHead({ "href": path_1.join(url.resourcesPath, relativePath) });
});
(_c = kcProperties.scripts) === null || _c === void 0 ? void 0 : _c.forEach(function (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),
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 &&
(assert_1.assert(locale !== undefined), true) &&
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("ul", { children: locale.supported.map(function (_a) {
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);
}) }, void 0)] }), void 0) }), void 0) }), void 0),
(auth !== undefined &&
auth.showUsername &&
!auth.showResetCredentials) ?
(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("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.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.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("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("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("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 &&
message !== undefined &&
(message.type !== "warning" ||
!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),
message.type === "warning" && jsx_runtime_1.jsx("span", { className: tss_react_1.cx(kcProperties.kcFeedbackWarningIcon) }, void 0),
message.type === "error" && jsx_runtime_1.jsx("span", { className: tss_react_1.cx(kcProperties.kcFeedbackErrorIcon) }, void 0),
message.type === "info" && jsx_runtime_1.jsx("span", { className: tss_react_1.cx(kcProperties.kcFeedbackInfoIcon) }, void 0),
jsx_runtime_1.jsx("span", __assign({ className: "kc-feedback-text" }, { children: message.summary }), void 0)] }), void 0), formNode, (auth !== undefined &&
auth.showTryAnotherWayLink &&
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("a", __assign({ href: "#", id: "try-another-way", onClick: onTryAnotherWayClick }, { children: t("doTryAnotherWay") }), void 0)] }), void 0) }), void 0) }), void 0),
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));
});
//# sourceMappingURL=Template.js.map

File diff suppressed because one or more lines are too long

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

@ -0,0 +1,11 @@
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;

53
lib/i18n/KcLanguageTag.js Normal file
View File

@ -0,0 +1,53 @@
"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

@ -0,0 +1 @@
{"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"}

View File

@ -1,3 +0,0 @@
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

@ -1,32 +0,0 @@
"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

@ -1 +0,0 @@
{"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"}

1
lib/i18n/useKcLanguageTag.d.ts vendored Normal file
View File

@ -0,0 +1 @@
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

@ -0,0 +1,13 @@
"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

@ -0,0 +1 @@
{"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"}

7
lib/i18n/useKcTranslation.d.ts vendored Normal file

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,57 @@
"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

@ -0,0 +1 @@
{"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"}

View File

@ -1,11 +0,0 @@
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.
* If there is no reasonable match it's guessed from navigator.language.
* If still no matches en is returned.
*/
export declare function getKeycloakAvailableLanguageBestGuess(languageLike?: string): AvailableLanguages;
export {};

View File

@ -1,29 +0,0 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.getKeycloakAvailableLanguageBestGuess = 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 availableLanguages = objectKeys_1.objectKeys(login_1.messages);
exports.useKeycloakLanguage = powerhooks_1.createUseGlobalState("keycloakLanguage", getKeycloakAvailableLanguageBestGuess, { "persistance": "cookies" }).useKeycloakLanguage;
/**
* Pass in "fr-FR" or "français" for example, it will return the AvailableLanguage
* it corresponds to.
* If there is no reasonable match it's guessed from navigator.language.
* If still no matches en is returned.
*/
function getKeycloakAvailableLanguageBestGuess(languageLike) {
if (languageLike === void 0) { languageLike = navigator.language; }
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 getKeycloakAvailableLanguageBestGuess(navigator.language);
}
return "en";
}
exports.getKeycloakAvailableLanguageBestGuess = getKeycloakAvailableLanguageBestGuess;
//# sourceMappingURL=useKeycloakLanguage.js.map

View File

@ -1 +0,0 @@
{"version":3,"file":"useKeycloakLanguage.js","sourceRoot":"","sources":["../../src/lib/i18n/useKeycloakLanguage.ts"],"names":[],"mappings":";;;AACA,yCAAkD;AAClD,oDAAsD;AACtD,8DAA6D;AAC7D,uDAAsD;AAEtD,IAAM,kBAAkB,GAAG,uBAAU,CAAC,gBAAQ,CAAC,CAAC;AAIjC,QAAA,mBAAmB,GAAK,iCAAoB,CACvD,kBAAkB,EAClB,qCAAqC,EACrC,EAAE,aAAa,EAAE,SAAS,EAAE,CAC/B,qBAAC;AAEF;;;;;EAKE;AACF,SAAgB,qCAAqC,CACjD,YAAyC;IAAzC,6BAAA,EAAA,eAAuB,SAAS,CAAC,QAAQ;IAGzC,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,qCAAqC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;KACpE;IAED,OAAO,IAAI,CAAC;AAChB,CAAC;AAhBD,sFAgBC"}

View File

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

View File

@ -1,19 +0,0 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.useKeycloakThemeTranslation = void 0;
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 out = login_1.messages[keycloakLanguage][key];
if (out !== undefined) {
return out;
}
return login_1.messages["en"][key];
});
return { t: t };
}
exports.useKeycloakThemeTranslation = useKeycloakThemeTranslation;
//# sourceMappingURL=useKeycloakTranslation.js.map

View File

@ -1 +0,0 @@
{"version":3,"file":"useKeycloakTranslation.js","sourceRoot":"","sources":["../../src/lib/i18n/useKeycloakTranslation.ts"],"names":[],"mappings":";;;AACA,6DAA4D;AAC5D,oDAAsD;AACtD,yCAA8C;AAI9C,SAAgB,2BAA2B;IAE/B,IAAA,gBAAgB,GAAK,yCAAmB,EAAE,iBAA1B,CAA2B;IAEnD,IAAM,CAAC,GAAG,6BAAgB,CACtB,UAAC,GAAe;QAEZ,IAAM,GAAG,GAAuB,gBAAQ,CAAC,gBAA+B,CAAC,CAAC,GAAG,CAAC,CAAC;QAE/E,IAAI,GAAG,KAAK,SAAS,EAAE;YACnB,OAAO,GAAG,CAAC;SACd;QAED,OAAO,gBAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IAE/B,CAAC,CACJ,CAAC;IAEF,OAAO,EAAE,CAAC,GAAA,EAAE,CAAC;AAEjB,CAAC;AApBD,kEAoBC"}

12
lib/index.d.ts vendored
View File

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

View File

@ -10,8 +10,12 @@ 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);
};
Object.defineProperty(exports, "__esModule", { value: true });
__exportStar(require("./keycloakFtlValues"), exports);
__exportStar(require("./i18n/useKeycloakLanguage"), exports);
__exportStar(require("./i18n/useKeycloakTranslation"), exports);
__exportStar(require("./i18n/getLanguageLabel"), exports);
__exportStar(require("./kcContext"), exports);
__exportStar(require("./i18n/KcLanguageTag"), exports);
__exportStar(require("./i18n/useKcLanguageTag"), exports);
__exportStar(require("./i18n/useKcTranslation"), exports);
__exportStar(require("./components/KcProperties"), exports);
__exportStar(require("./components/Login"), exports);
__exportStar(require("./components/Template"), exports);
__exportStar(require("./components/KcApp"), exports);
//# sourceMappingURL=index.js.map

View File

@ -1 +1 @@
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/lib/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,sDAAoC;AACpC,6DAA2C;AAC3C,gEAA8C;AAC9C,0DAAwC"}
{"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;AACtC,qDAAmC"}

58
lib/kcContext.d.ts vendored Normal file
View File

@ -0,0 +1,58 @@
import type { generateFtlFilesCodeFactory } from "../bin/build-keycloak-theme/generateFtl";
import type { KcLanguageTag } from "./i18n/KcLanguageTag";
export declare type KcContext = {
pageBasename: Parameters<ReturnType<typeof generateFtlFilesCodeFactory>["generateFtlFilesCode"]>[0]["pageBasename"];
url: {
loginAction: string;
resourcesPath: string;
resourcesCommonPath: string;
loginRestartFlowUrl: string;
loginResetCredentialsUrl: string;
registrationUrl: string;
};
realm: {
displayName?: string;
displayNameHtml?: string;
internationalizationEnabled: boolean;
password: boolean;
loginWithEmailAllowed: boolean;
registrationEmailAsUsername: boolean;
rememberMe: boolean;
resetPasswordAllowed: boolean;
};
/** Undefined if !realm.internationalizationEnabled */
locale?: {
supported: {
languageTag: KcLanguageTag;
}[];
};
auth?: {
showUsername: boolean;
showResetCredentials: boolean;
showTryAnotherWayLink: boolean;
attemptedUsername?: boolean;
selectedCredential?: string;
};
scripts: string[];
message?: {
type: "success" | "warning" | "error" | "info";
summary: string;
};
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;

7
lib/kcContext.js Normal file
View File

@ -0,0 +1,7 @@
"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

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

@ -0,0 +1 @@
{"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,28 +0,0 @@
import type { generateFtlFilesCodeFactory } from "../bin/build-keycloak-theme/generateFtl";
export declare type KeycloakFtlValues = {
pageBasename: Parameters<ReturnType<typeof generateFtlFilesCodeFactory>["generateFtlFilesCode"]>[0]["pageBasename"];
url: {
loginAction: string;
resourcesPath: string;
resourcesCommonPath: string;
loginRestartFlowUrl: string;
};
realm: {
displayName?: string;
displayNameHtml?: string;
internationalizationEnabled: boolean;
};
auth?: {
showUsername: boolean;
showResetCredentials: boolean;
showTryAnotherWayLink: boolean;
attemptedUsername?: boolean;
};
scripts: string[];
message?: {
type: "success" | "warning" | "error" | "info";
summary: string;
};
isAppInitiatedAction: boolean;
};
export declare const keycloakPagesContext: KeycloakFtlValues | undefined;

View File

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

View File

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

View File

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

View File

@ -0,0 +1,29 @@
"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

@ -0,0 +1 @@
{"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"}

3
lib/tools/appendLinkInHead.d.ts vendored Normal file
View File

@ -0,0 +1,3 @@
export declare function appendLinkInHead(props: {
href: string;
}): void;

View File

@ -0,0 +1,16 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.appendLinkInHead = void 0;
function appendLinkInHead(props) {
var href = props.href;
var link = document.createElement("link");
Object.assign(link, {
href: href,
"type": "text/css",
"rel": "stylesheet",
"media": "screen,print"
});
document.getElementsByTagName("head")[0].appendChild(link);
}
exports.appendLinkInHead = appendLinkInHead;
//# sourceMappingURL=appendLinkInHead.js.map

View File

@ -0,0 +1 @@
{"version":3,"file":"appendLinkInHead.js","sourceRoot":"","sources":["../../src/lib/tools/appendLinkInHead.ts"],"names":[],"mappings":";;;AACA,SAAgB,gBAAgB,CAC5B,KAEC;IAGO,IAAA,IAAI,GAAK,KAAK,KAAV,CAAW;IAEvB,IAAI,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAE1C,MAAM,CAAC,MAAM,CACT,IAAI,EACJ;QACI,IAAI,MAAA;QACJ,MAAM,EAAE,UAAU;QAClB,KAAK,EAAE,YAAY;QACnB,OAAO,EAAE,cAAc;KAC1B,CACJ,CAAC;IAEF,QAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AAE/D,CAAC;AAtBD,4CAsBC"}

3
lib/tools/appendScriptInHead.d.ts vendored Normal file
View File

@ -0,0 +1,3 @@
export declare function appendScriptInHead(props: {
src: string;
}): void;

View File

@ -0,0 +1,14 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.appendScriptInHead = void 0;
function appendScriptInHead(props) {
var src = props.src;
var script = document.createElement("script");
Object.assign(script, {
src: src,
"type": "text/javascript",
});
document.getElementsByTagName("head")[0].appendChild(script);
}
exports.appendScriptInHead = appendScriptInHead;
//# sourceMappingURL=appendScriptInHead.js.map

View File

@ -0,0 +1 @@
{"version":3,"file":"appendScriptInHead.js","sourceRoot":"","sources":["../../src/lib/tools/appendScriptInHead.ts"],"names":[],"mappings":";;;AACA,SAAgB,kBAAkB,CAC9B,KAEC;IAGO,IAAA,GAAG,GAAK,KAAK,IAAV,CAAW;IAEtB,IAAI,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAE9C,MAAM,CAAC,MAAM,CACT,MAAM,EACN;QACI,GAAG,KAAA;QACH,MAAM,EAAE,iBAAiB;KAC5B,CACJ,CAAC;IAEF,QAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AAEjE,CAAC;AApBD,gDAoBC"}

View File

@ -1,6 +1,6 @@
{
"name": "keycloak-react-theming",
"version": "0.0.22",
"version": "0.0.27",
"description": "Keycloak theme generator for Reacts app",
"repository": {
"type": "git",
@ -15,6 +15,7 @@
"author": "u/garronej",
"license": "MIT",
"files": [
"src/bin/build-keycloak-theme/ftlValuesGlobalName.ts",
"src/bin/build-keycloak-theme/generateDebugFiles/index.ts",
"src/bin/build-keycloak-theme/generateDebugFiles/standalone-ha.xml",
"src/bin/build-keycloak-theme/generateFtl/ftl2js.ftl",
@ -30,15 +31,25 @@
"src/bin/tools/getProjectRoot.ts",
"src/bin/tools/grant-exec-perms.ts",
"src/bin/tools/transformCodebase.ts",
"src/lib/components/KcApp.tsx",
"src/lib/components/KcProperties.ts",
"src/lib/components/Login.tsx",
"src/lib/components/Template.tsx",
"src/lib/i18n/KcLanguageTag.ts",
"src/lib/i18n/generated_messages/account.ts",
"src/lib/i18n/generated_messages/admin.ts",
"src/lib/i18n/generated_messages/email.ts",
"src/lib/i18n/generated_messages/login.ts",
"src/lib/i18n/getLanguageLabel.ts",
"src/lib/i18n/useKeycloakLanguage.ts",
"src/lib/i18n/useKeycloakTranslation.ts",
"src/lib/i18n/useKcLanguageTag.ts",
"src/lib/i18n/useKcTranslation.tsx",
"src/lib/index.ts",
"src/lib/keycloakFtlValues.ts",
"src/lib/kcContext.ts",
"src/lib/tools/allPropertiesValuesToUndefined.ts",
"src/lib/tools/appendLinkInHead.ts",
"src/lib/tools/appendScriptInHead.ts",
"bin/build-keycloak-theme/ftlValuesGlobalName.d.ts",
"bin/build-keycloak-theme/ftlValuesGlobalName.js",
"bin/build-keycloak-theme/ftlValuesGlobalName.js.map",
"bin/build-keycloak-theme/generateDebugFiles/index.d.ts",
"bin/build-keycloak-theme/generateDebugFiles/index.js",
"bin/build-keycloak-theme/generateDebugFiles/index.js.map",
@ -80,6 +91,21 @@
"bin/tools/transformCodebase.d.ts",
"bin/tools/transformCodebase.js",
"bin/tools/transformCodebase.js.map",
"lib/components/KcApp.d.ts",
"lib/components/KcApp.js",
"lib/components/KcApp.js.map",
"lib/components/KcProperties.d.ts",
"lib/components/KcProperties.js",
"lib/components/KcProperties.js.map",
"lib/components/Login.d.ts",
"lib/components/Login.js",
"lib/components/Login.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.js",
"lib/i18n/generated_messages/account.js.map",
@ -92,21 +118,27 @@
"lib/i18n/generated_messages/login.d.ts",
"lib/i18n/generated_messages/login.js",
"lib/i18n/generated_messages/login.js.map",
"lib/i18n/getLanguageLabel.d.ts",
"lib/i18n/getLanguageLabel.js",
"lib/i18n/getLanguageLabel.js.map",
"lib/i18n/useKeycloakLanguage.d.ts",
"lib/i18n/useKeycloakLanguage.js",
"lib/i18n/useKeycloakLanguage.js.map",
"lib/i18n/useKeycloakTranslation.d.ts",
"lib/i18n/useKeycloakTranslation.js",
"lib/i18n/useKeycloakTranslation.js.map",
"lib/i18n/useKcLanguageTag.d.ts",
"lib/i18n/useKcLanguageTag.js",
"lib/i18n/useKcLanguageTag.js.map",
"lib/i18n/useKcTranslation.d.ts",
"lib/i18n/useKcTranslation.js",
"lib/i18n/useKcTranslation.js.map",
"lib/index.d.ts",
"lib/index.js",
"lib/index.js.map",
"lib/keycloakFtlValues.d.ts",
"lib/keycloakFtlValues.js",
"lib/keycloakFtlValues.js.map"
"lib/kcContext.d.ts",
"lib/kcContext.js",
"lib/kcContext.js.map",
"lib/tools/allPropertiesValuesToUndefined.d.ts",
"lib/tools/allPropertiesValuesToUndefined.js",
"lib/tools/allPropertiesValuesToUndefined.js.map",
"lib/tools/appendLinkInHead.d.ts",
"lib/tools/appendLinkInHead.js",
"lib/tools/appendLinkInHead.js.map",
"lib/tools/appendScriptInHead.d.ts",
"lib/tools/appendScriptInHead.js",
"lib/tools/appendScriptInHead.js.map"
],
"keywords": [
"keycloak",
@ -120,18 +152,20 @@
"homepage": "https://github.com/garronej/keycloak-react-theming",
"devDependencies": {
"@types/node": "^10.0.0",
"@types/react": "^17.0.0",
"copyfiles": "^2.4.1",
"denoify": "^0.6.5",
"properties-parser": "^0.3.1",
"react": "^17.0.1",
"rimraf": "^3.0.2",
"scripting-tools": "^0.19.13",
"typescript": "^4.1.5",
"@types/react": "^17.0.0",
"react": "^17.0.1"
"typescript": "^4.1.5"
},
"dependencies": {
"cheerio": "^1.0.0-rc.5",
"evt": "^1.9.12",
"powerhooks": "^0.0.14"
"minimal-polyfills": "^2.1.6",
"powerhooks": "^0.0.14",
"tss-react": "^0.0.9"
}
}

View File

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

View File

@ -4,12 +4,19 @@
"loginAction": "${url.loginAction}",
"resourcesPath": "${url.resourcesPath}",
"resourcesCommonPath": "${url.resourcesCommonPath}",
"loginRestartFlowUrl": "${url.loginRestartFlowUrl}"
"loginRestartFlowUrl": "${url.loginRestartFlowUrl}",
"loginResetCredentialsUrl": "${url.loginResetCredentialsUrl}",
"registrationUrl": "${url.registrationUrl}"
},
"realm": {
"displayName": "${realm.displayName!''}" || 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 (){
@ -54,6 +61,7 @@
"showUsername": ${auth.showUsername()?c},
"showResetCredentials": ${auth.showResetCredentials()?c},
"showTryAnotherWayLink": ${auth.showTryAnotherWayLink()?c}
"selectedCredential": "${auth.selectedCredential!''}" || undefined
};
<#if auth.showUsername() && !auth.showResetCredentials()>
@ -79,7 +87,7 @@
<#if scripts??>
<#list scripts as script>
out.push("${script}");
out.push("${script}");
</#list>
</#if>
@ -107,7 +115,59 @@
</#if>
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>

View File

@ -45,7 +45,7 @@ export function generateFtlFilesCodeFactory(
return;
}
$(element).attr(attrName, "${url.resourcesPath}" + href);
$(element).attr(attrName, "${url.resourcesPath}/build" + href);
})
);

View File

@ -7,8 +7,10 @@ import {
replaceImportFromStaticInJsCode
} from "./replaceImportFromStatic";
import { generateFtlFilesCodeFactory } from "./generateFtl";
export const ftlValuesGlobalName = "keycloakPagesContext";
import { keycloakBuiltinThemesAndThirdPartyExamplesThemsUrl } from "../download-sample-keycloak-themes";
import { downloadAndUnzip } from "../tools/downloadAndUnzip";
import * as child_process from "child_process";
import { ftlValuesGlobalName } from "./ftlValuesGlobalName";
export function generateKeycloakThemeResources(
params: {
@ -25,7 +27,7 @@ export function generateKeycloakThemeResources(
let allCssGlobalsToDefine: Record<string, string> = {};
transformCodebase({
"destDirPath": pathJoin(themeDirPath, "resources"),
"destDirPath": pathJoin(themeDirPath, "resources", "build"),
"srcDirPath": reactAppBuildDirPath,
"transformSourceCodeString": ({ filePath, sourceCode }) => {
@ -79,9 +81,31 @@ export function generateKeycloakThemeResources(
});
{
const destDirPath = pathJoin(themeDirPath, "..", "tmp_xxKdLpdIdLd");
downloadAndUnzip({
"url": keycloakBuiltinThemesAndThirdPartyExamplesThemsUrl,
destDirPath
});
child_process.execSync(
[
"mv",
pathJoin("keycloak", "common"),
pathJoin("..", "common")
].join(" "),
{ "cwd": destDirPath }
);
child_process.execSync(`rm -r ${destDirPath}`);
}
fs.writeFileSync(
pathJoin(themeDirPath, "theme.properties"),
Buffer.from("parent=base\n", "utf8")
Buffer.from(`import=common/${themeName}\n`, "utf8")
);
}

View File

@ -12,7 +12,7 @@ export function replaceImportFromStaticInJsCode(
const fixedJsCode = jsCode!.replace(
/"static\//g,
`window.${ftlValuesGlobalName}.url.resourcesPath.replace(/^\\//,"") + "/" + "static/`
`window.${ftlValuesGlobalName}.url.resourcesPath.replace(/^\\//,"") + "/build/static/`
);
return { fixedJsCode };
@ -75,7 +75,7 @@ export function generateCssCodeToDefineGlobals(
`--${cssVariableName}:`,
[
"url(",
"${url.resourcesPath}" +
"${url.resourcesPath}/build" +
cssGlobalsToDefine[cssVariableName].match(/^url\(([^)]+)\)$/)![1],
")"
].join("")

View File

@ -2,17 +2,16 @@
import { keycloakThemeBuildingDirPath } from "./build-keycloak-theme";
import { downloadAndUnzip } from "./tools/downloadAndUnzip";
import { join as pathJoin } from "path";
export const keycloakBuiltinThemesAndThirdPartyExamplesThemsUrl =
"https://github.com/garronej/keycloak-react-theming/releases/download/v0.0.1/other_keycloak_thems.zip";
if (require.main === module) {
console.log("execute!");
downloadAndUnzip({
"url": keycloakBuiltinThemesAndThirdPartyExamplesThemsUrl,
"destDirPath": keycloakThemeBuildingDirPath
"destDirPath": pathJoin(keycloakThemeBuildingDirPath, "src", "main", "resources", "theme")
});
}

View File

@ -0,0 +1,25 @@
import { memo } from "react";
import { kcContext } from "../kcContext";
import { assert } from "evt/tools/typeSafety/assert";
import type { KcPagesProperties } from "./KcProperties";
import { Login } from "./Login";
export type KcAppProps = {
kcProperties?: KcPagesProperties;
};
export const KcApp = memo((props: KcAppProps) => {
const { kcProperties } = props;
assert(kcContext !== undefined, "App is not currently served by a Keycloak server");
switch (kcContext.pageBasename) {
case "login.ftl": return <Login kcProperties={kcProperties} />
case "register.ftl":
alert(`TODO: Implement ${kcContext.pageBasename}`);
return null;
}
});

View File

@ -0,0 +1,190 @@
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

@ -0,0 +1,171 @@
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

@ -0,0 +1,260 @@
import { useState, useEffect, memo } from "react";
import type { ReactNode } from "react";
import { useKcTranslation } from "../i18n/useKcTranslation";
import { kcContext } from "../kcContext";
import { assert } from "evt/tools/typeSafety/assert";
import { cx } from "tss-react";
import { useKcLanguageTag } from "../i18n/useKcLanguageTag";
import type { KcLanguageTag } from "../i18n/KcLanguageTag";
import { getKcLanguageTagLabel } from "../i18n/KcLanguageTag";
import { useCallbackFactory } from "powerhooks";
import { appendLinkInHead } from "../tools/appendLinkInHead";
import { appendScriptInHead } from "../tools/appendScriptInHead";
import { join as pathJoin } from "path";
import { useConstCallback } from "powerhooks";
import type { KcTemplateProperties } from "./KcProperties";
import { defaultKcTemplateProperties } from "./KcProperties";
export type TemplateProps = {
kcProperties: KcTemplateProperties;
displayInfo?: boolean;
displayMessage?: boolean;
displayRequiredFields?: boolean;
displayWide?: boolean;
showAnotherWayIfPresent?: boolean;
headerNode: ReactNode;
showUsernameNode: ReactNode;
formNode: ReactNode;
displayInfoNode: ReactNode;
};
export const Template = memo((props: TemplateProps) => {
const {
displayInfo = false,
displayMessage = true,
displayRequiredFields = false,
displayWide = false,
showAnotherWayIfPresent = true,
kcProperties = {},
headerNode,
showUsernameNode,
formNode,
displayInfoNode
} = props;
const { t } = useKcTranslation();
Object.assign(kcProperties, defaultKcTemplateProperties);
const { kcLanguageTag, setKcLanguageTag } = useKcLanguageTag();
const onChangeLanguageClickFactory = useCallbackFactory(
([languageTag]: [KcLanguageTag]) =>
setKcLanguageTag(languageTag)
);
const onTryAnotherWayClick = useConstCallback(() => {
document.forms["kc-select-try-another-way-form" as never].submit();
return false;
});
const [{ realm, locale, auth, url, message, isAppInitiatedAction }] = useState(() => (
assert(kcContext !== undefined, "App is not currently being served by KeyCloak"),
kcContext
));
useEffect(() => {
kcProperties.stylesCommon?.forEach(
relativePath =>
appendLinkInHead(
{ "href": pathJoin(url.resourcesCommonPath, relativePath) }
)
);
kcProperties.styles?.forEach(
relativePath =>
appendLinkInHead(
{ "href": pathJoin(url.resourcesPath, relativePath) }
)
);
kcProperties.scripts?.forEach(
relativePath =>
appendScriptInHead(
{ "src": pathJoin(url.resourcesPath, relativePath) }
)
);
}, []);
return (
<div className={cx(kcProperties.kcLoginClass)}>
<div id="kc-header" className={cx(kcProperties.kcHeaderClass)}>
<div id="kc-header-wrapper" className={cx(kcProperties.kcHeaderWrapperClass)}>
{t("loginTitleHtml", realm.displayNameHtml)}
</div>
</div>
<div className={cx("kcFormCardClass", displayWide && kcProperties.kcFormCardAccountClass)}>
<header className={cx(kcProperties.kcFormHeaderClass)}>
{
(
realm.internationalizationEnabled &&
(assert(locale !== undefined), true) &&
locale.supported.length > 1
) &&
<div id="kc-locale">
<div id="kc-locale-wrapper" className={cx(kcProperties.kcLocaleWrapperClass)}>
<div className="kc-dropdown" id="kc-locale-dropdown">
<a href="#" id="kc-current-locale-link">
{getKcLanguageTagLabel(kcLanguageTag)}
</a>
<ul>
{
locale.supported.map(
({ languageTag }) =>
<li className="kc-dropdown-item">
<a href="#" onClick={onChangeLanguageClickFactory(languageTag)}>
{getKcLanguageTagLabel(languageTag)}
</a>
</li>
)
}
</ul>
</div>
</div>
</div>
}
{
(
auth !== undefined &&
auth.showUsername &&
!auth.showResetCredentials
) ?
(
displayRequiredFields ?
(
<div className={cx(kcProperties.kcContentWrapperClass)}>
<div className={cx(kcProperties.kcLabelWrapperClass, "subtitle")}>
<span className="subtitle">
<span className="required">*</span>
{t("requiredFields")}
</span>
</div>
<div className="col-md-10">
<h1 id="kc-page-title">{headerNode}</h1>
</div>
</div>
)
:
(
<h1 id="kc-page-title">{headerNode}</h1>
)
) : (
displayRequiredFields ? (
<div className={cx(kcProperties.kcContentWrapperClass)}>
<div className={cx(kcProperties.kcLabelWrapperClass, "subtitle")}>
<span className="subtitle"><span className="required">*</span> {t("requiredFields")}</span>
</div>
<div className="col-md-10">
{showUsernameNode}
<div className={cx(kcProperties.kcFormGroupClass)}>
<div id="kc-username">
<label id="kc-attempted-username">{auth?.attemptedUsername}</label>
<a id="reset-login" href={url.loginRestartFlowUrl}>
<div className="kc-login-tooltip">
<i className={cx(kcProperties.kcResetFlowIcon)}></i>
<span className="kc-tooltip-text">{t("restartLoginTooltip")}</span>
</div>
</a>
</div>
</div>
</div>
</div>
) : (
<>
{showUsernameNode}
<div className={cx(kcProperties.kcFormGroupClass)}>
<div id="kc-username">
<label id="kc-attempted-username">{auth?.attemptedUsername}</label>
<a id="reset-login" href={url.loginRestartFlowUrl}>
<div className="kc-login-tooltip">
<i className={cx(kcProperties.kcResetFlowIcon)}></i>
<span className="kc-tooltip-text">{t("restartLoginTooltip")}</span>
</div>
</a>
</div>
</div>
</>
)
)
}
</header>
<div id="kc-content">
<div id="kc-content-wrapper">
{/* App-initiated actions should not see warning messages about the need to complete the action during login. */}
{
(
displayMessage &&
message !== undefined &&
(
message.type !== "warning" ||
!isAppInitiatedAction
)
) &&
<div className={cx("alert", `alert-${message.type}`)}>
{message.type === "success" && <span className={cx(kcProperties.kcFeedbackSuccessIcon)}></span>}
{message.type === "warning" && <span className={cx(kcProperties.kcFeedbackWarningIcon)}></span>}
{message.type === "error" && <span className={cx(kcProperties.kcFeedbackErrorIcon)}></span>}
{message.type === "info" && <span className={cx(kcProperties.kcFeedbackInfoIcon)}></span>}
<span className="kc-feedback-text">{message.summary}</span>
</div>
}
{formNode}
{
(
auth !== undefined &&
auth.showTryAnotherWayLink &&
showAnotherWayIfPresent
) &&
<form id="kc-select-try-another-way-form" action={url.loginAction} method="post" className={cx(displayWide && kcProperties.kcContentWrapperClass)} >
<div className={cx(displayWide && [kcProperties.kcFormSocialAccountContentClass, kcProperties.kcFormSocialAccountClass])} >
<div className={cx(kcProperties.kcFormGroupClass)}>
<input type="hidden" name="tryAnotherWay" value="on" />
<a href="#" id="try-another-way" onClick={onTryAnotherWayClick}>{t("doTryAnotherWay")}</a>
</div>
</div >
</form>
}
{
displayInfo &&
<div id="kc-info" className={cx(kcProperties.kcSignUpClass)}>
<div id="kc-info-wrapper" className={cx(kcProperties.kcInfoAreaWrapperClass)}>
{displayInfoNode}
</div>
</div>
}
</div>
</div>
</div>
</div>
);
});

View File

@ -1,7 +1,17 @@
import type { AvailableLanguages } from "./useKeycloakLanguage";
import { objectKeys } from "evt/tools/typeSafety/objectKeys";
import { messages } from "./generated_messages/login";
export function getLanguageLabel(language: AvailableLanguages): LanguageLabel {
export type KcLanguageTag = keyof typeof messages;
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) {
/* spell-checker: disable */
@ -31,9 +41,29 @@ 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 */
const availableLanguages = objectKeys(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.
*/
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

@ -0,0 +1,15 @@
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

@ -0,0 +1,43 @@
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

@ -1,40 +0,0 @@
import { createUseGlobalState } from "powerhooks";
import { messages } from "./generated_messages/login";
import { objectKeys } from "evt/tools/typeSafety/objectKeys";
import { getLanguageLabel } from "./getLanguageLabel";
const availableLanguages = objectKeys(messages);
export type AvailableLanguages = typeof availableLanguages[number];
export const { useKeycloakLanguage } = createUseGlobalState(
"keycloakLanguage",
getKeycloakAvailableLanguageBestGuess,
{ "persistance": "cookies" }
);
/**
* Pass in "fr-FR" or "français" for example, it will return the AvailableLanguage
* it corresponds to.
* If there is no reasonable match it's guessed from navigator.language.
* If still no matches en is returned.
*/
export function getKeycloakAvailableLanguageBestGuess(
languageLike: string = navigator.language
): 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 getKeycloakAvailableLanguageBestGuess(navigator.language);
}
return "en";
}

View File

@ -1,28 +0,0 @@
import { useKeycloakLanguage } from "./useKeycloakLanguage";
import { messages } from "./generated_messages/login";
import { useConstCallback } from "powerhooks";
export type MessageKey = keyof typeof messages["en"]
export function useKeycloakThemeTranslation() {
const { keycloakLanguage } = useKeycloakLanguage();
const t = useConstCallback(
(key: MessageKey): string => {
const out: string | undefined = messages[keycloakLanguage as any as "en"][key];
if (out !== undefined) {
return out;
}
return messages["en"][key];
}
);
return { t };
}

View File

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

72
src/lib/kcContext.ts Normal file
View File

@ -0,0 +1,72 @@
import { ftlValuesGlobalName } from "../bin/build-keycloak-theme/ftlValuesGlobalName";
import type { generateFtlFilesCodeFactory } from "../bin/build-keycloak-theme/generateFtl";
import { id } from "evt/tools/typeSafety/id";
import type { KcLanguageTag } from "./i18n/KcLanguageTag";
export type KcContext = {
pageBasename: Parameters<ReturnType<typeof generateFtlFilesCodeFactory>["generateFtlFilesCode"]>[0]["pageBasename"];
url: {
loginAction: string;
resourcesPath: string;
resourcesCommonPath: string;
loginRestartFlowUrl: string;
loginResetCredentialsUrl: string;
registrationUrl: string;
};
realm: {
displayName?: string;
displayNameHtml?: string;
internationalizationEnabled: boolean;
password: boolean;
loginWithEmailAllowed: boolean;
registrationEmailAsUsername: boolean;
rememberMe: boolean;
resetPasswordAllowed: boolean;
};
/** Undefined if !realm.internationalizationEnabled */
locale?: {
supported: {
//url: string;
languageTag: KcLanguageTag;
/** Is determined by languageTag. Ex: languageTag === "en" => label === "English"
* or getLanguageLabel(languageTag) === label
*/
//label: LanguageLabel;
}[];
//NOTE: We do not expose this because the language is managed
//client side. We use this value however to set the default.
//current: LanguageLabel;
},
auth?: {
showUsername: boolean;
showResetCredentials: boolean;
showTryAnotherWayLink: boolean;
attemptedUsername?: boolean;
selectedCredential?: string;
};
scripts: string[];
message?: {
type: "success" | "warning" | "error" | "info";
summary: string;
};
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]);

View File

@ -1,49 +0,0 @@
import { ftlValuesGlobalName } from "../bin/build-keycloak-theme/generateKeycloakThemeResources";
import type { generateFtlFilesCodeFactory } from "../bin/build-keycloak-theme/generateFtl";
import { id } from "evt/tools/typeSafety/id";
export type KeycloakFtlValues = {
pageBasename: Parameters<ReturnType<typeof generateFtlFilesCodeFactory>["generateFtlFilesCode"]>[0]["pageBasename"];
url: {
loginAction: string;
resourcesPath: string;
resourcesCommonPath: string;
loginRestartFlowUrl: string;
},
realm: {
displayName?: string;
displayNameHtml?: string;
internationalizationEnabled: boolean;
},
//NOTE: Undefined if !realm.internationalizationEnabled
//We hide this since we provide a client side internationalization engine
/*
locale?: {
supported: {
url: string;
languageTag: AvailableLanguages;
//NOTE: Is determined by languageTag. Ex: languageTag === "en" => label === "English"
label: LanguageLabel;
},
current: LanguageLabel;
},
*/
auth?: {
showUsername: boolean;
showResetCredentials: boolean;
showTryAnotherWayLink: boolean;
attemptedUsername?: boolean;
},
scripts: string[];
message?: {
type: "success" | "warning" | "error" | "info";
summary: string;
},
isAppInitiatedAction: boolean;
};
export const { keycloakPagesContext } =
{ [ftlValuesGlobalName]: id<KeycloakFtlValues | undefined>((window as any)[ftlValuesGlobalName]) };
;

View File

@ -0,0 +1,10 @@
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

@ -0,0 +1,24 @@
export function appendLinkInHead(
props: {
href: string;
}
) {
const { href } = props;
var link = document.createElement("link");
Object.assign(
link,
{
href,
"type": "text/css",
"rel": "stylesheet",
"media": "screen,print"
}
);
document.getElementsByTagName("head")[0].appendChild(link);
}

View File

@ -0,0 +1,22 @@
export function appendScriptInHead(
props: {
src: string;
}
) {
const { src } = props;
var script = document.createElement("script");
Object.assign(
script,
{
src,
"type": "text/javascript",
}
);
document.getElementsByTagName("head")[0].appendChild(script);
}

View File

@ -2,13 +2,15 @@
import { sampleReactProjectDirPath } from "./setupSampleReactProject";
import * as st from "scripting-tools";
import { join as pathJoin } from "path";
import { getProjectRoot } from "../bin/tools/getProjectRoot";
import { getProjectRoot } from "../bin/tools/getProjectRoot";
console.log(`Running main in ${sampleReactProjectDirPath}`);
st.execSync(
`node ${pathJoin(getProjectRoot(), "dist","bin","download-sample-keycloak-themes")}`,
{ "cwd": sampleReactProjectDirPath }
console.log(
st.execSync(
`node ${pathJoin(getProjectRoot(), "dist", "bin", "download-sample-keycloak-themes")}`,
{ "cwd": sampleReactProjectDirPath }
)
);

View File

@ -24,5 +24,5 @@ var st = __importStar(require("scripting-tools"));
var path_1 = require("path");
var getProjectRoot_1 = require("../bin/tools/getProjectRoot");
console.log("Running main in " + setupSampleReactProject_1.sampleReactProjectDirPath);
st.execSync("node " + path_1.join(getProjectRoot_1.getProjectRoot(), "dist", "bin", "download-sample-keycloak-themes"), { "cwd": setupSampleReactProject_1.sampleReactProjectDirPath });
console.log(st.execSync("node " + path_1.join(getProjectRoot_1.getProjectRoot(), "dist", "bin", "download-sample-keycloak-themes"), { "cwd": setupSampleReactProject_1.sampleReactProjectDirPath }));
//# sourceMappingURL=download-sample-keycloak-themes.js.map

View File

@ -1 +1 @@
{"version":3,"file":"download-sample-keycloak-themes.js","sourceRoot":"","sources":["../src/test/download-sample-keycloak-themes.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AACA,qEAAsE;AACtE,kDAAsC;AACtC,6BAAwC;AACxC,8DAA6D;AAE7D,OAAO,CAAC,GAAG,CAAC,qBAAmB,mDAA2B,CAAC,CAAC;AAE5D,EAAE,CAAC,QAAQ,CACP,UAAQ,WAAQ,CAAC,+BAAc,EAAE,EAAE,MAAM,EAAC,KAAK,EAAC,iCAAiC,CAAG,EACpF,EAAE,KAAK,EAAE,mDAAyB,EAAE,CACvC,CAAC"}
{"version":3,"file":"download-sample-keycloak-themes.js","sourceRoot":"","sources":["../src/test/download-sample-keycloak-themes.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AACA,qEAAsE;AACtE,kDAAsC;AACtC,6BAAwC;AACxC,8DAA6D;AAE7D,OAAO,CAAC,GAAG,CAAC,qBAAmB,mDAA2B,CAAC,CAAC;AAE5D,OAAO,CAAC,GAAG,CACP,EAAE,CAAC,QAAQ,CACP,UAAQ,WAAQ,CAAC,+BAAc,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,iCAAiC,CAAG,EACtF,EAAE,KAAK,EAAE,mDAAyB,EAAE,CACvC,CACJ,CAAC"}

View File

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

View File

@ -131,6 +131,11 @@
"signature": "c80df75850fea5caa2afe43b9949338ce4e2de086f91713e9af1a06f973872b8",
"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": {
"version": "7b5a10e3c897fabece5a51aa85b4111727d7adb53c2734b5d37230ff96802a09",
"signature": "7b5a10e3c897fabece5a51aa85b4111727d7adb53c2734b5d37230ff96802a09",
@ -177,7 +182,7 @@
"affectsGlobalScope": false
},
"../src/bin/build-keycloak-theme/replaceImportFromStatic.ts": {
"version": "435d450422e135e4ff2ad3242a33175f127e4034af3fec5636a298ec36e1d78a",
"version": "d0ca7ed6a7142a1b3397b4b405b2f5e791a2ca3b46af4f59ade02f29b34d1133",
"signature": "4586c183ccb11d75a7cb5525625fd200ed940b0c6208b2f473d20f661ffcebbb",
"affectsGlobalScope": false
},
@ -272,13 +277,23 @@
"affectsGlobalScope": false
},
"../src/bin/build-keycloak-theme/generateFtl/index.ts": {
"version": "0f236ff99727073587d85a380fc1e46f3176124d458ad699560507de2180c794",
"version": "63f82b1950332dc84e387580bcb83948396e26c82f5e74a29893b5b198ee8633",
"signature": "3a11af9abe294b90f19598d16e9d081f5452cdb668939e63abdd6a4d90955279",
"affectsGlobalScope": false
},
"../src/bin/tools/downloadAndUnzip.ts": {
"version": "b89489224a2f4b7172c50f8e3f667a5e71d119b3f01113a8885448fe6fd73ed8",
"signature": "4fdfe9418b5a6a5b03a719ab67e03a3a393129c129ec1d01e5cb06d8b5ce7104",
"affectsGlobalScope": false
},
"../src/bin/build-keycloak-theme/ftlValuesGlobalName.ts": {
"version": "f7cca39a25069f9eade9ecd19429d68d46f33981ae10801cd9ebc5686194737a",
"signature": "f433ba7538e542cf157faa77f7ed388de070cab33fd699e16cd94c833d87226b",
"affectsGlobalScope": false
},
"../src/bin/build-keycloak-theme/generateKeycloakThemeResources.ts": {
"version": "65bb08ea44d6bf3544dcb5721747342d7026a3c000821ddc435d0df0cd42d0a2",
"signature": "91ea17958f25db390b27717b63af5395e85d44a75b1fcaf57ff05c0a46dcacae",
"version": "e8e3ab402f608fb61d18775bb611bde58a3f6a5ccc66308d0da15e3abf9d3de7",
"signature": "c53e9172d81232fc2b183d2105ce6b33db0803cdb01c188755460b66b9e7bf35",
"affectsGlobalScope": false
},
"../src/bin/build-keycloak-theme/generateJavaStackFiles.ts": {
@ -296,13 +311,8 @@
"signature": "cc0e708e12dd472472902f20c879f10b9352d52e6823ac341bc0941ef15b9618",
"affectsGlobalScope": false
},
"../src/bin/tools/downloadAndUnzip.ts": {
"version": "b89489224a2f4b7172c50f8e3f667a5e71d119b3f01113a8885448fe6fd73ed8",
"signature": "4fdfe9418b5a6a5b03a719ab67e03a3a393129c129ec1d01e5cb06d8b5ce7104",
"affectsGlobalScope": false
},
"../src/bin/download-sample-keycloak-themes.ts": {
"version": "1bfdd08b6de4acb2c84826b5f61a8a1ce63e87a38d31e730a62dc37964e3147b",
"version": "cdac2b29b483d1614725e2df65e8459c26c76733092b619b9dcbfd5f8caf8e72",
"signature": "0e57409fe60937b7a31136195e80078dd33a8818f606840619670f76bddcbe7a",
"affectsGlobalScope": false
},
@ -326,9 +336,19 @@
"signature": "9b4cbbc5d76a0e78a053503ed153a83f48799f1519e3aef593cb0987700704b8",
"affectsGlobalScope": false
},
"../src/lib/keycloakFtlValues.ts": {
"version": "e37e678cf3d06dd302d5fc20ccdba19df70646180802033710e72357636b33d0",
"signature": "3d0bdb181fa554bc560636c4302e7fce144bf8d61ffc90c14ab53bc01fb1c655",
"../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
},
"../node_modules/powerhooks/useArrayDiff.d.ts": {
@ -401,29 +421,99 @@
"signature": "842cf60645647486885d3d7c146e23e976782458b50ade9116c01334132dbe60",
"affectsGlobalScope": false
},
"../src/lib/i18n/generated_messages/login.ts": {
"version": "d0ef29558975516f5df6f56981b3f1ec3582d3535050134421c953999ac9c187",
"signature": "132a7be6c96260e3171ea263eeb06a1117d9d97851afcc0c351258e37d39bee5",
"../node_modules/evt/tools/typeSafety/assert.d.ts": {
"version": "ce5d5fee87218d3b112beb80802ffa8cc6622f07984d59b88cb784f4002272ea",
"signature": "ce5d5fee87218d3b112beb80802ffa8cc6622f07984d59b88cb784f4002272ea",
"affectsGlobalScope": false
},
"../src/lib/i18n/getLanguageLabel.ts": {
"version": "ee36fe1507770f9b227839cd107746a4d65d5bb057b994d6b76f03b4308b87fd",
"signature": "2b6288ae572cb54ba4bb9306904c6c58a4b874f833829cb40eb12a3777c8ce28",
"../src/lib/i18n/useKcLanguageTag.ts": {
"version": "6680e1b2735f9a06a09b7a4fd0f56d4a2ef97894b5f41123cd1990d4c4e4d4da",
"signature": "bd7e7f53e7ef1bbd48435b731f7437eeb1fcd2b93d16382f442801b8e48a81cb",
"affectsGlobalScope": false
},
"../src/lib/i18n/useKeycloakLanguage.ts": {
"version": "7964b542d6d88973c5fbee0b381ace3d5eb811db90db22d96b637730527685d6",
"signature": "334418f10932ba83a4a79a670fd437465cc7e19b1592851d9b6c7b10692322a0",
"../src/lib/i18n/useKcTranslation.tsx": {
"version": "b7ff7d6a60f789876e4c1989e9ce07638dcd72fbc89d346669bfd8c6b13d78b1",
"signature": "da6283e16140fbb9da517f6cc8158c0c04cbf1d6a3b82029ba3c6009d7c33ddf",
"affectsGlobalScope": false
},
"../src/lib/i18n/useKeycloakTranslation.ts": {
"version": "0d7b6016ef86bc06b50b62507339a6e8ca8843c0cbf93d739f3b9e9d47848c58",
"signature": "d4dfc861da015c272c145d4d46a1918ce1aa3ce881d7a42f1226f50281f7033e",
"../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": {
"version": "4b46f4712ae966996b2cc81949d482063887c55478706e25d942482a44b99b71",
"signature": "4b46f4712ae966996b2cc81949d482063887c55478706e25d942482a44b99b71",
"affectsGlobalScope": false
},
"../node_modules/@emotion/cache/types/index.d.ts": {
"version": "71c1350814b0e0683b2725e5eb7d44abf44944d23d5b9ca215cd7e0efe0496e2",
"signature": "71c1350814b0e0683b2725e5eb7d44abf44944d23d5b9ca215cd7e0efe0496e2",
"affectsGlobalScope": false
},
"../node_modules/@emotion/serialize/types/index.d.ts": {
"version": "93b24ca76698e62732d72800da132367639a4426363c821338bbbd7cf6b64443",
"signature": "93b24ca76698e62732d72800da132367639a4426363c821338bbbd7cf6b64443",
"affectsGlobalScope": false
},
"../node_modules/@emotion/sheet/types/index.d.ts": {
"version": "bff03b7e72a77764a24872f421106234e8c36f7717a532dc6bbcc5e55f8d21c9",
"signature": "bff03b7e72a77764a24872f421106234e8c36f7717a532dc6bbcc5e55f8d21c9",
"affectsGlobalScope": false
},
"../node_modules/@emotion/css/types/create-instance.d.ts": {
"version": "3e00f8013ccb95d6af68164248a602eb5cfd567343ea4aa4465f256e6cc71b2c",
"signature": "3e00f8013ccb95d6af68164248a602eb5cfd567343ea4aa4465f256e6cc71b2c",
"affectsGlobalScope": false
},
"../node_modules/@emotion/css/types/index.d.ts": {
"version": "67471dd639c2391110a6aa6b3240db88f90419fda5f6b0c9affe5346dbd57545",
"signature": "67471dd639c2391110a6aa6b3240db88f90419fda5f6b0c9affe5346dbd57545",
"affectsGlobalScope": false
},
"../node_modules/tss-react/index.d.ts": {
"version": "22affa84e98526e6275f31db107abc75bde0f964c37150b31fcf4b48b883aaae",
"signature": "22affa84e98526e6275f31db107abc75bde0f964c37150b31fcf4b48b883aaae",
"affectsGlobalScope": false
},
"../src/lib/tools/appendLinkInHead.ts": {
"version": "92788b6ae592ef777d6b5bd8a405aa9d631fe44fcad75cb0858f4add053fa002",
"signature": "76eda515d388f98f4218cd7f43aa7987ef9a7bfd90b6c0768c8f948fff3d8f18",
"affectsGlobalScope": false
},
"../src/lib/tools/appendScriptInHead.ts": {
"version": "5107b145cf7e15aadd116fb00a8b1411cb67a852ca6b315dfe5464b64f4ea015",
"signature": "21f2e40dfae1bc0a1dab00a004cb49f93209f49231d129d09277b297dec07525",
"affectsGlobalScope": false
},
"../src/lib/components/Template.tsx": {
"version": "af3ea6a4e66450806d52241b9ee46a406de8560e363cf7fd2d09e0aa9d0891c6",
"signature": "5819531407c279a04fb2fa379d807999f30757996e561d95769ab661837cfa00",
"affectsGlobalScope": false
},
"../src/lib/components/Login.tsx": {
"version": "a3dd428187b4594b82ec3a70cf278dcc0613985090b4aa89366eaf7954067198",
"signature": "b140c6befa7cffb7a1ba17cd337326993258beb795aa99d9495c01727cd732da",
"affectsGlobalScope": false
},
"../src/lib/components/KcApp.tsx": {
"version": "b36ca5456441bb06ae16c21ca9c9d10c4dc6e959be61dd3b62d464e449f6057a",
"signature": "24c4592303b7d6b1cc308a3fcc670d17accbb8829cebc11918ad03e11c95cde6",
"affectsGlobalScope": false
},
"../src/lib/index.ts": {
"version": "8baee7ac19e659661ccbfaa9447bf106bcca907c505ad6afdeab78e6b6846e5c",
"signature": "38e39be533e70bd563f6de8762c11f27d97a1162bb121ca7d2614703b38e15d7",
"version": "e4fdff9cbcbe1220aaf660684ed15f0aca2bf495130f9cf4a5ed54b2c5839ad4",
"signature": "c054099d88cc247d4f8c372a16dd9d00c0ee746ca1251e6760e27262532768bd",
"affectsGlobalScope": false
},
"../src/lib/i18n/generated_messages/account.ts": {
@ -677,7 +767,7 @@
"affectsGlobalScope": false
},
"../src/test/download-sample-keycloak-themes.ts": {
"version": "e7fa7d2db7862eb4da932925466b0cef7f97577a0fe10215b32a2f4c32f02ee7",
"version": "2dc74672d6148baf0d96934ccdb449463b33a60ac8a9d054ed60f6f04aed3ce3",
"signature": "8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881",
"affectsGlobalScope": false
},
@ -695,6 +785,11 @@
"version": "c401118ea6c6daa9f196013b0622c602d4faec565bb1cc6ca751d2a8fc295498",
"signature": "c401118ea6c6daa9f196013b0622c602d4faec565bb1cc6ca751d2a8fc295498",
"affectsGlobalScope": false
},
"../node_modules/@types/parse-json/index.d.ts": {
"version": "2b8264b2fefd7367e0f20e2c04eed5d3038831fe00f5efbc110ff0131aab899b",
"signature": "2b8264b2fefd7367e0f20e2c04eed5d3038831fe00f5efbc110ff0131aab899b",
"affectsGlobalScope": false
}
},
"options": {
@ -702,7 +797,8 @@
"target": 1,
"lib": [
"lib.es2015.d.ts",
"lib.dom.d.ts"
"lib.dom.d.ts",
"lib.es2019.object.d.ts"
],
"esModuleInterop": true,
"declaration": true,
@ -719,6 +815,21 @@
"configFilePath": "../tsconfig.json"
},
"referencedMap": {
"../node_modules/@emotion/cache/types/index.d.ts": [
"../node_modules/@emotion/utils/types/index.d.ts"
],
"../node_modules/@emotion/css/types/create-instance.d.ts": [
"../node_modules/@emotion/cache/types/index.d.ts",
"../node_modules/@emotion/serialize/types/index.d.ts",
"../node_modules/@emotion/sheet/types/index.d.ts"
],
"../node_modules/@emotion/css/types/index.d.ts": [
"../node_modules/@emotion/css/types/create-instance.d.ts"
],
"../node_modules/@emotion/serialize/types/index.d.ts": [
"../node_modules/@emotion/utils/types/index.d.ts",
"../node_modules/csstype/index.d.ts"
],
"../node_modules/@types/node/base.d.ts": [
"../node_modules/@types/node/assert.d.ts",
"../node_modules/@types/node/ts3.6/base.d.ts"
@ -969,6 +1080,13 @@
"../node_modules/@types/node/index.d.ts",
"../node_modules/scripting-tools/dist/lib/get_caller_file_path.d.ts"
],
"../node_modules/tss-react/index.d.ts": [
"../node_modules/@emotion/css/types/index.d.ts",
"../node_modules/@emotion/serialize/types/index.d.ts"
],
"../src/bin/build-keycloak-theme/ftlValuesGlobalName.ts": [
"../node_modules/@types/react/jsx-runtime.d.ts"
],
"../src/bin/build-keycloak-theme/generateDebugFiles/index.ts": [
"../node_modules/@types/node/fs.d.ts",
"../node_modules/@types/node/path.d.ts",
@ -989,11 +1107,15 @@
"../node_modules/@types/react/jsx-runtime.d.ts"
],
"../src/bin/build-keycloak-theme/generateKeycloakThemeResources.ts": [
"../node_modules/@types/node/child_process.d.ts",
"../node_modules/@types/node/fs.d.ts",
"../node_modules/@types/node/path.d.ts",
"../node_modules/@types/react/jsx-runtime.d.ts",
"../src/bin/build-keycloak-theme/ftlValuesGlobalName.ts",
"../src/bin/build-keycloak-theme/generateFtl/index.ts",
"../src/bin/build-keycloak-theme/replaceImportFromStatic.ts",
"../src/bin/download-sample-keycloak-themes.ts",
"../src/bin/tools/downloadAndUnzip.ts",
"../src/bin/tools/transformCodebase.ts"
],
"../src/bin/build-keycloak-theme/index.ts": [
@ -1009,6 +1131,7 @@
"../node_modules/@types/react/jsx-runtime.d.ts"
],
"../src/bin/download-sample-keycloak-themes.ts": [
"../node_modules/@types/node/path.d.ts",
"../node_modules/@types/react/jsx-runtime.d.ts",
"../src/bin/build-keycloak-theme/index.ts",
"../src/bin/tools/downloadAndUnzip.ts"
@ -1051,6 +1174,49 @@
"../node_modules/@types/react/jsx-runtime.d.ts",
"../src/bin/tools/crawl.ts"
],
"../src/lib/components/KcApp.tsx": [
"../node_modules/@types/react/index.d.ts",
"../node_modules/@types/react/jsx-runtime.d.ts",
"../node_modules/evt/tools/typeSafety/assert.d.ts",
"../src/lib/components/KcProperties.ts",
"../src/lib/components/Login.tsx",
"../src/lib/kcContext.ts"
],
"../src/lib/components/KcProperties.ts": [
"../node_modules/@types/react/jsx-runtime.d.ts",
"../src/lib/tools/allPropertiesValuesToUndefined.ts"
],
"../src/lib/components/Login.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/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/i18n/KcLanguageTag.ts",
"../src/lib/i18n/useKcLanguageTag.ts",
"../src/lib/i18n/useKcTranslation.tsx",
"../src/lib/kcContext.ts",
"../src/lib/tools/appendLinkInHead.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": [
"../node_modules/@types/react/jsx-runtime.d.ts"
],
@ -1063,35 +1229,48 @@
"../src/lib/i18n/generated_messages/login.ts": [
"../node_modules/@types/react/jsx-runtime.d.ts"
],
"../src/lib/i18n/getLanguageLabel.ts": [
"../src/lib/i18n/useKcLanguageTag.ts": [
"../node_modules/@types/react/jsx-runtime.d.ts",
"../src/lib/i18n/useKeycloakLanguage.ts"
"../node_modules/evt/tools/typeSafety/assert.d.ts",
"../node_modules/powerhooks/index.d.ts",
"../src/lib/i18n/KcLanguageTag.ts",
"../src/lib/kcContext.ts"
],
"../src/lib/i18n/useKeycloakLanguage.ts": [
"../src/lib/i18n/useKcTranslation.tsx": [
"../node_modules/@types/react/index.d.ts",
"../node_modules/@types/react/jsx-runtime.d.ts",
"../node_modules/evt/tools/typeSafety/objectKeys.d.ts",
"../node_modules/evt/tools/typeSafety/id.d.ts",
"../node_modules/powerhooks/index.d.ts",
"../src/lib/i18n/generated_messages/login.ts",
"../src/lib/i18n/getLanguageLabel.ts"
],
"../src/lib/i18n/useKeycloakTranslation.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/i18n/useKcLanguageTag.ts"
],
"../src/lib/index.ts": [
"../node_modules/@types/react/jsx-runtime.d.ts",
"../src/lib/i18n/getLanguageLabel.ts",
"../src/lib/i18n/useKeycloakLanguage.ts",
"../src/lib/i18n/useKeycloakTranslation.ts",
"../src/lib/keycloakFtlValues.ts"
"../src/lib/components/KcApp.tsx",
"../src/lib/components/KcProperties.ts",
"../src/lib/components/Login.tsx",
"../src/lib/components/Template.tsx",
"../src/lib/i18n/KcLanguageTag.ts",
"../src/lib/i18n/useKcLanguageTag.ts",
"../src/lib/i18n/useKcTranslation.tsx",
"../src/lib/kcContext.ts"
],
"../src/lib/keycloakFtlValues.ts": [
"../src/lib/kcContext.ts": [
"../node_modules/@types/react/jsx-runtime.d.ts",
"../node_modules/evt/tools/typeSafety/id.d.ts",
"../src/bin/build-keycloak-theme/ftlValuesGlobalName.ts",
"../src/bin/build-keycloak-theme/generateFtl/index.ts",
"../src/bin/build-keycloak-theme/generateKeycloakThemeResources.ts"
"../src/lib/i18n/KcLanguageTag.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": [
"../node_modules/@types/react/jsx-runtime.d.ts"
],
"../src/lib/tools/appendScriptInHead.ts": [
"../node_modules/@types/react/jsx-runtime.d.ts"
],
"../src/test/build-keycloak-theme.ts": [
"../node_modules/@types/node/path.d.ts",
@ -1125,6 +1304,21 @@
]
},
"exportedModulesMap": {
"../node_modules/@emotion/cache/types/index.d.ts": [
"../node_modules/@emotion/utils/types/index.d.ts"
],
"../node_modules/@emotion/css/types/create-instance.d.ts": [
"../node_modules/@emotion/cache/types/index.d.ts",
"../node_modules/@emotion/serialize/types/index.d.ts",
"../node_modules/@emotion/sheet/types/index.d.ts"
],
"../node_modules/@emotion/css/types/index.d.ts": [
"../node_modules/@emotion/css/types/create-instance.d.ts"
],
"../node_modules/@emotion/serialize/types/index.d.ts": [
"../node_modules/@emotion/utils/types/index.d.ts",
"../node_modules/csstype/index.d.ts"
],
"../node_modules/@types/node/base.d.ts": [
"../node_modules/@types/node/assert.d.ts",
"../node_modules/@types/node/ts3.6/base.d.ts"
@ -1375,26 +1569,57 @@
"../node_modules/@types/node/index.d.ts",
"../node_modules/scripting-tools/dist/lib/get_caller_file_path.d.ts"
],
"../src/lib/i18n/getLanguageLabel.ts": [
"../src/lib/i18n/useKeycloakLanguage.ts"
"../node_modules/tss-react/index.d.ts": [
"../node_modules/@emotion/css/types/index.d.ts",
"../node_modules/@emotion/serialize/types/index.d.ts"
],
"../src/lib/i18n/useKeycloakLanguage.ts": [
"../src/lib/components/KcApp.tsx": [
"../node_modules/@types/react/index.d.ts",
"../src/lib/components/KcProperties.ts"
],
"../src/lib/components/Login.tsx": [
"../node_modules/@types/react/index.d.ts",
"../src/lib/components/KcProperties.ts"
],
"../src/lib/components/Template.tsx": [
"../node_modules/@types/react/index.d.ts",
"../src/lib/components/KcProperties.ts"
],
"../src/lib/i18n/KcLanguageTag.ts": [
"../src/lib/i18n/generated_messages/login.ts"
],
"../src/lib/i18n/useKcLanguageTag.ts": [
"../node_modules/powerhooks/index.d.ts"
],
"../src/lib/i18n/useKeycloakTranslation.ts": [
"../src/lib/i18n/useKcTranslation.tsx": [
"../node_modules/@types/react/index.d.ts",
"../src/lib/i18n/generated_messages/login.ts"
],
"../src/lib/index.ts": [
"../src/lib/i18n/getLanguageLabel.ts",
"../src/lib/i18n/useKeycloakLanguage.ts",
"../src/lib/i18n/useKeycloakTranslation.ts",
"../src/lib/keycloakFtlValues.ts"
"../src/lib/components/KcApp.tsx",
"../src/lib/components/KcProperties.ts",
"../src/lib/components/Login.tsx",
"../src/lib/components/Template.tsx",
"../src/lib/i18n/KcLanguageTag.ts",
"../src/lib/i18n/useKcLanguageTag.ts",
"../src/lib/i18n/useKcTranslation.tsx",
"../src/lib/kcContext.ts"
],
"../src/lib/keycloakFtlValues.ts": [
"../src/bin/build-keycloak-theme/generateFtl/index.ts"
"../src/lib/kcContext.ts": [
"../src/bin/build-keycloak-theme/generateFtl/index.ts",
"../src/lib/i18n/KcLanguageTag.ts"
],
"../src/lib/tools/allPropertiesValuesToUndefined.ts": [
"../node_modules/minimal-polyfills/Object.fromEntries.d.ts"
]
},
"semanticDiagnosticsPerFile": [
"../node_modules/@emotion/cache/types/index.d.ts",
"../node_modules/@emotion/css/types/create-instance.d.ts",
"../node_modules/@emotion/css/types/index.d.ts",
"../node_modules/@emotion/serialize/types/index.d.ts",
"../node_modules/@emotion/sheet/types/index.d.ts",
"../node_modules/@emotion/utils/types/index.d.ts",
"../node_modules/@types/comment-json/index.d.ts",
"../node_modules/@types/node/assert.d.ts",
"../node_modules/@types/node/async_hooks.d.ts",
@ -1439,6 +1664,7 @@
"../node_modules/@types/node/vm.d.ts",
"../node_modules/@types/node/worker_threads.d.ts",
"../node_modules/@types/node/zlib.d.ts",
"../node_modules/@types/parse-json/index.d.ts",
"../node_modules/@types/prop-types/index.d.ts",
"../node_modules/@types/react/global.d.ts",
"../node_modules/@types/react/index.d.ts",
@ -1457,12 +1683,14 @@
"../node_modules/domutils/lib/stringify.d.ts",
"../node_modules/domutils/lib/tagtypes.d.ts",
"../node_modules/domutils/lib/traversal.d.ts",
"../node_modules/evt/tools/typeSafety/assert.d.ts",
"../node_modules/evt/tools/typeSafety/id.d.ts",
"../node_modules/evt/tools/typeSafety/objectKeys.d.ts",
"../node_modules/htmlparser2/lib/FeedHandler.d.ts",
"../node_modules/htmlparser2/lib/Parser.d.ts",
"../node_modules/htmlparser2/lib/Tokenizer.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/useArrayDiff.d.ts",
"../node_modules/powerhooks/useCallbackFactory.d.ts",
@ -1479,6 +1707,7 @@
"../node_modules/powerhooks/withProps.d.ts",
"../node_modules/scripting-tools/dist/lib/get_caller_file_path.d.ts",
"../node_modules/scripting-tools/dist/lib/index.d.ts",
"../node_modules/tss-react/index.d.ts",
"../node_modules/typescript/lib/lib.dom.d.ts",
"../node_modules/typescript/lib/lib.es2015.collection.d.ts",
"../node_modules/typescript/lib/lib.es2015.core.d.ts",
@ -1504,9 +1733,11 @@
"../node_modules/typescript/lib/lib.es2018.intl.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.es2019.object.d.ts",
"../node_modules/typescript/lib/lib.es2020.bigint.d.ts",
"../node_modules/typescript/lib/lib.es5.d.ts",
"../node_modules/typescript/lib/lib.esnext.intl.d.ts",
"../src/bin/build-keycloak-theme/ftlValuesGlobalName.ts",
"../src/bin/build-keycloak-theme/generateDebugFiles/index.ts",
"../src/bin/build-keycloak-theme/generateFtl/index.ts",
"../src/bin/build-keycloak-theme/generateJavaStackFiles.ts",
@ -1520,15 +1751,22 @@
"../src/bin/tools/getProjectRoot.ts",
"../src/bin/tools/grant-exec-perms.ts",
"../src/bin/tools/transformCodebase.ts",
"../src/lib/components/KcApp.tsx",
"../src/lib/components/KcProperties.ts",
"../src/lib/components/Login.tsx",
"../src/lib/components/Template.tsx",
"../src/lib/i18n/KcLanguageTag.ts",
"../src/lib/i18n/generated_messages/account.ts",
"../src/lib/i18n/generated_messages/admin.ts",
"../src/lib/i18n/generated_messages/email.ts",
"../src/lib/i18n/generated_messages/login.ts",
"../src/lib/i18n/getLanguageLabel.ts",
"../src/lib/i18n/useKeycloakLanguage.ts",
"../src/lib/i18n/useKeycloakTranslation.ts",
"../src/lib/i18n/useKcLanguageTag.ts",
"../src/lib/i18n/useKcTranslation.tsx",
"../src/lib/index.ts",
"../src/lib/keycloakFtlValues.ts",
"../src/lib/kcContext.ts",
"../src/lib/tools/allPropertiesValuesToUndefined.ts",
"../src/lib/tools/appendLinkInHead.ts",
"../src/lib/tools/appendScriptInHead.ts",
"../src/test/build-keycloak-theme.ts",
"../src/test/download-sample-keycloak-themes.ts",
"../src/test/generateKeycloakThemeResources.ts",

359
yarn.lock
View File

@ -2,6 +2,143 @@
# yarn lockfile v1
"@babel/code-frame@^7.0.0":
version "7.12.13"
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.13.tgz#dcfc826beef65e75c50e21d3837d7d95798dd658"
integrity sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==
dependencies:
"@babel/highlight" "^7.12.13"
"@babel/helper-module-imports@^7.7.0":
version "7.12.13"
resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.12.13.tgz#ec67e4404f41750463e455cc3203f6a32e93fcb0"
integrity sha512-NGmfvRp9Rqxy0uHSSVP+SRIW1q31a7Ji10cLBcqSDUngGentY4FRiHOFZFE1CLU5eiL0oE8reH7Tg1y99TDM/g==
dependencies:
"@babel/types" "^7.12.13"
"@babel/helper-plugin-utils@^7.12.13":
version "7.13.0"
resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz#806526ce125aed03373bc416a828321e3a6a33af"
integrity sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==
"@babel/helper-validator-identifier@^7.12.11":
version "7.12.11"
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed"
integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==
"@babel/highlight@^7.12.13":
version "7.13.8"
resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.13.8.tgz#10b2dac78526424dfc1f47650d0e415dfd9dc481"
integrity sha512-4vrIhfJyfNf+lCtXC2ck1rKSzDwciqF7IWFhXXrSOUC2O5DrVp+w4c6ed4AllTxhTkUP5x2tYj41VaxdVMMRDw==
dependencies:
"@babel/helper-validator-identifier" "^7.12.11"
chalk "^2.0.0"
js-tokens "^4.0.0"
"@babel/plugin-syntax-jsx@^7.12.1":
version "7.12.13"
resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.13.tgz#044fb81ebad6698fe62c478875575bcbb9b70f15"
integrity sha512-d4HM23Q1K7oq/SLNmG6mRt85l2csmQ0cHRaxRXjKW0YFdEXqlZ5kzFQKH5Uc3rDJECgu+yCRgPkG04Mm98R/1g==
dependencies:
"@babel/helper-plugin-utils" "^7.12.13"
"@babel/runtime@^7.7.2":
version "7.13.8"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.13.8.tgz#cc886a85c072df1de23670dc1aa59fc116c4017c"
integrity sha512-CwQljpw6qSayc0fRG1soxHAKs1CnQMOChm4mlQP6My0kf9upVGizj/KhlTTgyUnETmHpcUXjaluNAkteRFuafg==
dependencies:
regenerator-runtime "^0.13.4"
"@babel/types@^7.12.13":
version "7.13.0"
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.13.0.tgz#74424d2816f0171b4100f0ab34e9a374efdf7f80"
integrity sha512-hE+HE8rnG1Z6Wzo+MhaKE5lM5eMx71T4EHJgku2E3xIfaULhDcxiiRxUYgwX8qwP1BBSlag+TdGOt6JAidIZTA==
dependencies:
"@babel/helper-validator-identifier" "^7.12.11"
lodash "^4.17.19"
to-fast-properties "^2.0.0"
"@emotion/babel-plugin@^11.0.0":
version "11.2.0"
resolved "https://registry.yarnpkg.com/@emotion/babel-plugin/-/babel-plugin-11.2.0.tgz#f25c6df8ec045dad5ae6ca63df0791673b98c920"
integrity sha512-lsnQBnl3l4wu/FJoyHnYRpHJeIPNkOBMbtDUIXcO8luulwRKZXPvA10zd2eXVN6dABIWNX4E34en/jkejIg/yA==
dependencies:
"@babel/helper-module-imports" "^7.7.0"
"@babel/plugin-syntax-jsx" "^7.12.1"
"@babel/runtime" "^7.7.2"
"@emotion/hash" "^0.8.0"
"@emotion/memoize" "^0.7.5"
"@emotion/serialize" "^1.0.0"
babel-plugin-macros "^2.6.1"
convert-source-map "^1.5.0"
escape-string-regexp "^4.0.0"
find-root "^1.1.0"
source-map "^0.5.7"
stylis "^4.0.3"
"@emotion/cache@^11.1.3":
version "11.1.3"
resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.1.3.tgz#c7683a9484bcd38d5562f2b9947873cf66829afd"
integrity sha512-n4OWinUPJVaP6fXxWZD9OUeQ0lY7DvtmtSuqtRWT0Ofo/sBLCVSgb4/Oa0Q5eFxcwablRKjUXqXtNZVyEwCAuA==
dependencies:
"@emotion/memoize" "^0.7.4"
"@emotion/sheet" "^1.0.0"
"@emotion/utils" "^1.0.0"
"@emotion/weak-memoize" "^0.2.5"
stylis "^4.0.3"
"@emotion/css@^11.1.3":
version "11.1.3"
resolved "https://registry.yarnpkg.com/@emotion/css/-/css-11.1.3.tgz#9ed44478b19e5d281ccbbd46d74d123d59be793f"
integrity sha512-RSQP59qtCNTf5NWD6xM08xsQdCZmVYnX/panPYvB6LQAPKQB6GL49Njf0EMbS3CyDtrlWsBcmqBtysFvfWT3rA==
dependencies:
"@emotion/babel-plugin" "^11.0.0"
"@emotion/cache" "^11.1.3"
"@emotion/serialize" "^1.0.0"
"@emotion/sheet" "^1.0.0"
"@emotion/utils" "^1.0.0"
"@emotion/hash@^0.8.0":
version "0.8.0"
resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.8.0.tgz#bbbff68978fefdbe68ccb533bc8cbe1d1afb5413"
integrity sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==
"@emotion/memoize@^0.7.4", "@emotion/memoize@^0.7.5":
version "0.7.5"
resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.5.tgz#2c40f81449a4e554e9fc6396910ed4843ec2be50"
integrity sha512-igX9a37DR2ZPGYtV6suZ6whr8pTFtyHL3K/oLUotxpSVO2ASaprmAe2Dkq7tBo7CRY7MMDrAa9nuQP9/YG8FxQ==
"@emotion/serialize@^1.0.0":
version "1.0.0"
resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.0.0.tgz#1a61f4f037cf39995c97fc80ebe99abc7b191ca9"
integrity sha512-zt1gm4rhdo5Sry8QpCOpopIUIKU+mUSpV9WNmFILUraatm5dttNEaYzUWWSboSMUE6PtN2j1cAsuvcugfdI3mw==
dependencies:
"@emotion/hash" "^0.8.0"
"@emotion/memoize" "^0.7.4"
"@emotion/unitless" "^0.7.5"
"@emotion/utils" "^1.0.0"
csstype "^3.0.2"
"@emotion/sheet@^1.0.0":
version "1.0.1"
resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.0.1.tgz#245f54abb02dfd82326e28689f34c27aa9b2a698"
integrity sha512-GbIvVMe4U+Zc+929N1V7nW6YYJtidj31lidSmdYcWozwoBIObXBnaJkKNDjZrLm9Nc0BR+ZyHNaRZxqNZbof5g==
"@emotion/unitless@^0.7.5":
version "0.7.5"
resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.7.5.tgz#77211291c1900a700b8a78cfafda3160d76949ed"
integrity sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==
"@emotion/utils@^1.0.0":
version "1.0.0"
resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.0.0.tgz#abe06a83160b10570816c913990245813a2fd6af"
integrity sha512-mQC2b3XLDs6QCW+pDQDiyO/EdGZYOygE8s5N5rrzjSI4M3IejPE/JPndCBwRT9z982aqQNi6beWs1UeayrQxxA==
"@emotion/weak-memoize@^0.2.5":
version "0.2.5"
resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz#8eed982e2ee6f7f4e44c253e12962980791efd46"
integrity sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA==
"@octokit/auth-token@^2.4.4":
version "2.4.5"
resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-2.4.5.tgz#568ccfb8cb46f36441fac094ce34f7a875b197f3"
@ -114,6 +251,11 @@
resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.54.tgz#a737488631aca3ec7bd9f6229d77f1079e444793"
integrity sha512-c8Lm7+hXdSPmWH4B9z/P/xIXhFK3mCQin4yCYMd2p1qpMG5AfgyJuYZ+3q2dT7qLiMMMGMd5dnkFpdqJARlvtQ==
"@types/parse-json@^4.0.0":
version "4.0.0"
resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0"
integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==
"@types/prop-types@*":
version "15.7.3"
resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7"
@ -132,6 +274,13 @@ ansi-regex@^5.0.0:
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75"
integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==
ansi-styles@^3.2.1:
version "3.2.1"
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
dependencies:
color-convert "^1.9.0"
ansi-styles@^4.0.0:
version "4.3.0"
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
@ -139,6 +288,15 @@ ansi-styles@^4.0.0:
dependencies:
color-convert "^2.0.1"
babel-plugin-macros@^2.6.1:
version "2.8.0"
resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz#0f958a7cc6556b1e65344465d99111a1e5e10138"
integrity sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==
dependencies:
"@babel/runtime" "^7.7.2"
cosmiconfig "^6.0.0"
resolve "^1.12.0"
balanced-match@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
@ -162,6 +320,20 @@ brace-expansion@^1.1.7:
balanced-match "^1.0.0"
concat-map "0.0.1"
callsites@^3.0.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
chalk@^2.0.0:
version "2.4.2"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
dependencies:
ansi-styles "^3.2.1"
escape-string-regexp "^1.0.5"
supports-color "^5.3.0"
cheerio-select-tmp@^0.1.0:
version "0.1.1"
resolved "https://registry.yarnpkg.com/cheerio-select-tmp/-/cheerio-select-tmp-0.1.1.tgz#55bbef02a4771710195ad736d5e346763ca4e646"
@ -195,6 +367,13 @@ cliui@^7.0.2:
strip-ansi "^6.0.0"
wrap-ansi "^7.0.0"
color-convert@^1.9.0:
version "1.9.3"
resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
dependencies:
color-name "1.1.3"
color-convert@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
@ -202,6 +381,11 @@ color-convert@^2.0.1:
dependencies:
color-name "~1.1.4"
color-name@1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
color-name@~1.1.4:
version "1.1.4"
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
@ -227,6 +411,13 @@ concat-map@0.0.1:
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
convert-source-map@^1.5.0:
version "1.7.0"
resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442"
integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==
dependencies:
safe-buffer "~5.1.1"
copyfiles@^2.4.1:
version "2.4.1"
resolved "https://registry.yarnpkg.com/copyfiles/-/copyfiles-2.4.1.tgz#d2dcff60aaad1015f09d0b66e7f0f1c5cd3c5da5"
@ -245,6 +436,17 @@ core-util-is@^1.0.2, core-util-is@~1.0.0:
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
cosmiconfig@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982"
integrity sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==
dependencies:
"@types/parse-json" "^4.0.0"
import-fresh "^3.1.0"
parse-json "^5.0.0"
path-type "^4.0.0"
yaml "^1.7.2"
css-select@^3.1.2:
version "3.1.2"
resolved "https://registry.yarnpkg.com/css-select/-/css-select-3.1.2.tgz#d52cbdc6fee379fba97fb0d3925abbd18af2d9d8"
@ -342,6 +544,13 @@ entities@~2.1.0:
resolved "https://registry.yarnpkg.com/entities/-/entities-2.1.0.tgz#992d3129cf7df6870b96c57858c249a120f8b8b5"
integrity sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==
error-ex@^1.3.1:
version "1.3.2"
resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
dependencies:
is-arrayish "^0.2.1"
es5-ext@^0.10.35, es5-ext@^0.10.46, es5-ext@^0.10.50, es5-ext@^0.10.53, es5-ext@~0.10.14, es5-ext@~0.10.2, es5-ext@~0.10.46:
version "0.10.53"
resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.53.tgz#93c5a3acfdbef275220ad72644ad02ee18368de1"
@ -383,6 +592,16 @@ escalade@^3.1.1:
resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==
escape-string-regexp@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
escape-string-regexp@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
esprima@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
@ -419,11 +638,21 @@ ext@^1.1.2:
dependencies:
type "^2.0.0"
find-root@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4"
integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==
fs.realpath@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
function-bind@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
get-caller-file@^2.0.5:
version "2.0.5"
resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
@ -454,11 +683,23 @@ glob@^7.0.5, glob@^7.1.3, glob@^7.1.6:
once "^1.3.0"
path-is-absolute "^1.0.0"
has-flag@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
has-own-prop@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/has-own-prop/-/has-own-prop-2.0.0.tgz#f0f95d58f65804f5d218db32563bb85b8e0417af"
integrity sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ==
has@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
dependencies:
function-bind "^1.1.1"
htmlparser2@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.0.0.tgz#c2da005030390908ca4c91e5629e418e0665ac01"
@ -469,6 +710,14 @@ htmlparser2@^6.0.0:
domutils "^2.4.4"
entities "^2.0.0"
import-fresh@^3.1.0:
version "3.3.0"
resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b"
integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==
dependencies:
parent-module "^1.0.0"
resolve-from "^4.0.0"
inflight@^1.0.4:
version "1.0.6"
resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
@ -482,6 +731,18 @@ inherits@2, inherits@^2.0.1, inherits@~2.0.1, inherits@~2.0.3:
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
is-arrayish@^0.2.1:
version "0.2.1"
resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=
is-core-module@^2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a"
integrity sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==
dependencies:
has "^1.0.3"
is-fullwidth-code-point@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
@ -507,11 +768,26 @@ isarray@~1.0.0:
resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
"js-tokens@^3.0.0 || ^4.0.0":
"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
json-parse-even-better-errors@^2.3.0:
version "2.3.1"
resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d"
integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==
lines-and-columns@^1.1.6:
version "1.1.6"
resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00"
integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=
lodash@^4.17.19:
version "4.17.21"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
loose-envify@^1.1.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
@ -540,7 +816,7 @@ memoizee@^0.4.15:
next-tick "^1.1.0"
timers-ext "^0.1.7"
minimal-polyfills@^2.1.5:
minimal-polyfills@^2.1.5, minimal-polyfills@^2.1.6:
version "2.1.6"
resolved "https://registry.yarnpkg.com/minimal-polyfills/-/minimal-polyfills-2.1.6.tgz#eab50832add31afd40a22b38fb76d1fdcd2a51e4"
integrity sha512-vqoxj7eMzsqX0M6/dkgoNFPw6Mztgn5qjSl0bWGboQeU7Y4UPLeyoqQw6JI+0qmBcJYdkr3nK7dqY8u/fgRp5g==
@ -599,6 +875,23 @@ once@^1.3.0, once@^1.4.0:
dependencies:
wrappy "1"
parent-module@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==
dependencies:
callsites "^3.0.0"
parse-json@^5.0.0:
version "5.2.0"
resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd"
integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==
dependencies:
"@babel/code-frame" "^7.0.0"
error-ex "^1.3.1"
json-parse-even-better-errors "^2.3.0"
lines-and-columns "^1.1.6"
parse5-htmlparser2-tree-adapter@^6.0.0:
version "6.0.1"
resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz#2cdf9ad823321140370d4dbf5d3e92c7c8ddc6e6"
@ -621,6 +914,16 @@ path-is-absolute@^1.0.0:
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
path-parse@^1.0.6:
version "1.0.6"
resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c"
integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==
path-type@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
powerhooks@^0.0.14:
version "0.0.14"
resolved "https://registry.yarnpkg.com/powerhooks/-/powerhooks-0.0.14.tgz#1456620de2d2b899f54509a8ef909c4c15694c81"
@ -673,6 +976,11 @@ readable-stream@~2.3.6:
string_decoder "~1.1.1"
util-deprecate "~1.0.1"
regenerator-runtime@^0.13.4:
version "0.13.7"
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55"
integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==
repeat-string@^1.6.1:
version "1.6.1"
resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
@ -688,6 +996,19 @@ resize-observer-polyfill@^1.5.1:
resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464"
integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==
resolve-from@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
resolve@^1.12.0:
version "1.20.0"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975"
integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==
dependencies:
is-core-module "^2.2.0"
path-parse "^1.0.6"
rimraf@^3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
@ -712,6 +1033,11 @@ scripting-tools@^0.19.12, scripting-tools@^0.19.13:
resolved "https://registry.yarnpkg.com/scripting-tools/-/scripting-tools-0.19.13.tgz#836df7d9c2ec99aea91984d1d5b2bd110670afec"
integrity sha512-d09H8vzSVa8p4XUTJqHZDbjKDyl5TG3SyPfNPUUkfyOwjwykStmfK8AXyWq7VRWjcgzTpkTiJ9uMk1NytMQY7w==
source-map@^0.5.7:
version "0.5.7"
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=
string-width@^4.1.0, string-width@^4.2.0:
version "4.2.2"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5"
@ -745,6 +1071,18 @@ strip-ansi@^6.0.0:
dependencies:
ansi-regex "^5.0.0"
stylis@^4.0.3:
version "4.0.7"
resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.0.7.tgz#412a90c28079417f3d27c028035095e4232d2904"
integrity sha512-OFFeUXFgwnGOKvEXaSv0D0KQ5ADP0n6g3SVONx6I/85JzNZ3u50FRwB3lVIk1QO2HNdI75tbVzc4Z66Gdp9voA==
supports-color@^5.3.0:
version "5.5.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
dependencies:
has-flag "^3.0.0"
through2@^2.0.1:
version "2.0.5"
resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd"
@ -761,6 +1099,18 @@ timers-ext@^0.1.7:
es5-ext "~0.10.46"
next-tick "1"
to-fast-properties@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=
tss-react@^0.0.9:
version "0.0.9"
resolved "https://registry.yarnpkg.com/tss-react/-/tss-react-0.0.9.tgz#4f07be32ad8a9c7db2881236b80fd4715384fe92"
integrity sha512-1Vo1UQrj18RaQIla/pes717iBzuYwVpQq/BdK/jREpm6kVS4HpoYXQlM0A0wp2ToG3kvFdop5STqowW3sviCfw==
dependencies:
"@emotion/css" "^11.1.3"
type@^1.0.1:
version "1.2.0"
resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0"
@ -820,6 +1170,11 @@ y18n@^5.0.5:
resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.5.tgz#8769ec08d03b1ea2df2500acef561743bbb9ab18"
integrity sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==
yaml@^1.7.2:
version "1.10.0"
resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.0.tgz#3b593add944876077d4d683fee01081bd9fff31e"
integrity sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==
yargs-parser@^20.2.2:
version "20.2.6"
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.6.tgz#69f920addf61aafc0b8b89002f5d66e28f2d8b20"