fix(ui): align contextual documentation with headings

Verified with the coordinated workspace changes by devkit full run
2026-09-08T225814-186389-0000-3e3ed7cd (all seven phases passed).
This shared UI pass does not mark the individual module reviews complete.
This commit is contained in:
2026-09-09 02:03:47 +02:00
parent ba04593e29
commit e2a39d7c4f
5 changed files with 21 additions and 10 deletions
+8 -2
View File
@@ -480,7 +480,10 @@ manifest = ModuleManifest(
id="idm.workspace-layout", id="idm.workspace-layout",
title="IDM workspace layout", title="IDM workspace layout",
summary="Find workspace actions and read consistently arranged content.", 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.", body="Documentation books sit beside IDM and the relevant governance, request, or relationship "
"heading. Emergency override guidance is attached to that phrase, and field help stays with "
"its label. "
"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", layer="static",
documentation_types=("user", "admin"), documentation_types=("user", "admin"),
audience=("user", "module_admin", "operator"), audience=("user", "module_admin", "operator"),
@@ -488,7 +491,10 @@ manifest = ModuleManifest(
translations={"de": { translations={"de": {
"title": "Identitätsmanagement: Aufbau des Arbeitsbereichs", "title": "Identitätsmanagement: Aufbau des Arbeitsbereichs",
"summary": "Arbeitsbereichsaktionen finden und einheitlich angeordnete Inhalte lesen.", "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.", "body": "Dokumentationsbücher stehen neben IDM und der jeweiligen Überschrift zu Governance, Anfragen "
"oder Beziehungen. Hinweise zu Notfallübersteuerungen stehen direkt an diesem Begriff, und "
"Feldhilfe bleibt bei der Feldbezeichnung. "
"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( DocumentationTopic(
@@ -349,11 +349,11 @@ export default function FunctionAssignmentChangesPanel({ settings, auth, model,
<Card <Card
bodyLayout="table" bodyLayout="table"
title="Function requests and grants" title="Function requests and grants"
titleHelp={<DocumentationHelpLink reference={IDM_GOVERNANCE_DOCUMENTATION} />}
collapsible collapsible
collapseKey="idm.function-assignment-changes" collapseKey="idm.function-assignment-changes"
actions={( actions={(
<div className="button-row compact-actions"> <div className="button-row compact-actions">
<DocumentationHelpLink reference={IDM_GOVERNANCE_DOCUMENTATION} />
{(canRequest || canGrant) ? <AdminIconButton label="Start governed change" icon={<Plus size={16} aria-hidden="true" />} variant="primary" disabled={busy} disabledReason={idmDisabledReason(false, busy)} onClick={openCreate} /> : null} {(canRequest || canGrant) ? <AdminIconButton label="Start governed change" icon={<Plus size={16} aria-hidden="true" />} variant="primary" disabled={busy} disabledReason={idmDisabledReason(false, busy)} onClick={openCreate} /> : null}
</div> </div>
)} )}
+4 -5
View File
@@ -10,6 +10,7 @@ import { FormLayout, ActionToolbar,
Dialog, Dialog,
DismissibleAlert, DismissibleAlert,
DocumentationHelpLink, DocumentationHelpLink,
TextWithHelp,
FormField, FormField,
LoadingFrame, LoadingFrame,
PageScrollViewport, PageScrollViewport,
@@ -696,11 +697,10 @@ export default function IdmPage({ settings, auth }: IdmPageProps) {
<div className="content-pad idm-page"> <div className="content-pad idm-page">
<div className="page-heading split idm-heading"> <div className="page-heading split idm-heading">
<div> <div>
<PageTitle loading={loading}>i18n:govoplan-idm.idm.61f4a7a2</PageTitle> <PageTitle loading={loading} titleHelp={<DocumentationHelpLink reference={IDM_DOCUMENTATION} />}>i18n:govoplan-idm.idm.61f4a7a2</PageTitle>
<p>i18n:govoplan-idm.identity_links_intro.45fed9dd</p> <p>i18n:govoplan-idm.identity_links_intro.45fed9dd</p>
</div> </div>
<ActionToolbar justify="end" className="idm-toolbar"> <ActionToolbar justify="end" className="idm-toolbar">
<DocumentationHelpLink reference={IDM_DOCUMENTATION} />
<Button <Button
type="button" type="button"
onClick={() => requestDiscard(() => void loadData())} onClick={() => requestDiscard(() => void loadData())}
@@ -753,9 +753,9 @@ export default function IdmPage({ settings, auth }: IdmPageProps) {
{canReadSettings && ( {canReadSettings && (
<Card <Card
title="i18n:govoplan-idm.idm_governance.6e4f3251" title="i18n:govoplan-idm.idm_governance.6e4f3251"
titleHelp={<DocumentationHelpLink reference={IDM_GOVERNANCE_DOCUMENTATION} />}
collapsible collapsible
collapseKey="idm.governance" collapseKey="idm.governance"
actions={<DocumentationHelpLink reference={IDM_GOVERNANCE_DOCUMENTATION} />}
> >
<FormLayout columns={2} gap="small" collapseAt="workspace" className="" onSubmit={(event) => { event.preventDefault(); void submitSettings(); }}> <FormLayout columns={2} gap="small" collapseAt="workspace" className="" onSubmit={(event) => { event.preventDefault(); void submitSettings(); }}>
<div className="idm-check-list wide"> <div className="idm-check-list wide">
@@ -946,8 +946,7 @@ export default function IdmPage({ settings, auth }: IdmPageProps) {
{selectedFunctionIsGoverned && ( {selectedFunctionIsGoverned && (
<div className="wide idm-governance-override"> <div className="wide idm-governance-override">
<DismissibleAlert tone="warning" dismissible={false}> <DismissibleAlert tone="warning" dismissible={false}>
Direct changes to this governed function are emergency overrides. Use a request or grant above for the normal process. Direct changes to this governed function are <TextWithHelp help={<DocumentationHelpLink reference={IDM_GOVERNANCE_DOCUMENTATION} />}>emergency overrides</TextWithHelp>. Use a request or grant above for the normal process.
<DocumentationHelpLink reference={IDM_GOVERNANCE_DOCUMENTATION} />
</DismissibleAlert> </DismissibleAlert>
<FormField label="Emergency override reason" documentation={IDM_FIELD_DOCUMENTATION}> <FormField label="Emergency override reason" documentation={IDM_FIELD_DOCUMENTATION}>
<textarea <textarea
@@ -390,11 +390,11 @@ export default function TypedRelationshipsPanel({ settings, auth }: Props) {
<Card <Card
bodyLayout="table" bodyLayout="table"
title="Typed groups" title="Typed groups"
titleHelp={<DocumentationHelpLink reference={IDM_RELATIONSHIP_DOCUMENTATION} />}
collapsible collapsible
collapseKey="idm.typed-groups" collapseKey="idm.typed-groups"
actions={( actions={(
<ActionToolbar justify="end"> <ActionToolbar justify="end">
<DocumentationHelpLink reference={IDM_RELATIONSHIP_DOCUMENTATION} />
<ToggleSwitch <ToggleSwitch
label="Show inactive groups" label="Show inactive groups"
checked={showInactiveGroups} checked={showInactiveGroups}
@@ -424,11 +424,11 @@ export default function TypedRelationshipsPanel({ settings, auth }: Props) {
<Card <Card
bodyLayout="table" bodyLayout="table"
title="Effective identity relationships" title="Effective identity relationships"
titleHelp={<DocumentationHelpLink reference={IDM_RELATIONSHIP_DOCUMENTATION} />}
collapsible collapsible
collapseKey="idm.identity-relationships" collapseKey="idm.identity-relationships"
actions={( actions={(
<ActionToolbar justify="end"> <ActionToolbar justify="end">
<DocumentationHelpLink reference={IDM_RELATIONSHIP_DOCUMENTATION} />
<ToggleSwitch <ToggleSwitch
label="Show revoked relationships" label="Show revoked relationships"
checked={showRevokedRelationships} checked={showRevokedRelationships}
+6
View File
@@ -2,6 +2,9 @@ import type { PlatformTranslations } from "@govoplan/core-webui";
export const generatedTranslations: PlatformTranslations = { export const generatedTranslations: PlatformTranslations = {
en: { en: {
"Direct changes to this governed function are": "Direct changes to this governed function are",
"emergency overrides": "emergency overrides",
". Use a request or grant above for the normal process.": ". Use a request or grant above for the normal process.",
"i18n:govoplan-idm.account.2b2936f8": "Account", "i18n:govoplan-idm.account.2b2936f8": "Account",
"i18n:govoplan-idm.active.7bd0e9f8": "Active", "i18n:govoplan-idm.active.7bd0e9f8": "Active",
"i18n:govoplan-idm.acting_for.8650e6a6": "acting for", "i18n:govoplan-idm.acting_for.8650e6a6": "acting for",
@@ -255,6 +258,9 @@ export const generatedTranslations: PlatformTranslations = {
"You may inspect relationship evidence but not change it.": "You may inspect relationship evidence but not change it." "You may inspect relationship evidence but not change it.": "You may inspect relationship evidence but not change it."
}, },
de: { de: {
"Direct changes to this governed function are": "Direkte Änderungen an dieser gesteuerten Funktion sind",
"emergency overrides": "Notfallübersteuerungen",
". Use a request or grant above for the normal process.": ". Verwenden Sie für den regulären Prozess einen Antrag oder eine Vergabe.",
"i18n:govoplan-idm.account.2b2936f8": "Konto", "i18n:govoplan-idm.account.2b2936f8": "Konto",
"i18n:govoplan-idm.active.7bd0e9f8": "Aktiv", "i18n:govoplan-idm.active.7bd0e9f8": "Aktiv",
"i18n:govoplan-idm.acting_for.8650e6a6": "in Vertretung", "i18n:govoplan-idm.acting_for.8650e6a6": "in Vertretung",