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.
97 lines
5.8 KiB
Markdown
97 lines
5.8 KiB
Markdown
# 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.
|