critical
#29108
Lightweight UI definition layer (TL Views) based on React UI components
Problem
The current LayoutComponent system combines layout, model binding, data flow, security, commands, lifecycle, and rendering into a single, heavy abstraction. Every configurable UI element must be a full LayoutComponent, even if it only requires one of these capabilities. Layout is limited to horizontal and vertical splitter panels.
This makes the system rigid, difficult to compose, and unnecessarily complex for simple UI definitions.
Solution: TL Views
Introduce a new UIElement-based view definition layer on top of the existing Control infrastructure. The design principle is progressive capability: the base element is nearly zero-cost, and capabilities (model binding, channels, security, commands) are added declaratively only when needed.
UIElement (base — just renders) + model-builder → adds model binding (opt-in) + channel(...) → adds reactive data flow (opt-in) + secure(...) → adds access control (opt-in) + commands(...) → adds action handling (opt-in)
Views are identified by file path (customers/masterDetail.view.xml), eliminating naming conflicts. Data flow uses a unified channel concept for both intra-view and inter-view communication. Commands are scoped to panels with placement-based display and a clique system for ordering and grouping.
A ViewHostComponent bridge and a <legacy-component> adapter ensure coexistence with the existing LayoutComponent system during gradual migration.
Migration
The view layer itself is additive, but a few engine changes made for it affect existing applications:
- Font Awesome stylesheet path. The stylesheet has moved from /style/fontawesome/css/all.css (all.min.css) to /style/fontawesome.css (fontawesome.min.css); the core theme lists the new path. Application themes that do not extend the core theme and specify the stylesheet path themselves, as well as JSPs that reference the old path, must be updated. Icon class names remain unchanged.
- com.top_logic.basic.graph.ExplicitGraph has been moved to com.top_logic.basic.shared.graph.ExplicitGraph (module tl-basic-shared, a dependency of tl-basic): update the import.
- The classes ` TechnicalNamesLabelProvider`, `DefaultNodePortCoordinateAssigner`, ` DefaultNodeSizer`, `JSONDefaultLayoutGraphExporter`, `DiagramTextRenderingConstants `, and ` DiagramTextRenderingUtil ` retain their package `com.top_logic.graph.layouter`... but have been moved from the tl-graph-layouter module to tl-graph-diagramjs-server. An application that accesses them solely through a direct dependency on tl-graph-layouter must add tl-graph-diagramjs-server.
- ModeSelector.traceDependencies(...) and ConstraintCheck.traceDependencies(...) now take an OverlayLookup instead of a FormContext as their last parameter (an AttributeUpdateContainer is an OverlayLookup); ScriptTracer.execute(...) does the same.
- OrientationAware.Orientation is ExternallyNamed: configuration properties of that type are written and read as horizontal / vertical; XML using HORIZONTAL / VERTICAL no longer parses.
- ExternalAuthenticationServlet no longer reuses an existing anonymous session; it now reuses only an authenticated one.
- The generated React bundles under `src/main/webapp/script/` for the React modules are no longer committed (#29547). Outside of Eclipse, run `mvn compile` on the React modules once after a checkout or branch switch. Applications without React modules are unaffected.