diff --git a/.github/workflows/js-ci.yml b/.github/workflows/js-ci.yml
index 44fc0b4c6e1..1fbdeb57adf 100644
--- a/.github/workflows/js-ci.yml
+++ b/.github/workflows/js-ci.yml
@@ -130,7 +130,7 @@ jobs:
if: needs.conditional.outputs.js-ci == 'true'
runs-on: ubuntu-latest
env:
- WORKSPACE: admin-ui
+ WORKSPACE: keycloak-admin-ui
steps:
- uses: actions/checkout@v4
@@ -223,7 +223,7 @@ jobs:
if: needs.conditional.outputs.js-ci == 'true'
runs-on: ubuntu-latest
env:
- WORKSPACE: admin-ui
+ WORKSPACE: keycloak-admin-ui
strategy:
matrix:
container: [1, 2, 3, 4, 5]
diff --git a/js/apps/account-ui/README.md b/js/apps/account-ui/README.md
index 87c8745b7d0..5048f838dd5 100644
--- a/js/apps/account-ui/README.md
+++ b/js/apps/account-ui/README.md
@@ -17,7 +17,7 @@ npm i @keycloak/keycloak-account-ui
To use these pages you'll need to add `KeycloakProvider` in your component hierarchy to setup what client, realm and url to use.
```jsx
-import { KeycloakProvider } from "@keycloak/keycloak-account-ui";
+import { KeycloakProvider } from "@keycloak/keycloak-ui-shared";
//...
diff --git a/js/apps/account-ui/src/personal-info/PersonalInfo.tsx b/js/apps/account-ui/src/personal-info/PersonalInfo.tsx
index c176f5c5b37..f7ec0a45f2d 100644
--- a/js/apps/account-ui/src/personal-info/PersonalInfo.tsx
+++ b/js/apps/account-ui/src/personal-info/PersonalInfo.tsx
@@ -70,11 +70,12 @@ export const PersonalInfo = () => {
);
await savePersonalInfo(context, { ...user, attributes });
const locale = attributes["locale"]?.toString();
- i18n.changeLanguage(locale, (error) => {
- if (error) {
- console.warn("Error(s) loading locale", locale, error);
- }
- });
+ if (locale)
+ i18n.changeLanguage(locale, (error) => {
+ if (error) {
+ console.warn("Error(s) loading locale", locale, error);
+ }
+ });
context.keycloak.updateToken();
addAlert(t("accountUpdatedMessage"));
} catch (error) {
diff --git a/js/apps/admin-ui/CONTRIBUTING.md b/js/apps/admin-ui/CONTRIBUTING.md
new file mode 100644
index 00000000000..ad7bd56c167
--- /dev/null
+++ b/js/apps/admin-ui/CONTRIBUTING.md
@@ -0,0 +1,76 @@
+# Keycloak Admin UI
+
+This project is the next generation of the Keycloak Administration UI. It is written with React and [PatternFly 4](https://www.patternfly.org/v4/) and uses [Vite](https://vitejs.dev/guide/) and [Cypress](https://docs.cypress.io/guides/overview/why-cypress).
+
+## Development
+
+### Prerequisites
+
+Make sure that you have Node.js version 18 (or later) installed on your system. If you do not have Node.js installed we recommend using [Node Version Manager](https://github.com/nvm-sh/nvm) to install it.
+
+You can find out which version of Node.js you are using by running the following command:
+
+```bash
+node --version
+```
+
+In order to run the Keycloak server you will also have to install the Java Development Kit (JDK). We recommend that you use the same version of the JDK as [required by the Keycloak server](https://github.com/keycloak/keycloak/blob/main/docs/building.md#building-from-source).
+
+### Running the Keycloak server
+
+See the instructions in the [Keycloak server app](../keycloak-server/README.md).
+
+### Running the development server
+
+Now that the Keycloak sever is running it's time to run the development server for the Admin UI. This server is used to build the Admin UI in a manner that it can be iterated on quickly in a browser, using features such as [Hot Module Replacement (HMR)](https://vitejs.dev/guide/features.html#hot-module-replacement) and [Fast Refresh](https://www.npmjs.com/package/react-refresh).
+
+To start the development server run the following command:
+
+```bash
+pnpm dev
+```
+
+Once the process of optimization is done your browser will automatically open your local host on port `8080`. From here you will be redirected to the Keycloak server to authenticate, which you can do with the default credentials (`admin`/`admin`).
+
+You can now start making changes to the source code, and they will be reflected in your browser.
+
+## Building as a Keycloak theme
+
+If you want to build the application using Maven and produce a JAR that can be installed directly into Keycloak, check out the [Keycloak theme documentation](../../keycloak-theme/README.md).
+
+## Linting
+
+Every time you create a commit it should be automatically linted and formatted for you. It is also possible to trigger the linting manually:
+
+```bash
+pnpm lint
+```
+
+## Integration testing with Cypress
+
+This repository contains integration tests developed with the [Cypress framework](https://www.cypress.io/).
+
+### Prerequisites
+
+Ensure the Keycloak and development server are running as [outlined previously](#running-the-keycloak-server) in this document.
+
+### Running the tests
+
+You can run the tests using the interactive graphical user interface using the following command:
+
+```bash
+pnpm cy:open
+```
+
+Alternatively the tests can also run headless as follows:
+
+```
+pnpm cy:run
+```
+
+For more information about the Cypress command-line interface consult [the documentation](https://docs.cypress.io/guides/guides/command-line).
+
+### Project Structure
+
+You can find information about the project structure in the [official Cypress documentation](https://docs.cypress.io/guides/core-concepts/writing-and-organizing-tests#Folder-structure).
+Read more about [how to write tests](./cypress/WRITING_TESTS.md)
diff --git a/js/apps/admin-ui/README.md b/js/apps/admin-ui/README.md
index ad7bd56c167..0333c5034f7 100644
--- a/js/apps/admin-ui/README.md
+++ b/js/apps/admin-ui/README.md
@@ -1,76 +1,59 @@
# Keycloak Admin UI
-This project is the next generation of the Keycloak Administration UI. It is written with React and [PatternFly 4](https://www.patternfly.org/v4/) and uses [Vite](https://vitejs.dev/guide/) and [Cypress](https://docs.cypress.io/guides/overview/why-cypress).
+This project is the next generation of the Keycloak Admin UI. It is written with React and [PatternFly 4](https://www.patternfly.org/v4/) and uses [Vite](https://vitejs.dev/guide/).
-## Development
+## Features
-### Prerequisites
+Contains all the "pages" from the admin-ui as re-usable components, all the functions to save and the side menu to use in your own build of the admin-ui
-Make sure that you have Node.js version 18 (or later) installed on your system. If you do not have Node.js installed we recommend using [Node Version Manager](https://github.com/nvm-sh/nvm) to install it.
-
-You can find out which version of Node.js you are using by running the following command:
+## Install
```bash
-node --version
+npm i @keycloak/keycloak-admin-ui
```
-In order to run the Keycloak server you will also have to install the Java Development Kit (JDK). We recommend that you use the same version of the JDK as [required by the Keycloak server](https://github.com/keycloak/keycloak/blob/main/docs/building.md#building-from-source).
+## Usage
-### Running the Keycloak server
+To use these pages you'll need to add `KeycloakProvider` in your component hierarchy to setup what client, realm and url to use.
-See the instructions in the [Keycloak server app](../keycloak-server/README.md).
+```jsx
+import { KeycloakProvider } from "@keycloak/keycloak-ui-shared";
-### Running the development server
+//...
-Now that the Keycloak sever is running it's time to run the development server for the Admin UI. This server is used to build the Admin UI in a manner that it can be iterated on quickly in a browser, using features such as [Hot Module Replacement (HMR)](https://vitejs.dev/guide/features.html#hot-module-replacement) and [Fast Refresh](https://www.npmjs.com/package/react-refresh).
+
+ {/* rest of you application */}
+
+```
-To start the development server run the following command:
+### Translation
+
+For the translation we use `react-i18next` you can [set it up](https://react.i18next.com/) as described on their website.
+If you want to use the translations that are provided then you need to add `i18next-http-backend` to your project and add:
+
+```ts
+
+backend: {
+ loadPath: `http://localhost:8180/resources/master/admin/{{lng}}`,
+ parse: (data: string) => {
+ const messages = JSON.parse(data);
+
+ const result: Record = {};
+ messages.forEach((v) => (result[v.key] = v.value));
+ return result;
+ },
+},
+```
+to the `i18next` config object.
+
+## Building
+
+To build a library instead of an app you need to add the `LIB=true` environment variable.
```bash
-pnpm dev
-```
-
-Once the process of optimization is done your browser will automatically open your local host on port `8080`. From here you will be redirected to the Keycloak server to authenticate, which you can do with the default credentials (`admin`/`admin`).
-
-You can now start making changes to the source code, and they will be reflected in your browser.
-
-## Building as a Keycloak theme
-
-If you want to build the application using Maven and produce a JAR that can be installed directly into Keycloak, check out the [Keycloak theme documentation](../../keycloak-theme/README.md).
-
-## Linting
-
-Every time you create a commit it should be automatically linted and formatted for you. It is also possible to trigger the linting manually:
-
-```bash
-pnpm lint
-```
-
-## Integration testing with Cypress
-
-This repository contains integration tests developed with the [Cypress framework](https://www.cypress.io/).
-
-### Prerequisites
-
-Ensure the Keycloak and development server are running as [outlined previously](#running-the-keycloak-server) in this document.
-
-### Running the tests
-
-You can run the tests using the interactive graphical user interface using the following command:
-
-```bash
-pnpm cy:open
-```
-
-Alternatively the tests can also run headless as follows:
-
-```
-pnpm cy:run
-```
-
-For more information about the Cypress command-line interface consult [the documentation](https://docs.cypress.io/guides/guides/command-line).
-
-### Project Structure
-
-You can find information about the project structure in the [official Cypress documentation](https://docs.cypress.io/guides/core-concepts/writing-and-organizing-tests#Folder-structure).
-Read more about [how to write tests](./cypress/WRITING_TESTS.md)
+LIB=true pnpm run build
+```
\ No newline at end of file
diff --git a/js/apps/admin-ui/package.json b/js/apps/admin-ui/package.json
index a0ea0ab289e..ed8bdde8b1c 100644
--- a/js/apps/admin-ui/package.json
+++ b/js/apps/admin-ui/package.json
@@ -1,7 +1,21 @@
{
- "name": "admin-ui",
- "private": true,
+ "name": "@keycloak/keycloak-admin-ui",
+ "version": "999.0.0-SNAPSHOT",
"type": "module",
+ "main": "lib/keycloak-admin-ui.js",
+ "types": "./lib/keycloak-admin-ui.d.ts",
+ "exports": {
+ ".": {
+ "import": "./lib/keycloak-admin-ui.js",
+ "types": "./lib/keycloak-admin-ui.d.ts"
+ }
+ },
+ "files": [
+ "lib"
+ ],
+ "publishConfig": {
+ "access": "public"
+ },
"scripts": {
"dev": "wireit",
"build": "wireit",
@@ -113,6 +127,7 @@
"uuid": "^10.0.0",
"vite": "^5.3.3",
"vite-plugin-checker": "^0.7.0",
+ "vite-plugin-dts": "^3.9.1",
"vitest": "^1.6.0"
}
}
diff --git a/js/apps/admin-ui/src/index.ts b/js/apps/admin-ui/src/index.ts
index 169f7432e95..08eac74d0b2 100644
--- a/js/apps/admin-ui/src/index.ts
+++ b/js/apps/admin-ui/src/index.ts
@@ -1,2 +1,320 @@
-export * as ClientsSection from "./clients/ClientsSection";
+export * as AuthenticationSection from "./authentication/AuthenticationSection";
+export { AddMapperDialog } from "./client-scopes/add/MapperDialog";
+export { MapperList } from "./client-scopes/details/MapperList";
+export * as MappingDetails from "./client-scopes/details/MappingDetails";
+export { ScopeForm } from "./client-scopes/details/ScopeForm";
+export { SearchDropdown } from "./client-scopes/details/SearchFilter";
+export { ChangeTypeDropdown } from "./client-scopes/ChangeTypeDropdown";
export * as ClientScopeSection from "./client-scopes/ClientScopesSection";
+export * as CreateClientScope from "./client-scopes/CreateClientScope";
+export * as EditClientScope from "./client-scopes/EditClientScope";
+export { AuthorizationSettings } from "./clients/authorization/Settings";
+export { AccessSettings } from "./clients/add/AccessSettings";
+export { CapabilityConfig } from "./clients/add/CapabilityConfig";
+export { GeneralSettings } from "./clients/add/GeneralSettings";
+export { LoginSettings } from "./clients/add/LoginSettings";
+export { LoginSettingsPanel } from "./clients/add/LoginSettingsPanel";
+export { LogoutPanel } from "./clients/add/LogoutPanel";
+export * as NewClientForm from "./clients/add/NewClientForm";
+export { SamlConfig } from "./clients/add/SamlConfig";
+export { SamlSignature } from "./clients/add/SamlSignature";
+export { AddHostDialog } from "./clients/advanced/AddHostDialog";
+export { AdvancedSettings } from "./clients/advanced/AdvancedSettings";
+export { ApplicationUrls } from "./clients/advanced/ApplicationUrls";
+export { AuthenticationOverrides } from "./clients/advanced/AuthenticationOverrides";
+export { ClusteringPanel } from "./clients/advanced/ClusteringPanel";
+export { FineGrainOpenIdConnect } from "./clients/advanced/FineGrainOpenIdConnect";
+export { OpenIdConnectCompatibilityModes } from "./clients/advanced/OpenIdConnectCompatibilityModes";
+export { TokenLifespan } from "./clients/advanced/TokenLifespan";
+export { AuthorizationResources } from "./clients/authorization/Resources";
+export { AuthorizationScopes } from "./clients/authorization/Scopes";
+export { AuthorizationPolicies } from "./clients/authorization/Policies";
+export { AuthorizationPermissions } from "./clients/authorization/Permissions";
+export { AuthorizationEvaluate } from "./clients/authorization/AuthorizationEvaluate";
+export { AuthorizationExport } from "./clients/authorization/AuthorizationExport";
+export { ClientSecret } from "./clients/credentials/ClientSecret";
+export { Credentials } from "./clients/credentials/Credentials";
+export { SignedJWT } from "./clients/credentials/SignedJWT";
+export { X509 } from "./clients/credentials/X509";
+export * as ImportForm from "./clients/import/ImportForm";
+export { AccessTokenDialog } from "./clients/initial-access/AccessTokenDialog";
+export * as CreateInitialAccessToken from "./clients/initial-access/CreateInitialAccessToken";
+export * as InitialAccessTokenList from "./clients/initial-access/InitialAccessTokenList";
+export { Certificate } from "./clients/keys/Certificate";
+export { ExportSamlKeyDialog } from "./clients/keys/ExportSamlKeyDialog";
+export { GenerateKeyDialog } from "./clients/keys/GenerateKeyDialog";
+export { ImportKeyDialog } from "./clients/keys/ImportKeyDialog";
+export { Keys } from "./clients/keys/Keys";
+export { SamlImportKeyDialog } from "./clients/keys/SamlImportKeyDialog";
+export { SamlKeys } from "./clients/keys/SamlKeys";
+export { SamlKeysDialog } from "./clients/keys/SamlKeysDialog";
+export { StoreSettings } from "./clients/keys/StoreSettings";
+export { AddProviderDialog } from "./clients/registration/AddProviderDialog";
+export { ClientRegistration } from "./clients/registration/ClientRegistration";
+export { ClientRegistrationList } from "./clients/registration/ClientRegistrationList";
+export * as DetailProvider from "./clients/registration/DetailProvider";
+export * as CreateClientRole from "./clients/roles/CreateClientRole";
+export { AddScopeDialog } from "./clients/scopes/AddScopeDialog";
+export { ClientScopes } from "./clients/scopes/ClientScopes";
+export { CopyToClipboardButton } from "./clients/scopes/CopyToClipboardButton";
+export { DedicatedScope } from "./clients/scopes/DedicatedScope";
+export * as DedicatedScopes from "./clients/scopes/DedicatedScopes";
+export { EvaluateScopes } from "./clients/scopes/EvaluateScopes";
+export { GeneratedCodeTab } from "./clients/scopes/GeneratedCodeTab";
+export { ServiceAccount } from "./clients/service-account/ServiceAccount";
+export { AdvancedTab } from "./clients/AdvancedTab";
+export { ClientDescription } from "./clients/ClientDescription";
+export * as ClientDetails from "./clients/ClientDetails";
+export { ClientSessions } from "./clients/ClientSessions";
+export { ClientSettings } from "./clients/ClientSettings";
+export * as ClientsSection from "./clients/ClientsSection";
+export { AlertPanel } from "./components/alert/AlertPanel";
+export { useAlerts, AlertProvider } from "./components/alert/Alerts";
+export { GroupBreadCrumbs } from "./components/bread-crumb/GroupBreadCrumbs";
+export { PageBreadCrumbs } from "./components/bread-crumb/PageBreadCrumbs";
+export { ClientSelect } from "./components/client/ClientSelect";
+export { CellDropdown as ClientScopeCellDropdown } from "./components/client-scope/ClientScopeTypes";
+export {
+ useConfirmDialog,
+ ConfirmDialogModal,
+} from "./components/confirm-dialog/ConfirmDialog";
+export { DownloadDialog } from "./components/download-dialog/DownloadDialog";
+export * as DropdownPanel from "./components/dropdown-panel/DropdownPanel";
+export { BooleanComponent } from "./components/dynamic/BooleanComponent";
+export { ClientSelectComponent } from "./components/dynamic/ClientSelectComponent";
+export { DynamicComponents } from "./components/dynamic/DynamicComponents";
+export { FileComponent } from "./components/dynamic/FileComponent";
+export { GroupComponent } from "./components/dynamic/GroupComponent";
+export { ListComponent } from "./components/dynamic/ListComponent";
+export { MapComponent } from "./components/dynamic/MapComponent";
+export { MultiValuedListComponent } from "./components/dynamic/MultivaluedListComponent";
+export { MultiValuedStringComponent } from "./components/dynamic/MultivaluedStringComponent";
+export { PasswordComponent } from "./components/dynamic/PasswordComponent";
+export { RoleComponent } from "./components/dynamic/RoleComponent";
+export { ScriptComponent } from "./components/dynamic/ScriptComponent";
+export { StringComponent } from "./components/dynamic/StringComponent";
+export { TextComponent } from "./components/dynamic/TextComponent";
+export { UrlComponent } from "./components/dynamic/UrlComponent";
+export { UserProfileAttributeListComponent } from "./components/dynamic/UserProfileAttributeListComponent";
+export { ErrorRenderer } from "./components/error/ErrorRenderer";
+export { FormattedLink } from "./components/external-link/FormattedLink";
+export { FixedButtonsGroup } from "./components/form/FixedButtonGroup";
+export { FormAccess } from "./components/form/FormAccess";
+export { GroupPath } from "./components/group/GroupPath";
+export { GroupPickerDialog } from "./components/group/GroupPickerDialog";
+export { HelpHeader } from "./components/help-enabler/HelpHeader";
+export { FileUploadForm } from "./components/json-file-upload/FileUploadForm";
+export { JsonFileUpload } from "./components/json-file-upload/JsonFileUpload";
+export { AttributesForm } from "./components/key-value-form/AttributeForm";
+export { KeySelect } from "./components/key-value-form/KeySelect";
+export { KeyValueInput } from "./components/key-value-form/KeyValueInput";
+export { ValueSelect } from "./components/key-value-form/ValueSelect";
+export { ClickableCard } from "./components/keycloak-card/ClickableCard";
+export { KeycloakCard } from "./components/keycloak-card/KeycloakCard";
+export { KeycloakSpinner } from "./components/keycloak-spinner/KeycloakSpinner";
+export { ListEmptyState } from "./components/list-empty-state/ListEmptyState";
+export { MultiLineInput } from "./components/multi-line-input/MultiLineInput";
+export { PermissionsTab } from "./components/permission-tab/PermissionTab";
+export { RealmSelector } from "./components/realm-selector/RealmSelector";
+export { RoleForm } from "./components/role-form/RoleForm";
+export { AddRoleMappingModal } from "./components/role-mapping/AddRoleMappingModal";
+export { RoleMapping } from "./components/role-mapping/RoleMapping";
+export { RolesList } from "./components/roles-list/RolesList";
+export { RoutableTabs } from "./components/routable-tabs/RoutableTabs";
+export { KeycloakDataTable } from "./components/table-toolbar/KeycloakDataTable";
+export { PaginatingTableToolbar } from "./components/table-toolbar/PaginatingTableToolbar";
+export { TableToolbar } from "./components/table-toolbar/TableToolbar";
+export { TimeSelector } from "./components/time-selector/TimeSelector";
+export { TimeSelectorControl } from "./components/time-selector/TimeSelectorControl";
+export { TimeSelectorForm } from "./components/time-selector/TimeSelectorForm";
+export { UserDataTable } from "./components/users/UserDataTable";
+export { UserDataTableAttributeSearchForm } from "./components/users/UserDataTableAttributeSearchForm";
+export { UserDataTableToolbarItems } from "./components/users/UserDataTableToolbarItems";
+export { ViewHeader } from "./components/view-header/ViewHeader";
+export { WizardSectionHeader } from "./components/wizard-section-header/WizardSectionHeader";
+export { DefaultSwitchControl } from "./components/SwitchControl";
+export { useAccess, AccessContext } from "./context/access/Access";
+export { fetchAdminUI } from "./context/auth/admin-ui-endpoint";
+export {
+ useRealm,
+ RealmContextProvider,
+} from "./context/realm-context/RealmContext";
+export {
+ useServerInfo,
+ ServerInfoProvider,
+} from "./context/server-info/ServerInfoProvider";
+export { useWhoAmI, WhoAmIContextProvider } from "./context/whoami/WhoAmI";
+export {
+ useErrorBoundary,
+ ErrorBoundaryProvider,
+} from "./context/ErrorBoundary";
+export { useRecentRealms, RecentRealmsProvider } from "./context/RecentRealms";
+export * as DashboardSection from "./dashboard/Dashboard";
+export { ProviderInfo } from "./dashboard/ProviderInfo";
+export { AdminEvents } from "./events/AdminEvents";
+export * as EventsSection from "./events/EventsSection";
+export { ResourceLink } from "./events/ResourceLinks";
+export { CheckableTreeView } from "./groups/components/CheckableTreeView";
+export { DeleteGroup } from "./groups/components/DeleteGroup";
+export { GroupToolbar } from "./groups/components/GroupToolbar";
+export { GroupTree } from "./groups/components/GroupTree";
+export { MoveDialog } from "./groups/components/MoveDialog";
+export { GroupAttributes } from "./groups/GroupAttributes";
+export { GroupRoleMapping } from "./groups/GroupRoleMapping";
+export { GroupsModal } from "./groups/GroupsModal";
+export * as GroupsSection from "./groups/GroupsSection";
+export { GroupTable } from "./groups/GroupTable";
+export { Members } from "./groups/Members";
+export { MemberModal } from "./groups/MembersModal";
+export { useSubGroups, SubGroups } from "./groups/SubGroupsContext";
+export * as AddIdentyProvider from "./identity-providers/add/AddIdentityProvider";
+export * as AddMapper from "./identity-providers/add/AddMapper";
+export { AddMapperForm } from "./identity-providers/add/AddMapperForm";
+export * as AddOpenIdConnect from "./identity-providers/add/AddOpenIdConnect";
+export * as AddSamlConnect from "./identity-providers/add/AddSamlConnect";
+export { AdvancedSettings as IdpAdvancedSettings } from "./identity-providers/add/AdvancedSettings";
+export { DescriptorSettings } from "./identity-providers/add/DescriptorSettings";
+export * as DetailSettings from "./identity-providers/add/DetailSettings";
+export { DiscoverySettings } from "./identity-providers/add/DiscoverySettings";
+export { ExtendedNonDiscoverySettings } from "./identity-providers/add/ExtendedNonDiscoverySettings";
+export { GeneralSettings as IdpGeneralSettings } from "./identity-providers/add/GeneralSettings";
+export { OIDCAuthentication } from "./identity-providers/add/OIDCAuthentication";
+export { OIDCGeneralSettings } from "./identity-providers/add/OIDCGeneralSettings";
+export { OpenIdConnectSettings } from "./identity-providers/add/OpenIdConnectSettings";
+export { ReqAuthnConstraints } from "./identity-providers/add/ReqAuthnConstraintsSettings";
+export { SamlConnectSettings } from "./identity-providers/add/SamlConnectSettings";
+export { SamlGeneralSettings } from "./identity-providers/add/SamlGeneralSettings";
+export { ClientIdSecret } from "./identity-providers/component/ClientIdSecret";
+export { DiscoveryEndpointField } from "./identity-providers/component/DiscoveryEndpointField";
+export { DisplayOrder } from "./identity-providers/component/DisplayOrder";
+export { FormGroupField } from "./identity-providers/component/FormGroupField";
+export { RedirectUrl } from "./identity-providers/component/RedirectUrl";
+export { SwitchField } from "./identity-providers/component/SwitchField";
+export { TextField } from "./identity-providers/component/TextField";
+export * as IdentityProvidersSection from "./identity-providers/IdentityProvidersSection";
+export { ManageOrderDialog } from "./identity-providers/ManageOrderDialog";
+export { DetailOrganizationHeader } from "./organizations/DetailOraganzationHeader";
+export { IdentityProviders as OrganizationIdentityProviders } from "./organizations/IdentityProviders";
+export { InviteMemberModal } from "./organizations/InviteMemberModal";
+export { LinkIdentityProviderModal } from "./organizations/LinkIdentityProviderModal";
+export { Members as OrganizationMembers } from "./organizations/Members";
+export { OrganizationForm } from "./organizations/OrganizationForm";
+export * as OrganizationSection from "./organizations/OrganizationsSection";
+export * as Page from "./page/Page";
+export { PageHandler } from "./page/PageHandler";
+export * as PageList from "./page/PageList";
+export * as NewRealmForm from "./realm/add/NewRealmForm";
+export * as CreateRealmRole from "./realm-roles/CreateRealmRole";
+export * as RealmRolesSection from "./realm-roles/RealmRolesSection";
+export * as RealmRoleTabs from "./realm-roles/RealmRoleTabs";
+export { UsersInRoleTab } from "./realm-roles/UsersInRoleTab";
+export { AddEventTypesDialog } from "./realm-settings/event-config/AddEventTypesDialog";
+export { EventConfigForm } from "./realm-settings/event-config/EventConfigForm";
+export { EventListenersForm } from "./realm-settings/event-config/EventListenersForm";
+export { EventsTab } from "./realm-settings/event-config/EventsTab";
+export { EventsTypeTable } from "./realm-settings/event-config/EventsTypeTable";
+export { KeyProviderForm } from "./realm-settings/keys/key-providers/KeyProviderForm";
+export { KeyProviderModal } from "./realm-settings/keys/key-providers/KeyProviderModal";
+export { KeyProvidersPicker } from "./realm-settings/keys/key-providers/KeyProvidersPicker";
+export { KeysListTab } from "./realm-settings/keys/KeysListTab";
+export { KeysProvidersTab } from "./realm-settings/keys/KeysProvidersTab";
+export { KeysTab } from "./realm-settings/keys/KeysTab";
+export { EffectiveMessageBundles } from "./realm-settings/localization/EffectiveMessageBundles";
+export { LocalizationTab } from "./realm-settings/localization/LocalizationTab";
+export { RealmOverrides } from "./realm-settings/localization/RealmOverrides";
+export { BruteForceDetection } from "./realm-settings/security-defences/BruteForceDetection";
+export { HeadersForm } from "./realm-settings/security-defences/HeadersForm";
+export { HelpLinkTextInput } from "./realm-settings/security-defences/HelpLinkTextInput";
+export { SecurityDefenses } from "./realm-settings/security-defences/SecurityDefenses";
+export { Time } from "./realm-settings/security-defences/Time";
+export { AddTranslationsDialog } from "./realm-settings/user-profile/attribute/AddTranslationsDialog";
+export { AddValidatorDialog } from "./realm-settings/user-profile/attribute/AddValidatorDialog";
+export { AttributeAnnotations } from "./realm-settings/user-profile/attribute/AttributeAnnotations";
+export { AttributeGeneralSettings } from "./realm-settings/user-profile/attribute/AttributeGeneralSettings";
+export { AttributePermission } from "./realm-settings/user-profile/attribute/AttributePermission";
+export { AttributeValidations } from "./realm-settings/user-profile/attribute/AttributeValidations";
+export { ValidatorSelect } from "./realm-settings/user-profile/attribute/ValidatorSelect";
+export * as AttributesGroupDetails from "./realm-settings/user-profile/AttributesGroupDetails";
+export * as AttributesGroupForm from "./realm-settings/user-profile/AttributesGroupForm";
+export { AttributesGroupTab } from "./realm-settings/user-profile/AttributesGroupTab";
+export { AttributesTab } from "./realm-settings/user-profile/AttributesTab";
+export { JsonEditorTab } from "./realm-settings/user-profile/JsonEditorTab";
+export {
+ UserProfileContext,
+ useUserProfile,
+} from "./realm-settings/user-profile/UserProfileContext";
+export { UserProfileTab } from "./realm-settings/user-profile/UserProfileTab";
+export { AddClientProfileModal } from "./realm-settings/AddClientProfileModal";
+export { AddTranslationModal } from "./realm-settings/AddTranslationModal";
+export * as ClientProfileForm from "./realm-settings/ClientProfileForm";
+export * as DefaultGroupsTab from "./realm-settings/DefaultGroupsTab";
+export { RealmSettingsEmailTab } from "./realm-settings/EmailTab";
+export { RealmSettingsGeneralTab } from "./realm-settings/GeneralTab";
+export { RealmSettingsLoginTab } from "./realm-settings/LoginTab";
+export * as NewAttributeSettings from "./realm-settings/NewAttributeSettings";
+export * as NewClientPolicy from "./realm-settings/NewClientPolicy";
+export * as NewClientPolicyCondition from "./realm-settings/NewClientPolicyCondition";
+export { PartialExportDialog } from "./realm-settings/PartialExport";
+export { PartialImportDialog } from "./realm-settings/PartialImport";
+export { PoliciesTab } from "./realm-settings/PoliciesTab";
+export * as RealmSettingsSection from "./realm-settings/RealmSettingsSection";
+export { RealmSettingsTabs } from "./realm-settings/RealmSettingsTabs";
+export { RealmSettingsSessionsTab } from "./realm-settings/SessionsTab";
+export { RealmSettingsThemesTab } from "./realm-settings/ThemesTab";
+export { RealmSettingsTokensTab } from "./realm-settings/TokensTab";
+export { UserRegistration } from "./realm-settings/UserRegistration";
+export { RevocationModal } from "./sessions/RevocationModal";
+export * as SessionsSection from "./sessions/SessionsSection";
+export * as SessionsTable from "./sessions/SessionsTable";
+export {
+ SearchDropdown as UserSearchDropdown,
+ SearchToolbar,
+} from "./user/details/SearchFilter";
+export { CredentialDataDialog } from "./user/user-credentials/CredentialDataDialog";
+export { CredentialRow } from "./user/user-credentials/CredentialRow";
+export { InlineLabelEdit } from "./user/user-credentials/InlineLabelEdit";
+export { LifespanField } from "./user/user-credentials/LifespanField";
+export { RequiredActionMultiSelect } from "./user/user-credentials/RequiredActionMultiSelect";
+export { ResetCredentialDialog } from "./user/user-credentials/ResetCredentialDialog";
+export { ResetPasswordDialog } from "./user/user-credentials/ResetPasswordDialog";
+export * as CreateUser from "./user/CreateUser";
+export * as EditUser from "./user/EditUser";
+export { FederatedUserLink } from "./user/FederatedUserLink";
+export { UserAttributes } from "./user/UserAttributes";
+export { UserConsents } from "./user/UserConsents";
+export { UserCredentials } from "./user/UserCredentials";
+export { UserForm } from "./user/UserForm";
+export { UserGroups } from "./user/UserGroups";
+export { UserIdentityProviderLinks } from "./user/UserIdentityProviderLinks";
+export { UserIdpModal } from "./user/UserIdPModal";
+export { UserRoleMapping } from "./user/UserRoleMapping";
+export { UserSessions } from "./user/UserSessions";
+export * as UserSection from "./user/UsersSection";
+export * as CustomProviderSettings from "./user-federation/custom/CustomProviderSettings";
+export { KerberosSettingsRequired } from "./user-federation/kerberos/KerberosSettingsRequired";
+export * as LdapMapperDetails from "./user-federation/ldap/mappers/LdapMapperDetails";
+export { LdapMapperList } from "./user-federation/ldap/mappers/LdapMapperList";
+export { LdapSettingsAdvanced } from "./user-federation/ldap/LdapSettingsAdvanced";
+export { LdapSettingsConnection } from "./user-federation/ldap/LdapSettingsConnection";
+export { LdapSettingsGeneral } from "./user-federation/ldap/LdapSettingsGeneral";
+export { LdapSettingsKerberosIntegration } from "./user-federation/ldap/LdapSettingsKerberosIntegration";
+export { LdapSettingsSearching } from "./user-federation/ldap/LdapSettingsSearching";
+export { LdapSettingsSynchronization } from "./user-federation/ldap/LdapSettingsSynchronization";
+export { ExtendedHeader } from "./user-federation/shared/ExtendedHeader";
+export { Header as UserFederationHeader } from "./user-federation/shared/Header";
+export { SettingsCache } from "./user-federation/shared/SettingsCache";
+export * as CreateUserFederationLdapSettings from "./user-federation/CreateUserFederationLdapSettings";
+export { ManagePriorityDialog } from "./user-federation/ManagePriorityDialog";
+export * as UserFederationKerberosSettings from "./user-federation/UserFederationKerberosSettings";
+export { UserFederationKerberosWizard } from "./user-federation/UserFederationKerberosWizard";
+export { UserFederationLdapForm } from "./user-federation/UserFederationLdapForm";
+export * as UserFederationLdapSettings from "./user-federation/UserFederationLdapSettings";
+export { UserFederationLdapWizard } from "./user-federation/UserFederationLdapWizard";
+export * as UserFederationSection from "./user-federation/UserFederationSection";
+export { ForbiddenSection } from "./ForbiddenSection";
+export { Header } from "./PageHeader";
+export { PageNav } from "./PageNav";
+export { PageNotFoundSection } from "./PageNotFoundSection";
+export { App as AdminUi } from "./App";
+export type { Environment as AccountEnvironment } from "./environment";
+export { KeycloakProvider, useEnvironment } from "@keycloak/keycloak-ui-shared";
diff --git a/js/apps/admin-ui/vite.config.ts b/js/apps/admin-ui/vite.config.ts
index fe229c3307a..b039718021b 100644
--- a/js/apps/admin-ui/vite.config.ts
+++ b/js/apps/admin-ui/vite.config.ts
@@ -1,34 +1,58 @@
-import { defineConfig } from "vitest/config";
import react from "@vitejs/plugin-react-swc";
+import path from "path";
+import { defineConfig, loadEnv } from "vite";
import { checker } from "vite-plugin-checker";
+import dts from "vite-plugin-dts";
// https://vitejs.dev/config/
-export default defineConfig({
- base: "",
- server: {
- origin: "http://localhost:5174",
- port: 5174,
- },
- build: {
- outDir: "target/classes/theme/keycloak.v2/admin/resources",
- sourcemap: true,
- target: "esnext",
- modulePreload: false,
- cssMinify: "lightningcss",
- manifest: true,
- rollupOptions: {
- input: "src/main.tsx",
- external: ["react", "react/jsx-runtime", "react-dom"],
- },
- },
- plugins: [react(), checker({ typescript: true })],
- test: {
- watch: false,
- environment: "jsdom",
+export default defineConfig(({ mode }) => {
+ const env = loadEnv(mode, process.cwd(), "");
+ const external = ["react", "react/jsx-runtime", "react-dom"];
+ const plugins = [react(), checker({ typescript: true })];
+ const input = env.LIB ? undefined : "src/main.tsx";
+ if (env.LIB) {
+ external.push("react-router-dom");
+ external.push("react-i18next");
+ plugins.push(dts({ insertTypesEntry: true }));
+ }
+ const lib = env.LIB
+ ? {
+ outDir: "lib",
+ lib: {
+ entry: path.resolve(__dirname, "src/index.ts"),
+ formats: ["es"],
+ },
+ }
+ : {
+ outDir: "target/classes/theme/keycloak.v2/admin/resources",
+ };
+ return {
+ base: "",
server: {
- deps: {
- inline: [/@patternfly\/.*/],
+ origin: "http://localhost:5174",
+ port: 5174,
+ },
+ build: {
+ ...lib,
+ sourcemap: true,
+ target: "esnext",
+ modulePreload: false,
+ cssMinify: "lightningcss",
+ manifest: true,
+ rollupOptions: {
+ input,
+ external,
},
},
- },
+ plugins,
+ test: {
+ watch: false,
+ environment: "jsdom",
+ server: {
+ deps: {
+ inline: [/@patternfly\/.*/],
+ },
+ },
+ },
+ };
});
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index b6c7166a002..995f0032236 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -170,7 +170,7 @@ importers:
version: 5.3.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
admin-ui:
specifier: 'file:'
- version: file:js/apps/admin-ui(@types/react@18.3.3)
+ version: '@keycloak/keycloak-admin-ui@file:js/apps/admin-ui(@types/react@18.3.3)'
dagre:
specifier: ^0.8.5
version: 0.8.5
@@ -282,7 +282,7 @@ importers:
version: 1.25.1
ts-node:
specifier: ^10.9.2
- version: 10.9.2(@swc/core@1.5.7)(@types/node@20.14.9)(typescript@5.5.2)
+ version: 10.9.2(@swc/core@1.5.7)(@types/node@20.14.9)(typescript@5.5.3)
uuid:
specifier: ^10.0.0
version: 10.0.0
@@ -291,7 +291,10 @@ importers:
version: 5.3.3(@types/node@20.14.9)(lightningcss@1.25.1)(terser@5.31.0)
vite-plugin-checker:
specifier: ^0.7.0
- version: 0.7.0(eslint@8.57.0)(optionator@0.9.4)(typescript@5.5.2)(vite@5.3.3(@types/node@20.14.9)(lightningcss@1.25.1)(terser@5.31.0))
+ version: 0.7.0(eslint@8.57.0)(optionator@0.9.4)(typescript@5.5.3)(vite@5.3.3(@types/node@20.14.9)(lightningcss@1.25.1)(terser@5.31.0))
+ vite-plugin-dts:
+ specifier: ^3.9.1
+ version: 3.9.1(@types/node@20.14.9)(rollup@4.18.0)(typescript@5.5.3)(vite@5.3.3(@types/node@20.14.9)(lightningcss@1.25.1)(terser@5.31.0))
vitest:
specifier: ^1.6.0
version: 1.6.0(@types/node@20.14.9)(jsdom@24.1.0)(lightningcss@1.25.1)(terser@5.31.0)
@@ -1048,6 +1051,9 @@ packages:
'@jridgewell/trace-mapping@0.3.9':
resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==}
+ '@keycloak/keycloak-admin-ui@file:js/apps/admin-ui':
+ resolution: {directory: js/apps/admin-ui, type: directory}
+
'@microsoft/api-extractor-model@7.28.13':
resolution: {integrity: sha512-39v/JyldX4MS9uzHcdfmjjfS6cYGAoXV+io8B5a338pkHiSt+gy2eXQ0Q7cGFJ7quSa1VqqlMdlPrB6sLR/cAw==}
@@ -1661,9 +1667,6 @@ packages:
'@types/mocha@10.0.7':
resolution: {integrity: sha512-GN8yJ1mNTcFcah/wKEFIJckJx9iJLoMSzWcfRRuxz/Jk+U6KQNnml+etbtxFK8lPjzOw3zp4Ha/kjSst9fsHYw==}
- '@types/node@20.14.8':
- resolution: {integrity: sha512-DO+2/jZinXfROG7j7WKFn/3C6nFwxy2lLpgLjEXJz+0XKphZlTLJ14mo8Vfg8X5BWN6XjyESXq+LcYdT7tR3bA==}
-
'@types/node@20.14.9':
resolution: {integrity: sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg==}
@@ -1853,9 +1856,6 @@ packages:
engines: {node: '>=0.4.0'}
hasBin: true
- admin-ui@file:js/apps/admin-ui:
- resolution: {directory: js/apps/admin-ui, type: directory}
-
agent-base@7.1.1:
resolution: {integrity: sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==}
engines: {node: '>= 14'}
@@ -3936,6 +3936,10 @@ packages:
peerDependencies:
postcss: ^8.2.9
+ postcss@8.4.38:
+ resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==}
+ engines: {node: ^10 || ^12 || >=14}
+
postcss@8.4.39:
resolution: {integrity: sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==}
engines: {node: ^10 || ^12 || >=14}
@@ -4633,11 +4637,6 @@ packages:
engines: {node: '>=14.17'}
hasBin: true
- typescript@5.5.2:
- resolution: {integrity: sha512-NcRtPEOsPFFWjobJEtfihkLCZCXZt/os3zf8nTxjVH3RvTSxjrCamJpbExGvYOF+tFHc3pA65qpdwPbzjohhew==}
- engines: {node: '>=14.17'}
- hasBin: true
-
typescript@5.5.3:
resolution: {integrity: sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ==}
engines: {node: '>=14.17'}
@@ -5454,7 +5453,7 @@ snapshots:
'@eslint/eslintrc@2.1.4':
dependencies:
ajv: 6.12.6
- debug: 4.3.5(supports-color@8.1.1)
+ debug: 4.3.4(supports-color@8.1.1)
espree: 9.6.1
globals: 13.24.0
ignore: 5.3.1
@@ -5490,7 +5489,7 @@ snapshots:
'@humanwhocodes/config-array@0.11.14':
dependencies:
'@humanwhocodes/object-schema': 2.0.3
- debug: 4.3.5(supports-color@8.1.1)
+ debug: 4.3.4(supports-color@8.1.1)
minimatch: 3.1.2
transitivePeerDependencies:
- supports-color
@@ -5539,6 +5538,40 @@ snapshots:
'@jridgewell/resolve-uri': 3.1.2
'@jridgewell/sourcemap-codec': 1.4.15
+ '@keycloak/keycloak-admin-ui@file:js/apps/admin-ui(@types/react@18.3.3)':
+ dependencies:
+ '@keycloak/keycloak-admin-client': link:js/libs/keycloak-admin-client
+ '@keycloak/keycloak-ui-shared': link:js/libs/ui-shared
+ '@patternfly/patternfly': 5.3.1
+ '@patternfly/react-code-editor': 5.3.3(monaco-editor@0.50.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@patternfly/react-core': 5.3.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@patternfly/react-icons': 5.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@patternfly/react-styles': 5.3.1
+ '@patternfly/react-table': 5.3.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ dagre: 0.8.5
+ file-saver: 2.0.5
+ file-selector: 0.6.0
+ flat: 6.0.1
+ i18next: 23.11.5
+ i18next-http-backend: 2.5.2
+ keycloak-js: link:js/libs/keycloak-js
+ lodash-es: 4.17.21
+ monaco-editor: 0.50.0
+ p-debounce: 4.0.0
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ react-dropzone: 14.2.3(react@18.3.1)
+ react-hook-form: 7.52.1(react@18.3.1)
+ react-i18next: 14.1.2(i18next@23.11.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react-router-dom: 6.24.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ reactflow: 11.11.4(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ use-react-router-breadcrumbs: 4.0.1(react-router-dom@6.24.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)
+ transitivePeerDependencies:
+ - '@types/react'
+ - encoding
+ - immer
+ - react-native
+
'@microsoft/api-extractor-model@7.28.13(@types/node@20.14.9)':
dependencies:
'@microsoft/tsdoc': 0.14.2
@@ -6175,7 +6208,7 @@ snapshots:
'@types/gunzip-maybe@1.4.2':
dependencies:
- '@types/node': 20.14.8
+ '@types/node': 20.14.9
'@types/lodash-es@4.17.12':
dependencies:
@@ -6185,10 +6218,6 @@ snapshots:
'@types/mocha@10.0.7': {}
- '@types/node@20.14.8':
- dependencies:
- undici-types: 5.26.5
-
'@types/node@20.14.9':
dependencies:
undici-types: 5.26.5
@@ -6212,7 +6241,7 @@ snapshots:
'@types/tar-fs@2.0.4':
dependencies:
- '@types/node': 20.14.8
+ '@types/node': 20.14.9
'@types/tar-stream': 3.1.3
'@types/tar-stream@3.1.3':
@@ -6250,7 +6279,7 @@ snapshots:
'@typescript-eslint/types': 7.14.1
'@typescript-eslint/typescript-estree': 7.14.1(typescript@5.5.3)
'@typescript-eslint/visitor-keys': 7.14.1
- debug: 4.3.5(supports-color@8.1.1)
+ debug: 4.3.4(supports-color@8.1.1)
eslint: 8.57.0
optionalDependencies:
typescript: 5.5.3
@@ -6266,7 +6295,7 @@ snapshots:
dependencies:
'@typescript-eslint/typescript-estree': 7.14.1(typescript@5.5.3)
'@typescript-eslint/utils': 7.14.1(eslint@8.57.0)(typescript@5.5.3)
- debug: 4.3.5(supports-color@8.1.1)
+ debug: 4.3.4(supports-color@8.1.1)
eslint: 8.57.0
ts-api-utils: 1.3.0(typescript@5.5.3)
optionalDependencies:
@@ -6278,17 +6307,17 @@ snapshots:
'@typescript-eslint/types@7.14.1': {}
- '@typescript-eslint/typescript-estree@5.62.0(typescript@5.5.2)':
+ '@typescript-eslint/typescript-estree@5.62.0(typescript@5.5.3)':
dependencies:
'@typescript-eslint/types': 5.62.0
'@typescript-eslint/visitor-keys': 5.62.0
- debug: 4.3.5(supports-color@8.1.1)
+ debug: 4.3.4(supports-color@8.1.1)
globby: 11.1.0
is-glob: 4.0.3
semver: 7.6.1
- tsutils: 3.21.0(typescript@5.5.2)
+ tsutils: 3.21.0(typescript@5.5.3)
optionalDependencies:
- typescript: 5.5.2
+ typescript: 5.5.3
transitivePeerDependencies:
- supports-color
@@ -6296,7 +6325,7 @@ snapshots:
dependencies:
'@typescript-eslint/types': 7.14.1
'@typescript-eslint/visitor-keys': 7.14.1
- debug: 4.3.5(supports-color@8.1.1)
+ debug: 4.3.4(supports-color@8.1.1)
globby: 11.1.0
is-glob: 4.0.3
minimatch: 9.0.4
@@ -6436,43 +6465,9 @@ snapshots:
acorn@8.11.3: {}
- admin-ui@file:js/apps/admin-ui(@types/react@18.3.3):
- dependencies:
- '@keycloak/keycloak-admin-client': link:js/libs/keycloak-admin-client
- '@keycloak/keycloak-ui-shared': link:js/libs/ui-shared
- '@patternfly/patternfly': 5.3.1
- '@patternfly/react-code-editor': 5.3.3(monaco-editor@0.50.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@patternfly/react-core': 5.3.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@patternfly/react-icons': 5.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@patternfly/react-styles': 5.3.1
- '@patternfly/react-table': 5.3.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- dagre: 0.8.5
- file-saver: 2.0.5
- file-selector: 0.6.0
- flat: 6.0.1
- i18next: 23.11.5
- i18next-http-backend: 2.5.2
- keycloak-js: link:js/libs/keycloak-js
- lodash-es: 4.17.21
- monaco-editor: 0.50.0
- p-debounce: 4.0.0
- react: 18.3.1
- react-dom: 18.3.1(react@18.3.1)
- react-dropzone: 14.2.3(react@18.3.1)
- react-hook-form: 7.52.1(react@18.3.1)
- react-i18next: 14.1.2(i18next@23.11.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- react-router-dom: 6.24.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- reactflow: 11.11.4(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- use-react-router-breadcrumbs: 4.0.1(react-router-dom@6.24.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)
- transitivePeerDependencies:
- - '@types/react'
- - encoding
- - immer
- - react-native
-
agent-base@7.1.1:
dependencies:
- debug: 4.3.5(supports-color@8.1.1)
+ debug: 4.3.4(supports-color@8.1.1)
transitivePeerDependencies:
- supports-color
@@ -7127,7 +7122,7 @@ snapshots:
commander: 10.0.1
filing-cabinet: 4.2.0
precinct: 11.0.5
- typescript: 5.5.2
+ typescript: 5.5.3
transitivePeerDependencies:
- supports-color
@@ -7154,8 +7149,8 @@ snapshots:
detective-postcss@6.1.3:
dependencies:
is-url: 1.2.4
- postcss: 8.4.39
- postcss-values-parser: 6.0.2(postcss@8.4.39)
+ postcss: 8.4.38
+ postcss-values-parser: 6.0.2(postcss@8.4.38)
detective-sass@5.0.3:
dependencies:
@@ -7171,10 +7166,10 @@ snapshots:
detective-typescript@11.2.0:
dependencies:
- '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.5.2)
+ '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.5.3)
ast-module-types: 5.0.0
node-source-walk: 6.0.2
- typescript: 5.5.2
+ typescript: 5.5.3
transitivePeerDependencies:
- supports-color
@@ -7671,7 +7666,7 @@ snapshots:
sass-lookup: 5.0.1
stylus-lookup: 5.0.1
tsconfig-paths: 4.2.0
- typescript: 5.5.2
+ typescript: 5.5.3
fill-range@7.0.1:
dependencies:
@@ -7704,7 +7699,7 @@ snapshots:
'@babel/parser': 7.24.5
'@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.24.5)
acorn-walk: 8.3.2
- debug: 4.3.5(supports-color@8.1.1)
+ debug: 4.3.4(supports-color@8.1.1)
globby: 11.1.0
simple-bin-help: 1.8.0
transitivePeerDependencies:
@@ -8767,13 +8762,19 @@ snapshots:
possible-typed-array-names@1.0.0: {}
- postcss-values-parser@6.0.2(postcss@8.4.39):
+ postcss-values-parser@6.0.2(postcss@8.4.38):
dependencies:
color-name: 1.1.4
is-url-superb: 4.0.0
- postcss: 8.4.39
+ postcss: 8.4.38
quote-unquote: 1.0.0
+ postcss@8.4.38:
+ dependencies:
+ nanoid: 3.3.7
+ picocolors: 1.0.1
+ source-map-js: 1.2.0
+
postcss@8.4.39:
dependencies:
nanoid: 3.3.7
@@ -9216,7 +9217,7 @@ snapshots:
spec-change@1.11.1:
dependencies:
arg: 5.0.2
- debug: 4.3.5(supports-color@8.1.1)
+ debug: 4.3.4(supports-color@8.1.1)
deep-equal: 2.2.3
dependency-tree: 10.0.9
globby: 11.1.0
@@ -9439,26 +9440,6 @@ snapshots:
dependencies:
typescript: 5.5.3
- ts-node@10.9.2(@swc/core@1.5.7)(@types/node@20.14.9)(typescript@5.5.2):
- dependencies:
- '@cspotcode/source-map-support': 0.8.1
- '@tsconfig/node10': 1.0.11
- '@tsconfig/node12': 1.0.11
- '@tsconfig/node14': 1.0.3
- '@tsconfig/node16': 1.0.4
- '@types/node': 20.14.9
- acorn: 8.11.3
- acorn-walk: 8.3.2
- arg: 4.1.3
- create-require: 1.1.1
- diff: 4.0.2
- make-error: 1.3.6
- typescript: 5.5.2
- v8-compile-cache-lib: 3.0.1
- yn: 3.1.1
- optionalDependencies:
- '@swc/core': 1.5.7
-
ts-node@10.9.2(@swc/core@1.5.7)(@types/node@20.14.9)(typescript@5.5.3):
dependencies:
'@cspotcode/source-map-support': 0.8.1
@@ -9491,10 +9472,10 @@ snapshots:
tslib@2.6.3: {}
- tsutils@3.21.0(typescript@5.5.2):
+ tsutils@3.21.0(typescript@5.5.3):
dependencies:
tslib: 1.14.1
- typescript: 5.5.2
+ typescript: 5.5.3
tsx@4.9.3:
dependencies:
@@ -9566,8 +9547,6 @@ snapshots:
typescript@5.4.2: {}
- typescript@5.5.2: {}
-
typescript@5.5.3: {}
ufo@1.5.3: {}
@@ -9666,29 +9645,6 @@ snapshots:
- supports-color
- terser
- vite-plugin-checker@0.7.0(eslint@8.57.0)(optionator@0.9.4)(typescript@5.5.2)(vite@5.3.3(@types/node@20.14.9)(lightningcss@1.25.1)(terser@5.31.0)):
- dependencies:
- '@babel/code-frame': 7.24.2
- '@volar/typescript': 2.3.4
- ansi-escapes: 4.3.2
- chalk: 4.1.2
- chokidar: 3.6.0
- commander: 8.3.0
- fast-glob: 3.3.2
- fs-extra: 11.2.0
- npm-run-path: 4.0.1
- strip-ansi: 6.0.1
- tiny-invariant: 1.3.3
- vite: 5.3.3(@types/node@20.14.9)(lightningcss@1.25.1)(terser@5.31.0)
- vscode-languageclient: 7.0.0
- vscode-languageserver: 7.0.0
- vscode-languageserver-textdocument: 1.0.11
- vscode-uri: 3.0.8
- optionalDependencies:
- eslint: 8.57.0
- optionator: 0.9.4
- typescript: 5.5.2
-
vite-plugin-checker@0.7.0(eslint@8.57.0)(optionator@0.9.4)(typescript@5.5.3)(vite@5.3.3(@types/node@20.14.9)(lightningcss@1.25.1)(terser@5.31.0)):
dependencies:
'@babel/code-frame': 7.24.2