diff --git a/js/apps/admin-ui/src/components/dynamic/IntComponent.tsx b/js/apps/admin-ui/src/components/dynamic/IntComponent.tsx
new file mode 100644
index 000000000000..eed671478519
--- /dev/null
+++ b/js/apps/admin-ui/src/components/dynamic/IntComponent.tsx
@@ -0,0 +1,26 @@
+import { useTranslation } from "react-i18next";
+import { TextControl } from "@keycloak/keycloak-ui-shared";
+
+import { convertToName } from "./DynamicComponents";
+import { NumberComponentProps } from "./components";
+
+export const IntComponent = ({
+ name,
+ label,
+ helpText,
+ ...props
+}: NumberComponentProps) => {
+ const { t } = useTranslation();
+
+ return (
+
+ );
+};
diff --git a/js/apps/admin-ui/src/components/dynamic/NumberComponent.tsx b/js/apps/admin-ui/src/components/dynamic/NumberComponent.tsx
new file mode 100644
index 000000000000..5256833d55c8
--- /dev/null
+++ b/js/apps/admin-ui/src/components/dynamic/NumberComponent.tsx
@@ -0,0 +1,25 @@
+import { useTranslation } from "react-i18next";
+import { TextControl } from "@keycloak/keycloak-ui-shared";
+
+import { convertToName } from "./DynamicComponents";
+import { NumberComponentProps } from "./components";
+
+export const NumberComponent = ({
+ name,
+ label,
+ helpText,
+ ...props
+}: NumberComponentProps) => {
+ const { t } = useTranslation();
+
+ return (
+
+ );
+};
diff --git a/js/apps/admin-ui/src/components/dynamic/components.ts b/js/apps/admin-ui/src/components/dynamic/components.ts
index 86044d6ce782..918923bf3bc2 100644
--- a/js/apps/admin-ui/src/components/dynamic/components.ts
+++ b/js/apps/admin-ui/src/components/dynamic/components.ts
@@ -16,6 +16,8 @@ import { StringComponent } from "./StringComponent";
import { TextComponent } from "./TextComponent";
import { UrlComponent } from "./UrlComponent";
import { UserProfileAttributeListComponent } from "./UserProfileAttributeListComponent";
+import { IntComponent } from "./IntComponent";
+import { NumberComponent } from "./NumberComponent";
export type ComponentProps = Omit & {
isDisabled?: boolean;
@@ -23,9 +25,16 @@ export type ComponentProps = Omit & {
stringify?: boolean;
};
+export type NumberComponentProps = ComponentProps & {
+ min?: number;
+ max?: number;
+};
+
type ComponentType =
| "String"
| "Text"
+ | "Integer"
+ | "Number"
| "boolean"
| "List"
| "Role"
@@ -46,6 +55,8 @@ export const COMPONENTS: {
String: StringComponent,
Text: TextComponent,
boolean: BooleanComponent,
+ Integer: IntComponent,
+ Number: NumberComponent,
List: ListComponent,
Role: RoleComponent,
Script: ScriptComponent,
diff --git a/js/libs/keycloak-admin-client/src/defs/authenticatorConfigInfoRepresentation.ts b/js/libs/keycloak-admin-client/src/defs/authenticatorConfigInfoRepresentation.ts
index 6ca8f75c9853..c1c1491f6f32 100644
--- a/js/libs/keycloak-admin-client/src/defs/authenticatorConfigInfoRepresentation.ts
+++ b/js/libs/keycloak-admin-client/src/defs/authenticatorConfigInfoRepresentation.ts
@@ -17,4 +17,5 @@ export interface ConfigPropertyRepresentation {
options?: string[];
secret?: boolean;
required?: boolean;
+ placeholder?: string;
}
diff --git a/js/libs/ui-shared/src/controls/TextControl.tsx b/js/libs/ui-shared/src/controls/TextControl.tsx
index 5d4d9eede02a..514777ed0410 100644
--- a/js/libs/ui-shared/src/controls/TextControl.tsx
+++ b/js/libs/ui-shared/src/controls/TextControl.tsx
@@ -27,6 +27,7 @@ export type TextControlProps<
isDisabled?: boolean;
helperText?: string;
"data-testid"?: string;
+ type?: string;
};
export const TextControl = <
diff --git a/server-spi/src/main/java/org/keycloak/provider/ProviderConfigProperty.java b/server-spi/src/main/java/org/keycloak/provider/ProviderConfigProperty.java
index 337ae129f488..a301fb580db5 100755
--- a/server-spi/src/main/java/org/keycloak/provider/ProviderConfigProperty.java
+++ b/server-spi/src/main/java/org/keycloak/provider/ProviderConfigProperty.java
@@ -28,6 +28,17 @@
*/
public class ProviderConfigProperty {
public static final String BOOLEAN_TYPE="boolean";
+
+ /**
+ * Integral Value
+ */
+ public static final String INTEGER_TYPE="Integer";
+
+ /**
+ * Arbitrary number, e.g. integral, floating-point.
+ */
+ public static final String NUMBER_TYPE="Number";
+
public static final String STRING_TYPE="String";
/**