diff --git a/cypress/support/util/AdminClient.ts b/cypress/support/util/AdminClient.ts
index 8c72d98f3b..9c6b3c238a 100644
--- a/cypress/support/util/AdminClient.ts
+++ b/cypress/support/util/AdminClient.ts
@@ -1,6 +1,6 @@
import KeycloakAdminClient from "keycloak-admin";
-import UserRepresentation from "keycloak-admin/lib/defs/userRepresentation";
-import ClientRepresentation from "keycloak-admin/lib/defs/clientRepresentation";
+import type UserRepresentation from "keycloak-admin/lib/defs/userRepresentation";
+import type ClientRepresentation from "keycloak-admin/lib/defs/clientRepresentation";
export default class AdminClient {
private client: KeycloakAdminClient;
diff --git a/jest.config.ts b/jest.config.ts
index 758c55df3f..62ca7b21b4 100644
--- a/jest.config.ts
+++ b/jest.config.ts
@@ -1,7 +1,7 @@
// See: https://github.com/snowpackjs/snowpack/issues/3242
// @ts-ignore
import snowpackConfig from "@snowpack/app-scripts-react/jest.config.js";
-import { Config } from "@jest/types";
+import type { Config } from "@jest/types";
const config: Config.InitialOptions = {
...snowpackConfig(),
diff --git a/src/KeycloakAdminConsole.tsx b/src/KeycloakAdminConsole.tsx
index 1d84127fc9..e05eb02e8f 100644
--- a/src/KeycloakAdminConsole.tsx
+++ b/src/KeycloakAdminConsole.tsx
@@ -1,5 +1,5 @@
import React from "react";
-import KeycloakAdminClient from "keycloak-admin";
+import type KeycloakAdminClient from "keycloak-admin";
import { AdminClient } from "./context/auth/AdminClient";
import { WhoAmIContextProvider } from "./context/whoami/WhoAmI";
diff --git a/src/authentication/AuthenticationSection.tsx b/src/authentication/AuthenticationSection.tsx
index 0d59cad2b5..c0f8ab6ba3 100644
--- a/src/authentication/AuthenticationSection.tsx
+++ b/src/authentication/AuthenticationSection.tsx
@@ -13,7 +13,7 @@ import {
} from "@patternfly/react-core";
import { CheckCircleIcon } from "@patternfly/react-icons";
-import AuthenticationFlowRepresentation from "keycloak-admin/lib/defs/authenticationFlowRepresentation";
+import type AuthenticationFlowRepresentation from "keycloak-admin/lib/defs/authenticationFlowRepresentation";
import { useAdminClient } from "../context/auth/AdminClient";
import { KeycloakDataTable } from "../components/table-toolbar/KeycloakDataTable";
import { KeycloakTabs } from "../components/keycloak-tabs/KeycloakTabs";
diff --git a/src/client-scopes/ClientScopesSection.tsx b/src/client-scopes/ClientScopesSection.tsx
index 4ac60e1212..0c2ada94a7 100644
--- a/src/client-scopes/ClientScopesSection.tsx
+++ b/src/client-scopes/ClientScopesSection.tsx
@@ -12,7 +12,7 @@ import {
ToolbarItem,
} from "@patternfly/react-core";
import { cellWidth } from "@patternfly/react-table";
-import ClientScopeRepresentation from "keycloak-admin/lib/defs/clientScopeRepresentation";
+import type ClientScopeRepresentation from "keycloak-admin/lib/defs/clientScopeRepresentation";
import { useAdminClient } from "../context/auth/AdminClient";
import { ViewHeader } from "../components/view-header/ViewHeader";
@@ -26,7 +26,7 @@ import {
AllClientScopes,
AllClientScopeType,
} from "../components/client-scope/ClientScopeTypes";
-import KeycloakAdminClient from "keycloak-admin";
+import type KeycloakAdminClient from "keycloak-admin";
import { ChangeTypeDialog } from "./ChangeTypeDialog";
import "./client-scope.css";
diff --git a/src/client-scopes/add/MapperDialog.tsx b/src/client-scopes/add/MapperDialog.tsx
index 384db09f57..f7df694467 100644
--- a/src/client-scopes/add/MapperDialog.tsx
+++ b/src/client-scopes/add/MapperDialog.tsx
@@ -19,8 +19,8 @@ import {
TableVariant,
} from "@patternfly/react-table";
import { useTranslation } from "react-i18next";
-import ProtocolMapperRepresentation from "keycloak-admin/lib/defs/protocolMapperRepresentation";
-import { ProtocolMapperTypeRepresentation } from "keycloak-admin/lib/defs/serverInfoRepesentation";
+import type ProtocolMapperRepresentation from "keycloak-admin/lib/defs/protocolMapperRepresentation";
+import type { ProtocolMapperTypeRepresentation } from "keycloak-admin/lib/defs/serverInfoRepesentation";
import { useServerInfo } from "../../context/server-info/ServerInfoProvider";
import { ListEmptyState } from "../../components/list-empty-state/ListEmptyState";
diff --git a/src/client-scopes/add/RoleMappingForm.tsx b/src/client-scopes/add/RoleMappingForm.tsx
index 3f5f1a7c3c..83fe51f55f 100644
--- a/src/client-scopes/add/RoleMappingForm.tsx
+++ b/src/client-scopes/add/RoleMappingForm.tsx
@@ -18,9 +18,9 @@ import {
ValidatedOptions,
} from "@patternfly/react-core";
-import RoleRepresentation from "keycloak-admin/lib/defs/roleRepresentation";
-import ClientRepresentation from "keycloak-admin/lib/defs/clientRepresentation";
-import ProtocolMapperRepresentation from "keycloak-admin/lib/defs/protocolMapperRepresentation";
+import type RoleRepresentation from "keycloak-admin/lib/defs/roleRepresentation";
+import type ClientRepresentation from "keycloak-admin/lib/defs/clientRepresentation";
+import type ProtocolMapperRepresentation from "keycloak-admin/lib/defs/protocolMapperRepresentation";
import { useAlerts } from "../../components/alert/Alerts";
import { RealmContext } from "../../context/realm-context/RealmContext";
import { useAdminClient, useFetch } from "../../context/auth/AdminClient";
diff --git a/src/client-scopes/add/__tests__/MapperDialog.test.tsx b/src/client-scopes/add/__tests__/MapperDialog.test.tsx
index 1ba8a091af..7afaee0f12 100644
--- a/src/client-scopes/add/__tests__/MapperDialog.test.tsx
+++ b/src/client-scopes/add/__tests__/MapperDialog.test.tsx
@@ -1,6 +1,7 @@
import React, { useState } from "react";
import { mount } from "enzyme";
import { Button } from "@patternfly/react-core";
+import type { ServerInfoRepresentation } from "keycloak-admin/lib/defs/serverInfoRepesentation";
import serverInfo from "../../../context/server-info/__tests__/mock.json";
import { ServerInfoContext } from "../../../context/server-info/ServerInfoProvider";
@@ -10,7 +11,9 @@ describe("", () => {
const Test = (args: AddMapperDialogModalProps) => {
const [open, setOpen] = useState(false);
return (
-
+
{
const { t } = useTranslation("client-scopes");
diff --git a/src/clients/AdvancedTab.tsx b/src/clients/AdvancedTab.tsx
index 2423365e2d..d0c2cc4931 100644
--- a/src/clients/AdvancedTab.tsx
+++ b/src/clients/AdvancedTab.tsx
@@ -18,8 +18,8 @@ import {
ToolbarItem,
} from "@patternfly/react-core";
-import GlobalRequestResult from "keycloak-admin/lib/defs/globalRequestResult";
-import ClientRepresentation from "keycloak-admin/lib/defs/clientRepresentation";
+import type GlobalRequestResult from "keycloak-admin/lib/defs/globalRequestResult";
+import type ClientRepresentation from "keycloak-admin/lib/defs/clientRepresentation";
import { convertToFormValues, toUpperCase } from "../util";
import { FormAccess } from "../components/form-access/FormAccess";
import { ScrollForm } from "../components/scroll-form/ScrollForm";
@@ -36,7 +36,7 @@ import { AddHostDialog } from "./advanced/AddHostDialog";
import { FineGrainSamlEndpointConfig } from "./advanced/FineGrainSamlEndpointConfig";
import { AuthenticationOverrides } from "./advanced/AuthenticationOverrides";
import { useRealm } from "../context/realm-context/RealmContext";
-import { SaveOptions } from "./ClientDetails";
+import type { SaveOptions } from "./ClientDetails";
type AdvancedProps = {
save: (options?: SaveOptions) => void;
diff --git a/src/clients/ClientDescription.tsx b/src/clients/ClientDescription.tsx
index deec1ce605..db12d3cb70 100644
--- a/src/clients/ClientDescription.tsx
+++ b/src/clients/ClientDescription.tsx
@@ -11,7 +11,7 @@ import {
import { HelpItem } from "../components/help-enabler/HelpItem";
import { FormAccess } from "../components/form-access/FormAccess";
-import { ClientForm } from "./ClientDetails";
+import type { ClientForm } from "./ClientDetails";
export const ClientDescription = () => {
const { t } = useTranslation("clients");
diff --git a/src/clients/ClientDetails.tsx b/src/clients/ClientDetails.tsx
index 256974dd16..82eed5bed4 100644
--- a/src/clients/ClientDetails.tsx
+++ b/src/clients/ClientDetails.tsx
@@ -14,7 +14,7 @@ import {
import { useHistory, useParams } from "react-router-dom";
import { useTranslation } from "react-i18next";
import { Controller, FormProvider, useForm, useWatch } from "react-hook-form";
-import ClientRepresentation from "keycloak-admin/lib/defs/clientRepresentation";
+import type ClientRepresentation from "keycloak-admin/lib/defs/clientRepresentation";
import _ from "lodash";
import { ClientSettings } from "./ClientSettings";
diff --git a/src/clients/ClientsSection.tsx b/src/clients/ClientsSection.tsx
index 84e84e729d..b2b66675ce 100644
--- a/src/clients/ClientsSection.tsx
+++ b/src/clients/ClientsSection.tsx
@@ -17,7 +17,7 @@ import { useAdminClient } from "../context/auth/AdminClient";
import { KeycloakDataTable } from "../components/table-toolbar/KeycloakDataTable";
import { emptyFormatter, exportClient, getBaseUrl } from "../util";
import { useAlerts } from "../components/alert/Alerts";
-import ClientRepresentation from "keycloak-admin/lib/defs/clientRepresentation";
+import type ClientRepresentation from "keycloak-admin/lib/defs/clientRepresentation";
import { formattedLinkTableCell } from "../components/external-link/FormattedLink";
import { useConfirmDialog } from "../components/confirm-dialog/ConfirmDialog";
import { KeycloakTabs } from "../components/keycloak-tabs/KeycloakTabs";
diff --git a/src/clients/add/CapabilityConfig.tsx b/src/clients/add/CapabilityConfig.tsx
index 3ba9036af5..63f95259dd 100644
--- a/src/clients/add/CapabilityConfig.tsx
+++ b/src/clients/add/CapabilityConfig.tsx
@@ -11,7 +11,7 @@ import {
} from "@patternfly/react-core";
import { FormAccess } from "../../components/form-access/FormAccess";
-import { ClientForm } from "../ClientDetails";
+import type { ClientForm } from "../ClientDetails";
import { HelpItem } from "../../components/help-enabler/HelpItem";
import "./capability-config.css";
diff --git a/src/clients/add/NewClientForm.tsx b/src/clients/add/NewClientForm.tsx
index 76a0e875dc..6c26f14807 100644
--- a/src/clients/add/NewClientForm.tsx
+++ b/src/clients/add/NewClientForm.tsx
@@ -15,7 +15,7 @@ import { GeneralSettings } from "./GeneralSettings";
import { CapabilityConfig } from "./CapabilityConfig";
import { useAlerts } from "../../components/alert/Alerts";
import { ViewHeader } from "../../components/view-header/ViewHeader";
-import ClientRepresentation from "keycloak-admin/lib/defs/clientRepresentation";
+import type ClientRepresentation from "keycloak-admin/lib/defs/clientRepresentation";
import { useAdminClient } from "../../context/auth/AdminClient";
import { useRealm } from "../../context/realm-context/RealmContext";
diff --git a/src/clients/advanced/FineGrainSamlEndpointConfig.tsx b/src/clients/advanced/FineGrainSamlEndpointConfig.tsx
index 3744b0327d..a585bf81b5 100644
--- a/src/clients/advanced/FineGrainSamlEndpointConfig.tsx
+++ b/src/clients/advanced/FineGrainSamlEndpointConfig.tsx
@@ -1,6 +1,6 @@
import React from "react";
import { useTranslation } from "react-i18next";
-import { Control } from "react-hook-form";
+import type { Control } from "react-hook-form";
import {
ActionGroup,
Button,
diff --git a/src/clients/credentials/ClientSecret.tsx b/src/clients/credentials/ClientSecret.tsx
index dfe2558543..bf9806a4dd 100644
--- a/src/clients/credentials/ClientSecret.tsx
+++ b/src/clients/credentials/ClientSecret.tsx
@@ -8,7 +8,7 @@ import {
SplitItem,
} from "@patternfly/react-core";
import { useFormContext } from "react-hook-form";
-import { ClientForm } from "../ClientDetails";
+import type { ClientForm } from "../ClientDetails";
export type ClientSecretProps = {
secret: string;
diff --git a/src/clients/credentials/Credentials.tsx b/src/clients/credentials/Credentials.tsx
index 30ab5759c8..b2f0d8ff27 100644
--- a/src/clients/credentials/Credentials.tsx
+++ b/src/clients/credentials/Credentials.tsx
@@ -18,7 +18,7 @@ import {
Split,
SplitItem,
} from "@patternfly/react-core";
-import CredentialRepresentation from "keycloak-admin/lib/defs/credentialRepresentation";
+import type CredentialRepresentation from "keycloak-admin/lib/defs/credentialRepresentation";
import { useAlerts } from "../../components/alert/Alerts";
import { useConfirmDialog } from "../../components/confirm-dialog/ConfirmDialog";
diff --git a/src/clients/import/ImportForm.tsx b/src/clients/import/ImportForm.tsx
index ad25687e4a..b7fc3f17c7 100644
--- a/src/clients/import/ImportForm.tsx
+++ b/src/clients/import/ImportForm.tsx
@@ -15,7 +15,7 @@ import { ClientDescription } from "../ClientDescription";
import { JsonFileUpload } from "../../components/json-file-upload/JsonFileUpload";
import { useAlerts } from "../../components/alert/Alerts";
import { ViewHeader } from "../../components/view-header/ViewHeader";
-import ClientRepresentation from "keycloak-admin/lib/defs/clientRepresentation";
+import type ClientRepresentation from "keycloak-admin/lib/defs/clientRepresentation";
import { useAdminClient } from "../../context/auth/AdminClient";
import { FormAccess } from "../../components/form-access/FormAccess";
import { useRealm } from "../../context/realm-context/RealmContext";
diff --git a/src/clients/initial-access/CreateInitialAccessToken.tsx b/src/clients/initial-access/CreateInitialAccessToken.tsx
index 218a99d3f2..330bf84d58 100644
--- a/src/clients/initial-access/CreateInitialAccessToken.tsx
+++ b/src/clients/initial-access/CreateInitialAccessToken.tsx
@@ -10,7 +10,7 @@ import {
PageSection,
} from "@patternfly/react-core";
-import ClientInitialAccessPresentation from "keycloak-admin/lib/defs/clientInitialAccessPresentation";
+import type ClientInitialAccessPresentation from "keycloak-admin/lib/defs/clientInitialAccessPresentation";
import { FormAccess } from "../../components/form-access/FormAccess";
import { ViewHeader } from "../../components/view-header/ViewHeader";
import { HelpItem } from "../../components/help-enabler/HelpItem";
diff --git a/src/clients/initial-access/InitialAccessTokenList.tsx b/src/clients/initial-access/InitialAccessTokenList.tsx
index 7a7e4577c7..c7ca2f1124 100644
--- a/src/clients/initial-access/InitialAccessTokenList.tsx
+++ b/src/clients/initial-access/InitialAccessTokenList.tsx
@@ -5,7 +5,7 @@ import { useTranslation } from "react-i18next";
import { AlertVariant, Button, ButtonVariant } from "@patternfly/react-core";
import { wrappable } from "@patternfly/react-table";
-import ClientInitialAccessPresentation from "keycloak-admin/lib/defs/clientInitialAccessPresentation";
+import type ClientInitialAccessPresentation from "keycloak-admin/lib/defs/clientInitialAccessPresentation";
import { KeycloakDataTable } from "../../components/table-toolbar/KeycloakDataTable";
import { useAdminClient } from "../../context/auth/AdminClient";
import { useRealm } from "../../context/realm-context/RealmContext";
diff --git a/src/clients/keys/GenerateKeyDialog.tsx b/src/clients/keys/GenerateKeyDialog.tsx
index cb8db7f2db..86782855d8 100644
--- a/src/clients/keys/GenerateKeyDialog.tsx
+++ b/src/clients/keys/GenerateKeyDialog.tsx
@@ -16,7 +16,7 @@ import {
TextInput,
} from "@patternfly/react-core";
-import KeyStoreConfig from "keycloak-admin/lib/defs/keystoreConfig";
+import type KeyStoreConfig from "keycloak-admin/lib/defs/keystoreConfig";
import { HelpItem } from "../../components/help-enabler/HelpItem";
import { PasswordInput } from "../../components/password-input/PasswordInput";
import { StoreSettings } from "./StoreSettings";
diff --git a/src/clients/keys/Keys.tsx b/src/clients/keys/Keys.tsx
index 9012cfaf2e..24659e405a 100644
--- a/src/clients/keys/Keys.tsx
+++ b/src/clients/keys/Keys.tsx
@@ -18,12 +18,12 @@ import {
TextInput,
} from "@patternfly/react-core";
-import CertificateRepresentation from "keycloak-admin/lib/defs/certificateRepresentation";
-import KeyStoreConfig from "keycloak-admin/lib/defs/keystoreConfig";
+import type CertificateRepresentation from "keycloak-admin/lib/defs/certificateRepresentation";
+import type KeyStoreConfig from "keycloak-admin/lib/defs/keystoreConfig";
import { HelpItem } from "../../components/help-enabler/HelpItem";
import { FormAccess } from "../../components/form-access/FormAccess";
import { Controller, useFormContext, useWatch } from "react-hook-form";
-import { ClientForm } from "../ClientDetails";
+import type { ClientForm } from "../ClientDetails";
import { GenerateKeyDialog } from "./GenerateKeyDialog";
import { useFetch, useAdminClient } from "../../context/auth/AdminClient";
import { useAlerts } from "../../components/alert/Alerts";
diff --git a/src/clients/scopes/AddScopeDialog.tsx b/src/clients/scopes/AddScopeDialog.tsx
index 9f9c602e92..3a75598802 100644
--- a/src/clients/scopes/AddScopeDialog.tsx
+++ b/src/clients/scopes/AddScopeDialog.tsx
@@ -10,7 +10,7 @@ import {
DropdownDirection,
} from "@patternfly/react-core";
import { CaretUpIcon } from "@patternfly/react-icons";
-import ClientScopeRepresentation from "keycloak-admin/lib/defs/clientScopeRepresentation";
+import type ClientScopeRepresentation from "keycloak-admin/lib/defs/clientScopeRepresentation";
import {
ClientScopeType,
diff --git a/src/clients/scopes/ClientScopes.tsx b/src/clients/scopes/ClientScopes.tsx
index 15b777a7cd..128cfa6c74 100644
--- a/src/clients/scopes/ClientScopes.tsx
+++ b/src/clients/scopes/ClientScopes.tsx
@@ -11,8 +11,8 @@ import {
ToolbarItem,
} from "@patternfly/react-core";
import { FilterIcon } from "@patternfly/react-icons";
-import ClientScopeRepresentation from "keycloak-admin/lib/defs/clientScopeRepresentation";
-import KeycloakAdminClient from "keycloak-admin";
+import type ClientScopeRepresentation from "keycloak-admin/lib/defs/clientScopeRepresentation";
+import type KeycloakAdminClient from "keycloak-admin";
import { useAdminClient } from "../../context/auth/AdminClient";
import { toUpperCase } from "../../util";
diff --git a/src/clients/scopes/EvaluateScopes.tsx b/src/clients/scopes/EvaluateScopes.tsx
index 82a059eab7..192195c155 100644
--- a/src/clients/scopes/EvaluateScopes.tsx
+++ b/src/clients/scopes/EvaluateScopes.tsx
@@ -24,11 +24,11 @@ import {
Title,
} from "@patternfly/react-core";
import { QuestionCircleIcon } from "@patternfly/react-icons";
-import ClientScopeRepresentation from "keycloak-admin/lib/defs/clientScopeRepresentation";
-import UserRepresentation from "keycloak-admin/lib/defs/userRepresentation";
-import RoleRepresentation from "keycloak-admin/lib/defs/roleRepresentation";
-import ProtocolMapperRepresentation from "keycloak-admin/lib/defs/protocolMapperRepresentation";
-import { ProtocolMapperTypeRepresentation } from "keycloak-admin/lib/defs/serverInfoRepesentation";
+import type ClientScopeRepresentation from "keycloak-admin/lib/defs/clientScopeRepresentation";
+import type UserRepresentation from "keycloak-admin/lib/defs/userRepresentation";
+import type RoleRepresentation from "keycloak-admin/lib/defs/roleRepresentation";
+import type ProtocolMapperRepresentation from "keycloak-admin/lib/defs/protocolMapperRepresentation";
+import type { ProtocolMapperTypeRepresentation } from "keycloak-admin/lib/defs/serverInfoRepesentation";
import { useAdminClient, useFetch } from "../../context/auth/AdminClient";
import { useServerInfo } from "../../context/server-info/ServerInfoProvider";
diff --git a/src/clients/service-account/ServiceAccount.tsx b/src/clients/service-account/ServiceAccount.tsx
index 6458ec4f3d..616d94f100 100644
--- a/src/clients/service-account/ServiceAccount.tsx
+++ b/src/clients/service-account/ServiceAccount.tsx
@@ -2,9 +2,8 @@ import React, { useContext, useState } from "react";
import { useTranslation } from "react-i18next";
import { AlertVariant } from "@patternfly/react-core";
-import RoleRepresentation, {
- RoleMappingPayload,
-} from "keycloak-admin/lib/defs/roleRepresentation";
+import type RoleRepresentation from "keycloak-admin/lib/defs/roleRepresentation";
+import type { RoleMappingPayload } from "keycloak-admin/lib/defs/roleRepresentation";
import { useAdminClient } from "../../context/auth/AdminClient";
import { RealmContext } from "../../context/realm-context/RealmContext";
import { useAlerts } from "../../components/alert/Alerts";
diff --git a/src/components/attribute-form/AttributeForm.tsx b/src/components/attribute-form/AttributeForm.tsx
index 06a71f1481..ac421cda5d 100644
--- a/src/components/attribute-form/AttributeForm.tsx
+++ b/src/components/attribute-form/AttributeForm.tsx
@@ -1,6 +1,6 @@
import React, { useEffect } from "react";
import { useTranslation } from "react-i18next";
-import { ArrayField, UseFormMethods } from "react-hook-form";
+import type { ArrayField, UseFormMethods } from "react-hook-form";
import { ActionGroup, Button, TextInput } from "@patternfly/react-core";
import {
TableComposable,
diff --git a/src/components/client-scope/ClientScopeTypes.tsx b/src/components/client-scope/ClientScopeTypes.tsx
index 6dc2323199..fe5ff095bf 100644
--- a/src/components/client-scope/ClientScopeTypes.tsx
+++ b/src/components/client-scope/ClientScopeTypes.tsx
@@ -1,10 +1,10 @@
import React, { useState } from "react";
-import { TFunction } from "i18next";
+import type { TFunction } from "i18next";
import { useTranslation } from "react-i18next";
import { DropdownItem, Select, SelectOption } from "@patternfly/react-core";
-import ClientScopeRepresentation from "keycloak-admin/lib/defs/clientScopeRepresentation";
+import type ClientScopeRepresentation from "keycloak-admin/lib/defs/clientScopeRepresentation";
export enum ClientScope {
default = "default",
diff --git a/src/components/error/ErrorRenderer.tsx b/src/components/error/ErrorRenderer.tsx
index 04751f02c5..5d67848039 100644
--- a/src/components/error/ErrorRenderer.tsx
+++ b/src/components/error/ErrorRenderer.tsx
@@ -6,7 +6,7 @@ import {
PageSection,
} from "@patternfly/react-core";
import React from "react";
-import { FallbackProps } from "react-error-boundary";
+import type { FallbackProps } from "react-error-boundary";
import { useTranslation } from "react-i18next";
export const ErrorRenderer = ({ error, resetErrorBoundary }: FallbackProps) => {
diff --git a/src/components/external-link/FormattedLink.tsx b/src/components/external-link/FormattedLink.tsx
index ff584b594d..2e2b146808 100644
--- a/src/components/external-link/FormattedLink.tsx
+++ b/src/components/external-link/FormattedLink.tsx
@@ -1,6 +1,6 @@
import React, { AnchorHTMLAttributes } from "react";
import { ExternalLinkAltIcon } from "@patternfly/react-icons";
-import { IFormatter, IFormatterValueType } from "@patternfly/react-table";
+import type { IFormatter, IFormatterValueType } from "@patternfly/react-table";
export type FormattedLinkProps = AnchorHTMLAttributes & {
isInline?: boolean;
diff --git a/src/components/form-access/FormAccess.tsx b/src/components/form-access/FormAccess.tsx
index 3c44752d2f..aa27466038 100644
--- a/src/components/form-access/FormAccess.tsx
+++ b/src/components/form-access/FormAccess.tsx
@@ -18,7 +18,7 @@ import {
StackItem,
TextArea,
} from "@patternfly/react-core";
-import { AccessType } from "keycloak-admin/lib/defs/whoAmIRepresentation";
+import type { AccessType } from "keycloak-admin/lib/defs/whoAmIRepresentation";
import { useAccess } from "../../context/access/Access";
diff --git a/src/components/form-access/__tests__/FormAccess.test.tsx b/src/components/form-access/__tests__/FormAccess.test.tsx
index 61e2f128aa..b5ea35bdfe 100644
--- a/src/components/form-access/__tests__/FormAccess.test.tsx
+++ b/src/components/form-access/__tests__/FormAccess.test.tsx
@@ -2,6 +2,7 @@ import React from "react";
import { mount } from "enzyme";
import { Controller, useForm } from "react-hook-form";
import { FormGroup, Switch, TextInput } from "@patternfly/react-core";
+import type WhoAmIRepresentation from "keycloak-admin/lib/defs/whoAmIRepresentation";
import { WhoAmI, WhoAmIContext } from "../../../context/whoami/WhoAmI";
import whoami from "../../../context/whoami/__tests__/mock-whoami.json";
@@ -15,7 +16,10 @@ describe("", () => {
const { register, control } = useForm();
return (
{}, whoAmI: new WhoAmI("master", whoami) }}
+ value={{
+ refresh: () => {},
+ whoAmI: new WhoAmI("master", whoami as WhoAmIRepresentation),
+ }}
>
= keyof T | JSX.Element | TitleCell;
diff --git a/src/context/access/Access.tsx b/src/context/access/Access.tsx
index 42108f9d79..94d98bd3fa 100644
--- a/src/context/access/Access.tsx
+++ b/src/context/access/Access.tsx
@@ -1,5 +1,5 @@
import React, { createContext, useContext, useEffect, useState } from "react";
-import { AccessType } from "keycloak-admin/lib/defs/whoAmIRepresentation";
+import type { AccessType } from "keycloak-admin/lib/defs/whoAmIRepresentation";
import { RealmContext } from "../../context/realm-context/RealmContext";
import { WhoAmIContext } from "../../context/whoami/WhoAmI";
diff --git a/src/context/auth/AdminClient.tsx b/src/context/auth/AdminClient.tsx
index af6a1a58c1..6136ab8623 100644
--- a/src/context/auth/AdminClient.tsx
+++ b/src/context/auth/AdminClient.tsx
@@ -1,7 +1,7 @@
import { createContext, DependencyList, useContext, useEffect } from "react";
import axios from "axios";
-import KeycloakAdminClient from "keycloak-admin";
+import type KeycloakAdminClient from "keycloak-admin";
import { useErrorHandler } from "react-error-boundary";
export const AdminClient = createContext(
diff --git a/src/context/realm-context/RealmContext.tsx b/src/context/realm-context/RealmContext.tsx
index ebc259b821..d5a706dce5 100644
--- a/src/context/realm-context/RealmContext.tsx
+++ b/src/context/realm-context/RealmContext.tsx
@@ -1,7 +1,7 @@
import React, { useContext, useState } from "react";
import _ from "lodash";
-import RealmRepresentation from "keycloak-admin/lib/defs/realmRepresentation";
+import type RealmRepresentation from "keycloak-admin/lib/defs/realmRepresentation";
import { RecentUsed } from "../../components/realm-selector/recent-used";
import { useAdminClient, useFetch } from "../auth/AdminClient";
import { WhoAmIContext } from "../whoami/WhoAmI";
diff --git a/src/context/server-info/ServerInfoProvider.tsx b/src/context/server-info/ServerInfoProvider.tsx
index 0e3bd691d1..7841d0b385 100644
--- a/src/context/server-info/ServerInfoProvider.tsx
+++ b/src/context/server-info/ServerInfoProvider.tsx
@@ -1,5 +1,5 @@
import React, { createContext, ReactNode, useContext } from "react";
-import { ServerInfoRepresentation } from "keycloak-admin/lib/defs/serverInfoRepesentation";
+import type { ServerInfoRepresentation } from "keycloak-admin/lib/defs/serverInfoRepesentation";
import { sortProviders } from "../../util";
import { DataLoader } from "../../components/data-loader/DataLoader";
diff --git a/src/context/whoami/WhoAmI.tsx b/src/context/whoami/WhoAmI.tsx
index f5ed990025..d174175bcc 100644
--- a/src/context/whoami/WhoAmI.tsx
+++ b/src/context/whoami/WhoAmI.tsx
@@ -1,9 +1,8 @@
import React, { useState } from "react";
import i18n from "../../i18n";
-import WhoAmIRepresentation, {
- AccessType,
-} from "keycloak-admin/lib/defs/whoAmIRepresentation";
+import type WhoAmIRepresentation from "keycloak-admin/lib/defs/whoAmIRepresentation";
+import type { AccessType } from "keycloak-admin/lib/defs/whoAmIRepresentation";
import { useAdminClient, useFetch } from "../auth/AdminClient";
export class WhoAmI {
diff --git a/src/context/whoami/__tests__/WhoAmI.test.tsx b/src/context/whoami/__tests__/WhoAmI.test.tsx
index e1e9ff9ae2..47f3b38eda 100644
--- a/src/context/whoami/__tests__/WhoAmI.test.tsx
+++ b/src/context/whoami/__tests__/WhoAmI.test.tsx
@@ -1,25 +1,26 @@
import whoamiMock from "./mock-whoami.json";
import { WhoAmI } from "../WhoAmI";
+import type WhoAmIRepresentation from "keycloak-admin/lib/defs/whoAmIRepresentation";
test("returns display name", () => {
- const whoami = new WhoAmI("master", whoamiMock);
+ const whoami = new WhoAmI("master", whoamiMock as WhoAmIRepresentation);
expect(whoami.getDisplayName()).toEqual("Stan Silvert");
});
test("returns correct home realm", () => {
- let whoami = new WhoAmI("myrealm", whoamiMock);
+ let whoami = new WhoAmI("myrealm", whoamiMock as WhoAmIRepresentation);
expect(whoami.getHomeRealm()).toEqual("myrealm");
- whoami = new WhoAmI(undefined, whoamiMock);
+ whoami = new WhoAmI(undefined, whoamiMock as WhoAmIRepresentation);
expect(whoami.getHomeRealm()).toEqual("master");
});
test("can not create realm", () => {
- const whoami = new WhoAmI("master", whoamiMock);
+ const whoami = new WhoAmI("master", whoamiMock as WhoAmIRepresentation);
expect(whoami.canCreateRealm()).toEqual(false);
});
test("getRealmAccess", () => {
- const whoami = new WhoAmI("master", whoamiMock);
+ const whoami = new WhoAmI("master", whoamiMock as WhoAmIRepresentation);
expect(Object.keys(whoami.getRealmAccess()).length).toEqual(3);
expect(whoami.getRealmAccess()["master"].length).toEqual(18);
});
diff --git a/src/events/AdminEvents.tsx b/src/events/AdminEvents.tsx
index 8474090fdb..b04af25df1 100644
--- a/src/events/AdminEvents.tsx
+++ b/src/events/AdminEvents.tsx
@@ -20,7 +20,7 @@ import {
TableHeader,
TableVariant,
} from "@patternfly/react-table";
-import AdminEventRepresentation from "keycloak-admin/lib/defs/adminEventRepresentation";
+import type AdminEventRepresentation from "keycloak-admin/lib/defs/adminEventRepresentation";
import { ListEmptyState } from "../components/list-empty-state/ListEmptyState";
type DisplayDialogProps = {
diff --git a/src/events/EventsSection.tsx b/src/events/EventsSection.tsx
index 98797a8c59..66b7ea59c9 100644
--- a/src/events/EventsSection.tsx
+++ b/src/events/EventsSection.tsx
@@ -16,7 +16,7 @@ import {
} from "@patternfly/react-core";
import { cellWidth, expandable } from "@patternfly/react-table";
import { CheckCircleIcon, WarningTriangleIcon } from "@patternfly/react-icons";
-import EventRepresentation from "keycloak-admin/lib/defs/eventRepresentation";
+import type EventRepresentation from "keycloak-admin/lib/defs/eventRepresentation";
import { useAdminClient } from "../context/auth/AdminClient";
import { ViewHeader } from "../components/view-header/ViewHeader";
diff --git a/src/groups/GroupTable.tsx b/src/groups/GroupTable.tsx
index ee6191552f..2437e15cd8 100644
--- a/src/groups/GroupTable.tsx
+++ b/src/groups/GroupTable.tsx
@@ -12,7 +12,7 @@ import {
} from "@patternfly/react-core";
import { UsersIcon } from "@patternfly/react-icons";
-import GroupRepresentation from "keycloak-admin/lib/defs/groupRepresentation";
+import type GroupRepresentation from "keycloak-admin/lib/defs/groupRepresentation";
import { useAdminClient } from "../context/auth/AdminClient";
import { useAlerts } from "../components/alert/Alerts";
import { useRealm } from "../context/realm-context/RealmContext";
diff --git a/src/groups/GroupsModal.tsx b/src/groups/GroupsModal.tsx
index c7c02f4749..7255a55c01 100644
--- a/src/groups/GroupsModal.tsx
+++ b/src/groups/GroupsModal.tsx
@@ -13,7 +13,7 @@ import {
import { useTranslation } from "react-i18next";
import { useForm } from "react-hook-form";
-import GroupRepresentation from "keycloak-admin/lib/defs/groupRepresentation";
+import type GroupRepresentation from "keycloak-admin/lib/defs/groupRepresentation";
import { useAdminClient } from "../context/auth/AdminClient";
import { useAlerts } from "../components/alert/Alerts";
diff --git a/src/groups/GroupsSection.tsx b/src/groups/GroupsSection.tsx
index 17fff9e2be..2ecead6123 100644
--- a/src/groups/GroupsSection.tsx
+++ b/src/groups/GroupsSection.tsx
@@ -10,7 +10,7 @@ import {
TabTitleText,
Tabs,
} from "@patternfly/react-core";
-import GroupRepresentation from "keycloak-admin/lib/defs/groupRepresentation";
+import type GroupRepresentation from "keycloak-admin/lib/defs/groupRepresentation";
import { ViewHeader } from "../components/view-header/ViewHeader";
import { useFetch, useAdminClient } from "../context/auth/AdminClient";
diff --git a/src/groups/Members.tsx b/src/groups/Members.tsx
index 309a720abc..a864230fd1 100644
--- a/src/groups/Members.tsx
+++ b/src/groups/Members.tsx
@@ -12,8 +12,8 @@ import {
ToolbarItem,
} from "@patternfly/react-core";
-import GroupRepresentation from "keycloak-admin/lib/defs/groupRepresentation";
-import UserRepresentation from "keycloak-admin/lib/defs/userRepresentation";
+import type GroupRepresentation from "keycloak-admin/lib/defs/groupRepresentation";
+import type UserRepresentation from "keycloak-admin/lib/defs/userRepresentation";
import { KeycloakDataTable } from "../components/table-toolbar/KeycloakDataTable";
import { useAdminClient } from "../context/auth/AdminClient";
import { useAlerts } from "../components/alert/Alerts";
diff --git a/src/groups/MembersModal.tsx b/src/groups/MembersModal.tsx
index 6d9f35539f..8f7c084043 100644
--- a/src/groups/MembersModal.tsx
+++ b/src/groups/MembersModal.tsx
@@ -8,7 +8,7 @@ import {
ModalVariant,
} from "@patternfly/react-core";
-import UserRepresentation from "keycloak-admin/lib/defs/userRepresentation";
+import type UserRepresentation from "keycloak-admin/lib/defs/userRepresentation";
import { useAdminClient } from "../context/auth/AdminClient";
import { useRealm } from "../context/realm-context/RealmContext";
import { useAlerts } from "../components/alert/Alerts";
diff --git a/src/groups/MoveGroupDialog.tsx b/src/groups/MoveGroupDialog.tsx
index 2f54a1a9e3..f353ff0652 100644
--- a/src/groups/MoveGroupDialog.tsx
+++ b/src/groups/MoveGroupDialog.tsx
@@ -21,7 +21,7 @@ import {
} from "@patternfly/react-core";
import { AngleRightIcon, SearchIcon } from "@patternfly/react-icons";
-import GroupRepresentation from "keycloak-admin/lib/defs/groupRepresentation";
+import type GroupRepresentation from "keycloak-admin/lib/defs/groupRepresentation";
import { useFetch, useAdminClient } from "../context/auth/AdminClient";
import { ListEmptyState } from "../components/list-empty-state/ListEmptyState";
diff --git a/src/groups/SearchGroups.tsx b/src/groups/SearchGroups.tsx
index 2e6ccab42f..c20e33ee8d 100644
--- a/src/groups/SearchGroups.tsx
+++ b/src/groups/SearchGroups.tsx
@@ -16,7 +16,7 @@ import {
} from "@patternfly/react-core";
import { SearchIcon } from "@patternfly/react-icons";
-import GroupRepresentation from "keycloak-admin/lib/defs/groupRepresentation";
+import type GroupRepresentation from "keycloak-admin/lib/defs/groupRepresentation";
import { KeycloakDataTable } from "../components/table-toolbar/KeycloakDataTable";
import { useAdminClient } from "../context/auth/AdminClient";
import { useRealm } from "../context/realm-context/RealmContext";
diff --git a/src/groups/SubGroupsContext.tsx b/src/groups/SubGroupsContext.tsx
index af0a54aace..50a567569e 100644
--- a/src/groups/SubGroupsContext.tsx
+++ b/src/groups/SubGroupsContext.tsx
@@ -1,5 +1,5 @@
import React, { createContext, ReactNode, useContext, useState } from "react";
-import GroupRepresentation from "keycloak-admin/lib/defs/groupRepresentation";
+import type GroupRepresentation from "keycloak-admin/lib/defs/groupRepresentation";
type SubGroupsProps = {
subGroups: GroupRepresentation[];
diff --git a/src/identity-providers/IdentityProvidersSection.tsx b/src/identity-providers/IdentityProvidersSection.tsx
index 5cbb508d22..49126a4ee2 100644
--- a/src/identity-providers/IdentityProvidersSection.tsx
+++ b/src/identity-providers/IdentityProvidersSection.tsx
@@ -23,7 +23,7 @@ import {
ToolbarItem,
} from "@patternfly/react-core";
-import IdentityProviderRepresentation from "keycloak-admin/lib/defs/identityProviderRepresentation";
+import type IdentityProviderRepresentation from "keycloak-admin/lib/defs/identityProviderRepresentation";
import { ViewHeader } from "../components/view-header/ViewHeader";
import { useFetch, useAdminClient } from "../context/auth/AdminClient";
import { KeycloakDataTable } from "../components/table-toolbar/KeycloakDataTable";
diff --git a/src/identity-providers/ManageOrderDialog.tsx b/src/identity-providers/ManageOrderDialog.tsx
index b664cba882..afdaa4c10c 100644
--- a/src/identity-providers/ManageOrderDialog.tsx
+++ b/src/identity-providers/ManageOrderDialog.tsx
@@ -17,7 +17,7 @@ import {
TextContent,
Text,
} from "@patternfly/react-core";
-import IdentityProviderRepresentation from "keycloak-admin/lib/defs/identityProviderRepresentation";
+import type IdentityProviderRepresentation from "keycloak-admin/lib/defs/identityProviderRepresentation";
import { useAdminClient } from "../context/auth/AdminClient";
import { useAlerts } from "../components/alert/Alerts";
diff --git a/src/identity-providers/ProviderIconMapper.tsx b/src/identity-providers/ProviderIconMapper.tsx
index 1d879c67f2..52a1ba317c 100644
--- a/src/identity-providers/ProviderIconMapper.tsx
+++ b/src/identity-providers/ProviderIconMapper.tsx
@@ -10,7 +10,7 @@ import {
StackOverflowIcon,
TwitterIcon,
} from "@patternfly/react-icons";
-import { SVGIconProps } from "@patternfly/react-icons/dist/js/createIcon";
+import type { SVGIconProps } from "@patternfly/react-icons/dist/js/createIcon";
import { FontAwesomeIcon } from "./icons/FontAwesomeIcon";
diff --git a/src/identity-providers/add/AddIdentityProvider.tsx b/src/identity-providers/add/AddIdentityProvider.tsx
index 7b707709db..d3275a386c 100644
--- a/src/identity-providers/add/AddIdentityProvider.tsx
+++ b/src/identity-providers/add/AddIdentityProvider.tsx
@@ -9,7 +9,7 @@ import {
PageSection,
} from "@patternfly/react-core";
-import IdentityProviderRepresentation from "keycloak-admin/lib/defs/identityProviderRepresentation";
+import type IdentityProviderRepresentation from "keycloak-admin/lib/defs/identityProviderRepresentation";
import { ViewHeader } from "../../components/view-header/ViewHeader";
import { toUpperCase } from "../../util";
import { FormAccess } from "../../components/form-access/FormAccess";
diff --git a/src/identity-providers/add/AddOpenIdConnect.tsx b/src/identity-providers/add/AddOpenIdConnect.tsx
index 82be3f1885..597746dd69 100644
--- a/src/identity-providers/add/AddOpenIdConnect.tsx
+++ b/src/identity-providers/add/AddOpenIdConnect.tsx
@@ -9,7 +9,7 @@ import {
PageSection,
} from "@patternfly/react-core";
-import IdentityProviderRepresentation from "keycloak-admin/lib/defs/identityProviderRepresentation";
+import type IdentityProviderRepresentation from "keycloak-admin/lib/defs/identityProviderRepresentation";
import { FormAccess } from "../../components/form-access/FormAccess";
import { ViewHeader } from "../../components/view-header/ViewHeader";
import { useAdminClient } from "../../context/auth/AdminClient";
diff --git a/src/identity-providers/add/AdvancedSettings.tsx b/src/identity-providers/add/AdvancedSettings.tsx
index db114c4ee5..c642d14e2d 100644
--- a/src/identity-providers/add/AdvancedSettings.tsx
+++ b/src/identity-providers/add/AdvancedSettings.tsx
@@ -10,12 +10,12 @@ import {
SelectVariant,
} from "@patternfly/react-core";
-import AuthenticationFlowRepresentation from "keycloak-admin/lib/defs/authenticationFlowRepresentation";
+import type AuthenticationFlowRepresentation from "keycloak-admin/lib/defs/authenticationFlowRepresentation";
import { useFetch, useAdminClient } from "../../context/auth/AdminClient";
import { SwitchField } from "../component/SwitchField";
import { TextField } from "../component/TextField";
import { HelpItem } from "../../components/help-enabler/HelpItem";
-import { FieldProps } from "../component/FormGroupField";
+import type { FieldProps } from "../component/FormGroupField";
const LoginFlow = ({
field,
diff --git a/src/identity-providers/add/DetailSettings.tsx b/src/identity-providers/add/DetailSettings.tsx
index 95295777f1..33d5afc7b0 100644
--- a/src/identity-providers/add/DetailSettings.tsx
+++ b/src/identity-providers/add/DetailSettings.tsx
@@ -13,7 +13,7 @@ import {
TabTitleText,
} from "@patternfly/react-core";
-import IdentityProviderRepresentation from "keycloak-admin/lib/defs/identityProviderRepresentation";
+import type IdentityProviderRepresentation from "keycloak-admin/lib/defs/identityProviderRepresentation";
import { FormAccess } from "../../components/form-access/FormAccess";
import { ScrollForm } from "../../components/scroll-form/ScrollForm";
import { ViewHeader } from "../../components/view-header/ViewHeader";
diff --git a/src/identity-providers/add/OpenIdConnectSettings.tsx b/src/identity-providers/add/OpenIdConnectSettings.tsx
index 240c4cdeb1..e06ea5050c 100644
--- a/src/identity-providers/add/OpenIdConnectSettings.tsx
+++ b/src/identity-providers/add/OpenIdConnectSettings.tsx
@@ -5,7 +5,7 @@ import { FormGroup, Switch, TextInput, Title } from "@patternfly/react-core";
import { HelpItem } from "../../components/help-enabler/HelpItem";
import { useTranslation } from "react-i18next";
import { useAdminClient } from "../../context/auth/AdminClient";
-import { OIDCConfigurationRepresentation } from "../OIDCConfigurationRepresentation";
+import type { OIDCConfigurationRepresentation } from "../OIDCConfigurationRepresentation";
import { JsonFileUpload } from "../../components/json-file-upload/JsonFileUpload";
import { useRealm } from "../../context/realm-context/RealmContext";
import { DiscoverySettings } from "./DiscoverySettings";
diff --git a/src/realm-roles/AliasRendererComponent.tsx b/src/realm-roles/AliasRendererComponent.tsx
index 3ca8e393c2..fce97a4539 100644
--- a/src/realm-roles/AliasRendererComponent.tsx
+++ b/src/realm-roles/AliasRendererComponent.tsx
@@ -1,5 +1,5 @@
import React, { useEffect, useState } from "react";
-import KeycloakAdminClient from "keycloak-admin";
+import type KeycloakAdminClient from "keycloak-admin";
import { Label } from "@patternfly/react-core";
export type AliasRendererComponentProps = {
diff --git a/src/realm-roles/AssociatedRolesModal.tsx b/src/realm-roles/AssociatedRolesModal.tsx
index e4d3da4e89..28ce1a4b54 100644
--- a/src/realm-roles/AssociatedRolesModal.tsx
+++ b/src/realm-roles/AssociatedRolesModal.tsx
@@ -11,7 +11,7 @@ import {
} from "@patternfly/react-core";
import { useTranslation } from "react-i18next";
import { useFetch, useAdminClient } from "../context/auth/AdminClient";
-import RoleRepresentation from "keycloak-admin/lib/defs/roleRepresentation";
+import type RoleRepresentation from "keycloak-admin/lib/defs/roleRepresentation";
import { KeycloakDataTable } from "../components/table-toolbar/KeycloakDataTable";
import { ListEmptyState } from "../components/list-empty-state/ListEmptyState";
import { CaretDownIcon, FilterIcon } from "@patternfly/react-icons";
diff --git a/src/realm-roles/AssociatedRolesTab.tsx b/src/realm-roles/AssociatedRolesTab.tsx
index b43b92e3c6..944ecdf648 100644
--- a/src/realm-roles/AssociatedRolesTab.tsx
+++ b/src/realm-roles/AssociatedRolesTab.tsx
@@ -10,7 +10,7 @@ import {
PageSection,
ToolbarItem,
} from "@patternfly/react-core";
-import RoleRepresentation from "keycloak-admin/lib/defs/roleRepresentation";
+import type RoleRepresentation from "keycloak-admin/lib/defs/roleRepresentation";
import { ListEmptyState } from "../components/list-empty-state/ListEmptyState";
import { KeycloakDataTable } from "../components/table-toolbar/KeycloakDataTable";
import { useAlerts } from "../components/alert/Alerts";
@@ -18,8 +18,8 @@ import { useConfirmDialog } from "../components/confirm-dialog/ConfirmDialog";
import { emptyFormatter } from "../util";
import { AssociatedRolesModal } from "./AssociatedRolesModal";
import { useAdminClient } from "../context/auth/AdminClient";
-import { RoleFormType } from "./RealmRoleTabs";
-import ClientRepresentation from "keycloak-admin/lib/defs/clientRepresentation";
+import type { RoleFormType } from "./RealmRoleTabs";
+import type ClientRepresentation from "keycloak-admin/lib/defs/clientRepresentation";
import _ from "lodash";
type AssociatedRolesTabProps = {
diff --git a/src/realm-roles/RealmRoleForm.tsx b/src/realm-roles/RealmRoleForm.tsx
index 501c141bfa..a6cecf51a4 100644
--- a/src/realm-roles/RealmRoleForm.tsx
+++ b/src/realm-roles/RealmRoleForm.tsx
@@ -8,8 +8,8 @@ import {
ValidatedOptions,
} from "@patternfly/react-core";
import { useTranslation } from "react-i18next";
-import { UseFormMethods } from "react-hook-form";
-import { RoleFormType } from "./RealmRoleTabs";
+import type { UseFormMethods } from "react-hook-form";
+import type { RoleFormType } from "./RealmRoleTabs";
import { FormAccess } from "../components/form-access/FormAccess";
export type RealmRoleFormProps = {
diff --git a/src/realm-roles/RealmRoleTabs.tsx b/src/realm-roles/RealmRoleTabs.tsx
index 7e915eca09..24adf17ca0 100644
--- a/src/realm-roles/RealmRoleTabs.tsx
+++ b/src/realm-roles/RealmRoleTabs.tsx
@@ -13,8 +13,8 @@ import { useFieldArray, useForm } from "react-hook-form";
import { useAlerts } from "../components/alert/Alerts";
import { useAdminClient } from "../context/auth/AdminClient";
-import RoleRepresentation from "keycloak-admin/lib/defs/roleRepresentation";
-import Composites from "keycloak-admin/lib/defs/roleRepresentation";
+import type RoleRepresentation from "keycloak-admin/lib/defs/roleRepresentation";
+import type Composites from "keycloak-admin/lib/defs/roleRepresentation";
import {
KeyValueType,
AttributesForm,
diff --git a/src/realm-roles/RoleAttributes.tsx b/src/realm-roles/RoleAttributes.tsx
index f967972a22..b82a1dc2eb 100644
--- a/src/realm-roles/RoleAttributes.tsx
+++ b/src/realm-roles/RoleAttributes.tsx
@@ -1,6 +1,6 @@
import React from "react";
import { useTranslation } from "react-i18next";
-import { ArrayField, UseFormMethods } from "react-hook-form";
+import type { ArrayField, UseFormMethods } from "react-hook-form";
import { ActionGroup, Button, TextInput } from "@patternfly/react-core";
import {
TableComposable,
@@ -13,7 +13,7 @@ import {
import { MinusCircleIcon, PlusCircleIcon } from "@patternfly/react-icons";
import { FormAccess } from "../components/form-access/FormAccess";
-import { RoleFormType } from "./RealmRoleTabs";
+import type { RoleFormType } from "./RealmRoleTabs";
import "./RealmRolesSection.css";
diff --git a/src/realm-roles/RolesList.tsx b/src/realm-roles/RolesList.tsx
index 8c047aef84..6fbfa3f92c 100644
--- a/src/realm-roles/RolesList.tsx
+++ b/src/realm-roles/RolesList.tsx
@@ -4,7 +4,7 @@ import { useTranslation } from "react-i18next";
import { AlertVariant, Button, ButtonVariant } from "@patternfly/react-core";
import { useAdminClient } from "../context/auth/AdminClient";
-import RoleRepresentation from "keycloak-admin/lib/defs/roleRepresentation";
+import type RoleRepresentation from "keycloak-admin/lib/defs/roleRepresentation";
import { ListEmptyState } from "../components/list-empty-state/ListEmptyState";
import { KeycloakDataTable } from "../components/table-toolbar/KeycloakDataTable";
import { useAlerts } from "../components/alert/Alerts";
diff --git a/src/realm-settings/EmailTab.tsx b/src/realm-settings/EmailTab.tsx
index 42dada29cb..7f121792f6 100644
--- a/src/realm-settings/EmailTab.tsx
+++ b/src/realm-settings/EmailTab.tsx
@@ -11,7 +11,7 @@ import {
TextInput,
} from "@patternfly/react-core";
-import RealmRepresentation from "keycloak-admin/lib/defs/realmRepresentation";
+import type RealmRepresentation from "keycloak-admin/lib/defs/realmRepresentation";
import { FormAccess } from "../components/form-access/FormAccess";
import { HelpItem } from "../components/help-enabler/HelpItem";
import { FormPanel } from "../components/scroll-form/FormPanel";
diff --git a/src/realm-settings/GeneralTab.tsx b/src/realm-settings/GeneralTab.tsx
index e0af4d1a9a..784487a053 100644
--- a/src/realm-settings/GeneralTab.tsx
+++ b/src/realm-settings/GeneralTab.tsx
@@ -16,7 +16,7 @@ import {
TextInput,
} from "@patternfly/react-core";
-import RealmRepresentation from "keycloak-admin/lib/defs/realmRepresentation";
+import type RealmRepresentation from "keycloak-admin/lib/defs/realmRepresentation";
import { getBaseUrl } from "../util";
import { useAdminClient } from "../context/auth/AdminClient";
import { useRealm } from "../context/realm-context/RealmContext";
diff --git a/src/realm-settings/KeysListTab.tsx b/src/realm-settings/KeysListTab.tsx
index e4f3055135..766bdc59fd 100644
--- a/src/realm-settings/KeysListTab.tsx
+++ b/src/realm-settings/KeysListTab.tsx
@@ -2,12 +2,12 @@ import React, { useState } from "react";
import { useHistory, useRouteMatch } from "react-router-dom";
import { useTranslation } from "react-i18next";
import { Button, ButtonVariant, PageSection } from "@patternfly/react-core";
-import { KeyMetadataRepresentation } from "keycloak-admin/lib/defs/keyMetadataRepresentation";
+import type { KeyMetadataRepresentation } from "keycloak-admin/lib/defs/keyMetadataRepresentation";
import { ListEmptyState } from "../components/list-empty-state/ListEmptyState";
import { KeycloakDataTable } from "../components/table-toolbar/KeycloakDataTable";
import { useConfirmDialog } from "../components/confirm-dialog/ConfirmDialog";
import { emptyFormatter } from "../util";
-import ComponentRepresentation from "keycloak-admin/lib/defs/componentRepresentation";
+import type ComponentRepresentation from "keycloak-admin/lib/defs/componentRepresentation";
import "./RealmSettingsSection.css";
import { cellWidth } from "@patternfly/react-table";
diff --git a/src/realm-settings/KeysTab.tsx b/src/realm-settings/KeysTab.tsx
index fe93ca417a..54e16c30f2 100644
--- a/src/realm-settings/KeysTab.tsx
+++ b/src/realm-settings/KeysTab.tsx
@@ -2,12 +2,12 @@ import React, { useState } from "react";
import { useHistory, useRouteMatch } from "react-router-dom";
import { useTranslation } from "react-i18next";
import { Button, ButtonVariant, PageSection } from "@patternfly/react-core";
-import { KeyMetadataRepresentation } from "keycloak-admin/lib/defs/keyMetadataRepresentation";
+import type { KeyMetadataRepresentation } from "keycloak-admin/lib/defs/keyMetadataRepresentation";
import { ListEmptyState } from "../components/list-empty-state/ListEmptyState";
import { KeycloakDataTable } from "../components/table-toolbar/KeycloakDataTable";
import { useConfirmDialog } from "../components/confirm-dialog/ConfirmDialog";
import { emptyFormatter } from "../util";
-import ComponentRepresentation from "keycloak-admin/lib/defs/componentRepresentation";
+import type ComponentRepresentation from "keycloak-admin/lib/defs/componentRepresentation";
import "./RealmSettingsSection.css";
import { cellWidth } from "@patternfly/react-table";
diff --git a/src/realm-settings/LoginTab.tsx b/src/realm-settings/LoginTab.tsx
index 7329a5bf31..45b9c721f7 100644
--- a/src/realm-settings/LoginTab.tsx
+++ b/src/realm-settings/LoginTab.tsx
@@ -4,7 +4,7 @@ import { FormGroup, PageSection, Switch } from "@patternfly/react-core";
import { FormAccess } from "../components/form-access/FormAccess";
import { HelpItem } from "../components/help-enabler/HelpItem";
import { FormPanel } from "../components/scroll-form/FormPanel";
-import RealmRepresentation from "keycloak-admin/lib/defs/realmRepresentation";
+import type RealmRepresentation from "keycloak-admin/lib/defs/realmRepresentation";
type RealmSettingsLoginTabProps = {
save: (realm: RealmRepresentation) => void;
diff --git a/src/realm-settings/RealmSettingsSection.tsx b/src/realm-settings/RealmSettingsSection.tsx
index bdececb0ca..54b3dc188c 100644
--- a/src/realm-settings/RealmSettingsSection.tsx
+++ b/src/realm-settings/RealmSettingsSection.tsx
@@ -13,7 +13,7 @@ import {
TabTitleText,
} from "@patternfly/react-core";
-import RealmRepresentation from "keycloak-admin/lib/defs/realmRepresentation";
+import type RealmRepresentation from "keycloak-admin/lib/defs/realmRepresentation";
import { toUpperCase } from "../util";
import { useConfirmDialog } from "../components/confirm-dialog/ConfirmDialog";
import { useAdminClient, useFetch } from "../context/auth/AdminClient";
@@ -27,8 +27,8 @@ import { PartialImportDialog } from "./PartialImport";
import { RealmSettingsThemesTab } from "./ThemesTab";
import { RealmSettingsEmailTab } from "./EmailTab";
import { KeysListTab } from "./KeysListTab";
-import { KeyMetadataRepresentation } from "keycloak-admin/lib/defs/keyMetadataRepresentation";
-import ComponentRepresentation from "keycloak-admin/lib/defs/componentRepresentation";
+import type { KeyMetadataRepresentation } from "keycloak-admin/lib/defs/keyMetadataRepresentation";
+import type ComponentRepresentation from "keycloak-admin/lib/defs/componentRepresentation";
type RealmSettingsHeaderProps = {
onChange: (value: boolean) => void;
diff --git a/src/realm-settings/ThemesTab.tsx b/src/realm-settings/ThemesTab.tsx
index 8dcf74c6d2..81a0e5809a 100644
--- a/src/realm-settings/ThemesTab.tsx
+++ b/src/realm-settings/ThemesTab.tsx
@@ -12,7 +12,7 @@ import {
Switch,
} from "@patternfly/react-core";
-import RealmRepresentation from "keycloak-admin/lib/defs/realmRepresentation";
+import type RealmRepresentation from "keycloak-admin/lib/defs/realmRepresentation";
import { FormAccess } from "../components/form-access/FormAccess";
import { HelpItem } from "../components/help-enabler/HelpItem";
import { useServerInfo } from "../context/server-info/ServerInfoProvider";
diff --git a/src/realm/add/NewRealmForm.tsx b/src/realm/add/NewRealmForm.tsx
index 7e6b94482a..f5834b96f4 100644
--- a/src/realm/add/NewRealmForm.tsx
+++ b/src/realm/add/NewRealmForm.tsx
@@ -15,7 +15,7 @@ import { JsonFileUpload } from "../../components/json-file-upload/JsonFileUpload
import { useAlerts } from "../../components/alert/Alerts";
import { useForm, Controller } from "react-hook-form";
import { ViewHeader } from "../../components/view-header/ViewHeader";
-import RealmRepresentation from "keycloak-admin/lib/defs/realmRepresentation";
+import type RealmRepresentation from "keycloak-admin/lib/defs/realmRepresentation";
import { useAdminClient } from "../../context/auth/AdminClient";
import { WhoAmIContext } from "../../context/whoami/WhoAmI";
import { FormAccess } from "../../components/form-access/FormAccess";
diff --git a/src/route-config.ts b/src/route-config.ts
index 6c4c94157e..aae1bd9d5a 100644
--- a/src/route-config.ts
+++ b/src/route-config.ts
@@ -1,6 +1,6 @@
-import { TFunction } from "i18next";
-import { BreadcrumbsRoute } from "use-react-router-breadcrumbs";
-import { AccessType } from "keycloak-admin/lib/defs/whoAmIRepresentation";
+import type { TFunction } from "i18next";
+import type { BreadcrumbsRoute } from "use-react-router-breadcrumbs";
+import type { AccessType } from "keycloak-admin/lib/defs/whoAmIRepresentation";
import { AuthenticationSection } from "./authentication/AuthenticationSection";
import { ClientScopeForm } from "./client-scopes/form/ClientScopeForm";
diff --git a/src/sessions/SessionsSection.tsx b/src/sessions/SessionsSection.tsx
index 749dabc54e..35314ed209 100644
--- a/src/sessions/SessionsSection.tsx
+++ b/src/sessions/SessionsSection.tsx
@@ -2,7 +2,7 @@ import React from "react";
import { Link } from "react-router-dom";
import { PageSection } from "@patternfly/react-core";
import moment from "moment";
-import UserSessionRepresentation from "keycloak-admin/lib/defs/userSessionRepresentation";
+import type UserSessionRepresentation from "keycloak-admin/lib/defs/userSessionRepresentation";
import { ViewHeader } from "../components/view-header/ViewHeader";
import { KeycloakDataTable } from "../components/table-toolbar/KeycloakDataTable";
diff --git a/src/stories/AddMapperDialog.stories.tsx b/src/stories/AddMapperDialog.stories.tsx
index 476bc5a95a..a3cba07efc 100644
--- a/src/stories/AddMapperDialog.stories.tsx
+++ b/src/stories/AddMapperDialog.stories.tsx
@@ -1,6 +1,7 @@
import React, { useState } from "react";
import { Button } from "@patternfly/react-core";
-import { Meta, Story } from "@storybook/react";
+import type { Meta, Story } from "@storybook/react";
+import type { ServerInfoRepresentation } from "keycloak-admin/lib/defs/serverInfoRepesentation";
import serverInfo from "../context/server-info/__tests__/mock.json";
import { ServerInfoContext } from "../context/server-info/ServerInfoProvider";
@@ -17,7 +18,9 @@ export default {
const Template: Story = (args) => {
const [open, setOpen] = useState(false);
return (
-
+
clients,
+ loader: async () => clients,
};
export const LoadingList = Template.bind({});
diff --git a/src/stories/ListEmptyState.stories.tsx b/src/stories/ListEmptyState.stories.tsx
index 884f8dca4a..05bb9da66b 100644
--- a/src/stories/ListEmptyState.stories.tsx
+++ b/src/stories/ListEmptyState.stories.tsx
@@ -1,5 +1,5 @@
import React from "react";
-import { Meta, Story } from "@storybook/react";
+import type { Meta, Story } from "@storybook/react";
import {
ListEmptyState,
ListEmptyStateProps,
diff --git a/src/stories/MapperList.stories.tsx b/src/stories/MapperList.stories.tsx
index 664d4e2ec9..4fa037f420 100644
--- a/src/stories/MapperList.stories.tsx
+++ b/src/stories/MapperList.stories.tsx
@@ -1,5 +1,6 @@
import React from "react";
-import { Meta } from "@storybook/react";
+import type { Meta } from "@storybook/react";
+import type { ServerInfoRepresentation } from "keycloak-admin/lib/defs/serverInfoRepesentation";
import serverInfo from "../context/server-info/__tests__/mock.json";
import clientScopeMock from "../client-scopes/__tests__/mock-client-scope.json";
@@ -13,7 +14,9 @@ export default {
} as Meta;
export const MapperListExample = () => (
-
+
{}} />
diff --git a/src/stories/MockAdminClient.tsx b/src/stories/MockAdminClient.tsx
index 01bb498b32..8a3d85e64e 100644
--- a/src/stories/MockAdminClient.tsx
+++ b/src/stories/MockAdminClient.tsx
@@ -1,6 +1,7 @@
import React, { ReactNode } from "react";
import { HashRouter } from "react-router-dom";
-import KeycloakAdminClient from "keycloak-admin";
+import type KeycloakAdminClient from "keycloak-admin";
+import type { ServerInfoRepresentation } from "keycloak-admin/lib/defs/serverInfoRepesentation";
import { AccessContextProvider } from "../context/access/Access";
import { WhoAmIContextProvider } from "../context/whoami/WhoAmI";
@@ -30,7 +31,9 @@ export const MockAdminClient = (props: {
}) => {
return (
-
+
(
-
+
{
diff --git a/src/user-federation/UserFederationLdapSettings.tsx b/src/user-federation/UserFederationLdapSettings.tsx
index 54ee85a7d4..13cffe17c5 100644
--- a/src/user-federation/UserFederationLdapSettings.tsx
+++ b/src/user-federation/UserFederationLdapSettings.tsx
@@ -22,7 +22,7 @@ import { LdapSettingsSearching } from "./ldap/LdapSettingsSearching";
import { useRealm } from "../context/realm-context/RealmContext";
import { convertToFormValues } from "../util";
-import ComponentRepresentation from "keycloak-admin/lib/defs/componentRepresentation";
+import type ComponentRepresentation from "keycloak-admin/lib/defs/componentRepresentation";
import { Controller, useForm } from "react-hook-form";
import { useConfirmDialog } from "../components/confirm-dialog/ConfirmDialog";
diff --git a/src/user-federation/UserFederationLdapWizard.tsx b/src/user-federation/UserFederationLdapWizard.tsx
index 7efce76e04..6d0b51b116 100644
--- a/src/user-federation/UserFederationLdapWizard.tsx
+++ b/src/user-federation/UserFederationLdapWizard.tsx
@@ -13,7 +13,7 @@ import { LdapSettingsKerberosIntegration } from "./ldap/LdapSettingsKerberosInte
import { SettingsCache } from "./shared/SettingsCache";
import { LdapSettingsAdvanced } from "./ldap/LdapSettingsAdvanced";
import { useTranslation } from "react-i18next";
-import ComponentRepresentation from "keycloak-admin/lib/defs/componentRepresentation";
+import type ComponentRepresentation from "keycloak-admin/lib/defs/componentRepresentation";
import { useForm } from "react-hook-form";
diff --git a/src/user-federation/UserFederationSection.tsx b/src/user-federation/UserFederationSection.tsx
index c1679fd439..cb0605f6d9 100644
--- a/src/user-federation/UserFederationSection.tsx
+++ b/src/user-federation/UserFederationSection.tsx
@@ -16,7 +16,7 @@ import {
TextVariants,
} from "@patternfly/react-core";
-import ComponentRepresentation from "keycloak-admin/lib/defs/componentRepresentation";
+import type ComponentRepresentation from "keycloak-admin/lib/defs/componentRepresentation";
import { KeycloakCard } from "../components/keycloak-card/KeycloakCard";
import { useAlerts } from "../components/alert/Alerts";
import { ViewHeader } from "../components/view-header/ViewHeader";
diff --git a/src/user-federation/ldap/LdapSettingsConnection.tsx b/src/user-federation/ldap/LdapSettingsConnection.tsx
index c2a0cc7518..6208aafca8 100644
--- a/src/user-federation/ldap/LdapSettingsConnection.tsx
+++ b/src/user-federation/ldap/LdapSettingsConnection.tsx
@@ -13,7 +13,7 @@ import { useTranslation } from "react-i18next";
import React, { useState } from "react";
import _ from "lodash";
-import TestLdapConnectionRepresentation from "keycloak-admin/lib/defs/testLdapConnection";
+import type TestLdapConnectionRepresentation from "keycloak-admin/lib/defs/testLdapConnection";
import { HelpItem } from "../../components/help-enabler/HelpItem";
import { Controller, UseFormMethods, useWatch } from "react-hook-form";
import { FormAccess } from "../../components/form-access/FormAccess";
diff --git a/src/user-federation/ldap/mappers/LdapMapperDetails.tsx b/src/user-federation/ldap/mappers/LdapMapperDetails.tsx
index 1e21167d36..0d256e111d 100644
--- a/src/user-federation/ldap/mappers/LdapMapperDetails.tsx
+++ b/src/user-federation/ldap/mappers/LdapMapperDetails.tsx
@@ -12,7 +12,7 @@ import {
TextInput,
} from "@patternfly/react-core";
import { convertFormValuesToObject, convertToFormValues } from "../../../util";
-import ComponentRepresentation from "keycloak-admin/lib/defs/componentRepresentation";
+import type ComponentRepresentation from "keycloak-admin/lib/defs/componentRepresentation";
import { useAdminClient } from "../../../context/auth/AdminClient";
import { ViewHeader } from "../../../components/view-header/ViewHeader";
import { useHistory, useParams } from "react-router-dom";
diff --git a/src/user-federation/ldap/mappers/LdapMapperHardcodedAttribute.tsx b/src/user-federation/ldap/mappers/LdapMapperHardcodedAttribute.tsx
index 775e898fe5..e6af1f6d98 100644
--- a/src/user-federation/ldap/mappers/LdapMapperHardcodedAttribute.tsx
+++ b/src/user-federation/ldap/mappers/LdapMapperHardcodedAttribute.tsx
@@ -1,7 +1,7 @@
import { FormGroup, TextInput } from "@patternfly/react-core";
import React from "react";
import { HelpItem } from "../../../components/help-enabler/HelpItem";
-import { UseFormMethods } from "react-hook-form";
+import type { UseFormMethods } from "react-hook-form";
import { useTranslation } from "react-i18next";
export type LdapMapperHardcodedAttributeProps = {
diff --git a/src/user-federation/ldap/mappers/LdapMapperHardcodedLdapAttribute.tsx b/src/user-federation/ldap/mappers/LdapMapperHardcodedLdapAttribute.tsx
index 416d5e088d..7804266081 100644
--- a/src/user-federation/ldap/mappers/LdapMapperHardcodedLdapAttribute.tsx
+++ b/src/user-federation/ldap/mappers/LdapMapperHardcodedLdapAttribute.tsx
@@ -1,7 +1,7 @@
import { FormGroup, TextInput } from "@patternfly/react-core";
import React from "react";
import { HelpItem } from "../../../components/help-enabler/HelpItem";
-import { UseFormMethods } from "react-hook-form";
+import type { UseFormMethods } from "react-hook-form";
import { useTranslation } from "react-i18next";
export type LdapMapperHardcodedLdapAttributeProps = {
diff --git a/src/user-federation/ldap/mappers/LdapMapperHardcodedLdapGroup.tsx b/src/user-federation/ldap/mappers/LdapMapperHardcodedLdapGroup.tsx
index a1e6b5dbc0..9c1af99aa8 100644
--- a/src/user-federation/ldap/mappers/LdapMapperHardcodedLdapGroup.tsx
+++ b/src/user-federation/ldap/mappers/LdapMapperHardcodedLdapGroup.tsx
@@ -1,7 +1,7 @@
import { FormGroup, TextInput } from "@patternfly/react-core";
import React from "react";
import { HelpItem } from "../../../components/help-enabler/HelpItem";
-import { UseFormMethods } from "react-hook-form";
+import type { UseFormMethods } from "react-hook-form";
import { useTranslation } from "react-i18next";
export type LdapMapperHardcodedLdapGroupProps = {
diff --git a/src/user-federation/ldap/mappers/LdapMapperHardcodedLdapRole.tsx b/src/user-federation/ldap/mappers/LdapMapperHardcodedLdapRole.tsx
index 01e28df32b..3b8e00ce83 100644
--- a/src/user-federation/ldap/mappers/LdapMapperHardcodedLdapRole.tsx
+++ b/src/user-federation/ldap/mappers/LdapMapperHardcodedLdapRole.tsx
@@ -1,7 +1,7 @@
import { FormGroup, TextInput } from "@patternfly/react-core";
import React from "react";
import { HelpItem } from "../../../components/help-enabler/HelpItem";
-import { UseFormMethods } from "react-hook-form";
+import type { UseFormMethods } from "react-hook-form";
import { useTranslation } from "react-i18next";
export type LdapMapperHardcodedLdapRoleProps = {
diff --git a/src/user-federation/ldap/mappers/LdapMapperList.tsx b/src/user-federation/ldap/mappers/LdapMapperList.tsx
index 3370610ac4..424aaa87bb 100644
--- a/src/user-federation/ldap/mappers/LdapMapperList.tsx
+++ b/src/user-federation/ldap/mappers/LdapMapperList.tsx
@@ -8,7 +8,7 @@ import {
ToolbarItem,
} from "@patternfly/react-core";
-import ComponentRepresentation from "keycloak-admin/lib/defs/componentRepresentation";
+import type ComponentRepresentation from "keycloak-admin/lib/defs/componentRepresentation";
import { KeycloakDataTable } from "../../../components/table-toolbar/KeycloakDataTable";
import { ListEmptyState } from "../../../components/list-empty-state/ListEmptyState";
import { useAlerts } from "../../../components/alert/Alerts";
diff --git a/src/user/UserConsents.tsx b/src/user/UserConsents.tsx
index 7a0d15172b..c2eb778562 100644
--- a/src/user/UserConsents.tsx
+++ b/src/user/UserConsents.tsx
@@ -8,7 +8,7 @@ import { emptyFormatter } from "../util";
import { useAdminClient } from "../context/auth/AdminClient";
import { cellWidth } from "@patternfly/react-table";
import _ from "lodash";
-import UserConsentRepresentation from "keycloak-admin/lib/defs/userConsentRepresentation";
+import type UserConsentRepresentation from "keycloak-admin/lib/defs/userConsentRepresentation";
import { CubesIcon } from "@patternfly/react-icons";
import moment from "moment";
diff --git a/src/user/UserForm.tsx b/src/user/UserForm.tsx
index 9df881f247..5c421c6ddc 100644
--- a/src/user/UserForm.tsx
+++ b/src/user/UserForm.tsx
@@ -16,13 +16,13 @@ import { useTranslation } from "react-i18next";
import { Controller, UseFormMethods } from "react-hook-form";
import { useHistory, useParams } from "react-router-dom";
import { FormAccess } from "../components/form-access/FormAccess";
-import UserRepresentation from "keycloak-admin/lib/defs/userRepresentation";
+import type UserRepresentation from "keycloak-admin/lib/defs/userRepresentation";
import { HelpItem } from "../components/help-enabler/HelpItem";
import { useRealm } from "../context/realm-context/RealmContext";
import { useFetch, useAdminClient } from "../context/auth/AdminClient";
import moment from "moment";
import { JoinGroupDialog } from "./JoinGroupDialog";
-import GroupRepresentation from "keycloak-admin/lib/defs/groupRepresentation";
+import type GroupRepresentation from "keycloak-admin/lib/defs/groupRepresentation";
import { useAlerts } from "../components/alert/Alerts";
import { emailRegexPattern } from "../util";
diff --git a/src/user/UserGroups.tsx b/src/user/UserGroups.tsx
index 8d849b07a0..a26e22b58d 100644
--- a/src/user/UserGroups.tsx
+++ b/src/user/UserGroups.tsx
@@ -15,10 +15,10 @@ import { useAlerts } from "../components/alert/Alerts";
import { useConfirmDialog } from "../components/confirm-dialog/ConfirmDialog";
import { emptyFormatter } from "../util";
import { useFetch, useAdminClient } from "../context/auth/AdminClient";
-import GroupRepresentation from "keycloak-admin/lib/defs/groupRepresentation";
+import type GroupRepresentation from "keycloak-admin/lib/defs/groupRepresentation";
import { cellWidth } from "@patternfly/react-table";
import _ from "lodash";
-import UserRepresentation from "keycloak-admin/lib/defs/userRepresentation";
+import type UserRepresentation from "keycloak-admin/lib/defs/userRepresentation";
import { JoinGroupDialog } from "./JoinGroupDialog";
import { HelpContext } from "../components/help-enabler/HelpHeader";
import { QuestionCircleIcon } from "@patternfly/react-icons";
diff --git a/src/user/UsersSection.tsx b/src/user/UsersSection.tsx
index 3d8b233d84..b926caf42e 100644
--- a/src/user/UsersSection.tsx
+++ b/src/user/UsersSection.tsx
@@ -14,7 +14,7 @@ import {
InfoCircleIcon,
WarningTriangleIcon,
} from "@patternfly/react-icons";
-import UserRepresentation from "keycloak-admin/lib/defs/userRepresentation";
+import type UserRepresentation from "keycloak-admin/lib/defs/userRepresentation";
import { useFetch, useAdminClient } from "../context/auth/AdminClient";
import { ViewHeader } from "../components/view-header/ViewHeader";
diff --git a/src/user/UsersTabs.tsx b/src/user/UsersTabs.tsx
index 33f0b87410..f489e7805e 100644
--- a/src/user/UsersTabs.tsx
+++ b/src/user/UsersTabs.tsx
@@ -9,7 +9,7 @@ import { useTranslation } from "react-i18next";
import { useForm } from "react-hook-form";
import { ViewHeader } from "../components/view-header/ViewHeader";
-import UserRepresentation from "keycloak-admin/lib/defs/userRepresentation";
+import type UserRepresentation from "keycloak-admin/lib/defs/userRepresentation";
import { UserForm } from "./UserForm";
import { useAlerts } from "../components/alert/Alerts";
import { useAdminClient } from "../context/auth/AdminClient";
@@ -17,7 +17,7 @@ import { useHistory, useParams, useRouteMatch } from "react-router-dom";
import { KeycloakTabs } from "../components/keycloak-tabs/KeycloakTabs";
import { UserGroups } from "./UserGroups";
import { UserConsents } from "./UserConsents";
-import GroupRepresentation from "keycloak-admin/lib/defs/groupRepresentation";
+import type GroupRepresentation from "keycloak-admin/lib/defs/groupRepresentation";
export const UsersTabs = () => {
const { t } = useTranslation("roles");
diff --git a/src/util.ts b/src/util.ts
index 60ccf160cb..73723e3417 100644
--- a/src/util.ts
+++ b/src/util.ts
@@ -1,9 +1,9 @@
-import { IFormatter, IFormatterValueType } from "@patternfly/react-table";
+import type { IFormatter, IFormatterValueType } from "@patternfly/react-table";
import FileSaver from "file-saver";
import _ from "lodash";
-import ClientRepresentation from "keycloak-admin/lib/defs/clientRepresentation";
-import { ProviderRepresentation } from "keycloak-admin/lib/defs/serverInfoRepesentation";
-import KeycloakAdminClient from "keycloak-admin";
+import type ClientRepresentation from "keycloak-admin/lib/defs/clientRepresentation";
+import type { ProviderRepresentation } from "keycloak-admin/lib/defs/serverInfoRepesentation";
+import type KeycloakAdminClient from "keycloak-admin";
export const sortProviders = (providers: {
[index: string]: ProviderRepresentation;
diff --git a/tsconfig.json b/tsconfig.json
index e9801e8ae5..885daf5a06 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -1,64 +1,7 @@
{
+ "extends": "@snowpack/app-scripts-react/tsconfig.base.json",
"compilerOptions": {
- /* Basic Options */
- "target": "esnext", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017','ES2018' or 'ESNEXT'. */
- "module": "esnext", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */
- // "lib": [], /* Specify library files to be included in the compilation. */
- // "allowJs": true, /* Allow javascript files to be compiled. */
- // "checkJs": true, /* Report errors in .js files. */
- "jsx": "react", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */
- "declaration": true, /* Generates corresponding '.d.ts' file. */
- // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */
- // "sourceMap": true, /* Generates corresponding '.map' file. */
- // "outFile": "./", /* Concatenate and emit output to single file. */
- // "outDir": "lib", /* Redirect output structure to the directory. */
- // "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */
- // "composite": true, /* Enable project compilation */
- // "removeComments": true, /* Do not emit comments to output. */
- "noEmit": true, /* Do not emit outputs. */
- // "importHelpers": true, /* Import emit helpers from 'tslib'. */
- // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */
- // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */
-
- /* Strict Type-Checking Options */
- "strict": true, /* Enable all strict type-checking options. */
- "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */
- "strictNullChecks": true, /* Enable strict null checks. */
- // "strictFunctionTypes": true, /* Enable strict checking of function types. */
- // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */
- // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */
- // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */
-
- /* Additional Checks */
- // "noUnusedLocals": true, /* Report errors on unused locals. */
- // "noUnusedParameters": true, /* Report errors on unused parameters. */
- // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */
- // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */
-
- /* Module Resolution Options */
- "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */
- // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */
- // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */
- // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */
- // "typeRoots": [], /* List of folders to include type definitions from. */
- // "types": [], /* Type declaration files to be included in compilation. */
- "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */
- "esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */
- // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */
-
- /* Source Map Options */
- // "sourceRoot": "./", /* Specify the location where debugger should locate TypeScript files instead of source locations. */
- // "mapRoot": "./", /* Specify the location where debugger should locate map files instead of generated locations. */
- // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */
- // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */
-
- /* Experimental Options */
- // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */
- // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */
-
- /* Advanced Options */
- // "declarationDir": "lib" /* Output directory for generated declaration files. */
- "skipLibCheck": true,
- "types": ["jest", "cypress"]
+ "types": ["jest", "cypress"],
+ "esModuleInterop": true
}
}
\ No newline at end of file
diff --git a/types/import.d.ts b/types/import.d.ts
index 61c86fae5d..ac4223acec 100644
--- a/types/import.d.ts
+++ b/types/import.d.ts
@@ -1,12 +1,3 @@
-// ESM-HMR Interface: `import.meta.hot`
-
-interface ImportMeta {
- // TODO: Import the exact .d.ts files from "esm-hmr"
- // https://github.com/pikapkg/esm-hmr
- hot: any;
- env: Record;
-}
-
declare namespace Cypress {
interface Chainable {
/**