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.
5.8 KiB
Shared navigation layout contract
Core owns NavigationPreferenceEditor, ordered layout resolution, and rail
rendering. Admin, Tenancy, personal Settings and Views reuse this editor. They
own loading, authorization, Save, Reload and dirty-state guards; the editor
emits a draft only after a real edit. A drag onto the same position, keyboard
pickup/drop without movement, and opening inherited settings do not save or
create an override.
Standard layout / Standardanordnung
No configuration is required to enable sections. Installed modules contribute the standard product-area membership, labels, and order: Work; Services and cases; Records and documents; Communication; Meetings and decisions; Data and assurance; People and responsibility. The dashboard stays first; unclassified destinations remain available under More tools. Only nonempty, authorized and View-visible groups appear. Composed product entries keep their placement owner's directly declared area. If none exists, the navigation aliases of other authorized owners preserve area membership. These are live defaults, not a saved copy that needs replacing whenever optional modules change.
The editor explains whether the current level is inherited, custom grouped, or explicitly flat. To restore defaults, choose Use inherited layout and Save on the owning page: personal Settings inherits the tenant, tenant settings inherit the system, and system settings inherit the standard product areas. An explicitly flat personal, tenant, system, or View configuration is never silently replaced with standard groups. A View may also explicitly select flat navigation. Reset the responsible override rather than changing permissions.
Abschnitte sind ohne zusätzliche Konfiguration aktiv. Die Standardanordnung gliedert verfügbare Module in Arbeit; Leistungen und Vorgänge; Akten und Dokumente; Kommunikation; Termine und Entscheidungen; Daten und Qualitätssicherung; Personen und Verantwortung. Das Dashboard steht davor, nicht zugeordnete Ziele bleiben unter Weitere Werkzeuge erreichbar. Leere oder nicht zugängliche Gruppen erscheinen nicht. Der gemeinsame Editor zeigt an, ob eine geerbte, eigene gruppierte oder ausdrücklich ungegliederte Anordnung vorliegt. Geerbte Anordnung verwenden und anschließendes Speichern entfernt nur die Anpassung dieser Ebene: persönlich → Mandant → System → Standardanordnung. Bewusst gespeicherte ungegliederte Anordnungen bleiben erhalten. Diese Darstellung erteilt keine Berechtigungen und ändert keine Daten.
Stored document and precedence
The version-1 navigation document retains order, hidden and locked and
adds optional separators, each containing a stable separator:-prefixed ID
and an optional plain-text label of at most 120 characters. Separator IDs and
module navigation IDs occupy the same order list. Separators are presentation
metadata and never become routes, modules, permissions or authorized surfaces.
Omitting separators or using null preserves inherited grouping. An explicit
empty array removes grouping. Resetting the entire navigation document to null
removes that scope's override. Existing order-only documents remain readable;
the editor materializes group markers into a draft only when edited. Unknown
optional-module order IDs remain stored when currently visible items move, so
uninstalling or temporarily disabling a module does not destroy its preference.
User order and visibility take precedence over tenant and system preferences. System and tenant visibility locks accumulate; lower scopes cannot hide those destinations, but may move them. Views may supply a navigation presentation inside the already authorized and View-filtered destination set. An explicit personal order/layout or visibility preference takes precedence over that presentation, not over authorization or the View's surface restrictions. Views cannot introduce locks. When multiple modules contribute one product entry, it inherits the earliest effective rail position/section and all authorized contributors' locks; this does not change operational route selection. An owner alias in View layout refers to that composed entry.
Interaction and reuse
Drag the handle to move either a module or separator before/after another row. The handle also supports Space to pick up, arrow keys to move, Enter to drop, and Escape to restore the pre-drag draft. Up/down buttons offer the same moves. Add module restores an available hidden entry; Remove only hides navigation, never uninstalls a module or deletes records. Add separator inserts a new optional group label. Remove separator changes grouping only.
Expanded rails display group labels without divider lines. Collapsed rails
replace these labels with horizontal group dividers; empty groups are not
rendered. Both modes use the same resolved order.
The editor receives product-area metadata to show inherited grouping and uses
container-responsive rows rather than a fixed dialog/page width. Its English
and German labels load with the editor, not the initial shell bundle.
Give the ordered list a full-span GridItem when a settings page contains
multiple cards; do not squeeze the entire editor into an otherwise half-empty
two-column settings grid. Central spacing tokens provide real row padding and
separation at both wide and narrow sizes, covered by computed-style assertions.
Verification
Core navigation unit tests and HTTP settings/profile tests cover persistence, separator inheritance, explicit flat layouts, reset and locks. Module-capability tests cover View aliases, composed destinations and personal precedence. The browser conformance suite tests all four editor scopes, pointer/keyboard moves, no-op cleanliness, unavailable-module preservation, collapsed dividers and a German narrow read-only layout. Use the same shared component for future navigation-definition surfaces rather than implementing another sortable list.