diff --git a/package.json b/package.json index 4df8fca..f2030f4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@govoplan/idm-webui", - "version": "0.1.24", + "version": "0.1.25", "private": true, "type": "module", "main": "webui/src/index.ts", @@ -19,7 +19,7 @@ "LICENSE" ], "peerDependencies": { - "@govoplan/core-webui": "^0.1.18", + "@govoplan/core-webui": "^0.1.45", "@vitejs/plugin-react": "^5.2.0", "lucide-react": "^1.23.0", "react": ">=19.2.7 <20", diff --git a/pyproject.toml b/pyproject.toml index 07679b7..e9b0cb5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,13 +4,13 @@ build-backend = "setuptools.build_meta" [project] name = "govoplan-idm" -version = "0.1.24" +version = "0.1.25" description = "GovOPlaN identity management bridge module." readme = "README.md" requires-python = ">=3.12" authors = [{ name = "GovOPlaN" }] dependencies = [ - "govoplan-core>=0.1.29", + "govoplan-core>=0.1.45", "govoplan-identity>=0.1.18", "govoplan-organizations>=0.1.18", ] diff --git a/src/govoplan_idm/backend/manifest.py b/src/govoplan_idm/backend/manifest.py index 730e038..38dfdec 100644 --- a/src/govoplan_idm/backend/manifest.py +++ b/src/govoplan_idm/backend/manifest.py @@ -69,7 +69,7 @@ from govoplan_idm.backend.search_source import create_idm_search_source from govoplan_idm.backend.scim import SCIM_EXTERNAL_PROVIDER_ID -MODULE_VERSION = "0.1.24" +MODULE_VERSION = "0.1.25" IDM_READ_SCOPES = ( "idm:organization_assignment:read", @@ -476,6 +476,21 @@ manifest = ModuleManifest( ), ), documentation=( + DocumentationTopic( + id="idm.workspace-layout", + title="IDM workspace layout", + summary="Find workspace actions and read consistently arranged content.", + body="Function requests and grants, typed groups, effective identity relationships, and function assignments use full-width table cards with consistent spacing. Card headings and actions remain above each table; explanatory taglines are kept out of the table surface. Relationship help still explains the essential boundary: institutional membership does not grant application permissions; Access evaluates authority separately. Administrators retain the existing read, write, request, grant, and decision permissions. Shared Core card and grid layouts replace per-section width or gap workarounds.", + layer="static", + documentation_types=("user", "admin"), + audience=("user", "module_admin", "operator"), + order=5, + translations={"de": { + "title": "Identitätsmanagement: Aufbau des Arbeitsbereichs", + "summary": "Arbeitsbereichsaktionen finden und einheitlich angeordnete Inhalte lesen.", + "body": "Funktionsanträge und -vergaben, typisierte Gruppen, wirksame Identitätsbeziehungen und Funktionszuordnungen verwenden Tabellenkarten über die gesamte Breite mit einheitlichen Abständen. Überschrift und Aktionen bleiben über der jeweiligen Tabelle; erläuternde Unterzeilen entfallen in der Tabellenfläche. Die Beziehungshilfe erklärt weiterhin die wesentliche Grenze: Institutionelle Mitgliedschaft erteilt keine Anwendungsrechte; Access bewertet Berechtigungen getrennt. Administratoren behalten die vorhandenen Lese-, Schreib-, Antrags-, Vergabe- und Entscheidungsrechte. Gemeinsame Core-Karten- und Rasterlayouts ersetzen lokale Breiten- oder Abstandsbehelfe.", + }}, + ), DocumentationTopic( id="idm.scim-provisioning", title="Preview SCIM 2.0 identity provisioning", diff --git a/webui/package.json b/webui/package.json index f4dc0bb..bbc1933 100644 --- a/webui/package.json +++ b/webui/package.json @@ -1,6 +1,6 @@ { "name": "@govoplan/idm-webui", - "version": "0.1.24", + "version": "0.1.25", "private": true, "type": "module", "main": "src/index.ts", @@ -17,7 +17,7 @@ "./styles/idm.css": "./src/styles/idm.css" }, "peerDependencies": { - "@govoplan/core-webui": "^0.1.18", + "@govoplan/core-webui": "^0.1.45", "@vitejs/plugin-react": "^5.2.0", "lucide-react": "^1.23.0", "react": ">=19.2.7 <20", diff --git a/webui/scripts/test-interface-pattern-language.mjs b/webui/scripts/test-interface-pattern-language.mjs index bd01597..e19de6f 100644 --- a/webui/scripts/test-interface-pattern-language.mjs +++ b/webui/scripts/test-interface-pattern-language.mjs @@ -38,5 +38,7 @@ assert(api.includes("/api/v1/idm/typed-groups") && api.includes("/api/v1/idm/rel assert(moduleSource.includes('"idm:relationship:read"') && moduleSource.includes('"idm:relationship:write"'), "Relationship-only administrators can enter the IDM product surface"); assert(translations.includes('"Typed groups and identity relationships": "Typisierte Gruppen und Identitätsbeziehungen"') && translations.includes('"Revoked": "Widerrufen"'), "The relationship administration vocabulary has German reference translations"); assert(!relationships.includes("window.confirm"), "Relationship administration does not use browser-native consequential confirmation"); +assert(relationships.includes('') && (relationships.match(/bodyLayout="table"/g) ?? []).length === 2, "Typed groups and effective relationships use spaced full-width table cards"); +assert(!relationships.includes('className="idm-muted idm-card-note"') && changes.includes('bodyLayout="table"') && page.includes('bodyLayout="table"'), "All IDM collection tables share the table-card treatment without a repeated tagline"); console.log("IDM surfaces satisfy the recorded interface pattern-language contract."); diff --git a/webui/src/features/FunctionAssignmentChangesPanel.tsx b/webui/src/features/FunctionAssignmentChangesPanel.tsx index 238cdb0..652f6f2 100644 --- a/webui/src/features/FunctionAssignmentChangesPanel.tsx +++ b/webui/src/features/FunctionAssignmentChangesPanel.tsx @@ -347,6 +347,7 @@ export default function FunctionAssignmentChangesPanel({ settings, auth, model, <> {error && {error}} - {canReadAssignments &&