8000 Upgrade Account UI to PatternFly 6 by edewit · Pull Request #52374 · keycloak/keycloak · GitHub
[go: up one dir, main page]

Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions .github/workflows/js-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,15 @@ jobs:
- run: pnpm --fail-if-no-match --filter ${{ env.WORKSPACE }} build
working-directory: js

- run: pnpm --fail-if-no-match --filter @keycloak/keycloak-ui-shared-pf6 lint
working-directory: js

- run: pnpm --fail-if-no-match --filter @keycloak/keycloak-ui-shared-pf6 build
working-directory: js

- run: pnpm --fail-if-no-match --filter @keycloak/keycloak-ui-shared-pf6 test
working-directory: js

account-ui:
name: Account UI
needs: conditional
Expand Down
2 changes: 1 addition & 1 deletion common/src/main/java/org/keycloak/common/Profile.java
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ public enum Feature {

ACCOUNT_API("Account Management REST API", Type.DEFAULT),

ACCOUNT_V3("Account Console version 3", Type.DEFAULT, 3, Feature.ACCOUNT_API),
ACCOUNT_V4("Account Console version 4", Type.DEFAULT, 4, Feature.ACCOUNT_API),

ADMIN_FINE_GRAINED_AUTHZ("Fine-Grained Admin Permissions", Type.DEPRECATED, 1),

Expand Down
10 changes: 5 additions & 5 deletions common/src/test/java/org/keycloak/common/ProfileTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ public void checkFailureIfDependencyDisabled() {
Properties properties = new Properties();
properties.setProperty("keycloak.profile.feature.account_api", "disabled");

Assertions.assertEquals("Feature account-v3 depends on disabled feature account-api",
Assertions.assertEquals("Feature account-v4 depends on disabled feature account-api",
assertThrows(ProfileException.class,
() -> Profile.configure(new PropertiesProfileConfigResolver(properties))).getMessage());
}
Expand All @@ -108,7 +108,7 @@ public void checkSuccessIfFeatureDisabledWithDisabledDependencies() {
properties.setProperty("keycloak.profile.feature.account", "disabled");
properties.setProperty("keycloak.profile.feature.account_api", "disabled");
Profile.configure(new PropertiesProfileConfigResolver(properties));
Assertions.assertFalse(Profile.isFeatureEnabled(Profile.Feature.ACCOUNT_V3));
Assertions.assertFalse(Profile.isFeatureEnabled(Profile.Feature.ACCOUNT_V4));
Assertions.assertFalse(Profile.isFeatureEnabled(Profile.Feature.ACCOUNT_API));
}

Expand Down Expand Up @@ -171,9 +171,9 @@ public void configWithCommaSeparatedList() {

@Test
public void testKeys() {
Assertions.assertEquals("account-v3", Profile.Feature.ACCOUNT_V3.getKey());
Assertions.assertEquals("account", Profile.Feature.ACCOUNT_V3.getUnversionedKey());
Assertions.assertEquals("account:v3", Profile.Feature.ACCOUNT_V3.getVersionedKey());
Assertions.assertEquals("account-v4", Profile.Feature.ACCOUNT_V4.getKey());
Assertions.assertEquals("account", Profile.Feature.ACCOUNT_V4.getUnversionedKey());
Assertions.assertEquals("account:v4", Profile.Feature.ACCOUNT_V4.getVersionedKey());
}

@Test
Expand Down
6 changes: 6 additions & 0 deletions docs/documentation/release_notes/topics/27_0_0.adoc
10BC8
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
= User interface

== Account Console upgraded to PatternFly 6

The built-in Account Console theme is now `keycloak.v4`, based on PatternFly 6. The previous `keycloak.v3` Account Console theme has been removed.

Realms that explicitly used `keycloak`, `keycloak.v2`, or `keycloak.v3` as the account theme are migrated to `keycloak.v4` during upgrade. If you maintain a custom Account Console theme based on `keycloak.v3`, see the link:{upgradingguide_link}[{upgradingguide_name}] for migration steps.

== Login v1 theme removed

The legacy Login v1 theme based on PatternFly 3/4 has been deprecated for a long time and has been removed for this release.
Expand Down
22 changes: 22 additions & 0 deletions docs/documentation/upgrading/topics/changes/changes-27_0_0.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -237,6 +237,28 @@ Updates that change other settings, or that use a `${vault.<key>}` expression as
Custom identity providers whose secret is sent to a destination derived from provider-specific configuration can take part in this check by overriding `IdentityProviderModel#canReuseMaskedClientSecret` in the model returned by `IdentityProviderFactory#createConfig()`.
Providers extending `OAuth2IdentityProviderConfig` can instead override `getClientSecretDestinationConfigKeys()` and `isClientSecretDestinationChanged()`.

=== Account Console moved to `keycloak.v4` and PatternFly 6
// https://github.com/keycloak/keycloak/issues/52344

The built-in Account Console is now the `keycloak.v4` theme, based on PatternFly 6.
The previous `keycloak.v3` Account Console theme and the `account:v3` feature value have been removed.

For new realms, `keycloak.v4` is the default Account Console theme when the `account:v4` feature is enabled (the default).
Existing realms that explicitly use `keycloak`, `keycloak.v2`, or `keycloak.v3` as the account theme are migrated to `keycloak.v4` during upgrade.
Custom account themes are left unchanged.

If you maintain a custom Account Console theme that extends or copies `keycloak.v3`, migrate it to PatternFly 6 before switching its parent to `keycloak.v4`.
To assist with migration, use the helper script:

[source,bash]
----
node misc/scripts/migrate-account-ui-pf5-to-pf6.mjs --app-path /path/to/your/theme
----

Run the script in dry-run mode first, review the generated report, and then rerun with `--apply` when ready.
Comment on lines +251 to +258
If you explicitly enable `account:v3` (for example `--features=account:v3` or `KC_FEATURES=account:v3`), replace it with `account:v4`, or remove the entry because `account:v4` is enabled by default.
Servers that still request `account:v3` fail feature validation at startup.

=== Login v1 theme removed
// https://github.com/keycloak/keycloak/issues/43241

Expand Down
2 changes: 1 addition & 1 deletion docs/guides/ui-customization/localization.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ of the realm.
Texts of these message bundles can be overwritten by realm-specific values, which are manageable by the UI and API.

Each theme can have a locale specific description in the message key `theme.<theme-name>.<type>.description`.
For example, use the key `theme.keycloak.v3.account.description` to provide a description for the `keycloak.v3` theme for the Account Console.
For example, use the key `theme.keycloak.v4.account.description` to provide a description for the `keycloak.v4` theme for the Account Console.
As usual, the English message will be the fallback for all other languages.

== Adding a language to a theme
Expand Down
4 changes: 2 additions & 2 deletions docs/translation.md
Original file line number Diff line number Diff line change
Expand Up @@ -128,8 +128,8 @@ Community translations live in parallel `-community` directories.
- Translations: `js/apps/admin-ui/maven-resources-community/theme/keycloak.v2/admin/messages/messages_<lang>.properties`

**Account UI** (the React-based account console):
- English: `js/apps/account-ui/maven-resources/theme/keycloak.v3/account/messages/messages_en.properties`
- Translations: `js/apps/account-ui/maven-resources-community/theme/keycloak.v3/account/messages/messages_<lang>.properties`
- English: `js/apps/account-ui/maven-resources/theme/keycloak.v4/account/messages/messages_en.properties`
- Translations: `js/apps/account-ui/maven-resources-community/theme/keycloak.v4/account/messages/messages_<lang>.properties`

**Login** (login, registration, and related pages):
- English: `themes/src/main/resources/theme/base/login/messages/messages_en.properties`
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -237,7 +237,7 @@ request_not_supported=Sol·licitud no compatible
request_uri_not_supported=URI de sol·licitud no compatible
registration_not_supported=Registre no compatible
pageNotFound=No s’ha trobat la pàgina sol·licitada.
theme.keycloak.v3.account.description=Perfeccionada, la v3 és més cohesiva i dinàmica (predefinida per al compte).
theme.keycloak.v4.account.description=Perfeccionada, la v4 és més cohesiva i dinàmica (predefinida per al compte).
endApplicationSession=Desconnecta la sessió de l’aplicació
endApplicationSessionSuccess=S’ha desconnectat la sessió de l'aplicació {{name}}
endApplicationSessionError=No s’ha pogut desconnectar la sessió de l’aplicació a causa de: {{error}}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -236,7 +236,7 @@ invalid_request_object=Neplatný objekt požadavku
request_not_supported=Požadavek není podporován
request_uri_not_supported=Požadovaná adresa uri není podporována
registration_not_supported=Registrace není podporována
theme.keycloak.v3.account.description=Vylepšená, verze 3 je soudržnější a dynamičtější. (Výchozí pro účet)
theme.keycloak.v4.account.description=Vylepšená, verze 4 je soudržnější a dynamičtější. (Výchozí pro účet)
pageNotFound=Požadovaná stránka nebyla nalezena.
endApplicationSession=Ukončit relaci aplikace
endApplicationSessionSuccess=Relace aplikace {{name}} byla ukončena
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -234,7 +234,7 @@ invalid_request_object=Ungültiges Anfrageobjekt
request_not_supported=Anfrage nicht unterstützt
request_uri_not_supported=Anfrage-URI wird nicht unterstützt
registration_not_supported=Registrierung nicht unterstützt
theme.keycloak.v3.account.description=Verfeinert, v3 ist kohäsiver und dynamischer. (Standard für Konto)
theme.keycloak.v4.account.description=Verfeinert, v4 ist kohäsiver und dynamischer. (Standard für Konto)
pageNotFound=Die angeforderte Seite konnte nicht gefunden werden.
endApplicationSession=Anwendungssitzung beenden
endApplicationSessionSuccess=Anwendungssitzung beendet für {{name}}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -237,4 +237,4 @@ request_not_supported=Solicitud no soportada
request_uri_not_supported=Solicitud de URI no soportada
registration_not_supported=Registración no soportada
pageNotFound=La página solicitada no fue encontrada.
theme.keycloak.v3.account.description=Rediseñado, v3 es más cohesivo y dinámico. (Predeterminado para cuenta)
theme.keycloak.v4.account.description=Rediseñado, v4 es más cohesivo y dinámico. (Predeterminado para cuenta)
Original file line number Diff line number Diff line change
Expand Up @@ -239,4 +239,4 @@ invalid_request_object=شیء نا معتبر درخواست
request_not_supported=درخواست پشتیبانی نمی شود
request_uri_not_supported=آدرس درخواست پشتیبانی نمی شود
registration_not_supported=ثبت نام پشتیبانی نمی شود
theme.keycloak.v3.account.description=اصلاح شده، نسخه 3 منسجم‌تر و پویاتر است. (پیش‌فرض برای حساب)
theme.keycloak.v4.account.description=اصلاح شده، نسخه 4 منسجم‌تر و پویاتر است. (پیش‌فرض برای حساب)
Original file line number Diff line number Diff line change
Expand Up @@ -234,7 +234,7 @@ account_selection_required=Sélection du compte nécessaire
invalid_request=Requête invalide
unauthorized_client=Client non autorisé
interaction_required=Interaction nécessaire
theme.keycloak.v3.account.description=Perfectionnée, la v3 est plus cohérente et dynamique. (Par défaut pour Compte)
theme.keycloak.v4.account.description=Perfectionnée, la v4 est plus cohérente et dynamique. (Par défaut pour Compte)
pageNotFound=La page demandée n'a pas été trouvée.
endApplicationSession=Terminer la session de l'application
endApplicationSessionSuccess=Session de l'application terminée pour {{name}}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -235,7 +235,7 @@ request_uri_not_supported=A kérés URI nem támogatott
registration_not_supported=Regisztráció nem támogatott
pageNotFound=A kért oldal nem található.
updateCredAriaLabel=Hitelesítő adat frissítése
theme.keycloak.v3.account.description=Kifinomultabb, a v3 egységesebb és dinamikusabb. (Alapértelmezett fióktéma)
theme.keycloak.v4.account.description=Kifinomultabb, a v4 egységesebb és dinamikusabb. (Alapértelmezett fióktéma)
endApplicationSession=Alkalmazás-munkamenet befejezése
endApplicationSessionSuccess=A(z) {{name}} alkalmazás munkamenete befejeződött
endApplicationSessionError=Az alkalmazás munkamenetének befejezése sikertelen: {{error}}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -234,5 +234,5 @@ webauthn-help-text=Gunakan Passkey Anda untuk masuk.
webauthn-passwordless-display-name=Passkey
webauthn-passwordless-help-text=Gunakan Passkey Anda untuk masuk tanpa sandi.
passwordless=Tanpa sandi
theme.keycloak.v3.account.description=Dipoles, v3 lebih kohesif dan dinamis. (Baku untuk Akun)
theme.keycloak.v4.account.description=Dipoles, v4 lebih kohesif dan dinamis. (Baku untuk Akun)
pageNotFound=Halaman yang diminta tidak ditemukan.
Original file line number Diff line number Diff line change
Expand Up @@ -237,6 +237,6 @@ registration_not_supported=登録はサポートされていません
webauthn-transports=通信手段
interaction_required=対話が必要です
pageNotFound=要求されたページは見つかりませんでした。
theme.keycloak.v3.account.description=改良されたv3は、より統一感があり、動的です。(アカウントのデフォルト)
theme.keycloak.v4.account.description=改良されたv4は、より統一感があり、動的です。(アカウントのデフォルト)
endApplicationSession=アプリケーションセッションを終了する
endApplicationSessionSuccess={{name}}のアプリケーションセッションを終了しました
Original file line number Diff line number Diff line change
Expand Up @@ -234,5 +234,5 @@ invalid_request_object=არასწორი მოთხოვნის ო
request_not_supported=მოთხოვნა მხარდაჭერილი არაა
request_uri_not_supported=მოთხოვნის uri მხარდაჭერილი არაა
registration_not_supported=რეგისტრაცია მხარდაჭერილი არაა
theme.keycloak.v3.account.description=უფრო ზუსტად v3 უფრო დაკავშირებადი და დინამიკურია (ნაგულისხმევია ანგარიშისთვის)
theme.keycloak.v4.account.description=უფრო ზუსტად v4 უფრო დაკავშირებადი და დინამიკურია (ნაგულისხმევია ანგარიშისთვის)
invalid_request_uri=არასწორი მოთხოვნის uri
Original file line number Diff line number Diff line change
Expand Up @@ -237,4 +237,4 @@ invalid_request_object=잘못된 요청 객체
request_not_supported=지원되지 않는 요청
request_uri_not_supported=지원되지 않는 요청 URI
registration_not_supported=지원되지 않는 등록
theme.keycloak.v3.account.description=디자인을 다듬어 더 일관되고 생동감 있게 만든 v3입니다. (계정 콘솔 기본값)
theme.keycloak.v4.account.description=디자인을 다듬어 더 일관되고 생동감 있게 만든 v4입니다. (계정 콘솔 기본값)
Original file line number Diff line number Diff line change
Expand Up @@ -237,4 +237,4 @@ request_not_supported=Solicitação não suportada
request_uri_not_supported=Uri de requisição não suportada
registration_not_supported=Registro não suportado
pageNotFound=A página solicitada não foi encontrada.
theme.keycloak.v3.account.description=Refinada, a v3 é mais coesa e dinâmica. (Padrão para a conta)
theme.keycloak.v4.account.description=Refinada, a v4 é mais coesa e dinâmica. (Padrão para a conta)
Original file line number Diff line number Diff line change
Expand Up @@ -234,7 +234,7 @@ invalid_request_object=Ogiltigt objekt för begäran
request_not_supported=Begäran stöds inte
request_uri_not_supported=Request uri stöds inte
registration_not_supported=Registrering stöds inte
theme.keycloak.v3.account.description=Förfinad, v3 är mer sammanhängande och dynamisk. (Standard för konto)
theme.keycloak.v4.account.description=Förfinad, v4 är mer sammanhängande och dynamisk. (Standard för konto)
pageNotFound=Den begärda sidan hittades inte.
endApplicationSession=Avsluta programsession
endApplicationSessionSuccess=Programsessionen för {{name}} har avslutats
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -234,7 +234,7 @@ invalid_request_object=Geçersiz istek nesnesi
request_not_supported=İstek desteklenmiyor
request_uri_not_supported=İstek uri'ı desteklenmiyor
registration_not_supported=Kayıt desteklenmiyor
theme.keycloak.v3.account.description=Rafine edilen v3 teması, daha tutarlı ve daha dinamiktir. (Hesap teması için varsayılan değer)
theme.keycloak.v4.account.description=Rafine edilen v4 teması, daha tutarlı ve daha dinamiktir. (Hesap teması için varsayılan değer)
pageNotFound=İstenen sayfa bulunamadı.
endApplicationSession=Uygulama oturumunu sonlandır
endApplicationSessionError=Uygulama oturumu şu nedenle sonlandırılamadı: {{error}}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -247,4 +247,4 @@ termsAndConditionsDeclined=Для продовження потрібно при
pageNotFound=Запитувану сторінку не знайдено.
refresh=Оновити
defaultLocale=Виберіть...
theme.keycloak.v3.account.description=Удосконалена, v3 є більш злагодженою та динамічною. (За замовчуванням для Облікового запису)
theme.keycloak.v4.account.description=Удосконалена, v4 є більш злагодженою та динамічною. (За замовчуванням для Облікового запису)
Original file line number Diff line number Diff line change
Expand Up @@ -236,5 +236,5 @@ invalid_request_object=Request object không hợp lệ
request_not_supported=Yêu cầu không được hỗ trợ
request_uri_not_supported=Request uri không được hỗ trợ
registration_not_supported=Đăng ký không được hỗ trợ
theme.keycloak.v3.account.description=Giao diện tinh gọn, v3 mạch lạc và linh hoạt hơn. (Mặc định cho Account)
theme.keycloak.v4.account.description=Giao diện tinh gọn, v4 mạch lạc và linh hoạt hơn. (Mặc định cho Account)
pageNotFound=Trang được yêu cầu không được tìm thấy.
Original file line number Diff line number Diff line change
Expand Up @@ -234,7 +234,7 @@ request_not_supported=不支援此請求
request_uri_not_supported=不支援此請求 URI
registration_not_supported=不支援註冊
webauthn-transports=傳輸媒介
theme.keycloak.v3.account.description=經過改良的 v3 更一致、更具動態感。(帳號介面預設)
theme.keycloak.v4.account.description=v4 版本經過優化,更具凝聚力且更具動態性。(預設給帳號介面)
pageNotFound=找不到請求的頁面。
endApplicationSession=終止應用程式工作階段
endApplicationSessionSuccess=已為 {{name}} 終止應用程式工作階段
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"themes": [
{
"name": "keycloak.v3",
"name": "keycloak.v4",
Comment thread
edewit marked this conversation as resolved.
Resolved
"types": [
"account"
]
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -135,8 +135,8 @@
<div id="app">
<main class="container">
<div class="keycloak__loading-container">
<svg class="pf-v5-c-spinner pf-m-xl" role="progressbar" aria-valuetext="Loading..." viewBox="0 0 100 100" aria-label="Contents">
<circle class="pf-v5-c-spinner__path" cx="50" cy="50" r="45" fill="none"></circle>
<svg class="pf-v6-c-spinner pf-m-xl" role="progressbar" aria-valuetext="Loading..." viewBox="0 0 100 100" aria-label="Contents">
<circle class="pf-v6-c-spinner__path" cx="50" cy="50" r="45" fill="none"></circle>
</svg>
<div>
<p id="loading-text">Loading the Account Console</p>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -243,4 +243,4 @@ invalid_request_object=Invalid request object
request_not_supported=Request not supported
request_uri_not_supported=Request uri not supported
registration_not_supported=Registration not supported
theme.keycloak.v3.account.description=Refined, v3 is more cohesive and dynamic. (Default for Account)
theme.keycloak.v4.account.description=Refined, v4 is more cohesive and dynamic. (Default for Account)
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
parent=base
deprecatedMode=false
darkMode=true

kcDarkModeClass=pf-v6-theme-dark
contentHashPattern=assets/.*
Loading
Loading
0