Compare commits

..

1 Commits

Author SHA1 Message Date
61be317f8b Enabling shorter import paths [automatic] 2021-03-05 18:53:13 +00:00
104 changed files with 1275 additions and 3717 deletions

View File

@ -1,52 +1,3 @@
### **0.2.2** (2021-03-08)
- Add table of content
- Update README.md
- Update README.md
## **0.2.1** (2021-03-08)
- Update ci.yaml
- Update readme
- Update readme
- update deps
- Update readme
- Add all mocks for testing
- many small fixes
### **0.1.6** (2021-03-07)
- Fix Turkish
### **0.1.5** (2021-03-07)
- Fix getKcLanguageLabel
### **0.1.4** (2021-03-07)
### **0.1.3** (2021-03-07)
- Implement LoginVerifyEmail
- Implement login-reset-password.ftl
### **0.1.2** (2021-03-07)
- Fix build
- Fix build
### **0.1.1** (2021-03-06)
- Implement Error page
- rename pageBasename by pageId
- Implement reactive programing for language switching
- Add Info page, refactor
## **0.1.0** (2021-03-05)
- Rename keycloakify
### **0.0.33** (2021-03-05)
- Fix syncronization with non react pages

152
README.md
View File

@ -2,19 +2,18 @@
<img src="https://user-images.githubusercontent.com/6702424/109387840-eba11f80-7903-11eb-9050-db1dad883f78.png">
</p>
<p align="center">
<i>🔏 Customize key cloak's pages as if they were part of your App 🔏</i>
<i>🔏 Keycloak theme generator for Reacts app 🔏</i>
<br>
<br>
<img src="https://github.com/garronej/keycloakify/workflows/ci/badge.svg?branch=develop">
<img src="https://img.shields.io/bundlephobia/minzip/keycloakify">
<img src="https://img.shields.io/npm/dw/keycloakify">
<img src="https://img.shields.io/npm/l/keycloakify">
<img src="https://github.com/garronej/keycloak-react-theming/workflows/ci/badge.svg?branch=develop">
<img src="https://img.shields.io/bundlephobia/minzip/keycloak-react-theming">
<img src="https://img.shields.io/npm/dw/keycloak-react-theming">
<img src="https://img.shields.io/npm/l/keycloak-react-theming">
</p>
<p align="center">
<i>Ultimately this build tool Generates a Keycloak theme</i>
<img src="https://user-images.githubusercontent.com/6702424/110260457-a1c3d380-7fac-11eb-853a-80459b65626b.png">
</p>
**!!! This module is under active developement. It is not usable yet!!!**
# Motivations
@ -23,146 +22,52 @@ The problem:
![keycloak_before](https://user-images.githubusercontent.com/6702424/108838381-dbbbcf80-75d3-11eb-8ae8-db41563ef9db.gif)
When we redirected to Keycloak the user suffers from a harsh context switch.
On je login/register pages the language is set back to default and the theme is different that the one on the app.
Keycloak does offer a way to customize theses pages but it requires a lot of raw HTML/CSS hacking
to reproduce the look and feel of a specific app. Not mentioning the maintenance cost of such an endeavour.
Wouldn't it be great if we could just design the login and register pages as if they where part of our app?
Here is `yarn add keycloakify` for you 🍸
Wouldn't it be great if we could just design the login and register pages as if they where part of our app while
still letting Keycloak handle the heavy lifting of actually authenticating the users?
Here is `yarn add keycloak-react-theming` for you 🍸
TODO: Insert video after.
- [Motivations](#motivations)
- [How to use](#how-to-use)
- [Setting up the build tool](#setting-up-the-build-tool)
- [Developing your login and register pages in your React app](#developing-your-login-and-register-pages-in-your-react-app)
- [Just changing the look](#just-changing-the-look)
- [Changing the look **and** feel](#changing-the-look-and-feel)
- [Hot reload](#hot-reload)
- [How to implement context persistance](#how-to-implement-context-persistance)
- [If your keycloak is a subdomain of your app.](#if-your-keycloak-is-a-subdomain-of-your-app)
- [Else](#else)
- [REQUIREMENTS](#requirements)
- [API Reference](#api-reference)
- [The build tool](#the-build-tool)
- [The fronted lib ( imported into your react app )](#the-fronted-lib--imported-into-your-react-app-)
# How to use
## Setting up the build tool
Add `keycloakify` to the dev dependencies of your project `npm install --save-dev keycloakify` or `yarn add --dev keycloakify`
Add `keycloak-react-theming` to the dev dependencies of your project `npm install --save-dev keycloak-react-theming` or `yarn add --dev keycloak-react-theming`
then configure your `package.json` build's script to build the keycloak's theme by adding `&& build-keycloak-theme`.
Typically you will get:
`package.json`
`package.json`:
```json
"devDependencies": {
"keycloakify": "^0.0.10"
},
"scripts": {
"devDependencies": {
"keycloak-react-theming": "^0.0.10"
},
"scripts": {
"build": "react-scripts build && build-keycloak-theme"
},
},
```
Then build your app with `yarn run build` or `npm run build`, you will be provided with instructions
about how to load the theme into Keycloak.
[![kickstart_video](https://user-images.githubusercontent.com/6702424/108877866-f146ee80-75ff-11eb-8120-003b3c5f6dd8.png)](https://youtu.be/xTz0Rj7i2v8)
## Developing your login and register pages in your React app
### Just changing the look
TODO
The fist approach is to only arr/replace the default class names by your
own.
```tsx
import { App } from "./<wherever>/App";
import {
KcApp,
defaultKcProps,
kcContext
} from "keycloakify";
import { css } from "tss-react";
const myClassName = css({ "color": "red" });
reactDom.render(
// Unless the app is currently being served by Keycloak
// kcContext is undefined.
kcContext !== undefined ?
<KcApp
kcContext={kcContext}
{...{
...defaultKcProps,
"kcHeaderWrapperClass": myClassName
}}
/> :
<App />, // Your actual app
document.getElementById("root")
);
```
<i>result:</i>
<p align="center">
<img src="https://user-images.githubusercontent.com/6702424/110261408-688d6280-7fb0-11eb-9822-7003d268b459.png">
</p>
### Changing the look **and** feel
If you want to really re-implement the pages the best approach is to
create you own version of the [`<KcApp />`](https://github.com/garronej/keycloakify/blob/develop/src/lib/components/KcApp.tsx).
Copy/past some of [the components](https://github.com/garronej/keycloakify/tree/develop/src/lib/components) provided by this module and start hacking around.
### Hot reload
By default, in order to see your changes you will have to wait for
`yarn build` to complete which can takes sevrall minute.
If you want to test your login screens outside of Keycloak, in [storybook](https://storybook.js.org/)
for example you can use `kcContextMocks`.
```tsx
import {
KcApp,
defaultKcProps,
kcContextMocks
} from "keycloakify";
reactDom.render(
kcContext !== undefined ?
<KcApp
kcContext={kcContextMocks.kcLoginContext}
{...defaultKcProps}
/>
document.getElementById("root")
);
```
then `yarn start` ...
*NOTE: keycloak-react-theming was renamed keycloakify since this video was recorded*
[![kickstart_video](https://user-images.githubusercontent.com/6702424/108877866-f146ee80-75ff-11eb-8120-003b3c5f6dd8.png)](https://youtu.be/xTz0Rj7i2v8)
# How to implement context persistance
If you want dark mode preference, language and others users preferences
to persist within the page served by keycloak here are the methods you can
adopt.
If you want dark mode preference, language and others users preferences your can do so
very easily by using [`powerhooks/useGlobalState`](https://github.com/garronej/powerhooks)
## If your keycloak is a subdomain of your app.
E.g: Your app url is `my-app.com` and your keycloak url is `auth.my-app.com`.
In this case there is a very straightforward approach and it is to use [`powerhooks/useGlobalState`](https://github.com/garronej/powerhooks).
Instead of `{ "persistance": "localStorage" }` use `{ "persistance": "cookie" }`.
## Else
You will have to use URL parameters to passes states when you redirect to
the login page.
TOTO: Provide a clean way, as abstracted as possible, way to do that.
WARNING: `powerhooks` is still a work in progress.
# REQUIREMENTS
@ -192,4 +97,3 @@ Part of the lib that runs with node, at build time.
Part of the lib that you import in your react project and runs on the browser.
**TODO**

View File

@ -1,28 +0,0 @@
Object.defineProperty(
Object,
"deepAssign",
{
"value": function callee(target, source) {
Object.keys(source).forEach(function (key) {
var value = source[key];
if (target[key] === undefined) {
target[key] = value;
return;
}
if (value instanceof Object) {
if (value instanceof Array) {
value.forEach(function (entry) {
target[key].push(entry);
});
return;
}
callee(target[key], value);
return;
}
target[key] = value;
});
return target;
}
}
);

View File

@ -1,26 +0,0 @@
var es = /&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34);/g;
var unes = {
'&amp;': '&',
'&#38;': '&',
'&lt;': '<',
'&#60;': '<',
'&gt;': '>',
'&#62;': '>',
'&apos;': "'",
'&#39;': "'",
'&quot;': '"',
'&#34;': '"'
};
var cape = function (m) { return unes[m]; };
Object.defineProperty(
String,
"htmlUnescape",
{
"value": function (un) {
return String.prototype.replace.call(un, es, cape);
}
}
);

View File

@ -1,15 +0,0 @@
<script>const _=
{
"client": (function (){
<#if client??>
return {
"baseUrl": "${(client.baseUrl!'')?no_esc}" || undefined
};
</#if>
return undefined;
})()
}
</script>

View File

@ -1,12 +1,10 @@
export declare const pageIds: readonly ["login.ftl", "register.ftl", "info.ftl", "error.ftl", "login-reset-password.ftl", "login-verify-email.ftl"];
export declare type PageId = typeof pageIds[number];
export declare function generateFtlFilesCodeFactory(params: {
ftlValuesGlobalName: string;
cssGlobalsToDefine: Record<string, string>;
indexHtmlCode: string;
}): {
generateFtlFilesCode: (params: {
pageId: PageId;
pageBasename: "login.ftl" | "register.ftl";
}) => {
ftlCode: string;
};

View File

@ -35,26 +35,16 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.generateFtlFilesCodeFactory = exports.pageIds = void 0;
exports.generateFtlFilesCodeFactory = void 0;
var cheerio_1 = __importDefault(require("cheerio"));
var replaceImportFromStatic_1 = require("../replaceImportFromStatic");
var fs_1 = __importDefault(require("fs"));
var path_1 = require("path");
var objectKeys_1 = require("evt/tools/typeSafety/objectKeys");
exports.pageIds = ["login.ftl", "register.ftl", "info.ftl", "error.ftl", "login-reset-password.ftl", "login-verify-email.ftl"];
function loadAdjacentFile(fileBasename) {
return fs_1.default.readFileSync(path_1.join(__dirname, fileBasename))
.toString("utf8");
}
;
function loadFtlFile(ftlFileBasename) {
try {
return loadAdjacentFile(ftlFileBasename)
.match(/^<script>const _=((?:.|\n)+)<\/script>[\n]?$/)[1];
}
catch (_a) {
return "{}";
}
return fs_1.default.readFileSync(path_1.join(__dirname, ftlFileBasename))
.toString("utf8")
.match(/^<script>const _=((?:.|\n)+)<\/script>[\n]?$/)[1];
}
function generateFtlFilesCodeFactory(params) {
var ftlValuesGlobalName = params.ftlValuesGlobalName, cssGlobalsToDefine = params.cssGlobalsToDefine, indexHtmlCode = params.indexHtmlCode;
@ -97,50 +87,72 @@ function generateFtlFilesCodeFactory(params) {
' <#list scripts as script>',
' <script src="${script}" type="text/javascript"></script>',
' </#list>',
'</#if>'
'</#if>',
].join("\n")
};
var pageSpecificCodePlaceholder = "<!-- dIddLqMeOedErIdLsPdNdI9dSl42sw -->";
$("head").prepend(__spreadArray(__spreadArray(__spreadArray([], __read((Object.keys(cssGlobalsToDefine).length === 0 ? [] : [
$("head").prepend(__spreadArray(__spreadArray([], __read((Object.keys(cssGlobalsToDefine).length === 0 ? [] : [
'',
'<style>',
replaceImportFromStatic_1.generateCssCodeToDefineGlobals({ cssGlobalsToDefine: cssGlobalsToDefine }).cssCodeToPrependInHead,
'</style>',
''
]))), __read(["Object.deepAssign.js", "String.htmlUnescape.js"].map(function (fileBasename) { return [
"<script>",
loadAdjacentFile(fileBasename),
"</script>"
].join("\n"); }))), [
]))), [
'<script>',
" window." + ftlValuesGlobalName + "= Object.assign(",
" {},",
' Object.deepAssign(',
" window." + ftlValuesGlobalName + ",",
" " + objectKeys_1.objectKeys(ftlCommonPlaceholders)[0],
' );',
'</script>',
'',
pageSpecificCodePlaceholder,
'',
objectKeys_1.objectKeys(ftlCommonPlaceholders)[1]
objectKeys_1.objectKeys(ftlCommonPlaceholders)[1],
''
]).join("\n"));
var partiallyFixedIndexHtmlCode = $.html();
function generateFtlFilesCode(params) {
var pageId = params.pageId;
var pageBasename = params.pageBasename;
var $ = cheerio_1.default.load(partiallyFixedIndexHtmlCode);
var ftlPlaceholders = __assign({ '{ "x": "kxOlLqMeOed9sdLdIdOxd444" }': loadFtlFile(pageId) }, ftlCommonPlaceholders);
var ftlCode = $.html()
.replace(pageSpecificCodePlaceholder, [
var ftlPlaceholders = __assign({ '{ "x": "kxOlLqMeOed9sdLdIdOxd444" }': loadFtlFile(pageBasename) }, ftlCommonPlaceholders);
$("head").prepend([
'',
'<script>',
" Object.deepAssign(",
" window." + ftlValuesGlobalName + ",",
" { \"pageId\": \"" + pageId + "\" }",
' );',
" Object.deepAssign(",
" window." + ftlValuesGlobalName + ",",
'',
" window." + ftlValuesGlobalName + " = Object.assign(",
" { \"pageBasename\": \"" + pageBasename + "\" },",
" " + objectKeys_1.objectKeys(ftlPlaceholders)[0],
' );',
'</script>'
'',
' Object.defineProperty(',
' Object,',
' "deepAssign",',
' {',
' "value": function callee(target, source) {',
' Object.keys(source).forEach(function (key) {',
' var value = source[key];',
' if( target[key] === undefined ){',
' target[key]= value;',
' return;',
' }',
' if( value instanceof Object ){',
' if( value instanceof Array ){',
' value.forEach(function (entry){',
' target[key].push(entry);',
' });',
' return;',
' }',
' callee(target[key], value);',
' return;',
' }',
' target[key]= value;',
' });',
' return target;',
' }',
' }',
' );',
'',
'</script>',
''
].join("\n"));
var ftlCode = $.html();
objectKeys_1.objectKeys(ftlPlaceholders)
.forEach(function (id) { return ftlCode = ftlCode.replace(id, ftlPlaceholders[id]); });
return { ftlCode: ftlCode };

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,37 +0,0 @@
<script>const _=
{
"messageHeader": "${messageHeader!''}" || undefined,
"requiredActions": (function (){
<#if requiredActions??>
var out =[];
<#list requiredActions>
<#items as reqActionItem>
out.push("${reqActionItem}");
</#items></b>
</#list>
return out;
<#else>
return undefined;
})(),
"skipLink": (function (){
<#if skipLink??>
return true;
</#if>
return false;
})(),
"pageRedirectUri": "${(pageRedirectUri!'')?no_esc}" || undefined,
"actionUri": "${(actionUri!'')?no_esc}" || undefined,
"client": {
"baseUrl": "${(client.baseUrl!'')?no_esc}" || undefined
}
}
</script>

View File

@ -1,7 +0,0 @@
<script>const _=
{
"realm": {
"loginWithEmailAllowed": ${realm.loginWithEmailAllowed?c}
},
}
</script>

View File

@ -7,7 +7,6 @@
"realm": {
"loginWithEmailAllowed": ${realm.loginWithEmailAllowed?c},
"rememberMe": ${realm.rememberMe?c},
"password": ${realm.password?c},
"resetPasswordAllowed": ${realm.resetPasswordAllowed?c},
"registrationAllowed": ${realm.registrationAllowed?c}
},

View File

@ -11,6 +11,7 @@
"displayName": "${realm.displayName!''}" || undefined,
"displayNameHtml": "${realm.displayNameHtml!''}" || undefined,
"internationalizationEnabled": ${realm.internationalizationEnabled?c},
"password": ${realm.password?c},
"registrationEmailAsUsername": ${realm.registrationEmailAsUsername?c},
},
"locale": (function (){
@ -94,7 +95,7 @@
return { 
"type": "${message.type}",
"summary": String.htmlUnescape("${message.summary}")
"summary": "${kcSanitize(message.summary)?no_esc}"
};
</#if>

View File

@ -40,7 +40,6 @@ var install_builtin_keycloak_themes_1 = require("../install-builtin-keycloak-the
var downloadAndUnzip_1 = require("../tools/downloadAndUnzip");
var child_process = __importStar(require("child_process"));
var ftlValuesGlobalName_1 = require("./ftlValuesGlobalName");
var urlResourcesPath_1 = require("../../lib/kcContextMocks/urlResourcesPath");
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");
@ -70,9 +69,9 @@ function generateKeycloakThemeResources(params) {
ftlValuesGlobalName: ftlValuesGlobalName_1.ftlValuesGlobalName,
"indexHtmlCode": fs.readFileSync(path_1.join(reactAppBuildDirPath, "index.html")).toString("utf8")
}).generateFtlFilesCode;
generateFtl_1.pageIds.forEach(function (pageId) {
var ftlCode = generateFtlFilesCode({ pageId: pageId }).ftlCode;
fs.writeFileSync(path_1.join(themeDirPath, pageId), Buffer.from(ftlCode, "utf8"));
["login.ftl", "register.ftl"].forEach(function (pageBasename) {
var ftlCode = generateFtlFilesCode({ pageBasename: pageBasename }).ftlCode;
fs.writeFileSync(path_1.join(themeDirPath, pageBasename), Buffer.from(ftlCode, "utf8"));
});
{
var tmpDirPath = path_1.join(themeDirPath, "..", "tmp_xxKdLpdIdLd");
@ -80,30 +79,10 @@ function generateKeycloakThemeResources(params) {
"url": install_builtin_keycloak_themes_1.builtinThemesUrl,
"destDirPath": tmpDirPath
});
var themeResourcesDirPath = path_1.join(themeDirPath, "resources");
transformCodebase_1.transformCodebase({
"srcDirPath": path_1.join(tmpDirPath, "keycloak", "login", "resources"),
"destDirPath": themeResourcesDirPath
"destDirPath": path_1.join(themeDirPath, "resources")
});
//const keycloakResourcesWithinPublicDirPath = pathJoin(reactAppBuildDirPath, "..", "public", "keycloak_static");
var reactAppPublicDirPath = path_1.join(reactAppBuildDirPath, "..", "public");
transformCodebase_1.transformCodebase({
"srcDirPath": themeResourcesDirPath,
"destDirPath": path_1.join(reactAppPublicDirPath, urlResourcesPath_1.resourcesPath)
});
transformCodebase_1.transformCodebase({
"srcDirPath": path_1.join(tmpDirPath, "keycloak", "common", "resources"),
"destDirPath": path_1.join(reactAppPublicDirPath, urlResourcesPath_1.resourcesCommonPath)
});
var keycloakResourcesWithinPublicDirPath = path_1.join(reactAppPublicDirPath, urlResourcesPath_1.subDirOfPublicDirBasename);
fs.writeFileSync(path_1.join(keycloakResourcesWithinPublicDirPath, ".gitignore"), Buffer.from([
urlResourcesPath_1.resourcesPath,
urlResourcesPath_1.resourcesCommonPath
].join("\n")));
fs.writeFileSync(path_1.join(keycloakResourcesWithinPublicDirPath, "README.txt"), Buffer.from([
"This is just a test folder that helps develop",
"the login and register page without having to yarn build"
].join(" ")));
child_process.execSync("rm -r " + tmpDirPath);
}
fs.writeFileSync(path_1.join(themeDirPath, "theme.properties"), Buffer.from("parent=keycloak", "utf8"));

View File

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

View File

@ -1,2 +1,2 @@
#!/usr/bin/env node
export declare const builtinThemesUrl = "https://github.com/garronej/keycloakify/releases/download/v0.0.1/keycloak_11.0.3_builtin_themes.zip";
export declare const builtinThemesUrl = "https://github.com/garronej/keycloak-react-theming/releases/download/v0.0.1/keycloak_11.0.3_builtin_themes.zip";

View File

@ -5,7 +5,7 @@ exports.builtinThemesUrl = void 0;
var build_keycloak_theme_1 = require("./build-keycloak-theme");
var downloadAndUnzip_1 = require("./tools/downloadAndUnzip");
var path_1 = require("path");
exports.builtinThemesUrl = "https://github.com/garronej/keycloakify/releases/download/v0.0.1/keycloak_11.0.3_builtin_themes.zip";
exports.builtinThemesUrl = "https://github.com/garronej/keycloak-react-theming/releases/download/v0.0.1/keycloak_11.0.3_builtin_themes.zip";
if (require.main === module) {
downloadAndUnzip_1.downloadAndUnzip({
"url": exports.builtinThemesUrl,

View File

@ -1 +1 @@
{"version":3,"file":"install-builtin-keycloak-themes.js","sourceRoot":"","sources":["../src/bin/install-builtin-keycloak-themes.ts"],"names":[],"mappings":";;;;AAEA,+DAAsE;AACtE,6DAA4D;AAC5D,6BAAwC;AAE3B,QAAA,gBAAgB,GACzB,qGAAqG,CAAC;AAE1G,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE;IAEzB,mCAAgB,CAAC;QACb,KAAK,EAAE,wBAAgB;QACvB,aAAa,EAAE,WAAQ,CAAC,mDAA4B,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,CAAC;KAC7F,CAAC,CAAC;CAEN"}
{"version":3,"file":"install-builtin-keycloak-themes.js","sourceRoot":"","sources":["../src/bin/install-builtin-keycloak-themes.ts"],"names":[],"mappings":";;;;AAEA,+DAAsE;AACtE,6DAA4D;AAC5D,6BAAwC;AAE3B,QAAA,gBAAgB,GACzB,gHAAgH,CAAC;AAErH,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE;IAEzB,mCAAgB,CAAC;QACb,KAAK,EAAE,wBAAgB;QACvB,aAAa,EAAE,WAAQ,CAAC,mDAA4B,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,CAAC;KAC7F,CAAC,CAAC;CAEN"}

View File

@ -1 +0,0 @@
{"version":3,"file":"KcContext.js","sourceRoot":"","sources":["../src/lib/KcContext.ts"],"names":[],"mappings":";;;AACA,uFAAsF;AAEtF,8CAA6C;AAE7C,4DAA2D;AAqJ3D,qBAAS,EAA+B,CAAC;AACzC,qBAAS,EAA+B,CAAC;AAE5B,QAAA,SAAS,GAAG,OAAE,CAAyB,MAAc,CAAC,yCAAmB,CAAC,CAAC,CAAC"}

View File

@ -1,6 +0,0 @@
/// <reference types="react" />
import type { KcProps } from "./KcProps";
import type { KcContext } from "../KcContext";
export declare const Error: import("react").MemoExoticComponent<({ kcContext, ...props }: {
kcContext: KcContext.Error;
} & KcProps) => JSX.Element>;

View File

@ -1,40 +0,0 @@
"use strict";
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var __rest = (this && this.__rest) || function (s, e) {
var t = {};
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
t[p] = s[p];
if (s != null && typeof Object.getOwnPropertySymbols === "function")
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
t[p[i]] = s[p[i]];
}
return t;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Error = void 0;
var jsx_runtime_1 = require("react/jsx-runtime");
var react_1 = require("react");
var Template_1 = require("./Template");
var assert_1 = require("../tools/assert");
var useKcMessage_1 = require("../i18n/useKcMessage");
exports.Error = react_1.memo(function (_a) {
var kcContext = _a.kcContext, props = __rest(_a, ["kcContext"]);
var msg = useKcMessage_1.useKcMessage().msg;
assert_1.assert(kcContext.message !== undefined);
var message = kcContext.message, client = kcContext.client;
return (jsx_runtime_1.jsx(Template_1.Template, __assign({}, __assign({ kcContext: kcContext }, props), { displayMessage: false, headerNode: msg("errorTitle"), formNode: jsx_runtime_1.jsxs("div", __assign({ id: "kc-error-message" }, { children: [jsx_runtime_1.jsx("p", __assign({ className: "instruction" }, { children: message.summary }), void 0),
client !== undefined && client.baseUrl !== undefined &&
jsx_runtime_1.jsx("p", { children: jsx_runtime_1.jsx("a", __assign({ id: "backToApplication", href: client.baseUrl }, { children: msg("backToApplication") }), void 0) }, void 0)] }), void 0) }), void 0));
});
//# sourceMappingURL=Error.js.map

View File

@ -1 +0,0 @@
{"version":3,"file":"Error.js","sourceRoot":"","sources":["../../src/lib/components/Error.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AACA,+BAA6B;AAC7B,uCAAsC;AAEtC,0CAAyC;AAEzC,qDAAoD;AAEvC,QAAA,KAAK,GAAG,YAAI,CAAC,UAAC,EAAkE;IAAhE,IAAA,SAAS,eAAA,EAAK,KAAK,cAArB,aAAuB,CAAF;IAEpC,IAAA,GAAG,GAAK,2BAAY,EAAE,IAAnB,CAAoB;IAE/B,eAAM,CAAC,SAAS,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC;IAEhC,IAAA,OAAO,GAAa,SAAS,QAAtB,EAAE,MAAM,GAAK,SAAS,OAAd,CAAe;IAEtC,OAAO,CACH,kBAAC,mBAAQ,0BACC,SAAS,WAAA,IAAK,KAAK,KACzB,cAAc,EAAE,KAAK,EACrB,UAAU,EAAE,GAAG,CAAC,YAAY,CAAC,EAC7B,QAAQ,EACJ,qCAAK,EAAE,EAAC,kBAAkB,iBACtB,kCAAG,SAAS,EAAC,aAAa,gBAAE,OAAO,CAAC,OAAO,YAAK;gBAE5C,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS;oBACpD,mCACI,kCAAG,EAAE,EAAC,mBAAmB,EAAC,IAAI,EAAE,MAAM,CAAC,OAAO,gBACzC,GAAG,CAAC,mBAAmB,CAAC,YACzB,WACJ,aAEN,YAEZ,CACL,CAAC;AACN,CAAC,CAAC,CAAC"}

View File

@ -1,6 +0,0 @@
/// <reference types="react" />
import type { KcProps } from "./KcProps";
import type { KcContext } from "../KcContext";
export declare const Info: import("react").MemoExoticComponent<({ kcContext, ...props }: {
kcContext: KcContext.Info;
} & KcProps) => JSX.Element>;

View File

@ -1,53 +0,0 @@
"use strict";
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var __rest = (this && this.__rest) || function (s, e) {
var t = {};
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
t[p] = s[p];
if (s != null && typeof Object.getOwnPropertySymbols === "function")
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
t[p[i]] = s[p[i]];
}
return t;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Info = void 0;
var jsx_runtime_1 = require("react/jsx-runtime");
var react_1 = require("react");
var Template_1 = require("./Template");
var assert_1 = require("../tools/assert");
var useKcMessage_1 = require("../i18n/useKcMessage");
exports.Info = react_1.memo(function (_a) {
var kcContext = _a.kcContext, props = __rest(_a, ["kcContext"]);
var msg = useKcMessage_1.useKcMessage().msg;
assert_1.assert(kcContext.message !== undefined);
var messageHeader = kcContext.messageHeader, message = kcContext.message, requiredActions = kcContext.requiredActions, skipLink = kcContext.skipLink, pageRedirectUri = kcContext.pageRedirectUri, actionUri = kcContext.actionUri, client = kcContext.client;
return (jsx_runtime_1.jsx(Template_1.Template, __assign({}, __assign({ kcContext: kcContext }, props), { displayMessage: false, headerNode: messageHeader !== undefined ?
jsx_runtime_1.jsx(jsx_runtime_1.Fragment, { children: messageHeader }, void 0)
:
jsx_runtime_1.jsx(jsx_runtime_1.Fragment, { children: message.summary }, void 0), formNode: jsx_runtime_1.jsxs("div", __assign({ id: "kc-info-message" }, { children: [jsx_runtime_1.jsxs("p", __assign({ className: "instruction" }, { children: [message.summary, requiredActions !== undefined &&
jsx_runtime_1.jsx("b", { children: requiredActions
.map(function (requiredAction) { return msg("requiredAction." + requiredAction); })
.join(",") }, void 0)] }), void 0),
!skipLink &&
pageRedirectUri !== undefined ?
jsx_runtime_1.jsx("p", { children: jsx_runtime_1.jsxs("a", __assign({ href: "${pageRedirectUri}" }, { children: ["$", (msg("backToApplication"))] }), void 0) }, void 0)
:
actionUri !== undefined ?
jsx_runtime_1.jsx("p", { children: jsx_runtime_1.jsxs("a", __assign({ href: "${actionUri}" }, { children: ["$", msg("proceedWithAction")] }), void 0) }, void 0)
:
client.baseUrl !== undefined &&
jsx_runtime_1.jsx("p", { children: jsx_runtime_1.jsxs("a", __assign({ href: "${client.baseUrl}" }, { children: ["$", msg("backToApplication")] }), void 0) }, void 0)] }), void 0) }), void 0));
});
//# sourceMappingURL=Info.js.map

View File

@ -1 +0,0 @@
{"version":3,"file":"Info.js","sourceRoot":"","sources":["../../src/lib/components/Info.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AACA,+BAA6B;AAC7B,uCAAsC;AAEtC,0CAAyC;AAEzC,qDAAoD;AAEvC,QAAA,IAAI,GAAG,YAAI,CAAC,UAAC,EAAiE;IAA/D,IAAA,SAAS,eAAA,EAAK,KAAK,cAArB,aAAuB,CAAF;IAEnC,IAAA,GAAG,GAAK,2BAAY,EAAE,IAAnB,CAAoB;IAE/B,eAAM,CAAC,SAAS,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC;IAGpC,IAAA,aAAa,GAOb,SAAS,cAPI,EACb,OAAO,GAMP,SAAS,QANF,EACP,eAAe,GAKf,SAAS,gBALM,EACf,QAAQ,GAIR,SAAS,SAJD,EACR,eAAe,GAGf,SAAS,gBAHM,EACf,SAAS,GAET,SAAS,UAFA,EACT,MAAM,GACN,SAAS,OADH,CACI;IAEd,OAAO,CACH,kBAAC,mBAAQ,0BACC,SAAS,WAAA,IAAK,KAAK,KACzB,cAAc,EAAE,KAAK,EACrB,UAAU,EACN,aAAa,KAAK,SAAS,CAAC,CAAC;YACzB,sDAAG,aAAa,WAAI;YACpB,CAAC;gBACD,sDAAG,OAAO,CAAC,OAAO,WAAI,EAE9B,QAAQ,EACJ,qCAAK,EAAE,EAAC,iBAAiB,iBACrB,mCAAG,SAAS,EAAC,aAAa,iBAAE,OAAO,CAAC,OAAO,EAGnC,eAAe,KAAK,SAAS;4BAC7B,mCAEQ,eAAe;qCACV,GAAG,CAAC,UAAA,cAAc,IAAI,OAAA,GAAG,CAAC,oBAAkB,cAAyB,CAAC,EAAhD,CAAgD,CAAC;qCACvE,IAAI,CAAC,GAAG,CAAC,WAGlB,aAIR;gBAEA,CAAC,QAAQ;oBACL,eAAe,KAAK,SAAS,CAAC,CAAC;oBAC/B,mCAAG,mCAAG,IAAI,EAAC,oBAAoB,sBAAG,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,aAAK,WAAI;oBACrE,CAAC;wBACD,SAAS,KAAK,SAAS,CAAC,CAAC;4BACrB,mCAAG,mCAAG,IAAI,EAAC,cAAc,sBAAG,GAAG,CAAC,mBAAmB,CAAC,aAAK,WAAI;4BAC7D,CAAC;gCACD,MAAM,CAAC,OAAO,KAAK,SAAS;oCAC5B,mCAAG,mCAAG,IAAI,EAAC,mBAAmB,sBAAG,GAAG,CAAC,mBAAmB,CAAC,aAAK,WAAI,aAE5E,YAIZ,CACL,CAAC;AACN,CAAC,CAAC,CAAC"}

View File

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

View File

@ -1,45 +1,18 @@
"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 __rest = (this && this.__rest) || function (s, e) {
var t = {};
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
t[p] = s[p];
if (s != null && typeof Object.getOwnPropertySymbols === "function")
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
t[p[i]] = s[p[i]];
}
return t;
};
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("../tools/assert");
var Login_1 = require("./Login");
var Register_1 = require("./Register");
var Info_1 = require("./Info");
var Error_1 = require("./Error");
var LoginResetPassword_1 = require("./LoginResetPassword");
var LoginVerifyEmail_1 = require("./LoginVerifyEmail");
exports.KcApp = react_1.memo(function (_a) {
var kcContext = _a.kcContext, props = __rest(_a, ["kcContext"]);
switch (kcContext.pageId) {
case "login.ftl": return jsx_runtime_1.jsx(Login_1.Login, __assign({}, __assign({ kcContext: kcContext }, props)), void 0);
case "register.ftl": return jsx_runtime_1.jsx(Register_1.Register, __assign({}, __assign({ kcContext: kcContext }, props)), void 0);
case "info.ftl": return jsx_runtime_1.jsx(Info_1.Info, __assign({}, __assign({ kcContext: kcContext }, props)), void 0);
case "error.ftl": return jsx_runtime_1.jsx(Error_1.Error, __assign({}, __assign({ kcContext: kcContext }, props)), void 0);
case "login-reset-password.ftl": return jsx_runtime_1.jsx(LoginResetPassword_1.LoginResetPassword, __assign({}, __assign({ kcContext: kcContext }, props)), void 0);
case "login-verify-email.ftl": return jsx_runtime_1.jsx(LoginVerifyEmail_1.LoginVerifyEmail, __assign({}, __assign({ kcContext: kcContext }, props)), void 0);
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": return jsx_runtime_1.jsx(Register_1.Register, { kcProperties: kcProperties }, void 0);
}
});
//# sourceMappingURL=KcApp.js.map

View File

@ -1 +1 @@
{"version":3,"file":"KcApp.js","sourceRoot":"","sources":["../../src/lib/components/KcApp.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AACA,+BAA6B;AAG7B,iCAAgC;AAChC,uCAAsC;AACtC,+BAA8B;AAC9B,iCAAgC;AAChC,2DAA0D;AAC1D,uDAAsD;AAEzC,QAAA,KAAK,GAAG,YAAI,CAAC,UAAC,EAA4D;IAA1D,IAAA,SAAS,eAAA,EAAK,KAAK,cAArB,aAAuB,CAAF;IAC5C,QAAQ,SAAS,CAAC,MAAM,EAAE;QACtB,KAAK,WAAW,CAAC,CAAC,OAAO,kBAAC,aAAK,0BAAO,SAAS,WAAA,IAAK,KAAK,WAAM,CAAC;QAChE,KAAK,cAAc,CAAC,CAAC,OAAO,kBAAC,mBAAQ,0BAAO,SAAS,WAAA,IAAK,KAAK,WAAM,CAAC;QACtE,KAAK,UAAU,CAAC,CAAC,OAAO,kBAAC,WAAI,0BAAO,SAAS,WAAA,IAAK,KAAK,WAAM,CAAC;QAC9D,KAAK,WAAW,CAAC,CAAC,OAAO,kBAAC,aAAK,0BAAO,SAAS,WAAA,IAAK,KAAK,WAAM,CAAC;QAChE,KAAK,0BAA0B,CAAC,CAAC,OAAO,kBAAC,uCAAkB,0BAAO,SAAS,WAAA,IAAK,KAAK,WAAM,CAAC;QAC5F,KAAK,wBAAwB,CAAC,CAAC,OAAO,kBAAC,mCAAgB,0BAAO,SAAS,WAAA,IAAK,KAAK,WAAM,CAAC;KAC3F;AACL,CAAC,CAAC,CAAC"}
{"version":3,"file":"KcApp.js","sourceRoot":"","sources":["../../src/lib/components/KcApp.tsx"],"names":[],"mappings":";;;;AACA,+BAA6B;AAC7B,0CAAyC;AACzC,0CAAyC;AAEzC,iCAAgC;AAChC,uCAAsC;AAMzB,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,CAAC;QAC/D,KAAK,cAAc,CAAC,CAAC,OAAO,kBAAC,mBAAQ,IAAC,YAAY,EAAE,YAAY,WAAI,CAAC;KACxE;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 = "kcHtmlClass" | "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,82 @@
"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"
]),
"kcHtmlClass": "login-pf",
"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-signup"
};
/** 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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"}

View File

@ -1,108 +0,0 @@
/** Class names can be provided as an array or separated by whitespace */
export declare type KcPropsGeneric<CssClasses extends string> = {
[key in CssClasses]: readonly string[] | string | undefined;
};
export declare type KcTemplateClassKey = "stylesCommon" | "styles" | "scripts" | "kcHtmlClass" | "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 KcTemplateProps = KcPropsGeneric<KcTemplateClassKey>;
export declare const defaultKcTemplateProps: {
readonly stylesCommon: readonly ["node_modules/patternfly/dist/css/patternfly.min.css", "node_modules/patternfly/dist/css/patternfly-additions.min.css", "lib/zocial/zocial.css"];
readonly styles: readonly ["css/login.css"];
readonly scripts: readonly [];
readonly kcHtmlClass: readonly ["login-pf"];
readonly kcLoginClass: readonly ["login-pf-page"];
readonly kcContentWrapperClass: readonly ["row"];
readonly kcHeaderClass: readonly ["login-pf-page-header"];
readonly kcHeaderWrapperClass: readonly [];
readonly kcFormCardClass: readonly ["card-pf"];
readonly kcFormCardAccountClass: readonly ["login-pf-accounts"];
readonly kcFormSocialAccountClass: readonly ["login-pf-social-section"];
readonly kcFormSocialAccountContentClass: readonly ["col-xs-12", "col-sm-6"];
readonly kcFormHeaderClass: readonly ["login-pf-header"];
readonly kcLocaleWrapperClass: readonly [];
readonly kcFeedbackErrorIcon: readonly ["pficon", "pficon-error-circle-o"];
readonly kcFeedbackWarningIcon: readonly ["pficon", "pficon-warning-triangle-o"];
readonly kcFeedbackSuccessIcon: readonly ["pficon", "pficon-ok"];
readonly kcFeedbackInfoIcon: readonly ["pficon", "pficon-info"];
readonly kcResetFlowIcon: readonly ["pficon", "pficon-arrow fa-2x"];
readonly kcFormGroupClass: readonly ["form-group"];
readonly kcLabelWrapperClass: readonly ["col-xs-12", "col-sm-12", "col-md-12", "col-lg-12"];
readonly kcSignUpClass: readonly ["login-pf-signup"];
readonly kcInfoAreaWrapperClass: readonly [];
};
/** Tu use if you don't want any default */
export declare const allClearKcTemplateProps: Record<"stylesCommon" | "styles" | "scripts" | "kcHtmlClass" | "kcLoginClass" | "kcHeaderClass" | "kcHeaderWrapperClass" | "kcFormCardClass" | "kcFormCardAccountClass" | "kcFormHeaderClass" | "kcLocaleWrapperClass" | "kcContentWrapperClass" | "kcLabelWrapperClass" | "kcFormGroupClass" | "kcResetFlowIcon" | "kcFeedbackSuccessIcon" | "kcFeedbackWarningIcon" | "kcFeedbackErrorIcon" | "kcFeedbackInfoIcon" | "kcFormSocialAccountContentClass" | "kcFormSocialAccountClass" | "kcSignUpClass" | "kcInfoAreaWrapperClass", undefined>;
export declare type KcProps = KcPropsGeneric<KcTemplateClassKey | "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 defaultKcProps: {
readonly kcLogoLink: "http://www.keycloak.org";
readonly kcLogoClass: "login-pf-brand";
readonly kcContainerClass: "container-fluid";
readonly kcContentClass: readonly ["col-sm-8", "col-sm-offset-2", "col-md-6", "col-md-offset-3", "col-lg-6", "col-lg-offset-3"];
readonly kcFeedbackAreaClass: readonly ["col-md-12"];
readonly kcLocaleClass: readonly ["col-xs-12", "col-sm-1"];
readonly kcAlertIconClasserror: readonly ["pficon", "pficon-error-circle-o"];
readonly kcFormAreaClass: readonly ["col-sm-10", "col-sm-offset-1", "col-md-8", "col-md-offset-2", "col-lg-8", "col-lg-offset-2"];
readonly kcFormSocialAccountListClass: readonly ["login-pf-social", "list-unstyled", "login-pf-social-all"];
readonly kcFormSocialAccountDoubleListClass: readonly ["login-pf-social-double-col"];
readonly kcFormSocialAccountListLinkClass: readonly ["login-pf-social-link"];
readonly kcWebAuthnKeyIcon: readonly ["pficon", "pficon-key"];
readonly kcFormClass: readonly ["form-horizontal"];
readonly kcFormGroupErrorClass: readonly ["has-error"];
readonly kcLabelClass: readonly ["control-label"];
readonly kcInputClass: readonly ["form-control"];
readonly kcInputWrapperClass: readonly ["col-xs-12", "col-sm-12", "col-md-12", "col-lg-12"];
readonly kcFormOptionsClass: readonly ["col-xs-12", "col-sm-12", "col-md-12", "col-lg-12"];
readonly kcFormButtonsClass: readonly ["col-xs-12", "col-sm-12", "col-md-12", "col-lg-12"];
readonly kcFormSettingClass: readonly ["login-pf-settings"];
readonly kcTextareaClass: readonly ["form-control"];
readonly kcInfoAreaClass: readonly ["col-xs-12", "col-sm-4", "col-md-4", "col-lg-5", "details"];
readonly kcButtonClass: readonly ["btn"];
readonly kcButtonPrimaryClass: readonly ["btn-primary"];
readonly kcButtonDefaultClass: readonly ["btn-default"];
readonly kcButtonLargeClass: readonly ["btn-lg"];
readonly kcButtonBlockClass: readonly ["btn-block"];
readonly kcInputLargeClass: readonly ["input-lg"];
readonly kcSrOnlyClass: readonly ["sr-only"];
readonly kcSelectAuthListClass: readonly ["list-group", "list-view-pf"];
readonly kcSelectAuthListItemClass: readonly ["list-group-item", "list-view-pf-stacked"];
readonly kcSelectAuthListItemInfoClass: readonly ["list-view-pf-main-info"];
readonly kcSelectAuthListItemLeftClass: readonly ["list-view-pf-left"];
readonly kcSelectAuthListItemBodyClass: readonly ["list-view-pf-body"];
readonly kcSelectAuthListItemDescriptionClass: readonly ["list-view-pf-description"];
readonly kcSelectAuthListItemHeadingClass: readonly ["list-group-item-heading"];
readonly kcSelectAuthListItemHelpTextClass: readonly ["list-group-item-text"];
readonly kcAuthenticatorDefaultClass: readonly ["fa", "list-view-pf-icon-lg"];
readonly kcAuthenticatorPasswordClass: readonly ["fa", "fa-unlock list-view-pf-icon-lg"];
readonly kcAuthenticatorOTPClass: readonly ["fa", "fa-mobile", "list-view-pf-icon-lg"];
readonly kcAuthenticatorWebAuthnClass: readonly ["fa", "fa-key", "list-view-pf-icon-lg"];
readonly kcAuthenticatorWebAuthnPasswordlessClass: readonly ["fa", "fa-key", "list-view-pf-icon-lg"];
readonly kcSelectOTPListClass: readonly ["card-pf", "card-pf-view", "card-pf-view-select", "card-pf-view-single-select"];
readonly kcSelectOTPListItemClass: readonly ["card-pf-body", "card-pf-top-element"];
readonly kcAuthenticatorOtpCircleClass: readonly ["fa", "fa-mobile", "card-pf-icon-circle"];
readonly kcSelectOTPItemHeadingClass: readonly ["card-pf-title", "text-center"];
readonly kcFormOptionsWrapperClass: readonly [];
readonly stylesCommon: readonly ["node_modules/patternfly/dist/css/patternfly.min.css", "node_modules/patternfly/dist/css/patternfly-additions.min.css", "lib/zocial/zocial.css"];
readonly styles: readonly ["css/login.css"];
readonly scripts: readonly [];
readonly kcHtmlClass: readonly ["login-pf"];
readonly kcLoginClass: readonly ["login-pf-page"];
readonly kcContentWrapperClass: readonly ["row"];
readonly kcHeaderClass: readonly ["login-pf-page-header"];
readonly kcHeaderWrapperClass: readonly [];
readonly kcFormCardClass: readonly ["card-pf"];
readonly kcFormCardAccountClass: readonly ["login-pf-accounts"];
readonly kcFormSocialAccountClass: readonly ["login-pf-social-section"];
readonly kcFormSocialAccountContentClass: readonly ["col-xs-12", "col-sm-6"];
readonly kcFormHeaderClass: readonly ["login-pf-header"];
readonly kcLocaleWrapperClass: readonly [];
readonly kcFeedbackErrorIcon: readonly ["pficon", "pficon-error-circle-o"];
readonly kcFeedbackWarningIcon: readonly ["pficon", "pficon-warning-triangle-o"];
readonly kcFeedbackSuccessIcon: readonly ["pficon", "pficon-ok"];
readonly kcFeedbackInfoIcon: readonly ["pficon", "pficon-info"];
readonly kcResetFlowIcon: readonly ["pficon", "pficon-arrow fa-2x"];
readonly kcFormGroupClass: readonly ["form-group"];
readonly kcLabelWrapperClass: readonly ["col-xs-12", "col-sm-12", "col-md-12", "col-lg-12"];
readonly kcSignUpClass: readonly ["login-pf-signup"];
readonly kcInfoAreaWrapperClass: readonly [];
};
/** Tu use if you don't want any default */
export declare const allClearKcProps: Record<"stylesCommon" | "styles" | "scripts" | "kcHtmlClass" | "kcLoginClass" | "kcHeaderClass" | "kcHeaderWrapperClass" | "kcFormCardClass" | "kcFormCardAccountClass" | "kcFormHeaderClass" | "kcLocaleWrapperClass" | "kcContentWrapperClass" | "kcLabelWrapperClass" | "kcFormGroupClass" | "kcResetFlowIcon" | "kcFeedbackSuccessIcon" | "kcFeedbackWarningIcon" | "kcFeedbackErrorIcon" | "kcFeedbackInfoIcon" | "kcFormSocialAccountContentClass" | "kcFormSocialAccountClass" | "kcSignUpClass" | "kcInfoAreaWrapperClass" | "kcLogoLink" | "kcLogoClass" | "kcContainerClass" | "kcContentClass" | "kcFeedbackAreaClass" | "kcLocaleClass" | "kcAlertIconClasserror" | "kcFormAreaClass" | "kcFormSocialAccountListClass" | "kcFormSocialAccountDoubleListClass" | "kcFormSocialAccountListLinkClass" | "kcWebAuthnKeyIcon" | "kcFormClass" | "kcFormGroupErrorClass" | "kcLabelClass" | "kcInputClass" | "kcInputWrapperClass" | "kcFormOptionsClass" | "kcFormButtonsClass" | "kcFormSettingClass" | "kcTextareaClass" | "kcInfoAreaClass" | "kcButtonClass" | "kcButtonPrimaryClass" | "kcButtonDefaultClass" | "kcButtonLargeClass" | "kcButtonBlockClass" | "kcInputLargeClass" | "kcSrOnlyClass" | "kcSelectAuthListClass" | "kcSelectAuthListItemClass" | "kcSelectAuthListItemInfoClass" | "kcSelectAuthListItemLeftClass" | "kcSelectAuthListItemBodyClass" | "kcSelectAuthListItemDescriptionClass" | "kcSelectAuthListItemHeadingClass" | "kcSelectAuthListItemHelpTextClass" | "kcAuthenticatorDefaultClass" | "kcAuthenticatorPasswordClass" | "kcAuthenticatorOTPClass" | "kcAuthenticatorWebAuthnClass" | "kcAuthenticatorWebAuthnPasswordlessClass" | "kcSelectOTPListClass" | "kcSelectOTPListItemClass" | "kcAuthenticatorOtpCircleClass" | "kcSelectOTPItemHeadingClass" | "kcFormOptionsWrapperClass", undefined>;

View File

@ -1,71 +0,0 @@
"use strict";
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.allClearKcProps = exports.defaultKcProps = exports.allClearKcTemplateProps = exports.defaultKcTemplateProps = void 0;
var allPropertiesValuesToUndefined_1 = require("../tools/allPropertiesValuesToUndefined");
var doExtends_1 = require("evt/tools/typeSafety/doExtends");
exports.defaultKcTemplateProps = {
"stylesCommon": [
"node_modules/patternfly/dist/css/patternfly.min.css",
"node_modules/patternfly/dist/css/patternfly-additions.min.css",
"lib/zocial/zocial.css"
],
"styles": ["css/login.css"],
"scripts": [],
"kcHtmlClass": ["login-pf"],
"kcLoginClass": ["login-pf-page"],
"kcContentWrapperClass": ["row"],
"kcHeaderClass": ["login-pf-page-header"],
"kcHeaderWrapperClass": [],
"kcFormCardClass": ["card-pf"],
"kcFormCardAccountClass": ["login-pf-accounts"],
"kcFormSocialAccountClass": ["login-pf-social-section"],
"kcFormSocialAccountContentClass": ["col-xs-12", "col-sm-6"],
"kcFormHeaderClass": ["login-pf-header"],
"kcLocaleWrapperClass": [],
"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-signup"],
"kcInfoAreaWrapperClass": []
};
doExtends_1.doExtends();
/** Tu use if you don't want any default */
exports.allClearKcTemplateProps = allPropertiesValuesToUndefined_1.allPropertiesValuesToUndefined(exports.defaultKcTemplateProps);
doExtends_1.doExtends();
exports.defaultKcProps = __assign(__assign({}, exports.defaultKcTemplateProps), { "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"], "kcFormOptionsWrapperClass": [] });
doExtends_1.doExtends();
/** Tu use if you don't want any default */
exports.allClearKcProps = allPropertiesValuesToUndefined_1.allPropertiesValuesToUndefined(exports.defaultKcProps);
doExtends_1.doExtends();
//# sourceMappingURL=KcProps.js.map

View File

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

View File

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

View File

@ -10,17 +10,6 @@ var __assign = (this && this.__assign) || function () {
};
return __assign.apply(this, arguments);
};
var __rest = (this && this.__rest) || function (s, e) {
var t = {};
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
t[p] = s[p];
if (s != null && typeof Object.getOwnPropertySymbols === "function")
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
t[p[i]] = s[p[i]];
}
return t;
};
var __read = (this && this.__read) || function (o, n) {
var m = typeof Symbol === "function" && o[Symbol.iterator];
if (!m) return o;
@ -42,41 +31,49 @@ exports.Login = void 0;
var jsx_runtime_1 = require("react/jsx-runtime");
var react_1 = require("react");
var Template_1 = require("./Template");
var useKcMessage_1 = require("../i18n/useKcMessage");
var KcProperties_1 = require("./KcProperties");
var assert_1 = require("../tools/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 (_a) {
var _b;
var kcContext = _a.kcContext, props = __rest(_a, ["kcContext"]);
var _c = useKcMessage_1.useKcMessage(), msg = _c.msg, msgStr = _c.msgStr;
var social = kcContext.social, realm = kcContext.realm, url = kcContext.url, usernameEditDisabled = kcContext.usernameEditDisabled, login = kcContext.login, auth = kcContext.auth, registrationDisabled = kcContext.registrationDisabled;
var _d = __read(react_1.useState(false), 2), isLoginButtonDisabled = _d[0], setIsLoginButtonDisabled = _d[1];
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 () {
assert_1.assert(kcContext_1.kcContext !== undefined &&
kcContext_1.kcContext.pageBasename === "login.ftl");
return 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, __assign({}, __assign({ kcContext: kcContext }, props), { displayInfo: social.displayInfo, displayWide: realm.password && social.providers !== undefined, headerNode: msg("doLogIn"), formNode: jsx_runtime_1.jsxs("div", __assign({ id: "kc-form", className: tss_react_1.cx(realm.password && social.providers !== undefined && props.kcContentWrapperClass) }, { children: [jsx_runtime_1.jsx("div", __assign({ id: "kc-form-wrapper", className: tss_react_1.cx(realm.password && social.providers && [props.kcFormSocialAccountContentClass, props.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(props.kcFormGroupClass) }, { children: [jsx_runtime_1.jsx("label", __assign({ htmlFor: "username", className: tss_react_1.cx(props.kcLabelClass) }, { children: !realm.loginWithEmailAllowed ?
msg("username")
return (jsx_runtime_1.jsx(Template_1.Template, { displayInfo: social.displayInfo, displayWide: realm.password && social.providers !== undefined, kcProperties: kcProperties, headerNode: t("doLogIn"), 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 ?
msg("usernameOrEmail") :
msg("email")) }), void 0),
jsx_runtime_1.jsx("input", __assign({ tabIndex: 1, id: "username", className: tss_react_1.cx(props.kcInputClass), name: "username", defaultValue: (_b = login.username) !== null && _b !== void 0 ? _b : '', type: "text" }, (usernameEditDisabled ? { "disabled": true } : { "autoFocus": true, "autoComplete": "off" })), void 0)] }), void 0),
jsx_runtime_1.jsxs("div", __assign({ className: tss_react_1.cx(props.kcFormGroupClass) }, { children: [jsx_runtime_1.jsx("label", __assign({ htmlFor: "password", className: tss_react_1.cx(props.kcLabelClass) }, { children: msg("password") }), void 0),
jsx_runtime_1.jsx("input", { tabIndex: 2, id: "password", className: tss_react_1.cx(props.kcInputClass), name: "password", type: "password", autoComplete: "off" }, void 0)] }), void 0),
jsx_runtime_1.jsxs("div", __assign({ className: tss_react_1.cx(props.kcFormGroupClass, props.kcFormSettingClass) }, { children: [jsx_runtime_1.jsx("div", __assign({ id: "kc-form-options" }, { children: (realm.rememberMe &&
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", defaultValue: (_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.jsxs("label", { children: [jsx_runtime_1.jsx("input", __assign({ tabIndex: 3, id: "rememberMe", name: "rememberMe", type: "checkbox" }, (login.rememberMe ? { "checked": true } : {})), void 0), msg("rememberMe")] }, void 0) }), void 0) }), void 0),
jsx_runtime_1.jsx("div", __assign({ className: tss_react_1.cx(props.kcFormOptionsWrapperClass) }, { children: realm.resetPasswordAllowed &&
jsx_runtime_1.jsx("span", { children: jsx_runtime_1.jsx("a", __assign({ tabIndex: 5, href: url.loginResetCredentialsUrl }, { children: msg("doForgotPassword") }), void 0) }, void 0) }), void 0)] }), void 0),
jsx_runtime_1.jsxs("div", __assign({ id: "kc-form-buttons", className: tss_react_1.cx(props.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(props.kcButtonClass, props.kcButtonPrimaryClass, props.kcButtonBlockClass, props.kcButtonLargeClass), name: "login", id: "kc-login", type: "submit", value: msgStr("doLogIn"), disabled: isLoginButtonDisabled }, void 0)] }), void 0)] }), void 0)) }), void 0),
jsx_runtime_1.jsx("div", __assign({ className: "checkbox" }, { children: jsx_runtime_1.jsxs("label", { children: [jsx_runtime_1.jsx("input", __assign({ tabIndex: 3, id: "rememberMe", name: "rememberMe", type: "checkbox" }, (login.rememberMe ? { "checked": true } : {})), void 0), t("rememberMe")] }, 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(props.kcFormSocialAccountContentClass, props.kcFormSocialAccountClass) }, { children: jsx_runtime_1.jsx("ul", __assign({ className: tss_react_1.cx(props.kcFormSocialAccountListClass, social.providers.length > 4 && props.kcFormSocialAccountDoubleListClass) }, { children: social.providers.map(function (p) {
return jsx_runtime_1.jsx("li", __assign({ className: tss_react_1.cx(props.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), infoNode: (realm.password &&
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.registrationAllowed &&
!registrationDisabled) &&
jsx_runtime_1.jsx("div", __assign({ id: "kc-registration" }, { children: jsx_runtime_1.jsxs("span", { children: [msg("noAccount"), jsx_runtime_1.jsx("a", __assign({ tabIndex: 6, href: url.registrationUrl }, { children: msg("doRegister") }), void 0)] }, void 0) }), void 0) }), void 0));
jsx_runtime_1.jsx("div", __assign({ id: "kc-registration" }, { children: jsx_runtime_1.jsxs("span", { children: [t("noAccount"), jsx_runtime_1.jsx("a", __assign({ tabIndex: 6, href: url.registrationUrl }, { children: t("doRegister") }), void 0)] }, void 0) }), void 0) }, void 0));
});
//# sourceMappingURL=Login.js.map

View File

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

View File

@ -1,6 +0,0 @@
/// <reference types="react" />
import type { KcProps } from "./KcProps";
import type { KcContext } from "../KcContext";
export declare const LoginResetPassword: import("react").MemoExoticComponent<({ kcContext, ...props }: {
kcContext: KcContext.LoginResetPassword;
} & KcProps) => JSX.Element>;

View File

@ -1,46 +0,0 @@
"use strict";
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var __rest = (this && this.__rest) || function (s, e) {
var t = {};
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
t[p] = s[p];
if (s != null && typeof Object.getOwnPropertySymbols === "function")
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
t[p[i]] = s[p[i]];
}
return t;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.LoginResetPassword = void 0;
var jsx_runtime_1 = require("react/jsx-runtime");
var react_1 = require("react");
var Template_1 = require("./Template");
var useKcMessage_1 = require("../i18n/useKcMessage");
var tss_react_1 = require("tss-react");
exports.LoginResetPassword = react_1.memo(function (_a) {
var kcContext = _a.kcContext, props = __rest(_a, ["kcContext"]);
var _b = useKcMessage_1.useKcMessage(), msg = _b.msg, msgStr = _b.msgStr;
var url = kcContext.url, realm = kcContext.realm, auth = kcContext.auth;
return (jsx_runtime_1.jsx(Template_1.Template, __assign({}, __assign({ kcContext: kcContext }, props), { displayMessage: false, headerNode: msg("emailForgotTitle"), formNode: jsx_runtime_1.jsxs("form", __assign({ id: "kc-reset-password-form", className: tss_react_1.cx(props.kcFormClass), action: url.loginAction, method: "post" }, { children: [jsx_runtime_1.jsxs("div", __assign({ className: tss_react_1.cx(props.kcFormGroupClass) }, { children: [jsx_runtime_1.jsx("div", __assign({ className: tss_react_1.cx(props.kcLabelWrapperClass) }, { children: jsx_runtime_1.jsx("label", __assign({ htmlFor: "username", className: tss_react_1.cx(props.kcLabelClass) }, { children: !realm.loginWithEmailAllowed ?
msg("username")
:
!realm.registrationEmailAsUsername ?
msg("usernameOrEmail") :
msg("email") }), void 0) }), void 0),
jsx_runtime_1.jsx("div", __assign({ className: tss_react_1.cx(props.kcInputWrapperClass) }, { children: jsx_runtime_1.jsx("input", { type: "text", id: "username", name: "username", className: tss_react_1.cx(props.kcInputClass), autoFocus: true, defaultValue: auth !== undefined && auth.showUsername ?
auth.attemptedUsername : undefined }, void 0) }), void 0)] }), void 0),
jsx_runtime_1.jsxs("div", __assign({ className: tss_react_1.cx(props.kcFormGroupClass, props.kcFormSettingClass) }, { children: [jsx_runtime_1.jsx("div", __assign({ id: "kc-form-options", className: tss_react_1.cx(props.kcFormOptionsClass) }, { children: jsx_runtime_1.jsx("div", __assign({ className: tss_react_1.cx(props.kcFormOptionsWrapperClass) }, { children: jsx_runtime_1.jsx("span", { children: jsx_runtime_1.jsx("a", __assign({ href: url.loginUrl }, { children: msg("backToLogin") }), void 0) }, void 0) }), void 0) }), void 0),
jsx_runtime_1.jsx("div", __assign({ id: "kc-form-buttons", className: tss_react_1.cx(props.kcFormButtonsClass) }, { children: jsx_runtime_1.jsx("input", { className: tss_react_1.cx(props.kcButtonClass, props.kcButtonPrimaryClass, props.kcButtonBlockClass, props.kcButtonLargeClass), type: "submit", defaultValue: msgStr("doSubmit") }, void 0) }), void 0)] }), void 0)] }), void 0), infoNode: msg("emailInstruction") }), void 0));
});
//# sourceMappingURL=LoginResetPassword.js.map

View File

@ -1 +0,0 @@
{"version":3,"file":"LoginResetPassword.js","sourceRoot":"","sources":["../../src/lib/components/LoginResetPassword.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AACA,+BAA6B;AAC7B,uCAAsC;AAGtC,qDAAoD;AACpD,uCAA+B;AAElB,QAAA,kBAAkB,GAAG,YAAI,CAAC,UAAC,EAA+E;IAA7E,IAAA,SAAS,eAAA,EAAK,KAAK,cAArB,aAAuB,CAAF;IAEnD,IAAA,KAAkB,2BAAY,EAAE,EAA9B,GAAG,SAAA,EAAE,MAAM,YAAmB,CAAC;IAGnC,IAAA,GAAG,GAGH,SAAS,IAHN,EACH,KAAK,GAEL,SAAS,MAFJ,EACL,IAAI,GACJ,SAAS,KADL,CACM;IAEd,OAAO,CACH,kBAAC,mBAAQ,0BACC,SAAS,WAAA,IAAK,KAAK,KACzB,cAAc,EAAE,KAAK,EACrB,UAAU,EAAE,GAAG,CAAC,kBAAkB,CAAC,EACnC,QAAQ,EACJ,sCAAM,EAAE,EAAC,wBAAwB,EAAC,SAAS,EAAE,cAAE,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,WAAW,EAAE,MAAM,EAAC,MAAM,iBACtG,qCAAK,SAAS,EAAE,cAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC,iBACtC,oCAAK,SAAS,EAAE,cAAE,CAAC,KAAK,CAAC,mBAAmB,CAAC,gBACzC,sCAAO,OAAO,EAAC,UAAU,EAAC,SAAS,EAAE,cAAE,CAAC,KAAK,CAAC,YAAY,CAAC,gBAEnD,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;oCAC1B,GAAG,CAAC,UAAU,CAAC;oCACf,CAAC;wCACD,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;4CAChC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC;4CACxB,GAAG,CAAC,OAAO,CAAC,YAEpB,YACN;wBACN,oCAAK,SAAS,EAAE,cAAE,CAAC,KAAK,CAAC,mBAAmB,CAAC,gBACzC,6BACI,IAAI,EAAC,MAAM,EACX,EAAE,EAAC,UAAU,EACb,IAAI,EAAC,UAAU,EACf,SAAS,EAAE,cAAE,CAAC,KAAK,CAAC,YAAY,CAAC,EACjC,SAAS,QACT,YAAY,EACR,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC;oCACrC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS,WAE5C,YACA,aACJ;gBACN,qCAAK,SAAS,EAAE,cAAE,CAAC,KAAK,CAAC,gBAAgB,EAAE,KAAK,CAAC,kBAAkB,CAAC,iBAChE,oCAAK,EAAE,EAAC,iBAAiB,EAAC,SAAS,EAAE,cAAE,CAAC,KAAK,CAAC,kBAAkB,CAAC,gBAC7D,oCAAK,SAAS,EAAE,cAAE,CAAC,KAAK,CAAC,yBAAyB,CAAC,gBAC/C,sCACI,kCAAG,IAAI,EAAE,GAAG,CAAC,QAAQ,gBAAG,GAAG,CAAC,aAAa,CAAC,YAAK,WAC5C,YACL,YACJ;wBAEN,oCAAK,EAAE,EAAC,iBAAiB,EAAC,SAAS,EAAE,cAAE,CAAC,KAAK,CAAC,kBAAkB,CAAC,gBAC7D,6BACI,SAAS,EAAE,cAAE,CACT,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,oBAAoB,EAC/C,KAAK,CAAC,kBAAkB,EAAE,KAAK,CAAC,kBAAkB,CACrD,EACD,IAAI,EAAC,QAAQ,EACb,YAAY,EAAE,MAAM,CAAC,UAAU,CAAC,WAClC,YACA,aACJ,aACH,EAEX,QAAQ,EAAE,GAAG,CAAC,kBAAkB,CAAC,YACnC,CACL,CAAC;AACN,CAAC,CAAC,CAAC"}

View File

@ -1,6 +0,0 @@
/// <reference types="react" />
import type { KcProps } from "./KcProps";
import type { KcContext } from "../KcContext";
export declare const LoginVerifyEmail: import("react").MemoExoticComponent<({ kcContext, ...props }: {
kcContext: KcContext.LoginVerifyEmail;
} & KcProps) => JSX.Element>;

View File

@ -1,37 +0,0 @@
"use strict";
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var __rest = (this && this.__rest) || function (s, e) {
var t = {};
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
t[p] = s[p];
if (s != null && typeof Object.getOwnPropertySymbols === "function")
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
t[p[i]] = s[p[i]];
}
return t;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.LoginVerifyEmail = void 0;
var jsx_runtime_1 = require("react/jsx-runtime");
var react_1 = require("react");
var Template_1 = require("./Template");
var useKcMessage_1 = require("../i18n/useKcMessage");
exports.LoginVerifyEmail = react_1.memo(function (_a) {
var kcContext = _a.kcContext, props = __rest(_a, ["kcContext"]);
var msg = useKcMessage_1.useKcMessage().msg;
var url = kcContext.url;
return (jsx_runtime_1.jsx(Template_1.Template, __assign({}, __assign({ kcContext: kcContext }, props), { displayMessage: false, headerNode: msg("emailVerifyTitle"), formNode: jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [jsx_runtime_1.jsx("p", __assign({ className: "instruction" }, { children: msg("emailVerifyInstruction1") }), void 0),
jsx_runtime_1.jsxs("p", __assign({ className: "instruction" }, { children: [msg("emailVerifyInstruction2"), jsx_runtime_1.jsx("a", __assign({ href: url.loginAction }, { children: msg("doClickHere") }), void 0), msg("emailVerifyInstruction3")] }), void 0)] }, void 0) }), void 0));
});
//# sourceMappingURL=LoginVerifyEmail.js.map

View File

@ -1 +0,0 @@
{"version":3,"file":"LoginVerifyEmail.js","sourceRoot":"","sources":["../../src/lib/components/LoginVerifyEmail.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AACA,+BAA6B;AAC7B,uCAAsC;AAGtC,qDAAoD;AAEvC,QAAA,gBAAgB,GAAG,YAAI,CAAC,UAAC,EAA6E;IAA3E,IAAA,SAAS,eAAA,EAAK,KAAK,cAArB,aAAuB,CAAF;IAE/C,IAAA,GAAG,GAAK,2BAAY,EAAE,IAAnB,CAAoB;IAG3B,IAAA,GAAG,GACH,SAAS,IADN,CACO;IAEd,OAAO,CACH,kBAAC,mBAAQ,0BACC,SAAS,WAAA,IAAK,KAAK,KACzB,cAAc,EAAE,KAAK,EACrB,UAAU,EAAE,GAAG,CAAC,kBAAkB,CAAC,EACnC,QAAQ,EACJ,wDACI,kCAAG,SAAS,EAAC,aAAa,gBACrB,GAAG,CAAC,yBAAyB,CAAC,YAC/B;gBACJ,mCAAG,SAAS,EAAC,aAAa,iBACrB,GAAG,CAAC,yBAAyB,CAAC,EAC/B,kCAAG,IAAI,EAAE,GAAG,CAAC,WAAW,gBAAG,GAAG,CAAC,aAAa,CAAC,YAAK,EACjD,GAAG,CAAC,yBAAyB,CAAC,aAC/B,YACL,YAET,CACL,CAAC;AAEN,CAAC,CAAC,CAAC"}

View File

@ -1,6 +1,6 @@
/// <reference types="react" />
import type { KcProps } from "./KcProps";
import type { KcContext } from "../KcContext";
export declare const Register: import("react").MemoExoticComponent<({ kcContext, ...props }: {
kcContext: KcContext.Register;
} & KcProps) => JSX.Element>;
import type { KcPagesProperties } from "./KcProperties";
export declare type RegisterPageProps = {
kcProperties?: KcPagesProperties;
};
export declare const Register: import("react").MemoExoticComponent<(props: RegisterPageProps) => JSX.Element>;

View File

@ -10,46 +10,59 @@ var __assign = (this && this.__assign) || function () {
};
return __assign.apply(this, arguments);
};
var __rest = (this && this.__rest) || function (s, e) {
var t = {};
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
t[p] = s[p];
if (s != null && typeof Object.getOwnPropertySymbols === "function")
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
t[p[i]] = s[p[i]];
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);
}
return t;
finally { if (e) throw e.error; }
}
return ar;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Register = void 0;
var jsx_runtime_1 = require("react/jsx-runtime");
var react_1 = require("react");
var Template_1 = require("./Template");
var useKcMessage_1 = require("../i18n/useKcMessage");
var KcProperties_1 = require("./KcProperties");
var assert_1 = require("../tools/assert");
var kcContext_1 = require("../kcContext");
var useKcTranslation_1 = require("../i18n/useKcTranslation");
var tss_react_1 = require("tss-react");
exports.Register = react_1.memo(function (_a) {
var _b, _c, _d, _e;
var kcContext = _a.kcContext, props = __rest(_a, ["kcContext"]);
var _f = useKcMessage_1.useKcMessage(), msg = _f.msg, msgStr = _f.msgStr;
var url = kcContext.url, messagesPerField = kcContext.messagesPerField, register = kcContext.register, realm = kcContext.realm, passwordRequired = kcContext.passwordRequired, recaptchaRequired = kcContext.recaptchaRequired, recaptchaSiteKey = kcContext.recaptchaSiteKey;
return (jsx_runtime_1.jsx(Template_1.Template, __assign({}, __assign({ kcContext: kcContext }, props), { headerNode: msg("registerTitle"), formNode: jsx_runtime_1.jsxs("form", __assign({ id: "kc-register-form", className: tss_react_1.cx(props.kcFormClass), action: url.registrationAction, method: "post" }, { children: [jsx_runtime_1.jsxs("div", __assign({ className: tss_react_1.cx(props.kcFormGroupClass, messagesPerField.printIfExists('firstName', props.kcFormGroupErrorClass)) }, { children: [jsx_runtime_1.jsx("div", __assign({ className: tss_react_1.cx(props.kcLabelWrapperClass) }, { children: jsx_runtime_1.jsx("label", __assign({ htmlFor: "firstName", className: tss_react_1.cx(props.kcLabelClass) }, { children: msg("firstName") }), void 0) }), void 0),
jsx_runtime_1.jsx("div", __assign({ className: tss_react_1.cx(props.kcInputWrapperClass) }, { children: jsx_runtime_1.jsx("input", { type: "text", id: "firstName", className: tss_react_1.cx(props.kcInputClass), name: "firstName", defaultValue: (_b = register.formData.firstName) !== null && _b !== void 0 ? _b : "" }, void 0) }), void 0)] }), void 0),
jsx_runtime_1.jsxs("div", __assign({ className: tss_react_1.cx(props.kcFormGroupClass, messagesPerField.printIfExists("lastName", props.kcFormGroupErrorClass)) }, { children: [jsx_runtime_1.jsx("div", __assign({ className: tss_react_1.cx(props.kcLabelWrapperClass) }, { children: jsx_runtime_1.jsx("label", __assign({ htmlFor: "lastName", className: tss_react_1.cx(props.kcLabelClass) }, { children: msg("lastName") }), void 0) }), void 0),
jsx_runtime_1.jsx("div", __assign({ className: tss_react_1.cx(props.kcInputWrapperClass) }, { children: jsx_runtime_1.jsx("input", { type: "text", id: "lastName", className: tss_react_1.cx(props.kcInputClass), name: "lastName", defaultValue: (_c = register.formData.lastName) !== null && _c !== void 0 ? _c : "" }, void 0) }), void 0)] }), void 0),
jsx_runtime_1.jsxs("div", __assign({ className: tss_react_1.cx(props.kcFormGroupClass, messagesPerField.printIfExists('email', props.kcFormGroupErrorClass)) }, { children: [jsx_runtime_1.jsx("div", __assign({ className: tss_react_1.cx(props.kcLabelWrapperClass) }, { children: jsx_runtime_1.jsx("label", __assign({ htmlFor: "email", className: tss_react_1.cx(props.kcLabelClass) }, { children: msg("email") }), void 0) }), void 0),
jsx_runtime_1.jsx("div", __assign({ className: tss_react_1.cx(props.kcInputWrapperClass) }, { children: jsx_runtime_1.jsx("input", { type: "text", id: "email", className: tss_react_1.cx(props.kcInputClass), name: "email", defaultValue: (_d = register.formData.email) !== null && _d !== void 0 ? _d : "", autoComplete: "email" }, void 0) }), void 0)] }), void 0),
exports.Register = react_1.memo(function (props) {
var _a, _b, _c, _d;
var _e = props.kcProperties, kcProperties = _e === void 0 ? {} : _e;
var _f = useKcTranslation_1.useKcTranslation(), t = _f.t, tStr = _f.tStr;
Object.assign(kcProperties, KcProperties_1.defaultKcPagesProperties);
var _g = __read(react_1.useState(function () {
assert_1.assert(kcContext_1.kcContext !== undefined &&
kcContext_1.kcContext.pageBasename === "register.ftl");
return kcContext_1.kcContext;
}), 1), _h = _g[0], url = _h.url, messagesPerField = _h.messagesPerField, register = _h.register, realm = _h.realm, passwordRequired = _h.passwordRequired, recaptchaRequired = _h.recaptchaRequired, recaptchaSiteKey = _h.recaptchaSiteKey;
return (jsx_runtime_1.jsx(Template_1.Template, { kcProperties: kcProperties, headerNode: t("registerTitle"), formNode: jsx_runtime_1.jsxs("form", __assign({ id: "kc-register-form", className: tss_react_1.cx(kcProperties.kcFormClass), action: url.registrationAction, method: "post" }, { children: [jsx_runtime_1.jsxs("div", __assign({ className: tss_react_1.cx(kcProperties.kcFormGroupClass, messagesPerField.printIfExists('firstName', kcProperties.kcFormGroupErrorClass)) }, { children: [jsx_runtime_1.jsx("div", __assign({ className: tss_react_1.cx(kcProperties.kcLabelWrapperClass) }, { children: jsx_runtime_1.jsx("label", __assign({ htmlFor: "firstName", className: tss_react_1.cx(kcProperties.kcLabelClass) }, { children: t("firstName") }), void 0) }), void 0),
jsx_runtime_1.jsx("div", __assign({ className: tss_react_1.cx(kcProperties.kcInputWrapperClass) }, { children: jsx_runtime_1.jsx("input", { type: "text", id: "firstName", className: tss_react_1.cx(kcProperties.kcInputClass), name: "firstName", defaultValue: (_a = register.formData.firstName) !== null && _a !== void 0 ? _a : "" }, void 0) }), void 0)] }), void 0),
jsx_runtime_1.jsxs("div", __assign({ className: tss_react_1.cx(kcProperties.kcFormGroupClass, messagesPerField.printIfExists("lastName", kcProperties.kcFormGroupErrorClass)) }, { children: [jsx_runtime_1.jsx("div", __assign({ className: tss_react_1.cx(kcProperties.kcLabelWrapperClass) }, { children: jsx_runtime_1.jsx("label", __assign({ htmlFor: "lastName", className: tss_react_1.cx(kcProperties.kcLabelClass) }, { children: t("lastName") }), void 0) }), void 0),
jsx_runtime_1.jsx("div", __assign({ className: tss_react_1.cx(kcProperties.kcInputWrapperClass) }, { children: jsx_runtime_1.jsx("input", { type: "text", id: "lastName", className: tss_react_1.cx(kcProperties.kcInputClass), name: "lastName", defaultValue: (_b = register.formData.lastName) !== null && _b !== void 0 ? _b : "" }, void 0) }), void 0)] }), void 0),
jsx_runtime_1.jsxs("div", __assign({ className: tss_react_1.cx(kcProperties.kcFormGroupClass, messagesPerField.printIfExists('email', kcProperties.kcFormGroupErrorClass)) }, { children: [jsx_runtime_1.jsx("div", __assign({ className: tss_react_1.cx(kcProperties.kcLabelWrapperClass) }, { children: jsx_runtime_1.jsx("label", __assign({ htmlFor: "email", className: tss_react_1.cx(kcProperties.kcLabelClass) }, { children: t("email") }), void 0) }), void 0),
jsx_runtime_1.jsx("div", __assign({ className: tss_react_1.cx(kcProperties.kcInputWrapperClass) }, { children: jsx_runtime_1.jsx("input", { type: "text", id: "email", className: tss_react_1.cx(kcProperties.kcInputClass), name: "email", defaultValue: (_c = register.formData.email) !== null && _c !== void 0 ? _c : "", autoComplete: "email" }, void 0) }), void 0)] }), void 0),
!realm.registrationEmailAsUsername &&
jsx_runtime_1.jsxs("div", __assign({ className: tss_react_1.cx(props.kcFormGroupClass, messagesPerField.printIfExists('username', props.kcFormGroupErrorClass)) }, { children: [jsx_runtime_1.jsx("div", __assign({ className: tss_react_1.cx(props.kcLabelWrapperClass) }, { children: jsx_runtime_1.jsx("label", __assign({ htmlFor: "username", className: tss_react_1.cx(props.kcLabelClass) }, { children: msg("username") }), void 0) }), void 0),
jsx_runtime_1.jsx("div", __assign({ className: tss_react_1.cx(props.kcInputWrapperClass) }, { children: jsx_runtime_1.jsx("input", { type: "text", id: "username", className: tss_react_1.cx(props.kcInputClass), name: "username", defaultValue: (_e = register.formData.username) !== null && _e !== void 0 ? _e : "", autoComplete: "username" }, void 0) }), void 0)] }), void 0),
jsx_runtime_1.jsxs("div", __assign({ className: tss_react_1.cx(kcProperties.kcFormGroupClass, messagesPerField.printIfExists('username', kcProperties.kcFormGroupErrorClass)) }, { children: [jsx_runtime_1.jsx("div", __assign({ className: tss_react_1.cx(kcProperties.kcLabelWrapperClass) }, { children: jsx_runtime_1.jsx("label", __assign({ htmlFor: "username", className: tss_react_1.cx(kcProperties.kcLabelClass) }, { children: t("username") }), void 0) }), void 0),
jsx_runtime_1.jsx("div", __assign({ className: tss_react_1.cx(kcProperties.kcInputWrapperClass) }, { children: jsx_runtime_1.jsx("input", { type: "text", id: "username", className: tss_react_1.cx(kcProperties.kcInputClass), name: "username", defaultValue: (_d = register.formData.username) !== null && _d !== void 0 ? _d : "", autoComplete: "username" }, void 0) }), void 0)] }), void 0),
passwordRequired &&
jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [jsx_runtime_1.jsxs("div", __assign({ className: tss_react_1.cx(props.kcFormGroupClass, messagesPerField.printIfExists("password", props.kcFormGroupErrorClass)) }, { children: [jsx_runtime_1.jsx("div", __assign({ className: tss_react_1.cx(props.kcLabelWrapperClass) }, { children: jsx_runtime_1.jsx("label", __assign({ htmlFor: "password", className: tss_react_1.cx(props.kcLabelClass) }, { children: msg("password") }), void 0) }), void 0),
jsx_runtime_1.jsx("div", __assign({ className: tss_react_1.cx(props.kcInputWrapperClass) }, { children: jsx_runtime_1.jsx("input", { type: "password", id: "password", className: tss_react_1.cx(props.kcInputClass), name: "password", autoComplete: "new-password" }, void 0) }), void 0)] }), void 0),
jsx_runtime_1.jsxs("div", __assign({ className: tss_react_1.cx(props.kcFormGroupClass, messagesPerField.printIfExists("password-confirm", props.kcFormGroupErrorClass)) }, { children: [jsx_runtime_1.jsx("div", __assign({ className: tss_react_1.cx(props.kcLabelWrapperClass) }, { children: jsx_runtime_1.jsx("label", __assign({ htmlFor: "password-confirm", className: tss_react_1.cx(props.kcLabelClass) }, { children: msg("passwordConfirm") }), void 0) }), void 0),
jsx_runtime_1.jsx("div", __assign({ className: tss_react_1.cx(props.kcInputWrapperClass) }, { children: jsx_runtime_1.jsx("input", { type: "password", id: "password-confirm", className: tss_react_1.cx(props.kcInputClass), name: "password-confirm" }, void 0) }), void 0)] }), void 0)] }, void 0),
jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [jsx_runtime_1.jsxs("div", __assign({ className: tss_react_1.cx(kcProperties.kcFormGroupClass, messagesPerField.printIfExists("password", kcProperties.kcFormGroupErrorClass)) }, { children: [jsx_runtime_1.jsx("div", __assign({ className: tss_react_1.cx(kcProperties.kcLabelWrapperClass) }, { children: jsx_runtime_1.jsx("label", __assign({ htmlFor: "password", className: tss_react_1.cx(kcProperties.kcLabelClass) }, { children: t("password") }), void 0) }), void 0),
jsx_runtime_1.jsx("div", __assign({ className: tss_react_1.cx(kcProperties.kcInputWrapperClass) }, { children: jsx_runtime_1.jsx("input", { type: "password", id: "password", className: tss_react_1.cx(kcProperties.kcInputClass), name: "password", autoComplete: "new-password" }, void 0) }), void 0)] }), void 0),
jsx_runtime_1.jsxs("div", __assign({ className: tss_react_1.cx(kcProperties.kcFormGroupClass, messagesPerField.printIfExists("password-confirm", kcProperties.kcFormGroupErrorClass)) }, { children: [jsx_runtime_1.jsx("div", __assign({ className: tss_react_1.cx(kcProperties.kcLabelWrapperClass) }, { children: jsx_runtime_1.jsx("label", __assign({ htmlFor: "password-confirm", className: tss_react_1.cx(kcProperties.kcLabelClass) }, { children: t("passwordConfirm") }), void 0) }), void 0),
jsx_runtime_1.jsx("div", __assign({ className: tss_react_1.cx(kcProperties.kcInputWrapperClass) }, { children: jsx_runtime_1.jsx("input", { type: "password", id: "password-confirm", className: tss_react_1.cx(kcProperties.kcInputClass), name: "password-confirm" }, void 0) }), void 0)] }), void 0)] }, void 0),
recaptchaRequired &&
jsx_runtime_1.jsx("div", __assign({ className: "form-group" }, { children: jsx_runtime_1.jsx("div", __assign({ className: tss_react_1.cx(props.kcInputWrapperClass) }, { children: jsx_runtime_1.jsx("div", { className: "g-recaptcha", "data-size": "compact", "data-sitekey": recaptchaSiteKey }, void 0) }), void 0) }), void 0),
jsx_runtime_1.jsxs("div", __assign({ className: tss_react_1.cx(props.kcFormGroupClass) }, { children: [jsx_runtime_1.jsx("div", __assign({ id: "kc-form-options", className: tss_react_1.cx(props.kcFormOptionsClass) }, { children: jsx_runtime_1.jsx("div", __assign({ className: tss_react_1.cx(props.kcFormOptionsWrapperClass) }, { children: jsx_runtime_1.jsx("span", { children: jsx_runtime_1.jsx("a", __assign({ href: url.loginUrl }, { children: msg("backToLogin") }), void 0) }, void 0) }), void 0) }), void 0),
jsx_runtime_1.jsx("div", __assign({ id: "kc-form-buttons", className: tss_react_1.cx(props.kcFormButtonsClass) }, { children: jsx_runtime_1.jsx("input", { className: tss_react_1.cx(props.kcButtonClass, props.kcButtonPrimaryClass, props.kcButtonBlockClass, props.kcButtonLargeClass), type: "submit", defaultValue: msgStr("doRegister") }, void 0) }), void 0)] }), void 0)] }), void 0) }), void 0));
jsx_runtime_1.jsx("div", __assign({ className: "form-group" }, { children: jsx_runtime_1.jsx("div", __assign({ className: tss_react_1.cx(kcProperties.kcInputWrapperClass) }, { children: jsx_runtime_1.jsx("div", { className: "g-recaptcha", "data-size": "compact", "data-sitekey": recaptchaSiteKey }, void 0) }), void 0) }), void 0),
jsx_runtime_1.jsxs("div", __assign({ className: tss_react_1.cx(kcProperties.kcFormGroupClass) }, { children: [jsx_runtime_1.jsx("div", __assign({ id: "kc-form-options", className: tss_react_1.cx(kcProperties.kcFormOptionsClass) }, { children: jsx_runtime_1.jsx("div", __assign({ className: tss_react_1.cx(kcProperties.kcFormOptionsWrapperClass) }, { children: jsx_runtime_1.jsx("span", { children: jsx_runtime_1.jsx("a", __assign({ href: url.loginUrl }, { children: t("backToLogin") }), void 0) }, void 0) }), void 0) }), void 0),
jsx_runtime_1.jsx("div", __assign({ id: "kc-form-buttons", className: tss_react_1.cx(kcProperties.kcFormButtonsClass) }, { children: jsx_runtime_1.jsx("input", { className: tss_react_1.cx(kcProperties.kcButtonClass, kcProperties.kcButtonPrimaryClass, kcProperties.kcButtonBlockClass, kcProperties.kcButtonLargeClass), type: "submit", defaultValue: tStr("doRegister") }, void 0) }), void 0)] }), void 0)] }), void 0) }, void 0));
});
//# sourceMappingURL=Register.js.map

View File

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

View File

@ -1,7 +1,7 @@
import type { ReactNode } from "react";
import type { KcContext } from "../KcContext";
import type { KcTemplateProps } from "./KcProps";
import type { KcTemplateProperties } from "./KcProperties";
export declare type TemplateProps = {
kcProperties: KcTemplateProperties;
displayInfo?: boolean;
displayMessage?: boolean;
displayRequiredFields?: boolean;
@ -10,8 +10,6 @@ export declare type TemplateProps = {
headerNode: ReactNode;
showUsernameNode?: ReactNode;
formNode: ReactNode;
infoNode?: ReactNode;
} & {
kcContext: KcContext.Template;
} & KcTemplateProps;
displayInfoNode?: ReactNode;
};
export declare const Template: import("react").MemoExoticComponent<(props: TemplateProps) => JSX.Element | null>;

View File

@ -35,50 +35,38 @@ Object.defineProperty(exports, "__esModule", { value: true });
exports.Template = void 0;
var jsx_runtime_1 = require("react/jsx-runtime");
var react_1 = require("react");
var useKcMessage_1 = require("../i18n/useKcMessage");
var useKcLanguageTag_1 = require("../i18n/useKcLanguageTag");
var useKcTranslation_1 = require("../i18n/useKcTranslation");
var kcContext_1 = require("../kcContext");
var assert_1 = require("../tools/assert");
var tss_react_1 = require("tss-react");
var useKcLanguageTag_1 = require("../i18n/useKcLanguageTag");
var KcLanguageTag_1 = require("../i18n/KcLanguageTag");
var KcLanguageTag_2 = require("../i18n/KcLanguageTag");
var powerhooks_1 = require("powerhooks");
var appendHead_1 = require("../tools/appendHead");
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, headerNode = props.headerNode, _f = props.showUsernameNode, showUsernameNode = _f === void 0 ? null : _f, formNode = props.formNode, _g = props.infoNode, infoNode = _g === void 0 ? null : _g, kcContext = props.kcContext;
react_1.useEffect(function () { console.log("Rendering this page with react using keycloakify"); }, []);
var msg = useKcMessage_1.useKcMessage().msg;
var _h = useKcLanguageTag_1.useKcLanguageTag(), kcLanguageTag = _h.kcLanguageTag, setKcLanguageTag = _h.setKcLanguageTag;
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, _g = props.showUsernameNode, showUsernameNode = _g === void 0 ? null : _g, formNode = props.formNode, _h = props.displayInfoNode, displayInfoNode = _h === void 0 ? null : _h;
react_1.useEffect(function () { console.log("Rendering this page with react using keycloak-react-theming"); }, []);
var t = useKcTranslation_1.useKcTranslation().t;
Object.assign(kcProperties, KcProperties_1.defaultKcTemplateProperties);
var _j = useKcLanguageTag_1.useKcLanguageTag(), kcLanguageTag = _j.kcLanguageTag, setKcLanguageTag = _j.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 () {
return (document.forms["kc-select-try-another-way-form"].submit(), false);
document.forms["kc-select-try-another-way-form"].submit();
return false;
});
var realm = kcContext.realm, locale = kcContext.locale, auth = kcContext.auth, url = kcContext.url, message = kcContext.message, isAppInitiatedAction = kcContext.isAppInitiatedAction;
react_1.useEffect(function () {
if (!realm.internationalizationEnabled) {
return;
}
assert_1.assert(locale !== undefined);
if (kcLanguageTag === KcLanguageTag_1.getBestMatchAmongKcLanguageTag(locale.current)) {
return;
}
window.location.href =
locale.supported.find(function (_a) {
var languageTag = _a.languageTag;
return languageTag === kcLanguageTag;
}).url;
}, [kcLanguageTag]);
var _j = __read(react_1.useReducer(function () { return true; }, false), 2), isExtraCssLoaded = _j[0], setExtraCssLoaded = _j[1];
var _k = __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), _l = _k[0], realm = _l.realm, locale = _l.locale, auth = _l.auth, url = _l.url, message = _l.message, isAppInitiatedAction = _l.isAppInitiatedAction;
var _m = __read(react_1.useReducer(function () { return true; }, false), 2), isExtraCssLoaded = _m[0], setExtraCssLoaded = _m[1];
react_1.useEffect(function () {
var _a, _b, _c;
var isUnmounted = false;
var toArr = function (x) {
return typeof x === "string" ? x.split(" ") : x !== null && x !== void 0 ? x : [];
};
Promise.all(__spreadArray(__spreadArray([], __read(toArr(props.stylesCommon).map(function (relativePath) { return path_1.join(url.resourcesCommonPath, relativePath); }))), __read(toArr(props.styles).map(function (relativePath) { return path_1.join(url.resourcesPath, relativePath); }))).map(function (href) { return appendHead_1.appendHead({
Promise.all(__spreadArray(__spreadArray([], __read(((_a = kcProperties.stylesCommon) !== null && _a !== void 0 ? _a : []).map(function (relativePath) { return path_1.join(url.resourcesCommonPath, relativePath); }))), __read(((_b = kcProperties.styles) !== null && _b !== void 0 ? _b : []).map(function (relativePath) { return path_1.join(url.resourcesPath, relativePath); }))).map(function (href) { return appendHead_1.appendHead({
"type": "css",
href: href
}); })).then(function () {
@ -87,54 +75,54 @@ exports.Template = react_1.memo(function (props) {
}
setExtraCssLoaded();
});
toArr(props.scripts).forEach(function (relativePath) { return appendHead_1.appendHead({
(_c = kcProperties.scripts) === null || _c === void 0 ? void 0 : _c.forEach(function (relativePath) { return appendHead_1.appendHead({
"type": "javascript",
"src": path_1.join(url.resourcesPath, relativePath)
}); });
document.getElementsByTagName("html")[0]
.classList
.add(tss_react_1.cx(props.kcHtmlClass));
.add(tss_react_1.cx(kcProperties.kcHtmlClass));
return function () { isUnmounted = true; };
}, []);
if (!isExtraCssLoaded) {
return null;
}
return (jsx_runtime_1.jsxs("div", __assign({ className: tss_react_1.cx(props.kcLoginClass) }, { children: [jsx_runtime_1.jsx("div", __assign({ id: "kc-header", className: tss_react_1.cx(props.kcHeaderClass) }, { children: jsx_runtime_1.jsx("div", __assign({ id: "kc-header-wrapper", className: tss_react_1.cx(props.kcHeaderWrapperClass) }, { children: msg("loginTitleHtml", realm.displayNameHtml) }), void 0) }), void 0),
jsx_runtime_1.jsxs("div", __assign({ className: tss_react_1.cx(props.kcFormCardClass, displayWide && props.kcFormCardAccountClass) }, { children: [jsx_runtime_1.jsxs("header", __assign({ className: tss_react_1.cx(props.kcFormHeaderClass) }, { children: [(realm.internationalizationEnabled &&
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(kcProperties.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(props.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_2.getKcLanguageTagLabel(kcLanguageTag) }), void 0),
jsx_runtime_1.jsx("div", __assign({ id: "kc-locale" }, { children: jsx_runtime_1.jsx("div", __assign({ id: "kc-locale-wrapper", className: tss_react_1.cx(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_2.getKcLanguageTagLabel(languageTag) }), void 0) }), languageTag);
var languageTag = _a.languageTag, url = _a.url;
return jsx_runtime_1.jsx("li", __assign({ className: "kc-dropdown-item" }, { children: jsx_runtime_1.jsx("a", __assign({ href: url, 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(props.kcContentWrapperClass) }, { children: [jsx_runtime_1.jsx("div", __assign({ className: tss_react_1.cx(props.kcLabelWrapperClass, "subtitle") }, { children: jsx_runtime_1.jsxs("span", __assign({ className: "subtitle" }, { children: [jsx_runtime_1.jsx("span", __assign({ className: "required" }, { children: "*" }), void 0), msg("requiredFields")] }), void 0) }), void 0),
(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(props.kcContentWrapperClass) }, { children: [jsx_runtime_1.jsx("div", __assign({ className: tss_react_1.cx(props.kcLabelWrapperClass, "subtitle") }, { children: jsx_runtime_1.jsxs("span", __assign({ className: "subtitle" }, { children: [jsx_runtime_1.jsx("span", __assign({ className: "required" }, { children: "*" }), void 0), " ", msg("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(props.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(props.kcResetFlowIcon) }, void 0),
jsx_runtime_1.jsx("span", __assign({ className: "kc-tooltip-text" }, { children: msg("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(props.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(props.kcResetFlowIcon) }, void 0),
jsx_runtime_1.jsx("span", __assign({ className: "kc-tooltip-text" }, { children: msg("restartLoginTooltip") }), void 0)] }), void 0) }), void 0)] }), void 0) }), 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(props.kcFeedbackSuccessIcon) }, void 0),
message.type === "warning" && jsx_runtime_1.jsx("span", { className: tss_react_1.cx(props.kcFeedbackWarningIcon) }, void 0),
message.type === "error" && jsx_runtime_1.jsx("span", { className: tss_react_1.cx(props.kcFeedbackErrorIcon) }, void 0),
message.type === "info" && jsx_runtime_1.jsx("span", { className: tss_react_1.cx(props.kcFeedbackInfoIcon) }, void 0),
jsx_runtime_1.jsxs("div", __assign({ className: tss_react_1.cx("alert", "alert-" + message.type) }, { children: [message.type === "success" && jsx_runtime_1.jsx("span", { className: tss_react_1.cx(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 && props.kcContentWrapperClass) }, { children: jsx_runtime_1.jsx("div", __assign({ className: tss_react_1.cx(displayWide && [props.kcFormSocialAccountContentClass, props.kcFormSocialAccountClass]) }, { children: jsx_runtime_1.jsxs("div", __assign({ className: tss_react_1.cx(props.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: msg("doTryAnotherWay") }), void 0)] }), void 0) }), void 0) }), void 0),
jsx_runtime_1.jsx("form", __assign({ id: "kc-select-try-another-way-form", action: url.loginAction, method: "post", className: tss_react_1.cx(displayWide && 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(props.kcSignUpClass) }, { children: jsx_runtime_1.jsx("div", __assign({ id: "kc-info-wrapper", className: tss_react_1.cx(props.kcInfoAreaWrapperClass) }, { children: infoNode }), void 0) }), void 0)] }), void 0) }), void 0)] }), void 0)] }), void 0));
jsx_runtime_1.jsx("div", __assign({ id: "kc-info", className: tss_react_1.cx(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

View File

@ -1,6 +1,6 @@
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" | "Polski" | "Català" | "Nederlands" | "Türkçe";
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

View File

@ -16,15 +16,16 @@ function getKcLanguageTagLabel(language) {
case "no": return "Norsk";
case "pt-BR": return "Português (Brasil)";
case "ru": return "Русский";
case "sk": return "Slovenčina";
case "sk":
case "sv": return "Slovenčina";
case "ja": return "日本語";
case "pl": return "Polski";
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 "Türkçe";
case "tr": return "tr";
/* spell-checker: enable */
}
return language;

View File

@ -1 +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,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,QAAQ,CAAC;QAC3B,2BAA2B;KAC9B;IAED,OAAO,QAAQ,CAAC;AAEpB,CAAC;AA3BD,sDA2BC;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,aAAa,GAAG,kBAAkB,CAAC,IAAI,CAAC,UAAA,QAAQ;QAClD,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,aAAa,KAAK,SAAS,EAAE;QAC7B,OAAO,aAAa,CAAC;KACxB;IAED,IAAI,YAAY,KAAK,SAAS,CAAC,QAAQ,EAAE;QACrC,OAAO,8BAA8B,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;KAC7D;IAED,OAAO,IAAI,CAAC;AAChB,CAAC;AApBD,wEAoBC"}
{"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,aAAa,GAAG,kBAAkB,CAAC,IAAI,CAAC,UAAA,QAAQ;QAClD,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,aAAa,KAAK,SAAS,EAAE;QAC7B,OAAO,aAAa,CAAC;KACxB;IAED,IAAI,YAAY,KAAK,SAAS,CAAC,QAAQ,EAAE;QACrC,OAAO,8BAA8B,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;KAC7D;IAED,OAAO,IAAI,CAAC;AAChB,CAAC;AApBD,wEAoBC"}

View File

@ -1,2 +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">;
export declare function getEvtKcLanguage(): import("evt/lib/types").StatefulEvt<"tr" | "no" | "en" | "ca" | "cs" | "de" | "es" | "fr" | "it" | "ja" | "lt" | "nl" | "pl" | "pt-BR" | "ru" | "sk" | "sv" | "zh-CN">;

View File

@ -1,17 +1,11 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.getEvtKcLanguage = exports.useKcLanguageTag = void 0;
exports.useKcLanguageTag = void 0;
var powerhooks_1 = require("powerhooks");
var KcContext_1 = require("../KcContext");
var kcContext_1 = require("../kcContext");
var KcLanguageTag_1 = require("./KcLanguageTag");
//export const { useKcLanguageTag, evtKcLanguageTag } = createUseGlobalState(
var wrap = powerhooks_1.createUseGlobalState("kcLanguageTag", function () {
exports.useKcLanguageTag = powerhooks_1.createUseGlobalState("kcLanguageTag", function () {
var _a, _b;
return KcLanguageTag_1.getBestMatchAmongKcLanguageTag((_b = (_a = KcContext_1.kcContext === null || KcContext_1.kcContext === void 0 ? void 0 : KcContext_1.kcContext.locale) === null || _a === void 0 ? void 0 : _a.current) !== null && _b !== void 0 ? _b : navigator.language);
}, { "persistance": "cookie" });
exports.useKcLanguageTag = wrap.useKcLanguageTag;
function getEvtKcLanguage() {
return wrap.evtKcLanguageTag;
}
exports.getEvtKcLanguage = getEvtKcLanguage;
return KcLanguageTag_1.getBestMatchAmongKcLanguageTag((_b = (_a = kcContext_1.kcContext === null || kcContext_1.kcContext === void 0 ? void 0 : kcContext_1.kcContext.locale) === null || _a === void 0 ? void 0 : _a["current"]) !== null && _b !== void 0 ? _b : navigator.language);
}, { "persistance": "cookie" }).useKcLanguageTag;
//# sourceMappingURL=useKcLanguageTag.js.map

View File

@ -1 +1 @@
{"version":3,"file":"useKcLanguageTag.js","sourceRoot":"","sources":["../../src/lib/i18n/useKcLanguageTag.ts"],"names":[],"mappings":";;;AACA,yCAAkD;AAClD,0CAAyC;AACzC,iDAAiE;AAEjE,6EAA6E;AAC7E,IAAM,IAAI,GAAG,iCAAoB,CAC7B,eAAe,EACf;;IAAM,OAAA,8CAA8B,CAChC,MAAA,MAAA,qBAAS,aAAT,qBAAS,uBAAT,qBAAS,CAAE,MAAM,0CAAE,OAAO,mCAC1B,SAAS,CAAC,QAAQ,CACrB,CAAA;CAAA,EACD,EAAE,aAAa,EAAE,QAAQ,EAAE,CAC9B,CAAC;AAEa,QAAA,gBAAgB,GAAK,IAAI,kBAAC;AAEzC,SAAgB,gBAAgB;IAC5B,OAAO,IAAI,CAAC,gBAAgB,CAAC;AACjC,CAAC;AAFD,4CAEC"}
{"version":3,"file":"useKcLanguageTag.js","sourceRoot":"","sources":["../../src/lib/i18n/useKcLanguageTag.ts"],"names":[],"mappings":";;;AACA,yCAAkD;AAClD,0CAAyC;AACzC,iDAAiE;AAElD,QAAA,gBAAgB,GAAK,iCAAoB,CACpD,eAAe,EACf;;IAAM,OAAA,8CAA8B,CAChC,MAAA,MAAA,qBAAS,aAAT,qBAAS,uBAAT,qBAAS,CAAE,MAAM,0CAAG,SAAkB,CAAC,mCACvC,SAAS,CAAC,QAAQ,CACrB,CAAA;CAAA,EACD,EAAE,aAAa,EAAE,QAAQ,EAAE,CAC9B,kBAAC"}

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
{"version":3,"file":"useKcMessage.js","sourceRoot":"","sources":["../../src/lib/i18n/useKcMessage.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AACA,uDAAsD;AACtD,oDAAsD;AACtD,yCAA8C;AAE9C,8CAA6C;AAI7C,SAAgB,YAAY;IAEhB,IAAA,aAAa,GAAK,mCAAgB,EAAE,cAAvB,CAAwB;IAE7C,IAAM,MAAM,GAAG,6BAAgB,CAC3B,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,GAAG,GAAG,6BAAgB,CACxB,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,MAAM,8BAAC,GAAG,UAAK,IAAI,GAAC,EAAE,WAAI;IAArF,CAAqF,CAC5F,CACJ,CAAC;IAEF,OAAO,EAAE,GAAG,KAAA,EAAE,MAAM,QAAA,EAAE,CAAC;AAE3B,CAAC;AAjCD,oCAiCC"}

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

File diff suppressed because one or more lines are too long

View File

@ -21,15 +21,15 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from) {
return to;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.useKcMessage = void 0;
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 useKcMessage() {
function useKcTranslation() {
var kcLanguageTag = useKcLanguageTag_1.useKcLanguageTag().kcLanguageTag;
var msgStr = powerhooks_1.useConstCallback(function (key) {
var tStr = powerhooks_1.useConstCallback(function (key) {
var _a;
var args = [];
for (var _i = 1; _i < arguments.length; _i++) {
@ -44,14 +44,14 @@ function useKcMessage() {
});
return str;
});
var msg = powerhooks_1.useConstCallback(id_1.id(function (key) {
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": msgStr.apply(void 0, __spreadArray([key], __read(args))) } }, void 0);
return jsx_runtime_1.jsx("span", { className: key, dangerouslySetInnerHTML: { "__html": tStr.apply(void 0, __spreadArray([key], __read(args))) } }, void 0);
}));
return { msg: msg, msgStr: msgStr };
return { t: t, tStr: tStr };
}
exports.useKcMessage = useKcMessage;
//# sourceMappingURL=useKcMessage.js.map
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"}

12
lib/index.d.ts vendored
View File

@ -1,14 +1,8 @@
export * from "./KcContext";
export * from "./kcContext";
export * from "./i18n/KcLanguageTag";
export * from "./i18n/useKcLanguageTag";
export * from "./i18n/useKcMessage";
export * from "./components/KcProps";
export * from "./i18n/useKcTranslation";
export * from "./components/KcProperties";
export * from "./components/Login";
export * from "./components/Template";
export * from "./components/KcApp";
export * from "./components/Info";
export * from "./components/Error";
export * from "./components/LoginResetPassword";
export * from "./components/LoginVerifyEmail";
export * from "./tools/assert";
export * as kcContextMocks from "./kcContextMocks";

View File

@ -6,35 +6,16 @@ var __createBinding = (this && this.__createBinding) || (Object.create ? (functi
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
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);
};
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.kcContextMocks = void 0;
__exportStar(require("./KcContext"), exports);
__exportStar(require("./kcContext"), exports);
__exportStar(require("./i18n/KcLanguageTag"), exports);
__exportStar(require("./i18n/useKcLanguageTag"), exports);
__exportStar(require("./i18n/useKcMessage"), exports);
__exportStar(require("./components/KcProps"), 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);
__exportStar(require("./components/Info"), exports);
__exportStar(require("./components/Error"), exports);
__exportStar(require("./components/LoginResetPassword"), exports);
__exportStar(require("./components/LoginVerifyEmail"), exports);
__exportStar(require("./tools/assert"), exports);
exports.kcContextMocks = __importStar(require("./kcContextMocks"));
//# sourceMappingURL=index.js.map

View File

@ -1 +1 @@
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/lib/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,8CAA4B;AAE5B,uDAAqC;AACrC,0DAAwC;AACxC,sDAAoC;AAEpC,uDAAqC;AACrC,qDAAmC;AACnC,wDAAsC;AACtC,qDAAmC;AACnC,oDAAkC;AAClC,qDAAmC;AACnC,kEAAgD;AAChD,gEAA8C;AAE9C,iDAA+B;AAE/B,mEAAmD"}
{"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"}

View File

@ -1,8 +1,5 @@
import type { KcLanguageTag } from "./i18n/KcLanguageTag";
import type { MessageKey } from "./i18n/useKcMessage";
import type { LanguageLabel } from "./i18n/KcLanguageTag";
declare type ExtractAfterStartingWith<Prefix extends string, StrEnum> = StrEnum extends `${Prefix}${infer U}` ? U : never;
export declare type KcContext = KcContext.Login | KcContext.Register | KcContext.Info | KcContext.Error | KcContext.LoginResetPassword | KcContext.LoginVerifyEmail;
export declare type KcContext = KcContext.Login | KcContext.Register;
export declare namespace KcContext {
type Template = {
url: {
@ -16,6 +13,7 @@ export declare namespace KcContext {
displayName?: string;
displayNameHtml?: string;
internationalizationEnabled: boolean;
password: boolean;
registrationEmailAsUsername: boolean;
};
/** Undefined if !realm.internationalizationEnabled */
@ -24,13 +22,12 @@ export declare namespace KcContext {
url: string;
languageTag: KcLanguageTag;
}[];
current: LanguageLabel;
};
auth?: {
showUsername: boolean;
showResetCredentials: boolean;
showTryAnotherWayLink: boolean;
attemptedUsername?: string;
attemptedUsername?: boolean;
};
scripts: string[];
message?: {
@ -40,7 +37,7 @@ export declare namespace KcContext {
isAppInitiatedAction: boolean;
};
type Login = Template & {
pageId: "login.ftl";
pageBasename: "login.ftl";
url: {
loginResetCredentialsUrl: string;
registrationUrl: string;
@ -48,7 +45,6 @@ export declare namespace KcContext {
realm: {
loginWithEmailAllowed: boolean;
rememberMe: boolean;
password: boolean;
resetPasswordAllowed: boolean;
registrationAllowed: boolean;
};
@ -72,7 +68,7 @@ export declare namespace KcContext {
};
};
type Register = Template & {
pageId: "register.ftl";
pageBasename: "register.ftl";
url: {
registrationAction: string;
};
@ -90,34 +86,8 @@ export declare namespace KcContext {
};
passwordRequired: boolean;
recaptchaRequired: boolean;
/** undefined if !recaptchaRequired */
recaptchaSiteKey?: string;
};
type Info = Template & {
pageId: "info.ftl";
messageHeader?: string;
requiredActions?: ExtractAfterStartingWith<"requiredAction.", MessageKey>[];
skipLink: boolean;
pageRedirectUri?: string;
actionUri?: string;
client: {
baseUrl?: string;
};
};
type Error = Template & {
pageId: "error.ftl";
client?: {
baseUrl?: string;
};
};
type LoginResetPassword = Template & {
pageId: "login-reset-password.ftl";
realm: {
loginWithEmailAllowed: boolean;
};
};
type LoginVerifyEmail = Template & {
pageId: "login-verify-email.ftl";
};
}
export declare const kcContext: KcContext | undefined;
export {};

View File

@ -4,7 +4,9 @@ exports.kcContext = void 0;
var ftlValuesGlobalName_1 = require("../bin/build-keycloak-theme/ftlValuesGlobalName");
var id_1 = require("evt/tools/typeSafety/id");
var doExtends_1 = require("evt/tools/typeSafety/doExtends");
doExtends_1.doExtends();
doExtends_1.doExtends();
{
doExtends_1.doExtends();
doExtends_1.doExtends();
}
exports.kcContext = id_1.id(window[ftlValuesGlobalName_1.ftlValuesGlobalName]);
//# sourceMappingURL=KcContext.js.map
//# 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;AAE7C,4DAA2D;AAoH3D;IAII,qBAAS,EAAQ,CAAC;IAClB,qBAAS,EAAQ,CAAC;CACrB;AAEY,QAAA,SAAS,GAAG,OAAE,CAAyB,MAAc,CAAC,yCAAmB,CAAC,CAAC,CAAC"}

View File

@ -1,8 +0,0 @@
import type { KcContext } from "../KcContext";
export declare const kcTemplateContext: KcContext.Template;
export declare const kcLoginContext: KcContext.Login;
export declare const kcRegisterContext: KcContext.Register;
export declare const kcInfoContext: KcContext.Info;
export declare const kcErrorContext: KcContext.Error;
export declare const kcLoginResetPasswordContext: KcContext.LoginResetPassword;
export declare const kcLoginVerifyEmailContext: KcContext.LoginVerifyEmail;

View File

@ -1,167 +0,0 @@
"use strict";
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var __read = (this && this.__read) || function (o, n) {
var m = typeof Symbol === "function" && o[Symbol.iterator];
if (!m) return o;
var i = m.call(o), r, ar = [], e;
try {
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
}
catch (error) { e = { error: error }; }
finally {
try {
if (r && !r.done && (m = i["return"])) m.call(i);
}
finally { if (e) throw e.error; }
}
return ar;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.kcLoginVerifyEmailContext = exports.kcLoginResetPasswordContext = exports.kcErrorContext = exports.kcInfoContext = exports.kcRegisterContext = exports.kcLoginContext = exports.kcTemplateContext = void 0;
var useKcLanguageTag_1 = require("../i18n/useKcLanguageTag");
var KcLanguageTag_1 = require("../i18n/KcLanguageTag");
//NOTE: Aside because we want to be able to import them from node
var urlResourcesPath_1 = require("./urlResourcesPath");
exports.kcTemplateContext = {
"url": {
"loginAction": "#",
"resourcesPath": "/" + urlResourcesPath_1.resourcesPath,
"resourcesCommonPath": "/" + urlResourcesPath_1.resourcesCommonPath,
"loginRestartFlowUrl": "/auth/realms/myrealm/login-actions/restart?client_id=account&tab_id=HoAx28ja4xg",
"loginUrl": "/auth/realms/myrealm/login-actions/authenticate?client_id=account&tab_id=HoAx28ja4xg",
},
"realm": {
"displayName": "myrealm",
"displayNameHtml": "myrealm",
"internationalizationEnabled": true,
"registrationEmailAsUsername": true,
},
"locale": {
"supported": [
{
"url": "/auth/realms/myrealm/login-actions/authenticate?client_id=account&tab_id=HoAx28ja4xg&execution=ee6c2834-46a4-4a20-a1b6-f6d6f6451b36&kc_locale=de",
"languageTag": "de"
},
{
"url": "/auth/realms/myrealm/login-actions/authenticate?client_id=account&tab_id=HoAx28ja4xg&execution=ee6c2834-46a4-4a20-a1b6-f6d6f6451b36&kc_locale=no",
"languageTag": "no"
},
{
"url": "/auth/realms/myrealm/login-actions/authenticate?client_id=account&tab_id=HoAx28ja4xg&execution=ee6c2834-46a4-4a20-a1b6-f6d6f6451b36&kc_locale=ru",
"languageTag": "ru"
},
{
"url": "/auth/realms/myrealm/login-actions/authenticate?client_id=account&tab_id=HoAx28ja4xg&execution=ee6c2834-46a4-4a20-a1b6-f6d6f6451b36&kc_locale=sv",
"languageTag": "sv"
},
{
"url": "/auth/realms/myrealm/login-actions/authenticate?client_id=account&tab_id=HoAx28ja4xg&execution=ee6c2834-46a4-4a20-a1b6-f6d6f6451b36&kc_locale=pt-BR",
"languageTag": "pt-BR"
},
{
"url": "/auth/realms/myrealm/login-actions/authenticate?client_id=account&tab_id=HoAx28ja4xg&execution=ee6c2834-46a4-4a20-a1b6-f6d6f6451b36&kc_locale=lt",
"languageTag": "lt"
},
{
"url": "/auth/realms/myrealm/login-actions/authenticate?client_id=account&tab_id=HoAx28ja4xg&execution=ee6c2834-46a4-4a20-a1b6-f6d6f6451b36&kc_locale=en",
"languageTag": "en"
},
{
"url": "/auth/realms/myrealm/login-actions/authenticate?client_id=account&tab_id=HoAx28ja4xg&execution=ee6c2834-46a4-4a20-a1b6-f6d6f6451b36&kc_locale=it",
"languageTag": "it"
},
{
"url": "/auth/realms/myrealm/login-actions/authenticate?client_id=account&tab_id=HoAx28ja4xg&execution=ee6c2834-46a4-4a20-a1b6-f6d6f6451b36&kc_locale=fr",
"languageTag": "fr"
},
{
"url": "/auth/realms/myrealm/login-actions/authenticate?client_id=account&tab_id=HoAx28ja4xg&execution=ee6c2834-46a4-4a20-a1b6-f6d6f6451b36&kc_locale=zh-CN",
"languageTag": "zh-CN"
},
{
"url": "/auth/realms/myrealm/login-actions/authenticate?client_id=account&tab_id=HoAx28ja4xg&execution=ee6c2834-46a4-4a20-a1b6-f6d6f6451b36&kc_locale=es",
"languageTag": "es"
},
{
"url": "/auth/realms/myrealm/login-actions/authenticate?client_id=account&tab_id=HoAx28ja4xg&execution=ee6c2834-46a4-4a20-a1b6-f6d6f6451b36&kc_locale=cs",
"languageTag": "cs"
},
{
"url": "/auth/realms/myrealm/login-actions/authenticate?client_id=account&tab_id=HoAx28ja4xg&execution=ee6c2834-46a4-4a20-a1b6-f6d6f6451b36&kc_locale=ja",
"languageTag": "ja"
},
{
"url": "/auth/realms/myrealm/login-actions/authenticate?client_id=account&tab_id=HoAx28ja4xg&execution=ee6c2834-46a4-4a20-a1b6-f6d6f6451b36&kc_locale=sk",
"languageTag": "sk"
},
{
"url": "/auth/realms/myrealm/login-actions/authenticate?client_id=account&tab_id=HoAx28ja4xg&execution=ee6c2834-46a4-4a20-a1b6-f6d6f6451b36&kc_locale=pl",
"languageTag": "pl"
},
{
"url": "/auth/realms/myrealm/login-actions/authenticate?client_id=account&tab_id=HoAx28ja4xg&execution=ee6c2834-46a4-4a20-a1b6-f6d6f6451b36&kc_locale=ca",
"languageTag": "ca"
},
{
"url": "/auth/realms/myrealm/login-actions/authenticate?client_id=account&tab_id=HoAx28ja4xg&execution=ee6c2834-46a4-4a20-a1b6-f6d6f6451b36&kc_locale=nl",
"languageTag": "nl"
},
{
"url": "/auth/realms/myrealm/login-actions/authenticate?client_id=account&tab_id=HoAx28ja4xg&execution=ee6c2834-46a4-4a20-a1b6-f6d6f6451b36&kc_locale=tr",
"languageTag": "tr"
}
],
"current": null
},
"auth": {
"showUsername": false,
"showResetCredentials": false,
"showTryAnotherWayLink": false
},
"scripts": [],
"message": {
"type": "success",
"summary": "This is a test message"
},
"isAppInitiatedAction": false,
};
Object.defineProperty(exports.kcTemplateContext.locale, "current", {
"get": function () { return KcLanguageTag_1.getKcLanguageTagLabel(useKcLanguageTag_1.getEvtKcLanguage().state); },
"enumerable": true
});
exports.kcLoginContext = __assign(__assign({}, exports.kcTemplateContext), { "pageId": "login.ftl", "url": __assign(__assign({}, exports.kcTemplateContext.url), { "loginResetCredentialsUrl": "/auth/realms/myrealm/login-actions/reset-credentials?client_id=account&tab_id=HoAx28ja4xg", "registrationUrl": "/auth/realms/myrealm/login-actions/registration?client_id=account&tab_id=HoAx28ja4xg" }), "realm": __assign(__assign({}, exports.kcTemplateContext.realm), { "loginWithEmailAllowed": true, "rememberMe": true, "password": true, "resetPasswordAllowed": true, "registrationAllowed": true }), "auth": exports.kcTemplateContext.auth, "social": {
"displayInfo": true
}, "usernameEditDisabled": false, "login": {
"rememberMe": false
}, "registrationDisabled": false });
exports.kcRegisterContext = __assign(__assign({}, exports.kcTemplateContext), { "url": __assign(__assign({}, exports.kcLoginContext.url), { "registrationAction": "http://localhost:8080/auth/realms/myrealm/login-actions/registration?session_code=gwZdUeO7pbYpFTRxiIxRg_QtzMbtFTKrNu6XW_f8asM&execution=12146ce0-b139-4bbd-b25b-0eccfee6577e&client_id=account&tab_id=uS8lYfebLa0" }), "messagesPerField": {
"printIfExists": function () {
var _a = [];
for (var _i = 0; _i < arguments.length; _i++) {
_a[_i] = arguments[_i];
}
var _b = __read(_a, 2), x = _b[1];
return x;
}
}, "scripts": [], "isAppInitiatedAction": false, "pageId": "register.ftl", "register": {
"formData": {}
}, "passwordRequired": true, "recaptchaRequired": false });
exports.kcInfoContext = __assign(__assign({}, exports.kcTemplateContext), { "pageId": "info.ftl", "messageHeader": "<Message header>", "requiredActions": undefined, "skipLink": false, "actionUri": "#", "client": {
"baseUrl": "#"
} });
exports.kcErrorContext = __assign(__assign({}, exports.kcTemplateContext), { "pageId": "error.ftl", "client": {
"baseUrl": "#"
} });
exports.kcLoginResetPasswordContext = __assign(__assign({}, exports.kcTemplateContext), { "pageId": "login-reset-password.ftl", "realm": __assign(__assign({}, exports.kcTemplateContext.realm), { "loginWithEmailAllowed": false }) });
exports.kcLoginVerifyEmailContext = __assign(__assign({}, exports.kcTemplateContext), { "pageId": "login-verify-email.ftl" });
//# sourceMappingURL=index.js.map

View File

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

View File

@ -1,3 +0,0 @@
export declare const subDirOfPublicDirBasename = "keycloak_static";
export declare const resourcesPath: string;
export declare const resourcesCommonPath: string;

View File

@ -1,8 +0,0 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.resourcesCommonPath = exports.resourcesPath = exports.subDirOfPublicDirBasename = void 0;
var path_1 = require("path");
exports.subDirOfPublicDirBasename = "keycloak_static";
exports.resourcesPath = path_1.join(exports.subDirOfPublicDirBasename, "/resources");
exports.resourcesCommonPath = path_1.join(exports.subDirOfPublicDirBasename, "/resources_common");
//# sourceMappingURL=urlResourcesPath.js.map

View File

@ -1 +0,0 @@
{"version":3,"file":"urlResourcesPath.js","sourceRoot":"","sources":["../../src/lib/kcContextMocks/urlResourcesPath.ts"],"names":[],"mappings":";;;AACA,6BAAwC;AAE3B,QAAA,yBAAyB,GAAG,iBAAiB,CAAC;AAC9C,QAAA,aAAa,GAAG,WAAQ,CAAC,iCAAyB,EAAE,YAAY,CAAC,CAAC;AAClE,QAAA,mBAAmB,GAAG,WAAQ,CAAC,iCAAyB,EAAE,mBAAmB,CAAC,CAAC"}

View File

@ -1,10 +1,10 @@
{
"name": "keycloakify",
"version": "0.2.2",
"name": "keycloak-react-theming",
"version": "0.0.33",
"description": "Keycloak theme generator for Reacts app",
"repository": {
"type": "git",
"url": "git://github.com/garronej/keycloakify.git"
"url": "git://github.com/garronej/keycloak-react-theming.git"
},
"main": "lib/index.js",
"types": "lib/index.d.ts",
@ -18,12 +18,7 @@
"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/Object.deepAssign.js",
"src/bin/build-keycloak-theme/generateFtl/String.htmlUnescape.js",
"src/bin/build-keycloak-theme/generateFtl/error.ftl",
"src/bin/build-keycloak-theme/generateFtl/index.ts",
"src/bin/build-keycloak-theme/generateFtl/info.ftl",
"src/bin/build-keycloak-theme/generateFtl/login-reset-password.ftl",
"src/bin/build-keycloak-theme/generateFtl/login.ftl",
"src/bin/build-keycloak-theme/generateFtl/register.ftl",
"src/bin/build-keycloak-theme/generateFtl/template.ftl",
@ -38,13 +33,9 @@
"src/bin/tools/getProjectRoot.ts",
"src/bin/tools/grant-exec-perms.ts",
"src/bin/tools/transformCodebase.ts",
"src/lib/components/Error.tsx",
"src/lib/components/Info.tsx",
"src/lib/components/KcApp.tsx",
"src/lib/components/KcProps.ts",
"src/lib/components/KcProperties.ts",
"src/lib/components/Login.tsx",
"src/lib/components/LoginResetPassword.tsx",
"src/lib/components/LoginVerifyEmail.tsx",
"src/lib/components/Register.tsx",
"src/lib/components/Template.tsx",
"src/lib/i18n/KcLanguageTag.ts",
@ -53,11 +44,9 @@
"src/lib/i18n/generated_messages/email.ts",
"src/lib/i18n/generated_messages/login.ts",
"src/lib/i18n/useKcLanguageTag.ts",
"src/lib/i18n/useKcMessage.tsx",
"src/lib/i18n/useKcTranslation.tsx",
"src/lib/index.ts",
"src/lib/kcContext.ts",
"src/lib/kcContextMocks/index.ts",
"src/lib/kcContextMocks/urlResourcesPath.ts",
"src/lib/tools/allPropertiesValuesToUndefined.ts",
"src/lib/tools/appendHead.ts",
"src/lib/tools/assert.ts",
@ -68,14 +57,9 @@
"bin/build-keycloak-theme/generateDebugFiles/index.js",
"bin/build-keycloak-theme/generateDebugFiles/index.js.map",
"bin/build-keycloak-theme/generateDebugFiles/standalone-ha.xml",
"bin/build-keycloak-theme/generateFtl/Object.deepAssign.js",
"bin/build-keycloak-theme/generateFtl/String.htmlUnescape.js",
"bin/build-keycloak-theme/generateFtl/error.ftl",
"bin/build-keycloak-theme/generateFtl/index.d.ts",
"bin/build-keycloak-theme/generateFtl/index.js",
"bin/build-keycloak-theme/generateFtl/index.js.map",
"bin/build-keycloak-theme/generateFtl/info.ftl",
"bin/build-keycloak-theme/generateFtl/login-reset-password.ftl",
"bin/build-keycloak-theme/generateFtl/login.ftl",
"bin/build-keycloak-theme/generateFtl/register.ftl",
"bin/build-keycloak-theme/generateFtl/template.ftl",
@ -112,30 +96,15 @@
"bin/tools/transformCodebase.d.ts",
"bin/tools/transformCodebase.js",
"bin/tools/transformCodebase.js.map",
"lib/KcContext.d.ts",
"lib/KcContext.js",
"lib/KcContext.js.map",
"lib/components/Error.d.ts",
"lib/components/Error.js",
"lib/components/Error.js.map",
"lib/components/Info.d.ts",
"lib/components/Info.js",
"lib/components/Info.js.map",
"lib/components/KcApp.d.ts",
"lib/components/KcApp.js",
"lib/components/KcApp.js.map",
"lib/components/KcProps.d.ts",
"lib/components/KcProps.js",
"lib/components/KcProps.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/LoginResetPassword.d.ts",
"lib/components/LoginResetPassword.js",
"lib/components/LoginResetPassword.js.map",
"lib/components/LoginVerifyEmail.d.ts",
"lib/components/LoginVerifyEmail.js",
"lib/components/LoginVerifyEmail.js.map",
"lib/components/Register.d.ts",
"lib/components/Register.js",
"lib/components/Register.js.map",
@ -160,18 +129,15 @@
"lib/i18n/useKcLanguageTag.d.ts",
"lib/i18n/useKcLanguageTag.js",
"lib/i18n/useKcLanguageTag.js.map",
"lib/i18n/useKcMessage.d.ts",
"lib/i18n/useKcMessage.js",
"lib/i18n/useKcMessage.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/kcContextMocks/index.d.ts",
"lib/kcContextMocks/index.js",
"lib/kcContextMocks/index.js.map",
"lib/kcContextMocks/urlResourcesPath.d.ts",
"lib/kcContextMocks/urlResourcesPath.js",
"lib/kcContextMocks/urlResourcesPath.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",
@ -191,7 +157,7 @@
"login",
"register"
],
"homepage": "https://github.com/garronej/keycloakify",
"homepage": "https://github.com/garronej/keycloak-react-theming",
"devDependencies": {
"@types/node": "^10.0.0",
"@types/react": "^17.0.0",
@ -203,12 +169,11 @@
"typescript": "^4.1.5"
},
"dependencies": {
"scripting-tools": "^0.19.13",
"cheerio": "^1.0.0-rc.5",
"evt": "2.0.0-beta.15",
"minimal-polyfills": "^2.1.6",
"path": "^0.12.7",
"powerhooks": "^0.0.20",
"scripting-tools": "^0.19.13",
"tss-react": "^0.0.11"
"powerhooks": "^0.0.17",
"tss-react": "^0.0.9"
}
}

View File

@ -1,28 +0,0 @@
Object.defineProperty(
Object,
"deepAssign",
{
"value": function callee(target, source) {
Object.keys(source).forEach(function (key) {
var value = source[key];
if (target[key] === undefined) {
target[key] = value;
return;
}
if (value instanceof Object) {
if (value instanceof Array) {
value.forEach(function (entry) {
target[key].push(entry);
});
return;
}
callee(target[key], value);
return;
}
target[key] = value;
});
return target;
}
}
);

View File

@ -1,26 +0,0 @@
var es = /&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34);/g;
var unes = {
'&amp;': '&',
'&#38;': '&',
'&lt;': '<',
'&#60;': '<',
'&gt;': '>',
'&#62;': '>',
'&apos;': "'",
'&#39;': "'",
'&quot;': '"',
'&#34;': '"'
};
var cape = function (m) { return unes[m]; };
Object.defineProperty(
String,
"htmlUnescape",
{
"value": function (un) {
return String.prototype.replace.call(un, es, cape);
}
}
);

View File

@ -1,15 +0,0 @@
<script>const _=
{
"client": (function (){
<#if client??>
return {
"baseUrl": "${(client.baseUrl!'')?no_esc}" || undefined
};
</#if>
return undefined;
})()
}
</script>

View File

@ -9,26 +9,13 @@ import fs from "fs";
import { join as pathJoin } from "path";
import { objectKeys } from "evt/tools/typeSafety/objectKeys";
export const pageIds = ["login.ftl", "register.ftl", "info.ftl", "error.ftl", "login-reset-password.ftl", "login-verify-email.ftl"] as const;
export type PageId = typeof pageIds[number];
function loadAdjacentFile(fileBasename: string){
return fs.readFileSync(pathJoin(__dirname, fileBasename))
.toString("utf8");
};
function loadFtlFile(ftlFileBasename: PageId | "template.ftl") {
try {
return loadAdjacentFile(ftlFileBasename)
.match(/^<script>const _=((?:.|\n)+)<\/script>[\n]?$/)![1];
} catch {
return "{}";
}
function loadFtlFile(ftlFileBasename: "template.ftl" | "login.ftl" | "register.ftl") {
return fs.readFileSync(pathJoin(__dirname, ftlFileBasename))
.toString("utf8")
.match(/^<script>const _=((?:.|\n)+)<\/script>[\n]?$/)![1];
}
export function generateFtlFilesCodeFactory(
params: {
ftlValuesGlobalName: string;
@ -52,6 +39,7 @@ export function generateFtlFilesCodeFactory(
});
([
["link", "href"],
["script", "src"],
@ -78,12 +66,10 @@ export function generateFtlFilesCodeFactory(
' <#list scripts as script>',
' <script src="${script}" type="text/javascript"></script>',
' </#list>',
'</#if>'
'</#if>',
].join("\n")
};
const pageSpecificCodePlaceholder = "<!-- dIddLqMeOedErIdLsPdNdI9dSl42sw -->";
$("head").prepend(
[
...(Object.keys(cssGlobalsToDefine).length === 0 ? [] : [
@ -95,59 +81,80 @@ export function generateFtlFilesCodeFactory(
'</style>',
''
]),
...["Object.deepAssign.js", "String.htmlUnescape.js"].map(
fileBasename => [
"<script>",
loadAdjacentFile(fileBasename),
"</script>"
].join("\n")
),
'<script>',
` window.${ftlValuesGlobalName}= Object.assign(`,
` {},`,
' Object.deepAssign(',
` window.${ftlValuesGlobalName},`,
` ${objectKeys(ftlCommonPlaceholders)[0]}`,
' );',
'</script>',
'',
pageSpecificCodePlaceholder,
'',
objectKeys(ftlCommonPlaceholders)[1]
objectKeys(ftlCommonPlaceholders)[1],
''
].join("\n"),
);
const partiallyFixedIndexHtmlCode = $.html();
function generateFtlFilesCode(
params: {
pageId: PageId;
pageBasename: "login.ftl" | "register.ftl"
}
): { ftlCode: string; } {
const { pageId } = params;
const { pageBasename } = params;
const $ = cheerio.load(partiallyFixedIndexHtmlCode);
const ftlPlaceholders = {
'{ "x": "kxOlLqMeOed9sdLdIdOxd444" }': loadFtlFile(pageId),
'{ "x": "kxOlLqMeOed9sdLdIdOxd444" }': loadFtlFile(pageBasename),
...ftlCommonPlaceholders
};
let ftlCode = $.html()
.replace(
pageSpecificCodePlaceholder,
[
'<script>',
` Object.deepAssign(`,
` window.${ftlValuesGlobalName},`,
` { "pageId": "${pageId}" }`,
' );',
` Object.deepAssign(`,
` window.${ftlValuesGlobalName},`,
` ${objectKeys(ftlPlaceholders)[0]}`,
' );',
'</script>'
].join("\n")
);
$("head").prepend(
[
'',
'<script>',
'',
` window.${ftlValuesGlobalName} = Object.assign(`,
` { "pageBasename": "${pageBasename}" },`,
` ${objectKeys(ftlPlaceholders)[0]}`,
' );',
'',
' Object.defineProperty(',
' Object,',
' "deepAssign",',
' {',
' "value": function callee(target, source) {',
' Object.keys(source).forEach(function (key) {',
' var value = source[key];',
' if( target[key] === undefined ){',
' target[key]= value;',
' return;',
' }',
' if( value instanceof Object ){',
' if( value instanceof Array ){',
' value.forEach(function (entry){',
' target[key].push(entry);',
' });',
' return;',
' }',
' callee(target[key], value);',
' return;',
' }',
' target[key]= value;',
' });',
' return target;',
' }',
' }',
' );',
'',
'</script>',
''
].join("\n")
);
let ftlCode = $.html();
objectKeys(ftlPlaceholders)
.forEach(id => ftlCode = ftlCode.replace(id, ftlPlaceholders[id]));

View File

@ -1,37 +0,0 @@
<script>const _=
{
"messageHeader": "${messageHeader!''}" || undefined,
"requiredActions": (function (){
<#if requiredActions??>
var out =[];
<#list requiredActions>
<#items as reqActionItem>
out.push("${reqActionItem}");
</#items></b>
</#list>
return out;
<#else>
return undefined;
})(),
"skipLink": (function (){
<#if skipLink??>
return true;
</#if>
return false;
})(),
"pageRedirectUri": "${(pageRedirectUri!'')?no_esc}" || undefined,
"actionUri": "${(actionUri!'')?no_esc}" || undefined,
"client": {
"baseUrl": "${(client.baseUrl!'')?no_esc}" || undefined
}
}
</script>

View File

@ -1,7 +0,0 @@
<script>const _=
{
"realm": {
"loginWithEmailAllowed": ${realm.loginWithEmailAllowed?c}
},
}
</script>

View File

@ -7,7 +7,6 @@
"realm": {
"loginWithEmailAllowed": ${realm.loginWithEmailAllowed?c},
"rememberMe": ${realm.rememberMe?c},
"password": ${realm.password?c},
"resetPasswordAllowed": ${realm.resetPasswordAllowed?c},
"registrationAllowed": ${realm.registrationAllowed?c}
},

View File

@ -11,6 +11,7 @@
"displayName": "${realm.displayName!''}" || undefined,
"displayNameHtml": "${realm.displayNameHtml!''}" || undefined,
"internationalizationEnabled": ${realm.internationalizationEnabled?c},
"password": ${realm.password?c},
"registrationEmailAsUsername": ${realm.registrationEmailAsUsername?c},
},
"locale": (function (){
@ -94,7 +95,7 @@
return { 
"type": "${message.type}",
"summary": String.htmlUnescape("${message.summary}")
"summary": "${kcSanitize(message.summary)?no_esc}"
};
</#if>

View File

@ -6,12 +6,11 @@ import {
replaceImportFromStaticInCssCode,
replaceImportFromStaticInJsCode
} from "./replaceImportFromStatic";
import { generateFtlFilesCodeFactory, pageIds } from "./generateFtl";
import { generateFtlFilesCodeFactory } from "./generateFtl";
import { builtinThemesUrl } from "../install-builtin-keycloak-themes";
import { downloadAndUnzip } from "../tools/downloadAndUnzip";
import * as child_process from "child_process";
import { ftlValuesGlobalName } from "./ftlValuesGlobalName";
import { resourcesCommonPath, resourcesPath, subDirOfPublicDirBasename } from "../../lib/kcContextMocks/urlResourcesPath";
export function generateKeycloakThemeResources(
params: {
@ -71,14 +70,14 @@ export function generateKeycloakThemeResources(
).toString("utf8")
});
pageIds.forEach(pageId => {
(["login.ftl", "register.ftl"] as const).forEach(pageBasename => {
const { ftlCode } = generateFtlFilesCode({ pageId });
const { ftlCode } = generateFtlFilesCode({ pageBasename });
fs.writeFileSync(
pathJoin(themeDirPath, pageId),
pathJoin(themeDirPath, pageBasename),
Buffer.from(ftlCode, "utf8")
);
)
});
@ -91,54 +90,11 @@ export function generateKeycloakThemeResources(
"destDirPath": tmpDirPath
});
const themeResourcesDirPath= pathJoin(themeDirPath, "resources");
transformCodebase({
"srcDirPath": pathJoin(tmpDirPath, "keycloak", "login", "resources"),
"destDirPath": themeResourcesDirPath
"destDirPath": pathJoin(themeDirPath, "resources")
});
//const keycloakResourcesWithinPublicDirPath = pathJoin(reactAppBuildDirPath, "..", "public", "keycloak_static");
const reactAppPublicDirPath = pathJoin(reactAppBuildDirPath, "..", "public");
transformCodebase({
"srcDirPath": themeResourcesDirPath,
"destDirPath": pathJoin(
reactAppPublicDirPath,
resourcesPath
)
});
transformCodebase({
"srcDirPath": pathJoin(tmpDirPath, "keycloak", "common", "resources"),
"destDirPath": pathJoin(
reactAppPublicDirPath,
resourcesCommonPath
)
});
const keycloakResourcesWithinPublicDirPath =
pathJoin(reactAppPublicDirPath, subDirOfPublicDirBasename);
fs.writeFileSync(
pathJoin(keycloakResourcesWithinPublicDirPath, ".gitignore"),
Buffer.from([
resourcesPath,
resourcesCommonPath
].join("\n"))
);
fs.writeFileSync(
pathJoin(keycloakResourcesWithinPublicDirPath, "README.txt"),
Buffer.from([
"This is just a test folder that helps develop",
"the login and register page without having to yarn build"
].join(" "))
);
child_process.execSync(`rm -r ${tmpDirPath}`);
}

View File

@ -5,7 +5,7 @@ import { downloadAndUnzip } from "./tools/downloadAndUnzip";
import { join as pathJoin } from "path";
export const builtinThemesUrl =
"https://github.com/garronej/keycloakify/releases/download/v0.0.1/keycloak_11.0.3_builtin_themes.zip";
"https://github.com/garronej/keycloak-react-theming/releases/download/v0.0.1/keycloak_11.0.3_builtin_themes.zip";
if (require.main === module) {

View File

@ -1,39 +0,0 @@
import { memo } from "react";
import { Template } from "./Template";
import type { KcProps } from "./KcProps";
import { assert } from "../tools/assert";
import type { KcContext } from "../KcContext";
import { useKcMessage } from "../i18n/useKcMessage";
export const Error = memo(({ kcContext, ...props }: { kcContext: KcContext.Error; } & KcProps) => {
const { msg } = useKcMessage();
assert(kcContext.message !== undefined);
const { message, client } = kcContext;
return (
<Template
{...{ kcContext, ...props }}
displayMessage={false}
headerNode={msg("errorTitle")}
formNode={
<div id="kc-error-message">
<p className="instruction">{message.summary}</p>
{
client !== undefined && client.baseUrl !== undefined &&
<p>
<a id="backToApplication" href={client.baseUrl}>
{msg("backToApplication")}
</a>
</p>
}
</div>
}
/>
);
});

View File

@ -1,72 +0,0 @@
import { memo } from "react";
import { Template } from "./Template";
import type { KcProps } from "./KcProps";
import { assert } from "../tools/assert";
import type { KcContext } from "../KcContext";
import { useKcMessage } from "../i18n/useKcMessage";
export const Info = memo(({ kcContext, ...props }: { kcContext: KcContext.Info; } & KcProps) => {
const { msg } = useKcMessage();
assert(kcContext.message !== undefined);
const {
messageHeader,
message,
requiredActions,
skipLink,
pageRedirectUri,
actionUri,
client
} = kcContext;
return (
<Template
{...{ kcContext, ...props }}
displayMessage={false}
headerNode={
messageHeader !== undefined ?
<>{messageHeader}</>
:
<>{message.summary}</>
}
formNode={
<div id="kc-info-message">
<p className="instruction">{message.summary}
{
requiredActions !== undefined &&
<b>
{
requiredActions
.map(requiredAction => msg(`requiredAction.${requiredAction}` as const))
.join(",")
}
</b>
}
</p>
{
!skipLink &&
pageRedirectUri !== undefined ?
<p><a href="${pageRedirectUri}">${(msg("backToApplication"))}</a></p>
:
actionUri !== undefined ?
<p><a href="${actionUri}">${msg("proceedWithAction")}</a></p>
:
client.baseUrl !== undefined &&
<p><a href="${client.baseUrl}">${msg("backToApplication")}</a></p>
}
</div>
}
/>
);
});

View File

@ -1,21 +1,24 @@
import { memo } from "react";
import type { KcContext } from "../KcContext";
import type { KcProps } from "./KcProps";
import { kcContext } from "../kcContext";
import { assert } from "../tools/assert";
import type { KcPagesProperties } from "./KcProperties";
import { Login } from "./Login";
import { Register } from "./Register";
import { Info } from "./Info";
import { Error } from "./Error";
import { LoginResetPassword } from "./LoginResetPassword";
import { LoginVerifyEmail } from "./LoginVerifyEmail";
export const KcApp = memo(({ kcContext, ...props }: { kcContext: KcContext; } & KcProps ) => {
switch (kcContext.pageId) {
case "login.ftl": return <Login {...{ kcContext, ...props }} />;
case "register.ftl": return <Register {...{ kcContext, ...props }} />;
case "info.ftl": return <Info {...{ kcContext, ...props }} />;
case "error.ftl": return <Error {...{ kcContext, ...props }} />;
case "login-reset-password.ftl": return <LoginResetPassword {...{ kcContext, ...props }} />;
case "login-verify-email.ftl": return <LoginVerifyEmail {...{ kcContext, ...props }} />;
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": return <Register kcProperties={kcProperties} />;
}
});

View File

@ -0,0 +1,192 @@
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 =
"kcHtmlClass" |
"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"
],
"kcHtmlClass": "login-pf",
"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-signup"
};
/** Tu use if you don't want any default */
export const allClearKcTemplateProperties =
allPropertiesValuesToUndefined(defaultKcTemplateProperties);
export type KcPagesProperties = KcClasses<
KcTemplateCssClasses |
"kcLogoLink" |
"kcLogoClass" |
"kcContainerClass" |
"kcContentClass" |
"kcFeedbackAreaClass" |
"kcLocaleClass" |
"kcAlertIconClasserror" |
"kcFormAreaClass" |
"kcFormSocialAccountListClass" |
"kcFormSocialAccountDoubleListClass" |
"kcFormSocialAccountListLinkClass" |
"kcWebAuthnKeyIcon" |
"kcFormClass" |
"kcFormGroupErrorClass" |
"kcLabelClass" |
"kcInputClass" |
"kcInputWrapperClass" |
"kcFormOptionsClass" |
"kcFormButtonsClass" |
"kcFormSettingClass" |
"kcTextareaClass" |
"kcInfoAreaClass" |
"kcButtonClass" |
"kcButtonPrimaryClass" |
"kcButtonDefaultClass" |
"kcButtonLargeClass" |
"kcButtonBlockClass" |
"kcInputLargeClass" |
"kcSrOnlyClass" |
"kcSelectAuthListClass" |
"kcSelectAuthListItemClass" |
"kcSelectAuthListItemInfoClass" |
"kcSelectAuthListItemLeftClass" |
"kcSelectAuthListItemBodyClass" |
"kcSelectAuthListItemDescriptionClass" |
"kcSelectAuthListItemHeadingClass" |
"kcSelectAuthListItemHelpTextClass" |
"kcAuthenticatorDefaultClass" |
"kcAuthenticatorPasswordClass" |
"kcAuthenticatorOTPClass" |
"kcAuthenticatorWebAuthnClass" |
"kcAuthenticatorWebAuthnPasswordlessClass" |
"kcSelectOTPListClass" |
"kcSelectOTPListItemClass" |
"kcAuthenticatorOtpCircleClass" |
"kcSelectOTPItemHeadingClass" |
"kcFormOptionsWrapperClass"
>;
export const defaultKcPagesProperties: KcPagesProperties = {
...defaultKcTemplateProperties,
"kcLogoLink": "http://www.keycloak.org",
"kcLogoClass": "login-pf-brand",
"kcContainerClass": "container-fluid",
"kcContentClass": "col-sm-8 col-sm-offset-2 col-md-6 col-md-offset-3 col-lg-6 col-lg-offset-3",
"kcFeedbackAreaClass": "col-md-12",
"kcLocaleClass": "col-xs-12 col-sm-1",
"kcAlertIconClasserror": "pficon pficon-error-circle-o",
"kcFormAreaClass": "col-sm-10 col-sm-offset-1 col-md-8 col-md-offset-2 col-lg-8 col-lg-offset-2",
"kcFormSocialAccountListClass": "login-pf-social list-unstyled login-pf-social-all",
"kcFormSocialAccountDoubleListClass": "login-pf-social-double-col",
"kcFormSocialAccountListLinkClass": "login-pf-social-link",
"kcWebAuthnKeyIcon": "pficon pficon-key",
"kcFormClass": "form-horizontal",
"kcFormGroupErrorClass": "has-error",
"kcLabelClass": "control-label",
"kcInputClass": "form-control",
"kcInputWrapperClass": "col-xs-12 col-sm-12 col-md-12 col-lg-12",
"kcFormOptionsClass": "col-xs-12 col-sm-12 col-md-12 col-lg-12",
"kcFormButtonsClass": "col-xs-12 col-sm-12 col-md-12 col-lg-12",
"kcFormSettingClass": "login-pf-settings",
"kcTextareaClass": "form-control",
"kcInfoAreaClass": "col-xs-12 col-sm-4 col-md-4 col-lg-5 details",
// css classes for form buttons main class used for all buttons
"kcButtonClass": "btn",
// classes defining priority of the button - primary or default (there is typically only one priority button for the form)
"kcButtonPrimaryClass": "btn-primary",
"kcButtonDefaultClass": "btn-default",
// classes defining size of the button
"kcButtonLargeClass": "btn-lg",
"kcButtonBlockClass": "btn-block",
// css classes for input
"kcInputLargeClass": "input-lg",
// css classes for form accessability
"kcSrOnlyClass": "sr-only",
// css classes for select-authenticator form
"kcSelectAuthListClass": "list-group list-view-pf",
"kcSelectAuthListItemClass": "list-group-item list-view-pf-stacked",
"kcSelectAuthListItemInfoClass": "list-view-pf-main-info",
"kcSelectAuthListItemLeftClass": "list-view-pf-left",
"kcSelectAuthListItemBodyClass": "list-view-pf-body",
"kcSelectAuthListItemDescriptionClass": "list-view-pf-description",
"kcSelectAuthListItemHeadingClass": "list-group-item-heading",
"kcSelectAuthListItemHelpTextClass": "list-group-item-text",
// css classes for the authenticators
"kcAuthenticatorDefaultClass": "fa list-view-pf-icon-lg",
"kcAuthenticatorPasswordClass": "fa fa-unlock list-view-pf-icon-lg",
"kcAuthenticatorOTPClass": "fa fa-mobile list-view-pf-icon-lg",
"kcAuthenticatorWebAuthnClass": "fa fa-key list-view-pf-icon-lg",
"kcAuthenticatorWebAuthnPasswordlessClass": "fa fa-key list-view-pf-icon-lg",
//css classes for the OTP Login Form
"kcSelectOTPListClass": "card-pf card-pf-view card-pf-view-select card-pf-view-single-select",
"kcSelectOTPListItemClass": "card-pf-body card-pf-top-element",
"kcAuthenticatorOtpCircleClass": "fa fa-mobile card-pf-icon-circle",
"kcSelectOTPItemHeadingClass": "card-pf-title text-center"
};
/** Tu use if you don't want any default */
export const allClearKcLoginPageProperties =
allPropertiesValuesToUndefined(defaultKcPagesProperties);

View File

@ -1,205 +0,0 @@
import { allPropertiesValuesToUndefined } from "../tools/allPropertiesValuesToUndefined";
import { doExtends } from "evt/tools/typeSafety/doExtends";
/** Class names can be provided as an array or separated by whitespace */
export type KcPropsGeneric<CssClasses extends string> = { [key in CssClasses]: readonly string[] | string | undefined; };
export type KcTemplateClassKey =
"stylesCommon" |
"styles" |
"scripts" |
"kcHtmlClass" |
"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 KcTemplateProps = KcPropsGeneric<KcTemplateClassKey>;
export const defaultKcTemplateProps = {
"stylesCommon": [
"node_modules/patternfly/dist/css/patternfly.min.css",
"node_modules/patternfly/dist/css/patternfly-additions.min.css",
"lib/zocial/zocial.css"
],
"styles": ["css/login.css"],
"scripts": [],
"kcHtmlClass": ["login-pf"],
"kcLoginClass": ["login-pf-page"],
"kcContentWrapperClass": ["row"],
"kcHeaderClass": ["login-pf-page-header"],
"kcHeaderWrapperClass": [],
"kcFormCardClass": ["card-pf"],
"kcFormCardAccountClass": ["login-pf-accounts"],
"kcFormSocialAccountClass": ["login-pf-social-section"],
"kcFormSocialAccountContentClass": ["col-xs-12", "col-sm-6"],
"kcFormHeaderClass": ["login-pf-header"],
"kcLocaleWrapperClass": [],
"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-signup"],
"kcInfoAreaWrapperClass": []
} as const;
doExtends<typeof defaultKcTemplateProps, KcTemplateProps>();
/** Tu use if you don't want any default */
export const allClearKcTemplateProps =
allPropertiesValuesToUndefined(defaultKcTemplateProps);
doExtends<typeof allClearKcTemplateProps, KcTemplateProps>();
export type KcProps = KcPropsGeneric<
KcTemplateClassKey |
"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 defaultKcProps = {
...defaultKcTemplateProps,
"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"],
"kcFormOptionsWrapperClass": []
} as const;
doExtends<typeof defaultKcProps, KcProps>();
/** Tu use if you don't want any default */
export const allClearKcProps =
allPropertiesValuesToUndefined(defaultKcProps);
doExtends<typeof allClearKcProps, KcProps>();

View File

@ -1,21 +1,40 @@
import { useState, memo } from "react";
import { Template } from "./Template";
import type { KcProps } from "./KcProps";
import type { KcContext } from "../KcContext";
import { useKcMessage } from "../i18n/useKcMessage";
import type { KcPagesProperties } from "./KcProperties";
import { defaultKcPagesProperties } from "./KcProperties";
import { assert } from "../tools/assert";
import { kcContext } from "../kcContext";
import { useKcTranslation } from "../i18n/useKcTranslation";
import { cx } from "tss-react";
import { useConstCallback } from "powerhooks";
export const Login = memo(({ kcContext, ...props }: { kcContext: KcContext.Login; } & KcProps) => {
export type LoginProps = {
kcProperties?: KcPagesProperties;
};
const { msg, msgStr } = useKcMessage();
export const Login = memo((props: LoginProps) => {
const {
const { kcProperties = {} } = props;
const { t, tStr } = useKcTranslation();
Object.assign(kcProperties, defaultKcPagesProperties);
const [{
social, realm, url,
usernameEditDisabled, login,
auth, registrationDisabled
} = kcContext;
}] = useState(() => {
assert(
kcContext !== undefined &&
kcContext.pageBasename === "login.ftl"
);
return kcContext;
});
const [isLoginButtonDisabled, setIsLoginButtonDisabled] = useState(false);
@ -25,78 +44,78 @@ export const Login = memo(({ kcContext, ...props }: { kcContext: KcContext.Login
return (
<Template
{...{ kcContext, ...props }}
displayInfo={social.displayInfo}
displayWide={realm.password && social.providers !== undefined}
headerNode={msg("doLogIn")}
kcProperties={kcProperties}
headerNode={t("doLogIn")}
formNode={
<div
id="kc-form"
className={cx(realm.password && social.providers !== undefined && props.kcContentWrapperClass)}
className={cx(realm.password && social.providers !== undefined && kcProperties.kcContentWrapperClass)}
>
<div
id="kc-form-wrapper"
className={cx(realm.password && social.providers && [props.kcFormSocialAccountContentClass, props.kcFormSocialAccountClass])}
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(props.kcFormGroupClass)}>
<label htmlFor="username" className={cx(props.kcLabelClass)}>
<div className={cx(kcProperties.kcFormGroupClass)}>
<label htmlFor="username" className={cx(kcProperties.kcLabelClass)}>
{
!realm.loginWithEmailAllowed ?
msg("username")
t("username")
:
(
!realm.registrationEmailAsUsername ?
msg("usernameOrEmail") :
msg("email")
t("usernameOrEmail") :
t("email")
)
}
</label>
<input
tabIndex={1}
id="username"
className={cx(props.kcInputClass)}
className={cx(kcProperties.kcInputClass)}
name="username"
defaultValue={login.username ?? ''}
type="text"
{...(usernameEditDisabled ? { "disabled": true } : { "autoFocus": true, "autoComplete": "off" })}
{...(usernameEditDisabled ? { "disabled": true } : { "autoFocus": true, "autocomplete": "off" })}
/>
</div>
<div className={cx(props.kcFormGroupClass)}>
<label htmlFor="password" className={cx(props.kcLabelClass)}>
{msg("password")}
<div className={cx(kcProperties.kcFormGroupClass)}>
<label htmlFor="password" className={cx(kcProperties.kcLabelClass)}>
{t("password")}
</label>
<input tabIndex={2} id="password" className={cx(props.kcInputClass)} name="password" type="password" autoComplete="off" />
<input tabIndex={2} id="password" className={cx(kcProperties.kcInputClass)} name="password" type="password" autoComplete="off" />
</div>
<div className={cx(props.kcFormGroupClass, props.kcFormSettingClass)}>
<div className={cx(kcProperties.kcFormGroupClass, kcProperties.kcFormSettingClass)}>
<div id="kc-form-options">
{
(
realm.rememberMe &&
(
realm.rememberMe &&
!usernameEditDisabled
) &&
<div className="checkbox">
<label>
<input tabIndex={3} id="rememberMe" name="rememberMe" type="checkbox" {...(login.rememberMe ? { "checked": true } : {})} />
{msg("rememberMe")}
<input tabIndex={3} id="rememberMe" name="rememberMe" type="checkbox" {...(login.rememberMe ? { "checked": true } : {})}/>
{t("rememberMe")}
</label>
</div>
}
</div>
<div className={cx(props.kcFormOptionsWrapperClass)}>
<div className={cx(kcProperties.kcFormOptionsWrapperClass)}>
{
realm.resetPasswordAllowed &&
<span>
<a tabIndex={5} href={url.loginResetCredentialsUrl}>{msg("doForgotPassword")}</a>
<a tabIndex={5} href={url.loginResetCredentialsUrl}>{t("doForgotPassword")}</a>
</span>
}
</div>
</div>
<div id="kc-form-buttons" className={cx(props.kcFormGroupClass)}>
<div id="kc-form-buttons" className={cx(kcProperties.kcFormGroupClass)}>
<input
type="hidden"
id="id-hidden-input"
@ -105,8 +124,8 @@ export const Login = memo(({ kcContext, ...props }: { kcContext: KcContext.Login
/>
<input
tabIndex={4}
className={cx(props.kcButtonClass, props.kcButtonPrimaryClass, props.kcButtonBlockClass, props.kcButtonLargeClass)} name="login" id="kc-login" type="submit"
value={msgStr("doLogIn")}
className={cx(kcProperties.kcButtonClass, kcProperties.kcButtonPrimaryClass, kcProperties.kcButtonBlockClass, kcProperties.kcButtonLargeClass)} name="login" id="kc-login" type="submit"
value={tStr("doLogIn")}
disabled={isLoginButtonDisabled}
/>
</div>
@ -116,11 +135,11 @@ export const Login = memo(({ kcContext, ...props }: { kcContext: KcContext.Login
</div>
{
(realm.password && social.providers !== undefined) &&
<div id="kc-social-providers" className={cx(props.kcFormSocialAccountContentClass, props.kcFormSocialAccountClass)}>
<ul className={cx(props.kcFormSocialAccountListClass, social.providers.length > 4 && props.kcFormSocialAccountDoubleListClass)}>
<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(props.kcFormSocialAccountListLinkClass)}>
<li className={cx(kcProperties.kcFormSocialAccountListLinkClass)}>
<a href={p.loginUrl} id={`zocial-${p.alias}`} className={cx("zocial", p.providerId)}>
<span>{p.displayName}</span>
</a>
@ -132,7 +151,7 @@ export const Login = memo(({ kcContext, ...props }: { kcContext: KcContext.Login
}
</div>
}
infoNode={
displayInfoNode={
(
realm.password &&
realm.registrationAllowed &&
@ -140,9 +159,9 @@ export const Login = memo(({ kcContext, ...props }: { kcContext: KcContext.Login
) &&
<div id="kc-registration">
<span>
{msg("noAccount")}
{t("noAccount")}
<a tabIndex={6} href={url.registrationUrl}>
{msg("doRegister")}
{t("doRegister")}
</a>
</span>
</div>

View File

@ -1,80 +0,0 @@
import { memo } from "react";
import { Template } from "./Template";
import type { KcProps } from "./KcProps";
import type { KcContext } from "../KcContext";
import { useKcMessage } from "../i18n/useKcMessage";
import { cx } from "tss-react";
export const LoginResetPassword = memo(({ kcContext, ...props }: { kcContext: KcContext.LoginResetPassword; } & KcProps) => {
const { msg, msgStr } = useKcMessage();
const {
url,
realm,
auth
} = kcContext;
return (
<Template
{...{ kcContext, ...props }}
displayMessage={false}
headerNode={msg("emailForgotTitle")}
formNode={
<form id="kc-reset-password-form" className={cx(props.kcFormClass)} action={url.loginAction} method="post">
<div className={cx(props.kcFormGroupClass)}>
<div className={cx(props.kcLabelWrapperClass)}>
<label htmlFor="username" className={cx(props.kcLabelClass)}>
{
!realm.loginWithEmailAllowed ?
msg("username")
:
!realm.registrationEmailAsUsername ?
msg("usernameOrEmail") :
msg("email")
}
</label>
</div>
<div className={cx(props.kcInputWrapperClass)}>
<input
type="text"
id="username"
name="username"
className={cx(props.kcInputClass)}
autoFocus
defaultValue={
auth !== undefined && auth.showUsername ?
auth.attemptedUsername : undefined
}
/>
</div>
</div>
<div className={cx(props.kcFormGroupClass, props.kcFormSettingClass)}>
<div id="kc-form-options" className={cx(props.kcFormOptionsClass)}>
<div className={cx(props.kcFormOptionsWrapperClass)}>
<span>
<a href={url.loginUrl}>{msg("backToLogin")}</a>
</span>
</div>
</div>
<div id="kc-form-buttons" className={cx(props.kcFormButtonsClass)}>
<input
className={cx(
props.kcButtonClass, props.kcButtonPrimaryClass,
props.kcButtonBlockClass, props.kcButtonLargeClass
)}
type="submit"
defaultValue={msgStr("doSubmit")}
/>
</div>
</div>
</form>
}
infoNode={msg("emailInstruction")}
/>
);
});

View File

@ -1,38 +0,0 @@
import { memo } from "react";
import { Template } from "./Template";
import type { KcProps } from "./KcProps";
import type { KcContext } from "../KcContext";
import { useKcMessage } from "../i18n/useKcMessage";
export const LoginVerifyEmail = memo(({ kcContext, ...props }: { kcContext: KcContext.LoginVerifyEmail; } & KcProps) => {
const { msg } = useKcMessage();
const {
url
} = kcContext;
return (
<Template
{...{ kcContext, ...props }}
displayMessage={false}
headerNode={msg("emailVerifyTitle")}
formNode={
<>
<p className="instruction">
{msg("emailVerifyInstruction1")}
</p>
<p className="instruction">
{msg("emailVerifyInstruction2")}
<a href={url.loginAction}>{msg("doClickHere")}</a>
{msg("emailVerifyInstruction3")}
</p>
</>
}
/>
);
});

View File

@ -1,15 +1,27 @@
import { memo } from "react";
import { useState, memo } from "react";
import { Template } from "./Template";
import type { KcProps } from "./KcProps";
import type { KcContext } from "../KcContext";
import { useKcMessage } from "../i18n/useKcMessage";
import type { KcPagesProperties } from "./KcProperties";
import { defaultKcPagesProperties } from "./KcProperties";
import { assert } from "../tools/assert";
import { kcContext } from "../kcContext";
import { useKcTranslation } from "../i18n/useKcTranslation";
import { cx } from "tss-react";
export const Register = memo(({ kcContext, ...props }: { kcContext: KcContext.Register; } & KcProps) => {
export type RegisterPageProps = {
kcProperties?: KcPagesProperties;
};
const { msg, msgStr } = useKcMessage();
export const Register = memo((props: RegisterPageProps) => {
const {
const { kcProperties = {} } = props;
const { t, tStr } = useKcTranslation();
Object.assign(kcProperties, defaultKcPagesProperties);
const [{
url,
messagesPerField,
register,
@ -17,80 +29,91 @@ export const Register = memo(({ kcContext, ...props }: { kcContext: KcContext.Re
passwordRequired,
recaptchaRequired,
recaptchaSiteKey
} = kcContext;
}] = useState(() => {
assert(
kcContext !== undefined &&
kcContext.pageBasename === "register.ftl"
);
return kcContext;
});
return (
<Template
{...{ kcContext, ...props }}
headerNode={msg("registerTitle")}
kcProperties={kcProperties}
headerNode={t("registerTitle")}
formNode={
<form id="kc-register-form" className={cx(props.kcFormClass)} action={url.registrationAction} method="post">
<form id="kc-register-form" className={cx(kcProperties.kcFormClass)} action={url.registrationAction} method="post">
<div className={cx(props.kcFormGroupClass, messagesPerField.printIfExists('firstName', props.kcFormGroupErrorClass))}>
<div className={cx(props.kcLabelWrapperClass)}>
<label htmlFor="firstName" className={cx(props.kcLabelClass)}>{msg("firstName")}</label>
<div className={cx(kcProperties.kcFormGroupClass, messagesPerField.printIfExists('firstName', kcProperties.kcFormGroupErrorClass))}>
<div className={cx(kcProperties.kcLabelWrapperClass)}>
<label htmlFor="firstName" className={cx(kcProperties.kcLabelClass)}>{t("firstName")}</label>
</div>
<div className={cx(props.kcInputWrapperClass)}>
<input type="text" id="firstName" className={cx(props.kcInputClass)} name="firstName"
<div className={cx(kcProperties.kcInputWrapperClass)}>
<input type="text" id="firstName" className={cx(kcProperties.kcInputClass)} name="firstName"
defaultValue={register.formData.firstName ?? ""}
/>
</div>
</div>
<div className={cx(props.kcFormGroupClass, messagesPerField.printIfExists("lastName", props.kcFormGroupErrorClass))}>
<div className={cx(props.kcLabelWrapperClass)}>
<label htmlFor="lastName" className={cx(props.kcLabelClass)}>{msg("lastName")}</label>
<div className={cx(kcProperties.kcFormGroupClass, messagesPerField.printIfExists("lastName", kcProperties.kcFormGroupErrorClass))}>
<div className={cx(kcProperties.kcLabelWrapperClass)}>
<label htmlFor="lastName" className={cx(kcProperties.kcLabelClass)}>{t("lastName")}</label>
</div>
<div className={cx(props.kcInputWrapperClass)}>
<input type="text" id="lastName" className={cx(props.kcInputClass)} name="lastName"
<div className={cx(kcProperties.kcInputWrapperClass)}>
<input type="text" id="lastName" className={cx(kcProperties.kcInputClass)} name="lastName"
defaultValue={register.formData.lastName ?? ""}
/>
</div>
</div>
<div className={cx(props.kcFormGroupClass, messagesPerField.printIfExists('email', props.kcFormGroupErrorClass))}>
<div className={cx(props.kcLabelWrapperClass)}>
<label htmlFor="email" className={cx(props.kcLabelClass)}>{msg("email")}</label>
<div className={cx(kcProperties.kcFormGroupClass, messagesPerField.printIfExists('email', kcProperties.kcFormGroupErrorClass))}>
<div className={cx(kcProperties.kcLabelWrapperClass)}>
<label htmlFor="email" className={cx(kcProperties.kcLabelClass)}>{t("email")}</label>
</div>
<div className={cx(props.kcInputWrapperClass)}>
<input type="text" id="email" className={cx(props.kcInputClass)} name="email"
<div className={cx(kcProperties.kcInputWrapperClass)}>
<input type="text" id="email" className={cx(kcProperties.kcInputClass)} name="email"
defaultValue={register.formData.email ?? ""} autoComplete="email"
/>
</div>
</div>
{
!realm.registrationEmailAsUsername &&
<div className={cx(props.kcFormGroupClass, messagesPerField.printIfExists('username', props.kcFormGroupErrorClass))}>
<div className={cx(props.kcLabelWrapperClass)}>
<label htmlFor="username" className={cx(props.kcLabelClass)}>{msg("username")}</label>
<div className={cx(kcProperties.kcFormGroupClass, messagesPerField.printIfExists('username', kcProperties.kcFormGroupErrorClass))}>
<div className={cx(kcProperties.kcLabelWrapperClass)}>
<label htmlFor="username" className={cx(kcProperties.kcLabelClass)}>{t("username")}</label>
</div>
<div className={cx(props.kcInputWrapperClass)}>
<input type="text" id="username" className={cx(props.kcInputClass)} name="username"
<div className={cx(kcProperties.kcInputWrapperClass)}>
<input type="text" id="username" className={cx(kcProperties.kcInputClass)} name="username"
defaultValue={register.formData.username ?? ""} autoComplete="username" />
</div>
</div >
}
{
passwordRequired &&
<>
<div className={cx(props.kcFormGroupClass, messagesPerField.printIfExists("password", props.kcFormGroupErrorClass))}>
<div className={cx(props.kcLabelWrapperClass)}>
<label htmlFor="password" className={cx(props.kcLabelClass)}>{msg("password")}</label>
<div className={cx(kcProperties.kcFormGroupClass, messagesPerField.printIfExists("password", kcProperties.kcFormGroupErrorClass))}>
<div className={cx(kcProperties.kcLabelWrapperClass)}>
<label htmlFor="password" className={cx(kcProperties.kcLabelClass)}>{t("password")}</label>
</div>
<div className={cx(props.kcInputWrapperClass)}>
<input type="password" id="password" className={cx(props.kcInputClass)} name="password" autoComplete="new-password" />
<div className={cx(kcProperties.kcInputWrapperClass)}>
<input type="password" id="password" className={cx(kcProperties.kcInputClass)} name="password" autoComplete="new-password" />
</div>
</div>
<div className={cx(props.kcFormGroupClass, messagesPerField.printIfExists("password-confirm", props.kcFormGroupErrorClass))}>
<div className={cx(props.kcLabelWrapperClass)}>
<label htmlFor="password-confirm" className={cx(props.kcLabelClass)}>{msg("passwordConfirm")}</label>
<div className={cx(kcProperties.kcFormGroupClass, messagesPerField.printIfExists("password-confirm", kcProperties.kcFormGroupErrorClass))}>
<div className={cx(kcProperties.kcLabelWrapperClass)}>
<label htmlFor="password-confirm" className={cx(kcProperties.kcLabelClass)}>{t("passwordConfirm")}</label>
</div>
<div className={cx(props.kcInputWrapperClass)}>
<input type="password" id="password-confirm" className={cx(props.kcInputClass)} name="password-confirm" />
<div className={cx(kcProperties.kcInputWrapperClass)}>
<input type="password" id="password-confirm" className={cx(kcProperties.kcInputClass)} name="password-confirm" />
</div>
</div>
</>
@ -99,21 +122,24 @@ export const Register = memo(({ kcContext, ...props }: { kcContext: KcContext.Re
{
recaptchaRequired &&
<div className="form-group">
<div className={cx(props.kcInputWrapperClass)}>
<div className={cx(kcProperties.kcInputWrapperClass)}>
<div className="g-recaptcha" data-size="compact" data-sitekey={recaptchaSiteKey}></div>
</div>
</div>
}
<div className={cx(props.kcFormGroupClass)}>
<div id="kc-form-options" className={cx(props.kcFormOptionsClass)}>
<div className={cx(props.kcFormOptionsWrapperClass)}>
<span><a href={url.loginUrl}>{msg("backToLogin")}</a></span>
<div className={cx(kcProperties.kcFormGroupClass)}>
<div id="kc-form-options" className={cx(kcProperties.kcFormOptionsClass)}>
<div className={cx(kcProperties.kcFormOptionsWrapperClass)}>
<span><a href={url.loginUrl}>{t("backToLogin")}</a></span>
</div>
</div>
<div id="kc-form-buttons" className={cx(props.kcFormButtonsClass)}>
<input className={cx(props.kcButtonClass, props.kcButtonPrimaryClass, props.kcButtonBlockClass, props.kcButtonLargeClass)} type="submit"
defaultValue={msgStr("doRegister")} />
<div id="kc-form-buttons" className={cx(kcProperties.kcFormButtonsClass)}>
<input className={cx(kcProperties.kcButtonClass, kcProperties.kcButtonPrimaryClass, kcProperties.kcButtonBlockClass, kcProperties.kcButtonLargeClass)} type="submit"
defaultValue={tStr("doRegister")} />
</div>
</div>
</form >
@ -121,3 +147,10 @@ export const Register = memo(({ kcContext, ...props }: { kcContext: KcContext.Re
/>
);
});
// JSX.IntrinsicElements.input: React.DetailedHTMLProps<React.InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>

View File

@ -1,21 +1,22 @@
import { useReducer, useEffect, memo } from "react";
import { useState, useReducer ,useEffect, memo } from "react";
import type { ReactNode } from "react";
import { useKcMessage } from "../i18n/useKcMessage";
import { useKcLanguageTag } from "../i18n/useKcLanguageTag";
import type { KcContext } from "../KcContext";
import { useKcTranslation } from "../i18n/useKcTranslation";
import { kcContext } from "../kcContext";
import { assert } from "../tools/assert";
import { cx } from "tss-react";
import { useKcLanguageTag } from "../i18n/useKcLanguageTag";
import type { KcLanguageTag } from "../i18n/KcLanguageTag";
import { getBestMatchAmongKcLanguageTag } from "../i18n/KcLanguageTag";
import { getKcLanguageTagLabel } from "../i18n/KcLanguageTag";
import { useCallbackFactory } from "powerhooks";
import { appendHead } from "../tools/appendHead";
import { join as pathJoin } from "path";
import { useConstCallback } from "powerhooks";
import type { KcTemplateProps } from "./KcProps";
import type { KcTemplateProperties } from "./KcProperties";
import { defaultKcTemplateProperties } from "./KcProperties";
export type TemplateProps = {
kcProperties: KcTemplateProperties;
displayInfo?: boolean;
displayMessage?: boolean;
displayRequiredFields?: boolean;
@ -24,8 +25,8 @@ export type TemplateProps = {
headerNode: ReactNode;
showUsernameNode?: ReactNode;
formNode: ReactNode;
infoNode?: ReactNode;
} & { kcContext: KcContext.Template; } & KcTemplateProps;
displayInfoNode?: ReactNode;
};
export const Template = memo((props: TemplateProps) => {
@ -36,50 +37,38 @@ export const Template = memo((props: TemplateProps) => {
displayRequiredFields = false,
displayWide = false,
showAnotherWayIfPresent = true,
kcProperties = {},
headerNode,
showUsernameNode = null,
formNode,
infoNode = null,
kcContext
displayInfoNode = null
} = props;
useEffect(() => { console.log("Rendering this page with react using keycloakify") }, []);
useEffect(()=> { console.log("Rendering this page with react using keycloak-react-theming") },[]);
const { msg } = useKcMessage();
const { t } = useKcTranslation();
Object.assign(kcProperties, defaultKcTemplateProperties);
const { kcLanguageTag, setKcLanguageTag } = useKcLanguageTag();
const onChangeLanguageClickFactory = useCallbackFactory(
([languageTag]: [KcLanguageTag]) =>
([languageTag]: [KcLanguageTag]) =>
setKcLanguageTag(languageTag)
);
const onTryAnotherWayClick = useConstCallback(() =>
(document.forms["kc-select-try-another-way-form" as never].submit(), false)
);
const onTryAnotherWayClick = useConstCallback(() => {
const {
realm, locale, auth,
url, message, isAppInitiatedAction
}= kcContext;
document.forms["kc-select-try-another-way-form" as never].submit();
useEffect(()=>{
return false;
if( !realm.internationalizationEnabled ){
return;
}
});
assert( locale !== undefined );
if( kcLanguageTag === getBestMatchAmongKcLanguageTag(locale.current) ){
return;
}
window.location.href =
locale.supported.find(({ languageTag }) => languageTag === kcLanguageTag)!.url;
},[kcLanguageTag]);
const [{ realm, locale, auth, url, message, isAppInitiatedAction }] = useState(() => (
assert(kcContext !== undefined, "App is not currently being served by KeyCloak"),
kcContext
));
const [isExtraCssLoaded, setExtraCssLoaded] = useReducer(() => true, false);
@ -87,13 +76,10 @@ export const Template = memo((props: TemplateProps) => {
let isUnmounted = false;
const toArr = (x: string | readonly string[] | undefined) =>
typeof x === "string" ? x.split(" ") : x ?? [];
Promise.all(
[
...toArr(props.stylesCommon).map(relativePath => pathJoin(url.resourcesCommonPath, relativePath)),
...toArr(props.styles).map(relativePath => pathJoin(url.resourcesPath, relativePath))
...(kcProperties.stylesCommon ?? []).map(relativePath => pathJoin(url.resourcesCommonPath, relativePath)),
...(kcProperties.styles ?? []).map(relativePath => pathJoin(url.resourcesPath, relativePath))
].map(href => appendHead({
"type": "css",
href
@ -107,7 +93,7 @@ export const Template = memo((props: TemplateProps) => {
});
toArr(props.scripts).forEach(
kcProperties.scripts?.forEach(
relativePath => appendHead({
"type": "javascript",
"src": pathJoin(url.resourcesPath, relativePath)
@ -116,7 +102,7 @@ export const Template = memo((props: TemplateProps) => {
document.getElementsByTagName("html")[0]
.classList
.add(cx(props.kcHtmlClass));
.add(cx(kcProperties.kcHtmlClass));
return () => { isUnmounted = true; };
@ -127,16 +113,16 @@ export const Template = memo((props: TemplateProps) => {
}
return (
<div className={cx(props.kcLoginClass)}>
<div className={cx(kcProperties.kcLoginClass)}>
<div id="kc-header" className={cx(props.kcHeaderClass)}>
<div id="kc-header-wrapper" className={cx(props.kcHeaderWrapperClass)}>
{msg("loginTitleHtml", realm.displayNameHtml)}
<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(props.kcFormCardClass, displayWide && props.kcFormCardAccountClass)}>
<header className={cx(props.kcFormHeaderClass)}>
<div className={cx(kcProperties.kcFormCardClass, displayWide && kcProperties.kcFormCardAccountClass)}>
<header className={cx(kcProperties.kcFormHeaderClass)}>
{
(
realm.internationalizationEnabled &&
@ -144,7 +130,7 @@ export const Template = memo((props: TemplateProps) => {
locale.supported.length > 1
) &&
<div id="kc-locale">
<div id="kc-locale-wrapper" className={cx(props.kcLocaleWrapperClass)}>
<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)}
@ -152,14 +138,15 @@ export const Template = memo((props: TemplateProps) => {
<ul>
{
locale.supported.map(
({ languageTag }) =>
<li key={languageTag} className="kc-dropdown-item">
<a href="#" onClick={onChangeLanguageClickFactory(languageTag)}>
({ languageTag, url }) =>
<li className="kc-dropdown-item">
<a href={url} onClick={onChangeLanguageClickFactory(languageTag)}>
{getKcLanguageTagLabel(languageTag)}
</a>
</li>
)
}
</ul>
</div>
@ -177,11 +164,11 @@ export const Template = memo((props: TemplateProps) => {
displayRequiredFields ?
(
<div className={cx(props.kcContentWrapperClass)}>
<div className={cx(props.kcLabelWrapperClass, "subtitle")}>
<div className={cx(kcProperties.kcContentWrapperClass)}>
<div className={cx(kcProperties.kcLabelWrapperClass, "subtitle")}>
<span className="subtitle">
<span className="required">*</span>
{msg("requiredFields")}
{t("requiredFields")}
</span>
</div>
<div className="col-md-10">
@ -198,19 +185,19 @@ export const Template = memo((props: TemplateProps) => {
)
) : (
displayRequiredFields ? (
<div className={cx(props.kcContentWrapperClass)}>
<div className={cx(props.kcLabelWrapperClass, "subtitle")}>
<span className="subtitle"><span className="required">*</span> {msg("requiredFields")}</span>
<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(props.kcFormGroupClass)}>
<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(props.kcResetFlowIcon)}></i>
<span className="kc-tooltip-text">{msg("restartLoginTooltip")}</span>
<i className={cx(kcProperties.kcResetFlowIcon)}></i>
<span className="kc-tooltip-text">{t("restartLoginTooltip")}</span>
</div>
</a>
</div>
@ -220,13 +207,13 @@ export const Template = memo((props: TemplateProps) => {
) : (
<>
{showUsernameNode}
<div className={cx(props.kcFormGroupClass)}>
<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(props.kcResetFlowIcon)}></i>
<span className="kc-tooltip-text">{msg("restartLoginTooltip")}</span>
<i className={cx(kcProperties.kcResetFlowIcon)}></i>
<span className="kc-tooltip-text">{t("restartLoginTooltip")}</span>
</div>
</a>
</div>
@ -249,10 +236,10 @@ export const Template = memo((props: TemplateProps) => {
)
) &&
<div className={cx("alert", `alert-${message.type}`)}>
{message.type === "success" && <span className={cx(props.kcFeedbackSuccessIcon)}></span>}
{message.type === "warning" && <span className={cx(props.kcFeedbackWarningIcon)}></span>}
{message.type === "error" && <span className={cx(props.kcFeedbackErrorIcon)}></span>}
{message.type === "info" && <span className={cx(props.kcFeedbackInfoIcon)}></span>}
{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>
}
@ -264,11 +251,11 @@ export const Template = memo((props: TemplateProps) => {
showAnotherWayIfPresent
) &&
<form id="kc-select-try-another-way-form" action={url.loginAction} method="post" className={cx(displayWide && props.kcContentWrapperClass)} >
<div className={cx(displayWide && [props.kcFormSocialAccountContentClass, props.kcFormSocialAccountClass])} >
<div className={cx(props.kcFormGroupClass)}>
<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}>{msg("doTryAnotherWay")}</a>
<a href="#" id="try-another-way" onClick={onTryAnotherWayClick}>{t("doTryAnotherWay")}</a>
</div>
</div >
</form>
@ -276,9 +263,9 @@ export const Template = memo((props: TemplateProps) => {
{
displayInfo &&
<div id="kc-info" className={cx(props.kcSignUpClass)}>
<div id="kc-info-wrapper" className={cx(props.kcInfoAreaWrapperClass)}>
{infoNode}
<div id="kc-info" className={cx(kcProperties.kcSignUpClass)}>
<div id="kc-info-wrapper" className={cx(kcProperties.kcInfoAreaWrapperClass)}>
{displayInfoNode}
</div>
</div>
}

View File

@ -8,7 +8,7 @@ export type LanguageLabel =
/* spell-checker: disable */
"Deutsch" | "Norsk" | "Русский" | "Svenska" | "Português (Brasil)" | "Lietuvių" |
"English" | "Italiano" | "Français" | "中文简体" | "Español" | "Čeština" | "日本語" |
"Slovenčina" | "Polski" | "Català" | "Nederlands" | "Türkçe";
"Slovenčina" | "Polish" | "Català" | "Nederlands" | "tr";
/* spell-checker: enable */
export function getKcLanguageTagLabel(language: KcLanguageTag): LanguageLabel {
@ -24,15 +24,16 @@ export function getKcLanguageTagLabel(language: KcLanguageTag): LanguageLabel {
case "no": return "Norsk";
case "pt-BR": return "Português (Brasil)";
case "ru": return "Русский";
case "sk": return "Slovenčina";
case "sk":
case "sv": return "Slovenčina";
case "ja": return "日本語";
case "pl": return "Polski";
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 "Türkçe";
case "tr": return "tr"
/* spell-checker: enable */
}

View File

@ -1,23 +1,13 @@
import { createUseGlobalState } from "powerhooks";
import { kcContext } from "../KcContext";
import { kcContext } from "../kcContext";
import { getBestMatchAmongKcLanguageTag } from "./KcLanguageTag";
//export const { useKcLanguageTag, evtKcLanguageTag } = createUseGlobalState(
const wrap = createUseGlobalState(
export const { useKcLanguageTag } = createUseGlobalState(
"kcLanguageTag",
() => getBestMatchAmongKcLanguageTag(
kcContext?.locale?.current ??
kcContext?.locale?.["current" as never] ??
navigator.language
),
{ "persistance": "cookie" }
);
export const { useKcLanguageTag } = wrap;
export function getEvtKcLanguage() {
return wrap.evtKcLanguageTag;
}

View File

@ -7,11 +7,11 @@ import { id } from "evt/tools/typeSafety/id";
export type MessageKey = keyof typeof messages["en"];
export function useKcMessage() {
export function useKcTranslation() {
const { kcLanguageTag } = useKcLanguageTag();
const msgStr = useConstCallback(
const tStr = useConstCallback(
(key: MessageKey, ...args: (string | undefined)[]): string => {
let str: string = messages[kcLanguageTag as any as "en"][key] ?? messages["en"][key];
@ -31,13 +31,13 @@ export function useKcMessage() {
}
);
const msg = useConstCallback(
id<(...args: Parameters<typeof msgStr>) => ReactNode>(
const t = useConstCallback(
id<(...args: Parameters<typeof tStr>) => ReactNode>(
(key, ...args) =>
<span className={key} dangerouslySetInnerHTML={{ "__html": msgStr(key, ...args) }} />
<span className={key} dangerouslySetInnerHTML={{ "__html": tStr(key, ...args) }} />
)
);
return { msg, msgStr };
return { t, tStr };
}

View File

@ -1,18 +1,10 @@
export * from "./KcContext";
export * from "./kcContext";
export * from "./i18n/KcLanguageTag";
export * from "./i18n/useKcLanguageTag";
export * from "./i18n/useKcMessage";
export * from "./i18n/useKcTranslation";
export * from "./components/KcProps";
export * from "./components/KcProperties";
export * from "./components/Login";
export * from "./components/Template";
export * from "./components/KcApp";
export * from "./components/Info";
export * from "./components/Error";
export * from "./components/LoginResetPassword";
export * from "./components/LoginVerifyEmail";
export * from "./tools/assert";
export * as kcContextMocks from "./kcContextMocks";
export * from "./components/KcApp";

View File

@ -1,18 +1,12 @@
import { ftlValuesGlobalName } from "../bin/build-keycloak-theme/ftlValuesGlobalName";
import type { PageId } from "../bin/build-keycloak-theme/generateFtl";
import type { generateFtlFilesCodeFactory } from "../bin/build-keycloak-theme/generateFtl";
import { id } from "evt/tools/typeSafety/id";
import type { KcLanguageTag } from "./i18n/KcLanguageTag";
import { doExtends } from "evt/tools/typeSafety/doExtends";
import type { MessageKey } from "./i18n/useKcMessage";
import type { LanguageLabel } from "./i18n/KcLanguageTag";
type ExtractAfterStartingWith<Prefix extends string, StrEnum> =
StrEnum extends `${Prefix}${infer U}` ? U : never;
export type KcContext = KcContext.Login | KcContext.Register;
export type KcContext =
KcContext.Login | KcContext.Register | KcContext.Info |
KcContext.Error | KcContext.LoginResetPassword | KcContext.LoginVerifyEmail;
export declare namespace KcContext {
export type Template = {
@ -27,7 +21,8 @@ export declare namespace KcContext {
displayName?: string;
displayNameHtml?: string;
internationalizationEnabled: boolean;
registrationEmailAsUsername: boolean; //<---
password: boolean;
registrationEmailAsUsername: boolean;
};
/** Undefined if !realm.internationalizationEnabled */
locale?: {
@ -39,13 +34,15 @@ export declare namespace KcContext {
*/
//label: LanguageLabel;
}[];
current: 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?: string;
attemptedUsername?: boolean;
};
scripts: string[];
message?: {
@ -56,7 +53,7 @@ export declare namespace KcContext {
};
export type Login = Template & {
pageId: "login.ftl";
pageBasename: "login.ftl";
url: {
loginResetCredentialsUrl: string;
registrationUrl: string;
@ -64,7 +61,6 @@ export declare namespace KcContext {
realm: {
loginWithEmailAllowed: boolean;
rememberMe: boolean;
password: boolean;
resetPasswordAllowed: boolean;
registrationAllowed: boolean;
};
@ -89,7 +85,7 @@ export declare namespace KcContext {
};
export type Register = Template & {
pageId: "register.ftl";
pageBasename: "register.ftl";
url: {
registrationAction: string;
};
@ -117,44 +113,18 @@ export declare namespace KcContext {
};
passwordRequired: boolean;
recaptchaRequired: boolean;
/** undefined if !recaptchaRequired */
recaptchaSiteKey?: string;
};
export type Info = Template & {
pageId: "info.ftl";
messageHeader?: string;
requiredActions?: ExtractAfterStartingWith<"requiredAction.", MessageKey>[];
skipLink: boolean;
pageRedirectUri?: string;
actionUri?: string;
client: {
baseUrl?: string;
}
};
export type Error = Template & {
pageId: "error.ftl";
client?: {
baseUrl?: string;
}
};
export type LoginResetPassword = Template & {
pageId: "login-reset-password.ftl";
realm: {
loginWithEmailAllowed: boolean;
}
};
export type LoginVerifyEmail = Template & {
pageId: "login-verify-email.ftl";
};
}
doExtends<KcContext["pageId"], PageId>();
doExtends<PageId, KcContext["pageId"]>();
{
type T = KcContext["pageBasename"];
type U = Parameters<ReturnType<typeof generateFtlFilesCodeFactory>["generateFtlFilesCode"]>[0]["pageBasename"];
doExtends<T, U>();
doExtends<U, T>();
}
export const kcContext = id<KcContext | undefined>((window as any)[ftlValuesGlobalName]);

View File

@ -1,201 +0,0 @@
import type { KcContext } from "../KcContext";
import { getEvtKcLanguage } from "../i18n/useKcLanguageTag";
import { getKcLanguageTagLabel } from "../i18n/KcLanguageTag";
//NOTE: Aside because we want to be able to import them from node
import { resourcesCommonPath, resourcesPath } from "./urlResourcesPath";
export const kcTemplateContext: KcContext.Template = {
"url": {
"loginAction": "#",
"resourcesPath": "/" + resourcesPath,
"resourcesCommonPath": "/" + resourcesCommonPath,
"loginRestartFlowUrl": "/auth/realms/myrealm/login-actions/restart?client_id=account&tab_id=HoAx28ja4xg",
"loginUrl": "/auth/realms/myrealm/login-actions/authenticate?client_id=account&tab_id=HoAx28ja4xg",
},
"realm": {
"displayName": "myrealm",
"displayNameHtml": "myrealm",
"internationalizationEnabled": true,
"registrationEmailAsUsername": true,
},
"locale": {
"supported": [
{
"url": "/auth/realms/myrealm/login-actions/authenticate?client_id=account&tab_id=HoAx28ja4xg&execution=ee6c2834-46a4-4a20-a1b6-f6d6f6451b36&kc_locale=de",
"languageTag": "de"
},
{
"url": "/auth/realms/myrealm/login-actions/authenticate?client_id=account&tab_id=HoAx28ja4xg&execution=ee6c2834-46a4-4a20-a1b6-f6d6f6451b36&kc_locale=no",
"languageTag": "no"
},
{
"url": "/auth/realms/myrealm/login-actions/authenticate?client_id=account&tab_id=HoAx28ja4xg&execution=ee6c2834-46a4-4a20-a1b6-f6d6f6451b36&kc_locale=ru",
"languageTag": "ru"
},
{
"url": "/auth/realms/myrealm/login-actions/authenticate?client_id=account&tab_id=HoAx28ja4xg&execution=ee6c2834-46a4-4a20-a1b6-f6d6f6451b36&kc_locale=sv",
"languageTag": "sv"
},
{
"url": "/auth/realms/myrealm/login-actions/authenticate?client_id=account&tab_id=HoAx28ja4xg&execution=ee6c2834-46a4-4a20-a1b6-f6d6f6451b36&kc_locale=pt-BR",
"languageTag": "pt-BR"
},
{
"url": "/auth/realms/myrealm/login-actions/authenticate?client_id=account&tab_id=HoAx28ja4xg&execution=ee6c2834-46a4-4a20-a1b6-f6d6f6451b36&kc_locale=lt",
"languageTag": "lt"
},
{
"url": "/auth/realms/myrealm/login-actions/authenticate?client_id=account&tab_id=HoAx28ja4xg&execution=ee6c2834-46a4-4a20-a1b6-f6d6f6451b36&kc_locale=en",
"languageTag": "en"
},
{
"url": "/auth/realms/myrealm/login-actions/authenticate?client_id=account&tab_id=HoAx28ja4xg&execution=ee6c2834-46a4-4a20-a1b6-f6d6f6451b36&kc_locale=it",
"languageTag": "it"
},
{
"url": "/auth/realms/myrealm/login-actions/authenticate?client_id=account&tab_id=HoAx28ja4xg&execution=ee6c2834-46a4-4a20-a1b6-f6d6f6451b36&kc_locale=fr",
"languageTag": "fr"
},
{
"url": "/auth/realms/myrealm/login-actions/authenticate?client_id=account&tab_id=HoAx28ja4xg&execution=ee6c2834-46a4-4a20-a1b6-f6d6f6451b36&kc_locale=zh-CN",
"languageTag": "zh-CN"
},
{
"url": "/auth/realms/myrealm/login-actions/authenticate?client_id=account&tab_id=HoAx28ja4xg&execution=ee6c2834-46a4-4a20-a1b6-f6d6f6451b36&kc_locale=es",
"languageTag": "es"
},
{
"url": "/auth/realms/myrealm/login-actions/authenticate?client_id=account&tab_id=HoAx28ja4xg&execution=ee6c2834-46a4-4a20-a1b6-f6d6f6451b36&kc_locale=cs",
"languageTag": "cs"
},
{
"url": "/auth/realms/myrealm/login-actions/authenticate?client_id=account&tab_id=HoAx28ja4xg&execution=ee6c2834-46a4-4a20-a1b6-f6d6f6451b36&kc_locale=ja",
"languageTag": "ja"
},
{
"url": "/auth/realms/myrealm/login-actions/authenticate?client_id=account&tab_id=HoAx28ja4xg&execution=ee6c2834-46a4-4a20-a1b6-f6d6f6451b36&kc_locale=sk",
"languageTag": "sk"
},
{
"url": "/auth/realms/myrealm/login-actions/authenticate?client_id=account&tab_id=HoAx28ja4xg&execution=ee6c2834-46a4-4a20-a1b6-f6d6f6451b36&kc_locale=pl",
"languageTag": "pl"
},
{
"url": "/auth/realms/myrealm/login-actions/authenticate?client_id=account&tab_id=HoAx28ja4xg&execution=ee6c2834-46a4-4a20-a1b6-f6d6f6451b36&kc_locale=ca",
"languageTag": "ca"
},
{
"url": "/auth/realms/myrealm/login-actions/authenticate?client_id=account&tab_id=HoAx28ja4xg&execution=ee6c2834-46a4-4a20-a1b6-f6d6f6451b36&kc_locale=nl",
"languageTag": "nl"
},
{
"url": "/auth/realms/myrealm/login-actions/authenticate?client_id=account&tab_id=HoAx28ja4xg&execution=ee6c2834-46a4-4a20-a1b6-f6d6f6451b36&kc_locale=tr",
"languageTag": "tr"
}
],
"current": null as any
},
"auth": {
"showUsername": false,
"showResetCredentials": false,
"showTryAnotherWayLink": false
},
"scripts": [],
"message": {
"type": "success",
"summary": "This is a test message"
},
"isAppInitiatedAction": false,
};
Object.defineProperty(
kcTemplateContext.locale!,
"current",
{
"get": () => getKcLanguageTagLabel(getEvtKcLanguage().state),
"enumerable": true
}
);
export const kcLoginContext: KcContext.Login = {
...kcTemplateContext,
"pageId": "login.ftl",
"url": {
...kcTemplateContext.url,
"loginResetCredentialsUrl": "/auth/realms/myrealm/login-actions/reset-credentials?client_id=account&tab_id=HoAx28ja4xg",
"registrationUrl": "/auth/realms/myrealm/login-actions/registration?client_id=account&tab_id=HoAx28ja4xg"
},
"realm": {
...kcTemplateContext.realm,
"loginWithEmailAllowed": true,
"rememberMe": true,
"password": true,
"resetPasswordAllowed": true,
"registrationAllowed": true
},
"auth": kcTemplateContext.auth!,
"social": {
"displayInfo": true
},
"usernameEditDisabled": false,
"login": {
"rememberMe": false
},
"registrationDisabled": false,
};
export const kcRegisterContext: KcContext.Register = {
...kcTemplateContext,
"url": {
...kcLoginContext.url,
"registrationAction": "http://localhost:8080/auth/realms/myrealm/login-actions/registration?session_code=gwZdUeO7pbYpFTRxiIxRg_QtzMbtFTKrNu6XW_f8asM&execution=12146ce0-b139-4bbd-b25b-0eccfee6577e&client_id=account&tab_id=uS8lYfebLa0"
},
"messagesPerField": {
"printIfExists": (...[,x]) => x
},
"scripts": [],
"isAppInitiatedAction": false,
"pageId": "register.ftl",
"register": {
"formData": {}
},
"passwordRequired": true,
"recaptchaRequired": false
};
export const kcInfoContext: KcContext.Info ={
...kcTemplateContext,
"pageId": "info.ftl",
"messageHeader": "<Message header>",
"requiredActions": undefined,
"skipLink": false,
"actionUri": "#",
"client": {
"baseUrl": "#"
}
};
export const kcErrorContext: KcContext.Error = {
...kcTemplateContext,
"pageId": "error.ftl",
"client": {
"baseUrl": "#"
}
};
export const kcLoginResetPasswordContext: KcContext.LoginResetPassword = {
...kcTemplateContext,
"pageId": "login-reset-password.ftl",
"realm":{
...kcTemplateContext.realm,
"loginWithEmailAllowed": false
}
};
export const kcLoginVerifyEmailContext: KcContext.LoginVerifyEmail = {
...kcTemplateContext,
"pageId": "login-verify-email.ftl"
};

View File

@ -1,6 +0,0 @@
import { join as pathJoin } from "path";
export const subDirOfPublicDirBasename = "keycloak_static";
export const resourcesPath = pathJoin(subDirOfPublicDirBasename, "/resources");
export const resourcesCommonPath = pathJoin(subDirOfPublicDirBasename, "/resources_common");

View File

@ -8,7 +8,7 @@ export const sampleReactProjectDirPath = pathJoin(getProjectRoot(), "sample_reac
export function setupSampleReactProject() {
downloadAndUnzip({
"url": "https://github.com/garronej/keycloakify/releases/download/v0.0.1/sample_build_dir_and_package_json.zip",
"url": "https://github.com/garronej/keycloak-react-theming/releases/download/v0.0.1/sample_build_dir_and_package_json.zip",
"destDirPath": sampleReactProjectDirPath
});
}

Some files were not shown because too many files have changed in this diff Show More